From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dmitry Osipenko Subject: Re: [PATCH 5/8] memory: tegra: Add EMC scaling sequence code for Tegra210 Date: Tue, 2 Apr 2019 14:36:56 +0300 Message-ID: <2ff88007-8c37-3775-88a1-69d3a38c01a9@gmail.com> References: <20190325074523.26456-1-josephl@nvidia.com> <20190325074523.26456-6-josephl@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190325074523.26456-6-josephl@nvidia.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Joseph Lo , Thierry Reding , Peter De Schrijver , Jonathan Hunter , Rob Herring , Stephen Boyd Cc: linux-tegra@vger.kernel.org, devicetree@vger.kernel.org, linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org MjUuMDMuMjAxOSAxMDo0NSwgSm9zZXBoIExvINC/0LjRiNC10YI6Cj4gVGhpcyBwYXRjaCBpbmNs dWRlcyB0aGUgc2VxdWVuY2UgZm9yIGNvbnRyb2xsaW5nIHRoZSByYXRlIGNoYW5naW5nIGZvcgo+ IEVNQyBmcmVxdWVuY3kgYW5kIHRoZSBkeW5hbWljIHRyYWluaW5nIG1lY2hhbmlzbSB3aGVuIHRo ZSByYXRlIHJlYWNoZXMKPiB0aGUgaGlnaGVyIHJhdGVzIG9mIEVNQyByYXRlLgo+IAo+IEFuZCBo aXN0b3JpY2FsbHkgdGhlcmUgaGF2ZSBiZWVuIGRpZmZlcmVudCBzZXF1ZW5jZXMgdG8gY2hhbmdl IHRoZSBFTUMKPiBjbG9jay4gVGhlIHNlcXVlbmNlIHRvIGJlIHVzZWQgaXMgc3BlY2lmaWVkIGlu IHRoZSBzY2FsaW5nIGRhdGEuCj4gSG93ZXZlciwgZm9yIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVk IHVwc3RyZWFtaW5nIHBsYXRmb3JtLCBvbmx5IHRoZSBtb3N0Cj4gcmVjZW50IHNlcXVlbmNlIGlz IHVzZWQuIFNvIG9ubHkgc3VwcG9ydCB0aGF0IGluIHRoaXMgcGF0Y2guCj4gCj4gQmFzZWQgb24g dGhlIHdvcmsgb2YgUGV0ZXIgRGUgU2NocmlqdmVyIDxwZGVzY2hyaWp2ZXJAbnZpZGlhLmNvbT4u Cj4gCj4gU2lnbmVkLW9mZi1ieTogSm9zZXBoIExvIDxqb3NlcGhsQG52aWRpYS5jb20+Cj4gLS0t Cj4gIGRyaXZlcnMvbWVtb3J5L3RlZ3JhL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgIDIg Ky0KPiAgZHJpdmVycy9tZW1vcnkvdGVncmEvdGVncmEyMTAtZW1jLWNjLXIyMTAyMS5jIHwgMTk2 MiArKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL21lbW9yeS90ZWdyYS90ZWdyYTIxMC1lbWMt cmVnLmggICAgICAgfCAgMTM0ICsrCj4gIGRyaXZlcnMvbWVtb3J5L3RlZ3JhL3RlZ3JhMjEwLWVt Yy5jICAgICAgICAgICB8ICAgIDUgKwo+ICA0IGZpbGVzIGNoYW5nZWQsIDIxMDIgaW5zZXJ0aW9u cygrKSwgMSBkZWxldGlvbigtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZW1vcnkv dGVncmEvdGVncmEyMTAtZW1jLWNjLXIyMTAyMS5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bWVtb3J5L3RlZ3JhL01ha2VmaWxlIGIvZHJpdmVycy9tZW1vcnkvdGVncmEvTWFrZWZpbGUKPiBp bmRleCAzNmE4MzU2MjBiYmQuLmRjYzI0NWIyZWY0NSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL21l bW9yeS90ZWdyYS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvbWVtb3J5L3RlZ3JhL01ha2VmaWxl Cj4gQEAgLTEyLDUgKzEyLDUgQEAgb2JqLSQoQ09ORklHX1RFR1JBX01DKSArPSB0ZWdyYS1tYy5v Cj4gIAo+ICBvYmotJChDT05GSUdfVEVHUkEyMF9FTUMpICArPSB0ZWdyYTIwLWVtYy5vCj4gIG9i ai0kKENPTkZJR19URUdSQTEyNF9FTUMpICs9IHRlZ3JhMTI0LWVtYy5vCj4gLW9iai0kKENPTkZJ R19URUdSQTIxMF9FTUMpICs9IHRlZ3JhMjEwLWVtYy5vIHRlZ3JhMjEwLWR0LXBhcnNlLm8KPiAr b2JqLSQoQ09ORklHX1RFR1JBMjEwX0VNQykgKz0gdGVncmEyMTAtZW1jLm8gdGVncmEyMTAtZHQt cGFyc2UubyB0ZWdyYTIxMC1lbWMtY2MtcjIxMDIxLm8KPiAgb2JqLSQoQ09ORklHX0FSQ0hfVEVH UkFfMTg2X1NPQykgKz0gdGVncmExODYubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lbW9yeS90 ZWdyYS90ZWdyYTIxMC1lbWMtY2MtcjIxMDIxLmMgYi9kcml2ZXJzL21lbW9yeS90ZWdyYS90ZWdy YTIxMC1lbWMtY2MtcjIxMDIxLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAwMC4uZjU3N2E4YzNhYTk1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvbWVt b3J5L3RlZ3JhL3RlZ3JhMjEwLWVtYy1jYy1yMjEwMjEuYwo+IEBAIC0wLDAgKzEsMTk2MiBAQAo+ ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBDb3B5cmln aHQgKGMpIDIwMTQtMjAxOSwgTlZJRElBIENPUlBPUkFUSU9OLiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9pby5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9k ZWxheS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiArI2luY2x1ZGUgPHNvYy90ZWdyYS9t Yy5oPgo+ICsKPiArI2luY2x1ZGUgIm1jLmgiCj4gKyNpbmNsdWRlICJ0ZWdyYTIxMC1lbWMtcmVn LmgiCj4gKwo+ICsjZGVmaW5lIERWRlNfQ0xPQ0tfQ0hBTkdFX1ZFUlNJT04JMjEwMjEKPiArI2Rl ZmluZSBFTUNfUFJFTE9DS19WRVJTSU9OCQkyMTAxCj4gKwo+ICsjZGVmaW5lIGVtY19jY19kYmco dCwgLi4uKSBwcl9kZWJ1ZyhfX1ZBX0FSR1NfXykKPiArCj4gKy8qCj4gKyAqIEVuYWJsZSBmbGFn cyBmb3Igc3BlY2lmeWluZyB2ZXJib3NpdHkuCj4gKyAqLwo+ICsjZGVmaW5lIElORk8gICAgICAg ICAgICAoMSA8PCAwKQo+ICsjZGVmaW5lIFNURVBTICAgICAgICAgICAoMSA8PCAxKQo+ICsjZGVm aW5lIFNVQl9TVEVQUyAgICAgICAoMSA8PCAyKQo+ICsjZGVmaW5lIFBSRUxPQ0sgICAgICAgICAo MSA8PCAzKQo+ICsjZGVmaW5lIFBSRUxPQ0tfU1RFUFMgICAoMSA8PCA0KQo+ICsjZGVmaW5lIEFD VElWRV9FTiAgICAgICAoMSA8PCA1KQo+ICsjZGVmaW5lIFBSQU1QX1VQICAgICAgICAoMSA8PCA2 KQo+ICsjZGVmaW5lIFBSQU1QX0ROICAgICAgICAoMSA8PCA3KQo+ICsjZGVmaW5lIEVNQV9XUklU RVMgICAgICAoMSA8PCAxMCkKPiArI2RlZmluZSBFTUFfVVBEQVRFUyAgICAgKDEgPDwgMTEpCj4g KyNkZWZpbmUgUEVSX1RSQUlOICAgICAgICgxIDw8IDE2KQo+ICsjZGVmaW5lIENDX1BSSU5UICAg ICAgICAoMSA8PCAxNykKPiArI2RlZmluZSBDQ0ZJRk8gICAgICAgICAgKDEgPDwgMjkpCj4gKyNk ZWZpbmUgUkVHUyAgICAgICAgICAgICgxIDw8IDMwKQo+ICsjZGVmaW5lIFJFR19MSVNUUyAgICAg ICAoMSA8PCAzMSkKPiArCj4gK2VudW0gewo+ICsJRFZGU19TRVFVRU5DRSA9IDEsCj4gKwlXUklU RV9UUkFJTklOR19TRVFVRU5DRSA9IDIsCj4gKwlQRVJJT0RJQ19UUkFJTklOR19TRVFVRU5DRSA9 IDMsCj4gKwlEVkZTX1BUMSA9IDEwLAo+ICsJRFZGU19VUERBVEUgPSAxMSwKPiArCVRSQUlOSU5H X1BUMSA9IDEyLAo+ICsJVFJBSU5JTkdfVVBEQVRFID0gMTMsCj4gKwlQRVJJT0RJQ19UUkFJTklO R19VUERBVEUgPSAxNAo+ICt9Owo+ICsKPiArLyoKPiArICogUFRGViBkZWZpbmVzIC0gYmFzaWNh bGx5IGp1c3QgaW5kZXhlcyBpbnRvIHRoZSBwZXIgdGFibGUgUFRGViBhcnJheS4KPiArICovCj4g KyNkZWZpbmUgUFRGVl9EUVNPU0NfTU9WQVZHX0MwRDBVMF9JTkRFWAkJMAo+ICsjZGVmaW5lIFBU RlZfRFFTT1NDX01PVkFWR19DMEQwVTFfSU5ERVgJCTEKPiArI2RlZmluZSBQVEZWX0RRU09TQ19N T1ZBVkdfQzBEMVUwX0lOREVYCQkyCj4gKyNkZWZpbmUgUFRGVl9EUVNPU0NfTU9WQVZHX0MwRDFV MV9JTkRFWAkJMwo+ICsjZGVmaW5lIFBURlZfRFFTT1NDX01PVkFWR19DMUQwVTBfSU5ERVgJCTQK PiArI2RlZmluZSBQVEZWX0RRU09TQ19NT1ZBVkdfQzFEMFUxX0lOREVYCQk1Cj4gKyNkZWZpbmUg UFRGVl9EUVNPU0NfTU9WQVZHX0MxRDFVMF9JTkRFWAkJNgo+ICsjZGVmaW5lIFBURlZfRFFTT1ND X01PVkFWR19DMUQxVTFfSU5ERVgJCTcKPiArI2RlZmluZSBQVEZWX0RWRlNfU0FNUExFU19JTkRF WAkJCTkKPiArI2RlZmluZSBQVEZWX01PVkFWR19XRUlHSFRfSU5ERVgJCTEwCj4gKyNkZWZpbmUg UFRGVl9DT05GSUdfQ1RSTF9JTkRFWAkJCTExCj4gKwo+ICsjZGVmaW5lIFBURlZfQ09ORklHX0NU UkxfVVNFX1BSRVZJT1VTX0VNQQkoMSA8PCAwKQo+ICsKPiArLyoKPiArICogRG8gYXJpdGhtZXRp YyBpbiBmaXhlZCBwb2ludC4KPiArICovCj4gKyNkZWZpbmUgTU9WQVZHX1BSRUNJU0lPTl9GQUNU T1IJCTEwMAo+ICsKPiArLyoKPiArICogVGhlIGRpdmlzaW9uIHBvcnRpb24gb2YgdGhlIGF2ZXJh Z2Ugb3BlcmF0aW9uLgo+ICsgKi8KPiArI2RlZmluZSBfX0FWRVJBR0VfUFRGVihkZXYpCQkJCQkJ XAo+ICsJKHsgbmV4dF90aW1pbmctPnB0ZnZfbGlzdFtQVEZWX0RRU09TQ19NT1ZBVkdfICMjIGRl diAjIyBfSU5ERVhdID0gXAo+ICsJICAgbmV4dF90aW1pbmctPnB0ZnZfbGlzdFtQVEZWX0RRU09T Q19NT1ZBVkdfICMjIGRldiAjIyBfSU5ERVhdIC8gXAo+ICsJICAgbmV4dF90aW1pbmctPnB0ZnZf bGlzdFtQVEZWX0RWRlNfU0FNUExFU19JTkRFWF07IH0pCj4gKwo+ICsvKgo+ICsgKiBDb252ZXJ0 IHZhbCB0byBmaXhlZCBwb2ludCBhbmQgYWRkIGl0IHRvIHRoZSB0ZW1wb3JhcnkgYXZlcmFnZS4K PiArICovCj4gKyNkZWZpbmUgX19JTkNSRU1FTlRfUFRGVihkZXYsIHZhbCkJCQkJCVwKPiArCSh7 IG5leHRfdGltaW5nLT5wdGZ2X2xpc3RbUFRGVl9EUVNPU0NfTU9WQVZHXyAjIyBkZXYgIyMgX0lO REVYXSArPSBcCj4gKwkgICAoKHZhbCkgKiBNT1ZBVkdfUFJFQ0lTSU9OX0ZBQ1RPUik7IH0pCj4g Kwo+ICsvKgo+ICsgKiBDb252ZXJ0IGEgbW92aW5nIGF2ZXJhZ2UgYmFjayB0byBpbnRlZ3JhbCBm b3JtIGFuZCByZXR1cm4gdGhlIHZhbHVlLgo+ICsgKi8KPiArI2RlZmluZSBfX01PVkFWR19BQyh0 aW1pbmcsIGRldikJCQkJCVwKPiArCSgodGltaW5nKS0+cHRmdl9saXN0W1BURlZfRFFTT1NDX01P VkFWR18gIyMgZGV2ICMjIF9JTkRFWF0gLwlcCj4gKwkgTU9WQVZHX1BSRUNJU0lPTl9GQUNUT1Ip Cj4gKwo+ICsvKiBXZWlnaHRlZCB1cGRhdGUuICovCj4gKyNkZWZpbmUgX19XRUlHSFRFRF9VUERB VEVfUFRGVihkZXYsIG52YWwpCQkJCVwKPiArCWRvIHsJCQkJCQkJCVwKPiArCQlpbnQgdyA9IFBU RlZfTU9WQVZHX1dFSUdIVF9JTkRFWDsJCQlcCj4gKwkJaW50IGRxcyA9IFBURlZfRFFTT1NDX01P VkFWR18gIyMgZGV2ICMjIF9JTkRFWDsJCVwKPiArCQkJCQkJCQkJXAo+ICsJCW5leHRfdGltaW5n LT5wdGZ2X2xpc3RbZHFzXSA9CQkJCVwKPiArCQkJKChudmFsICogTU9WQVZHX1BSRUNJU0lPTl9G QUNUT1IpICsJCVwKPiArCQkJIChuZXh0X3RpbWluZy0+cHRmdl9saXN0W2Rxc10gKgkJCVwKPiAr CQkJICBuZXh0X3RpbWluZy0+cHRmdl9saXN0W3ddKSkgLwkJCVwKPiArCQkJKG5leHRfdGltaW5n LT5wdGZ2X2xpc3Rbd10gKyAxKTsJCVwKPiArCQkJCQkJCQkJXAo+ICsJCWVtY19jY19kYmcoRU1B X1VQREFURVMsICIlczogKHM9JXUpIEVNQTogJXVcbiIsCQlcCj4gKwkJCSAgIF9fc3RyaW5naWZ5 KGRldiksIG52YWwsCQkJXAo+ICsJCQkgICBuZXh0X3RpbWluZy0+cHRmdl9saXN0W2Rxc10pOwkJ XAo+ICsJfSB3aGlsZSAoMCkKPiArCj4gKy8qIEFjY2VzcyBhIHBhcnRpY3VsYXIgYXZlcmFnZS4g Ki8KPiArI2RlZmluZSBfX01PVkFWRyh0aW1pbmcsIGRldikgICAgICAgICAgICAgICAgICAgICAg XAo+ICsJKCh0aW1pbmcpLT5wdGZ2X2xpc3RbUFRGVl9EUVNPU0NfTU9WQVZHXyAjIyBkZXYgIyMg X0lOREVYXSkKPiArCj4gK3N0YXRpYyB1MzIgdXBkYXRlX2Nsb2NrX3RyZWVfZGVsYXkoc3RydWN0 IHRlZ3JhX2VtYyAqZW1jLAo+ICsJCQkJICAgdTMyIGRyYW1fZGV2X251bSwgdTMyIGNoYW5uZWxf bW9kZSwgaW50IHR5cGUpCj4gK3sKPiArCXUzMiBtcnJfcmVxID0gMCwgbXJyX2RhdGEgPSAwOwo+ ICsJdTMyIHRlbXAwXzAgPSAwLCB0ZW1wMF8xID0gMCwgdGVtcDFfMCA9IDAsIHRlbXAxXzEgPSAw Owo+ICsJczMyIHRkZWwgPSAwLCB0bWRlbCA9IDAsIGFkZWwgPSAwOwo+ICsJdTMyIGN2YWwgPSAw Owo+ICsJc3RydWN0IGVtY190YWJsZSAqbGFzdF90aW1pbmcgPSBlbWMtPmN1cnJlbnRfdGltaW5n Owo+ICsJc3RydWN0IGVtY190YWJsZSAqbmV4dF90aW1pbmcgPSBlbWMtPm5leHRfdGltaW5nOwo+ ICsJdTMyIGxhc3RfdGltaW5nX3JhdGVfbWh6ID0gbGFzdF90aW1pbmctPnJhdGUgLyAxMDAwOwo+ ICsJdTMyIG5leHRfdGltaW5nX3JhdGVfbWh6ID0gbmV4dF90aW1pbmctPnJhdGUgLyAxMDAwOwo+ ICsJaW50IGR2ZnNfcHQxID0gdHlwZSA9PSBEVkZTX1BUMTsKPiArCWludCBkdmZzX3VwZGF0ZSA9 IHR5cGUgPT0gRFZGU19VUERBVEU7Cj4gKwlpbnQgcGVyaW9kaWNfdHJhaW5pbmdfdXBkYXRlID0g dHlwZSA9PSBQRVJJT0RJQ19UUkFJTklOR19VUERBVEU7Cj4gKwo+ICsJLyoKPiArCSAqIERldjAg TVNCLgo+ICsJICovCj4gKwlpZiAoZHZmc19wdDEgfHwgcGVyaW9kaWNfdHJhaW5pbmdfdXBkYXRl KSB7Cj4gKwkJbXJyX3JlcSA9ICgyIDw8IEVNQ19NUlJfREVWX1NFTF9TSElGVCkgfAo+ICsJCQko MTkgPDwgRU1DX01SUl9NQV9TSElGVCk7Cj4gKwkJZW1jX3dyaXRlbChlbWMsIG1ycl9yZXEsIEVN Q19NUlIpOwo+ICsKPiArCQlXQVJOKHdhaXRfZm9yX3VwZGF0ZShlbWMsIEVNQ19FTUNfU1RBVFVT LAo+ICsJCQkJICAgICBFTUNfRU1DX1NUQVRVU19NUlJfRElWTEQsIDEsIFJFR19FTUMpLAo+ICsJ CSAgICAgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBNUlIgMTkgKGNoPTApXG4iKTsKPiArCQlpZiAo Y2hhbm5lbF9tb2RlID09IERVQUxfQ0hBTk5FTCkKPiArCQkJV0FSTih3YWl0X2Zvcl91cGRhdGUo ZW1jLCBFTUNfRU1DX1NUQVRVUywKPiArCQkJCQkgICAgIEVNQ19FTUNfU1RBVFVTX01SUl9ESVZM RCwgMSwKPiArCQkJCQkgICAgIFJFR19FTUMxKSwKPiArCQkJICAgICAiVGltZWQgb3V0IHdhaXRp bmcgZm9yIE1SUiAxOSAoY2g9MSlcbiIpOwo+ICsKPiArCQltcnJfZGF0YSA9IChlbWNfcmVhZGwo ZW1jLCBFTUNfTVJSKSAmIEVNQ19NUlJfREFUQV9NQVNLKSA8PAo+ICsJCQkgICBFTUNfTVJSX0RB VEFfU0hJRlQ7Cj4gKwo+ICsJCXRlbXAwXzAgPSAobXJyX2RhdGEgJiAweGZmKSA8PCA4Owo+ICsJ CXRlbXAwXzEgPSBtcnJfZGF0YSAmIDB4ZmYwMDsKPiArCj4gKwkJaWYgKGNoYW5uZWxfbW9kZSA9 PSBEVUFMX0NIQU5ORUwpIHsKPiArCQkJbXJyX2RhdGEgPSAoZW1jMV9yZWFkbChlbWMsIEVNQ19N UlIpICYKPiArCQkJCSAgICBFTUNfTVJSX0RBVEFfTUFTSykgPDwKPiArCQkJCSAgIEVNQ19NUlJf REFUQV9TSElGVDsKPiArCQkJdGVtcDFfMCA9IChtcnJfZGF0YSAmIDB4ZmYpIDw8IDg7Cj4gKwkJ CXRlbXAxXzEgPSBtcnJfZGF0YSAmIDB4ZmYwMDsKPiArCQl9Cj4gKwo+ICsJCS8qCj4gKwkJICog RGV2MCBMU0IuCj4gKwkJICovCj4gKwkJbXJyX3JlcSA9IChtcnJfcmVxICYgfkVNQ19NUlJfTUFf TUFTSykgfAo+ICsJCQkgICgxOCA8PCBFTUNfTVJSX01BX1NISUZUKTsKPiArCQllbWNfd3JpdGVs KGVtYywgbXJyX3JlcSwgRU1DX01SUik7Cj4gKwo+ICsJCVdBUk4od2FpdF9mb3JfdXBkYXRlKGVt YywgRU1DX0VNQ19TVEFUVVMsCj4gKwkJCQkgICAgIEVNQ19FTUNfU1RBVFVTX01SUl9ESVZMRCwg MSwgUkVHX0VNQyksCj4gKwkJICAgICAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIE1SUiAxOCAoY2g9 MClcbiIpOwo+ICsJCWlmIChjaGFubmVsX21vZGUgPT0gRFVBTF9DSEFOTkVMKQo+ICsJCQlXQVJO KHdhaXRfZm9yX3VwZGF0ZShlbWMsIEVNQ19FTUNfU1RBVFVTLAo+ICsJCQkJCSAgICAgRU1DX0VN Q19TVEFUVVNfTVJSX0RJVkxELCAxLAo+ICsJCQkJCSAgICAgUkVHX0VNQzEpLAo+ICsJCQkgICAg ICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgTVJSIDE4IChjaD0xKVxuIik7Cj4gKwo+ICsJCW1ycl9k YXRhID0gKGVtY19yZWFkbChlbWMsIEVNQ19NUlIpICYgRU1DX01SUl9EQVRBX01BU0spIDw8Cj4g KwkJCSAgIEVNQ19NUlJfREFUQV9TSElGVDsKPiArCj4gKwkJdGVtcDBfMCB8PSBtcnJfZGF0YSAm IDB4ZmY7Cj4gKwkJdGVtcDBfMSB8PSAobXJyX2RhdGEgJiAweGZmMDApID4+IDg7Cj4gKwo+ICsJ CWlmIChjaGFubmVsX21vZGUgPT0gRFVBTF9DSEFOTkVMKSB7Cj4gKwkJCW1ycl9kYXRhID0gKGVt YzFfcmVhZGwoZW1jLCBFTUNfTVJSKSAmCj4gKwkJCQkgICAgRU1DX01SUl9EQVRBX01BU0spIDw8 Cj4gKwkJCQkgICBFTUNfTVJSX0RBVEFfU0hJRlQ7Cj4gKwkJCXRlbXAxXzAgfD0gKG1ycl9kYXRh ICYgMHhmZik7Cj4gKwkJCXRlbXAxXzEgfD0gKG1ycl9kYXRhICYgMHhmZjAwKSA+PiA4Owo+ICsJ CX0KPiArCX0KPiArCj4gKwlpZiAoZHZmc19wdDEgfHwgcGVyaW9kaWNfdHJhaW5pbmdfdXBkYXRl KQo+ICsJCWN2YWwgPSAoMTAwMDAwMCAqIHRlZ3JhMjEwX2FjdHVhbF9vc2NfY2xvY2tzKAo+ICsJ CQkJCWxhc3RfdGltaW5nLT5ydW5fY2xvY2tzKSkgLwo+ICsJCSAgICAgICAobGFzdF90aW1pbmdf cmF0ZV9taHogKiAyICogdGVtcDBfMCk7Cj4gKwo+ICsJaWYgKGR2ZnNfcHQxKQo+ICsJCV9fSU5D UkVNRU5UX1BURlYoQzBEMFUwLCBjdmFsKTsKPiArCWVsc2UgaWYgKGR2ZnNfdXBkYXRlKQo+ICsJ CV9fQVZFUkFHRV9QVEZWKEMwRDBVMCk7Cj4gKwllbHNlIGlmIChwZXJpb2RpY190cmFpbmluZ191 cGRhdGUpCj4gKwkJX19XRUlHSFRFRF9VUERBVEVfUFRGVihDMEQwVTAsIGN2YWwpOwo+ICsKPiAr CWlmIChkdmZzX3VwZGF0ZSB8fCBwZXJpb2RpY190cmFpbmluZ191cGRhdGUpIHsKPiArCQl0ZGVs ID0gbmV4dF90aW1pbmctPmN1cnJlbnRfZHJhbV9jbGt0cmVlX2MwZDB1MCAtCj4gKwkJCV9fTU9W QVZHX0FDKG5leHRfdGltaW5nLCBDMEQwVTApOwo+ICsJCXRtZGVsID0gKHRkZWwgPCAwKSA/IC0x ICogdGRlbCA6IHRkZWw7Cj4gKwkJYWRlbCA9IHRtZGVsOwo+ICsJCWlmICh0bWRlbCAqIDEyOCAq IG5leHRfdGltaW5nX3JhdGVfbWh6IC8gMTAwMDAwMCA+Cj4gKwkJICAgIG5leHRfdGltaW5nLT50 cmVlX21hcmdpbikKPiArCQkJbmV4dF90aW1pbmctPmN1cnJlbnRfZHJhbV9jbGt0cmVlX2MwZDB1 MCA9Cj4gKwkJCQlfX01PVkFWR19BQyhuZXh0X3RpbWluZywgQzBEMFUwKTsKPiArCX0KPiArCj4g KwlpZiAoZHZmc19wdDEgfHwgcGVyaW9kaWNfdHJhaW5pbmdfdXBkYXRlKQo+ICsJCWN2YWwgPSAo MTAwMDAwMCAqIHRlZ3JhMjEwX2FjdHVhbF9vc2NfY2xvY2tzKAo+ICsJCQkJCWxhc3RfdGltaW5n LT5ydW5fY2xvY2tzKSkgLwo+ICsJCSAgICAgICAobGFzdF90aW1pbmdfcmF0ZV9taHogKiAyICog dGVtcDBfMSk7Cj4gKwo+ICsJaWYgKGR2ZnNfcHQxKQo+ICsJCV9fSU5DUkVNRU5UX1BURlYoQzBE MFUxLCBjdmFsKTsKPiArCWVsc2UgaWYgKGR2ZnNfdXBkYXRlKQo+ICsJCV9fQVZFUkFHRV9QVEZW KEMwRDBVMSk7Cj4gKwllbHNlIGlmIChwZXJpb2RpY190cmFpbmluZ191cGRhdGUpCj4gKwkJX19X RUlHSFRFRF9VUERBVEVfUFRGVihDMEQwVTEsIGN2YWwpOwo+ICsKPiArCWlmIChkdmZzX3VwZGF0 ZSB8fCBwZXJpb2RpY190cmFpbmluZ191cGRhdGUpIHsKPiArCQl0ZGVsID0gbmV4dF90aW1pbmct PmN1cnJlbnRfZHJhbV9jbGt0cmVlX2MwZDB1MSAtCj4gKwkJCV9fTU9WQVZHX0FDKG5leHRfdGlt aW5nLCBDMEQwVTEpOwo+ICsJCXRtZGVsID0gKHRkZWwgPCAwKSA/IC0xICogdGRlbCA6IHRkZWw7 Cj4gKwo+ICsJCWlmICh0bWRlbCA+IGFkZWwpCj4gKwkJCWFkZWwgPSB0bWRlbDsKPiArCj4gKwkJ aWYgKHRtZGVsICogMTI4ICogbmV4dF90aW1pbmdfcmF0ZV9taHogLyAxMDAwMDAwID4KPiArCQkg ICAgbmV4dF90aW1pbmctPnRyZWVfbWFyZ2luKQo+ICsJCQluZXh0X3RpbWluZy0+Y3VycmVudF9k cmFtX2Nsa3RyZWVfYzBkMHUxID0KPiArCQkJCV9fTU9WQVZHX0FDKG5leHRfdGltaW5nLCBDMEQw VTEpOwo+ICsJfQo+ICsKPiArCWlmIChjaGFubmVsX21vZGUgPT0gRFVBTF9DSEFOTkVMKSB7Cj4g KwkJaWYgKGR2ZnNfcHQxIHx8IHBlcmlvZGljX3RyYWluaW5nX3VwZGF0ZSkKPiArCQkJY3ZhbCA9 ICgxMDAwMDAwICogdGVncmEyMTBfYWN0dWFsX29zY19jbG9ja3MoCj4gKwkJCQkJCWxhc3RfdGlt aW5nLT5ydW5fY2xvY2tzKSkgLwo+ICsJCQkgICAgICAgKGxhc3RfdGltaW5nX3JhdGVfbWh6ICog MiAqIHRlbXAxXzApOwo+ICsJCWlmIChkdmZzX3B0MSkKPiArCQkJX19JTkNSRU1FTlRfUFRGVihD MUQwVTAsIGN2YWwpOwo+ICsJCWVsc2UgaWYgKGR2ZnNfdXBkYXRlKQo+ICsJCQlfX0FWRVJBR0Vf UFRGVihDMUQwVTApOwo+ICsJCWVsc2UgaWYgKHBlcmlvZGljX3RyYWluaW5nX3VwZGF0ZSkKPiAr CQkJX19XRUlHSFRFRF9VUERBVEVfUFRGVihDMUQwVTAsIGN2YWwpOwo+ICsKPiArCQlpZiAoZHZm c191cGRhdGUgfHwgcGVyaW9kaWNfdHJhaW5pbmdfdXBkYXRlKSB7Cj4gKwkJCXRkZWwgPSBuZXh0 X3RpbWluZy0+Y3VycmVudF9kcmFtX2Nsa3RyZWVfYzFkMHUwIC0KPiArCQkJCV9fTU9WQVZHX0FD KG5leHRfdGltaW5nLCBDMUQwVTApOwo+ICsJCQl0bWRlbCA9ICh0ZGVsIDwgMCkgPyAtMSAqIHRk ZWwgOiB0ZGVsOwo+ICsKPiArCQkJaWYgKHRtZGVsID4gYWRlbCkKPiArCQkJCWFkZWwgPSB0bWRl bDsKPiArCj4gKwkJCWlmICh0bWRlbCAqIDEyOCAqIG5leHRfdGltaW5nX3JhdGVfbWh6IC8gMTAw MDAwMCA+Cj4gKwkJCSAgICBuZXh0X3RpbWluZy0+dHJlZV9tYXJnaW4pCj4gKwkJCQluZXh0X3Rp bWluZy0+Y3VycmVudF9kcmFtX2Nsa3RyZWVfYzFkMHUwID0KPiArCQkJCQlfX01PVkFWR19BQyhu ZXh0X3RpbWluZywgQzFEMFUwKTsKPiArCQl9Cj4gKwo+ICsJCWlmIChkdmZzX3B0MSB8fCBwZXJp b2RpY190cmFpbmluZ191cGRhdGUpCj4gKwkJCWN2YWwgPSAoMTAwMDAwMCAqIHRlZ3JhMjEwX2Fj dHVhbF9vc2NfY2xvY2tzKAo+ICsJCQkJCQlsYXN0X3RpbWluZy0+cnVuX2Nsb2NrcykpIC8KPiAr CQkJICAgICAgIChsYXN0X3RpbWluZ19yYXRlX21oeiAqIDIgKiB0ZW1wMV8xKTsKPiArCQlpZiAo ZHZmc19wdDEpCj4gKwkJCV9fSU5DUkVNRU5UX1BURlYoQzFEMFUxLCBjdmFsKTsKPiArCQllbHNl IGlmIChkdmZzX3VwZGF0ZSkKPiArCQkJX19BVkVSQUdFX1BURlYoQzFEMFUxKTsKPiArCQllbHNl IGlmIChwZXJpb2RpY190cmFpbmluZ191cGRhdGUpCj4gKwkJCV9fV0VJR0hURURfVVBEQVRFX1BU RlYoQzFEMFUxLCBjdmFsKTsKPiArCj4gKwkJaWYgKGR2ZnNfdXBkYXRlIHx8IHBlcmlvZGljX3Ry YWluaW5nX3VwZGF0ZSkgewo+ICsJCQl0ZGVsID0gbmV4dF90aW1pbmctPmN1cnJlbnRfZHJhbV9j bGt0cmVlX2MxZDB1MSAtCj4gKwkJCQlfX01PVkFWR19BQyhuZXh0X3RpbWluZywgQzFEMFUxKTsK PiArCQkJdG1kZWwgPSAodGRlbCA8IDApID8gLTEgKiB0ZGVsIDogdGRlbDsKPiArCj4gKwkJCWlm ICh0bWRlbCA+IGFkZWwpCj4gKwkJCQlhZGVsID0gdG1kZWw7Cj4gKwo+ICsJCQlpZiAodG1kZWwg KiAxMjggKiBuZXh0X3RpbWluZ19yYXRlX21oeiAvIDEwMDAwMDAgPgo+ICsJCQkgICAgbmV4dF90 aW1pbmctPnRyZWVfbWFyZ2luKQo+ICsJCQkJbmV4dF90aW1pbmctPmN1cnJlbnRfZHJhbV9jbGt0 cmVlX2MxZDB1MSA9Cj4gKwkJCQkJX19NT1ZBVkdfQUMobmV4dF90aW1pbmcsIEMxRDBVMSk7Cj4g KwkJfQo+ICsJfQo+ICsKPiArCWlmIChlbWMtPmRyYW1fZGV2X251bSAhPSBUV09fUkFOSykKPiAr CQlnb3RvIGRvbmU7Cj4gKwo+ICsJLyoKPiArCSAqIERldjEgTVNCLgo+ICsJICovCj4gKwlpZiAo ZHZmc19wdDEgfHwgcGVyaW9kaWNfdHJhaW5pbmdfdXBkYXRlKSB7Cj4gKwkJbXJyX3JlcSA9ICgx IDw8IEVNQ19NUlJfREVWX1NFTF9TSElGVCkgfAo+ICsJCQkgICgxOSA8PCBFTUNfTVJSX01BX1NI SUZUKTsKPiArCQllbWNfd3JpdGVsKGVtYywgbXJyX3JlcSwgRU1DX01SUik7Cj4gKwo+ICsJCVdB Uk4od2FpdF9mb3JfdXBkYXRlKGVtYywgRU1DX0VNQ19TVEFUVVMsCj4gKwkJCQkgICAgIEVNQ19F TUNfU1RBVFVTX01SUl9ESVZMRCwgMSwgUkVHX0VNQyksCj4gKwkJICAgICAiVGltZWQgb3V0IHdh aXRpbmcgZm9yIE1SUiAxOSAoY2g9MClcbiIpOwo+ICsJCWlmIChjaGFubmVsX21vZGUgPT0gRFVB TF9DSEFOTkVMKQo+ICsJCQlXQVJOKHdhaXRfZm9yX3VwZGF0ZShlbWMsIEVNQ19FTUNfU1RBVFVT LAo+ICsJCQkJCSAgICAgRU1DX0VNQ19TVEFUVVNfTVJSX0RJVkxELCAxLAo+ICsJCQkJCSAgICAg UkVHX0VNQzEpLAo+ICsJCQkgICAgICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgTVJSIDE5IChjaD0x KVxuIik7Cj4gKwo+ICsJCW1ycl9kYXRhID0gKGVtY19yZWFkbChlbWMsIEVNQ19NUlIpICYgRU1D X01SUl9EQVRBX01BU0spIDw8Cj4gKwkJCSAgIEVNQ19NUlJfREFUQV9TSElGVDsKPiArCj4gKwkJ dGVtcDBfMCA9IChtcnJfZGF0YSAmIDB4ZmYpIDw8IDg7Cj4gKwkJdGVtcDBfMSA9IG1ycl9kYXRh ICYgMHhmZjAwOwo+ICsKPiArCQlpZiAoY2hhbm5lbF9tb2RlID09IERVQUxfQ0hBTk5FTCkgewo+ ICsJCQltcnJfZGF0YSA9IChlbWMxX3JlYWRsKGVtYywgRU1DX01SUikgJgo+ICsJCQkJICAgIEVN Q19NUlJfREFUQV9NQVNLKSA8PAo+ICsJCQkJICAgRU1DX01SUl9EQVRBX1NISUZUOwo+ICsJCQl0 ZW1wMV8wID0gKG1ycl9kYXRhICYgMHhmZikgPDwgODsKPiArCQkJdGVtcDFfMSA9IG1ycl9kYXRh ICYgMHhmZjAwOwo+ICsJCX0KPiArCj4gKwkJLyoKPiArCQkgKiBEZXYxIExTQi4KPiArCQkgKi8K PiArCQltcnJfcmVxID0gKG1ycl9yZXEgJiB+RU1DX01SUl9NQV9NQVNLKSB8Cj4gKwkJCSAgKDE4 IDw8IEVNQ19NUlJfTUFfU0hJRlQpOwo+ICsJCWVtY193cml0ZWwoZW1jLCBtcnJfcmVxLCBFTUNf TVJSKTsKPiArCj4gKwkJV0FSTih3YWl0X2Zvcl91cGRhdGUoZW1jLCBFTUNfRU1DX1NUQVRVUywK PiArCQkJCSAgICAgRU1DX0VNQ19TVEFUVVNfTVJSX0RJVkxELCAxLCBSRUdfRU1DKSwKPiArCQkg ICAgICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgTVJSIDE4IChjaD0wKVxuIik7Cj4gKwkJaWYgKGNo YW5uZWxfbW9kZSA9PSBEVUFMX0NIQU5ORUwpCj4gKwkJCVdBUk4od2FpdF9mb3JfdXBkYXRlKGVt YywgRU1DX0VNQ19TVEFUVVMsCj4gKwkJCQkJICAgICBFTUNfRU1DX1NUQVRVU19NUlJfRElWTEQs IDEsCj4gKwkJCQkJICAgICBSRUdfRU1DMSksCj4gKwkJCSAgICAgIlRpbWVkIG91dCB3YWl0aW5n IGZvciBNUlIgMTggKGNoPTEpXG4iKTsKPiArCj4gKwkJbXJyX2RhdGEgPSAoZW1jX3JlYWRsKGVt YywgRU1DX01SUikgJiBFTUNfTVJSX0RBVEFfTUFTSykgPDwKPiArCQkJICAgRU1DX01SUl9EQVRB X1NISUZUOwo+ICsKPiArCQl0ZW1wMF8wIHw9IG1ycl9kYXRhICYgMHhmZjsKPiArCQl0ZW1wMF8x IHw9IChtcnJfZGF0YSAmIDB4ZmYwMCkgPj4gODsKPiArCj4gKwkJaWYgKGNoYW5uZWxfbW9kZSA9 PSBEVUFMX0NIQU5ORUwpIHsKPiArCQkJbXJyX2RhdGEgPSAoZW1jMV9yZWFkbChlbWMsIEVNQ19N UlIpICYKPiArCQkJCSAgICBFTUNfTVJSX0RBVEFfTUFTSykgPDwKPiArCQkJCSAgIEVNQ19NUlJf REFUQV9TSElGVDsKPiArCQkJdGVtcDFfMCB8PSAobXJyX2RhdGEgJiAweGZmKTsKPiArCQkJdGVt cDFfMSB8PSAobXJyX2RhdGEgJiAweGZmMDApID4+IDg7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlm IChkdmZzX3B0MSB8fCBwZXJpb2RpY190cmFpbmluZ191cGRhdGUpCj4gKwkJY3ZhbCA9ICgxMDAw MDAwICogdGVncmEyMTBfYWN0dWFsX29zY19jbG9ja3MoCj4gKwkJCQkJbGFzdF90aW1pbmctPnJ1 bl9jbG9ja3MpKSAvCj4gKwkJICAgICAgIChsYXN0X3RpbWluZ19yYXRlX21oeiAqIDIgKiB0ZW1w MF8wKTsKPiArCj4gKwlpZiAoZHZmc19wdDEpCj4gKwkJX19JTkNSRU1FTlRfUFRGVihDMEQxVTAs IGN2YWwpOwo+ICsJZWxzZSBpZiAoZHZmc191cGRhdGUpCj4gKwkJX19BVkVSQUdFX1BURlYoQzBE MVUwKTsKPiArCWVsc2UgaWYgKHBlcmlvZGljX3RyYWluaW5nX3VwZGF0ZSkKPiArCQlfX1dFSUdI VEVEX1VQREFURV9QVEZWKEMwRDFVMCwgY3ZhbCk7Cj4gKwo+ICsJaWYgKGR2ZnNfdXBkYXRlIHx8 IHBlcmlvZGljX3RyYWluaW5nX3VwZGF0ZSkgewo+ICsJCXRkZWwgPSBuZXh0X3RpbWluZy0+Y3Vy cmVudF9kcmFtX2Nsa3RyZWVfYzBkMXUwIC0KPiArCQkgICAgICAgX19NT1ZBVkdfQUMobmV4dF90 aW1pbmcsIEMwRDFVMCk7Cj4gKwkJdG1kZWwgPSAodGRlbCA8IDApID8gLTEgKiB0ZGVsIDogdGRl bDsKPiArCQlpZiAodG1kZWwgPiBhZGVsKQo+ICsJCQlhZGVsID0gdG1kZWw7Cj4gKwo+ICsJCWlm ICh0bWRlbCAqIDEyOCAqIG5leHRfdGltaW5nX3JhdGVfbWh6IC8gMTAwMDAwMCA+Cj4gKwkJICAg IG5leHRfdGltaW5nLT50cmVlX21hcmdpbikKPiArCQkJbmV4dF90aW1pbmctPmN1cnJlbnRfZHJh bV9jbGt0cmVlX2MwZDF1MCA9Cj4gKwkJCQlfX01PVkFWR19BQyhuZXh0X3RpbWluZywgQzBEMVUw KTsKPiArCX0KPiArCj4gKwlpZiAoZHZmc19wdDEgfHwgcGVyaW9kaWNfdHJhaW5pbmdfdXBkYXRl KQo+ICsJCWN2YWwgPSAoMTAwMDAwMCAqIHRlZ3JhMjEwX2FjdHVhbF9vc2NfY2xvY2tzKAo+ICsJ CQkJCWxhc3RfdGltaW5nLT5ydW5fY2xvY2tzKSkgLwo+ICsJCSAgICAgICAobGFzdF90aW1pbmdf cmF0ZV9taHogKiAyICogdGVtcDBfMSk7Cj4gKwo+ICsJaWYgKGR2ZnNfcHQxKQo+ICsJCV9fSU5D UkVNRU5UX1BURlYoQzBEMVUxLCBjdmFsKTsKPiArCWVsc2UgaWYgKGR2ZnNfdXBkYXRlKQo+ICsJ CV9fQVZFUkFHRV9QVEZWKEMwRDFVMSk7Cj4gKwllbHNlIGlmIChwZXJpb2RpY190cmFpbmluZ191 cGRhdGUpCj4gKwkJX19XRUlHSFRFRF9VUERBVEVfUFRGVihDMEQxVTEsIGN2YWwpOwo+ICsKPiAr CWlmIChkdmZzX3VwZGF0ZSB8fCBwZXJpb2RpY190cmFpbmluZ191cGRhdGUpIHsKPiArCQl0ZGVs ID0gbmV4dF90aW1pbmctPmN1cnJlbnRfZHJhbV9jbGt0cmVlX2MwZDF1MSAtCj4gKwkJICAgICAg IF9fTU9WQVZHX0FDKG5leHRfdGltaW5nLCBDMEQxVTEpOwo+ICsJCXRtZGVsID0gKHRkZWwgPCAw KSA/IC0xICogdGRlbCA6IHRkZWw7Cj4gKwkJaWYgKHRtZGVsID4gYWRlbCkKPiArCQkJYWRlbCA9 IHRtZGVsOwo+ICsKPiArCQlpZiAodG1kZWwgKiAxMjggKiBuZXh0X3RpbWluZ19yYXRlX21oeiAv IDEwMDAwMDAgPgo+ICsJCSAgICBuZXh0X3RpbWluZy0+dHJlZV9tYXJnaW4pCj4gKwkJCW5leHRf dGltaW5nLT5jdXJyZW50X2RyYW1fY2xrdHJlZV9jMGQxdTEgPQo+ICsJCQkJX19NT1ZBVkdfQUMo bmV4dF90aW1pbmcsIEMwRDFVMSk7Cj4gKwl9Cj4gKwo+ICsJaWYgKGNoYW5uZWxfbW9kZSA9PSBE VUFMX0NIQU5ORUwpIHsKPiArCQlpZiAoZHZmc19wdDEgfHwgcGVyaW9kaWNfdHJhaW5pbmdfdXBk YXRlKQo+ICsJCQljdmFsID0gKDEwMDAwMDAgKiB0ZWdyYTIxMF9hY3R1YWxfb3NjX2Nsb2NrcygK PiArCQkJCQkJbGFzdF90aW1pbmctPnJ1bl9jbG9ja3MpKSAvCj4gKwkJCSAgICAgICAobGFzdF90 aW1pbmdfcmF0ZV9taHogKiAyICogdGVtcDFfMCk7Cj4gKwo+ICsJCWlmIChkdmZzX3B0MSkKPiAr CQkJX19JTkNSRU1FTlRfUFRGVihDMUQxVTAsIGN2YWwpOwo+ICsJCWVsc2UgaWYgKGR2ZnNfdXBk YXRlKQo+ICsJCQlfX0FWRVJBR0VfUFRGVihDMUQxVTApOwo+ICsJCWVsc2UgaWYgKHBlcmlvZGlj X3RyYWluaW5nX3VwZGF0ZSkKPiArCQkJX19XRUlHSFRFRF9VUERBVEVfUFRGVihDMUQxVTAsIGN2 YWwpOwo+ICsKPiArCQlpZiAoZHZmc191cGRhdGUgfHwgcGVyaW9kaWNfdHJhaW5pbmdfdXBkYXRl KSB7Cj4gKwkJCXRkZWwgPSBuZXh0X3RpbWluZy0+Y3VycmVudF9kcmFtX2Nsa3RyZWVfYzFkMXUw IC0KPiArCQkJICAgICAgIF9fTU9WQVZHX0FDKG5leHRfdGltaW5nLCBDMUQxVTApOwo+ICsJCQl0 bWRlbCA9ICh0ZGVsIDwgMCkgPyAtMSAqIHRkZWwgOiB0ZGVsOwo+ICsJCQlpZiAodG1kZWwgPiBh ZGVsKQo+ICsJCQkJYWRlbCA9IHRtZGVsOwo+ICsKPiArCQkJaWYgKHRtZGVsICogMTI4ICogbmV4 dF90aW1pbmdfcmF0ZV9taHogLyAxMDAwMDAwID4KPiArCQkJICAgIG5leHRfdGltaW5nLT50cmVl X21hcmdpbikKPiArCQkJCW5leHRfdGltaW5nLT5jdXJyZW50X2RyYW1fY2xrdHJlZV9jMWQxdTAg PQo+ICsJCQkJCV9fTU9WQVZHX0FDKG5leHRfdGltaW5nLCBDMUQxVTApOwo+ICsJCX0KPiArCj4g KwkJaWYgKGR2ZnNfcHQxIHx8IHBlcmlvZGljX3RyYWluaW5nX3VwZGF0ZSkKPiArCQkJY3ZhbCA9 ICgxMDAwMDAwICogdGVncmEyMTBfYWN0dWFsX29zY19jbG9ja3MoCj4gKwkJCQkJCWxhc3RfdGlt aW5nLT5ydW5fY2xvY2tzKSkgLwo+ICsJCQkgICAgICAgKGxhc3RfdGltaW5nX3JhdGVfbWh6ICog MiAqIHRlbXAxXzEpOwo+ICsKPiArCQlpZiAoZHZmc19wdDEpCj4gKwkJCV9fSU5DUkVNRU5UX1BU RlYoQzFEMVUxLCBjdmFsKTsKPiArCQllbHNlIGlmIChkdmZzX3VwZGF0ZSkKPiArCQkJX19BVkVS QUdFX1BURlYoQzFEMVUxKTsKPiArCQllbHNlIGlmIChwZXJpb2RpY190cmFpbmluZ191cGRhdGUp Cj4gKwkJCV9fV0VJR0hURURfVVBEQVRFX1BURlYoQzFEMVUxLCBjdmFsKTsKPiArCj4gKwkJaWYg KGR2ZnNfdXBkYXRlIHx8IHBlcmlvZGljX3RyYWluaW5nX3VwZGF0ZSkgewo+ICsJCQl0ZGVsID0g bmV4dF90aW1pbmctPmN1cnJlbnRfZHJhbV9jbGt0cmVlX2MxZDF1MSAtCj4gKwkJCSAgICAgICBf X01PVkFWR19BQyhuZXh0X3RpbWluZywgQzFEMVUxKTsKPiArCQkJdG1kZWwgPSAodGRlbCA8IDAp ID8gLTEgKiB0ZGVsIDogdGRlbDsKPiArCQkJaWYgKHRtZGVsID4gYWRlbCkKPiArCQkJCWFkZWwg PSB0bWRlbDsKPiArCj4gKwkJCWlmICh0bWRlbCAqIDEyOCAqIG5leHRfdGltaW5nX3JhdGVfbWh6 IC8gMTAwMDAwMCA+Cj4gKwkJCSAgICBuZXh0X3RpbWluZy0+dHJlZV9tYXJnaW4pCj4gKwkJCQlu ZXh0X3RpbWluZy0+Y3VycmVudF9kcmFtX2Nsa3RyZWVfYzFkMXUxID0KPiArCQkJCQlfX01PVkFW R19BQyhuZXh0X3RpbWluZywgQzFEMVUxKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICtkb25lOgo+ICsJ cmV0dXJuIGFkZWw7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIgcGVyaW9kaWNfY29tcGVuc2F0aW9u X2hhbmRsZXIoc3RydWN0IHRlZ3JhX2VtYyAqZW1jLCB1MzIgdHlwZSwKPiArCQkJCQkgdTMyIGRy YW1fZGV2X251bSwKPiArCQkJCQkgdTMyIGNoYW5uZWxfbW9kZSwKPiArCQkJCQkgc3RydWN0IGVt Y190YWJsZSAqbGFzdF90aW1pbmcsCj4gKwkJCQkJIHN0cnVjdCBlbWNfdGFibGUgKm5leHRfdGlt aW5nKQo+ICt7Cj4gKyNkZWZpbmUgX19DT1BZX0VNQShudCwgbHQsIGRldikJCQkJCQlcCj4gKwko eyBfX01PVkFWRyhudCwgZGV2KSA9IF9fTU9WQVZHKGx0LCBkZXYpICoJCQlcCj4gKwkgICAobnQp LT5wdGZ2X2xpc3RbUFRGVl9EVkZTX1NBTVBMRVNfSU5ERVhdOyB9KQo+ICsKPiArCXUzMiBpOwo+ ICsJdTMyIGFkZWwgPSAwOwo+ICsJdTMyIHNhbXBsZXMgPSBuZXh0X3RpbWluZy0+cHRmdl9saXN0 W1BURlZfRFZGU19TQU1QTEVTX0lOREVYXTsKPiArCXUzMiBkZWxheSA9IDIgKwo+ICsJCSgxMDAw ICogdGVncmEyMTBfYWN0dWFsX29zY19jbG9ja3MobGFzdF90aW1pbmctPnJ1bl9jbG9ja3MpIC8K PiArCQlsYXN0X3RpbWluZy0+cmF0ZSk7Cj4gKwo+ICsJaWYgKCFuZXh0X3RpbWluZy0+cGVyaW9k aWNfdHJhaW5pbmcpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKHR5cGUgPT0gRFZGU19TRVFV RU5DRSkgewo+ICsJCWlmIChsYXN0X3RpbWluZy0+cGVyaW9kaWNfdHJhaW5pbmcgJiYKPiArCQkg ICAgKG5leHRfdGltaW5nLT5wdGZ2X2xpc3RbUFRGVl9DT05GSUdfQ1RSTF9JTkRFWF0gJgo+ICsJ CSAgICAgUFRGVl9DT05GSUdfQ1RSTF9VU0VfUFJFVklPVVNfRU1BKSkgewo+ICsJCQkvKgo+ICsJ CQkgKiBJZiB0aGUgcHJldmlvdXMgZnJlcXVlbmN5IHdhcyB1c2luZyBwZXJpb2RpYwo+ICsJCQkg KiBjYWxpYnJhdGlvbiB0aGVuIHdlIGNhbiByZXVzZSB0aGUgcHJldmlvdXMKPiArCQkJICogZnJl cXVlbmNpZXMgRU1BIGRhdGEuCj4gKwkJCSAqLwo+ICsJCQlfX0NPUFlfRU1BKG5leHRfdGltaW5n LCBsYXN0X3RpbWluZywgQzBEMFUwKTsKPiArCQkJX19DT1BZX0VNQShuZXh0X3RpbWluZywgbGFz dF90aW1pbmcsIEMwRDBVMSk7Cj4gKwkJCV9fQ09QWV9FTUEobmV4dF90aW1pbmcsIGxhc3RfdGlt aW5nLCBDMUQwVTApOwo+ICsJCQlfX0NPUFlfRU1BKG5leHRfdGltaW5nLCBsYXN0X3RpbWluZywg QzFEMFUxKTsKPiArCQkJX19DT1BZX0VNQShuZXh0X3RpbWluZywgbGFzdF90aW1pbmcsIEMwRDFV MCk7Cj4gKwkJCV9fQ09QWV9FTUEobmV4dF90aW1pbmcsIGxhc3RfdGltaW5nLCBDMEQxVTEpOwo+ ICsJCQlfX0NPUFlfRU1BKG5leHRfdGltaW5nLCBsYXN0X3RpbWluZywgQzFEMVUwKTsKPiArCQkJ X19DT1BZX0VNQShuZXh0X3RpbWluZywgbGFzdF90aW1pbmcsIEMxRDFVMSk7Cj4gKwkJfSBlbHNl IHsKPiArCQkJLyogUmVzZXQgdGhlIEVNQS4qLwo+ICsJCQlfX01PVkFWRyhuZXh0X3RpbWluZywg QzBEMFUwKSA9IDA7Cj4gKwkJCV9fTU9WQVZHKG5leHRfdGltaW5nLCBDMEQwVTEpID0gMDsKPiAr CQkJX19NT1ZBVkcobmV4dF90aW1pbmcsIEMxRDBVMCkgPSAwOwo+ICsJCQlfX01PVkFWRyhuZXh0 X3RpbWluZywgQzFEMFUxKSA9IDA7Cj4gKwkJCV9fTU9WQVZHKG5leHRfdGltaW5nLCBDMEQxVTAp ID0gMDsKPiArCQkJX19NT1ZBVkcobmV4dF90aW1pbmcsIEMwRDFVMSkgPSAwOwo+ICsJCQlfX01P VkFWRyhuZXh0X3RpbWluZywgQzFEMVUwKSA9IDA7Cj4gKwkJCV9fTU9WQVZHKG5leHRfdGltaW5n LCBDMUQxVTEpID0gMDsKPiArCj4gKwkJCWZvciAoaSA9IDA7IGkgPCBzYW1wbGVzOyBpKyspIHsK PiArCQkJCXRlZ3JhMjEwX3N0YXJ0X3BlcmlvZGljX2NvbXBlbnNhdGlvbihlbWMpOwo+ICsJCQkJ dWRlbGF5KGRlbGF5KTsKPiArCj4gKwkJCQkvKgo+ICsJCQkJICogR2VuZXJhdGUgbmV4dCBzYW1w bGUgb2YgZGF0YS4KPiArCQkJCSAqLwo+ICsJCQkJYWRlbCA9IHVwZGF0ZV9jbG9ja190cmVlX2Rl bGF5KGVtYywKPiArCQkJCQkJCWVtYy0+ZHJhbV9kZXZfbnVtLAo+ICsJCQkJCQkJY2hhbm5lbF9t b2RlLAo+ICsJCQkJCQkJRFZGU19QVDEpOwo+ICsJCQl9Cj4gKwkJfQo+ICsKPiArCQkvKgo+ICsJ CSAqIFNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlCj4gKwkJICogJ2lmIChsYXN0 X3RpbWluZy0+cGVyaW9kaWNfdHJhaW5pbmcpJyBjb25kaXRpb25hbAo+ICsJCSAqIHNpbmNlIGlz IGFscmVhZHkgZG9uZSBmb3IgdGhlIGVsc2UgY2xhdXNlLgo+ICsJCSAqLwo+ICsJCWFkZWwgPSB1 cGRhdGVfY2xvY2tfdHJlZV9kZWxheShlbWMsCj4gKwkJCQkJICAgICAgIGVtYy0+ZHJhbV9kZXZf bnVtLAo+ICsJCQkJCSAgICAgICBjaGFubmVsX21vZGUsCj4gKwkJCQkJICAgICAgIERWRlNfVVBE QVRFKTsKPiArCX0KPiArCj4gKwlpZiAodHlwZSA9PSBQRVJJT0RJQ19UUkFJTklOR19TRVFVRU5D RSkgewo+ICsJCXRlZ3JhMjEwX3N0YXJ0X3BlcmlvZGljX2NvbXBlbnNhdGlvbihlbWMpOwo+ICsJ CXVkZWxheShkZWxheSk7Cj4gKwo+ICsJCWFkZWwgPSB1cGRhdGVfY2xvY2tfdHJlZV9kZWxheShl bWMsCj4gKwkJCQkJICAgICAgIGVtYy0+ZHJhbV9kZXZfbnVtLAo+ICsJCQkJCSAgICAgICBjaGFu bmVsX21vZGUsCj4gKwkJCQkJICAgICAgIFBFUklPRElDX1RSQUlOSU5HX1VQREFURSk7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIGFkZWw7Cj4gK30KPiArCj4gK3UzMiBfX2RvX3BlcmlvZGljX2VtY19j b21wZW5zYXRpb25fcjIxMDIxKHN0cnVjdCB0ZWdyYV9lbWMgKmVtYykKPiArewo+ICsJdTMyIGRy YW1fZGV2X251bTsKPiArCXUzMiBjaGFubmVsX21vZGU7Cj4gKwl1MzIgZW1jX2NmZywgZW1jX2Nm Z19vOwo+ICsJdTMyIGVtY19kYmdfbzsKPiArCXUzMiBkZWwsIGk7Cj4gKwl1MzIgbGlzdFtdID0g ewo+ICsJCUVNQ19QTUFDUk9fT0JfRERMTF9MT05HX0RRX1JBTkswXzAsCj4gKwkJRU1DX1BNQUNS T19PQl9ERExMX0xPTkdfRFFfUkFOSzBfMSwKPiArCQlFTUNfUE1BQ1JPX09CX0RETExfTE9OR19E UV9SQU5LMF8yLAo+ICsJCUVNQ19QTUFDUk9fT0JfRERMTF9MT05HX0RRX1JBTkswXzMsCj4gKwkJ RU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzFfMCwKPiArCQlFTUNfUE1BQ1JPX09CX0RE TExfTE9OR19EUV9SQU5LMV8xLAo+ICsJCUVNQ19QTUFDUk9fT0JfRERMTF9MT05HX0RRX1JBTksx XzIsCj4gKwkJRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzFfMywKPiArCQlFTUNfREFU QV9CUkxTSEZUXzAsCj4gKwkJRU1DX0RBVEFfQlJMU0hGVF8xCj4gKwl9Owo+ICsJdTMyIGl0ZW1z ID0gQVJSQVlfU0laRShsaXN0KTsKPiArCXUzMiBlbWNfY2ZnX3VwZGF0ZTsKPiArCXN0cnVjdCBl bWNfdGFibGUgKmN1cnJlbnRfdGltaW5nID0gZW1jLT5jdXJyZW50X3RpbWluZzsKPiArCj4gKwlp ZiAoY3VycmVudF90aW1pbmctPnBlcmlvZGljX3RyYWluaW5nKSB7Cj4gKwkJY2hhbm5lbF9tb2Rl ID0KPiArCQkJISEoY3VycmVudF90aW1pbmctPmJ1cnN0X3JlZ3NbRU1DX0ZCSU9fQ0ZHN19JTkRF WF0gJgo+ICsJCQkoMSA8PCAyKSk7Cj4gKwkJZHJhbV9kZXZfbnVtID0gMSArIChtY19yZWFkbChl bWMtPm1jLCBNQ19FTUVNX0FEUl9DRkcpICYgMHgxKTsKPiArCj4gKwkJZW1jX2NjX2RiZyhQRVJf VFJBSU4sICJQZXJpb2RpYyB0cmFpbmluZyBzdGFydGluZ1xuIik7Cj4gKwo+ICsJCWVtY19kYmdf byA9IGVtY19yZWFkbChlbWMsIEVNQ19EQkcpOwo+ICsJCWVtY19jZmdfbyA9IGVtY19yZWFkbChl bWMsIEVNQ19DRkcpOwo+ICsJCWVtY19jZmcgPSBlbWNfY2ZnX28gJiB+KEVNQ19DRkdfRFlOX1NF TEZfUkVGIHwKPiArCQkJCQlFTUNfQ0ZHX0RSQU1fQUNQRCB8Cj4gKwkJCQkJRU1DX0NGR19EUkFN X0NMS1NUT1BfUEQgfAo+ICsJCQkJCUVNQ19DRkdfRFJBTV9DTEtTVE9QX1BEKTsKPiArCj4gKwo+ ICsJCS8qCj4gKwkJICogMS4gUG93ZXIgb3B0aW1pemF0aW9ucyBzaG91bGQgYmUgb2ZmLgo+ICsJ CSAqLwo+ICsJCWVtY193cml0ZWwoZW1jLCBlbWNfY2ZnLCBFTUNfQ0ZHKTsKPiArCj4gKwkJLyog RG9lcyBlbWNfdGltaW5nX3VwZGF0ZSgpIGZvciBhYm92ZSBjaGFuZ2VzLiAqLwo+ICsJCXRlZ3Jh MjEwX2RsbF9kaXNhYmxlKGVtYywgY2hhbm5lbF9tb2RlKTsKPiArCj4gKwkJd2FpdF9mb3JfdXBk YXRlKGVtYywgRU1DX0VNQ19TVEFUVVMsCj4gKwkJCQlFTUNfRU1DX1NUQVRVU19EUkFNX0lOX1BP V0VSRE9XTl9NQVNLLCAwLAo+ICsJCQkJUkVHX0VNQyk7Cj4gKwkJaWYgKGNoYW5uZWxfbW9kZSkK PiArCQkJd2FpdF9mb3JfdXBkYXRlKGVtYywgRU1DX0VNQ19TVEFUVVMsCj4gKwkJCQkJRU1DX0VN Q19TVEFUVVNfRFJBTV9JTl9QT1dFUkRPV05fTUFTSywKPiArCQkJCQkwLCBSRUdfRU1DMSk7Cj4g Kwo+ICsJCXdhaXRfZm9yX3VwZGF0ZShlbWMsIEVNQ19FTUNfU1RBVFVTLAo+ICsJCQkJRU1DX0VN Q19TVEFUVVNfRFJBTV9JTl9TRUxGX1JFRlJFU0hfTUFTSywgMCwKPiArCQkJCVJFR19FTUMpOwo+ ICsJCWlmIChjaGFubmVsX21vZGUpCj4gKwkJCXdhaXRfZm9yX3VwZGF0ZShlbWMsIEVNQ19FTUNf U1RBVFVTLAo+ICsJCQkJRU1DX0VNQ19TVEFUVVNfRFJBTV9JTl9TRUxGX1JFRlJFU0hfTUFTSywg MCwKPiArCQkJCVJFR19FTUMxKTsKPiArCj4gKwkJZW1jX2NmZ191cGRhdGUgPSBlbWNfcmVhZGwo ZW1jLCBFTUNfQ0ZHX1VQREFURSk7Cj4gKwkJZW1jX3dyaXRlbChlbWMsIChlbWNfY2ZnX3VwZGF0 ZSAmCj4gKwkJCSAgICB+RU1DX0NGR19VUERBVEVfVVBEQVRFX0RMTF9JTl9VUERBVEVfTUFTSykg fAo+ICsJCQkgICAoMiA8PCBFTUNfQ0ZHX1VQREFURV9VUERBVEVfRExMX0lOX1VQREFURV9TSElG VCksCj4gKwkJCSAgIEVNQ19DRkdfVVBEQVRFKTsKPiArCj4gKwkJLyoKPiArCQkgKiAyLiBvc2Mg a2ljayBvZmYgLSB0aGlzIGFzc3VtZXMgdHJhaW5pbmcgYW5kIGR2ZnMgaGF2ZSBzZXQKPiArCQkg KiAgICBjb3JyZWN0IE1SMjMuCj4gKwkJICovCj4gKwkJdGVncmEyMTBfc3RhcnRfcGVyaW9kaWNf Y29tcGVuc2F0aW9uKGVtYyk7Cj4gKwo+ICsJCS8qCj4gKwkJICogMy4gTGV0IGRyYW0gY2FwdHVy ZSBpdHMgY2xvY2sgdHJlZSBkZWxheXMuCj4gKwkJICovCj4gKwkJdWRlbGF5KCh0ZWdyYTIxMF9h Y3R1YWxfb3NjX2Nsb2NrcyhjdXJyZW50X3RpbWluZy0+cnVuX2Nsb2NrcykgKgo+ICsJCQkxMDAw KSAvCj4gKwkJICAgICAgIGN1cnJlbnRfdGltaW5nLT5yYXRlICsgMSk7Cj4gKwo+ICsJCS8qCj4g KwkJICogNC4gQ2hlY2sgZGVsdGEgd3J0IHByZXZpb3VzIHZhbHVlcyAoc2F2ZSB2YWx1ZSBpZiBt YXJnaW4KPiArCQkgKiAgICBleGNlZWRzIHdoYXQgaXMgc2V0IGluIHRhYmxlKS4KPiArCQkgKi8K PiArCQlkZWwgPSBwZXJpb2RpY19jb21wZW5zYXRpb25faGFuZGxlcihlbWMsCj4gKwkJCQkJCSAg ICBQRVJJT0RJQ19UUkFJTklOR19TRVFVRU5DRSwKPiArCQkJCQkJICAgIGRyYW1fZGV2X251bSwK PiArCQkJCQkJICAgIGNoYW5uZWxfbW9kZSwKPiArCQkJCQkJICAgIGN1cnJlbnRfdGltaW5nLAo+ ICsJCQkJCQkgICAgY3VycmVudF90aW1pbmcpOwo+ICsKPiArCQkvKgo+ICsJCSAqIDUuIEFwcGx5 IGNvbXBlbnNhdGlvbiB3LnIudC4gdHJhaW5lZCB2YWx1ZXMgKGlmIGNsb2NrIHRyZWUKPiArCQkg KiAgICBoYXMgZHJpZnRlZCBtb3JlIHRoYW4gdGhlIHNldCBtYXJnaW4pLgo+ICsJCSAqLwo+ICsJ CWlmIChjdXJyZW50X3RpbWluZy0+dHJlZV9tYXJnaW4gPAo+ICsJCSAgICAoKGRlbCAqIDEyOCAq IChjdXJyZW50X3RpbWluZy0+cmF0ZSAvIDEwMDApKSAvIDEwMDAwMDApKSB7Cj4gKwkJCWZvciAo aSA9IDA7IGkgPCBpdGVtczsgaSsrKSB7Cj4gKwkJCQl1MzIgdG1wID0KPiArCQkJCXRlZ3JhMjEw X2FwcGx5X3BlcmlvZGljX2NvbXBlbnNhdGlvbl90cmltbWVyKAo+ICsJCQkJY3VycmVudF90aW1p bmcsIGxpc3RbaV0pOwo+ICsKPiArCQkJCWVtY19jY19kYmcoRU1BX1dSSVRFUywgIjB4JTA4eCA8 PSAweCUwOHhcbiIsCj4gKwkJCQkJICAgbGlzdFtpXSwgdG1wKTsKPiArCQkJCWVtY193cml0ZWwo ZW1jLCB0bXAsIGxpc3RbaV0pOwo+ICsJCQl9Cj4gKwkJfQo+ICsKPiArCQllbWNfd3JpdGVsKGVt YywgZW1jX2NmZ19vLCBFTUNfQ0ZHKTsKPiArCj4gKwkJLyoKPiArCQkgKiA2LiBUaW1pbmcgdXBk YXRlIGFjdGFsbHkgYXBwbGllcyB0aGUgbmV3IHRyaW1tZXJzLgo+ICsJCSAqLwo+ICsJCWVtY190 aW1pbmdfdXBkYXRlKGVtYywgY2hhbm5lbF9tb2RlKTsKPiArCj4gKwkJLyogNi4xLiBSZXN0b3Jl IHRoZSBVUERBVEVfRExMX0lOX1VQREFURSBmaWVsZC4gKi8KPiArCQllbWNfd3JpdGVsKGVtYywg ZW1jX2NmZ191cGRhdGUsIEVNQ19DRkdfVVBEQVRFKTsKPiArCj4gKwkJLyogNi4yLiBSZXN0b3Jl IHRoZSBETEwuICovCj4gKwkJdGVncmEyMTBfZGxsX2VuYWJsZShlbWMsIGNoYW5uZWxfbW9kZSk7 Cj4gKwo+ICsJCS8qCj4gKwkJICogNy4gQ29weSBvdmVyIHRoZSBwZXJpb2RpYyB0cmFpbmluZyBy ZWdpc3RlcnMgdGhhdCB3ZSB1cGRhdGVkCj4gKwkJICogICAgaGVyZSB0byB0aGUgY29ycmVzcG9u ZGluZyBkZXJhdGVkL25vbi1kZXJhdGVkIHRhYmxlLgo+ICsJCSAqLwo+ICsJCXRlZ3JhMjEwX3Vw ZGF0ZV9lbWNfYWx0X3RpbWluZyhlbWMsIGN1cnJlbnRfdGltaW5nKTsKPiArCX0KPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArLyoKPiArICogRG8gdGhlIGNsb2NrIGNoYW5nZSBzZXF1ZW5j ZS4KPiArICovCj4gK3ZvaWQgZW1jX3NldF9jbG9ja19yMjEwMjEoc3RydWN0IHRlZ3JhX2VtYyAq ZW1jLCB1MzIgY2xrc3JjKQo+ICt7Cj4gKwkvKgo+ICsJICogVGhpcyBpcyB0aGUgdGltaW5nIHRh YmxlIGZvciB0aGUgc291cmNlIGZyZXF1ZW5jeS4gSXQgZG9lcyBfbm90Xwo+ICsJICogbmVjZXNz YXJpbHkgY29ycmVzcG9uZCB0byB0aGUgYWN0dWFsIHRpbWluZyB2YWx1ZXMgaW4gdGhlIEVNQyBh dCB0aGUKPiArCSAqIG1vbWVudC4gSWYgdGhlIGJvb3QgQkNUIGRpZmZlcnMgZnJvbSB0aGUgdGFi bGUgdGhlbiB0aGlzIGNhbiBoYXBwZW4uCj4gKwkgKiBIb3dldmVyLCB3ZSBuZWVkIGl0IGZvciBh Y2Nlc3NpbmcgdGhlIGRyYW1fdGltaW5ncyAod2hpY2ggYXJlIG5vdAo+ICsJICogcmVhbGx5IHJl Z2lzdGVycykgYXJyYXkgZm9yIHRoZSBjdXJyZW50IGZyZXF1ZW5jeS4KPiArCSAqLwo+ICsJc3Ry dWN0IGVtY190YWJsZSAqZmFrZV90aW1pbmc7Cj4gKwlzdHJ1Y3QgZW1jX3RhYmxlICpsYXN0X3Rp bWluZyA9IGVtYy0+Y3VycmVudF90aW1pbmc7Cj4gKwlzdHJ1Y3QgZW1jX3RhYmxlICpuZXh0X3Rp bWluZyA9IGVtYy0+bmV4dF90aW1pbmc7Cj4gKwo+ICsJdTMyIGksIHRtcDsKPiArCj4gKwl1MzIg Y3lhX2FsbG93X3JlZl9jYyA9IDAsIHJlZl9iNF9zcmVmX2VuID0gMCwgY3lhX2lzc3VlX3BjX3Jl ZiA9IDA7Cj4gKwo+ICsJdTMyIHpxY2FsX2JlZm9yZV9jY19jdXRvZmYgPSAyNDAwOyAvKiBJbiBw aWNvc2Vjb25kcyAqLwo+ICsJdTMyIHJlZl9kZWxheV9tdWx0Owo+ICsJdTMyIHJlZl9kZWxheTsK PiArCXMzMiB6cV9sYXRjaF9kdmZzX3dhaXRfdGltZTsKPiArCXMzMiB0WlFDQUxfbHBkZHI0X2Zj X2FkajsKPiArCS8qIFNjYWxlZCBieSB4MTAwMCAqLwo+ICsJdTMyIHRGQ19scGRkcjQgPSAxMDAw ICogbmV4dF90aW1pbmctPmRyYW1fdGltaW5nc1tUX0ZDX0xQRERSNF07Cj4gKwl1MzIgdFpRQ0FM X2xwZGRyNCA9IDEwMDAwMDA7Cj4gKwo+ICsJdTMyIGRyYW1fdHlwZSwgZHJhbV9kZXZfbnVtLCBz aGFyZWRfenFfcmVzaXN0b3I7Cj4gKwl1MzIgY2hhbm5lbF9tb2RlOwo+ICsJdTMyIGlzX2xwZGRy MzsKPiArCj4gKwl1MzIgZW1jX2NmZywgZW1jX3NlbF9kcGRfY3RybCwgZW1jX2NmZ19yZWc7Cj4g Kwo+ICsJdTMyIGVtY19kYmc7Cj4gKwl1MzIgZW1jX3pjYWxfaW50ZXJ2YWw7Cj4gKwl1MzIgZW1j X3pjYWxfd2FpdF9jbnRfb2xkOwo+ICsJdTMyIGVtY196Y2FsX3dhaXRfY250X25ldzsKPiArCXUz MiBlbWNfZGJnX2FjdGl2ZTsKPiArCXUzMiB6cV9vcDsKPiArCXUzMiB6Y2FsX3dhaXRfdGltZV9j bG9ja3M7Cj4gKwl1MzIgemNhbF93YWl0X3RpbWVfcHM7Cj4gKwo+ICsJdTMyIGVtY19hdXRvX2Nh bF9jb25maWc7Cj4gKwl1MzIgYXV0b19jYWxfZW47Cj4gKwo+ICsJdTMyIG1yMTNfY2F0cl9lbmFi bGU7Cj4gKwo+ICsJdTMyIHJhbXBfdXBfd2FpdCA9IDAsIHJhbXBfZG93bl93YWl0ID0gMDsKPiAr Cj4gKwkvKiBJbiBwaWNvc2Vjb25kcy4gKi8KPiArCXUzMiBzb3VyY2VfY2xvY2tfcGVyaW9kOwo+ ICsJdTMyIGRlc3RpbmF0aW9uX2Nsb2NrX3BlcmlvZDsKPiArCj4gKwl1MzIgZW1jX2RiZ19vOwo+ ICsJdTMyIGVtY19jZmdfcGlwZV9jbGtfbzsKPiArCXUzMiBlbWNfcGluX287Cj4gKwo+ICsJdTMy IG1yMTNfZmxpcF9mc3B3cjsKPiArCXUzMiBtcjEzX2ZsaXBfZnNwb3A7Cj4gKwo+ICsJdTMyIG9w dF96Y2FsX2VuX2NjOwo+ICsJdTMyIG9wdF9kb19zd19xcnN0ID0gMTsKPiArCXUzMiBvcHRfZHZm c19tb2RlOwo+ICsJdTMyIG9wdF9kbGxfbW9kZTsKPiArCXUzMiBvcHRfY2Nfc2hvcnRfemNhbCA9 IDE7Cj4gKwl1MzIgb3B0X3Nob3J0X3pjYWwgPSAxOwo+ICsJdTMyIHNhdmVfcmVzdG9yZV9jbGtz dG9wX3BkID0gMTsKPiArCj4gKwl1MzIgcHJlbG9ja19kbGxfZW4gPSAwLCBkbGxfb3V0Owo+ICsK PiArCWludCBuZXh0X3B1c2gsIG5leHRfZHFfZV9pdnJlZiwgbmV4dF9kcXNfZV9pdnJlZjsKPiAr Cj4gKwl1MzIgb3B0X3dhcl8yMDAwMjQ5MDc7Cj4gKwl1MzIgenFfd2FpdF9sb25nOwo+ICsJdTMy IHpxX3dhaXRfc2hvcnQ7Cj4gKwo+ICsJdTMyIGJnX3JlZ3VsYXRvcl9zd2l0Y2hfY29tcGxldGVf d2FpdF9jbGtzOwo+ICsJdTMyIGJnX3JlZ3VsYXRvcl9tb2RlX2NoYW5nZTsKPiArCXUzMiBlbmFi bGVfYmdscF9yZWd1bGF0b3I7Cj4gKwl1MzIgZW5hYmxlX2JnX3JlZ3VsYXRvcjsKPiArCj4gKwl1 MzIgdFJUTTsKPiArCXUzMiBSUF93YXI7Cj4gKwl1MzIgUjJQX3dhcjsKPiArCXUzMiBUUlBhYl93 YXI7Cj4gKwlzMzIgblJUUDsKPiArCXUzMiBkZWx0YVRXQVRNOwo+ICsJdTMyIFcyUF93YXI7Cj4g Kwl1MzIgdFJQU1Q7Cj4gKwo+ICsJdTMyIG1yd19yZXE7Cj4gKwl1MzIgYWRlbCA9IDAsIGNvbXBl bnNhdGVfdHJpbW1lcl9hcHBsaWNhYmxlID0gMDsKPiArCXUzMiBuZXh0X3RpbWluZ19yYXRlX21o eiA9IG5leHRfdGltaW5nLT5yYXRlIC8gMTAwMDsKPiArCj4gKwlzdGF0aWMgdTMyIGZzcF9mb3Jf bmV4dF9mcmVxOwo+ICsKPiArCWVtY19jY19kYmcoSU5GTywgIlJ1bm5pbmcgY2xvY2sgY2hhbmdl LlxuIik7Cj4gKwo+ICsJZmFrZV90aW1pbmcgPSBnZXRfdGltaW5nX2Zyb21fZnJlcShlbWMsIGxh c3RfdGltaW5nLT5yYXRlKTsKPiArCj4gKwlmc3BfZm9yX25leHRfZnJlcSA9ICFmc3BfZm9yX25l eHRfZnJlcTsKPiArCj4gKwlkcmFtX3R5cGUgPSBlbWNfcmVhZGwoZW1jLCBFTUNfRkJJT19DRkc1 KSAmCj4gKwkJICAgIEVNQ19GQklPX0NGRzVfRFJBTV9UWVBFX01BU0sgPj4KPiArCQkgICAgRU1D X0ZCSU9fQ0ZHNV9EUkFNX1RZUEVfU0hJRlQ7Cj4gKwlzaGFyZWRfenFfcmVzaXN0b3IgPSBsYXN0 X3RpbWluZy0+YnVyc3RfcmVnc1tFTUNfWkNBTF9XQUlUX0NOVF9JTkRFWF0gJgo+ICsJCQkgICAg IDEgPDwgMzE7Cj4gKwljaGFubmVsX21vZGUgPSAhIShsYXN0X3RpbWluZy0+YnVyc3RfcmVnc1tF TUNfRkJJT19DRkc3X0lOREVYXSAmCj4gKwkJCSAgMSA8PCAyKTsKPiArCW9wdF96Y2FsX2VuX2Nj ID0gKG5leHRfdGltaW5nLT5idXJzdF9yZWdzW0VNQ19aQ0FMX0lOVEVSVkFMX0lOREVYXSAmJgo+ ICsJCQkgICFsYXN0X3RpbWluZy0+YnVyc3RfcmVnc1tFTUNfWkNBTF9JTlRFUlZBTF9JTkRFWF0p IHx8Cj4gKwkJCSAgZHJhbV90eXBlID09IERSQU1fVFlQRV9MUEREUjQ7Cj4gKwlvcHRfZGxsX21v ZGUgPSAoZHJhbV90eXBlID09IERSQU1fVFlQRV9ERFIzKSA/Cj4gKwkJICAgICAgIGdldF9kbGxf c3RhdGUobmV4dF90aW1pbmcpIDogRExMX09GRjsKPiArCWlzX2xwZGRyMyA9IChkcmFtX3R5cGUg PT0gRFJBTV9UWVBFX0xQRERSMikgJiYKPiArCQkgICAgbmV4dF90aW1pbmctPmJ1cnN0X3JlZ3Nb RU1DX0ZCSU9fQ0ZHNV9JTkRFWF0gJgo+ICsJCSAgICAxIDw8IDI1Owo+ICsJb3B0X3dhcl8yMDAw MjQ5MDcgPSAoZHJhbV90eXBlID09IERSQU1fVFlQRV9MUEREUjQpOwo+ICsJb3B0X2R2ZnNfbW9k ZSA9IE1BTl9TUjsKPiArCWRyYW1fZGV2X251bSA9IChtY19yZWFkbChlbWMtPm1jLCBNQ19FTUVN X0FEUl9DRkcpICYgMHgxKSArIDE7Cj4gKwo+ICsJZW1jX2NmZ19yZWcgPSBlbWNfcmVhZGwoZW1j LCBFTUNfQ0ZHKTsKPiArCWVtY19hdXRvX2NhbF9jb25maWcgPSBlbWNfcmVhZGwoZW1jLCBFTUNf QVVUT19DQUxfQ09ORklHKTsKPiArCj4gKwlzb3VyY2VfY2xvY2tfcGVyaW9kID0gMTAwMDAwMDAw MCAvIGxhc3RfdGltaW5nLT5yYXRlOwo+ICsJZGVzdGluYXRpb25fY2xvY2tfcGVyaW9kID0gMTAw MDAwMDAwMCAvIG5leHRfdGltaW5nLT5yYXRlOwo+ICsKPiArCXRaUUNBTF9scGRkcjRfZmNfYWRq ID0gKGRlc3RpbmF0aW9uX2Nsb2NrX3BlcmlvZCA+Cj4gKwkJCQl6cWNhbF9iZWZvcmVfY2NfY3V0 b2ZmKSA/Cj4gKwkJdFpRQ0FMX2xwZGRyNCAvIGRlc3RpbmF0aW9uX2Nsb2NrX3BlcmlvZCA6Cj4g KwkJKHRaUUNBTF9scGRkcjQgLSB0RkNfbHBkZHI0KSAvIGRlc3RpbmF0aW9uX2Nsb2NrX3Blcmlv ZDsKPiArCWVtY19kYmdfbyA9IGVtY19yZWFkbChlbWMsIEVNQ19EQkcpOwo+ICsJZW1jX3Bpbl9v ID0gZW1jX3JlYWRsKGVtYywgRU1DX1BJTik7Cj4gKwllbWNfY2ZnX3BpcGVfY2xrX28gPSBlbWNf cmVhZGwoZW1jLCBFTUNfQ0ZHX1BJUEVfQ0xLKTsKPiArCWVtY19kYmcgPSBlbWNfZGJnX287Cj4g Kwo+ICsJZW1jX2NmZyA9IG5leHRfdGltaW5nLT5idXJzdF9yZWdzW0VNQ19DRkdfSU5ERVhdOwo+ ICsJZW1jX2NmZyAmPSB+KEVNQ19DRkdfRFlOX1NFTEZfUkVGIHwgRU1DX0NGR19EUkFNX0FDUEQg fAo+ICsJCSAgICAgRU1DX0NGR19EUkFNX0NMS1NUT1BfU1IgfCBFTUNfQ0ZHX0RSQU1fQ0xLU1RP UF9QRCk7Cj4gKwllbWNfc2VsX2RwZF9jdHJsID0gbmV4dF90aW1pbmctPmVtY19zZWxfZHBkX2N0 cmw7Cj4gKwllbWNfc2VsX2RwZF9jdHJsICY9IH4oRU1DX1NFTF9EUERfQ1RSTF9DTEtfU0VMX0RQ RF9FTiB8Cj4gKwkJCSAgICAgIEVNQ19TRUxfRFBEX0NUUkxfQ0FfU0VMX0RQRF9FTiB8Cj4gKwkJ CSAgICAgIEVNQ19TRUxfRFBEX0NUUkxfUkVTRVRfU0VMX0RQRF9FTiB8Cj4gKwkJCSAgICAgIEVN Q19TRUxfRFBEX0NUUkxfT0RUX1NFTF9EUERfRU4gfAo+ICsJCQkgICAgICBFTUNfU0VMX0RQRF9D VFJMX0RBVEFfU0VMX0RQRF9FTik7Cj4gKwo+ICsJZW1jX2NjX2RiZyhJTkZPLCAiQ2xvY2sgY2hh bmdlIHZlcnNpb246ICVkXG4iLAo+ICsJCSAgIERWRlNfQ0xPQ0tfQ0hBTkdFX1ZFUlNJT04pOwo+ ICsJZW1jX2NjX2RiZyhJTkZPLCAiRFJBTSB0eXBlID0gJWRcbiIsIGVtYy0+ZHJhbV90eXBlKTsK PiArCWVtY19jY19kYmcoSU5GTywgIkRSQU0gZGV2ICM6ICVkXG4iLCBkcmFtX2Rldl9udW0pOwo+ ICsJZW1jX2NjX2RiZyhJTkZPLCAiTmV4dCBFTUMgY2xrc3JjOiAweCUwOHhcbiIsIGNsa3NyYyk7 Cj4gKwllbWNfY2NfZGJnKElORk8sICJETEwgY2xrc3JjOiAgICAgIDB4JTA4eFxuIiwgbmV4dF90 aW1pbmctPmRsbF9jbGtfc3JjKTsKPiArCWVtY19jY19kYmcoSU5GTywgImxhc3QgcmF0ZTogJXUs IG5leHQgcmF0ZSAldVxuIiwgbGFzdF90aW1pbmctPnJhdGUsCj4gKwkJICAgbmV4dF90aW1pbmct PnJhdGUpOwo+ICsJZW1jX2NjX2RiZyhJTkZPLCAibGFzdCBwZXJpb2Q6ICV1LCBuZXh0IHBlcmlv ZDogJXVcbiIsCj4gKwkJICAgc291cmNlX2Nsb2NrX3BlcmlvZCwgZGVzdGluYXRpb25fY2xvY2tf cGVyaW9kKTsKPiArCWVtY19jY19kYmcoSU5GTywgIiAgc2hhcmVkX3pxX3Jlc2lzdG9yOiAlZFxu IiwgISFzaGFyZWRfenFfcmVzaXN0b3IpOwo+ICsJZW1jX2NjX2RiZyhJTkZPLCAiICBjaGFubmVs X21vZGU6ICVkXG4iLCBjaGFubmVsX21vZGUpOwo+ICsJZW1jX2NjX2RiZyhJTkZPLCAiICBvcHRf ZGxsX21vZGU6ICVkXG4iLCBvcHRfZGxsX21vZGUpOwo+ICsKPiArCS8qCj4gKwkgKiBTdGVwIDE6 Cj4gKwkgKiAgIFByZSBEVkZTIFNXIHNlcXVlbmNlLgo+ICsJICovCj4gKwllbWNfY2NfZGJnKFNU RVBTLCAiU3RlcCAxXG4iKTsKPiArCWVtY19jY19kYmcoU1RFUFMsICJTdGVwIDEuMTogRGlzYWJs ZSBETEwgdGVtcG9yYXJpbHkuXG4iKTsKPiArCXRtcCA9IGVtY19yZWFkbChlbWMsIEVNQ19DRkdf RElHX0RMTCk7Cj4gKwl0bXAgJj0gfkVNQ19DRkdfRElHX0RMTF9DRkdfRExMX0VOOwo+ICsJZW1j X3dyaXRlbChlbWMsIHRtcCwgRU1DX0NGR19ESUdfRExMKTsKPiArCj4gKwllbWNfdGltaW5nX3Vw ZGF0ZShlbWMsIGNoYW5uZWxfbW9kZSk7Cj4gKwl3YWl0X2Zvcl91cGRhdGUoZW1jLCBFTUNfQ0ZH X0RJR19ETEwsCj4gKwkJCUVNQ19DRkdfRElHX0RMTF9DRkdfRExMX0VOLCAwLCBSRUdfRU1DKTsK PiArCWlmIChjaGFubmVsX21vZGUpCj4gKwkJd2FpdF9mb3JfdXBkYXRlKGVtYywgRU1DX0NGR19E SUdfRExMLAo+ICsJCQkJRU1DX0NGR19ESUdfRExMX0NGR19ETExfRU4sIDAsIFJFR19FTUMxKTsK PiArCj4gKwllbWNfY2NfZGJnKFNURVBTLCAiU3RlcCAxLjI6IERpc2FibGUgQVVUT0NBTCB0ZW1w b3JhcmlseS5cbiIpOwo+ICsJZW1jX2F1dG9fY2FsX2NvbmZpZyA9IG5leHRfdGltaW5nLT5lbWNf YXV0b19jYWxfY29uZmlnOwo+ICsJYXV0b19jYWxfZW4gPSBlbWNfYXV0b19jYWxfY29uZmlnICYg RU1DX0FVVE9fQ0FMX0NPTkZJR19BVVRPX0NBTF9FTkFCTEU7Cj4gKwllbWNfYXV0b19jYWxfY29u ZmlnICY9IH5FTUNfQVVUT19DQUxfQ09ORklHX0FVVE9fQ0FMX1NUQVJUOwo+ICsJZW1jX2F1dG9f Y2FsX2NvbmZpZyB8PSAgRU1DX0FVVE9fQ0FMX0NPTkZJR19BVVRPX0NBTF9NRUFTVVJFX1NUQUxM Owo+ICsJZW1jX2F1dG9fY2FsX2NvbmZpZyB8PSAgRU1DX0FVVE9fQ0FMX0NPTkZJR19BVVRPX0NB TF9VUERBVEVfU1RBTEw7Cj4gKwllbWNfYXV0b19jYWxfY29uZmlnIHw9ICBhdXRvX2NhbF9lbjsK PiArCWVtY193cml0ZWwoZW1jLCBlbWNfYXV0b19jYWxfY29uZmlnLCBFTUNfQVVUT19DQUxfQ09O RklHKTsKPiArCWVtY19yZWFkbChlbWMsIEVNQ19BVVRPX0NBTF9DT05GSUcpOyAvKiBGbHVzaCB3 cml0ZS4gKi8KPiArCj4gKwllbWNfY2NfZGJnKFNURVBTLCAiU3RlcCAxLjM6IERpc2FibGUgb3Ro ZXIgcG93ZXIgZmVhdHVyZXMuXG4iKTsKPiArCWVtY19zZXRfc2hhZG93X2J5cGFzcyhlbWMsIEFD VElWRSk7Cj4gKwllbWNfd3JpdGVsKGVtYywgZW1jX2NmZywgRU1DX0NGRyk7Cj4gKwllbWNfd3Jp dGVsKGVtYywgZW1jX3NlbF9kcGRfY3RybCwgRU1DX1NFTF9EUERfQ1RSTCk7Cj4gKwllbWNfc2V0 X3NoYWRvd19ieXBhc3MoZW1jLCBBU1NFTUJMWSk7Cj4gKwo+ICsJaWYgKG5leHRfdGltaW5nLT5w ZXJpb2RpY190cmFpbmluZykgewo+ICsJCXRlZ3JhMjEwX3Jlc2V0X2RyYW1fY2xrdHJlZV92YWx1 ZXMobmV4dF90aW1pbmcpOwo+ICsKPiArCQl3YWl0X2Zvcl91cGRhdGUoZW1jLCBFTUNfRU1DX1NU QVRVUywKPiArCQkJCUVNQ19FTUNfU1RBVFVTX0RSQU1fSU5fUE9XRVJET1dOX01BU0ssIDAsCj4g KwkJCQlSRUdfRU1DKTsKPiArCQlpZiAoY2hhbm5lbF9tb2RlKQo+ICsJCQl3YWl0X2Zvcl91cGRh dGUoZW1jLCBFTUNfRU1DX1NUQVRVUywKPiArCQkJCQlFTUNfRU1DX1NUQVRVU19EUkFNX0lOX1BP V0VSRE9XTl9NQVNLLAo+ICsJCQkJCTAsIFJFR19FTUMxKTsKPiArCj4gKwkJd2FpdF9mb3JfdXBk YXRlKGVtYywgRU1DX0VNQ19TVEFUVVMsCj4gKwkJCQlFTUNfRU1DX1NUQVRVU19EUkFNX0lOX1NF TEZfUkVGUkVTSF9NQVNLLCAwLAo+ICsJCQkJUkVHX0VNQyk7Cj4gKwkJaWYgKGNoYW5uZWxfbW9k ZSkKPiArCQkJd2FpdF9mb3JfdXBkYXRlKGVtYywgRU1DX0VNQ19TVEFUVVMsCj4gKwkJCQlFTUNf RU1DX1NUQVRVU19EUkFNX0lOX1NFTEZfUkVGUkVTSF9NQVNLLCAwLAo+ICsJCQkJUkVHX0VNQzEp Owo+ICsKPiArCQl0ZWdyYTIxMF9zdGFydF9wZXJpb2RpY19jb21wZW5zYXRpb24oZW1jKTsKPiAr Cj4gKwkJdWRlbGF5KCgoMTAwMCAqCj4gKwkJCSB0ZWdyYTIxMF9hY3R1YWxfb3NjX2Nsb2Nrcyhs YXN0X3RpbWluZy0+cnVuX2Nsb2NrcykpIC8KPiArCQkJbGFzdF90aW1pbmctPnJhdGUpICsgMik7 Cj4gKwkJYWRlbCA9IHBlcmlvZGljX2NvbXBlbnNhdGlvbl9oYW5kbGVyKGVtYywgRFZGU19TRVFV RU5DRSwKPiArCQkJCQkJICAgICBkcmFtX2Rldl9udW0sCj4gKwkJCQkJCSAgICAgY2hhbm5lbF9t b2RlLAo+ICsJCQkJCQkgICAgIGZha2VfdGltaW5nLCBuZXh0X3RpbWluZyk7Cj4gKwkJY29tcGVu c2F0ZV90cmltbWVyX2FwcGxpY2FibGUgPQo+ICsJCQluZXh0X3RpbWluZy0+cGVyaW9kaWNfdHJh aW5pbmcgJiYKPiArCQkJKChhZGVsICogMTI4ICogbmV4dF90aW1pbmdfcmF0ZV9taHopIC8gMTAw MDAwMCkgPgo+ICsJCQluZXh0X3RpbWluZy0+dHJlZV9tYXJnaW47Cj4gKwl9Cj4gKwo+ICsJZW1j X3dyaXRlbChlbWMsIEVNQ19JTlRTVEFUVVNfQ0xLQ0hBTkdFX0NPTVBMRVRFLCBFTUNfSU5UU1RB VFVTKTsKPiArCWVtY19zZXRfc2hhZG93X2J5cGFzcyhlbWMsIEFDVElWRSk7Cj4gKwllbWNfd3Jp dGVsKGVtYywgZW1jX2NmZywgRU1DX0NGRyk7Cj4gKwllbWNfd3JpdGVsKGVtYywgZW1jX3NlbF9k cGRfY3RybCwgRU1DX1NFTF9EUERfQ1RSTCk7Cj4gKwllbWNfd3JpdGVsKGVtYywgZW1jX2NmZ19w aXBlX2Nsa19vIHwgRU1DX0NGR19QSVBFX0NMS19DTEtfQUxXQVlTX09OLAo+ICsJCSAgIEVNQ19D RkdfUElQRV9DTEspOwo+ICsJZW1jX3dyaXRlbChlbWMsIG5leHRfdGltaW5nLT5lbWNfZmRwZF9j dHJsX2NtZF9ub19yYW1wICYKPiArCQkgICB+RU1DX0ZEUERfQ1RSTF9DTURfTk9fUkFNUF9DTURf RFBEX05PX1JBTVBfRU5BQkxFLAo+ICsJCSAgIEVNQ19GRFBEX0NUUkxfQ01EX05PX1JBTVApOwo+ ICsKPiArCWJnX3JlZ3VsYXRvcl9tb2RlX2NoYW5nZSA9Cj4gKwkJKChuZXh0X3RpbWluZy0+YnVy c3RfcmVnc1tFTUNfUE1BQ1JPX0JHX0JJQVNfQ1RSTF8wX0lOREVYXSAmCj4gKwkJICBFTUNfUE1B Q1JPX0JHX0JJQVNfQ1RSTF8wX0JHTFBfRV9QV1JEKSBeCj4gKwkJIChsYXN0X3RpbWluZy0+YnVy c3RfcmVnc1tFTUNfUE1BQ1JPX0JHX0JJQVNfQ1RSTF8wX0lOREVYXSAmCj4gKwkJICBFTUNfUE1B Q1JPX0JHX0JJQVNfQ1RSTF8wX0JHTFBfRV9QV1JEKSkgfHwKPiArCQkoKG5leHRfdGltaW5nLT5i dXJzdF9yZWdzW0VNQ19QTUFDUk9fQkdfQklBU19DVFJMXzBfSU5ERVhdICYKPiArCQkgIEVNQ19Q TUFDUk9fQkdfQklBU19DVFJMXzBfQkdfRV9QV1JEKSBeCj4gKwkJIChsYXN0X3RpbWluZy0+YnVy c3RfcmVnc1tFTUNfUE1BQ1JPX0JHX0JJQVNfQ1RSTF8wX0lOREVYXSAmCj4gKwkJICBFTUNfUE1B Q1JPX0JHX0JJQVNfQ1RSTF8wX0JHX0VfUFdSRCkpOwo+ICsJZW5hYmxlX2JnbHBfcmVndWxhdG9y ID0KPiArCQkobmV4dF90aW1pbmctPmJ1cnN0X3JlZ3NbRU1DX1BNQUNST19CR19CSUFTX0NUUkxf MF9JTkRFWF0gJgo+ICsJCSBFTUNfUE1BQ1JPX0JHX0JJQVNfQ1RSTF8wX0JHTFBfRV9QV1JEKSA9 PSAwOwo+ICsJZW5hYmxlX2JnX3JlZ3VsYXRvciA9Cj4gKwkJKG5leHRfdGltaW5nLT5idXJzdF9y ZWdzW0VNQ19QTUFDUk9fQkdfQklBU19DVFJMXzBfSU5ERVhdICYKPiArCQkgRU1DX1BNQUNST19C R19CSUFTX0NUUkxfMF9CR19FX1BXUkQpID09IDA7Cj4gKwo+ICsJaWYgKGJnX3JlZ3VsYXRvcl9t b2RlX2NoYW5nZSkgewo+ICsJCWlmIChlbmFibGVfYmdfcmVndWxhdG9yKQo+ICsJCQllbWNfd3Jp dGVsKGVtYywgbGFzdF90aW1pbmctPmJ1cnN0X3JlZ3MKPiArCQkJCSAgIFtFTUNfUE1BQ1JPX0JH X0JJQVNfQ1RSTF8wX0lOREVYXSAmCj4gKwkJCQkgICB+RU1DX1BNQUNST19CR19CSUFTX0NUUkxf MF9CR19FX1BXUkQsCj4gKwkJCQkgICBFTUNfUE1BQ1JPX0JHX0JJQVNfQ1RSTF8wKTsKPiArCQll bHNlCj4gKwkJCWVtY193cml0ZWwoZW1jLCBsYXN0X3RpbWluZy0+YnVyc3RfcmVncwo+ICsJCQkJ ICAgW0VNQ19QTUFDUk9fQkdfQklBU19DVFJMXzBfSU5ERVhdICYKPiArCQkJCSAgIH5FTUNfUE1B Q1JPX0JHX0JJQVNfQ1RSTF8wX0JHTFBfRV9QV1JELAo+ICsJCQkJICAgRU1DX1BNQUNST19CR19C SUFTX0NUUkxfMCk7Cj4gKwl9Cj4gKwo+ICsJLyogQ2hlY2sgaWYgd2UgbmVlZCB0byB0dXJuIG9u IFZSRUYgZ2VuZXJhdG9yLiAqLwo+ICsJaWYgKCgoKGxhc3RfdGltaW5nLT5idXJzdF9yZWdzW0VN Q19QTUFDUk9fREFUQV9QQURfVFhfQ1RSTF9JTkRFWF0gJgo+ICsJICAgICAgIEVNQ19QTUFDUk9f REFUQV9QQURfVFhfQ1RSTF9EQVRBX0RRX0VfSVZSRUYpID09IDApICYmCj4gKwkgICAgICgobmV4 dF90aW1pbmctPmJ1cnN0X3JlZ3NbRU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJMX0lOREVYXSAm Cj4gKwkgICAgICAgRU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJMX0RBVEFfRFFfRV9JVlJFRikg PT0gMSkpIHx8Cj4gKwkgICAgKCgobGFzdF90aW1pbmctPmJ1cnN0X3JlZ3NbRU1DX1BNQUNST19E QVRBX1BBRF9UWF9DVFJMX0lOREVYXSAmCj4gKwkgICAgICAgRU1DX1BNQUNST19EQVRBX1BBRF9U WF9DVFJMX0RBVEFfRFFTX0VfSVZSRUYpID09IDApICYmCj4gKwkgICAgICgobmV4dF90aW1pbmct PmJ1cnN0X3JlZ3NbRU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJMX0lOREVYXSAmCj4gKwkgICAg ICAgRU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJMX0RBVEFfRFFTX0VfSVZSRUYpID09IDEpKSkg ewo+ICsJCXUzMiBwYWRfdHhfY3RybCA9Cj4gKwkJICAgIG5leHRfdGltaW5nLT5idXJzdF9yZWdz W0VNQ19QTUFDUk9fREFUQV9QQURfVFhfQ1RSTF9JTkRFWF07Cj4gKwkJdTMyIGxhc3RfcGFkX3R4 X2N0cmwgPQo+ICsJCSAgICBsYXN0X3RpbWluZy0+YnVyc3RfcmVnc1tFTUNfUE1BQ1JPX0RBVEFf UEFEX1RYX0NUUkxfSU5ERVhdOwo+ICsKPiArCQluZXh0X2Rxc19lX2l2cmVmID0gcGFkX3R4X2N0 cmwgJgo+ICsJCQkJICAgRU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJMX0RBVEFfRFFTX0VfSVZS RUY7Cj4gKwkJbmV4dF9kcV9lX2l2cmVmID0gcGFkX3R4X2N0cmwgJgo+ICsJCQkJICBFTUNfUE1B Q1JPX0RBVEFfUEFEX1RYX0NUUkxfREFUQV9EUV9FX0lWUkVGOwo+ICsJCW5leHRfcHVzaCA9IChs YXN0X3BhZF90eF9jdHJsICYKPiArCQkJICAgICB+RU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJM X0RBVEFfRFFfRV9JVlJFRiAmCj4gKwkJCSAgICAgfkVNQ19QTUFDUk9fREFUQV9QQURfVFhfQ1RS TF9EQVRBX0RRU19FX0lWUkVGKSB8Cj4gKwkJCSAgICBuZXh0X2RxX2VfaXZyZWYgfCBuZXh0X2Rx c19lX2l2cmVmOwo+ICsJCWVtY193cml0ZWwoZW1jLCBuZXh0X3B1c2gsIEVNQ19QTUFDUk9fREFU QV9QQURfVFhfQ1RSTCk7Cj4gKwkJdWRlbGF5KDEpOwo+ICsJfSBlbHNlIGlmIChiZ19yZWd1bGF0 b3JfbW9kZV9jaGFuZ2UpIHsKPiArCQl1ZGVsYXkoMSk7Cj4gKwl9Cj4gKwo+ICsJZW1jX3NldF9z aGFkb3dfYnlwYXNzKGVtYywgQVNTRU1CTFkpOwo+ICsKPiArCS8qCj4gKwkgKiBTdGVwIDI6Cj4g KwkgKiAgIFByZWxvY2sgdGhlIERMTC4KPiArCSAqLwo+ICsJZW1jX2NjX2RiZyhTVEVQUywgIlN0 ZXAgMlxuIik7Cj4gKwlpZiAobmV4dF90aW1pbmctPmJ1cnN0X3JlZ3NbRU1DX0NGR19ESUdfRExM X0lOREVYXSAmCj4gKwkgICAgRU1DX0NGR19ESUdfRExMX0NGR19ETExfRU4pIHsKPiArCQllbWNf Y2NfZGJnKElORk8sICJQcmVsb2NrIGVuYWJsZWQgZm9yIHRhcmdldCBmcmVxdWVuY3kuXG4iKTsK PiArCQlkbGxfb3V0ID0gdGVncmEyMTBfZGxsX3ByZWxvY2soZW1jLCAwLCBjbGtzcmMpOwo+ICsJ CWVtY19jY19kYmcoSU5GTywgIkRMTCBvdXQ6IDB4JTAzeFxuIiwgZGxsX291dCk7Cj4gKwkJcHJl bG9ja19kbGxfZW4gPSAxOwo+ICsJfSBlbHNlIHsKPiArCQllbWNfY2NfZGJnKElORk8sICJEaXNh YmxpbmcgRExMIGZvciB0YXJnZXQgZnJlcXVlbmN5LlxuIik7Cj4gKwkJdGVncmEyMTBfZGxsX2Rp c2FibGUoZW1jLCBjaGFubmVsX21vZGUpOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBTdGVwIDM6 Cj4gKwkgKiAgIFByZXBhcmUgYXV0b2NhbCBmb3IgdGhlIGNsb2NrIGNoYW5nZS4KPiArCSAqLwo+ ICsJZW1jX2NjX2RiZyhTVEVQUywgIlN0ZXAgM1xuIik7Cj4gKwllbWNfc2V0X3NoYWRvd19ieXBh c3MoZW1jLCBBQ1RJVkUpOwo+ICsJZW1jX3dyaXRlbChlbWMsIG5leHRfdGltaW5nLT5lbWNfYXV0 b19jYWxfY29uZmlnMiwKPiArCQkgICBFTUNfQVVUT19DQUxfQ09ORklHMik7Cj4gKwllbWNfd3Jp dGVsKGVtYywgbmV4dF90aW1pbmctPmVtY19hdXRvX2NhbF9jb25maWczLAo+ICsJCSAgIEVNQ19B VVRPX0NBTF9DT05GSUczKTsKPiArCWVtY193cml0ZWwoZW1jLCBuZXh0X3RpbWluZy0+ZW1jX2F1 dG9fY2FsX2NvbmZpZzQsCj4gKwkJICAgRU1DX0FVVE9fQ0FMX0NPTkZJRzQpOwo+ICsJZW1jX3dy aXRlbChlbWMsIG5leHRfdGltaW5nLT5lbWNfYXV0b19jYWxfY29uZmlnNSwKPiArCQkgICBFTUNf QVVUT19DQUxfQ09ORklHNSk7Cj4gKwllbWNfd3JpdGVsKGVtYywgbmV4dF90aW1pbmctPmVtY19h dXRvX2NhbF9jb25maWc2LAo+ICsJCSAgIEVNQ19BVVRPX0NBTF9DT05GSUc2KTsKPiArCWVtY193 cml0ZWwoZW1jLCBuZXh0X3RpbWluZy0+ZW1jX2F1dG9fY2FsX2NvbmZpZzcsCj4gKwkJICAgRU1D X0FVVE9fQ0FMX0NPTkZJRzcpOwo+ICsJZW1jX3dyaXRlbChlbWMsIG5leHRfdGltaW5nLT5lbWNf YXV0b19jYWxfY29uZmlnOCwKPiArCQkgICBFTUNfQVVUT19DQUxfQ09ORklHOCk7Cj4gKwllbWNf c2V0X3NoYWRvd19ieXBhc3MoZW1jLCBBU1NFTUJMWSk7Cj4gKwo+ICsJZW1jX2F1dG9fY2FsX2Nv bmZpZyB8PSAoRU1DX0FVVE9fQ0FMX0NPTkZJR19BVVRPX0NBTF9DT01QVVRFX1NUQVJUIHwKPiAr CQkJCWF1dG9fY2FsX2VuKTsKPiArCWVtY193cml0ZWwoZW1jLCBlbWNfYXV0b19jYWxfY29uZmln LCBFTUNfQVVUT19DQUxfQ09ORklHKTsKPiArCj4gKwkvKgo+ICsJICogU3RlcCA0Ogo+ICsJICog ICBVcGRhdGUgRU1DX0NGRy4gKD8/KQo+ICsJICovCj4gKwllbWNfY2NfZGJnKFNURVBTLCAiU3Rl cCA0XG4iKTsKPiArCWlmIChzb3VyY2VfY2xvY2tfcGVyaW9kID4gNTAwMDAgJiYgZHJhbV90eXBl ID09IERSQU1fVFlQRV9MUEREUjQpCj4gKwkJY2NmaWZvX3dyaXRlbChlbWMsIDEsIEVNQ19TRUxG X1JFRiwgMCk7Cj4gKwllbHNlCj4gKwkJZW1jX3dyaXRlbChlbWMsIG5leHRfdGltaW5nLT5lbWNf Y2ZnXzIsIEVNQ19DRkdfMik7Cj4gKwo+ICsJLyoKPiArCSAqIFN0ZXAgNToKPiArCSAqICAgUHJl cGFyZSByZWZlcmVuY2UgdmFyaWFibGVzIGZvciBaUUNBTCByZWdzLgo+ICsJICovCj4gKwllbWNf Y2NfZGJnKFNURVBTLCAiU3RlcCA1XG4iKTsKPiArCWVtY196Y2FsX2ludGVydmFsID0gMDsKPiAr CWVtY196Y2FsX3dhaXRfY250X29sZCA9Cj4gKwkJbGFzdF90aW1pbmctPmJ1cnN0X3JlZ3NbRU1D X1pDQUxfV0FJVF9DTlRfSU5ERVhdOwo+ICsJZW1jX3pjYWxfd2FpdF9jbnRfbmV3ID0KPiArCQlu ZXh0X3RpbWluZy0+YnVyc3RfcmVnc1tFTUNfWkNBTF9XQUlUX0NOVF9JTkRFWF07Cj4gKwllbWNf emNhbF93YWl0X2NudF9vbGQgJj0gfkVNQ19aQ0FMX1dBSVRfQ05UX1pDQUxfV0FJVF9DTlRfTUFT SzsKPiArCWVtY196Y2FsX3dhaXRfY250X25ldyAmPSB+RU1DX1pDQUxfV0FJVF9DTlRfWkNBTF9X QUlUX0NOVF9NQVNLOwo+ICsKPiArCWlmIChkcmFtX3R5cGUgPT0gRFJBTV9UWVBFX0xQRERSNCkK PiArCQl6cV93YWl0X2xvbmcgPSBtYXgoKHUzMikxLAo+ICsJCQkJICAgZGl2X28zKDEwMDAwMDAs IGRlc3RpbmF0aW9uX2Nsb2NrX3BlcmlvZCkpOwo+ICsJZWxzZSBpZiAoZHJhbV90eXBlID09IERS QU1fVFlQRV9MUEREUjIgfHwgaXNfbHBkZHIzKQo+ICsJCXpxX3dhaXRfbG9uZyA9IG1heChuZXh0 X3RpbWluZy0+bWluX21yc193YWl0LAo+ICsJCQkJICAgZGl2X28zKDM2MDAwMCwgZGVzdGluYXRp b25fY2xvY2tfcGVyaW9kKSkgKwo+ICsJCQkgICAgICAgNDsKPiArCWVsc2UgaWYgKGRyYW1fdHlw ZSA9PSBEUkFNX1RZUEVfRERSMykKPiArCQl6cV93YWl0X2xvbmcgPSBtYXgoKHUzMikyNTYsCj4g KwkJCQkgICBkaXZfbzMoMzIwMDAwLCBkZXN0aW5hdGlvbl9jbG9ja19wZXJpb2QpICsKPiArCQkJ CSAgIDIpOwo+ICsJZWxzZQo+ICsJCXpxX3dhaXRfbG9uZyA9IDA7Cj4gKwo+ICsJaWYgKGRyYW1f dHlwZSA9PSBEUkFNX1RZUEVfTFBERFIyIHx8IGlzX2xwZGRyMykKPiArCQl6cV93YWl0X3Nob3J0 ID0gbWF4KG1heChuZXh0X3RpbWluZy0+bWluX21yc193YWl0LCAodTMyKTYpLAo+ICsJCQkJICAg IGRpdl9vMyg5MDAwMCwgZGVzdGluYXRpb25fY2xvY2tfcGVyaW9kKSkgKwo+ICsJCQkJNDsKPiAr CWVsc2UgaWYgKGRyYW1fdHlwZSA9PSBEUkFNX1RZUEVfRERSMykKPiArCQl6cV93YWl0X3Nob3J0 ID0gbWF4KCh1MzIpNjQsCj4gKwkJCQkgICAgZGl2X28zKDgwMDAwLCBkZXN0aW5hdGlvbl9jbG9j a19wZXJpb2QpKSArCj4gKwkJCQkyOwo+ICsJZWxzZQo+ICsJCXpxX3dhaXRfc2hvcnQgPSAwOwo+ ICsKPiArCS8qCj4gKwkgKiBTdGVwIDY6Cj4gKwkgKiAgIFRyYWluaW5nIGNvZGUgLSByZW1vdmVk Lgo+ICsJICovCj4gKwllbWNfY2NfZGJnKFNURVBTLCAiU3RlcCA2XG4iKTsKPiArCj4gKwkvKgo+ ICsJICogU3RlcCA3Ogo+ICsJICogICBQcm9ncmFtIEZTUCByZWZlcmVuY2UgcmVnaXN0ZXJzIGFu ZCBzZW5kIE1SV3MgdG8gbmV3IEZTUFdSLgo+ICsJICovCj4gKwllbWNfY2NfZGJnKFNURVBTLCAi U3RlcCA3XG4iKTsKPiArCWVtY19jY19kYmcoU1VCX1NURVBTLCAiU3RlcCA3LjE6IEJ1ZyAyMDAw MjQ5MDcgLSBQYXRjaCBSUCBSMlAiKTsKPiArCWlmIChvcHRfd2FyXzIwMDAyNDkwNykgewo+ICsJ CW5SVFAgPSAxNjsKPiArCQlpZiAoc291cmNlX2Nsb2NrX3BlcmlvZCA+PSAxMDAwMDAwLzE4NjYp IC8qIDUzNS45MSBwcyAqLwo+ICsJCQluUlRQID0gMTQ7Cj4gKwkJaWYgKHNvdXJjZV9jbG9ja19w ZXJpb2QgPj0gMTAwMDAwMC8xNjAwKSAvKiA2MjUuMDAgcHMgKi8KPiArCQkJblJUUCA9IDEyOwo+ ICsJCWlmIChzb3VyY2VfY2xvY2tfcGVyaW9kID49IDEwMDAwMDAvMTMzMykgLyogNzUwLjE5IHBz ICovCj4gKwkJCW5SVFAgPSAxMDsKPiArCQlpZiAoc291cmNlX2Nsb2NrX3BlcmlvZCA+PSAxMDAw MDAwLzEwNjYpIC8qIDkzOC4wOSBwcyAqLwo+ICsJCQluUlRQID0gODsKPiArCj4gKwkJZGVsdGFU V0FUTSA9IG1heF90KHUzMiwgZGl2X28zKDc1MDAsIHNvdXJjZV9jbG9ja19wZXJpb2QpLCA4KTsK PiArCj4gKwkJLyoKPiArCQkgKiBPcmlnaW5hbGx5IHRoZXJlIHdhcyBhICsgLjUgaW4gdGhlIHRS UFNUIGNhbGN1bGF0aW9uLgo+ICsJCSAqIEhvd2V2ZXIgc2luY2Ugd2UgY2FuJ3QgZG8gRlAgaW4g dGhlIGtlcm5lbCBhbmQgdGhlIHRSVE0KPiArCQkgKiBjb21wdXRhdGlvbiB3YXMgaW4gYSBmbG9h dGluZyBwb2ludCBjZWlsaW5nIGZ1bmN0aW9uLCBhZGRpbmcKPiArCQkgKiBvbmUgdG8gdFJUUCBz aG91bGQgYmUgb2suIFRoZXJlIGlzIG5vIG90aGVyIHNvdXJjZSBvZiBub24KPiArCQkgKiBpbnRl Z2VyIHZhbHVlcywgc28gdGhlIHJlc3VsdCB3YXMgYWx3YXlzIGdvaW5nIHRvIGJlCj4gKwkJICog c29tZXRoaW5nIGZvciB0aGUgZm9ybTogZl9jZWlsKE4gKyAuNSkgPSBOICsgMTsKPiArCQkgKi8K PiArCQl0UlBTVCA9ICgobGFzdF90aW1pbmctPmVtY19tcncgJiAweDgwKSA+PiA3KTsKPiArCQl0 UlRNID0gZmFrZV90aW1pbmctPmRyYW1fdGltaW5nc1tSTF0gKwo+ICsJCSAgICAgICBkaXZfbzMo MzYwMCwgc291cmNlX2Nsb2NrX3BlcmlvZCkgKwo+ICsJCSAgICAgICBtYXhfdCh1MzIsIGRpdl9v Myg3NTAwLCBzb3VyY2VfY2xvY2tfcGVyaW9kKSwgOCkgKwo+ICsJCSAgICAgICB0UlBTVCArIDEg KyBuUlRQOwo+ICsKPiArCQllbWNfY2NfZGJnKElORk8sICJ0UlRNID0gJXUsIEVNQ19SUCA9ICV1 XG4iLCB0UlRNLAo+ICsJCQkgICBuZXh0X3RpbWluZy0+YnVyc3RfcmVnc1tFTUNfUlBfSU5ERVhd KTsKPiArCj4gKwkJaWYgKGxhc3RfdGltaW5nLT5idXJzdF9yZWdzW0VNQ19SUF9JTkRFWF0gPCB0 UlRNKSB7Cj4gKwkJCWlmICh0UlRNID4gKGxhc3RfdGltaW5nLT5idXJzdF9yZWdzW0VNQ19SMlBf SU5ERVhdICsKPiArCQkJCSAgICBsYXN0X3RpbWluZy0+YnVyc3RfcmVnc1tFTUNfUlBfSU5ERVhd KSkgewo+ICsJCQkJUjJQX3dhciA9IHRSVE0gLQo+ICsJCQkJCSAgbGFzdF90aW1pbmctPmJ1cnN0 X3JlZ3NbRU1DX1JQX0lOREVYXTsKPiArCQkJCVJQX3dhciA9IGxhc3RfdGltaW5nLT5idXJzdF9y ZWdzW0VNQ19SUF9JTkRFWF07Cj4gKwkJCQlUUlBhYl93YXIgPSBsYXN0X3RpbWluZy0+YnVyc3Rf cmVnc1sKPiArCQkJCQkgICAgRU1DX1RSUEFCX0lOREVYXTsKPiArCQkJCWlmIChSMlBfd2FyID4g NjMpIHsKPiArCQkJCQlSUF93YXIgPSBSMlBfd2FyICsKPiArCQkJCQkJIGxhc3RfdGltaW5nLT5i dXJzdF9yZWdzWwo+ICsJCQkJCQkgRU1DX1JQX0lOREVYXSAtIDYzOwo+ICsJCQkJCWlmIChUUlBh Yl93YXIgPCBSUF93YXIpCj4gKwkJCQkJCVRSUGFiX3dhciA9IFJQX3dhcjsKPiArCQkJCQlSMlBf d2FyID0gNjM7Cj4gKwkJCQl9Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlSMlBfd2FyID0gbGFzdF90 aW1pbmctPmJ1cnN0X3JlZ3NbCj4gKwkJCQkJICBFTUNfUjJQX0lOREVYXTsKPiArCQkJCVJQX3dh ciA9IGxhc3RfdGltaW5nLT5idXJzdF9yZWdzW0VNQ19SUF9JTkRFWF07Cj4gKwkJCQlUUlBhYl93 YXIgPSBsYXN0X3RpbWluZy0+YnVyc3RfcmVnc1sKPiArCQkJCQkgICAgRU1DX1RSUEFCX0lOREVY XTsKPiArCQkJfQo+ICsKPiArCQkJaWYgKFJQX3dhciA8IGRlbHRhVFdBVE0pIHsKPiArCQkJCVcy UF93YXIgPSBsYXN0X3RpbWluZy0+YnVyc3RfcmVnc1tFTUNfVzJQX0lOREVYXQo+ICsJCQkJCSAg KyBkZWx0YVRXQVRNIC0gUlBfd2FyOwo+ICsJCQkJaWYgKFcyUF93YXIgPiA2Mykgewo+ICsJCQkJ CVJQX3dhciA9IFJQX3dhciArIFcyUF93YXIgLSA2MzsKPiArCQkJCQlpZiAoVFJQYWJfd2FyIDwg UlBfd2FyKQo+ICsJCQkJCQlUUlBhYl93YXIgPSBSUF93YXI7Cj4gKwkJCQkJVzJQX3dhciA9IDYz Owo+ICsJCQkJfQo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJVzJQX3dhciA9IGxhc3RfdGltaW5nLT5i dXJzdF9yZWdzWwo+ICsJCQkJCSAgRU1DX1cyUF9JTkRFWF07Cj4gKwkJCX0KPiArCj4gKwkJCWlm ICgobGFzdF90aW1pbmctPmJ1cnN0X3JlZ3NbRU1DX1cyUF9JTkRFWF0gXgo+ICsJCQkgICAgIFcy UF93YXIpIHx8Cj4gKwkJCSAgICAobGFzdF90aW1pbmctPmJ1cnN0X3JlZ3NbRU1DX1IyUF9JTkRF WF0gXgo+ICsJCQkgICAgIFIyUF93YXIpIHx8Cj4gKwkJCSAgICAobGFzdF90aW1pbmctPmJ1cnN0 X3JlZ3NbRU1DX1JQX0lOREVYXSBeCj4gKwkJCSAgICAgUlBfd2FyKSB8fAo+ICsJCQkgICAgKGxh c3RfdGltaW5nLT5idXJzdF9yZWdzW0VNQ19UUlBBQl9JTkRFWF0gXgo+ICsJCQkgICAgIFRSUGFi X3dhcikpIHsKPiArCQkJCWVtY193cml0ZWwoZW1jLCBSUF93YXIsIEVNQ19SUCk7Cj4gKwkJCQll bWNfd3JpdGVsKGVtYywgUjJQX3dhciwgRU1DX1IyUCk7Cj4gKwkJCQllbWNfd3JpdGVsKGVtYywg VzJQX3dhciwgRU1DX1cyUCk7Cj4gKwkJCQllbWNfd3JpdGVsKGVtYywgVFJQYWJfd2FyLCBFTUNf VFJQQUIpOwo+ICsJCQl9Cj4gKwkJCWVtY190aW1pbmdfdXBkYXRlKGVtYywgRFVBTF9DSEFOTkVM KTsKPiArCQl9IGVsc2Ugewo+ICsJCQllbWNfY2NfZGJnKElORk8sICJTa2lwcGVkIFdBUlxuIik7 Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmICghZnNwX2Zvcl9uZXh0X2ZyZXEpIHsKPiArCQltcjEz X2ZsaXBfZnNwd3IgPSAobmV4dF90aW1pbmctPmVtY19tcnczICYgMHhmZmZmZmYzZikgfCAweDgw Owo+ICsJCW1yMTNfZmxpcF9mc3BvcCA9IChuZXh0X3RpbWluZy0+ZW1jX21ydzMgJiAweGZmZmZm ZjNmKSB8IDB4MDA7Cj4gKwl9IGVsc2Ugewo+ICsJCW1yMTNfZmxpcF9mc3B3ciA9IChuZXh0X3Rp bWluZy0+ZW1jX21ydzMgJiAweGZmZmZmZjNmKSB8IDB4NDA7Cj4gKwkJbXIxM19mbGlwX2ZzcG9w ID0gKG5leHRfdGltaW5nLT5lbWNfbXJ3MyAmIDB4ZmZmZmZmM2YpIHwgMHhjMDsKPiArCX0KPiAr Cj4gKwltcjEzX2NhdHJfZW5hYmxlID0gKG1yMTNfZmxpcF9mc3B3ciAmIDB4RkZGRkZGRkUpIHwg MHgwMTsKPiArCWlmIChkcmFtX2Rldl9udW0gPT0gVFdPX1JBTkspCj4gKwkJbXIxM19jYXRyX2Vu YWJsZSA9IChtcjEzX2NhdHJfZW5hYmxlICYgMHgzZmZmZmZmZikgfCAweDgwMDAwMDAwOwo+ICsK PiArCWlmIChkcmFtX3R5cGUgPT0gRFJBTV9UWVBFX0xQRERSNCkgewo+ICsJCWVtY193cml0ZWwo ZW1jLCBtcjEzX2ZsaXBfZnNwd3IsIEVNQ19NUlczKTsKPiArCQllbWNfd3JpdGVsKGVtYywgbmV4 dF90aW1pbmctPmVtY19tcncsIEVNQ19NUlcpOwo+ICsJCWVtY193cml0ZWwoZW1jLCBuZXh0X3Rp bWluZy0+ZW1jX21ydzIsIEVNQ19NUlcyKTsKPiArCX0KPiArCj4gKwkvKgo+ICsJICogU3RlcCA4 Ogo+ICsJICogICBQcm9ncmFtIHRoZSBzaGFkb3cgcmVnaXN0ZXJzLgo+ICsJICovCj4gKwllbWNf Y2NfZGJnKFNURVBTLCAiU3RlcCA4XG4iKTsKPiArCWVtY19jY19kYmcoU1VCX1NURVBTLCAiV3Jp dGluZyBidXJzdF9yZWdzXG4iKTsKPiArCWZvciAoaSA9IDA7IGkgPCBuZXh0X3RpbWluZy0+bnVt X2J1cnN0OyBpKyspIHsKPiArCQl1MzIgdmFyOwo+ICsJCXUzMiB3dmFsOwo+ICsKPiArCQlpZiAo IWJ1cnN0X3JlZ3Nfb2ZmW2ldKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJdmFyID0gYnVyc3Rf cmVnc19vZmZbaV07Cj4gKwkJd3ZhbCA9IG5leHRfdGltaW5nLT5idXJzdF9yZWdzW2ldOwo+ICsK PiArCQlpZiAoZHJhbV90eXBlICE9IERSQU1fVFlQRV9MUEREUjQgJiYKPiArCQkgICAgKHZhciA9 PSBFTUNfTVJXNiAgICAgIHx8IHZhciA9PSBFTUNfTVJXNyB8fAo+ICsJCSAgICAgdmFyID09IEVN Q19NUlc4ICAgICAgfHwgdmFyID09IEVNQ19NUlc5IHx8Cj4gKwkJICAgICB2YXIgPT0gRU1DX01S VzEwICAgICB8fCB2YXIgPT0gRU1DX01SVzExIHx8Cj4gKwkJICAgICB2YXIgPT0gRU1DX01SVzEy ICAgICB8fCB2YXIgPT0gRU1DX01SVzEzIHx8Cj4gKwkJICAgICB2YXIgPT0gRU1DX01SVzE0ICAg ICB8fCB2YXIgPT0gRU1DX01SVzE1IHx8Cj4gKwkJICAgICB2YXIgPT0gRU1DX1RSQUlOSU5HX0NU UkwpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJLyogUGFpbi4uLiBBbmQgc3VmZmVyaW5nLiAq Lwo+ICsJCWlmICh2YXIgPT0gRU1DX0NGRykgewo+ICsJCQl3dmFsICY9IH5FTUNfQ0ZHX0RSQU1f QUNQRDsKPiArCQkJd3ZhbCAmPSB+RU1DX0NGR19EWU5fU0VMRl9SRUY7Cj4gKwkJCWlmIChkcmFt X3R5cGUgPT0gRFJBTV9UWVBFX0xQRERSNCkgewo+ICsJCQkJd3ZhbCAmPSB+RU1DX0NGR19EUkFN X0NMS1NUT1BfU1I7Cj4gKwkJCQl3dmFsICY9IH5FTUNfQ0ZHX0RSQU1fQ0xLU1RPUF9QRDsKPiAr CQkJfQo+ICsJCX0gZWxzZSBpZiAodmFyID09IEVNQ19NUlNfV0FJVF9DTlQgJiYKPiArCQkJICAg ZHJhbV90eXBlID09IERSQU1fVFlQRV9MUEREUjIgJiYKPiArCQkJICAgb3B0X3pjYWxfZW5fY2Mg JiYgIW9wdF9jY19zaG9ydF96Y2FsICYmCj4gKwkJCSAgIG9wdF9zaG9ydF96Y2FsKSB7Cj4gKwkJ CXd2YWwgPSAod3ZhbCAmIH4oRU1DX01SU19XQUlUX0NOVF9TSE9SVF9XQUlUX01BU0sgPDwKPiAr CQkJCQkgRU1DX01SU19XQUlUX0NOVF9TSE9SVF9XQUlUX1NISUZUKSkgfAo+ICsJCQkgICAoKHpx X3dhaXRfbG9uZyAmIEVNQ19NUlNfV0FJVF9DTlRfU0hPUlRfV0FJVF9NQVNLKSA8PAo+ICsJCQkg ICAgRU1DX01SU19XQUlUX0NOVF9TSE9SVF9XQUlUX1NISUZUKTsKPiArCQl9IGVsc2UgaWYgKHZh ciA9PSBFTUNfWkNBTF9XQUlUX0NOVCAmJgo+ICsJCQkgICBkcmFtX3R5cGUgPT0gRFJBTV9UWVBF X0REUjMgJiYgb3B0X3pjYWxfZW5fY2MgJiYKPiArCQkJICAgIW9wdF9jY19zaG9ydF96Y2FsICYm IG9wdF9zaG9ydF96Y2FsKSB7Cj4gKwkJCXd2YWwgPSAod3ZhbCAmIH4oRU1DX1pDQUxfV0FJVF9D TlRfWkNBTF9XQUlUX0NOVF9NQVNLIDw8Cj4gKwkJCQkJIEVNQ19aQ0FMX1dBSVRfQ05UX1pDQUxf V0FJVF9DTlRfU0hJRlQpKQo+ICsJCQkgICAgICAgfCAoKHpxX3dhaXRfbG9uZyAmCj4gKwkJCQkg ICBFTUNfWkNBTF9XQUlUX0NOVF9aQ0FMX1dBSVRfQ05UX01BU0spIDw8Cj4gKwkJCQkgIEVNQ19N UlNfV0FJVF9DTlRfU0hPUlRfV0FJVF9TSElGVCk7Cj4gKwkJfSBlbHNlIGlmICh2YXIgPT0gRU1D X1pDQUxfSU5URVJWQUwgJiYgb3B0X3pjYWxfZW5fY2MpIHsKPiArCQkJd3ZhbCA9IDA7IC8qIEVN Q19aQ0FMX0lOVEVSVkFMIHJlc2V0IHZhbHVlLiAqLwo+ICsJCX0gZWxzZSBpZiAodmFyID09IEVN Q19QTUFDUk9fQVVUT0NBTF9DRkdfQ09NTU9OKSB7Cj4gKwkJCXd2YWwgfD0gRU1DX1BNQUNST19B VVRPQ0FMX0NGR19DT01NT05fRV9DQUxfQllQQVNTX0RWRlM7Cj4gKwkJfSBlbHNlIGlmICh2YXIg PT0gRU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJMKSB7Cj4gKwkJCXd2YWwgJj0KPiArCQkJICAg ICB+KEVNQ19QTUFDUk9fREFUQV9QQURfVFhfQ1RSTF9EQVRBX0RRU1BfVFhfRV9EQ0MgfAo+ICsJ CQkgICAgICAgRU1DX1BNQUNST19EQVRBX1BBRF9UWF9DVFJMX0RBVEFfRFFTTl9UWF9FX0RDQyB8 Cj4gKwkJCSAgICAgICBFTUNfUE1BQ1JPX0RBVEFfUEFEX1RYX0NUUkxfREFUQV9EUV9UWF9FX0RD QyB8Cj4gKwkJCSAgICAgICBFTUNfUE1BQ1JPX0RBVEFfUEFEX1RYX0NUUkxfREFUQV9DTURfVFhf RV9EQ0MpOwo+ICsJCX0gZWxzZSBpZiAodmFyID09IEVNQ19QTUFDUk9fQ01EX1BBRF9UWF9DVFJM KSB7Cj4gKwkJCXd2YWwgfD0gRU1DX1BNQUNST19DTURfUEFEX1RYX0NUUkxfQ01EX0RRX1RYX0RS VkZPUkNFT047Cj4gKwkJCXd2YWwgJj0gfihFTUNfUE1BQ1JPX0NNRF9QQURfVFhfQ1RSTF9DTURf RFFTUF9UWF9FX0RDQyB8Cj4gKwkJCQkgIEVNQ19QTUFDUk9fQ01EX1BBRF9UWF9DVFJMX0NNRF9E UVNOX1RYX0VfRENDIHwKPiArCQkJCSAgRU1DX1BNQUNST19DTURfUEFEX1RYX0NUUkxfQ01EX0RR X1RYX0VfRENDIHwKPiArCQkJCSAgRU1DX1BNQUNST19DTURfUEFEX1RYX0NUUkxfQ01EX0NNRF9U WF9FX0RDQyk7Cj4gKwkJfSBlbHNlIGlmICh2YXIgPT0gRU1DX1BNQUNST19CUklDS19DVFJMX1JG VTEpIHsKPiArCQkJd3ZhbCAmPSAweGY4MDBmODAwOwo+ICsJCX0gZWxzZSBpZiAodmFyID09IEVN Q19QTUFDUk9fQ09NTU9OX1BBRF9UWF9DVFJMKSB7Cj4gKwkJCXd2YWwgJj0gMHhmZmZmZmZmMDsK PiArCQl9Cj4gKwo+ICsJCWVtY193cml0ZWwoZW1jLCB3dmFsLCB2YXIpOwo+ICsJfQo+ICsKPiAr CS8qIFNXIGFkZGl0aW9uOiBkbyBFTUMgcmVmcmVzaCBhZGp1c3RtZW50IGhlcmUuICovCj4gKwlz ZXRfb3Zlcl90ZW1wX3RpbWluZyhlbWMsIG5leHRfdGltaW5nLCBkcmFtX292ZXJfdGVtcF9zdGF0 ZSk7Cj4gKwo+ICsJaWYgKGRyYW1fdHlwZSA9PSBEUkFNX1RZUEVfTFBERFI0KSB7Cj4gKwkJbXJ3 X3JlcSA9ICgyMyA8PCBFTUNfTVJXX01SV19NQV9TSElGVCkgfAo+ICsJCQkgIChuZXh0X3RpbWlu Zy0+cnVuX2Nsb2NrcyAmIEVNQ19NUldfTVJXX09QX01BU0spOwo+ICsJCWVtY193cml0ZWwoZW1j LCBtcndfcmVxLCBFTUNfTVJXKTsKPiArCX0KPiArCj4gKwkvKiBQZXIgY2hhbm5lbCBidXJzdCBy ZWdpc3RlcnMuICovCj4gKwllbWNfY2NfZGJnKFNVQl9TVEVQUywgIldyaXRpbmcgYnVyc3RfcmVn c19wZXJfY2hcbiIpOwo+ICsJZm9yIChpID0gMDsgaSA8IG5leHRfdGltaW5nLT5udW1fYnVyc3Rf cGVyX2NoOyBpKyspIHsKPiArCQlpZiAoIWJ1cnN0X3JlZ3NfcGVyX2NoX29mZltpXSkKPiArCQkJ Y29udGludWU7Cj4gKwo+ICsJCWlmIChkcmFtX3R5cGUgIT0gRFJBTV9UWVBFX0xQRERSNCAmJgo+ ICsJCSAgICAoYnVyc3RfcmVnc19wZXJfY2hfb2ZmW2ldID09IEVNQ19NUlc2IHx8Cj4gKwkJICAg ICBidXJzdF9yZWdzX3Blcl9jaF9vZmZbaV0gPT0gRU1DX01SVzcgfHwKPiArCQkgICAgIGJ1cnN0 X3JlZ3NfcGVyX2NoX29mZltpXSA9PSBFTUNfTVJXOCB8fAo+ICsJCSAgICAgYnVyc3RfcmVnc19w ZXJfY2hfb2ZmW2ldID09IEVNQ19NUlc5IHx8Cj4gKwkJICAgICBidXJzdF9yZWdzX3Blcl9jaF9v ZmZbaV0gPT0gRU1DX01SVzEwIHx8Cj4gKwkJICAgICBidXJzdF9yZWdzX3Blcl9jaF9vZmZbaV0g PT0gRU1DX01SVzExIHx8Cj4gKwkJICAgICBidXJzdF9yZWdzX3Blcl9jaF9vZmZbaV0gPT0gRU1D X01SVzEyIHx8Cj4gKwkJICAgICBidXJzdF9yZWdzX3Blcl9jaF9vZmZbaV0gPT0gRU1DX01SVzEz IHx8Cj4gKwkJICAgICBidXJzdF9yZWdzX3Blcl9jaF9vZmZbaV0gPT0gRU1DX01SVzE0IHx8Cj4g KwkJICAgICBidXJzdF9yZWdzX3Blcl9jaF9vZmZbaV0gPT0gRU1DX01SVzE1KSkKPiArCQkJY29u dGludWU7Cj4gKwo+ICsJCS8qIEZpbHRlciBvdXQgc2Vjb25kIGNoYW5uZWwgaWYgbm90IGluIERV QUxfQ0hBTk5FTCBtb2RlLiAqLwo+ICsJCWlmIChjaGFubmVsX21vZGUgIT0gRFVBTF9DSEFOTkVM ICYmCj4gKwkJICAgIGJ1cnN0X3JlZ3NfcGVyX2NoX3R5cGVbaV0gPj0gUkVHX0VNQzEpCj4gKwkJ CWNvbnRpbnVlOwo+ICsKPiArCQllbWNfY2NfZGJnKFJFR19MSVNUUywgIigldSkgMHglMDh4ID0+ IDB4JTA4eFxuIiwKPiArCQkJICAgaSwgbmV4dF90aW1pbmctPmJ1cnN0X3JlZ19wZXJfY2hbaV0s Cj4gKwkJCSAgIGJ1cnN0X3JlZ3NfcGVyX2NoX29mZltpXSk7Cj4gKwkJZW1jX3dyaXRlbF9wZXJf Y2goZW1jLCBuZXh0X3RpbWluZy0+YnVyc3RfcmVnX3Blcl9jaFtpXSwKPiArCQkJCSAgYnVyc3Rf cmVnc19wZXJfY2hfdHlwZVtpXSwKPiArCQkJCSAgYnVyc3RfcmVnc19wZXJfY2hfb2ZmW2ldKTsK PiArCX0KPiArCj4gKwkvKiBWcmVmIHJlZ3MuICovCj4gKwllbWNfY2NfZGJnKFNVQl9TVEVQUywg IldyaXRpbmcgdnJlZl9yZWdzXG4iKTsKPiArCWZvciAoaSA9IDA7IGkgPCBuZXh0X3RpbWluZy0+ dnJlZl9udW07IGkrKykgewo+ICsJCWlmICghdnJlZl9yZWdzX3Blcl9jaF9vZmZbaV0pCj4gKwkJ CWNvbnRpbnVlOwo+ICsKPiArCQlpZiAoY2hhbm5lbF9tb2RlICE9IERVQUxfQ0hBTk5FTCAmJgo+ ICsJCQl2cmVmX3JlZ3NfcGVyX2NoX3R5cGVbaV0gPj0gUkVHX0VNQzEpCj4gKwkJCWNvbnRpbnVl Owo+ICsKPiArCQllbWNfY2NfZGJnKFJFR19MSVNUUywgIigldSkgMHglMDh4ID0+IDB4JTA4eFxu IiwKPiArCQkJICAgaSwgbmV4dF90aW1pbmctPnZyZWZfcGVyY2hfcmVnc1tpXSwKPiArCQkJICAg dnJlZl9yZWdzX3Blcl9jaF9vZmZbaV0pOwo+ICsJCWVtY193cml0ZWxfcGVyX2NoKGVtYywgbmV4 dF90aW1pbmctPnZyZWZfcGVyY2hfcmVnc1tpXSwKPiArCQkJCSAgdnJlZl9yZWdzX3Blcl9jaF90 eXBlW2ldLAo+ICsJCQkJICB2cmVmX3JlZ3NfcGVyX2NoX29mZltpXSk7Cj4gKwl9Cj4gKwo+ICsJ LyogVHJpbW1lcnMuICovCj4gKwllbWNfY2NfZGJnKFNVQl9TVEVQUywgIldyaXRpbmcgdHJpbV9y ZWdzXG4iKTsKPiArCWZvciAoaSA9IDA7IGkgPCBuZXh0X3RpbWluZy0+bnVtX3RyaW07IGkrKykg ewo+ICsJCXU2NCB0cmltX3JlZzsKPiArCj4gKwkJaWYgKCF0cmltX3JlZ3Nfb2ZmW2ldKQo+ICsJ CQljb250aW51ZTsKPiArCj4gKwkJdHJpbV9yZWcgPSB0cmltX3JlZ3Nfb2ZmW2ldOwo+ICsJCWlm IChjb21wZW5zYXRlX3RyaW1tZXJfYXBwbGljYWJsZSAmJgo+ICsJCSAgICAodHJpbV9yZWcgPT0g RU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzBfMCB8fAo+ICsJCSAgICAgdHJpbV9yZWcg PT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzBfMSB8fAo+ICsJCSAgICAgdHJpbV9y ZWcgPT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzBfMiB8fAo+ICsJCSAgICAgdHJp bV9yZWcgPT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzBfMyB8fAo+ICsJCSAgICAg dHJpbV9yZWcgPT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzFfMCB8fAo+ICsJCSAg ICAgdHJpbV9yZWcgPT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzFfMSB8fAo+ICsJ CSAgICAgdHJpbV9yZWcgPT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzFfMiB8fAo+ ICsJCSAgICAgdHJpbV9yZWcgPT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzFfMyB8 fAo+ICsJCSAgICAgdHJpbV9yZWcgPT0gRU1DX0RBVEFfQlJMU0hGVF8wIHx8Cj4gKwkJICAgICB0 cmltX3JlZyA9PSBFTUNfREFUQV9CUkxTSEZUXzEpKSB7Cj4gKwkJCXUzMiByZWcgPSB0ZWdyYTIx MF9hcHBseV9wZXJpb2RpY19jb21wZW5zYXRpb25fdHJpbW1lcigKPiArCQkJCSAgbmV4dF90aW1p bmcsIHRyaW1fcmVnKTsKPiArCQkJZW1jX2NjX2RiZyhSRUdfTElTVFMsICIoJXUpIDB4JTA4eCA9 PiAweCUwOHhcbiIsIGksIHJlZywKPiArCQkJCSAgIHRyaW1fcmVnc19vZmZbaV0pOwo+ICsJCQll bWNfY2NfZGJnKEVNQV9XUklURVMsICIweCUwOHggPD0gMHglMDh4XG4iLAo+ICsJCQkJICAgKHUz MikodTY0KXRyaW1fcmVnc19vZmZbaV0sIHJlZyk7Cj4gKwkJCWVtY193cml0ZWwoZW1jLCByZWcs IHRyaW1fcmVnc19vZmZbaV0pOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWVtY19jY19kYmcoUkVHX0xJ U1RTLCAiKCV1KSAweCUwOHggPT4gMHglMDh4XG4iLAo+ICsJCQkJICAgaSwgbmV4dF90aW1pbmct PnRyaW1fcmVnc1tpXSwKPiArCQkJCSAgIHRyaW1fcmVnc19vZmZbaV0pOwo+ICsJCQllbWNfd3Jp dGVsKGVtYywgbmV4dF90aW1pbmctPnRyaW1fcmVnc1tpXSwKPiArCQkJCSAgIHRyaW1fcmVnc19v ZmZbaV0pOwo+ICsJCX0KPiArCX0KPiArCj4gKwkvKiBQZXIgY2hhbm5lbCB0cmltbWVycy4gKi8K PiArCWVtY19jY19kYmcoU1VCX1NURVBTLCAiV3JpdGluZyB0cmltX3JlZ3NfcGVyX2NoXG4iKTsK PiArCWZvciAoaSA9IDA7IGkgPCBuZXh0X3RpbWluZy0+bnVtX3RyaW1fcGVyX2NoOyBpKyspIHsK PiArCQl1MzIgdHJpbV9yZWc7Cj4gKwo+ICsJCWlmICghdHJpbV9yZWdzX3Blcl9jaF9vZmZbaV0p Cj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlpZiAoY2hhbm5lbF9tb2RlICE9IERVQUxfQ0hBTk5F TCAmJgo+ICsJCQl0cmltX3JlZ3NfcGVyX2NoX3R5cGVbaV0gPj0gUkVHX0VNQzEpCj4gKwkJCWNv bnRpbnVlOwo+ICsKPiArCQl0cmltX3JlZyA9IHRyaW1fcmVnc19wZXJfY2hfb2ZmW2ldOwo+ICsJ CWlmIChjb21wZW5zYXRlX3RyaW1tZXJfYXBwbGljYWJsZSAmJgo+ICsJCSAgICAodHJpbV9yZWcg PT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzBfMCB8fAo+ICsJCSAgICAgdHJpbV9y ZWcgPT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzBfMSB8fAo+ICsJCSAgICAgdHJp bV9yZWcgPT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzBfMiB8fAo+ICsJCSAgICAg dHJpbV9yZWcgPT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzBfMyB8fAo+ICsJCSAg ICAgdHJpbV9yZWcgPT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzFfMCB8fAo+ICsJ CSAgICAgdHJpbV9yZWcgPT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzFfMSB8fAo+ ICsJCSAgICAgdHJpbV9yZWcgPT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzFfMiB8 fAo+ICsJCSAgICAgdHJpbV9yZWcgPT0gRU1DX1BNQUNST19PQl9ERExMX0xPTkdfRFFfUkFOSzFf MyB8fAo+ICsJCSAgICAgdHJpbV9yZWcgPT0gRU1DX0RBVEFfQlJMU0hGVF8wIHx8Cj4gKwkJICAg ICB0cmltX3JlZyA9PSBFTUNfREFUQV9CUkxTSEZUXzEpKSB7Cj4gKwkJCXUzMiByZWcgPQo+ICsJ CQkJdGVncmEyMTBfYXBwbHlfcGVyaW9kaWNfY29tcGVuc2F0aW9uX3RyaW1tZXIoCj4gKwkJCQkJ CW5leHRfdGltaW5nLCB0cmltX3JlZyk7Cj4gKwkJCWVtY19jY19kYmcoUkVHX0xJU1RTLCAiKCV1 KSAweCUwOHggPT4gMHglMDh4XG4iLAo+ICsJCQkJICAgaSwgcmVnLCB0cmltX3JlZ3NfcGVyX2No X29mZltpXSk7Cj4gKwkJCWVtY19jY19kYmcoRU1BX1dSSVRFUywgIjB4JTA4eCA8PSAweCUwOHhc biIsCj4gKwkJCQkgICB0cmltX3JlZ3NfcGVyX2NoX29mZltpXSwgcmVnKTsKPiArCQkJZW1jX3dy aXRlbF9wZXJfY2goZW1jLCByZWcsIHRyaW1fcmVnc19wZXJfY2hfdHlwZVtpXSwKPiArCQkJCQkg IHRyaW1fcmVnc19wZXJfY2hfb2ZmW2ldKTsKPiArCQl9IGVsc2Ugewo+ICsJCQllbWNfY2NfZGJn KFJFR19MSVNUUywgIigldSkgMHglMDh4ID0+IDB4JTA4eFxuIiwKPiArCQkJCSAgIGksIG5leHRf dGltaW5nLT50cmltX3BlcmNoX3JlZ3NbaV0sCj4gKwkJCQkgICB0cmltX3JlZ3NfcGVyX2NoX29m ZltpXSk7Cj4gKwkJCWVtY193cml0ZWxfcGVyX2NoKGVtYywgbmV4dF90aW1pbmctPnRyaW1fcGVy Y2hfcmVnc1tpXSwKPiArCQkJCQkgIHRyaW1fcmVnc19wZXJfY2hfdHlwZVtpXSwKPiArCQkJCQkg IHRyaW1fcmVnc19wZXJfY2hfb2ZmW2ldKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZW1jX2NjX2Ri ZyhTVUJfU1RFUFMsICJXcml0aW5nIGJ1cnN0X21jX3JlZ3NcbiIpOwo+ICsJZm9yIChpID0gMDsg aSA8IG5leHRfdGltaW5nLT5udW1fbWNfcmVnczsgaSsrKSB7Cj4gKwkJZW1jX2NjX2RiZyhSRUdf TElTVFMsICIoJXUpIDB4JTA4eCA9PiAweCUwOHhcbiIsCj4gKwkJCSAgIGksIG5leHRfdGltaW5n LT5idXJzdF9tY19yZWdzW2ldLAo+ICsJCQkgICBidXJzdF9tY19yZWdzX29mZltpXSk7Cj4gKwkJ bWNfd3JpdGVsKGVtYy0+bWMsIG5leHRfdGltaW5nLT5idXJzdF9tY19yZWdzW2ldLAo+ICsJCQkg IGJ1cnN0X21jX3JlZ3Nfb2ZmW2ldKTsKPiArCX0KPiArCj4gKwkvKiBSZWdpc3RlcnMgdG8gYmUg cHJvZ3JhbW1lZCBvbiB0aGUgZmFzdGVyIGNsb2NrLiAqLwo+ICsJaWYgKG5leHRfdGltaW5nLT5y YXRlIDwgbGFzdF90aW1pbmctPnJhdGUpIHsKPiArCQllbWNfY2NfZGJnKFNVQl9TVEVQUywgIldy aXRpbmcgbGFfc2NhbGVfcmVnc1xuIik7Cj4gKwkJZm9yIChpID0gMDsgaSA8IG5leHRfdGltaW5n LT5udW1fdXBfZG93bjsgaSsrKSB7Cj4gKwkJCWVtY19jY19kYmcoUkVHX0xJU1RTLCAiKCV1KSAw eCUwOHggPT4gMHglMDh4XG4iLAo+ICsJCQkJICAgaSwgbmV4dF90aW1pbmctPmxhX3NjYWxlX3Jl Z3NbaV0sCj4gKwkJCQkgICBsYV9zY2FsZV9yZWdzX29mZltpXSk7Cj4gKwkJCW1jX3dyaXRlbChl bWMtPm1jLCBuZXh0X3RpbWluZy0+bGFfc2NhbGVfcmVnc1tpXSwKPiArCQkJCSAgbGFfc2NhbGVf cmVnc19vZmZbaV0pOwo+ICsJCX0KPiArCX0KPiArCj4gKwkvKiBGbHVzaCBhbGwgdGhlIGJ1cnN0 IHJlZ2lzdGVyIHdyaXRlcy4gKi8KPiArCXdtYigpOwoKV29uJ3QgaXQgYmUgYSBiaXQgbW9yZSBv cHRpbWFsIHRvIGp1c3QgcmVhZCBiYWNrIHRoZSBsYXN0bHkgd3JpdHRlbiByZWdpc3RlciByYXRo ZXIgdGhhbiB0byBmbHVzaCBhbGwgb2YgbWVtb3J5IHdyaXRlcz8gCgotLSAKRG1pdHJ5CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs Cg==