From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hartmut Knaack Date: Sat, 23 Mar 2013 23:23:02 +0000 Subject: Re: [lm-sensors] [PATCH 2/3] hwmon: (adt7410) Add support for the adt7310/adt7320 Message-Id: <514E3956.9030609@gmx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: lm-sensors@vger.kernel.org TGFycy1QZXRlciBDbGF1c2VuIHNjaHJpZWI6Cj4gVGhlIGFkdDczMTAvYWR0NzMyMCBpcyB0aGUg U1BJIHZlcnNpb24gb2YgdGhlIGFkdDc0MTAvYWR0NzQyMC4gVGhlIHJlZ2lzdGVyIG1hcAo+IGxh eW91dCBpcyBhIGJpdCBkaWZmZXJlbnQsIGkuZS4gdGhlIHJlZ2lzdGVyIGFkZHJlc3NlcyBkaWZm ZXIgYmV0d2VlbiB0aGUgdHdvCj4gdmFyaWFudHMsIGJ1dCB0aGUgYml0IGxheW91dHMgb2YgdGhl IGluZGl2aWR1YWwgcmVnaXN0ZXJzIGFyZSBpZGVudGljYWwuIFNvIGJvdGgKPiBjaGlwIHZhcmlh bnRzIGNhbiBlYXNpbHkgYmUgc3VwcG9ydGVkIGJ5IHRoZSBzYW1lIGRyaXZlci4gVGhlIGlzc3Vl IG9mIG5vbgo+IG1hdGNoaW5nIHJlZ2lzdGVyIGFkZHJlc3MgbGF5b3V0cyBpcyBzb2x2ZWQgYnkg YSBzaW1wbGUgbG9vay11cCB0YWJsZSB3aGljaAo+IHRyYW5zbGF0ZXMgdGhlIEkyQyBhZGRyZXNz ZXMgdG8gdGhlIFNQSSBhZGRyZXNzZXMuCj4KPiBUaGUgcGF0Y2ggbW92ZXMgdGhlIGJ1bGsgb2Yg dGhlIGFkdDc0MTAgZHJpdmVyIHRvIGEgY29tbW9uIG1vZHVsZSB0aGF0IHdpbGwgYmUKPiBzaGFy ZWQgYnkgdGhlIGFkdDc0MTAgYW5kIGFkdDczMTAgZHJpdmVycy4gVGhpcyBjb21tb24gbW9kdWxl IGltcGxlbWVudHMgdGhlCj4gZHJpdmVyIGxvZ2ljIGFuZCB1c2VzIGEgc2V0IG9mIHZpcnR1YWwg ZnVuY3Rpb25zIHRvIHBlcmZvcm0gSU8gYWNjZXNzLiBUaGUKPiBhZHQ3NDEwIGFuZCBhZHQ3MzEw IGRyaXZlciBtb2R1bGVzIHByb3ZpZGUgcHJvcGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBJ Two+IGFjY2Vzc29yIGZ1bmN0aW9ucyBmb3IgSTJDIHJlc3BlY3RpdmUgU1BJLgo+Cj4gU2lnbmVk LW9mZi1ieTogTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+ClJldmlld2VkLWJ5 OiBIYXJ0bXV0IEtuYWFjayA8a25hYWNrLmhAZ214LmRlPgo+Cj4gLS0tCj4gQ2hhbmdlcyBzaW5j ZSB2MjoKPiAJKiBQcmVmaXggaWRlbnRpZmllcnMgYW5kIGRlZmluZXMgaW4gdGhlIGNvbW1vbiBj b2RlIHdpdGggYWR0N3gxMCBpbnN0ZWFkIG9mCj4gCSAgYWR0NzQxMAo+IAkqIE1pbm9yIGNvZGUg c3R5bGUgY2xlYW51cHMKPiAJKiBUeXBvIGZpeGVzIGZvciB0aGUgZGVzY3JpcHRpb24gaW4gRG9j dW1lbnRhdGlvbi8KPiBDaGFuZ2VzIHNpbmNlIHYxOgo+IAkqIFVwZGF0ZSB0aGUgZHJpdmVyIGRv Y3VtZW50YXRpb24gdG8gaW5jbHVkZSBBRFQ3MzEwL0FEVDczMjAvQURUNzQyMAo+IAkqIFBhc3Mg dGhlIHJlc3VsdCBvZiB0aGUgcmVhZCBtZXRob2RzIHZpYSB0aGUgcmV0dXJuIHZhbHVlIGluc3Rl YWQgb2YgYQo+IAkgIHBvaW50ZXIgYXJndW1lbnQKPiAJKiBTaW1wbGlmeSBzcGkgcmVhZCBtZXRo b2RzIGJ5IHVzaW5nIHNwaV93OHI4IGFuZCBzcGlfdzhyMTYKPiAJKiBVcGRhdGUgbW9kdWxlIGRl c2NyaXB0aW9uIG9mIHRoZSBzaGFyZWQgbW9kdWxlCj4gCSogRml4IHNvbWUgdHlwb3MKPgo+IFNp Z25lZC1vZmYtYnk6IExhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPgo+IC0tLQo+ ICBEb2N1bWVudGF0aW9uL2h3bW9uL2FkdDc0MTAgfCAgNDcgKysrLS0KPiAgZHJpdmVycy9od21v bi9LY29uZmlnICAgICAgIHwgIDIwICsrCj4gIGRyaXZlcnMvaHdtb24vTWFrZWZpbGUgICAgICB8 ICAgMiArCj4gIGRyaXZlcnMvaHdtb24vYWR0NzMxMC5jICAgICB8IDEyMyArKysrKysrKysrKysK PiAgZHJpdmVycy9od21vbi9hZHQ3NDEwLmMgICAgIHwgNDY3ICsrKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgZHJpdmVycy9od21vbi9hZHQ3eDEwLmMgICAgIHwg NDc2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZl cnMvaHdtb24vYWR0N3gxMC5oICAgICB8ICAzNyArKysrCj4gIDcgZmlsZXMgY2hhbmdlZCwgNzE5 IGluc2VydGlvbnMoKyksIDQ1MyBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvaHdtb24vYWR0NzMxMC5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2h3bW9u L2FkdDd4MTAuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9od21vbi9hZHQ3eDEwLmgK Pgo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkdDc0MTAgYi9Eb2N1bWVudGF0 aW9uL2h3bW9uL2FkdDc0MTAKPiBpbmRleCA1ODE1MGM0Li45ODE3OTQxIDEwMDY0NAo+IC0tLSBh L0RvY3VtZW50YXRpb24vaHdtb24vYWR0NzQxMAo+ICsrKyBiL0RvY3VtZW50YXRpb24vaHdtb24v YWR0NzQxMAo+IEBAIC0xMiwyOSArMTIsNDIgQEAgU3VwcG9ydGVkIGNoaXBzOgo+ICAgICAgQWRk cmVzc2VzIHNjYW5uZWQ6IE5vbmUKPiAgICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxl IGF0IHRoZSBBbmFsb2cgRGV2aWNlcyB3ZWJzaXRlCj4gICAgICAgICAgICAgICAgIGh0dHA6Ly93 d3cuYW5hbG9nLmNvbS9zdGF0aWMvaW1wb3J0ZWQtZmlsZXMvZGF0YV9zaGVldHMvQURUNzQyMC5w ZGYKPiArICAqIEFuYWxvZyBEZXZpY2VzIEFEVDczMTAKPiArICAgIFByZWZpeDogJ2FkdDczMTAn Cj4gKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogTm9uZQo+ICsgICAgRGF0YXNoZWV0OiBQdWJsaWNs eSBhdmFpbGFibGUgYXQgdGhlIEFuYWxvZyBEZXZpY2VzIHdlYnNpdGUKPiArICAgICAgICAgICAg ICAgaHR0cDovL3d3dy5hbmFsb2cuY29tL3N0YXRpYy9pbXBvcnRlZC1maWxlcy9kYXRhX3NoZWV0 cy9BRFQ3MzEwLnBkZgo+ICsgICogQW5hbG9nIERldmljZXMgQURUNzMyMAo+ICsgICAgUHJlZml4 OiAnYWR0NzMyMCcKPiArICAgIEFkZHJlc3NlcyBzY2FubmVkOiBOb25lCj4gKyAgICBEYXRhc2hl ZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgQW5hbG9nIERldmljZXMgd2Vic2l0ZQo+ICsg ICAgICAgICAgICAgICBodHRwOi8vd3d3LmFuYWxvZy5jb20vc3RhdGljL2ltcG9ydGVkLWZpbGVz L2RhdGFfc2hlZXRzL0FEVDczMjAucGRmCj4gIAo+ICBBdXRob3I6IEhhcnRtdXQgS25hYWNrIDxr bmFhY2suaEBnbXguZGU+Cj4gIAo+ICBEZXNjcmlwdGlvbgo+ICAtLS0tLS0tLS0tLQo+ICAKPiAt VGhlIEFEVDc0MTAgaXMgYSB0ZW1wZXJhdHVyZSBzZW5zb3Igd2l0aCByYXRlZCB0ZW1wZXJhdHVy ZSByYW5nZSBvZiAtNTXCsEMgdG8KPiAtKzE1MMKwQy4gSXQgaGFzIGEgaGlnaCBhY2N1cmFjeSBv ZiArLy0wLjXCsEMgYW5kIGNhbiBiZSBvcGVyYXRlZCBhdCBhIHJlc29sdXRpb24KPiAtb2YgMTMg Yml0cyAoMC4wNjI1wrBDKSBvciAxNiBiaXRzICgwLjAwNzjCsEMpLiBUaGUgc2Vuc29yIHByb3Zp ZGVzIGFuIElOVCBwaW4gdG8KPiAtaW5kaWNhdGUgdGhhdCBhIG1pbmltdW0gb3IgbWF4aW11bSB0 ZW1wZXJhdHVyZSBzZXQgcG9pbnQgaGFzIGJlZW4gZXhjZWVkZWQsIGFzCj4gLXdlbGwgYXMgYSBj cml0aWNhbCB0ZW1wZXJhdHVyZSAoQ1QpIHBpbiB0byBpbmRpY2F0ZSB0aGF0IHRoZSBjcml0aWNh bAo+IC10ZW1wZXJhdHVyZSBzZXQgcG9pbnQgaGFzIGJlZW4gZXhjZWVkZWQuIEJvdGggcGlucyBj YW4gYmUgc2V0IHVwIHdpdGggYSBjb21tb24KPiAtaHlzdGVyZXNpcyBvZiAwwrBDIC0gMTXCsEMg YW5kIGEgZmF1bHQgcXVldWUsIHJhbmdpbmcgZnJvbSAxIHRvIDQgZXZlbnRzLiBCb3RoCj4gLXBp bnMgY2FuIGluZGl2aWR1YWxseSBzZXQgdG8gYmUgYWN0aXZlLWxvdyBvciBhY3RpdmUtaGlnaCwg d2hpbGUgdGhlIHdob2xlCj4gLWRldmljZSBjYW4gZWl0aGVyIHJ1biBpbiBjb21wYXJhdG9yIG1v ZGUgb3IgaW50ZXJydXB0IG1vZGUuIFRoZSBBRFQ3NDEwCj4gLXN1cHBvcnRzIGNvbnRpbm91cyB0 ZW1wZXJhdHVyZSBzYW1wbGluZywgYXMgd2VsbCBhcyBzYW1wbGluZyBvbmUgdGVtcGVyYXR1cmUK PiAtdmFsdWUgcGVyIHNlY29uZCBvciBldmVuIGp1c3RnZXQgb25lIHNhbXBsZSBvbiBkZW1hbmQg Zm9yIHBvd2VyIHNhdmluZy4KPiAtQmVzaWRlcywgaXQgY2FuIGNvbXBsZXRlbHkgcG93ZXIgZG93 biBpdHMgQURDLCBpZiBwb3dlciBtYW5hZ2VtZW50IGlzCj4gLXJlcXVpcmVkLgo+IC0KPiAtVGhl IEFEVDc0MjAgaXMgcmVnaXN0ZXIgY29tcGF0aWJsZSwgdGhlIG9ubHkgZGlmZmVyZW5jZXMgYmVp bmcgdGhlIHBhY2thZ2UsCj4gLWEgc2xpZ2h0bHkgbmFycm93ZXIgb3BlcmF0aW5nIHRlbXBlcmF0 dXJlIHJhbmdlICgtNDDCsEMgdG8gKzE1MMKwQyksIGFuZCBhCj4gLWJldHRlciBhY2N1cmFjeSAo MC4yNcKwQyBpbnN0ZWFkIG9mIDAuNTDCsEMuKQo+ICtUaGUgQURUNzMxMC9BRFQ3NDEwIGlzIGEg dGVtcGVyYXR1cmUgc2Vuc29yIHdpdGggcmF0ZWQgdGVtcGVyYXR1cmUgcmFuZ2Ugb2YKPiArLTU1 wrBDIHRvICsxNTDCsEMuIEl0IGhhcyBhIGhpZ2ggYWNjdXJhY3kgb2YgKy8tMC41wrBDIGFuZCBj YW4gYmUgb3BlcmF0ZWQgYXQgYQo+ICtyZXNvbHV0aW9uIG9mIDEzIGJpdHMgKDAuMDYyNcKwQykg b3IgMTYgYml0cyAoMC4wMDc4wrBDKS4gVGhlIHNlbnNvciBwcm92aWRlcyBhbgo+ICtJTlQgcGlu IHRvIGluZGljYXRlIHRoYXQgYSBtaW5pbXVtIG9yIG1heGltdW0gdGVtcGVyYXR1cmUgc2V0IHBv aW50IGhhcyBiZWVuCj4gK2V4Y2VlZGVkLCBhcyB3ZWxsIGFzIGEgY3JpdGljYWwgdGVtcGVyYXR1 cmUgKENUKSBwaW4gdG8gaW5kaWNhdGUgdGhhdCB0aGUKPiArY3JpdGljYWwgdGVtcGVyYXR1cmUg c2V0IHBvaW50IGhhcyBiZWVuIGV4Y2VlZGVkLiBCb3RoIHBpbnMgY2FuIGJlIHNldCB1cCB3aXRo IGEKPiArY29tbW9uIGh5c3RlcmVzaXMgb2YgMMKwQyAtIDE1wrBDIGFuZCBhIGZhdWx0IHF1ZXVl LCByYW5naW5nIGZyb20gMSB0byA0IGV2ZW50cy4KPiArQm90aCBwaW5zIGNhbiBpbmRpdmlkdWFs bHkgc2V0IHRvIGJlIGFjdGl2ZS1sb3cgb3IgYWN0aXZlLWhpZ2gsIHdoaWxlIHRoZSB3aG9sZQo+ ICtkZXZpY2UgY2FuIGVpdGhlciBydW4gaW4gY29tcGFyYXRvciBtb2RlIG9yIGludGVycnVwdCBt b2RlLiBUaGUgQURUNzQxMCBzdXBwb3J0cwo+ICtjb250aW51b3VzIHRlbXBlcmF0dXJlIHNhbXBs aW5nLCBhcyB3ZWxsIGFzIHNhbXBsaW5nIG9uZSB0ZW1wZXJhdHVyZSB2YWx1ZSBwZXIKPiArc2Vj b25kIG9yIGV2ZW4ganVzdCBnZXQgb25lIHNhbXBsZSBvbiBkZW1hbmQgZm9yIHBvd2VyIHNhdmlu Zy4gQmVzaWRlcywgaXQgY2FuCj4gK2NvbXBsZXRlbHkgcG93ZXIgZG93biBpdHMgQURDLCBpZiBw b3dlciBtYW5hZ2VtZW50IGlzIHJlcXVpcmVkLgo+ICsKPiArVGhlIEFEVDczMjAvQURUNzQyMCBp cyByZWdpc3RlciBjb21wYXRpYmxlLCB0aGUgb25seSBkaWZmZXJlbmNlcyBiZWluZyB0aGUKPiAr cGFja2FnZSwgYSBzbGlnaHRseSBuYXJyb3dlciBvcGVyYXRpbmcgdGVtcGVyYXR1cmUgcmFuZ2Ug KC00MMKwQyB0byArMTUwwrBDKSwgYW5kCj4gK2EgYmV0dGVyIGFjY3VyYWN5ICgwLjI1wrBDIGlu c3RlYWQgb2YgMC41MMKwQy4pCj4gKwo+ICtUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBBRFQ3 MzEwL0FEVDczMjAgYW5kIEFEVDc0MTAvQURUNzQyMCBpcyB0aGUgY29udHJvbAo+ICtpbnRlcmZh Y2UsIHRoZSBBRFQ3MzEwIGFuZCBBRFQ3MzIwIHVzZSBTUEkgd2hpbGUgdGhlIEFEVDc0MTAgYW5k IEFEVDc0MjAgdXNlCj4gK0kyQy4KPiAgCj4gIENvbmZpZ3VyYXRpb24gTm90ZXMKPiAgLS0tLS0t LS0tLS0tLS0tLS0tLQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2 ZXJzL2h3bW9uL0tjb25maWcKPiBpbmRleCA4OWFjMWNiLi5hYWExNGY0IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvaHdtb24vS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwo+IEBA IC0xNzksOSArMTc5LDI5IEBAIGNvbmZpZyBTRU5TT1JTX0FETTkyNDAKPiAgCSAgVGhpcyBkcml2 ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQo+ICAJ ICB3aWxsIGJlIGNhbGxlZCBhZG05MjQwLgo+ICAKPiArY29uZmlnIFNFTlNPUlNfQURUN1gxMAo+ ICsJdHJpc3RhdGUKPiArCWhlbHAKPiArCSAgVGhpcyBtb2R1bGUgY29udGFpbnMgY29tbW9uIGNv ZGUgc2hhcmVkIGJ5IHRoZSBBRFQ3MzEwL0FEVDczMjAgYW5kCj4gKwkgIEFEVDc0MTAvQURUNzQy MCB0ZW1wZXJhdHVyZSBtb25pdG9yaW5nIGNoaXAgZHJpdmVycy4KPiArCj4gKwkgIElmIGJ1aWxk IGFzIGEgbW9kdWxlLCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFkdDd4MTAuCj4gKwo+ICtj b25maWcgU0VOU09SU19BRFQ3MzEwCj4gKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURUNzMx MC9BRFQ3MzIwIgo+ICsJZGVwZW5kcyBvbiBTUElfTUFTVEVSCj4gKwlzZWxlY3QgU0VOU09SU19B RFQ3WDEwCj4gKwloZWxwCj4gKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0 IGZvciB0aGUgQW5hbG9nIERldmljZXMKPiArCSAgQURUNzMxMCBhbmQgQURUNzMyMCB0ZW1wZXJh dHVyZSBtb25pdG9yaW5nIGNoaXBzLgo+ICsKPiArCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUg YnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCj4gKwkgIHdpbGwgYmUgY2FsbGVk IGFkdDczMTAuCj4gKwo+ICBjb25maWcgU0VOU09SU19BRFQ3NDEwCj4gIAl0cmlzdGF0ZSAiQW5h bG9nIERldmljZXMgQURUNzQxMC9BRFQ3NDIwIgo+ICAJZGVwZW5kcyBvbiBJMkMKPiArCXNlbGVj dCBTRU5TT1JTX0FEVDdYMTAKPiAgCWhlbHAKPiAgCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3Ug Z2V0IHN1cHBvcnQgZm9yIHRoZSBBbmFsb2cgRGV2aWNlcwo+ICAJICBBRFQ3NDEwIGFuZCBBRFQ3 NDIwIHRlbXBlcmF0dXJlIG1vbml0b3JpbmcgY2hpcHMuCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv aHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCj4gaW5kZXggOGQ2ZDk3ZS4u NWQzNmE1NyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCj4gKysrIGIvZHJp dmVycy9od21vbi9NYWtlZmlsZQo+IEBAIC0zNCw2ICszNCw4IEBAIG9iai0kKENPTkZJR19TRU5T T1JTX0FETTkyNDApCSs9IGFkbTkyNDAubwo+ICBvYmotJChDT05GSUdfU0VOU09SU19BRFMxMDE1 KQkrPSBhZHMxMDE1Lm8KPiAgb2JqLSQoQ09ORklHX1NFTlNPUlNfQURTNzgyOCkJKz0gYWRzNzgy OC5vCj4gIG9iai0kKENPTkZJR19TRU5TT1JTX0FEUzc4NzEpCSs9IGFkczc4NzEubwo+ICtvYmot JChDT05GSUdfU0VOU09SU19BRFQ3WDEwKQkrPSBhZHQ3eDEwLm8KPiArb2JqLSQoQ09ORklHX1NF TlNPUlNfQURUNzMxMCkJKz0gYWR0NzMxMC5vCj4gIG9iai0kKENPTkZJR19TRU5TT1JTX0FEVDc0 MTApCSs9IGFkdDc0MTAubwo+ICBvYmotJChDT05GSUdfU0VOU09SU19BRFQ3NDExKQkrPSBhZHQ3 NDExLm8KPiAgb2JqLSQoQ09ORklHX1NFTlNPUlNfQURUNzQ2MikJKz0gYWR0NzQ2Mi5vCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWR0NzMxMC5jIGIvZHJpdmVycy9od21vbi9hZHQ3MzEw LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmY4ZWE2MjkKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9od21vbi9hZHQ3MzEwLmMKPiBAQCAtMCwwICsxLDEy MyBAQAo+ICsvKgo+ICsgKiBBRFQ3MzEwL0FEVDczMTAgZGlnaXRhbCB0ZW1wZXJhdHVyZSBzZW5z b3IgZHJpdmVyCj4gKyAqCj4gKyAqIENvcHlyaWdodCAyMDEyLTIwMTMgQW5hbG9nIERldmljZXMg SW5jLgo+ICsgKiAgIEF1dGhvcjogTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+ Cj4gKyAqCj4gKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KPiArICovCj4g Kwo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Cj4gKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVk Lmg+Cj4gKwo+ICsjaW5jbHVkZSAiYWR0N3gxMC5oIgo+ICsKPiArI2RlZmluZSBBRFQ3MzEwX1NU QVRVUwkJCTAKPiArI2RlZmluZSBBRFQ3MzEwX0NPTkZJRwkJCTEKPiArI2RlZmluZSBBRFQ3MzEw X1RFTVBFUkFUVVJFCQkyCj4gKyNkZWZpbmUgQURUNzMxMF9JRAkJCTMKPiArI2RlZmluZSBBRFQ3 MzEwX1RfQ1JJVAkJCTQKPiArI2RlZmluZSBBRFQ3MzEwX1RfSFlTVAkJCTUKPiArI2RlZmluZSBB RFQ3MzEwX1RfQUxBUk1fSElHSAkJNgo+ICsjZGVmaW5lIEFEVDczMTBfVF9BTEFSTV9MT1cJCTcK PiArCj4gK3N0YXRpYyBjb25zdCB1OCBhZHQ3MzEwX3JlZ190YWJsZVtdID0gewo+ICsJW0FEVDdY MTBfVEVNUEVSQVRVUkVdICAgPSBBRFQ3MzEwX1RFTVBFUkFUVVJFLAo+ICsJW0FEVDdYMTBfU1RB VFVTXQk9IEFEVDczMTBfU1RBVFVTLAo+ICsJW0FEVDdYMTBfQ09ORklHXQk9IEFEVDczMTBfQ09O RklHLAo+ICsJW0FEVDdYMTBfVF9BTEFSTV9ISUdIXQk9IEFEVDczMTBfVF9BTEFSTV9ISUdILAo+ ICsJW0FEVDdYMTBfVF9BTEFSTV9MT1ddCT0gQURUNzMxMF9UX0FMQVJNX0xPVywKPiArCVtBRFQ3 WDEwX1RfQ1JJVF0JPSBBRFQ3MzEwX1RfQ1JJVCwKPiArCVtBRFQ3WDEwX1RfSFlTVF0JPSBBRFQ3 MzEwX1RfSFlTVCwKPiArCVtBRFQ3WDEwX0lEXQkJPSBBRFQ3MzEwX0lELAo+ICt9Owo+ICsKPiAr I2RlZmluZSBBRFQ3MzEwX0NNRF9SRUdfT0ZGU0VUCTMKPiArI2RlZmluZSBBRFQ3MzEwX0NNRF9S RUFECTB4NDAKPiArCj4gKyNkZWZpbmUgQUQ3MzEwX0NPTU1BTkQocmVnKSAoYWR0NzMxMF9yZWdf dGFibGVbKHJlZyldIDw8IEFEVDczMTBfQ01EX1JFR19PRkZTRVQpCj4gKwo+ICtzdGF0aWMgaW50 IGFkdDczMTBfc3BpX3JlYWRfd29yZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4IHJlZykKPiArewo+ ICsJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJcmV0ID0gc3BpX3c4cjE2KHNwaSwgQUQ3MzEwX0NPTU1BTkQocmVnKSB8IEFE VDczMTBfQ01EX1JFQUQpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4g KwlyZXR1cm4gYmUxNl90b19jcHUocmV0KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZHQ3MzEw X3NwaV93cml0ZV93b3JkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTggcmVnLCB1MTYgZGF0YSkKPiAr ewo+ICsJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKPiArCXU4 IGJ1ZlszXTsKPiArCj4gKwlidWZbMF0gPSBBRDczMTBfQ09NTUFORChyZWcpOwo+ICsJcHV0X3Vu YWxpZ25lZF9iZTE2KGRhdGEsICZidWZbMV0pOwo+ICsKPiArCXJldHVybiBzcGlfd3JpdGUoc3Bp LCBidWYsIHNpemVvZihidWYpKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZHQ3MzEwX3NwaV9y ZWFkX2J5dGUoc3RydWN0IGRldmljZSAqZGV2LCB1OCByZWcpCj4gK3sKPiArCXN0cnVjdCBzcGlf ZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7Cj4gKwo+ICsJcmV0dXJuIHNwaV93OHI4 KHNwaSwgQUQ3MzEwX0NPTU1BTkQocmVnKSB8IEFEVDczMTBfQ01EX1JFQUQpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGFkdDczMTBfc3BpX3dyaXRlX2J5dGUoc3RydWN0IGRldmljZSAqZGV2LCB1 OCByZWcsCj4gKwl1OCBkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9f c3BpX2RldmljZShkZXYpOwo+ICsJdTggYnVmWzJdOwo+ICsKPiArCWJ1ZlswXSA9IEFENzMxMF9D T01NQU5EKHJlZyk7Cj4gKwlidWZbMV0gPSBkYXRhOwo+ICsKPiArCXJldHVybiBzcGlfd3JpdGUo c3BpLCBidWYsIHNpemVvZihidWYpKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBh ZHQ3eDEwX29wcyBhZHQ3MzEwX3NwaV9vcHMgPSB7Cj4gKwkucmVhZF93b3JkID0gYWR0NzMxMF9z cGlfcmVhZF93b3JkLAo+ICsJLndyaXRlX3dvcmQgPSBhZHQ3MzEwX3NwaV93cml0ZV93b3JkLAo+ ICsJLnJlYWRfYnl0ZSA9IGFkdDczMTBfc3BpX3JlYWRfYnl0ZSwKPiArCS53cml0ZV9ieXRlID0g YWR0NzMxMF9zcGlfd3JpdGVfYnl0ZSwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgYWR0NzMxMF9z cGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKPiArewo+ICsJcmV0dXJuIGFkdDd4MTBf cHJvYmUoJnNwaS0+ZGV2LCBzcGlfZ2V0X2RldmljZV9pZChzcGkpLT5uYW1lLAo+ICsJCQkmYWR0 NzMxMF9zcGlfb3BzKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZHQ3MzEwX3NwaV9yZW1vdmUo c3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKPiArewo+ICsJcmV0dXJuIGFkdDd4MTBfcmVtb3ZlKCZz cGktPmRldik7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBh ZHQ3MzEwX2lkW10gPSB7Cj4gKwl7ICJhZHQ3MzEwIiwgMCB9LAo+ICsJeyAiYWR0NzMyMCIsIDAg fSwKPiArCXt9Cj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoc3BpLCBhZHQ3MzEwX2lkKTsK PiArCj4gK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhZHQ3MzEwX2RyaXZlciA9IHsKPiArCS5k cml2ZXIgPSB7Cj4gKwkJLm5hbWUJPSAiYWR0NzMxMCIsCj4gKwkJLm93bmVyCT0gVEhJU19NT0RV TEUsCj4gKwkJLnBtCT0gQURUN1gxMF9ERVZfUE1fT1BTLAo+ICsJfSwKPiArCS5wcm9iZQkJPSBh ZHQ3MzEwX3NwaV9wcm9iZSwKPiArCS5yZW1vdmUJCT0gYWR0NzMxMF9zcGlfcmVtb3ZlLAo+ICsJ LmlkX3RhYmxlCT0gYWR0NzMxMF9pZCwKPiArfTsKPiArbW9kdWxlX3NwaV9kcml2ZXIoYWR0NzMx MF9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigiTGFycy1QZXRlciBDbGF1c2VuIDxsYXJz QG1ldGFmb28uZGU+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiQURUNzMxMC9BRFQ3MzIwIGRy aXZlciIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv aHdtb24vYWR0NzQxMC5jIGIvZHJpdmVycy9od21vbi9hZHQ3NDEwLmMKPiBpbmRleCA4OTRmZjcx Li5kMjk0NDQ1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvaHdtb24vYWR0NzQxMC5jCj4gKysrIGIv ZHJpdmVycy9od21vbi9hZHQ3NDEwLmMKPiBAQCAtMSw0ODUgKzEsODAgQEAKPiAgLyoKPiAtICog YWR0NzQxMC5jIC0gUGFydCBvZiBsbV9zZW5zb3JzLCBMaW51eCBrZXJuZWwgbW9kdWxlcyBmb3Ig aGFyZHdhcmUKPiAtICoJIG1vbml0b3JpbmcKPiAtICogVGhpcyBkcml2ZXIgaGFuZGxlcyB0aGUg QURUNzQxMCBhbmQgY29tcGF0aWJsZSBkaWdpdGFsIHRlbXBlcmF0dXJlIHNlbnNvcnMuCj4gLSAq IEhhcnRtdXQgS25hYWNrIDxrbmFhY2suaEBnbXguZGU+IDIwMTItMDctMjIKPiAtICogYmFzZWQg b24gbG03NS5jIGJ5IEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4KPiAtICogYW5kIGFk dDc0MTAuYyBmcm9tIGlpby1zdGFnaW5nIGJ5IFNvbmljIFpoYW5nIDxzb25pYy56aGFuZ0BhbmFs b2cuY29tPgo+ICsgKiBBRFQ3NDEwL0FEVDc0MjAgZGlnaXRhbCB0ZW1wZXJhdHVyZSBzZW5zb3Ig ZHJpdmVyCj4gICAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gLSAqIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu c2UsIG9yCj4gLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqIENv cHlyaWdodCAyMDEyLTIwMTMgQW5hbG9nIERldmljZXMgSW5jLgo+ICsgKiAgIEF1dGhvcjogTGFy cy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+Cj4gICAqCj4gLSAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+IC0g KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgo+IC0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCj4gLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCj4gLSAqCj4gLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4gLSAqIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gLSAqIEZvdW5kYXRp b24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgo+ICsgKiBM aWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCj4gICAqLwo+ICAKPiAgI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgo+ICAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+IC0jaW5jbHVkZSA8 bGludXgvc2xhYi5oPgo+IC0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgo+ICAjaW5jbHVkZSA8 bGludXgvaTJjLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9od21vbi5oPgo+IC0jaW5jbHVkZSA8bGlu dXgvaHdtb24tc3lzZnMuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+IC0jaW5jbHVkZSA8 bGludXgvbXV0ZXguaD4KPiAtI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gLQo+IC0vKgo+IC0g KiBBRFQ3NDEwIHJlZ2lzdGVycyBkZWZpbml0aW9uCj4gLSAqLwo+IC0KPiAtI2RlZmluZSBBRFQ3 NDEwX1RFTVBFUkFUVVJFCQkwCj4gLSNkZWZpbmUgQURUNzQxMF9TVEFUVVMJCQkyCj4gLSNkZWZp bmUgQURUNzQxMF9DT05GSUcJCQkzCj4gLSNkZWZpbmUgQURUNzQxMF9UX0FMQVJNX0hJR0gJCTQK PiAtI2RlZmluZSBBRFQ3NDEwX1RfQUxBUk1fTE9XCQk2Cj4gLSNkZWZpbmUgQURUNzQxMF9UX0NS SVQJCQk4Cj4gLSNkZWZpbmUgQURUNzQxMF9UX0hZU1QJCQkweEEKPiAtCj4gLS8qCj4gLSAqIEFE VDc0MTAgc3RhdHVzCj4gLSAqLwo+IC0jZGVmaW5lIEFEVDc0MTBfU1RBVF9UX0xPVwkJKDEgPDwg NCkKPiAtI2RlZmluZSBBRFQ3NDEwX1NUQVRfVF9ISUdICQkoMSA8PCA1KQo+IC0jZGVmaW5lIEFE VDc0MTBfU1RBVF9UX0NSSVQJCSgxIDw8IDYpCj4gLSNkZWZpbmUgQURUNzQxMF9TVEFUX05PVF9S RFkJCSgxIDw8IDcpCj4gLQo+IC0vKgo+IC0gKiBBRFQ3NDEwIGNvbmZpZwo+IC0gKi8KPiAtI2Rl ZmluZSBBRFQ3NDEwX0ZBVUxUX1FVRVVFX01BU0sJKDEgPDwgMCB8IDEgPDwgMSkKPiAtI2RlZmlu ZSBBRFQ3NDEwX0NUX1BPTEFSSVRZCQkoMSA8PCAyKQo+IC0jZGVmaW5lIEFEVDc0MTBfSU5UX1BP TEFSSVRZCQkoMSA8PCAzKQo+IC0jZGVmaW5lIEFEVDc0MTBfRVZFTlRfTU9ERQkJKDEgPDwgNCkK PiAtI2RlZmluZSBBRFQ3NDEwX01PREVfTUFTSwkJKDEgPDwgNSB8IDEgPDwgNikKPiAtI2RlZmlu ZSBBRFQ3NDEwX0ZVTEwJCQkoMCA8PCA1IHwgMCA8PCA2KQo+IC0jZGVmaW5lIEFEVDc0MTBfUEQJ CQkoMSA8PCA1IHwgMSA8PCA2KQo+IC0jZGVmaW5lIEFEVDc0MTBfUkVTT0xVVElPTgkJKDEgPDwg NykKPiAtCj4gLS8qCj4gLSAqIEFEVDc0MTAgbWFza3MKPiAtICovCj4gLSNkZWZpbmUgQURUNzQx MF9UMTNfVkFMVUVfTUFTSwkJCTB4RkZGOAo+IC0jZGVmaW5lIEFEVDc0MTBfVF9IWVNUX01BU0sJ CQkweEYKPiAtCj4gLS8qIHN0cmFpZ2h0IGZyb20gdGhlIGRhdGFzaGVldCAqLwo+IC0jZGVmaW5l IEFEVDc0MTBfVEVNUF9NSU4gKC01NTAwMCkKPiAtI2RlZmluZSBBRFQ3NDEwX1RFTVBfTUFYIDE1 MDAwMAo+IC0KPiAtZW51bSBhZHQ3NDEwX3R5cGUgewkJLyoga2VlcCBzb3J0ZWQgaW4gYWxwaGFi ZXRpY2FsIG9yZGVyICovCj4gLQlhZHQ3NDEwLAo+IC19Owo+IC0KPiAtc3RhdGljIGNvbnN0IHU4 IEFEVDc0MTBfUkVHX1RFTVBbNF0gPSB7Cj4gLQlBRFQ3NDEwX1RFTVBFUkFUVVJFLAkJLyogaW5w dXQgKi8KPiAtCUFEVDc0MTBfVF9BTEFSTV9ISUdILAkJLyogaGlnaCAqLwo+IC0JQURUNzQxMF9U X0FMQVJNX0xPVywJCS8qIGxvdyAqLwo+IC0JQURUNzQxMF9UX0NSSVQsCQkJLyogY3JpdGljYWwg Ki8KPiAtfTsKPiAtCj4gLS8qIEVhY2ggY2xpZW50IGhhcyB0aGlzIGFkZGl0aW9uYWwgZGF0YSAq Lwo+IC1zdHJ1Y3QgYWR0NzQxMF9kYXRhIHsKPiAtCXN0cnVjdCBkZXZpY2UJCSpod21vbl9kZXY7 Cj4gLQlzdHJ1Y3QgbXV0ZXgJCXVwZGF0ZV9sb2NrOwo+IC0JdTgJCQljb25maWc7Cj4gLQl1OAkJ CW9sZGNvbmZpZzsKPiAtCWJvb2wJCQl2YWxpZDsJCS8qIHRydWUgaWYgcmVnaXN0ZXJzIHZhbGlk ICovCj4gLQl1bnNpZ25lZCBsb25nCQlsYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KPiAt CXMxNgkJCXRlbXBbNF07CS8qIFJlZ2lzdGVyIHZhbHVlcywKPiAtCQkJCQkJICAgMCA9IGlucHV0 Cj4gLQkJCQkJCSAgIDEgPSBoaWdoCj4gLQkJCQkJCSAgIDIgPSBsb3cKPiAtCQkJCQkJICAgMyA9 IGNyaXRpY2FsICovCj4gLQl1OAkJCWh5c3Q7CQkvKiBoeXN0ZXJlc2lzIG9mZnNldCAqLwo+IC19 Owo+IC0KPiAtLyoKPiAtICogYWR0NzQxMCByZWdpc3RlciBhY2Nlc3MgYnkgSTJDCj4gLSAqLwo+ IC1zdGF0aWMgaW50IGFkdDc0MTBfdGVtcF9yZWFkeShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50 KQo+IC17Cj4gLQlpbnQgaSwgc3RhdHVzOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCA2OyBpKysp IHsKPiAtCQlzdGF0dXMgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDEw X1NUQVRVUyk7Cj4gLQkJaWYgKHN0YXR1cyA8IDApCj4gLQkJCXJldHVybiBzdGF0dXM7Cj4gLQkJ aWYgKCEoc3RhdHVzICYgQURUNzQxMF9TVEFUX05PVF9SRFkpKQo+IC0JCQlyZXR1cm4gMDsKPiAt CQltc2xlZXAoNjApOwo+IC0JfQo+IC0JcmV0dXJuIC1FVElNRURPVVQ7Cj4gLX0KPiAtCj4gLXN0 YXRpYyBpbnQgYWR0NzQxMF91cGRhdGVfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gLXsKPiAt CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Cj4gLQlzdHJ1 Y3QgYWR0NzQxMF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Cj4gLQlp bnQgcmV0ID0gMDsKPiAtCj4gLQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Cj4gLQo+ IC0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFogKyBIWiAv IDIpCj4gLQkgICAgfHwgIWRhdGEtPnZhbGlkKSB7Cj4gLQkJaW50IHRlbXA7Cj4gLQo+IC0JCWRl dl9kYmcoJmNsaWVudC0+ZGV2LCAiU3RhcnRpbmcgdXBkYXRlXG4iKTsKPiAtCj4gLQkJcmV0ID0g YWR0NzQxMF90ZW1wX3JlYWR5KGNsaWVudCk7IC8qIGNoZWNrIGZvciBuZXcgdmFsdWUgKi8KPiAt CQlpZiAocmV0KQo+IC0JCQlnb3RvIGFib3J0Owo+IC0KPiAtCQl0ZW1wID0gaTJjX3NtYnVzX3Jl YWRfd29yZF9zd2FwcGVkKGNsaWVudCwgQURUNzQxMF9SRUdfVEVNUFswXSk7Cj4gLQkJaWYgKHRl bXAgPCAwKSB7Cj4gLQkJCXJldCA9IHRlbXA7Cj4gLQkJCWRldl9kYmcoZGV2LCAiRmFpbGVkIHRv IHJlYWQgdmFsdWU6IHJlZyAlZCwgZXJyb3IgJWRcbiIsCj4gLQkJCQlBRFQ3NDEwX1JFR19URU1Q WzBdLCByZXQpOwo+IC0JCQlnb3RvIGFib3J0Owo+IC0JCX0KPiAtCQlkYXRhLT50ZW1wWzBdID0g dGVtcDsKPiAtCj4gLQkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKPiAtCQlkYXRhLT52 YWxpZCA9IHRydWU7Cj4gLQl9Cj4gLQo+IC1hYm9ydDoKPiAtCW11dGV4X3VubG9jaygmZGF0YS0+ dXBkYXRlX2xvY2spOwo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBhZHQ3 NDEwX2ZpbGxfY2FjaGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKPiAtewo+IC0Jc3RydWN0 IGFkdDc0MTBfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwo+IC0JaW50 IHJldDsKPiAtCWludCBpOwo+IC0KPiAtCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKEFEVDc0 MTBfUkVHX1RFTVApOyBpKyspIHsKPiAtCQlyZXQgPSBpMmNfc21idXNfcmVhZF93b3JkX3N3YXBw ZWQoY2xpZW50LCBBRFQ3NDEwX1JFR19URU1QW2ldKTsKPiAtCQlpZiAocmV0IDwgMCkgewo+IC0J CQlkZXZfZGJnKCZjbGllbnQtPmRldiwKPiAtCQkJCSJGYWlsZWQgdG8gcmVhZCB2YWx1ZTogcmVn ICVkLCBlcnJvciAlZFxuIiwKPiAtCQkJCUFEVDc0MTBfUkVHX1RFTVBbaV0sIHJldCk7Cj4gLQkJ CXJldHVybiByZXQ7Cj4gLQkJfQo+IC0JCWRhdGEtPnRlbXBbaV0gPSByZXQ7Cj4gLQl9Cj4gLQo+ IC0JcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQxMF9UX0hZU1Qp Owo+IC0JaWYgKHJldCA8IDApIHsKPiAtCQlkZXZfZGJnKCZjbGllbnQtPmRldiwKPiAtCQkJIkZh aWxlZCB0byByZWFkIHZhbHVlOiBoeXN0IHJlZywgZXJyb3IgJWRcbiIsCj4gLQkJCXJldCk7Cj4g LQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCWRhdGEtPmh5c3QgPSByZXQ7Cj4gLQo+IC0JcmV0dXJu IDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzMTYgQURUNzQxMF9URU1QX1RPX1JFRyhsb25nIHRlbXAp Cj4gLXsKPiAtCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChjbGFtcF92YWwodGVtcCwgQURUNzQx MF9URU1QX01JTiwKPiAtCQkJCQkgICBBRFQ3NDEwX1RFTVBfTUFYKSAqIDEyOCwgMTAwMCk7Cj4g LX0KPiAtCj4gLXN0YXRpYyBpbnQgQURUNzQxMF9SRUdfVE9fVEVNUChzdHJ1Y3QgYWR0NzQxMF9k YXRhICpkYXRhLCBzMTYgcmVnKQo+IC17Cj4gLQkvKiBpbiAxMyBiaXQgbW9kZSwgYml0cyAwLTIg YXJlIHN0YXR1cyBmbGFncyAtIG1hc2sgdGhlbSBvdXQgKi8KPiAtCWlmICghKGRhdGEtPmNvbmZp ZyAmIEFEVDc0MTBfUkVTT0xVVElPTikpCj4gLQkJcmVnICY9IEFEVDc0MTBfVDEzX1ZBTFVFX01B U0s7Cj4gLQkvKgo+IC0JICogdGVtcGVyYXR1cmUgaXMgc3RvcmVkIGluIHR3b3MgY29tcGxlbWVu dCBmb3JtYXQsIGluIHN0ZXBzIG9mCj4gLQkgKiAxLzEyOMKwQwo+IC0JICovCj4gLQlyZXR1cm4g RElWX1JPVU5EX0NMT1NFU1QocmVnICogMTAwMCwgMTI4KTsKPiAtfQo+IC0KPiAtLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSovCj4gIAo+IC0vKiBzeXNmcyBhdHRyaWJ1dGVzIGZvciBod21vbiAqLwo+ICsjaW5j bHVkZSAiYWR0N3gxMC5oIgo+ICAKPiAtc3RhdGljIHNzaXplX3QgYWR0NzQxMF9zaG93X3RlbXAo c3RydWN0IGRldmljZSAqZGV2LAo+IC0JCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwg Y2hhciAqYnVmKQo+ICtzdGF0aWMgaW50IGFkdDc0MTBfaTJjX3JlYWRfd29yZChzdHJ1Y3QgZGV2 aWNlICpkZXYsIHU4IHJlZykKPiAgewo+IC0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRl ICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRhKTsKPiAtCXN0cnVjdCBpMmNfY2xpZW50ICpj bGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Cj4gLQlzdHJ1Y3QgYWR0NzQxMF9kYXRhICpkYXRh ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Cj4gLQo+IC0JaWYgKGF0dHItPmluZGV4ID09 IDApIHsKPiAtCQlpbnQgcmV0Owo+IC0KPiAtCQlyZXQgPSBhZHQ3NDEwX3VwZGF0ZV90ZW1wKGRl dik7Cj4gLQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCj4gLQlyZXR1cm4g c3ByaW50ZihidWYsICIlZFxuIiwgQURUNzQxMF9SRUdfVE9fVEVNUChkYXRhLAo+IC0JCSAgICAg ICBkYXRhLT50ZW1wW2F0dHItPmluZGV4XSkpOwo+ICsJcmV0dXJuIGkyY19zbWJ1c19yZWFkX3dv cmRfc3dhcHBlZCh0b19pMmNfY2xpZW50KGRldiksIHJlZyk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBz c2l6ZV90IGFkdDc0MTBfc2V0X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LAo+IC0JCQkJc3RydWN0 IGRldmljZV9hdHRyaWJ1dGUgKmRhLAo+IC0JCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291 bnQpCj4gK3N0YXRpYyBpbnQgYWR0NzQxMF9pMmNfd3JpdGVfd29yZChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHU4IHJlZywgdTE2IGRhdGEpCj4gIHsKPiAtCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJp YnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7Cj4gLQlzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwo+IC0Jc3RydWN0IGFkdDc0MTBfZGF0YSAq ZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwo+IC0JaW50IG5yID0gYXR0ci0+aW5k ZXg7Cj4gLQlsb25nIHRlbXA7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXJldCA9IGtzdHJ0b2woYnVm LCAxMCwgJnRlbXApOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCW11dGV4 X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKPiAtCWRhdGEtPnRlbXBbbnJdID0gQURUNzQxMF9U RU1QX1RPX1JFRyh0ZW1wKTsKPiAtCXJldCA9IGkyY19zbWJ1c193cml0ZV93b3JkX3N3YXBwZWQo Y2xpZW50LCBBRFQ3NDEwX1JFR19URU1QW25yXSwKPiAtCQkJCQkgICBkYXRhLT50ZW1wW25yXSk7 Cj4gLQlpZiAocmV0KQo+IC0JCWNvdW50ID0gcmV0Owo+IC0JbXV0ZXhfdW5sb2NrKCZkYXRhLT51 cGRhdGVfbG9jayk7Cj4gLQlyZXR1cm4gY291bnQ7Cj4gKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRl X3dvcmRfc3dhcHBlZCh0b19pMmNfY2xpZW50KGRldiksIHJlZywgZGF0YSk7Cj4gIH0KPiAgCj4g LXN0YXRpYyBzc2l6ZV90IGFkdDc0MTBfc2hvd190X2h5c3Qoc3RydWN0IGRldmljZSAqZGV2LAo+ IC0JCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAo+IC0JCQkJICAgY2hhciAqYnVm KQo+ICtzdGF0aWMgaW50IGFkdDc0MTBfaTJjX3JlYWRfYnl0ZShzdHJ1Y3QgZGV2aWNlICpkZXYs IHU4IHJlZykKPiAgewo+IC0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0g dG9fc2Vuc29yX2Rldl9hdHRyKGRhKTsKPiAtCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0 b19pMmNfY2xpZW50KGRldik7Cj4gLQlzdHJ1Y3QgYWR0NzQxMF9kYXRhICpkYXRhID0gaTJjX2dl dF9jbGllbnRkYXRhKGNsaWVudCk7Cj4gLQlpbnQgbnIgPSBhdHRyLT5pbmRleDsKPiAtCWludCBo eXN0Owo+IC0KPiAtCWh5c3QgPSAoZGF0YS0+aHlzdCAmIEFEVDc0MTBfVF9IWVNUX01BU0spICog MTAwMDsKPiAtCj4gLQkvKgo+IC0JICogaHlzdGVyZXNpcyBpcyBzdG9yZWQgYXMgYSA0IGJpdCBv ZmZzZXQgaW4gdGhlIGRldmljZSwgY29udmVydCBpdAo+IC0JICogdG8gYW4gYWJzb2x1dGUgdmFs dWUKPiAtCSAqLwo+IC0JaWYgKG5yID09IDIpCS8qIG1pbiBoYXMgcG9zaXRpdmUgb2Zmc2V0LCBv dGhlcnMgaGF2ZSBuZWdhdGl2ZSAqLwo+IC0JCWh5c3QgPSAtaHlzdDsKPiAtCXJldHVybiBzcHJp bnRmKGJ1ZiwgIiVkXG4iLAo+IC0JCSAgICAgICBBRFQ3NDEwX1JFR19UT19URU1QKGRhdGEsIGRh dGEtPnRlbXBbbnJdKSAtIGh5c3QpOwo+ICsJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0 YSh0b19pMmNfY2xpZW50KGRldiksIHJlZyk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBzc2l6ZV90IGFk dDc0MTBfc2V0X3RfaHlzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gLQkJCQkgIHN0cnVjdCBkZXZp Y2VfYXR0cmlidXRlICpkYSwKPiAtCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQp Cj4gK3N0YXRpYyBpbnQgYWR0NzQxMF9pMmNfd3JpdGVfYnl0ZShzdHJ1Y3QgZGV2aWNlICpkZXYs IHU4IHJlZywgdTggZGF0YSkKPiAgewo+IC0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRv X2kyY19jbGllbnQoZGV2KTsKPiAtCXN0cnVjdCBhZHQ3NDEwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0 X2NsaWVudGRhdGEoY2xpZW50KTsKPiAtCWludCBsaW1pdCwgcmV0Owo+IC0JbG9uZyBoeXN0Owo+ IC0KPiAtCXJldCA9IGtzdHJ0b2woYnVmLCAxMCwgJmh5c3QpOwo+IC0JaWYgKHJldCkKPiAtCQly ZXR1cm4gcmV0Owo+IC0JLyogY29udmVydCBhYnNvbHV0ZSBoeXN0ZXJlc2lzIHZhbHVlIHRvIGEg NCBiaXQgZGVsdGEgdmFsdWUgKi8KPiAtCWxpbWl0ID0gQURUNzQxMF9SRUdfVE9fVEVNUChkYXRh LCBkYXRhLT50ZW1wWzFdKTsKPiAtCWh5c3QgPSBjbGFtcF92YWwoaHlzdCwgQURUNzQxMF9URU1Q X01JTiwgQURUNzQxMF9URU1QX01BWCk7Cj4gLQlkYXRhLT5oeXN0ID0gY2xhbXBfdmFsKERJVl9S T1VORF9DTE9TRVNUKGxpbWl0IC0gaHlzdCwgMTAwMCksIDAsCj4gLQkJCSAgICAgICBBRFQ3NDEw X1RfSFlTVF9NQVNLKTsKPiAtCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50 LCBBRFQ3NDEwX1RfSFlTVCwgZGF0YS0+aHlzdCk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiBy ZXQ7Cj4gLQo+IC0JcmV0dXJuIGNvdW50Owo+ICsJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRl X2RhdGEodG9faTJjX2NsaWVudChkZXYpLCByZWcsIGRhdGEpOwo+ICB9Cj4gIAo+IC1zdGF0aWMg c3NpemVfdCBhZHQ3NDEwX3Nob3dfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LAo+IC0JCQkJICBz dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsCj4gLQkJCQkgIGNoYXIgKmJ1ZikKPiAtewo+IC0J c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKPiAtCXN0cnVj dCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7 Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGll bnQsIEFEVDc0MTBfU1RBVFVTKTsKPiAtCWlmIChyZXQgPCAwKQo+IC0JCXJldHVybiByZXQ7Cj4g LQo+IC0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsICEhKHJldCAmIGF0dHItPmluZGV4KSk7 Cj4gLX0KPiAtCj4gLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJV R08sIGFkdDc0MTBfc2hvd190ZW1wLCBOVUxMLCAwKTsKPiAtc3RhdGljIFNFTlNPUl9ERVZJQ0Vf QVRUUih0ZW1wMV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLAo+IC0JCQkgIGFkdDc0MTBfc2hvd190 ZW1wLCBhZHQ3NDEwX3NldF90ZW1wLCAxKTsKPiAtc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0 ZW1wMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAo+IC0JCQkgIGFkdDc0MTBfc2hvd190ZW1wLCBh ZHQ3NDEwX3NldF90ZW1wLCAyKTsKPiAtc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9j cml0LCBTX0lXVVNSIHwgU19JUlVHTywKPiAtCQkJICBhZHQ3NDEwX3Nob3dfdGVtcCwgYWR0NzQx MF9zZXRfdGVtcCwgMyk7Cj4gLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4X2h5 c3QsIFNfSVdVU1IgfCBTX0lSVUdPLAo+IC0JCQkgIGFkdDc0MTBfc2hvd190X2h5c3QsIGFkdDc0 MTBfc2V0X3RfaHlzdCwgMSk7Cj4gLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWlu X2h5c3QsIFNfSVJVR08sCj4gLQkJCSAgYWR0NzQxMF9zaG93X3RfaHlzdCwgTlVMTCwgMik7Cj4g LXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdF9oeXN0LCBTX0lSVUdPLAo+IC0J CQkgIGFkdDc0MTBfc2hvd190X2h5c3QsIE5VTEwsIDMpOwo+IC1zdGF0aWMgU0VOU09SX0RFVklD RV9BVFRSKHRlbXAxX21pbl9hbGFybSwgU19JUlVHTywgYWR0NzQxMF9zaG93X2FsYXJtLAo+IC0J CQkgIE5VTEwsIEFEVDc0MTBfU1RBVF9UX0xPVyk7Cj4gLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FU VFIodGVtcDFfbWF4X2FsYXJtLCBTX0lSVUdPLCBhZHQ3NDEwX3Nob3dfYWxhcm0sCj4gLQkJCSAg TlVMTCwgQURUNzQxMF9TVEFUX1RfSElHSCk7Cj4gLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIo dGVtcDFfY3JpdF9hbGFybSwgU19JUlVHTywgYWR0NzQxMF9zaG93X2FsYXJtLAo+IC0JCQkgIE5V TEwsIEFEVDc0MTBfU1RBVF9UX0NSSVQpOwo+IC0KPiAtc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUg KmFkdDc0MTBfYXR0cmlidXRlc1tdID0gewo+IC0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1 dC5kZXZfYXR0ci5hdHRyLAo+IC0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIu YXR0ciwKPiAtCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWluLmRldl9hdHRyLmF0dHIsCj4gLQkm c2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXQuZGV2X2F0dHIuYXR0ciwKPiAtCSZzZW5zb3JfZGV2 X2F0dHJfdGVtcDFfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKPiAtCSZzZW5zb3JfZGV2X2F0dHJf dGVtcDFfbWluX2h5c3QuZGV2X2F0dHIuYXR0ciwKPiAtCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFf Y3JpdF9oeXN0LmRldl9hdHRyLmF0dHIsCj4gLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbl9h bGFybS5kZXZfYXR0ci5hdHRyLAo+IC0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfYWxhcm0u ZGV2X2F0dHIuYXR0ciwKPiAtCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdF9hbGFybS5kZXZf YXR0ci5hdHRyLAo+IC0JTlVMTAo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGFkdDd4MTBfb3BzIGFk dDc0MTBfaTJjX29wcyA9IHsKPiArCS5yZWFkX3dvcmQgPSBhZHQ3NDEwX2kyY19yZWFkX3dvcmQs Cj4gKwkud3JpdGVfd29yZCA9IGFkdDc0MTBfaTJjX3dyaXRlX3dvcmQsCj4gKwkucmVhZF9ieXRl ID0gYWR0NzQxMF9pMmNfcmVhZF9ieXRlLAo+ICsJLndyaXRlX2J5dGUgPSBhZHQ3NDEwX2kyY193 cml0ZV9ieXRlLAo+ICB9Owo+ICAKPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3Jv dXAgYWR0NzQxMF9ncm91cCA9IHsKPiAtCS5hdHRycyA9IGFkdDc0MTBfYXR0cmlidXRlcywKPiAt fTsKPiAtCj4gLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo+IC0KPiAtLyogZGV2aWNlIHByb2JlIGFuZCBy ZW1vdmFsICovCj4gLQo+IC1zdGF0aWMgaW50IGFkdDc0MTBfcHJvYmUoc3RydWN0IGkyY19jbGll bnQgKmNsaWVudCwKPiAtCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKPiArc3Rh dGljIGludCBhZHQ3NDEwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAo+ICsJ Y29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQo+ICB7Cj4gLQlzdHJ1Y3QgYWR0NzQxMF9k YXRhICpkYXRhOwo+IC0JaW50IHJldDsKPiAtCj4gIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFs aXR5KGNsaWVudC0+YWRhcHRlciwKPiAgCQkJSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIHwgSTJD X0ZVTkNfU01CVVNfV09SRF9EQVRBKSkKPiAgCQlyZXR1cm4gLUVOT0RFVjsKPiAgCj4gLQlkYXRh ID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKHN0cnVjdCBhZHQ3NDEwX2RhdGEp LAo+IC0JCQkgICAgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWRhdGEpCj4gLQkJcmV0dXJuIC1FTk9N RU07Cj4gLQo+IC0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7Cj4gLQltdXRleF9p bml0KCZkYXRhLT51cGRhdGVfbG9jayk7Cj4gLQo+IC0JLyogY29uZmlndXJlIGFzIHNwZWNpZmll ZCAqLwo+IC0JcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQxMF9D T05GSUcpOwo+IC0JaWYgKHJldCA8IDApIHsKPiAtCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIkNh bid0IHJlYWQgY29uZmlnPyAlZFxuIiwgcmV0KTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0J ZGF0YS0+b2xkY29uZmlnID0gcmV0Owo+IC0JLyoKPiAtCSAqIFNldCB0byAxNiBiaXQgcmVzb2x1 dGlvbiwgY29udGlub3VzIGNvbnZlcnNpb24gYW5kIGNvbXBhcmF0b3IgbW9kZS4KPiAtCSAqLwo+ IC0JcmV0ICY9IH5BRFQ3NDEwX01PREVfTUFTSzsKPiAtCWRhdGEtPmNvbmZpZyA9IHJldCB8IEFE VDc0MTBfRlVMTCB8IEFEVDc0MTBfUkVTT0xVVElPTiB8Cj4gLQkJCUFEVDc0MTBfRVZFTlRfTU9E RTsKPiAtCWlmIChkYXRhLT5jb25maWcgIT0gZGF0YS0+b2xkY29uZmlnKSB7Cj4gLQkJcmV0ID0g aTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0MTBfQ09ORklHLAo+IC0JCQkJ CQlkYXRhLT5jb25maWcpOwo+IC0JCWlmIChyZXQpCj4gLQkJCXJldHVybiByZXQ7Cj4gLQl9Cj4g LQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIkNvbmZpZyAlMDJ4XG4iLCBkYXRhLT5jb25maWcpOwo+ IC0KPiAtCXJldCA9IGFkdDc0MTBfZmlsbF9jYWNoZShjbGllbnQpOwo+IC0JaWYgKHJldCkKPiAt CQlnb3RvIGV4aXRfcmVzdG9yZTsKPiAtCj4gLQkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwo+ IC0JcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmYWR0NzQxMF9n cm91cCk7Cj4gLQlpZiAocmV0KQo+IC0JCWdvdG8gZXhpdF9yZXN0b3JlOwo+IC0KPiAtCWRhdGEt Pmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOwo+IC0JaWYg KElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7Cj4gLQkJcmV0ID0gUFRSX0VSUihkYXRhLT5od21v bl9kZXYpOwo+IC0JCWdvdG8gZXhpdF9yZW1vdmU7Cj4gLQl9Cj4gLQo+IC0JZGV2X2luZm8oJmNs aWVudC0+ZGV2LCAic2Vuc29yICclcydcbiIsIGNsaWVudC0+bmFtZSk7Cj4gLQo+IC0JcmV0dXJu IDA7Cj4gLQo+IC1leGl0X3JlbW92ZToKPiAtCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5k ZXYua29iaiwgJmFkdDc0MTBfZ3JvdXApOwo+IC1leGl0X3Jlc3RvcmU6Cj4gLQlpMmNfc21idXNf d3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQxMF9DT05GSUcsIGRhdGEtPm9sZGNvbmZpZyk7 Cj4gLQlyZXR1cm4gcmV0Owo+ICsJcmV0dXJuIGFkdDd4MTBfcHJvYmUoJmNsaWVudC0+ZGV2LCBO VUxMLCAmYWR0NzQxMF9pMmNfb3BzKTsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBhZHQ3NDEwX3Jl bW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQo+ICtzdGF0aWMgaW50IGFkdDc0MTBfaTJj X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQo+ICB7Cj4gLQlzdHJ1Y3QgYWR0NzQx MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Cj4gLQo+IC0JaHdtb25f ZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKPiAtCXN5c2ZzX3JlbW92ZV9ncm91 cCgmY2xpZW50LT5kZXYua29iaiwgJmFkdDc0MTBfZ3JvdXApOwo+IC0JaWYgKGRhdGEtPm9sZGNv bmZpZyAhPSBkYXRhLT5jb25maWcpCj4gLQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGll bnQsIEFEVDc0MTBfQ09ORklHLAo+IC0JCQkJCSAgZGF0YS0+b2xkY29uZmlnKTsKPiAtCXJldHVy biAwOwo+ICsJcmV0dXJuIGFkdDd4MTBfcmVtb3ZlKCZjbGllbnQtPmRldik7Cj4gIH0KPiAgCj4g IHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhZHQ3NDEwX2lkc1tdID0gewo+IC0J eyAiYWR0NzQxMCIsIGFkdDc0MTAsIH0sCj4gLQl7ICJhZHQ3NDIwIiwgYWR0NzQxMCwgfSwKPiAt CXsgLyogTElTVCBFTkQgKi8gfQo+ICsJeyAiYWR0NzQxMCIsIDAgfSwKPiArCXsgImFkdDc0MjAi LCAwIH0sCj4gKwl7fQo+ICB9Owo+ICBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWR0NzQxMF9p ZHMpOwo+ICAKPiAtI2lmZGVmIENPTkZJR19QTV9TTEVFUAo+IC1zdGF0aWMgaW50IGFkdDc0MTBf c3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gLXsKPiAtCWludCByZXQ7Cj4gLQlzdHJ1Y3Qg aTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwo+IC0Jc3RydWN0IGFkdDc0 MTBfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwo+IC0KPiAtCXJldCA9 IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDEwX0NPTkZJRywKPiAtCQkJ CQlkYXRhLT5jb25maWcgfCBBRFQ3NDEwX1BEKTsKPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4g LXN0YXRpYyBpbnQgYWR0NzQxMF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo+IC17Cj4gLQlp bnQgcmV0Owo+IC0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2 KTsKPiAtCXN0cnVjdCBhZHQ3NDEwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xp ZW50KTsKPiAtCj4gLQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURU NzQxMF9DT05GSUcsIGRhdGEtPmNvbmZpZyk7Cj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC1z dGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoYWR0NzQxMF9kZXZfcG1fb3BzLCBhZHQ3NDEwX3N1c3Bl bmQsIGFkdDc0MTBfcmVzdW1lKTsKPiAtCj4gLSNkZWZpbmUgQURUNzQxMF9ERVZfUE1fT1BTICgm YWR0NzQxMF9kZXZfcG1fb3BzKQo+IC0jZWxzZQo+IC0jZGVmaW5lIEFEVDc0MTBfREVWX1BNX09Q UyBOVUxMCj4gLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KPiAtCj4gIHN0YXRpYyBzdHJ1Y3QgaTJj X2RyaXZlciBhZHQ3NDEwX2RyaXZlciA9IHsKPiAgCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04s Cj4gIAkuZHJpdmVyID0gewo+ICAJCS5uYW1lCT0gImFkdDc0MTAiLAo+IC0JCS5wbQk9IEFEVDc0 MTBfREVWX1BNX09QUywKPiArCQkucG0JPSBBRFQ3WDEwX0RFVl9QTV9PUFMsCj4gIAl9LAo+IC0J LnByb2JlCQk9IGFkdDc0MTBfcHJvYmUsCj4gLQkucmVtb3ZlCQk9IGFkdDc0MTBfcmVtb3ZlLAo+ ICsJLnByb2JlCQk9IGFkdDc0MTBfaTJjX3Byb2JlLAo+ICsJLnJlbW92ZQkJPSBhZHQ3NDEwX2ky Y19yZW1vdmUsCj4gIAkuaWRfdGFibGUJPSBhZHQ3NDEwX2lkcywKPiAgCS5hZGRyZXNzX2xpc3QJ PSBJMkNfQUREUlMoMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiksCj4gIH07Cj4gLQo+ICBtb2R1bGVf aTJjX2RyaXZlcihhZHQ3NDEwX2RyaXZlcik7Cj4gIAo+IC1NT0RVTEVfQVVUSE9SKCJIYXJ0bXV0 IEtuYWFjayIpOwo+IC1NT0RVTEVfREVTQ1JJUFRJT04oIkFEVDc0MTAvQURUNzQyMCBkcml2ZXIi KTsKPiArTU9EVUxFX0FVVEhPUigiTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+ Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiQURUNzQxMC9BRDc0MjAgZHJpdmVyIik7Cj4gIE1P RFVMRV9MSUNFTlNFKCJHUEwiKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZHQ3eDEw LmMgYi9kcml2ZXJzL2h3bW9uL2FkdDd4MTAuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMC4uODRiM2RmYwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2h3bW9u L2FkdDd4MTAuYwo+IEBAIC0wLDAgKzEsNDc2IEBACj4gKy8qCj4gKyAqIGFkdDd4MTAuYyAtIFBh cnQgb2YgbG1fc2Vuc29ycywgTGludXgga2VybmVsIG1vZHVsZXMgZm9yIGhhcmR3YXJlCj4gKyAq CSBtb25pdG9yaW5nCj4gKyAqIFRoaXMgZHJpdmVyIGhhbmRsZXMgdGhlIEFEVDc0MTAgYW5kIGNv bXBhdGlibGUgZGlnaXRhbCB0ZW1wZXJhdHVyZSBzZW5zb3JzLgo+ICsgKiBIYXJ0bXV0IEtuYWFj ayA8a25hYWNrLmhAZ214LmRlPiAyMDEyLTA3LTIyCj4gKyAqIGJhc2VkIG9uIGxtNzUuYyBieSBG cm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+Cj4gKyAqIGFuZCBhZHQ3NDEwLmMgZnJvbSBp aW8tc3RhZ2luZyBieSBTb25pYyBaaGFuZyA8c29uaWMuemhhbmdAYW5hbG9nLmNvbT4KPiArICoK PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiArICogdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPiArICog KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4g KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKPiArICogYWxvbmcgd2l0aCB0aGlz IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRh dGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW5p dC5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICsjaW5jbHVkZSA8bGludXgvamlmZmll cy5oPgo+ICsjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KPiArI2luY2x1ZGUgPGxpbnV4L2h3bW9u LXN5c2ZzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L211 dGV4Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsKPiArI2luY2x1ZGUgImFkdDd4 MTAuaCIKPiArCj4gKy8qCj4gKyAqIEFEVDdYMTAgc3RhdHVzCj4gKyAqLwo+ICsjZGVmaW5lIEFE VDdYMTBfU1RBVF9UX0xPVwkJKDEgPDwgNCkKPiArI2RlZmluZSBBRFQ3WDEwX1NUQVRfVF9ISUdI CQkoMSA8PCA1KQo+ICsjZGVmaW5lIEFEVDdYMTBfU1RBVF9UX0NSSVQJCSgxIDw8IDYpCj4gKyNk ZWZpbmUgQURUN1gxMF9TVEFUX05PVF9SRFkJCSgxIDw8IDcpCj4gKwo+ICsvKgo+ICsgKiBBRFQ3 WDEwIGNvbmZpZwo+ICsgKi8KPiArI2RlZmluZSBBRFQ3WDEwX0ZBVUxUX1FVRVVFX01BU0sJKDEg PDwgMCB8IDEgPDwgMSkKPiArI2RlZmluZSBBRFQ3WDEwX0NUX1BPTEFSSVRZCQkoMSA8PCAyKQo+ ICsjZGVmaW5lIEFEVDdYMTBfSU5UX1BPTEFSSVRZCQkoMSA8PCAzKQo+ICsjZGVmaW5lIEFEVDdY MTBfRVZFTlRfTU9ERQkJKDEgPDwgNCkKPiArI2RlZmluZSBBRFQ3WDEwX01PREVfTUFTSwkJKDEg PDwgNSB8IDEgPDwgNikKPiArI2RlZmluZSBBRFQ3WDEwX0ZVTEwJCQkoMCA8PCA1IHwgMCA8PCA2 KQo+ICsjZGVmaW5lIEFEVDdYMTBfUEQJCQkoMSA8PCA1IHwgMSA8PCA2KQo+ICsjZGVmaW5lIEFE VDdYMTBfUkVTT0xVVElPTgkJKDEgPDwgNykKPiArCj4gKy8qCj4gKyAqIEFEVDdYMTAgbWFza3MK PiArICovCj4gKyNkZWZpbmUgQURUN1gxMF9UMTNfVkFMVUVfTUFTSwkJMHhGRkY4Cj4gKyNkZWZp bmUgQURUN1gxMF9UX0hZU1RfTUFTSwkJMHhGCj4gKwo+ICsvKiBzdHJhaWdodCBmcm9tIHRoZSBk YXRhc2hlZXQgKi8KPiArI2RlZmluZSBBRFQ3WDEwX1RFTVBfTUlOICgtNTUwMDApCj4gKyNkZWZp bmUgQURUN1gxMF9URU1QX01BWCAxNTAwMDAKPiArCj4gKy8qIEVhY2ggY2xpZW50IGhhcyB0aGlz IGFkZGl0aW9uYWwgZGF0YSAqLwo+ICtzdHJ1Y3QgYWR0N3gxMF9kYXRhIHsKPiArCWNvbnN0IHN0 cnVjdCBhZHQ3eDEwX29wcyAqb3BzOwo+ICsJY29uc3QgY2hhcgkJKm5hbWU7Cj4gKwlzdHJ1Y3Qg ZGV2aWNlCQkqaHdtb25fZGV2Owo+ICsJc3RydWN0IG11dGV4CQl1cGRhdGVfbG9jazsKPiArCXU4 CQkJY29uZmlnOwo+ICsJdTgJCQlvbGRjb25maWc7Cj4gKwlib29sCQkJdmFsaWQ7CQkvKiB0cnVl IGlmIHJlZ2lzdGVycyB2YWxpZCAqLwo+ICsJdW5zaWduZWQgbG9uZwkJbGFzdF91cGRhdGVkOwkv KiBJbiBqaWZmaWVzICovCj4gKwlzMTYJCQl0ZW1wWzRdOwkvKiBSZWdpc3RlciB2YWx1ZXMsCj4g KwkJCQkJCSAgIDAgPSBpbnB1dAo+ICsJCQkJCQkgICAxID0gaGlnaAo+ICsJCQkJCQkgICAyID0g bG93Cj4gKwkJCQkJCSAgIDMgPSBjcml0aWNhbCAqLwo+ICsJdTgJCQloeXN0OwkJLyogaHlzdGVy ZXNpcyBvZmZzZXQgKi8KPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgYWR0N3gxMF9yZWFkX2J5dGUo c3RydWN0IGRldmljZSAqZGV2LCB1OCByZWcpCj4gK3sKPiArCXN0cnVjdCBhZHQ3eDEwX2RhdGEg KmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCXJldHVybiBkLT5vcHMtPnJlYWRfYnl0ZShk ZXYsIHJlZyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWR0N3gxMF93cml0ZV9ieXRlKHN0cnVj dCBkZXZpY2UgKmRldiwgdTggcmVnLCB1OCBkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgYWR0N3gxMF9k YXRhICpkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwlyZXR1cm4gZC0+b3BzLT53cml0ZV9i eXRlKGRldiwgcmVnLCBkYXRhKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZHQ3eDEwX3JlYWRf d29yZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4IHJlZykKPiArewo+ICsJc3RydWN0IGFkdDd4MTBf ZGF0YSAqZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJcmV0dXJuIGQtPm9wcy0+cmVhZF93 b3JkKGRldiwgcmVnKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBhZHQ3eDEwX3dyaXRlX3dvcmQo c3RydWN0IGRldmljZSAqZGV2LCB1OCByZWcsIHUxNiBkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgYWR0 N3gxMF9kYXRhICpkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwlyZXR1cm4gZC0+b3BzLT53 cml0ZV93b3JkKGRldiwgcmVnLCBkYXRhKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHU4IEFE VDdYMTBfUkVHX1RFTVBbNF0gPSB7Cj4gKwlBRFQ3WDEwX1RFTVBFUkFUVVJFLAkJLyogaW5wdXQg Ki8KPiArCUFEVDdYMTBfVF9BTEFSTV9ISUdILAkJLyogaGlnaCAqLwo+ICsJQURUN1gxMF9UX0FM QVJNX0xPVywJCS8qIGxvdyAqLwo+ICsJQURUN1gxMF9UX0NSSVQsCQkJLyogY3JpdGljYWwgKi8K PiArfTsKPiArCj4gK3N0YXRpYyBpbnQgYWR0N3gxMF90ZW1wX3JlYWR5KHN0cnVjdCBkZXZpY2Ug KmRldikKPiArewo+ICsJaW50IGksIHN0YXR1czsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgNjsg aSsrKSB7Cj4gKwkJc3RhdHVzID0gYWR0N3gxMF9yZWFkX2J5dGUoZGV2LCBBRFQ3WDEwX1NUQVRV Uyk7Cj4gKwkJaWYgKHN0YXR1cyA8IDApCj4gKwkJCXJldHVybiBzdGF0dXM7Cj4gKwkJaWYgKCEo c3RhdHVzICYgQURUN1gxMF9TVEFUX05PVF9SRFkpKQo+ICsJCQlyZXR1cm4gMDsKPiArCQltc2xl ZXAoNjApOwo+ICsJfQo+ICsJcmV0dXJuIC1FVElNRURPVVQ7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgYWR0N3gxMF91cGRhdGVfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVj dCBhZHQ3eDEwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCWludCByZXQg PSAwOwo+ICsKPiArCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKPiArCj4gKwlpZiAo dGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiArIEhaIC8gMikKPiAr CSAgICB8fCAhZGF0YS0+dmFsaWQpIHsKPiArCQlpbnQgdGVtcDsKPiArCj4gKwkJZGV2X2RiZyhk ZXYsICJTdGFydGluZyB1cGRhdGVcbiIpOwo+ICsKPiArCQlyZXQgPSBhZHQ3eDEwX3RlbXBfcmVh ZHkoZGV2KTsgLyogY2hlY2sgZm9yIG5ldyB2YWx1ZSAqLwo+ICsJCWlmIChyZXQpCj4gKwkJCWdv dG8gYWJvcnQ7Cj4gKwo+ICsJCXRlbXAgPSBhZHQ3eDEwX3JlYWRfd29yZChkZXYsIEFEVDdYMTBf UkVHX1RFTVBbMF0pOwo+ICsJCWlmICh0ZW1wIDwgMCkgewo+ICsJCQlyZXQgPSB0ZW1wOwo+ICsJ CQlkZXZfZGJnKGRldiwgIkZhaWxlZCB0byByZWFkIHZhbHVlOiByZWcgJWQsIGVycm9yICVkXG4i LAo+ICsJCQkJQURUN1gxMF9SRUdfVEVNUFswXSwgcmV0KTsKPiArCQkJZ290byBhYm9ydDsKPiAr CQl9Cj4gKwkJZGF0YS0+dGVtcFswXSA9IHRlbXA7Cj4gKwkJZGF0YS0+bGFzdF91cGRhdGVkID0g amlmZmllczsKPiArCQlkYXRhLT52YWxpZCA9IHRydWU7Cj4gKwl9Cj4gKwo+ICthYm9ydDoKPiAr CW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArc3RhdGljIGludCBhZHQ3eDEwX2ZpbGxfY2FjaGUoc3RydWN0IGRldmljZSAqZGV2KQo+ ICt7Cj4gKwlzdHJ1Y3QgYWR0N3gxMF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7 Cj4gKwlpbnQgcmV0Owo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJ WkUoZGF0YS0+dGVtcCk7IGkrKykgewo+ICsJCXJldCA9IGFkdDd4MTBfcmVhZF93b3JkKGRldiwg QURUN1gxMF9SRUdfVEVNUFtpXSk7Cj4gKwkJaWYgKHJldCA8IDApIHsKPiArCQkJZGV2X2RiZyhk ZXYsICJGYWlsZWQgdG8gcmVhZCB2YWx1ZTogcmVnICVkLCBlcnJvciAlZFxuIiwKPiArCQkJCUFE VDdYMTBfUkVHX1RFTVBbaV0sIHJldCk7Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsJCWRh dGEtPnRlbXBbaV0gPSByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gYWR0N3gxMF9yZWFkX2J5dGUo ZGV2LCBBRFQ3WDEwX1RfSFlTVCk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9kYmcoZGV2 LCAiRmFpbGVkIHRvIHJlYWQgdmFsdWU6IHJlZyAlZCwgZXJyb3IgJWRcbiIsCj4gKwkJCQlBRFQ3 WDEwX1RfSFlTVCwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsJZGF0YS0+aHlzdCA9 IHJldDsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHMxNiBBRFQ3WDEwX1RF TVBfVE9fUkVHKGxvbmcgdGVtcCkKPiArewo+ICsJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKGNs YW1wX3ZhbCh0ZW1wLCBBRFQ3WDEwX1RFTVBfTUlOLAo+ICsJCQkJCSAgICAgICBBRFQ3WDEwX1RF TVBfTUFYKSAqIDEyOCwgMTAwMCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgQURUN1gxMF9SRUdf VE9fVEVNUChzdHJ1Y3QgYWR0N3gxMF9kYXRhICpkYXRhLCBzMTYgcmVnKQo+ICt7Cj4gKwkvKiBp biAxMyBiaXQgbW9kZSwgYml0cyAwLTIgYXJlIHN0YXR1cyBmbGFncyAtIG1hc2sgdGhlbSBvdXQg Ki8KPiArCWlmICghKGRhdGEtPmNvbmZpZyAmIEFEVDdYMTBfUkVTT0xVVElPTikpCj4gKwkJcmVn ICY9IEFEVDdYMTBfVDEzX1ZBTFVFX01BU0s7Cj4gKwkvKgo+ICsJICogdGVtcGVyYXR1cmUgaXMg c3RvcmVkIGluIHR3b3MgY29tcGxlbWVudCBmb3JtYXQsIGluIHN0ZXBzIG9mCj4gKwkgKiAxLzEy OMKwQwo+ICsJICovCj4gKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QocmVnICogMTAwMCwgMTI4 KTsKPiArfQo+ICsKPiArLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCj4gKwo+ICsvKiBzeXNmcyBhdHRyaWJ1 dGVzIGZvciBod21vbiAqLwo+ICsKPiArc3RhdGljIHNzaXplX3QgYWR0N3gxMF9zaG93X3RlbXAo c3RydWN0IGRldmljZSAqZGV2LAo+ICsJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwK PiArCQkJCSBjaGFyICpidWYpCj4gK3sKPiArCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0 ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7Cj4gKwlzdHJ1Y3QgYWR0N3gxMF9kYXRh ICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwo+ICsKPiArCWlmIChhdHRyLT5pbmRl eCA9PSAwKSB7Cj4gKwkJaW50IHJldDsKPiArCj4gKwkJcmV0ID0gYWR0N3gxMF91cGRhdGVfdGVt cChkZXYpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIEFEVDdYMTBfUkVHX1RPX1RFTVAoZGF0YSwKPiArCQkg ICAgICAgZGF0YS0+dGVtcFthdHRyLT5pbmRleF0pKTsKPiArfQo+ICsKPiArc3RhdGljIHNzaXpl X3QgYWR0N3gxMF9zZXRfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwkJCQlzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqZGEsCj4gKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkK PiArewo+ICsJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29y X2Rldl9hdHRyKGRhKTsKPiArCXN0cnVjdCBhZHQ3eDEwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKPiArCWludCBuciA9IGF0dHItPmluZGV4Owo+ICsJbG9uZyB0ZW1wOwo+ICsJ aW50IHJldDsKPiArCj4gKwlyZXQgPSBrc3RydG9sKGJ1ZiwgMTAsICZ0ZW1wKTsKPiArCWlmIChy ZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9j ayk7Cj4gKwlkYXRhLT50ZW1wW25yXSA9IEFEVDdYMTBfVEVNUF9UT19SRUcodGVtcCk7Cj4gKwly ZXQgPSBhZHQ3eDEwX3dyaXRlX3dvcmQoZGV2LCBBRFQ3WDEwX1JFR19URU1QW25yXSwgZGF0YS0+ dGVtcFtucl0pOwo+ICsJaWYgKHJldCkKPiArCQljb3VudCA9IHJldDsKPiArCW11dGV4X3VubG9j aygmZGF0YS0+dXBkYXRlX2xvY2spOwo+ICsJcmV0dXJuIGNvdW50Owo+ICt9Cj4gKwo+ICtzdGF0 aWMgc3NpemVfdCBhZHQ3eDEwX3Nob3dfdF9oeXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKPiArCQkJ CSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwKPiArCQkJCSAgIGNoYXIgKmJ1ZikKPiAr ewo+ICsJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rl dl9hdHRyKGRhKTsKPiArCXN0cnVjdCBhZHQ3eDEwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKPiArCWludCBuciA9IGF0dHItPmluZGV4Owo+ICsJaW50IGh5c3Q7Cj4gKwo+ICsJ aHlzdCA9IChkYXRhLT5oeXN0ICYgQURUN1gxMF9UX0hZU1RfTUFTSykgKiAxMDAwOwo+ICsKPiAr CS8qCj4gKwkgKiBoeXN0ZXJlc2lzIGlzIHN0b3JlZCBhcyBhIDQgYml0IG9mZnNldCBpbiB0aGUg ZGV2aWNlLCBjb252ZXJ0IGl0Cj4gKwkgKiB0byBhbiBhYnNvbHV0ZSB2YWx1ZQo+ICsJICovCj4g KwlpZiAobnIgPT0gMikJLyogbWluIGhhcyBwb3NpdGl2ZSBvZmZzZXQsIG90aGVycyBoYXZlIG5l Z2F0aXZlICovCj4gKwkJaHlzdCA9IC1oeXN0Owo+ICsJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRc biIsCj4gKwkJICAgICAgIEFEVDdYMTBfUkVHX1RPX1RFTVAoZGF0YSwgZGF0YS0+dGVtcFtucl0p IC0gaHlzdCk7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IGFkdDd4MTBfc2V0X3RfaHlzdChz dHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwK PiArCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCj4gK3sKPiArCXN0cnVjdCBh ZHQ3eDEwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCWludCBsaW1pdCwg cmV0Owo+ICsJbG9uZyBoeXN0Owo+ICsKPiArCXJldCA9IGtzdHJ0b2woYnVmLCAxMCwgJmh5c3Qp Owo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsJLyogY29udmVydCBhYnNvbHV0ZSBo eXN0ZXJlc2lzIHZhbHVlIHRvIGEgNCBiaXQgZGVsdGEgdmFsdWUgKi8KPiArCWxpbWl0ID0gQURU N1gxMF9SRUdfVE9fVEVNUChkYXRhLCBkYXRhLT50ZW1wWzFdKTsKPiArCWh5c3QgPSBjbGFtcF92 YWwoaHlzdCwgQURUN1gxMF9URU1QX01JTiwgQURUN1gxMF9URU1QX01BWCk7Cj4gKwlkYXRhLT5o eXN0ID0gY2xhbXBfdmFsKERJVl9ST1VORF9DTE9TRVNUKGxpbWl0IC0gaHlzdCwgMTAwMCksCj4g KwkJCQkgICAwLCBBRFQ3WDEwX1RfSFlTVF9NQVNLKTsKPiArCXJldCA9IGFkdDd4MTBfd3JpdGVf Ynl0ZShkZXYsIEFEVDdYMTBfVF9IWVNULCBkYXRhLT5oeXN0KTsKPiArCWlmIChyZXQpCj4gKwkJ cmV0dXJuIHJldDsKPiArCj4gKwlyZXR1cm4gY291bnQ7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6 ZV90IGFkdDd4MTBfc2hvd19hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwkJCQkgIHN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICpkYSwKPiArCQkJCSAgY2hhciAqYnVmKQo+ICt7Cj4gKwlzdHJ1 Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGEp Owo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBhZHQ3eDEwX3JlYWRfYnl0ZShkZXYsIEFEVDdY MTBfU1RBVFVTKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0 dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsICEhKHJldCAmIGF0dHItPmluZGV4KSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBzc2l6ZV90IGFkdDd4MTBfc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwK PiArCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsCj4gKwkJCQkgY2hhciAqYnVmKQo+ ICt7Cj4gKwlzdHJ1Y3QgYWR0N3gxMF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7 Cj4gKwo+ICsJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPm5hbWUpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBhZHQ3 eDEwX3Nob3dfdGVtcCwgTlVMTCwgMCk7Cj4gK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVt cDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywKPiArCQkJICBhZHQ3eDEwX3Nob3dfdGVtcCwgYWR0 N3gxMF9zZXRfdGVtcCwgMSk7Cj4gK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWlu LCBTX0lXVVNSIHwgU19JUlVHTywKPiArCQkJICBhZHQ3eDEwX3Nob3dfdGVtcCwgYWR0N3gxMF9z ZXRfdGVtcCwgMik7Cj4gK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdCwgU19J V1VTUiB8IFNfSVJVR08sCj4gKwkJCSAgYWR0N3gxMF9zaG93X3RlbXAsIGFkdDd4MTBfc2V0X3Rl bXAsIDMpOwo+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heF9oeXN0LCBTX0lX VVNSIHwgU19JUlVHTywKPiArCQkJICBhZHQ3eDEwX3Nob3dfdF9oeXN0LCBhZHQ3eDEwX3NldF90 X2h5c3QsIDEpOwo+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21pbl9oeXN0LCBT X0lSVUdPLAo+ICsJCQkgIGFkdDd4MTBfc2hvd190X2h5c3QsIE5VTEwsIDIpOwo+ICtzdGF0aWMg U0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2NyaXRfaHlzdCwgU19JUlVHTywKPiArCQkJICBhZHQ3 eDEwX3Nob3dfdF9oeXN0LCBOVUxMLCAzKTsKPiArc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0 ZW1wMV9taW5fYWxhcm0sIFNfSVJVR08sIGFkdDd4MTBfc2hvd19hbGFybSwKPiArCQkJICBOVUxM LCBBRFQ3WDEwX1NUQVRfVF9MT1cpOwo+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAx X21heF9hbGFybSwgU19JUlVHTywgYWR0N3gxMF9zaG93X2FsYXJtLAo+ICsJCQkgIE5VTEwsIEFE VDdYMTBfU1RBVF9UX0hJR0gpOwo+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2Ny aXRfYWxhcm0sIFNfSVJVR08sIGFkdDd4MTBfc2hvd19hbGFybSwKPiArCQkJICBOVUxMLCBBRFQ3 WDEwX1NUQVRfVF9DUklUKTsKPiArc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIGFk dDd4MTBfc2hvd19uYW1lLCBOVUxMKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICph ZHQ3eDEwX2F0dHJpYnV0ZXNbXSA9IHsKPiArCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQu ZGV2X2F0dHIuYXR0ciwKPiArCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0 dHIsCj4gKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbi5kZXZfYXR0ci5hdHRyLAo+ICsJJnNl bnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0LmRldl9hdHRyLmF0dHIsCj4gKwkmc2Vuc29yX2Rldl9h dHRyX3RlbXAxX21heF9oeXN0LmRldl9hdHRyLmF0dHIsCj4gKwkmc2Vuc29yX2Rldl9hdHRyX3Rl bXAxX21pbl9oeXN0LmRldl9hdHRyLmF0dHIsCj4gKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2Ny aXRfaHlzdC5kZXZfYXR0ci5hdHRyLAo+ICsJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW5fYWxh cm0uZGV2X2F0dHIuYXR0ciwKPiArCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2FsYXJtLmRl dl9hdHRyLmF0dHIsCj4gKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXRfYWxhcm0uZGV2X2F0 dHIuYXR0ciwKPiArCU5VTEwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmli dXRlX2dyb3VwIGFkdDd4MTBfZ3JvdXAgPSB7Cj4gKwkuYXR0cnMgPSBhZHQ3eDEwX2F0dHJpYnV0 ZXMsCj4gK307Cj4gKwo+ICtpbnQgYWR0N3gxMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNv bnN0IGNoYXIgKm5hbWUsCj4gKwkJICBjb25zdCBzdHJ1Y3QgYWR0N3gxMF9vcHMgKm9wcykKPiAr ewo+ICsJc3RydWN0IGFkdDd4MTBfZGF0YSAqZGF0YTsKPiArCWludCByZXQ7Cj4gKwo+ICsJZGF0 YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwo+ICsJaWYg KCFkYXRhKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWRhdGEtPm9wcyA9IG9wczsKPiAr CWRhdGEtPm5hbWUgPSBuYW1lOwo+ICsKPiArCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRhdGEpOwo+ ICsJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwo+ICsKPiArCS8qIGNvbmZpZ3VyZSBh cyBzcGVjaWZpZWQgKi8KPiArCXJldCA9IGFkdDd4MTBfcmVhZF9ieXRlKGRldiwgQURUN1gxMF9D T05GSUcpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkZXZfZGJnKGRldiwgIkNhbid0IHJlYWQg Y29uZmlnPyAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsJZGF0YS0+b2xk Y29uZmlnID0gcmV0Owo+ICsKPiArCS8qCj4gKwkgKiBTZXQgdG8gMTYgYml0IHJlc29sdXRpb24s IGNvbnRpbm91cyBjb252ZXJzaW9uIGFuZCBjb21wYXJhdG9yIG1vZGUuCj4gKwkgKi8KPiArCWRh dGEtPmNvbmZpZyA9IGRhdGEtPm9sZGNvbmZpZzsKPiArCWRhdGEtPmNvbmZpZyAmPSB+QURUN1gx MF9NT0RFX01BU0s7Cj4gKwlkYXRhLT5jb25maWcgfD0gQURUN1gxMF9GVUxMIHwgQURUN1gxMF9S RVNPTFVUSU9OIHwgQURUN1gxMF9FVkVOVF9NT0RFOwo+ICsJaWYgKGRhdGEtPmNvbmZpZyAhPSBk YXRhLT5vbGRjb25maWcpIHsKPiArCQlyZXQgPSBhZHQ3eDEwX3dyaXRlX2J5dGUoZGV2LCBBRFQ3 WDEwX0NPTkZJRywgZGF0YS0+Y29uZmlnKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0 Owo+ICsJfQo+ICsJZGV2X2RiZyhkZXYsICJDb25maWcgJTAyeFxuIiwgZGF0YS0+Y29uZmlnKTsK PiArCj4gKwlyZXQgPSBhZHQ3eDEwX2ZpbGxfY2FjaGUoZGV2KTsKPiArCWlmIChyZXQpCj4gKwkJ Z290byBleGl0X3Jlc3RvcmU7Cj4gKwo+ICsJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KPiAr CXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmYWR0N3gxMF9ncm91cCk7Cj4g KwlpZiAocmV0KQo+ICsJCWdvdG8gZXhpdF9yZXN0b3JlOwo+ICsKPiArCS8qCj4gKwkgKiBUaGUg STJDIGRldmljZSB3aWxsIGFscmVhZHkgaGF2ZSBpdCdzIG93biAnbmFtZScgYXR0cmlidXRlLCBi dXQgZm9yCj4gKwkgKiB0aGUgU1BJIGRldmljZSB3ZSBuZWVkIHRvIHJlZ2lzdGVyIGl0LiBuYW1l IHdpbGwgb25seSBiZSBub24gTlVMTCBpZgo+ICsJICogdGhlIGRldmljZSBkb2Vzbid0IHJlZ2lz dGVyIHRoZSAnbmFtZScgYXR0cmlidXRlIG9uIGl0cyBvd24uCj4gKwkgKi8KPiArCWlmIChuYW1l KSB7Cj4gKwkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX25hbWUpOwo+ ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8gZXhpdF9yZW1vdmU7Cj4gKwl9Cj4gKwo+ICsJZGF0YS0+ aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKGRldik7Cj4gKwlpZiAoSVNfRVJSKGRh dGEtPmh3bW9uX2RldikpIHsKPiArCQlyZXQgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7Cj4g KwkJZ290byBleGl0X3JlbW92ZV9uYW1lOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiAr ZXhpdF9yZW1vdmVfbmFtZToKPiArCWlmIChuYW1lKQo+ICsJCWRldmljZV9yZW1vdmVfZmlsZShk ZXYsICZkZXZfYXR0cl9uYW1lKTsKPiArZXhpdF9yZW1vdmU6Cj4gKwlzeXNmc19yZW1vdmVfZ3Jv dXAoJmRldi0+a29iaiwgJmFkdDd4MTBfZ3JvdXApOwo+ICtleGl0X3Jlc3RvcmU6Cj4gKwlhZHQ3 eDEwX3dyaXRlX2J5dGUoZGV2LCBBRFQ3WDEwX0NPTkZJRywgZGF0YS0+b2xkY29uZmlnKTsKPiAr CXJldHVybiByZXQ7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoYWR0N3gxMF9wcm9iZSk7Cj4g Kwo+ICtpbnQgYWR0N3gxMF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1 Y3QgYWR0N3gxMF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwo+ICsJaHdt b25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKPiArCWlmIChkYXRhLT5uYW1l KQo+ICsJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9uYW1lKTsKPiArCXN5c2Zz X3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmYWR0N3gxMF9ncm91cCk7Cj4gKwlpZiAoZGF0YS0+ b2xkY29uZmlnICE9IGRhdGEtPmNvbmZpZykKPiArCQlhZHQ3eDEwX3dyaXRlX2J5dGUoZGV2LCBB RFQ3WDEwX0NPTkZJRywgZGF0YS0+b2xkY29uZmlnKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gK0VY UE9SVF9TWU1CT0xfR1BMKGFkdDd4MTBfcmVtb3ZlKTsKPiArCj4gKyNpZmRlZiBDT05GSUdfUE1f U0xFRVAKPiArCj4gK3N0YXRpYyBpbnQgYWR0N3gxMF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRl dikKPiArewo+ICsJc3RydWN0IGFkdDd4MTBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOwo+ICsKPiArCXJldHVybiBhZHQ3eDEwX3dyaXRlX2J5dGUoZGV2LCBBRFQ3WDEwX0NPTkZJ RywKPiArCQlkYXRhLT5jb25maWcgfCBBRFQ3WDEwX1BEKTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBhZHQ3eDEwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBhZHQ3 eDEwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCj4gKwlyZXR1cm4gYWR0 N3gxMF93cml0ZV9ieXRlKGRldiwgQURUN1gxMF9DT05GSUcsIGRhdGEtPmNvbmZpZyk7Cj4gK30K PiArCj4gK1NJTVBMRV9ERVZfUE1fT1BTKGFkdDd4MTBfZGV2X3BtX29wcywgYWR0N3gxMF9zdXNw ZW5kLCBhZHQ3eDEwX3Jlc3VtZSk7Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGFkdDd4MTBfZGV2X3Bt X29wcyk7Cj4gKwo+ICsjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCj4gKwo+ICtNT0RVTEVf QVVUSE9SKCJIYXJ0bXV0IEtuYWFjayIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkFEVDc0MTAv QURUNzQyMCwgQURUNzMxMC9BRFQ3MzIwIGNvbW1vbiBjb2RlIik7Cj4gK01PRFVMRV9MSUNFTlNF KCJHUEwiKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZHQ3eDEwLmggYi9kcml2ZXJz L2h3bW9uL2FkdDd4MTAuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u ODAzZDliOQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2h3bW9uL2FkdDd4MTAuaAo+ IEBAIC0wLDAgKzEsMzcgQEAKPiArI2lmbmRlZiBfX0hXTU9OX0FEVDdYMTBfSF9fCj4gKyNkZWZp bmUgX19IV01PTl9BRFQ3WDEwX0hfXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9wbS5oPgo+ICsKPiArLyogQURUNzQxMCByZWdpc3RlcnMgZGVmaW5p dGlvbiAqLwo+ICsjZGVmaW5lIEFEVDdYMTBfVEVNUEVSQVRVUkUJCTAKPiArI2RlZmluZSBBRFQ3 WDEwX1NUQVRVUwkJCTIKPiArI2RlZmluZSBBRFQ3WDEwX0NPTkZJRwkJCTMKPiArI2RlZmluZSBB RFQ3WDEwX1RfQUxBUk1fSElHSAkJNAo+ICsjZGVmaW5lIEFEVDdYMTBfVF9BTEFSTV9MT1cJCTYK PiArI2RlZmluZSBBRFQ3WDEwX1RfQ1JJVAkJCTgKPiArI2RlZmluZSBBRFQ3WDEwX1RfSFlTVAkJ CTB4QQo+ICsjZGVmaW5lIEFEVDdYMTBfSUQJCQkweEIKPiArCj4gK3N0cnVjdCBkZXZpY2U7Cj4g Kwo+ICtzdHJ1Y3QgYWR0N3gxMF9vcHMgewo+ICsJaW50ICgqcmVhZF9ieXRlKShzdHJ1Y3QgZGV2 aWNlICosIHU4IHJlZyk7Cj4gKwlpbnQgKCp3cml0ZV9ieXRlKShzdHJ1Y3QgZGV2aWNlICosIHU4 IHJlZywgdTggZGF0YSk7Cj4gKwlpbnQgKCpyZWFkX3dvcmQpKHN0cnVjdCBkZXZpY2UgKiwgdTgg cmVnKTsKPiArCWludCAoKndyaXRlX3dvcmQpKHN0cnVjdCBkZXZpY2UgKiwgdTggcmVnLCB1MTYg ZGF0YSk7Cj4gK307Cj4gKwo+ICtpbnQgYWR0N3gxMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYs IGNvbnN0IGNoYXIgKm5hbWUsCj4gKwljb25zdCBzdHJ1Y3QgYWR0N3gxMF9vcHMgKm9wcyk7Cj4g K2ludCBhZHQ3eDEwX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ICsKPiArI2lmZGVmIENP TkZJR19QTV9TTEVFUAo+ICtleHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYWR0N3gxMF9k ZXZfcG1fb3BzOwo+ICsjZGVmaW5lIEFEVDdYMTBfREVWX1BNX09QUyAoJmFkdDd4MTBfZGV2X3Bt X29wcykKPiArI2Vsc2UKPiArI2RlZmluZSBBRFQ3WDEwX0RFVl9QTV9PUFMgTlVMTAo+ICsjZW5k aWYKPiArCj4gKyNlbmRpZgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmxtLXNlbnNvcnMgbWFpbGluZyBsaXN0CmxtLXNlbnNvcnNAbG0tc2Vuc29ycy5v cmcKaHR0cDovL2xpc3RzLmxtLXNlbnNvcnMub3JnL21haWxtYW4vbGlzdGluZm8vbG0tc2Vuc29y cw=