From mboxrd@z Thu Jan 1 00:00:00 1970 From: spanda-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org Subject: Re: [[RFC]DPU PATCH 1/4] drm/bridge: add support for sn65dsi86 bridge driver Date: Thu, 19 Apr 2018 10:07:20 +0530 Message-ID: <2cca89949a3e7b36eece551091b2586b@codeaurora.org> References: <1524054002-17869-1-git-send-email-spanda@codeaurora.org> <1524054002-17869-2-git-send-email-spanda@codeaurora.org> <20180418141144.GW73214@art_vandelay> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180418141144.GW73214@art_vandelay> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Sean Paul Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org T24gMjAxOC0wNC0xOCAxOTo0MSwgU2VhbiBQYXVsIHdyb3RlOgo+IE9uIFdlZCwgQXByIDE4LCAy MDE4IGF0IDA1OjQ5OjU5UE0gKzA1MzAsIFNhbmRlZXAgUGFuZGEgd3JvdGU6Cj4+IEFkZCBzdXBw b3J0IGZvciBUSSdzIHNuNjVkc2k4NiBkc2kyZWRwIGJyaWRnZSBjaGlwLgo+PiBUaGUgY2hpcCBj b252ZXJ0cyBEU0kgdHJhbnNtaXR0ZWQgc2lnbmFsIHRvIGVEUCBzaWduYWwsCj4+IHdoaWNoIGlz IGZlZCB0byB0aGUgY29ubmVjdGVkIGVEUCBwYW5lbC4KPj4gCj4+IFRoaXMgY2hpcCBjYW4gYmUg Y29udHJvbGxlZCB2aWEgZWl0aGVyIGkyYyBpbnRlcmZhY2Ugb3IKPj4gZHNpIGludGVyZmFjZS4g Q3VycmVudGx5IGluIGRyaXZlciBhbGwgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzCj4+IGFyZSBiZWlu ZyBhY2Nlc3NlZCB0aHJvdWdoIGkyYyBpbnRlcmZhY2Ugb25seS4KPj4gQWxzbyBhcyBvZiBub3cg SFBEIHN1cHBvcnQgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIGJyaWRnZQo+PiBjaGlwIGRyaXZlci4K Pj4gCj4+IFNpZ25lZC1vZmYtYnk6IFNhbmRlZXAgUGFuZGEgPHNwYW5kYUBjb2RlYXVyb3JhLm9y Zz4KPj4gLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jIHwgNzQy IAo+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+ICAxIGZpbGUgY2hhbmdl ZCwgNzQyIGluc2VydGlvbnMoKykKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jCj4+IAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3Rp LXNuNjVkc2k4Ni5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLmM3 OThmMmYKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3Rp LXNuNjVkc2k4Ni5jCj4+IEBAIC0wLDAgKzEsNzQyIEBACj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCAqLwo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K Pj4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+ Cj4+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+ICsjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPj4gKyNpbmNsdWRlIDxsaW51 eC9ncGlvLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgo+PiArI2luY2x1ZGUgPGxp bnV4L29mX2dyYXBoLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+ Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5o Pgo+PiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+PiArI2luY2x1ZGUgPGRy bS9kcm1fY3J0Y19oZWxwZXIuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Cj4+ ICsjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgo+IAo+IEkgaGF2ZSBhIGhhcmQgdGltZSBiZWxp ZXZpbmcgdGhhdCB5b3UgbmVlZCBhbGwgb2YgdGhlc2UgaW5jbHVkZXMuIE9mZiAKPiB0aGUgdG9w IG9mCj4gbXkgaGVhZCwgeW91IGNvdWxkIHByb2JhYmx5IHJlbW92ZSB0eXBlcywga2VybmVsLCBp bml0LCAKPiBwbGF0Zm9ybV9kZXZpY2UsIGRlbGF5LAo+IGRybVAsIGRybV9hdG9taWMsIGRybV9j cnRjX2hlbHBlci4gWW91IGNvdWxkIHByb2JhYmx5IHRyaW0gaXQgZXZlbiAKPiBmdXJ0aGVyIHdp dGgKPiB0aGUgaGVscCBvZiB5b3VyIGNvbXBpbGVyLiBUaGVzZSBzaG91bGQgYWxzbyBiZSBpbiBh bHBoYWJldGljYWwgb3JkZXIuCj4gCj4+ICsKPj4gKyNkZWZpbmUgU05fQlJJREdFX1JFVklTSU9O X0lEIDB4Mgo+PiArCj4+ICsvKiBMaW5rIFRyYWluaW5nIHNwZWNpZmljIHJlZ2lzdGVycyAqLwo+ PiArI2RlZmluZSBTTl9ERVZJQ0VfUkVWX1JFRwkJCTB4MDgKPj4gKyNkZWZpbmUgU05fUkVGQ0xL X0ZSRVFfUkVHCQkJMHgwQQo+PiArI2RlZmluZSBTTl9EU0lfTEFORVNfUkVHCQkJMHgxMAo+PiAr I2RlZmluZSBTTl9EU0lBX0NMS19GUkVRX1JFRwkJCTB4MTIKPj4gKyNkZWZpbmUgU05fRU5IX0ZS QU1FX1JFRwkJCTB4NUEKPj4gKyNkZWZpbmUgU05fU1NDX0NPTkZJR19SRUcJCQkweDkzCj4+ICsj ZGVmaW5lIFNOX0RBVEFSQVRFX0NPTkZJR19SRUcJCQkweDk0Cj4+ICsjZGVmaW5lIFNOX1BMTF9F TkFCTEVfUkVHCQkJMHgwRAo+PiArI2RlZmluZSBTTl9TQ1JBTUJMRV9DT05GSUdfUkVHCQkJMHg5 NQo+PiArI2RlZmluZSBTTl9BVVhfV0RBVEEwX1JFRwkJCTB4NjQKPj4gKyNkZWZpbmUgU05fQVVY X0FERFJfMTlfMTZfUkVHCQkJMHg3NAo+PiArI2RlZmluZSBTTl9BVVhfQUREUl8xNV84X1JFRwkJ CTB4NzUKPj4gKyNkZWZpbmUgU05fQVVYX0FERFJfN18wX1JFRwkJCTB4NzYKPj4gKyNkZWZpbmUg U05fQVVYX0xFTkdUSF9SRUcJCQkweDc3Cj4+ICsjZGVmaW5lIFNOX0FVWF9DTURfUkVHCQkJCTB4 NzgKPj4gKyNkZWZpbmUgU05fTUxfVFhfTU9ERV9SRUcJCQkweDk2Cj4+ICsjZGVmaW5lIFNOX1BB R0VfU0VMRUNUX1JFRwkJCTB4RkYKPj4gKyNkZWZpbmUgU05fQVVYX1JEQVRBMF9SRUcJCQkweDc5 Cj4+ICsvKiB2aWRlbyBjb25maWcgc3BlY2lmaWMgcmVnaXN0ZXJzICovCj4+ICsjZGVmaW5lIFNO X0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfTE9XX1JFRwkweDIwCj4+ICsjZGVmaW5lIFNOX0NIQV9B Q1RJVkVfTElORV9MRU5HVEhfSElHSF9SRUcJMHgyMQo+PiArI2RlZmluZSBTTl9DSEFfVkVSVElD QUxfRElTUExBWV9TSVpFX0xPV19SRUcJMHgyNAo+PiArI2RlZmluZSBTTl9DSEFfVkVSVElDQUxf RElTUExBWV9TSVpFX0hJR0hfUkVHCTB4MjUKPj4gKyNkZWZpbmUgU05fQ0hBX0hTWU5DX1BVTFNF X1dJRFRIX0xPV19SRUcJMHgyQwo+PiArI2RlZmluZSBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhf SElHSF9SRUcJMHgyRAo+PiArI2RlZmluZSBTTl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfTE9XX1JF RwkweDMwCj4+ICsjZGVmaW5lIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRwkweDMx Cj4+ICsjZGVmaW5lIFNOX0NIQV9IT1JJWk9OVEFMX0JBQ0tfUE9SQ0hfUkVHCTB4MzQKPj4gKyNk ZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0JBQ0tfUE9SQ0hfUkVHCQkweDM2Cj4+ICsjZGVmaW5lIFNO X0NIQV9IT1JJWk9OVEFMX0ZST05UX1BPUkNIX1JFRwkweDM4Cj4+ICsjZGVmaW5lIFNOX0NIQV9W RVJUSUNBTF9GUk9OVF9QT1JDSF9SRUcJCTB4M0EKPj4gKyNkZWZpbmUgU05fREFUQV9GT1JNQVRf UkVHCQkJMHg1Qgo+PiArI2RlZmluZSBTTl9DT0xPUl9CQVJfQ09ORklHX1JFRwkJCTB4M0MKPj4g Kwo+PiArI2RlZmluZSBEUFBMTF9DTEtfU1JDX1JFRkNMSwkwCj4+ICsjZGVmaW5lIERQUExMX0NM S19TUkNfRFNJQ0xLCTEKPj4gKyNkZWZpbmUgTUlOX0RTSV9DTEtfRlJFUV9NSFoJNDAKPj4gKwo+ PiArZW51bSB0aV9zbl9icmlkZ2VfcmVmX2Nsa3Mgewo+PiArCVNOX1JFRl9DTEtfMTJfTUhaID0g MCwKPj4gKwlTTl9SRUZfQ0xLXzE5XzJfTUhaLAo+PiArCVNOX1JFRl9DTEtfMjZfTUhaLAo+PiAr CVNOX1JFRl9DTEtfMjdfTUhaLAo+PiArCVNOX1JFRl9DTEtfMzhfNF9NSFosCj4+ICsJU05fUkVG X0NMS19NQVgsCj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgdGlfc25fYnJpZGdlIHsKPj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXY7Cj4+ICsJc3RydWN0IGRybV9icmlkZ2UgYnJpZGdlOwo+PiArCXN0cnVj dCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsKPj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmhvc3Rf bm9kZTsKPj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2k7Cj4+ICsJLyogaGFuZGxlIHRv IHRoZSBjb25uZWN0ZWQgZURQIHBhbmVsICovCj4+ICsJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7 Cj4+ICsJaW50IGlycTsKPj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICppcnFfZ3BpbzsKPj4gKwkvKiBs aXN0IG9mIGdwaW9zIG5lZWRlZCB0byBlbmFibGUgdGhlIGJyaWRnZSBmdW5jdGlvbmFsaXR5ICov Cj4+ICsJc3RydWN0IGdwaW9fZGVzY3MgKmVuYWJsZV9ncGlvczsKPiAKPiBXaHkgYXJlIHRoZSBl bmFibGUgZ3Bpb3MgYSBsaXN0PwoKVGhpcyBhcyBwZXIgdGhlIHJldmlldyBjb21tZW50IGluIHBy ZXZpb3VzIHBhdGNoc2V0CiJJIHNlZSBJUlEgYW5kIEVOIGluIHRoZSBkYXRhc2hlZXQsIGJ1dCBu b3QgdGhlIG90aGVycy4gSXQgc2VlbXMgbGlrZSAKdGhlIGF1eF8qCmFuZCBlZHBfKiBncGlvcyBh cmUgYWx3YXlzIGVxdWFsIHRvIGVuLiBTbyBpZiB5b3UgYWN0dWFsbHkgbmVlZCB0aGVtLCAKZG9u J3QKc3BlY2lmeSBhIG5ldyBzdHJ1Y3QsIGp1c3QgYWRkIGlycV9ncGlvIHRvIHRoZSBtYWluIHN0 cnVjdCBhbmQgYWRkIGFuIAphcnJheSBvZgplbl9ncGlvcyB0byBoYW5kbGUgdGhlIHJlc3QuIgoK SSBzZWUgaW4gc2NoZW1hdGljIDIgbW9yZSBncGlvcyBhcmUgbmVlZGVkIHRvIGVuYWJsZSBhdXhf Y2hhbm5lbCAKY29tbXVuaWNhdGlvbgp0aHJvdWdoIHRoZSBkZGMuIFNvIGkgaGF2ZSBwdXQgYW4g YXJyYXkgb2YgZW5hYmxlIGdwaW9zLiBCYXNlZCBvbiBkdCBpdCAKd2lsbCBkeW5hbWljYWxseQpw YXJzZSBvbmUgb3IgbW9yZSBncGlvcy4KCj4gCj4+ICsJdW5zaWduZWQgaW50IG51bV9zdXBwbGll czsKPj4gKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSAqc3VwcGxpZXM7Cj4+ICsJc3RydWN0 IGkyY19jbGllbnQgKmkyY19jbGllbnQ7Cj4+ICsJc3RydWN0IGkyY19hZGFwdGVyICpkZGM7Cj4+ ICsJYm9vbCBwb3dlcl9vbjsKPj4gKwl1MzIgbnVtX21vZGVzOwo+PiArCXN0cnVjdCBkcm1fZGlz cGxheV9tb2RlIGN1cnJfbW9kZTsKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25fYnJp ZGdlX3dyaXRlKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhLCB1OCByZWcsIHU4IAo+PiB2YWwp Cj4+ICt7Cj4+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHBkYXRhLT5pMmNfY2xpZW50 Owo+PiArCXU4IGJ1ZlsyXSA9IHtyZWcsIHZhbH07Cj4+ICsJc3RydWN0IGkyY19tc2cgbXNnID0g ewo+PiArCQkuYWRkciA9IGNsaWVudC0+YWRkciwKPj4gKwkJLmZsYWdzID0gMCwKPj4gKwkJLmxl biA9IDIsCj4+ICsJCS5idWYgPSBidWYsCj4+ICsJfTsKPj4gKwo+PiArCWlmIChpMmNfdHJhbnNm ZXIoY2xpZW50LT5hZGFwdGVyLCAmbXNnLCAxKSA8IDEpIHsKPj4gKwkJRFJNX0VSUk9SKCJpMmMg d3JpdGUgZmFpbGVkXG4iKTsKPj4gKwkJcmV0dXJuIC1FSU87Cj4+ICsJfQo+PiArCj4+ICsJcmV0 dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3JlYWQoc3RydWN0 IHRpX3NuX2JyaWRnZSAqcGRhdGEsCj4+ICsJCQkJCXU4IHJlZywgY2hhciAqYnVmLCB1MzIgc2l6 ZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gcGRhdGEtPmkyY19jbGll bnQ7Cj4+ICsJc3RydWN0IGkyY19tc2cgbXNnWzJdID0gewo+PiArCQl7Cj4+ICsJCQkuYWRkciA9 IGNsaWVudC0+YWRkciwKPj4gKwkJCS5mbGFncyA9IDAsCj4+ICsJCQkubGVuID0gMSwKPj4gKwkJ CS5idWYgPSAmcmVnLAo+PiArCQl9LAo+PiArCQl7Cj4+ICsJCQkuYWRkciA9IGNsaWVudC0+YWRk ciwKPj4gKwkJCS5mbGFncyA9IEkyQ19NX1JELAo+PiArCQkJLmxlbiA9IHNpemUsCj4+ICsJCQku YnVmID0gYnVmLAo+PiArCQl9Cj4+ICsJfTsKPj4gKwo+PiArCWlmIChpMmNfdHJhbnNmZXIoY2xp ZW50LT5hZGFwdGVyLCBtc2csIDIpICE9IDIpIHsKPj4gKwkJRFJNX0VSUk9SKCJpMmMgcmVhZCBm YWlsZWRcbiIpOwo+PiArCQlyZXR1cm4gLUVJTzsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX2dwaW9fY29uZmlndXJlKHN0 cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhLCAKPj4gYm9vbCBvbikKPj4gK3sKPj4gKwlpbnQgdmFs dWUsIGkgPSAwLCBudW0gPSAwOwo+PiArCWludCAqdmFsdWVfYXJyYXkgPSBOVUxMOwo+PiArCj4+ ICsJaWYgKCFwZGF0YSkKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJdmFsdWUgPSBvbiA/IDEgOiAw Owo+PiArCW51bSA9IHBkYXRhLT5lbmFibGVfZ3Bpb3MtPm5kZXNjczsKPj4gKwl2YWx1ZV9hcnJh eSA9IGttYWxsb2MobnVtICogc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOwo+PiArCWlmICh2YWx1 ZV9hcnJheSkgewo+PiArCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCj4+ICsJCQl2YWx1ZV9h cnJheVtpXSA9IHZhbHVlOwo+PiArCQlncGlvZF9zZXRfYXJyYXlfdmFsdWUobnVtLCBwZGF0YS0+ ZW5hYmxlX2dwaW9zLT5kZXNjLAo+PiArCQkJCSAgICAgIHZhbHVlX2FycmF5KTsKPj4gKwkJa2Zy ZWUodmFsdWVfYXJyYXkpOwo+PiArCX0KPj4gKwo+PiArCWlmIChwZGF0YS0+aXJxX2dwaW8pCj4+ ICsJCWdwaW9kX3NldF92YWx1ZShwZGF0YS0+aXJxX2dwaW8sIHZhbHVlKTsKPj4gKwo+PiArCURS TV9ERUJVRygiY29uZmlnIHRvOiAlZFxuIiwgdmFsdWUpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg dm9pZCB0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSwg Ym9vbCAKPj4gZW5hYmxlKQo+PiArewo+PiArCXN0YXRpYyBpbnQgcmVmX2NvdW50Owo+PiArCj4+ ICsJaWYgKCFwZGF0YSkKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJaWYgKGVuYWJsZSkKPj4gKwkJ cmVmX2NvdW50Kys7Cj4+ICsJZWxzZQo+PiArCQlyZWZfY291bnQtLTsKPj4gKwo+PiArCWlmIChl bmFibGUgJiYgKHJlZl9jb3VudCA9PSAxKSkgewo+PiArCQl0aV9zbl9icmlkZ2VfZ3Bpb19jb25m aWd1cmUocGRhdGEsIHRydWUpOwo+PiArCj4+ICsJCWlmIChyZWd1bGF0b3JfYnVsa19lbmFibGUo cGRhdGEtPm51bV9zdXBwbGllcywKPj4gKwkJCQkJCXBkYXRhLT5zdXBwbGllcykpIHsKPj4gKwkJ CURSTV9FUlJPUigiYnJpZGdlIHJlZ3VsYXRvciBlbmFibGUgZmFpbGVkXG4iKTsKPj4gKwkJCXJl dHVybjsKPj4gKwkJfQo+PiArCQlwZGF0YS0+cG93ZXJfb24gPSB0cnVlOwo+PiArCX0gZWxzZSBp ZiAoIWVuYWJsZSAmJiAhcmVmX2NvdW50KSB7Cj4+ICsJCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUo cGRhdGEtPm51bV9zdXBwbGllcywgcGRhdGEtPnN1cHBsaWVzKTsKPj4gKwo+PiArCQl0aV9zbl9i cmlkZ2VfZ3Bpb19jb25maWd1cmUocGRhdGEsIGZhbHNlKTsKPj4gKwkJcGRhdGEtPnBvd2VyX29u ID0gZmFsc2U7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJRFJNX0RFQlVHKCJ0aV9zbl9icmlkZ2UgcG93 ZXIgY3RybDogJWQgcmVmY291bnQ6ICVkXG4iLAo+PiArCQkJCQkJCWVuYWJsZSwgcmVmX2NvdW50 KTsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gKy8qIENvbm5lY3RvciBmdW5jcyAqLwo+PiArc3RhdGlj IHN0cnVjdCB0aV9zbl9icmlkZ2UgKgo+PiArY29ubmVjdG9yX3RvX3RpX3NuX2JyaWRnZShzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+PiArewo+PiArCXJldHVybiBjb250YWluZXJf b2YoY29ubmVjdG9yLCBzdHJ1Y3QgdGlfc25fYnJpZGdlLCBjb25uZWN0b3IpOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBk cm1fY29ubmVjdG9yIAo+PiAqY29ubmVjdG9yKQo+PiArewo+PiArCXN0cnVjdCB0aV9zbl9icmlk Z2UgKnBkYXRhID0gY29ubmVjdG9yX3RvX3RpX3NuX2JyaWRnZShjb25uZWN0b3IpOwo+PiArCXN0 cnVjdCBkcm1fcGFuZWwgKnBhbmVsID0gcGRhdGEtPnBhbmVsOwo+PiArCXN0cnVjdCBlZGlkICpl ZGlkOwo+PiArCj4+ICsJaWYgKHBhbmVsKSB7Cj4+ICsJCURSTV9ERUJVRygiZ2V0IG1vZGUgZnJv bSBjb25uZWN0ZWQgZHJtX3BhbmVsXG4iKTsKPj4gKwkJcGRhdGEtPm51bV9tb2RlcyA9IGRybV9w YW5lbF9nZXRfbW9kZXMocGFuZWwpOwo+PiArCX0gZWxzZSB7Cj4+ICsJCS8qIGdldCBmcm9tIEVE SUQgKi8KPj4gKwkJaWYgKCFwZGF0YS0+ZGRjKQo+PiArCQkJcmV0dXJuIDA7Cj4+ICsJCXRpX3Nu X2JyaWRnZV9wb3dlcl9jdHJsKHBkYXRhLCB0cnVlKTsKPj4gKwkJZWRpZCA9IGRybV9nZXRfZWRp ZChjb25uZWN0b3IsIHBkYXRhLT5kZGMpOwo+PiArCQlpZiAoZWRpZCkgewo+PiArCQkJZHJtX21v ZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwKPj4gKwkJCQkJCQkJ ZWRpZCk7Cj4+ICsJCQlwZGF0YS0+bnVtX21vZGVzID0gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5l Y3RvciwgZWRpZCk7Cj4+ICsJCQlkcm1fZWRpZF90b19lbGQoY29ubmVjdG9yLCBlZGlkKTsKPj4g KwkJCWtmcmVlKGVkaWQpOwo+PiArCQl9IGVsc2Ugewo+PiArCQkJRFJNX0RFQlVHKCJmYWlsZWQg dG8gZ2V0IGVkaWRcbiIpOwo+PiArCQl9Cj4+ICsJCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBk YXRhLCBmYWxzZSk7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIHBkYXRhLT5udW1fbW9kZXM7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cwo+PiArdGlfc25fYnJpZGdl X2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4+ ICsJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+PiArewo+PiArCS8qIG1h eGltdW0gc3VwcG9ydGVkIHJlc29sdXRpb24gaXMgNEsgYXQgNjAgZnBzICovCj4+ICsJaWYgKG1v ZGUtPmNsb2NrID4gNTk0MDAwKQo+PiArCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOwo+PiArCj4+ ICsJcmV0dXJuIE1PREVfT0s7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9oZWxwZXJfZnVuY3MgCj4+IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfaGVscGVyX2Z1bmNz ID0gewo+PiArCS5nZXRfbW9kZXMgPSB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2dldF9tb2RlcywK Pj4gKwkubW9kZV92YWxpZCA9IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfbW9kZV92YWxpZCwKPj4g K307Cj4+ICsKPj4gK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCj4+ICt0aV9zbl9i cmlkZ2VfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBi b29sIAo+PiBmb3JjZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGNv bm5lY3Rvcl90b190aV9zbl9icmlkZ2UoY29ubmVjdG9yKTsKPj4gKwo+PiArCS8qKgo+PiArCSAq IFRPRE86IEN1cnJlbnRseSBpZiBkcm1fcGFuZWwgaXMgcHJlc2VudCwgdGhlbiBhbHdheXMKPj4g KwkgKiByZXR1cm4gdGhlIHN0YXR1cyBhcyBjb25uZWN0ZWQuIE5lZWQgdG8gYWRkIHN1cHBvcnQg dG8gZGV0ZWN0Cj4+ICsJICogZGV2aWNlIHN0YXRlIGZvciBubyBwYW5lbChob3QgcGx1Z2dhYmxl KSBzY2VuYXJpb3MuCj4+ICsJICovCj4+ICsJaWYgKHBkYXRhLT5wYW5lbCkKPj4gKwkJcmV0dXJu IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwo+PiArCWVsc2UKPj4gKwkJcmV0dXJuIGNvbm5l Y3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9jb25uZWN0b3JfZnVuY3MgdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9mdW5jcyAKPj4g PSB7Cj4+ICsJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3Jf bW9kZXMsCj4+ICsJLmRldGVjdCA9IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfZGV0ZWN0LAo+PiAr CS5kZXN0cm95ID0gZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwLAo+PiArCS5yZXNldCA9IGRybV9hdG9t aWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKPj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9 IAo+PiBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAo+PiArCS5h dG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95 X3N0YXRlLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCB0aV9zbl9icmlkZ2UgKmJyaWRn ZV90b190aV9zbl9icmlkZ2Uoc3RydWN0IGRybV9icmlkZ2UgCj4+ICpicmlkZ2UpCj4+ICt7Cj4+ ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihicmlkZ2UsIHN0cnVjdCB0aV9zbl9icmlkZ2UsIGJyaWRn ZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3JlYWRfZGV2aWNlX3Jl dihzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKPj4gK3sKPj4gKwl1OCByZXYgPSAwOwo+PiAr CWludCByZXQgPSAwOwo+PiArCj4+ICsJcmV0ID0gdGlfc25fYnJpZGdlX3JlYWQocGRhdGEsIFNO X0RFVklDRV9SRVZfUkVHLCAmcmV2LCAxKTsKPj4gKwlpZiAocmV0KQo+PiArCQlnb3RvIGV4aXQ7 Cj4+ICsKPj4gKwlpZiAocmV2ID09IFNOX0JSSURHRV9SRVZJU0lPTl9JRCkgewo+PiArCQlEUk1f REVCVUcoInRpX3NuX2JyaWRnZSByZXZpc2lvbiBpZDogMHgleFxuIiwgcmV2KTsKPj4gKwl9IGVs c2Ugewo+PiArCQlEUk1fRVJST1IoInRpX3NuX2JyaWRnZSByZXZpc2lvbiBpZCBtaXNtYXRjaFxu Iik7Cj4+ICsJCXJldCA9IC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICtleGl0Ogo+PiArCXJldHVy biByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGlfc25fYnJp ZGdlX3N1cHBseV9uYW1lc1tdID0gewo+PiArCSJ2Y2NpbyIsCj4+ICsJInZjY2EiLAo+PiArfTsK Pj4gKwo+PiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcGFyc2VfcmVndWxhdG9ycyhzdHJ1Y3Qg dGlfc25fYnJpZGdlICpwZGF0YSkKPj4gK3sKPj4gKwl1bnNpZ25lZCBpbnQgaTsKPj4gKwlpbnQg cmV0Owo+PiArCj4+ICsJcGRhdGEtPm51bV9zdXBwbGllcyA9IEFSUkFZX1NJWkUodGlfc25fYnJp ZGdlX3N1cHBseV9uYW1lcyk7Cj4+ICsKPj4gKwlwZGF0YS0+c3VwcGxpZXMgPSBkZXZtX2tjYWxs b2MocGRhdGEtPmRldiwgcGRhdGEtPm51bV9zdXBwbGllcywKPj4gKwkJCQkgICAgIHNpemVvZigq cGRhdGEtPnN1cHBsaWVzKSwgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFwZGF0YS0+c3VwcGxpZXMp Cj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5u dW1fc3VwcGxpZXM7IGkrKykKPj4gKwkJcGRhdGEtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHRpX3Nu X2JyaWRnZV9zdXBwbHlfbmFtZXNbaV07Cj4+ICsKPj4gKwlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9i dWxrX2dldChwZGF0YS0+ZGV2LAo+PiArCQkJcGRhdGEtPm51bV9zdXBwbGllcywgcGRhdGEtPnN1 cHBsaWVzKTsKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lk IHRpX3NuX2JyaWRnZV9hdHRhY2hfcGFuZWwoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4+ ICt7Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpwYW5lbF9ub2RlLCAqcG9ydCwgKmVuZHBvaW50 Owo+PiArCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsID0gTlVMTDsKPj4gKwo+PiArCXBvcnQgPSBv Zl9ncmFwaF9nZXRfcG9ydF9ieV9pZChwZGF0YS0+ZGV2LT5vZl9ub2RlLCAxKTsKPj4gKwlpZiAo cG9ydCkgewo+PiArCQllbmRwb2ludCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHBvcnQsICJlbmRw b2ludCIpOwo+PiArCQlvZl9ub2RlX3B1dChwb3J0KTsKPj4gKwkJaWYgKCFlbmRwb2ludCkgewo+ PiArCQkJZGV2X2VycihwZGF0YS0+ZGV2LCAibm8gb3V0cHV0IGVuZHBvaW50IGZvdW5kXG4iKTsK Pj4gKwkJCWdvdG8gZXJyb3I7Cj4+ICsJCX0KPj4gKwo+PiArCQlwYW5lbF9ub2RlID0gb2ZfZ3Jh cGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlbmRwb2ludCk7Cj4+ICsJCW9mX25vZGVfcHV0KGVu ZHBvaW50KTsKPj4gKwkJaWYgKCFwYW5lbF9ub2RlKSB7Cj4+ICsJCQlkZXZfZXJyKHBkYXRhLT5k ZXYsICJubyBvdXRwdXQgbm9kZSBmb3VuZFxuIik7Cj4+ICsJCQlnb3RvIGVycm9yOwo+PiArCQl9 Cj4+ICsKPj4gKwkJcGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChwYW5lbF9ub2RlKTsKPj4gKwkJ b2Zfbm9kZV9wdXQocGFuZWxfbm9kZSk7Cj4+ICsJCWlmICghcGFuZWwpIHsKPj4gKwkJCWRldl9l cnIocGRhdGEtPmRldiwgIm5vIHBhbmVsIG5vZGUgZm91bmRcbiIpOwo+PiArCQkJZ290byBlcnJv cjsKPj4gKwkJfQo+PiArCX0KPj4gKwo+PiArCXBkYXRhLT5wYW5lbCA9IHBhbmVsOwo+PiArCWRy bV9wYW5lbF9hdHRhY2gocGFuZWwsICZwZGF0YS0+Y29ubmVjdG9yKTsKPj4gKwo+PiArCXJldHVy bjsKPj4gKwo+PiArZXJyb3I6Cj4+ICsJcGRhdGEtPnBhbmVsID0gTlVMTDsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UpCj4+ICt7Cj4+ICsJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3Q7Cj4+ICsJc3RydWN0IG1p cGlfZHNpX2RldmljZSAqZHNpOwo+PiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJp ZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOwo+PiArCWludCByZXQ7Cj4+ICsJY29uc3Qgc3Ry dWN0IG1pcGlfZHNpX2RldmljZV9pbmZvIGluZm8gPSB7IC50eXBlID0gInRpX3NuX2JyaWRnZSIs Cj4+ICsJCQkJCQkgICAuY2hhbm5lbCA9IDAsCj4+ICsJCQkJCQkgICAubm9kZSA9IE5VTEwsCj4+ ICsJCQkJCQkgfTsKPj4gKwo+PiArCWlmICghYnJpZGdlLT5lbmNvZGVyKSB7Cj4+ICsJCURSTV9F UlJPUigiUGFyZW50IGVuY29kZXIgb2JqZWN0IG5vdCBmb3VuZCIpOwo+PiArCQlyZXR1cm4gLUVO T0RFVjsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBIUEQgbm90IHN1cHBvcnRlZCAqLwo+PiArCXBkYXRh LT5jb25uZWN0b3IucG9sbGVkID0gMDsKPj4gKwo+PiArCXJldCA9IGRybV9jb25uZWN0b3JfaW5p dChicmlkZ2UtPmRldiwgJnBkYXRhLT5jb25uZWN0b3IsCj4+ICsJCQkJICZ0aV9zbl9icmlkZ2Vf Y29ubmVjdG9yX2Z1bmNzLAo+PiArCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKTsKPj4gKwlp ZiAocmV0KSB7Cj4+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9y IHdpdGggZHJtXG4iKTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4gKwlkcm1fY29u bmVjdG9yX2hlbHBlcl9hZGQoJnBkYXRhLT5jb25uZWN0b3IsCj4+ICsJCQkJICZ0aV9zbl9icmlk Z2VfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7Cj4+ICsJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFj aF9lbmNvZGVyKCZwZGF0YS0+Y29ubmVjdG9yLCAKPj4gYnJpZGdlLT5lbmNvZGVyKTsKPj4gKwo+ PiArCWhvc3QgPSBvZl9maW5kX21pcGlfZHNpX2hvc3RfYnlfbm9kZShwZGF0YS0+aG9zdF9ub2Rl KTsKPj4gKwlpZiAoIWhvc3QpIHsKPj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZmluZCBkc2kg aG9zdFxuIik7Cj4+ICsJCXJldHVybiAtRU5PREVWOwo+PiArCX0KPj4gKwo+PiArCWRzaSA9IG1p cGlfZHNpX2RldmljZV9yZWdpc3Rlcl9mdWxsKGhvc3QsICZpbmZvKTsKPj4gKwlpZiAoSVNfRVJS KGRzaSkpIHsKPj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGRzaSBkZXZpY2VcbiIp Owo+PiArCQlyZXQgPSBQVFJfRVJSKGRzaSk7Cj4+ICsJCWdvdG8gZXJyX2RzaV9kZXZpY2U7Cj4+ ICsJfQo+PiArCj4+ICsJLyogVE9ETzogc2V0dGluZyB0byA0IGxhbmVzIGFsd2F5cyBmb3Igbm93 ICovCj4+ICsJZHNpLT5sYW5lcyA9IDQ7Cj4+ICsJZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRf UkdCODg4Owo+PiArCWRzaS0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01PREVfVklERU8gfCAKPj4g TUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFIHwKPj4gKwkJCSAgTUlQSV9EU0lfTU9ERV9F T1RfUEFDS0VUIHwgTUlQSV9EU0lfTU9ERV9WSURFT19IU0U7Cj4+ICsKPj4gKwlyZXQgPSBtaXBp X2RzaV9hdHRhY2goZHNpKTsKPj4gKwlpZiAocmV0IDwgMCkgewo+PiArCQlEUk1fRVJST1IoImZh aWxlZCB0byBhdHRhY2ggZHNpIHRvIGhvc3RcbiIpOwo+PiArCQlnb3RvIGVycl9kc2lfYXR0YWNo Owo+PiArCX0KPj4gKwo+PiArCXBkYXRhLT5kc2kgPSBkc2k7Cj4+ICsKPj4gKwlEUk1fREVCVUco ImJyaWRnZSBhdHRhY2hlZFxuIik7Cj4+ICsJLyogYXR0YWNoIHBhbmVsIHRvIGJyaWRnZSAqLwo+ PiArCXRpX3NuX2JyaWRnZV9hdHRhY2hfcGFuZWwocGRhdGEpOwo+PiArCj4+ICsJcmV0dXJuIDA7 Cj4+ICsKPj4gK2Vycl9kc2lfYXR0YWNoOgo+PiArCW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVy KGRzaSk7Cj4+ICtlcnJfZHNpX2RldmljZToKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ ICtzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfbW9kZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJy aWRnZSwKPj4gKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4+ICsJCQkJ ICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGpfbW9kZSkKPj4gK3sKPj4gKwlzdHJ1Y3Qg dGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKPj4g Kwo+PiArCURSTV9ERUJVRygibW9kZV9zZXQ6IGhkaXNwbGF5PSVkLCB2ZGlzcGxheT0lZCwgdnJl ZnJlc2g9JWQsIAo+PiBjbG9jaz0lZFxuIiwKPj4gKwkJYWRqX21vZGUtPmhkaXNwbGF5LCBhZGpf bW9kZS0+dmRpc3BsYXksCj4+ICsJCWFkal9tb2RlLT52cmVmcmVzaCwgYWRqX21vZGUtPmNsb2Nr KTsKPj4gKwo+PiArCWRybV9tb2RlX2NvcHkoJnBkYXRhLT5jdXJyX21vZGUsIGFkal9tb2RlKTsK Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9 IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKPj4gKwlzdHJ1Y3QgZHJtX3BhbmVsICpw YW5lbCA9IHBkYXRhLT5wYW5lbDsKPj4gKwo+PiArCWlmIChwYW5lbCkgewo+PiArCQlkcm1fcGFu ZWxfZGlzYWJsZShwYW5lbCk7Cj4+ICsJCWRybV9wYW5lbF91bnByZXBhcmUocGFuZWwpOwo+PiAr CX0KPj4gKwo+PiArCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBkYXRhLCBmYWxzZSk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRn ZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKPj4gKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCA9 IHBkYXRhLT5wYW5lbDsKPj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZwZGF0 YS0+Y3Vycl9tb2RlOwo+PiArCXUzMiBiaXRfcmF0ZV9taHosIGNsa19mcmVxX21oejsKPj4gKwl1 OCB2YWwgPSAwOwo+PiArCj4+ICsJaWYgKCFwZGF0YS0+bnVtX21vZGVzKQo+PiArCQlyZXR1cm47 Cj4+ICsKPj4gKwl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwgdHJ1ZSk7Cj4+ICsKPj4g KwlpZiAocGFuZWwpCj4+ICsJCWRybV9wYW5lbF9wcmVwYXJlKHBhbmVsKTsKPj4gKwo+PiArCS8q IENMS19TUkMgY29uZmlnICovCj4+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9SRUZD TEtfRlJFUV9SRUcsCj4+ICsJCQkoRFBQTExfQ0xLX1NSQ19SRUZDTEsgfCAoU05fUkVGX0NMS18x OV8yX01IWiA8PCAweDEpKSk7Cj4+ICsKPj4gKwkvKiBEU0lfQSBsYW5lIGNvbmZpZyAqLwo+PiAr CXRpX3NuX2JyaWRnZV9yZWFkKHBkYXRhLCBTTl9EU0lfTEFORVNfUkVHLCAmdmFsLCAweDEpOwo+ PiArCXZhbCB8PSAoKDB4NCAtIHBkYXRhLT5kc2ktPmxhbmVzKSAmIDB4MDMpIDw8IDB4MzsKPj4g Kwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0RTSV9MQU5FU19SRUcsIHZhbCk7Cj4+ICsK Pj4gKwkvKiBEUCBsYW5lIGNvbmZpZyAqLwo+PiArCXRpX3NuX2JyaWRnZV9yZWFkKHBkYXRhLCBT Tl9TU0NfQ09ORklHX1JFRywgJnZhbCwgMHgxKTsKPj4gKwl2YWwgfD0gKChwZGF0YS0+ZHNpLT5s YW5lcyAtIDB4MSkgJiAweDAzKSA8PCAweDQ7Cj4+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRh LCBTTl9TU0NfQ09ORklHX1JFRywgdmFsKTsKPj4gKwo+PiArCS8qIHNldCBkc2kgY2xrIGZyZXF1 ZW5jeSB2YWx1ZSAqLwo+PiArCWJpdF9yYXRlX21oeiA9IChtb2RlLT5jbG9jayAvIDEwMDApICoK Pj4gKwkJCW1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAocGRhdGEtPmRzaS0+Zm9ybWF0KTsK Pj4gKwljbGtfZnJlcV9taHogPSBiaXRfcmF0ZV9taHogLyAocGRhdGEtPmRzaS0+bGFuZXMgKiAy KTsKPj4gKwkvKiBmb3IgZWFjaCBpbmNyZW1lbnQgaW4gdmFsLCBmcmVxdWVuY3kgaW5jcmVhc2Vz IGJ5IDVNSHogKi8KPj4gKwl2YWwgPSAoTUlOX0RTSV9DTEtfRlJFUV9NSFogLyAweDUpICsKPj4g KwkJKCgoY2xrX2ZyZXFfbWh6IC0gTUlOX0RTSV9DTEtfRlJFUV9NSFopIC8gMHg1KSAmIDB4RkYp Owo+PiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fRFNJQV9DTEtfRlJFUV9SRUcsIHZh bCk7Cj4+ICsKPj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0RBVEFSQVRFX0NPTkZJ R19SRUcsIDB4ODApOyAvKiBzZXQgSEJSIAo+PiAqLwo+PiArCj4+ICsJdGlfc25fYnJpZGdlX3dy aXRlKHBkYXRhLCBTTl9QTExfRU5BQkxFX1JFRywgMHgxKTsgLyogRW5hYmxlIFBMTCAqLwo+PiAr CXVzbGVlcF9yYW5nZSgxMDAwMCwgMTAwMDEpOwo+PiArCj4+ICsJLyogRFBDRCBSZWdpc3RlciAw eDAwMTBBIGluIFNpbmsgKi8KPj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0FVWF9X REFUQTBfUkVHLCAweDAxKTsKPj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0FVWF9B RERSXzE5XzE2X1JFRywgMHgwMCk7Cj4+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9B VVhfQUREUl8xNV84X1JFRywgMHgwMSk7Cj4+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBT Tl9BVVhfQUREUl83XzBfUkVHLCAweDBBKTsKPj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEs IFNOX0FVWF9MRU5HVEhfUkVHLCAweDAxKTsKPj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEs IFNOX0FVWF9DTURfUkVHLCAweDgxKTsKPj4gKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDEwMDAxKTsK Pj4gKwo+PiArCS8qIFNlbWkgYXV0byBsaW5rIHRyYWluaW5nIG1vZGUgKi8KPj4gKwl0aV9zbl9i cmlkZ2Vfd3JpdGUocGRhdGEsIFNOX01MX1RYX01PREVfUkVHLCAweDBBKTsKPj4gKwl1c2xlZXBf cmFuZ2UoMjAwMDAsIDIwMDAxKTsKPj4gKwo+PiArCS8qIGNvbmZpZyB2aWRlbyBwYXJhbWV0ZXJz ICovCj4+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFfQUNUSVZFX0xJTkVfTEVO R1RIX0xPV19SRUcsCj4+ICsJCQltb2RlLT5oZGlzcGxheSAmIDB4RkYpOwo+PiArCXRpX3NuX2Jy aWRnZV93cml0ZShwZGF0YSwgU05fQ0hBX0FDVElWRV9MSU5FX0xFTkdUSF9ISUdIX1JFRywKPj4g KwkJCShtb2RlLT5oZGlzcGxheSA+PiAweDgpICYgMHhGRik7Cj4+ICsJdGlfc25fYnJpZGdlX3dy aXRlKHBkYXRhLCBTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcsCj4+ICsJCQlt b2RlLT52ZGlzcGxheSAmIDB4RkYpOwo+PiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05f Q0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9ISUdIX1JFRywKPj4gKwkJCShtb2RlLT5oZGlzcGxh eSA+PiAweDgpICYgMHhGRik7Cj4+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFf SFNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRywKPj4gKwkJCShtb2RlLT5odG90YWwgLSBtb2RlLT5o c3luY19lbmQpICYgMHhGRik7Cj4+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFf SFNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcsCj4+ICsJCQkoKG1vZGUtPmh0b3RhbCAtIG1vZGUt PmhzeW5jX2VuZCkgPj4gMHg4KSAmIDB4RkYpOwo+PiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0 YSwgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcsCj4+ICsJCQkobW9kZS0+dnRvdGFs IC0gbW9kZS0+dnN5bmNfZW5kKSAmIDB4RkYpOwo+PiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0 YSwgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHLAo+PiArCQkJKChtb2RlLT52dG90 YWwgLSBtb2RlLT52c3luY19lbmQpID4+IDB4OCkgJiAweEZGKTsKPj4gKwl0aV9zbl9icmlkZ2Vf d3JpdGUocGRhdGEsIFNOX0NIQV9IT1JJWk9OVEFMX0JBQ0tfUE9SQ0hfUkVHLAo+PiArCQkJKG1v ZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3BsYXkpICYgMHhGRik7Cj4+ICsJdGlfc25fYnJp ZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFfVkVSVElDQUxfQkFDS19QT1JDSF9SRUcsCj4+ICsJCQko bW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheSkgJiAweEZGKTsKPj4gKwl0aV9zbl9i cmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0NIQV9IT1JJWk9OVEFMX0ZST05UX1BPUkNIX1JFRywKPj4g KwkJCShtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydCkgJiAweEZGKTsKPj4gKwl0 aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0NIQV9WRVJUSUNBTF9GUk9OVF9QT1JDSF9SRUcs Cj4+ICsJCQkobW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQpICYgMHhGRik7Cj4+ ICsJaWYgKHBkYXRhLT5kc2ktPmZvcm1hdCA9PSBNSVBJX0RTSV9GTVRfUkdCODg4KQo+PiArCQl0 aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0RBVEFfRk9STUFUX1JFRywgMHgwMCk7Cj4+ICsJ ZWxzZQo+PiArCQl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0RBVEFfRk9STUFUX1JFRywg MHgwMSk7Cj4+ICsJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDAwMSk7Cj4+ICsKPj4gKwkvKiBlbmFi bGUgdmlkZW8gc3RyZWFtICovCj4+ICsJdGlfc25fYnJpZGdlX3JlYWQocGRhdGEsIFNOX0VOSF9G UkFNRV9SRUcsICZ2YWwsIDB4MSk7Cj4+ICsJdmFsIHw9IEJJVCgzKTsKPj4gKwl0aV9zbl9icmlk Z2Vfd3JpdGUocGRhdGEsIFNOX0VOSF9GUkFNRV9SRUcsIHZhbCk7Cj4+ICsKPj4gKwlpZiAocGFu ZWwpCj4+ICsJCWRybV9wYW5lbF9lbmFibGUocGFuZWwpOwo+IAo+IEFzIG1lbnRpb25lZCBpbiB0 aGUgcHJldmlvdXMgcmV2aWV3LCB5b3Ugc2hvdWxkIGNvbmZpZ3VyZSB0aGUgbW9kZSBpbiAKPiBt b2RlX3NldCwKPiBub3QgZW5hYmxlLiBUaGlzIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIGN1cnJf bW9kZS4KPiAKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1 bmNzIHRpX3NuX2JyaWRnZV9mdW5jcyA9IHsKPj4gKwkuYXR0YWNoID0gdGlfc25fYnJpZGdlX2F0 dGFjaCwKPj4gKwkuZW5hYmxlID0gdGlfc25fYnJpZGdlX2VuYWJsZSwKPj4gKwkuZGlzYWJsZSA9 IHRpX3NuX2JyaWRnZV9kaXNhYmxlLAo+PiArCS5tb2RlX3NldCA9IHRpX3NuX2JyaWRnZV9tb2Rl X3NldCwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3BhcnNlX2dwaW9z KHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQo+PiArewo+PiArCWludCByZXQgPSAwOwo+PiAr Cj4+ICsJaWYgKCFwZGF0YSB8fCAhcGRhdGEtPmRldikKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ ICsKPj4gKwlwZGF0YS0+ZW5hYmxlX2dwaW9zID0gZGV2bV9ncGlvZF9nZXRfYXJyYXkocGRhdGEt PmRldiwKPj4gKwkJCQkJCSJlbmFibGUiLCBHUElPRF9PVVRfTE9XKTsKPj4gKwlpZiAoSVNfRVJS KHBkYXRhLT5lbmFibGVfZ3Bpb3MpKSB7Cj4+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBl bmFibGUgZ3BpbyBmcm9tIERUXG4iKTsKPj4gKwkJcmV0ID0gUFRSX0VSUihwZGF0YS0+ZW5hYmxl X2dwaW9zKTsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwo+PiArCXBkYXRhLT5pcnFfZ3Bp byA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKHBkYXRhLT5kZXYsICJpcnEiLAo+PiArCQkJCQkJ ICBHUElPRF9PVVRfTE9XKTsKPj4gKwlpZiAoSVNfRVJSKHBkYXRhLT5pcnFfZ3BpbykpCj4+ICsJ CURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBpcnEgZ3BpbyBmcm9tIERUXG4iKTsKPj4gKwo+PiAr ZXhpdDoKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRpX3NuX2Jy aWRnZV9wYXJzZV9kc2lfaG9zdChzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKPj4gK3sKPj4g KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRhdGEtPmRldi0+b2Zfbm9kZTsKPj4gKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKmVuZF9ub2RlOwo+PiArCj4+ICsJZW5kX25vZGUgPSBvZl9ncmFwaF9n ZXRfZW5kcG9pbnRfYnlfcmVncyhucCwgMCwgMCk7Cj4+ICsJaWYgKCFlbmRfbm9kZSkgewo+PiAr CQlEUk1fRVJST1IoInJlbW90ZSBlbmRwb2ludCBub3QgZm91bmRcbiIpOwo+PiArCQlyZXR1cm4g LUVOT0RFVjsKPj4gKwl9Cj4+ICsKPj4gKwlwZGF0YS0+aG9zdF9ub2RlID0gb2ZfZ3JhcGhfZ2V0 X3JlbW90ZV9wb3J0X3BhcmVudChlbmRfbm9kZSk7Cj4+ICsJb2Zfbm9kZV9wdXQoZW5kX25vZGUp Owo+PiArCWlmICghcGRhdGEtPmhvc3Rfbm9kZSkgewo+PiArCQlEUk1fRVJST1IoInJlbW90ZSBu b2RlIG5vdCBmb3VuZFxuIik7Cj4+ICsJCXJldHVybiAtRU5PREVWOwo+PiArCX0KPj4gKwlvZl9u b2RlX3B1dChwZGF0YS0+aG9zdF9ub2RlKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xp ZW50LAo+PiArCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCj4+ICt7Cj4+ICsJc3Ry dWN0IHRpX3NuX2JyaWRnZSAqcGRhdGE7Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpkZGNfbm9k ZTsKPj4gKwlpbnQgcmV0ID0gMDsKPj4gKwo+PiArCWlmICghY2xpZW50IHx8ICFjbGllbnQtPmRl di5vZl9ub2RlKSB7Cj4+ICsJCURSTV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJl dHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxp dHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7Cj4+ICsJCURSTV9FUlJPUigiZGV2 aWNlIGRvZXNuJ3Qgc3VwcG9ydCBJMkNcbiIpOwo+PiArCQlyZXR1cm4gLUVOT0RFVjsKPj4gKwl9 Cj4+ICsKPj4gKwlwZGF0YSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsCj4+ICsJCXNpemVv ZihzdHJ1Y3QgdGlfc25fYnJpZGdlKSwgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFwZGF0YSkKPj4g KwkJcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gKwlwZGF0YS0+cG93ZXJfb24gPSBmYWxzZTsKPj4g KwlwZGF0YS0+ZGV2ID0gJmNsaWVudC0+ZGV2Owo+PiArCXBkYXRhLT5pMmNfY2xpZW50ID0gY2xp ZW50Owo+PiArCURSTV9ERUJVRygiSTJDIGFkZHJlc3MgaXMgJXhcbiIsIGNsaWVudC0+YWRkcik7 Cj4+ICsKPj4gKwlyZXQgPSB0aV9zbl9icmlkZ2VfcGFyc2VfZHNpX2hvc3QocGRhdGEpOwo+PiAr CWlmIChyZXQpIHsKPj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGFyc2UgZGV2aWNlIHRyZWVc biIpOwo+PiArCQlnb3RvIGVycl9kdF9wYXJzZTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSB0aV9z bl9icmlkZ2VfcGFyc2VfZ3Bpb3MocGRhdGEpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJRFJNX0VS Uk9SKCJmYWlsZWQgdG8gcGFyc2UgZ3Bpb3MgZnJvbSBEVFxuIik7Cj4+ICsJCWdvdG8gZXJyX2R0 X3BhcnNlOwo+PiArCX0KPj4gKwo+PiArCXJldCA9IHRpX3NuX2JyaWRnZV9wYXJzZV9yZWd1bGF0 b3JzKHBkYXRhKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBh cnNlIHJlZ3VsYXRvcnNcbiIpOwo+PiArCQlnb3RvIGVycl9kdF9wYXJzZTsKPj4gKwl9Cj4+ICsK Pj4gKwlkZGNfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGRhdGEtPmRldi0+b2Zfbm9kZSwgImRk Yy1pMmMtYnVzIiwgMCk7Cj4+ICsJaWYgKGRkY19ub2RlKSB7Cj4+ICsJCXBkYXRhLT5kZGMgPSBv Zl9maW5kX2kyY19hZGFwdGVyX2J5X25vZGUoZGRjX25vZGUpOwo+PiArCQlvZl9ub2RlX3B1dChk ZGNfbm9kZSk7Cj4+ICsJCWlmICghcGRhdGEtPmRkYykgewo+PiArCQkJZGV2X2RiZyhwZGF0YS0+ ZGV2LCAiZmFpbGVkIHRvIHJlYWQgZGRjIG5vZGVcbiIpOwo+PiArCQkJcmV0dXJuIC1FUFJPQkVf REVGRVI7Cj4+ICsJCX0KPj4gKwl9IGVsc2Ugewo+PiArCQlkZXZfZGJnKHBkYXRhLT5kZXYsICJu byBkZGMgcHJvcGVydHkgZm91bmRcbiIpOwo+PiArCX0KPj4gKwo+PiArCXRpX3NuX2JyaWRnZV9w b3dlcl9jdHJsKHBkYXRhLCB0cnVlKTsKPj4gKwlyZXQgPSB0aV9zbl9icmlkZ2VfcmVhZF9kZXZp Y2VfcmV2KHBkYXRhKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRv IHJlYWQgY2hpcCByZXZcbiIpOwo+PiArCQlnb3RvIGVycl9jb25maWc7Cj4+ICsJfSBlbHNlIHsK Pj4gKwkJRFJNX0RFQlVHKCJicmlkZ2UgY2hpcCBlbmFibGVkIHN1Y2Nlc3NmdWxseVxuIik7Cj4+ ICsJfQo+PiArCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBkYXRhLCBmYWxzZSk7Cj4+ICsKPj4g KwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBwZGF0YSk7Cj4+ICsJZGV2X3NldF9kcnZkYXRh KCZjbGllbnQtPmRldiwgcGRhdGEpOwo+PiArCj4+ICsJcGRhdGEtPmJyaWRnZS5mdW5jcyA9ICZ0 aV9zbl9icmlkZ2VfZnVuY3M7Cj4+ICsJcGRhdGEtPmJyaWRnZS5vZl9ub2RlID0gY2xpZW50LT5k ZXYub2Zfbm9kZTsKPj4gKwo+PiArCWRybV9icmlkZ2VfYWRkKCZwZGF0YS0+YnJpZGdlKTsKPj4g Kwo+PiArCXJldHVybiByZXQ7Cj4+ICsKPj4gK2Vycl9jb25maWc6Cj4+ICsJdGlfc25fYnJpZGdl X3Bvd2VyX2N0cmwocGRhdGEsIGZhbHNlKTsKPj4gK2Vycl9kdF9wYXJzZToKPj4gKwlkZXZtX2tm cmVlKCZjbGllbnQtPmRldiwgcGRhdGEpOwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50 KQo+PiArewo+PiArCWludCByZXQgPSAtRUlOVkFMOwo+PiArCXN0cnVjdCB0aV9zbl9icmlkZ2Ug KnBkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Cj4+ICsKPj4gKwlpZiAoIXBkYXRh KQo+PiArCQlnb3RvIGVuZDsKPj4gKwo+PiArCW1pcGlfZHNpX2RldGFjaChwZGF0YS0+ZHNpKTsK Pj4gKwltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3RlcihwZGF0YS0+ZHNpKTsKPj4gKwo+PiArCWRy bV9icmlkZ2VfcmVtb3ZlKCZwZGF0YS0+YnJpZGdlKTsKPj4gKwo+PiArCWRpc2FibGVfaXJxKHBk YXRhLT5pcnEpOwo+PiArCWZyZWVfaXJxKHBkYXRhLT5pcnEsIHBkYXRhKTsKPiAKPiBUaGlzIGlz IHVuaW5pdGlhbGl6ZWQuCj4gCj4+ICsKPj4gKwl0aV9zbl9icmlkZ2VfZ3Bpb19jb25maWd1cmUo cGRhdGEsIGZhbHNlKTsKPj4gKwlpMmNfcHV0X2FkYXB0ZXIocGRhdGEtPmRkYyk7Cj4+ICsKPj4g KwlkZXZtX2tmcmVlKCZjbGllbnQtPmRldiwgcGRhdGEpOwo+PiArCj4+ICtlbmQ6Cj4+ICsJcmV0 dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRpX3Nu X2JyaWRnZV9pZFtdID0gewo+PiArCXsgInRpLHNuNjVkc2k4NiIsIDB9LAo+PiArCXt9Cj4+ICt9 Owo+PiArTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRpX3NuX2JyaWRnZV9pZCk7Cj4+ICsKPj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRpX3NuX2JyaWRnZV9tYXRjaF90YWJs ZVtdID0gewo+PiArCXsuY29tcGF0aWJsZSA9ICJ0aSxzbjY1ZHNpODYifSwKPj4gKwl7fQo+PiAr fTsKPj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZSk7 Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0aV9zbl9icmlkZ2VfZHJpdmVyID0g ewo+PiArCS5kcml2ZXIgPSB7Cj4+ICsJCS5uYW1lID0gInRpX3NuNjVkc2k4NiIsCj4+ICsJCS5v d25lciA9IFRISVNfTU9EVUxFLAo+PiArCQkub2ZfbWF0Y2hfdGFibGUgPSB0aV9zbl9icmlkZ2Vf bWF0Y2hfdGFibGUsCj4+ICsJfSwKPj4gKwkucHJvYmUgPSB0aV9zbl9icmlkZ2VfcHJvYmUsCj4+ ICsJLnJlbW92ZSA9IHRpX3NuX2JyaWRnZV9yZW1vdmUsCj4+ICsJLmlkX3RhYmxlID0gdGlfc25f YnJpZGdlX2lkLAo+PiArfTsKPj4gKwo+PiArbW9kdWxlX2kyY19kcml2ZXIodGlfc25fYnJpZGdl X2RyaXZlcik7Cj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oInNuNjVkc2k4NiBEU0kgdG8gZURQIGJy aWRnZSBkcml2ZXIiKTsKPj4gLS0KPj4gVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJ bmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSAKPj4gRm9ydW0sCj4+IGEgTGludXgg Rm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKPj4gCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRy ZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=