From mboxrd@z Thu Jan 1 00:00:00 1970 From: abhinavk@codeaurora.org Subject: Re: [PATCH v4 1/2] drm/panel: Add support for Truly NT35597 panel Date: Wed, 30 May 2018 15:37:26 -0700 Message-ID: <0beaa3a7765dbf9bfffdee59235f180d@codeaurora.org> References: <1527294472-4451-1-git-send-email-abhinavk@codeaurora.org> <20180530191247.GO3373@art_vandelay> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180530191247.GO3373@art_vandelay> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sean Paul Cc: linux-arm-msm@vger.kernel.org, thierry.reding@gmail.com, hoegsberg@google.com, chandanu@codeaurora.org, dri-devel@lists.freedesktop.org List-Id: linux-arm-msm@vger.kernel.org SGkgU2VhbgoKVGhhbmtzIGZvciB5b3VyIHJldmlldy4KClNvbWUgcmVzcG9uc2VzIGJlbG93LiBQ bGVhc2UgaGVscCB0byBjaGVjay4KClRoYW5rcwoKQWJoaW5hdgoKT24gMjAxOC0wNS0zMCAxMjox MiwgU2VhbiBQYXVsIHdyb3RlOgo+IE9uIEZyaSwgTWF5IDI1LCAyMDE4IGF0IDA1OjI3OjUxUE0g LTA3MDAsIEFiaGluYXYgS3VtYXIgd3JvdGU6Cj4+IEFkZCBzdXBwb3J0IGZvciBUcnVseSBOVDM1 NTk3IHBhbmVsIHVzZWQKPj4gaW4gTVNNIHJlZmVyZW5jZSBwbGF0Zm9ybXMuCj4+IAo+PiBUaGlz IHBhbmVsIHN1cHBvcnRzIGJvdGggc2luZ2xlIERTSSBhbmQgZHVhbCBEU0kKPj4gbW9kZXMuCj4+ IAo+PiBIb3dldmVyLCB0aGlzIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgb25seSBmb3IKPj4g ZHVhbCBEU0kgbW9kZS4KPj4gCj4+IENoYW5nZXMgaW4gdjQ6Cj4+IC0gRml4IHRoZSBsaWNlbnNl IGlkZW50aWZpZXIKPj4gLSBGaXggZm9ybWF0dGluZyBpc3N1ZXMgZm9yIHRoZSByZWd1bGF0b3Ig bG9hZHMKPj4gLSBGaXggZXJyb3IgbWVzc2FnZXMgYW5kIHJldHVybiBjb2RlCj4+IAo+PiBTaWdu ZWQtb2ZmLWJ5OiBBcmNoaXQgVGFuZWphIDxhcmNoaXR0QGNvZGVhdXJvcmEub3JnPgo+PiBTaWdu ZWQtb2ZmLWJ5OiBBYmhpbmF2IEt1bWFyIDxhYmhpbmF2a0Bjb2RlYXVyb3JhLm9yZz4KPj4gLS0t Cj4+ICBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyAgICAgICAgICAgICAgIHwgICA4ICsK Pj4gIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDEgKwo+ PiAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LW50MzU1OTcuYyB8IDU3NiAKPj4g KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiAgMyBmaWxlcyBjaGFuZ2VkLCA1ODUgaW5z ZXJ0aW9ucygrKQo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9w YW5lbC10cnVseS1udDM1NTk3LmMKPj4gCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v cGFuZWwvS2NvbmZpZyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwo+PiBpbmRl eCAyNTY4MmZmLi4yZmNkOWIxIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwv S2NvbmZpZwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwo+PiBAQCAtMTc3 LDQgKzE3NywxMiBAQCBjb25maWcgRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYKPj4gIAkgIFNh eSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBTaXRyb25peAo+ PiAgCSAgU1Q3Nzg5ViBjb250cm9sbGVyIGZvciAyNDB4MzIwIExDRCBwYW5lbHMKPj4gCj4+ICtj b25maWcgRFJNX1BBTkVMX1RSVUxZX05UMzU1OTdfV1FYR0EKPj4gKwl0cmlzdGF0ZSAiVHJ1bHkg V1FYR0EiCj4+ICsJZGVwZW5kcyBvbiBPRgo+PiArCWRlcGVuZHMgb24gRFJNX01JUElfRFNJCj4+ ICsJc2VsZWN0IFZJREVPTU9ERV9IRUxQRVJTCj4+ICsJaGVscAo+PiArCSAgU2F5IFkgaGVyZSBp ZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgVHJ1bHkgTlQzNTU5NyBXUVhHQSAKPj4g RHVhbCBEU0kKPj4gKwkgIFZpZGVvIE1vZGUgcGFuZWwKPj4gIGVuZG1lbnUKPj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSAKPj4gYi9kcml2ZXJzL2dwdS9kcm0v cGFuZWwvTWFrZWZpbGUKPj4gaW5kZXggZjI2ZWZjMS4uMDU2ZWE5MyAxMDA2NDQKPj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9w YW5lbC9NYWtlZmlsZQo+PiBAQCAtMTgsMyArMTgsNCBAQCBvYmotJChDT05GSUdfRFJNX1BBTkVM X1NFSUtPXzQzV1ZGMUcpICs9IAo+PiBwYW5lbC1zZWlrby00M3d2ZjFnLm8KPj4gIG9iai0kKENP TkZJR19EUk1fUEFORUxfU0hBUlBfTFExMDFSMVNYMDEpICs9IAo+PiBwYW5lbC1zaGFycC1scTEw MXIxc3gwMS5vCj4+ICBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NIQVJQX0xTMDQzVDFMRTAxKSAr PSAKPj4gcGFuZWwtc2hhcnAtbHMwNDN0MWxlMDEubwo+PiAgb2JqLSQoQ09ORklHX0RSTV9QQU5F TF9TSVRST05JWF9TVDc3ODlWKSArPSBwYW5lbC1zaXRyb25peC1zdDc3ODl2Lm8KPj4gK29iai0k KENPTkZJR19EUk1fUEFORUxfVFJVTFlfTlQzNTU5N19XUVhHQSkgKz0gcGFuZWwtdHJ1bHktbnQz NTU5Ny5vCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1bHkt bnQzNTU5Ny5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1udDM1NTk3 LmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uYTU3Y2JmMAo+PiAt LS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1u dDM1NTk3LmMKPj4gQEAgLTAsMCArMSw1NzYgQEAKPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wCj4+ICsvKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDE4LCBUaGUgTGludXgg Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVk ZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+ Cj4+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Cj4+ICsjaW5jbHVkZSA8 bGludXgvcGluY3RybC9jb25zdW1lci5oPgo+PiArCj4+ICsjaW5jbHVkZSA8dmlkZW8vbWlwaV9k aXNwbGF5Lmg+Cj4+ICsjaW5jbHVkZSA8dmlkZW8vb2ZfdmlkZW9tb2RlLmg+Cj4+ICsjaW5jbHVk ZSA8dmlkZW8vdmlkZW9tb2RlLmg+Cj4+ICsKPj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+PiAr I2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNp Lmg+Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVndWxhdG9yX25hbWVzW10g PSB7Cj4+ICsJInZkZGEiLAo+PiArCSJ2ZGlzcHAiLAo+PiArCSJ2ZGlzcG4iCj4+ICt9OwpbQWJo aW5hdl0gV2lsbCBhZGQgYSAnLCcgaGVyZSBhcyBwZXIgam9yZGFuJ3MgY29tbWVudAo+PiArCj4+ ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBjb25zdCByZWd1bGF0b3JfZW5hYmxlX2xvYWRzW10gPSB7 Cj4+ICsJNjIwMDAsCj4+ICsJMTAwMDAwLAo+PiArCTEwMDAwMCwKPj4gK307Cj4+ICsKPj4gK3N0 YXRpYyB1bnNpZ25lZCBsb25nIGNvbnN0IHJlZ3VsYXRvcl9kaXNhYmxlX2xvYWRzW10gPSB7Cj4+ ICsJODAsCj4+ICsJMTAwLAo+PiArCTEwMCwKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCB0cnVseV93 cXhnYSB7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+PiArCXN0cnVjdCBkcm1fcGFuZWwgcGFu ZWw7Cj4+ICsKPj4gKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tBUlJBWV9T SVpFKHJlZ3VsYXRvcl9uYW1lcyldOwo+PiArCj4+ICsJc3RydWN0IGdwaW9fZGVzYyAqcmVzZXRf Z3BpbzsKPj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICptb2RlX2dwaW87Cj4+ICsKPj4gKwlzdHJ1Y3Qg YmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0Owo+PiArCXN0cnVjdCB2aWRlb21vZGUgdm07Cj4+ ICsKPj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2lbMl07Cj4+ICsKPj4gKwlib29sIHBy ZXBhcmVkOwo+PiArCWJvb2wgZW5hYmxlZDsKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUg c3RydWN0IHRydWx5X3dxeGdhICpwYW5lbF90b190cnVseV93cXhnYShzdHJ1Y3QgCj4+IGRybV9w YW5lbCAqcGFuZWwpCj4+ICt7Cj4+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihwYW5lbCwgc3RydWN0 IHRydWx5X3dxeGdhLCBwYW5lbCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdHJ1bHlfd3F4 Z2FfcG93ZXJfb24oc3RydWN0IHRydWx5X3dxeGdhICpjdHgpCj4+ICt7Cj4+ICsJaW50IHJldCwg aTsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpOyBp KyspIHsKPj4gKwkJcmV0ID0gcmVndWxhdG9yX3NldF9sb2FkKGN0eC0+c3VwcGxpZXNbaV0uY29u c3VtZXIsCj4+ICsJCQkJCXJlZ3VsYXRvcl9lbmFibGVfbG9hZHNbaV0pOwo+PiArCQlpZiAocmV0 KQo+PiArCQkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSByZWd1bGF0b3JfYnVs a19lbmFibGUoQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwgCj4+IGN0eC0+c3VwcGxpZXMpOwo+ PiArCWlmIChyZXQgPCAwKQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJbXNsZWVwKDIwKTsK Pj4gKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAxKTsKPj4gKwltc2xlZXAoMjAp Owo+PiArCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDApOwo+PiArCW1zbGVlcCgy MCk7Cj4+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMSk7Cj4+ICsJbXNsZWVw KDUwKTsKPiAKPiBXaHkgaXMgdGhpcyBuZWVkZWQ/IENvdWxkIHlvdSBwbGVhc2UgY29tbWVudD8K PiAKPiBBbHNvLCBpdCBzZWVtcyBsaWtlIHRoaXMgaXMgYWN0aXZlIGxvdz8gWW91IHNob3VsZCBz cGVjaWZ5IHRoYXQgaW4gdGhlIAo+IGR0LCBhbmQKPiBsZXQgZ3Bpb2QgdHJhbnNsYXRlIHRoZSB2 YWx1ZS4KCltBYmhpbmF2XSBUaGlzIGlzIHRoZSBwYW5lbCdzIHJlc2V0IHNlcXVlbmNlIHdoaWNo IGRlbWFuZHMgdGhpcyBkZWxheS4gSSAKY2FuIGNvbW1lbnQgdGhlIHNhbWUuCkl0cyBhY3RpdmUg SElHSC4gSSBjYW4gbGVhdmUgYSBjb21tZW50IGluIHRoZSBiaW5kaW5ncyBtZW50aW9uaW5nIHRo ZSAKc2FtZS4KTGV0IG1lIGtub3cgaWYgdGhpcyBpcyBzdWZmaWNpZW50LgoKPiAKPj4gKwo+PiAr CXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRydWx5X3dxeGdhX3Bvd2VyX29m ZihzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCkKPj4gK3sKPj4gKwlpbnQgcmV0LCBpOwo+PiArCj4+ ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMCk7Cj4+ICsKPj4gKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKTsgaSsrKSB7Cj4+ICsJCXJldCA9IHJl Z3VsYXRvcl9zZXRfbG9hZChjdHgtPnN1cHBsaWVzW2ldLmNvbnN1bWVyLAo+PiArCQkJCXJlZ3Vs YXRvcl9kaXNhYmxlX2xvYWRzW2ldKTsKPj4gKwkJaWYgKHJldCkKPj4gKwkJCXJldHVybiByZXQ7 Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0la RShjdHgtPnN1cHBsaWVzKSwgCj4+IGN0eC0+c3VwcGxpZXMpOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgaW50IHRydWx5X3dxeGdhX2Rpc2FibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4+ICt7 Cj4+ICsJc3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBwYW5lbF90b190cnVseV93cXhnYShwYW5l bCk7Cj4+ICsKPj4gKwlpZiAoIWN0eC0+ZW5hYmxlZCkKPj4gKwkJcmV0dXJuIDA7Cj4+ICsKPj4g KwlpZiAoY3R4LT5iYWNrbGlnaHQpIHsKPj4gKwkJY3R4LT5iYWNrbGlnaHQtPnByb3BzLnBvd2Vy ID0gRkJfQkxBTktfUE9XRVJET1dOOwo+PiArCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhjdHgt PmJhY2tsaWdodCk7Cj4gCj4gWW91IGNhbiB1c2UgdGhlIGJhY2tsaWdodF9lbmFibGUvZGlzYWJs ZSBoZWxwZXJzLCBhbmQgcGxlYXNlIGNoZWNrIHRoZSAKPiByZXR1cm4KPiB2YWx1ZS4KPiAKW0Fi aGluYXZdIENhbiB5b3UgcGxlYXNlIHByb3ZpZGUgbWUgdGhlIHJlZmVyZW5jZSB0byB0aGUgaGVs cGVyIHlvdSBhcmUgCnJlZmVycmluZyB0bz8KT3RoZXIgcGFuZWxzIHdlcmUgdXNpbmcgYmFja2xp Z2h0X3VwZGF0ZV9zdGF0dXMoKSwgSGVuY2UgaSBhbSBub3QgYWJsZSAKdG8gbG9jYXRlIGl0LgpZ ZXMsIEkgd2lsbCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIGluIHY1LgoKPj4gKwl9Cj4+ICsKPj4g KwljdHgtPmVuYWJsZWQgPSBmYWxzZTsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3Rh dGljIGludCB0cnVseV93cXhnYV91bnByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4+ ICt7Cj4+ICsJc3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBwYW5lbF90b190cnVseV93cXhnYShw YW5lbCk7Cj4+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqKmRzaXMgPSBjdHgtPmRzaTsKPiAK PiBJTU8sIHRoaXMgb2JmdXNjYXRpb24gaXNuJ3QgdG9vIHVzZWZ1bCAoYW5kIHByZXZlbnRzIHVz IGZyb20gdXNpbmcgCj4gQVJSQVlfU0laRQo+IGJlbG93KS4KW0FiaGluYXZdIEFncmVlZCwgd2ls bCBmaXggdGhpcyBpbiB2NS4KPiAKPj4gKwlpbnQgcmV0ID0gMCwgaTsKPj4gKwo+PiArCWlmICgh Y3R4LT5wcmVwYXJlZCkKPj4gKwkJcmV0dXJuIDA7Cj4+ICsKPj4gKwlkc2lzWzBdLT5tb2RlX2Zs YWdzID0gMDsKPj4gKwlkc2lzWzFdLT5tb2RlX2ZsYWdzID0gMDsKPj4gKwo+PiArCWZvciAoaSA9 IDA7IGkgPCAyOyBpKyspCj4gCj4gcy8yL0FSUkFZX1NJWkUoY3R4LT5kc2kpLwo+IAo+PiArCQlp ZiAobWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X29mZihkc2lzW2ldKSA8IDApCj4+ICsJCQlyZXQg PSAtRUNPTU07Cj4gCj4gSSBndWVzcyBpdCdzIGFscmlnaHQgdGhhdCB3ZSdyZSBjb250aW51aW5n IHRocm91Z2ggZXJyb3JzLCBob3dldmVyIHdlIAo+IHNob3VsZAo+IHByb2JhYmx5IGxvZyB0aGUg YWN0dWFsIGVycm9yIHZhbHVlIGFzIHdlbGwgYXMgdGhlIGNoYW5uZWwgbnVtYmVyIGluIGEgCj4g REVCVUcKPiBtZXNzYWdlLgo+IApbQWJoaW5hdl0gQWdyZWVkLCB3aWxsIHByaW50IGFuIGVycm9y IG1lc3NhZ2UuCj4+ICsKPj4gKwltc2xlZXAoMTIwKTsKPiAKPiBQbGVhc2UgY29tbWVudC4KW0Fi aGluYXZdIEFncmVlZCwgd2lsbCBleHBsYWluIHRoaXMuCj4gCj4+ICsKPj4gKwlmb3IgKGkgPSAw OyBpIDwgMjsgaSsrKQo+IAo+IEFSUkFZX1NJWkUgbml0IGhlcmUuCj4gCltBYmhpbmF2XSBBZ3Jl ZWQsIHdpbGwgdXNlIEFSUkFZX1NJWkUgaGVyZQo+PiArCQlpZiAobWlwaV9kc2lfZGNzX2VudGVy X3NsZWVwX21vZGUoZHNpc1tpXSkgPCAwKQo+PiArCQkJcmV0ID0gLUVDT01NOwo+PiArCj4+ICsJ dHJ1bHlfd3F4Z2FfcG93ZXJfb2ZmKGN0eCk7Cj4gCj4gWW91IGRvbid0IGNoZWNrIHRoZSByZXR1 cm4gdmFsdWUuCltBYmhpbmF2XSBBZ3JlZWQsIHdpbGwgY2hlY2sgcmV0dXJuIHZhbHVlLgo+IAo+ PiArCj4+ICsJY3R4LT5wcmVwYXJlZCA9IGZhbHNlOwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ ICsKPj4gKyNkZWZpbmUgTUFYX0xFTgk1Cj4+ICtzdHJ1Y3Qgewo+PiArCXU4IGNvbW1hbmRzW01B WF9MRU5dOwo+PiArCWludCBzaXplOwo+PiArfSBwYW5lbF9jbWRzW10gPSB7IC8qIENNRDJfUDAg Ki8KPj4gKwkJICAgeyB7IDB4ZmYsIDB4MjAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHhmYiwgMHgw MSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDAwLCAweDAxIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4 MDEsIDB4NTUgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgwMiwgMHg0NSB9LCAyIH0sCj4+ICsJCSAg IHsgeyAweDA1LCAweDQwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MDYsIDB4MTkgfSwgMiB9LAo+ PiArCQkgICB7IHsgMHgwNywgMHgxZSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDBiLCAweDczIH0s IDIgfSwKPj4gKwkJICAgeyB7IDB4MGMsIDB4NzMgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgwZSwg MHhiMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDBmLCAweGFlIH0sIDIgfSwKPj4gKwkJICAgeyB7 IDB4MTEsIDB4YjggfSwgMiB9LAo+PiArCQkgICB7IHsgMHgxMywgMHgwMCB9LCAyIH0sCj4+ICsJ CSAgIHsgeyAweDU4LCAweDgwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NTksIDB4MDEgfSwgMiB9 LAo+PiArCQkgICB7IHsgMHg1YSwgMHgwMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDViLCAweDAx IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NWMsIDB4ODAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg1 ZCwgMHg4MSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDVlLCAweDAwIH0sIDIgfSwKPj4gKwkJICAg eyB7IDB4NWYsIDB4MDEgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg3MiwgMHgxMSB9LCAyIH0sCj4+ ICsJCSAgIHsgeyAweDY4LCAweDAzIH0sIDIgfSwKPj4gKwkJICAgLyogQ01EMl9QNCAqLwo+PiAr CQkgICB7IHsgMHhGRiwgMHgyNCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweEZCLCAweDAxIH0sIDIg fSwKPj4gKwkJICAgeyB7IDB4MDAsIDB4MUMgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgwMSwgMHgw QiB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDAyLCAweDBDIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4 MDMsIDB4MDEgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgwNCwgMHgwRiB9LCAyIH0sCj4+ICsJCSAg IHsgeyAweDA1LCAweDEwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MDYsIDB4MTAgfSwgMiB9LAo+ PiArCQkgICB7IHsgMHgwNywgMHgxMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDA4LCAweDg5IH0s IDIgfSwKPj4gKwkJICAgeyB7IDB4MDksIDB4OEEgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgwQSwg MHgxMyB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDBCLCAweDEzIH0sIDIgfSwKPj4gKwkJICAgeyB7 IDB4MEMsIDB4MTUgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgwRCwgMHgxNSB9LCAyIH0sCj4+ICsJ CSAgIHsgeyAweDBFLCAweDE3IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MEYsIDB4MTcgfSwgMiB9 LAo+PiArCQkgICB7IHsgMHgxMCwgMHgxQyB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDExLCAweDBC IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MTIsIDB4MEMgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgx MywgMHgwMSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDE0LCAweDBGIH0sIDIgfSwKPj4gKwkJICAg eyB7IDB4MTUsIDB4MTAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgxNiwgMHgxMCB9LCAyIH0sCj4+ ICsJCSAgIHsgeyAweDE3LCAweDEwIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MTgsIDB4ODkgfSwg MiB9LAo+PiArCQkgICB7IHsgMHgxOSwgMHg4QSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDFBLCAw eDEzIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MUIsIDB4MTMgfSwgMiB9LAo+PiArCQkgICB7IHsg MHgxQywgMHgxNSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDFELCAweDE1IH0sIDIgfSwKPj4gKwkJ ICAgeyB7IDB4MUUsIDB4MTcgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgxRiwgMHgxNyB9LCAyIH0s Cj4+ICsJCSAgIC8qIFNUViAqLwo+PiArCQkgICB7IHsgMHgyMCwgMHg0MCB9LCAyIH0sCj4+ICsJ CSAgIHsgeyAweDIxLCAweDAxIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MjIsIDB4MDAgfSwgMiB9 LAo+PiArCQkgICB7IHsgMHgyMywgMHg0MCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDI0LCAweDQw IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4MjUsIDB4NkQgfSwgMiB9LAo+PiArCQkgICB7IHsgMHgy NiwgMHg0MCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDI3LCAweDQwIH0sIDIgfSwKPj4gKwkJICAg LyogVmVuZCAqLwo+PiArCQkgICB7IHsgMHhFMCwgMHgwMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAw eERDLCAweDIxIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4REQsIDB4MjIgfSwgMiB9LAo+PiArCQkg ICB7IHsgMHhERSwgMHgwNyB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweERGLCAweDA3IH0sIDIgfSwK Pj4gKwkJICAgeyB7IDB4RTMsIDB4NkQgfSwgMiB9LAo+PiArCQkgICB7IHsgMHhFMSwgMHgwNyB9 LCAyIH0sCj4+ICsJCSAgIHsgeyAweEUyLCAweDA3IH0sIDIgfSwKPj4gKwkJICAgLyogVUQgKi8K Pj4gKwkJICAgeyB7IDB4MjksIDB4RDggfSwgMiB9LAo+PiArCQkgICB7IHsgMHgyQSwgMHgyQSB9 LCAyIH0sCj4+ICsJCSAgIC8qIENMSyAqLwo+PiArCQkgICB7IHsgMHg0QiwgMHgwMyB9LCAyIH0s Cj4+ICsJCSAgIHsgeyAweDRDLCAweDExIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NEQsIDB4MTAg fSwgMiB9LAo+PiArCQkgICB7IHsgMHg0RSwgMHgwMSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDRG LCAweDAxIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NTAsIDB4MTAgfSwgMiB9LAo+PiArCQkgICB7 IHsgMHg1MSwgMHgwMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDUyLCAweDgwIH0sIDIgfSwKPj4g KwkJICAgeyB7IDB4NTMsIDB4MDAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg1NiwgMHgwMCB9LCAy IH0sCj4+ICsJCSAgIHsgeyAweDU0LCAweDA3IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NTgsIDB4 MDcgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg1NSwgMHgyNSB9LCAyIH0sCj4+ICsJCSAgIC8qIFJl c2V0IFhET05CICovCj4+ICsJCSAgIHsgeyAweDVCLCAweDQzIH0sIDIgfSwKPj4gKwkJICAgeyB7 IDB4NUMsIDB4MDAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg1RiwgMHg3MyB9LCAyIH0sCj4+ICsJ CSAgIHsgeyAweDYwLCAweDczIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NjMsIDB4MjIgfSwgMiB9 LAo+PiArCQkgICB7IHsgMHg2NCwgMHgwMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDY3LCAweDA4 IH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4NjgsIDB4MDQgfSwgMiB9LAo+PiArCQkgICAvKiBSZXNv bHV0aW9uOjE0NDB4MjU2MCAqLwo+PiArCQkgICB7IHsgMHg3MiwgMHgwMiB9LCAyIH0sCj4+ICsJ CSAgIC8qIG11eCAqLwo+PiArCQkgICB7IHsgMHg3QSwgMHg4MCB9LCAyIH0sCj4+ICsJCSAgIHsg eyAweDdCLCAweDkxIH0sIDIgfSwKPj4gKwkJICAgeyB7IDB4N0MsIDB4RDggfSwgMiB9LAo+PiAr CQkgICB7IHsgMHg3RCwgMHg2MCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDdGLCAweDE1IH0sIDIg fSwKPj4gKwkJICAgeyB7IDB4NzUsIDB4MTUgfSwgMiB9LAo+PiArCQkgICAvKiBBQk9GRiAqLwo+ PiArCQkgICB7IHsgMHhCMywgMHhDMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweEI0LCAweDAwIH0s IDIgfSwKPj4gKwkJICAgeyB7IDB4QjUsIDB4MDAgfSwgMiB9LAo+PiArCQkgICAvKiBTb3VyY2Ug RVEgKi8KPj4gKwkJICAgeyB7IDB4NzgsIDB4MDAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg3OSwg MHgwMCB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDgwLCAweDAwIH0sIDIgfSwKPj4gKwkJICAgeyB7 IDB4ODMsIDB4MDAgfSwgMiB9LAo+PiArCQkgICAvKiBGUCBCUCAqLwo+PiArCQkgICB7IHsgMHg5 MywgMHgwQSB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDk0LCAweDBBIH0sIDIgfSwKPj4gKwkJICAg LyogSW52ZXJzaW9uIFR5cGUgKi8KPj4gKwkJICAgeyB7IDB4OEEsIDB4MDAgfSwgMiB9LAo+PiAr CQkgICB7IHsgMHg5QiwgMHhGRiB9LCAyIH0sCj4+ICsJCSAgIC8qIElNR1NXQVAgPTEgQFBvcnRT d2FwPTEgKi8KPj4gKwkJICAgeyB7IDB4OUQsIDB4QjAgfSwgMiB9LAo+PiArCQkgICB7IHsgMHg5 RiwgMHg2MyB9LCAyIH0sCj4+ICsJCSAgIHsgeyAweDk4LCAweDEwIH0sIDIgfSwKPj4gKwkJICAg LyogRlJNICovCj4+ICsJCSAgIHsgeyAweEVDLCAweDAwIH0sIDIgfSwKPj4gKwkJICAgLyogQ01E MSAqLwo+PiArCQkgICB7IHsgMHhGRiwgMHgxMCB9LCAyIH0sCj4+ICsJCSAgICAvKiBWQlArVlNB PSxWRlAgPSAxMEggKi8KPj4gKwkJICAgeyB7IDB4M0IsIDB4MDMsIDB4MEEsIDB4MEEsIH0sIDQg fSwKPj4gKwkJICAgLyogRlRFIG9uICovCj4+ICsJCSAgIHsgeyAweDM1LCAweDAwIH0sIDIgfSwK Pj4gKwkJICAgLyogRU5fQksgPTEoYXV0byBibGFjaykgKi8KPj4gKwkJICAgeyB7IDB4RTUsIDB4 MDEgfSwgMiB9LAo+PiArCQkgICAvKiBDTUQgbW9kZSgxMCkgVkRPIG1vZGUoMDMpICovCj4+ICsJ CSAgIHsgeyAweEJCLCAweDAzIH0sIDIgfSwKPj4gKwkJICAgLyogTm9uIFJlbG9hZCBNVFAgKi8K Pj4gKwkJICAgeyB7IDB4RkIsIDB4MDEgfSwgMiB9LAo+PiArfTsKPiAKPiBIb3cgbWFueSBvZiB0 aGVzZSBjb21tYW5kcyBhcmUgc3BlY2lmaWMgdG8gTVRQPyBEZWNvZGluZyB0aGUgY3J5cHRpYyAK PiBjb21tZW50cywKPiBpdCBzZWVtcyBsaWtlIHRoaXMgcHJvYmFibHkgd291bGRuJ3Qgd29yayBv biBhbnkgb3RoZXIgYm9hcmRzPwo+IAo+IEkgc2VlIGEgY291cGxlIG9mIGR1cGxpY2F0ZSB3cml0 ZXMgYXMgd2VsbC4KPiAKPiBGaW5hbGx5LCBhbGwgYnV0IG9uZSBjb21tYW5kIGlzIDIgYnl0ZXMs IHdpdGggdGhlIG91dGxpZXIgYmVpbmcgNCAKPiBieXRlcy4gWWV0LAo+IE1BWF9MRU4gaXMgNS4g SWYgd2UgX211c3RfIGtlZXAgdGhlIGh1Z2UgbGlzdCBvZiBvYmZ1c2NhdGVkIHJlZ2lzdGVyIAo+ IHdyaXRlcywKPiBjb3VsZCB3ZSBlbGltaW5hdGUgdGhlIHNpemUgbWVtYmVyPwoKW0FiaGluYXZd IFRoZSBuYW1lIGlzIHByb2JhYmx5IG1pc2xlYWRpbmcgeW91IGhlcmUuIE1UUCBtZW50aW9uZWQg aGVyZSAKaXMgc29tZXRoaW5nCnNwZWNpZmljIHRvIHRoZSBwYW5lbC4gSXQgaGFzIG5vIHJlbGF0 aW9uIHRvIG91ciBNVFAgYm9hcmQuCkhlbmNlIG5vbmUgb2YgdGhlc2UgY29tbWFuZHMgYXJlIHNw ZWNpZmljIHRvIG91ciBNVFAgYm9hcmQuIFRoZXkgYXJlIGFsbCAKcmVsYXRlZCB0bwp0aGUgcGFu ZWwuCgpUaGVyZSBhcmUgbm8gZHVwbGljYXRlcy4gVGhlIHNlcXVlbmNlcyBvZiB0aGUgcGFuZWwg b2Z0ZW4gZGVtYW5kIHRoZSAKc2FtZSBjb21tYW5kIHRvCmJlIHNlbnQgYWdhaW4gaW4gZGlmZmVy ZW50IHBsYWNlcy4KCllvdSBhcmUgcmlnaHQsIGFsbCB0aGUgY29tbWFuZHMgZXhjZXB0IG9uZSBo YXZlIDIgYnl0ZXMgb2YgcGF5bG9hZC4KSG93ZXZlciwgdGhlIDQgYnl0ZSBsb25nIGNvbW1hbmQg aGFzIHRvIGJlIHNlbnQgaW4gYmV0d2Vlbi4KSWYgd2Ugd2FudCB0byBnZXQgcmlkIG9mIHRoZSBl eHRyYSBtZW1iZXIgZWxlbWVudCwgSSBjYW4gYnJlYWsgdGhlIApjb21tYW5kcyBpbnRvIDMKc2V0 cy4KRmlyc3Qgc2V0IG9mIHggY29tbWFuZHMgd2l0aCAyIGJ5dGUgcGF5bG9hZCwgdGhlbiB0aGUg NCBieXRlIHBheWxvYWQgCmNvbW1hbmQsIHRoZW4gdGhlCnJlbWFpbmluZyAyIGJ5dGUgcGF5bG9h ZCBjb21tYW5kcy4KTGV0IG1lIGtub3cgaWYgdGhhdCB3b3JrcyBmb3IgeW91LgoKSSBoYXZlIHRy aWVkIHRvIGxlYXZlIGFzIG11Y2ggY29tbWVudHMgYXMgcG9zc2libGUgYWJvdXQgdGhlIGNvbW1h bmQgCnNldHMuCkl0IHdpbGwgYmUgZGlmZmljdWx0IHRvIGV4cGxhaW4gbW9yZS4KCj4gCj4gCj4+ ICsKPj4gK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpw YW5lbCkKPj4gK3sKPj4gKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IHBhbmVsX3RvX3RydWx5 X3dxeGdhKHBhbmVsKTsKPj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICoqZHNpcyA9IGN0eC0+ ZHNpOwo+PiArCWludCByZXQsIGksIGo7Cj4+ICsKPj4gKwlpZiAoY3R4LT5wcmVwYXJlZCkKPj4g KwkJcmV0dXJuIDA7Cj4+ICsKPj4gKwlyZXQgPSB0cnVseV93cXhnYV9wb3dlcl9vbihjdHgpOwo+ PiArCWlmIChyZXQgPCAwKQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJZHNpc1swXS0+bW9k ZV9mbGFncyB8PSBNSVBJX0RTSV9NT0RFX0xQTTsKPj4gKwlkc2lzWzFdLT5tb2RlX2ZsYWdzIHw9 IE1JUElfRFNJX01PREVfTFBNOwo+PiArCj4+ICsJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUo cGFuZWxfY21kcyk7IGorKykgewo+PiArCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Cj4gCj4g Q2FuIHlvdSBmbGlwIGkgYW5kIGo/IEhhdmluZyB0aGUgaW5uZXIgbG9vcCBhcyBpIGlzIHByZXR0 eSBjb25mdXNpbmcuCj4gCltBYmhpbmF2XSBBZ3JlZWQsIHdpbGwgZG8KPiBBbHNvLCBkcm9wIGRz aXMgYW5kIGRvIHMvMi9BUlJBWV9TSVpFKGN0eC0+ZHNpKS8KPiAKW0FiaGluYXZdIEFncmVlZCwg d2lsbCBkbwo+PiArCQkJcmV0ID0gbWlwaV9kc2lfZGNzX3dyaXRlX2J1ZmZlcihkc2lzW2ldLAo+ PiArCQkJCQlwYW5lbF9jbWRzW2pdLmNvbW1hbmRzLAo+PiArCQkJCQlwYW5lbF9jbWRzW2pdLnNp emUpOwo+PiArCQkJaWYgKHJldCA8IDApIHsKPj4gKwkJCQlkZXZfZXJyKGN0eC0+ZGV2LAo+PiAr CQkJCQkiZmFpbGVkIHRvIHR4IGNtZCBbJWRdLCBlcnI6ICVkXG4iLAo+PiArCQkJCQlqLCByZXQp Owo+PiArCQkJCXJldHVybiByZXQ7Cj4+ICsJCQl9Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlm b3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Cj4gCj4gU2FtZSBoZXJlLgpbQWJoaW5hdl0gQWdyZWVk LCB3aWxsIGRvCj4gCj4+ICsJCWlmIChtaXBpX2RzaV9kY3NfZXhpdF9zbGVlcF9tb2RlKGRzaXNb aV0pIDwgMCkgewo+PiArCQkJZGV2X2VycihjdHgtPmRldiwgImZhaWxlZCB0byBleGl0IHNsZWVw IG1vZGVcbiIpOwo+IAo+IHMvZGV2X2Vyci9EUk1fREVWX0VSUk9SLyBwbGVhc2UgYXBwbHkgdGhp cyB0byBhbGwgZGV2XyogbWVzc2FnZXMuCj4gCltBYmhpbmF2XSBBZ3JlZWQsIHdpbGwgZG8KPj4g KwkJCXJldHVybiAtRUNPTU07Cj4gCj4gV2h5IG5vdCByZXR1cm4gdGhlIGFjdHVhbCBlcnJvcj8K PiAKW0FiaGluYXZdIEFncmVlZCwgd2lsbCBkbwo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJbXNs ZWVwKDc4KTsKPiAKPiBXaHkgNzggbXM/IFRoaXMgc3R1ZmYgbmVlZHMgY29tbWVudHMuCj4gCltB YmhpbmF2XSBBZ3JlZWQsIHdpbGwgZG8KPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCAyOyBpKysp Cj4+ICsJCWlmIChtaXBpX2RzaV9kY3Nfc2V0X2Rpc3BsYXlfb24oZHNpc1tpXSkgPCAwKSB7Cj4+ ICsJCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIHNlbmQgZGlzcGxheSBvblxuIik7Cj4+ ICsJCQlyZXR1cm4gLUVDT01NOwo+IAo+IFNhbWUgY29tbWVudHMgaGVyZS4KPiAKPj4gKwkJfQo+ PiArCW1zbGVlcCg3OCk7Cj4+ICsKPj4gKwljdHgtPnByZXBhcmVkID0gdHJ1ZTsKPj4gKwo+PiAr CXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRydWx5X3dxeGdhX2VuYWJsZShz dHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKPj4gK3sKPj4gKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0 eCA9IHBhbmVsX3RvX3RydWx5X3dxeGdhKHBhbmVsKTsKPj4gKwo+PiArCWlmIChjdHgtPmVuYWJs ZWQpCj4+ICsJCXJldHVybiAwOwo+PiArCj4+ICsJaWYgKGN0eC0+YmFja2xpZ2h0KSB7Cj4+ICsJ CWN0eC0+YmFja2xpZ2h0LT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7Cj4+ICsJCWJh Y2tsaWdodF91cGRhdGVfc3RhdHVzKGN0eC0+YmFja2xpZ2h0KTsKPj4gKwl9Cj4gCj4gWW91IGNh biB1c2UgdGhlIGJhY2tsaWdodF9lbmFibGUvZGlzYWJsZSBoZWxwZXJzLCBhbmQgcGxlYXNlIGNo ZWNrIHRoZSAKPiByZXR1cm4KPiB2YWx1ZS4KPiAKW0FiaGluYXZdIFNhbWUgYXMgYWJvdmUsIGNh biB5b3UgcGxlYXNlIHByb3ZpZGUgYSByZWZlcmVuY2UgdG8gdGhlIEFQSSAKeW91CmFyZSByZWZl cnJpbmcgaGVyZT8KCj4+ICsJY3R4LT5lbmFibGVkID0gdHJ1ZTsKPj4gKwo+PiArCXJldHVybiAw Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRydWx5X3dxeGdhX2dldF9tb2RlcyhzdHJ1Y3Qg ZHJtX3BhbmVsICpwYW5lbCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yID0gcGFuZWwtPmNvbm5lY3RvcjsKPj4gKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IHBh bmVsX3RvX3RydWx5X3dxeGdhKHBhbmVsKTsKPj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZTsKPj4gKwo+PiArCW1vZGUgPSBkcm1fbW9kZV9jcmVhdGUoY29ubmVjdG9yLT5kZXYpOwo+ PiArCWlmICghbW9kZSkgewo+PiArCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0 ZSBhIG5ldyBkaXNwbGF5IG1vZGVcbiIpOwo+PiArCQlyZXR1cm4gMDsKPj4gKwl9Cj4+ICsKPj4g Kwlkcm1fZGlzcGxheV9tb2RlX2Zyb21fdmlkZW9tb2RlKCZjdHgtPnZtLCBtb2RlKTsKPj4gKwlj b25uZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0aF9tbSA9IDc0Owo+PiArCWNvbm5lY3Rvci0+ZGlz cGxheV9pbmZvLmhlaWdodF9tbSA9IDEzMTsKPj4gKwltb2RlLT50eXBlID0gRFJNX01PREVfVFlQ RV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsKPj4gKwlkcm1fbW9kZV9wcm9iZWRf YWRkKGNvbm5lY3RvciwgbW9kZSk7Cj4+ICsKPj4gKwlyZXR1cm4gMTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFuZWxfZnVuY3MgdHJ1bHlfd3F4Z2FfZHJtX2Z1bmNz ID0gewo+PiArCS5kaXNhYmxlID0gdHJ1bHlfd3F4Z2FfZGlzYWJsZSwKPj4gKwkudW5wcmVwYXJl ID0gdHJ1bHlfd3F4Z2FfdW5wcmVwYXJlLAo+PiArCS5wcmVwYXJlID0gdHJ1bHlfd3F4Z2FfcHJl cGFyZSwKPj4gKwkuZW5hYmxlID0gdHJ1bHlfd3F4Z2FfZW5hYmxlLAo+PiArCS5nZXRfbW9kZXMg PSB0cnVseV93cXhnYV9nZXRfbW9kZXMsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW50IHRydWx5 X3dxeGdhX3BhbmVsX2FkZChzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCkKPj4gK3sKPj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSBjdHgtPmRldjsKPj4gKwlpbnQgcmV0LCBpOwo+PiArCj4+ICsJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyk7IGkrKykKPj4gKwkJY3R4LT5z dXBwbGllc1tpXS5zdXBwbHkgPSByZWd1bGF0b3JfbmFtZXNbaV07Cj4+ICsKPj4gKwlyZXQgPSBk ZXZtX3JlZ3VsYXRvcl9idWxrX2dldChkZXYsIEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyksCj4+ ICsJCQkJICAgICAgY3R4LT5zdXBwbGllcyk7Cj4+ICsJaWYgKHJldCA8IDApCj4+ICsJCXJldHVy biByZXQ7Cj4+ICsKPj4gKwljdHgtPnJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dldChkZXYsICJy ZXNldCIsIEdQSU9EX09VVF9ISUdIKTsKPj4gKwlpZiAoSVNfRVJSKGN0eC0+cmVzZXRfZ3Bpbykp IHsKPj4gKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IHJlc2V0IGdwaW8gJWxkXG4iLAo+PiAr CQkJUFRSX0VSUihjdHgtPnJlc2V0X2dwaW8pKTsKPj4gKwkJcmV0dXJuIFBUUl9FUlIoY3R4LT5y ZXNldF9ncGlvKTsKPj4gKwl9Cj4+ICsKPj4gKwljdHgtPm1vZGVfZ3BpbyA9IGRldm1fZ3Bpb2Rf Z2V0KGRldiwgIm1vZGUiLCBHUElPRF9PVVRfTE9XKTsKPj4gKwlpZiAoSVNfRVJSKGN0eC0+bW9k ZV9ncGlvKSkgewo+PiArCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgbW9kZSBncGlvICVsZFxu IiwKPj4gKwkJCVBUUl9FUlIoY3R4LT5tb2RlX2dwaW8pKTsKPj4gKwkJcmV0dXJuIFBUUl9FUlIo Y3R4LT5tb2RlX2dwaW8pOwo+PiArCX0KPj4gKwo+PiArCS8qIGR1YWwgcG9ydCAqLwo+PiArCWdw aW9kX3NldF92YWx1ZShjdHgtPm1vZGVfZ3BpbywgMCk7Cj4+ICsKPj4gKwlyZXQgPSBvZl9nZXRf dmlkZW9tb2RlKGRldi0+b2Zfbm9kZSwgJmN0eC0+dm0sIDApOwo+IAo+IFVzZSBvZl9nZXRfZHJt X2Rpc3BsYXlfbW9kZSgpIGFuZCBzdG9yZSBpdCBhcyBhIGRybV9kaXNwbGF5X21vZGUuIFRoaXMg Cj4gd2lsbAo+IHNpbXBsaWZ5IGdldF9tb2RlcygpCltBYmhpbmF2XSBBZ3JlZWQsIHdpbGwgZG8u Cj4gCj4+ICsJaWYgKHJldCA8IDApCj4+ICsJCXJldHVybiByZXQ7Cj4+ICsKPj4gKwlkcm1fcGFu ZWxfaW5pdCgmY3R4LT5wYW5lbCk7Cj4+ICsJY3R4LT5wYW5lbC5kZXYgPSBkZXY7Cj4+ICsJY3R4 LT5wYW5lbC5mdW5jcyA9ICZ0cnVseV93cXhnYV9kcm1fZnVuY3M7Cj4+ICsJZHJtX3BhbmVsX2Fk ZCgmY3R4LT5wYW5lbCk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGlj IHZvaWQgdHJ1bHlfd3F4Z2FfcGFuZWxfZGVsKHN0cnVjdCB0cnVseV93cXhnYSAqY3R4KQo+PiAr ewo+PiArCWlmIChjdHgtPnBhbmVsLmRldikKPiAKPiBjdHggaXMgYSBkZXZpY2UgbWFuYWdlZCBy ZXNvdXJjZSB3aG9zZSBwYXJlbnQgZGV2aWNlIGlzIGFzc2lnbmVkIHRvIAo+IHBhbmVsLmRldgo+ IChpdCdzIGFsc28gc3RvcmVkIGluIGN0eC0+ZGV2KS4gU28gSSBkb24ndCB0aGluayB0aGlzIGNo ZWNrIGNvdWxkIGV2ZXIgCj4gYmUgZmFsc2UKPiB3aXRob3V0IHNvbWUgdGVycmlibGUgc2lkZSBl ZmZlY3RzLiBJdCBpcyBwcm9iYWJseSB3b3J0aCBjaGVja2luZyAKPiB3aGV0aGVyIHlvdQo+IG5l ZWQgdG8gc3RvcmUgZGV2IGluIGFsbCBvZiB0aGVzZSBwbGFjZXMsIHlvdSBtaWdodCBmaW5kIHlv dSBjYW4gdHJpbSAKPiBpdCBvdXQgb2YKPiBjdHguCj4gCj4gU28gd2l0aCB0aGF0IGluIG1pbmQs IGp1c3Qgc3RpY2sgdGhlIGRybV9wYW5lbF9yZW1vdmUoKSBjYWxsIGF0IHRoZSAKPiBjYWxsc2l0 ZXMgb2YKPiB0cnVseV93cXhnYV9kZWwoKSBhbmQgZGVsZXRlIHRoaXMgZnVuY3Rpb24uCj4gCltB YmhpbmF2XSBBZ3JlZWQsIEkgY2FuIHJlcGxhY2UgdHJ1bHlfd3F4Z2FfZGVsKCkgaW5zdGFuY2Vz IHdpdGgganVzdCAKZHJtX3BhbmVsX3JlbW92ZSgpLgpSZWdhcmRpbmcgdGhlIG90aGVyIGNvbW1l bnQsIGFyZSB5b3Ugc3VnZ2VzdGluZyB0byByZW1vdmUgZGV2IGZyb20gY3R4IAphbmQganVzdCB1 c2UKKGN0eC0+cGFuZWwuZGV2KSBhcyB0aGV5IGJvdGggYXJlIHRoZSBzYW1lPwoKPj4gKwkJZHJt X3BhbmVsX3JlbW92ZSgmY3R4LT5wYW5lbCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdHJ1 bHlfd3F4Z2FfcHJvYmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQo+PiArewo+PiArCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZkc2ktPmRldjsKPj4gKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0 eDsKPj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpzZWNvbmRhcnk7Cj4+ICsJc3RydWN0IGRl dmljZV9ub2RlICpkc2kxOwo+PiArCXN0cnVjdCBtaXBpX2RzaV9ob3N0ICpkc2kxX2hvc3Q7Cj4+ ICsJaW50IHJldCA9IDA7Cj4+ICsJY29uc3Qgc3RydWN0IG1pcGlfZHNpX2RldmljZV9pbmZvIGlu Zm8gPSB7LnR5cGUgPSAidHJ1bHludDM1NTk3IiwKPj4gKwkJLmNoYW5uZWwgPSAwLAo+PiArCQku bm9kZSA9IE5VTEwsCj4+ICsJfTsKPj4gKwo+PiArCWN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNp emVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7Cj4+ICsKPj4gKwlpZiAoIWN0eCkKPj4gKwkJcmV0dXJu IC1FTk9NRU07Cj4+ICsKPj4gKwkvKiBUaGlzIGRldmljZSByZXByZXNlbnRzIGl0c2VsZiBhcyBv bmUgd2l0aAo+PiArCSAqIHR3byBpbnB1dCBwb3J0cyB3aGljaCBhcmUgZmVkIGJ5IHRoZSBvdXRw dXQKPj4gKwkgKiBwb3J0cyBvZiB0aGUgdHdvIERTSSBjb250cm9sbGVycyAuIFRoZSBEU0kwCj4+ ICsJICogaXMgdGhlIG1hc3RlciBjb250cm9sbGVyIGFuZCBoYXMgbW9zdCBvZiB0aGUKPj4gKwkg KiBwYW5lbCByZWxhdGVkIGluZm8gaW4gaXRzIGNoaWxkIG5vZGUuCj4+ICsJICovCj4+ICsKPj4g Kwlkc2kxID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9ub2RlKGRzaS0+ZGV2Lm9mX25vZGUsIDEsIC0x KTsKPj4gKwlpZiAoIWRzaTEpIHsKPj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHJl bW90ZSBub2RlIGZvciBzZWNvbmRhcnkgRFNJXG4iKTsKPj4gKwkJcmV0ID0gLUVOT0RFVjsKPj4g KwkJZ290byBlcnJfZ2V0X3JlbW90ZTsKPj4gKwl9Cj4+ICsKPj4gKwlkc2kxX2hvc3QgPSBvZl9m aW5kX21pcGlfZHNpX2hvc3RfYnlfbm9kZShkc2kxKTsKPj4gKwlpZiAoIWRzaTFfaG9zdCkgewo+ PiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBmaW5kIGRzaSBob3N0XG4iKTsKPj4gKwkJcmV0 ID0gLUVQUk9CRV9ERUZFUjsKPj4gKwkJZ290byBlcnJfaG9zdDsKPj4gKwl9Cj4+ICsKPj4gKwlv Zl9ub2RlX3B1dChkc2kxKTsKPj4gKwo+PiArCS8qIHJlZ2lzdGVyIHRoZSBzZWNvbmQgRFNJIGRl dmljZSAqLwo+PiArCXNlY29uZGFyeSA9IG1pcGlfZHNpX2RldmljZV9yZWdpc3Rlcl9mdWxsKGRz aTFfaG9zdCwgJmluZm8pOwo+PiArCj4gCj4gbml0OiBleHRyYSBsaW5lCj4gCj4gV2hpbGUgSSdt IG5pdHBpY2tpbmcsIHRoaXMgbmFtZSBsZWF2ZXMgc29tZXRoaW5nIHRvIGJlIGRlc2lyZWQuIAo+ IEV2ZXJ5dGhpbmcgZWxzZQo+IGlzIGRzaTEsIHNvIHBlcmhhcHMgdGhpcyBjb3VsZCBiZSBkc2kx X2RldmljZSB0byBiZSBjb25zaXN0ZW50Lgo+IApbQWJoaW5hdl0gQWdyZWVkLCB3aWxsIGRvLgoK Pj4gKwlpZiAoSVNfRVJSKHNlY29uZGFyeSkpIHsKPj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQg dG8gY3JlYXRlIGRzaSBkZXZpY2VcbiIpOwo+PiArCQlyZXQgPSBQVFJfRVJSKGRzaSk7Cj4+ICsJ CWdvdG8gZXJyX2RzaV9kZXZpY2U7Cj4+ICsJfQo+PiArCj4+ICsJbWlwaV9kc2lfc2V0X2RydmRh dGEoZHNpLCBjdHgpOwo+PiArCj4+ICsJY3R4LT5kZXYgPSBkZXY7Cj4+ICsJY3R4LT5kc2lbMF0g PSBkc2k7Cj4+ICsJY3R4LT5kc2lbMV0gPSBzZWNvbmRhcnk7Cj4+ICsKPj4gKwlyZXQgPSB0cnVs eV93cXhnYV9wYW5lbF9hZGQoY3R4KTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCWRldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIGFkZCBwYW5lbFxuIik7Cj4+ICsJCWdvdG8gZXJyX3BhbmVsX2FkZDsKPj4g Kwl9Cj4+ICsKPj4gKwkvKiBjb25maWd1cmUgbWFzdGVyIERTSSBkZXZpY2UgKi8KPj4gKwlkc2kt PmxhbmVzID0gNDsKPj4gKwlkc2ktPmZvcm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7Cj4+ICsJ ZHNpLT5tb2RlX2ZsYWdzID0gTUlQSV9EU0lfTU9ERV9WSURFTyB8IAo+PiBNSVBJX0RTSV9DTE9D S19OT05fQ09OVElOVU9VUyB8Cj4+ICsJCQkJCQlNSVBJX0RTSV9NT0RFX0xQTTsKPj4gKwo+PiAr CXJldCA9IG1pcGlfZHNpX2F0dGFjaChkc2kpOwo+PiArCWlmIChyZXQgPCAwKSB7Cj4+ICsJCWRl dl9lcnIoZGV2LCAibWFzdGVyIGRzaSBhdHRhY2ggZmFpbGVkXG4iKTsKPj4gKwkJZ290byBlcnJf ZHNpX2F0dGFjaDsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBjb25maWd1cmUgc2Vjb25kYXJ5IERTSSBk ZXZpY2UgKi8KPj4gKwlzZWNvbmRhcnktPmxhbmVzID0gNDsKPj4gKwlzZWNvbmRhcnktPmZvcm1h dCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7Cj4+ICsJc2Vjb25kYXJ5LT5tb2RlX2ZsYWdzID0gTUlQ SV9EU0lfTU9ERV9WSURFTyB8Cj4+ICsJCU1JUElfRFNJX0NMT0NLX05PTl9DT05USU5VT1VTIHwK Pj4gKwkJTUlQSV9EU0lfTU9ERV9MUE07Cj4+ICsKPj4gKwlyZXQgPSBtaXBpX2RzaV9hdHRhY2go c2Vjb25kYXJ5KTsKPj4gKwlpZiAocmV0IDwgMCkgewo+PiArCQlkZXZfZXJyKGRldiwgIm1pcGlf ZHNpX2F0dGFjaCBvbiBzZWNvbmRhcnkgZmFpbGVkXG4iKTsKPj4gKwkJZ290byBlcnJfZHNpX2F0 dGFjaF9zZWM7Cj4+ICsJfQo+IAo+IFJlcGxhY2UgdGhlIGR1cGxpY2F0ZWQgYXR0YWNoIGNvZGUg d2l0aCBhIGxvb3A6Cj4gCj4gICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgt PmRzaSk7IGkrKykgewo+ICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpk c2lfZGV2ID0gY3R4LT5kc2lbaV07Cj4gCj4gICAgICAgICAgICAgICAgIGRzaV9kZXYtPmxhbmVz ID0gNDsKPiAgICAgICAgICAgICAgICAgZHNpX2Rldi0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JH Qjg4ODsKPiAgICAgICAgICAgICAgICAgZHNpX2Rldi0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01P REVfVklERU8gfCAKPiBNSVBJX0RTSV9NT0RFX0xQTSB8Cj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUzsKPiAKPiAgICAg ICAgICAgICAgICAgcmV0ID0gbWlwaV9kc2lfYXR0YWNoKGRzaV9kZXYpOwo+ICAgICAgICAgICAg ICAgICBpZiAocmV0IDwgMCkgewo+ICAgICAgICAgICAgICAgICAgICAgICAgIERSTV9ERVZfRVJS T1IoZGV2LCAibWFzdGVyIGRzaSBhdHRhY2ggCj4gZmFpbGVkXG4iKTsKPiAgICAgICAgICAgICAg ICAgICAgICAgICBnb3RvIGVycl9kc2lfYXR0YWNoOwo+ICAgICAgICAgICAgICAgICB9Cj4gICAg ICAgICB9Cj4gCltBYmhpbmF2XSBBZ3JlZWQsIHdpbGwgZG8uCj4+ICsKPj4gKwlyZXR1cm4gMDsK Pj4gKwo+PiArZXJyX2RzaV9hdHRhY2hfc2VjOgo+PiArCW1pcGlfZHNpX2RldGFjaChjdHgtPmRz aVswXSk7Cj4+ICtlcnJfZHNpX2F0dGFjaDoKPj4gKwl0cnVseV93cXhnYV9wYW5lbF9kZWwoY3R4 KTsKPj4gK2Vycl9wYW5lbF9hZGQ6Cj4+ICsJbWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIoc2Vj b25kYXJ5KTsKPj4gK2Vycl9kc2lfZGV2aWNlOgo+PiArZXJyX2hvc3Q6Cj4+ICsJb2Zfbm9kZV9w dXQoZHNpMSk7Cj4+ICtlcnJfZ2V0X3JlbW90ZToKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IHRydWx5X3dxeGdhX3JlbW92ZShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNl ICpkc2kpCj4+ICt7Cj4+ICsJc3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBtaXBpX2RzaV9nZXRf ZHJ2ZGF0YShkc2kpOwo+PiArCj4+ICsJaWYgKGN0eC0+ZHNpWzBdKQo+PiArCQltaXBpX2RzaV9k ZXRhY2goY3R4LT5kc2lbMF0pOwo+PiArCWlmIChjdHgtPmRzaVsxXSkgewo+PiArCQltaXBpX2Rz aV9kZXRhY2goY3R4LT5kc2lbMV0pOwo+PiArCQltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3Rlcihj dHgtPmRzaVsxXSk7Cj4+ICsJfQo+PiArCXRydWx5X3dxeGdhX3BhbmVsX2RlbChjdHgpOwo+PiAr Cj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIHRydWx5X3dxeGdhX29mX21hdGNoW10gPSB7Cj4+ICsJeyAuY29tcGF0aWJsZSA9ICJ0 cnVseSxudDM1NTk3IiwgfSwKPj4gKwl7IH0KPj4gK307Cj4+ICtNT0RVTEVfREVWSUNFX1RBQkxF KG9mLCB0cnVseV93cXhnYV9vZl9tYXRjaCk7Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgbWlwaV9k c2lfZHJpdmVyIHRydWx5X3dxeGdhX2RyaXZlciA9IHsKPj4gKwkuZHJpdmVyID0gewo+PiArCQku bmFtZSA9ICJwYW5lbF90cnVseV9udDM1NTk3IiwKPj4gKwkJLm9mX21hdGNoX3RhYmxlID0gdHJ1 bHlfd3F4Z2Ffb2ZfbWF0Y2gsCj4+ICsJfSwKPj4gKwkucHJvYmUgPSB0cnVseV93cXhnYV9wcm9i ZSwKPj4gKwkucmVtb3ZlID0gdHJ1bHlfd3F4Z2FfcmVtb3ZlLAo+PiArfTsKPj4gK21vZHVsZV9t aXBpX2RzaV9kcml2ZXIodHJ1bHlfd3F4Z2FfZHJpdmVyKTsKPj4gKwo+PiArTU9EVUxFX0RFU0NS SVBUSU9OKCJUcnVseSBOVDM1NTk3IERTSSBQYW5lbCBEcml2ZXIiKTsKPj4gK01PRFVMRV9MSUNF TlNFKCJHUEwgdjIiKTsKPj4gLS0KPj4gVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJ bmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSAKPj4gRm9ydW0sCj4+IGEgTGludXgg Rm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKPj4gCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=