From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liviu Dudau Subject: Re: [PATCH v3 2/4] drm: Add support for ARM's HDLCD controller. Date: Wed, 2 Dec 2015 17:13:48 +0000 Message-ID: <20151202171348.GC972@e106497-lin.cambridge.arm.com> References: <1449058982-18595-1-git-send-email-Liviu.Dudau@arm.com> <1449058982-18595-3-git-send-email-Liviu.Dudau@arm.com> <20151202152419.GC17050@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: <20151202152419.GC17050@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 , Catalin Marinas , Will Deacon , Rob Herring , Sudeep Holla , Jon Medhurst , Mark Rutland , Ian Campbell , Kumar Gala , Rob Herring , Russell King , devicetree , Pawel Moll , Arnd Bergmann , Greg Kroah-Hartman , Punit Agrawal , LKML , DRI devel , Andrew Morton , Robin Murphy , LAKML List-Id: devicetree@vger.kernel.org T24gV2VkLCBEZWMgMDIsIDIwMTUgYXQgMDQ6MjQ6MTlQTSArMDEwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBXZWQsIERlYyAwMiwgMjAxNSBhdCAxMjoyMzowMFBNICswMDAwLCBMaXZpdSBE dWRhdSB3cm90ZToKPiA+IFRoZSBIRExDRCBjb250cm9sbGVyIGlzIGEgZGlzcGxheSBjb250cm9s bGVyIHRoYXQgc3VwcG9ydHMgcmVzb2x1dGlvbnMKPiA+IHVwIHRvIDQwOTZ4NDA5NiBwaXhlbHMu IEl0IGlzIHByZXNlbnQgb24gdmFyaW91cyBkZXZlbG9wbWVudCBib2FyZHMKPiA+IHByb2R1Y2Vk IGJ5IEFSTSBMdGQgYW5kIGVtdWxhdGVkIGJ5IHRoZSBsYXRlc3QgRmFzdCBNb2RlbHMgZnJvbSB0 aGUKPiA+IGNvbXBhbnkuCj4gPiAKPiA+IENjOiBEYXZpZCBBaXJsaWUgPGFpcmxpZWRAbGludXgu aWU+Cj4gPiBDYzogUm9iaW4gTXVycGh5IDxyb2Jpbi5tdXJwaHlAYXJtLmNvbT4KPiA+IAo+ID4g U2lnbmVkLW9mZi1ieTogTGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1QGFybS5jb20+Cj4gCj4gQSBm ZXcgc21hbGwgbml0cGlja3MgYmVsb3cuCj4gCj4gPiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0v S2NvbmZpZyAgICAgICAgICB8ICAgMiArCj4gPiAgZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAg ICAgICAgfCAgIDEgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vS2NvbmZpZyAgICAgIHwgIDI5 ICsrCj4gPiAgZHJpdmVycy9ncHUvZHJtL2FybS9NYWtlZmlsZSAgICAgfCAgIDIgKwo+ID4gIGRy aXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfY3J0Yy5jIHwgMzM0ICsrKysrKysrKysrKysrKysrKysr KysrCj4gPiAgZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9kcnYuYyAgfCA1NTUgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAgZHJpdmVycy9ncHUvZHJtL2FybS9o ZGxjZF9kcnYuaCAgfCAgNDIgKysrCj4gPiAgZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9yZWdz LmggfCAgODcgKysrKysrCj4gPiAgOCBmaWxlcyBjaGFuZ2VkLCAxMDUyIGluc2VydGlvbnMoKykK PiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9LY29uZmlnCj4gPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vTWFrZWZpbGUKPiA+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9jcnRjLmMKPiA+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9kcnYuYwo+ID4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Rydi5oCj4gPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfcmVncy5oCj4gPiAKPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29u ZmlnCj4gPiBpbmRleCBjNGJmOWExLi4zZmQ5MTI0IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL0tjb25maWcKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gPiBAQCAt MTA2LDYgKzEwNiw4IEBAIGNvbmZpZyBEUk1fVERGWAo+ID4gIAkgIENob29zZSB0aGlzIG9wdGlv biBpZiB5b3UgaGF2ZSBhIDNkZnggQmFuc2hlZSBvciBWb29kb28zIChvciBsYXRlciksCj4gPiAg CSAgZ3JhcGhpY3MgY2FyZC4gIElmIE0gaXMgc2VsZWN0ZWQsIHRoZSBtb2R1bGUgd2lsbCBiZSBj YWxsZWQgdGRmeC4KPiA+ICAKPiA+ICtzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hcm0vS2NvbmZp ZyIKPiA+ICsKPiA+ICBjb25maWcgRFJNX1IxMjgKPiA+ICAJdHJpc3RhdGUgIkFUSSBSYWdlIDEy OCIKPiA+ICAJZGVwZW5kcyBvbiBEUk0gJiYgUENJCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gPiBpbmRleCAxZTlm ZjRjLi42YjQyZDc1IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+IEBAIC0zNSw2ICszNSw3IEBAIENG TEFHU19kcm1fdHJhY2VfcG9pbnRzLm8gOj0gLUkkKHNyYykKPiA+ICAKPiA+ICBvYmotJChDT05G SUdfRFJNKQkrPSBkcm0ubwo+ID4gIG9iai0kKENPTkZJR19EUk1fTUlQSV9EU0kpICs9IGRybV9t aXBpX2RzaS5vCj4gPiArb2JqLSQoQ09ORklHX0RSTV9BUk0pCSs9IGFybS8KPiA+ICBvYmotJChD T05GSUdfRFJNX1RUTSkJKz0gdHRtLwo+ID4gIG9iai0kKENPTkZJR19EUk1fVERGWCkJKz0gdGRm eC8KPiA+ICBvYmotJChDT05GSUdfRFJNX1IxMjgpCSs9IHIxMjgvCj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2FybS9LY29uZmln Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uNWU4YzhhOAo+ID4g LS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9LY29uZmlnCj4gPiBA QCAtMCwwICsxLDI5IEBACj4gPiArY29uZmlnIERSTV9BUk0KPiA+ICsJYm9vbCAiQVJNIEx0ZC4g ZHJpdmVycyIKPiA+ICsJZGVwZW5kcyBvbiBEUk0gJiYgT0YgJiYgKEFSTSB8fCBBUk02NCkKPiA+ ICsJc2VsZWN0IERSTV9LTVNfSEVMUEVSCj4gPiArCWhlbHAKPiA+ICsJICBDaG9vc2UgdGhpcyBv cHRpb24gdG8gc2VsZWN0IGRyaXZlcnMgZm9yIEFSTSdzIGRldmljZXMKPiA+ICsKPiA+ICtjb25m aWcgRFJNX0hETENECj4gPiArCXRyaXN0YXRlICJBUk0gSERMQ0QiCj4gPiArCWRlcGVuZHMgb24g RFJNX0FSTQo+ID4gKwlkZXBlbmRzIG9uIENPTU1PTl9DTEsKPiA+ICsJc2VsZWN0IENPTU1PTl9D TEtfU0NQSQo+ID4gKwlzZWxlY3QgRE1BX0NNQQo+ID4gKwlzZWxlY3QgRFJNX0tNU19DTUFfSEVM UEVSCj4gPiArCXNlbGVjdCBEUk1fR0VNX0NNQV9IRUxQRVIKPiA+ICsJaGVscAo+ID4gKwkgIENo b29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhbiBBUk0gSGlnaCBEZWZpbml0aW9uIENvbG91 ciBMQ0QKPiA+ICsJICBjb250cm9sbGVyLgo+ID4gKwo+ID4gKwkgIElmIE0gaXMgc2VsZWN0ZWQg dGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBoZGxjZC4KPiA+ICsKPiA+ICtjb25maWcgRFJNX0hE TENEX1NIT1dfVU5ERVJSVU4KPiA+ICsJYm9vbCAiU2hvdyB1bmRlcnJ1biBjb25kaXRpb25zIgo+ ID4gKwlkZXBlbmRzIG9uIERSTV9IRExDRAo+ID4gKwlkZWZhdWx0IG4KPiA+ICsJaGVscAo+ID4g KwkgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBzaG93IGluIHJlZCBjb2xvdXIgdGhlIHBpeGVscyB0 aGF0IHRoZQo+ID4gKwkgIEhETENEIGRldmljZSBkaWQgbm90IGZldGNoIGZyb20gZnJhbWVidWZm ZXIgZHVlIHRvIHVuZGVycnVuCj4gPiArCSAgY29uZGl0aW9ucy4KPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYXJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2FybS9NYWtlZmls ZQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLjg5ZGNiN2IKPiA+ IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vTWFrZWZpbGUKPiA+ IEBAIC0wLDAgKzEsMiBAQAo+ID4gK2hkbGNkLXkgOj0gaGRsY2RfZHJ2Lm8gaGRsY2RfY3J0Yy5v Cj4gPiArb2JqLSQoQ09ORklHX0RSTV9IRExDRCkJKz0gaGRsY2Qubwo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2FybS9o ZGxjZF9jcnRjLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi4z NTBjMWZlCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL2hk bGNkX2NydGMuYwo+ID4gQEAgLTAsMCArMSwzMzQgQEAKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdo dCAoQykgMjAxMy0yMDE1IEFSTSBMaW1pdGVkCj4gPiArICogQXV0aG9yOiBMaXZpdSBEdWRhdSA8 TGl2aXUuRHVkYXVAYXJtLmNvbT4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0 IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCj4g PiArICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9y eSBvZiB0aGlzIGFyY2hpdmUKPiA+ICsgKiBmb3IgbW9yZSBkZXRhaWxzLgo+ID4gKyAqCj4gPiAr ICogIEltcGxlbWVudGF0aW9uIG9mIGEgQ1JUQyBjbGFzcyBmb3IgdGhlIEhETENEIGRyaXZlci4K PiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ICsjaW5jbHVkZSA8 ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9k cm1fZmJfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgo+ ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRy bS9kcm1fb2YuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KPiA+ICsj aW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+Cj4g PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvc2ltcGxlZmIuaD4KPiA+ICsjaW5jbHVk ZSA8dmlkZW8vdmlkZW9tb2RlLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgImhkbGNkX2Rydi5oIgo+ ID4gKyNpbmNsdWRlICJoZGxjZF9yZWdzLmgiCj4gPiArCj4gPiArLyoKPiA+ICsgKiBUaGUgSERM Q0QgY29udHJvbGxlciBpcyBhIGR1bWIgUkdCIHN0cmVhbWVyIHRoYXQgZ2V0cyBjb25uZWN0ZWQg dG8KPiA+ICsgKiBhIHNpbmdsZSBIRE1JIHRyYW5zbWl0dGVyIG9yIGluIHRoZSBjYXNlIG9mIHRo ZSBBUk0gTW9kZWxzIGl0IGdldHMKPiA+ICsgKiBlbXVsYXRlZCBieSB0aGUgc29mdHdhcmUgdGhh dCBkb2VzIHRoZSBhY3R1YWwgcmVuZGVyaW5nLgo+ID4gKyAqCj4gPiArICovCj4gPiArCj4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBoZGxjZF9jcnRjX2Z1bmNzID0gewo+ ID4gKwkuZGVzdHJveSA9IGRybV9jcnRjX2NsZWFudXAsCj4gPiArCS5zZXRfY29uZmlnID0gZHJt X2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKPiA+ICsJLnBhZ2VfZmxpcCA9IGRybV9hdG9taWNf aGVscGVyX3BhZ2VfZmxpcCwKPiA+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19y ZXNldCwKPiA+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9j cnRjX2R1cGxpY2F0ZV9zdGF0ZSwKPiA+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0 b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGlj IHN0cnVjdCBzaW1wbGVmYl9mb3JtYXQgc3VwcG9ydGVkX2Zvcm1hdHNbXSA9IFNJTVBMRUZCX0ZP Uk1BVFM7Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBTZXR1cCB0aGUgSERMQ0QgcmVnaXN0ZXJzIGZv ciBkZWNvZGluZyB0aGUgcGl4ZWxzIG91dCBvZiB0aGUgZnJhbWVidWZmZXIKPiA+ICsgKi8KPiA+ ICtzdGF0aWMgaW50IGhkbGNkX3NldF9weGxfZm10KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ ICt7Cj4gPiArCXVuc2lnbmVkIGludCBidHBwLCBkZWZhdWx0X2NvbG9yID0gMHgwMDAwMDAwMDsK PiA+ICsJc3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZCA9IGNydGNfdG9faGRsY2RfcHJp dihjcnRjKTsKPiA+ICsJdWludDMyX3QgcGl4ZWxfZm9ybWF0Owo+ID4gKwlzdHJ1Y3Qgc2ltcGxl ZmJfZm9ybWF0ICpmb3JtYXQgPSBOVUxMOwo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsjaWZkZWYg Q09ORklHX0RSTV9IRExDRF9TSE9XX1VOREVSUlVOCj4gPiArCWRlZmF1bHRfY29sb3IgPSAweDAw ZmYwMDAwOwkvKiBzaG93IHVuZGVycnVucyBpbiByZWQgKi8KPiA+ICsjZW5kaWYKPiA+ICsKPiA+ ICsJaWYgKCFjcnRjLT5wcmltYXJ5LT5zdGF0ZS0+ZmIpIHsKPiA+ICsJCURSTV9FUlJPUigiTm8g ZmIgYXNzb2NpYXRlZCB3aXRoIHN0YXRlICVwXG4iLAo+ID4gKwkJCSAgY3J0Yy0+cHJpbWFyeS0+ c3RhdGUpOwo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gCj4gVGhlIGhpZ2hlci1sZXZlbCAtPm1v ZGVfc2V0X25vZmIgY2FuJ3QgZmFpbCBhbmQgeW91J3JlIHZpb2xhdGluZyB0aGlzCj4gaGVyZS4g Q29ycmVjdCBmaXggaW4gYXRvbWljIGlzIHRvIGNoZWNrIGluIHlvdXIgY3J0Yy0+YXRvbWljX2No ZWNrIHRoYXQKPiB0aGVyZSdzIGFsd2F5cyBhIHByaW1hcnkgZmIgc2V0LiBTaW5jZSB0aGF0J3Mg YSBzbWFsbCBkYW5jZSAoeW91IG5lZWQgdG8KPiBncmFiIHRoZSBwcmltYXJ5IHBsYW5lIHN0YXRl IGZpcnN0KSBtaWdodCBiZSBnb29kIHRvIGV4dHJhY3QgaXQgaW50byBhCj4gc21hbGwgaGVscGVy LCBidXQgbm90IHJlYWxseSBuZWVkZWQuCj4gCj4gSGVyZSB5b3Ugc2hvdWxkIFdBUk5fT04gaWYg dGhpcyBldmVyIGhhcHBlbnMgYW5kIGp1c3QgcmV0dXJuICh3aXRob3V0Cj4gdHJ5aW5nIHRvIHRy YWNrIGFuIGVycm9yIGNvZGUpLCBzaW5jZSBpdCdzIHRvbyBsYXRlIGFscmVhZHkuCgpKdXN0IHJl YWxpc2VkIHRoYXQgdGhpcyBjaGVjayBzZXJ2ZXMgbm8gcHVycG9zZS4gSSBhZGRlZCBpdCBmb3Ig ZGVidWdnaW5nCnB1cnBvc2Ugd2hpbGUgdHJhY2tpbmcgdGhlIFREQTE5OTg4IGF0b21pYyBzdXBw b3J0IGFuZCBmb3Jnb3QgdG8gcmVtb3ZlIGl0LgpJIHdpbGwgZG8gc28gaW4gdjQuCgpCZXN0IHJl Z2FyZHMsCkxpdml1Cgo+IAo+ID4gKwl9Cj4gPiArCj4gPiArCXBpeGVsX2Zvcm1hdCA9IGNydGMt PnByaW1hcnktPnN0YXRlLT5mYi0+cGl4ZWxfZm9ybWF0Owo+ID4gKwo+ID4gKwlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShzdXBwb3J0ZWRfZm9ybWF0cyk7IGkrKykgewo+ID4gKwkJaWYgKHN1 cHBvcnRlZF9mb3JtYXRzW2ldLmZvdXJjYyA9PSBwaXhlbF9mb3JtYXQpCj4gPiArCQkJZm9ybWF0 ID0gJnN1cHBvcnRlZF9mb3JtYXRzW2ldOwo+ID4gKwl9Cj4gPiArCj4gPiArCWlmICghZm9ybWF0 KSB7Cj4gPiArCQlEUk1fRVJST1IoIkZvcm1hdCBub3Qgc3VwcG9ydGVkOiAweCV4XG4iLCBwaXhl bF9mb3JtYXQpOwo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCX0KPiAKPiBTYW1lIGhlcmUu IEFsdGhvdWdoIHRoaXMgc2hvdWxkIGJlIGltcG9zc2libGUsIHdpdGggYXRvbWljIHRoZQo+IGNv cmUvaGVscGVycyBwcmUtY2hlY2sgdGhlIHBpeGVsIGZvcm1hdCBhZ2FpbnN0IHRoZSBmb3JtYXQg dGFibGUgeW91Cj4gcmVnaXN0ZXIgb24gdGhlIChwcmltYXJ5KSBwbGFuZSBhbHJlYWR5LiBTbyBq dXN0IFdBUk5fT04gKyBiYWlsaW5nIG91dC4KPiAKPiA+ICsKPiA+ICsJLyogSERMQ0QgdXNlcyAn Ynl0ZXMgcGVyIHBpeGVsJywgemVybyBtZWFucyAxIGJ5dGUgKi8KPiA+ICsJYnRwcCA9IChmb3Jt YXQtPmJpdHNfcGVyX3BpeGVsICsgNykgLyA4Owo+ID4gKwloZGxjZF93cml0ZShoZGxjZCwgSERM Q0RfUkVHX1BJWEVMX0ZPUk1BVCwgKGJ0cHAgLSAxKSA8PCAzKTsKPiA+ICsKPiA+ICsJLyoKPiA+ ICsJICogVGhlIGZvcm1hdCBvZiB0aGUgSERMQ0RfUkVHXzxjb2xvcj5fU0VMRUNUIHJlZ2lzdGVy IGlzOgo+ID4gKwkgKiAgIC0gYml0c1syMzoxNl0gLSBkZWZhdWx0IHZhbHVlIGZvciB0aGF0IGNv bG9yIGNvbXBvbmVudAo+ID4gKwkgKiAgIC0gYml0c1sxMTo4XSAgLSBudW1iZXIgb2YgYml0cyB0 byBleHRyYWN0IGZvciBlYWNoIGNvbG9yIGNvbXBvbmVudAo+ID4gKwkgKiAgIC0gYml0c1s0OjBd ICAgLSBpbmRleCBvZiB0aGUgbG93ZXN0IGJpdCB0byBleHRyYWN0Cj4gPiArCSAqCj4gPiArCSAq IFRoZSBkZWZhdWx0IGNvbG9yIHZhbHVlIGlzIHVzZWQgd2hlbiBiaXRzWzExOjhdIGFyZSB6ZXJv LCB3aGVuIHRoZQo+ID4gKwkgKiBwaXhlbCBpcyBvdXRzaWRlIHRoZSB2aXNpYmxlIGZyYW1lIGFy ZWEgb3Igd2hlbiB0aGVyZSBpcyBhCj4gPiArCSAqIGJ1ZmZlciB1bmRlcnJ1bi4KPiA+ICsJICov Cj4gPiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfUkVEX1NFTEVDVCwgZGVmYXVsdF9j b2xvciB8Cj4gPiArCQlmb3JtYXQtPnJlZC5vZmZzZXQgfCAoZm9ybWF0LT5yZWQubGVuZ3RoICYg MHhmKSA8PCA4KTsKPiA+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19HUkVFTl9TRUxF Q1QsIGRlZmF1bHRfY29sb3IgfAo+ID4gKwkJZm9ybWF0LT5ncmVlbi5vZmZzZXQgfCAoZm9ybWF0 LT5ncmVlbi5sZW5ndGggJiAweGYpIDw8IDgpOwo+ID4gKwloZGxjZF93cml0ZShoZGxjZCwgSERM Q0RfUkVHX0JMVUVfU0VMRUNULCBkZWZhdWx0X2NvbG9yIHwKPiA+ICsJCWZvcm1hdC0+Ymx1ZS5v ZmZzZXQgfCAoZm9ybWF0LT5ibHVlLmxlbmd0aCAmIDB4ZikgPDwgOCk7Cj4gPiArCj4gPiArCXJl dHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBoZGxjZF9jcnRjX21vZGVfc2V0 X25vZmIoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4gK3sKPiA+ICsJc3RydWN0IGhkbGNkX2Ry bV9wcml2YXRlICpoZGxjZCA9IGNydGNfdG9faGRsY2RfcHJpdihjcnRjKTsKPiA+ICsJc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm0gPSAmY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGU7Cj4gPiAr CXN0cnVjdCB2aWRlb21vZGUgdm07Cj4gPiArCXVuc2lnbmVkIGludCBwb2xhcml0aWVzLCBsaW5l X2xlbmd0aCwgZXJyOwo+ID4gKwo+ID4gKwl2bS52ZnJvbnRfcG9yY2ggPSBtLT5jcnRjX3ZzeW5j X3N0YXJ0IC0gbS0+Y3J0Y192ZGlzcGxheTsKPiA+ICsJdm0udmJhY2tfcG9yY2ggPSBtLT5jcnRj X3Z0b3RhbCAtIG0tPmNydGNfdnN5bmNfZW5kOwo+ID4gKwl2bS52c3luY19sZW4gPSBtLT5jcnRj X3ZzeW5jX2VuZCAtIG0tPmNydGNfdnN5bmNfc3RhcnQ7Cj4gPiArCXZtLmhmcm9udF9wb3JjaCA9 IG0tPmNydGNfaHN5bmNfc3RhcnQgLSBtLT5jcnRjX2hkaXNwbGF5Owo+ID4gKwl2bS5oYmFja19w b3JjaCA9IG0tPmNydGNfaHRvdGFsIC0gbS0+Y3J0Y19oc3luY19lbmQ7Cj4gPiArCXZtLmhzeW5j X2xlbiA9IG0tPmNydGNfaHN5bmNfZW5kIC0gbS0+Y3J0Y19oc3luY19zdGFydDsKPiA+ICsKPiA+ ICsJcG9sYXJpdGllcyA9IEhETENEX1BPTEFSSVRZX0RBVEFFTiB8IEhETENEX1BPTEFSSVRZX0RB VEE7Cj4gPiArCj4gPiArCWlmIChtLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKQo+ID4g KwkJcG9sYXJpdGllcyB8PSBIRExDRF9QT0xBUklUWV9IU1lOQzsKPiA+ICsJaWYgKG0tPmZsYWdz ICYgRFJNX01PREVfRkxBR19QVlNZTkMpCj4gPiArCQlwb2xhcml0aWVzIHw9IEhETENEX1BPTEFS SVRZX1ZTWU5DOwo+ID4gKwo+ID4gKwlsaW5lX2xlbmd0aCA9IGNydGMtPnByaW1hcnktPnN0YXRl LT5mYi0+cGl0Y2hlc1swXTsKPiA+ICsKPiA+ICsJLyogQWxsb3cgbWF4IG51bWJlciBvZiBvdXRz dGFuZGluZyByZXF1ZXN0cyBhbmQgbGFyZ2VzdCBidXJzdCBzaXplICovCj4gPiArCWhkbGNkX3dy aXRlKGhkbGNkLCBIRExDRF9SRUdfQlVTX09QVElPTlMsCj4gPiArCQkgICAgSERMQ0RfQlVTX01B WF9PVVRTVEFORCB8IEhETENEX0JVU19CVVJTVF8xNik7Cj4gPiArCj4gPiArCWhkbGNkX3dyaXRl KGhkbGNkLCBIRExDRF9SRUdfRkJfTElORV9MRU5HVEgsIGxpbmVfbGVuZ3RoKTsKPiA+ICsJaGRs Y2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19GQl9MSU5FX1BJVENILCBsaW5lX2xlbmd0aCk7Cj4g PiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfRkJfTElORV9DT1VOVCwgbS0+Y3J0Y192 ZGlzcGxheSAtIDEpOwo+ID4gKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX1ZfREFUQSwg bS0+Y3J0Y192ZGlzcGxheSAtIDEpOwo+ID4gKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVH X1ZfQkFDS19QT1JDSCwgdm0udmJhY2tfcG9yY2ggLSAxKTsKPiA+ICsJaGRsY2Rfd3JpdGUoaGRs Y2QsIEhETENEX1JFR19WX0ZST05UX1BPUkNILCB2bS52ZnJvbnRfcG9yY2ggLSAxKTsKPiA+ICsJ aGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19WX1NZTkMsIHZtLnZzeW5jX2xlbiAtIDEpOwo+ ID4gKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX0hfQkFDS19QT1JDSCwgdm0uaGJhY2tf cG9yY2ggLSAxKTsKPiA+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19IX0ZST05UX1BP UkNILCB2bS5oZnJvbnRfcG9yY2ggLSAxKTsKPiA+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENE X1JFR19IX1NZTkMsIHZtLmhzeW5jX2xlbiAtIDEpOwo+ID4gKwloZGxjZF93cml0ZShoZGxjZCwg SERMQ0RfUkVHX0hfREFUQSwgbS0+Y3J0Y19oZGlzcGxheSAtIDEpOwo+ID4gKwloZGxjZF93cml0 ZShoZGxjZCwgSERMQ0RfUkVHX1BPTEFSSVRJRVMsIHBvbGFyaXRpZXMpOwo+ID4gKwo+ID4gKwll cnIgPSBoZGxjZF9zZXRfcHhsX2ZtdChjcnRjKTsKPiA+ICsJaWYgKGVycikKPiA+ICsJCXJldHVy bjsKPiA+ICsKPiA+ICsJY2xrX3NldF9yYXRlKGhkbGNkLT5jbGssIG0tPmNydGNfY2xvY2sgKiAx MDAwKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgaGRsY2RfY3J0Y19lbmFibGUoc3Ry dWN0IGRybV9jcnRjICpjcnRjKQo+ID4gK3sKPiA+ICsJc3RydWN0IGhkbGNkX2RybV9wcml2YXRl ICpoZGxjZCA9IGNydGNfdG9faGRsY2RfcHJpdihjcnRjKTsKPiA+ICsKPiA+ICsJY2xrX3ByZXBh cmVfZW5hYmxlKGhkbGNkLT5jbGspOwo+ID4gKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVH X0NPTU1BTkQsIDEpOwo+ID4gKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyB2b2lkIGhkbGNkX2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gY3J0Y190 b19oZGxjZF9wcml2KGNydGMpOwo+ID4gKwo+ID4gKwlpZiAoIWNydGMtPnByaW1hcnktPmZiKQo+ ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRsY2QtPmNs ayk7Cj4gPiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfQ09NTUFORCwgMCk7Cj4gPiAr CWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQg aGRsY2RfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gKwkJCQkg ICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGhkbGNk X2RybV9wcml2YXRlICpoZGxjZCA9IGNydGNfdG9faGRsY2RfcHJpdihjcnRjKTsKPiA+ICsJc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmc3RhdGUtPmFkanVzdGVkX21vZGU7Cj4gPiAr CWxvbmcgcmF0ZSwgY2xrX3JhdGUgPSBtb2RlLT5jbG9jayAqIDEwMDA7Cj4gPiArCj4gPiArCXJh dGUgPSBjbGtfcm91bmRfcmF0ZShoZGxjZC0+Y2xrLCBjbGtfcmF0ZSk7Cj4gPiArCWlmIChyYXRl ICE9IGNsa19yYXRlKSB7Cj4gPiArCQkvKiBjbG9jayByZXF1aXJlZCBieSBtb2RlIG5vdCBzdXBw b3J0ZWQgYnkgaGFyZHdhcmUgKi8KPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gKwl9Cj4gPiAr Cj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBoZGxjZF9jcnRj X2F0b21pY19iZWdpbihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiArCQkJCSAgICBzdHJ1Y3Qg ZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGhkbGNkX2RybV9wcml2 YXRlICpoZGxjZCA9IGNydGNfdG9faGRsY2RfcHJpdihjcnRjKTsKPiA+ICsJdW5zaWduZWQgbG9u ZyBmbGFnczsKPiA+ICsKPiA+ICsJaWYgKGNydGMtPnN0YXRlLT5ldmVudCkgewo+ID4gKwkJY3J0 Yy0+c3RhdGUtPmV2ZW50LT5waXBlID0gZHJtX2NydGNfaW5kZXgoY3J0Yyk7Cj4gPiArCj4gPiAr CQlXQVJOX09OKGRybV9jcnRjX3ZibGFua19nZXQoY3J0YykgIT0gMCk7Cj4gPiArCj4gPiArCQlz cGluX2xvY2tfaXJxc2F2ZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cj4gPiArCQlo ZGxjZC0+ZXZlbnQgPSBjcnRjLT5zdGF0ZS0+ZXZlbnQ7Cj4gPiArCQlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiA+ICsJCWNydGMtPnN0YXRl LT5ldmVudCA9IE5VTEw7Cj4gPiArCX0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgaGRs Y2RfY3J0Y19hdG9taWNfZmx1c2goc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gKwkJCQkgICAg c3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKPiA+ICt7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBib29sIGhkbGNkX2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4g PiArCQkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gPiArCQkJc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCj4gPiArewo+ID4gKwlyZXR1cm4gdHJ1 ZTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJf ZnVuY3MgaGRsY2RfY3J0Y19oZWxwZXJfZnVuY3MgPSB7Cj4gPiArCS5tb2RlX2ZpeHVwCT0gaGRs Y2RfY3J0Y19tb2RlX2ZpeHVwLAo+ID4gKwkubW9kZV9zZXQJPSBkcm1faGVscGVyX2NydGNfbW9k ZV9zZXQsCj4gPiArCS5tb2RlX3NldF9iYXNlCT0gZHJtX2hlbHBlcl9jcnRjX21vZGVfc2V0X2Jh c2UsCj4gPiArCS5tb2RlX3NldF9ub2ZiCT0gaGRsY2RfY3J0Y19tb2RlX3NldF9ub2ZiLAo+ID4g KwkuZW5hYmxlCQk9IGhkbGNkX2NydGNfZW5hYmxlLAo+ID4gKwkuZGlzYWJsZQk9IGhkbGNkX2Ny dGNfZGlzYWJsZSwKPiA+ICsJLnByZXBhcmUJPSBoZGxjZF9jcnRjX2Rpc2FibGUsCj4gPiArCS5j b21taXQJCT0gaGRsY2RfY3J0Y19lbmFibGUsCj4gPiArCS5hdG9taWNfY2hlY2sJPSBoZGxjZF9j cnRjX2F0b21pY19jaGVjaywKPiA+ICsJLmF0b21pY19iZWdpbgk9IGhkbGNkX2NydGNfYXRvbWlj X2JlZ2luLAo+ID4gKwkuYXRvbWljX2ZsdXNoCT0gaGRsY2RfY3J0Y19hdG9taWNfZmx1c2gsCj4g PiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IGhkbGNkX3BsYW5lX2F0b21pY19jaGVjayhzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+ICsJCQkJICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg KnN0YXRlKQo+ID4gK3sKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2 b2lkIGhkbGNkX3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4g PiArCQkJCSAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+ID4gK3sKPiA+ICsJ c3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZDsKPiA+ICsJc3RydWN0IGRybV9nZW1fY21h X29iamVjdCAqZ2VtOwo+ID4gKwlkbWFfYWRkcl90IHNjYW5vdXRfc3RhcnQ7Cj4gPiArCj4gPiAr CWlmICghcGxhbmUtPnN0YXRlLT5jcnRjIHx8ICFwbGFuZS0+c3RhdGUtPmZiKQo+ID4gKwkJcmV0 dXJuOwo+ID4gKwo+ID4gKwloZGxjZCA9IGNydGNfdG9faGRsY2RfcHJpdihwbGFuZS0+c3RhdGUt PmNydGMpOwo+ID4gKwlnZW0gPSBkcm1fZmJfY21hX2dldF9nZW1fb2JqKHBsYW5lLT5zdGF0ZS0+ ZmIsIDApOwo+ID4gKwlzY2Fub3V0X3N0YXJ0ID0gZ2VtLT5wYWRkcjsKPiA+ICsJaGRsY2Rfd3Jp dGUoaGRsY2QsIEhETENEX1JFR19GQl9CQVNFLCBzY2Fub3V0X3N0YXJ0KTsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIGhkbGNkX3Bs YW5lX2hlbHBlcl9mdW5jcyA9IHsKPiA+ICsJLnByZXBhcmVfZmIgPSBOVUxMLAo+ID4gKwkuY2xl YW51cF9mYiA9IE5VTEwsCj4gPiArCS5hdG9taWNfY2hlY2sgPSBoZGxjZF9wbGFuZV9hdG9taWNf Y2hlY2ssCj4gPiArCS5hdG9taWNfdXBkYXRlID0gaGRsY2RfcGxhbmVfYXRvbWljX3VwZGF0ZSwK PiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGhkbGNkX3BsYW5lX2Rlc3Ryb3koc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUpCj4gPiArewo+ID4gKwlkcm1fcGxhbmVfaGVscGVyX2Rpc2FibGUo cGxhbmUpOwo+ID4gKwlkcm1fcGxhbmVfY2xlYW51cChwbGFuZSk7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGhkbGNkX3BsYW5lX2Z1bmNzID0g ewo+ID4gKwkudXBkYXRlX3BsYW5lCQk9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwK PiA+ICsJLmRpc2FibGVfcGxhbmUJCT0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwK PiA+ICsJLmRlc3Ryb3kJCT0gaGRsY2RfcGxhbmVfZGVzdHJveSwKPiA+ICsJLnJlc2V0CQkJPSBk cm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNldCwKPiA+ICsJLmF0b21pY19kdXBsaWNhdGVfc3Rh dGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCj4gPiArCS5hdG9t aWNfZGVzdHJveV9zdGF0ZQk9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUs Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGRybV9wbGFuZSAqaGRsY2RfcGxhbmVf aW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ID4gK3sKPiA+ICsJc3RydWN0IGhkbGNkX2Ry bV9wcml2YXRlICpoZGxjZCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCXN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lID0gTlVMTDsKPiA+ICsJdTMyIGZvcm1hdHNbQVJSQVlfU0laRShzdXBwb3J0ZWRf Zm9ybWF0cyldLCBpOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlwbGFuZSA9IGRldm1fa3ph bGxvYyhkcm0tPmRldiwgc2l6ZW9mKCpwbGFuZSksIEdGUF9LRVJORUwpOwo+ID4gKwlpZiAoIXBs YW5lKQo+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gPiArCj4gPiArCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKHN1cHBvcnRlZF9mb3JtYXRzKTsgaSsrKQo+ID4gKwkJZm9ybWF0 c1tpXSA9IHN1cHBvcnRlZF9mb3JtYXRzW2ldLmZvdXJjYzsKPiA+ICsKPiA+ICsJcmV0ID0gZHJt X3VuaXZlcnNhbF9wbGFuZV9pbml0KGRybSwgcGxhbmUsIDB4ZmYsICZoZGxjZF9wbGFuZV9mdW5j cywKPiA+ICsJCQkJICAgICAgIGZvcm1hdHMsIEFSUkFZX1NJWkUoZm9ybWF0cyksCj4gPiArCQkJ CSAgICAgICBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJ ZGV2bV9rZnJlZShkcm0tPmRldiwgcGxhbmUpOwo+ID4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsK PiA+ICsJfQo+ID4gKwo+ID4gKwlkcm1fcGxhbmVfaGVscGVyX2FkZChwbGFuZSwgJmhkbGNkX3Bs YW5lX2hlbHBlcl9mdW5jcyk7Cj4gPiArCWhkbGNkLT5wbGFuZSA9IHBsYW5lOwo+ID4gKwo+ID4g KwlyZXR1cm4gcGxhbmU7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgaGRsY2RfY3J0Y19zdXNwZW5k KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ICt7Cj4gPiArCWhkbGNkX2NydGNfZGlzYWJsZShj cnRjKTsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCBoZGxjZF9jcnRjX3Jlc3VtZShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCj4gPiArewo+ID4gKwloZGxjZF9jcnRjX2VuYWJsZShjcnRjKTsKPiA+ICt9 Cj4gPiArCj4gPiAraW50IGhkbGNkX3NldHVwX2NydGMoc3RydWN0IGRybV9kZXZpY2UgKmRybSkK PiA+ICt7Cj4gPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBkcm0tPmRldl9w cml2YXRlOwo+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5Owo+ID4gKwlpbnQgcmV0Owo+ ID4gKwo+ID4gKwlwcmltYXJ5ID0gaGRsY2RfcGxhbmVfaW5pdChkcm0pOwo+ID4gKwlpZiAoSVNf RVJSKHByaW1hcnkpKQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIocHJpbWFyeSk7Cj4gPiArCj4gPiAr CXJldCA9IGRybV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoZHJtLCAmaGRsY2QtPmNydGMsIHByaW1h cnksIE5VTEwsCj4gPiArCQkJCQkmaGRsY2RfY3J0Y19mdW5jcyk7Cj4gPiArCWlmIChyZXQpIHsK PiA+ICsJCWhkbGNkX3BsYW5lX2Rlc3Ryb3kocHJpbWFyeSk7Cj4gPiArCQlkZXZtX2tmcmVlKGRy bS0+ZGV2LCBwcmltYXJ5KTsKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJ ZHJtX2NydGNfaGVscGVyX2FkZCgmaGRsY2QtPmNydGMsICZoZGxjZF9jcnRjX2hlbHBlcl9mdW5j cyk7Cj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYXJtL2hkbGNkX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9kcnYuYwo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLjQ1NDQwYjEKPiA+IC0tLSAv ZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfZHJ2LmMKPiA+IEBA IC0wLDAgKzEsNTU1IEBACj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBB Uk0gTGltaXRlZAo+ID4gKyAqIEF1dGhvcjogTGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1QGFybS5j b20+Cj4gPiArICoKPiA+ICsgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5k IGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vuc2UuICBT ZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZl Cj4gPiArICogZm9yIG1vcmUgZGV0YWlscy4KPiA+ICsgKgo+ID4gKyAqICBBUk0gSERMQ0QgRHJp dmVyCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gKyNp bmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiA+ ICsjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2dy YXBoLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX3Jlc2VydmVkX21lbS5oPgo+ID4gKyNpbmNs dWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+ Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ID4gKyNpbmNsdWRlIDxk cm0vZHJtX2NydGMuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ID4g KyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2Zi X2NtYV9oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgo+ ID4gKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgImhkbGNkX2Ry di5oIgo+ID4gKyNpbmNsdWRlICJoZGxjZF9yZWdzLmgiCj4gPiArCj4gPiArc3RhdGljIGludCBj b21wYXJlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCj4gPiArewo+ID4gKwly ZXR1cm4gZGV2LT5vZl9ub2RlID09IGRhdGE7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQg aGRsY2RfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBsb25nIGZsYWdzKQo+ ID4gK3sKPiA+ICsJc3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZCA9IGRybS0+ZGV2X3By aXZhdGU7Cj4gPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9k ZXZpY2UoZHJtLT5kZXYpOwo+ID4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiA+ICsJdTMyIHZl cnNpb247Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCWhkbGNkLT5jbGsgPSBkZXZtX2Nsa19n ZXQoZHJtLT5kZXYsICJweGxjbGsiKTsKPiA+ICsJaWYgKElTX0VSUihoZGxjZC0+Y2xrKSkKPiA+ ICsJCXJldHVybiBQVFJfRVJSKGhkbGNkLT5jbGspOwo+ID4gKwo+ID4gKyNpZmRlZiBDT05GSUdf REVCVUdfRlMKPiA+ICsJYXRvbWljX3NldCgmaGRsY2QtPmJ1ZmZlcl91bmRlcnJ1bl9jb3VudCwg MCk7Cj4gPiArCWF0b21pY19zZXQoJmhkbGNkLT5idXNfZXJyb3JfY291bnQsIDApOwo+ID4gKwlh dG9taWNfc2V0KCZoZGxjZC0+dnN5bmNfY291bnQsIDApOwo+ID4gKwlhdG9taWNfc2V0KCZoZGxj ZC0+ZG1hX2VuZF9jb3VudCwgMCk7Cj4gPiArI2VuZGlmCj4gPiArCj4gPiArCXJlcyA9IHBsYXRm b3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4gPiArCWhkbGNkLT5t bWlvID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRybS0+ZGV2LCByZXMpOwo+ID4gKwlpZiAoSVNf RVJSKGhkbGNkLT5tbWlvKSkgewo+ID4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbWFwIGNvbnRy b2wgcmVnaXN0ZXJzIGFyZWFcbiIpOwo+ID4gKwkJcmV0ID0gUFRSX0VSUihoZGxjZC0+bW1pbyk7 Cj4gPiArCQloZGxjZC0+bW1pbyA9IE5VTEw7Cj4gPiArCQlnb3RvIGZhaWw7Cj4gPiArCX0KPiA+ ICsKPiA+ICsJdmVyc2lvbiA9IGhkbGNkX3JlYWQoaGRsY2QsIEhETENEX1JFR19WRVJTSU9OKTsK PiA+ICsJaWYgKCh2ZXJzaW9uICYgSERMQ0RfUFJPRFVDVF9NQVNLKSAhPSBIRExDRF9QUk9EVUNU X0lEKSB7Cj4gPiArCQlEUk1fRVJST1IoInVua25vd24gcHJvZHVjdCBpZDogMHgleFxuIiwgdmVy c2lvbik7Cj4gPiArCQlyZXQgPSAtRUlOVkFMOwo+ID4gKwkJZ290byBmYWlsOwo+ID4gKwl9Cj4g PiArCURSTV9JTkZPKCJmb3VuZCBBUk0gSERMQ0QgdmVyc2lvbiByJWRwJWRcbiIsCj4gPiArCQko dmVyc2lvbiAmIEhETENEX1ZFUlNJT05fTUFKT1JfTUFTSykgPj4gOCwKPiA+ICsJCXZlcnNpb24g JiBIRExDRF9WRVJTSU9OX01JTk9SX01BU0spOwo+ID4gKwo+ID4gKwkvKiBHZXQgdGhlIG9wdGlv bmFsIGZyYW1lYnVmZmVyIG1lbW9yeSByZXNvdXJjZSAqLwo+ID4gKwlyZXQgPSBvZl9yZXNlcnZl ZF9tZW1fZGV2aWNlX2luaXQoZHJtLT5kZXYpOwo+ID4gKwlpZiAocmV0ICYmIHJldCAhPSAtRU5P REVWKQo+ID4gKwkJZ290byBmYWlsOwo+ID4gKwo+ID4gKwlyZXQgPSBkbWFfc2V0X21hc2tfYW5k X2NvaGVyZW50KGRybS0+ZGV2LCBETUFfQklUX01BU0soMzIpKTsKPiA+ICsJaWYgKHJldCkKPiA+ ICsJCWdvdG8gc2V0dXBfZmFpbDsKPiA+ICsKPiA+ICsJcmV0ID0gaGRsY2Rfc2V0dXBfY3J0Yyhk cm0pOwo+ID4gKwlpZiAocmV0IDwgMCkgewo+ID4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY3Jl YXRlIGNydGNcbiIpOwo+ID4gKwkJZ290byBzZXR1cF9mYWlsOwo+ID4gKwl9Cj4gPiArCj4gPiAr CXBtX3J1bnRpbWVfZW5hYmxlKGRybS0+ZGV2KTsKPiA+ICsKPiA+ICsJcG1fcnVudGltZV9nZXRf c3luYyhkcm0tPmRldik7Cj4gPiArCXJldCA9IGRybV9pcnFfaW5zdGFsbChkcm0sIHBsYXRmb3Jt X2dldF9pcnEocGRldiwgMCkpOwo+ID4gKwlwbV9ydW50aW1lX3B1dF9zeW5jKGRybS0+ZGV2KTsK PiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluc3RhbGwg SVJRIGhhbmRsZXJcbiIpOwo+ID4gKwkJZ290byBpcnFfZmFpbDsKPiA+ICsJfQo+ID4gKwo+ID4g KwlyZXR1cm4gMDsKPiA+ICsKPiA+ICtpcnFfZmFpbDoKPiA+ICsJZHJtX2NydGNfY2xlYW51cCgm aGRsY2QtPmNydGMpOwo+ID4gK3NldHVwX2ZhaWw6Cj4gPiArCW9mX3Jlc2VydmVkX21lbV9kZXZp Y2VfcmVsZWFzZShkcm0tPmRldik7Cj4gPiArZmFpbDoKPiA+ICsJZGV2bV9jbGtfcHV0KGRybS0+ ZGV2LCBoZGxjZC0+Y2xrKTsKPiA+ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHZvaWQgaGRsY2RfZmJfb3V0cHV0X3BvbGxfY2hhbmdlZChzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtKQo+ID4gK3sKPiA+ICsJc3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZCA9 IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCj4gPiArCWlmIChoZGxjZC0+ZmJkZXYpIHsKPiA+ICsJ CWRybV9mYmRldl9jbWFfaG90cGx1Z19ldmVudChoZGxjZC0+ZmJkZXYpOwo+ID4gKwl9Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIGhk bGNkX21vZGVfY29uZmlnX2Z1bmNzID0gewo+ID4gKwkuZmJfY3JlYXRlID0gZHJtX2ZiX2NtYV9j cmVhdGUsCj4gPiArCS5vdXRwdXRfcG9sbF9jaGFuZ2VkID0gaGRsY2RfZmJfb3V0cHV0X3BvbGxf Y2hhbmdlZCwKPiA+ICsJLmF0b21pY19jaGVjayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLAo+ ID4gKwkuYXRvbWljX2NvbW1pdCA9IGRybV9hdG9taWNfaGVscGVyX2NvbW1pdCwKPiA+ICt9Owo+ ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGhkbGNkX3NldHVwX21vZGVfY29uZmlnKHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0pCj4gPiArewo+ID4gKwlkcm1fbW9kZV9jb25maWdfaW5pdChkcm0pOwo+ID4g Kwlkcm0tPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IDA7Cj4gPiArCWRybS0+bW9kZV9jb25maWcu bWluX2hlaWdodCA9IDA7Cj4gPiArCWRybS0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gSERMQ0Rf TUFYX1hSRVM7Cj4gPiArCWRybS0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IEhETENEX01BWF9Z UkVTOwo+ID4gKwlkcm0tPm1vZGVfY29uZmlnLmZ1bmNzID0gJmhkbGNkX21vZGVfY29uZmlnX2Z1 bmNzOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBoZGxjZF9wcmVjbG9zZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gPiArewo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgdm9pZCBoZGxjZF9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRy bSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBkcm0tPmRl dl9wcml2YXRlOwo+ID4gKwo+ID4gKwlkcm1fZmJkZXZfY21hX3Jlc3RvcmVfbW9kZShoZGxjZC0+ ZmJkZXYpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgaGRsY2RfaXJxKGlu dCBpcnEsIHZvaWQgKmFyZykKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBh cmc7Cj4gPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBkcm0tPmRldl9wcml2 YXRlOwo+ID4gKwl1bnNpZ25lZCBsb25nIGlycV9zdGF0dXM7Cj4gPiArCj4gPiArCWlycV9zdGF0 dXMgPSBoZGxjZF9yZWFkKGhkbGNkLCBIRExDRF9SRUdfSU5UX1NUQVRVUyk7Cj4gPiArCj4gPiAr I2lmZGVmIENPTkZJR19ERUJVR19GUwo+ID4gKwlpZiAoaXJxX3N0YXR1cyAmIEhETENEX0lOVEVS UlVQVF9VTkRFUlJVTikgewo+ID4gKwkJYXRvbWljX2luYygmaGRsY2QtPmJ1ZmZlcl91bmRlcnJ1 bl9jb3VudCk7Cj4gPiArCX0KPiA+ICsJaWYgKGlycV9zdGF0dXMgJiBIRExDRF9JTlRFUlJVUFRf RE1BX0VORCkgewo+ID4gKwkJYXRvbWljX2luYygmaGRsY2QtPmRtYV9lbmRfY291bnQpOwo+ID4g Kwl9Cj4gPiArCWlmIChpcnFfc3RhdHVzICYgSERMQ0RfSU5URVJSVVBUX0JVU19FUlJPUikgewo+ ID4gKwkJYXRvbWljX2luYygmaGRsY2QtPmJ1c19lcnJvcl9jb3VudCk7Cj4gPiArCX0KPiA+ICsJ aWYgKGlycV9zdGF0dXMgJiBIRExDRF9JTlRFUlJVUFRfVlNZTkMpIHsKPiA+ICsJCWF0b21pY19p bmMoJmhkbGNkLT52c3luY19jb3VudCk7Cj4gPiArCX0KPiA+ICsjZW5kaWYKPiA+ICsJaWYgKGly cV9zdGF0dXMgJiBIRExDRF9JTlRFUlJVUFRfVlNZTkMpIHsKPiA+ICsJCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7Cj4gPiArCj4gPiArCQlkcm1faGFuZGxlX3ZibGFuayhkcm0sIDApOwo+IAo+IFdlIGhh dmUgZHJtX2NydGNfIHZlcnNpb25zIGZvciB0aGlzIG9uZSAuLi4KPiA+ICsKPiA+ICsJCXNwaW5f bG9ja19pcnFzYXZlKCZkcm0tPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiA+ICsJCWlmIChoZGxjZC0+ ZXZlbnQpIHsKPiA+ICsJCQlkcm1fc2VuZF92YmxhbmtfZXZlbnQoZHJtLCBoZGxjZC0+ZXZlbnQt PnBpcGUsIGhkbGNkLT5ldmVudCk7Cj4gCj4gYW5kIHRoaXMgb25lIG5vdyB0b28uIE5ldyBkcml2 ZXJzIHNob3VsZG4ndCBuZWVkIHRvIGRlYWwgd2l0aCB0aGUgb3BhcXVlCj4gaW50IHBpcGUgc3R1 ZmYgYW55IG1vcmUgb24gdGhlIGNhbGxlciBzaWRlcywgYW5kIHJlYWwgc29vbiAoaG9wZWZ1bGx5 KQo+IHdlJ2xsIGhhdmUgaG9va3MgZm9yIHRoZSB2Ymxhbmsgc3R1ZmYgdGhhdCB0YWtlIHN0cnVj dCBkcm1fY3J0YyAqIHRvby4KPiAKPiBJJ3ZlIHF1aWNrbHkgc2Nyb2xsZWQgdGhyb3VnaCB0aGUg ZHJpdmVyIG90aGVyd2lzZSBhbmQgZGlkbid0IG5vdGljZQo+IGFueXRoaW5nIGVsc2UgdGhhdCBz aG91bGQgYmUgdXBkYXRlZCB0byBsYXRlc3QgcHJhY3RpY2VzLiBMb29rcyByZWFsbHkKPiBnb29k Lgo+IC1EYW5pZWwKPiAKPiA+ICsJCQlkcm1fY3J0Y192YmxhbmtfcHV0KCZoZGxjZC0+Y3J0Yyk7 Cj4gPiArCQkJaGRsY2QtPmV2ZW50ID0gTlVMTDsKPiA+ICsJCX0KPiA+ICsJCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmRybS0+ZXZlbnRfbG9jaywgZmxhZ3MpOwo+ID4gKwl9Cj4gPiArCj4gPiAr CS8qIGFja25vd2xlZGdlIGludGVycnVwdChzKSAqLwo+ID4gKwloZGxjZF93cml0ZShoZGxjZCwg SERMQ0RfUkVHX0lOVF9DTEVBUiwgaXJxX3N0YXR1cyk7Cj4gPiArCj4gPiArCXJldHVybiBJUlFf SEFORExFRDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgaGRsY2RfaXJxX3ByZWluc3Rh bGwoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBoZGxjZF9kcm1f cHJpdmF0ZSAqaGRsY2QgPSBkcm0tPmRldl9wcml2YXRlOwo+ID4gKwkvKiBFbnN1cmUgaW50ZXJy dXB0cyBhcmUgZGlzYWJsZWQgKi8KPiA+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19J TlRfTUFTSywgMCk7Cj4gPiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfSU5UX0NMRUFS LCB+MCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgaGRsY2RfaXJxX3Bvc3RpbnN0YWxs KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gPiArewo+ID4gKyNpZmRlZiBDT05GSUdfREVCVUdf RlMKPiA+ICsJc3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZCA9IGRybS0+ZGV2X3ByaXZh dGU7Cj4gPiArCXVuc2lnbmVkIGxvbmcgaXJxX21hc2sgPSBoZGxjZF9yZWFkKGhkbGNkLCBIRExD RF9SRUdfSU5UX01BU0spOwo+ID4gKwo+ID4gKwkvKiBlbmFibGUgZGVidWcgaW50ZXJydXB0cyAq Lwo+ID4gKwlpcnFfbWFzayB8PSBIRExDRF9ERUJVR19JTlRfTUFTSzsKPiA+ICsKPiA+ICsJaGRs Y2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19JTlRfTUFTSywgaXJxX21hc2spOwo+ID4gKyNlbmRp Zgo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgaGRsY2RfaXJx X3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ID4gK3sKPiA+ICsJc3RydWN0IGhk bGNkX2RybV9wcml2YXRlICpoZGxjZCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCS8qIGRpc2Fi bGUgYWxsIHRoZSBpbnRlcnJ1cHRzIHRoYXQgd2UgbWlnaHQgaGF2ZSBlbmFibGVkICovCj4gPiAr CXVuc2lnbmVkIGxvbmcgaXJxX21hc2sgPSBoZGxjZF9yZWFkKGhkbGNkLCBIRExDRF9SRUdfSU5U X01BU0spOwo+ID4gKwo+ID4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKPiA+ICsJLyogZGlzYWJs ZSBkZWJ1ZyBpbnRlcnJ1cHRzICovCj4gPiArCWlycV9tYXNrICY9IH5IRExDRF9ERUJVR19JTlRf TUFTSzsKPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICsJLyogZGlzYWJsZSB2c3luYyBpbnRlcnJ1cHRz ICovCj4gPiArCWlycV9tYXNrICY9IH5IRExDRF9JTlRFUlJVUFRfVlNZTkM7Cj4gPiArCj4gPiAr CWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfSU5UX01BU0ssIGlycV9tYXNrKTsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludCBoZGxjZF9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0sIHVuc2lnbmVkIGludCBjcnRjKQo+ID4gK3sKPiA+ICsJc3RydWN0IGhkbGNkX2Ry bV9wcml2YXRlICpoZGxjZCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCXVuc2lnbmVkIGludCBt YXNrID0gaGRsY2RfcmVhZChoZGxjZCwgSERMQ0RfUkVHX0lOVF9NQVNLKTsKPiA+ICsKPiA+ICsJ aGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19JTlRfTUFTSywgbWFzayB8IEhETENEX0lOVEVS UlVQVF9WU1lOQyk7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgdm9pZCBoZGxjZF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNp Z25lZCBpbnQgY3J0YykKPiA+ICt7Cj4gPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRs Y2QgPSBkcm0tPmRldl9wcml2YXRlOwo+ID4gKwl1bnNpZ25lZCBpbnQgbWFzayA9IGhkbGNkX3Jl YWQoaGRsY2QsIEhETENEX1JFR19JTlRfTUFTSyk7Cj4gPiArCj4gPiArCWhkbGNkX3dyaXRlKGhk bGNkLCBIRExDRF9SRUdfSU5UX01BU0ssIG1hc2sgJiB+SERMQ0RfSU5URVJSVVBUX1ZTWU5DKTsK PiA+ICt9Cj4gPiArCj4gPiArI2lmZGVmIENPTkZJR19ERUJVR19GUwo+ID4gK3N0YXRpYyBpbnQg aGRsY2Rfc2hvd191bmRlcnJ1bl9jb3VudChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZykK PiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5m b19ub2RlICopbS0+cHJpdmF0ZTsKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IG5vZGUt Pm1pbm9yLT5kZXY7Cj4gPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBkcm0t PmRldl9wcml2YXRlOwo+ID4gKwo+ID4gKwlzZXFfcHJpbnRmKG0sICJ1bmRlcnJ1biA6ICVkXG4i LCBhdG9taWNfcmVhZCgmaGRsY2QtPmJ1ZmZlcl91bmRlcnJ1bl9jb3VudCkpOwo+ID4gKwlzZXFf cHJpbnRmKG0sICJkbWFfZW5kICA6ICVkXG4iLCBhdG9taWNfcmVhZCgmaGRsY2QtPmRtYV9lbmRf Y291bnQpKTsKPiA+ICsJc2VxX3ByaW50ZihtLCAiYnVzX2Vycm9yOiAlZFxuIiwgYXRvbWljX3Jl YWQoJmhkbGNkLT5idXNfZXJyb3JfY291bnQpKTsKPiA+ICsJc2VxX3ByaW50ZihtLCAidnN5bmMg ICAgOiAlZFxuIiwgYXRvbWljX3JlYWQoJmhkbGNkLT52c3luY19jb3VudCkpOwo+ID4gKwlyZXR1 cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBoZGxjZF9zaG93X3B4bGNsb2NrKHN0 cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9pbmZv X25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKiltLT5wcml2YXRlOwo+ID4gKwlz dHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gbm9kZS0+bWlub3ItPmRldjsKPiA+ICsJc3RydWN0IGhk bGNkX2RybV9wcml2YXRlICpoZGxjZCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCXVuc2lnbmVk IGxvbmcgY2xrcmF0ZSA9IGNsa19nZXRfcmF0ZShoZGxjZC0+Y2xrKTsKPiA+ICsJdW5zaWduZWQg bG9uZyBtb2RlX2Nsb2NrID0gaGRsY2QtPmNydGMubW9kZS5jcnRjX2Nsb2NrICogMTAwMDsKPiA+ ICsKPiA+ICsJc2VxX3ByaW50ZihtLCAiaHcgIDogJWx1XG4iLCBjbGtyYXRlKTsKPiA+ICsJc2Vx X3ByaW50ZihtLCAibW9kZTogJWx1XG4iLCBtb2RlX2Nsb2NrKTsKPiA+ICsJcmV0dXJuIDA7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2luZm9fbGlzdCBoZGxjZF9kZWJ1Z2Zz X2xpc3RbXSA9IHsKPiA+ICsJeyAiaW50ZXJydXB0X2NvdW50IiwgaGRsY2Rfc2hvd191bmRlcnJ1 bl9jb3VudCwgMCB9LAo+ID4gKwl7ICJjbG9ja3MiLCBoZGxjZF9zaG93X3B4bGNsb2NrLCAwIH0s Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IGhkbGNkX2RlYnVnZnNfaW5pdChzdHJ1Y3Qg ZHJtX21pbm9yICptaW5vcikKPiA+ICt7Cj4gPiArCXJldHVybiBkcm1fZGVidWdmc19jcmVhdGVf ZmlsZXMoaGRsY2RfZGVidWdmc19saXN0LAo+ID4gKwkJQVJSQVlfU0laRShoZGxjZF9kZWJ1Z2Zz X2xpc3QpLAltaW5vci0+ZGVidWdmc19yb290LCBtaW5vcik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyB2b2lkIGhkbGNkX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikK PiA+ICt7Cj4gPiArCWRybV9kZWJ1Z2ZzX3JlbW92ZV9maWxlcyhoZGxjZF9kZWJ1Z2ZzX2xpc3Qs Cj4gPiArCQlBUlJBWV9TSVpFKGhkbGNkX2RlYnVnZnNfbGlzdCksIG1pbm9yKTsKPiA+ICt9Cj4g PiArI2VuZGlmCj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMg Zm9wcyA9IHsKPiA+ICsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAo+ID4gKwkub3BlbgkJPSBkcm1f b3BlbiwKPiA+ICsJLnJlbGVhc2UJPSBkcm1fcmVsZWFzZSwKPiA+ICsJLnVubG9ja2VkX2lvY3Rs CT0gZHJtX2lvY3RsLAo+ID4gKyNpZmRlZiBDT05GSUdfQ09NUEFUCj4gPiArCS5jb21wYXRfaW9j dGwJPSBkcm1fY29tcGF0X2lvY3RsLAo+ID4gKyNlbmRpZgo+ID4gKwkucG9sbAkJPSBkcm1fcG9s bCwKPiA+ICsJLnJlYWQJCT0gZHJtX3JlYWQsCj4gPiArCS5sbHNlZWsJCT0gbm9vcF9sbHNlZWss Cj4gPiArCS5tbWFwCQk9IGRybV9nZW1fY21hX21tYXAsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0 aWMgc3RydWN0IGRybV9kcml2ZXIgaGRsY2RfZHJpdmVyID0gewo+ID4gKwkuZHJpdmVyX2ZlYXR1 cmVzID0gRFJJVkVSX0hBVkVfSVJRIHwgRFJJVkVSX0dFTSB8Cj4gPiArCQkJICAgRFJJVkVSX01P REVTRVQgfCBEUklWRVJfUFJJTUUgfAo+ID4gKwkJCSAgIERSSVZFUl9BVE9NSUMsCj4gPiArCS5w cmVjbG9zZSA9IGhkbGNkX3ByZWNsb3NlLAo+ID4gKwkubGFzdGNsb3NlID0gaGRsY2RfbGFzdGNs b3NlLAo+ID4gKwkuaXJxX2hhbmRsZXIgPSBoZGxjZF9pcnEsCj4gPiArCS5pcnFfcHJlaW5zdGFs bCA9IGhkbGNkX2lycV9wcmVpbnN0YWxsLAo+ID4gKwkuaXJxX3Bvc3RpbnN0YWxsID0gaGRsY2Rf aXJxX3Bvc3RpbnN0YWxsLAo+ID4gKwkuaXJxX3VuaW5zdGFsbCA9IGhkbGNkX2lycV91bmluc3Rh bGwsCj4gPiArCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBkcm1fdmJsYW5rX25vX2h3X2NvdW50ZXIs Cj4gPiArCS5lbmFibGVfdmJsYW5rID0gaGRsY2RfZW5hYmxlX3ZibGFuaywKPiA+ICsJLmRpc2Fi bGVfdmJsYW5rID0gaGRsY2RfZGlzYWJsZV92YmxhbmssCj4gPiArCS5nZW1fZnJlZV9vYmplY3Qg PSBkcm1fZ2VtX2NtYV9mcmVlX29iamVjdCwKPiA+ICsJLmdlbV92bV9vcHMgPSAmZHJtX2dlbV9j bWFfdm1fb3BzLAo+ID4gKwkuZHVtYl9jcmVhdGUgPSBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZSwK PiA+ICsJLmR1bWJfbWFwX29mZnNldCA9IGRybV9nZW1fY21hX2R1bWJfbWFwX29mZnNldCwKPiA+ ICsJLmR1bWJfZGVzdHJveSA9IGRybV9nZW1fZHVtYl9kZXN0cm95LAo+ID4gKwkucHJpbWVfaGFu ZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCj4gPiArCS5wcmltZV9mZF90 b19oYW5kbGUgPSBkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRsZSwKPiA+ICsJLmdlbV9wcmltZV9l eHBvcnQgPSBkcm1fZ2VtX3ByaW1lX2V4cG9ydCwKPiA+ICsJLmdlbV9wcmltZV9pbXBvcnQgPSBk cm1fZ2VtX3ByaW1lX2ltcG9ydCwKPiA+ICsJLmdlbV9wcmltZV9nZXRfc2dfdGFibGUgPSBkcm1f Z2VtX2NtYV9wcmltZV9nZXRfc2dfdGFibGUsCj4gPiArCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3Rh YmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlLAo+ID4gKwkuZ2VtX3ByaW1l X3ZtYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV92bWFwLAo+ID4gKwkuZ2VtX3ByaW1lX3Z1bm1hcCA9 IGRybV9nZW1fY21hX3ByaW1lX3Z1bm1hcCwKPiA+ICsJLmdlbV9wcmltZV9tbWFwID0gZHJtX2dl bV9jbWFfcHJpbWVfbW1hcCwKPiA+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4gPiArCS5kZWJ1 Z2ZzX2luaXQgPSBoZGxjZF9kZWJ1Z2ZzX2luaXQsCj4gPiArCS5kZWJ1Z2ZzX2NsZWFudXAgPSBo ZGxjZF9kZWJ1Z2ZzX2NsZWFudXAsCj4gPiArI2VuZGlmCj4gPiArCS5mb3BzID0gJmZvcHMsCj4g PiArCS5uYW1lID0gImhkbGNkIiwKPiA+ICsJLmRlc2MgPSAiQVJNIEhETENEIENvbnRyb2xsZXIg RFJNIiwKPiA+ICsJLmRhdGUgPSAiMjAxNTEwMjEiLAo+ID4gKwkubWFqb3IgPSAxLAo+ID4gKwku bWlub3IgPSAwLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGludCBoZGxjZF9hZGRfY29tcG9u ZW50cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtYXN0ZXIgKm1hc3RlcikKPiA+ICt7Cj4g PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydCwgKmVwID0gTlVMTDsKPiA+ICsJaW50IHJldCA9 IC1FTlhJTzsKPiA+ICsKPiA+ICsJaWYgKCFkZXYtPm9mX25vZGUpCj4gPiArCQlyZXR1cm4gLUVO T0RFVjsKPiA+ICsKPiA+ICsJZG8gewo+ID4gKwkJZXAgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRw b2ludChkZXYtPm9mX25vZGUsIGVwKTsKPiA+ICsJCWlmICghZXApCj4gPiArCQkJYnJlYWs7Cj4g PiArCj4gPiArCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUoZXApKSB7Cj4gPiArCQkJb2Zf bm9kZV9wdXQoZXApOwo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJcG9y dCA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZXApOwo+ID4gKwkJb2Zfbm9kZV9w dXQoZXApOwo+ID4gKwkJaWYgKCFwb3J0IHx8ICFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBvcnQp KSB7Cj4gPiArCQkJb2Zfbm9kZV9wdXQocG9ydCk7Cj4gPiArCQkJY29udGludWU7Cj4gPiArCQl9 Cj4gPiArCj4gPiArCQlyZXQgPSBjb21wb25lbnRfbWFzdGVyX2FkZF9jaGlsZChtYXN0ZXIsIGNv bXBhcmVfZGV2LCBwb3J0KTsKPiA+ICsJCW9mX25vZGVfcHV0KHBvcnQpOwo+ID4gKwl9IHdoaWxl ICgxKTsKPiA+ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlu dCBoZGxjZF9kcm1fYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiArewo+ID4gKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtOwo+ID4gKwlzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkOwo+ ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwloZGxjZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVv ZigqaGRsY2QpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFoZGxjZCkKPiA+ICsJCXJldHVybiAt RU5PTUVNOwo+ID4gKwo+ID4gKwlkcm0gPSBkcm1fZGV2X2FsbG9jKCZoZGxjZF9kcml2ZXIsIGRl dik7Cj4gPiArCWlmICghZHJtKQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArCWRy bS0+ZGV2X3ByaXZhdGUgPSBoZGxjZDsKPiA+ICsKPiA+ICsJcmV0ID0gZHJtX2Rldl9zZXRfdW5p cXVlKGRybSwgIiVzIiwgZGV2X25hbWUoZGV2KSk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3Rv IGVycl9mcmVlOwo+ID4gKwo+ID4gKwloZGxjZF9zZXR1cF9tb2RlX2NvbmZpZyhkcm0pOwo+ID4g Kwo+ID4gKwlyZXQgPSBoZGxjZF9sb2FkKGRybSwgMCk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQln b3RvIGVycl9mcmVlOwo+ID4gKwo+ID4gKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7 Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIGVycl91bmxvYWQ7Cj4gPiArCj4gPiArCWRldl9z ZXRfZHJ2ZGF0YShkZXYsIGRybSk7Cj4gPiArCj4gPiArCXJldCA9IGNvbXBvbmVudF9iaW5kX2Fs bChkZXYsIGRybSk7Cj4gPiArCWlmIChyZXQpIHsKPiA+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRv IGJpbmQgYWxsIGNvbXBvbmVudHNcbiIpOwo+ID4gKwkJZ290byBlcnJfdW5yZWdpc3RlcjsKPiA+ ICsJfQo+ID4gKwo+ID4gKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZHJtLCBkcm0tPm1vZGVfY29u ZmlnLm51bV9jcnRjKTsKPiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ICsJCURSTV9FUlJPUigiZmFp bGVkIHRvIGluaXRpYWxpc2UgdmJsYW5rXG4iKTsKPiA+ICsJCWdvdG8gZXJyX3ZibGFuazsKPiA+ ICsJfQo+ID4gKwlkcm0tPnZibGFua19kaXNhYmxlX2FsbG93ZWQgPSB0cnVlOwo+ID4gKwo+ID4g Kwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZHJtKTsKPiA+ICsJZHJtX2ttc19oZWxwZXJfcG9sbF9p bml0KGRybSk7Cj4gPiArCj4gPiArCWhkbGNkLT5mYmRldiA9IGRybV9mYmRldl9jbWFfaW5pdChk cm0sIDMyLCBkcm0tPm1vZGVfY29uZmlnLm51bV9jcnRjLAo+ID4gKwkJCQkJICBkcm0tPm1vZGVf Y29uZmlnLm51bV9jb25uZWN0b3IpOwo+ID4gKwo+ID4gKwlpZiAoSVNfRVJSKGhkbGNkLT5mYmRl dikpIHsKPiA+ICsJCXJldCA9IFBUUl9FUlIoaGRsY2QtPmZiZGV2KTsKPiA+ICsJCWhkbGNkLT5m YmRldiA9IE5VTEw7Cj4gPiArCQlnb3RvIGVycl9mYmRldjsKPiA+ICsJfQo+ID4gKwo+ID4gKwly ZXR1cm4gMDsKPiA+ICsKPiA+ICtlcnJfZmJkZXY6Cj4gPiArCWRybV9rbXNfaGVscGVyX3BvbGxf ZmluaShkcm0pOwo+ID4gKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOwo+ID4gKwlkcm1f dmJsYW5rX2NsZWFudXAoZHJtKTsKPiA+ICtlcnJfdmJsYW5rOgo+ID4gKwljb21wb25lbnRfdW5i aW5kX2FsbChkZXYsIGRybSk7Cj4gPiArZXJyX3VucmVnaXN0ZXI6Cj4gPiArCWRybV9kZXZfdW5y ZWdpc3Rlcihkcm0pOwo+ID4gK2Vycl91bmxvYWQ6Cj4gPiArCXBtX3J1bnRpbWVfZ2V0X3N5bmMo ZHJtLT5kZXYpOwo+ID4gKwlkcm1faXJxX3VuaW5zdGFsbChkcm0pOwo+ID4gKwlwbV9ydW50aW1l X3B1dF9zeW5jKGRybS0+ZGV2KTsKPiA+ICsJcG1fcnVudGltZV9kaXNhYmxlKGRybS0+ZGV2KTsK PiA+ICsJb2ZfcmVzZXJ2ZWRfbWVtX2RldmljZV9yZWxlYXNlKGRybS0+ZGV2KTsKPiA+ICsJZGV2 bV9jbGtfcHV0KGRldiwgaGRsY2QtPmNsayk7Cj4gPiArZXJyX2ZyZWU6Cj4gPiArCWRybV9kZXZf dW5yZWYoZHJtKTsKPiA+ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHZvaWQgaGRsY2RfZHJtX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiArewo+ID4g KwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gPiArCXN0 cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBkcm0tPmRldl9wcml2YXRlOwo+ID4gKwo+ ID4gKwlpZiAoaGRsY2QtPmZiZGV2KSB7Cj4gPiArCQlkcm1fZmJkZXZfY21hX2ZpbmkoaGRsY2Qt PmZiZGV2KTsKPiA+ICsJCWhkbGNkLT5mYmRldiA9IE5VTEw7Cj4gPiArCX0KPiA+ICsJZHJtX2tt c19oZWxwZXJfcG9sbF9maW5pKGRybSk7Cj4gPiArCWNvbXBvbmVudF91bmJpbmRfYWxsKGRldiwg ZHJtKTsKPiA+ICsJZHJtX3ZibGFua19jbGVhbnVwKGRybSk7Cj4gPiArCXBtX3J1bnRpbWVfZ2V0 X3N5bmMoZHJtLT5kZXYpOwo+ID4gKwlkcm1faXJxX3VuaW5zdGFsbChkcm0pOwo+ID4gKwlwbV9y dW50aW1lX3B1dF9zeW5jKGRybS0+ZGV2KTsKPiA+ICsJcG1fcnVudGltZV9kaXNhYmxlKGRybS0+ ZGV2KTsKPiA+ICsJb2ZfcmVzZXJ2ZWRfbWVtX2RldmljZV9yZWxlYXNlKGRybS0+ZGV2KTsKPiA+ ICsJaWYgKCFJU19FUlIoaGRsY2QtPmNsaykpIHsKPiA+ICsJCWRldm1fY2xrX3B1dChkcm0tPmRl diwgaGRsY2QtPmNsayk7Cj4gPiArCQloZGxjZC0+Y2xrID0gTlVMTDsKPiA+ICsJfQo+ID4gKwlk cm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOwo+ID4gKwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJt KTsKPiA+ICsJZHJtX2Rldl91bnJlZihkcm0pOwo+ID4gKwlkcm0tPmRldl9wcml2YXRlID0gTlVM TDsKPiA+ICsJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X21hc3Rlcl9vcHMgaGRsY2RfbWFzdGVyX29wcyA9 IHsKPiA+ICsJLmFkZF9jb21wb25lbnRzCT0gaGRsY2RfYWRkX2NvbXBvbmVudHMsCj4gPiArCS5i aW5kCQk9IGhkbGNkX2RybV9iaW5kLAo+ID4gKwkudW5iaW5kCQk9IGhkbGNkX2RybV91bmJpbmQs Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IGhkbGNkX3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCj4gPiArewo+ID4gKwlyZXR1cm4gY29tcG9uZW50X21hc3Rlcl9hZGQo JnBkZXYtPmRldiwgJmhkbGNkX21hc3Rlcl9vcHMpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg aW50IGhkbGNkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sKPiA+ ICsJY29tcG9uZW50X21hc3Rlcl9kZWwoJnBkZXYtPmRldiwgJmhkbGNkX21hc3Rlcl9vcHMpOwo+ ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgIGhkbGNkX29mX21hdGNoW10gPSB7Cj4gPiArCXsgLmNvbXBhdGlibGUJPSAiYXJt LGhkbGNkIiB9LAo+ID4gKwl7fSwKPiA+ICt9Owo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2Ys IGhkbGNkX29mX21hdGNoKTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IGhkbGNkX3BtX3N1c3BlbmQo c3RydWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gPiAr Cj4gPiArCWlmIChwbV9ydW50aW1lX3N1c3BlbmRlZChkZXYpKQo+ID4gKwkJcmV0dXJuIDA7Cj4g PiArCj4gPiArCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRybSk7Cj4gPiArCWxpc3RfZm9yX2VhY2hf ZW50cnkoY3J0YywgJmRybS0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKQo+ID4gKwkJaGRs Y2RfY3J0Y19zdXNwZW5kKGNydGMpOwo+ID4gKwlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRybSk7 Cj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGhkbGNkX3BtX3Jl c3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsK PiA+ICsKPiA+ICsJaWYgKCFwbV9ydW50aW1lX3N1c3BlbmRlZChkZXYpKQo+ID4gKwkJcmV0dXJu IDA7Cj4gPiArCj4gPiArCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRybSk7Cj4gPiArCWxpc3RfZm9y X2VhY2hfZW50cnkoY3J0YywgJmRybS0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKQo+ID4g KwkJaGRsY2RfY3J0Y19yZXN1bWUoY3J0Yyk7Cj4gPiArCWRybV9tb2Rlc2V0X3VubG9ja19hbGwo ZHJtKTsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBTSU1QTEVfREVW X1BNX09QUyhoZGxjZF9wbV9vcHMsIGhkbGNkX3BtX3N1c3BlbmQsIGhkbGNkX3BtX3Jlc3VtZSk7 Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaGRsY2RfcGxhdGZvcm1f ZHJpdmVyID0gewo+ID4gKwkucHJvYmUJCT0gaGRsY2RfcHJvYmUsCj4gPiArCS5yZW1vdmUJCT0g aGRsY2RfcmVtb3ZlLAo+ID4gKwkuZHJpdmVyCT0gewo+ID4gKwkJLm5hbWUgPSAiaGRsY2QiLAo+ ID4gKwkJLnBtID0gJmhkbGNkX3BtX29wcywKPiA+ICsJCS5vZl9tYXRjaF90YWJsZQk9IGhkbGNk X29mX21hdGNoLAo+ID4gKwl9LAo+ID4gK307Cj4gPiArCj4gPiArbW9kdWxlX3BsYXRmb3JtX2Ry aXZlcihoZGxjZF9wbGF0Zm9ybV9kcml2ZXIpOwo+ID4gKwo+ID4gK01PRFVMRV9BVVRIT1IoIkxp dml1IER1ZGF1Iik7Cj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJBUk0gSERMQ0QgRFJNIGRyaXZl ciIpOwo+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9k cnYuaAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLmYyZWVkZmIK PiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfZHJ2 LmgKPiA+IEBAIC0wLDAgKzEsNDIgQEAKPiA+ICsvKgo+ID4gKyAqICBBUk0gSERMQ0QgQ29udHJv bGxlciByZWdpc3RlciBkZWZpbml0aW9uCj4gPiArICovCj4gPiArCj4gPiArI2lmbmRlZiBfX0hE TENEX0RSVl9IX18KPiA+ICsjZGVmaW5lIF9fSERMQ0RfRFJWX0hfXwo+ID4gKwo+ID4gK3N0cnVj dCBoZGxjZF9kcm1fcHJpdmF0ZSB7Cj4gPiArCXZvaWQgX19pb21lbQkJCSptbWlvOwo+ID4gKwlz dHJ1Y3QgY2xrCQkJKmNsazsKPiA+ICsJc3RydWN0IGRybV9mYmRldl9jbWEJCSpmYmRldjsKPiA+ ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlcgkJKmZiOwo+ID4gKwlzdHJ1Y3QgZHJtX3BlbmRpbmdf dmJsYW5rX2V2ZW50CSpldmVudDsKPiA+ICsJc3RydWN0IGRybV9jcnRjCQkJY3J0YzsKPiA+ICsJ c3RydWN0IGRybV9wbGFuZQkJKnBsYW5lOwo+ID4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKPiA+ ICsJYXRvbWljX3QgYnVmZmVyX3VuZGVycnVuX2NvdW50Owo+ID4gKwlhdG9taWNfdCBidXNfZXJy b3JfY291bnQ7Cj4gPiArCWF0b21pY190IHZzeW5jX2NvdW50Owo+ID4gKwlhdG9taWNfdCBkbWFf ZW5kX2NvdW50Owo+ID4gKyNlbmRpZgo+ID4gK307Cj4gPiArCj4gPiArI2RlZmluZSBjcnRjX3Rv X2hkbGNkX3ByaXYoeCkJY29udGFpbmVyX29mKHgsIHN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSwg Y3J0YykKPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgaGRsY2Rfd3JpdGUoc3RydWN0IGhk bGNkX2RybV9wcml2YXRlICpoZGxjZCwKPiA+ICsJCQkgICAgICAgdW5zaWduZWQgaW50IHJlZywg dTMyIHZhbHVlKQo+ID4gK3sKPiA+ICsJd3JpdGVsKHZhbHVlLCBoZGxjZC0+bW1pbyArIHJlZyk7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbmxpbmUgdTMyIGhkbGNkX3JlYWQoc3RydWN0IGhk bGNkX2RybV9wcml2YXRlICpoZGxjZCwgdW5zaWduZWQgaW50IHJlZykKPiA+ICt7Cj4gPiArCXJl dHVybiByZWFkbChoZGxjZC0+bW1pbyArIHJlZyk7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCBoZGxj ZF9zZXR1cF9jcnRjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ID4gK3ZvaWQgaGRsY2Rfc2V0 X3NjYW5vdXQoc3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZCk7Cj4gPiArdm9pZCBoZGxj ZF9jcnRjX3N1c3BlbmQoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPiA+ICt2b2lkIGhkbGNkX2Ny dGNfcmVzdW1lKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gPiArCj4gPiArI2VuZGlmIC8qIF9f SERMQ0RfRFJWX0hfXyAqLwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vaGRs Y2RfcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9yZWdzLmgKPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi42Njc5OWViCj4gPiAtLS0gL2Rldi9udWxs Cj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX3JlZ3MuaAo+ID4gQEAgLTAsMCAr MSw4NyBAQAo+ID4gKy8qCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDEzLDIwMTQgQVJNIExpbWl0 ZWQKPiA+ICsgKgo+ID4gKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCj4gPiArICogTGljZW5zZS4gIFNl ZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUK PiA+ICsgKiBmb3IgbW9yZSBkZXRhaWxzLgo+ID4gKyAqCj4gPiArICogIEFSTSBIRExDRCBDb250 cm9sbGVyIHJlZ2lzdGVyIGRlZmluaXRpb24KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaWZuZGVmIF9f SERMQ0RfUkVHU19IX18KPiA+ICsjZGVmaW5lIF9fSERMQ0RfUkVHU19IX18KPiA+ICsKPiA+ICsv KiByZWdpc3RlciBvZmZzZXRzICovCj4gPiArI2RlZmluZSBIRExDRF9SRUdfVkVSU0lPTgkJMHgw MDAwCS8qIHJvICovCj4gPiArI2RlZmluZSBIRExDRF9SRUdfSU5UX1JBV1NUQVQJCTB4MDAxMAkv KiBydyAqLwo+ID4gKyNkZWZpbmUgSERMQ0RfUkVHX0lOVF9DTEVBUgkJMHgwMDE0CS8qIHdvICov Cj4gPiArI2RlZmluZSBIRExDRF9SRUdfSU5UX01BU0sJCTB4MDAxOAkvKiBydyAqLwo+ID4gKyNk ZWZpbmUgSERMQ0RfUkVHX0lOVF9TVEFUVVMJCTB4MDAxYwkvKiBybyAqLwo+ID4gKyNkZWZpbmUg SERMQ0RfUkVHX0ZCX0JBU0UJCTB4MDEwMAkvKiBydyAqLwo+ID4gKyNkZWZpbmUgSERMQ0RfUkVH X0ZCX0xJTkVfTEVOR1RICTB4MDEwNAkvKiBydyAqLwo+ID4gKyNkZWZpbmUgSERMQ0RfUkVHX0ZC X0xJTkVfQ09VTlQJCTB4MDEwOAkvKiBydyAqLwo+ID4gKyNkZWZpbmUgSERMQ0RfUkVHX0ZCX0xJ TkVfUElUQ0gJCTB4MDEwYwkvKiBydyAqLwo+ID4gKyNkZWZpbmUgSERMQ0RfUkVHX0JVU19PUFRJ T05TCQkweDAxMTAJLyogcncgKi8KPiA+ICsjZGVmaW5lIEhETENEX1JFR19WX1NZTkMJCTB4MDIw MAkvKiBydyAqLwo+ID4gKyNkZWZpbmUgSERMQ0RfUkVHX1ZfQkFDS19QT1JDSAkJMHgwMjA0CS8q IHJ3ICovCj4gPiArI2RlZmluZSBIRExDRF9SRUdfVl9EQVRBCQkweDAyMDgJLyogcncgKi8KPiA+ ICsjZGVmaW5lIEhETENEX1JFR19WX0ZST05UX1BPUkNICQkweDAyMGMJLyogcncgKi8KPiA+ICsj ZGVmaW5lIEhETENEX1JFR19IX1NZTkMJCTB4MDIxMAkvKiBydyAqLwo+ID4gKyNkZWZpbmUgSERM Q0RfUkVHX0hfQkFDS19QT1JDSAkJMHgwMjE0CS8qIHJ3ICovCj4gPiArI2RlZmluZSBIRExDRF9S RUdfSF9EQVRBCQkweDAyMTgJLyogcncgKi8KPiA+ICsjZGVmaW5lIEhETENEX1JFR19IX0ZST05U X1BPUkNICQkweDAyMWMJLyogcncgKi8KPiA+ICsjZGVmaW5lIEhETENEX1JFR19QT0xBUklUSUVT CQkweDAyMjAJLyogcncgKi8KPiA+ICsjZGVmaW5lIEhETENEX1JFR19DT01NQU5ECQkweDAyMzAJ LyogcncgKi8KPiA+ICsjZGVmaW5lIEhETENEX1JFR19QSVhFTF9GT1JNQVQJCTB4MDI0MAkvKiBy dyAqLwo+ID4gKyNkZWZpbmUgSERMQ0RfUkVHX1JFRF9TRUxFQ1QJCTB4MDI0NAkvKiBydyAqLwo+ ID4gKyNkZWZpbmUgSERMQ0RfUkVHX0dSRUVOX1NFTEVDVAkJMHgwMjQ4CS8qIHJ3ICovCj4gPiAr I2RlZmluZSBIRExDRF9SRUdfQkxVRV9TRUxFQ1QJCTB4MDI0YwkvKiBydyAqLwo+ID4gKwo+ID4g Ky8qIHZlcnNpb24gKi8KPiA+ICsjZGVmaW5lIEhETENEX1BST0RVQ1RfSUQJCTB4MUNEQzAwMDAK PiA+ICsjZGVmaW5lIEhETENEX1BST0RVQ1RfTUFTSwkJMHhGRkZGMDAwMAo+ID4gKyNkZWZpbmUg SERMQ0RfVkVSU0lPTl9NQUpPUl9NQVNLCTB4MDAwMEZGMDAKPiA+ICsjZGVmaW5lIEhETENEX1ZF UlNJT05fTUlOT1JfTUFTSwkweDAwMDAwMEZGCj4gPiArCj4gPiArLyogaW50ZXJydXB0cyAqLwo+ ID4gKyNkZWZpbmUgSERMQ0RfSU5URVJSVVBUX0RNQV9FTkQJCSgxIDw8IDApCj4gPiArI2RlZmlu ZSBIRExDRF9JTlRFUlJVUFRfQlVTX0VSUk9SCSgxIDw8IDEpCj4gPiArI2RlZmluZSBIRExDRF9J TlRFUlJVUFRfVlNZTkMJCSgxIDw8IDIpCj4gPiArI2RlZmluZSBIRExDRF9JTlRFUlJVUFRfVU5E RVJSVU4JKDEgPDwgMykKPiA+ICsjZGVmaW5lIEhETENEX0RFQlVHX0lOVF9NQVNLCQkoSERMQ0Rf SU5URVJSVVBUX0RNQV9FTkQgfCAgXAo+ID4gKwkJCQkJSERMQ0RfSU5URVJSVVBUX0JVU19FUlJP UiB8IFwKPiA+ICsJCQkJCUhETENEX0lOVEVSUlVQVF9VTkRFUlJVTikKPiA+ICsKPiA+ICsvKiBw b2xhcml0aWVzICovCj4gPiArI2RlZmluZSBIRExDRF9QT0xBUklUWV9WU1lOQwkJKDEgPDwgMCkK PiA+ICsjZGVmaW5lIEhETENEX1BPTEFSSVRZX0hTWU5DCQkoMSA8PCAxKQo+ID4gKyNkZWZpbmUg SERMQ0RfUE9MQVJJVFlfREFUQUVOCQkoMSA8PCAyKQo+ID4gKyNkZWZpbmUgSERMQ0RfUE9MQVJJ VFlfREFUQQkJKDEgPDwgMykKPiA+ICsjZGVmaW5lIEhETENEX1BPTEFSSVRZX1BJWEVMQ0xLCQko MSA8PCA0KQo+ID4gKwo+ID4gKy8qIGNvbW1hbmRzICovCj4gPiArI2RlZmluZSBIRExDRF9DT01N QU5EX0RJU0FCTEUJCSgwIDw8IDApCj4gPiArI2RlZmluZSBIRExDRF9DT01NQU5EX0VOQUJMRQkJ KDEgPDwgMCkKPiA+ICsKPiA+ICsvKiBwaXhlbCBmb3JtYXQgKi8KPiA+ICsjZGVmaW5lIEhETENE X1BJWEVMX0ZNVF9MSVRUTEVfRU5ESUFOCSgwIDw8IDMxKQo+ID4gKyNkZWZpbmUgSERMQ0RfUElY RUxfRk1UX0JJR19FTkRJQU4JKDEgPDwgMzEpCj4gPiArI2RlZmluZSBIRExDRF9CWVRFU19QRVJf UElYRUxfTUFTSwkoMyA8PCAzKQo+ID4gKwo+ID4gKy8qIGJ1cyBvcHRpb25zICovCj4gPiArI2Rl ZmluZSBIRExDRF9CVVNfQlVSU1RfTUFTSwkJMHgwMWYKPiA+ICsjZGVmaW5lIEhETENEX0JVU19N QVhfT1VUU1RBTkQJCTB4ZjAwCj4gPiArI2RlZmluZSBIRExDRF9CVVNfQlVSU1RfTk9ORQkJKDAg PDwgMCkKPiA+ICsjZGVmaW5lIEhETENEX0JVU19CVVJTVF8xCQkoMSA8PCAwKQo+ID4gKyNkZWZp bmUgSERMQ0RfQlVTX0JVUlNUXzIJCSgxIDw8IDEpCj4gPiArI2RlZmluZSBIRExDRF9CVVNfQlVS U1RfNAkJKDEgPDwgMikKPiA+ICsjZGVmaW5lIEhETENEX0JVU19CVVJTVF84CQkoMSA8PCAzKQo+ ID4gKyNkZWZpbmUgSERMQ0RfQlVTX0JVUlNUXzE2CQkoMSA8PCA0KQo+ID4gKwo+ID4gKy8qIE1h eCByZXNvbHV0aW9uIHN1cHBvcnRlZCBpcyA0MDk2eDQwOTYsIDMyYnBwICovCj4gPiArI2RlZmlu ZSBIRExDRF9NQVhfWFJFUwkJCTQwOTYKPiA+ICsjZGVmaW5lIEhETENEX01BWF9ZUkVTCQkJNDA5 Ngo+ID4gKwo+ID4gKyNkZWZpbmUgTlJfUEFMRVRURQkJCTI1Ngo+ID4gKwo+ID4gKyNlbmRpZiAv KiBfX0hETENEX1JFR1NfSF9fICovCj4gPiAtLSAKPiA+IDIuNi4yCj4gPiAKPiA+IF9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiBkcmktZGV2ZWwgbWFp bGluZyBsaXN0Cj4gPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gPiBodHRwOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCj4gCj4gLS0g Cj4gRGFuaWVsIFZldHRlcgo+IFNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgo+ IGh0dHA6Ly9ibG9nLmZmd2xsLmNoCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwKCi0tIAo9PT09PT09PT09PT09PT09PT09PQp8IEkgd291bGQgbGlr ZSB0byB8CnwgZml4IHRoZSB3b3JsZCwgIHwKfCBidXQgdGhleSdyZSBub3QgfAp8IGdpdmluZyBt ZSB0aGUgICB8CiBcIHNvdXJjZSBjb2RlISAgLwogIC0tLS0tLS0tLS0tLS0tLQogICAgwq9cXyjj g4QpXy/CrwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=