From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH v6 3/5] drm/i915/gen11: Convert combo PHY logic to use new 'enum phy' namespace Date: Wed, 04 Sep 2019 16:42:49 +0300 Message-ID: <875zm841pi.fsf@intel.com> References: <20190709183934.445-1-matthew.d.roper@intel.com> <20190709183934.445-4-matthew.d.roper@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 40EFD89483 for ; Wed, 4 Sep 2019 13:42:57 +0000 (UTC) In-Reply-To: <20190709183934.445-4-matthew.d.roper@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matt Roper , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCAwOSBKdWwgMjAxOSwgTWF0dCBSb3BlciA8bWF0dGhldy5kLnJvcGVyQGludGVsLmNv bT4gd3JvdGU6Cj4gQ29udmVydCB0aGUgY29kZSB0aGF0IG9wZXJhdGVzIGRpcmVjdGx5IG9uIGdl bjExIGNvbWJvIFBIWSdzIHRvIHVzZSB0aGUKPiBuZXcgbmFtZXNwYWNlLiAgQ29tYm8gUEhZIHJl Z2lzdGVycyBhcmUgdGhvc2UgbmFtZWQgIklDTF9QT1JUXyoiIHBsdXMKPiBJQ0xfRFBIWV9DSEtO Lgo+Cj4gTm90ZSB0aGF0IGEgbG90IG9mIHRoZSBQSFkgcHJvZ3JhbW1pbmcgaGFwcGVucyBpbiB0 aGUgTUlQSSBEU0kgY29kZS4KPiBGb3IgY2xhcml0eSBJJ3ZlIGFkZGVkIGEgZm9yX2VhY2hfZHNp X3BoeSgpIHRvIGxvb3Agb3ZlciB0aGUgcGh5cyB1c2VkCj4gYnkgRFNJLiAgU2luY2UgRFNJIGFs d2F5cyB1c2VzIEEgJiBCIG9uIGdlbjExLCBwb3J0PXBoeSBpbiBhbGwgY2FzZXMgc28KPiBpdCBk b2Vzbid0IGFjdHVhbGx5IG1hdHRlciB3aGljaCBmb3JtIHdlIHVzZSBpbiB0aGUgRFNJIGNvZGUu ICBJJ3ZlIHVzZWQKPiB0aGUgcGh5IGl0ZXJhdG9yIGluIGNvZGUgdGhhdCdzIGV4cGxpY2l0bHkg d29ya2luZyB3aXRoIHRoZSBjb21ibyBQSFksCj4gYnV0IGxlZnQgdGhlIHJlc3Qgb2YgdGhlIERT SSBjb2RlIHVzaW5nIHRoZSBwb3J0IGl0ZXJhdG9yIGFuZCBuYW1lc3BhY2UKPiB0byBtaW5pbWl6 ZSBwYXRjaCBkZWx0YXMuICBXZSBjYW4gc3dpdGNoIHRoZSByZXN0IG9mIHRoZSBEU0kgY29kZSBv dmVyCj4gdG8gdXNlIHBoeSB0ZXJtaW5vbG9neSBsYXRlciBpZiB0aGlzIHdpbmRzIHVwIGJlaW5n IHRvbyBjb25mdXNpbmcuCgpPbmUgaXRzeS1iaXRzeSBkZXRhaWwsIHdoZXJlIGRvZXMgdGhpcyBp bml0aWFsaXplIGludGVsX2RzaS0+cGh5cz8KTG9va2luZyBhdCB0aGUgY29kZSwgSSdtIHRoaW5r aW5nIG5vd2hlcmUuCgpXZSBoYXZlIGFuIElDTCBEU0kgbWFjaGluZSBpbiBDSSwgd2hpY2ggcmVw b3J0cyBhbGwgZ3JlZW4gb24gdGhpcwpwYXRjaC4uLiBidXQgbW9zdCBsaWtlbHkgdGhlIGRpc3Bs YXkgaXMgYWxsIGJsYWNrIGluc3RlYWQuIERTSSBiZWluZwpEU0ksIGl0IGlzIGVudGlyZWx5IHBv c3NpYmxlIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgd2l0aG91dCBoYXZpbmcgYQpjYW1lcmEg Y2FwdHVyZSB0aGUgZGlzcGxheS4KCkJSLApKYW5pLgoKCj4KPiB2NjogRHJvcCBhbiBpbmNsdWRl IG9mIGRybS9pOTE1X2RybS5oOyB0aGF0IHdhcyBwcmV2aW91c2x5IGluY2x1ZGVkIGp1c3QKPiAg ICAgZm9yIHRoZSBkZWZpbml0aW9uIG9mICdlbnVtIHBvcnQnIHdoaWNoIHRoaXMgcGF0Y2ggcmVt b3ZlcyB0aGUgbmVlZAo+ICAgICBmb3IuICAoSm9zZSkKPgo+IENjOiBKb3PDqSBSb2JlcnRvIGRl IFNvdXphIDxqb3NlLnNvdXphQGludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBNYXR0IFJvcGVy IDxtYXR0aGV3LmQucm9wZXJAaW50ZWwuY29tPgo+IFJldmlld2VkLWJ5OiBWaWxsZSBTeXJqw6Rs w6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+IFJldmlld2VkLWJ5OiBKb3PDqSBS b2JlcnRvIGRlIFNvdXphIDxqb3NlLnNvdXphQGludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pY2xfZHNpLmMgICAgICAgIHwgMTI3ICsrKysrKysrLS0tLS0t LS0KPiAgLi4uL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NvbWJvX3BoeS5jICAgIHwgMTQz ICsrKysrKysrKy0tLS0tLS0tLQo+ICAuLi4vZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY29t Ym9fcGh5LmggICAgfCAgIDQgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kZGkuYyAgICAgIHwgIDQ1ICsrKy0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX2Rpc3BsYXkuaCAgfCAgIDQgKwo+ICAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k aXNwbGF5X3Bvd2VyLmMgICAgfCAgMTYgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kc2kuaCAgICAgIHwgIDEyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cmVnLmggICAgICAgICAgICAgICB8ICA3NCArKysrLS0tLS0KPiAgOCBmaWxlcyBjaGFuZ2VkLCAy MTMgaW5zZXJ0aW9ucygrKSwgMjEyIGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaWNsX2RzaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pY2xfZHNpLmMKPiBpbmRleCA4ZjEzMjRjMmY1MzkuLjRkOTUyYWNjZmFhYSAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ljbF9kc2kuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaWNsX2RzaS5jCj4gQEAgLTIwMiw2MyArMjAy LDYyIEBAIHN0YXRpYyB2b2lkIGRzaV9wcm9ncmFtX3N3aW5nX2FuZF9kZWVtcGhhc2lzKHN0cnVj dCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKPiAgCXN0cnVjdCBpbnRl bF9kc2kgKmludGVsX2RzaSA9IGVuY190b19pbnRlbF9kc2koJmVuY29kZXItPmJhc2UpOwo+IC0J ZW51bSBwb3J0IHBvcnQ7Cj4gKwllbnVtIHBoeSBwaHk7Cj4gIAl1MzIgdG1wOwo+ICAJaW50IGxh bmU7Cj4gIAo+IC0JZm9yX2VhY2hfZHNpX3BvcnQocG9ydCwgaW50ZWxfZHNpLT5wb3J0cykgewo+ IC0KPiArCWZvcl9lYWNoX2RzaV9waHkocGh5LCBpbnRlbF9kc2ktPnBoeXMpIHsKPiAgCQkvKgo+ ICAJCSAqIFByb2dyYW0gdm9sdGFnZSBzd2luZyBhbmQgcHJlLWVtcGhhc2lzIGxldmVsIHZhbHVl cyBhcyBwZXIKPiAgCQkgKiB0YWJsZSBpbiBCU1BFQyB1bmRlciBEREkgYnVmZmVyIHByb2dyYW1p bmcKPiAgCQkgKi8KPiAtCQl0bXAgPSBJOTE1X1JFQUQoSUNMX1BPUlRfVFhfRFc1X0xOMChwb3J0 KSk7Cj4gKwkJdG1wID0gSTkxNV9SRUFEKElDTF9QT1JUX1RYX0RXNV9MTjAocGh5KSk7Cj4gIAkJ dG1wICY9IH4oU0NBTElOR19NT0RFX1NFTF9NQVNLIHwgUlRFUk1fU0VMRUNUX01BU0spOwo+ICAJ CXRtcCB8PSBTQ0FMSU5HX01PREVfU0VMKDB4Mik7Cj4gIAkJdG1wIHw9IFRBUDJfRElTQUJMRSB8 IFRBUDNfRElTQUJMRTsKPiAgCQl0bXAgfD0gUlRFUk1fU0VMRUNUKDB4Nik7Cj4gLQkJSTkxNV9X UklURShJQ0xfUE9SVF9UWF9EVzVfR1JQKHBvcnQpLCB0bXApOwo+ICsJCUk5MTVfV1JJVEUoSUNM X1BPUlRfVFhfRFc1X0dSUChwaHkpLCB0bXApOwo+ICAKPiAtCQl0bXAgPSBJOTE1X1JFQUQoSUNM X1BPUlRfVFhfRFc1X0FVWChwb3J0KSk7Cj4gKwkJdG1wID0gSTkxNV9SRUFEKElDTF9QT1JUX1RY X0RXNV9BVVgocGh5KSk7Cj4gIAkJdG1wICY9IH4oU0NBTElOR19NT0RFX1NFTF9NQVNLIHwgUlRF Uk1fU0VMRUNUX01BU0spOwo+ICAJCXRtcCB8PSBTQ0FMSU5HX01PREVfU0VMKDB4Mik7Cj4gIAkJ dG1wIHw9IFRBUDJfRElTQUJMRSB8IFRBUDNfRElTQUJMRTsKPiAgCQl0bXAgfD0gUlRFUk1fU0VM RUNUKDB4Nik7Cj4gLQkJSTkxNV9XUklURShJQ0xfUE9SVF9UWF9EVzVfQVVYKHBvcnQpLCB0bXAp Owo+ICsJCUk5MTVfV1JJVEUoSUNMX1BPUlRfVFhfRFc1X0FVWChwaHkpLCB0bXApOwo+ICAKPiAt CQl0bXAgPSBJOTE1X1JFQUQoSUNMX1BPUlRfVFhfRFcyX0xOMChwb3J0KSk7Cj4gKwkJdG1wID0g STkxNV9SRUFEKElDTF9QT1JUX1RYX0RXMl9MTjAocGh5KSk7Cj4gIAkJdG1wICY9IH4oU1dJTkdf U0VMX0xPV0VSX01BU0sgfCBTV0lOR19TRUxfVVBQRVJfTUFTSyB8Cj4gIAkJCSBSQ09NUF9TQ0FM QVJfTUFTSyk7Cj4gIAkJdG1wIHw9IFNXSU5HX1NFTF9VUFBFUigweDIpOwo+ICAJCXRtcCB8PSBT V0lOR19TRUxfTE9XRVIoMHgyKTsKPiAgCQl0bXAgfD0gUkNPTVBfU0NBTEFSKDB4OTgpOwo+IC0J CUk5MTVfV1JJVEUoSUNMX1BPUlRfVFhfRFcyX0dSUChwb3J0KSwgdG1wKTsKPiArCQlJOTE1X1dS SVRFKElDTF9QT1JUX1RYX0RXMl9HUlAocGh5KSwgdG1wKTsKPiAgCj4gLQkJdG1wID0gSTkxNV9S RUFEKElDTF9QT1JUX1RYX0RXMl9BVVgocG9ydCkpOwo+ICsJCXRtcCA9IEk5MTVfUkVBRChJQ0xf UE9SVF9UWF9EVzJfQVVYKHBoeSkpOwo+ICAJCXRtcCAmPSB+KFNXSU5HX1NFTF9MT1dFUl9NQVNL IHwgU1dJTkdfU0VMX1VQUEVSX01BU0sgfAo+ICAJCQkgUkNPTVBfU0NBTEFSX01BU0spOwo+ICAJ CXRtcCB8PSBTV0lOR19TRUxfVVBQRVIoMHgyKTsKPiAgCQl0bXAgfD0gU1dJTkdfU0VMX0xPV0VS KDB4Mik7Cj4gIAkJdG1wIHw9IFJDT01QX1NDQUxBUigweDk4KTsKPiAtCQlJOTE1X1dSSVRFKElD TF9QT1JUX1RYX0RXMl9BVVgocG9ydCksIHRtcCk7Cj4gKwkJSTkxNV9XUklURShJQ0xfUE9SVF9U WF9EVzJfQVVYKHBoeSksIHRtcCk7Cj4gIAo+IC0JCXRtcCA9IEk5MTVfUkVBRChJQ0xfUE9SVF9U WF9EVzRfQVVYKHBvcnQpKTsKPiArCQl0bXAgPSBJOTE1X1JFQUQoSUNMX1BPUlRfVFhfRFc0X0FV WChwaHkpKTsKPiAgCQl0bXAgJj0gfihQT1NUX0NVUlNPUl8xX01BU0sgfCBQT1NUX0NVUlNPUl8y X01BU0sgfAo+ICAJCQkgQ1VSU09SX0NPRUZGX01BU0spOwo+ICAJCXRtcCB8PSBQT1NUX0NVUlNP Ul8xKDB4MCk7Cj4gIAkJdG1wIHw9IFBPU1RfQ1VSU09SXzIoMHgwKTsKPiAgCQl0bXAgfD0gQ1VS U09SX0NPRUZGKDB4M2YpOwo+IC0JCUk5MTVfV1JJVEUoSUNMX1BPUlRfVFhfRFc0X0FVWChwb3J0 KSwgdG1wKTsKPiArCQlJOTE1X1dSSVRFKElDTF9QT1JUX1RYX0RXNF9BVVgocGh5KSwgdG1wKTsK PiAgCj4gIAkJZm9yIChsYW5lID0gMDsgbGFuZSA8PSAzOyBsYW5lKyspIHsKPiAgCQkJLyogQnNw ZWM6IG11c3Qgbm90IHVzZSBHUlAgcmVnaXN0ZXIgZm9yIHdyaXRlICovCj4gLQkJCXRtcCA9IEk5 MTVfUkVBRChJQ0xfUE9SVF9UWF9EVzRfTE4obGFuZSwgcG9ydCkpOwo+ICsJCQl0bXAgPSBJOTE1 X1JFQUQoSUNMX1BPUlRfVFhfRFc0X0xOKGxhbmUsIHBoeSkpOwo+ICAJCQl0bXAgJj0gfihQT1NU X0NVUlNPUl8xX01BU0sgfCBQT1NUX0NVUlNPUl8yX01BU0sgfAo+ICAJCQkJIENVUlNPUl9DT0VG Rl9NQVNLKTsKPiAgCQkJdG1wIHw9IFBPU1RfQ1VSU09SXzEoMHgwKTsKPiAgCQkJdG1wIHw9IFBP U1RfQ1VSU09SXzIoMHgwKTsKPiAgCQkJdG1wIHw9IENVUlNPUl9DT0VGRigweDNmKTsKPiAtCQkJ STkxNV9XUklURShJQ0xfUE9SVF9UWF9EVzRfTE4obGFuZSwgcG9ydCksIHRtcCk7Cj4gKwkJCUk5 MTVfV1JJVEUoSUNMX1BPUlRfVFhfRFc0X0xOKGxhbmUsIHBoeSksIHRtcCk7Cj4gIAkJfQo+ICAJ fQo+ICB9Cj4gQEAgLTM2NCwxMCArMzYzLDEwIEBAIHN0YXRpYyB2b2lkIGdlbjExX2RzaV9wb3dl cl91cF9sYW5lcyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKPiAgewo+ICAJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7 Cj4gIAlzdHJ1Y3QgaW50ZWxfZHNpICppbnRlbF9kc2kgPSBlbmNfdG9faW50ZWxfZHNpKCZlbmNv ZGVyLT5iYXNlKTsKPiAtCWVudW0gcG9ydCBwb3J0Owo+ICsJZW51bSBwaHkgcGh5Owo+ICAKPiAt CWZvcl9lYWNoX2RzaV9wb3J0KHBvcnQsIGludGVsX2RzaS0+cG9ydHMpCj4gLQkJaW50ZWxfY29t Ym9fcGh5X3Bvd2VyX3VwX2xhbmVzKGRldl9wcml2LCBwb3J0LCB0cnVlLAo+ICsJZm9yX2VhY2hf ZHNpX3BoeShwaHksIGludGVsX2RzaS0+cGh5cykKPiArCQlpbnRlbF9jb21ib19waHlfcG93ZXJf dXBfbGFuZXMoZGV2X3ByaXYsIHBoeSwgdHJ1ZSwKPiAgCQkJCQkgICAgICAgaW50ZWxfZHNpLT5s YW5lX2NvdW50LCBmYWxzZSk7Cj4gIH0KPiAgCj4gQEAgLTM3NSw0NiArMzc0LDQ2IEBAIHN0YXRp YyB2b2lkIGdlbjExX2RzaV9jb25maWdfcGh5X2xhbmVzX3NlcXVlbmNlKHN0cnVjdCBpbnRlbF9l bmNvZGVyICplbmNvZGVyKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKPiAgCXN0cnVjdCBpbnRlbF9kc2kgKmlu dGVsX2RzaSA9IGVuY190b19pbnRlbF9kc2koJmVuY29kZXItPmJhc2UpOwo+IC0JZW51bSBwb3J0 IHBvcnQ7Cj4gKwllbnVtIHBoeSBwaHk7Cj4gIAl1MzIgdG1wOwo+ICAJaW50IGxhbmU7Cj4gIAo+ ICAJLyogU3RlcCA0YihpKSBzZXQgbG9hZGdlbiBzZWxlY3QgZm9yIHRyYW5zbWl0IGFuZCBhdXgg bGFuZXMgKi8KPiAtCWZvcl9lYWNoX2RzaV9wb3J0KHBvcnQsIGludGVsX2RzaS0+cG9ydHMpIHsK PiAtCQl0bXAgPSBJOTE1X1JFQUQoSUNMX1BPUlRfVFhfRFc0X0FVWChwb3J0KSk7Cj4gKwlmb3Jf ZWFjaF9kc2lfcGh5KHBoeSwgaW50ZWxfZHNpLT5waHlzKSB7Cj4gKwkJdG1wID0gSTkxNV9SRUFE KElDTF9QT1JUX1RYX0RXNF9BVVgocGh5KSk7Cj4gIAkJdG1wICY9IH5MT0FER0VOX1NFTEVDVDsK PiAtCQlJOTE1X1dSSVRFKElDTF9QT1JUX1RYX0RXNF9BVVgocG9ydCksIHRtcCk7Cj4gKwkJSTkx NV9XUklURShJQ0xfUE9SVF9UWF9EVzRfQVVYKHBoeSksIHRtcCk7Cj4gIAkJZm9yIChsYW5lID0g MDsgbGFuZSA8PSAzOyBsYW5lKyspIHsKPiAtCQkJdG1wID0gSTkxNV9SRUFEKElDTF9QT1JUX1RY X0RXNF9MTihsYW5lLCBwb3J0KSk7Cj4gKwkJCXRtcCA9IEk5MTVfUkVBRChJQ0xfUE9SVF9UWF9E VzRfTE4obGFuZSwgcGh5KSk7Cj4gIAkJCXRtcCAmPSB+TE9BREdFTl9TRUxFQ1Q7Cj4gIAkJCWlm IChsYW5lICE9IDIpCj4gIAkJCQl0bXAgfD0gTE9BREdFTl9TRUxFQ1Q7Cj4gLQkJCUk5MTVfV1JJ VEUoSUNMX1BPUlRfVFhfRFc0X0xOKGxhbmUsIHBvcnQpLCB0bXApOwo+ICsJCQlJOTE1X1dSSVRF KElDTF9QT1JUX1RYX0RXNF9MTihsYW5lLCBwaHkpLCB0bXApOwo+ICAJCX0KPiAgCX0KPiAgCj4g IAkvKiBTdGVwIDRiKGlpKSBzZXQgbGF0ZW5jeSBvcHRpbWl6YXRpb24gZm9yIHRyYW5zbWl0IGFu ZCBhdXggbGFuZXMgKi8KPiAtCWZvcl9lYWNoX2RzaV9wb3J0KHBvcnQsIGludGVsX2RzaS0+cG9y dHMpIHsKPiAtCQl0bXAgPSBJOTE1X1JFQUQoSUNMX1BPUlRfVFhfRFcyX0FVWChwb3J0KSk7Cj4g Kwlmb3JfZWFjaF9kc2lfcGh5KHBoeSwgaW50ZWxfZHNpLT5waHlzKSB7Cj4gKwkJdG1wID0gSTkx NV9SRUFEKElDTF9QT1JUX1RYX0RXMl9BVVgocGh5KSk7Cj4gIAkJdG1wICY9IH5GUkNfTEFURU5D WV9PUFRJTV9NQVNLOwo+ICAJCXRtcCB8PSBGUkNfTEFURU5DWV9PUFRJTV9WQUwoMHg1KTsKPiAt CQlJOTE1X1dSSVRFKElDTF9QT1JUX1RYX0RXMl9BVVgocG9ydCksIHRtcCk7Cj4gLQkJdG1wID0g STkxNV9SRUFEKElDTF9QT1JUX1RYX0RXMl9MTjAocG9ydCkpOwo+ICsJCUk5MTVfV1JJVEUoSUNM X1BPUlRfVFhfRFcyX0FVWChwaHkpLCB0bXApOwo+ICsJCXRtcCA9IEk5MTVfUkVBRChJQ0xfUE9S VF9UWF9EVzJfTE4wKHBoeSkpOwo+ICAJCXRtcCAmPSB+RlJDX0xBVEVOQ1lfT1BUSU1fTUFTSzsK PiAgCQl0bXAgfD0gRlJDX0xBVEVOQ1lfT1BUSU1fVkFMKDB4NSk7Cj4gLQkJSTkxNV9XUklURShJ Q0xfUE9SVF9UWF9EVzJfR1JQKHBvcnQpLCB0bXApOwo+ICsJCUk5MTVfV1JJVEUoSUNMX1BPUlRf VFhfRFcyX0dSUChwaHkpLCB0bXApOwo+ICAKPiAgCQkvKiBGb3IgRUhMIHNldCBsYXRlbmN5IG9w dGltaXphdGlvbiBmb3IgUENTX0RXMSBsYW5lcyAqLwo+ICAJCWlmIChJU19FTEtIQVJUTEFLRShk ZXZfcHJpdikpIHsKPiAtCQkJdG1wID0gSTkxNV9SRUFEKElDTF9QT1JUX1BDU19EVzFfQVVYKHBv cnQpKTsKPiArCQkJdG1wID0gSTkxNV9SRUFEKElDTF9QT1JUX1BDU19EVzFfQVVYKHBoeSkpOwo+ ICAJCQl0bXAgJj0gfkxBVEVOQ1lfT1BUSU1fTUFTSzsKPiAgCQkJdG1wIHw9IExBVEVOQ1lfT1BU SU1fVkFMKDApOwo+IC0JCQlJOTE1X1dSSVRFKElDTF9QT1JUX1BDU19EVzFfQVVYKHBvcnQpLCB0 bXApOwo+ICsJCQlJOTE1X1dSSVRFKElDTF9QT1JUX1BDU19EVzFfQVVYKHBoeSksIHRtcCk7Cj4g IAo+IC0JCQl0bXAgPSBJOTE1X1JFQUQoSUNMX1BPUlRfUENTX0RXMV9MTjAocG9ydCkpOwo+ICsJ CQl0bXAgPSBJOTE1X1JFQUQoSUNMX1BPUlRfUENTX0RXMV9MTjAocGh5KSk7Cj4gIAkJCXRtcCAm PSB+TEFURU5DWV9PUFRJTV9NQVNLOwo+ICAJCQl0bXAgfD0gTEFURU5DWV9PUFRJTV9WQUwoMHgx KTsKPiAtCQkJSTkxNV9XUklURShJQ0xfUE9SVF9QQ1NfRFcxX0dSUChwb3J0KSwgdG1wKTsKPiAr CQkJSTkxNV9XUklURShJQ0xfUE9SVF9QQ1NfRFcxX0dSUChwaHkpLCB0bXApOwo+ICAJCX0KPiAg CX0KPiAgCj4gQEAgLTQyNSwxNiArNDI0LDE2IEBAIHN0YXRpYyB2b2lkIGdlbjExX2RzaV92b2x0 YWdlX3N3aW5nX3Byb2dyYW1fc2VxKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQo+ICAJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNl LmRldik7Cj4gIAlzdHJ1Y3QgaW50ZWxfZHNpICppbnRlbF9kc2kgPSBlbmNfdG9faW50ZWxfZHNp KCZlbmNvZGVyLT5iYXNlKTsKPiAgCXUzMiB0bXA7Cj4gLQllbnVtIHBvcnQgcG9ydDsKPiArCWVu dW0gcGh5IHBoeTsKPiAgCj4gIAkvKiBjbGVhciBjb21tb24ga2VlcGVyIGVuYWJsZSBiaXQgKi8K PiAtCWZvcl9lYWNoX2RzaV9wb3J0KHBvcnQsIGludGVsX2RzaS0+cG9ydHMpIHsKPiAtCQl0bXAg PSBJOTE1X1JFQUQoSUNMX1BPUlRfUENTX0RXMV9MTjAocG9ydCkpOwo+ICsJZm9yX2VhY2hfZHNp X3BoeShwaHksIGludGVsX2RzaS0+cGh5cykgewo+ICsJCXRtcCA9IEk5MTVfUkVBRChJQ0xfUE9S VF9QQ1NfRFcxX0xOMChwaHkpKTsKPiAgCQl0bXAgJj0gfkNPTU1PTl9LRUVQRVJfRU47Cj4gLQkJ STkxNV9XUklURShJQ0xfUE9SVF9QQ1NfRFcxX0dSUChwb3J0KSwgdG1wKTsKPiAtCQl0bXAgPSBJ OTE1X1JFQUQoSUNMX1BPUlRfUENTX0RXMV9BVVgocG9ydCkpOwo+ICsJCUk5MTVfV1JJVEUoSUNM X1BPUlRfUENTX0RXMV9HUlAocGh5KSwgdG1wKTsKPiArCQl0bXAgPSBJOTE1X1JFQUQoSUNMX1BP UlRfUENTX0RXMV9BVVgocGh5KSk7Cj4gIAkJdG1wICY9IH5DT01NT05fS0VFUEVSX0VOOwo+IC0J CUk5MTVfV1JJVEUoSUNMX1BPUlRfUENTX0RXMV9BVVgocG9ydCksIHRtcCk7Cj4gKwkJSTkxNV9X UklURShJQ0xfUE9SVF9QQ1NfRFcxX0FVWChwaHkpLCB0bXApOwo+ICAJfQo+ICAKPiAgCS8qCj4g QEAgLTQ0MiwzMyArNDQxLDMzIEBAIHN0YXRpYyB2b2lkIGdlbjExX2RzaV92b2x0YWdlX3N3aW5n X3Byb2dyYW1fc2VxKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQo+ICAJICogTm90ZTog bG9hZGdlbiBzZWxlY3QgcHJvZ3JhbSBpcyBkb25lCj4gIAkgKiBhcyBwYXJ0IG9mIGxhbmUgcGh5 IHNlcXVlbmNlIGNvbmZpZ3VyYXRpb24KPiAgCSAqLwo+IC0JZm9yX2VhY2hfZHNpX3BvcnQocG9y dCwgaW50ZWxfZHNpLT5wb3J0cykgewo+IC0JCXRtcCA9IEk5MTVfUkVBRChJQ0xfUE9SVF9DTF9E VzUocG9ydCkpOwo+ICsJZm9yX2VhY2hfZHNpX3BoeShwaHksIGludGVsX2RzaS0+cGh5cykgewo+ ICsJCXRtcCA9IEk5MTVfUkVBRChJQ0xfUE9SVF9DTF9EVzUocGh5KSk7Cj4gIAkJdG1wIHw9IFNV U19DTE9DS19DT05GSUc7Cj4gLQkJSTkxNV9XUklURShJQ0xfUE9SVF9DTF9EVzUocG9ydCksIHRt cCk7Cj4gKwkJSTkxNV9XUklURShJQ0xfUE9SVF9DTF9EVzUocGh5KSwgdG1wKTsKPiAgCX0KPiAg Cj4gIAkvKiBDbGVhciB0cmFpbmluZyBlbmFibGUgdG8gY2hhbmdlIHN3aW5nIHZhbHVlcyAqLwo+ IC0JZm9yX2VhY2hfZHNpX3BvcnQocG9ydCwgaW50ZWxfZHNpLT5wb3J0cykgewo+IC0JCXRtcCA9 IEk5MTVfUkVBRChJQ0xfUE9SVF9UWF9EVzVfTE4wKHBvcnQpKTsKPiArCWZvcl9lYWNoX2RzaV9w aHkocGh5LCBpbnRlbF9kc2ktPnBoeXMpIHsKPiArCQl0bXAgPSBJOTE1X1JFQUQoSUNMX1BPUlRf VFhfRFc1X0xOMChwaHkpKTsKPiAgCQl0bXAgJj0gflRYX1RSQUlOSU5HX0VOOwo+IC0JCUk5MTVf V1JJVEUoSUNMX1BPUlRfVFhfRFc1X0dSUChwb3J0KSwgdG1wKTsKPiAtCQl0bXAgPSBJOTE1X1JF QUQoSUNMX1BPUlRfVFhfRFc1X0FVWChwb3J0KSk7Cj4gKwkJSTkxNV9XUklURShJQ0xfUE9SVF9U WF9EVzVfR1JQKHBoeSksIHRtcCk7Cj4gKwkJdG1wID0gSTkxNV9SRUFEKElDTF9QT1JUX1RYX0RX NV9BVVgocGh5KSk7Cj4gIAkJdG1wICY9IH5UWF9UUkFJTklOR19FTjsKPiAtCQlJOTE1X1dSSVRF KElDTF9QT1JUX1RYX0RXNV9BVVgocG9ydCksIHRtcCk7Cj4gKwkJSTkxNV9XUklURShJQ0xfUE9S VF9UWF9EVzVfQVVYKHBoeSksIHRtcCk7Cj4gIAl9Cj4gIAo+ICAJLyogUHJvZ3JhbSBzd2luZyBh bmQgZGUtZW1waGFzaXMgKi8KPiAgCWRzaV9wcm9ncmFtX3N3aW5nX2FuZF9kZWVtcGhhc2lzKGVu Y29kZXIpOwo+ICAKPiAgCS8qIFNldCB0cmFpbmluZyBlbmFibGUgdG8gdHJpZ2dlciB1cGRhdGUg Ki8KPiAtCWZvcl9lYWNoX2RzaV9wb3J0KHBvcnQsIGludGVsX2RzaS0+cG9ydHMpIHsKPiAtCQl0 bXAgPSBJOTE1X1JFQUQoSUNMX1BPUlRfVFhfRFc1X0xOMChwb3J0KSk7Cj4gKwlmb3JfZWFjaF9k c2lfcGh5KHBoeSwgaW50ZWxfZHNpLT5waHlzKSB7Cj4gKwkJdG1wID0gSTkxNV9SRUFEKElDTF9Q T1JUX1RYX0RXNV9MTjAocGh5KSk7Cj4gIAkJdG1wIHw9IFRYX1RSQUlOSU5HX0VOOwo+IC0JCUk5 MTVfV1JJVEUoSUNMX1BPUlRfVFhfRFc1X0dSUChwb3J0KSwgdG1wKTsKPiAtCQl0bXAgPSBJOTE1 X1JFQUQoSUNMX1BPUlRfVFhfRFc1X0FVWChwb3J0KSk7Cj4gKwkJSTkxNV9XUklURShJQ0xfUE9S VF9UWF9EVzVfR1JQKHBoeSksIHRtcCk7Cj4gKwkJdG1wID0gSTkxNV9SRUFEKElDTF9QT1JUX1RY X0RXNV9BVVgocGh5KSk7Cj4gIAkJdG1wIHw9IFRYX1RSQUlOSU5HX0VOOwo+IC0JCUk5MTVfV1JJ VEUoSUNMX1BPUlRfVFhfRFc1X0FVWChwb3J0KSwgdG1wKTsKPiArCQlJOTE1X1dSSVRFKElDTF9Q T1JUX1RYX0RXNV9BVVgocGh5KSwgdG1wKTsKPiAgCX0KPiAgfQo+ICAKPiBAQCAtNDk3LDYgKzQ5 Niw3IEBAIHN0YXRpYyB2b2lkIGdlbjExX2RzaV9zZXR1cF9kcGh5X3RpbWluZ3Moc3RydWN0IGlu dGVsX2VuY29kZXIgKmVuY29kZXIpCj4gIAlzdHJ1Y3QgaW50ZWxfZHNpICppbnRlbF9kc2kgPSBl bmNfdG9faW50ZWxfZHNpKCZlbmNvZGVyLT5iYXNlKTsKPiAgCXUzMiB0bXA7Cj4gIAllbnVtIHBv cnQgcG9ydDsKPiArCWVudW0gcGh5IHBoeTsKPiAgCj4gIAkvKiBQcm9ncmFtIFQtSU5JVCBtYXN0 ZXIgcmVnaXN0ZXJzICovCj4gIAlmb3JfZWFjaF9kc2lfcG9ydChwb3J0LCBpbnRlbF9kc2ktPnBv cnRzKSB7Cj4gQEAgLTU0NiwxMCArNTQ2LDEwIEBAIHN0YXRpYyB2b2lkIGdlbjExX2RzaV9zZXR1 cF9kcGh5X3RpbWluZ3Moc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCj4gIAl9Cj4gIAo+ ICAJaWYgKElTX0VMS0hBUlRMQUtFKGRldl9wcml2KSkgewo+IC0JCWZvcl9lYWNoX2RzaV9wb3J0 KHBvcnQsIGludGVsX2RzaS0+cG9ydHMpIHsKPiAtCQkJdG1wID0gSTkxNV9SRUFEKElDTF9EUEhZ X0NIS04ocG9ydCkpOwo+ICsJCWZvcl9lYWNoX2RzaV9waHkocGh5LCBpbnRlbF9kc2ktPnBoeXMp IHsKPiArCQkJdG1wID0gSTkxNV9SRUFEKElDTF9EUEhZX0NIS04ocGh5KSk7Cj4gIAkJCXRtcCB8 PSBJQ0xfRFBIWV9DSEtOX0FGRV9PVkVSX1BQSV9TVFJBUDsKPiAtCQkJSTkxNV9XUklURShJQ0xf RFBIWV9DSEtOKHBvcnQpLCB0bXApOwo+ICsJCQlJOTE1X1dSSVRFKElDTF9EUEhZX0NIS04ocGh5 KSwgdG1wKTsKPiAgCQl9Cj4gIAl9Cj4gIH0KPiBAQCAtNTU5LDE1ICs1NTksMTIgQEAgc3RhdGlj IHZvaWQgZ2VuMTFfZHNpX2dhdGVfY2xvY2tzKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVy KQo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVy LT5iYXNlLmRldik7Cj4gIAlzdHJ1Y3QgaW50ZWxfZHNpICppbnRlbF9kc2kgPSBlbmNfdG9faW50 ZWxfZHNpKCZlbmNvZGVyLT5iYXNlKTsKPiAgCXUzMiB0bXA7Cj4gLQllbnVtIHBvcnQgcG9ydDsK PiAgCWVudW0gcGh5IHBoeTsKPiAgCj4gIAltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHBsbF9sb2Nr KTsKPiAgCXRtcCA9IEk5MTVfUkVBRChJQ0xfRFBDTEtBX0NGR0NSMCk7Cj4gLQlmb3JfZWFjaF9k c2lfcG9ydChwb3J0LCBpbnRlbF9kc2ktPnBvcnRzKSB7Cj4gLQkJcGh5ID0gaW50ZWxfcG9ydF90 b19waHkoZGV2X3ByaXYsIHBvcnQpOwo+ICsJZm9yX2VhY2hfZHNpX3BoeShwaHksIGludGVsX2Rz aS0+cGh5cykKPiAgCQl0bXAgfD0gSUNMX0RQQ0xLQV9DRkdDUjBfRERJX0NMS19PRkYocGh5KTsK PiAtCX0KPiAgCj4gIAlJOTE1X1dSSVRFKElDTF9EUENMS0FfQ0ZHQ1IwLCB0bXApOwo+ICAJbXV0 ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHBsbF9sb2NrKTsKPiBAQCAtNTc4LDE1ICs1NzUsMTIgQEAg c3RhdGljIHZvaWQgZ2VuMTFfZHNpX3VuZ2F0ZV9jbG9ja3Moc3RydWN0IGludGVsX2VuY29kZXIg KmVuY29kZXIpCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGVuY29kZXItPmJhc2UuZGV2KTsKPiAgCXN0cnVjdCBpbnRlbF9kc2kgKmludGVsX2RzaSA9IGVu Y190b19pbnRlbF9kc2koJmVuY29kZXItPmJhc2UpOwo+ICAJdTMyIHRtcDsKPiAtCWVudW0gcG9y dCBwb3J0Owo+ICAJZW51bSBwaHkgcGh5Owo+ICAKPiAgCW11dGV4X2xvY2soJmRldl9wcml2LT5k cGxsX2xvY2spOwo+ICAJdG1wID0gSTkxNV9SRUFEKElDTF9EUENMS0FfQ0ZHQ1IwKTsKPiAtCWZv cl9lYWNoX2RzaV9wb3J0KHBvcnQsIGludGVsX2RzaS0+cG9ydHMpIHsKPiAtCQlwaHkgPSBpbnRl bF9wb3J0X3RvX3BoeShkZXZfcHJpdiwgcG9ydCk7Cj4gKwlmb3JfZWFjaF9kc2lfcGh5KHBoeSwg aW50ZWxfZHNpLT5waHlzKQo+ICAJCXRtcCAmPSB+SUNMX0RQQ0xLQV9DRkdDUjBfRERJX0NMS19P RkYocGh5KTsKPiAtCX0KPiAgCj4gIAlJOTE1X1dSSVRFKElDTF9EUENMS0FfQ0ZHQ1IwLCB0bXAp Owo+ICAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHBsbF9sb2NrKTsKPiBAQCAtNTk4LDIyICs1 OTIsMTkgQEAgc3RhdGljIHZvaWQgZ2VuMTFfZHNpX21hcF9wbGwoc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXIsCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGVuY29kZXItPmJhc2UuZGV2KTsKPiAgCXN0cnVjdCBpbnRlbF9kc2kgKmludGVsX2RzaSA9 IGVuY190b19pbnRlbF9kc2koJmVuY29kZXItPmJhc2UpOwo+ICAJc3RydWN0IGludGVsX3NoYXJl ZF9kcGxsICpwbGwgPSBjcnRjX3N0YXRlLT5zaGFyZWRfZHBsbDsKPiAtCWVudW0gcG9ydCBwb3J0 Owo+ICAJZW51bSBwaHkgcGh5Owo+ICAJdTMyIHZhbDsKPiAgCj4gIAltdXRleF9sb2NrKCZkZXZf cHJpdi0+ZHBsbF9sb2NrKTsKPiAgCj4gIAl2YWwgPSBJOTE1X1JFQUQoSUNMX0RQQ0xLQV9DRkdD UjApOwo+IC0JZm9yX2VhY2hfZHNpX3BvcnQocG9ydCwgaW50ZWxfZHNpLT5wb3J0cykgewo+IC0J CXBoeSA9IGludGVsX3BvcnRfdG9fcGh5KGRldl9wcml2LCBwb3J0KTsKPiArCWZvcl9lYWNoX2Rz aV9waHkocGh5LCBpbnRlbF9kc2ktPnBoeXMpIHsKPiAgCQl2YWwgJj0gfklDTF9EUENMS0FfQ0ZH Q1IwX0RESV9DTEtfU0VMX01BU0socGh5KTsKPiAgCQl2YWwgfD0gSUNMX0RQQ0xLQV9DRkdDUjBf RERJX0NMS19TRUwocGxsLT5pbmZvLT5pZCwgcGh5KTsKPiAgCX0KPiAgCUk5MTVfV1JJVEUoSUNM X0RQQ0xLQV9DRkdDUjAsIHZhbCk7Cj4gIAo+IC0JZm9yX2VhY2hfZHNpX3BvcnQocG9ydCwgaW50 ZWxfZHNpLT5wb3J0cykgewo+IC0JCXBoeSA9IGludGVsX3BvcnRfdG9fcGh5KGRldl9wcml2LCBw b3J0KTsKPiArCWZvcl9lYWNoX2RzaV9waHkocGh5LCBpbnRlbF9kc2ktPnBoeXMpIHsKPiAgCQl2 YWwgJj0gfklDTF9EUENMS0FfQ0ZHQ1IwX0RESV9DTEtfT0ZGKHBoeSk7Cj4gIAl9Cj4gIAlJOTE1 X1dSSVRFKElDTF9EUENMS0FfQ0ZHQ1IwLCB2YWwpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2NvbWJvX3BoeS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9jb21ib19waHkuYwo+IGluZGV4IGQzZDUyNDQ3NjVlNi4uYWM4MjE4 YTA0MGFiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf Y29tYm9fcGh5LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Nv bWJvX3BoeS5jCj4gQEAgLTYsMTMgKzYsMTMgQEAKPiAgI2luY2x1ZGUgImludGVsX2NvbWJvX3Bo eS5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gIAo+IC0jZGVmaW5lIGZvcl9lYWNoX2Nv bWJvX3BvcnQoX19kZXZfcHJpdiwgX19wb3J0KSBcCj4gLQlmb3IgKChfX3BvcnQpID0gUE9SVF9B OyAoX19wb3J0KSA8IEk5MTVfTUFYX1BPUlRTOyAoX19wb3J0KSsrKQlcCj4gLQkJZm9yX2VhY2hf aWYoaW50ZWxfcG9ydF9pc19jb21ib3BoeShfX2Rldl9wcml2LCBfX3BvcnQpKQo+ICsjZGVmaW5l IGZvcl9lYWNoX2NvbWJvX3BoeShfX2Rldl9wcml2LCBfX3BoeSkgXAo+ICsJZm9yICgoX19waHkp ID0gUEhZX0E7IChfX3BoeSkgPCBJOTE1X01BWF9QSFlTOyAoX19waHkpKyspCVwKPiArCQlmb3Jf ZWFjaF9pZihpbnRlbF9waHlfaXNfY29tYm8oX19kZXZfcHJpdiwgX19waHkpKQo+ICAKPiAtI2Rl ZmluZSBmb3JfZWFjaF9jb21ib19wb3J0X3JldmVyc2UoX19kZXZfcHJpdiwgX19wb3J0KSBcCj4g LQlmb3IgKChfX3BvcnQpID0gSTkxNV9NQVhfUE9SVFM7IChfX3BvcnQpLS0gPiBQT1JUX0E7KSBc Cj4gLQkJZm9yX2VhY2hfaWYoaW50ZWxfcG9ydF9pc19jb21ib3BoeShfX2Rldl9wcml2LCBfX3Bv cnQpKQo+ICsjZGVmaW5lIGZvcl9lYWNoX2NvbWJvX3BoeV9yZXZlcnNlKF9fZGV2X3ByaXYsIF9f cGh5KSBcCj4gKwlmb3IgKChfX3BoeSkgPSBJOTE1X01BWF9QSFlTOyAoX19waHkpLS0gPiBQSFlf QTspIFwKPiArCQlmb3JfZWFjaF9pZihpbnRlbF9waHlfaXNfY29tYm8oX19kZXZfcHJpdiwgX19w aHkpKQo+ICAKPiAgZW51bSB7Cj4gIAlQUk9DTU9OXzBfODVWX0RPVF8wLAo+IEBAIC0zOCwxOCAr MzgsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbmxfcHJvY21vbiB7Cj4gIH07Cj4gIAo+ICAv Kgo+IC0gKiBDTkwgaGFzIGp1c3Qgb25lIHNldCBvZiByZWdpc3RlcnMsIHdoaWxlIElDTCBoYXMg dHdvIHNldHM6IG9uZSBmb3IgcG9ydCBBIGFuZAo+IC0gKiB0aGUgb3RoZXIgZm9yIHBvcnQgQi4g VGhlIENOTCByZWdpc3RlcnMgYXJlIGVxdWl2YWxlbnQgdG8gdGhlIElDTCBwb3J0IEEKPiAtICog cmVnaXN0ZXJzLCB0aGF0J3Mgd2h5IHdlIGNhbGwgdGhlIElDTCBtYWNyb3MgZXZlbiB0aG91Z2gg dGhlIGZ1bmN0aW9uIGhhcyBDTkwKPiAtICogb24gaXRzIG5hbWUuCj4gKyAqIENOTCBoYXMganVz dCBvbmUgc2V0IG9mIHJlZ2lzdGVycywgd2hpbGUgZ2VuMTEgaGFzIGEgc2V0IGZvciBlYWNoIGNv bWJvIFBIWS4KPiArICogVGhlIENOTCByZWdpc3RlcnMgYXJlIGVxdWl2YWxlbnQgdG8gdGhlIGdl bjExIFBIWSBBIHJlZ2lzdGVycywgdGhhdCdzIHdoeSB3ZQo+ICsgKiBjYWxsIHRoZSBJQ0wgbWFj cm9zIGV2ZW4gdGhvdWdoIHRoZSBmdW5jdGlvbiBoYXMgQ05MIG9uIGl0cyBuYW1lLgo+ICAgKi8K PiAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbmxfcHJvY21vbiAqCj4gLWNubF9nZXRfcHJvY21vbl9y ZWZfdmFsdWVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwb3J0IHBv cnQpCj4gK2NubF9nZXRfcHJvY21vbl9yZWZfdmFsdWVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgZW51bSBwaHkgcGh5KQo+ICB7Cj4gIAljb25zdCBzdHJ1Y3QgY25sX3Byb2Nt b24gKnByb2Ntb247Cj4gIAl1MzIgdmFsOwo+ICAKPiAtCXZhbCA9IEk5MTVfUkVBRChJQ0xfUE9S VF9DT01QX0RXMyhwb3J0KSk7Cj4gKwl2YWwgPSBJOTE1X1JFQUQoSUNMX1BPUlRfQ09NUF9EVzMo cGh5KSk7Cj4gIAlzd2l0Y2ggKHZhbCAmIChQUk9DRVNTX0lORk9fTUFTSyB8IFZPTFRBR0VfSU5G T19NQVNLKSkgewo+ICAJZGVmYXVsdDoKPiAgCQlNSVNTSU5HX0NBU0UodmFsKTsKPiBAQCAtNzUs MzIgKzc0LDMyIEBAIGNubF9nZXRfcHJvY21vbl9yZWZfdmFsdWVzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwgZW51bSBwb3J0IHBvcnQpCj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lk IGNubF9zZXRfcHJvY21vbl9yZWZfdmFsdWVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiAtCQkJCSAgICAgICBlbnVtIHBvcnQgcG9ydCkKPiArCQkJCSAgICAgICBlbnVtIHBo eSBwaHkpCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBjbmxfcHJvY21vbiAqcHJvY21vbjsKPiAgCXUz MiB2YWw7Cj4gIAo+IC0JcHJvY21vbiA9IGNubF9nZXRfcHJvY21vbl9yZWZfdmFsdWVzKGRldl9w cml2LCBwb3J0KTsKPiArCXByb2Ntb24gPSBjbmxfZ2V0X3Byb2Ntb25fcmVmX3ZhbHVlcyhkZXZf cHJpdiwgcGh5KTsKPiAgCj4gLQl2YWwgPSBJOTE1X1JFQUQoSUNMX1BPUlRfQ09NUF9EVzEocG9y dCkpOwo+ICsJdmFsID0gSTkxNV9SRUFEKElDTF9QT1JUX0NPTVBfRFcxKHBoeSkpOwo+ICAJdmFs ICY9IH4oKDB4ZmYgPDwgMTYpIHwgMHhmZik7Cj4gIAl2YWwgfD0gcHJvY21vbi0+ZHcxOwo+IC0J STkxNV9XUklURShJQ0xfUE9SVF9DT01QX0RXMShwb3J0KSwgdmFsKTsKPiArCUk5MTVfV1JJVEUo SUNMX1BPUlRfQ09NUF9EVzEocGh5KSwgdmFsKTsKPiAgCj4gLQlJOTE1X1dSSVRFKElDTF9QT1JU X0NPTVBfRFc5KHBvcnQpLCBwcm9jbW9uLT5kdzkpOwo+IC0JSTkxNV9XUklURShJQ0xfUE9SVF9D T01QX0RXMTAocG9ydCksIHByb2Ntb24tPmR3MTApOwo+ICsJSTkxNV9XUklURShJQ0xfUE9SVF9D T01QX0RXOShwaHkpLCBwcm9jbW9uLT5kdzkpOwo+ICsJSTkxNV9XUklURShJQ0xfUE9SVF9DT01Q X0RXMTAocGh5KSwgcHJvY21vbi0+ZHcxMCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyBib29sIGNoZWNr X3BoeV9yZWcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkgIGVudW0g cG9ydCBwb3J0LCBpOTE1X3JlZ190IHJlZywgdTMyIG1hc2ssCj4gKwkJCSAgZW51bSBwaHkgcGh5 LCBpOTE1X3JlZ190IHJlZywgdTMyIG1hc2ssCj4gIAkJCSAgdTMyIGV4cGVjdGVkX3ZhbCkKPiAg ewo+ICAJdTMyIHZhbCA9IEk5MTVfUkVBRChyZWcpOwo+ICAKPiAgCWlmICgodmFsICYgbWFzaykg IT0gZXhwZWN0ZWRfdmFsKSB7Cj4gLQkJRFJNX0RFQlVHX0RSSVZFUigiUG9ydCAlYyBjb21ibyBQ SFkgcmVnICUwOHggc3RhdGUgbWlzbWF0Y2g6ICIKPiArCQlEUk1fREVCVUdfRFJJVkVSKCJDb21i byBQSFkgJWMgcmVnICUwOHggc3RhdGUgbWlzbWF0Y2g6ICIKPiAgCQkJCSAiY3VycmVudCAlMDh4 IG1hc2sgJTA4eCBleHBlY3RlZCAlMDh4XG4iLAo+IC0JCQkJIHBvcnRfbmFtZShwb3J0KSwKPiAr CQkJCSBwaHlfbmFtZShwaHkpLAo+ICAJCQkJIHJlZy5yZWcsIHZhbCwgbWFzaywgZXhwZWN0ZWRf dmFsKTsKPiAgCQlyZXR1cm4gZmFsc2U7Cj4gIAl9Cj4gQEAgLTEwOSwxOCArMTA4LDE4IEBAIHN0 YXRpYyBib29sIGNoZWNrX3BoeV9yZWcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+ICB9Cj4gIAo+ICBzdGF0aWMgYm9vbCBjbmxfdmVyaWZ5X3Byb2Ntb25fcmVmX3ZhbHVlcyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCQkJICBlbnVtIHBvcnQgcG9y dCkKPiArCQkJCQkgIGVudW0gcGh5IHBoeSkKPiAgewo+ICAJY29uc3Qgc3RydWN0IGNubF9wcm9j bW9uICpwcm9jbW9uOwo+ICAJYm9vbCByZXQ7Cj4gIAo+IC0JcHJvY21vbiA9IGNubF9nZXRfcHJv Y21vbl9yZWZfdmFsdWVzKGRldl9wcml2LCBwb3J0KTsKPiArCXByb2Ntb24gPSBjbmxfZ2V0X3By b2Ntb25fcmVmX3ZhbHVlcyhkZXZfcHJpdiwgcGh5KTsKPiAgCj4gLQlyZXQgPSBjaGVja19waHlf cmVnKGRldl9wcml2LCBwb3J0LCBJQ0xfUE9SVF9DT01QX0RXMShwb3J0KSwKPiArCXJldCA9IGNo ZWNrX3BoeV9yZWcoZGV2X3ByaXYsIHBoeSwgSUNMX1BPUlRfQ09NUF9EVzEocGh5KSwKPiAgCQkJ ICAgICgweGZmIDw8IDE2KSB8IDB4ZmYsIHByb2Ntb24tPmR3MSk7Cj4gLQlyZXQgJj0gY2hlY2tf cGh5X3JlZyhkZXZfcHJpdiwgcG9ydCwgSUNMX1BPUlRfQ09NUF9EVzkocG9ydCksCj4gKwlyZXQg Jj0gY2hlY2tfcGh5X3JlZyhkZXZfcHJpdiwgcGh5LCBJQ0xfUE9SVF9DT01QX0RXOShwaHkpLAo+ ICAJCQkgICAgIC0xVSwgcHJvY21vbi0+ZHc5KTsKPiAtCXJldCAmPSBjaGVja19waHlfcmVnKGRl dl9wcml2LCBwb3J0LCBJQ0xfUE9SVF9DT01QX0RXMTAocG9ydCksCj4gKwlyZXQgJj0gY2hlY2tf cGh5X3JlZyhkZXZfcHJpdiwgcGh5LCBJQ0xfUE9SVF9DT01QX0RXMTAocGh5KSwKPiAgCQkJICAg ICAtMVUsIHByb2Ntb24tPmR3MTApOwo+ICAKPiAgCXJldHVybiByZXQ7Cj4gQEAgLTEzNCwxNSAr MTMzLDE1IEBAIHN0YXRpYyBib29sIGNubF9jb21ib19waHlfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAo+ICBzdGF0aWMgYm9vbCBjbmxfY29tYm9fcGh5X3Zl cmlmeV9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIHsKPiAtCWVu dW0gcG9ydCBwb3J0ID0gUE9SVF9BOwo+ICsJZW51bSBwaHkgcGh5ID0gUEhZX0E7Cj4gIAlib29s IHJldDsKPiAgCj4gIAlpZiAoIWNubF9jb21ib19waHlfZW5hYmxlZChkZXZfcHJpdikpCj4gIAkJ cmV0dXJuIGZhbHNlOwo+ICAKPiAtCXJldCA9IGNubF92ZXJpZnlfcHJvY21vbl9yZWZfdmFsdWVz KGRldl9wcml2LCBwb3J0KTsKPiArCXJldCA9IGNubF92ZXJpZnlfcHJvY21vbl9yZWZfdmFsdWVz KGRldl9wcml2LCBwaHkpOwo+ICAKPiAtCXJldCAmPSBjaGVja19waHlfcmVnKGRldl9wcml2LCBw b3J0LCBDTkxfUE9SVF9DTDFDTV9EVzUsCj4gKwlyZXQgJj0gY2hlY2tfcGh5X3JlZyhkZXZfcHJp diwgcGh5LCBDTkxfUE9SVF9DTDFDTV9EVzUsCj4gIAkJCSAgICAgQ0xfUE9XRVJfRE9XTl9FTkFC TEUsIENMX1BPV0VSX0RPV05fRU5BQkxFKTsKPiAgCj4gIAlyZXR1cm4gcmV0Owo+IEBAIC0xNTcs NyArMTU2LDcgQEAgc3RhdGljIHZvaWQgY25sX2NvbWJvX3BoeXNfaW5pdChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAlJOTE1X1dSSVRFKENISUNLRU5fTUlTQ18yLCB2YWwp Owo+ICAKPiAgCS8qIER1bW15IFBPUlRfQSB0byBnZXQgdGhlIGNvcnJlY3QgQ05MIHJlZ2lzdGVy IGZyb20gdGhlIElDTCBtYWNybyAqLwo+IC0JY25sX3NldF9wcm9jbW9uX3JlZl92YWx1ZXMoZGV2 X3ByaXYsIFBPUlRfQSk7Cj4gKwljbmxfc2V0X3Byb2Ntb25fcmVmX3ZhbHVlcyhkZXZfcHJpdiwg UEhZX0EpOwo+ICAKPiAgCXZhbCA9IEk5MTVfUkVBRChDTkxfUE9SVF9DT01QX0RXMCk7Cj4gIAl2 YWwgfD0gQ09NUF9JTklUOwo+IEBAIC0xODEsMzkgKzE4MCwzOSBAQCBzdGF0aWMgdm9pZCBjbmxf Y29tYm9fcGh5c191bmluaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB9 Cj4gIAo+ICBzdGF0aWMgYm9vbCBpY2xfY29tYm9fcGh5X2VuYWJsZWQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJICBlbnVtIHBvcnQgcG9ydCkKPiArCQkJCSAgZW51 bSBwaHkgcGh5KQo+ICB7Cj4gIAkvKiBUaGUgUEhZIEMgYWRkZWQgYnkgRUhMIGhhcyBubyBQSFlf TUlTQyByZWdpc3RlciAqLwo+IC0JaWYgKElTX0VMS0hBUlRMQUtFKGRldl9wcml2KSAmJiBwb3J0 ID09IFBPUlRfQykKPiAtCQlyZXR1cm4gSTkxNV9SRUFEKElDTF9QT1JUX0NPTVBfRFcwKHBvcnQp KSAmIENPTVBfSU5JVDsKPiArCWlmIChJU19FTEtIQVJUTEFLRShkZXZfcHJpdikgJiYgcGh5ID09 IFBIWV9DKQo+ICsJCXJldHVybiBJOTE1X1JFQUQoSUNMX1BPUlRfQ09NUF9EVzAocGh5KSkgJiBD T01QX0lOSVQ7Cj4gIAllbHNlCj4gLQkJcmV0dXJuICEoSTkxNV9SRUFEKElDTF9QSFlfTUlTQyhw b3J0KSkgJgo+ICsJCXJldHVybiAhKEk5MTVfUkVBRChJQ0xfUEhZX01JU0MocGh5KSkgJgo+ICAJ CQkgSUNMX1BIWV9NSVNDX0RFX0lPX0NPTVBfUFdSX0RPV04pICYmCj4gLQkJCShJOTE1X1JFQUQo SUNMX1BPUlRfQ09NUF9EVzAocG9ydCkpICYgQ09NUF9JTklUKTsKPiArCQkJKEk5MTVfUkVBRChJ Q0xfUE9SVF9DT01QX0RXMChwaHkpKSAmIENPTVBfSU5JVCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyBi b29sIGljbF9jb21ib19waHlfdmVyaWZ5X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiAtCQkJCSAgICAgICBlbnVtIHBvcnQgcG9ydCkKPiArCQkJCSAgICAgICBlbnVt IHBoeSBwaHkpCj4gIHsKPiAgCWJvb2wgcmV0Owo+ICAKPiAtCWlmICghaWNsX2NvbWJvX3BoeV9l bmFibGVkKGRldl9wcml2LCBwb3J0KSkKPiArCWlmICghaWNsX2NvbWJvX3BoeV9lbmFibGVkKGRl dl9wcml2LCBwaHkpKQo+ICAJCXJldHVybiBmYWxzZTsKPiAgCj4gLQlyZXQgPSBjbmxfdmVyaWZ5 X3Byb2Ntb25fcmVmX3ZhbHVlcyhkZXZfcHJpdiwgcG9ydCk7Cj4gKwlyZXQgPSBjbmxfdmVyaWZ5 X3Byb2Ntb25fcmVmX3ZhbHVlcyhkZXZfcHJpdiwgcGh5KTsKPiAgCj4gLQlpZiAocG9ydCA9PSBQ T1JUX0EpCj4gLQkJcmV0ICY9IGNoZWNrX3BoeV9yZWcoZGV2X3ByaXYsIHBvcnQsIElDTF9QT1JU X0NPTVBfRFc4KHBvcnQpLAo+ICsJaWYgKHBoeSA9PSBQSFlfQSkKPiArCQlyZXQgJj0gY2hlY2tf cGh5X3JlZyhkZXZfcHJpdiwgcGh5LCBJQ0xfUE9SVF9DT01QX0RXOChwaHkpLAo+ICAJCQkJICAg ICBJUkVGR0VOLCBJUkVGR0VOKTsKPiAgCj4gLQlyZXQgJj0gY2hlY2tfcGh5X3JlZyhkZXZfcHJp diwgcG9ydCwgSUNMX1BPUlRfQ0xfRFc1KHBvcnQpLAo+ICsJcmV0ICY9IGNoZWNrX3BoeV9yZWco ZGV2X3ByaXYsIHBoeSwgSUNMX1BPUlRfQ0xfRFc1KHBoeSksCj4gIAkJCSAgICAgQ0xfUE9XRVJf RE9XTl9FTkFCTEUsIENMX1BPV0VSX0RPV05fRU5BQkxFKTsKPiAgCj4gIAlyZXR1cm4gcmV0Owo+ ICB9Cj4gIAo+ICB2b2lkIGludGVsX2NvbWJvX3BoeV9wb3dlcl91cF9sYW5lcyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCQkgICAgZW51bSBwb3J0IHBvcnQsIGJvb2wg aXNfZHNpLAo+ICsJCQkJICAgIGVudW0gcGh5IHBoeSwgYm9vbCBpc19kc2ksCj4gIAkJCQkgICAg aW50IGxhbmVfY291bnQsIGJvb2wgbGFuZV9yZXZlcnNhbCkKPiAgewo+ICAJdTggbGFuZV9tYXNr Owo+IEBAIC0yNTgsMTAgKzI1NywxMCBAQCB2b2lkIGludGVsX2NvbWJvX3BoeV9wb3dlcl91cF9s YW5lcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkJfQo+ICAJfQo+ICAK PiAtCXZhbCA9IEk5MTVfUkVBRChJQ0xfUE9SVF9DTF9EVzEwKHBvcnQpKTsKPiArCXZhbCA9IEk5 MTVfUkVBRChJQ0xfUE9SVF9DTF9EVzEwKHBoeSkpOwo+ICAJdmFsICY9IH5QV1JfRE9XTl9MTl9N QVNLOwo+ICAJdmFsIHw9IGxhbmVfbWFzayA8PCBQV1JfRE9XTl9MTl9TSElGVDsKPiAtCUk5MTVf V1JJVEUoSUNMX1BPUlRfQ0xfRFcxMChwb3J0KSwgdmFsKTsKPiArCUk5MTVfV1JJVEUoSUNMX1BP UlRfQ0xfRFcxMChwaHkpLCB2YWwpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdTMyIGVobF9jb21ib19w aHlfYV9tdXgoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHUzMiB2YWwpCj4gQEAgLTI5 MiwxNCArMjkxLDE0IEBAIHN0YXRpYyB1MzIgZWhsX2NvbWJvX3BoeV9hX211eChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTMyIHZhbCkKPiAgCj4gIHN0YXRpYyB2b2lkIGljbF9jb21i b19waHlzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7Cj4gLQll bnVtIHBvcnQgcG9ydDsKPiArCWVudW0gcGh5IHBoeTsKPiAgCj4gLQlmb3JfZWFjaF9jb21ib19w b3J0KGRldl9wcml2LCBwb3J0KSB7Cj4gKwlmb3JfZWFjaF9jb21ib19waHkoZGV2X3ByaXYsIHBo eSkgewo+ICAJCXUzMiB2YWw7Cj4gIAo+IC0JCWlmIChpY2xfY29tYm9fcGh5X3ZlcmlmeV9zdGF0 ZShkZXZfcHJpdiwgcG9ydCkpIHsKPiAtCQkJRFJNX0RFQlVHX0RSSVZFUigiUG9ydCAlYyBjb21i byBQSFkgYWxyZWFkeSBlbmFibGVkLCB3b24ndCByZXByb2dyYW0gaXQuXG4iLAo+IC0JCQkJCSBw b3J0X25hbWUocG9ydCkpOwo+ICsJCWlmIChpY2xfY29tYm9fcGh5X3ZlcmlmeV9zdGF0ZShkZXZf cHJpdiwgcGh5KSkgewo+ICsJCQlEUk1fREVCVUdfRFJJVkVSKCJDb21ibyBQSFkgJWMgYWxyZWFk eSBlbmFibGVkLCB3b24ndCByZXByb2dyYW0gaXQuXG4iLAo+ICsJCQkJCSBwaHlfbmFtZShwaHkp KTsKPiAgCQkJY29udGludWU7Cj4gIAkJfQo+ICAKPiBAQCAtMzA4LDcgKzMwNyw3IEBAIHN0YXRp YyB2b2lkIGljbF9jb21ib19waHlzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+ICAJCSAqIHJlZ2lzdGVyIGZvciBpdCBhbmQgbm8gbmVlZCB0byBwcm9ncmFtIHRoZQo+ ICAJCSAqIERFX0lPX0NPTVBfUFdSX0RPV04gc2V0dGluZyBvbiBQSFkgQy4KPiAgCQkgKi8KPiAt CQlpZiAoSVNfRUxLSEFSVExBS0UoZGV2X3ByaXYpICYmIHBvcnQgPT0gUE9SVF9DKQo+ICsJCWlm IChJU19FTEtIQVJUTEFLRShkZXZfcHJpdikgJiYgcGh5ID09IFBIWV9DKQo+ICAJCQlnb3RvIHNr aXBfcGh5X21pc2M7Cj4gIAo+ICAJCS8qCj4gQEAgLTMxOSw1OSArMzE4LDU5IEBAIHN0YXRpYyB2 b2lkIGljbF9jb21ib19waHlzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+ICAJCSAqIGJhc2VkIG9uIHdoZXRoZXIgb3VyIFZCVCBpbmRpY2F0ZXMgdGhlIHByZXNlbmNl IG9mIGFueQo+ICAJCSAqICJpbnRlcm5hbCIgY2hpbGQgZGV2aWNlcy4KPiAgCQkgKi8KPiAtCQl2 YWwgPSBJOTE1X1JFQUQoSUNMX1BIWV9NSVNDKHBvcnQpKTsKPiAtCQlpZiAoSVNfRUxLSEFSVExB S0UoZGV2X3ByaXYpICYmIHBvcnQgPT0gUE9SVF9BKQo+ICsJCXZhbCA9IEk5MTVfUkVBRChJQ0xf UEhZX01JU0MocGh5KSk7Cj4gKwkJaWYgKElTX0VMS0hBUlRMQUtFKGRldl9wcml2KSAmJiBwaHkg PT0gUEhZX0EpCj4gIAkJCXZhbCA9IGVobF9jb21ib19waHlfYV9tdXgoZGV2X3ByaXYsIHZhbCk7 Cj4gIAkJdmFsICY9IH5JQ0xfUEhZX01JU0NfREVfSU9fQ09NUF9QV1JfRE9XTjsKPiAtCQlJOTE1 X1dSSVRFKElDTF9QSFlfTUlTQyhwb3J0KSwgdmFsKTsKPiArCQlJOTE1X1dSSVRFKElDTF9QSFlf TUlTQyhwaHkpLCB2YWwpOwo+ICAKPiAgc2tpcF9waHlfbWlzYzoKPiAtCQljbmxfc2V0X3Byb2Nt b25fcmVmX3ZhbHVlcyhkZXZfcHJpdiwgcG9ydCk7Cj4gKwkJY25sX3NldF9wcm9jbW9uX3JlZl92 YWx1ZXMoZGV2X3ByaXYsIHBoeSk7Cj4gIAo+IC0JCWlmIChwb3J0ID09IFBPUlRfQSkgewo+IC0J CQl2YWwgPSBJOTE1X1JFQUQoSUNMX1BPUlRfQ09NUF9EVzgocG9ydCkpOwo+ICsJCWlmIChwaHkg PT0gUEhZX0EpIHsKPiArCQkJdmFsID0gSTkxNV9SRUFEKElDTF9QT1JUX0NPTVBfRFc4KHBoeSkp Owo+ICAJCQl2YWwgfD0gSVJFRkdFTjsKPiAtCQkJSTkxNV9XUklURShJQ0xfUE9SVF9DT01QX0RX OChwb3J0KSwgdmFsKTsKPiArCQkJSTkxNV9XUklURShJQ0xfUE9SVF9DT01QX0RXOChwaHkpLCB2 YWwpOwo+ICAJCX0KPiAgCj4gLQkJdmFsID0gSTkxNV9SRUFEKElDTF9QT1JUX0NPTVBfRFcwKHBv cnQpKTsKPiArCQl2YWwgPSBJOTE1X1JFQUQoSUNMX1BPUlRfQ09NUF9EVzAocGh5KSk7Cj4gIAkJ dmFsIHw9IENPTVBfSU5JVDsKPiAtCQlJOTE1X1dSSVRFKElDTF9QT1JUX0NPTVBfRFcwKHBvcnQp LCB2YWwpOwo+ICsJCUk5MTVfV1JJVEUoSUNMX1BPUlRfQ09NUF9EVzAocGh5KSwgdmFsKTsKPiAg Cj4gLQkJdmFsID0gSTkxNV9SRUFEKElDTF9QT1JUX0NMX0RXNShwb3J0KSk7Cj4gKwkJdmFsID0g STkxNV9SRUFEKElDTF9QT1JUX0NMX0RXNShwaHkpKTsKPiAgCQl2YWwgfD0gQ0xfUE9XRVJfRE9X Tl9FTkFCTEU7Cj4gLQkJSTkxNV9XUklURShJQ0xfUE9SVF9DTF9EVzUocG9ydCksIHZhbCk7Cj4g KwkJSTkxNV9XUklURShJQ0xfUE9SVF9DTF9EVzUocGh5KSwgdmFsKTsKPiAgCX0KPiAgfQo+ICAK PiAgc3RhdGljIHZvaWQgaWNsX2NvbWJvX3BoeXNfdW5pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPiAgewo+IC0JZW51bSBwb3J0IHBvcnQ7Cj4gKwllbnVtIHBoeSBwaHk7 Cj4gIAo+IC0JZm9yX2VhY2hfY29tYm9fcG9ydF9yZXZlcnNlKGRldl9wcml2LCBwb3J0KSB7Cj4g Kwlmb3JfZWFjaF9jb21ib19waHlfcmV2ZXJzZShkZXZfcHJpdiwgcGh5KSB7Cj4gIAkJdTMyIHZh bDsKPiAgCj4gLQkJaWYgKHBvcnQgPT0gUE9SVF9BICYmCj4gLQkJICAgICFpY2xfY29tYm9fcGh5 X3ZlcmlmeV9zdGF0ZShkZXZfcHJpdiwgcG9ydCkpCj4gLQkJCURSTV9XQVJOKCJQb3J0ICVjIGNv bWJvIFBIWSBIVyBzdGF0ZSBjaGFuZ2VkIHVuZXhwZWN0ZWRseVxuIiwKPiAtCQkJCSBwb3J0X25h bWUocG9ydCkpOwo+ICsJCWlmIChwaHkgPT0gUEhZX0EgJiYKPiArCQkgICAgIWljbF9jb21ib19w aHlfdmVyaWZ5X3N0YXRlKGRldl9wcml2LCBwaHkpKQo+ICsJCQlEUk1fV0FSTigiQ29tYm8gUEhZ ICVjIEhXIHN0YXRlIGNoYW5nZWQgdW5leHBlY3RlZGx5XG4iLAo+ICsJCQkJIHBoeV9uYW1lKHBo eSkpOwo+ICAKPiAgCQkvKgo+ICAJCSAqIEFsdGhvdWdoIEVITCBhZGRzIGEgY29tYm8gUEhZIEMs IHRoZXJlJ3Mgbm8gUEhZX01JU0MKPiAgCQkgKiByZWdpc3RlciBmb3IgaXQgYW5kIG5vIG5lZWQg dG8gcHJvZ3JhbSB0aGUKPiAgCQkgKiBERV9JT19DT01QX1BXUl9ET1dOIHNldHRpbmcgb24gUEhZ IEMuCj4gIAkJICovCj4gLQkJaWYgKElTX0VMS0hBUlRMQUtFKGRldl9wcml2KSAmJiBwb3J0ID09 IFBPUlRfQykKPiArCQlpZiAoSVNfRUxLSEFSVExBS0UoZGV2X3ByaXYpICYmIHBoeSA9PSBQSFlf QykKPiAgCQkJZ290byBza2lwX3BoeV9taXNjOwo+ICAKPiAtCQl2YWwgPSBJOTE1X1JFQUQoSUNM X1BIWV9NSVNDKHBvcnQpKTsKPiArCQl2YWwgPSBJOTE1X1JFQUQoSUNMX1BIWV9NSVNDKHBoeSkp Owo+ICAJCXZhbCB8PSBJQ0xfUEhZX01JU0NfREVfSU9fQ09NUF9QV1JfRE9XTjsKPiAtCQlJOTE1 X1dSSVRFKElDTF9QSFlfTUlTQyhwb3J0KSwgdmFsKTsKPiArCQlJOTE1X1dSSVRFKElDTF9QSFlf TUlTQyhwaHkpLCB2YWwpOwo+ICAKPiAgc2tpcF9waHlfbWlzYzoKPiAtCQl2YWwgPSBJOTE1X1JF QUQoSUNMX1BPUlRfQ09NUF9EVzAocG9ydCkpOwo+ICsJCXZhbCA9IEk5MTVfUkVBRChJQ0xfUE9S VF9DT01QX0RXMChwaHkpKTsKPiAgCQl2YWwgJj0gfkNPTVBfSU5JVDsKPiAtCQlJOTE1X1dSSVRF KElDTF9QT1JUX0NPTVBfRFcwKHBvcnQpLCB2YWwpOwo+ICsJCUk5MTVfV1JJVEUoSUNMX1BPUlRf Q09NUF9EVzAocGh5KSwgdmFsKTsKPiAgCX0KPiAgfQo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jb21ib19waHkuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfY29tYm9fcGh5LmgKPiBpbmRleCBlNmUxOTVhODNiMTkuLjY2 MDg4NmY4NmM1OSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2NvbWJvX3BoeS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9jb21ib19waHkuaAo+IEBAIC03LDE0ICs3LDE0IEBACj4gICNkZWZpbmUgX19JTlRFTF9DT01C T19QSFlfSF9fCj4gIAo+ICAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiAtI2luY2x1ZGUgPGRy bS9pOTE1X2RybS5oPgo+ICAKPiAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGU7Cj4gK2VudW0gcGh5 Owo+ICAKPiAgdm9pZCBpbnRlbF9jb21ib19waHlfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpOwo+ICB2b2lkIGludGVsX2NvbWJvX3BoeV91bmluaXQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgdm9pZCBpbnRlbF9jb21ib19waHlfcG93ZXJfdXBf bGFuZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJICAgIGVudW0g cG9ydCBwb3J0LCBib29sIGlzX2RzaSwKPiArCQkJCSAgICBlbnVtIHBoeSBwaHksIGJvb2wgaXNf ZHNpLAo+ICAJCQkJICAgIGludCBsYW5lX2NvdW50LCBib29sIGxhbmVfcmV2ZXJzYWwpOwo+ICAK PiAgI2VuZGlmIC8qIF9fSU5URUxfQ09NQk9fUEhZX0hfXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kZGkuYwo+IGluZGV4IGI1YmMwMGM0ZTNmZS4uZDllYTU4MDM4NjQy IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RkaS5jCj4gQEAgLTI0 MTQsNyArMjQxNCw3IEBAIHN0YXRpYyB2b2lkIGNubF9kZGlfdnN3aW5nX3NlcXVlbmNlKHN0cnVj dCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBpY2xfZGRp X2NvbWJvX3Zzd2luZ19wcm9ncmFtKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK PiAtCQkJCQl1MzIgbGV2ZWwsIGVudW0gcG9ydCBwb3J0LCBpbnQgdHlwZSwKPiArCQkJCQl1MzIg bGV2ZWwsIGVudW0gcGh5IHBoeSwgaW50IHR5cGUsCj4gIAkJCQkJaW50IHJhdGUpCj4gIHsKPiAg CWNvbnN0IHN0cnVjdCBjbmxfZGRpX2J1Zl90cmFucyAqZGRpX3RyYW5zbGF0aW9ucyA9IE5VTEw7 Cj4gQEAgLTI0MzIsNDEgKzI0MzIsNDEgQEAgc3RhdGljIHZvaWQgaWNsX2RkaV9jb21ib192c3dp bmdfcHJvZ3JhbShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAl9Cj4gIAo+ ICAJLyogU2V0IFBPUlRfVFhfRFc1ICovCj4gLQl2YWwgPSBJOTE1X1JFQUQoSUNMX1BPUlRfVFhf RFc1X0xOMChwb3J0KSk7Cj4gKwl2YWwgPSBJOTE1X1JFQUQoSUNMX1BPUlRfVFhfRFc1X0xOMChw aHkpKTsKPiAgCXZhbCAmPSB+KFNDQUxJTkdfTU9ERV9TRUxfTUFTSyB8IFJURVJNX1NFTEVDVF9N QVNLIHwKPiAgCQkgIFRBUDJfRElTQUJMRSB8IFRBUDNfRElTQUJMRSk7Cj4gIAl2YWwgfD0gU0NB TElOR19NT0RFX1NFTCgweDIpOwo+ICAJdmFsIHw9IFJURVJNX1NFTEVDVCgweDYpOwo+ICAJdmFs IHw9IFRBUDNfRElTQUJMRTsKPiAtCUk5MTVfV1JJVEUoSUNMX1BPUlRfVFhfRFc1X0dSUChwb3J0 KSwgdmFsKTsKPiArCUk5MTVfV1JJVEUoSUNMX1BPUlRfVFhfRFc1X0dSUChwaHkpLCB2YWwpOwo+ ICAKPiAgCS8qIFByb2dyYW0gUE9SVF9UWF9EVzIgKi8KPiAtCXZhbCA9IEk5MTVfUkVBRChJQ0xf UE9SVF9UWF9EVzJfTE4wKHBvcnQpKTsKPiArCXZhbCA9IEk5MTVfUkVBRChJQ0xfUE9SVF9UWF9E VzJfTE4wKHBoeSkpOwo+ICAJdmFsICY9IH4oU1dJTkdfU0VMX0xPV0VSX01BU0sgfCBTV0lOR19T RUxfVVBQRVJfTUFTSyB8Cj4gIAkJIFJDT01QX1NDQUxBUl9NQVNLKTsKPiAgCXZhbCB8PSBTV0lO R19TRUxfVVBQRVIoZGRpX3RyYW5zbGF0aW9uc1tsZXZlbF0uZHcyX3N3aW5nX3NlbCk7Cj4gIAl2 YWwgfD0gU1dJTkdfU0VMX0xPV0VSKGRkaV90cmFuc2xhdGlvbnNbbGV2ZWxdLmR3Ml9zd2luZ19z ZWwpOwo+ICAJLyogUHJvZ3JhbSBSY29tcCBzY2FsYXIgZm9yIGV2ZXJ5IHRhYmxlIGVudHJ5ICov Cj4gIAl2YWwgfD0gUkNPTVBfU0NBTEFSKDB4OTgpOwo+IC0JSTkxNV9XUklURShJQ0xfUE9SVF9U WF9EVzJfR1JQKHBvcnQpLCB2YWwpOwo+ICsJSTkxNV9XUklURShJQ0xfUE9SVF9UWF9EVzJfR1JQ KHBoeSksIHZhbCk7Cj4gIAo+ICAJLyogUHJvZ3JhbSBQT1JUX1RYX0RXNCAqLwo+ICAJLyogV2Ug Y2Fubm90IHdyaXRlIHRvIEdSUC4gSXQgd291bGQgb3ZlcndyaXRlIGluZGl2aWR1YWwgbG9hZGdl bi4gKi8KPiAgCWZvciAobG4gPSAwOyBsbiA8PSAzOyBsbisrKSB7Cj4gLQkJdmFsID0gSTkxNV9S RUFEKElDTF9QT1JUX1RYX0RXNF9MTihsbiwgcG9ydCkpOwo+ICsJCXZhbCA9IEk5MTVfUkVBRChJ Q0xfUE9SVF9UWF9EVzRfTE4obG4sIHBoeSkpOwo+ICAJCXZhbCAmPSB+KFBPU1RfQ1VSU09SXzFf TUFTSyB8IFBPU1RfQ1VSU09SXzJfTUFTSyB8Cj4gIAkJCSBDVVJTT1JfQ09FRkZfTUFTSyk7Cj4g IAkJdmFsIHw9IFBPU1RfQ1VSU09SXzEoZGRpX3RyYW5zbGF0aW9uc1tsZXZlbF0uZHc0X3Bvc3Rf Y3Vyc29yXzEpOwo+ICAJCXZhbCB8PSBQT1NUX0NVUlNPUl8yKGRkaV90cmFuc2xhdGlvbnNbbGV2 ZWxdLmR3NF9wb3N0X2N1cnNvcl8yKTsKPiAgCQl2YWwgfD0gQ1VSU09SX0NPRUZGKGRkaV90cmFu c2xhdGlvbnNbbGV2ZWxdLmR3NF9jdXJzb3JfY29lZmYpOwo+IC0JCUk5MTVfV1JJVEUoSUNMX1BP UlRfVFhfRFc0X0xOKGxuLCBwb3J0KSwgdmFsKTsKPiArCQlJOTE1X1dSSVRFKElDTF9QT1JUX1RY X0RXNF9MTihsbiwgcGh5KSwgdmFsKTsKPiAgCX0KPiAgCj4gIAkvKiBQcm9ncmFtIFBPUlRfVFhf RFc3ICovCj4gLQl2YWwgPSBJOTE1X1JFQUQoSUNMX1BPUlRfVFhfRFc3X0xOMChwb3J0KSk7Cj4g Kwl2YWwgPSBJOTE1X1JFQUQoSUNMX1BPUlRfVFhfRFc3X0xOMChwaHkpKTsKPiAgCXZhbCAmPSB+ Tl9TQ0FMQVJfTUFTSzsKPiAgCXZhbCB8PSBOX1NDQUxBUihkZGlfdHJhbnNsYXRpb25zW2xldmVs XS5kdzdfbl9zY2FsYXIpOwo+IC0JSTkxNV9XUklURShJQ0xfUE9SVF9UWF9EVzdfR1JQKHBvcnQp LCB2YWwpOwo+ICsJSTkxNV9XUklURShJQ0xfUE9SVF9UWF9EVzdfR1JQKHBoeSksIHZhbCk7Cj4g IH0KPiAgCj4gIHN0YXRpYyB2b2lkIGljbF9jb21ib19waHlfZGRpX3Zzd2luZ19zZXF1ZW5jZShz dHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiBAQCAtMjQ3NCw3ICsyNDc0LDcgQEAgc3Rh dGljIHZvaWQgaWNsX2NvbWJvX3BoeV9kZGlfdnN3aW5nX3NlcXVlbmNlKHN0cnVjdCBpbnRlbF9l bmNvZGVyICplbmNvZGVyLAo+ICAJCQkJCSAgICAgIGVudW0gaW50ZWxfb3V0cHV0X3R5cGUgdHlw ZSkKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShl bmNvZGVyLT5iYXNlLmRldik7Cj4gLQllbnVtIHBvcnQgcG9ydCA9IGVuY29kZXItPnBvcnQ7Cj4g KwllbnVtIHBoeSBwaHkgPSBpbnRlbF9wb3J0X3RvX3BoeShkZXZfcHJpdiwgZW5jb2Rlci0+cG9y dCk7Cj4gIAlpbnQgd2lkdGggPSAwOwo+ICAJaW50IHJhdGUgPSAwOwo+ICAJdTMyIHZhbDsKPiBA QCAtMjQ5NSwxMiArMjQ5NSwxMiBAQCBzdGF0aWMgdm9pZCBpY2xfY29tYm9fcGh5X2RkaV92c3dp bmdfc2VxdWVuY2Uoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gIAkgKiBzZXQgUE9S VF9QQ1NfRFcxIGNtbmtlZXBlcl9lbmFibGUgdG8gMWIsCj4gIAkgKiBlbHNlIGNsZWFyIHRvIDBi Lgo+ICAJICovCj4gLQl2YWwgPSBJOTE1X1JFQUQoSUNMX1BPUlRfUENTX0RXMV9MTjAocG9ydCkp Owo+ICsJdmFsID0gSTkxNV9SRUFEKElDTF9QT1JUX1BDU19EVzFfTE4wKHBoeSkpOwo+ICAJaWYg KHR5cGUgPT0gSU5URUxfT1VUUFVUX0hETUkpCj4gIAkJdmFsICY9IH5DT01NT05fS0VFUEVSX0VO Owo+ICAJZWxzZQo+ICAJCXZhbCB8PSBDT01NT05fS0VFUEVSX0VOOwo+IC0JSTkxNV9XUklURShJ Q0xfUE9SVF9QQ1NfRFcxX0dSUChwb3J0KSwgdmFsKTsKPiArCUk5MTVfV1JJVEUoSUNMX1BPUlRf UENTX0RXMV9HUlAocGh5KSwgdmFsKTsKPiAgCj4gIAkvKiAyLiBQcm9ncmFtIGxvYWRnZW4gc2Vs ZWN0ICovCj4gIAkvKgo+IEBAIC0yNTEwLDMzICsyNTEwLDMzIEBAIHN0YXRpYyB2b2lkIGljbF9j b21ib19waHlfZGRpX3Zzd2luZ19zZXF1ZW5jZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rl ciwKPiAgCSAqID4gNiBHSHogKExOMD0wLCBMTjE9MCwgTE4yPTAsIExOMz0wKQo+ICAJICovCj4g IAlmb3IgKGxuID0gMDsgbG4gPD0gMzsgbG4rKykgewo+IC0JCXZhbCA9IEk5MTVfUkVBRChJQ0xf UE9SVF9UWF9EVzRfTE4obG4sIHBvcnQpKTsKPiArCQl2YWwgPSBJOTE1X1JFQUQoSUNMX1BPUlRf VFhfRFc0X0xOKGxuLCBwaHkpKTsKPiAgCQl2YWwgJj0gfkxPQURHRU5fU0VMRUNUOwo+ICAKPiAg CQlpZiAoKHJhdGUgPD0gNjAwMDAwICYmIHdpZHRoID09IDQgJiYgbG4gPj0gMSkgfHwKPiAgCQkg ICAgKHJhdGUgPD0gNjAwMDAwICYmIHdpZHRoIDwgNCAmJiAobG4gPT0gMSB8fCBsbiA9PSAyKSkp IHsKPiAgCQkJdmFsIHw9IExPQURHRU5fU0VMRUNUOwo+ICAJCX0KPiAtCQlJOTE1X1dSSVRFKElD TF9QT1JUX1RYX0RXNF9MTihsbiwgcG9ydCksIHZhbCk7Cj4gKwkJSTkxNV9XUklURShJQ0xfUE9S VF9UWF9EVzRfTE4obG4sIHBoeSksIHZhbCk7Cj4gIAl9Cj4gIAo+ICAJLyogMy4gU2V0IFBPUlRf Q0xfRFc1IFNVUyBDbG9jayBDb25maWcgdG8gMTFiICovCj4gLQl2YWwgPSBJOTE1X1JFQUQoSUNM X1BPUlRfQ0xfRFc1KHBvcnQpKTsKPiArCXZhbCA9IEk5MTVfUkVBRChJQ0xfUE9SVF9DTF9EVzUo cGh5KSk7Cj4gIAl2YWwgfD0gU1VTX0NMT0NLX0NPTkZJRzsKPiAtCUk5MTVfV1JJVEUoSUNMX1BP UlRfQ0xfRFc1KHBvcnQpLCB2YWwpOwo+ICsJSTkxNV9XUklURShJQ0xfUE9SVF9DTF9EVzUocGh5 KSwgdmFsKTsKPiAgCj4gIAkvKiA0LiBDbGVhciB0cmFpbmluZyBlbmFibGUgdG8gY2hhbmdlIHN3 aW5nIHZhbHVlcyAqLwo+IC0JdmFsID0gSTkxNV9SRUFEKElDTF9QT1JUX1RYX0RXNV9MTjAocG9y dCkpOwo+ICsJdmFsID0gSTkxNV9SRUFEKElDTF9QT1JUX1RYX0RXNV9MTjAocGh5KSk7Cj4gIAl2 YWwgJj0gflRYX1RSQUlOSU5HX0VOOwo+IC0JSTkxNV9XUklURShJQ0xfUE9SVF9UWF9EVzVfR1JQ KHBvcnQpLCB2YWwpOwo+ICsJSTkxNV9XUklURShJQ0xfUE9SVF9UWF9EVzVfR1JQKHBoeSksIHZh bCk7Cj4gIAo+ICAJLyogNS4gUHJvZ3JhbSBzd2luZyBhbmQgZGUtZW1waGFzaXMgKi8KPiAtCWlj bF9kZGlfY29tYm9fdnN3aW5nX3Byb2dyYW0oZGV2X3ByaXYsIGxldmVsLCBwb3J0LCB0eXBlLCBy YXRlKTsKPiArCWljbF9kZGlfY29tYm9fdnN3aW5nX3Byb2dyYW0oZGV2X3ByaXYsIGxldmVsLCBw aHksIHR5cGUsIHJhdGUpOwo+ICAKPiAgCS8qIDYuIFNldCB0cmFpbmluZyBlbmFibGUgdG8gdHJp Z2dlciB1cGRhdGUgKi8KPiAtCXZhbCA9IEk5MTVfUkVBRChJQ0xfUE9SVF9UWF9EVzVfTE4wKHBv cnQpKTsKPiArCXZhbCA9IEk5MTVfUkVBRChJQ0xfUE9SVF9UWF9EVzVfTE4wKHBoeSkpOwo+ICAJ dmFsIHw9IFRYX1RSQUlOSU5HX0VOOwo+IC0JSTkxNV9XUklURShJQ0xfUE9SVF9UWF9EVzVfR1JQ KHBvcnQpLCB2YWwpOwo+ICsJSTkxNV9XUklURShJQ0xfUE9SVF9UWF9EVzVfR1JQKHBoeSksIHZh bCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGljbF9tZ19waHlfZGRpX3Zzd2luZ19zZXF1ZW5j ZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiBAQCAtMzEyMSw2ICszMTIxLDcgQEAg c3RhdGljIHZvaWQgaW50ZWxfZGRpX3ByZV9lbmFibGVfZHAoc3RydWN0IGludGVsX2VuY29kZXIg KmVuY29kZXIsCj4gIAlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2Rw KCZlbmNvZGVyLT5iYXNlKTsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOwo+ICAJZW51bSBwb3J0IHBvcnQgPSBlbmNvZGVy LT5wb3J0Owo+ICsJZW51bSBwaHkgcGh5ID0gaW50ZWxfcG9ydF90b19waHkoZGV2X3ByaXYsIHBv cnQpOwo+ICAJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBlbmNfdG9fZGln X3BvcnQoJmVuY29kZXItPmJhc2UpOwo+ICAJYm9vbCBpc19tc3QgPSBpbnRlbF9jcnRjX2hhc190 eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9EUF9NU1QpOwo+ICAJaW50IGxldmVsID0gaW50 ZWxfZGRpX2RwX2xldmVsKGludGVsX2RwKTsKPiBAQCAtMzE1Niw3ICszMTU3LDcgQEAgc3RhdGlj IHZvaWQgaW50ZWxfZGRpX3ByZV9lbmFibGVfZHAoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29k ZXIsCj4gIAkJYm9vbCBsYW5lX3JldmVyc2FsID0KPiAgCQkJZGlnX3BvcnQtPnNhdmVkX3BvcnRf Yml0cyAmIERESV9CVUZfUE9SVF9SRVZFUlNBTDsKPiAgCj4gLQkJaW50ZWxfY29tYm9fcGh5X3Bv d2VyX3VwX2xhbmVzKGRldl9wcml2LCBwb3J0LCBmYWxzZSwKPiArCQlpbnRlbF9jb21ib19waHlf cG93ZXJfdXBfbGFuZXMoZGV2X3ByaXYsIHBoeSwgZmFsc2UsCj4gIAkJCQkJICAgICAgIGNydGNf c3RhdGUtPmxhbmVfY291bnQsCj4gIAkJCQkJICAgICAgIGxhbmVfcmV2ZXJzYWwpOwo+ICAJfQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXku aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oCj4gaW5kZXgg ZDUzMjg1ZmI4ODNmLi44YTRhNTdlZjgyYTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaAo+IEBAIC0yNjgsNiArMjY4LDEwIEBAIGVudW0gcGh5 IHsKPiAgCWZvciAoKF9fcG9ydCkgPSBQT1JUX0E7IChfX3BvcnQpIDwgSTkxNV9NQVhfUE9SVFM7 IChfX3BvcnQpKyspCVwKPiAgCQlmb3JfZWFjaF9pZigoX19wb3J0c19tYXNrKSAmIEJJVChfX3Bv cnQpKQo+ICAKPiArI2RlZmluZSBmb3JfZWFjaF9waHlfbWFza2VkKF9fcGh5LCBfX3BoeXNfbWFz aykgXAo+ICsJZm9yICgoX19waHkpID0gUEhZX0E7IChfX3BoeSkgPCBJOTE1X01BWF9QSFlTOyAo X19waHkpKyspCVwKPiArCQlmb3JfZWFjaF9pZigoX19waHlzX21hc2spICYgQklUKF9fcGh5KSkK PiArCj4gICNkZWZpbmUgZm9yX2VhY2hfY3J0YyhkZXYsIGNydGMpIFwKPiAgCWxpc3RfZm9yX2Vh Y2hfZW50cnkoY3J0YywgJihkZXYpLT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpCj4gIAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlf cG93ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dl ci5jCj4gaW5kZXggNzQzN2ZjNzFkMjg5Li5hMjRkMTg1OWIzN2IgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93ZXIuYwo+IEBAIC0z OTcsNyArMzk3LDcgQEAgc3RhdGljIHZvaWQgaHN3X3Bvd2VyX3dlbGxfZGlzYWJsZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAloc3dfd2FpdF9mb3JfcG93ZXJfd2VsbF9k aXNhYmxlKGRldl9wcml2LCBwb3dlcl93ZWxsKTsKPiAgfQo+ICAKPiAtI2RlZmluZSBJQ0xfQVVY X1BXX1RPX1BPUlQocHdfaWR4KQkoKHB3X2lkeCkgLSBJQ0xfUFdfQ1RMX0lEWF9BVVhfQSkKPiAr I2RlZmluZSBJQ0xfQVVYX1BXX1RPX1BIWShwd19pZHgpCSgocHdfaWR4KSAtIElDTF9QV19DVExf SURYX0FVWF9BKQo+ICAKPiAgc3RhdGljIHZvaWQKPiAgaWNsX2NvbWJvX3BoeV9hdXhfcG93ZXJf d2VsbF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IEBAIC00MDUs MjEgKzQwNSwyMSBAQCBpY2xfY29tYm9fcGh5X2F1eF9wb3dlcl93ZWxsX2VuYWJsZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBpOTE1X3Bv d2VyX3dlbGxfcmVncyAqcmVncyA9IHBvd2VyX3dlbGwtPmRlc2MtPmhzdy5yZWdzOwo+ICAJaW50 IHB3X2lkeCA9IHBvd2VyX3dlbGwtPmRlc2MtPmhzdy5pZHg7Cj4gLQllbnVtIHBvcnQgcG9ydCA9 IElDTF9BVVhfUFdfVE9fUE9SVChwd19pZHgpOwo+ICsJZW51bSBwaHkgcGh5ID0gSUNMX0FVWF9Q V19UT19QSFkocHdfaWR4KTsKPiAgCXUzMiB2YWw7Cj4gIAo+ICAJdmFsID0gSTkxNV9SRUFEKHJl Z3MtPmRyaXZlcik7Cj4gIAlJOTE1X1dSSVRFKHJlZ3MtPmRyaXZlciwgdmFsIHwgSFNXX1BXUl9X RUxMX0NUTF9SRVEocHdfaWR4KSk7Cj4gIAo+IC0JdmFsID0gSTkxNV9SRUFEKElDTF9QT1JUX0NM X0RXMTIocG9ydCkpOwo+IC0JSTkxNV9XUklURShJQ0xfUE9SVF9DTF9EVzEyKHBvcnQpLCB2YWwg fCBJQ0xfTEFORV9FTkFCTEVfQVVYKTsKPiArCXZhbCA9IEk5MTVfUkVBRChJQ0xfUE9SVF9DTF9E VzEyKHBoeSkpOwo+ICsJSTkxNV9XUklURShJQ0xfUE9SVF9DTF9EVzEyKHBoeSksIHZhbCB8IElD TF9MQU5FX0VOQUJMRV9BVVgpOwo+ICAKPiAgCWhzd193YWl0X2Zvcl9wb3dlcl93ZWxsX2VuYWJs ZShkZXZfcHJpdiwgcG93ZXJfd2VsbCk7Cj4gIAo+ICAJLyogRGlzcGxheSBXQSAjMTE3ODogaWNs ICovCj4gIAlpZiAoSVNfSUNFTEFLRShkZXZfcHJpdikgJiYKPiAgCSAgICBwd19pZHggPj0gSUNM X1BXX0NUTF9JRFhfQVVYX0EgJiYgcHdfaWR4IDw9IElDTF9QV19DVExfSURYX0FVWF9CICYmCj4g LQkgICAgIWludGVsX2Jpb3NfaXNfcG9ydF9lZHAoZGV2X3ByaXYsIHBvcnQpKSB7Cj4gKwkgICAg IWludGVsX2Jpb3NfaXNfcG9ydF9lZHAoZGV2X3ByaXYsIChlbnVtIHBvcnQpcGh5KSkgewo+ICAJ CXZhbCA9IEk5MTVfUkVBRChJQ0xfQVVYX0FOQU9WUkQxKHB3X2lkeCkpOwo+ICAJCXZhbCB8PSBJ Q0xfQVVYX0FOQU9WUkQxX0VOQUJMRSB8IElDTF9BVVhfQU5BT1ZSRDFfTERPX0JZUEFTUzsKPiAg CQlJOTE1X1dSSVRFKElDTF9BVVhfQU5BT1ZSRDEocHdfaWR4KSwgdmFsKTsKPiBAQCAtNDMyLDEx ICs0MzIsMTEgQEAgaWNsX2NvbWJvX3BoeV9hdXhfcG93ZXJfd2VsbF9kaXNhYmxlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgewo+ICAJY29uc3Qgc3RydWN0IGk5MTVfcG93 ZXJfd2VsbF9yZWdzICpyZWdzID0gcG93ZXJfd2VsbC0+ZGVzYy0+aHN3LnJlZ3M7Cj4gIAlpbnQg cHdfaWR4ID0gcG93ZXJfd2VsbC0+ZGVzYy0+aHN3LmlkeDsKPiAtCWVudW0gcG9ydCBwb3J0ID0g SUNMX0FVWF9QV19UT19QT1JUKHB3X2lkeCk7Cj4gKwllbnVtIHBoeSBwaHkgPSBJQ0xfQVVYX1BX X1RPX1BIWShwd19pZHgpOwo+ICAJdTMyIHZhbDsKPiAgCj4gLQl2YWwgPSBJOTE1X1JFQUQoSUNM X1BPUlRfQ0xfRFcxMihwb3J0KSk7Cj4gLQlJOTE1X1dSSVRFKElDTF9QT1JUX0NMX0RXMTIocG9y dCksIHZhbCAmIH5JQ0xfTEFORV9FTkFCTEVfQVVYKTsKPiArCXZhbCA9IEk5MTVfUkVBRChJQ0xf UE9SVF9DTF9EVzEyKHBoeSkpOwo+ICsJSTkxNV9XUklURShJQ0xfUE9SVF9DTF9EVzEyKHBoeSks IHZhbCAmIH5JQ0xfTEFORV9FTkFCTEVfQVVYKTsKPiAgCj4gIAl2YWwgPSBJOTE1X1JFQUQocmVn cy0+ZHJpdmVyKTsKPiAgCUk5MTVfV1JJVEUocmVncy0+ZHJpdmVyLCB2YWwgJiB+SFNXX1BXUl9X RUxMX0NUTF9SRVEocHdfaWR4KSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZHNpLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2RzaS5oCj4gaW5kZXggNmQyMDQzNDYzNmNkLi4xY2QyNGJkNDY1MTggMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kc2kuaAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHNpLmgKPiBAQCAtNDksOCArNDksMTEgQEAgc3Ry dWN0IGludGVsX2RzaSB7Cj4gIAo+ICAJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqYXR0YWNoZWRf Y29ubmVjdG9yOwo+ICAKPiAtCS8qIGJpdCBtYXNrIG9mIHBvcnRzIGJlaW5nIGRyaXZlbiAqLwo+ IC0JdTE2IHBvcnRzOwo+ICsJLyogYml0IG1hc2sgb2YgcG9ydHMgKHZsdiBkc2kpIG9yIHBoeXMg KGljbCBkc2kpIGJlaW5nIGRyaXZlbiAqLwo+ICsJdW5pb24gewo+ICsJCXUxNiBwb3J0czsJLyog VkxWIERTSSAqLwo+ICsJCXUxNiBwaHlzOwkvKiBJQ0wgRFNJICovCj4gKwl9Owo+ICAKPiAgCS8q IGlmIHRydWUsIHVzZSBIUyBtb2RlLCBvdGhlcndpc2UgTFAgKi8KPiAgCWJvb2wgaHM7Cj4gQEAg LTEzMiw3ICsxMzUsMTAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW50ZWxfZHNpX2hvc3QgKnRv X2ludGVsX2RzaV9ob3N0KHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpoKQo+ICAJcmV0dXJuIGNvbnRh aW5lcl9vZihoLCBzdHJ1Y3QgaW50ZWxfZHNpX2hvc3QsIGJhc2UpOwo+ICB9Cj4gIAo+IC0jZGVm aW5lIGZvcl9lYWNoX2RzaV9wb3J0KF9fcG9ydCwgX19wb3J0c19tYXNrKSBmb3JfZWFjaF9wb3J0 X21hc2tlZChfX3BvcnQsIF9fcG9ydHNfbWFzaykKPiArI2RlZmluZSBmb3JfZWFjaF9kc2lfcG9y dChfX3BvcnQsIF9fcG9ydHNfbWFzaykgXAo+ICsJZm9yX2VhY2hfcG9ydF9tYXNrZWQoX19wb3J0 LCBfX3BvcnRzX21hc2spCj4gKyNkZWZpbmUgZm9yX2VhY2hfZHNpX3BoeShfX3BoeSwgX19waHlz X21hc2spIFwKPiArCWZvcl9lYWNoX3BoeV9tYXNrZWQoX19waHksIF9fcGh5c19tYXNrKQo+ICAK PiAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW50ZWxfZHNpICplbmNfdG9faW50ZWxfZHNpKHN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiAgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+IGlu ZGV4IGQzZmM1NzVhOTRkYi4uOTViOWNhMWZkYTJlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVnLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5oCj4gQEAgLTE3OTQsMjAgKzE3OTQsMjAgQEAgZW51bSBpOTE1X3Bvd2VyX3dlbGxfaWQgewo+ ICAjZGVmaW5lIF9JQ0xfQ09NQk9QSFlfQQkJCTB4MTYyMDAwCj4gICNkZWZpbmUgX0lDTF9DT01C T1BIWV9CCQkJMHg2QzAwMAo+ICAjZGVmaW5lIF9FSExfQ09NQk9QSFlfQwkJCTB4MTYwMDAwCj4g LSNkZWZpbmUgX0lDTF9DT01CT1BIWShwb3J0KQkJX1BJQ0socG9ydCwgX0lDTF9DT01CT1BIWV9B LCBcCj4gKyNkZWZpbmUgX0lDTF9DT01CT1BIWShwaHkpCQlfUElDSyhwaHksIF9JQ0xfQ09NQk9Q SFlfQSwgXAo+ICAJCQkJCSAgICAgIF9JQ0xfQ09NQk9QSFlfQiwgXAo+ICAJCQkJCSAgICAgIF9F SExfQ09NQk9QSFlfQykKPiAgCj4gIC8qIENOTC9JQ0wgUG9ydCBDTF9EVyByZWdpc3RlcnMgKi8K PiAtI2RlZmluZSBfSUNMX1BPUlRfQ0xfRFcoZHcsIHBvcnQpCShfSUNMX0NPTUJPUEhZKHBvcnQp ICsgXAo+ICsjZGVmaW5lIF9JQ0xfUE9SVF9DTF9EVyhkdywgcGh5KQkoX0lDTF9DT01CT1BIWShw aHkpICsgXAo+ICAJCQkJCSA0ICogKGR3KSkKPiAgCj4gICNkZWZpbmUgQ05MX1BPUlRfQ0wxQ01f RFc1CQlfTU1JTygweDE2MjAxNCkKPiAtI2RlZmluZSBJQ0xfUE9SVF9DTF9EVzUocG9ydCkJCV9N TUlPKF9JQ0xfUE9SVF9DTF9EVyg1LCBwb3J0KSkKPiArI2RlZmluZSBJQ0xfUE9SVF9DTF9EVzUo cGh5KQkJX01NSU8oX0lDTF9QT1JUX0NMX0RXKDUsIHBoeSkpCj4gICNkZWZpbmUgICBDTF9QT1dF Ul9ET1dOX0VOQUJMRQkJKDEgPDwgNCkKPiAgI2RlZmluZSAgIFNVU19DTE9DS19DT05GSUcJCSgz IDw8IDApCj4gIAo+IC0jZGVmaW5lIElDTF9QT1JUX0NMX0RXMTAocG9ydCkJCV9NTUlPKF9JQ0xf UE9SVF9DTF9EVygxMCwgcG9ydCkpCj4gKyNkZWZpbmUgSUNMX1BPUlRfQ0xfRFcxMChwaHkpCQlf TU1JTyhfSUNMX1BPUlRfQ0xfRFcoMTAsIHBoeSkpCj4gICNkZWZpbmUgIFBHX1NFUV9ERUxBWV9P VkVSUklERV9NQVNLCSgzIDw8IDI1KQo+ICAjZGVmaW5lICBQR19TRVFfREVMQVlfT1ZFUlJJREVf U0hJRlQJMjUKPiAgI2RlZmluZSAgUEdfU0VRX0RFTEFZX09WRVJSSURFX0VOQUJMRQkoMSA8PCAy NCkKPiBAQCAtMTgyMiwyMyArMTgyMiwyMyBAQCBlbnVtIGk5MTVfcG93ZXJfd2VsbF9pZCB7Cj4g ICNkZWZpbmUgIFBXUl9ET1dOX0xOX01BU0sJCSgweGYgPDwgNCkKPiAgI2RlZmluZSAgUFdSX0RP V05fTE5fU0hJRlQJCTQKPiAgCj4gLSNkZWZpbmUgSUNMX1BPUlRfQ0xfRFcxMihwb3J0KQkJX01N SU8oX0lDTF9QT1JUX0NMX0RXKDEyLCBwb3J0KSkKPiArI2RlZmluZSBJQ0xfUE9SVF9DTF9EVzEy KHBoeSkJCV9NTUlPKF9JQ0xfUE9SVF9DTF9EVygxMiwgcGh5KSkKPiAgI2RlZmluZSAgIElDTF9M QU5FX0VOQUJMRV9BVVgJCSgxIDw8IDApCj4gIAo+ICAvKiBDTkwvSUNMIFBvcnQgQ09NUF9EVyBy ZWdpc3RlcnMgKi8KPiAgI2RlZmluZSBfSUNMX1BPUlRfQ09NUAkJCTB4MTAwCj4gLSNkZWZpbmUg X0lDTF9QT1JUX0NPTVBfRFcoZHcsIHBvcnQpCShfSUNMX0NPTUJPUEhZKHBvcnQpICsgXAo+ICsj ZGVmaW5lIF9JQ0xfUE9SVF9DT01QX0RXKGR3LCBwaHkpCShfSUNMX0NPTUJPUEhZKHBoeSkgKyBc Cj4gIAkJCQkJIF9JQ0xfUE9SVF9DT01QICsgNCAqIChkdykpCj4gIAo+ICAjZGVmaW5lIENOTF9Q T1JUX0NPTVBfRFcwCQlfTU1JTygweDE2MjEwMCkKPiAtI2RlZmluZSBJQ0xfUE9SVF9DT01QX0RX MChwb3J0KQkJX01NSU8oX0lDTF9QT1JUX0NPTVBfRFcoMCwgcG9ydCkpCj4gKyNkZWZpbmUgSUNM X1BPUlRfQ09NUF9EVzAocGh5KQkJX01NSU8oX0lDTF9QT1JUX0NPTVBfRFcoMCwgcGh5KSkKPiAg I2RlZmluZSAgIENPTVBfSU5JVAkJCSgxIDw8IDMxKQo+ICAKPiAgI2RlZmluZSBDTkxfUE9SVF9D T01QX0RXMQkJX01NSU8oMHgxNjIxMDQpCj4gLSNkZWZpbmUgSUNMX1BPUlRfQ09NUF9EVzEocG9y dCkJCV9NTUlPKF9JQ0xfUE9SVF9DT01QX0RXKDEsIHBvcnQpKQo+ICsjZGVmaW5lIElDTF9QT1JU X0NPTVBfRFcxKHBoeSkJCV9NTUlPKF9JQ0xfUE9SVF9DT01QX0RXKDEsIHBoeSkpCj4gIAo+ICAj ZGVmaW5lIENOTF9QT1JUX0NPTVBfRFczCQlfTU1JTygweDE2MjEwYykKPiAtI2RlZmluZSBJQ0xf UE9SVF9DT01QX0RXMyhwb3J0KQkJX01NSU8oX0lDTF9QT1JUX0NPTVBfRFcoMywgcG9ydCkpCj4g KyNkZWZpbmUgSUNMX1BPUlRfQ09NUF9EVzMocGh5KQkJX01NSU8oX0lDTF9QT1JUX0NPTVBfRFco MywgcGh5KSkKPiAgI2RlZmluZSAgIFBST0NFU1NfSU5GT19ET1RfMAkJKDAgPDwgMjYpCj4gICNk ZWZpbmUgICBQUk9DRVNTX0lORk9fRE9UXzEJCSgxIDw8IDI2KQo+ICAjZGVmaW5lICAgUFJPQ0VT U19JTkZPX0RPVF80CQkoMiA8PCAyNikKPiBAQCAtMTg1MCwxNCArMTg1MCwxNCBAQCBlbnVtIGk5 MTVfcG93ZXJfd2VsbF9pZCB7Cj4gICNkZWZpbmUgICBWT0xUQUdFX0lORk9fTUFTSwkJKDMgPDwg MjQpCj4gICNkZWZpbmUgICBWT0xUQUdFX0lORk9fU0hJRlQJCTI0Cj4gIAo+IC0jZGVmaW5lIElD TF9QT1JUX0NPTVBfRFc4KHBvcnQpCQlfTU1JTyhfSUNMX1BPUlRfQ09NUF9EVyg4LCBwb3J0KSkK PiArI2RlZmluZSBJQ0xfUE9SVF9DT01QX0RXOChwaHkpCQlfTU1JTyhfSUNMX1BPUlRfQ09NUF9E Vyg4LCBwaHkpKQo+ICAjZGVmaW5lICAgSVJFRkdFTgkJCSgxIDw8IDI0KQo+ICAKPiAgI2RlZmlu ZSBDTkxfUE9SVF9DT01QX0RXOQkJX01NSU8oMHgxNjIxMjQpCj4gLSNkZWZpbmUgSUNMX1BPUlRf Q09NUF9EVzkocG9ydCkJCV9NTUlPKF9JQ0xfUE9SVF9DT01QX0RXKDksIHBvcnQpKQo+ICsjZGVm aW5lIElDTF9QT1JUX0NPTVBfRFc5KHBoeSkJCV9NTUlPKF9JQ0xfUE9SVF9DT01QX0RXKDksIHBo eSkpCj4gIAo+ICAjZGVmaW5lIENOTF9QT1JUX0NPTVBfRFcxMAkJX01NSU8oMHgxNjIxMjgpCj4g LSNkZWZpbmUgSUNMX1BPUlRfQ09NUF9EVzEwKHBvcnQpCV9NTUlPKF9JQ0xfUE9SVF9DT01QX0RX KDEwLCBwb3J0KSkKPiArI2RlZmluZSBJQ0xfUE9SVF9DT01QX0RXMTAocGh5KQkJX01NSU8oX0lD TF9QT1JUX0NPTVBfRFcoMTAsIHBoeSkpCj4gIAo+ICAvKiBDTkwvSUNMIFBvcnQgUENTIHJlZ2lz dGVycyAqLwo+ICAjZGVmaW5lIF9DTkxfUE9SVF9QQ1NfRFcxX0dSUF9BRQkweDE2MjMwNAo+IEBA IC0xODcwLDE0ICsxODcwLDE0IEBAIGVudW0gaTkxNV9wb3dlcl93ZWxsX2lkIHsKPiAgI2RlZmlu ZSBfQ05MX1BPUlRfUENTX0RXMV9MTjBfQwkJMHgxNjJDMDQKPiAgI2RlZmluZSBfQ05MX1BPUlRf UENTX0RXMV9MTjBfRAkJMHgxNjJFMDQKPiAgI2RlZmluZSBfQ05MX1BPUlRfUENTX0RXMV9MTjBf RgkJMHgxNjI4MDQKPiAtI2RlZmluZSBDTkxfUE9SVF9QQ1NfRFcxX0dSUChwb3J0KQlfTU1JTyhf UElDSyhwb3J0LCBcCj4gKyNkZWZpbmUgQ05MX1BPUlRfUENTX0RXMV9HUlAocGh5KQlfTU1JTyhf UElDSyhwaHksIFwKPiAgCQkJCQkJICAgIF9DTkxfUE9SVF9QQ1NfRFcxX0dSUF9BRSwgXAo+ICAJ CQkJCQkgICAgX0NOTF9QT1JUX1BDU19EVzFfR1JQX0IsIFwKPiAgCQkJCQkJICAgIF9DTkxfUE9S VF9QQ1NfRFcxX0dSUF9DLCBcCj4gIAkJCQkJCSAgICBfQ05MX1BPUlRfUENTX0RXMV9HUlBfRCwg XAo+ICAJCQkJCQkgICAgX0NOTF9QT1JUX1BDU19EVzFfR1JQX0FFLCBcCj4gIAkJCQkJCSAgICBf Q05MX1BPUlRfUENTX0RXMV9HUlBfRikpCj4gLSNkZWZpbmUgQ05MX1BPUlRfUENTX0RXMV9MTjAo cG9ydCkJX01NSU8oX1BJQ0socG9ydCwgXAo+ICsjZGVmaW5lIENOTF9QT1JUX1BDU19EVzFfTE4w KHBoeSkJX01NSU8oX1BJQ0socGh5LCBcCj4gIAkJCQkJCSAgICBfQ05MX1BPUlRfUENTX0RXMV9M TjBfQUUsIFwKPiAgCQkJCQkJICAgIF9DTkxfUE9SVF9QQ1NfRFcxX0xOMF9CLCBcCj4gIAkJCQkJ CSAgICBfQ05MX1BPUlRfUENTX0RXMV9MTjBfQywgXAo+IEBAIC0xODg4LDE1ICsxODg4LDE1IEBA IGVudW0gaTkxNV9wb3dlcl93ZWxsX2lkIHsKPiAgI2RlZmluZSBfSUNMX1BPUlRfUENTX0FVWAkJ MHgzMDAKPiAgI2RlZmluZSBfSUNMX1BPUlRfUENTX0dSUAkJMHg2MDAKPiAgI2RlZmluZSBfSUNM X1BPUlRfUENTX0xOKGxuKQkJKDB4ODAwICsgKGxuKSAqIDB4MTAwKQo+IC0jZGVmaW5lIF9JQ0xf UE9SVF9QQ1NfRFdfQVVYKGR3LCBwb3J0KQkoX0lDTF9DT01CT1BIWShwb3J0KSArIFwKPiArI2Rl ZmluZSBfSUNMX1BPUlRfUENTX0RXX0FVWChkdywgcGh5KQkoX0lDTF9DT01CT1BIWShwaHkpICsg XAo+ICAJCQkJCSBfSUNMX1BPUlRfUENTX0FVWCArIDQgKiAoZHcpKQo+IC0jZGVmaW5lIF9JQ0xf UE9SVF9QQ1NfRFdfR1JQKGR3LCBwb3J0KQkoX0lDTF9DT01CT1BIWShwb3J0KSArIFwKPiArI2Rl ZmluZSBfSUNMX1BPUlRfUENTX0RXX0dSUChkdywgcGh5KQkoX0lDTF9DT01CT1BIWShwaHkpICsg XAo+ICAJCQkJCSBfSUNMX1BPUlRfUENTX0dSUCArIDQgKiAoZHcpKQo+IC0jZGVmaW5lIF9JQ0xf UE9SVF9QQ1NfRFdfTE4oZHcsIGxuLCBwb3J0KSAoX0lDTF9DT01CT1BIWShwb3J0KSArIFwKPiAr I2RlZmluZSBfSUNMX1BPUlRfUENTX0RXX0xOKGR3LCBsbiwgcGh5KSAoX0lDTF9DT01CT1BIWShw aHkpICsgXAo+ICAJCQkJCSAgX0lDTF9QT1JUX1BDU19MTihsbikgKyA0ICogKGR3KSkKPiAtI2Rl ZmluZSBJQ0xfUE9SVF9QQ1NfRFcxX0FVWChwb3J0KQlfTU1JTyhfSUNMX1BPUlRfUENTX0RXX0FV WCgxLCBwb3J0KSkKPiAtI2RlZmluZSBJQ0xfUE9SVF9QQ1NfRFcxX0dSUChwb3J0KQlfTU1JTyhf SUNMX1BPUlRfUENTX0RXX0dSUCgxLCBwb3J0KSkKPiAtI2RlZmluZSBJQ0xfUE9SVF9QQ1NfRFcx X0xOMChwb3J0KQlfTU1JTyhfSUNMX1BPUlRfUENTX0RXX0xOKDEsIDAsIHBvcnQpKQo+ICsjZGVm aW5lIElDTF9QT1JUX1BDU19EVzFfQVVYKHBoeSkJX01NSU8oX0lDTF9QT1JUX1BDU19EV19BVVgo MSwgcGh5KSkKPiArI2RlZmluZSBJQ0xfUE9SVF9QQ1NfRFcxX0dSUChwaHkpCV9NTUlPKF9JQ0xf UE9SVF9QQ1NfRFdfR1JQKDEsIHBoeSkpCj4gKyNkZWZpbmUgSUNMX1BPUlRfUENTX0RXMV9MTjAo cGh5KQlfTU1JTyhfSUNMX1BPUlRfUENTX0RXX0xOKDEsIDAsIHBoeSkpCj4gICNkZWZpbmUgICBD T01NT05fS0VFUEVSX0VOCQkoMSA8PCAyNikKPiAgI2RlZmluZSAgIExBVEVOQ1lfT1BUSU1fTUFT SwkJKDB4MyA8PCAyKQo+ICAjZGVmaW5lICAgTEFURU5DWV9PUFRJTV9WQUwoeCkJCSgoeCkgPDwg MikKPiBAQCAtMTkzMywxOCArMTkzMywxOCBAQCBlbnVtIGk5MTVfcG93ZXJfd2VsbF9pZCB7Cj4g ICNkZWZpbmUgX0lDTF9QT1JUX1RYX0dSUAkJMHg2ODAKPiAgI2RlZmluZSBfSUNMX1BPUlRfVFhf TE4obG4pCQkoMHg4ODAgKyAobG4pICogMHgxMDApCj4gIAo+IC0jZGVmaW5lIF9JQ0xfUE9SVF9U WF9EV19BVVgoZHcsIHBvcnQpCShfSUNMX0NPTUJPUEhZKHBvcnQpICsgXAo+ICsjZGVmaW5lIF9J Q0xfUE9SVF9UWF9EV19BVVgoZHcsIHBoeSkJKF9JQ0xfQ09NQk9QSFkocGh5KSArIFwKPiAgCQkJ CQkgX0lDTF9QT1JUX1RYX0FVWCArIDQgKiAoZHcpKQo+IC0jZGVmaW5lIF9JQ0xfUE9SVF9UWF9E V19HUlAoZHcsIHBvcnQpCShfSUNMX0NPTUJPUEhZKHBvcnQpICsgXAo+ICsjZGVmaW5lIF9JQ0xf UE9SVF9UWF9EV19HUlAoZHcsIHBoeSkJKF9JQ0xfQ09NQk9QSFkocGh5KSArIFwKPiAgCQkJCQkg X0lDTF9QT1JUX1RYX0dSUCArIDQgKiAoZHcpKQo+IC0jZGVmaW5lIF9JQ0xfUE9SVF9UWF9EV19M TihkdywgbG4sIHBvcnQpIChfSUNMX0NPTUJPUEhZKHBvcnQpICsgXAo+ICsjZGVmaW5lIF9JQ0xf UE9SVF9UWF9EV19MTihkdywgbG4sIHBoeSkgKF9JQ0xfQ09NQk9QSFkocGh5KSArIFwKPiAgCQkJ CQkgIF9JQ0xfUE9SVF9UWF9MTihsbikgKyA0ICogKGR3KSkKPiAgCj4gICNkZWZpbmUgQ05MX1BP UlRfVFhfRFcyX0dSUChwb3J0KQlfTU1JTyhfQ05MX1BPUlRfVFhfRFdfR1JQKDIsIHBvcnQpKQo+ ICAjZGVmaW5lIENOTF9QT1JUX1RYX0RXMl9MTjAocG9ydCkJX01NSU8oX0NOTF9QT1JUX1RYX0RX X0xOMCgyLCBwb3J0KSkKPiAtI2RlZmluZSBJQ0xfUE9SVF9UWF9EVzJfQVVYKHBvcnQpCV9NTUlP KF9JQ0xfUE9SVF9UWF9EV19BVVgoMiwgcG9ydCkpCj4gLSNkZWZpbmUgSUNMX1BPUlRfVFhfRFcy X0dSUChwb3J0KQlfTU1JTyhfSUNMX1BPUlRfVFhfRFdfR1JQKDIsIHBvcnQpKQo+IC0jZGVmaW5l IElDTF9QT1JUX1RYX0RXMl9MTjAocG9ydCkJX01NSU8oX0lDTF9QT1JUX1RYX0RXX0xOKDIsIDAs IHBvcnQpKQo+ICsjZGVmaW5lIElDTF9QT1JUX1RYX0RXMl9BVVgocGh5KQlfTU1JTyhfSUNMX1BP UlRfVFhfRFdfQVVYKDIsIHBoeSkpCj4gKyNkZWZpbmUgSUNMX1BPUlRfVFhfRFcyX0dSUChwaHkp CV9NTUlPKF9JQ0xfUE9SVF9UWF9EV19HUlAoMiwgcGh5KSkKPiArI2RlZmluZSBJQ0xfUE9SVF9U WF9EVzJfTE4wKHBoeSkJX01NSU8oX0lDTF9QT1JUX1RYX0RXX0xOKDIsIDAsIHBoeSkpCj4gICNk ZWZpbmUgICBTV0lOR19TRUxfVVBQRVIoeCkJCSgoKHgpID4+IDMpIDw8IDE1KQo+ICAjZGVmaW5l ICAgU1dJTkdfU0VMX1VQUEVSX01BU0sJCSgxIDw8IDE1KQo+ICAjZGVmaW5lICAgU1dJTkdfU0VM X0xPV0VSKHgpCQkoKCh4KSAmIDB4NykgPDwgMTEpCj4gQEAgLTE5NjEsMTAgKzE5NjEsMTAgQEAg ZW51bSBpOTE1X3Bvd2VyX3dlbGxfaWQgewo+ICAjZGVmaW5lIENOTF9QT1JUX1RYX0RXNF9MTihs biwgcG9ydCkgICBfTU1JTyhfQ05MX1BPUlRfVFhfRFdfTE4wKDQsIChwb3J0KSkgKyBcCj4gIAkJ CQkJICAgKChsbikgKiAoX0NOTF9QT1JUX1RYX0RXNF9MTjFfQUUgLSBcCj4gIAkJCQkJCSAgICBf Q05MX1BPUlRfVFhfRFc0X0xOMF9BRSkpKQo+IC0jZGVmaW5lIElDTF9QT1JUX1RYX0RXNF9BVVgo cG9ydCkJX01NSU8oX0lDTF9QT1JUX1RYX0RXX0FVWCg0LCBwb3J0KSkKPiAtI2RlZmluZSBJQ0xf UE9SVF9UWF9EVzRfR1JQKHBvcnQpCV9NTUlPKF9JQ0xfUE9SVF9UWF9EV19HUlAoNCwgcG9ydCkp Cj4gLSNkZWZpbmUgSUNMX1BPUlRfVFhfRFc0X0xOMChwb3J0KQlfTU1JTyhfSUNMX1BPUlRfVFhf RFdfTE4oNCwgMCwgcG9ydCkpCj4gLSNkZWZpbmUgSUNMX1BPUlRfVFhfRFc0X0xOKGxuLCBwb3J0 KQlfTU1JTyhfSUNMX1BPUlRfVFhfRFdfTE4oNCwgbG4sIHBvcnQpKQo+ICsjZGVmaW5lIElDTF9Q T1JUX1RYX0RXNF9BVVgocGh5KQlfTU1JTyhfSUNMX1BPUlRfVFhfRFdfQVVYKDQsIHBoeSkpCj4g KyNkZWZpbmUgSUNMX1BPUlRfVFhfRFc0X0dSUChwaHkpCV9NTUlPKF9JQ0xfUE9SVF9UWF9EV19H UlAoNCwgcGh5KSkKPiArI2RlZmluZSBJQ0xfUE9SVF9UWF9EVzRfTE4wKHBoeSkJX01NSU8oX0lD TF9QT1JUX1RYX0RXX0xOKDQsIDAsIHBoeSkpCj4gKyNkZWZpbmUgSUNMX1BPUlRfVFhfRFc0X0xO KGxuLCBwaHkpCV9NTUlPKF9JQ0xfUE9SVF9UWF9EV19MTig0LCBsbiwgcGh5KSkKPiAgI2RlZmlu ZSAgIExPQURHRU5fU0VMRUNUCQkoMSA8PCAzMSkKPiAgI2RlZmluZSAgIFBPU1RfQ1VSU09SXzEo eCkJCSgoeCkgPDwgMTIpCj4gICNkZWZpbmUgICBQT1NUX0NVUlNPUl8xX01BU0sJCSgweDNGIDw8 IDEyKQo+IEBAIC0xOTc1LDkgKzE5NzUsOSBAQCBlbnVtIGk5MTVfcG93ZXJfd2VsbF9pZCB7Cj4g IAo+ICAjZGVmaW5lIENOTF9QT1JUX1RYX0RXNV9HUlAocG9ydCkJX01NSU8oX0NOTF9QT1JUX1RY X0RXX0dSUCg1LCBwb3J0KSkKPiAgI2RlZmluZSBDTkxfUE9SVF9UWF9EVzVfTE4wKHBvcnQpCV9N TUlPKF9DTkxfUE9SVF9UWF9EV19MTjAoNSwgcG9ydCkpCj4gLSNkZWZpbmUgSUNMX1BPUlRfVFhf RFc1X0FVWChwb3J0KQlfTU1JTyhfSUNMX1BPUlRfVFhfRFdfQVVYKDUsIHBvcnQpKQo+IC0jZGVm aW5lIElDTF9QT1JUX1RYX0RXNV9HUlAocG9ydCkJX01NSU8oX0lDTF9QT1JUX1RYX0RXX0dSUCg1 LCBwb3J0KSkKPiAtI2RlZmluZSBJQ0xfUE9SVF9UWF9EVzVfTE4wKHBvcnQpCV9NTUlPKF9JQ0xf UE9SVF9UWF9EV19MTig1LCAwLCBwb3J0KSkKPiArI2RlZmluZSBJQ0xfUE9SVF9UWF9EVzVfQVVY KHBoeSkJX01NSU8oX0lDTF9QT1JUX1RYX0RXX0FVWCg1LCBwaHkpKQo+ICsjZGVmaW5lIElDTF9Q T1JUX1RYX0RXNV9HUlAocGh5KQlfTU1JTyhfSUNMX1BPUlRfVFhfRFdfR1JQKDUsIHBoeSkpCj4g KyNkZWZpbmUgSUNMX1BPUlRfVFhfRFc1X0xOMChwaHkpCV9NTUlPKF9JQ0xfUE9SVF9UWF9EV19M Tig1LCAwLCBwaHkpKQo+ICAjZGVmaW5lICAgVFhfVFJBSU5JTkdfRU4JCSgxIDw8IDMxKQo+ICAj ZGVmaW5lICAgVEFQMl9ESVNBQkxFCQkJKDEgPDwgMzApCj4gICNkZWZpbmUgICBUQVAzX0RJU0FC TEUJCQkoMSA8PCAyOSkKPiBAQCAtMTk4OCwxMCArMTk4OCwxMCBAQCBlbnVtIGk5MTVfcG93ZXJf d2VsbF9pZCB7Cj4gIAo+ICAjZGVmaW5lIENOTF9QT1JUX1RYX0RXN19HUlAocG9ydCkJX01NSU8o X0NOTF9QT1JUX1RYX0RXX0dSUCg3LCAocG9ydCkpKQo+ICAjZGVmaW5lIENOTF9QT1JUX1RYX0RX N19MTjAocG9ydCkJX01NSU8oX0NOTF9QT1JUX1RYX0RXX0xOMCg3LCAocG9ydCkpKQo+IC0jZGVm aW5lIElDTF9QT1JUX1RYX0RXN19BVVgocG9ydCkJX01NSU8oX0lDTF9QT1JUX1RYX0RXX0FVWCg3 LCBwb3J0KSkKPiAtI2RlZmluZSBJQ0xfUE9SVF9UWF9EVzdfR1JQKHBvcnQpCV9NTUlPKF9JQ0xf UE9SVF9UWF9EV19HUlAoNywgcG9ydCkpCj4gLSNkZWZpbmUgSUNMX1BPUlRfVFhfRFc3X0xOMChw b3J0KQlfTU1JTyhfSUNMX1BPUlRfVFhfRFdfTE4oNywgMCwgcG9ydCkpCj4gLSNkZWZpbmUgSUNM X1BPUlRfVFhfRFc3X0xOKGxuLCBwb3J0KQlfTU1JTyhfSUNMX1BPUlRfVFhfRFdfTE4oNywgbG4s IHBvcnQpKQo+ICsjZGVmaW5lIElDTF9QT1JUX1RYX0RXN19BVVgocGh5KQlfTU1JTyhfSUNMX1BP UlRfVFhfRFdfQVVYKDcsIHBoeSkpCj4gKyNkZWZpbmUgSUNMX1BPUlRfVFhfRFc3X0dSUChwaHkp CV9NTUlPKF9JQ0xfUE9SVF9UWF9EV19HUlAoNywgcGh5KSkKPiArI2RlZmluZSBJQ0xfUE9SVF9U WF9EVzdfTE4wKHBoeSkJX01NSU8oX0lDTF9QT1JUX1RYX0RXX0xOKDcsIDAsIHBoeSkpCj4gKyNk ZWZpbmUgSUNMX1BPUlRfVFhfRFc3X0xOKGxuLCBwaHkpCV9NTUlPKF9JQ0xfUE9SVF9UWF9EV19M Tig3LCBsbiwgcGh5KSkKPiAgI2RlZmluZSAgIE5fU0NBTEFSKHgpCQkJKCh4KSA8PCAyNCkKPiAg I2RlZmluZSAgIE5fU0NBTEFSX01BU0sJCQkoMHg3RiA8PCAyNCkKCi0tIApKYW5pIE5pa3VsYSwg SW50ZWwgT3BlbiBTb3VyY2UgR3JhcGhpY3MgQ2VudGVyCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeA==