From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liviu Dudau Subject: Re: [PATCH v3 2/3] drm/arm: Add support for Mali Display Processors Date: Fri, 10 Jun 2016 09:52:59 +0100 Message-ID: <20160610085259.GB1165@e106497-lin.cambridge.arm.com> References: <1465489099-25628-1-git-send-email-Liviu.Dudau@arm.com> <1465489099-25628-3-git-send-email-Liviu.Dudau@arm.com> <20160609185629.GU3363@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20160609185629.GU3363@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: David Airlie , Rob Herring , Brian Starkey , Emil Velikov , devicetree , DRI devel , LKML , David Brown , LAKML List-Id: devicetree@vger.kernel.org T24gVGh1LCBKdW4gMDksIDIwMTYgYXQgMDg6NTY6MjlQTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBUaHUsIEp1biAwOSwgMjAxNiBhdCAwNToxODoxOFBNICswMTAwLCBMaXZpdSBE dWRhdSB3cm90ZToKPiA+IEFkZCBzdXBwb3J0IGZvciB0aGUgbmV3IGZhbWlseSBvZiBEaXNwbGF5 IFByb2Nlc3NvcnMgZnJvbSBBUk0gTHRkLgo+ID4gVGhpcyBjb21taXQgYWRkcyBiYXNpYyBzdXBw b3J0IGZvciBNYWxpIERQNTAwLCBEUDU1MCBhbmQgRFA2NTAKPiA+IHBhcnRzLCB3aXRoIG9ubHkg dGhlIGRpc3BsYXkgZW5naW5lIGJlaW5nIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50Lgo+ID4gCj4g PiBDYzogRGF2aWQgQnJvd24gPERhdmlkLkJyb3duQGFybS5jb20+Cj4gPiBDYzogQnJpYW4gU3Rh cmtleSA8QnJpYW4uU3RhcmtleUBhcm0uY29tPgo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBMaXZp dSBEdWRhdSA8TGl2aXUuRHVkYXVAYXJtLmNvbT4KPiAKPiBCdW5jaCBvZiBkcml2ZS1ieSBjb21t ZW50cyBiZWxvdy4gTG9va3MgcmF0aGVyIHByZXR0eSBvdmVyYWxsIFxvLwoKVGhhbmtzIGZvciBy ZXZpZXdpbmcgdGhpcyEhCgo+IAo+IENoZWVycywgRGFuaWVsCj4gPiAtLS0KPiA+ICBkcml2ZXJz L2dwdS9kcm0vYXJtL0tjb25maWcgICAgICAgICB8ICAxNiArCj4gPiAgZHJpdmVycy9ncHUvZHJt L2FybS9NYWtlZmlsZSAgICAgICAgfCAgIDIgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFs aWRwX2NydGMuYyAgIHwgMjM5ICsrKysrKysrKysrKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0vYXJt L21hbGlkcF9kcnYuYyAgICB8IDUwMCArKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIGRy aXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Rydi5oICAgIHwgIDQ4ICsrKwo+ID4gIGRyaXZlcnMv Z3B1L2RybS9hcm0vbWFsaWRwX2h3LmMgICAgIHwgNjkxICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmggICAgIHwg MjQxICsrKysrKysrKysrKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9wbGFuZXMu YyB8IDI3MSArKysrKysrKysrKysrKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3Jl Z3MuaCAgIHwgMTcyICsrKysrKysrKwo+ID4gIDkgZmlsZXMgY2hhbmdlZCwgMjE4MCBpbnNlcnRp b25zKCspCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRw X2NydGMuYwo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlk cF9kcnYuYwo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlk cF9kcnYuaAo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlk cF9ody5jCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRw X2h3LmgKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBf cGxhbmVzLmMKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxp ZHBfcmVncy5oCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL0tjb25m aWcgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL0tjb25maWcKPiA+IGluZGV4IGVhZWQ0NTQuLjFiMjkw NjUgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYXJtL0tjb25maWcKPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9hcm0vS2NvbmZpZwo+ID4gQEAgLTI1LDMgKzI1LDE5IEBAIGNvbmZp ZyBEUk1fSERMQ0RfU0hPV19VTkRFUlJVTgo+ID4gIAkgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBz aG93IGluIHJlZCBjb2xvdXIgdGhlIHBpeGVscyB0aGF0IHRoZQo+ID4gIAkgIEhETENEIGRldmlj ZSBkaWQgbm90IGZldGNoIGZyb20gZnJhbWVidWZmZXIgZHVlIHRvIHVuZGVycnVuCj4gPiAgCSAg Y29uZGl0aW9ucy4KPiA+ICsKPiA+ICtjb25maWcgRFJNX01BTElfRElTUExBWQo+ID4gKwl0cmlz dGF0ZSAiQVJNIE1hbGkgRGlzcGxheSBQcm9jZXNzb3IiCj4gPiArCWRlcGVuZHMgb24gRFJNICYm IE9GICYmIChBUk0gfHwgQVJNNjQpCj4gPiArCWRlcGVuZHMgb24gQ09NTU9OX0NMSwo+ID4gKwlz ZWxlY3QgRFJNX0FSTQo+ID4gKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKPiA+ICsJc2VsZWN0IERS TV9LTVNfQ01BX0hFTFBFUgo+ID4gKwlzZWxlY3QgRFJNX0dFTV9DTUFfSEVMUEVSCj4gPiArCXNl bGVjdCBWSURFT01PREVfSEVMUEVSUwo+ID4gKwloZWxwCj4gPiArCSAgQ2hvb3NlIHRoaXMgb3B0 aW9uIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgdGhlIEFSTSBNYWxpIERpc3BsYXkKPiA+ICsJICBQ cm9jZXNzb3IgZHJpdmVyLiBJdCBzdXBwb3J0cyB0aGUgRFA1MDAsIERQNTUwIGFuZCBEUDY1MCB2 YXJpYW50cwo+ID4gKwkgIG9mIHRoZSBoYXJkd2FyZS4KPiA+ICsKPiA+ICsJICBJZiBjb21waWxl ZCBhcyBhIG1vZHVsZSBpdCB3aWxsIGJlIGNhbGxlZCBtYWxpLWRwLgo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL01ha2Vm aWxlCj4gPiBpbmRleCA4OWRjYjdiLi5iYjhiMTU4IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2FybS9NYWtlZmlsZQo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9NYWtlZmls ZQo+ID4gQEAgLTEsMiArMSw0IEBACj4gPiAgaGRsY2QteSA6PSBoZGxjZF9kcnYubyBoZGxjZF9j cnRjLm8KPiA+ICBvYmotJChDT05GSUdfRFJNX0hETENEKQkrPSBoZGxjZC5vCj4gPiArbWFsaS1k cC15IDo9IG1hbGlkcF9kcnYubyBtYWxpZHBfaHcubyBtYWxpZHBfcGxhbmVzLm8gbWFsaWRwX2Ny dGMubwo+ID4gK29iai0kKENPTkZJR19EUk1fTUFMSV9ESVNQTEFZKQkrPSBtYWxpLWRwLm8KPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9jcnRjLmMgYi9kcml2ZXJz L2dwdS9kcm0vYXJtL21hbGlkcF9jcnRjLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBp bmRleCAwMDAwMDAwLi4yMWI3MWViCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vYXJtL21hbGlkcF9jcnRjLmMKPiA+IEBAIC0wLDAgKzEsMjM5IEBACj4gPiArLyoK PiA+ICsgKiAoQykgQ09QWVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCj4gPiArICogQXV0aG9yOiBMaXZpdSBEdWRhdSA8TGl2aXUuRHVkYXVAYXJtLmNvbT4KPiA+ ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBwcm92aWRl ZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQo+ID4gKyAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKPiA+ ICsgKiBGb3VuZGF0aW9uLCBhbmQgYW55IHVzZSBieSB5b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1 YmplY3QgdG8gdGhlIHRlcm1zCj4gPiArICogb2Ygc3VjaCBHTlUgbGljZW5jZS4KPiA+ICsgKgo+ ID4gKyAqIEFSTSBNYWxpIERQNTAwL0RQNTUwL0RQNjUwIGRyaXZlciAoY3J0YyBvcGVyYXRpb25z KQo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ID4gKyNpbmNsdWRl IDxkcm0vZHJtX2F0b21pYy5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIu aD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1f Y3J0Y19oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gPiArI2luY2x1ZGUg PHZpZGVvL3ZpZGVvbW9kZS5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlICJtYWxpZHBfZHJ2LmgiCj4g PiArI2luY2x1ZGUgIm1hbGlkcF9ody5oIgo+ID4gKwo+ID4gK3N0YXRpYyBib29sIG1hbGlkcF9j cnRjX21vZGVfZml4dXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gKwkJCQkgICBjb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiA+ICsJCQkJICAgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKmFkanVzdGVkX21vZGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAq bWFsaWRwID0gY3J0Y190b19tYWxpZHBfZGV2aWNlKGNydGMpOwo+ID4gKwlzdHJ1Y3QgbWFsaWRw X2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICog Y2hlY2sgdGhhdCB0aGUgaGFyZHdhcmUgY2FuIGRyaXZlIHRoZSByZXF1aXJlZCBjbG9jayByYXRl LAo+ID4gKwkgKiBidXQgc2tpcCB0aGUgY2hlY2sgaWYgdGhlIGNsb2NrIGlzIG1lYW50IHRvIGJl IGRpc2FibGVkIChyZXFfcmF0ZSA9IDApCj4gPiArCSAqLwo+ID4gKwlsb25nIHJhdGUsIHJlcV9y YXRlID0gbW9kZS0+Y3J0Y19jbG9jayAqIDEwMDA7Cj4gPiArCj4gPiArCWlmIChyZXFfcmF0ZSkg ewo+ID4gKwkJcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGh3ZGV2LT5tY2xrLCByZXFfcmF0ZSk7Cj4g PiArCQlpZiAocmF0ZSA8IHJlcV9yYXRlKSB7Cj4gPiArCQkJRFJNX0RFQlVHX0RSSVZFUigibWNs ayBjbG9jayB1bmFibGUgdG8gcmVhY2ggJWQga0h6XG4iLAo+ID4gKwkJCQkJIG1vZGUtPmNydGNf Y2xvY2spOwo+ID4gKwkJCXJldHVybiBmYWxzZTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCXJhdGUg PSBjbGtfcm91bmRfcmF0ZShod2Rldi0+cHhsY2xrLCByZXFfcmF0ZSk7Cj4gPiArCQlpZiAocmF0 ZSAhPSByZXFfcmF0ZSkgewo+ID4gKwkJCURSTV9ERUJVR19EUklWRVIoInB4bGNsayBkb2Vzbid0 IHN1cHBvcnQgJWxkIEh6XG4iLAo+ID4gKwkJCQkJIHJlcV9yYXRlKTsKPiA+ICsJCQlyZXR1cm4g ZmFsc2U7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIHRydWU7Cj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG1hbGlkcF9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gY3J0Y190b19t YWxpZHBfZGV2aWNlKGNydGMpOwo+ID4gKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYg PSBtYWxpZHAtPmRldjsKPiA+ICsJc3RydWN0IHZpZGVvbW9kZSB2bTsKPiA+ICsKPiA+ICsJZHJt X2Rpc3BsYXlfbW9kZV90b192aWRlb21vZGUoJmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlLCAm dm0pOwo+ID4gKwo+ID4gKwljbGtfcHJlcGFyZV9lbmFibGUoaHdkZXYtPnB4bGNsayk7Cj4gCj4g Tm90ZSB0aGF0IG5vdGhpbmcgZ3VhcmFudGVlcyB0aGF0IC0+ZGlzYWJsZSBpcyBjYWxsZWQgYmVm b3JlIC0+ZW5hYmxlIGluCj4gYXRvbWljIGhlbHBlcnMuCgpJJ20gc2VlaW5nIC0+ZGlzYWJsZSBi ZWluZyBjYWxsZWQgYXQgSFBEIGV2ZW50IHRpbWUsIHdoaWNoIGlzIHNvb24gYWZ0ZXIgLT5wcm9i ZS4KCj4gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIGVuYWJsaW5nIGEgY3J0YyB3aGVuIGl0IGlzIGZ1 bGx5Cj4gZGlzYWJsZWQuIEp1c3QgbWVudGlvbmluZyBpbiBjYXNlIC0+ZW50ZXJfY29uZmlnX21v ZGUoKSBpcyBzb21ldGhpbmcgdGhhdAo+IG11c3QgYmUgY2FsbGVkIHN5bW1ldHJpY2FsbHkgd2l0 aCAtPmxlYXZlX2NvbmZpZ19tb2RlKCkuCgotPmxlYXZlX2NvbmZpZ19tb2RlKCkgc2hvdWxkIGJl IHRoZSBkZWZhdWx0IG1vZGUgd2hlbiBIVyBpcyBkaXNhYmxlZCBvciBub3QgYWN0aXZlLAphbmQg dGhlIHJlc2V0IGRlZmF1bHQgdmFsdWUuIFJlZ2FyZGxlc3Mgb2YgdGhhdCwgLT5lbnRlcl9jb25m aWdfbW9kZSgpIGNhbiBiZQpjYWxsZWQgYXQgYW55IHRpbWUsIGV2ZW4gaWYgSFcgaXMgYWxyZWFk eSBpbiBjb25maWcgbW9kZS4KCj4gPiArCj4gPiArCS8qIG1jbGsgbmVlZHMgdG8gYmUgc2V0IHRv IHRoZSBzYW1lIG9yIGhpZ2hlciByYXRlIHRoYW4gcHhsY2xrICovCj4gPiArCWNsa19zZXRfcmF0 ZShod2Rldi0+bWNsaywgY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUuY3J0Y19jbG9jayAqIDEw MDApOwo+ID4gKwljbGtfc2V0X3JhdGUoaHdkZXYtPnB4bGNsaywgY3J0Yy0+c3RhdGUtPmFkanVz dGVkX21vZGUuY3J0Y19jbG9jayAqIDEwMDApOwo+ID4gKwo+ID4gKwlod2Rldi0+bW9kZXNldCho d2RldiwgJnZtKTsKPiA+ICsJaHdkZXYtPmxlYXZlX2NvbmZpZ19tb2RlKGh3ZGV2KTsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbWFsaWRwX2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gY3J0Y190 b19tYWxpZHBfZGV2aWNlKGNydGMpOwo+ID4gKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdk ZXYgPSBtYWxpZHAtPmRldjsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogYXZvaWQgZGlzYWJsaW5n IGFscmVhZHkgZGlzYWJsZWQgY2xvY2tzIGFuZCBoYXJkd2FyZQo+ID4gKwkgKiAoYXMgaXMgdGhl IGNhc2UgYXQgZGV2aWNlIHByb2JlIHRpbWUpCj4gPiArCSAqLwo+ID4gKwlpZiAoY3J0Yy0+c3Rh dGUtPmFjdGl2ZSkgewo+IAo+IENvbW1lbnQgZG9lc24ndCBtYXRjaCBjb2RlLiBDaGVja2luZyBj cnRjLT5zdGF0ZS0+YWN0aXZlIGluIC0+ZGlzYWJsZQo+IGxvb2tzIGF0IHRoZSBfbmV3XyBzdGF0 ZSwgbm90IGF0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjcnRjLiBBdG9taWMKPiBoZWxwZXJz IGFscmVhZHkgZ3VhcmFudGVlIHlvdSB0aGF0IC0+ZGlzYWJsZSBpcyBvbmx5IGNhbGxlZCB3aGVu IHRoZSBDUlRDCj4gaXMgc3RpbGwgb24uIAoKRXhjZXB0IGF0IHByb2JlKiB0aW1lLCB3aGVuIHRo ZSBmcmFtZXdvcmsgY2FsbHMgLT5kaXNhYmxlIGJlZm9yZSBtb2Rlc2V0IHRvCm1ha2Ugc3VyZSB0 aGF0IHRoZSBoYXJkd2FyZSBpcyBpbiBhIGtub3duIHN0YXRlLiBBbmQgSSdtIG5vdCBzdXJlIGhv dyB0bwpjaGVjayB0aGUgX2N1cnJlbnRfIHN0YXRlIG9mIHRoZSBjcnRjIG90aGVyIHRoYW4gYnkg dXNpbmcgY3J0Yy0+c3RhdGUuCgoqIGFjdHVhbGx5LCBpdCBpcyBIUEQgZXZlbnQgYWZ0ZXIgcHJv YmUuCgo+IEkgdGhpbmsgeW91IGNhbiByZW1vdmUgdGhpcyBvbmUsIGJ1dCBzZWUgbXkgY29tbWVu dCBhYm92ZQo+IGFib3V0IGVudGVyL2xlYXZlX2NvbmZpZ19tb2RlLgo+IAo+ID4gKwkJaHdkZXYt PmVudGVyX2NvbmZpZ19tb2RlKGh3ZGV2KTsKPiA+ICsJCWNsa19kaXNhYmxlX3VucHJlcGFyZSho d2Rldi0+cHhsY2xrKTsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IG1hbGlk cF9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiArCQkJCSAgICBz dHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IG1hbGlkcF9k cm0gKm1hbGlkcCA9IGNydGNfdG9fbWFsaWRwX2RldmljZShjcnRjKTsKPiA+ICsJc3RydWN0IG1h bGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gPiArCXN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lOwo+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwc3RhdGU7Cj4gPiArCXUz MiByb3RfbWVtX2ZyZWUsIHJvdF9tZW1fdXNhYmxlOwo+ID4gKwlpbnQgcm90YXRlZF9wbGFuZXMg PSAwOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBjaGVjayBpZiB0aGVyZSBpcyBlbm91Z2ggcm90 YXRpb24gbWVtb3J5IGF2YWlsYWJsZSBmb3IgcGxhbmVzCj4gPiArCSAqIHRoYXQgbmVlZCA5MMKw IGFuZCAyNzDCsCByb3RhdGlvbi4gRWFjaCBwbGFuZSBoYXMgc2V0IGl0cyByZXF1aXJlZAo+ID4g KwkgKiBtZW1vcnkgc2l6ZSBpbiB0aGUgLT5wbGFuZV9jaGVjaygpIGNhbGxiYWNrLCBoZXJlIHdl IG9ubHkgbWFrZQo+ID4gKwkgKiBzdXJlIHRoYXQgdGhlIHN1bXMgYXJlIGxlc3MgdGhhdCB0aGUg dG90YWwgdXNhYmxlIG1lbW9yeS4KPiA+ICsJICoKPiA+ICsJICogVGhlIHJvdGF0aW9uIG1lbW9y eSBhbGxvY2F0aW9uIGFsZ29yaXRobSAoZm9yIGVhY2ggcGxhbmUpOgo+ID4gKwkgKiAgYS4gSWYg bm8gbW9yZSByb3RhdGVkIHBsYW5lcyBleGlzdCwgYWxsIHJlbWFpbmluZyByb3RhdGUKPiA+ICsJ ICogICAgIG1lbW9yeSBpbiB0aGUgYmFuayBpcyBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUgcGxh bmUuCj4gPiArCSAqICBiLiBJZiBvdGhlciByb3RhdGVkIHBsYW5lcyBleGlzdCwgYW5kIHBsYW5l J3MgbGF5ZXIgSUQgaXMKPiA+ICsJICogICAgIERFX1ZJREVPMSwgaXQgY2FuIHVzZSBhbGwgdGhl IG1lbW9yeSBmcm9tIGZpcnN0IGJhbmsgaWYKPiA+ICsJICogICAgIHNlY29uZGFyeSByb3RhdGlv biBtZW1vcnkgYmFuayBpcyBhdmFpbGFibGUsIG90aGVyd2lzZSBpdCBjYW4KPiA+ICsJICogICAg IHVzZSB1cCB0byBoYWxmIHRoZSBiYW5rJ3MgbWVtb3J5Lgo+ID4gKwkgKiAgYy4gSWYgb3RoZXIg cm90YXRlZCBwbGFuZXMgZXhpc3QsIGFuZCBwbGFuZSdzIGxheWVyIElEIGlzIG5vdAo+ID4gKwkg KiAgICAgREVfVklERU8xLCBpdCBjYW4gdXNlIGhhbGYgb2YgdGhlIGF2YWlsYWJsZSBtZW1vcnkK PiA+ICsJICoKPiA+ICsJICogTm90ZTogdGhpcyBhbGdvcml0aG0gYXNzdW1lcyB0aGF0IHRoZSBv cmRlciBpbiB3aGljaCB0aGUgcGxhbmVzIGFyZQo+ID4gKwkgKiBjaGVja2VkIGFsd2F5cyBoYXMg REVfVklERU8xIHBsYW5lIGZpcnN0IGluIHRoZSBsaXN0IGlmIGl0IGlzCj4gPiArCSAqIHJvdGF0 ZWQuIEJlY2F1c2UgdGhhdCBpcyBob3cgd2UgY3JlYXRlIHRoZSBwbGFuZXMgaW4gdGhlIGZpcnN0 Cj4gPiArCSAqIHBsYWNlLCB1bmRlciBjdXJyZW50IERSTSB2ZXJzaW9uIHRoaW5ncyB3b3JrLCBi dXQgaWYgZXZlciB0aGUgb3JkZXIKPiA+ICsJICogaW4gd2hpY2ggZHJtX2F0b21pY19jcnRjX3N0 YXRlX2Zvcl9lYWNoX3BsYW5lKCkgaXRlcmF0ZXMgb3ZlciBwbGFuZXMKPiA+ICsJICogY2hhbmdl cywgd2UgbmVlZCB0byBwcmUtc29ydCB0aGUgcGxhbmVzIGJlZm9yZSB2YWxpZGF0aW9uLgo+ID4g KwkgKi8KPiA+ICsKPiA+ICsJLyogZmlyc3QgY291bnQgdGhlIG51bWJlciBvZiByb3RhdGVkIHBs YW5lcyAqLwo+ID4gKwlkcm1fYXRvbWljX2NydGNfc3RhdGVfZm9yX2VhY2hfcGxhbmUocGxhbmUs IHN0YXRlKSB7Cj4gPiArCQlwc3RhdGUgPSBkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZShzdGF0 ZS0+c3RhdGUsIHBsYW5lKTsKPiA+ICsJCWlmIChwc3RhdGUtPnJvdGF0aW9uICYgTUFMSURQX1JP VEFURURfTUFTSykKPiA+ICsJCQlyb3RhdGVkX3BsYW5lcysrOwo+ID4gKwl9Cj4gPiArCj4gPiAr CXJvdF9tZW1fZnJlZSA9IGh3ZGV2LT5yb3RhdGlvbl9tZW1vcnlbMF07Cj4gPiArCS8qCj4gPiAr CSAqIGlmIHdlIGhhdmUgbW9yZSB0aGFuIDEgcGxhbmUgdXNpbmcgcm90YXRpb24gbWVtb3J5LCB1 c2UgdGhlIHNlY29uZAo+ID4gKwkgKiBibG9jayBvZiByb3RhdGlvbiBtZW1vcnkgYXMgd2VsbAo+ ID4gKwkgKi8KPiA+ICsJaWYgKHJvdGF0ZWRfcGxhbmVzID4gMSkKPiA+ICsJCXJvdF9tZW1fZnJl ZSArPSBod2Rldi0+cm90YXRpb25fbWVtb3J5WzFdOwo+ID4gKwo+ID4gKwkvKiBub3cgdmFsaWRh dGUgdGhlIHJvdGF0aW9uIG1lbW9yeSByZXF1aXJlbWVudHMgKi8KPiA+ICsJZHJtX2F0b21pY19j cnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBzdGF0ZSkgewo+ID4gKwkJc3RydWN0IG1h bGlkcF9wbGFuZSAqbXAgPSB0b19tYWxpZHBfcGxhbmUocGxhbmUpOwo+ID4gKwo+ID4gKwkJcHN0 YXRlID0gZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RhdGUtPnN0YXRlLCBwbGFuZSk7Cj4g PiArCQlpZiAocHN0YXRlLT5yb3RhdGlvbiAmIE1BTElEUF9ST1RBVEVEX01BU0spIHsKPiA+ICsJ CQkvKiBwcm9jZXNzIGN1cnJlbnQgcGxhbmUgKi8KPiA+ICsJCQlyb3RhdGVkX3BsYW5lcy0tOwo+ ID4gKwo+ID4gKwkJCWlmICghcm90YXRlZF9wbGFuZXMpIHsKPiA+ICsJCQkJLyogbm8gbW9yZSBy b3RhdGVkIHBsYW5lcywgd2UgY2FuIHVzZSB3aGF0J3MgbGVmdCAqLwo+ID4gKwkJCQlyb3RfbWVt X3VzYWJsZSA9IHJvdF9tZW1fZnJlZTsKPiA+ICsJCQl9IGVsc2Ugewo+ID4gKwkJCQlpZiAoKG1w LT5sYXllci0+aWQgIT0gREVfVklERU8xKSB8fAo+ID4gKwkJCQkgICAgKGh3ZGV2LT5yb3RhdGlv bl9tZW1vcnlbMV0gPT0gMCkpCj4gPiArCQkJCQlyb3RfbWVtX3VzYWJsZSA9IHJvdF9tZW1fZnJl ZSAvIDI7Cj4gPiArCQkJCWVsc2UKPiA+ICsJCQkJCXJvdF9tZW1fdXNhYmxlID0gaHdkZXYtPnJv dGF0aW9uX21lbW9yeVswXTsKPiA+ICsJCQl9Cj4gPiArCj4gPiArCQkJcm90X21lbV9mcmVlIC09 IHJvdF9tZW1fdXNhYmxlOwo+ID4gKwo+ID4gKwkJCWlmIChtcC0+cm90bWVtX3NpemUgPiByb3Rf bWVtX3VzYWJsZSkKPiA+ICsJCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG1hbGlkcF9j cnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiArCQkJCSAgICAgc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpvbGRfc3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX3Bl bmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudCA9IGNydGMtPnN0YXRlLT5ldmVudDsKPiA+ICsKPiA+ ICsJaWYgKGV2ZW50KSB7Cj4gPiArCQljcnRjLT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOwo+ID4gKwo+ ID4gKwkJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKPiA+ICsJCWlmIChk cm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpID09IDApCj4gPiArCQkJZHJtX2NydGNfYXJtX3ZibGFu a19ldmVudChjcnRjLCBldmVudCk7Cj4gPiArCQllbHNlCj4gPiArCQkJZHJtX2NydGNfc2VuZF92 YmxhbmtfZXZlbnQoY3J0YywgZXZlbnQpOwo+ID4gKwkJc3Bpbl91bmxvY2tfaXJxKCZjcnRjLT5k ZXYtPmV2ZW50X2xvY2spOwo+ID4gKwl9Cj4gCj4gVGhpcyBjb3B5cGFzdGEgaXMgcmFjeSBpZiB5 b3UgZG9uJ3QgZ3VhcmFudGVlIHRocm91Z2ggc29tZSBvdGhlciBtZWFucwo+IHRoYXQgdGhlIHZi bGFuayBpbnRlcnJ1cHQgb25seSBoYXBwZW5zIHRvZ2V0aGVyIHdpdGggdGhlIHBsYW5lIHVwZGF0 ZS4gSWYKPiB5b3UgZG9uJ3QgaGF2ZSBhIGh3IHZibGFuayBjb3VudGVyLCB5b3UgbmVlZCB0byBp bnN0ZWFkIHNlbmQgdGhlIGV2ZW50Cj4gZnJvbSBhbiBpbnRlcnJ1cHQgZHJpdmVuIGJ5IHlvdXIg R08gYml0IChvciB3aGF0ZXZlciBpdCBpcyBtYWxpZHAgaGFzIHRvCj4gbWFrZSBwbGFuZSB1cGRh dGVzIGF0b21pYy4KCk9LLCBJIHdpbGwgbG9vayBpbnRvIHRoYXQuCgo+IAo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBtYWxpZHBfY3J0 Y19oZWxwZXJfZnVuY3MgPSB7Cj4gPiArCS5tb2RlX2ZpeHVwID0gbWFsaWRwX2NydGNfbW9kZV9m aXh1cCwKPiA+ICsJLmVuYWJsZSA9IG1hbGlkcF9jcnRjX2VuYWJsZSwKPiA+ICsJLmRpc2FibGUg PSBtYWxpZHBfY3J0Y19kaXNhYmxlLAo+ID4gKwkuYXRvbWljX2NoZWNrID0gbWFsaWRwX2NydGNf YXRvbWljX2NoZWNrLAo+ID4gKwkuYXRvbWljX2ZsdXNoID0gbWFsaWRwX2NydGNfYXRvbWljX2Zs dXNoLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5j cyBtYWxpZHBfY3J0Y19mdW5jcyA9IHsKPiA+ICsJLmRlc3Ryb3kgPSBkcm1fY3J0Y19jbGVhbnVw LAo+ID4gKwkuc2V0X2NvbmZpZyA9IGRybV9hdG9taWNfaGVscGVyX3NldF9jb25maWcsCj4gPiAr CS5wYWdlX2ZsaXAgPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsCj4gPiArCS5yZXNldCA9 IGRybV9hdG9taWNfaGVscGVyX2NydGNfcmVzZXQsCj4gPiArCS5hdG9taWNfZHVwbGljYXRlX3N0 YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUsCj4gPiArCS5hdG9t aWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZSwK PiA+ICt9Owo+ID4gKwo+ID4gK2ludCBtYWxpZHBfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0pCj4gPiArewo+ID4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZf cHJpdmF0ZTsKPiA+ICsJc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSA9IE5VTEwsICpwbGFuZTsK PiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJcmV0ID0gbWFsaWRwX2RlX3BsYW5lc19pbml0KGRy bSk7Cj4gPiArCWlmIChyZXQgPCAwKSB7Cj4gPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0 aWFsaXNlIHBsYW5lc1xuIik7Cj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9Cj4gPiArCj4gPiAr CWRybV9mb3JfZWFjaF9wbGFuZShwbGFuZSwgZHJtKSB7Cj4gPiArCQlpZiAocGxhbmUtPnR5cGUg PT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkgewo+ID4gKwkJCXByaW1hcnkgPSBwbGFuZTsKPiA+ ICsJCQlicmVhazsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAoIXByaW1hcnkpIHsK PiA+ICsJCURSTV9FUlJPUigibm8gcHJpbWFyeSBwbGFuZSBmb3VuZFxuIik7Cj4gPiArCQlyZXQg PSAtRUlOVkFMOwo+ID4gKwkJZ290byBjcnRjX2NsZWFudXBfcGxhbmVzOwo+ID4gKwl9Cj4gPiAr Cj4gPiArCXJldCA9IGRybV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoZHJtLCAmbWFsaWRwLT5jcnRj LCBwcmltYXJ5LCBOVUxMLAo+ID4gKwkJCQkJJm1hbGlkcF9jcnRjX2Z1bmNzLCBOVUxMKTsKPiA+ ICsKPiA+ICsJaWYgKCFyZXQpIHsKPiA+ICsJCWRybV9jcnRjX2hlbHBlcl9hZGQoJm1hbGlkcC0+ Y3J0YywgJm1hbGlkcF9jcnRjX2hlbHBlcl9mdW5jcyk7Cj4gPiArCQlyZXR1cm4gMDsKPiA+ICsJ fQo+ID4gKwo+ID4gK2NydGNfY2xlYW51cF9wbGFuZXM6Cj4gPiArCW1hbGlkcF9kZV9wbGFuZXNf ZGVzdHJveShkcm0pOwo+ID4gKwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9h cm0vbWFsaWRwX2Rydi5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAw MC4uNWQ0ODhhMgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Fy bS9tYWxpZHBfZHJ2LmMKPiA+IEBAIC0wLDAgKzEsNTAwIEBACj4gPiArLyoKPiA+ICsgKiAoQykg Q09QWVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gPiArICog QXV0aG9yOiBMaXZpdSBEdWRhdSA8TGl2aXUuRHVkYXVAYXJtLmNvbT4KPiA+ICsgKgo+ID4gKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBwcm92aWRlZCB0byB5b3UgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZQo+ID4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKPiA+ICsgKiBGb3VuZGF0 aW9uLCBhbmQgYW55IHVzZSBieSB5b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1YmplY3QgdG8gdGhl IHRlcm1zCj4gPiArICogb2Ygc3VjaCBHTlUgbGljZW5jZS4KPiA+ICsgKgo+ID4gKyAqIEFSTSBN YWxpIERQNTAwL0RQNTUwL0RQNjUwIEtNUy9EUk0gZHJpdmVyCj4gPiArICovCj4gPiArCj4gPiAr I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiA+ ICsjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2Rl dmljZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgo+ID4gKyNpbmNsdWRlIDxs aW51eC9vZl9yZXNlcnZlZF9tZW0uaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4K PiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWNfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ID4gKyNpbmNs dWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVs cGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgo+ID4gKyNpbmNs dWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fb2Yu aD4KPiA+ICsKPiA+ICsjaW5jbHVkZSAibWFsaWRwX2Rydi5oIgo+ID4gKyNpbmNsdWRlICJtYWxp ZHBfcmVncy5oIgo+ID4gKyNpbmNsdWRlICJtYWxpZHBfaHcuaCIKPiA+ICsKPiA+ICsjZGVmaW5l IE1BTElEUF9DT05GX1ZBTElEX1RJTUVPVVQJMjUwCj4gPiArCj4gPiArLyoKPiA+ICsgKiBzZXQg dGhlICJjb25maWcgdmFsaWQiIGJpdCBhbmQgd2FpdCB1bnRpbCB0aGUgaGFyZHdhcmUgYWN0cyBv biBpdAo+ID4gKyAqLwo+ID4gK3N0YXRpYyBpbnQgbWFsaWRwX3NldF9hbmRfd2FpdF9jb25maWdf dmFsaWQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBtYWxpZHBf ZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ID4gKwlzdHJ1Y3QgbWFsaWRwX2h3X2Rl dmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJaHdk ZXYtPnNldF9jb25maWdfdmFsaWQoaHdkZXYpOwo+ID4gKwkvKiBkb24ndCB3YWl0IGZvciBjb25m aWdfdmFsaWQgZmxhZyBpZiB3ZSBhcmUgaW4gY29uZmlnIG1vZGUgKi8KPiA+ICsJaWYgKGh3ZGV2 LT5pbl9jb25maWdfbW9kZShod2RldikpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJcmV0 ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQobWFsaWRwLT53cSwKPiA+ICsJCQlh dG9taWNfcmVhZCgmbWFsaWRwLT5jb25maWdfdmFsaWQpID09IDEsCj4gPiArCQkJbXNlY3NfdG9f amlmZmllcyhNQUxJRFBfQ09ORl9WQUxJRF9USU1FT1VUKSk7Cj4gPiArCj4gPiArCXJldHVybiAo cmV0ID4gMCkgPyAwIDogLUVUSU1FRE9VVDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQg bWFsaWRwX291dHB1dF9wb2xsX2NoYW5nZWQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiA+ICt7 Cj4gPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ID4g Kwo+ID4gKwlpZiAobWFsaWRwLT5mYmRldikKPiA+ICsJCWRybV9mYmRldl9jbWFfaG90cGx1Z19l dmVudChtYWxpZHAtPmZiZGV2KTsKPiAKPiBjbWFfaG90cGx1Z19ldmVudCBhbHJlYWR5IGhhcyBh IE5VTEwgY2hlY2suCgpPSywgSSdsbCBzd2l0Y2ggdG8gdGhhdC4KCj4gCj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyB2b2lkIG1hbGlkcF9hdG9taWNfY29tbWl0X2h3X2RvbmUoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9 IHN0YXRlLT5kZXY7Cj4gPiArCWludCByZXQgPSBtYWxpZHBfc2V0X2FuZF93YWl0X2NvbmZpZ192 YWxpZChkcm0pOwo+ID4gKwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJRFJNX0RFQlVHX0RSSVZFUigi dGltZWQgb3V0IHdhaXRpbmcgZm9yIHVwZGF0ZWQgY29uZmlndXJhdGlvblxuIik7Cj4gPiArCj4g PiArCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9od19kb25lKHN0YXRlKTsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIHZvaWQgbWFsaWRwX2F0b21pY19jb21taXRfdGFpbChzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0g c3RhdGUtPmRldjsKPiA+ICsKPiA+ICsJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRf ZGlzYWJsZXMoZHJtLCBzdGF0ZSk7Cj4gPiArCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rl c2V0X2VuYWJsZXMoZHJtLCBzdGF0ZSk7Cj4gPiArCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9w bGFuZXMoZHJtLCBzdGF0ZSwgZmFsc2UpOwo+ID4gKwo+ID4gKwltYWxpZHBfYXRvbWljX2NvbW1p dF9od19kb25lKHN0YXRlKTsKPiA+ICsKPiA+ICsJZHJtX2F0b21pY19oZWxwZXJfd2FpdF9mb3Jf dmJsYW5rcyhkcm0sIHN0YXRlKTsKPiA+ICsKPiA+ICsJZHJtX2F0b21pY19oZWxwZXJfY2xlYW51 cF9wbGFuZXMoZHJtLCBzdGF0ZSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJt X21vZGVfY29uZmlnX2hlbHBlcl9mdW5jcyBtYWxpZHBfbW9kZV9jb25maWdfaGVscGVycyA9IHsK PiA+ICsJLmF0b21pY19jb21taXRfdGFpbCA9IG1hbGlkcF9hdG9taWNfY29tbWl0X3RhaWwsCj4g PiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5j cyBtYWxpZHBfbW9kZV9jb25maWdfZnVuY3MgPSB7Cj4gPiArCS5mYl9jcmVhdGUgPSBkcm1fZmJf Y21hX2NyZWF0ZSwKPiA+ICsJLm91dHB1dF9wb2xsX2NoYW5nZWQgPSBtYWxpZHBfb3V0cHV0X3Bv bGxfY2hhbmdlZCwKPiA+ICsJLmF0b21pY19jaGVjayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNr LAo+ID4gKwkuYXRvbWljX2NvbW1pdCA9IGRybV9hdG9taWNfaGVscGVyX2NvbW1pdCwKPiA+ICt9 Owo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbWFsaWRwX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9k ZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IGNydGMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbWFsaWRw X2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsJc3RydWN0IG1hbGlkcF9od19k ZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gPiArCj4gPiArCW1hbGlkcF9od19lbmFibGVf aXJxKGh3ZGV2LCBNQUxJRFBfREVfQkxPQ0ssCj4gPiArCQkJICAgICBod2Rldi0+bWFwLmRlX2ly cV9tYXAudnN5bmNfaXJxKTsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyB2b2lkIG1hbGlkcF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNp Z25lZCBpbnQgcGlwZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBk cm0tPmRldl9wcml2YXRlOwo+ID4gKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBt YWxpZHAtPmRldjsKPiA+ICsKPiA+ICsJbWFsaWRwX2h3X2Rpc2FibGVfaXJxKGh3ZGV2LCBNQUxJ RFBfREVfQkxPQ0ssCj4gPiArCQkJICAgICAgaHdkZXYtPm1hcC5kZV9pcnFfbWFwLnZzeW5jX2ly cSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbWFsaWRwX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRybSkKPiA+ICt7Cj4gPiArCWludCByZXQ7Cj4gPiArCXN0cnVjdCBtYWxpZHBfZHJt ICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ID4gKwlzdHJ1Y3QgbWFsaWRwX2h3X2Rldmlj ZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiA+ICsKPiA+ICsJZHJtX21vZGVfY29uZmlnX2luaXQo ZHJtKTsKPiA+ICsKPiA+ICsJZHJtLT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSBod2Rldi0+bWlu X2xpbmVfc2l6ZTsKPiA+ICsJZHJtLT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gaHdkZXYtPm1p bl9saW5lX3NpemU7Cj4gPiArCWRybS0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gaHdkZXYtPm1h eF9saW5lX3NpemU7Cj4gPiArCWRybS0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IGh3ZGV2LT5t YXhfbGluZV9zaXplOwo+ID4gKwlkcm0tPm1vZGVfY29uZmlnLmZ1bmNzID0gJm1hbGlkcF9tb2Rl X2NvbmZpZ19mdW5jczsKPiA+ICsJZHJtLT5tb2RlX2NvbmZpZy5oZWxwZXJfcHJpdmF0ZSA9ICZt YWxpZHBfbW9kZV9jb25maWdfaGVscGVyczsKPiA+ICsKPiA+ICsJcmV0ID0gbWFsaWRwX2NydGNf aW5pdChkcm0pOwo+ID4gKwlpZiAocmV0KSB7Cj4gPiArCQlkcm1fbW9kZV9jb25maWdfY2xlYW51 cChkcm0pOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBtYWxpZHBfaXJxX2luaXQoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKPiA+ICt7Cj4gPiArCWludCBpcnFfZGUsIGlycV9zZSwgcmV0ID0g MDsKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ ZGV2KTsKPiA+ICsKPiA+ICsJLyogZmV0Y2ggdGhlIGludGVycnVwdHMgZnJvbSBEVCAqLwo+ID4g KwlpcnFfZGUgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiREUiKTsKPiA+ICsJaWYg KGlycV9kZSA8IDApIHsKPiA+ICsJCURSTV9FUlJPUigibm8gJ0RFJyBJUlEgc3BlY2lmaWVkIVxu Iik7Cj4gPiArCQlyZXR1cm4gaXJxX2RlOwo+ID4gKwl9Cj4gPiArCWlycV9zZSA9IHBsYXRmb3Jt X2dldF9pcnFfYnluYW1lKHBkZXYsICJTRSIpOwo+ID4gKwlpZiAoaXJxX3NlIDwgMCkgewo+ID4g KwkJRFJNX0VSUk9SKCJubyAnU0UnIElSUSBzcGVjaWZpZWQhXG4iKTsKPiA+ICsJCXJldHVybiBp cnFfc2U7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0ID0gbWFsaWRwX2RlX2lycV9pbml0KGRybSwg aXJxX2RlKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCXJl dCA9IG1hbGlkcF9zZV9pcnFfaW5pdChkcm0sIGlycV9zZSk7Cj4gPiArCWlmIChyZXQpIHsKPiA+ ICsJCW1hbGlkcF9kZV9pcnFfZmluaShkcm0pOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbWFsaWRw X2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ID4gK3sKPiA+ICsJc3RydWN0IG1h bGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCj4gPiArCWRybV9mYmRl dl9jbWFfcmVzdG9yZV9tb2RlKG1hbGlkcC0+ZmJkZXYpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0gewo+ID4gKwkub3duZXIgPSBU SElTX01PRFVMRSwKPiA+ICsJLm9wZW4gPSBkcm1fb3BlbiwKPiA+ICsJLnJlbGVhc2UgPSBkcm1f cmVsZWFzZSwKPiA+ICsJLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAo+ID4gKyNpZmRlZiBD T05GSUdfQ09NUEFUCj4gPiArCS5jb21wYXRfaW9jdGwgPSBkcm1fY29tcGF0X2lvY3RsLAo+ID4g KyNlbmRpZgo+ID4gKwkucG9sbCA9IGRybV9wb2xsLAo+ID4gKwkucmVhZCA9IGRybV9yZWFkLAo+ ID4gKwkubGxzZWVrID0gbm9vcF9sbHNlZWssCj4gPiArCS5tbWFwID0gZHJtX2dlbV9jbWFfbW1h cCwKPiA+ICt9Owo+IAo+IEkgd29uZGVyIHdoZXRoZXIgd2Ugc2hvdWxkIGhhdmUgYSBtYWNybyBm b3IgZ2VtX2NtYV9mb3BzIHdoaWNoIHRha2VzIGEKPiBuYW1lIGFuZCBUSElTX01PRFVMRSBhbmQg Z2VuZXJhdGVzIHRoaXMgYm9pbGVycGxhdGUgaGVyZSAuLi4gTWlnaHQgYmUgYQo+IGdvb2Qgc3Vi c3lzdGVtIGNsZWFudXAuCgp3aW5rLCB3aW5rLCBudWRnZSwgbnVkZ2U/Cgo+IAo+ID4gKwo+ID4g K3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBtYWxpZHBfZHJpdmVyID0gewo+ID4gKwkuZHJpdmVy X2ZlYXR1cmVzID0gRFJJVkVSX0dFTSB8IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX0FUT01JQyB8 Cj4gPiArCQkJICAgRFJJVkVSX1BSSU1FLAo+ID4gKwkubGFzdGNsb3NlID0gbWFsaWRwX2xhc3Rj bG9zZSwKPiA+ICsJLmdldF92YmxhbmtfY291bnRlciA9IGRybV92Ymxhbmtfbm9faHdfY291bnRl ciwKPiA+ICsJLmVuYWJsZV92YmxhbmsgPSBtYWxpZHBfZW5hYmxlX3ZibGFuaywKPiA+ICsJLmRp c2FibGVfdmJsYW5rID0gbWFsaWRwX2Rpc2FibGVfdmJsYW5rLAo+ID4gKwkuZ2VtX2ZyZWVfb2Jq ZWN0ID0gZHJtX2dlbV9jbWFfZnJlZV9vYmplY3QsCj4gCj4gUGxlYXNlIHVzZSBfdW5sb2NrZWQg aGVyZS4KCldpbGwgZG8uCgo+IAo+ID4gKwkuZ2VtX3ZtX29wcyA9ICZkcm1fZ2VtX2NtYV92bV9v cHMsCj4gPiArCS5kdW1iX2NyZWF0ZSA9IGRybV9nZW1fY21hX2R1bWJfY3JlYXRlLAo+ID4gKwku ZHVtYl9tYXBfb2Zmc2V0ID0gZHJtX2dlbV9jbWFfZHVtYl9tYXBfb2Zmc2V0LAo+ID4gKwkuZHVt Yl9kZXN0cm95ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCj4gPiArCS5wcmltZV9oYW5kbGVfdG9f ZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKPiA+ICsJLnByaW1lX2ZkX3RvX2hhbmRs ZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLAo+ID4gKwkuZ2VtX3ByaW1lX2V4cG9ydCA9 IGRybV9nZW1fcHJpbWVfZXhwb3J0LAo+ID4gKwkuZ2VtX3ByaW1lX2ltcG9ydCA9IGRybV9nZW1f cHJpbWVfaW1wb3J0LAo+ID4gKwkuZ2VtX3ByaW1lX2dldF9zZ190YWJsZSA9IGRybV9nZW1fY21h X3ByaW1lX2dldF9zZ190YWJsZSwKPiA+ICsJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBk cm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGUsCj4gPiArCS5nZW1fcHJpbWVfdm1hcCA9 IGRybV9nZW1fY21hX3ByaW1lX3ZtYXAsCj4gPiArCS5nZW1fcHJpbWVfdnVubWFwID0gZHJtX2dl bV9jbWFfcHJpbWVfdnVubWFwLAo+ID4gKwkuZ2VtX3ByaW1lX21tYXAgPSBkcm1fZ2VtX2NtYV9w cmltZV9tbWFwLAo+ID4gKwkuZm9wcyA9ICZmb3BzLAo+ID4gKwkubmFtZSA9ICJtYWxpLWRwIiwK PiA+ICsJLmRlc2MgPSAiQVJNIE1hbGkgRGlzcGxheSBQcm9jZXNzb3IgZHJpdmVyIiwKPiA+ICsJ LmRhdGUgPSAiMjAxNjAxMDYiLAo+ID4gKwkubWFqb3IgPSAxLAo+ID4gKwkubWlub3IgPSAwLAo+ ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgIG1hbGlk cF9kcm1fb2ZfbWF0Y2hbXSA9IHsKPiA+ICsJewo+ID4gKwkJLmNvbXBhdGlibGUgPSAiYXJtLG1h bGktZHA1MDAiLAo+ID4gKwkJLmRhdGEgPSAmbWFsaWRwX2RldmljZVtNQUxJRFBfNTAwXQo+ID4g Kwl9LAo+ID4gKwl7Cj4gPiArCQkuY29tcGF0aWJsZSA9ICJhcm0sbWFsaS1kcDU1MCIsCj4gPiAr CQkuZGF0YSA9ICZtYWxpZHBfZGV2aWNlW01BTElEUF81NTBdCj4gPiArCX0sCj4gPiArCXsKPiA+ ICsJCS5jb21wYXRpYmxlID0gImFybSxtYWxpLWRwNjUwIiwKPiA+ICsJCS5kYXRhID0gJm1hbGlk cF9kZXZpY2VbTUFMSURQXzY1MF0KPiA+ICsJfSwKPiA+ICsJe30sCj4gPiArfTsKPiA+ICtNT0RV TEVfREVWSUNFX1RBQkxFKG9mLCBtYWxpZHBfZHJtX29mX21hdGNoKTsKPiA+ICsKPiA+ICsjZGVm aW5lIE1BWF9PVVRQVVRfQ0hBTk5FTFMJMwo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbWFsaWRwX2Jp bmQoc3RydWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsJc3RydWN0IHJlc291cmNlICpyZXM7 Cj4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07Cj4gPiArCXN0cnVjdCBtYWxpZHBfZHJtICpt YWxpZHA7Cj4gPiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldjsKPiA+ICsJc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwo+ID4gKwkv KiBudW1iZXIgb2YgbGluZXMgZm9yIHRoZSBSLCBHIGFuZCBCIG91dHB1dCAqLwo+ID4gKwl1OCBv dXRwdXRfd2lkdGhbTUFYX09VVFBVVF9DSEFOTkVMU107Cj4gPiArCWludCByZXQgPSAwLCBpOwo+ ID4gKwl1MzIgdmVyc2lvbiwgb3V0X2RlcHRoID0gMDsKPiA+ICsKPiA+ICsJbWFsaWRwID0gZGV2 bV9remFsbG9jKGRldiwgc2l6ZW9mKCptYWxpZHApLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFt YWxpZHApCj4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICsJaHdkZXYgPSBkZXZtX2t6 YWxsb2MoZGV2LCBzaXplb2YoKmh3ZGV2KSwgR0ZQX0tFUk5FTCk7Cj4gPiArCWlmICghaHdkZXYp Cj4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogY29weSB0aGUg YXNzb2NpYXRlZCBkYXRhIGZyb20gbWFsaWRwX2RybV9vZl9tYXRjaCB0byBhdm9pZAo+ID4gKwkg KiBoYXZpbmcgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgT0Ygbm9kZSBhZnRlciBiaW5kaW5n Cj4gPiArCSAqLwo+ID4gKwltZW1jcHkoaHdkZXYsIG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShk ZXYpLCBzaXplb2YoKmh3ZGV2KSk7Cj4gPiArCW1hbGlkcC0+ZGV2ID0gaHdkZXY7Cj4gPiArCj4g PiArCUlOSVRfTElTVF9IRUFEKCZtYWxpZHAtPmV2ZW50X2xpc3QpOwo+ID4gKwo+ID4gKwlyZXMg PSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+ID4gKwlo d2Rldi0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7Cj4gPiArCWlmIChJ U19FUlIoaHdkZXYtPnJlZ3MpKSB7Cj4gPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBtYXAgY29u dHJvbCByZWdpc3RlcnMgYXJlYVxuIik7Cj4gPiArCQlyZXR1cm4gUFRSX0VSUihod2Rldi0+cmVn cyk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaHdkZXYtPnBjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAi cGNsayIpOwo+ID4gKwlpZiAoSVNfRVJSKGh3ZGV2LT5wY2xrKSkKPiA+ICsJCXJldHVybiBQVFJf RVJSKGh3ZGV2LT5wY2xrKTsKPiA+ICsKPiA+ICsJaHdkZXYtPmFjbGsgPSBkZXZtX2Nsa19nZXQo ZGV2LCAiYWNsayIpOwo+ID4gKwlpZiAoSVNfRVJSKGh3ZGV2LT5hY2xrKSkKPiA+ICsJCXJldHVy biBQVFJfRVJSKGh3ZGV2LT5hY2xrKTsKPiA+ICsKPiA+ICsJaHdkZXYtPm1jbGsgPSBkZXZtX2Ns a19nZXQoZGV2LCAibWNsayIpOwo+ID4gKwlpZiAoSVNfRVJSKGh3ZGV2LT5tY2xrKSkKPiA+ICsJ CXJldHVybiBQVFJfRVJSKGh3ZGV2LT5tY2xrKTsKPiA+ICsKPiA+ICsJaHdkZXYtPnB4bGNsayA9 IGRldm1fY2xrX2dldChkZXYsICJweGxjbGsiKTsKPiA+ICsJaWYgKElTX0VSUihod2Rldi0+cHhs Y2xrKSkKPiA+ICsJCXJldHVybiBQVFJfRVJSKGh3ZGV2LT5weGxjbGspOwo+ID4gKwo+ID4gKwkv KiBHZXQgdGhlIG9wdGlvbmFsIGZyYW1lYnVmZmVyIG1lbW9yeSByZXNvdXJjZSAqLwo+ID4gKwly ZXQgPSBvZl9yZXNlcnZlZF9tZW1fZGV2aWNlX2luaXQoZGV2KTsKPiA+ICsJaWYgKHJldCAmJiBy ZXQgIT0gLUVOT0RFVikKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCWRybSA9IGRybV9k ZXZfYWxsb2MoJm1hbGlkcF9kcml2ZXIsIGRldik7Cj4gPiArCWlmICghZHJtKSB7Cj4gPiArCQly ZXQgPSAtRU5PTUVNOwo+ID4gKwkJZ290byBhbGxvY19mYWlsOwo+ID4gKwl9Cj4gPiArCj4gPiAr CS8qIEVuYWJsZSBBUEIgY2xvY2sgaW4gb3JkZXIgdG8gZ2V0IGFjY2VzcyB0byB0aGUgcmVnaXN0 ZXJzICovCj4gPiArCWNsa19wcmVwYXJlX2VuYWJsZShod2Rldi0+cGNsayk7Cj4gPiArCS8qCj4g PiArCSAqIEVuYWJsZSBBWEkgY2xvY2sgYW5kIG1haW4gY2xvY2sgc28gdGhhdCBwcmVmZXRjaCBj YW4gc3RhcnQgb25jZQo+ID4gKwkgKiB0aGUgcmVnaXN0ZXJzIGFyZSBzZXQKPiA+ICsJICovCj4g PiArCWNsa19wcmVwYXJlX2VuYWJsZShod2Rldi0+YWNsayk7Cj4gPiArCWNsa19wcmVwYXJlX2Vu YWJsZShod2Rldi0+bWNsayk7Cj4gPiArCj4gPiArCXJldCA9IGh3ZGV2LT5xdWVyeV9odyhod2Rl dik7Cj4gPiArCWlmIChyZXQpIHsKPiA+ICsJCURSTV9FUlJPUigiSW52YWxpZCBIVyBjb25maWd1 cmF0aW9uXG4iKTsKPiA+ICsJCWdvdG8gcXVlcnlfaHdfZmFpbDsKPiA+ICsJfQo+ID4gKwo+ID4g Kwl2ZXJzaW9uID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuZGNfYmFzZSArIE1B TElEUF9ERV9DT1JFX0lEKTsKPiA+ICsJRFJNX0lORk8oImZvdW5kIEFSTSBNYWxpLURQJTN4IHZl cnNpb24gciVkcCVkXG4iLCB2ZXJzaW9uID4+IDE2LAo+ID4gKwkJICh2ZXJzaW9uID4+IDEyKSAm IDB4ZiwgKHZlcnNpb24gPj4gOCkgJiAweGYpOwo+ID4gKwo+ID4gKwkvKiBzZXQgdGhlIG51bWJl ciBvZiBsaW5lcyB1c2VkIGZvciBvdXRwdXQgb2YgUkdCIGRhdGEgKi8KPiA+ICsJcmV0ID0gb2Zf cHJvcGVydHlfcmVhZF91OF9hcnJheShkZXYtPm9mX25vZGUsCj4gPiArCQkJCQkiYXJtLG1hbGlk cC1vdXRwdXQtcG9ydC1saW5lcyIsCj4gPiArCQkJCQlvdXRwdXRfd2lkdGgsIE1BWF9PVVRQVVRf Q0hBTk5FTFMpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290byBxdWVyeV9od19mYWlsOwo+ID4g Kwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgTUFYX09VVFBVVF9DSEFOTkVMUzsgaSsrKQo+ID4gKwkJ b3V0X2RlcHRoID0gKG91dF9kZXB0aCA8PCA4KSB8IChvdXRwdXRfd2lkdGhbaV0gJiAweGYpOwo+ ID4gKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIG91dF9kZXB0aCwgaHdkZXYtPm1hcC5vdXRfZGVw dGhfYmFzZSk7Cj4gPiArCj4gPiArCWRybS0+ZGV2X3ByaXZhdGUgPSBtYWxpZHA7Cj4gPiArCWRl dl9zZXRfZHJ2ZGF0YShkZXYsIGRybSk7Cj4gPiArCWF0b21pY19zZXQoJm1hbGlkcC0+Y29uZmln X3ZhbGlkLCAwKTsKPiA+ICsJaW5pdF93YWl0cXVldWVfaGVhZCgmbWFsaWRwLT53cSk7Cj4gPiAr Cj4gPiArCXJldCA9IG1hbGlkcF9pbml0KGRybSk7Cj4gPiArCWlmIChyZXQgPCAwKQo+ID4gKwkJ Z290byBpbml0X2ZhaWw7Cj4gPiArCj4gPiArCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIoZHJtLCAw KTsKPiAKPiBUaGUgaWRlYSBvZiBhbGxvYy9yZWdpc3RlciBzcGxpdCBpcyB0aGF0IHlvdSBkbyBp dCBsYXN0LiBZb3UgYWxzbyBuZWVkIHRvCj4gY2FsbCBkcm1fY29ubmVjdG9yX3JlZ2lzdGVyX2Fs bCBzdGlsbCBzZXBhcmF0ZWx5LiBJIHRoaW5rIENocmlzIFdpbHNvbiBoYXMKPiBwYXRjaGVzIHRv IGZpeCB0aGF0IHVwIHRob3VnaC4KCkkgd2lsbCBsb29rIGluIHRoZSBNTCBhcmNoaXZlIHRvIHNl ZSBpZiBJIGNhbiBzcG90IENocmlzJyBwYXRjaGVzLgoKPiAKPiA+ICsJaWYgKHJldCkKPiA+ICsJ CWdvdG8gcmVnaXN0ZXJfZmFpbDsKPiA+ICsKPiA+ICsJLyogU2V0IHRoZSBDUlRDJ3MgcG9ydCBz byB0aGF0IHRoZSBlbmNvZGVyIGNvbXBvbmVudCBjYW4gZmluZCBpdCAqLwo+ID4gKwltYWxpZHAt PmNydGMucG9ydCA9IG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGRldi0+b2Zfbm9kZSwgTlVM TCk7Cj4gPiArCj4gPiArCXJldCA9IGNvbXBvbmVudF9iaW5kX2FsbChkZXYsIGRybSk7Cj4gPiAr CW9mX25vZGVfcHV0KG1hbGlkcC0+Y3J0Yy5wb3J0KTsKPiA+ICsKPiA+ICsJaWYgKHJldCkgewo+ ID4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYmluZCBhbGwgY29tcG9uZW50c1xuIik7Cj4gPiAr CQlnb3RvIGJpbmRfZmFpbDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXQgPSBtYWxpZHBfaXJxX2lu aXQocGRldik7Cj4gPiArCWlmIChyZXQgPCAwKQo+ID4gKwkJZ290byBpcnFfaW5pdF9mYWlsOwo+ ID4gKwo+ID4gKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZHJtLCBkcm0tPm1vZGVfY29uZmlnLm51 bV9jcnRjKTsKPiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRv IGluaXRpYWxpc2UgdmJsYW5rXG4iKTsKPiA+ICsJCWdvdG8gdmJsYW5rX2ZhaWw7Cj4gPiArCX0K PiA+ICsKPiA+ICsJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7Cj4gPiArCj4gPiArCW1hbGlk cC0+ZmJkZXYgPSBkcm1fZmJkZXZfY21hX2luaXQoZHJtLCAzMiwgZHJtLT5tb2RlX2NvbmZpZy5u dW1fY3J0YywKPiA+ICsJCQkJCSAgIGRybS0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3Rvcik7Cj4g PiArCj4gPiArCWlmIChJU19FUlIobWFsaWRwLT5mYmRldikpIHsKPiA+ICsJCXJldCA9IFBUUl9F UlIobWFsaWRwLT5mYmRldik7Cj4gPiArCQltYWxpZHAtPmZiZGV2ID0gTlVMTDsKPiA+ICsJCWdv dG8gZmJkZXZfZmFpbDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2lu aXQoZHJtKTsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4gPiArZmJkZXZfZmFpbDoKPiA+ICsJZHJt X3ZibGFua19jbGVhbnVwKGRybSk7Cj4gPiArdmJsYW5rX2ZhaWw6Cj4gPiArCW1hbGlkcF9zZV9p cnFfZmluaShkcm0pOwo+ID4gKwltYWxpZHBfZGVfaXJxX2ZpbmkoZHJtKTsKPiA+ICtpcnFfaW5p dF9mYWlsOgo+ID4gKwljb21wb25lbnRfdW5iaW5kX2FsbChkZXYsIGRybSk7Cj4gPiArYmluZF9m YWlsOgo+ID4gKwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsKPiA+ICtyZWdpc3Rlcl9mYWlsOgo+ ID4gKwltYWxpZHBfZGVfcGxhbmVzX2Rlc3Ryb3koZHJtKTsKPiA+ICsJZHJtX21vZGVfY29uZmln X2NsZWFudXAoZHJtKTsKPiA+ICtpbml0X2ZhaWw6Cj4gPiArCWRybS0+ZGV2X3ByaXZhdGUgPSBO VUxMOwo+ID4gKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKPiA+ICtxdWVyeV9od19mYWls Ogo+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaHdkZXYtPm1jbGspOwo+ID4gKwljbGtfZGlz YWJsZV91bnByZXBhcmUoaHdkZXYtPmFjbGspOwo+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUo aHdkZXYtPnBjbGspOwo+ID4gKwlkcm1fZGV2X3VucmVmKGRybSk7Cj4gPiArYWxsb2NfZmFpbDoK PiA+ICsJb2ZfcmVzZXJ2ZWRfbWVtX2RldmljZV9yZWxlYXNlKGRldik7Cj4gPiArCj4gPiArCXJl dHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG1hbGlkcF91bmJpbmQoc3Ry dWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJt LT5kZXZfcHJpdmF0ZTsKPiA+ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFs aWRwLT5kZXY7Cj4gPiArCj4gPiArCWlmIChtYWxpZHAtPmZiZGV2KSB7Cj4gPiArCQlkcm1fZmJk ZXZfY21hX2ZpbmkobWFsaWRwLT5mYmRldik7Cj4gPiArCQltYWxpZHAtPmZiZGV2ID0gTlVMTDsK PiA+ICsJfQo+ID4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJtKTsKPiA+ICsJbWFsaWRw X3NlX2lycV9maW5pKGRybSk7Cj4gPiArCW1hbGlkcF9kZV9pcnFfZmluaShkcm0pOwo+ID4gKwlk cm1fdmJsYW5rX2NsZWFudXAoZHJtKTsKPiA+ICsJY29tcG9uZW50X3VuYmluZF9hbGwoZGV2LCBk cm0pOwo+ID4gKwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsKPiAKPiBVbnJlZ2lzdGVyIGZpcnN0 LCBhbHNvIG5lZWQgdG8gdW5yZWdpc3RlciBjb25uZWN0b3JzIHRvby4KCkJhaCwgeW91IGFyZSBy aWdodC4gRG9lcyB1bnJlZ2lzdGVyIGhhdmUgdG8gY29tZSBldmVuIGJlZm9yZQpkcm1fa21zX2hl bHBlcl9wb2xsX2ZpbmkoKSA/CgpBcyBmb3IgdGhlIGNvbm5lY3RvcnMsIGJlY2F1c2UgbXkgZHJp dmVyIHVzZXMgYW4gZW5jb2RlciB0aGF0CmlzIGFsc28gYSBjb21wb25lbnQgc2xhdmUsIGNvbXBv bmVudF9bdW5dYmluZF9hbGwoKSBzaG91bGQgdGFrZQpjYXJlIG9mIFt1bl1yZWdpc3RlcmluZyB0 aGF0LgoKPiAKPiA+ICsJbWFsaWRwX2RlX3BsYW5lc19kZXN0cm95KGRybSk7Cj4gPiArCWRybV9t b2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7Cj4gPiArCWRybS0+ZGV2X3ByaXZhdGUgPSBOVUxMOwo+ ID4gKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKPiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGh3ZGV2LT5tY2xrKTsKPiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGh3ZGV2LT5hY2xr KTsKPiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGh3ZGV2LT5wY2xrKTsKPiA+ICsJZHJtX2Rl dl91bnJlZihkcm0pOwo+ID4gKwlvZl9yZXNlcnZlZF9tZW1fZGV2aWNlX3JlbGVhc2UoZGV2KTsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfbWFzdGVyX29w cyBtYWxpZHBfbWFzdGVyX29wcyA9IHsKPiA+ICsJLmJpbmQgPSBtYWxpZHBfYmluZCwKPiA+ICsJ LnVuYmluZCA9IG1hbGlkcF91bmJpbmQsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IG1h bGlkcF9jb21wYXJlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCj4gPiArewo+ ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGF0YTsKPiA+ICsKPiA+ICsJcmV0dXJuIGRl di0+b2Zfbm9kZSA9PSBucDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBtYWxpZHBfcGxh dGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ICt7Cj4gPiArCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydCwgKmVwOwo+ID4gKwlzdHJ1Y3QgY29tcG9uZW50X21hdGNo ICptYXRjaCA9IE5VTEw7Cj4gPiArCj4gPiArCWlmICghcGRldi0+ZGV2Lm9mX25vZGUpCj4gPiAr CQlyZXR1cm4gLUVOT0RFVjsKPiA+ICsKPiA+ICsJLyogdGhlcmUgaXMgb25seSBvbmUgb3V0cHV0 IHBvcnQgaW5zaWRlIGVhY2ggZGV2aWNlLCBmaW5kIGl0ICovCj4gPiArCWVwID0gb2ZfZ3JhcGhf Z2V0X25leHRfZW5kcG9pbnQocGRldi0+ZGV2Lm9mX25vZGUsIE5VTEwpOwo+ID4gKwlpZiAoIWVw KQo+ID4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gPiArCj4gPiArCWlmICghb2ZfZGV2aWNlX2lzX2F2 YWlsYWJsZShlcCkpIHsKPiA+ICsJCW9mX25vZGVfcHV0KGVwKTsKPiA+ICsJCXJldHVybiAtRU5P REVWOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8qIGFkZCB0aGUgcmVtb3RlIGVuY29kZXIgcG9ydCBh cyBjb21wb25lbnQgKi8KPiA+ICsJcG9ydCA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJl bnQoZXApOwo+ID4gKwlvZl9ub2RlX3B1dChlcCk7Cj4gPiArCWlmICghcG9ydCB8fCAhb2ZfZGV2 aWNlX2lzX2F2YWlsYWJsZShwb3J0KSkgewo+ID4gKwkJb2Zfbm9kZV9wdXQocG9ydCk7Cj4gPiAr CQlyZXR1cm4gLUVBR0FJTjsKPiA+ICsJfQo+ID4gKwo+ID4gKwljb21wb25lbnRfbWF0Y2hfYWRk KCZwZGV2LT5kZXYsICZtYXRjaCwgbWFsaWRwX2NvbXBhcmVfZGV2LCBwb3J0KTsKPiA+ICsJcmV0 dXJuIGNvbXBvbmVudF9tYXN0ZXJfYWRkX3dpdGhfbWF0Y2goJnBkZXYtPmRldiwgJm1hbGlkcF9t YXN0ZXJfb3BzLAo+ID4gKwkJCQkJICAgICAgIG1hdGNoKTsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIGludCBtYWxpZHBfcGxhdGZvcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4gPiArewo+ID4gKwljb21wb25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmbWFsaWRw X21hc3Rlcl9vcHMpOwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWFsaWRwX3BsYXRmb3JtX2RyaXZlciA9IHsKPiA+ICsJLnBy b2JlCQk9IG1hbGlkcF9wbGF0Zm9ybV9wcm9iZSwKPiA+ICsJLnJlbW92ZQkJPSBtYWxpZHBfcGxh dGZvcm1fcmVtb3ZlLAo+ID4gKwkuZHJpdmVyCT0gewo+ID4gKwkJLm5hbWUgPSAibWFsaS1kcCIs Cj4gPiArCQkub2ZfbWF0Y2hfdGFibGUJPSBtYWxpZHBfZHJtX29mX21hdGNoLAo+ID4gKwl9LAo+ ID4gK307Cj4gPiArCj4gPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtYWxpZHBfcGxhdGZvcm1f ZHJpdmVyKTsKPiA+ICsKPiA+ICtNT0RVTEVfQVVUSE9SKCJMaXZpdSBEdWRhdSA8TGl2aXUuRHVk YXVAYXJtLmNvbT4iKTsKPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkFSTSBNYWxpIERQIERSTSBk cml2ZXIiKTsKPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21h bGlkcF9kcnYuaAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLjNj YWUwYjMKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFs aWRwX2Rydi5oCj4gPiBAQCAtMCwwICsxLDQ4IEBACj4gPiArLyoKPiA+ICsgKiAoQykgQ09QWVJJ R0hUIDIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gPiArICogQXV0aG9y OiBMaXZpdSBEdWRhdSA8TGl2aXUuRHVkYXVAYXJtLmNvbT4KPiA+ICsgKgo+ID4gKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZQo+ID4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKPiA+ICsgKiBGb3VuZGF0aW9uLCBh bmQgYW55IHVzZSBieSB5b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1z Cj4gPiArICogb2Ygc3VjaCBHTlUgbGljZW5jZS4KPiA+ICsgKgo+ID4gKyAqIEFSTSBNYWxpIERQ NTAwL0RQNTUwL0RQNjUwIEtNUy9EUk0gZHJpdmVyIHN0cnVjdHVyZXMKPiA+ICsgKi8KPiA+ICsK PiA+ICsjaWZuZGVmIF9fTUFMSURQX0RSVl9IX18KPiA+ICsjZGVmaW5lIF9fTUFMSURQX0RSVl9I X18KPiA+ICsKPiA+ICsjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KPiA+ICsjaW5jbHVkZSA8bGlu dXgvd2FpdC5oPgo+ID4gKyNpbmNsdWRlICJtYWxpZHBfaHcuaCIKPiA+ICsKPiA+ICtzdHJ1Y3Qg bWFsaWRwX2RybSB7Cj4gPiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpkZXY7Cj4gPiArCXN0 cnVjdCBkcm1fZmJkZXZfY21hICpmYmRldjsKPiA+ICsJc3RydWN0IGxpc3RfaGVhZCBldmVudF9s aXN0Owo+ID4gKwlzdHJ1Y3QgZHJtX2NydGMgY3J0YzsKPiA+ICsJd2FpdF9xdWV1ZV9oZWFkX3Qg d3E7Cj4gPiArCWF0b21pY190IGNvbmZpZ192YWxpZDsKPiA+ICt9Owo+ID4gKwo+ID4gKyNkZWZp bmUgY3J0Y190b19tYWxpZHBfZGV2aWNlKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbWFsaWRw X2RybSwgY3J0YykKPiA+ICsKPiA+ICtzdHJ1Y3QgbWFsaWRwX3BsYW5lIHsKPiA+ICsJc3RydWN0 IGRybV9wbGFuZSBiYXNlOwo+ID4gKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXY7Cj4g PiArCWNvbnN0IHN0cnVjdCBtYWxpZHBfbGF5ZXIgKmxheWVyOwo+ID4gKwkvKiBzaXplIG9mIHRo ZSByZXF1aXJlZCByb3RhdGlvbiBtZW1vcnkgd2hlbiBwbGFuZSBpcyByb3RhdGVkICovCj4gPiAr CXUzMiByb3RtZW1fc2l6ZTsKPiAKPiBEZXJpdmVkIHN0YXRlIGxpa2Ugcm90bWVtX3NpemUgbXVz dCBiZSBpbiBhIHN0cnVjdHVyZSB0aGF0IGVtYmVkcwo+IGRybV9wbGFuZV9zdGF0ZS4gSWYgeW91 IHN0b3JlIGl0IGluIHRoZSBvYmplY3Qgc3RydWN0dXJlIGl0c2VsZiB0aGlzIHdpbGwKPiBicmVh ayBURVNUX09OTFkgYXRvbWljIGNvbW1pdHMuIE9idmlvdXNseSBhbHNvIG5lZWQgdG8gYWRqdXN0 IHRoZQo+IGF0b21pY19jaGVjayBjb2RlLgoKR29vZCBwb2ludCEgVGhhdCBtZWFucyBJIG5lZWQg bXkgc3RhdGUgYWxsb2NhdG9yIDooCgpXaWxsIG1ha2UgdGhlIGNoYW5nZS4KCj4gCj4gPiArfTsK PiA+ICsKPiA+ICsjZGVmaW5lIHRvX21hbGlkcF9wbGFuZSh4KSBjb250YWluZXJfb2YoeCwgc3Ry dWN0IG1hbGlkcF9wbGFuZSwgYmFzZSkKPiA+ICsKPiA+ICtpbnQgbWFsaWRwX2RlX3BsYW5lc19p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ID4gK3ZvaWQgbWFsaWRwX2RlX3BsYW5lc19k ZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ID4gK2ludCBtYWxpZHBfY3J0Y19pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ID4gKwo+ID4gKy8qIG9mdGVuIHVzZWQgY29tYmlu YXRpb24gb2Ygcm90YXRpb25hbCBiaXRzICovCj4gPiArI2RlZmluZSBNQUxJRFBfUk9UQVRFRF9N QVNLCShCSVQoRFJNX1JPVEFURV85MCkgfCBCSVQoRFJNX1JPVEFURV8yNzApKQo+ID4gKwo+ID4g KyNlbmRpZiAgLyogX19NQUxJRFBfRFJWX0hfXyAqLwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hcm0vbWFsaWRwX2h3LmMgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9ody5j Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uYTYxMzJmMQo+ID4g LS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfaHcuYwo+ ID4gQEAgLTAsMCArMSw2OTEgQEAKPiA+ICsvKgo+ID4gKyAqIChDKSBDT1BZUklHSFQgMjAxNiBB Uk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiA+ICsgKiBBdXRob3I6IExpdml1IER1 ZGF1IDxMaXZpdS5EdWRhdUBhcm0uY29tPgo+ID4gKyAqCj4gPiArICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmUgYW5kIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2Yg dGhlCj4gPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQo+ID4gKyAqIEZvdW5kYXRpb24sIGFuZCBhbnkgdXNl IGJ5IHlvdSBvZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMKPiA+ICsgKiBv ZiBzdWNoIEdOVSBsaWNlbmNlLgo+ID4gKyAqCj4gPiArICogQVJNIE1hbGkgRFA1MDAvRFA1NTAv RFA2NTAgaGFyZHdhcmUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLiBUaGlzIGlzIHdoZXJlCj4gPiAr ICogdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB2YXJpb3VzIHZlcnNpb25zIG9mIHRoZSBoYXJkd2Fy ZSBpcyBiZWluZyBkZWFsdCB3aXRoCj4gPiArICogaW4gYW4gYXR0ZW1wdCB0byBwcm92aWRlIHRv IHRoZSByZXN0IG9mIHRoZSBkcml2ZXIgY29kZSBhIHVuaWZpZWQgdmlldwo+ID4gKyAqLwo+ID4g Kwo+ID4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9pby5o Pgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ID4gKyNpbmNsdWRlIDx2aWRlby92aWRlb21v ZGUuaD4KPiA+ICsjaW5jbHVkZSA8dmlkZW8vZGlzcGxheV90aW1pbmcuaD4KPiA+ICsKPiA+ICsj aW5jbHVkZSAibWFsaWRwX2Rydi5oIgo+ID4gKyNpbmNsdWRlICJtYWxpZHBfaHcuaCIKPiA+ICsK PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1hbGlkcF9pbnB1dF9mb3JtYXQgbWFsaWRwNTAwX2Rl X2Zvcm1hdHNbXSA9IHsKPiA+ICsJLyogICAgZm91cmNjLCAgIGxheWVycyBzdXBwb3J0aW5nIHRo ZSBmb3JtYXQsICAgICBpbnRlcm5hbCBpZCAgKi8KPiA+ICsJeyBEUk1fRk9STUFUX0FSR0IyMTAx MDEwLCBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQSElDUzIsICAwIH0sCj4gPiAr CXsgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVf R1JBUEhJQ1MyLCAgMSB9LAo+ID4gKwl7IERSTV9GT1JNQVRfQVJHQjg4ODgsIERFX1ZJREVPMSB8 IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDIgfSwKPiA+ICsJeyBEUk1fRk9STUFUX0FC R1I4ODg4LCBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQSElDUzIsICAzIH0sCj4g PiArCXsgRFJNX0ZPUk1BVF9YUkdCODg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVf R1JBUEhJQ1MyLCAgNCB9LAo+ID4gKwl7IERSTV9GT1JNQVRfWEJHUjg4ODgsIERFX1ZJREVPMSB8 IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDUgfSwKPiA+ICsJeyBEUk1fRk9STUFUX1JH Qjg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgNiB9LAo+ID4g Kwl7IERSTV9GT1JNQVRfQkdSODg4LCBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQ SElDUzIsICA3IH0sCj4gPiArCXsgRFJNX0ZPUk1BVF9SR0JBNTU1MSwgREVfVklERU8xIHwgREVf R1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgOCB9LAo+ID4gKwl7IERSTV9GT1JNQVRfQUJHUjE1 NTUsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDkgfSwKPiA+ICsJ eyBEUk1fRk9STUFUX1JHQjU2NSwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJ Q1MyLCAxMCB9LAo+ID4gKwl7IERSTV9GT1JNQVRfQkdSNTY1LCBERV9WSURFTzEgfCBERV9HUkFQ SElDUzEgfCBERV9HUkFQSElDUzIsIDExIH0sCj4gPiArCXsgRFJNX0ZPUk1BVF9VWVZZLCBERV9W SURFTzEsIDEyIH0sCj4gPiArCXsgRFJNX0ZPUk1BVF9ZVVlWLCBERV9WSURFTzEsIDEzIH0sCj4g PiArCXsgRFJNX0ZPUk1BVF9OVjEyLCBERV9WSURFTzEsIDE0IH0sCj4gPiArCXsgRFJNX0ZPUk1B VF9ZVVY0MjAsIERFX1ZJREVPMSwgMTUgfSwKPiA+ICt9Owo+ID4gKwo+ID4gKyNkZWZpbmUgTUFM SURQX0lEKF9fZ3JvdXAsIF9fZm9ybWF0KSBcCj4gPiArCSgoKChfX2dyb3VwKSAmIDB4NykgPDwg MykgfCAoKF9fZm9ybWF0KSAmIDB4NykpCj4gPiArCj4gPiArI2RlZmluZSBNQUxJRFBfQ09NTU9O X0ZPUk1BVFMgXAo+ID4gKwkvKiAgICBmb3VyY2MsICAgbGF5ZXJzIHN1cHBvcnRpbmcgdGhlIGZv cm1hdCwgICAgICBpbnRlcm5hbCBpZCAgICovIFwKPiA+ICsJeyBEUk1fRk9STUFUX0FSR0IyMTAx MDEwLCBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCgwLCAw KSB9LCBcCj4gPiArCXsgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCwgREVfVklERU8xIHwgREVfR1JB UEhJQ1MxIHwgREVfVklERU8yLCBNQUxJRFBfSUQoMCwgMSkgfSwgXAo+ID4gKwl7IERSTV9GT1JN QVRfUkdCQTEwMTAxMDIsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwgTUFM SURQX0lEKDAsIDIpIH0sIFwKPiA+ICsJeyBEUk1fRk9STUFUX0JHUkExMDEwMTAyLCBERV9WSURF TzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCgwLCAzKSB9LCBcCj4gPiAr CXsgRFJNX0ZPUk1BVF9BUkdCODg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklE RU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgxLCAwKSB9LCBcCj4gPiArCXsgRFJNX0ZPUk1BVF9B QkdSODg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQs IE1BTElEUF9JRCgxLCAxKSB9LCBcCj4gPiArCXsgRFJNX0ZPUk1BVF9SR0JBODg4OCwgREVfVklE RU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgxLCAy KSB9LCBcCj4gPiArCXsgRFJNX0ZPUk1BVF9CR1JBODg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJ Q1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgxLCAzKSB9LCBcCj4gPiArCXsg RFJNX0ZPUk1BVF9YUkdCODg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8y IHwgREVfU01BUlQsIE1BTElEUF9JRCgyLCAwKSB9LCBcCj4gPiArCXsgRFJNX0ZPUk1BVF9YQkdS ODg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1B TElEUF9JRCgyLCAxKSB9LCBcCj4gPiArCXsgRFJNX0ZPUk1BVF9SR0JYODg4OCwgREVfVklERU8x IHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgyLCAyKSB9 LCBcCj4gPiArCXsgRFJNX0ZPUk1BVF9CR1JYODg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1Mx IHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgyLCAzKSB9LCBcCj4gPiArCXsgRFJN X0ZPUk1BVF9SR0I4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwgTUFM SURQX0lEKDMsIDApIH0sIFwKPiA+ICsJeyBEUk1fRk9STUFUX0JHUjg4OCwgREVfVklERU8xIHwg REVfR1JBUEhJQ1MxIHwgREVfVklERU8yLCBNQUxJRFBfSUQoMywgMSkgfSwgXAo+ID4gKwl7IERS TV9GT1JNQVRfUkdCQTU1NTEsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwg TUFMSURQX0lEKDQsIDApIH0sIFwKPiA+ICsJeyBEUk1fRk9STUFUX0FCR1IxNTU1LCBERV9WSURF TzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg0LCAxKSB9LCBcCj4gPiAr CXsgRFJNX0ZPUk1BVF9SR0I1NjUsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVP MiwgTUFMSURQX0lEKDQsIDIpIH0sIFwKPiA+ICsJeyBEUk1fRk9STUFUX0JHUjU2NSwgREVfVklE RU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yLCBNQUxJRFBfSUQoNCwgMykgfSwgXAo+ID4g Kwl7IERSTV9GT1JNQVRfWVVZViwgREVfVklERU8xIHwgREVfVklERU8yLCBNQUxJRFBfSUQoNSwg MikgfSwJXAo+ID4gKwl7IERSTV9GT1JNQVRfVVlWWSwgREVfVklERU8xIHwgREVfVklERU8yLCBN QUxJRFBfSUQoNSwgMykgfSwJXAo+ID4gKwl7IERSTV9GT1JNQVRfTlYxMiwgREVfVklERU8xIHwg REVfVklERU8yLCBNQUxJRFBfSUQoNSwgNikgfSwJXAo+ID4gKwl7IERSTV9GT1JNQVRfWVVWNDIw LCBERV9WSURFTzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg1LCA3KSB9Cj4gPiArCj4gPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBtYWxpZHBfaW5wdXRfZm9ybWF0IG1hbGlkcDU1MF9kZV9mb3JtYXRz W10gPSB7Cj4gPiArCU1BTElEUF9DT01NT05fRk9STUFUUywKPiA+ICt9Owo+ID4gKwo+ID4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgbWFsaWRwX2xheWVyIG1hbGlkcDUwMF9sYXllcnNbXSA9IHsKPiA+ ICsJeyBERV9WSURFTzEsIE1BTElEUDUwMF9ERV9MVl9CQVNFLCBNQUxJRFA1MDBfREVfTFZfUFRS X0JBU0UgfSwKPiA+ICsJeyBERV9HUkFQSElDUzEsIE1BTElEUDUwMF9ERV9MRzFfQkFTRSwgTUFM SURQNTAwX0RFX0xHMV9QVFJfQkFTRSB9LAo+ID4gKwl7IERFX0dSQVBISUNTMiwgTUFMSURQNTAw X0RFX0xHMl9CQVNFLCBNQUxJRFA1MDBfREVfTEcyX1BUUl9CQVNFIH0sCj4gPiArfTsKPiA+ICsK PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1hbGlkcF9sYXllciBtYWxpZHA1NTBfbGF5ZXJzW10g PSB7Cj4gPiArCXsgREVfVklERU8xLCBNQUxJRFA1NTBfREVfTFYxX0JBU0UsIE1BTElEUDU1MF9E RV9MVjFfUFRSX0JBU0UgfSwKPiA+ICsJeyBERV9HUkFQSElDUzEsIE1BTElEUDU1MF9ERV9MR19C QVNFLCBNQUxJRFA1NTBfREVfTEdfUFRSX0JBU0UgfSwKPiA+ICsJeyBERV9WSURFTzIsIE1BTElE UDU1MF9ERV9MVjJfQkFTRSwgTUFMSURQNTUwX0RFX0xWMl9QVFJfQkFTRSB9LAo+ID4gKwl7IERF X1NNQVJULCBNQUxJRFA1NTBfREVfTFNfQkFTRSwgTUFMSURQNTUwX0RFX0xTX1BUUl9CQVNFIH0s Cj4gPiArfTsKPiA+ICsKPiA+ICsjZGVmaW5lIE1BTElEUF9ERV9ERUZBVUxUX1BSRUZFVENIX1NU QVJUCTUKPiA+ICsKPiA+ICtzdGF0aWMgaW50IG1hbGlkcDUwMF9xdWVyeV9odyhzdHJ1Y3QgbWFs aWRwX2h3X2RldmljZSAqaHdkZXYpCj4gPiArewo+ID4gKwl1MzIgY29uZiA9IG1hbGlkcF9od19y ZWFkKGh3ZGV2LCBNQUxJRFA1MDBfQ09ORklHX0lEKTsKPiA+ICsJLyogYml0IDQgb2YgdGhlIENP TkZJR19JRCByZWdpc3RlciBob2xkcyB0aGUgbGluZSBzaXplIG11bHRpcGxpZXIgKi8KPiA+ICsJ dTggbG5fc2l6ZV9tdWx0ID0gY29uZiAmIDB4MTAgPyAyIDogMTsKPiA+ICsKPiA+ICsJaHdkZXYt Pm1pbl9saW5lX3NpemUgPSAyOwo+ID4gKwlod2Rldi0+bWF4X2xpbmVfc2l6ZSA9IFNaXzJLICog bG5fc2l6ZV9tdWx0Owo+ID4gKwlod2Rldi0+cm90YXRpb25fbWVtb3J5WzBdID0gU1pfMUsgKiA2 NCAqIGxuX3NpemVfbXVsdDsKPiA+ICsJaHdkZXYtPnJvdGF0aW9uX21lbW9yeVsxXSA9IDA7IC8q IG5vIHNlY29uZCByb3RhdGlvbiBtZW1vcnkgYmFuayAqLwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbWFsaWRwNTAwX2VudGVyX2NvbmZpZ19tb2Rl KHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKPiA+ICt7Cj4gPiArCXUzMiBzdGF0dXMs IGNvdW50ID0gMTAwOwo+ID4gKwo+ID4gKwltYWxpZHBfaHdfc2V0Yml0cyhod2RldiwgTUFMSURQ NTAwX0RDX0NPTkZJR19SRVEsIE1BTElEUDUwMF9EQ19DT05UUk9MKTsKPiA+ICsJd2hpbGUgKGNv dW50KSB7Cj4gPiArCQlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5k Y19iYXNlICsgTUFMSURQX1JFR19TVEFUVVMpOwo+ID4gKwkJaWYgKChzdGF0dXMgJiBNQUxJRFA1 MDBfRENfQ09ORklHX1JFUSkgPT0gTUFMSURQNTAwX0RDX0NPTkZJR19SRVEpCj4gPiArCQkJYnJl YWs7Cj4gPiArCQkvKgo+ID4gKwkJICogZW50ZXJpbmcgY29uZmlnIG1vZGUgY2FuIHRha2UgYXMg bG9uZyBhcyB0aGUgcmVuZGVyaW5nCj4gPiArCQkgKiBvZiBhIGZ1bGwgZnJhbWUsIGhlbmNlIHRo ZSBsb25nIHNsZWVwIGhlcmUKPiA+ICsJCSAqLwo+ID4gKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDEw MDAwKTsKPiA+ICsJCWNvdW50LS07Cj4gPiArCX0KPiA+ICsJV0FSTihjb3VudCA9PSAwLCAidGlt ZW91dCB3aGlsZSBlbnRlcmluZyBjb25maWcgbW9kZSIpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgdm9pZCBtYWxpZHA1MDBfbGVhdmVfY29uZmlnX21vZGUoc3RydWN0IG1hbGlkcF9od19kZXZp Y2UgKmh3ZGV2KQo+ID4gK3sKPiA+ICsJdTMyIHN0YXR1cywgY291bnQgPSAxMDA7Cj4gPiArCj4g PiArCW1hbGlkcF9od19jbGVhcmJpdHMoaHdkZXYsIE1BTElEUDUwMF9EQ19DT05GSUdfUkVRLCBN QUxJRFA1MDBfRENfQ09OVFJPTCk7Cj4gPiArCXdoaWxlIChjb3VudCkgewo+ID4gKwkJc3RhdHVz ID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuZGNfYmFzZSArIE1BTElEUF9SRUdf U1RBVFVTKTsKPiA+ICsJCWlmICgoc3RhdHVzICYgTUFMSURQNTAwX0RDX0NPTkZJR19SRVEpID09 IDApCj4gPiArCQkJYnJlYWs7Cj4gPiArCQl1c2xlZXBfcmFuZ2UoMTAwLCAxMDAwKTsKPiA+ICsJ CWNvdW50LS07Cj4gPiArCX0KPiA+ICsJV0FSTihjb3VudCA9PSAwLCAidGltZW91dCB3aGlsZSBs ZWF2aW5nIGNvbmZpZyBtb2RlIik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBib29sIG1hbGlk cDUwMF9pbl9jb25maWdfbW9kZShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCj4gPiAr ewo+ID4gKwl1MzIgc3RhdHVzOwo+ID4gKwo+ID4gKwlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZCho d2RldiwgaHdkZXYtPm1hcC5kY19iYXNlICsgTUFMSURQX1JFR19TVEFUVVMpOwo+ID4gKwlpZiAo KHN0YXR1cyAmIE1BTElEUDUwMF9EQ19DT05GSUdfUkVRKSA9PSBNQUxJRFA1MDBfRENfQ09ORklH X1JFUSkKPiA+ICsJCXJldHVybiB0cnVlOwo+ID4gKwo+ID4gKwlyZXR1cm4gZmFsc2U7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG1hbGlkcDUwMF9zZXRfY29uZmlnX3ZhbGlkKHN0cnVj dCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKPiA+ICt7Cj4gPiArCW1hbGlkcF9od19zZXRiaXRz KGh3ZGV2LCBNQUxJRFBfQ0ZHX1ZBTElELCBNQUxJRFA1MDBfQ09ORklHX1ZBTElEKTsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbWFsaWRwNTAwX21vZGVzZXQoc3RydWN0IG1hbGlkcF9o d19kZXZpY2UgKmh3ZGV2LCBzdHJ1Y3QgdmlkZW9tb2RlICptb2RlKQo+ID4gK3sKPiA+ICsJdTMy IHZhbCA9IDA7Cj4gPiArCj4gPiArCW1hbGlkcF9od19jbGVhcmJpdHMoaHdkZXYsIE1BTElEUDUw MF9EQ19DTEVBUl9NQVNLLCBNQUxJRFA1MDBfRENfQ09OVFJPTCk7Cj4gPiArCWlmIChtb2RlLT5m bGFncyAmIERJU1BMQVlfRkxBR1NfSFNZTkNfSElHSCkKPiA+ICsJCXZhbCB8PSBNQUxJRFA1MDBf SFNZTkNQT0w7Cj4gPiArCWlmIChtb2RlLT5mbGFncyAmIERJU1BMQVlfRkxBR1NfVlNZTkNfSElH SCkKPiA+ICsJCXZhbCB8PSBNQUxJRFA1MDBfVlNZTkNQT0w7Cj4gPiArCXZhbCB8PSBNQUxJRFBf REVfREVGQVVMVF9QUkVGRVRDSF9TVEFSVDsKPiA+ICsJbWFsaWRwX2h3X3NldGJpdHMoaHdkZXYs IHZhbCwgTUFMSURQNTAwX0RDX0NPTlRST0wpOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBNYWxp LURQNTAwIGVuY29kZXMgdGhlIGJhY2tncm91bmQgY29sb3IgbGlrZSB0aGlzOgo+ID4gKwkgKiAg ICAtIHJlZCAgIEAgTUFMSURQNTAwX0JHTkRfQ09MT1JbMTI6MF0KPiA+ICsJICogICAgLSBncmVl biBAIE1BTElEUDUwMF9CR05EX0NPTE9SWzI3OjE2XQo+ID4gKwkgKiAgICAtIGJsdWUgIEAgKE1B TElEUDUwMF9CR05EX0NPTE9SICsgNClbMTI6MF0KPiA+ICsJICovCj4gPiArCXZhbCA9ICgoTUFM SURQX0JHTkRfQ09MT1JfRyAmIDB4ZmZmKSA8PCAxNikgfAo+ID4gKwkgICAgICAoTUFMSURQX0JH TkRfQ09MT1JfUiAmIDB4ZmZmKTsKPiA+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1B TElEUDUwMF9CR05EX0NPTE9SKTsKPiA+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCBNQUxJRFBf QkdORF9DT0xPUl9CLCBNQUxJRFA1MDBfQkdORF9DT0xPUiArIDQpOwo+ID4gKwo+ID4gKwl2YWwg PSBNQUxJRFBfREVfSF9GUk9OVFBPUkNIKG1vZGUtPmhmcm9udF9wb3JjaCkgfAo+ID4gKwkJTUFM SURQX0RFX0hfQkFDS1BPUkNIKG1vZGUtPmhiYWNrX3BvcmNoKTsKPiA+ICsJbWFsaWRwX2h3X3dy aXRlKGh3ZGV2LCB2YWwsIE1BTElEUDUwMF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfSF9USU1J TkdTKTsKPiA+ICsKPiA+ICsJdmFsID0gTUFMSURQNTAwX0RFX1ZfRlJPTlRQT1JDSChtb2RlLT52 ZnJvbnRfcG9yY2gpIHwKPiA+ICsJCU1BTElEUF9ERV9WX0JBQ0tQT1JDSChtb2RlLT52YmFja19w b3JjaCk7Cj4gPiArCW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1MDBfVElNSU5H U19CQVNFICsgTUFMSURQX0RFX1ZfVElNSU5HUyk7Cj4gPiArCj4gPiArCXZhbCA9IE1BTElEUF9E RV9IX1NZTkNXSURUSChtb2RlLT5oc3luY19sZW4pIHwKPiA+ICsJCU1BTElEUF9ERV9WX1NZTkNX SURUSChtb2RlLT52c3luY19sZW4pOwo+ID4gKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZhbCwg TUFMSURQNTAwX1RJTUlOR1NfQkFTRSArIE1BTElEUF9ERV9TWU5DX1dJRFRIKTsKPiA+ICsKPiA+ ICsJdmFsID0gTUFMSURQX0RFX0hfQUNUSVZFKG1vZGUtPmhhY3RpdmUpIHwgTUFMSURQX0RFX1Zf QUNUSVZFKG1vZGUtPnZhY3RpdmUpOwo+ID4gKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZhbCwg TUFMSURQNTAwX1RJTUlOR1NfQkFTRSArIE1BTElEUF9ERV9IVl9BQ1RJVkUpOwo+ID4gKwo+ID4g KwlpZiAobW9kZS0+ZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX0lOVEVSTEFDRUQpCj4gPiArCQltYWxp ZHBfaHdfc2V0Yml0cyhod2RldiwgTUFMSURQX0RJU1BfRlVOQ19JTEFDRUQsIE1BTElEUF9ERV9E SVNQTEFZX0ZVTkMpOwo+ID4gKwllbHNlCj4gPiArCQltYWxpZHBfaHdfY2xlYXJiaXRzKGh3ZGV2 LCBNQUxJRFBfRElTUF9GVU5DX0lMQUNFRCwgTUFMSURQX0RFX0RJU1BMQVlfRlVOQyk7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbWFsaWRwNTAwX3JvdG1lbV9yZXF1aXJlZChzdHJ1Y3Qg bWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHUxNiB3LCB1MTYgaCwgdTMyIGZtdCkKPiA+ICt7Cj4g PiArCXVuc2lnbmVkIGludCBkZXB0aDsKPiA+ICsJaW50IGJwcDsKPiA+ICsKPiA+ICsJLyogUkdC ODg4IG9yIEJHUjg4OCBjYW4ndCBiZSByb3RhdGVkICovCj4gPiArCWlmICgoZm10ID09IERSTV9G T1JNQVRfUkdCODg4KSB8fCAoZm10ID09IERSTV9GT1JNQVRfQkdSODg4KSkKPiA+ICsJCXJldHVy biAtRUlOVkFMOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBFYWNoIGxheWVyIG5lZWRzIGVub3Vn aCByb3RhdGlvbiBtZW1vcnkgdG8gZml0IDggbGluZXMKPiA+ICsJICogd29ydGggb2YgcGl4ZWwg ZGF0YS4gUmVxdWlyZWQgc2l6ZSBpcyB0aGVuOgo+ID4gKwkgKiAgICBzaXplID0gcm90YXRlZF93 aWR0aCAqIChicHAgLyA4KSAqIDg7Cj4gPiArCSAqLwo+ID4gKwlkcm1fZmJfZ2V0X2JwcF9kZXB0 aChmbXQsICZkZXB0aCwgJmJwcCk7Cj4gPiArCj4gPiArCXJldHVybiB3ICogYnBwOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgaW50IG1hbGlkcDU1MF9xdWVyeV9odyhzdHJ1Y3QgbWFsaWRwX2h3 X2RldmljZSAqaHdkZXYpCj4gPiArewo+ID4gKwl1MzIgY29uZiA9IG1hbGlkcF9od19yZWFkKGh3 ZGV2LCBNQUxJRFA1NTBfQ09ORklHX0lEKTsKPiA+ICsJdTggbG5fc2l6ZSA9IChjb25mID4+IDQp ICYgMHgzLCByc2l6ZTsKPiA+ICsKPiA+ICsJaHdkZXYtPm1pbl9saW5lX3NpemUgPSAyOwo+ID4g Kwo+ID4gKwlzd2l0Y2ggKGxuX3NpemUpIHsKPiA+ICsJY2FzZSAwOgo+ID4gKwkJaHdkZXYtPm1h eF9saW5lX3NpemUgPSBTWl8ySzsKPiA+ICsJCS8qIHR3byBiYW5rcyBvZiA2NEtCIGZvciByb3Rh dGlvbiBtZW1vcnkgKi8KPiA+ICsJCXJzaXplID0gNjQ7Cj4gPiArCQlicmVhazsKPiA+ICsJY2Fz ZSAxOgo+ID4gKwkJaHdkZXYtPm1heF9saW5lX3NpemUgPSBTWl80SzsKPiA+ICsJCS8qIHR3byBi YW5rcyBvZiAxMjhLQiBmb3Igcm90YXRpb24gbWVtb3J5ICovCj4gPiArCQlyc2l6ZSA9IDEyODsK PiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIDI6Cj4gPiArCQlod2Rldi0+bWF4X2xpbmVfc2l6ZSA9 IDEyODA7Cj4gPiArCQkvKiB0d28gYmFua3Mgb2YgNDBLQiBmb3Igcm90YXRpb24gbWVtb3J5ICov Cj4gPiArCQlyc2l6ZSA9IDQwOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgMzoKPiA+ICsJCS8q IHJlc2VydmVkIHZhbHVlICovCj4gPiArCQlod2Rldi0+bWF4X2xpbmVfc2l6ZSA9IDA7Cj4gPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlod2Rldi0+cm90YXRpb25fbWVt b3J5WzBdID0gaHdkZXYtPnJvdGF0aW9uX21lbW9yeVsxXSA9IHJzaXplICogU1pfMUs7Cj4gPiAr CXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBtYWxpZHA1NTBfZW50ZXJf Y29uZmlnX21vZGUoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KQo+ID4gK3sKPiA+ICsJ dTMyIHN0YXR1cywgY291bnQgPSAxMDA7Cj4gPiArCj4gPiArCW1hbGlkcF9od19zZXRiaXRzKGh3 ZGV2LCBNQUxJRFA1NTBfRENfQ09ORklHX1JFUSwgTUFMSURQNTUwX0RDX0NPTlRST0wpOwo+ID4g Kwl3aGlsZSAoY291bnQpIHsKPiA+ICsJCXN0YXR1cyA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBo d2Rldi0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfUkVHX1NUQVRVUyk7Cj4gPiArCQlpZiAoKHN0YXR1 cyAmIE1BTElEUDU1MF9EQ19DT05GSUdfUkVRKSA9PSBNQUxJRFA1NTBfRENfQ09ORklHX1JFUSkK PiA+ICsJCQlicmVhazsKPiA+ICsJCS8qCj4gPiArCQkgKiBlbnRlcmluZyBjb25maWcgbW9kZSBj YW4gdGFrZSBhcyBsb25nIGFzIHRoZSByZW5kZXJpbmcKPiA+ICsJCSAqIG9mIGEgZnVsbCBmcmFt ZSwgaGVuY2UgdGhlIGxvbmcgc2xlZXAgaGVyZQo+ID4gKwkJICovCj4gPiArCQl1c2xlZXBfcmFu Z2UoMTAwMCwgMTAwMDApOwo+ID4gKwkJY291bnQtLTsKPiA+ICsJfQo+ID4gKwlXQVJOKGNvdW50 ID09IDAsICJ0aW1lb3V0IHdoaWxlIGVudGVyaW5nIGNvbmZpZyBtb2RlIik7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyB2b2lkIG1hbGlkcDU1MF9sZWF2ZV9jb25maWdfbW9kZShzdHJ1Y3QgbWFs aWRwX2h3X2RldmljZSAqaHdkZXYpCj4gPiArewo+ID4gKwl1MzIgc3RhdHVzLCBjb3VudCA9IDEw MDsKPiA+ICsKPiA+ICsJbWFsaWRwX2h3X2NsZWFyYml0cyhod2RldiwgTUFMSURQNTUwX0RDX0NP TkZJR19SRVEsIE1BTElEUDU1MF9EQ19DT05UUk9MKTsKPiA+ICsJd2hpbGUgKGNvdW50KSB7Cj4g PiArCQlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5kY19iYXNlICsg TUFMSURQX1JFR19TVEFUVVMpOwo+ID4gKwkJaWYgKChzdGF0dXMgJiBNQUxJRFA1NTBfRENfQ09O RklHX1JFUSkgPT0gMCkKPiA+ICsJCQlicmVhazsKPiA+ICsJCXVzbGVlcF9yYW5nZSgxMDAsIDEw MDApOwo+ID4gKwkJY291bnQtLTsKPiA+ICsJfQo+ID4gKwlXQVJOKGNvdW50ID09IDAsICJ0aW1l b3V0IHdoaWxlIGxlYXZpbmcgY29uZmlnIG1vZGUiKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IGJvb2wgbWFsaWRwNTUwX2luX2NvbmZpZ19tb2RlKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpo d2RldikKPiA+ICt7Cj4gPiArCXUzMiBzdGF0dXM7Cj4gPiArCj4gPiArCXN0YXR1cyA9IG1hbGlk cF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfUkVHX1NUQVRVUyk7 Cj4gPiArCWlmICgoc3RhdHVzICYgTUFMSURQNTUwX0RDX0NPTkZJR19SRVEpID09IE1BTElEUDU1 MF9EQ19DT05GSUdfUkVRKQo+ID4gKwkJcmV0dXJuIHRydWU7Cj4gPiArCj4gPiArCXJldHVybiBm YWxzZTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbWFsaWRwNTUwX3NldF9jb25maWdf dmFsaWQoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KQo+ID4gK3sKPiA+ICsJbWFsaWRw X2h3X3NldGJpdHMoaHdkZXYsIE1BTElEUF9DRkdfVkFMSUQsIE1BTElEUDU1MF9DT05GSUdfVkFM SUQpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBtYWxpZHA1NTBfbW9kZXNldChzdHJ1 Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHN0cnVjdCB2aWRlb21vZGUgKm1vZGUpCj4gPiAr ewo+ID4gKwl1MzIgdmFsID0gTUFMSURQX0RFX0RFRkFVTFRfUFJFRkVUQ0hfU1RBUlQ7Cj4gPiAr Cj4gPiArCW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1NTBfREVfQ09OVFJPTCk7 Cj4gPiArCS8qCj4gPiArCSAqIE1hbGktRFA1NTAgYW5kIE1hbGktRFA2NTAgZW5jb2RlIHRoZSBi YWNrZ3JvdW5kIGNvbG9yIGxpa2UgdGhpczoKPiA+ICsJICogICAtIHJlZCAgIEAgTUFMSURQNTUw X0RFX0JHTkRfQ09MT1JbMjM6MTZdCj4gPiArCSAqICAgLSBncmVlbiBAIE1BTElEUDU1MF9ERV9C R05EX0NPTE9SWzE1OjhdCj4gPiArCSAqICAgLSBibHVlICBAIE1BTElEUDU1MF9ERV9CR05EX0NP TE9SWzc6MF0KPiA+ICsJICoKPiA+ICsJICogV2UgbmVlZCB0byB0cnVuY2F0ZSB0aGUgbGVhc3Qg c2lnbmlmaWNhbnQgNCBiaXRzIGZyb20gdGhlIGRlZmF1bHQKPiA+ICsJICogTUFMSURQX0JHTkRf Q09MT1JfeCB2YWx1ZXMKPiA+ICsJICovCj4gPiArCXZhbCA9ICgoKE1BTElEUF9CR05EX0NPTE9S X1IgPj4gNCkgJiAweGZmKSA8PCAxNikgfAo+ID4gKwkgICAgICAoKChNQUxJRFBfQkdORF9DT0xP Ul9HID4+IDQpICYgMHhmZikgPDwgOCkgfAo+ID4gKwkgICAgICAoKE1BTElEUF9CR05EX0NPTE9S X0IgPj4gNCkgJiAweGZmKTsKPiA+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElE UDU1MF9ERV9CR05EX0NPTE9SKTsKPiA+ICsKPiA+ICsJdmFsID0gTUFMSURQX0RFX0hfRlJPTlRQ T1JDSChtb2RlLT5oZnJvbnRfcG9yY2gpIHwKPiA+ICsJCU1BTElEUF9ERV9IX0JBQ0tQT1JDSCht b2RlLT5oYmFja19wb3JjaCk7Cj4gPiArCW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJ RFA1NTBfVElNSU5HU19CQVNFICsgTUFMSURQX0RFX0hfVElNSU5HUyk7Cj4gPiArCj4gPiArCXZh bCA9IE1BTElEUDU1MF9ERV9WX0ZST05UUE9SQ0gobW9kZS0+dmZyb250X3BvcmNoKSB8Cj4gPiAr CQlNQUxJRFBfREVfVl9CQUNLUE9SQ0gobW9kZS0+dmJhY2tfcG9yY2gpOwo+ID4gKwltYWxpZHBf aHdfd3JpdGUoaHdkZXYsIHZhbCwgTUFMSURQNTUwX1RJTUlOR1NfQkFTRSArIE1BTElEUF9ERV9W X1RJTUlOR1MpOwo+ID4gKwo+ID4gKwl2YWwgPSBNQUxJRFBfREVfSF9TWU5DV0lEVEgobW9kZS0+ aHN5bmNfbGVuKSB8Cj4gPiArCQlNQUxJRFBfREVfVl9TWU5DV0lEVEgobW9kZS0+dnN5bmNfbGVu KTsKPiA+ICsJaWYgKG1vZGUtPmZsYWdzICYgRElTUExBWV9GTEFHU19IU1lOQ19ISUdIKQo+ID4g KwkJdmFsIHw9IE1BTElEUDU1MF9IU1lOQ1BPTDsKPiA+ICsJaWYgKG1vZGUtPmZsYWdzICYgRElT UExBWV9GTEFHU19WU1lOQ19ISUdIKQo+ID4gKwkJdmFsIHw9IE1BTElEUDU1MF9WU1lOQ1BPTDsK PiA+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDU1MF9USU1JTkdTX0JBU0Ug KyBNQUxJRFBfREVfU1lOQ19XSURUSCk7Cj4gPiArCj4gPiArCXZhbCA9IE1BTElEUF9ERV9IX0FD VElWRShtb2RlLT5oYWN0aXZlKSB8IE1BTElEUF9ERV9WX0FDVElWRShtb2RlLT52YWN0aXZlKTsK PiA+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDU1MF9USU1JTkdTX0JBU0Ug KyBNQUxJRFBfREVfSFZfQUNUSVZFKTsKPiA+ICsKPiA+ICsJaWYgKG1vZGUtPmZsYWdzICYgRElT UExBWV9GTEFHU19JTlRFUkxBQ0VEKQo+ID4gKwkJbWFsaWRwX2h3X3NldGJpdHMoaHdkZXYsIE1B TElEUF9ESVNQX0ZVTkNfSUxBQ0VELCBNQUxJRFBfREVfRElTUExBWV9GVU5DKTsKPiA+ICsJZWxz ZQo+ID4gKwkJbWFsaWRwX2h3X2NsZWFyYml0cyhod2RldiwgTUFMSURQX0RJU1BfRlVOQ19JTEFD RUQsIE1BTElEUF9ERV9ESVNQTEFZX0ZVTkMpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50 IG1hbGlkcDU1MF9yb3RtZW1fcmVxdWlyZWQoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2 LCB1MTYgdywgdTE2IGgsIHUzMiBmbXQpCj4gPiArewo+ID4gKwl1MzIgYnl0ZXNfcGVyX2NvbDsK PiA+ICsKPiA+ICsJLyogcmF3IFJHQjg4OCBvciBCR1I4ODggY2FuJ3QgYmUgcm90YXRlZCAqLwo+ ID4gKwlpZiAoKGZtdCA9PSBEUk1fRk9STUFUX1JHQjg4OCkgfHwgKGZtdCA9PSBEUk1fRk9STUFU X0JHUjg4OCkpCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsJc3dpdGNoIChmbXQp IHsKPiA+ICsJLyogOCBsaW5lcyBhdCA0IGJ5dGVzIHBlciBwaXhlbCAqLwo+ID4gKwljYXNlIERS TV9GT1JNQVRfQVJHQjIxMDEwMTA6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoK PiA+ICsJY2FzZSBEUk1fRk9STUFUX1JHQkExMDEwMTAyOgo+ID4gKwljYXNlIERSTV9GT1JNQVRf QkdSQTEwMTAxMDI6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKPiA+ICsJY2FzZSBE Uk1fRk9STUFUX0FCR1I4ODg4Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6Cj4gPiAr CWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKPiA+ICsJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4 Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9S R0JYODg4ODoKPiA+ICsJY2FzZSBEUk1fRk9STUFUX0JHUlg4ODg4Ogo+ID4gKwljYXNlIERSTV9G T1JNQVRfUkdCODg4Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfQkdSODg4Ogo+ID4gKwkvKiAxNiBs aW5lcyBhdCAyIGJ5dGVzIHBlciBwaXhlbCAqLwo+ID4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTU1 NTE6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTU1NToKPiA+ICsJY2FzZSBEUk1fRk9STUFU X1JHQjU2NToKPiA+ICsJY2FzZSBEUk1fRk9STUFUX0JHUjU2NToKPiA+ICsJY2FzZSBEUk1fRk9S TUFUX1VZVlk6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgo+ID4gKwkJYnl0ZXNfcGVyX2Nv bCA9IDMyOwo+ID4gKwkJYnJlYWs7Cj4gPiArCS8qIDE2IGxpbmVzIGF0IDEuNSBieXRlcyBwZXIg cGl4ZWwgKi8KPiA+ICsJY2FzZSBEUk1fRk9STUFUX05WMTI6Cj4gPiArCWNhc2UgRFJNX0ZPUk1B VF9ZVVY0MjA6Cj4gPiArCQlieXRlc19wZXJfY29sID0gMjQ7Cj4gPiArCQlicmVhazsKPiA+ICsJ ZGVmYXVsdDoKPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVy biB3ICogYnl0ZXNfcGVyX2NvbDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBtYWxpZHA2 NTBfcXVlcnlfaHcoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KQo+ID4gK3sKPiA+ICsJ dTMyIGNvbmYgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgTUFMSURQNTUwX0NPTkZJR19JRCk7Cj4g PiArCXU4IGxuX3NpemUgPSAoY29uZiA+PiA0KSAmIDB4MywgcnNpemU7Cj4gPiArCj4gPiArCWh3 ZGV2LT5taW5fbGluZV9zaXplID0gNDsKPiA+ICsKPiA+ICsJc3dpdGNoIChsbl9zaXplKSB7Cj4g PiArCWNhc2UgMDoKPiA+ICsJY2FzZSAyOgo+ID4gKwkJLyogcmVzZXJ2ZWQgdmFsdWVzICovCj4g PiArCQlod2Rldi0+bWF4X2xpbmVfc2l6ZSA9IDA7Cj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ ICsJY2FzZSAxOgo+ID4gKwkJaHdkZXYtPm1heF9saW5lX3NpemUgPSBTWl80SzsKPiA+ICsJCS8q IHR3byBiYW5rcyBvZiAxMjhLQiBmb3Igcm90YXRpb24gbWVtb3J5ICovCj4gPiArCQlyc2l6ZSA9 IDEyODsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIDM6Cj4gPiArCQlod2Rldi0+bWF4X2xpbmVf c2l6ZSA9IDI1NjA7Cj4gPiArCQkvKiB0d28gYmFua3Mgb2YgODBLQiBmb3Igcm90YXRpb24gbWVt b3J5ICovCj4gPiArCQlyc2l6ZSA9IDgwOwo+ID4gKwl9Cj4gPiArCj4gPiArCWh3ZGV2LT5yb3Rh dGlvbl9tZW1vcnlbMF0gPSBod2Rldi0+cm90YXRpb25fbWVtb3J5WzFdID0gcnNpemUgKiBTWl8x SzsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK2NvbnN0IHN0cnVjdCBtYWxpZHBf aHdfZGV2aWNlIG1hbGlkcF9kZXZpY2VbTUFMSURQX01BWF9ERVZJQ0VTXSA9IHsKPiA+ICsJW01B TElEUF81MDBdID0gewo+ID4gKwkJLm1hcCA9IHsKPiA+ICsJCQkuc2VfYmFzZSA9IE1BTElEUDUw MF9TRV9CQVNFLAo+ID4gKwkJCS5kY19iYXNlID0gTUFMSURQNTAwX0RDX0JBU0UsCj4gPiArCQkJ Lm91dF9kZXB0aF9iYXNlID0gTUFMSURQNTAwX09VVFBVVF9ERVBUSCwKPiA+ICsJCQkuZmVhdHVy ZXMgPSAwLAkvKiBubyBDTEVBUklSUSByZWdpc3RlciAqLwo+ID4gKwkJCS5uX2xheWVycyA9IEFS UkFZX1NJWkUobWFsaWRwNTAwX2xheWVycyksCj4gPiArCQkJLmxheWVycyA9IG1hbGlkcDUwMF9s YXllcnMsCj4gPiArCQkJLmRlX2lycV9tYXAgPSB7Cj4gPiArCQkJCS5pcnFfbWFzayA9IE1BTElE UF9ERV9JUlFfVU5ERVJSVU4gfAo+ID4gKwkJCQkJICAgIE1BTElEUDUwMF9ERV9JUlFfQVhJX0VS UiB8Cj4gPiArCQkJCQkgICAgTUFMSURQNTAwX0RFX0lSUV9WU1lOQyB8Cj4gPiArCQkJCQkgICAg TUFMSURQNTAwX0RFX0lSUV9HTE9CQUwsCj4gPiArCQkJCS52c3luY19pcnEgPSBNQUxJRFA1MDBf REVfSVJRX1ZTWU5DLAo+ID4gKwkJCX0sCj4gPiArCQkJLnNlX2lycV9tYXAgPSB7Cj4gPiArCQkJ CS5pcnFfbWFzayA9IE1BTElEUDUwMF9TRV9JUlFfQ09ORl9NT0RFLAo+ID4gKwkJCQkudnN5bmNf aXJxID0gMCwKPiA+ICsJCQl9LAo+ID4gKwkJCS5kY19pcnFfbWFwID0gewo+ID4gKwkJCQkuaXJx X21hc2sgPSBNQUxJRFA1MDBfREVfSVJRX0NPTkZfVkFMSUQsCj4gPiArCQkJCS52c3luY19pcnEg PSBNQUxJRFA1MDBfREVfSVJRX0NPTkZfVkFMSUQsCj4gPiArCQkJfSwKPiA+ICsJCQkuaW5wdXRf Zm9ybWF0cyA9IG1hbGlkcDUwMF9kZV9mb3JtYXRzLAo+ID4gKwkJCS5uX2lucHV0X2Zvcm1hdHMg PSBBUlJBWV9TSVpFKG1hbGlkcDUwMF9kZV9mb3JtYXRzKSwKPiA+ICsJCX0sCj4gPiArCQkucXVl cnlfaHcgPSBtYWxpZHA1MDBfcXVlcnlfaHcsCj4gPiArCQkuZW50ZXJfY29uZmlnX21vZGUgPSBt YWxpZHA1MDBfZW50ZXJfY29uZmlnX21vZGUsCj4gPiArCQkubGVhdmVfY29uZmlnX21vZGUgPSBt YWxpZHA1MDBfbGVhdmVfY29uZmlnX21vZGUsCj4gPiArCQkuaW5fY29uZmlnX21vZGUgPSBtYWxp ZHA1MDBfaW5fY29uZmlnX21vZGUsCj4gPiArCQkuc2V0X2NvbmZpZ192YWxpZCA9IG1hbGlkcDUw MF9zZXRfY29uZmlnX3ZhbGlkLAo+ID4gKwkJLm1vZGVzZXQgPSBtYWxpZHA1MDBfbW9kZXNldCwK PiA+ICsJCS5yb3RtZW1fcmVxdWlyZWQgPSBtYWxpZHA1MDBfcm90bWVtX3JlcXVpcmVkLAo+ID4g Kwl9LAo+ID4gKwlbTUFMSURQXzU1MF0gPSB7Cj4gPiArCQkubWFwID0gewo+ID4gKwkJCS5zZV9i YXNlID0gTUFMSURQNTUwX1NFX0JBU0UsCj4gPiArCQkJLmRjX2Jhc2UgPSBNQUxJRFA1NTBfRENf QkFTRSwKPiA+ICsJCQkub3V0X2RlcHRoX2Jhc2UgPSBNQUxJRFA1NTBfREVfT1VUUFVUX0RFUFRI LAo+ID4gKwkJCS5mZWF0dXJlcyA9IE1BTElEUF9SRUdNQVBfSEFTX0NMRUFSSVJRLAo+ID4gKwkJ CS5uX2xheWVycyA9IEFSUkFZX1NJWkUobWFsaWRwNTUwX2xheWVycyksCj4gPiArCQkJLmxheWVy cyA9IG1hbGlkcDU1MF9sYXllcnMsCj4gPiArCQkJLmRlX2lycV9tYXAgPSB7Cj4gPiArCQkJCS5p cnFfbWFzayA9IE1BTElEUF9ERV9JUlFfVU5ERVJSVU4gfAo+ID4gKwkJCQkJICAgIE1BTElEUDU1 MF9ERV9JUlFfVlNZTkMsCj4gPiArCQkJCS52c3luY19pcnEgPSBNQUxJRFA1NTBfREVfSVJRX1ZT WU5DLAo+ID4gKwkJCX0sCj4gPiArCQkJLnNlX2lycV9tYXAgPSB7Cj4gPiArCQkJCS5pcnFfbWFz ayA9IE1BTElEUDU1MF9TRV9JUlFfRU9XIHwKPiA+ICsJCQkJCSAgICBNQUxJRFA1NTBfU0VfSVJR X0FYSV9FUlIsCj4gPiArCQkJfSwKPiA+ICsJCQkuZGNfaXJxX21hcCA9IHsKPiA+ICsJCQkJLmly cV9tYXNrID0gTUFMSURQNTUwX0RDX0lSUV9DT05GX1ZBTElELAo+ID4gKwkJCQkudnN5bmNfaXJx ID0gTUFMSURQNTUwX0RDX0lSUV9DT05GX1ZBTElELAo+ID4gKwkJCX0sCj4gPiArCQkJLmlucHV0 X2Zvcm1hdHMgPSBtYWxpZHA1NTBfZGVfZm9ybWF0cywKPiA+ICsJCQkubl9pbnB1dF9mb3JtYXRz ID0gQVJSQVlfU0laRShtYWxpZHA1NTBfZGVfZm9ybWF0cyksCj4gPiArCQl9LAo+ID4gKwkJLnF1 ZXJ5X2h3ID0gbWFsaWRwNTUwX3F1ZXJ5X2h3LAo+ID4gKwkJLmVudGVyX2NvbmZpZ19tb2RlID0g bWFsaWRwNTUwX2VudGVyX2NvbmZpZ19tb2RlLAo+ID4gKwkJLmxlYXZlX2NvbmZpZ19tb2RlID0g bWFsaWRwNTUwX2xlYXZlX2NvbmZpZ19tb2RlLAo+ID4gKwkJLmluX2NvbmZpZ19tb2RlID0gbWFs aWRwNTUwX2luX2NvbmZpZ19tb2RlLAo+ID4gKwkJLnNldF9jb25maWdfdmFsaWQgPSBtYWxpZHA1 NTBfc2V0X2NvbmZpZ192YWxpZCwKPiA+ICsJCS5tb2Rlc2V0ID0gbWFsaWRwNTUwX21vZGVzZXQs Cj4gPiArCQkucm90bWVtX3JlcXVpcmVkID0gbWFsaWRwNTUwX3JvdG1lbV9yZXF1aXJlZCwKPiA+ ICsJfSwKPiA+ICsJW01BTElEUF82NTBdID0gewo+ID4gKwkJLm1hcCA9IHsKPiA+ICsJCQkuc2Vf YmFzZSA9IE1BTElEUDU1MF9TRV9CQVNFLAo+ID4gKwkJCS5kY19iYXNlID0gTUFMSURQNTUwX0RD X0JBU0UsCj4gPiArCQkJLm91dF9kZXB0aF9iYXNlID0gTUFMSURQNTUwX0RFX09VVFBVVF9ERVBU SCwKPiA+ICsJCQkuZmVhdHVyZXMgPSBNQUxJRFBfUkVHTUFQX0hBU19DTEVBUklSUSwKPiA+ICsJ CQkubl9sYXllcnMgPSBBUlJBWV9TSVpFKG1hbGlkcDU1MF9sYXllcnMpLAo+ID4gKwkJCS5sYXll cnMgPSBtYWxpZHA1NTBfbGF5ZXJzLAo+ID4gKwkJCS5kZV9pcnFfbWFwID0gewo+ID4gKwkJCQku aXJxX21hc2sgPSBNQUxJRFBfREVfSVJRX1VOREVSUlVOIHwKPiA+ICsJCQkJCSAgICBNQUxJRFA2 NTBfREVfSVJRX0RSSUZUIHwKPiA+ICsJCQkJCSAgICBNQUxJRFA1NTBfREVfSVJRX1ZTWU5DLAo+ ID4gKwkJCQkudnN5bmNfaXJxID0gTUFMSURQNTUwX0RFX0lSUV9WU1lOQywKPiA+ICsJCQl9LAo+ ID4gKwkJCS5zZV9pcnFfbWFwID0gewo+ID4gKwkJCQkuaXJxX21hc2sgPSBNQUxJRFA1NTBfU0Vf SVJRX0VPVyB8Cj4gPiArCQkJCQkgICAgTUFMSURQNTUwX1NFX0lSUV9BWElfRVJSLAo+ID4gKwkJ CX0sCj4gPiArCQkJLmRjX2lycV9tYXAgPSB7Cj4gPiArCQkJCS5pcnFfbWFzayA9IE1BTElEUDU1 MF9EQ19JUlFfQ09ORl9WQUxJRCwKPiA+ICsJCQkJLnZzeW5jX2lycSA9IE1BTElEUDU1MF9EQ19J UlFfQ09ORl9WQUxJRCwKPiA+ICsJCQl9LAo+ID4gKwkJCS5pbnB1dF9mb3JtYXRzID0gbWFsaWRw NTUwX2RlX2Zvcm1hdHMsCj4gPiArCQkJLm5faW5wdXRfZm9ybWF0cyA9IEFSUkFZX1NJWkUobWFs aWRwNTUwX2RlX2Zvcm1hdHMpLAo+ID4gKwkJfSwKPiA+ICsJCS5xdWVyeV9odyA9IG1hbGlkcDY1 MF9xdWVyeV9odywKPiA+ICsJCS5lbnRlcl9jb25maWdfbW9kZSA9IG1hbGlkcDU1MF9lbnRlcl9j b25maWdfbW9kZSwKPiA+ICsJCS5sZWF2ZV9jb25maWdfbW9kZSA9IG1hbGlkcDU1MF9sZWF2ZV9j b25maWdfbW9kZSwKPiA+ICsJCS5pbl9jb25maWdfbW9kZSA9IG1hbGlkcDU1MF9pbl9jb25maWdf bW9kZSwKPiA+ICsJCS5zZXRfY29uZmlnX3ZhbGlkID0gbWFsaWRwNTUwX3NldF9jb25maWdfdmFs aWQsCj4gPiArCQkubW9kZXNldCA9IG1hbGlkcDU1MF9tb2Rlc2V0LAo+ID4gKwkJLnJvdG1lbV9y ZXF1aXJlZCA9IG1hbGlkcDU1MF9yb3RtZW1fcmVxdWlyZWQsCj4gPiArCX0sCj4gPiArfTsKPiA+ ICsKPiA+ICt1OCBtYWxpZHBfaHdfZ2V0X2Zvcm1hdF9pZChjb25zdCBzdHJ1Y3QgbWFsaWRwX2h3 X3JlZ21hcCAqbWFwLAo+ID4gKwkJCSAgIHU4IGxheWVyX2lkLCB1MzIgZm9ybWF0KQo+ID4gK3sK PiA+ICsJdW5zaWduZWQgaW50IGk7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBtYXAtPm5f aW5wdXRfZm9ybWF0czsgaSsrKSB7Cj4gPiArCQlpZiAoKChtYXAtPmlucHV0X2Zvcm1hdHNbaV0u bGF5ZXIgJiBsYXllcl9pZCkgPT0gbGF5ZXJfaWQpICYmCj4gPiArCQkgICAgKG1hcC0+aW5wdXRf Zm9ybWF0c1tpXS5mb3JtYXQgPT0gZm9ybWF0KSkKPiA+ICsJCQlyZXR1cm4gbWFwLT5pbnB1dF9m b3JtYXRzW2ldLmlkOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiBNQUxJRFBfSU5WQUxJRF9G T1JNQVRfSUQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG1hbGlkcF9od19jbGVhcl9p cnEoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1OCBibG9jaywgdTMyIGlycSkKPiA+ ICt7Cj4gPiArCXUzMiBiYXNlID0gbWFsaWRwX2dldF9ibG9ja19iYXNlKGh3ZGV2LCBibG9jayk7 Cj4gPiArCj4gPiArCWlmIChod2Rldi0+bWFwLmZlYXR1cmVzICYgTUFMSURQX1JFR01BUF9IQVNf Q0xFQVJJUlEpCj4gPiArCQltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIGlycSwgYmFzZSArIE1BTElE UF9SRUdfQ0xFQVJJUlEpOwo+ID4gKwllbHNlCj4gPiArCQltYWxpZHBfaHdfd3JpdGUoaHdkZXYs IGlycSwgYmFzZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IGlycXJldHVybl90IG1hbGlkcF9kZV9pcnEoaW50IGlycSwgdm9pZCAqYXJnKQo+ID4gK3sKPiA+ ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGFyZzsKPiA+ICsJc3RydWN0IG1hbGlkcF9kcm0g Km1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNl ICpod2RldjsKPiA+ICsJY29uc3Qgc3RydWN0IG1hbGlkcF9pcnFfbWFwICpkZTsKPiA+ICsJdTMy IHN0YXR1cywgbWFzaywgZGNfc3RhdHVzOwo+ID4gKwlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9O RTsKPiA+ICsKPiA+ICsJaWYgKCFkcm0tPmRldl9wcml2YXRlKQo+ID4gKwkJcmV0dXJuIElSUV9I QU5ETEVEOwo+ID4gKwo+ID4gKwlod2RldiA9IG1hbGlkcC0+ZGV2Owo+ID4gKwlkZSA9ICZod2Rl di0+bWFwLmRlX2lycV9tYXA7Cj4gPiArCj4gPiArCS8qIGZpcnN0IGhhbmRsZSB0aGUgY29uZmln IHZhbGlkIElSUSAqLwo+ID4gKwlkY19zdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdk ZXYtPm1hcC5kY19iYXNlICsgTUFMSURQX1JFR19TVEFUVVMpOwo+ID4gKwlpZiAoZGNfc3RhdHVz ICYgaHdkZXYtPm1hcC5kY19pcnFfbWFwLnZzeW5jX2lycSkgewo+ID4gKwkJLyogd2UgaGF2ZSBh IHBhZ2UgZmxpcCBldmVudCAqLwo+ID4gKwkJYXRvbWljX3NldCgmbWFsaWRwLT5jb25maWdfdmFs aWQsIDEpOwo+ID4gKwkJbWFsaWRwX2h3X2NsZWFyX2lycShod2RldiwgTUFMSURQX0RDX0JMT0NL LCBkY19zdGF0dXMpOwo+ID4gKwkJcmV0ID0gSVJRX1dBS0VfVEhSRUFEOwo+ID4gKwl9Cj4gPiAr Cj4gPiArCXN0YXR1cyA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBNQUxJRFBfUkVHX1NUQVRVUyk7 Cj4gPiArCWlmICghKHN0YXR1cyAmIGRlLT5pcnFfbWFzaykpCj4gPiArCQlyZXR1cm4gcmV0Owo+ ID4gKwo+ID4gKwltYXNrID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIE1BTElEUF9SRUdfTUFTS0lS USk7Cj4gPiArCXN0YXR1cyAmPSBtYXNrOwo+ID4gKwlpZiAoc3RhdHVzICYgZGUtPnZzeW5jX2ly cSkKPiA+ICsJCWRybV9jcnRjX2hhbmRsZV92YmxhbmsoJm1hbGlkcC0+Y3J0Yyk7Cj4gPiArCj4g PiArCW1hbGlkcF9od19jbGVhcl9pcnEoaHdkZXYsIE1BTElEUF9ERV9CTE9DSywgc3RhdHVzKTsK PiA+ICsKPiA+ICsJcmV0dXJuIChyZXQgPT0gSVJRX05PTkUpID8gSVJRX0hBTkRMRUQgOiByZXQ7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCBtYWxpZHBfZGVfaXJxX3RocmVh ZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZGV2 aWNlICpkcm0gPSBhcmc7Cj4gPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRl dl9wcml2YXRlOwo+ID4gKwo+ID4gKwl3YWtlX3VwKCZtYWxpZHAtPndxKTsKPiA+ICsKPiA+ICsJ cmV0dXJuIElSUV9IQU5ETEVEOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgbWFsaWRwX2RlX2lycV9p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIGludCBpcnEpCj4gPiArewo+ID4gKwlzdHJ1Y3Qg bWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsJc3RydWN0IG1hbGlk cF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4g PiArCS8qIGVuc3VyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAqLwo+ID4gKwltYWxpZHBfaHdf ZGlzYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9ERV9CTE9DSywgMHhmZmZmZmZmZik7Cj4gPiArCW1h bGlkcF9od19jbGVhcl9pcnEoaHdkZXYsIE1BTElEUF9ERV9CTE9DSywgMHhmZmZmZmZmZik7Cj4g PiArCW1hbGlkcF9od19kaXNhYmxlX2lycShod2RldiwgTUFMSURQX0RDX0JMT0NLLCAweGZmZmZm ZmZmKTsKPiA+ICsJbWFsaWRwX2h3X2NsZWFyX2lycShod2RldiwgTUFMSURQX0RDX0JMT0NLLCAw eGZmZmZmZmZmKTsKPiA+ICsKPiA+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShk cm0tPmRldiwgaXJxLCBtYWxpZHBfZGVfaXJxLAo+ID4gKwkJCQkJbWFsaWRwX2RlX2lycV90aHJl YWRfaGFuZGxlciwKPiA+ICsJCQkJCUlSUUZfU0hBUkVELCAibWFsaWRwLWRlIiwgZHJtKTsKPiA+ ICsJaWYgKHJldCA8IDApIHsKPiA+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluc3RhbGwgREUg SVJRIGhhbmRsZXJcbiIpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwkv KiBmaXJzdCBlbmFibGUgdGhlIERDIGJsb2NrIElSUXMgKi8KPiA+ICsJbWFsaWRwX2h3X2VuYWJs ZV9pcnEoaHdkZXYsIE1BTElEUF9EQ19CTE9DSywKPiA+ICsJCQkgICAgIGh3ZGV2LT5tYXAuZGNf aXJxX21hcC5pcnFfbWFzayk7Cj4gPiArCj4gPiArCS8qIG5vdyBlbmFibGUgdGhlIERFIGJsb2Nr IElSUXMgKi8KPiA+ICsJbWFsaWRwX2h3X2VuYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9ERV9CTE9D SywKPiA+ICsJCQkgICAgIGh3ZGV2LT5tYXAuZGVfaXJxX21hcC5pcnFfbWFzayk7Cj4gPiArCj4g PiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIG1hbGlkcF9kZV9pcnFfZmluaShz dHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ID4gK3sKPiA+ICsJc3RydWN0IG1hbGlkcF9kcm0gKm1h bGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpo d2RldiA9IG1hbGlkcC0+ZGV2Owo+ID4gKwo+ID4gKwltYWxpZHBfaHdfZGlzYWJsZV9pcnEoaHdk ZXYsIE1BTElEUF9ERV9CTE9DSywKPiA+ICsJCQkgICAgICBod2Rldi0+bWFwLmRlX2lycV9tYXAu aXJxX21hc2spOwo+ID4gKwltYWxpZHBfaHdfZGlzYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9EQ19C TE9DSywKPiA+ICsJCQkgICAgICBod2Rldi0+bWFwLmRjX2lycV9tYXAuaXJxX21hc2spOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgbWFsaWRwX3NlX2lycShpbnQgaXJxLCB2 b2lkICphcmcpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gYXJnOwo+ID4g KwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsJc3Ry dWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gPiArCXUzMiBzdGF0 dXMsIG1hc2s7Cj4gPiArCj4gPiArCXN0YXR1cyA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBod2Rl di0+bWFwLnNlX2Jhc2UgKyBNQUxJRFBfUkVHX1NUQVRVUyk7Cj4gPiArCWlmICghKHN0YXR1cyAm IGh3ZGV2LT5tYXAuc2VfaXJxX21hcC5pcnFfbWFzaykpCj4gPiArCQlyZXR1cm4gSVJRX05PTkU7 Cj4gPiArCj4gPiArCW1hc2sgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5zZV9i YXNlICsgTUFMSURQX1JFR19NQVNLSVJRKTsKPiA+ICsJc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQo aHdkZXYsIGh3ZGV2LT5tYXAuc2VfYmFzZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKPiA+ICsJc3Rh dHVzICY9IG1hc2s7Cj4gPiArCS8qIFRvRG86IHN0YXR1cyBkZWNvZGluZyBhbmQgZmlyaW5nIHVw IG9mIFZTWU5DIGFuZCBwYWdlIGZsaXAgZXZlbnRzICovCj4gPiArCj4gPiArCW1hbGlkcF9od19j bGVhcl9pcnEoaHdkZXYsIE1BTElEUF9TRV9CTE9DSywgc3RhdHVzKTsKPiA+ICsKPiA+ICsJcmV0 dXJuIElSUV9IQU5ETEVEOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgbWFs aWRwX3NlX2lycV90aHJlYWRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCj4gPiArewo+ID4g KwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCBtYWxpZHBfc2VfaXJx X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IGlycSkKPiA+ICt7Cj4gPiArCXN0cnVj dCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ID4gKwlzdHJ1Y3QgbWFs aWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiA+ICsJaW50IHJldDsKPiA+ICsK PiA+ICsJLyogZW5zdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkICovCj4gPiArCW1hbGlkcF9o d19kaXNhYmxlX2lycShod2RldiwgTUFMSURQX1NFX0JMT0NLLCAweGZmZmZmZmZmKTsKPiA+ICsJ bWFsaWRwX2h3X2NsZWFyX2lycShod2RldiwgTUFMSURQX1NFX0JMT0NLLCAweGZmZmZmZmZmKTsK PiA+ICsKPiA+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkcm0tPmRldiwgaXJx LCBtYWxpZHBfc2VfaXJxLAo+ID4gKwkJCQkJbWFsaWRwX3NlX2lycV90aHJlYWRfaGFuZGxlciwK PiA+ICsJCQkJCUlSUUZfU0hBUkVELCAibWFsaWRwLXNlIiwgZHJtKTsKPiA+ICsJaWYgKHJldCA8 IDApIHsKPiA+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluc3RhbGwgU0UgSVJRIGhhbmRsZXJc biIpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwltYWxpZHBfaHdfZW5h YmxlX2lycShod2RldiwgTUFMSURQX1NFX0JMT0NLLAo+ID4gKwkJCSAgICAgaHdkZXYtPm1hcC5z ZV9pcnFfbWFwLmlycV9tYXNrKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ ID4gK3ZvaWQgbWFsaWRwX3NlX2lycV9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gPiAr ewo+ID4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gPiArCj4g PiArCW1hbGlkcF9od19kaXNhYmxlX2lycShod2RldiwgTUFMSURQX1NFX0JMT0NLLAo+ID4gKwkJ CSAgICAgIGh3ZGV2LT5tYXAuc2VfaXJxX21hcC5pcnFfbWFzayk7Cj4gPiArfQo+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmggYi9kcml2ZXJzL2dwdS9kcm0v YXJtL21hbGlkcF9ody5oCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAw MC4uMTQxNzQzZQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Fy bS9tYWxpZHBfaHcuaAo+ID4gQEAgLTAsMCArMSwyNDEgQEAKPiA+ICsvKgo+ID4gKyAqCj4gPiAr ICogKEMpIENPUFlSSUdIVCAyMDEzLTIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCj4gPiArICoKPiA+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMg cHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKPiA+ICsgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlCj4gPiArICogRm91bmRhdGlvbiwgYW5kIGFueSB1c2UgYnkgeW91IG9mIHRoaXMgcHJvZ3Jh bSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcwo+ID4gKyAqIG9mIHN1Y2ggR05VIGxpY2VuY2UuCj4g PiArICoKPiA+ICsgKiBBUk0gTWFsaSBEUCBoYXJkd2FyZSBtYW5pcHVsYXRpb24gcm91dGluZXMu Cj4gPiArICovCj4gPiArCj4gPiArI2lmbmRlZiBfX01BTElEUF9IV19IX18KPiA+ICsjZGVmaW5l IF9fTUFMSURQX0hXX0hfXwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KPiA+ ICsjaW5jbHVkZSAibWFsaWRwX3JlZ3MuaCIKPiA+ICsKPiA+ICtzdHJ1Y3QgdmlkZW9tb2RlOwo+ ID4gK3N0cnVjdCBjbGs7Cj4gPiArCj4gPiArLyogTWFsaSBEUCBJUCBibG9ja3MgKi8KPiA+ICtl bnVtIHsKPiA+ICsJTUFMSURQX0RFX0JMT0NLID0gMCwKPiA+ICsJTUFMSURQX1NFX0JMT0NLLAo+ ID4gKwlNQUxJRFBfRENfQkxPQ0sKPiA+ICt9Owo+ID4gKwo+ID4gKy8qIE1hbGkgRFAgbGF5ZXIg SURzICovCj4gPiArZW51bSB7Cj4gPiArCURFX1ZJREVPMSA9IEJJVCgwKSwKPiA+ICsJREVfR1JB UEhJQ1MxID0gQklUKDEpLAo+ID4gKwlERV9HUkFQSElDUzIgPSBCSVQoMiksIC8qIHVzZWQgb25s eSBpbiBEUDUwMCAqLwo+ID4gKwlERV9WSURFTzIgPSBCSVQoMyksCj4gPiArCURFX1NNQVJUID0g QklUKDQpLAo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IG1hbGlkcF9pbnB1dF9mb3JtYXQgewo+ ID4gKwl1MzIgZm9ybWF0OwkJLyogRFJNIGZvdXJjYyAqLwo+ID4gKwl1OCBsYXllcjsJCS8qIGJp dG1hc2sgb2YgbGF5ZXJzIHN1cHBvcnRpbmcgaXQgKi8KPiA+ICsJdTggaWQ7CQkJLyogdXNlZCBp bnRlcm5hbGx5ICovCj4gPiArfTsKPiA+ICsKPiA+ICsjZGVmaW5lIE1BTElEUF9JTlZBTElEX0ZP Uk1BVF9JRAkweGZmCj4gPiArCj4gPiArLyoKPiA+ICsgKiBoaWRlIHRoZSBkaWZmZXJlbmNlcyBi ZXR3ZWVuIHJlZ2lzdGVyIG1hcHMKPiA+ICsgKiBieSB1c2luZyBhIGNvbW1vbiBzdHJ1Y3R1cmUg dG8gaG9sZCB0aGUKPiA+ICsgKiBiYXNlIHJlZ2lzdGVyIG9mZnNldHMKPiA+ICsgKi8KPiA+ICsK PiA+ICtzdHJ1Y3QgbWFsaWRwX2lycV9tYXAgewo+ID4gKwl1MzIgaXJxX21hc2s7CQkvKiBtYXNr IG9mIElSUXMgdGhhdCBjYW4gYmUgZW5hYmxlZCBpbiB0aGUgYmxvY2sgKi8KPiA+ICsJdTMyIHZz eW5jX2lycTsJCS8qIElSUSBiaXQgdXNlZCBmb3Igc2lnbmFsaW5nIGR1cmluZyBWU1lOQyAqLwo+ ID4gK307Cj4gPiArCj4gPiArc3RydWN0IG1hbGlkcF9sYXllciB7Cj4gPiArCXUxNiBpZDsJCQkv KiBsYXllciBJRCAqLwo+ID4gKwl1MTYgYmFzZTsJCS8qIGFkZHJlc3Mgb2Zmc2V0IGZvciB0aGUg cmVnaXN0ZXIgYmFuayAqLwo+ID4gKwl1MTYgcHRyOwkJLyogYWRkcmVzcyBvZmZzZXQgZm9yIHRo ZSBwb2ludGVyIHJlZ2lzdGVyICovCj4gPiArfTsKPiA+ICsKPiA+ICsvKiByZWdtYXAgZmVhdHVy ZXMgKi8KPiA+ICsjZGVmaW5lIE1BTElEUF9SRUdNQVBfSEFTX0NMRUFSSVJRCSgxIDw8IDApCj4g PiArCj4gPiArc3RydWN0IG1hbGlkcF9od19yZWdtYXAgewo+ID4gKwkvKiBhZGRyZXNzIG9mZnNl dCBvZiB0aGUgREUgcmVnaXN0ZXIgYmFuayAqLwo+ID4gKwkvKiBpcyBhbHdheXMgMHgwMDAwICov Cj4gPiArCS8qIGFkZHJlc3Mgb2Zmc2V0IG9mIHRoZSBTRSByZWdpc3RlcnMgYmFuayAqLwo+ID4g Kwljb25zdCB1MTYgc2VfYmFzZTsKPiA+ICsJLyogYWRkcmVzcyBvZmZzZXQgb2YgdGhlIERDIHJl Z2lzdGVycyBiYW5rICovCj4gPiArCWNvbnN0IHUxNiBkY19iYXNlOwo+ID4gKwo+ID4gKwkvKiBh ZGRyZXNzIG9mZnNldCBmb3IgdGhlIG91dHB1dCBkZXB0aCByZWdpc3RlciAqLwo+ID4gKwljb25z dCB1MTYgb3V0X2RlcHRoX2Jhc2U7Cj4gPiArCj4gPiArCS8qIGJpdG1hcCB3aXRoIHJlZ2lzdGVy IG1hcCBmZWF0dXJlcyAqLwo+ID4gKwljb25zdCB1OCBmZWF0dXJlczsKPiA+ICsKPiA+ICsJLyog bGlzdCBvZiBzdXBwb3J0ZWQgbGF5ZXJzICovCj4gPiArCWNvbnN0IHU4IG5fbGF5ZXJzOwo+ID4g Kwljb25zdCBzdHJ1Y3QgbWFsaWRwX2xheWVyICpsYXllcnM7Cj4gPiArCj4gPiArCWNvbnN0IHN0 cnVjdCBtYWxpZHBfaXJxX21hcCBkZV9pcnFfbWFwOwo+ID4gKwljb25zdCBzdHJ1Y3QgbWFsaWRw X2lycV9tYXAgc2VfaXJxX21hcDsKPiA+ICsJY29uc3Qgc3RydWN0IG1hbGlkcF9pcnFfbWFwIGRj X2lycV9tYXA7Cj4gPiArCj4gPiArCS8qIGxpc3Qgb2Ygc3VwcG9ydGVkIGlucHV0IGZvcm1hdHMg Zm9yIGVhY2ggbGF5ZXIgKi8KPiA+ICsJY29uc3Qgc3RydWN0IG1hbGlkcF9pbnB1dF9mb3JtYXQg KmlucHV0X2Zvcm1hdHM7Cj4gPiArCWNvbnN0IHU4IG5faW5wdXRfZm9ybWF0czsKPiA+ICt9Owo+ ID4gKwo+ID4gK3N0cnVjdCBtYWxpZHBfaHdfZGV2aWNlIHsKPiA+ICsJY29uc3Qgc3RydWN0IG1h bGlkcF9od19yZWdtYXAgbWFwOwo+ID4gKwl2b2lkIF9faW9tZW0gKnJlZ3M7Cj4gPiArCj4gPiAr CS8qIEFQQiBjbG9jayAqLwo+ID4gKwlzdHJ1Y3QgY2xrICpwY2xrOwo+ID4gKwkvKiBBWEkgY2xv Y2sgKi8KPiA+ICsJc3RydWN0IGNsayAqYWNsazsKPiA+ICsJLyogbWFpbiBjbG9jayBmb3IgZGlz cGxheSBjb3JlICovCj4gPiArCXN0cnVjdCBjbGsgKm1jbGs7Cj4gPiArCS8qIHBpeGVsIGNsb2Nr IGZvciBkaXNwbGF5IGNvcmUgKi8KPiA+ICsJc3RydWN0IGNsayAqcHhsY2xrOwo+ID4gKwo+ID4g KwkvKgo+ID4gKwkgKiBWYWxpZGF0ZSB0aGUgZHJpdmVyIGluc3RhbmNlIGFnYWluc3QgdGhlIGhh cmR3YXJlIGJpdHMKPiA+ICsJICovCj4gPiArCWludCAoKnF1ZXJ5X2h3KShzdHJ1Y3QgbWFsaWRw X2h3X2RldmljZSAqaHdkZXYpOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBTZXQgdGhlIGhhcmR3 YXJlIGludG8gY29uZmlnIG1vZGUsIHJlYWR5IHRvIGFjY2VwdCBtb2RlIGNoYW5nZXMKPiA+ICsJ ICovCj4gPiArCXZvaWQgKCplbnRlcl9jb25maWdfbW9kZSkoc3RydWN0IG1hbGlkcF9od19kZXZp Y2UgKmh3ZGV2KTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogVGVsbCBoYXJkd2FyZSB0byBleGl0 IGNvbmZpZ3VyYXRpb24gbW9kZQo+ID4gKwkgKi8KPiA+ICsJdm9pZCAoKmxlYXZlX2NvbmZpZ19t b2RlKShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpOwo+ID4gKwo+ID4gKwkvKgo+ID4g KwkgKiBRdWVyeSBpZiBoYXJkd2FyZSBpcyBpbiBjb25maWd1cmF0aW9uIG1vZGUKPiA+ICsJICov Cj4gPiArCWJvb2wgKCppbl9jb25maWdfbW9kZSkoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3 ZGV2KTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogU2V0IGNvbmZpZ3VyYXRpb24gdmFsaWQgZmxh ZyBmb3IgaGFyZHdhcmUgcGFyYW1ldGVycyB0aGF0IGNhbgo+ID4gKwkgKiBiZSBjaGFuZ2VkIG91 dHNpZGUgdGhlIGNvbmZpZ3VyYXRpb24gbW9kZS4gSGFyZHdhcmUgd2lsbCB1c2UKPiA+ICsJICog dGhlIG5ldyBzZXR0aW5ncyB3aGVuIGNvbmZpZyB2YWxpZCBpcyBzZXQgYWZ0ZXIgdGhlIGVuZCBv ZiB0aGUKPiA+ICsJICogY3VycmVudCBidWZmZXIgc2Nhbm91dAo+ID4gKwkgKi8KPiA+ICsJdm9p ZCAoKnNldF9jb25maWdfdmFsaWQpKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rldik7Cj4g PiArCj4gPiArCS8qCj4gPiArCSAqIFNldCBhIG5ldyBtb2RlIGluIGhhcmR3YXJlLiBSZXF1aXJl cyB0aGUgaGFyZHdhcmUgdG8gYmUgaW4KPiA+ICsJICogY29uZmlndXJhdGlvbiBtb2RlIGJlZm9y ZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KPiA+ICsJICovCj4gPiArCXZvaWQgKCptb2Rlc2V0 KShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHN0cnVjdCB2aWRlb21vZGUgKm0pOwo+ ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBDYWxjdWxhdGUgdGhlIHJlcXVpcmVkIHJvdGF0aW9uIG1l bW9yeSBnaXZlbiB0aGUgYWN0aXZlIGFyZWEKPiA+ICsJICogYW5kIHRoZSBidWZmZXIgZm9ybWF0 Lgo+ID4gKwkgKi8KPiA+ICsJaW50ICgqcm90bWVtX3JlcXVpcmVkKShzdHJ1Y3QgbWFsaWRwX2h3 X2RldmljZSAqaHdkZXYsIHUxNiB3LCB1MTYgaCwgdTMyIGZtdCk7Cj4gPiArCj4gPiArCXU4IGZl YXR1cmVzOwo+ID4gKwo+ID4gKwl1OCBtaW5fbGluZV9zaXplOwo+ID4gKwl1MTYgbWF4X2xpbmVf c2l6ZTsKPiA+ICsKPiA+ICsJLyogc2l6ZSBvZiBtZW1vcnkgdXNlZCBmb3Igcm90YXRpbmcgbGF5 ZXJzLCB1cCB0byB0d28gYmFua3MgYXZhaWxhYmxlICovCj4gPiArCXUzMiByb3RhdGlvbl9tZW1v cnlbMl07Cj4gPiArfTsKPiA+ICsKPiA+ICsvKiBTdXBwb3J0ZWQgdmFyaWFudHMgb2YgdGhlIGhh cmR3YXJlICovCj4gPiArZW51bSB7Cj4gPiArCU1BTElEUF81MDAgPSAwLAo+ID4gKwlNQUxJRFBf NTUwLAo+ID4gKwlNQUxJRFBfNjUwLAo+ID4gKwkvKiBrZWVwIHRoZSBuZXh0IGVudHJ5IGxhc3Qg Ki8KPiA+ICsJTUFMSURQX01BWF9ERVZJQ0VTCj4gPiArfTsKPiA+ICsKPiA+ICtleHRlcm4gY29u c3Qgc3RydWN0IG1hbGlkcF9od19kZXZpY2UgbWFsaWRwX2RldmljZVtNQUxJRFBfTUFYX0RFVklD RVNdOwo+ID4gKwo+ID4gK3N0YXRpYyBpbmxpbmUgdTMyIG1hbGlkcF9od19yZWFkKHN0cnVjdCBt YWxpZHBfaHdfZGV2aWNlICpod2RldiwgdTMyIHJlZykKPiA+ICt7Cj4gPiArCXJldHVybiByZWFk bChod2Rldi0+cmVncyArIHJlZyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbmxpbmUgdm9p ZCBtYWxpZHBfaHdfd3JpdGUoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LAo+ID4gKwkJ CQkgICB1MzIgdmFsdWUsIHUzMiByZWcpCj4gPiArewo+ID4gKwl3cml0ZWwodmFsdWUsIGh3ZGV2 LT5yZWdzICsgcmVnKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlubGluZSB2b2lkIG1hbGlk cF9od19zZXRiaXRzKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwKPiA+ICsJCQkJICAg ICB1MzIgbWFzaywgdTMyIHJlZykKPiA+ICt7Cj4gPiArCXUzMiBkYXRhID0gbWFsaWRwX2h3X3Jl YWQoaHdkZXYsIHJlZyk7Cj4gPiArCj4gPiArCWRhdGEgfD0gbWFzazsKPiA+ICsJbWFsaWRwX2h3 X3dyaXRlKGh3ZGV2LCBkYXRhLCByZWcpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5l IHZvaWQgbWFsaWRwX2h3X2NsZWFyYml0cyhzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYs Cj4gPiArCQkJCSAgICAgICB1MzIgbWFzaywgdTMyIHJlZykKPiA+ICt7Cj4gPiArCXUzMiBkYXRh ID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIHJlZyk7Cj4gPiArCj4gPiArCWRhdGEgJj0gfm1hc2s7 Cj4gPiArCW1hbGlkcF9od193cml0ZShod2RldiwgZGF0YSwgcmVnKTsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGlubGluZSB1MzIgbWFsaWRwX2dldF9ibG9ja19iYXNlKHN0cnVjdCBtYWxpZHBf aHdfZGV2aWNlICpod2RldiwKPiA+ICsJCQkJCXU4IGJsb2NrKQo+ID4gK3sKPiA+ICsJc3dpdGNo IChibG9jaykgewo+ID4gKwljYXNlIE1BTElEUF9TRV9CTE9DSzoKPiA+ICsJCXJldHVybiBod2Rl di0+bWFwLnNlX2Jhc2U7Cj4gPiArCWNhc2UgTUFMSURQX0RDX0JMT0NLOgo+ID4gKwkJcmV0dXJu IGh3ZGV2LT5tYXAuZGNfYmFzZTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGlubGluZSB2b2lkIG1hbGlkcF9od19kaXNhYmxlX2lycShzdHJ1 Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsCj4gPiArCQkJCQkgdTggYmxvY2ssIHUzMiBpcnEp Cj4gPiArewo+ID4gKwl1MzIgYmFzZSA9IG1hbGlkcF9nZXRfYmxvY2tfYmFzZShod2RldiwgYmxv Y2spOwo+ID4gKwo+ID4gKwltYWxpZHBfaHdfY2xlYXJiaXRzKGh3ZGV2LCBpcnEsIGJhc2UgKyBN QUxJRFBfUkVHX01BU0tJUlEpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQg bWFsaWRwX2h3X2VuYWJsZV9pcnEoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LAo+ID4g KwkJCQkJdTggYmxvY2ssIHUzMiBpcnEpCj4gPiArewo+ID4gKwl1MzIgYmFzZSA9IG1hbGlkcF9n ZXRfYmxvY2tfYmFzZShod2RldiwgYmxvY2spOwo+ID4gKwo+ID4gKwltYWxpZHBfaHdfc2V0Yml0 cyhod2RldiwgaXJxLCBiYXNlICsgTUFMSURQX1JFR19NQVNLSVJRKTsKPiA+ICt9Cj4gPiArCj4g PiAraW50IG1hbGlkcF9kZV9pcnFfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBpbnQgaXJx KTsKPiA+ICt2b2lkIG1hbGlkcF9kZV9pcnFfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKTsK PiA+ICtpbnQgbWFsaWRwX3NlX2lycV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIGludCBp cnEpOwo+ID4gK3ZvaWQgbWFsaWRwX3NlX2lycV9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0p Owo+ID4gKwo+ID4gK3U4IG1hbGlkcF9od19nZXRfZm9ybWF0X2lkKGNvbnN0IHN0cnVjdCBtYWxp ZHBfaHdfcmVnbWFwICptYXAsCj4gPiArCQkJICAgdTggbGF5ZXJfaWQsIHUzMiBmb3JtYXQpOwo+ ID4gKwo+ID4gKy8qCj4gPiArICogYmFja2dyb3VuZCBjb2xvciBjb21wb25lbnRzIGFyZSBkZWZp bmVkIGFzIDEyYml0cyB2YWx1ZXMsCj4gPiArICogdGhleSB3aWxsIGJlIHNoaWZ0ZWQgcmlnaHQg d2hlbiBzdG9yZWQgb24gaGFyZHdhcmUgdGhhdAo+ID4gKyAqIHN1cHBvcnRzIG9ubHkgOGJpdHMg cGVyIGNoYW5uZWwKPiA+ICsgKi8KPiA+ICsjZGVmaW5lIE1BTElEUF9CR05EX0NPTE9SX1IJCTB4 MDAwCj4gPiArI2RlZmluZSBNQUxJRFBfQkdORF9DT0xPUl9HCQkweDAwMAo+ID4gKyNkZWZpbmUg TUFMSURQX0JHTkRfQ09MT1JfQgkJMHgwMDAKPiA+ICsKPiA+ICsjZW5kaWYgIC8qIF9fTUFMSURQ X0hXX0hfXyAqLwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3Bs YW5lcy5jIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcGxhbmVzLmMKPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi5mMzcxODg2Cj4gPiAtLS0gL2Rldi9udWxs Cj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9wbGFuZXMuYwo+ID4gQEAgLTAs MCArMSwyNzEgQEAKPiA+ICsvKgo+ID4gKyAqIChDKSBDT1BZUklHSFQgMjAxNiBBUk0gTGltaXRl ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiA+ICsgKiBBdXRob3I6IExpdml1IER1ZGF1IDxMaXZp dS5EdWRhdUBhcm0uY29tPgo+ID4gKyAqCj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmUgYW5kIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCj4gPiAr ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZQo+ID4gKyAqIEZvdW5kYXRpb24sIGFuZCBhbnkgdXNlIGJ5IHlvdSBv ZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMKPiA+ICsgKiBvZiBzdWNoIEdO VSBsaWNlbmNlLgo+ID4gKyAqCj4gPiArICogQVJNIE1hbGkgRFAgcGxhbmUgbWFuaXB1bGF0aW9u IHJvdXRpbmVzLgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ID4g KyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9mYl9jbWFfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIu aD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KPiA+ICsKPiA+ICsjaW5j bHVkZSAibWFsaWRwX2h3LmgiCj4gPiArI2luY2x1ZGUgIm1hbGlkcF9kcnYuaCIKPiA+ICsKPiA+ ICsvKiBMYXllciBzcGVjaWZpYyByZWdpc3RlciBvZmZzZXRzICovCj4gPiArI2RlZmluZSBNQUxJ RFBfTEFZRVJfRk9STUFUCQkweDAwMAo+ID4gKyNkZWZpbmUgTUFMSURQX0xBWUVSX0NPTlRST0wJ CTB4MDA0Cj4gPiArI2RlZmluZSAgIExBWUVSX0VOQUJMRQkJCSgxIDw8IDApCj4gPiArI2RlZmlu ZSAgIExBWUVSX1JPVF9PRkZTRVQJCTgKPiA+ICsjZGVmaW5lICAgTEFZRVJfSF9GTElQCQkJKDEg PDwgMTApCj4gPiArI2RlZmluZSAgIExBWUVSX1ZfRkxJUAkJCSgxIDw8IDExKQo+ID4gKyNkZWZp bmUgICBMQVlFUl9ST1RfTUFTSwkJKDB4ZiA8PCA4KQo+ID4gKyNkZWZpbmUgTUFMSURQX0xBWUVS X1NJWkUJCTB4MDBjCj4gPiArI2RlZmluZSAgIExBWUVSX0hfVkFMKHgpCQkoKCh4KSAmIDB4MWZm ZikgPDwgMCkKPiA+ICsjZGVmaW5lICAgTEFZRVJfVl9WQUwoeCkJCSgoKHgpICYgMHgxZmZmKSA8 PCAxNikKPiA+ICsjZGVmaW5lIE1BTElEUF9MQVlFUl9DT01QX1NJWkUJCTB4MDEwCj4gPiArI2Rl ZmluZSBNQUxJRFBfTEFZRVJfT0ZGU0VUCQkweDAxNAo+ID4gKyNkZWZpbmUgTUFMSURQX0xBWUVS X1NUUklERQkJMHgwMTgKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBtYWxpZHBfZGVfcGxhbmVfZGVz dHJveShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBtYWxpZHBf cGxhbmUgKm1wID0gdG9fbWFsaWRwX3BsYW5lKHBsYW5lKTsKPiA+ICsKPiA+ICsJaWYgKG1wLT5i YXNlLmZiKQo+ID4gKwkJZHJtX2ZyYW1lYnVmZmVyX3VucmVmZXJlbmNlKG1wLT5iYXNlLmZiKTsK PiA+ICsKPiA+ICsJZHJtX3BsYW5lX2hlbHBlcl9kaXNhYmxlKHBsYW5lKTsKPiA+ICsJZHJtX3Bs YW5lX2NsZWFudXAocGxhbmUpOwo+ID4gKwlkZXZtX2tmcmVlKHBsYW5lLT5kZXYtPmRldiwgbXAp Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBt YWxpZHBfZGVfcGxhbmVfZnVuY3MgPSB7Cj4gPiArCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWlj X2hlbHBlcl91cGRhdGVfcGxhbmUsCj4gPiArCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19o ZWxwZXJfZGlzYWJsZV9wbGFuZSwKPiA+ICsJLmRlc3Ryb3kgPSBtYWxpZHBfZGVfcGxhbmVfZGVz dHJveSwKPiA+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQsCj4gPiAr CS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGlj YXRlX3N0YXRlLAo+ID4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBl cl9wbGFuZV9kZXN0cm95X3N0YXRlLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGludCBtYWxp ZHBfZGVfcGxhbmVfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPiArCQkJCSBzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBtYWxpZHBfcGxh bmUgKm1wID0gdG9fbWFsaWRwX3BsYW5lKHBsYW5lKTsKPiA+ICsJdTggZm9ybWF0X2lkOwo+ID4g Kwl1MzIgc3JjX3csIHNyY19oOwo+ID4gKwo+ID4gKwlpZiAoIXN0YXRlLT5jcnRjIHx8ICFzdGF0 ZS0+ZmIpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJZm9ybWF0X2lkID0gbWFsaWRwX2h3 X2dldF9mb3JtYXRfaWQoJm1wLT5od2Rldi0+bWFwLCBtcC0+bGF5ZXItPmlkLAo+ID4gKwkJCQkJ ICAgIHN0YXRlLT5mYi0+cGl4ZWxfZm9ybWF0KTsKPiA+ICsJaWYgKGZvcm1hdF9pZCA9PSBNQUxJ RFBfSU5WQUxJRF9GT1JNQVRfSUQpCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsJ c3JjX3cgPSBzdGF0ZS0+c3JjX3cgPj4gMTY7Cj4gPiArCXNyY19oID0gc3RhdGUtPnNyY19oID4+ IDE2Owo+ID4gKwo+ID4gKwlpZiAoKHN0YXRlLT5jcnRjX3cgPiBtcC0+aHdkZXYtPm1heF9saW5l X3NpemUpIHx8Cj4gPiArCSAgICAoc3RhdGUtPmNydGNfaCA+IG1wLT5od2Rldi0+bWF4X2xpbmVf c2l6ZSkgfHwKPiA+ICsJICAgIChzdGF0ZS0+Y3J0Y193IDwgbXAtPmh3ZGV2LT5taW5fbGluZV9z aXplKSB8fAo+ID4gKwkgICAgKHN0YXRlLT5jcnRjX2ggPCBtcC0+aHdkZXYtPm1pbl9saW5lX3Np emUpIHx8Cj4gPiArCSAgICAoc3RhdGUtPmNydGNfdyAhPSBzcmNfdykgfHwgKHN0YXRlLT5jcnRj X2ggIT0gc3JjX2gpKQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArCS8qIHBhY2tl ZCBSR0I4ODggLyBCR1I4ODggY2FuJ3QgYmUgcm90YXRlZCBvciBmbGlwcGVkICovCj4gPiArCWlm IChzdGF0ZS0+cm90YXRpb24gIT0gQklUKERSTV9ST1RBVEVfMCkgJiYKPiA+ICsJICAgIChzdGF0 ZS0+ZmItPnBpeGVsX2Zvcm1hdCA9PSBEUk1fRk9STUFUX1JHQjg4OCB8fAo+ID4gKwkgICAgIHN0 YXRlLT5mYi0+cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfQkdSODg4KSkKPiA+ICsJCXJldHVy biAtRUlOVkFMOwo+ID4gKwo+ID4gKwltcC0+cm90bWVtX3NpemUgPSAwOwo+ID4gKwlpZiAoc3Rh dGUtPnJvdGF0aW9uICYgTUFMSURQX1JPVEFURURfTUFTSykgewo+ID4gKwkJaW50IHZhbDsKPiA+ ICsKPiA+ICsJCXZhbCA9IG1wLT5od2Rldi0+cm90bWVtX3JlcXVpcmVkKG1wLT5od2Rldiwgc3Rh dGUtPmNydGNfaCwKPiA+ICsJCQkJCQkgc3RhdGUtPmNydGNfdywKPiA+ICsJCQkJCQkgc3RhdGUt PmZiLT5waXhlbF9mb3JtYXQpOwo+ID4gKwkJaWYgKHZhbCA8IDApCj4gPiArCQkJcmV0dXJuIHZh bDsKPiA+ICsKPiA+ICsJCW1wLT5yb3RtZW1fc2l6ZSA9IHZhbDsKPiA+ICsJfQo+ID4gKwo+ID4g KwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbWFsaWRwX2RlX3BsYW5l X3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+ICsJCQkJICAgc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9nZW1fY21hX29i amVjdCAqb2JqOwo+ID4gKwlzdHJ1Y3QgbWFsaWRwX3BsYW5lICptcDsKPiA+ICsJY29uc3Qgc3Ry dWN0IG1hbGlkcF9od19yZWdtYXAgKm1hcDsKPiA+ICsJdTggZm9ybWF0X2lkOwo+ID4gKwl1MTYg cHRyOwo+ID4gKwl1MzIgZm9ybWF0LCBzcmNfdywgc3JjX2gsIGRlc3RfdywgZGVzdF9oLCB2YWwg PSAwOwo+ID4gKwlpbnQgbnVtX3BsYW5lcywgaTsKPiA+ICsKPiA+ICsJbXAgPSB0b19tYWxpZHBf cGxhbmUocGxhbmUpOwo+ID4gKwo+ID4gKwltYXAgPSAmbXAtPmh3ZGV2LT5tYXA7Cj4gPiArCWZv cm1hdCA9IHBsYW5lLT5zdGF0ZS0+ZmItPnBpeGVsX2Zvcm1hdDsKPiA+ICsJZm9ybWF0X2lkID0g bWFsaWRwX2h3X2dldF9mb3JtYXRfaWQobWFwLCBtcC0+bGF5ZXItPmlkLCBmb3JtYXQpOwo+ID4g KwludW1fcGxhbmVzID0gZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGZvcm1hdCk7Cj4gPiArCj4gPiAr CS8qIGNvbnZlcnQgc3JjIHZhbHVlcyBmcm9tIFExNiBmaXhlZCBwb2ludCB0byBpbnRlZ2VyICov Cj4gPiArCXNyY193ID0gcGxhbmUtPnN0YXRlLT5zcmNfdyA+PiAxNjsKPiA+ICsJc3JjX2ggPSBw bGFuZS0+c3RhdGUtPnNyY19oID4+IDE2Owo+ID4gKwlpZiAocGxhbmUtPnN0YXRlLT5yb3RhdGlv biAmIE1BTElEUF9ST1RBVEVEX01BU0spIHsKPiA+ICsJCWRlc3RfdyA9IHBsYW5lLT5zdGF0ZS0+ Y3J0Y19oOwo+ID4gKwkJZGVzdF9oID0gcGxhbmUtPnN0YXRlLT5jcnRjX3c7Cj4gPiArCX0gZWxz ZSB7Cj4gPiArCQlkZXN0X3cgPSBwbGFuZS0+c3RhdGUtPmNydGNfdzsKPiA+ICsJCWRlc3RfaCA9 IHBsYW5lLT5zdGF0ZS0+Y3J0Y19oOwo+ID4gKwl9Cj4gPiArCj4gPiArCW1hbGlkcF9od193cml0 ZShtcC0+aHdkZXYsIGZvcm1hdF9pZCwgbXAtPmxheWVyLT5iYXNlKTsKPiA+ICsKPiA+ICsJZm9y IChpID0gMDsgaSA8IG51bV9wbGFuZXM7IGkrKykgewo+ID4gKwkJLyogY2FsY3VsYXRlIHRoZSBv ZmZzZXQgZm9yIHRoZSBsYXllcidzIHBsYW5lIHJlZ2lzdGVycyAqLwo+ID4gKwkJcHRyID0gbXAt PmxheWVyLT5wdHIgKyAoaSA8PCA0KTsKPiA+ICsKPiA+ICsJCW9iaiA9IGRybV9mYl9jbWFfZ2V0 X2dlbV9vYmoocGxhbmUtPnN0YXRlLT5mYiwgaSk7Cj4gPiArCQltYWxpZHBfaHdfd3JpdGUobXAt Pmh3ZGV2LCBsb3dlcl8zMl9iaXRzKG9iai0+cGFkZHIpLCBwdHIpOwo+ID4gKwkJbWFsaWRwX2h3 X3dyaXRlKG1wLT5od2RldiwgdXBwZXJfMzJfYml0cyhvYmotPnBhZGRyKSwgcHRyICsgNCk7Cj4g PiArCQltYWxpZHBfaHdfd3JpdGUobXAtPmh3ZGV2LCBwbGFuZS0+c3RhdGUtPmZiLT5waXRjaGVz W2ldLAo+ID4gKwkJCQltcC0+bGF5ZXItPmJhc2UgKyBNQUxJRFBfTEFZRVJfU1RSSURFKTsKPiA+ ICsJfQo+ID4gKwo+ID4gKwltYWxpZHBfaHdfd3JpdGUobXAtPmh3ZGV2LCBMQVlFUl9IX1ZBTChz cmNfdykgfCBMQVlFUl9WX1ZBTChzcmNfaCksCj4gPiArCQkJbXAtPmxheWVyLT5iYXNlICsgTUFM SURQX0xBWUVSX1NJWkUpOwo+ID4gKwo+ID4gKwltYWxpZHBfaHdfd3JpdGUobXAtPmh3ZGV2LCBM QVlFUl9IX1ZBTChkZXN0X3cpIHwgTEFZRVJfVl9WQUwoZGVzdF9oKSwKPiA+ICsJCQltcC0+bGF5 ZXItPmJhc2UgKyBNQUxJRFBfTEFZRVJfQ09NUF9TSVpFKTsKPiA+ICsKPiA+ICsJbWFsaWRwX2h3 X3dyaXRlKG1wLT5od2RldiwgTEFZRVJfSF9WQUwocGxhbmUtPnN0YXRlLT5jcnRjX3gpIHwKPiA+ ICsJCQlMQVlFUl9WX1ZBTChwbGFuZS0+c3RhdGUtPmNydGNfeSksCj4gPiArCQkJbXAtPmxheWVy LT5iYXNlICsgTUFMSURQX0xBWUVSX09GRlNFVCk7Cj4gPiArCj4gPiArCS8qIGZpcnN0IGNsZWFy IHRoZSByb3RhdGlvbiBiaXRzIGluIHRoZSByZWdpc3RlciAqLwo+ID4gKwltYWxpZHBfaHdfY2xl YXJiaXRzKG1wLT5od2RldiwgTEFZRVJfUk9UX01BU0ssCj4gPiArCQkJICAgIG1wLT5sYXllci0+ YmFzZSArIE1BTElEUF9MQVlFUl9DT05UUk9MKTsKPiA+ICsKPiA+ICsJLyogc2V0dXAgdGhlIHJv dGF0aW9uIGFuZCBheGlzIGZsaXAgYml0cyAqLwo+ID4gKwlpZiAocGxhbmUtPnN0YXRlLT5yb3Rh dGlvbiAmIERSTV9ST1RBVEVfTUFTSykKPiA+ICsJCXZhbCA9IGlsb2cyKHBsYW5lLT5zdGF0ZS0+ cm90YXRpb24gJiBEUk1fUk9UQVRFX01BU0spIDw8IExBWUVSX1JPVF9PRkZTRVQ7Cj4gPiArCWlm IChwbGFuZS0+c3RhdGUtPnJvdGF0aW9uICYgQklUKERSTV9SRUZMRUNUX1gpKQo+ID4gKwkJdmFs IHw9IExBWUVSX1ZfRkxJUDsKPiA+ICsJaWYgKHBsYW5lLT5zdGF0ZS0+cm90YXRpb24gJiBCSVQo RFJNX1JFRkxFQ1RfWSkpCj4gPiArCQl2YWwgfD0gTEFZRVJfSF9GTElQOwo+ID4gKwo+ID4gKwkv KiBzZXQgdGhlICdlbmFibGUgbGF5ZXInIGJpdCAqLwo+ID4gKwl2YWwgfD0gTEFZRVJfRU5BQkxF Owo+ID4gKwo+ID4gKwltYWxpZHBfaHdfc2V0Yml0cyhtcC0+aHdkZXYsIHZhbCwKPiA+ICsJCQkg IG1wLT5sYXllci0+YmFzZSArIE1BTElEUF9MQVlFUl9DT05UUk9MKTsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHZvaWQgbWFsaWRwX2RlX3BsYW5lX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCj4gPiArCQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiA+ICt7 Cj4gPiArCXN0cnVjdCBtYWxpZHBfcGxhbmUgKm1wID0gdG9fbWFsaWRwX3BsYW5lKHBsYW5lKTsK PiA+ICsKPiA+ICsJbWFsaWRwX2h3X2NsZWFyYml0cyhtcC0+aHdkZXYsIExBWUVSX0VOQUJMRSwK PiA+ICsJCQkgICAgbXAtPmxheWVyLT5iYXNlICsgTUFMSURQX0xBWUVSX0NPTlRST0wpOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3Mg bWFsaWRwX2RlX3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsKPiA+ICsJLmF0b21pY19jaGVjayA9IG1h bGlkcF9kZV9wbGFuZV9jaGVjaywKPiA+ICsJLmF0b21pY191cGRhdGUgPSBtYWxpZHBfZGVfcGxh bmVfdXBkYXRlLAo+ID4gKwkuYXRvbWljX2Rpc2FibGUgPSBtYWxpZHBfZGVfcGxhbmVfZGlzYWJs ZSwKPiA+ICt9Owo+ID4gKwo+ID4gK2ludCBtYWxpZHBfZGVfcGxhbmVzX2luaXQoc3RydWN0IGRy bV9kZXZpY2UgKmRybSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBk cm0tPmRldl9wcml2YXRlOwo+ID4gKwljb25zdCBzdHJ1Y3QgbWFsaWRwX2h3X3JlZ21hcCAqbWFw ID0gJm1hbGlkcC0+ZGV2LT5tYXA7Cj4gPiArCXN0cnVjdCBtYWxpZHBfcGxhbmUgKnBsYW5lID0g TlVMTDsKPiA+ICsJZW51bSBkcm1fcGxhbmVfdHlwZSBwbGFuZV90eXBlOwo+ID4gKwl1bnNpZ25l ZCBsb25nIGNydGNzID0gMSA8PCBkcm0tPm1vZGVfY29uZmlnLm51bV9jcnRjOwo+ID4gKwl1MzIg KmZvcm1hdHM7Cj4gPiArCWludCByZXQsIGksIGosIG47Cj4gPiArCj4gPiArCWZvcm1hdHMgPSBr Y2FsbG9jKG1hcC0+bl9pbnB1dF9mb3JtYXRzLCBzaXplb2YoKmZvcm1hdHMpLCBHRlBfS0VSTkVM KTsKPiA+ICsJaWYgKCFmb3JtYXRzKSB7Cj4gPiArCQlyZXQgPSAtRU5PTUVNOwo+ID4gKwkJZ290 byBjbGVhbnVwOwo+ID4gKwl9Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBtYXAtPm5fbGF5 ZXJzOyBpKyspIHsKPiA+ICsJCXU4IGlkID0gbWFwLT5sYXllcnNbaV0uaWQ7Cj4gPiArCj4gPiAr CQlwbGFuZSA9IGt6YWxsb2Moc2l6ZW9mKCpwbGFuZSksIEdGUF9LRVJORUwpOwo+ID4gKwkJaWYg KCFwbGFuZSkgewo+ID4gKwkJCXJldCA9IC1FTk9NRU07Cj4gPiArCQkJZ290byBjbGVhbnVwOwo+ ID4gKwkJfQo+ID4gKwo+ID4gKwkJLyogYnVpbGQgdGhlIGxpc3Qgb2YgRFJNIHN1cHBvcnRlZCBm b3JtYXRzIGJhc2VkIG9uIHRoZSBtYXAgKi8KPiA+ICsJCWZvciAobiA9IDAsIGogPSAwOyAgaiA8 IG1hcC0+bl9pbnB1dF9mb3JtYXRzOyBqKyspIHsKPiA+ICsJCQlpZiAoKG1hcC0+aW5wdXRfZm9y bWF0c1tqXS5sYXllciAmIGlkKSA9PSBpZCkKPiA+ICsJCQkJZm9ybWF0c1tuKytdID0gbWFwLT5p bnB1dF9mb3JtYXRzW2pdLmZvcm1hdDsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCXBsYW5lX3R5cGUg PSAoaSA9PSAwKSA/IERSTV9QTEFORV9UWVBFX1BSSU1BUlkgOgo+ID4gKwkJCQkJRFJNX1BMQU5F X1RZUEVfT1ZFUkxBWTsKPiA+ICsJCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdChkcm0s ICZwbGFuZS0+YmFzZSwgY3J0Y3MsCj4gPiArCQkJCQkgICAgICAgJm1hbGlkcF9kZV9wbGFuZV9m dW5jcywgZm9ybWF0cywKPiA+ICsJCQkJCSAgICAgICBuLCBwbGFuZV90eXBlLCBOVUxMKTsKPiA+ ICsJCWlmIChyZXQgPCAwKQo+ID4gKwkJCWdvdG8gY2xlYW51cDsKPiA+ICsKPiA+ICsJCWlmICgh ZHJtLT5tb2RlX2NvbmZpZy5yb3RhdGlvbl9wcm9wZXJ0eSkgewo+ID4gKwkJCXVuc2lnbmVkIGxv bmcgZmxhZ3MgPSBCSVQoRFJNX1JPVEFURV8wKSB8Cj4gPiArCQkJCQkgICAgICBCSVQoRFJNX1JP VEFURV85MCkgfAo+ID4gKwkJCQkJICAgICAgQklUKERSTV9ST1RBVEVfMTgwKSB8Cj4gPiArCQkJ CQkgICAgICBCSVQoRFJNX1JPVEFURV8yNzApIHwKPiA+ICsJCQkJCSAgICAgIEJJVChEUk1fUkVG TEVDVF9YKSB8Cj4gPiArCQkJCQkgICAgICBCSVQoRFJNX1JFRkxFQ1RfWSk7Cj4gPiArCQkJZHJt LT5tb2RlX2NvbmZpZy5yb3RhdGlvbl9wcm9wZXJ0eSA9Cj4gPiArCQkJCWRybV9tb2RlX2NyZWF0 ZV9yb3RhdGlvbl9wcm9wZXJ0eShkcm0sIGZsYWdzKTsKPiA+ICsJCX0KPiA+ICsJCS8qIFNNQVJU IGxheWVyIGNhbid0IGJlIHJvdGF0ZWQgKi8KPiA+ICsJCWlmIChkcm0tPm1vZGVfY29uZmlnLnJv dGF0aW9uX3Byb3BlcnR5ICYmIChpZCAhPSBERV9TTUFSVCkpCj4gPiArCQkJZHJtX29iamVjdF9h dHRhY2hfcHJvcGVydHkoJnBsYW5lLT5iYXNlLmJhc2UsCj4gPiArCQkJCQkJICAgZHJtLT5tb2Rl X2NvbmZpZy5yb3RhdGlvbl9wcm9wZXJ0eSwKPiA+ICsJCQkJCQkgICBCSVQoRFJNX1JPVEFURV8w KSk7Cj4gPiArCj4gPiArCQlkcm1fcGxhbmVfaGVscGVyX2FkZCgmcGxhbmUtPmJhc2UsCj4gPiAr CQkJCSAgICAgJm1hbGlkcF9kZV9wbGFuZV9oZWxwZXJfZnVuY3MpOwo+ID4gKwkJcGxhbmUtPmh3 ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gPiArCQlwbGFuZS0+bGF5ZXIgPSAmbWFwLT5sYXllcnNbaV07 Cj4gPiArCX0KPiA+ICsKPiA+ICsJa2ZyZWUoZm9ybWF0cyk7Cj4gPiArCj4gPiArCXJldHVybiAw Owo+ID4gKwo+ID4gK2NsZWFudXA6Cj4gPiArCW1hbGlkcF9kZV9wbGFuZXNfZGVzdHJveShkcm0p Owo+ID4gKwlrZnJlZShmb3JtYXRzKTsKPiA+ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4g PiArCj4gPiArdm9pZCBtYWxpZHBfZGVfcGxhbmVzX2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2Ug KmRybSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fcGxhbmUgKnAsICpwdDsKPiA+ICsKPiA+ICsJ bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHB0LCAmZHJtLT5tb2RlX2NvbmZpZy5wbGFuZV9s aXN0LCBoZWFkKSB7Cj4gPiArCQlkcm1fcGxhbmVfY2xlYW51cChwKTsKPiA+ICsJCWtmcmVlKHAp Owo+ID4gKwl9Cj4gPiArfQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFs aWRwX3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3JlZ3MuaAo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLjczZmVjYjMKPiA+IC0tLSAvZGV2L251 bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3JlZ3MuaAo+ID4gQEAgLTAs MCArMSwxNzIgQEAKPiA+ICsvKgo+ID4gKyAqIChDKSBDT1BZUklHSFQgMjAxNiBBUk0gTGltaXRl ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiA+ICsgKiBBdXRob3I6IExpdml1IER1ZGF1IDxMaXZp dS5EdWRhdUBhcm0uY29tPgo+ID4gKyAqCj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmUgYW5kIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCj4gPiAr ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZQo+ID4gKyAqIEZvdW5kYXRpb24sIGFuZCBhbnkgdXNlIGJ5IHlvdSBv ZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMKPiA+ICsgKiBvZiBzdWNoIEdO VSBsaWNlbmNlLgo+ID4gKyAqCj4gPiArICogQVJNIE1hbGkgRFA1MDAvRFA1NTAvRFA2NTAgcmVn aXN0ZXJzIGRlZmluaXRpb24uCj4gPiArICovCj4gPiArCj4gPiArI2lmbmRlZiBfX01BTElEUF9S RUdTX0hfXwo+ID4gKyNkZWZpbmUgX19NQUxJRFBfUkVHU19IX18KPiA+ICsKPiA+ICsvKgo+ID4g KyAqIGFiYnJldmlhdGlvbnMgdXNlZDoKPiA+ICsgKiAgICAtIERDIC0gZGlzcGxheSBjb3JlIChn ZW5lcmFsIHNldHRpbmdzKQo+ID4gKyAqICAgIC0gREUgLSBkaXNwbGF5IGVuZ2luZQo+ID4gKyAq ICAgIC0gU0UgLSBzY2FsaW5nIGVuZ2luZQo+ID4gKyAqLwo+ID4gKwo+ID4gKy8qIGludGVycnVw dCBiaXQgbWFza3MgKi8KPiA+ICsjZGVmaW5lIE1BTElEUF9ERV9JUlFfVU5ERVJSVU4JCQkoMSA8 PCAwKQo+ID4gKwo+ID4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9BWElfRVJSCQkoMSA8PCA0 KQo+ID4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9WU1lOQwkJCSgxIDw8IDUpCj4gPiArI2Rl ZmluZSBNQUxJRFA1MDBfREVfSVJRX1BST0dfTElORQkJKDEgPDwgNikKPiA+ICsjZGVmaW5lIE1B TElEUDUwMF9ERV9JUlFfU0FUVVJBVElPTgkJKDEgPDwgNykKPiA+ICsjZGVmaW5lIE1BTElEUDUw MF9ERV9JUlFfQ09ORl9WQUxJRAkJKDEgPDwgOCkKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9J UlFfQ09ORl9NT0RFCQkoMSA8PCAxMSkKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9JUlFfQ09O Rl9BQ1RJVkUJCSgxIDw8IDE3KQo+ID4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9QTV9BQ1RJ VkUJCSgxIDw8IDE4KQo+ID4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9URVNUTU9ERV9BQ1RJ VkUJKDEgPDwgMTkpCj4gPiArI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX0ZPUkNFX0JMTktfQUNU SVZFCSgxIDw8IDI0KQo+ID4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9BWElfQlVTWQkJKDEg PDwgMjgpCj4gPiArI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX0dMT0JBTAkJCSgxIDw8IDMxKQo+ ID4gKyNkZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9DT05GX01PREUJCSgxIDw8IDApCj4gPiArI2Rl ZmluZSBNQUxJRFA1MDBfU0VfSVJRX0NPTkZfVkFMSUQJCSgxIDw8IDQpCj4gPiArI2RlZmluZSBN QUxJRFA1MDBfU0VfSVJRX0lOSVRfQlVTWQkJKDEgPDwgNSkKPiA+ICsjZGVmaW5lIE1BTElEUDUw MF9TRV9JUlFfQVhJX0VSUk9SCQkoMSA8PCA4KQo+ID4gKyNkZWZpbmUgTUFMSURQNTAwX1NFX0lS UV9PVkVSUlVOCQkoMSA8PCA5KQo+ID4gKyNkZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9QUk9HX0xJ TkUxCQkoMSA8PCAxMikKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfUFJPR19MSU5FMgkJ KDEgPDwgMTMpCj4gPiArI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX0NPTkZfQUNUSVZFCQkoMSA8 PCAxNykKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfUE1fQUNUSVZFCQkoMSA8PCAxOCkK PiA+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfQVhJX0JVU1kJCSgxIDw8IDI4KQo+ID4gKyNk ZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9HTE9CQUwJCQkoMSA8PCAzMSkKPiA+ICsKPiA+ICsjZGVm aW5lIE1BTElEUDU1MF9ERV9JUlFfU0FUVVJBVElPTgkJKDEgPDwgOCkKPiA+ICsjZGVmaW5lIE1B TElEUDU1MF9ERV9JUlFfVlNZTkMJCQkoMSA8PCAxMikKPiA+ICsjZGVmaW5lIE1BTElEUDU1MF9E RV9JUlFfUFJPR19MSU5FCQkoMSA8PCAxMykKPiA+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9JUlFf QVhJX0VSUgkJKDEgPDwgMTYpCj4gPiArI2RlZmluZSBNQUxJRFA1NTBfU0VfSVJRX0VPVwkJCSgx IDw8IDApCj4gPiArI2RlZmluZSBNQUxJRFA1NTBfU0VfSVJRX0FYSV9FUlIJCSgxIDw8IDE2KQo+ ID4gKyNkZWZpbmUgTUFMSURQNTUwX0RDX0lSUV9DT05GX1ZBTElECQkoMSA8PCAwKQo+ID4gKyNk ZWZpbmUgTUFMSURQNTUwX0RDX0lSUV9DT05GX01PREUJCSgxIDw8IDQpCj4gPiArI2RlZmluZSBN QUxJRFA1NTBfRENfSVJRX0NPTkZfQUNUSVZFCQkoMSA8PCAxNikKPiA+ICsjZGVmaW5lIE1BTElE UDU1MF9EQ19JUlFfREUJCQkoMSA8PCAyMCkKPiA+ICsjZGVmaW5lIE1BTElEUDU1MF9EQ19JUlFf U0UJCQkoMSA8PCAyNCkKPiA+ICsKPiA+ICsjZGVmaW5lIE1BTElEUDY1MF9ERV9JUlFfRFJJRlQJ CQkoMSA8PCA0KQo+ID4gKwo+ID4gKy8qIGJpdCBtYXNrcyB0aGF0IGFyZSBjb21tb24gYmV0d2Vl biBwcm9kdWN0cyAqLwo+ID4gKyNkZWZpbmUgICBNQUxJRFBfQ0ZHX1ZBTElECQkoMSA8PCAwKQo+ ID4gKyNkZWZpbmUgICBNQUxJRFBfRElTUF9GVU5DX0lMQUNFRAkoMSA8PCA4KQo+ID4gKwo+ID4g Ky8qIHJlZ2lzdGVyIG9mZnNldHMgZm9yIElSUSBtYW5hZ2VtZW50ICovCj4gPiArI2RlZmluZSBN QUxJRFBfUkVHX1NUQVRVUwkJMHgwMDAwMAo+ID4gKyNkZWZpbmUgTUFMSURQX1JFR19TRVRJUlEJ CTB4MDAwMDQKPiA+ICsjZGVmaW5lIE1BTElEUF9SRUdfTUFTS0lSUQkJMHgwMDAwOAo+ID4gKyNk ZWZpbmUgTUFMSURQX1JFR19DTEVBUklSUQkJMHgwMDAwYwo+ID4gKwo+ID4gKy8qIHJlZ2lzdGVy IG9mZnNldHMgKi8KPiA+ICsjZGVmaW5lIE1BTElEUF9ERV9DT1JFX0lECQkweDAwMDE4Cj4gPiAr I2RlZmluZSBNQUxJRFBfREVfRElTUExBWV9GVU5DCQkweDAwMDIwCj4gPiArCj4gPiArLyogdGhl c2Ugb2Zmc2V0cyBhcmUgcmVsYXRpdmUgdG8gTUFMSURQNXgwX1RJTUlOR1NfQkFTRSAqLwo+ID4g KyNkZWZpbmUgTUFMSURQX0RFX0hfVElNSU5HUwkJMHgwCj4gPiArI2RlZmluZSBNQUxJRFBfREVf Vl9USU1JTkdTCQkweDQKPiA+ICsjZGVmaW5lIE1BTElEUF9ERV9TWU5DX1dJRFRICQkweDgKPiA+ ICsjZGVmaW5lIE1BTElEUF9ERV9IVl9BQ1RJVkUJCTB4Ywo+ID4gKwo+ID4gKy8qIG1hY3JvcyB0 byBzZXQgdmFsdWVzIGludG8gcmVnaXN0ZXJzICovCj4gPiArI2RlZmluZSBNQUxJRFBfREVfSF9G Uk9OVFBPUkNIKHgpCSgoKHgpICYgMHhmZmYpIDw8IDApCj4gPiArI2RlZmluZSBNQUxJRFBfREVf SF9CQUNLUE9SQ0goeCkJKCgoeCkgJiAweDNmZikgPDwgMTYpCj4gPiArI2RlZmluZSBNQUxJRFA1 MDBfREVfVl9GUk9OVFBPUkNIKHgpCSgoKHgpICYgMHhmZikgPDwgMCkKPiA+ICsjZGVmaW5lIE1B TElEUDU1MF9ERV9WX0ZST05UUE9SQ0goeCkJKCgoeCkgJiAweGZmZikgPDwgMCkKPiA+ICsjZGVm aW5lIE1BTElEUF9ERV9WX0JBQ0tQT1JDSCh4KQkoKCh4KSAmIDB4ZmYpIDw8IDE2KQo+ID4gKyNk ZWZpbmUgTUFMSURQX0RFX0hfU1lOQ1dJRFRIKHgpCSgoKHgpICYgMHgzZmYpIDw8IDApCj4gPiAr I2RlZmluZSBNQUxJRFBfREVfVl9TWU5DV0lEVEgoeCkJKCgoeCkgJiAweGZmKSA8PCAxNikKPiA+ ICsjZGVmaW5lIE1BTElEUF9ERV9IX0FDVElWRSh4KQkJKCgoeCkgJiAweDFmZmYpIDw8IDApCj4g PiArI2RlZmluZSBNQUxJRFBfREVfVl9BQ1RJVkUoeCkJCSgoKHgpICYgMHgxZmZmKSA8PCAxNikK PiA+ICsKPiA+ICsvKiByZWdpc3RlciBvZmZzZXRzIGFuZCBiaXRzIHNwZWNpZmljIHRvIERQNTAw ICovCj4gPiArI2RlZmluZSBNQUxJRFA1MDBfRENfQkFTRQkJMHgwMDAwMAo+ID4gKyNkZWZpbmUg TUFMSURQNTAwX0RDX0NPTlRST0wJCTB4MDAwMGMKPiA+ICsjZGVmaW5lICAgTUFMSURQNTAwX0RD X0NPTkZJR19SRVEJKDEgPDwgMTcpCj4gPiArI2RlZmluZSAgIE1BTElEUDUwMF9IU1lOQ1BPTAkJ KDEgPDwgMjApCj4gPiArI2RlZmluZSAgIE1BTElEUDUwMF9WU1lOQ1BPTAkJKDEgPDwgMjEpCj4g PiArI2RlZmluZSAgIE1BTElEUDUwMF9EQ19DTEVBUl9NQVNLCTB4MzAwZmZmCj4gPiArI2RlZmlu ZSBNQUxJRFA1MDBfREVfTElORV9DT1VOVEVSCTB4MDAwMTAKPiA+ICsjZGVmaW5lIE1BTElEUDUw MF9ERV9BWElfQ09OVFJPTAkweDAwMDE0Cj4gPiArI2RlZmluZSBNQUxJRFA1MDBfREVfU0VDVVJF X0NUUkwJMHgwMDAxYwo+ID4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0NIUk9NQV9LRVkJCTB4MDAw MjQKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9USU1JTkdTX0JBU0UJCTB4MDAwMjgKPiA+ICsKPiA+ ICsjZGVmaW5lIE1BTElEUDUwMF9DT05GSUdfM0QJCTB4MDAwMzgKPiA+ICsjZGVmaW5lIE1BTElE UDUwMF9CR05EX0NPTE9SCQkweDAwMDNjCj4gPiArI2RlZmluZSBNQUxJRFA1MDBfT1VUUFVUX0RF UFRICQkweDAwMDQ0Cj4gPiArI2RlZmluZSBNQUxJRFA1MDBfWVVWX1JHQl9DT0VGCQkweDAwMDQ4 Cj4gPiArI2RlZmluZSBNQUxJRFA1MDBfQ09MT1JfQURKX0NPRUYJMHgwMDA3OAo+ID4gKyNkZWZp bmUgTUFMSURQNTAwX0NPRUZfVEFCTEVfQUREUgkweDAwMGE4Cj4gPiArI2RlZmluZSBNQUxJRFA1 MDBfQ09FRl9UQUJMRV9EQVRBCTB4MDAwYWMKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9MVl9C QVNFCQkweDAwMTAwCj4gPiArI2RlZmluZSBNQUxJRFA1MDBfREVfTFZfUFRSX0JBU0UJMHgwMDEy NAo+ID4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0xHMV9CQVNFCQkweDAwMjAwCj4gPiArI2RlZmlu ZSBNQUxJRFA1MDBfREVfTEcxX1BUUl9CQVNFCTB4MDAyMWMKPiA+ICsjZGVmaW5lIE1BTElEUDUw MF9ERV9MRzJfQkFTRQkJMHgwMDMwMAo+ID4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0xHMl9QVFJf QkFTRQkweDAwMzFjCj4gPiArI2RlZmluZSBNQUxJRFA1MDBfU0VfQkFTRQkJMHgwMGMwMAo+ID4g KyNkZWZpbmUgTUFMSURQNTAwX1NFX1BUUl9CQVNFCQkweDAwZTBjCj4gPiArI2RlZmluZSBNQUxJ RFA1MDBfRENfSVJRX0JBU0UJCTB4MDBmMDAKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9DT05GSUdf VkFMSUQJCTB4MDBmMDAKPiA+ICsjZGVmaW5lIE1BTElEUDUwMF9DT05GSUdfSUQJCTB4MDBmZDQK PiA+ICsKPiA+ICsvKiByZWdpc3RlciBvZmZzZXRzIGFuZCBiaXRzIHNwZWNpZmljIHRvIERQNTUw L0RQNjUwICovCj4gPiArI2RlZmluZSBNQUxJRFA1NTBfREVfQ09OVFJPTAkJMHgwMDAxMAo+ID4g KyNkZWZpbmUgTUFMSURQNTUwX0RFX0xJTkVfQ09VTlRFUgkweDAwMDE0Cj4gPiArI2RlZmluZSBN QUxJRFA1NTBfREVfQVhJX0NPTlRST0wJMHgwMDAxOAo+ID4gKyNkZWZpbmUgTUFMSURQNTUwX0RF X1FPUwkJMHgwMDAxYwo+ID4gKyNkZWZpbmUgTUFMSURQNTUwX1RJTUlOR1NfQkFTRQkJMHgwMDAz MAo+ID4gKyNkZWZpbmUgTUFMSURQNTUwX0hTWU5DUE9MCQkoMSA8PCAxMikKPiA+ICsjZGVmaW5l IE1BTElEUDU1MF9WU1lOQ1BPTAkJKDEgPDwgMjgpCj4gPiArCj4gPiArI2RlZmluZSBNQUxJRFA1 NTBfREVfRElTUF9TSURFQkFORAkweDAwMDQwCj4gPiArI2RlZmluZSBNQUxJRFA1NTBfREVfQkdO RF9DT0xPUgkJMHgwMDA0NAo+ID4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX09VVFBVVF9ERVBUSAkw eDAwMDRjCj4gPiArI2RlZmluZSBNQUxJRFA1NTBfREVfQ09MT1JfQ09FRgkJMHgwMDA1MAo+ID4g KyNkZWZpbmUgTUFMSURQNTUwX0RFX0NPRUZfVEFCTEVfQUREUgkweDAwMDgwCj4gPiArI2RlZmlu ZSBNQUxJRFA1NTBfREVfQ09FRl9UQUJMRV9EQVRBCTB4MDAwODQKPiA+ICsjZGVmaW5lIE1BTElE UDU1MF9ERV9MVjFfQkFTRQkJMHgwMDEwMAo+ID4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX0xWMV9Q VFJfQkFTRQkweDAwMTI0Cj4gPiArI2RlZmluZSBNQUxJRFA1NTBfREVfTFYyX0JBU0UJCTB4MDAy MDAKPiA+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9MVjJfUFRSX0JBU0UJMHgwMDIyNAo+ID4gKyNk ZWZpbmUgTUFMSURQNTUwX0RFX0xHX0JBU0UJCTB4MDAzMDAKPiA+ICsjZGVmaW5lIE1BTElEUDU1 MF9ERV9MR19QVFJfQkFTRQkweDAwMzFjCj4gPiArI2RlZmluZSBNQUxJRFA1NTBfREVfTFNfQkFT RQkJMHgwMDQwMAo+ID4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX0xTX1BUUl9CQVNFCTB4MDA0MmMK PiA+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9QRVJGX0JBU0UJCTB4MDA1MDAKPiA+ICsjZGVmaW5l IE1BTElEUDU1MF9TRV9CQVNFCQkweDA4MDAwCj4gPiArI2RlZmluZSBNQUxJRFA1NTBfRENfQkFT RQkJMHgwYzAwMAo+ID4gKyNkZWZpbmUgTUFMSURQNTUwX0RDX0NPTlRST0wJCTB4MGMwMTAKPiA+ ICsjZGVmaW5lICAgTUFMSURQNTUwX0RDX0NPTkZJR19SRVEJKDEgPDwgMTYpCj4gPiArI2RlZmlu ZSBNQUxJRFA1NTBfQ09ORklHX1ZBTElECQkweDBjMDE0Cj4gPiArI2RlZmluZSBNQUxJRFA1NTBf Q09ORklHX0lECQkweDBmZmQ0Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBTdGFydGluZyB3aXRoIERQ NTUwIHRoZSByZWdpc3RlciBtYXAgYmxvY2tzIGhhcyBiZWVuIHN0YW5kYXJkaXNlZCB0byB0aGUK PiA+ICsgKiBmb2xsb3dpbmcgbGF5b3V0Ogo+ID4gKyAqCj4gPiArICogICBPZmZzZXQgICAgICAg ICAgICBCbG9jayByZWdpc3RlcnMKPiA+ICsgKiAgMHgwMDAwMCAgICAgICAgICAgIERpc3BsYXkg RW5naW5lCj4gPiArICogIDB4MDgwMDAgICAgICAgICAgICBTY2FsaW5nIEVuZ2luZQo+ID4gKyAq ICAweDBjMDAwICAgICAgICAgICAgRGlzcGxheSBDb3JlCj4gPiArICogIDB4MTAwMDAgICAgICAg ICAgICBTZWN1cmUgY29udHJvbAo+ID4gKyAqCj4gPiArICogVGhlIG9sZCBEUDUwMCBJUCBtaXhl cyBzb21lIERDIHdpdGggdGhlIERFIHJlZ2lzdGVycywgaGVuY2UgdGhlIG5lZWQKPiA+ICsgKiBm b3IgYSBtYXBwaW5nIHN0cnVjdHVyZS4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjZW5kaWYgLyogX19N QUxJRFBfUkVHU19IX18gKi8KPiA+IC0tIAo+ID4gMi44LjIKPiA+IAo+IAo+IC0tIAo+IERhbmll bCBWZXR0ZXIKPiBTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KPiBodHRwOi8v YmxvZy5mZndsbC5jaAo+IAoKLS0gCj09PT09PT09PT09PT09PT09PT09CnwgSSB3b3VsZCBsaWtl IHRvIHwKfCBmaXggdGhlIHdvcmxkLCAgfAp8IGJ1dCB0aGV5J3JlIG5vdCB8CnwgZ2l2aW5nIG1l IHRoZSAgIHwKIFwgc291cmNlIGNvZGUhICAvCiAgLS0tLS0tLS0tLS0tLS0tCiAgICDCr1xfKOOD hClfL8KvCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=