From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniele Ceraolo Spurio Subject: Re: [PATCH v2] drm/i915: Sanitize GuC client initialization Date: Wed, 15 Feb 2017 18:28:59 -0800 Message-ID: <9a46eb2b-a2da-2a8e-deb4-e626f7ed27ab@intel.com> References: <1487080386-16022-1-git-send-email-joonas.lahtinen@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6BFBD6EA1A for ; Thu, 16 Feb 2017 02:29:00 +0000 (UTC) In-Reply-To: <1487080386-16022-1-git-send-email-joonas.lahtinen@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Joonas Lahtinen , Intel graphics driver community testing & development List-Id: intel-gfx@lists.freedesktop.org CgpPbiAxNC8wMi8xNyAwNTo1MywgSm9vbmFzIExhaHRpbmVuIHdyb3RlOgo+IFN0YXJ0ZWQgYWRk aW5nIHByb3BlciB0ZWFyZG93biB0byBndWNfY2xpZW50X2FsbG9jLCBlbmRlZCB1cCByZW1vdmlu Zwo+IHF1aXRlIGEgZmV3IGRlYWQgZW5kcyB3aGVyZSBlcnJvcnMgY29tbXVuaWNhdGluZyB3aXRo IHRoZSBHdUMgd2VyZQo+IHNpbGVudGx5IGlnbm9yZWQuIFRoZXJlIGFsc28gc2VlbWVkIHRvIGJl IHF1aXRlIGEgZmV3IGVycm9ub3VzCj4gdGVhcmRvd24gYWN0aW9ucyBwZXJmb3JtZWQgaW4gY2Fz ZSBvZiBhbiBlcnJvciAob3JkZXJpbmcgd3JvbmcpLgo+Cj4gdjI6Cj4gCS0gSW5jcmVhc2UgZnVu Y3Rpb24gc3ltbWV0cnkvcHJveGltaXR5IChNaWNoYWwvRGFuaWVsZSkKPiAJLSBGaXggX19yZXNl cnZlX2Rvb3JiZWxsIGFjY291bnRpbmcgZm9yIGhpZ2ggcHJpb3JpdHkgKERhbmllbGUpCj4gCS0g Q2FsbCBfX3VwZGF0ZV9kb29yYmVsbF9kZXNjISAoRGFuaWVsZSkKPiAJLSBJc29sYXRlIF9fZ3Vj X3ssZGV9YWxsb2NhdGVfZG9vcmJlbGwgKE1pY2hhbC9EYW5pZWxlKQo+Cj4gU2lnbmVkLW9mZi1i eTogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgo+IENj OiBNaWNoYWwgV2FqZGVjemtvIDxtaWNoYWwud2FqZGVjemtvQGludGVsLmNvbT4KPiBDYzogQXJr YWRpdXN6IEhpbGVyIDxhcmthZGl1c3ouaGlsZXJAaW50ZWwuY29tPgo+IENjOiBPc2NhciBNYXRl byA8b3NjYXIubWF0ZW9AaW50ZWwuY29tPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVy c3VsaW5AaW50ZWwuY29tPgo+IENjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5j by51az4KPiBDYzogRGFuaWVsZSBDZXJhb2xvIFNwdXJpbyA8ZGFuaWVsZS5jZXJhb2xvc3B1cmlv QGludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMg ICAgICAgIHwgICA0ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Np b24uYyB8IDM3MSArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9ndWNfZndpZi5oICAgICAgfCAgIDQgKy0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfdWMuaCAgICAgICAgICAgIHwgIDExICstCj4gIDQgZmlsZXMgY2hhbmdlZCwg MjE1IGluc2VydGlvbnMoKyksIDE3NSBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZGVidWdmcy5jCj4gaW5kZXggY2QwMjNmZC4uZjM5NzJjZiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZGVidWdmcy5jCj4gQEAgLTI0OTIsNyArMjQ5Miw3IEBAIHN0YXRpYyB2b2lkIGk5 MTVfZ3VjX2NsaWVudF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwKPgo+ICAJc2VxX3ByaW50Ziht LCAiXHRQcmlvcml0eSAlZCwgR3VDIGN0eCBpbmRleDogJXUsIFBEIG9mZnNldCAweCV4XG4iLAo+ ICAJCWNsaWVudC0+cHJpb3JpdHksIGNsaWVudC0+Y3R4X2luZGV4LCBjbGllbnQtPnByb2NfZGVz Y19vZmZzZXQpOwo+IC0Jc2VxX3ByaW50ZihtLCAiXHREb29yYmVsbCBpZCAlZCwgb2Zmc2V0OiAw eCV4LCBjb29raWUgMHgleFxuIiwKPiArCXNlcV9wcmludGYobSwgIlx0RG9vcmJlbGwgaWQgJWQs IG9mZnNldDogMHglbHgsIGNvb2tpZSAweCV4XG4iLAo+ICAJCWNsaWVudC0+ZG9vcmJlbGxfaWQs IGNsaWVudC0+ZG9vcmJlbGxfb2Zmc2V0LCBjbGllbnQtPmRvb3JiZWxsX2Nvb2tpZSk7Cj4gIAlz ZXFfcHJpbnRmKG0sICJcdFdRIHNpemUgJWQsIG9mZnNldDogMHgleCwgdGFpbCAlZFxuIiwKPiAg CQljbGllbnQtPndxX3NpemUsIGNsaWVudC0+d3Ffb2Zmc2V0LCBjbGllbnQtPndxX3RhaWwpOwo+ IEBAIC0yNTI3LDcgKzI1MjcsNyBAQCBzdGF0aWMgaW50IGk5MTVfZ3VjX2luZm8oc3RydWN0IHNl cV9maWxlICptLCB2b2lkICpkYXRhKQo+ICAJfQo+Cj4gIAlzZXFfcHJpbnRmKG0sICJEb29yYmVs bCBtYXA6XG4iKTsKPiAtCXNlcV9wcmludGYobSwgIlx0JSpwYlxuIiwgR1VDX01BWF9ET09SQkVM TFMsIGd1Yy0+ZG9vcmJlbGxfYml0bWFwKTsKPiArCXNlcV9wcmludGYobSwgIlx0JSpwYlxuIiwg R1VDX05VTV9ET09SQkVMTFMsIGd1Yy0+ZG9vcmJlbGxfYml0bWFwKTsKPiAgCXNlcV9wcmludGYo bSwgIkRvb3JiZWxsIG5leHQgY2FjaGVsaW5lOiAweCV4XG5cbiIsIGd1Yy0+ZGJfY2FjaGVsaW5l KTsKPgo+ICAJc2VxX3ByaW50ZihtLCAiR3VDIHRvdGFsIGFjdGlvbiBjb3VudDogJWxsdVxuIiwg Z3VjLT5hY3Rpb25fY291bnQpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2d1Y19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJt aXNzaW9uLmMKPiBpbmRleCA4Y2VkOWUyLi4yNThmY2EzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYwo+IEBAIC02MiwyNyArNjIsNzMgQEAKPiAgICoK PiAgICovCj4KPiArc3RhdGljIGlubGluZSBib29sIGlzX2hpZ2hfcHJpb3JpdHkoc3RydWN0IGk5 MTVfZ3VjX2NsaWVudCogY2xpZW50KQo+ICt7Cj4gKwlyZXR1cm4gY2xpZW50LT5wcmlvcml0eSA8 PSBHVUNfQ1RYX1BSSU9SSVRZX0hJR0g7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19yZXNlcnZl X2Rvb3JiZWxsKHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCkKPiArewo+ICsJdW5zaWdu ZWQgbG9uZyBvZmZzZXQ7Cj4gKwl1bnNpZ25lZCBsb25nIGVuZDsKPiArCXUxNiBpZDsKPiArCj4g KwlHRU1fQlVHX09OKGNsaWVudC0+ZG9vcmJlbGxfaWQgIT0gR1VDX0RPT1JCRUxMX0lOVkFMSUQp Owo+ICsKPiArCS8qCj4gKwkgKiBUaGUgYml0bWFwIHRyYWNrcyB3aGljaCBkb29yYmVsbCByZWdp c3RlcnMgYXJlIGN1cnJlbnRseSBpbiB1c2UuCj4gKwkgKiBJdCBpcyBzcGxpdCBpbnRvIHR3byBo YWx2ZXM7IHRoZSBmaXJzdCBoYWxmIGlzIHVzZWQgZm9yIG5vcm1hbAo+ICsJICogcHJpb3JpdHkg Y29udGV4dHMsIHRoZSBzZWNvbmQgaGFsZiBmb3IgaGlnaC1wcmlvcml0eSBvbmVzLgo+ICsJICog Tm90ZSB0aGF0IGxvZ2ljYWxseSBoaWdoZXIgcHJpb3JpdGllcyBhcmUgbnVtZXJpY2FsbHkgbGVz cyB0aGFuCj4gKwkgKiBub3JtYWwgb25lcywgc28gdGhlIHRlc3QgYmVsb3cgbWVhbnMgImlzIGl0 IGhpZ2gtcHJpb3JpdHk/Igo+ICsJICovCj4gKwo+ICsJb2Zmc2V0ID0gMDsKPiArCWVuZCA9IEdV Q19OVU1fRE9PUkJFTExTLzI7Cj4gKwlpZiAoaXNfaGlnaF9wcmlvcml0eShjbGllbnQpKSB7Cj4g KwkJb2Zmc2V0ID0gZW5kOwo+ICsJCWVuZCArPSBvZmZzZXQ7Cj4gKyAgICAgICAgfQo+ICsKPiAr CWlkID0gZmluZF9uZXh0X3plcm9fYml0KGNsaWVudC0+Z3VjLT5kb29yYmVsbF9iaXRtYXAsIG9m ZnNldCwgZW5kKTsKPiArCWlmIChpZCA9PSBlbmQpCj4gKwkJcmV0dXJuIC1FTk9TUEM7Cj4gKwo+ ICsJX19zZXRfYml0KGlkLCBjbGllbnQtPmd1Yy0+ZG9vcmJlbGxfYml0bWFwKTsKPiArCWNsaWVu dC0+ZG9vcmJlbGxfaWQgPSBpZDsKPiArCURSTV9ERUJVR19EUklWRVIoImNsaWVudCAldSAoaGln aCBwcmlvPSVzKSByZXNlcnZlZCBkb29yYmVsbCAlZDogXG4iLAo+ICsJCQkgY2xpZW50LT5jdHhf aW5kZXgsIHllc25vKGlzX2hpZ2hfcHJpb3JpdHkoY2xpZW50KSksCj4gKwkJCSBpZCk7Cj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX191bnJlc2VydmVfZG9vcmJlbGwoc3Ry dWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50KQo+ICt7Cj4gKwlHRU1fQlVHX09OKGNsaWVudC0+ ZG9vcmJlbGxfaWQgPT0gR1VDX0RPT1JCRUxMX0lOVkFMSUQpOwo+ICsKPiArCV9fY2xlYXJfYml0 KGNsaWVudC0+ZG9vcmJlbGxfaWQsIGNsaWVudC0+Z3VjLT5kb29yYmVsbF9iaXRtYXApOwo+ICsJ Y2xpZW50LT5kb29yYmVsbF9pZCA9IEdVQ19ET09SQkVMTF9JTlZBTElEOwo+ICt9Cj4gKwo+ICAv Kgo+ICAgKiBUZWxsIHRoZSBHdUMgdG8gYWxsb2NhdGUgb3IgZGVhbGxvY2F0ZSBhIHNwZWNpZmlj IGRvb3JiZWxsCj4gICAqLwo+Cj4gLXN0YXRpYyBpbnQgZ3VjX2FsbG9jYXRlX2Rvb3JiZWxsKHN0 cnVjdCBpbnRlbF9ndWMgKmd1YywKPiAtCQkJCSBzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpjbGll bnQpCj4gK3N0YXRpYyBpbnQgX19ndWNfYWxsb2NhdGVfZG9vcmJlbGwoc3RydWN0IGludGVsX2d1 YyAqZ3VjLCB1MzIgY3R4X2luZGV4KQo+ICB7Cj4gIAl1MzIgYWN0aW9uW10gPSB7Cj4gIAkJSU5U RUxfR1VDX0FDVElPTl9BTExPQ0FURV9ET09SQkVMTCwKPiAtCQljbGllbnQtPmN0eF9pbmRleAo+ ICsJCWN0eF9pbmRleAo+ICAJfTsKPgo+ICAJcmV0dXJuIGludGVsX2d1Y19zZW5kKGd1YywgYWN0 aW9uLCBBUlJBWV9TSVpFKGFjdGlvbikpOwo+ICB9Cj4KPiAtc3RhdGljIGludCBndWNfcmVsZWFz ZV9kb29yYmVsbChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCj4gLQkJCQlzdHJ1Y3QgaTkxNV9ndWNf Y2xpZW50ICpjbGllbnQpCj4gK3N0YXRpYyBpbnQgX19ndWNfZGVhbGxvY2F0ZV9kb29yYmVsbChz dHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHUzMiBjdHhfaW5kZXgpCj4gIHsKPiAgCXUzMiBhY3Rpb25b XSA9IHsKPiAgCQlJTlRFTF9HVUNfQUNUSU9OX0RFQUxMT0NBVEVfRE9PUkJFTEwsCj4gLQkJY2xp ZW50LT5jdHhfaW5kZXgKPiArCQljdHhfaW5kZXgKPiAgCX07Cj4KPiAgCXJldHVybiBpbnRlbF9n dWNfc2VuZChndWMsIGFjdGlvbiwgQVJSQVlfU0laRShhY3Rpb24pKTsKPiBAQCAtOTUsMTA0ICsx NDEsOTggQEAgc3RhdGljIGludCBndWNfcmVsZWFzZV9kb29yYmVsbChzdHJ1Y3QgaW50ZWxfZ3Vj ICpndWMsCj4gICAqIGNsaWVudCBvYmplY3Qgd2hpY2ggY29udGFpbnMgdGhlIHBhZ2UgYmVpbmcg dXNlZCBmb3IgdGhlIGRvb3JiZWxsCj4gICAqLwo+Cj4gLXN0YXRpYyBpbnQgZ3VjX3VwZGF0ZV9k b29yYmVsbF9pZChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCj4gLQkJCQkgIHN0cnVjdCBpOTE1X2d1 Y19jbGllbnQgKmNsaWVudCwKPiAtCQkJCSAgdTE2IG5ld19pZCkKPiArc3RhdGljIGludCBfX3Vw ZGF0ZV9kb29yYmVsbF9kZXNjKHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCwgdTE2IG5l d19pZCkKPiAgewo+IC0Jc3RydWN0IHNnX3RhYmxlICpzZyA9IGd1Yy0+Y3R4X3Bvb2xfdm1hLT5w YWdlczsKPiAtCXZvaWQgKmRvb3JiZWxsX2JpdG1hcCA9IGd1Yy0+ZG9vcmJlbGxfYml0bWFwOwo+ IC0Jc3RydWN0IGd1Y19kb29yYmVsbF9pbmZvICpkb29yYmVsbDsKPiArCXN0cnVjdCBzZ190YWJs ZSAqc2cgPSBjbGllbnQtPmd1Yy0+Y3R4X3Bvb2xfdm1hLT5wYWdlczsKPiAgCXN0cnVjdCBndWNf Y29udGV4dF9kZXNjIGRlc2M7Cj4gIAlzaXplX3QgbGVuOwo+Cj4gLQlkb29yYmVsbCA9IGNsaWVu dC0+dmFkZHIgKyBjbGllbnQtPmRvb3JiZWxsX29mZnNldDsKPiAtCj4gLQlpZiAoY2xpZW50LT5k b29yYmVsbF9pZCAhPSBHVUNfSU5WQUxJRF9ET09SQkVMTF9JRCAmJgo+IC0JICAgIHRlc3RfYml0 KGNsaWVudC0+ZG9vcmJlbGxfaWQsIGRvb3JiZWxsX2JpdG1hcCkpIHsKPiAtCQkvKiBEZWFjdGl2 YXRlIHRoZSBvbGQgZG9vcmJlbGwgKi8KPiAtCQlkb29yYmVsbC0+ZGJfc3RhdHVzID0gR1VDX0RP T1JCRUxMX0RJU0FCTEVEOwo+IC0JCSh2b2lkKWd1Y19yZWxlYXNlX2Rvb3JiZWxsKGd1YywgY2xp ZW50KTsKPiAtCQlfX2NsZWFyX2JpdChjbGllbnQtPmRvb3JiZWxsX2lkLCBkb29yYmVsbF9iaXRt YXApOwo+IC0JfQo+IC0KPiAgCS8qIFVwZGF0ZSB0aGUgR3VDJ3MgaWRlYSBvZiB0aGUgZG9vcmJl bGwgSUQgKi8KPiAgCWxlbiA9IHNnX3Bjb3B5X3RvX2J1ZmZlcihzZy0+c2dsLCBzZy0+bmVudHMs ICZkZXNjLCBzaXplb2YoZGVzYyksCj4gLQkJCSAgICAgc2l6ZW9mKGRlc2MpICogY2xpZW50LT5j dHhfaW5kZXgpOwo+ICsJCQkJIHNpemVvZihkZXNjKSAqIGNsaWVudC0+Y3R4X2luZGV4KTsKPiAg CWlmIChsZW4gIT0gc2l6ZW9mKGRlc2MpKQo+ICAJCXJldHVybiAtRUZBVUxUOwo+ICsKPiAgCWRl c2MuZGJfaWQgPSBuZXdfaWQ7Cj4gIAlsZW4gPSBzZ19wY29weV9mcm9tX2J1ZmZlcihzZy0+c2ds LCBzZy0+bmVudHMsICZkZXNjLCBzaXplb2YoZGVzYyksCj4gLQkJCSAgICAgc2l6ZW9mKGRlc2Mp ICogY2xpZW50LT5jdHhfaW5kZXgpOwo+ICsJCQkJICAgc2l6ZW9mKGRlc2MpICogY2xpZW50LT5j dHhfaW5kZXgpOwo+ICAJaWYgKGxlbiAhPSBzaXplb2YoZGVzYykpCj4gIAkJcmV0dXJuIC1FRkFV TFQ7Cj4KPiAtCWNsaWVudC0+ZG9vcmJlbGxfaWQgPSBuZXdfaWQ7Cj4gLQlpZiAobmV3X2lkID09 IEdVQ19JTlZBTElEX0RPT1JCRUxMX0lEKQo+IC0JCXJldHVybiAwOwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZ3VjX2Rvb3JiZWxsX2luZm8gKl9fZ2V0X2Rvb3JiZWxs KHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCkKPiArewo+ICsJcmV0dXJuIGNsaWVudC0+ dmFkZHIgKyBjbGllbnQtPmRvb3JiZWxsX29mZnNldDsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wg aGFzX2Rvb3JiZWxsKHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCkKPiArewo+ICsJaWYg KGNsaWVudC0+ZG9vcmJlbGxfaWQgPT0gR1VDX0RPT1JCRUxMX0lOVkFMSUQpCj4gKwkJcmV0dXJu IGZhbHNlOwo+Cj4gLQkvKiBBY3RpdmF0ZSB0aGUgbmV3IGRvb3JiZWxsICovCj4gLQlfX3NldF9i aXQobmV3X2lkLCBkb29yYmVsbF9iaXRtYXApOwo+ICsJcmV0dXJuIHRlc3RfYml0KGNsaWVudC0+ ZG9vcmJlbGxfaWQsIGNsaWVudC0+Z3VjLT5kb29yYmVsbF9iaXRtYXApOwoKU2hvdWxkIHdlIHdh cm4vZ2VtX2J1ZyBpZiBjbGllbnQtPmRvb3JiZWxsX2lkICE9IEdVQ19ET09SQkVMTF9JTlZBTElE IAphbmQgdGhlIGJpdCBpbiBndWMtPmRvb3JiZWxsX2JpdG1hcCBpcyBub3Qgc2V0PyBOb3Qgc3Vy ZSBpZiB5b3UgcGxhbiB0byAKZGVjb3VwbGUgdGhlbSBtb3JlIGluIHRoZSBmdXR1cmUsIGJ1dCB3 aXRoIHRoZSBjdXJyZW50IGNvZGUgaXQgc2hvdWxkIAphbHdheXMgYmUgaW1wb3NzaWJsZSB0byBo YXZlIGEgdmFsaWQgZG9vcmJlbGwgd2l0aG91dCB0aGUgYml0IGluIHRoZSAKYml0bWFzayBiZWlu ZyBzZXQuIE1heWJlIHdlIGNhbiBqdXN0IHJldHVybiBjbGllbnQtPmRvb3JiZWxsX2lkICE9IApH VUNfRE9PUkJFTExfSU5WQUxJRCBoZXJlIGlmIHdlIGhhdmUgbm8gcGxhbiBmb3IgYSBjYXNlIHdo ZXJlIHRoZXkgY2FuIApiZSBvdXQgb2Ygc3luYy4KCj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19j cmVhdGVfZG9vcmJlbGwoc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50KQo+ICt7Cj4gKwlz dHJ1Y3QgZ3VjX2Rvb3JiZWxsX2luZm8gKmRvb3JiZWxsOwo+ICsJaW50IGVycjsKPiArCj4gKwlk b29yYmVsbCA9IF9fZ2V0X2Rvb3JiZWxsKGNsaWVudCk7Cj4gIAlkb29yYmVsbC0+ZGJfc3RhdHVz ID0gR1VDX0RPT1JCRUxMX0VOQUJMRUQ7Cj4gIAlkb29yYmVsbC0+Y29va2llID0gY2xpZW50LT5k b29yYmVsbF9jb29raWU7Cj4gLQlyZXR1cm4gZ3VjX2FsbG9jYXRlX2Rvb3JiZWxsKGd1YywgY2xp ZW50KTsKPiArCj4gKwllcnIgPSBfX2d1Y19hbGxvY2F0ZV9kb29yYmVsbChjbGllbnQtPmd1Yywg Y2xpZW50LT5jdHhfaW5kZXgpOwo+ICsJaWYgKGVycikgewo+ICsJCWRvb3JiZWxsLT5kYl9zdGF0 dXMgPSBHVUNfRE9PUkJFTExfRElTQUJMRUQ7Cj4gKwkJZG9vcmJlbGwtPmNvb2tpZSA9IDA7Cj4g Kwl9Cj4gKwlyZXR1cm4gZXJyOwo+ICB9Cj4KPiAtc3RhdGljIHZvaWQgZ3VjX2Rpc2FibGVfZG9v cmJlbGwoc3RydWN0IGludGVsX2d1YyAqZ3VjLAo+IC0JCQkJIHN0cnVjdCBpOTE1X2d1Y19jbGll bnQgKmNsaWVudCkKPiArc3RhdGljIGludCBfX2Rlc3Ryb3lfZG9vcmJlbGwoc3RydWN0IGk5MTVf Z3VjX2NsaWVudCAqY2xpZW50KQo+ICB7Cj4gLQkodm9pZClndWNfdXBkYXRlX2Rvb3JiZWxsX2lk KGd1YywgY2xpZW50LCBHVUNfSU5WQUxJRF9ET09SQkVMTF9JRCk7Cj4gKwlzdHJ1Y3QgZ3VjX2Rv b3JiZWxsX2luZm8gKmRvb3JiZWxsOwo+Cj4gLQkvKiBYWFg6IHdhaXQgZm9yIGFueSBpbnRlcnJ1 cHRzICovCj4gLQkvKiBYWFg6IHdhaXQgZm9yIHdvcmtxdWV1ZSB0byBkcmFpbiAqLwo+ICsJZG9v cmJlbGwgPSBfX2dldF9kb29yYmVsbChjbGllbnQpOwo+ICsJZG9vcmJlbGwtPmRiX3N0YXR1cyA9 IEdVQ19ET09SQkVMTF9ESVNBQkxFRDsKPiArCWRvb3JiZWxsLT5jb29raWUgPSAwOwo+ICsKCk5v dCBmcm9tIHRoaXMgcGF0Y2ggKGJ1dCBzaW5jZSB3ZSdyZSBhdCBpdC4uLiksIEkgZGlkIGEgYml0 IG9mIGRpZ2dpbmcgCmFuZCBJJ3ZlIGZvdW5kIHRoYXQgZG9vcmJlbGwgcmVsZWFzZSBmbG93IHJl cXVpcmVzIFNXIHRvIHBvbGwgdGhlIApHRU44X0RSQlJFR0woZGJfaWQpIHJlZ2lzdGVyIGFmdGVy IHVwZGF0aW5nIGRvb3JiZWxsLT5kYl9zdGF0dXMgdG8gd2FpdCAKZm9yIHRoZSBHRU44X0RSQl9W QUxJRCBiaXQgdG8gZ28gdG8gemVyby4gVGhpcyBlbnN1cmVzIHRoYXQgYW55IHBlbmRpbmcgCmV2 ZW50cyBhcmUgcHJvY2Vzc2VkIGJlZm9yZSB3ZSBjYWxsIGludG8gR3VDIHRvIHJlbGVhc2UgdGhl IGRvb3JiZWxsLiAKTm90ZSB0aGF0IEd1QyB3aWxsIGZhaWwgdGhlIERFQUxMT0NBVEVfRE9PUkJF TEwgYWN0aW9uIGlmIHRoZSBiaXQgaGFzIApub3QgZ29uZSB0byB6ZXJvIHlldC4gVGhpcyBpcyBj dXJyZW50bHkgbm90IGFuIGlzc3VlLCBwcm9iYWJseSBiZWNhdXNlIAp3ZSB1c2UgYSBzaW5nbGUg ZG9vcmJlbGwgYW5kIHdlIGRvbid0IHJpbmcgaXQgbmVhciByZWxlYXNlIHRpbWUsIGJ1dCB0aGUg CnNpdHVhdGlvbiBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBzbyBJIGJlbGlldmUgaXQgaXMg d29ydGggdG8gZml4IGl0IApub3cuIEkgY2FuIGZvbGxvdyB1cCB3aXRoIGFuIGFkZGl0aW9uYWwg cGF0Y2ggaWYgeW91IHdhbnQgdG8ga2VlcCB0aGlzIApvbmUgYXMgcmVmYWN0b3Jpbmcgb25seS4K Cj4gKwlyZXR1cm4gX19ndWNfZGVhbGxvY2F0ZV9kb29yYmVsbChjbGllbnQtPmd1YywgY2xpZW50 LT5jdHhfaW5kZXgpOwo+ICB9Cj4KPiAtc3RhdGljIHVpbnQxNl90Cj4gLXNlbGVjdF9kb29yYmVs bF9yZWdpc3RlcihzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHVpbnQzMl90IHByaW9yaXR5KQo+ICtz dGF0aWMgaW50IGRlc3Ryb3lfZG9vcmJlbGwoc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50 KQo+ICB7Cj4gLQkvKgo+IC0JICogVGhlIGJpdG1hcCB0cmFja3Mgd2hpY2ggZG9vcmJlbGwgcmVn aXN0ZXJzIGFyZSBjdXJyZW50bHkgaW4gdXNlLgo+IC0JICogSXQgaXMgc3BsaXQgaW50byB0d28g aGFsdmVzOyB0aGUgZmlyc3QgaGFsZiBpcyB1c2VkIGZvciBub3JtYWwKPiAtCSAqIHByaW9yaXR5 IGNvbnRleHRzLCB0aGUgc2Vjb25kIGhhbGYgZm9yIGhpZ2gtcHJpb3JpdHkgb25lcy4KPiAtCSAq IE5vdGUgdGhhdCBsb2dpY2FsbHkgaGlnaGVyIHByaW9yaXRpZXMgYXJlIG51bWVyaWNhbGx5IGxl c3MgdGhhbgo+IC0JICogbm9ybWFsIG9uZXMsIHNvIHRoZSB0ZXN0IGJlbG93IG1lYW5zICJpcyBp dCBoaWdoLXByaW9yaXR5PyIKPiAtCSAqLwo+IC0JY29uc3QgYm9vbCBoaV9wcmkgPSAocHJpb3Jp dHkgPD0gR1VDX0NUWF9QUklPUklUWV9ISUdIKTsKPiAtCWNvbnN0IHVpbnQxNl90IGhhbGYgPSBH VUNfTUFYX0RPT1JCRUxMUyAvIDI7Cj4gLQljb25zdCB1aW50MTZfdCBzdGFydCA9IGhpX3ByaSA/ IGhhbGYgOiAwOwo+IC0JY29uc3QgdWludDE2X3QgZW5kID0gc3RhcnQgKyBoYWxmOwo+IC0JdWlu dDE2X3QgaWQ7Cj4gKwlpbnQgZXJyOwo+Cj4gLQlpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChndWMt PmRvb3JiZWxsX2JpdG1hcCwgZW5kLCBzdGFydCk7Cj4gLQlpZiAoaWQgPT0gZW5kKQo+IC0JCWlk ID0gR1VDX0lOVkFMSURfRE9PUkJFTExfSUQ7Cj4gKwlHRU1fQlVHX09OKCFoYXNfZG9vcmJlbGwo Y2xpZW50KSk7Cj4KPiAtCURSTV9ERUJVR19EUklWRVIoImFzc2lnbmVkICVzIHByaW9yaXR5IGRv b3JiZWxsIGlkIDB4JXhcbiIsCj4gLQkJCWhpX3ByaSA/ICJoaWdoIiA6ICJub3JtYWwiLCBpZCk7 Cj4gKwkvKiBYWFg6IHdhaXQgZm9yIGFueSBpbnRlcnJ1cHRzICovCj4gKwkvKiBYWFg6IHdhaXQg Zm9yIHdvcmtxdWV1ZSB0byBkcmFpbiAqLwo+Cj4gLQlyZXR1cm4gaWQ7Cj4gLX0KPiArCWVyciA9 IF9fZGVzdHJveV9kb29yYmVsbChjbGllbnQpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJy Owo+Cj4gLS8qCj4gLSAqIFNlbGVjdCwgYXNzaWduIGFuZCByZWxhc2UgZG9vcmJlbGwgY2FjaGVs aW5lcwo+IC0gKgo+IC0gKiBUaGVzZSBmdW5jdGlvbnMgdHJhY2sgd2hpY2ggZG9vcmJlbGwgY2Fj aGVsaW5lcyBhcmUgaW4gdXNlLgo+IC0gKiBUaGUgZGF0YSB0aGV5IG1hbmlwdWxhdGUgaXMgcHJv dGVjdGVkIGJ5IHRoZSBpbnRlbF9ndWNfc2VuZCBsb2NrLgo+IC0gKi8KPiArCV9fdW5yZXNlcnZl X2Rvb3JiZWxsKGNsaWVudCk7Cj4KPiAtc3RhdGljIHVpbnQzMl90IHNlbGVjdF9kb29yYmVsbF9j YWNoZWxpbmUoc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fcmVzZXJ2ZV9jYWNoZWxpbmUoc3RydWN0IGludGVsX2d1 YyogZ3VjKQoKInJlc2VydmVfY2FjaGVsaW5lIiBkb2Vzbid0IHJlYWxseSByZWZsZWN0IHdoYXQg aGFwcGVucywgYmVjYXVzZSBtb3JlIApkb29yYmVsbHMgY2FuIHVzZSB0aGUgc2FtZSBjYWNoZWxp bmUgKHdoaWxlIHRoZXkgYXJlIG9uIGRpZmZlcmVudCAKcGh5c2ljYWwgcGFnZXMpIGFuZCB0aGVy ZSBpcyBubyBjb25jZXB0IG9mIHVucmVzZXJ2aW5nIHRoZSBjYWNoZWxpbmUuIApUaGUgaWRlYSBp cyB0byB0cnkgdG8gYXZvaWQgaGF2aW5nIGxvdHMgb2YgZG9vcmJlbGxzIG9uIHRoZSBzYW1lIApj YWNoZWxpbmUgaWYgcG9zc2libGUgdG8gbWFrZSB0aGUgbW9uaXRvcmluZyBtb3JlIGVmZmljaWVu dCBvbiB0aGUgSFcsIApzbyBJJ2Qga2VlcCB0aGUgInNlbGVjdF9jYWNoZWxpbmUiIG5hbWluZyBm b3IgdGhpcyBmdW5jdGlvbi4gV2Ugc2hvdWxkIApwcm9iYWJseSBhbHNvIGxvb2sgYXQgbW9kaWZ5 aW5nIHRoZSBmdW5jdGlvbiB0byB1c2Ugc29tZXRoaW5nIG1vcmUgCmVsYWJvcmF0ZWQgdGhhbiBh IHNpbXBsZSByb3VuZCByb2JpbiBzY2hlbWUgdG8gZW5zdXJlIGRvb3JiZWxscyBhcmUgCmVxdWFs bHkgZGlzdHJpYnVpdGVkIG9uIGNhY2hlbGluZXMsIGJ1dCB0aGF0IGNhbiBwcm9iYWJseSB3YWl0 IHVudGlsIHdlIAp1c2UgbW9yZSBkb29yYmVsbHMuCgo+ICB7Cj4gLQljb25zdCB1aW50MzJfdCBj YWNoZWxpbmVfc2l6ZSA9IGNhY2hlX2xpbmVfc2l6ZSgpOwo+IC0JdWludDMyX3Qgb2Zmc2V0Owo+ ICsJdW5zaWduZWQgbG9uZyBvZmZzZXQ7Cj4KPiAgCS8qIERvb3JiZWxsIHVzZXMgYSBzaW5nbGUg Y2FjaGUgbGluZSB3aXRoaW4gYSBwYWdlICovCj4gIAlvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShn dWMtPmRiX2NhY2hlbGluZSk7Cj4KPiAgCS8qIE1vdmluZyB0byBuZXh0IGNhY2hlIGxpbmUgdG8g cmVkdWNlIGNvbnRlbnRpb24gKi8KPiAtCWd1Yy0+ZGJfY2FjaGVsaW5lICs9IGNhY2hlbGluZV9z aXplOwo+IC0KPiAtCURSTV9ERUJVR19EUklWRVIoInNlbGVjdGVkIGRvb3JiZWxsIGNhY2hlbGlu ZSAweCV4LCBuZXh0IDB4JXgsIGxpbmVzaXplICV1XG4iLAo+IC0JCQlvZmZzZXQsIGd1Yy0+ZGJf Y2FjaGVsaW5lLCBjYWNoZWxpbmVfc2l6ZSk7Cj4gKwlndWMtPmRiX2NhY2hlbGluZSArPSBjYWNo ZV9saW5lX3NpemUoKTsKPgo+ICsJRFJNX0RFQlVHX0RSSVZFUigicmVzZXJ2ZWQgY2FjaGVsaW5l IDB4JWx4LCBuZXh0IDB4JXgsIGxpbmVzaXplICV1XG4iLAo+ICsJCQlvZmZzZXQsIGd1Yy0+ZGJf Y2FjaGVsaW5lLCBjYWNoZV9saW5lX3NpemUoKSk7Cj4gIAlyZXR1cm4gb2Zmc2V0Owo+ICB9Cj4K PiBAQCAtNTg0LDkzICs2MjQsODQgQEAgc3RydWN0IGk5MTVfdm1hICppbnRlbF9ndWNfYWxsb2Nh dGVfdm1hKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTMyIHNpemUpCj4gIAlyZXR1cm4gdm1hOwo+ ICB9Cj4KPiAtc3RhdGljIHZvaWQKPiAtZ3VjX2NsaWVudF9mcmVlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiAtCQlzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpjbGllbnQpCj4g K3N0YXRpYyB2b2lkIGd1Y19jbGllbnRfZnJlZShzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpjbGll bnQpCj4gIHsKPiAtCXN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3VjOwo+IC0K PiAtCWlmICghY2xpZW50KQo+IC0JCXJldHVybjsKPiAtCj4gIAkvKgo+ICAJICogWFhYOiB3YWl0 IGZvciBhbnkgb3V0c3RhbmRpbmcgc3VibWlzc2lvbnMgYmVmb3JlIGZyZWVpbmcgbWVtb3J5Lgo+ ICAJICogQmUgc3VyZSB0byBkcm9wIGFueSBsb2Nrcwo+ICAJICovCj4gLQo+IC0JaWYgKGNsaWVu dC0+dmFkZHIpIHsKPiAtCQkvKgo+IC0JCSAqIElmIHdlIGdvdCBhcyBmYXIgYXMgc2V0dGluZyB1 cCBhIGRvb3JiZWxsLCBtYWtlIHN1cmUgd2UKPiAtCQkgKiBzaHV0IGl0IGRvd24gYmVmb3JlIHVu bWFwcGluZyAmIGRlYWxsb2NhdGluZyB0aGUgbWVtb3J5Lgo+IC0JCSAqLwo+IC0JCWd1Y19kaXNh YmxlX2Rvb3JiZWxsKGd1YywgY2xpZW50KTsKPiAtCj4gLQkJaTkxNV9nZW1fb2JqZWN0X3VucGlu X21hcChjbGllbnQtPnZtYS0+b2JqKTsKPiAtCX0KPiAtCj4gKwlXQVJOX09OKGRlc3Ryb3lfZG9v cmJlbGwoY2xpZW50KSk7Cj4gKwlndWNfY3R4X2Rlc2NfZmluaShjbGllbnQtPmd1YywgY2xpZW50 KTsKPiArCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoY2xpZW50LT52bWEtPm9iaik7Cj4gIAlp OTE1X3ZtYV91bnBpbl9hbmRfcmVsZWFzZSgmY2xpZW50LT52bWEpOwo+IC0KPiAtCWlmIChjbGll bnQtPmN0eF9pbmRleCAhPSBHVUNfSU5WQUxJRF9DVFhfSUQpIHsKPiAtCQlndWNfY3R4X2Rlc2Nf ZmluaShndWMsIGNsaWVudCk7Cj4gLQkJaWRhX3NpbXBsZV9yZW1vdmUoJmd1Yy0+Y3R4X2lkcywg Y2xpZW50LT5jdHhfaW5kZXgpOwo+IC0JfQo+IC0KPiArCWlkYV9zaW1wbGVfcmVtb3ZlKCZjbGll bnQtPmd1Yy0+Y3R4X2lkcywgY2xpZW50LT5jdHhfaW5kZXgpOwo+ICAJa2ZyZWUoY2xpZW50KTsK PiAgfQo+Cj4gIC8qIENoZWNrIHRoYXQgYSBkb29yYmVsbCByZWdpc3RlciBpcyBpbiB0aGUgZXhw ZWN0ZWQgc3RhdGUgKi8KPiAtc3RhdGljIGJvb2wgZ3VjX2Rvb3JiZWxsX2NoZWNrKHN0cnVjdCBp bnRlbF9ndWMgKmd1YywgdWludDE2X3QgZGJfaWQpCj4gK3N0YXRpYyBib29sIGRvb3JiZWxsX29r KHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTE2IGRiX2lkKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMpOwo+IC0JaTkxNV9yZWdfdCBk cmJyZWcgPSBHRU44X0RSQlJFR0woZGJfaWQpOwo+IC0JdWludDMyX3QgdmFsdWUgPSBJOTE1X1JF QUQoZHJicmVnKTsKPiAtCWJvb2wgZW5hYmxlZCA9ICh2YWx1ZSAmIEdVQ19ET09SQkVMTF9FTkFC TEVEKSAhPSAwOwo+IC0JYm9vbCBleHBlY3RlZCA9IHRlc3RfYml0KGRiX2lkLCBndWMtPmRvb3Ji ZWxsX2JpdG1hcCk7Cj4gKwl1MzIgZHJicmVnbDsKPiArCWJvb2wgdmFsaWQ7Cj4gKwo+ICsJR0VN X0JVR19PTihkYl9pZCA+PSBHVUNfRE9PUkJFTExfSU5WQUxJRCk7Cj4KPiAtCWlmIChlbmFibGVk ID09IGV4cGVjdGVkKQo+ICsJZHJicmVnbCA9IEk5MTVfUkVBRChHRU44X0RSQlJFR0woZGJfaWQp KTsKPiArCXZhbGlkID0gZHJicmVnbCAmIEdFTjhfRFJCX1ZBTElEOwo+ICsKPiArCWlmICh0ZXN0 X2JpdChkYl9pZCwgZ3VjLT5kb29yYmVsbF9iaXRtYXApID09IHZhbGlkKQo+ICAJCXJldHVybiB0 cnVlOwo+Cj4gLQlEUk1fREVCVUdfRFJJVkVSKCJEb29yYmVsbCAlZCAocmVnIDB4JXgpIDB4JXgs IHNob3VsZCBiZSAlc1xuIiwKPiAtCQkJIGRiX2lkLCBkcmJyZWcucmVnLCB2YWx1ZSwKPiAtCQkJ IGV4cGVjdGVkID8gImFjdGl2ZSIgOiAiaW5hY3RpdmUiKTsKPiArCURSTV9ERUJVR19EUklWRVIo IkRvb3JiZWxsICVkIGhhcyB1bmV4cGVjdGVkIHN0YXRlICgweCV4KTogdmFsaWQ9JXNcbiIsCj4g KwkJCSBkYl9pZCwgZHJicmVnbCwgeWVzbm8odmFsaWQpKTsKPgo+ICAJcmV0dXJuIGZhbHNlOwo+ ICB9Cj4KPiArc3RhdGljIGludCBfX3Jlc2V0X2Rvb3JiZWxsKHN0cnVjdCBpOTE1X2d1Y19jbGll bnQqIGNsaWVudCwgdTE2IGRiX2lkKQo+ICt7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWVyciA9IF9f dXBkYXRlX2Rvb3JiZWxsX2Rlc2MoY2xpZW50LCBkYl9pZCk7Cj4gKwlpZiAoIWVycikKPiArCQll cnIgPSBfX2NyZWF0ZV9kb29yYmVsbChjbGllbnQpOwo+ICsJaWYgKCFlcnIpCj4gKwkJZXJyID0g X19kZXN0cm95X2Rvb3JiZWxsKGNsaWVudCk7Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsK PiAgLyoKPiAgICogQm9ycm93IHRoZSBmaXJzdCBjbGllbnQgdG8gc2V0IHVwICYgdGVhciBkb3du IGVhY2ggdW51c2VkIGRvb3JiZWxsCj4gICAqIGluIHR1cm4sIHRvIGVuc3VyZSB0aGF0IGFsbCBk b29yYmVsbCBoL3cgaXMgKHJlKWluaXRpYWxpc2VkLgo+ICAgKi8KPiAtc3RhdGljIHZvaWQgZ3Vj X2luaXRfZG9vcmJlbGxfaHcoc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+ICtzdGF0aWMgaW50IGd1 Y19pbml0X2Rvb3JiZWxsX2h3KHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKPiAgewo+ICAJc3RydWN0 IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50ID0gZ3VjLT5leGVjYnVmX2NsaWVudDsKPiAtCXVpbnQx Nl90IGRiX2lkOwo+IC0JaW50IGksIGVycjsKPiArCWludCBlcnI7Cj4gKwlpbnQgaTsKPgo+IC0J Z3VjX2Rpc2FibGVfZG9vcmJlbGwoZ3VjLCBjbGllbnQpOwo+ICsJaWYgKGhhc19kb29yYmVsbChj bGllbnQpKQo+ICsJCWRlc3Ryb3lfZG9vcmJlbGwoY2xpZW50KTsKPgo+IC0JZm9yIChpID0gMDsg aSA8IEdVQ19NQVhfRE9PUkJFTExTOyArK2kpIHsKPiAtCQkvKiBTa2lwIGlmIGRvb3JiZWxsIGlz IE9LICovCj4gLQkJaWYgKGd1Y19kb29yYmVsbF9jaGVjayhndWMsIGkpKQo+ICsJZm9yIChpID0g MDsgaSA8IEdVQ19OVU1fRE9PUkJFTExTOyArK2kpIHsKPiArCQlpZiAoZG9vcmJlbGxfb2soZ3Vj LCBpKSkKPiAgCQkJY29udGludWU7Cj4KCkFzIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgcGF0 Y2ggdmVyc2lvbiwgaGVyZSB3ZSBhc3N1bWUgdGhhdCBhbGwgdGhlIApkb29yYmVsbHMgc2hvdWxk IGJlIGRpc2FibGVkIGFuIHdlIHdhbnQgdG8gcmVzZXQgSFcgdGhhdCBoYXMgYmVlbiBsZWZ0IApl bmFibGVkIGZyb20gcHJldmlvdXMgdXNlcnMsIHNvIHRoZSBkb29yYmVsbF9iaXRtYXAgc2hvdWxk IGJlIGNsZWFyLiAKTWF5YmUgYWRkaW5nIGEgc2ltcGxlCgoJR0VNX0JVR19PTih0ZXN0X2JpdChp LCBndWMtPmRvb3JiZWxsX2JpdG1hcCkpOwoKd2lsbCBoZWxwIG1ha2luZyBzdXJlIHRoYXQgd2Un cmUgbm90IGxlYXZpbmcgYml0cyBzZXQgd2hlbiAKcmVsZWFzaW5nL3Jlc2V0dGluZy4KCj4gLQkJ ZXJyID0gZ3VjX3VwZGF0ZV9kb29yYmVsbF9pZChndWMsIGNsaWVudCwgaSk7Cj4gLQkJaWYgKGVy cikKPiAtCQkJRFJNX0RFQlVHX0RSSVZFUigiRG9vcmJlbGwgJWQgdXBkYXRlIGZhaWxlZCwgZXJy ICVkXG4iLAo+IC0JCQkJCWksIGVycik7Cj4gKwkJZXJyID0gX19yZXNldF9kb29yYmVsbChjbGll bnQsIGkpOwoKSWYgdGhlIHJlc2V0IGZhaWxzIHRoZSBkb29yYmVsbCBpcyBpbiBhIGJhZCBzdGF0 ZSwgc28gaXQgbWlnaHQgYmUgd29ydGggCnRvIGVuc3VyZSB0aGF0IHRoZSBiaXQgaXMgc2V0IGlu IHRoZSBiaXRtYXNrIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCAKYXNzaWduIHRoYXQgZG9vcmJlbGwg dG8gYW55IGNsaWVudCwgYnV0IHdlJ2QgaGF2ZSB0byBtYWtlIHN1cmUgdG8gY2xlYXIgCnRoZSBi aXRtYXNrIG9uIEd1QyByZXNldCAoc2VlIGNvbW1lbnQgYWJvdmUpLgoKPiArCQlXQVJOKGVyciwg IkRvb3JiZWxsICVkIHJlc2V0IGZhaWxlZCwgZXJyICVkXG4iLCBpLCBlcnIpOwo+ICAJfQo+Cj4g LQlkYl9pZCA9IHNlbGVjdF9kb29yYmVsbF9yZWdpc3RlcihndWMsIGNsaWVudC0+cHJpb3JpdHkp Owo+IC0JV0FSTl9PTihkYl9pZCA9PSBHVUNfSU5WQUxJRF9ET09SQkVMTF9JRCk7Cj4gLQo+IC0J ZXJyID0gZ3VjX3VwZGF0ZV9kb29yYmVsbF9pZChndWMsIGNsaWVudCwgZGJfaWQpOwo+ICsJZXJy ID0gX19yZXNlcnZlX2Rvb3JiZWxsKGNsaWVudCk7Cj4gIAlpZiAoZXJyKQo+IC0JCURSTV9XQVJO KCJGYWlsZWQgdG8gcmVzdG9yZSBkb29yYmVsbCB0byAlZCwgZXJyICVkXG4iLAo+IC0JCQkgZGJf aWQsIGVycik7Cj4gKwkJcmV0dXJuIGVycjsKCkNvbnRpbnVpbmcgdGhlIGRpc2N1c3Npb24gZnJv bSB0aGUgcHJldmlvdXMgcGF0Y2ggcmV2aXNpb246Cgo8c25pcD4KID4gU2hvdWxkbid0IHRoaXMg YmUgY3JlYXRlX2Rvb3JiZWxsKCkgaW5zdGVhZCBvZiByZXNlcnZlPwoKVGhhdCB3b3VsZCBlbmQg dXAgY2FsbGluZyB0aGUgX191cGRhdGVfZG9vcmJlbGwsIHdoaWNoIHdlIGNhbid0IGFzIHRoZQpk ZXNjIGlzIGZvciBzb21lIHN0cmFuZ2UgcmVhc29uIG5vdCBtYXBwZWQgeWV0Lgo8L3NuaXA+CgpB cyBmYXIgYXMgSSBjYW4gc2VlLCBldmVyeXRoaW5nIHNob3VsZCBhbHJlYWR5IGJlIGFsbG9jYXRl ZCBhbmQgbWFwcGVkIApoZXJlLiBBcmVuJ3Qgd2UgYW55d2F5IGFscmVhZHkgY2FsbGluZyBfX3Vw ZGF0ZV9kb29yYmVsbCBib3RoIGluIHRoZSAKY2xpZW50X2FsbG9jIGFuZCBpbiBfX3Jlc2V0X2Rv b3JiZWxsIGFib3ZlPwpBbHNvLCB3aGVyZSBhcmUgd2UgcmUtY3JlYXRpbmcgdGhlIGRvb3JiZWxs IHRoYXQgd2UgZGVzdHJveWVkIGF0IHRoZSAKYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbj8KCj4K PiAgCS8qIFJlYWQgYmFjayAmIHZlcmlmeSBhbGwgZG9vcmJlbGwgcmVnaXN0ZXJzICovCj4gLQlm b3IgKGkgPSAwOyBpIDwgR1VDX01BWF9ET09SQkVMTFM7ICsraSkKPiAtCQkodm9pZClndWNfZG9v cmJlbGxfY2hlY2soZ3VjLCBpKTsKPiArCWZvciAoaSA9IDA7IGkgPCBHVUNfTlVNX0RPT1JCRUxM UzsgKytpKQo+ICsJCVdBUk5fT04oIWRvb3JiZWxsX29rKGd1YywgaSkpOwo+ICsKPiArCXJldHVy biAwOwo+ICB9Cj4KPiAgLyoqCj4gQEAgLTY5Niw0OSArNzI3LDQ2IEBAIGd1Y19jbGllbnRfYWxs b2Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJc3RydWN0IGludGVsX2d1 YyAqZ3VjID0gJmRldl9wcml2LT5ndWM7Cj4gIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAgCXZv aWQgKnZhZGRyOwo+IC0JdWludDE2X3QgZGJfaWQ7Cj4gKwlpbnQgcmV0Owo+Cj4gIAljbGllbnQg PSBremFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7Cj4gIAlpZiAoIWNsaWVudCkK PiAtCQlyZXR1cm4gTlVMTDsKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPgo+IC0JY2xp ZW50LT5vd25lciA9IGN0eDsKPiAgCWNsaWVudC0+Z3VjID0gZ3VjOwo+ICsJY2xpZW50LT5vd25l ciA9IGN0eDsKPiAgCWNsaWVudC0+ZW5naW5lcyA9IGVuZ2luZXM7Cj4gIAljbGllbnQtPnByaW9y aXR5ID0gcHJpb3JpdHk7Cj4gLQljbGllbnQtPmRvb3JiZWxsX2lkID0gR1VDX0lOVkFMSURfRE9P UkJFTExfSUQ7Cj4gKwljbGllbnQtPmRvb3JiZWxsX2lkID0gR1VDX0RPT1JCRUxMX0lOVkFMSUQ7 Cj4gKwljbGllbnQtPndxX29mZnNldCA9IEdVQ19EQl9TSVpFOwo+ICsJY2xpZW50LT53cV9zaXpl ID0gR1VDX1dRX1NJWkU7Cj4gKwlzcGluX2xvY2tfaW5pdCgmY2xpZW50LT53cV9sb2NrKTsKPgo+ IC0JY2xpZW50LT5jdHhfaW5kZXggPSAodWludDMyX3QpaWRhX3NpbXBsZV9nZXQoJmd1Yy0+Y3R4 X2lkcywgMCwKPiAtCQkJR1VDX01BWF9HUFVfQ09OVEVYVFMsIEdGUF9LRVJORUwpOwo+IC0JaWYg KGNsaWVudC0+Y3R4X2luZGV4ID49IEdVQ19NQVhfR1BVX0NPTlRFWFRTKSB7Cj4gLQkJY2xpZW50 LT5jdHhfaW5kZXggPSBHVUNfSU5WQUxJRF9DVFhfSUQ7Cj4gLQkJZ290byBlcnI7Cj4gLQl9Cj4g KwlyZXQgPSBpZGFfc2ltcGxlX2dldCgmZ3VjLT5jdHhfaWRzLCAwLCBHVUNfTUFYX0dQVV9DT05U RVhUUywKPiArCQkJCUdGUF9LRVJORUwpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZ290byBlcnJf Y2xpZW50Owo+ICsKPiArCWNsaWVudC0+Y3R4X2luZGV4ID0gcmV0Owo+Cj4gIAkvKiBUaGUgZmly c3QgcGFnZSBpcyBkb29yYmVsbC9wcm9jX2Rlc2MuIFR3byBmb2xsb3dlZCBwYWdlcyBhcmUgd3Eu ICovCj4gIAl2bWEgPSBpbnRlbF9ndWNfYWxsb2NhdGVfdm1hKGd1YywgR1VDX0RCX1NJWkUgKyBH VUNfV1FfU0laRSk7Cj4gLQlpZiAoSVNfRVJSKHZtYSkpCj4gLQkJZ290byBlcnI7Cj4gKwlpZiAo SVNfRVJSKHZtYSkpIHsKPiArCQlyZXQgPSBQVFJfRVJSKHZtYSk7Cj4gKwkJZ290byBlcnJfaWQ7 Cj4gKwl9Cj4KPiAgCS8qIFdlJ2xsIGtlZXAganVzdCB0aGUgZmlyc3QgKGRvb3JiZWxsL3Byb2Mp IHBhZ2UgcGVybWFuZW50bHkga21hcCdkLiAqLwo+ICAJY2xpZW50LT52bWEgPSB2bWE7Cj4KPiAg CXZhZGRyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAodm1hLT5vYmosIEk5MTVfTUFQX1dCKTsK PiAtCWlmIChJU19FUlIodmFkZHIpKQo+IC0JCWdvdG8gZXJyOwo+IC0KPiArCWlmIChJU19FUlIo dmFkZHIpKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUih2YWRkcik7Cj4gKwkJZ290byBlcnJfdm1hOwo+ ICsJfQo+ICAJY2xpZW50LT52YWRkciA9IHZhZGRyOwo+Cj4gLQlzcGluX2xvY2tfaW5pdCgmY2xp ZW50LT53cV9sb2NrKTsKPiAtCWNsaWVudC0+d3Ffb2Zmc2V0ID0gR1VDX0RCX1NJWkU7Cj4gLQlj bGllbnQtPndxX3NpemUgPSBHVUNfV1FfU0laRTsKPiAtCj4gLQlkYl9pZCA9IHNlbGVjdF9kb29y YmVsbF9yZWdpc3RlcihndWMsIGNsaWVudC0+cHJpb3JpdHkpOwo+IC0JaWYgKGRiX2lkID09IEdV Q19JTlZBTElEX0RPT1JCRUxMX0lEKQo+IC0JCS8qIFhYWDogZXZpY3QgYSBkb29yYmVsbCBpbnN0 ZWFkPyAqLwo+IC0JCWdvdG8gZXJyOwo+IC0KPiAtCWNsaWVudC0+ZG9vcmJlbGxfb2Zmc2V0ID0g c2VsZWN0X2Rvb3JiZWxsX2NhY2hlbGluZShndWMpOwo+ICsJY2xpZW50LT5kb29yYmVsbF9vZmZz ZXQgPSBfX3Jlc2VydmVfY2FjaGVsaW5lKGd1Yyk7Cj4KPiAgCS8qCj4gIAkgKiBTaW5jZSB0aGUg ZG9vcmJlbGwgb25seSByZXF1aXJlcyBhIHNpbmdsZSBjYWNoZWxpbmUsIHdlIGNhbiBzYXZlCj4g QEAgLTc1MywyNyArNzgxLDM1IEBAIGd1Y19jbGllbnRfYWxsb2Moc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ICAJZ3VjX3Byb2NfZGVzY19pbml0KGd1YywgY2xpZW50KTsKPiAg CWd1Y19jdHhfZGVzY19pbml0KGd1YywgY2xpZW50KTsKPgo+IC0JLyogRm9yIHJ1bnRpbWUgY2xp ZW50IGFsbG9jYXRpb24gd2UgbmVlZCB0byBlbmFibGUgdGhlIGRvb3JiZWxsLiBOb3QKPiAtCSAq IHJlcXVpcmVkIHlldCBmb3IgdGhlIHN0YXRpYyBleGVjYnVmX2NsaWVudCBhcyB0aGlzIHNwZWNp YWwga2VybmVsCj4gLQkgKiBjbGllbnQgaXMgZW5hYmxlZCBmcm9tIGk5MTVfZ3VjX3N1Ym1pc3Np b25fZW5hYmxlKCkuCj4gLQkgKgo+IC0JICogZ3VjX3VwZGF0ZV9kb29yYmVsbF9pZChndWMsIGNs aWVudCwgZGJfaWQpOwo+IC0JICovCj4gKwkvKiBGb3IgcnVudGltZSBjbGllbnQgYWxsb2NhdGlv biB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgZG9vcmJlbGwuICovCgp0aGlzIGNvbW1lbnQgaXMgYSBi aXQgdW5jbGVhciBub3cgYmVjYXVzZSB5b3UncmUgbm90IGRlZmVycmluZyB0aGUgCmluaXRpYWxp emF0aW9uIG9mIGV4ZWNidWZfY2xpZW50IHRvIGd1Y19pbml0X2Rvb3JiZWxsX2h3IGFueW1vcmUs IHNvIAp0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4gZXhlY2J1Zl9jbGllbnQgYW5kICJy dW50aW1lIiBjbGllbnRzLiAKTWF5YmUgd2UgY2FuIGp1c3QgcmVtb3ZlIHRoZSBjb21tZW50LgpO b3RlIHRoYXQgY3JlYXRpbmcgdGhlIGRvb3JiZWxsIGhlcmUgd2lsbCBjYXVzZSBpdCB0byBiZSBk ZXN0cm95ZWQgYW5kIApyZS1hbGxvY2F0ZWQgd2hlbiBpOTE1X2d1Y19zdWJtaXNzaW9uX2VuYWJs ZSBpcyBjYWxsZWQuIEEgd29ydGggCmNvbXByb21pc2UgSU1PIHRvIGF2b2lkIHNwZWNpYWwgY2Fz ZXMsIGJ1dCB3b3J0aCBwb2ludGluZyBvdXQgOikKClRoYW5rcywKRGFuaWVsZQoKPiArCXJldCA9 IF9fdXBkYXRlX2Rvb3JiZWxsX2Rlc2MoY2xpZW50LCBjbGllbnQtPmRvb3JiZWxsX2lkKTsKPiAr CWlmIChyZXQpCj4gKwkJZ290byBlcnJfdmFkZHI7Cj4gKwo+ICsJcmV0ID0gX19jcmVhdGVfZG9v cmJlbGwoY2xpZW50KTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfZGI7Cj4KPiAgCURSTV9E RUJVR19EUklWRVIoIm5ldyBwcmlvcml0eSAldSBjbGllbnQgJXAgZm9yIGVuZ2luZShzKSAweCV4 OiBjdHhfaW5kZXggJXVcbiIsCj4gLQkJcHJpb3JpdHksIGNsaWVudCwgY2xpZW50LT5lbmdpbmVz LCBjbGllbnQtPmN0eF9pbmRleCk7Cj4gLQlEUk1fREVCVUdfRFJJVkVSKCJkb29yYmVsbCBpZCAl dSwgY2FjaGVsaW5lIG9mZnNldCAweCV4XG4iLAo+IC0JCWNsaWVudC0+ZG9vcmJlbGxfaWQsIGNs aWVudC0+ZG9vcmJlbGxfb2Zmc2V0KTsKPiArCQkJIHByaW9yaXR5LCBjbGllbnQsIGNsaWVudC0+ ZW5naW5lcywgY2xpZW50LT5jdHhfaW5kZXgpOwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiZG9vcmJl bGwgaWQgJXUsIGNhY2hlbGluZSBvZmZzZXQgMHglbHhcbiIsCj4gKwkJCSBjbGllbnQtPmRvb3Ji ZWxsX2lkLCBjbGllbnQtPmRvb3JiZWxsX29mZnNldCk7Cj4KPiAgCXJldHVybiBjbGllbnQ7Cj4g K2Vycl9kYjoKPiArCV9fdXBkYXRlX2Rvb3JiZWxsX2Rlc2MoY2xpZW50LCBHVUNfRE9PUkJFTExf SU5WQUxJRCk7Cj4gK2Vycl92YWRkcjoKPiArCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoY2xp ZW50LT52bWEtPm9iaik7Cj4gK2Vycl92bWE6Cj4gKwlpOTE1X3ZtYV91bnBpbl9hbmRfcmVsZWFz ZSgmY2xpZW50LT52bWEpOwo+ICtlcnJfaWQ6Cj4gKwlpZGFfc2ltcGxlX3JlbW92ZSgmZ3VjLT5j dHhfaWRzLCBjbGllbnQtPmN0eF9pbmRleCk7Cj4gK2Vycl9jbGllbnQ6Cj4gKwlrZnJlZShjbGll bnQpOwo+Cj4gLWVycjoKPiAtCWd1Y19jbGllbnRfZnJlZShkZXZfcHJpdiwgY2xpZW50KTsKPiAt CXJldHVybiBOVUxMOwo+ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAgfQo+Cj4gLQo+IC0KPiAg c3RhdGljIHZvaWQgZ3VjX3BvbGljaWVzX2luaXQoc3RydWN0IGd1Y19wb2xpY2llcyAqcG9saWNp ZXMpCj4gIHsKPiAgCXN0cnVjdCBndWNfcG9saWN5ICpwb2xpY3k7Cj4gQEAgLTg4MSw3ICs5MTcs NyBAQCBpbnQgaTkxNV9ndWNfc3VibWlzc2lvbl9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKPiAgCQlyZXR1cm4gMDsKPgo+ICAJLyogV2lwZSBiaXRtYXAgJiBkZWxldGUg Y2xpZW50IGluIGNhc2Ugb2YgcmVpbml0aWFsaXNhdGlvbiAqLwo+IC0JYml0bWFwX2NsZWFyKGd1 Yy0+ZG9vcmJlbGxfYml0bWFwLCAwLCBHVUNfTUFYX0RPT1JCRUxMUyk7Cj4gKwliaXRtYXBfY2xl YXIoZ3VjLT5kb29yYmVsbF9iaXRtYXAsIDAsIEdVQ19OVU1fRE9PUkJFTExTKTsKPiAgCWk5MTVf Z3VjX3N1Ym1pc3Npb25fZGlzYWJsZShkZXZfcHJpdik7Cj4KPiAgCWlmICghaTkxNS5lbmFibGVf Z3VjX3N1Ym1pc3Npb24pCj4gQEAgLTkzMiwxNCArOTY4LDE5IEBAIGludCBpOTE1X2d1Y19zdWJt aXNzaW9uX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAlzdHJ1 Y3QgaTkxNV9ndWNfY2xpZW50ICpjbGllbnQgPSBndWMtPmV4ZWNidWZfY2xpZW50Owo+ICAJc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICAJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7 Cj4gKwlpbnQgZXJyOwo+Cj4gIAlpZiAoIWNsaWVudCkKPiAgCQlyZXR1cm4gLUVOT0RFVjsKPgo+ IC0JaW50ZWxfZ3VjX3NhbXBsZV9mb3JjZXdha2UoZ3VjKTsKPiArCWVyciA9IGludGVsX2d1Y19z YW1wbGVfZm9yY2V3YWtlKGd1Yyk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4KPiAg CWd1Y19yZXNldF93cShjbGllbnQpOwo+IC0JZ3VjX2luaXRfZG9vcmJlbGxfaHcoZ3VjKTsKPiAr CWVyciA9IGd1Y19pbml0X2Rvb3JiZWxsX2h3KGd1Yyk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVy biBlcnI7Cj4KPiAgCS8qIFRha2Ugb3ZlciBmcm9tIG1hbnVhbCBjb250cm9sIG9mIEVMU1AgKGV4 ZWNsaXN0cykgKi8KPiAgCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpZCkgewo+ IEBAIC05NzgsNyArMTAxOSw3IEBAIHZvaWQgaTkxNV9ndWNfc3VibWlzc2lvbl9maW5pKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCWlmICghY2xpZW50KQo+ICAJCXJldHVy bjsKPgo+IC0JZ3VjX2NsaWVudF9mcmVlKGRldl9wcml2LCBjbGllbnQpOwo+ICsJZ3VjX2NsaWVu dF9mcmVlKGNsaWVudCk7Cj4KPiAgCWk5MTVfdm1hX3VucGluX2FuZF9yZWxlYXNlKCZndWMtPmFk c192bWEpOwo+ICAJaTkxNV92bWFfdW5waW5fYW5kX3JlbGVhc2UoJmd1Yy0+bG9nLnZtYSk7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19md2lmLmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfZndpZi5oCj4gaW5kZXggMjU2OTFmMC4uM2FlOGNl ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfZndpZi5oCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Z3aWYuaAo+IEBAIC0yNDEsOCAr MjQxLDggQEAgdW5pb24gZ3VjX2Rvb3JiZWxsX3F3IHsKPiAgCXU2NCB2YWx1ZV9xdzsKPiAgfSBf X3BhY2tlZDsKPgo+IC0jZGVmaW5lIEdVQ19NQVhfRE9PUkJFTExTCQkyNTYKPiAtI2RlZmluZSBH VUNfSU5WQUxJRF9ET09SQkVMTF9JRAkJKEdVQ19NQVhfRE9PUkJFTExTKQo+ICsjZGVmaW5lIEdV Q19OVU1fRE9PUkJFTExTCTI1Ngo+ICsjZGVmaW5lIEdVQ19ET09SQkVMTF9JTlZBTElECShHVUNf TlVNX0RPT1JCRUxMUykKPgo+ICAjZGVmaW5lIEdVQ19EQl9TSVpFCQkJKFBBR0VfU0laRSkKPiAg I2RlZmluZSBHVUNfV1FfU0laRQkJCShQQUdFX1NJWkUgKiAyKQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf dWMuaAo+IGluZGV4IGQ3NGY0ZDMuLjYwNGU3MWUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfdWMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Vj LmgKPiBAQCAtNzIsMTMgKzcyLDEyIEBAIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgewo+Cj4gIAl1 aW50MzJfdCBlbmdpbmVzOwkJLyogYml0bWFwIG9mIChob3N0KSBlbmdpbmUgaWRzCSovCj4gIAl1 aW50MzJfdCBwcmlvcml0eTsKPiAtCXVpbnQzMl90IGN0eF9pbmRleDsKPiArCXUzMiBjdHhfaW5k ZXg7Cj4gIAl1aW50MzJfdCBwcm9jX2Rlc2Nfb2Zmc2V0Owo+Cj4gLQl1aW50MzJfdCBkb29yYmVs bF9vZmZzZXQ7Cj4gLQl1aW50MzJfdCBkb29yYmVsbF9jb29raWU7Cj4gLQl1aW50MTZfdCBkb29y YmVsbF9pZDsKPiAtCXVpbnQxNl90IHBhZGRpbmdbM107CQkvKiBNYWludGFpbiBhbGlnbm1lbnQJ CSovCj4gKwl1MTYgZG9vcmJlbGxfaWQ7Cj4gKwl1bnNpZ25lZCBsb25nIGRvb3JiZWxsX29mZnNl dDsKPiArCXUzMiBkb29yYmVsbF9jb29raWU7Cj4KPiAgCXNwaW5sb2NrX3Qgd3FfbG9jazsKPiAg CXVpbnQzMl90IHdxX29mZnNldDsKPiBAQCAtMTU5LDcgKzE1OCw3IEBAIHN0cnVjdCBpbnRlbF9n dWMgewo+Cj4gIAlzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpleGVjYnVmX2NsaWVudDsKPgo+IC0J REVDTEFSRV9CSVRNQVAoZG9vcmJlbGxfYml0bWFwLCBHVUNfTUFYX0RPT1JCRUxMUyk7Cj4gKwlE RUNMQVJFX0JJVE1BUChkb29yYmVsbF9iaXRtYXAsIEdVQ19OVU1fRE9PUkJFTExTKTsKPiAgCXVp bnQzMl90IGRiX2NhY2hlbGluZTsJCS8qIEN5Y2xpYyBjb3VudGVyIG1vZCBwYWdlc2l6ZQkqLwo+ Cj4gIAkvKiBBY3Rpb24gc3RhdHVzICYgc3RhdGlzdGljcyAqLwo+Cl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=