From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sameer Goel Subject: Re: [RFC v4 6/8] xen/iommu: smmu-v3: Add Xen specific code to enable the ported driver Date: Fri, 9 Feb 2018 10:56:18 -0700 Message-ID: References: <20171219031703.23420-1-sameer.goel@linaro.org> <20171219031703.23420-7-sameer.goel@linaro.org> <9cafe32b-0c60-32d8-8912-dcf980699a80@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ekCuO-0001WV-HU for xen-devel@lists.xenproject.org; Fri, 09 Feb 2018 17:56:24 +0000 Received: by mail-pl0-x242.google.com with SMTP id j19so1795605pll.2 for ; Fri, 09 Feb 2018 09:56:21 -0800 (PST) In-Reply-To: <9cafe32b-0c60-32d8-8912-dcf980699a80@linaro.org> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Julien Grall , xen-devel@lists.xenproject.org, julien.grall@arm.com, mjaggi@caviumnetworks.com Cc: sstabellini@kernel.org, andre.przywara@linaro.org, shankerd@codeaurora.org List-Id: xen-devel@lists.xenproject.org CgpPbiAxLzIzLzIwMTggODoxOCBBTSwgSnVsaWVuIEdyYWxsIHdyb3RlOgo+IEhpIFNhbWVlciwK Pgo+IE9uIDE5LzEyLzE3IDAzOjE3LCBTYW1lZXIgR29lbCB3cm90ZToKPj4gK8KgwqDCoMKgwqDC oMKgIGlmICghZHRwcm9wKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZB TDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFkdHByb3AtPnZhbHVlKQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT0RBVEE7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvC oMKgwqAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIFhlbjogSGVscGVycyBm b3IgRE1BIGFsbG9jYXRpb24uIEp1c3QgdGhlIGZ1bmN0aW9uIG5hbWUgaXMgcmV1c2VkIGZvcgo+ PiArICogcG9ydGluZyBjb2RlIHRoZXNlIGFsbG9jYXRpb24gYXJlIG5vdCBtYW5hZ2VkIGFsbG9j YXRpb25zCj4+ICsgKi8KPj4gKwo+PiArdm9pZCAqZG1hbV9hbGxvY19jb2hlcmVudChzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAo+Cj4gVGhpcyBzaG91bGQgYmUgc3RhdGljIEkgdGhp bmsuCj4KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX2FkZHJfdCAqZG1hX2hh bmRsZSwgZ2ZwX3QgZ2ZwKQo+PiArewo+PiArwqDCoMKgIHZvaWQgKnZhZGRyOwo+PiArwqDCoMKg IHVuc2lnbmVkIGxvbmcgYWxpZ25tZW50ID0gc2l6ZTsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvC oMKgwqDCoCAqIF94emFsbG9jIHJlcXVpcmVzIHRoYXQgdGhlIChhbGlnbiAmIChhbGlnbiAtMSkp ID0gMC4gTW9zdCBvZiB0aGUKPj4gK8KgwqDCoMKgICogYWxsb2NhdGlvbnMgaW4gU01NVSBjb2Rl IHNob3VsZCBzZW5kIHRoZSByaWdodCB2YWx1ZSBmb3Igc2l6ZS4gSW4KPj4gK8KgwqDCoMKgICog Y2FzZSB0aGlzIGlzIG5vdCB0cnVlIHByaW50IGEgd2FybmluZyBhbmQgYWxpZ24gdG8gdGhlIHNp emUgb2YgYQo+PiArwqDCoMKgwqAgKiAodm9pZCAqKQo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDC oCBpZiAoc2l6ZSAmIChzaXplIC0gMSkpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGRldl93YXJuKGRl diwgIkZpeGluZyBhbGlnbm1lbnQgZm9yIHRoZSBETUEgYnVmZmVyXG4iKTsKPj4gK8KgwqDCoMKg wqDCoMKgIGFsaWdubWVudCA9IHNpemVvZih2b2lkICopOwo+PiArwqDCoMKgIH0KPj4gKwo+PiAr wqDCoMKgIHZhZGRyID0gX3h6YWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKPj4gK8KgwqDCoCBpZiAo IXZhZGRyKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgIkRNQSBhbGxvY2F0aW9u IGZhaWxlZFxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPj4gK8KgwqDCoCB9 Cj4+ICsKPj4gK8KgwqDCoCAqZG1hX2hhbmRsZSA9IHZpcnRfdG9fbWFkZHIodmFkZHIpOwo+PiAr Cj4+ICvCoMKgwqAgcmV0dXJuIHZhZGRyOwo+PiArfQo+PiArCj4+ICsKPj4gK3ZvaWQgZG1hbV9m cmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRy LAo+Cj4gRGl0dG8uCj4KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX2FkZHJfdCBkbWFf aGFuZGxlKQo+PiArewo+PiArwqDCoMKgIHhmcmVlKHZhZGRyKTsKPj4gK30KPj4gKwo+PiArLyog WGVuOiBTdHViIG91dCBETUEgZG9tYWluIHJlbGF0ZWQgZnVuY3Rpb25zICovCj4+ICsjZGVmaW5l IGlvbW11X2dldF9kbWFfY29va2llKGRvbSkgMAo+PiArI2RlZmluZSBpb21tdV9wdXRfZG1hX2Nv b2tpZShkb20pCj4+ICsKPj4gKy8qIFhlbjogU3R1YiBvdXQgbW9kdWxlIHBhcmFtIHJlbGF0ZWQg ZnVuY3Rpb24gKi8KPj4gKyNkZWZpbmUgbW9kdWxlX3BhcmFtX25hbWVkKGEsIGIsIGMsIGQpCj4+ ICsjZGVmaW5lIE1PRFVMRV9QQVJNX0RFU0MoYSwgYikKPj4gKwo+PiArI2RlZmluZSBkbWFfc2V0 X21hc2tfYW5kX2NvaGVyZW50KGQsIGIpIDAKPj4gKwo+PiArI2RlZmluZSBvZl9kbWFfaXNfY29o ZXJlbnQobikgMAo+PiArCj4+ICsjZGVmaW5lIE1PRFVMRV9ERVZJQ0VfVEFCTEUodHlwZSwgbmFt ZSkKPj4gKyNkZWZpbmUgb2ZfZGV2aWNlX2lkIGR0X2RldmljZV9tYXRjaAo+PiArCj4+ICtzdGF0 aWMgdm9pZCBfX2lvbWVtICpkZXZtX2lvcmVtYXBfcmVzb3VyY2Uoc3RydWN0IGRldmljZSAqZGV2 LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IHJlc291cmNlICpyZXMpCj4+ICt7Cj4+ICvCoMKgwqAgdm9pZCBfX2lvbWVtICpwdHI7Cj4+ICsK Pj4gK8KgwqDCoCBpZiAoIXJlcyB8fCByZXMtPnR5cGUgIT0gSU9SRVNPVVJDRV9NRU0pIHsKPj4g K8KgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAiSW52YWxpZCByZXNvdXJjZVxuIik7Cj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPj4gK8KgwqDCoCB9Cj4+ICsK Pj4gK8KgwqDCoCBwdHIgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5hZGRyLCByZXMtPnNpemUpOwo+ PiArwqDCoMKgIGlmICghcHRyKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgImlvcmVtYXAgZmFpbGVkIChhZGRyIDB4JSJQUkl4NjQi IHNpemUgMHglIlBSSXg2NCIpXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXMtPmFk ZHIsIHJlcy0+c2l6ZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gcHRyOwo+PiArfQo+PiArCj4+ ICsvKiBYZW46IENvbXBhdGliaWxpdHkgZGVmaW5lIGZvciBpb21tdV9kb21haW5fZ2VvbWV0cnku Ki8KPj4gK3N0cnVjdCBpb21tdV9kb21haW5fZ2VvbWV0cnkgewo+PiArwqDCoMKgIGRtYV9hZGRy X3QgYXBlcnR1cmVfc3RhcnQ7IC8qIEZpcnN0IGFkZHJlc3MgdGhhdCBjYW4gYmUgbWFwcGVkwqDC oMKgICovCj4+ICvCoMKgwqAgZG1hX2FkZHJfdCBhcGVydHVyZV9lbmQ7wqDCoCAvKiBMYXN0IGFk ZHJlc3MgdGhhdCBjYW4gYmUgbWFwcGVkwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBib29sIGZvcmNl X2FwZXJ0dXJlO8KgwqDCoMKgwqDCoCAvKiBETUEgb25seSBhbGxvd2VkIGluIG1hcHBhYmxlIHJh bmdlPyAqLwo+PiArfTsKPj4gKwo+PiArCj4+ICsvKiBYZW46IFR5cGUgZGVmaW5pdGlvbnMgZm9y IGlvbW11X2RvbWFpbiAqLwo+PiArI2RlZmluZSBJT01NVV9ET01BSU5fVU5NQU5BR0VEIDAKPj4g KyNkZWZpbmUgSU9NTVVfRE9NQUlOX0RNQSAxCj4+ICsjZGVmaW5lIElPTU1VX0RPTUFJTl9JREVO VElUWSAyCj4+ICsKPj4gKy8qIFhlbjogRHVtbXkgaW9tbXVfZG9tYWluICovCj4+ICtzdHJ1Y3Qg aW9tbXVfZG9tYWluIHsKPj4gK8KgwqDCoCAvKiBSdW50aW1lIFNNTVUgY29uZmlndXJhdGlvbiBm b3IgdGhpcyBpb21tdV9kb21haW4gKi8KPj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZG9tYWlu wqDCoMKgwqDCoMKgwqAgKnByaXY7Cj4+ICvCoMKgwqAgdW5zaWduZWQgaW50IHR5cGU7Cj4+ICsK Pj4gK8KgwqDCoCAvKiBEdW1teSBjb21wYXRpYmlsaXR5IGRlZmluZXMgKi8KPj4gK8KgwqDCoCB1 bnNpZ25lZCBsb25nIHBnc2l6ZV9iaXRtYXA7Cj4+ICvCoMKgwqAgc3RydWN0IGlvbW11X2RvbWFp bl9nZW9tZXRyeSBnZW9tZXRyeTsKPj4gKwo+PiArwqDCoMKgIGF0b21pY190IHJlZjsKPj4gK8Kg wqDCoCAvKgo+PiArwqDCoMKgwqAgKiBVc2VkIHRvIGxpbmsgaW9tbXVfZG9tYWluIGNvbnRleHRz IGZvciBhIHNhbWUgZG9tYWluLgo+PiArwqDCoMKgwqAgKiBUaGVyZSBpcyBhdCBsZWFzdCBvbmUg cGVyLVNNTVUgdG8gdXNlZCBieSB0aGUgZG9tYWluLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDC oCBzdHJ1Y3QgbGlzdF9oZWFkwqDCoMKgwqDCoMKgwqAgbGlzdDsKPj4gK307Cj4+ICsKPj4gKwo+ Cj4gTm8gbmVlZCBmb3IgMiBuZXdsaW5lcy4gQ2FuIHlvdSBkcm9wIG9uZT8KPgo+PiArLyogWGVu OiBEZXNjcmliZXMgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIGEgWGVuIGRvbWFpbiAqLwo+PiAr c3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gewo+PiArwqDCoMKgIHNwaW5sb2NrX3TCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGxvY2s7Cj4+ICvCoMKgwqAgLyogTGlzdCBvZiBpb21tdSBkb21haW5z IGFzc29jaWF0ZWQgdG8gdGhpcyBkb21haW4gKi8KPj4gK8KgwqDCoCBzdHJ1Y3QgbGlzdF9oZWFk wqDCoMKgwqDCoMKgwqAgaW9tbXVfZG9tYWluczsKPj4gK307Cj4+ICsKPj4gKy8qCj4+ICsgKiBY ZW46IEluZm9ybWF0aW9uIGFib3V0IGVhY2ggZGV2aWNlIHN0b3JlZCBpbiBkZXYtPmFyY2hkYXRh LmlvbW11Cj4+ICsgKgo+PiArICogVGhlIGRldi0+YXJjaGRhdGEuaW9tbXUgc3RvcmVzIHRoZSBp b21tdV9kb21haW4gKHJ1bnRpbWUgY29uZmlndXJhdGlvbiBvZgo+PiArICogdGhlIFNNTVUpLgo+ PiDCoMKgICovCj4+ICtzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RldmljZSB7Cj4+ICvCoMKgwqAgc3Ry dWN0IGlvbW11X2RvbWFpbiAqZG9tYWluOwo+PiArfTsKPj4gKwo+PiArLyoKPj4gKyAqIFhlbjog aW9fcGd0YWJsZSBjb21wYXRpYmlsaXR5IGRlZmluZXMuCj4+ICsgKiBNb3N0IG9mIHRoZXNlIGFy ZSB0byBwb3J0IGluIHRoZSBTMSB0cmFuc2xhdGlvbiBjb2RlIGFzIGlzLgo+PiArICovCj4+ICtz dHJ1Y3QgaW9fcGd0YWJsZV9vcHMgewo+PiArfTsKPj4gKwo+PiArc3RydWN0IGlvbW11X2dhdGhl cl9vcHMgewo+PiArwqDCoMKgIHZvaWQgKCp0bGJfZmx1c2hfYWxsKSh2b2lkICpjb29raWUpOwo+ PiArwqDCoMKgIHZvaWQgKCp0bGJfYWRkX2ZsdXNoKSh1bnNpZ25lZCBsb25nIGlvdmEsIHNpemVf dCBzaXplLCBzaXplX3QgZ3JhbnVsZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYm9vbCBsZWFmLCB2b2lkICpjb29raWUpOwo+PiArwqDCoMKgIHZvaWQgKCp0bGJfc3lu Yykodm9pZCAqY29va2llKTsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBpb19wZ3RhYmxlX2NmZyB7 Cj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICogSU9fUEdUQUJMRV9RVUlSS19BUk1fTlM6IChB Uk0gZm9ybWF0cykgU2V0IE5TIGFuZCBOU1RBQkxFIGJpdHMgaW4KPj4gK8KgwqDCoMKgICrCoMKg wqAgc3RhZ2UgMSBQVEVzLCBmb3IgaGFyZHdhcmUgd2hpY2ggaW5zaXN0cyBvbiB2YWxpZGF0aW5n IHRoZW0KPj4gK8KgwqDCoMKgICrCoMKgwqAgZXZlbiBpbsKgwqDCoCBub24tc2VjdXJlIHN0YXRl IHdoZXJlIHRoZXkgc2hvdWxkIG5vcm1hbGx5IGJlIGlnbm9yZWQuCj4+ICvCoMKgwqDCoCAqCj4+ ICvCoMKgwqDCoCAqIElPX1BHVEFCTEVfUVVJUktfTk9fUEVSTVM6IElnbm9yZSB0aGUgSU9NTVVf UkVBRCwgSU9NTVVfV1JJVEUgYW5kCj4+ICvCoMKgwqDCoCAqwqDCoMKgIElPTU1VX05PRVhFQyBm bGFncyBhbmQgbWFwIGV2ZXJ5dGhpbmcgd2l0aCBmdWxsIGFjY2VzcywgZm9yCj4+ICvCoMKgwqDC oCAqwqDCoMKgIGhhcmR3YXJlIHdoaWNoIGRvZXMgbm90IGltcGxlbWVudCB0aGUgcGVybWlzc2lv bnMgb2YgYSBnaXZlbgo+PiArwqDCoMKgwqAgKsKgwqDCoCBmb3JtYXQsIGFuZC9vciByZXF1aXJl cyBzb21lIGZvcm1hdC1zcGVjaWZpYyBkZWZhdWx0IHZhbHVlLgo+PiArwqDCoMKgwqAgKgo+PiAr wqDCoMKgwqAgKiBJT19QR1RBQkxFX1FVSVJLX1RMQklfT05fTUFQOiBJZiB0aGUgZm9ybWF0IGZv cmJpZHMgY2FjaGluZyBpbnZhbGlkCj4+ICvCoMKgwqDCoCAqwqDCoMKgICh1bm1hcHBlZCkgZW50 cmllcyBidXQgdGhlIGhhcmR3YXJlIG1pZ2h0IGRvIHNvIGFueXdheSwgcGVyZm9ybQo+PiArwqDC oMKgwqAgKsKgwqDCoCBUTEIgbWFpbnRlbmFuY2Ugd2hlbiBtYXBwaW5nIGFzIHdlbGwgYXMgd2hl biB1bm1hcHBpbmcuCj4+ICvCoMKgwqDCoCAqCj4+ICvCoMKgwqDCoCAqIElPX1BHVEFCTEVfUVVJ UktfQVJNX01US180R0I6IChBUk0gdjdzIGZvcm1hdCkgU2V0IGJpdCA5IGluIGFsbAo+PiArwqDC oMKgwqAgKsKgwqDCoCBQVEVzLCBmb3IgTWVkaWF0ZWsgSU9NTVVzIHdoaWNoIHRyZWF0IGl0IGFz IGEgMzNyZCBhZGRyZXNzIGJpdAo+PiArwqDCoMKgwqAgKsKgwqDCoCB3aGVuIHRoZSBTb0MgaXMg aW4gIjRHQiBtb2RlIiBhbmQgdGhleSBjYW4gb25seSBhY2Nlc3MgdGhlIGhpZ2gKPj4gK8KgwqDC oMKgICrCoMKgwqAgcmVtYXAgb2YgRFJBTSAoMHgxXzAwMDAwMDAwIHRvIDB4MV9mZmZmZmZmZiku Cj4+ICvCoMKgwqDCoCAqCj4+ICvCoMKgwqDCoCAqIElPX1BHVEFCTEVfUVVJUktfTk9fRE1BOiBH dWFyYW50ZWVzIHRoYXQgdGhlIHRhYmxlcyB3aWxsIG9ubHkgZXZlcgo+PiArwqDCoMKgwqAgKsKg wqDCoCBiZSBhY2Nlc3NlZCBieSBhIGZ1bGx5IGNhY2hlLWNvaGVyZW50IElPTU1VIG9yIENQVSAo ZS5nLiBmb3IgYQo+PiArwqDCoMKgwqAgKsKgwqDCoCBzb2Z0d2FyZS1lbXVsYXRlZCBJT01NVSks IHN1Y2ggdGhhdCBwYWdldGFibGUgdXBkYXRlcyBuZWVkIG5vdAo+PiArwqDCoMKgwqAgKsKgwqDC oCBiZSB0cmVhdGVkIGFzIGV4cGxpY2l0IERNQSBkYXRhLgo+PiArwqDCoMKgwqAgKi8KPj4gK8Kg wqDCoCAjZGVmaW5lIElPX1BHVEFCTEVfUVVJUktfQVJNX05TwqDCoMKgwqDCoMKgwqAgQklUKDAp Cj4+ICvCoMKgwqAgI2RlZmluZSBJT19QR1RBQkxFX1FVSVJLX05PX1BFUk1TwqDCoMKgIEJJVCgx KQo+PiArwqDCoMKgICNkZWZpbmUgSU9fUEdUQUJMRV9RVUlSS19UTEJJX09OX01BUMKgwqDCoCBC SVQoMikKPj4gK8KgwqDCoCAjZGVmaW5lIElPX1BHVEFCTEVfUVVJUktfQVJNX01US180R0LCoMKg wqAgQklUKDMpCj4+ICvCoMKgwqAgI2RlZmluZSBJT19QR1RBQkxFX1FVSVJLX05PX0RNQcKgwqDC oMKgwqDCoMKgIEJJVCg0KQo+PiArwqDCoMKgIHVuc2lnbmVkIGxvbmfCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHF1aXJrczsKPj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBwZ3NpemVfYml0bWFwOwo+PiArwqDCoMKgIHVuc2lnbmVkIGludMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaWFzOwo+PiArwqDCoMKgIHVuc2lnbmVkIGludMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgb2FzOwo+PiArwqDCoMKgIGNvbnN0IHN0cnVjdCBpb21tdV9nYXRoZXJfb3BzwqDCoMKgICp0 bGI7Cj4+ICvCoMKgwqAgc3RydWN0IGRldmljZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmlvbW11 X2RldjsKPj4gKwo+PiArwqDCoMKgIC8qIExvdy1sZXZlbCBkYXRhIHNwZWNpZmljIHRvIHRoZSB0 YWJsZSBmb3JtYXQgKi8KPj4gK8KgwqDCoCB1bmlvbiB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3Qgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1NjTCoMKgwqAgdHRiclsyXTsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0wqDCoMKgIHRjcjsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgdTY0wqDCoMKgIG1haXJbMl07Cj4+ICvCoMKgwqDCoMKgwqDCoCB9IGFybV9scGFlX3Mx X2NmZzsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IHsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdTY0wqDCoMKgIHZ0dGJyOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1NjTC oMKgwqAgdnRjcjsKPj4gK8KgwqDCoMKgwqDCoMKgIH0gYXJtX2xwYWVfczJfY2ZnOwo+PiArCj4+ ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzLC oMKgwqAgdHRiclsyXTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMywqDCoMKgIHRjcjsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMywqDCoMKgIG5tcnI7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHUzMsKgwqDCoCBwcnJyOwo+PiArwqDCoMKgwqDCoMKgwqAgfSBhcm1fdjdz X2NmZzsKPj4gK8KgwqDCoCB9Owo+PiArfTsKPj4gKwo+PiArZW51bSBpb19wZ3RhYmxlX2ZtdCB7 Cj4+ICvCoMKgwqAgQVJNXzMyX0xQQUVfUzEsCj4+ICvCoMKgwqAgQVJNXzMyX0xQQUVfUzIsCj4+ ICvCoMKgwqAgQVJNXzY0X0xQQUVfUzEsCj4+ICvCoMKgwqAgQVJNXzY0X0xQQUVfUzIsCj4+ICvC oMKgwqAgQVJNX1Y3UywKPj4gK8KgwqDCoCBJT19QR1RBQkxFX05VTV9GTVRTLAo+PiArfTsKPj4g Kwo+PiArLyoKPj4gKyAqIFhlbjogVGhlIHBndGFibGVfb3BzIGFyZSB1c2VkIGJ5IHRoZSBTMSB0 cmFuc2xhdGlvbnMsIHNvIHJldHVybiB0aGUgZHVtbXkKPgo+IERvIHlvdSBtZWFuIFMyIHRyYW5z bGF0aW9ucz8gQmVjYXVzZSB3ZSBzaG91bGQgbmV2ZXIgcmVhY2ggUzEgYWxsb2NhdGlvbiwgcmln aHQ/Ck5vLCBJJ20gc2V0dGluZyB0aGUgcGd0YWJsZV9vcHMgdG8gYW4gaW52YWxpZCBhZGRyZXNz LiBUaGUgY29tbWVudCBpcyB0byBpbmRpY2F0ZSB0aGF0IHdlIHNob3VsZCBuZXZlciBoaXQgdGhp cyBzbyB0aGlzIGFzc2lnbm1lbnQgaXMgb2suCj4KPj4gKyAqIGFkZHJlc3MuCj4+ICsgKi8KPj4g KyNkZWZpbmUgYWxsb2NfaW9fcGd0YWJsZV9vcHMoZiwgYywgbykgKChzdHJ1Y3QgaW9fcGd0YWJs ZV9vcHMgKikweERFQURCRUVGKQo+Cj4gMHhERUFEQkVFRiBtaWd0aCBiZSBhIHZhbGlkIGFkZHJl c3MgaW4gWGVuLiBJZiB5b3Ugd2FudCB0byByZXR1cm4gYW4gaW52YWxpZCBhZGRyZXNzLCBpdCB3 b3VsZCBiZSBiZXR0ZXIgdG8gY2hvb3NlIHNvbWV0aGluZyBpbiB0aGUgcmFuZ2UgMC0yTUIuIFRo YXQgcmFuZ2Ugd2lsbCB1bmxpa2VseSBnZXQgYWxsb2NhdGVkIGluIHRoZSBmdXR1cmUuCj4KPj4g KyNkZWZpbmUgZnJlZV9pb19wZ3RhYmxlX29wcyhvKSAobyA9IDApCj4KPiBXaGVuIEkgbG9vayBh dCB0aGUgTGludXggaW1wbGVtZW50YXRpb24sIGZyZWVfaW9fcGd0YWJsZV9vcHMgaXMgcmV0dXJu aW5nLiBTbyBJIGFtIG5vdCBzdXJlIHdoYXQgeW91IHRyeSB0byBkbyBkbyBoZXJlLgo+Cj4+ICsK Pj4gKy8qIFhlbjogRGVmaW5lIHdyYXBwZXIgZm9yIHJlcXVlc3RpbmcgSVJRcyAqLwo+PiArI2Rl ZmluZSBJUlFGX09ORVNIT1QgMAo+PiArCj4+ICt0eXBlZGVmIHZvaWQgKCppcnFfaGFuZGxlcl90 KShpbnQsIHZvaWQgKiwgc3RydWN0IGNwdV91c2VyX3JlZ3MgKik7Cj4+ICsKPj4gK3N0YXRpYyBp bmxpbmUgaW50IGRldm1fcmVxdWVzdF9pcnEoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBp bnQgaXJxLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlycV9oYW5k bGVyX3QgaGFuZGxlciwgdW5zaWduZWQgbG9uZyBpcnFmbGFncywKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQp Cj4+ICt7Cj4+ICvCoMKgwqAgLypUT0RPOiBDaGVjayBpZiB3ZSByZWFsbHkgbmVlZCB0byBzZXQg YSB0eXBlICovCj4KPiBGcm9tIGEgWGVuIHBlcnNwZWN0aXZlLCBZb3UgbmVlZCB0byBzZXQgYSB0 eXBlLiBZb3UgY2FuIHF1b3RlIHRoZSBzcGVjIGxpa2VseSBoZXJlLiBUaGUgSU9SVCBzYXlzOgo+ Cj4gIldoZW4gdXNpbmcgd2lyZWQgaW50ZXJydXB0cywgdGhlIFNNTVUgYXJjaGl0ZWN0dXJlIHJl cXVpcmVzIHRoZW0gdG8gYmUgZWRnZSBzZW5zaXRpdmUiLgo+Cj4gSXQgbWlnaHQgYmUgYmV0dGVy IHRvIHF1b3RlIFNNTVV2MyBzcGVjIHRob3VnaHQuCj4KPgo+PiArwqDCoMKgIGlycV9zZXRfdHlw ZShpcnEsIElSUV9UWVBFX0VER0VfQk9USCk7Cj4+ICvCoMKgwqAgcmV0dXJuIHJlcXVlc3RfaXJx KGlycSwgaXJxZmxhZ3MsIGhhbmRsZXIsIGRldm5hbWUsIGRldl9pZCk7Cj4+ICsKPgo+IFNwdXJp b3VzIGxpbmU/Cj4KPj4gK30KPj4gKwo+PiAraW50IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEo c3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaXJxLCBpcnFfaGFuZGxlcl90IGhhbmRs ZXIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlycV9oYW5kbGVyX3Qg dGhyZWFkX2ZuLCB1bnNpZ25lZCBsb25nIGlycWZsYWdzLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpCj4+ICt7 Cj4+ICvCoMKgwqAgcmV0dXJuIGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIHRocmVhZF9mbiwg aXJxZmxhZ3MsIGRldm5hbWUsIGRldl9pZCk7Cj4+ICt9Cj4KPiBMb29raW5nIGF0IHRoaXMgYWdh aW4sIEkgdW5kZXJzdGFuZCB0aGF0IFhlbiBkb2VzIG5vdCBoYXZlIHRocmVhZC4gQnV0IHRoZSBt YWluIGdvYWwgb2YgaGF2aW5nIHVzaW5nIHRocmVhZCBpbiBMaW51eCBpcyB0byBsaW1pdCBsYXRl bmN5Lgo+Cj4gVGhlIGNsb3Nlc3QgdGhpbmcgd2Ugd291bGQgaGF2ZSBmb3IgWGVuIHdvdWxkIGJl IHRhc2tsZXQuIEkgYW0gbm90IGFza2luZyB0byBpbXBsZW1lbnQgdGhhdC4gQnV0IEkgd291bGQg bGlrZSB0byBzZWUgYXQgbGVhc3QgYSBjb21tZW50IG9uIHRvcCBvZiB0aGUgZnVuY3Rpb24gZXhw bGFpbmluZyB0aGUgcmF0aW9uYWxlIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9uLgo+Cj4+IMKg IC0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgo+PiAtI2luY2x1ZGUgPGxpbnV4L2FjcGlfaW9ydC5o Pgo+PiAtI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4+IC0jaW5jbHVkZSA8bGludXgvZG1hLWlv bW11Lmg+Cj4+IC0jaW5jbHVkZSA8bGludXgvZXJyLmg+Cj4+IC0jaW5jbHVkZSA8bGludXgvaW50 ZXJydXB0Lmg+Cj4+IC0jaW5jbHVkZSA8bGludXgvaW9tbXUuaD4KPj4gLSNpbmNsdWRlIDxsaW51 eC9pb3BvbGwuaD4KPj4gLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPj4gLSNpbmNsdWRlIDxs aW51eC9tc2kuaD4KPj4gLSNpbmNsdWRlIDxsaW51eC9vZi5oPgo+PiAtI2luY2x1ZGUgPGxpbnV4 L29mX2FkZHJlc3MuaD4KPj4gLSNpbmNsdWRlIDxsaW51eC9vZl9pb21tdS5oPgo+PiAtI2luY2x1 ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Cj4+IC0jaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4+IC0j aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+IC0KPj4gLSNpbmNsdWRlIDxsaW51 eC9hbWJhL2J1cy5oPgo+PiAtCj4+IC0jaW5jbHVkZSAiaW8tcGd0YWJsZS5oIgo+PiArLyogWGVu OiBUaGUgbXV0ZXggaXMgdXNlZCBvbmx5IGR1cmluZyBpbml0aWFsaXphdGlvbiBzbyB0aGUgdHlw ZWNhc3QgaXMgc2FmZSAqLwo+PiArI2RlZmluZSBtdXRleCBzcGlubG9ja190Cj4+ICsjZGVmaW5l IG11dGV4X2luaXQgc3Bpbl9sb2NrX2luaXQKPj4gKyNkZWZpbmUgbXV0ZXhfbG9jayBzcGluX2xv Y2sKPj4gKyNkZWZpbmUgbXV0ZXhfdW5sb2NrIHNwaW5fdW5sb2NrCj4+ICsKPj4gKyNkZWZpbmUg cmVhZHhfcG9sbF90aW1lb3V0KG9wLCBhZGRyLCB2YWwsIGNvbmQsIHNsZWVwX3VzLCB0aW1lb3V0 X3VzKSBcCj4+ICsoeyBcCj4+ICvCoMKgwqAgc190aW1lX3QgZGVhZGxpbmUgPSBOT1coKSArIE1J Q1JPU0VDUyh0aW1lb3V0X3VzKTsgXAo+PiArwqDCoMKgIGZvciAoOzspIHsgXAo+PiArwqDCoMKg wqDCoMKgwqAgKHZhbCkgPSBvcChhZGRyKTsgXAo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGNvbmQp IFwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7IFwKPj4gK8KgwqDCoMKgwqDCoMKg IGlmIChOT1coKSA+IGRlYWRsaW5lKSB7IFwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHZh bCkgPSBvcChhZGRyKTsgXAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsgXAo+PiAr wqDCoMKgwqDCoMKgwqAgfSBcCj4+ICvCoMKgwqAgdWRlbGF5KHNsZWVwX3VzKTsgXAo+PiArwqDC oMKgIH0gXAo+PiArwqDCoMKgIChjb25kKSA/IDAgOiAtRVRJTUVET1VUOyBcCj4+ICt9KQo+PiAr Cj4+ICsjZGVmaW5lIHJlYWRsX3JlbGF4ZWRfcG9sbF90aW1lb3V0KGFkZHIsIHZhbCwgY29uZCwg ZGVsYXlfdXMsIHRpbWVvdXRfdXMpIFwKPj4gK8KgwqDCoCByZWFkeF9wb2xsX3RpbWVvdXQocmVh ZGxfcmVsYXhlZCwgYWRkciwgdmFsLCBjb25kLCBkZWxheV91cywgdGltZW91dF91cykKPj4gKwo+ PiArI2RlZmluZSBWQV9CSVRTIDAgLyogT25seSBuZWVkZWQgZm9yIFMxIHRyYW5zbGF0aW9ucyAq Lwo+PiDCoCDCoCAvKiBNTUlPIHJlZ2lzdGVycyAqLwo+PiDCoCAjZGVmaW5lIEFSTV9TTU1VX0lE UjDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MAo+PiBAQCAtNDMzLDYgKzgwNyw3IEBAIGVudW0g cHJpX3Jlc3Agewo+PiDCoMKgwqDCoMKgIFBSSV9SRVNQX1NVQ0MsCj4+IMKgIH07Cj4+IMKgICsj aWYgMCAvKiBYZW46IE5vIE1TSSBzdXBwb3J0IGluIHRoaXMgaXRlcmF0aW9uICovCj4+IMKgIGVu dW0gYXJtX3NtbXVfbXNpX2luZGV4IHsKPj4gwqDCoMKgwqDCoCBFVlRRX01TSV9JTkRFWCwKPj4g wqDCoMKgwqDCoCBHRVJST1JfTVNJX0lOREVYLAo+PiBAQCAtNDU3LDYgKzgzMiw3IEBAIHN0YXRp YyBwaHlzX2FkZHJfdCBhcm1fc21tdV9tc2lfY2ZnW0FSTV9TTU1VX01BWF9NU0lTXVszXSA9IHsK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIEFSTV9TTU1VX1BSSVFfSVJRX0NGRzIsCj4+IMKgwqDCoMKg wqAgfSwKPj4gwqAgfTsKPj4gKyNlbmRpZgo+PiDCoCDCoCBzdHJ1Y3QgYXJtX3NtbXVfY21kcV9l bnQgewo+PiDCoMKgwqDCoMKgIC8qIENvbW1vbiBmaWVsZHMgKi8KPj4gQEAgLTU2MSw2ICs5Mzcs OCBAQCBzdHJ1Y3QgYXJtX3NtbXVfczJfY2ZnIHsKPj4gwqDCoMKgwqDCoCB1MTbCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdm1pZDsKPj4gwqDCoMKgwqDCoCB1NjTCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdnR0YnI7Cj4+IMKgwqDCoMKgwqAgdTY0wqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHZ0Y3I7Cj4+ICvCoMKgwqAgLyogWGVuOiBEb21haW4gYXNzb2NpYXRl ZCB0byB0aGlzIGNvbmZpZ3VyYXRpb24gKi8KPj4gK8KgwqDCoCBzdHJ1Y3QgZG9tYWluwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAqZG9tYWluOwo+PiDCoCB9Owo+PiDCoCDCoCBzdHJ1Y3QgYXJtX3Nt bXVfc3RydGFiX2VudCB7Cj4+IEBAIC02MzUsOSArMTAxMywyMSBAQCBzdHJ1Y3QgYXJtX3NtbXVf ZGV2aWNlIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfc3RydGFiX2NmZ8KgwqDCoCBz dHJ0YWJfY2ZnOwo+PiDCoCDCoMKgwqDCoMKgIC8qIElPTU1VIGNvcmUgY29kZSBoYW5kbGUgKi8K Pj4gKyNpZiAwIC8qWGVuOiBHZW5lcmljIGlvbW11X2RldmljZSByZWYgbm90IG5lZWRlZCBoZXJl ICovCj4+IMKgwqDCoMKgwqAgc3RydWN0IGlvbW11X2RldmljZcKgwqDCoMKgwqDCoMKgIGlvbW11 Owo+PiArI2VuZGlmCj4+ICvCoMKgwqAgLyogWGVuOiBOZWVkIHRvIGtlZXAgYSBsaXN0IG9mIFNN TVUgZGV2aWNlcyAqLwo+PiArwqDCoMKgIHN0cnVjdCBsaXN0X2hlYWTCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZGV2aWNlczsKPj4gwqAgfTsKPj4gwqAgKy8qIFhlbjogS2VlcCBhIGxp c3Qgb2YgZGV2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBkcml2ZXIgKi8KPj4gK3N0YXRpYyBE RUZJTkVfU1BJTkxPQ0soYXJtX3NtbXVfZGV2aWNlc19sb2NrKTsKPj4gK3N0YXRpYyBMSVNUX0hF QUQoYXJtX3NtbXVfZGV2aWNlcyk7Cj4+ICsvKiBYZW46IEhlbHBlciBmb3IgZmluZGluZyBhIGRl dmljZSB1c2luZyBmd25vZGUgKi8KPj4gK3N0YXRpYwo+PiArc3RydWN0IGFybV9zbW11X2Rldmlj ZSAqYXJtX3NtbXVfZ2V0X2J5X2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTsK Pj4gKwo+PiArCj4+IMKgIC8qIFNNTVUgcHJpdmF0ZSBkYXRhIGZvciBlYWNoIG1hc3RlciAqLwo+ PiDCoCBzdHJ1Y3QgYXJtX3NtbXVfbWFzdGVyX2RhdGEgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBh cm1fc21tdV9kZXZpY2XCoMKgwqDCoMKgwqDCoCAqc21tdTsKPj4gQEAgLTY1NCw3ICsxMDQ0LDcg QEAgZW51bSBhcm1fc21tdV9kb21haW5fc3RhZ2Ugewo+PiDCoCDCoCBzdHJ1Y3QgYXJtX3NtbXVf ZG9tYWluIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlwqDCoMKgwqDCoMKg wqAgKnNtbXU7Cj4+IC3CoMKgwqAgc3RydWN0IG11dGV4wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp bml0X211dGV4OyAvKiBQcm90ZWN0cyBzbW11IHBvaW50ZXIgKi8KPj4gK8KgwqDCoCBtdXRleMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbml0X211dGV4OyAvKiBQcm90ZWN0cyBzbW11 IHBvaW50ZXIgKi8KPgo+IFJhdGhlciB0aGFuIHJlcGxhY2luZyBzdHJ1Y3QgbXV0ZXggYnkgbXV0 ZXggd2hpY2ggbG9va3MgYSBiaXQgd2VpcmQuIFdoeSBkb24ndCB5b3UganVzdCBkbwo+Cj4gI2Rl ZmluZSBtdXRleCBzcGlubG9jawo+Cj4+IMKgIMKgwqDCoMKgwqAgc3RydWN0IGlvX3BndGFibGVf b3BzwqDCoMKgwqDCoMKgwqAgKnBndGJsX29wczsKPj4gwqAgQEAgLTEyMzIsNyArMTYyMiw3IEBA IHN0YXRpYyB2b2lkIGFybV9zbW11X2hhbmRsZV9wcHIoc3RydWN0IGFybV9zbW11X2RldmljZSAq c21tdSwgdTY0ICpldnQpCj4+IMKgIMKgwqDCoMKgwqAgZGV2X2luZm8oc21tdS0+ZGV2LCAidW5l eHBlY3RlZCBQUkkgcmVxdWVzdCByZWNlaXZlZDpcbiIpOwo+PiDCoMKgwqDCoMKgIGRldl9pbmZv KHNtbXUtPmRldiwKPj4gLcKgwqDCoMKgwqDCoMKgwqAgIlx0c2lkIDB4JTA4eC4weCUwNXg6IFsl dSVzXSAlc3ByaXZpbGVnZWQgJXMlcyVzIGFjY2VzcyBhdCBpb3ZhIDB4JTAxNmxseFxuIiwKPj4g K8KgwqDCoMKgwqDCoMKgwqAgIlx0c2lkIDB4JTA4eC4weCUwNXg6IFsldSVzXSAlc3ByaXZpbGVn ZWQgJXMlcyVzIGFjY2VzcyBhdCBpb3ZhICUjIiBQUkl4NjQgIlxuIiwKPj4gwqDCoMKgwqDCoMKg wqDCoMKgwqAgc2lkLCBzc2lkLCBncnBpZCwgbGFzdCA/ICJMIiA6ICIiLAo+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoCBldnRbMF0gJiBQUklRXzBfUEVSTV9QUklWID8gIiIgOiAidW4iLAo+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoCBldnRbMF0gJiBQUklRXzBfUEVSTV9SRUFEID8gIlIiIDogIiIsCj4+ IEBAIC0xMzQ2LDYgKzE3MzYsOCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYXJtX3NtbXVfY29tYmlu ZWRfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2KQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAg YXJtX3NtbXVfZ2Vycm9yX2hhbmRsZXIoaXJxLCBkZXYpOwo+PiDCoMKgwqDCoMKgIGFybV9zbW11 X2NtZHFfc3luY19oYW5kbGVyKGlycSwgZGV2KTsKPj4gK8KgwqDCoCAvKlhlbjogTm8gdGhyZWFk ZWQgaXJxLiBTbyBjYWxsIHRoZSByZXF1aXJlZCBmdW5jdGlvbiBmcm9tIGhlcmUgKi8KPj4gK8Kg wqDCoCBhcm1fc21tdV9jb21iaW5lZF9pcnFfdGhyZWFkKGlycSwgZGV2KTsxCj4+IMKgwqDCoMKg wqAgcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKPj4gwqAgfQo+PiDCoCBAQCAtMTM1OCw2ICsxNzUw LDQ2IEBAIHN0YXRpYyB2b2lkIF9fYXJtX3NtbXVfdGxiX3N5bmMoc3RydWN0IGFybV9zbW11X2Rl dmljZSAqc21tdSkKPj4gwqDCoMKgwqDCoCBhcm1fc21tdV9jbWRxX2lzc3VlX2NtZChzbW11LCAm Y21kKTsKPj4gwqAgfQo+PiDCoCArLyoKPj4gKyAqIFhlbjogRGVmaW5lIHRoZSBJUlEgaGFuZGxl cnMgZm9yIHhlbi4gVGhlIGxpbnV4IGZ1bmN0aW9ucyB3b3VsZCBiZQo+PiArICogbW9kaWZpZWQg dG8gdXNlIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgZm9sbG93aW5nIGNvZGUuCj4+ICsg Ki8KPj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X2V2dHFfdGhyZWFkX3hlbihpbnQgaXJxLCB2b2lk ICpkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz dHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4gK3sKPj4gK8KgwqDCoCBhcm1fc21tdV9ldnRx X3RocmVhZChpcnEsIGRldik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X3By aXFfdGhyZWFkX3hlbihpbnQgaXJxLCB2b2lkICpkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4g K3sKPj4gK8KgwqDCoCBhcm1fc21tdV9wcmlxX3RocmVhZChpcnEsIGRldik7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X2NtZHFfc3luY19oYW5kbGVyX3hlbihpbnQgaXJxLCB2 b2lkICpkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4gK3sKPj4gK8KgwqDCoCBhcm1fc21tdV9j bWRxX3N5bmNfaGFuZGxlcihpcnEsIGRldik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFy bV9zbW11X2dlcnJvcl9oYW5kbGVyX3hlbihpbnQgaXJxLCB2b2lkICpkZXYsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgY3B1X3VzZXJfcmVn cyAqcmVncykKPj4gK3sKPj4gK8KgwqDCoCBhcm1fc21tdV9nZXJyb3JfaGFuZGxlcihpcnEsIGRl dik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X2NvbWJpbmVkX2lycV9oYW5k bGVyX3hlbihpbnQgaXJxLCB2b2lkICpkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4gK3sKPj4g K8KgwqDCoCBhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFuZGxlcihpcnEsIGRldik7Cj4+ICt9Cj4+ ICsKPj4gKyNkZWZpbmUgYXJtX3NtbXVfZXZ0cV90aHJlYWQgYXJtX3NtbXVfZXZ0cV90aHJlYWRf eGVuCj4+ICsjZGVmaW5lIGFybV9zbW11X3ByaXFfdGhyZWFkIGFybV9zbW11X3ByaXFfdGhyZWFk X3hlbgo+PiArI2RlZmluZSBhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxlciBhcm1fc21tdV9jbWRx X3N5bmNfaGFuZGxlcl94ZW4KPj4gKyNkZWZpbmUgYXJtX3NtbXVfZ2Vycm9yX2hhbmRsZXIgYXJt X3NtbXVfZ2Vycm9yX2hhbmRsZXJfeGVuCj4+ICsjZGVmaW5lIGFybV9zbW11X2NvbWJpbmVkX2ly cV9oYW5kbGVyIGFybV9zbW11X2NvbWJpbmVkX2lycV9oYW5kbGVyX3hlbgo+PiArCj4+IMKgIHN0 YXRpYyB2b2lkIGFybV9zbW11X3RsYl9zeW5jKHZvaWQgKmNvb2tpZSkKPj4gwqAgewo+PiDCoMKg wqDCoMKgIHN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWluID0gY29va2llOwo+PiBA QCAtMTQxNSw2ICsxODQ3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21tdV9nYXRoZXJfb3Bz IGFybV9zbW11X2dhdGhlcl9vcHMgPSB7Cj4+IMKgwqDCoMKgwqAgLnRsYl9zeW5jwqDCoMKgID0g YXJtX3NtbXVfdGxiX3N5bmMsCj4+IMKgIH07Cj4+IMKgICsjaWYgMCAvKlhlbjogVW51c2VkIGZ1 bmN0aW9uYWxpdHkgKi8KPj4gwqAgLyogSU9NTVUgQVBJICovCj4+IMKgIHN0YXRpYyBib29sIGFy bV9zbW11X2NhcGFibGUoZW51bSBpb21tdV9jYXAgY2FwKQo+PiDCoCB7Cj4+IEBAIC0xNDI3LDYg KzE4NjAsNyBAQCBzdGF0aWMgYm9vbCBhcm1fc21tdV9jYXBhYmxlKGVudW0gaW9tbXVfY2FwIGNh cCkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsKPj4gwqDCoMKgwqDCoCB9Cj4+ IMKgIH0KPj4gKyNlbmRpZgo+PiDCoCDCoCBzdGF0aWMgc3RydWN0IGlvbW11X2RvbWFpbiAqYXJt X3NtbXVfZG9tYWluX2FsbG9jKHVuc2lnbmVkIHR5cGUpCj4+IMKgIHsKPj4gQEAgLTE1NDYsOSAr MTk4MCwxNSBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RvbWFpbl9maW5hbGlzZV9zMihzdHJ1Y3Qg YXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFpbiwKPj4gwqDCoMKgwqDCoCBpZiAodm1pZCA8IDAp Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gdm1pZDsKPj4gwqAgLcKgwqDCoCBjZmctPnZt aWTCoMKgwqAgPSAodTE2KXZtaWQ7Cj4+IC3CoMKgwqAgY2ZnLT52dHRicsKgwqDCoCA9IHBndGJs X2NmZy0+YXJtX2xwYWVfczJfY2ZnLnZ0dGJyOwo+PiAtwqDCoMKgIGNmZy0+dnRjcsKgwqDCoCA9 IHBndGJsX2NmZy0+YXJtX2xwYWVfczJfY2ZnLnZ0Y3I7Cj4+ICvCoMKgwqAgLyogWGVuOiBHZXQg dGhlIHR0YnIgYW5kIHZ0Y3IgdmFsdWVzCj4KPiBJIHRoaW5rIExpbnV4IGlzIGFsc28gdXNpbmc6 Cj4KPiAvKgo+IMKgKiBYZW46Cj4KPj4gK8KgwqDCoMKgICogdnR0YnI6IFRoaXMgaXMgYSBzaGFy ZWQgdmFsdWUgd2l0aCB0aGUgZG9tYWluIHBhZ2UgdGFibGUKPj4gK8KgwqDCoMKgICogdnRjcjog VGhlIFRDUiBzZXR0aW5ncyBhcmUgdGhlIHNhbWUgYXMgQ1BVIHNpbmNlIHRoZSBwYWdlCj4+ICvC oMKgwqDCoCAqIHRhYmxlcyBhcmUgc2hhcmVkCj4+ICvCoMKgwqDCoCAqLwo+PiArCj4+ICvCoMKg wqAgY2ZnLT52bWlkwqDCoMKgID0gdm1pZDsKPj4gK8KgwqDCoCBjZmctPnZ0dGJywqDCoMKgID0g cGFnZV90b19tYWRkcihjZmctPmRvbWFpbi0+YXJjaC5wMm0ucm9vdCk7Cj4+ICvCoMKgwqAgY2Zn LT52dGNywqDCoMKgID0gUkVBRF9TWVNSRUczMihWVENSX0VMMikgJiBTVFJUQUJfU1RFXzJfVlRD Ul9NQVNLOwo+PiDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiDCoCB9Cj4+IMKgIEBAIC0xNjA0LDYg KzIwNDQsNyBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RvbWFpbl9maW5hbGlzZShzdHJ1Y3QgaW9t bXVfZG9tYWluICpkb21haW4pCj4+IMKgwqDCoMKgwqAgaWYgKHNtbXUtPmZlYXR1cmVzICYgQVJN X1NNTVVfRkVBVF9DT0hFUkVOQ1kpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBwZ3RibF9jZmcucXVp cmtzID0gSU9fUEdUQUJMRV9RVUlSS19OT19ETUE7Cj4+IMKgICvCoMKgwqAgLyogWGVuOiBwZ3Ri bF9vcHMgZ2V0cyBhbiBpbnZhbGlkIGFkZHJlc3MgKi8KPj4gwqDCoMKgwqDCoCBwZ3RibF9vcHMg PSBhbGxvY19pb19wZ3RhYmxlX29wcyhmbXQsICZwZ3RibF9jZmcsIHNtbXVfZG9tYWluKTsKPj4g wqDCoMKgwqDCoCBpZiAoIXBndGJsX29wcykKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAt RU5PTUVNOwo+PiBAQCAtMTcyMSw2ICsyMTYyLDcgQEAgb3V0X3VubG9jazoKPj4gwqDCoMKgwqDC oCByZXR1cm4gcmV0Owo+PiDCoCB9Cj4+IMKgICsjaWYgMCAvKiBYZW46IFVudXNlZCBmdW5jdGlv bmxpdHkgKi8KPgo+IHMvZnVuY3Rpb25saXR5L2Z1bmN0aW9uYWxpdHkvCj4KPj4gwqAgc3RhdGlj IGludCBhcm1fc21tdV9tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBs b25nIGlvdmEsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBoeXNfYWRkcl90IHBhZGRy LCBzaXplX3Qgc2l6ZSwgaW50IHByb3QpCj4+IMKgIHsKPj4gQEAgLTE3NzIsNiArMjIxNCw3IEBA IHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKmFybV9zbW11X2dldF9ieV9md25vZGUoc3RydWN0IGZ3 bm9kZV9oYW5kbGUgKmZ3bm9kZSkKPj4gwqDCoMKgwqDCoCBwdXRfZGV2aWNlKGRldik7Cj4+IMKg wqDCoMKgwqAgcmV0dXJuIGRldiA/IGRldl9nZXRfZHJ2ZGF0YShkZXYpIDogTlVMTDsKPj4gwqAg fQo+PiArI2VuZGlmCj4+IMKgIMKgIHN0YXRpYyBib29sIGFybV9zbW11X3NpZF9pbl9yYW5nZShz dHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11LCB1MzIgc2lkKQo+PiDCoCB7Cj4+IEBAIC0xNzgz LDcgKzIyMjYsOSBAQCBzdGF0aWMgYm9vbCBhcm1fc21tdV9zaWRfaW5fcmFuZ2Uoc3RydWN0IGFy bV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCkKPj4gwqDCoMKgwqDCoCByZXR1cm4gc2lkIDwg bGltaXQ7Cj4+IMKgIH0KPj4gwqAgCj4KPiAvKiBYZW46IFVudXNlZCAqLwo+Cj4+ICsjaWYgMAo+ PiDCoCBzdGF0aWMgc3RydWN0IGlvbW11X29wcyBhcm1fc21tdV9vcHM7Cj4+ICsjZW5kaWYKPj4g wqAgwqAgc3RhdGljIGludCBhcm1fc21tdV9hZGRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikK Pj4gwqAgewo+PiBAQCAtMTc5MSw5ICsyMjM2LDEyIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfYWRk X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+IMKgwqDCoMKgwqAgc3RydWN0IGFybV9zbW11 X2RldmljZSAqc21tdTsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfbWFzdGVyX2RhdGEg Km1hc3RlcjsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMgPSBkZXYt PmlvbW11X2Z3c3BlYzsKPj4gKyNpZiAwIC8qWGVuOiBpb21tdV9ncm91cCBpcyBub3QgbmVlZGVk ICovCj4+IMKgwqDCoMKgwqAgc3RydWN0IGlvbW11X2dyb3VwICpncm91cDsKPj4gKyNlbmRpZgo+ PiDCoCAtwqDCoMKgIGlmICghZndzcGVjIHx8IGZ3c3BlYy0+b3BzICE9ICZhcm1fc21tdV9vcHMp Cj4+ICvCoMKgwqAgLyogWGVuOiBmd3NwZWMtPm9wcyBhcmUgbm90IG5lZWRlZCAqLwo+PiArwqDC oMKgIGlmICghZndzcGVjKQo+Cj4gSSBhbSBwcmV0dHkgc3VyZSBJIHN1Z2dlc3RlZCBpbiB0aGUg cGFzdCB0aGUgZndzcGVjLT5vcHMgbWlnaHQgYmUgbmVlZGVkLgo+Cj4+IMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gLUVOT0RFVjsKPj4gwqDCoMKgwqDCoCAvKgo+PiDCoMKgwqDCoMKgwqAgKiBX ZSBfY2FuXyBhY3R1YWxseSB3aXRoc3RhbmQgZG9kZ3kgYnVzIGNvZGUgcmUtY2FsbGluZyBhZGRf ZGV2aWNlKCkKPj4gQEAgLTE4MzAsNiArMjI3OCwxMSBAQCBzdGF0aWMgaW50IGFybV9zbW11X2Fk ZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiDC oMKgwqDCoMKgIH0KPj4gwqAgKy8qCj4+ICsgKiBYZW46IERvIG5vdCBuZWVkIGFuIGlvbW11IGdy b3VwIGFzIHRoZSBzdHJlYW0gZGF0YSBpcyBjYXJyaWVkIGJ5IHRoZSBTTU1VCj4+ICsgKiBtYXN0 ZXIgZGV2aWNlIG9iamVjdAo+PiArICovCj4+ICsjaWYgMAo+PiDCoMKgwqDCoMKgIGdyb3VwID0g aW9tbXVfZ3JvdXBfZ2V0X2Zvcl9kZXYoZGV2KTsKPj4gwqDCoMKgwqDCoCBpZiAoIUlTX0VSUihn cm91cCkpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlvbW11X2dyb3VwX3B1dChncm91cCk7Cj4+ IEBAIC0xODM3LDggKzIyOTAsMTYgQEAgc3RhdGljIGludCBhcm1fc21tdV9hZGRfZGV2aWNlKHN0 cnVjdCBkZXZpY2UgKmRldikKPj4gwqDCoMKgwqDCoCB9Cj4+IMKgIMKgwqDCoMKgwqAgcmV0dXJu IFBUUl9FUlJfT1JfWkVSTyhncm91cCk7Cj4+ICsjZW5kaWYKPj4gK8KgwqDCoCByZXR1cm4gMDsK Pj4gwqAgfQo+PiDCoCArLyoKPj4gKyAqIFhlbjogV2UgY2FuIHBvdGVudGlhbGx5IHN1cHBvcnQg dGhpcyBmdW5jdGlvbiBhbmQgZGVzdHJveSBhIGRldmljZS4gVGhpcwo+PiArICogd2lsbCBiZSBy ZWxldmFudCBmb3IgUENJIGhvdHBsdWcuIFNvLCB3aWxsIGJlIGltcGxlbWVudGVkIGFzIG5lZWRl ZCBhZnRlcgo+PiArICogcGFzc3Rocm91Z2ggc3VwcG9ydCBpcyBhdmFpbGFibGUuCj4+ICsgKi8K Pj4gKyNpZiAwCj4+IMKgIHN0YXRpYyB2b2lkIGFybV9zbW11X3JlbW92ZV9kZXZpY2Uoc3RydWN0 IGRldmljZSAqZGV2KQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGlvbW11X2Z3c3BlYyAq ZndzcGVjID0gZGV2LT5pb21tdV9md3NwZWM7Cj4+IEBAIC0xOTc0LDYgKzI0MzUsNyBAQCBzdGF0 aWMgc3RydWN0IGlvbW11X29wcyBhcm1fc21tdV9vcHMgPSB7Cj4+IMKgwqDCoMKgwqAgLnB1dF9y ZXN2X3JlZ2lvbnPCoMKgwqAgPSBhcm1fc21tdV9wdXRfcmVzdl9yZWdpb25zLAo+PiDCoMKgwqDC oMKgIC5wZ3NpemVfYml0bWFwwqDCoMKgwqDCoMKgwqAgPSAtMVVMLCAvKiBSZXN0cmljdGVkIGR1 cmluZyBkZXZpY2UgYXR0YWNoICovCj4+IMKgIH07Cj4+ICsjZW5kaWYKPj4gwqAgwqAgLyogUHJv YmluZyBhbmQgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zICovCj4+IMKgIHN0YXRpYyBpbnQgYXJt X3NtbXVfaW5pdF9vbmVfcXVldWUoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwKPj4gQEAg LTIxODIsNiArMjY0NCw3IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfdXBkYXRlX2dicGEoc3RydWN0 IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNldCwgdTMyIGNscikKPj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAxLCBBUk1fU01NVV9QT0xMX1RJTUVP VVRfVVMpOwo+PiDCoCB9Cj4+IMKgICsjaWYgMCAvKiBYZW46IFRoZXJlIGlzIG5vIE1TSSBzdXBw b3J0IGFzIHlldCAqLwo+PiDCoCBzdGF0aWMgdm9pZCBhcm1fc21tdV9mcmVlX21zaXModm9pZCAq ZGF0YSkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7Cj4+ IEBAIC0yMjQ3LDEyICsyNzEwLDE1IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X3NldHVwX21zaXMo c3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKPj4gwqDCoMKgwqDCoCAvKiBBZGQgY2FsbGJh Y2sgdG8gZnJlZSBNU0lzIG9uIHRlYXJkb3duICovCj4+IMKgwqDCoMKgwqAgZGV2bV9hZGRfYWN0 aW9uKGRldiwgYXJtX3NtbXVfZnJlZV9tc2lzLCBkZXYpOwo+PiDCoCB9Cj4+ICsjZW5kaWYKPj4g wqAgwqAgc3RhdGljIHZvaWQgYXJtX3NtbXVfc2V0dXBfdW5pcXVlX2lycXMoc3RydWN0IGFybV9z bW11X2RldmljZSAqc21tdSkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIGludCBpcnEsIHJldDsKPj4g wqAgKyNpZiAwIC8qWGVuOiBDYW5ub3Qgc2V0dXAgbXNpcyBmb3Igbm93ICovCj4+IMKgwqDCoMKg wqAgYXJtX3NtbXVfc2V0dXBfbXNpcyhzbW11KTsKPj4gKyNlbmRpZgo+PiDCoCDCoMKgwqDCoMKg IC8qIFJlcXVlc3QgaW50ZXJydXB0IGxpbmVzICovCj4+IMKgwqDCoMKgwqAgaXJxID0gc21tdS0+ ZXZ0cS5xLmlycTsKPj4gQEAgLTIzMTYsOSArMjc4MiwxMyBAQCBzdGF0aWMgaW50IGFybV9zbW11 X3NldHVwX2lycXMoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKPj4gwqDCoMKgwqDCoMKg wqDCoMKgwqAgKiBDYXZpdW0gVGh1bmRlclgyIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgbm90IHN1 cHBvcnQgdW5pcXVlCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICogaXJxIGxpbmVzLiBVc2Ugc2lu Z2xlIGlycSBsaW5lIGZvciBhbGwgdGhlIFNNTVV2MyBpbnRlcnJ1cHRzLgo+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoCAqLwo+PiAtwqDCoMKgwqDCoMKgwqAgcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVh ZGVkX2lycShzbW11LT5kZXYsIGlycSwKPj4gK8KgwqDCoMKgwqDCoMKgIC8qCj4+ICvCoMKgwqDC oMKgwqDCoMKgICogWGVuOiBEb2VzIG5vdCBzdXBwb3J0IHRocmVhZGVkIGlycXMsIHNvIHNlcmlh bGlzZSB0aGUgc2V0dXAuCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogVGhpcyBpcyB0aGUgc2FtZSBm b3IgcHJpcyBhbmQgZXZlbnQgaW50ZXJydXB0IGxpbmVzIG9uIG90aGVyCj4+ICvCoMKgwqDCoMKg wqDCoMKgICogc3lzdGVtcwo+PiArwqDCoMKgwqDCoMKgwqDCoCAqLwo+Cj4gQWJvdmUgeW91IGRp ZCBpbXBsZW1lbnRlZCBhIGR1bW15IGltcGxlbWVudGF0aW9uIG9mIGRldm1fcmVxdWVzdF90aHJl YWRlZF9pcnEoLi4uKS4gU28gd2h5IGRpZCB5b3UgcmVwbGFjZSB0aGUgY29kZSBoZXJlPwpUaGUg cmVwbGFjZW1lbnQgd29ya2VkIHdlbGwgZm9yIG90aGVyIGZ1bmN0aW9ucywgd2hlcmUgdGhlIGhh bmRsZXIgd2FzIG5vdCBkZWZpbmVkLiBTbywgdGhlIHdyYXBwZXIgZnVuY3Rpb24gY2FsbHMgZGV2 bV9yZXF1ZXN0X2lycSB3aXRoIHRoZQphcmd1bWVudCBwYXNzZWQgaW4gYXMgdGhyZWFkLiBJbiB0 aGlzIGNhc2UgcmVhbGx5IHRoZSBoYW5kbGVyIGhpdHMgZmlyc3QgYW5kIGl0IGNhbGxzIHRoZSB0 aHJlYWQgaW4gcmVzcG9uc2UuIEkgY2FuIG1vZGlmeSB0aGUgY29kZSB0byBtYWtlIHRoaXMgZml0 IGludG8gdGhlIGFwaQpidXQgaW4gdGhhdCBjYXNlIEkgd2lsbCBuZWVkIHRvIHN3YXAgYXJvdW5k IHRoZSBmdW5jdGlvbnMgc28gbnVtYmVyIG9mIGxpbmUgY2hhbmdlcyB3aWxsIHN0YXkgdGhlIHNh bWUuIFRlbGwgbWUgeW91ciBwcmVmZXJlbmNlLsKgCj4KPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9 IGRldm1fcmVxdWVzdF9pcnEoc21tdS0+ZGV2LCBpcnEsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFuZGxlciwKPj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFybV9zbW11X2NvbWJpbmVk X2lycV90aHJlYWQsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBJUlFGX09ORVNIT1QsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAiYXJtLXNtbXUtdjMtY29tYmluZWQtaXJxIiwgc21tdSk7Cj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAocmV0IDwgMCkKPj4gQEAgLTI1NDIsOCArMzAxMiwxNCBAQCBzdGF0aWMgaW50IGFy bV9zbW11X2RldmljZV9od19wcm9iZShzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQo+PiDC oMKgwqDCoMKgwqDCoMKgwqAgc21tdS0+ZmVhdHVyZXMgfD0gQVJNX1NNTVVfRkVBVF9TVEFMTFM7 Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoCArLyoKPj4gKyAqIFhlbjogQmxvY2sgc3RhZ2UgMSB0cmFu c2xhdGlvbnMuIEJ5IGRvaW5nIHRoaXMgaGVyZSB3ZSBkbyBub3QgbmVlZCB0byBzZXQgdGhlCj4+ ICsgKiBkb21haW4tPnN0YWdlIGV4cGxpY2l0bHkuCj4+ICsgKi8KPj4gKyNpZiAwCj4+IMKgwqDC oMKgwqAgaWYgKHJlZyAmIElEUjBfUzFQKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc21tdS0+ZmVh dHVyZXMgfD0gQVJNX1NNTVVfRkVBVF9UUkFOU19TMTsKPj4gKyNlbmRpZgo+PiDCoCDCoMKgwqDC oMKgIGlmIChyZWcgJiBJRFIwX1MyUCkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNtbXUtPmZlYXR1 cmVzIHw9IEFSTV9TTU1VX0ZFQVRfVFJBTlNfUzI7Cj4+IEBAIC0yNjE2LDEwICszMDkyLDEyIEBA IHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2h3X3Byb2JlKHN0cnVjdCBhcm1fc21tdV9kZXZp Y2UgKnNtbXUpCj4+IMKgwqDCoMKgwqAgaWYgKHJlZyAmIElEUjVfR1JBTjRLKQo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgc21tdS0+cGdzaXplX2JpdG1hcCB8PSBTWl80SyB8IFNaXzJNIHwgU1pfMUc7 Cj4+IMKgICsjaWYgMCAvKiBYZW46IFNNTVUgb3BzIGRvIG5vdCBoYXZlIGEgcGdzaXplX2JpdG1h cCBtZW1iZXIgZm9yIFhlbiAqLwo+PiDCoMKgwqDCoMKgIGlmIChhcm1fc21tdV9vcHMucGdzaXpl X2JpdG1hcCA9PSAtMVVMKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYXJtX3NtbXVfb3BzLnBnc2l6 ZV9iaXRtYXAgPSBzbW11LT5wZ3NpemVfYml0bWFwOwo+PiDCoMKgwqDCoMKgIGVsc2UKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIGFybV9zbW11X29wcy5wZ3NpemVfYml0bWFwIHw9IHNtbXUtPnBnc2l6 ZV9iaXRtYXA7Cj4+ICsjZW5kaWYKPj4gwqAgwqDCoMKgwqDCoCAvKiBPdXRwdXQgYWRkcmVzcyBz aXplICovCj4+IMKgwqDCoMKgwqAgc3dpdGNoIChyZWcgJiBJRFI1X09BU19NQVNLIDw8IElEUjVf T0FTX1NISUZUKSB7Cj4+IEBAIC0yNjgwLDcgKzMxNTgsOCBAQCBzdGF0aWMgaW50IGFybV9zbW11 X2RldmljZV9hY3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4+IMKgwqDC oMKgwqAgc3RydWN0IGRldmljZSAqZGV2ID0gc21tdS0+ZGV2Owo+PiDCoMKgwqDCoMKgIHN0cnVj dCBhY3BpX2lvcnRfbm9kZSAqbm9kZTsKPj4gwqAgLcKgwqDCoCBub2RlID0gKihzdHJ1Y3QgYWNw aV9pb3J0X25vZGUgKiopZGV2X2dldF9wbGF0ZGF0YShkZXYpOwo+PiArwqDCoMKgIC8qIFhlbjog TW9kaWZpY2F0aW9uIHRvIGdldCBpb3J0X25vZGUgKi8KPj4gK8KgwqDCoCBub2RlID0gKHN0cnVj dCBhY3BpX2lvcnRfbm9kZSAqKWRldi0+YWNwaV9ub2RlOwo+PiDCoCDCoMKgwqDCoMKgIC8qIFJl dHJpZXZlIFNNTVV2MyBzcGVjaWZpYyBkYXRhICovCj4+IMKgwqDCoMKgwqAgaW9ydF9zbW11ID0g KHN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAqKW5vZGUtPm5vZGVfZGF0YTsKPj4gQEAgLTI3MDMs NyArMzE4Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFybV9zbW11X2RldmljZV9hY3BpX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4+IMKgIHN0YXRpYyBpbnQgYXJtX3NtbXVf ZGV2aWNlX2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNl ICpzbW11KQo+PiDCoCB7Cj4+IC3CoMKgwqAgc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRl djsKPj4gK8KgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwZGV2Owo+PiDCoMKgwqDCoMKgIHUz MiBjZWxsczsKPj4gwqDCoMKgwqDCoCBpbnQgcmV0ID0gLUVJTlZBTDsKPj4gwqAgQEAgLTI3MTYs NiArMzE5NSw3IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2R0X3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4+IMKgIMKgwqDCoMKgwqAgcGFyc2VfZHJpdmVyX29wdGlv bnMoc21tdSk7Cj4+IMKgICvCoMKgwqAgLyogWGVuOiBvZl9kbWFfaXNfY29oZXJlbnQgaXMgYSBz dHViIHRpbGwgZHQgc3VwcG9ydCBpcyBpbnRyb2R1Y2VkICovCj4KPiBJIHRoaW5rIHRoaXMgY29t bWVudCBtYXR0ZXJzIG1vcmUgb24gdG9wIG9mIHRoZSBzdHViLiBJIHdvdWxkIGFsc28gYWRkIGFu IEJVRygpIGluIHRoZSBzdHViIHRvIGNhdGNoIGl0LgpJIGhhdmUganVzdCByZXR1cm5lZCBhIDAg aGVyZS4gUHV0dGluZyBhIEJVRyBpbiBtaWdodCBub3QgaGF2ZSB0aGUgZGVzaXJlZCBpbXBhY3Qs IHNpbmNlLCB0aGlzIHdpbGwgZXhlY3V0ZSBldmVyeSB0aW1lLgoKPgo+PiDCoMKgwqDCoMKgIGlm IChvZl9kbWFfaXNfY29oZXJlbnQoZGV2LT5vZl9ub2RlKSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKg IHNtbXUtPmZlYXR1cmVzIHw9IEFSTV9TTU1VX0ZFQVRfQ09IRVJFTkNZOwo+PiDCoCBAQCAtMjcz NCw5ICszMjE0LDExIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBpbnQgaXJxLCByZXQ7 Cj4+IMKgwqDCoMKgwqAgc3RydWN0IHJlc291cmNlICpyZXM7Cj4+ICsjaWYgMCAvKlhlbjogRG8g bm90IG5lZWQgdG8gc2V0dXAgc3lzZnMgKi8KPj4gwqDCoMKgwqDCoCByZXNvdXJjZV9zaXplX3Qg aW9hZGRyOwo+PiArI2VuZGlmCj4+IMKgwqDCoMKgwqAgc3RydWN0IGFybV9zbW11X2RldmljZSAq c21tdTsKPj4gLcKgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+PiArwqDC oMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9IHBkZXY7LyogWGVuOiBkZXYgaXMgaWdub3JlZCAqLwo+ PiDCoMKgwqDCoMKgIGJvb2wgYnlwYXNzOwo+PiDCoCDCoMKgwqDCoMKgIHNtbXUgPSBkZXZtX2t6 YWxsb2MoZGV2LCBzaXplb2YoKnNtbXUpLCBHRlBfS0VSTkVMKTsKPj4gQEAgLTI3NjMsNyArMzI0 NSw5IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgIk1NSU8gcmVn aW9uIHRvbyBzbWFsbCAoJXByKVxuIiwgcmVzKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy biAtRUlOVkFMOwo+PiDCoMKgwqDCoMKgIH0KPj4gKyNpZiAwIC8qWGVuOiBEbyBub3QgbmVlZCB0 byBzZXR1cCBzeXNmcyAqLwo+PiDCoMKgwqDCoMKgIGlvYWRkciA9IHJlcy0+c3RhcnQ7Cj4+ICsj ZW5kaWYKPj4gwqAgwqDCoMKgwqDCoCBzbW11LT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNl KGRldiwgcmVzKTsKPj4gwqDCoMKgwqDCoCBpZiAoSVNfRVJSKHNtbXUtPmJhc2UpKQo+PiBAQCAt MjgwMiwxMyArMzI4NiwxOCBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJl dDsKPj4gwqAgwqDCoMKgwqDCoCAvKiBSZWNvcmQgb3VyIHByaXZhdGUgZGV2aWNlIHN0cnVjdHVy ZSAqLwo+PiArwqDCoMKgIC8qIFhlbjogU01NVSBpcyBub3QgdHJlYXRlZCBhIGEgcGxhdGZvcm0g ZGV2aWNlKi8KPj4gKyNpZiAwCj4+IMKgwqDCoMKgwqAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRl diwgc21tdSk7Cj4+ICsjZW5kaWYKPj4gwqAgwqDCoMKgwqDCoCAvKiBSZXNldCB0aGUgZGV2aWNl ICovCj4+IMKgwqDCoMKgwqAgcmV0ID0gYXJtX3NtbXVfZGV2aWNlX3Jlc2V0KHNtbXUsIGJ5cGFz cyk7Cj4+IMKgwqDCoMKgwqAgaWYgKHJldCkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBy ZXQ7Cj4+IMKgICsvKiBYZW46IE5vdCBjcmVhdGluZyBhbiBJT01NVSBkZXZpY2UgbGlzdCBmb3Ig WGVuICovCj4+ICsjaWYgMAo+PiDCoMKgwqDCoMKgIC8qIEFuZCB3ZSdyZSB1cC4gR28gZ28gZ28h ICovCj4+IMKgwqDCoMKgwqAgcmV0ID0gaW9tbXVfZGV2aWNlX3N5c2ZzX2FkZCgmc21tdS0+aW9t bXUsIGRldiwgTlVMTCwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgInNtbXUzLiVwYSIsICZpb2FkZHIpOwo+PiBAQCAtMjg0NCw5ICszMzMzLDIwIEBAIHN0 YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gcmV0Owo+PiDCoMKgwqDCoMKgIH0KPj4gKyNlbmRpZgo+PiArwqDCoMKg IC8qCj4+ICvCoMKgwqDCoCAqIFhlbjogS2VlcCBhIGxpc3Qgb2YgYWxsIHByb2JlZCBkZXZpY2Vz LiBUaGlzIHdpbGwgYmUgdXNlZCB0byBxdWVyeQo+PiArwqDCoMKgwqAgKiB0aGUgc21tdSBkZXZp Y2VzIGJhc2VkIG9uIHRoZSBmd25vZGUuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIElOSVRf TElTVF9IRUFEKCZzbW11LT5kZXZpY2VzKTsKPj4gK8KgwqDCoCBzcGluX2xvY2soJmFybV9zbW11 X2RldmljZXNfbG9jayk7Cj4+ICvCoMKgwqAgbGlzdF9hZGQoJnNtbXUtPmRldmljZXMsICZhcm1f c21tdV9kZXZpY2VzKTsKPj4gK8KgwqDCoCBzcGluX3VubG9jaygmYXJtX3NtbXVfZGV2aWNlc19s b2NrKTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gwqAgfQo+PiDCoCArLyogWGVuOiBVbnVz ZWQgZnVuY3Rpb24gKi8KPj4gKyNpZiAwCj4+IMKgIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNl X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+PiDCoCB7Cj4+IMKgwqDCoMKg wqAgc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk ZXYpOwo+PiBAQCAtMjg2MCw2ICszMzYwLDggQEAgc3RhdGljIHZvaWQgYXJtX3NtbXVfZGV2aWNl X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+IMKgIHsKPj4gwqDCoMKg wqDCoCBhcm1fc21tdV9kZXZpY2VfcmVtb3ZlKHBkZXYpOwo+PiDCoCB9Cj4+ICsjZW5kaWYKPj4g Kwo+PiDCoCDCoCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhcm1fc21tdV9vZl9t YXRjaFtdID0gewo+PiDCoMKgwqDCoMKgIHsgLmNvbXBhdGlibGUgPSAiYXJtLHNtbXUtdjMiLCB9 LAo+PiBAQCAtMjg2Nyw2ICszMzY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgYXJtX3NtbXVfb2ZfbWF0Y2hbXSA9IHsKPj4gwqAgfTsKPj4gwqAgTU9EVUxFX0RFVklDRV9U QUJMRShvZiwgYXJtX3NtbXVfb2ZfbWF0Y2gpOwo+PiDCoCArI2lmIDAKPj4gwqAgc3RhdGljIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXJtX3NtbXVfZHJpdmVyID0gewo+PiDCoMKgwqDCoMKgIC5k cml2ZXLCoMKgwqAgPSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAubmFtZcKgwqDCoMKgwqDCoMKg ID0gImFybS1zbW11LXYzIiwKPj4gQEAgLTI4ODMsMyArMzM4NiwzMTggQEAgSU9NTVVfT0ZfREVD TEFSRShhcm1fc21tdXYzLCAiYXJtLHNtbXUtdjMiLCBOVUxMKTsKPj4gwqAgTU9EVUxFX0RFU0NS SVBUSU9OKCJJT01NVSBBUEkgZm9yIEFSTSBhcmNoaXRlY3RlZCBTTU1VdjMgaW1wbGVtZW50YXRp b25zIik7Cj4+IMKgIE1PRFVMRV9BVVRIT1IoIldpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0u Y29tPiIpOwo+PiDCoCBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4+ICsjZW5kaWYKPj4gKwo+ PiArLyoqKioqIFN0YXJ0IG9mIFhlbiBzcGVjaWZpYyBjb2RlICoqKioqLwo+Cj4gSSBndWVzcyBt b3N0IG9mIHRoZSBjb2RlIGJlbG93IGlzIGNvcGllZCBmcm9tIHNtbXUuYz8KWWVzLiBJdCBpcyBj b3BpZWQgZnJvbSBzbW11LmMuCgo+Cj4+ICsKPj4gK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFy bV9zbW11X2lvdGxiX2ZsdXNoX2FsbChzdHJ1Y3QgZG9tYWluICpkKQo+PiArewo+PiArwqDCoMKg IHN0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluICpzbW11X2RvbWFpbiA9IGRvbV9pb21tdShkKS0+ YXJjaC5wcml2Owo+PiArwqDCoMKgIHN0cnVjdCBpb21tdV9kb21haW4gKmNmZzsKPj4gKwo+PiAr wqDCoMKgIHNwaW5fbG9jaygmc21tdV9kb21haW4tPmxvY2spOwo+PiArwqDCoMKgIGxpc3RfZm9y X2VhY2hfZW50cnkoY2ZnLCAmc21tdV9kb21haW4tPmlvbW11X2RvbWFpbnMsIGxpc3QpIHsKPj4g K8KgwqDCoMKgwqDCoMKgIC8qCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogT25seSBpbnZhbGlkYXRl IHRoZSBjb250ZXh0IHdoZW4gU01NVSBpcyBwcmVzZW50Lgo+PiArwqDCoMKgwqDCoMKgwqDCoCAq IFRoaXMgaXMgYmVjYXVzZSB0aGUgY29udGV4dCBpbml0aWFsaXphdGlvbiBpcyBkZWxheWVkCj4+ ICvCoMKgwqDCoMKgwqDCoMKgICogdW50aWwgYSBtYXN0ZXIgaGFzIGJlZW4gYWRkZWQuCj4+ICvC oMKgwqDCoMKgwqDCoMKgICovCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAodW5saWtlbHkoIUFDQ0VT U19PTkNFKGNmZy0+cHJpdi0+c21tdSkpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250 aW51ZTsKPj4gK8KgwqDCoMKgwqDCoMKgIGFybV9zbW11X3RsYl9pbnZfY29udGV4dChjZmctPnBy aXYpOwo+PiArwqDCoMKgIH0KPj4gK8KgwqDCoCBzcGluX3VubG9jaygmc21tdV9kb21haW4tPmxv Y2spOwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IF9fbXVz dF9jaGVjayBhcm1fc21tdV9pb3RsYl9mbHVzaChzdHJ1Y3QgZG9tYWluICpkLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcg Z2ZuLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHVuc2lnbmVkIGludCBwYWdlX2NvdW50KQo+PiArewo+PiArwqDCoMKgIHJldHVybiBhcm1fc21t dV9pb3RsYl9mbHVzaF9hbGwoZCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgaW9tbXVf ZG9tYWluICphcm1fc21tdV9nZXRfZG9tYWluKHN0cnVjdCBkb21haW4gKmQsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRl dikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW47Cj4+ICvCoMKg wqAgc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW47Cj4+ICvCoMKgwqAgc3Ry dWN0IGFybV9zbW11X2RldmljZSAqc21tdTsKPj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZG9t YWluICpzbW11X2RvbWFpbjsKPj4gKwo+PiArwqDCoMKgIHhlbl9kb21haW4gPSBkb21faW9tbXUo ZCktPmFyY2gucHJpdjsKPj4gKwo+PiArwqDCoMKgIHNtbXUgPSBhcm1fc21tdV9nZXRfYnlfZndu b2RlKGRldi0+aW9tbXVfZndzcGVjLT5pb21tdV9md25vZGUpOwo+PiArwqDCoMKgIGlmICghc21t dSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+PiArCj4+ICvCoMKgwqAgLyoKPj4g K8KgwqDCoMKgICogTG9vcCB0aHJvdWdoIHRoZSAmeGVuX2RvbWFpbi0+Y29udGV4dHMgdG8gbG9j YXRlIGEgY29udGV4dAo+PiArwqDCoMKgwqAgKiBhc3NpZ25lZCB0byB0aGlzIFNNTVUKPj4gK8Kg wqDCoMKgICovCj4+ICvCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ4ZW5fZG9t YWluLT5pb21tdV9kb21haW5zLCBsaXN0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzbW11X2RvbWFp biA9IHRvX3NtbXVfZG9tYWluKGRvbWFpbik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoc21tdV9k b21haW4tPnNtbXUgPT0gc21tdSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGRv bWFpbjsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gTlVMTDsKPj4gK30KPj4g Kwo+PiArc3RhdGljIHZvaWQgYXJtX3NtbXVfZGVzdHJveV9pb21tdV9kb21haW4oc3RydWN0IGlv bW11X2RvbWFpbiAqZG9tYWluKQo+PiArewo+PiArwqDCoMKgIGxpc3RfZGVsKCZkb21haW4tPmxp c3QpOwo+PiArwqDCoMKgIGFybV9zbW11X2RvbWFpbl9mcmVlKGRvbWFpbik7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyBpbnQgYXJtX3NtbXVfYXNzaWduX2RldihzdHJ1Y3QgZG9tYWluICpkLCB1OCBk ZXZmbiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2 aWNlICpkZXYsIHUzMiBmbGFnKQo+PiArewo+PiArwqDCoMKgIGludCByZXQgPSAwOwo+PiArwqDC oMKgIHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbjsKPj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3Nt bXVfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbjsKPj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZG9t YWluICphcm1fc21tdTsKPj4gKwo+PiArwqDCoMKgIHhlbl9kb21haW4gPSBkb21faW9tbXUoZCkt PmFyY2gucHJpdjsKPj4gKwo+PiArwqDCoMKgIGlmICghZGV2LT5hcmNoZGF0YS5pb21tdSkgewo+ PiArwqDCoMKgwqDCoMKgwqAgZGV2LT5hcmNoZGF0YS5pb21tdSA9IHh6YWxsb2Moc3RydWN0IGFy bV9zbW11X3hlbl9kZXZpY2UpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFkZXYtPmFyY2hkYXRh LmlvbW11KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4gK8Kg wqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBhcm1fc21tdV9hZGRfZGV2aWNlKGRldik7Cj4+ ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICsKPj4g K8KgwqDCoCBzcGluX2xvY2soJnhlbl9kb21haW4tPmxvY2spOwo+PiArCj4+ICvCoMKgwqAgLyoK Pj4gK8KgwqDCoMKgICogQ2hlY2sgdG8gc2VlIGlmIGFuIGlvbW11X2RvbWFpbiBhbHJlYWR5IGV4 aXN0cyBmb3IgdGhpcyB4ZW4gZG9tYWluCj4+ICvCoMKgwqDCoCAqIHVuZGVyIHRoZSBzYW1lIFNN TVUKPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgZG9tYWluID0gYXJtX3NtbXVfZ2V0X2RvbWFp bihkLCBkZXYpOwo+PiArwqDCoMKgIGlmICghZG9tYWluKSB7Cj4+ICsKPj4gK8KgwqDCoMKgwqDC oMKgIGRvbWFpbiA9IGFybV9zbW11X2RvbWFpbl9hbGxvYyhJT01NVV9ET01BSU5fRE1BKTsKPj4g K8KgwqDCoMKgwqDCoMKgIGlmICghZG9tYWluKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldCA9IC1FTk9NRU07Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0Owo+PiAr wqDCoMKgwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBhcm1fc21tdSA9IHRvX3Nt bXVfZG9tYWluKGRvbWFpbik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBhcm1fc21tdS0+czJfY2ZnLmRv bWFpbiA9IGQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIENoYWluIHRoZSBuZXcgY29udGV4 dCB0byB0aGUgZG9tYWluICovCj4+ICvCoMKgwqDCoMKgwqDCoCBsaXN0X2FkZCgmZG9tYWluLT5s aXN0LCAmeGVuX2RvbWFpbi0+aW9tbXVfZG9tYWlucyk7Cj4+ICsKPj4gK8KgwqDCoCB9Cj4+ICsK Pj4gK8KgwqDCoCByZXQgPSBhcm1fc21tdV9hdHRhY2hfZGV2KGRvbWFpbiwgZGV2KTsKPj4gK8Kg wqDCoCBpZiAocmV0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZG9tYWluLT5yZWYuY291bnRl ciA9PSAwKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhcm1fc21tdV9kZXN0cm95X2lvbW11 X2RvbWFpbihkb21haW4pOwo+PiArwqDCoMKgIH0gZWxzZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBh dG9taWNfaW5jKCZkb21haW4tPnJlZik7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICtvdXQ6Cj4+ICvC oMKgwqAgc3Bpbl91bmxvY2soJnhlbl9kb21haW4tPmxvY2spOwo+PiArwqDCoMKgIHJldHVybiBy ZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYXJtX3NtbXVfZGVhc3NpZ25fZGV2KHN0cnVj dCBkb21haW4gKmQsIHN0cnVjdCBkZXZpY2UgKmRldikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3Qg aW9tbXVfZG9tYWluICpkb21haW4gPSBhcm1fc21tdV9nZXRfZG9tYWluKGQsIGRldik7Cj4+ICvC oMKgwqAgc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW47Cj4+ICvCoMKgwqAg c3RydWN0IGFybV9zbW11X2RvbWFpbiAqYXJtX3NtbXUgPSB0b19zbW11X2RvbWFpbihkb21haW4p Owo+PiArCj4+ICvCoMKgwqAgeGVuX2RvbWFpbiA9IGRvbV9pb21tdShkKS0+YXJjaC5wcml2Owo+ PiArCj4+ICvCoMKgwqAgaWYgKCFhcm1fc21tdSB8fCBhcm1fc21tdS0+czJfY2ZnLmRvbWFpbiAh PSBkKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgIiBub3QgYXR0YWNoZWQgdG8g ZG9tYWluICVkXG4iLCBkLT5kb21haW5faWQpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1F U1JDSDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBzcGluX2xvY2soJnhlbl9kb21haW4t PmxvY2spOwo+PiArCj4+ICvCoMKgwqAgYXJtX3NtbXVfZGV0YWNoX2RldihkZXYpOwo+PiArwqDC oMKgIGF0b21pY19kZWMoJmRvbWFpbi0+cmVmKTsKPj4gKwo+PiArwqDCoMKgIGlmIChkb21haW4t PnJlZi5jb3VudGVyID09IDApCj4+ICvCoMKgwqDCoMKgwqDCoCBhcm1fc21tdV9kZXN0cm95X2lv bW11X2RvbWFpbihkb21haW4pOwo+PiArCj4+ICvCoMKgwqAgc3Bpbl91bmxvY2soJnhlbl9kb21h aW4tPmxvY2spOwo+PiArCj4+ICsKPj4gKwo+Cj4gQ2FuIHlvdSBkcm9wIDIgb2YgbmV3bGluZT8K Pgo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGFybV9zbW11 X3JlYXNzaWduX2RldihzdHJ1Y3QgZG9tYWluICpzLCBzdHJ1Y3QgZG9tYWluICp0LAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTggZGV2Zm4swqAgc3RydWN0IGRldmljZSAq ZGV2KQo+PiArewo+PiArwqDCoMKgIGludCByZXQgPSAwOwo+PiArCj4+ICvCoMKgwqAgLyogRG9u J3QgYWxsb3cgcmVtYXBwaW5nIG9uIG90aGVyIGRvbWFpbiB0aGFuIGh3ZG9tICovCj4+ICvCoMKg wqAgaWYgKHQgJiYgdCAhPSBoYXJkd2FyZV9kb21haW4pCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVQRVJNOwo+PiArCj4+ICvCoMKgwqAgaWYgKHQgPT0gcykKPj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiAwOwo+PiArCj4+ICvCoMKgwqAgcmV0ID0gYXJtX3NtbXVfZGVhc3NpZ25fZGV2KHMs IGRldik7Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7 Cj4+ICsKPj4gK8KgwqDCoCBpZiAodCkgewo+PiArwqDCoMKgwqDCoMKgwqAgLyogTm8gZmxhZ3Mg YXJlIGRlZmluZWQgZm9yIEFSTS4gKi8KPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IGFybV9zbW11 X2Fzc2lnbl9kZXYodCwgZGV2Zm4sIGRldiwgMCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0 KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgIH0KPj4g Kwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGFybV9zbW11 X2lvbW11X2RvbWFpbl9pbml0KHN0cnVjdCBkb21haW4gKmQpCj4+ICt7Cj4+ICvCoMKgwqAgc3Ry dWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW47Cj4+ICsKPj4gK8KgwqDCoCB4ZW5f ZG9tYWluID0geHphbGxvYyhzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbik7Cj4+ICvCoMKgwqAg aWYgKCF4ZW5fZG9tYWluKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+ICsK Pj4gK8KgwqDCoCBzcGluX2xvY2tfaW5pdCgmeGVuX2RvbWFpbi0+bG9jayk7Cj4+ICvCoMKgwqAg SU5JVF9MSVNUX0hFQUQoJnhlbl9kb21haW4tPmlvbW11X2RvbWFpbnMpOwo+PiArCj4+ICvCoMKg wqAgZG9tX2lvbW11KGQpLT5hcmNoLnByaXYgPSB4ZW5fZG9tYWluOwo+PiArCj4+ICvCoMKgwqAg cmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9faHdkb21faW5pdCBhcm1fc21t dV9pb21tdV9od2RvbV9pbml0KHN0cnVjdCBkb21haW4gKmQpCj4+ICt7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyB2b2lkIGFybV9zbW11X2lvbW11X2RvbWFpbl90ZWFyZG93bihzdHJ1Y3QgZG9tYWlu ICpkKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluICp4ZW5fZG9t YWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7Cj4+ICsKPj4gK8KgwqDCoCBBU1NFUlQobGlz dF9lbXB0eSgmeGVuX2RvbWFpbi0+aW9tbXVfZG9tYWlucykpOwo+PiArwqDCoMKgIHhmcmVlKHhl bl9kb21haW4pOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBhcm1fc21t dV9tYXBfcGFnZShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGdmbiwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBtZm4sIHVuc2lnbmVkIGludCBmbGFncykK Pj4gK3sKPj4gK8KgwqDCoCBwMm1fdHlwZV90IHQ7Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDC oMKgwqAgKiBHcmFudCBtYXBwaW5ncyBjYW4gYmUgdXNlZCBmb3IgRE1BIHJlcXVlc3RzLiBUaGUg ZGV2X2J1c19hZGRyCj4+ICvCoMKgwqDCoCAqIHJldHVybmVkIGJ5IHRoZSBoeXBlcmNhbGwgaXMg dGhlIE1GTiAobm90IHRoZSBJUEEpLiBGb3IgZGV2aWNlCj4+ICvCoMKgwqDCoCAqIHByb3RlY3Rl ZCBieSBhbiBJT01NVSwgWGVuIG5lZWRzIHRvIGFkZCBhIDE6MSBtYXBwaW5nIGluIHRoZSBkb21h aW4KPj4gK8KgwqDCoMKgICogcDJtIHRvIGFsbG93IERNQSByZXF1ZXN0IHRvIHdvcmsuCj4+ICvC oMKgwqDCoCAqIFRoaXMgaXMgb25seSB2YWxpZCB3aGVuIHRoZSBkb21haW4gaXMgZGlyZWN0ZWQg bWFwcGVkLiBIZW5jZSB0aGlzCj4+ICvCoMKgwqDCoCAqIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJl IHVzZWQgYnkgZ250dGFiIGNvZGUgd2l0aCBnZm4gPT0gbWZuLgo+PiArwqDCoMKgwqAgKi8KPj4g K8KgwqDCoCBCVUdfT04oIWlzX2RvbWFpbl9kaXJlY3RfbWFwcGVkKGQpKTsKPj4gK8KgwqDCoCBC VUdfT04obWZuICE9IGdmbik7Cj4+ICsKPj4gK8KgwqDCoCAvKiBXZSBvbmx5IHN1cHBvcnQgcmVh ZGFibGUgYW5kIHdyaXRhYmxlIGZsYWdzICovCj4+ICvCoMKgwqAgaWYgKCEoZmxhZ3MgJiAoSU9N TVVGX3JlYWRhYmxlIHwgSU9NTVVGX3dyaXRhYmxlKSkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVJTlZBTDsKPj4gKwo+PiArwqDCoMKgIHQgPSAoZmxhZ3MgJiBJT01NVUZfd3JpdGFibGUp ID8gcDJtX2lvbW11X21hcF9ydyA6IHAybV9pb21tdV9tYXBfcm87Cj4+ICsKPj4gK8KgwqDCoCAv Kgo+PiArwqDCoMKgwqAgKiBUaGUgZnVuY3Rpb24gZ3Vlc3RfcGh5c21hcF9hZGRfZW50cnkgcmVw bGFjZXMgdGhlIGN1cnJlbnQgbWFwcGluZwo+PiArwqDCoMKgwqAgKiBpZiB0aGVyZSBpcyBhbHJl YWR5IG9uZS4uLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCByZXR1cm4gZ3Vlc3RfcGh5c21h cF9hZGRfZW50cnkoZCwgX2dmbihnZm4pLCBfbWZuKG1mbiksIDAsIHQpOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBhcm1fc21tdV91bm1hcF9wYWdlKHN0cnVjdCBkb21h aW4gKmQsIHVuc2lnbmVkIGxvbmcgZ2ZuKQo+PiArewo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDC oCAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBnbnR0YWIgY29kZSB3aGVu IHRoZSBkb21haW4KPj4gK8KgwqDCoMKgICogaXMgZGlyZWN0IG1hcHBlZAo+PiArwqDCoMKgwqAg Ki8KPj4gK8KgwqDCoCBpZiAoIWlzX2RvbWFpbl9kaXJlY3RfbWFwcGVkKGQpKQo+PiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gZ3Vlc3RfcGh5 c21hcF9yZW1vdmVfcGFnZShkLCBfZ2ZuKGdmbiksIF9tZm4oZ2ZuKSwgMCk7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfb3BzIGFybV9zbW11X2lvbW11X29wcyA9IHsK Pj4gK8KgwqDCoCAuaW5pdCA9IGFybV9zbW11X2lvbW11X2RvbWFpbl9pbml0LAo+PiArwqDCoMKg IC5od2RvbV9pbml0ID0gYXJtX3NtbXVfaW9tbXVfaHdkb21faW5pdCwKPj4gK8KgwqDCoCAudGVh cmRvd24gPSBhcm1fc21tdV9pb21tdV9kb21haW5fdGVhcmRvd24sCj4+ICvCoMKgwqAgLmlvdGxi X2ZsdXNoID0gYXJtX3NtbXVfaW90bGJfZmx1c2gsCj4+ICvCoMKgwqAgLmlvdGxiX2ZsdXNoX2Fs bCA9IGFybV9zbW11X2lvdGxiX2ZsdXNoX2FsbCwKPj4gK8KgwqDCoCAuYXNzaWduX2RldmljZSA9 IGFybV9zbW11X2Fzc2lnbl9kZXYsCj4+ICvCoMKgwqAgLnJlYXNzaWduX2RldmljZSA9IGFybV9z bW11X3JlYXNzaWduX2RldiwKPj4gK8KgwqDCoCAubWFwX3BhZ2UgPSBhcm1fc21tdV9tYXBfcGFn ZSwKPj4gK8KgwqDCoCAudW5tYXBfcGFnZSA9IGFybV9zbW11X3VubWFwX3BhZ2UsCj4+ICt9Owo+ PiArCj4+ICtzdGF0aWMKPj4gK3N0cnVjdCBhcm1fc21tdV9kZXZpY2UgKmFybV9zbW11X2dldF9i eV9md25vZGUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSkKPj4gK3sKPj4gK8KgwqDCoCBz dHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gTlVMTDsKPj4gKwo+PiArwqDCoMKgIHNwaW5f bG9jaygmYXJtX3NtbXVfZGV2aWNlc19sb2NrKTsKPj4gK8KgwqDCoCBsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHNtbXUsICZhcm1fc21tdV9kZXZpY2VzLCBkZXZpY2VzKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oCBpZiAoc21tdS0+ZGV2LT5md25vZGUgPT0gZndub2RlKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBicmVhazsKPj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAgc3Bpbl91bmxvY2soJmFybV9zbW11 X2RldmljZXNfbG9jayk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gc21tdTsKPj4gK30KPj4gKwo+ PiArc3RhdGljIF9faW5pdCBpbnQgYXJtX3NtbXVfZHRfaW5pdChzdHJ1Y3QgZHRfZGV2aWNlX25v ZGUgKmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCB2 b2lkICpkYXRhKQo+PiArewo+PiArwqDCoMKgIGludCByYzsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ ICvCoMKgwqDCoCAqIEV2ZW4gaWYgdGhlIGRldmljZSBjYW4ndCBiZSBpbml0aWFsaXplZCwgd2Ug ZG9uJ3Qgd2FudCB0bwo+PiArwqDCoMKgwqAgKiBnaXZlIHRoZSBTTU1VIGRldmljZSB0byBkb20w Lgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBkdF9kZXZpY2Vfc2V0X3VzZWRfYnkoZGV2LCBE T01JRF9YRU4pOwo+PiArCj4+ICvCoMKgwqAgcmMgPSBhcm1fc21tdV9kZXZpY2VfcHJvYmUoZHRf dG9fZGV2KGRldikpOwo+PiArwqDCoMKgIGlmIChyYykKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biByYzsKPj4gKwo+PiArwqDCoMKgIGlvbW11X3NldF9vcHMoJmFybV9zbW11X2lvbW11X29wcyk7 Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArRFRfREVWSUNFX1NUQVJU KHNtbXV2MywgIkFSTSBTTU1VIFYzIiwgREVWSUNFX0lPTU1VKQo+PiArwqDCoMKgIC5kdF9tYXRj aCA9IGFybV9zbW11X29mX21hdGNoLAo+PiArwqDCoMKgIC5pbml0ID0gYXJtX3NtbXVfZHRfaW5p dCwKPj4gK0RUX0RFVklDRV9FTkQKPj4gKwo+PiArI2lmZGVmIENPTkZJR19BQ1BJCj4+ICsvKiBT ZXQgdXAgdGhlIElPTU1VICovCj4+ICtzdGF0aWMgaW50IF9faW5pdCBhcm1fc21tdV9hY3BpX2lu aXQoY29uc3Qgdm9pZCAqZGF0YSkKPj4gK3sKPj4gK8KgwqDCoCBpbnQgcmM7Cj4+ICsKPj4gK8Kg wqDCoCByYyA9IGFybV9zbW11X2RldmljZV9wcm9iZSgoc3RydWN0IGRldmljZSAqKWRhdGEpOwo+ PiArwqDCoMKgIGlmIChyYykKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByYzsKPj4gKwo+PiAr wqDCoMKgIGlvbW11X3NldF9vcHMoJmFybV9zbW11X2lvbW11X29wcyk7Cj4+ICvCoMKgwqAgcmV0 dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK0FDUElfREVWSUNFX1NUQVJUKGFzbW11djMsICJBUk0gU01N VSBWMyIsIERFVklDRV9JT01NVSkKPj4gK8KgwqDCoCAuY2xhc3NfdHlwZSA9IEFDUElfSU9SVF9O T0RFX1NNTVVfVjMsCj4+ICvCoMKgwqAgLmluaXQgPSBhcm1fc21tdV9hY3BpX2luaXQsCj4+ICtB Q1BJX0RFVklDRV9FTkQKPj4gKwo+PiArI2VuZGlmCj4+Cj4KPiBDaGVlcnMsCj4KCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGlu ZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs