From mboxrd@z Thu Jan 1 00:00:00 1970 From: abhinavk@codeaurora.org Subject: Re: [PATCH v3 1/2] drm/panel: Add support for Truly NT35597 panel Date: Fri, 25 May 2018 15:20:12 -0700 Message-ID: <8923a74cd005883b2ceb1ce41fc5c74b@codeaurora.org> References: <1527126241-23491-1-git-send-email-abhinavk@codeaurora.org> <20180524173128.GC16550@jcrouse-lnx.qualcomm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180524173128.GC16550@jcrouse-lnx.qualcomm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Abhinav Kumar Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, thierry.reding@gmail.com, hoegsberg@google.com, linux-arm-msm-owner@vger.kernel.org, chandanu@codeaurora.org List-Id: linux-arm-msm@vger.kernel.org SGkgSm9yZGFuCgpUaGFua3MgZm9yIHRoZSByZXZpZXcuIFdpbGwgZml4IHRoZSBvbmVzIGxpc3Rl ZCBiZWxvdyBhbmQgdXBsb2FkIFY0LgoKQWJoaW5hdgoKT24gMjAxOC0wNS0yNCAxMDozMSwgSm9y ZGFuIENyb3VzZSB3cm90ZToKPiBPbiBXZWQsIE1heSAyMywgMjAxOCBhdCAwNjo0NDowMFBNIC0w NzAwLCBBYmhpbmF2IEt1bWFyIHdyb3RlOgo+PiBBZGQgc3VwcG9ydCBmb3IgVHJ1bHkgTlQzNTU5 NyBwYW5lbCB1c2VkCj4+IGluIE1TTSByZWZlcmVuY2UgcGxhdGZvcm1zLgo+PiAKPj4gVGhpcyBw YW5lbCBzdXBwb3J0cyBib3RoIHNpbmdsZSBEU0kgYW5kIGR1YWwgRFNJCj4+IG1vZGVzLgo+PiAK Pj4gSG93ZXZlciwgdGhpcyBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IG9ubHkgZm9yCj4+IGR1 YWwgRFNJIG1vZGUuCj4+IAo+PiBDaGFuZ2VzIGluIHYzOgo+PiAtIENoYW5nZXMgdG8gY29tbWl0 IHRleHQKPj4gLSBTZXBhcmF0ZWQgdGhlIGRvY3VtZW50YXRpb24gZnJvbSB0aGUgZHJpdmVyIGl0 c2VsZgo+PiAtIEltcHJvdmVkIHRoZSBkb2N1bWVudGF0aW9uIHRvIGNvdmVyIHRoZSBwb3J0IGlu Zm9ybWF0aW9uCj4+IC0gRm9ybWF0dGluZyBmaXhlcyBhbmQgY2hhbmdlcyBpbiBkZWxheXMgaW4g cGFuZWwgc2VxdWVuY2VzCj4+IC0gQ2xlYW5lZCB1cCBwcm9iZSBmdW5jdGlvbgo+PiAKPj4gU2ln bmVkLW9mZi1ieTogQXJjaGl0IFRhbmVqYSA8YXJjaGl0dEBjb2RlYXVyb3JhLm9yZz4KPj4gU2ln bmVkLW9mZi1ieTogQWJoaW5hdiBLdW1hciA8YWJoaW5hdmtAY29kZWF1cm9yYS5vcmc+Cj4+IC0t LQo+PiAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgICAgICAgICAgICAgICB8ICAgOCAr Cj4+ICBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxICsK Pj4gIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1udDM1NTk3LmMgfCA1ODggCj4+ ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gIDMgZmlsZXMgY2hhbmdlZCwgNTk3IGlu c2VydGlvbnMoKykKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZWwv cGFuZWwtdHJ1bHktbnQzNTU5Ny5jCj4+IAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3BhbmVsL0tjb25maWcgCj4+IGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKPj4gaW5k ZXggMjU2ODJmZi4uMmZjZDliMSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVs L0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKPj4gQEAgLTE3 Nyw0ICsxNzcsMTIgQEAgY29uZmlnIERSTV9QQU5FTF9TSVRST05JWF9TVDc3ODlWCj4+ICAJICBT YXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgU2l0cm9uaXgK Pj4gIAkgIFNUNzc4OVYgY29udHJvbGxlciBmb3IgMjQweDMyMCBMQ0QgcGFuZWxzCj4+IAo+PiAr Y29uZmlnIERSTV9QQU5FTF9UUlVMWV9OVDM1NTk3X1dRWEdBCj4+ICsJdHJpc3RhdGUgIlRydWx5 IFdRWEdBIgo+PiArCWRlcGVuZHMgb24gT0YKPj4gKwlkZXBlbmRzIG9uIERSTV9NSVBJX0RTSQo+ PiArCXNlbGVjdCBWSURFT01PREVfSEVMUEVSUwo+PiArCWhlbHAKPj4gKwkgIFNheSBZIGhlcmUg aWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFRydWx5IE5UMzU1OTcgV1FYR0EgCj4+ IER1YWwgRFNJCj4+ICsJICBWaWRlbyBNb2RlIHBhbmVsCj4+ICBlbmRtZW51Cj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgCj4+IGIvZHJpdmVycy9ncHUvZHJt L3BhbmVsL01ha2VmaWxlCj4+IGluZGV4IGYyNmVmYzEuLjA1NmVhOTMgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v cGFuZWwvTWFrZWZpbGUKPj4gQEAgLTE4LDMgKzE4LDQgQEAgb2JqLSQoQ09ORklHX0RSTV9QQU5F TF9TRUlLT180M1dWRjFHKSArPSAKPj4gcGFuZWwtc2Vpa28tNDN3dmYxZy5vCj4+ICBvYmotJChD T05GSUdfRFJNX1BBTkVMX1NIQVJQX0xRMTAxUjFTWDAxKSArPSAKPj4gcGFuZWwtc2hhcnAtbHEx MDFyMXN4MDEubwo+PiAgb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUzA0M1QxTEUwMSkg Kz0gCj4+IHBhbmVsLXNoYXJwLWxzMDQzdDFsZTAxLm8KPj4gIG9iai0kKENPTkZJR19EUk1fUEFO RUxfU0lUUk9OSVhfU1Q3Nzg5VikgKz0gcGFuZWwtc2l0cm9uaXgtc3Q3Nzg5di5vCj4+ICtvYmot JChDT05GSUdfRFJNX1BBTkVMX1RSVUxZX05UMzU1OTdfV1FYR0EpICs9IHBhbmVsLXRydWx5LW50 MzU1OTcubwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5 LW50MzU1OTcuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1bHktbnQzNTU5 Ny5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjUyOTA4NmIKPj4g LS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1bHkt bnQzNTU5Ny5jCj4+IEBAIC0wLDAgKzEsNTg4IEBACj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMAo+IAo+IEkga25vdyBJIHByZWZlcgo+IAo+IC8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wICovCj4gCj4gYnV0IEkgaGF2ZW4ndCBzZWVuIGEgZGVmaW5pdGl2 ZSBydWxsaW5nIG9uZSB3YXkgb3IgdGhlIG90aGVyLgo+IAo+PiArLyogQ29weXJpZ2h0IChjKSAy MDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4gKyAqCj4+ ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIAo+PiBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+PiArICogb25seSB2ZXJzaW9u IDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+ICsgKgo+ PiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCj4+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+PiArICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKi8KPiAKPiBPbmUg b2YgdGhlIHBvaW50cyBvZiB0aGUgU1BEWCB0YWcgaXMgdGhhdCB5b3UgZG9uJ3QgbmVlZCB0byBw cmludCB0aGUgCj4gdGV4dCBvZgo+IHRoZSBsaWNlbnNlIGFueW1vcmUgLSBqdXN0IGFkZCB0aGUg dGFnIGFuZCB0aGUgY29weXJpZ2h0IG5vdGljZS4KPiAKCltBYmhpbmF2XSBZZXMsIHdpbGwgZml4 IHRoaXMgaW4gVjQKCj4+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgo+PiArI2lu Y2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2Nv bnN1bWVyLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcGluY3RybC9jb25zdW1lci5oPgo+PiArCj4+ ICsjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+Cj4+ICsjaW5jbHVkZSA8dmlkZW8vb2Zf dmlkZW9tb2RlLmg+Cj4+ICsjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+Cj4+ICsKPj4gKyNp bmNsdWRlIDxkcm0vZHJtUC5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KPj4gKyNp bmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBjaGFyICog Y29uc3QgcmVndWxhdG9yX25hbWVzW10gPSB7Cj4+ICsJInZkZGEiLAo+PiArCSJ2ZGlzcHAiLAo+ PiArCSJ2ZGlzcG4iCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyByZWd1bGF0 b3JfZW5hYmxlX2xvYWRzW10gPSB7Cj4+ICsJNjIwMDAsCj4+ICsJMTAwMDAwLAo+PiArCTEwMDAw MAo+IAo+IE1pc3NpbmcgYSBjb21tYSBhZnRlciB0aGUgbGFzdCBlbnRyeS4gVGhlc2Ugc2hvdWxk IGJlIGNvbnN0IGlmIHlvdSBjYW4gCj4gbWFrZSB0aGVtCj4gc28uCj4gCltBYmhpbmF2XSBZZXMs IHdpbGwgZml4IHRoaXMgaW4gVjQKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyB1bnNpZ25lZCBsb25n IHJlZ3VsYXRvcl9kaXNhYmxlX2xvYWRzW10gPSB7Cj4+ICsJODAsCj4+ICsJMTAwLAo+PiArCTEw MAo+IAo+IFNhbWUuCj4gCltBYmhpbmF2XSBZZXMsIHdpbGwgZml4IHRoaXMgaW4gVjQKPj4gK307 Cj4+ICsKPj4gK3N0cnVjdCB0cnVseV93cXhnYSB7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ PiArCXN0cnVjdCBkcm1fcGFuZWwgcGFuZWw7Cj4+ICsKPj4gKwlzdHJ1Y3QgcmVndWxhdG9yX2J1 bGtfZGF0YSBzdXBwbGllc1tBUlJBWV9TSVpFKHJlZ3VsYXRvcl9uYW1lcyldOwo+PiArCj4+ICsJ c3RydWN0IGdwaW9fZGVzYyAqcmVzZXRfZ3BpbzsKPj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICptb2Rl X2dwaW87Cj4+ICsKPj4gKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0Owo+PiAr CXN0cnVjdCB2aWRlb21vZGUgdm07Cj4+ICsKPj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpk c2lbMl07Cj4+ICsKPj4gKwlib29sIHByZXBhcmVkOwo+PiArCWJvb2wgZW5hYmxlZDsKPj4gK307 Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRydWx5X3dxeGdhICpwYW5lbF90b190cnVs eV93cXhnYShzdHJ1Y3QgCj4+IGRybV9wYW5lbCAqcGFuZWwpCj4+ICt7Cj4+ICsJcmV0dXJuIGNv bnRhaW5lcl9vZihwYW5lbCwgc3RydWN0IHRydWx5X3dxeGdhLCBwYW5lbCk7Cj4+ICt9Cj4gCj4g UGVyc29uYWwgcHJlZmVyZW5jZSBmb3IgbWUgaXMgdG8gbWFrZSB0aGVzZSBhIG1hY3JvIHNpbmNl IHRoZXkgdGFrZSB1cCAKPiBsZXNzCj4gc3BhY2UsIGJ1dCBJJ2xsIGxlYXZlIHRoZSBmaW5hbCBk ZWNpc2lvbiB0byB0aGUgbWFpbnRhaW5lci4KPiAKW0FiaGluYXZdIE90aGVyIHBhbmVscyBhcmUg ZG9pbmcgdGhlIHNhbWUuIFNvIEkgd2lsbCBsZWF2ZSB0aGlzIGFzIGl0IGlzIAp1bmxlc3MKb3Ro ZXJzIGhhdmUgYSBjb25jZXJuLgoKPj4gK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcG93ZXJfb24o c3RydWN0IHRydWx5X3dxeGdhICpjdHgpCj4+ICt7Cj4+ICsJaW50IHJldCwgaTsKPj4gKwo+PiAr CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpOyBpKyspIHsKPj4gKwkJ cmV0ID0gcmVndWxhdG9yX3NldF9sb2FkKGN0eC0+c3VwcGxpZXNbaV0uY29uc3VtZXIsCj4+ICsJ CQkJCXJlZ3VsYXRvcl9lbmFibGVfbG9hZHNbaV0pOwo+PiArCQlpZiAocmV0KQo+PiArCQkJcmV0 dXJuIHJldDsKPj4gKwl9Cj4+ICoKPj4gKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJS QVlfU0laRShjdHgtPnN1cHBsaWVzKSwgCj4+IGN0eC0+c3VwcGxpZXMpOwo+PiArCWlmIChyZXQg PCAwKQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJbXNsZWVwKDIwKTsKPj4gKwlncGlvZF9z ZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAxKTsKPj4gKwltc2xlZXAoMjApOwo+PiArCWdwaW9k X3NldF92YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDApOwo+PiArCW1zbGVlcCgyMCk7Cj4+ICsJZ3Bp b2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMSk7Cj4+ICsJbXNsZWVwKDUwKTsKPj4gKwo+ PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRydWx5X3dxeGdhX3Bvd2Vy X29mZihzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCkKPj4gK3sKPj4gKwlpbnQgcmV0LCBpOwo+PiAr Cj4+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMCk7Cj4+ICsKPj4gKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKTsgaSsrKSB7Cj4+ICsJCXJldCA9 IHJlZ3VsYXRvcl9zZXRfbG9hZChjdHgtPnN1cHBsaWVzW2ldLmNvbnN1bWVyLAo+PiArCQkJCXJl Z3VsYXRvcl9kaXNhYmxlX2xvYWRzW2ldKTsKPj4gKwkJaWYgKHJldCkKPj4gKwkJCXJldHVybiBy ZXQ7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlf U0laRShjdHgtPnN1cHBsaWVzKSwgCj4+IGN0eC0+c3VwcGxpZXMpOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IHRydWx5X3dxeGdhX2Rpc2FibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4+ ICt7Cj4+ICsJc3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBwYW5lbF90b190cnVseV93cXhnYShw YW5lbCk7Cj4+ICsKPj4gKwlpZiAoIWN0eC0+ZW5hYmxlZCkKPj4gKwkJcmV0dXJuIDA7Cj4+ICsK Pj4gKwlpZiAoY3R4LT5iYWNrbGlnaHQpIHsKPj4gKwkJY3R4LT5iYWNrbGlnaHQtPnByb3BzLnBv d2VyID0gRkJfQkxBTktfUE9XRVJET1dOOwo+PiArCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhj dHgtPmJhY2tsaWdodCk7Cj4+ICsJfQo+PiArCj4+ICsJY3R4LT5lbmFibGVkID0gZmFsc2U7Cj4+ ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfdW5wcmVw YXJlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+PiArewo+PiArCXN0cnVjdCB0cnVseV93cXhn YSAqY3R4ID0gcGFuZWxfdG9fdHJ1bHlfd3F4Z2EocGFuZWwpOwo+PiArCXN0cnVjdCBtaXBpX2Rz aV9kZXZpY2UgKipkc2lzID0gY3R4LT5kc2k7Cj4+ICsJaW50IHJldCA9IDAsIGk7Cj4+ICsKPj4g KwlpZiAoIWN0eC0+cHJlcGFyZWQpCj4+ICsJCXJldHVybiAwOwo+PiArCj4+ICsJZHNpc1swXS0+ bW9kZV9mbGFncyA9IDA7Cj4+ICsJZHNpc1sxXS0+bW9kZV9mbGFncyA9IDA7Cj4+ICsKPj4gKwlm b3IgKGkgPSAwOyBpIDwgMjsgaSsrKQo+PiArCQlpZiAobWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5 X29mZihkc2lzW2ldKSA8IDApCj4+ICsJCQlyZXQgPSAtRUNPTU07Cj4+ICsKPj4gKwltc2xlZXAo MTIwKTsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCj4+ICsJCWlmIChtaXBpX2Rz aV9kY3NfZW50ZXJfc2xlZXBfbW9kZShkc2lzW2ldKSA8IDApCj4+ICsJCQlyZXQgPSAtRUNPTU07 Cj4+ICsKPj4gKwl0cnVseV93cXhnYV9wb3dlcl9vZmYoY3R4KTsKPj4gKwo+PiArCWN0eC0+cHJl cGFyZWQgPSBmYWxzZTsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICsjZGVmaW5lIE1B WF9MRU4JNQo+PiArc3RydWN0IHsKPj4gKwl1OCBjb21tYW5kc1tNQVhfTEVOXTsKPj4gKwlpbnQg c2l6ZTsKPj4gK30gcGFuZWxfY21kc1tdID0geyAvKiBDTUQyX1AwICovCj4+ICsJCSAgIHsgeyAw eGZmLCAweDIwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4ZmIsIDB4MDEgfSwgMiB9LAo+PiArCQkg ICB7IHsgMHgwMCwgMHgwMSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDAxLCAweDU1IH0sIDIgfSwK Pj4gKwkJICAgeyB7IDB4MDIsIDB4NDUgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgwNSwgMHg0MCB9 LCAyIH0sCj4+ICsJCSAgIHsgeyAweDA2LCAweDE5IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MDcs IDB4MWUgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgwYiwgMHg3MyB9LCAyIH0sCj4+ICsJCSAgIHsg eyAweDBjLCAweDczIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MGUsIDB4YjAgfSwgMiB9LAo+PiAr CQkgICB7IHsgMHgwZiwgMHhhZSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDExLCAweGI4IH0sIDIg fSwKPj4gKwkJICAgeyB7IDB4MTMsIDB4MDAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg1OCwgMHg4 MCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDU5LCAweDAxIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4 NWEsIDB4MDAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg1YiwgMHgwMSB9LCAyIH0sCj4+ICsJCSAg IHsgeyAweDVjLCAweDgwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NWQsIDB4ODEgfSwgMiB9LAo+ PiArCQkgICB7IHsgMHg1ZSwgMHgwMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDVmLCAweDAxIH0s IDIgfSwKPj4gKwkJICAgeyB7IDB4NzIsIDB4MTEgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg2OCwg MHgwMyB9LCAyIH0sCj4+ICsJCSAgIC8qIENNRDJfUDQgKi8KPj4gKwkJICAgeyB7IDB4RkYsIDB4 MjQgfSwgMiB9LAo+PiArCQkgICB7IHsgMHhGQiwgMHgwMSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAw eDAwLCAweDFDIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MDEsIDB4MEIgfSwgMiB9LAo+PiArCQkg ICB7IHsgMHgwMiwgMHgwQyB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDAzLCAweDAxIH0sIDIgfSwK Pj4gKwkJICAgeyB7IDB4MDQsIDB4MEYgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgwNSwgMHgxMCB9 LCAyIH0sCj4+ICsJCSAgIHsgeyAweDA2LCAweDEwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MDcs IDB4MTAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgwOCwgMHg4OSB9LCAyIH0sCj4+ICsJCSAgIHsg eyAweDA5LCAweDhBIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MEEsIDB4MTMgfSwgMiB9LAo+PiAr CQkgICB7IHsgMHgwQiwgMHgxMyB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDBDLCAweDE1IH0sIDIg fSwKPj4gKwkJICAgeyB7IDB4MEQsIDB4MTUgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgwRSwgMHgx NyB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDBGLCAweDE3IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4 MTAsIDB4MUMgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgxMSwgMHgwQiB9LCAyIH0sCj4+ICsJCSAg IHsgeyAweDEyLCAweDBDIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MTMsIDB4MDEgfSwgMiB9LAo+ PiArCQkgICB7IHsgMHgxNCwgMHgwRiB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDE1LCAweDEwIH0s IDIgfSwKPj4gKwkJICAgeyB7IDB4MTYsIDB4MTAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgxNywg MHgxMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDE4LCAweDg5IH0sIDIgfSwKPj4gKwkJICAgeyB7 IDB4MTksIDB4OEEgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgxQSwgMHgxMyB9LCAyIH0sCj4+ICsJ CSAgIHsgeyAweDFCLCAweDEzIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MUMsIDB4MTUgfSwgMiB9 LAo+PiArCQkgICB7IHsgMHgxRCwgMHgxNSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDFFLCAweDE3 IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MUYsIDB4MTcgfSwgMiB9LAo+PiArCQkgICAvKiBTVFYg Ki8KPj4gKwkJICAgeyB7IDB4MjAsIDB4NDAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgyMSwgMHgw MSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDIyLCAweDAwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4 MjMsIDB4NDAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgyNCwgMHg0MCB9LCAyIH0sCj4+ICsJCSAg IHsgeyAweDI1LCAweDZEIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MjYsIDB4NDAgfSwgMiB9LAo+ PiArCQkgICB7IHsgMHgyNywgMHg0MCB9LCAyIH0sCj4+ICsJCSAgIC8qIFZlbmQgKi8KPj4gKwkJ ICAgeyB7IDB4RTAsIDB4MDAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHhEQywgMHgyMSB9LCAyIH0s Cj4+ICsJCSAgIHsgeyAweERELCAweDIyIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4REUsIDB4MDcg fSwgMiB9LAo+PiArCQkgICB7IHsgMHhERiwgMHgwNyB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweEUz LCAweDZEIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4RTEsIDB4MDcgfSwgMiB9LAo+PiArCQkgICB7 IHsgMHhFMiwgMHgwNyB9LCAyIH0sCj4+ICsJCSAgIC8qIFVEICovCj4+ICsJCSAgIHsgeyAweDI5 LCAweEQ4IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MkEsIDB4MkEgfSwgMiB9LAo+PiArCQkgICAv KiBDTEsgKi8KPj4gKwkJICAgeyB7IDB4NEIsIDB4MDMgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg0 QywgMHgxMSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDRELCAweDEwIH0sIDIgfSwKPj4gKwkJICAg eyB7IDB4NEUsIDB4MDEgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg0RiwgMHgwMSB9LCAyIH0sCj4+ ICsJCSAgIHsgeyAweDUwLCAweDEwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NTEsIDB4MDAgfSwg MiB9LAo+PiArCQkgICB7IHsgMHg1MiwgMHg4MCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDUzLCAw eDAwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NTYsIDB4MDAgfSwgMiB9LAo+PiArCQkgICB7IHsg MHg1NCwgMHgwNyB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDU4LCAweDA3IH0sIDIgfSwKPj4gKwkJ ICAgeyB7IDB4NTUsIDB4MjUgfSwgMiB9LAo+PiArCQkgICAvKiBSZXNldCBYRE9OQiAqLwo+PiAr CQkgICB7IHsgMHg1QiwgMHg0MyB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDVDLCAweDAwIH0sIDIg fSwKPj4gKwkJICAgeyB7IDB4NUYsIDB4NzMgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg2MCwgMHg3 MyB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDYzLCAweDIyIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4 NjQsIDB4MDAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg2NywgMHgwOCB9LCAyIH0sCj4+ICsJCSAg IHsgeyAweDY4LCAweDA0IH0sIDIgfSwKPj4gKwkJICAgLyogUmVzb2x1dGlvbjoxNDQweDI1NjAg Ki8KPj4gKwkJICAgeyB7IDB4NzIsIDB4MDIgfSwgMiB9LAo+PiArCQkgICAvKiBtdXggKi8KPj4g KwkJICAgeyB7IDB4N0EsIDB4ODAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg3QiwgMHg5MSB9LCAy IH0sCj4+ICsJCSAgIHsgeyAweDdDLCAweEQ4IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4N0QsIDB4 NjAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg3RiwgMHgxNSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAw eDc1LCAweDE1IH0sIDIgfSwKPj4gKwkJICAgLyogQUJPRkYgKi8KPj4gKwkJICAgeyB7IDB4QjMs IDB4QzAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHhCNCwgMHgwMCB9LCAyIH0sCj4+ICsJCSAgIHsg eyAweEI1LCAweDAwIH0sIDIgfSwKPj4gKwkJICAgLyogU291cmNlIEVRICovCj4+ICsJCSAgIHsg eyAweDc4LCAweDAwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NzksIDB4MDAgfSwgMiB9LAo+PiAr CQkgICB7IHsgMHg4MCwgMHgwMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDgzLCAweDAwIH0sIDIg fSwKPj4gKwkJICAgLyogRlAgQlAgKi8KPj4gKwkJICAgeyB7IDB4OTMsIDB4MEEgfSwgMiB9LAo+ PiArCQkgICB7IHsgMHg5NCwgMHgwQSB9LCAyIH0sCj4+ICsJCSAgIC8qIEludmVyc2lvbiBUeXBl ICovCj4+ICsJCSAgIHsgeyAweDhBLCAweDAwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4OUIsIDB4 RkYgfSwgMiB9LAo+PiArCQkgICAvKiBJTUdTV0FQID0xIEBQb3J0U3dhcD0xICovCj4+ICsJCSAg IHsgeyAweDlELCAweEIwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4OUYsIDB4NjMgfSwgMiB9LAo+ PiArCQkgICB7IHsgMHg5OCwgMHgxMCB9LCAyIH0sCj4+ICsJCSAgIC8qIEZSTSAqLwo+PiArCQkg ICB7IHsgMHhFQywgMHgwMCB9LCAyIH0sCj4+ICsJCSAgIC8qIENNRDEgKi8KPj4gKwkJICAgeyB7 IDB4RkYsIDB4MTAgfSwgMiB9LAo+PiArCQkgICAgLyogVkJQK1ZTQT0sVkZQID0gMTBIICovCj4+ ICsJCSAgIHsgeyAweDNCLCAweDAzLCAweDBBLCAweDBBLCB9LCA0IH0sCj4+ICsJCSAgIC8qIEZU RSBvbiAqLwo+PiArCQkgICB7IHsgMHgzNSwgMHgwMCB9LCAyIH0sCj4+ICsJCSAgIC8qIEVOX0JL ID0xKGF1dG8gYmxhY2spICovCj4+ICsJCSAgIHsgeyAweEU1LCAweDAxIH0sIDIgfSwKPj4gKwkJ ICAgLyogQ01EIG1vZGUoMTApIFZETyBtb2RlKDAzKSAqLwo+PiArCQkgICB7IHsgMHhCQiwgMHgw MyB9LCAyIH0sCj4+ICsJCSAgIC8qIE5vbiBSZWxvYWQgTVRQICovCj4+ICsJCSAgIHsgeyAweEZC LCAweDAxIH0sIDIgfSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcHJl cGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKPj4gK3sKPj4gKwlzdHJ1Y3QgdHJ1bHlfd3F4 Z2EgKmN0eCA9IHBhbmVsX3RvX3RydWx5X3dxeGdhKHBhbmVsKTsKPj4gKwlzdHJ1Y3QgbWlwaV9k c2lfZGV2aWNlICoqZHNpcyA9IGN0eC0+ZHNpOwo+PiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2Ug KmQ7Cj4+ICsJaW50IHJldCwgaSwgajsKPj4gKwo+PiArCWlmIChjdHgtPnByZXBhcmVkKQo+PiAr CQlyZXR1cm4gMDsKPj4gKwo+PiArCXJldCA9IHRydWx5X3dxeGdhX3Bvd2VyX29uKGN0eCk7Cj4+ ICsJaWYgKHJldCA8IDApCj4+ICsJCXJldHVybiByZXQ7Cj4+ICsKPj4gKwlkc2lzWzBdLT5tb2Rl X2ZsYWdzIHw9IE1JUElfRFNJX01PREVfTFBNOwo+PiArCWRzaXNbMV0tPm1vZGVfZmxhZ3MgfD0g TUlQSV9EU0lfTU9ERV9MUE07Cj4+ICsKPj4gKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShw YW5lbF9jbWRzKTsgaisrKSB7Cj4+ICsJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKPj4gKwkJ CWQgPSBkc2lzW2ldOwo+IAo+IGQgYXBwZWFycyB0byBiZSB1bnVzZWQuCltBYmhpbmF2XSBUaGFu a3MgZm9yIGNhdGNoaW5nIHRoaXMuIFdpbGwgZml4IHRoaXMgaW4gVjQuCj4gCj4+ICsJCQlyZXQg PSBtaXBpX2RzaV9kY3Nfd3JpdGVfYnVmZmVyKGRzaXNbaV0sCj4+ICsJCQkJCXBhbmVsX2NtZHNb al0uY29tbWFuZHMsCj4+ICsJCQkJCXBhbmVsX2NtZHNbal0uc2l6ZSk7Cj4+ICsJCQlpZiAocmV0 IDwgMCkgewo+PiArCQkJCWRldl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8gY21kIG5vICVkLCBl cnI6ICVkXG4iLAo+IAo+IFRoaXMgaXMgYSBmYWlybHkgb3BhcXVlIGVycm9yIG1lc3NhZ2UuICBJ IHRoaW5rIG5vIGlzIHNob3J0IGZvciAKPiAibnVtYmVyIiBidXQKPiB0aGlzIGNvdWxkIHVzZSBh IGJpdCBvZiByZXdyaXRlLgpbQWJoaW5hdl0gWWVzLCB3aWxsIGZpeCB0aGlzIGluIFY0Cj4gCj4+ ICsJCQkJCQlqLCByZXQpOwo+PiArCQkJCXJldHVybiByZXQ7Cj4+ICsJCQl9Cj4+ICsJCX0KPj4g Kwl9Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQo+PiArCQlpZiAobWlwaV9kc2lf ZGNzX2V4aXRfc2xlZXBfbW9kZShkc2lzW2ldKSA8IDApIHsKPj4gKwkJCWRldl9lcnIoY3R4LT5k ZXYsICJmYWlsZWQgdG8gZXhpdCBzbGVlcCBtb2RlXG4iKTsKPj4gKwkJCXJldHVybiAtRUNPTU07 Cj4+ICsJCX0KPiAKPiBJIHdvdWxkIHByZWZlciBicmFja2V0cyBmb3IgdGhlIGZvciBsb29wIHRv by4KW0FiaGluYXZdIFllcywgd2lsbCBmaXggdGhpcyBpbiBWNAo+IAo+PiArCW1zbGVlcCg3OCk7 Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQo+PiArCQlpZiAobWlwaV9kc2lfZGNz X3NldF9kaXNwbGF5X29uKGRzaXNbaV0pIDwgMCkgewo+PiArCQkJZGV2X2VycihjdHgtPmRldiwg ImZhaWxlZCB0byBzZW5kIGRpc3BsYXkgb25cbiIpOwo+PiArCQkJcmV0dXJuIC1FQ09NTTsKPj4g KwkJfQo+PiArCW1zbGVlcCg3OCk7Cj4+ICsKPj4gKwljdHgtPnByZXBhcmVkID0gdHJ1ZTsKPj4g Kwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRydWx5X3dxeGdhX2Vu YWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKPj4gK3sKPj4gKwlzdHJ1Y3QgdHJ1bHlfd3F4 Z2EgKmN0eCA9IHBhbmVsX3RvX3RydWx5X3dxeGdhKHBhbmVsKTsKPj4gKwo+PiArCWlmIChjdHgt PmVuYWJsZWQpCj4+ICsJCXJldHVybiAwOwo+PiArCj4+ICsJaWYgKGN0eC0+YmFja2xpZ2h0KSB7 Cj4+ICsJCWN0eC0+YmFja2xpZ2h0LT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7Cj4+ ICsJCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGN0eC0+YmFja2xpZ2h0KTsKPj4gKwl9Cj4+ICsJ Y3R4LT5lbmFibGVkID0gdHJ1ZTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IHRydWx5X3dxeGdhX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkK Pj4gK3sKPj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gcGFuZWwtPmNvbm5l Y3RvcjsKPj4gKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IHBhbmVsX3RvX3RydWx5X3dxeGdh KHBhbmVsKTsKPj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKPj4gKwo+PiArCW1v ZGUgPSBkcm1fbW9kZV9jcmVhdGUoY29ubmVjdG9yLT5kZXYpOwo+PiArCWlmICghbW9kZSkgewo+ PiArCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkaXNwbGF5IG1v ZGVcbiIpOwo+PiArCQlyZXR1cm4gMDsKPj4gKwl9Cj4+ICsKPj4gKwlkcm1fZGlzcGxheV9tb2Rl X2Zyb21fdmlkZW9tb2RlKCZjdHgtPnZtLCBtb2RlKTsKPj4gKwljb25uZWN0b3ItPmRpc3BsYXlf aW5mby53aWR0aF9tbSA9IDc0Owo+PiArCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9t bSA9IDEzMTsKPj4gKwltb2RlLT50eXBlID0gRFJNX01PREVfVFlQRV9EUklWRVIgfCBEUk1fTU9E RV9UWVBFX1BSRUZFUlJFRDsKPj4gKwlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9k ZSk7Cj4+ICsKPj4gKwlyZXR1cm4gMTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fcGFuZWxfZnVuY3MgdHJ1bHlfd3F4Z2FfZHJtX2Z1bmNzID0gewo+PiArCS5kaXNhYmxl ID0gdHJ1bHlfd3F4Z2FfZGlzYWJsZSwKPj4gKwkudW5wcmVwYXJlID0gdHJ1bHlfd3F4Z2FfdW5w cmVwYXJlLAo+PiArCS5wcmVwYXJlID0gdHJ1bHlfd3F4Z2FfcHJlcGFyZSwKPj4gKwkuZW5hYmxl ID0gdHJ1bHlfd3F4Z2FfZW5hYmxlLAo+PiArCS5nZXRfbW9kZXMgPSB0cnVseV93cXhnYV9nZXRf bW9kZXMsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW50IHRydWx5X3dxeGdhX3BhbmVsX2FkZChz dHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBj dHgtPmRldjsKPj4gKwlpbnQgcmV0LCBpOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoY3R4LT5zdXBwbGllcyk7IGkrKykKPj4gKwkJY3R4LT5zdXBwbGllc1tpXS5zdXBwbHkg PSByZWd1bGF0b3JfbmFtZXNbaV07Cj4+ICsKPj4gKwlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9idWxr X2dldChkZXYsIEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyksCj4+ICsJCQkJICAgICAgY3R4LT5z dXBwbGllcyk7Cj4+ICsJaWYgKHJldCA8IDApCj4+ICsJCXJldHVybiByZXQ7Cj4+ICsKPj4gKwlj dHgtPnJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dldChkZXYsICJyZXNldCIsIEdQSU9EX09VVF9I SUdIKTsKPj4gKwlpZiAoSVNfRVJSKGN0eC0+cmVzZXRfZ3BpbykpIHsKPj4gKwkJZGV2X2Vycihk ZXYsICJjYW5ub3QgZ2V0IHJlc2V0LWdwaW9zICVsZFxuIiwKPiAKPiBUaGUgbmFtZSBoZXJlIGRv ZXNuJ3QgbWF0Y2ggdGhlIGdwaW8geW91IGFyZSB0cnlpbmcgdG8gZ2V0LgpbQWJoaW5hdl0gWWVz LCB3aWxsIGZpeCB0aGlzIGluIFY0Cj4gCj4+ICsJCQlQVFJfRVJSKGN0eC0+cmVzZXRfZ3Bpbykp Owo+PiArCQlyZXR1cm4gUFRSX0VSUihjdHgtPnJlc2V0X2dwaW8pOwo+PiArCX0KPj4gKwo+PiAr CWN0eC0+bW9kZV9ncGlvID0gZGV2bV9ncGlvZF9nZXQoZGV2LCAibW9kZSIsIEdQSU9EX09VVF9M T1cpOwo+PiArCWlmIChJU19FUlIoY3R4LT5tb2RlX2dwaW8pKSB7Cj4+ICsJCWRldl9lcnIoZGV2 LCAiY2Fubm90IGdldCBtb2RlIGdwaW8gJWxkXG4iLAo+IAo+IFRoaXMgaXMgYSBsaXR0bGUgYml0 IGJldHRlci4KPiAKPj4gKwkJCVBUUl9FUlIoY3R4LT5tb2RlX2dwaW8pKTsKPj4gKwkJY3R4LT5t b2RlX2dwaW8gPSBOVUxMOwo+IAo+IE9vcHMsIHlvdSBhcmUgc2V0dGluZyB0aGlzIHRvIG51bGws IGFuZCB0aGVuIHJldHVybmluZyBQVFJfRVJSIGZvciB0aGUgCj4gTlVMTCwKPiB3aGljaCB3aWxs IGJlIDAuCltBYmhpbmF2XSBZZXMsIHdpbGwgZml4IHRoaXMgaW4gVjQKPiAKPj4gKwkJcmV0dXJu IFBUUl9FUlIoY3R4LT5tb2RlX2dwaW8pOwo+PiArCX0KPj4gKwo+PiArCS8qIGR1YWwgcG9ydCAq Lwo+PiArCWdwaW9kX3NldF92YWx1ZShjdHgtPm1vZGVfZ3BpbywgMCk7Cj4+ICsKPj4gKwlyZXQg PSBvZl9nZXRfdmlkZW9tb2RlKGRldi0+b2Zfbm9kZSwgJmN0eC0+dm0sIDApOwo+PiArCWlmIChy ZXQgPCAwKQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJZHJtX3BhbmVsX2luaXQoJmN0eC0+ cGFuZWwpOwo+PiArCWN0eC0+cGFuZWwuZGV2ID0gZGV2Owo+PiArCWN0eC0+cGFuZWwuZnVuY3Mg PSAmdHJ1bHlfd3F4Z2FfZHJtX2Z1bmNzOwo+PiArCWRybV9wYW5lbF9hZGQoJmN0eC0+cGFuZWwp Owo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRydWx5X3dx eGdhX3BhbmVsX2RlbChzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCkKPj4gK3sKPj4gKwlpZiAoY3R4 LT5wYW5lbC5kZXYpCj4+ICsJCWRybV9wYW5lbF9yZW1vdmUoJmN0eC0+cGFuZWwpOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IHRydWx5X3dxeGdhX3Byb2JlKHN0cnVjdCBtaXBpX2RzaV9kZXZp Y2UgKmRzaSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHNpLT5kZXY7Cj4+ICsJ c3RydWN0IHRydWx5X3dxeGdhICpjdHg7Cj4+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqc2Vj b25kYXJ5Owo+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHNpMTsKPj4gKwlzdHJ1Y3QgbWlwaV9k c2lfaG9zdCAqZHNpMV9ob3N0Owo+PiArCWludCByZXQgPSAwOwo+PiArCWNvbnN0IHN0cnVjdCBt aXBpX2RzaV9kZXZpY2VfaW5mbyBpbmZvID0gey50eXBlID0gInRydWx5bnQzNTU5NyIsCj4+ICsJ CS5jaGFubmVsID0gMCwKPj4gKwkJLm5vZGUgPSBOVUxMLAo+PiArCX07Cj4+ICsKPj4gKwljdHgg PSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOwo+PiArCj4+ICsJ aWYgKCFjdHgpIHsKPj4gKwkJcmV0ID0gLUVOT01FTTsKPj4gKwkJZ290byBlcnJfZHNpX2N0eDsK PiAKPiBJIHNheSwganVzdCByZXR1cm4gLUVOT01FTTsKW0FiaGluYXZdIFdpbGwgZml4IHRoaXMg aW4gVjQuCj4gCj4+ICsJfQo+PiArCj4+ICsJLyogVGhpcyBkZXZpY2UgcmVwcmVzZW50cyBpdHNl bGYgYXMgb25lIHdpdGgKPj4gKwkgKiB0d28gaW5wdXQgcG9ydHMgd2hpY2ggYXJlIGZlZCBieSB0 aGUgb3V0cHV0Cj4+ICsJICogcG9ydHMgb2YgdGhlIHR3byBEU0kgY29udHJvbGxlcnMgLiBUaGUg RFNJMAo+PiArCSAqIGlzIHRoZSBtYXN0ZXIgY29udHJvbGxlciBhbmQgaGFzIG1vc3Qgb2YgdGhl Cj4+ICsJICogcGFuZWwgcmVsYXRlZCBpbmZvIGluIGl0cyBjaGlsZCBub2RlLgo+PiArCSAqLwo+ PiArCj4+ICsJZHNpMSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZShkc2ktPmRldi5vZl9ub2Rl LCAxLCAtMSk7Cj4+ICsJaWYgKCFkc2kxKSB7Cj4+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRv IGdldCByZW1vdGUgbm9kZSBmb3Igc2Vjb25kYXJ5IERTSVxuIik7Cj4+ICsJCXJldCA9IC1FTk9E RVY7Cj4+ICsJCWdvdG8gZXJyX2dldF9yZW1vdGU7Cj4+ICsJfQo+PiArCj4+ICsJZHNpMV9ob3N0 ID0gb2ZfZmluZF9taXBpX2RzaV9ob3N0X2J5X25vZGUoZHNpMSk7Cj4+ICsJaWYgKCFkc2kxX2hv c3QpIHsKPj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZmluZCBkc2kgaG9zdFxuIik7Cj4+ ICsJCXJldCA9IC1FUFJPQkVfREVGRVI7Cj4+ICsJCWdvdG8gZXJyX2hvc3Q7Cj4+ICsJfQo+PiAr Cj4+ICsJb2Zfbm9kZV9wdXQoZHNpMSk7Cj4+ICsKPj4gKwkvKiByZWdpc3RlciB0aGUgc2Vjb25k IERTSSBkZXZpY2UgKi8KPj4gKwlzZWNvbmRhcnkgPSBtaXBpX2RzaV9kZXZpY2VfcmVnaXN0ZXJf ZnVsbChkc2kxX2hvc3QsICZpbmZvKTsKPj4gKwo+PiArCWlmIChJU19FUlIoc2Vjb25kYXJ5KSkg ewo+PiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgZHNpIGRldmljZVxuIik7Cj4+ ICsJCXJldCA9IFBUUl9FUlIoZHNpKTsKPj4gKwkJZ290byBlcnJfZHNpX2RldmljZTsKPj4gKwl9 Cj4+ICsKPj4gKwltaXBpX2RzaV9zZXRfZHJ2ZGF0YShkc2ksIGN0eCk7Cj4+ICsKPj4gKwljdHgt PmRldiA9IGRldjsKPj4gKwljdHgtPmRzaVswXSA9IGRzaTsKPj4gKwljdHgtPmRzaVsxXSA9IHNl Y29uZGFyeTsKPj4gKwo+PiArCXJldCA9IHRydWx5X3dxeGdhX3BhbmVsX2FkZChjdHgpOwo+PiAr CWlmIChyZXQpIHsKPj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIHBhbmVsXG4iKTsK Pj4gKwkJZ290byBlcnJfcGFuZWxfYWRkOwo+PiArCX0KPj4gKwo+PiArCS8qIGNvbmZpZ3VyZSBt YXN0ZXIgRFNJIGRldmljZSAqLwo+PiArCWRzaS0+bGFuZXMgPSA0Owo+PiArCWRzaS0+Zm9ybWF0 ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKPj4gKwlkc2ktPm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9N T0RFX1ZJREVPIHwgCj4+IE1JUElfRFNJX0NMT0NLX05PTl9DT05USU5VT1VTIHwKPj4gKwkJCQkJ CU1JUElfRFNJX01PREVfTFBNOwo+PiArCj4+ICsJcmV0ID0gbWlwaV9kc2lfYXR0YWNoKGRzaSk7 Cj4+ICsJaWYgKHJldCA8IDApIHsKPj4gKwkJZGV2X2VycihkZXYsICJtYXN0ZXIgZHNpIGF0dGFj aCBmYWlsZWRcbiIpOwo+PiArCQlnb3RvIGVycl9kc2lfYXR0YWNoOwo+PiArCX0KPj4gKwo+PiAr CS8qIGNvbmZpZ3VyZSBzZWNvbmRhcnkgRFNJIGRldmljZSAqLwo+PiArCXNlY29uZGFyeS0+bGFu ZXMgPSA0Owo+PiArCXNlY29uZGFyeS0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKPj4g KwlzZWNvbmRhcnktPm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9NT0RFX1ZJREVPIHwKPj4gKwkJTUlQ SV9EU0lfQ0xPQ0tfTk9OX0NPTlRJTlVPVVMgfAo+PiArCQlNSVBJX0RTSV9NT0RFX0xQTTsKPj4g Kwo+PiArCXJldCA9IG1pcGlfZHNpX2F0dGFjaChzZWNvbmRhcnkpOwo+PiArCWlmIChyZXQgPCAw KSB7Cj4+ICsJCWRldl9lcnIoZGV2LCAibWlwaV9kc2lfYXR0YWNoIG9uIHNlY29uZGFyeSBmYWls ZWRcbiIpOwo+PiArCQlnb3RvIGVycl9kc2lfYXR0YWNoX3NlYzsKPj4gKwl9Cj4+ICsKPj4gKwly ZXR1cm4gMDsKPj4gKwo+PiArZXJyX2RzaV9hdHRhY2hfc2VjOgo+PiArCW1pcGlfZHNpX2RldGFj aChjdHgtPmRzaVswXSk7Cj4+ICtlcnJfZHNpX2F0dGFjaDoKPj4gKwl0cnVseV93cXhnYV9wYW5l bF9kZWwoY3R4KTsKPj4gK2Vycl9wYW5lbF9hZGQ6Cj4+ICsJbWlwaV9kc2lfZGV2aWNlX3VucmVn aXN0ZXIoc2Vjb25kYXJ5KTsKPj4gK2Vycl9kc2lfZGV2aWNlOgo+PiArZXJyX2hvc3Q6Cj4+ICsJ b2Zfbm9kZV9wdXQoZHNpMSk7Cj4+ICtlcnJfZ2V0X3JlbW90ZToKPj4gK2Vycl9kc2lfY3R4Ogo+ PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcmVt b3ZlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKPj4gK3sKPj4gKwlzdHJ1Y3QgdHJ1bHlf d3F4Z2EgKmN0eCA9IG1pcGlfZHNpX2dldF9kcnZkYXRhKGRzaSk7Cj4+ICsKPj4gKwlpZiAoY3R4 LT5kc2lbMF0pCj4+ICsJCW1pcGlfZHNpX2RldGFjaChjdHgtPmRzaVswXSk7Cj4+ICsJaWYgKGN0 eC0+ZHNpWzFdKSB7Cj4+ICsJCW1pcGlfZHNpX2RldGFjaChjdHgtPmRzaVsxXSk7Cj4+ICsJCW1p cGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKGN0eC0+ZHNpWzFdKTsKPj4gKwl9Cj4+ICsJdHJ1bHlf d3F4Z2FfcGFuZWxfZGVsKGN0eCk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdHJ1bHlfd3F4Z2Ffb2ZfbWF0Y2hbXSA9 IHsKPj4gKwl7IC5jb21wYXRpYmxlID0gInRydWx5LG50MzU1OTciLCB9LAo+PiArCXsgfQo+PiAr fTsKPj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRydWx5X3dxeGdhX29mX21hdGNoKTsKPj4g Kwo+PiArc3RhdGljIHN0cnVjdCBtaXBpX2RzaV9kcml2ZXIgdHJ1bHlfd3F4Z2FfZHJpdmVyID0g ewo+PiArCS5kcml2ZXIgPSB7Cj4+ICsJCS5uYW1lID0gInBhbmVsX3RydWx5X250MzU1OTciLAo+ PiArCQkub2ZfbWF0Y2hfdGFibGUgPSB0cnVseV93cXhnYV9vZl9tYXRjaCwKPj4gKwl9LAo+PiAr CS5wcm9iZSA9IHRydWx5X3dxeGdhX3Byb2JlLAo+PiArCS5yZW1vdmUgPSB0cnVseV93cXhnYV9y ZW1vdmUsCj4+ICt9Owo+PiArbW9kdWxlX21pcGlfZHNpX2RyaXZlcih0cnVseV93cXhnYV9kcml2 ZXIpOwo+PiArCj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlRydWx5IE5UMzU1OTcgRFNJIFBhbmVs IERyaXZlciIpOwo+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+PiAtLQo+PiBUaGUgUXVh bGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVy b3JhIAo+PiBGb3J1bSwKPj4gYSBMaW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVj dAo+PiAKPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K Pj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+PiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCj4+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVsCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=