From mboxrd@z Thu Jan 1 00:00:00 1970 From: spanda-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org Subject: Re: [[RFC]DPU PATCH 1/2] drm/bridge: add support for sn65dsi86 bridge driver Date: Mon, 16 Apr 2018 11:32:50 +0530 Message-ID: References: <1523596981-18913-1-git-send-email-spanda@codeaurora.org> <1523596981-18913-2-git-send-email-spanda@codeaurora.org> <20180413192905.GG73214@art_vandelay> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180413192905.GG73214@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: devicetree@vger.kernel.org T24gMjAxOC0wNC0xNCAwMDo1OSwgU2VhbiBQYXVsIHdyb3RlOgo+IE9uIEZyaSwgQXByIDEzLCAy MDE4IGF0IDEwOjUzOjAwQU0gKzA1MzAsIFNhbmRlZXAgUGFuZGEgd3JvdGU6Cj4+IEFkZCBzdXBw b3J0IGZvciBUSSdzIHNuNjVkc2k4NiBkc2kyZWRwIGJyaWRnZSBjaGlwLgo+PiBUaGUgY2hpcCBj b252ZXJ0cyBEU0kgdHJhbnNtaXR0ZWQgc2lnbmFsIHRvIGVEUCBzaWduYWwsCj4+IHdoaWNoIGlz IGZlZCB0byB0aGUgY29ubmVjdGVkIGVEUCBwYW5lbC4KPj4gCj4+IFRoaXMgY2hpcCBjYW4gYmUg Y29udHJvbGxlZCB2aWEgZWl0aGVyIGkyYyBpbnRlcmZhY2Ugb3IKPj4gZHNpIGludGVyZmFjZS4g Q3VycmVudGx5IGluIGRyaXZlciBhbGwgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzCj4+IGFyZSBiZWlu ZyBhY2Nlc3NlZCB0aHJvdWdoIGkyYyBpbnRlcmZhY2Ugb25seS4KPj4gQWxzbyBhcyBvZiBub3cg SFBEIHN1cHBvcnQgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIGJyaWRnZQo+PiBjaGlwIGRyaXZlci4K Pj4gCj4+IFNpZ25lZC1vZmYtYnk6IFNhbmRlZXAgUGFuZGEgPHNwYW5kYUBjb2RlYXVyb3JhLm9y Zz4KPiAKPiBIaSBTYW5kZWVwLAo+IFRoYW5rIHlvdSBmb3IgeW91ciBwYXRjaCEKPiAKPj4gLS0t Cj4+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jIHwgMTAxOSAKPj4gKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+ICAxIGZpbGUgY2hhbmdlZCwgMTAxOSBp bnNlcnRpb25zKCspCj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS90aS1zbjY1ZHNpODYuYwo+PiAKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvdGktc242NWRzaTg2LmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNp ODYuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi45M2FhMWFkCj4+ IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNp ODYuYwo+PiBAQCAtMCwwICsxLDEwMTkgQEAKPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wICovCj4+ICsKPj4gKyNkZWZpbmUgcHJfZm10KGZtdCkgIiVzOiAiIGZtdCwgX19m dW5jX18KPiAKPiBJbnN0ZWFkIG9mIHVzaW5nIHByXyogZm9yIGxvZ2dpbmcsIHBsZWFzZSB1c2Ug dGhlIERSTV8qIHZhcmlhbnRzLiBTaW5jZSAKPiB0aGVyZQo+IGlzIHVubGlrZWx5IHRvIGJlIG1v cmUgdGhhbiBvbmUgb2YgdGhlc2UgYnJpZGdlIGRyaXZlcnMgaW4gYSBzeXN0ZW0sIAo+IHlvdSB3 b24ndAo+IG5lZWQgdG8gdXNlIHRoZSBEUk1fREVWXyogdmVyc2lvbnMuCj4gCj4+ICsKPj4gKyNp bmNsdWRlIDxsaW51eC90eXBlcy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4 L2kyYy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9p bnRlcnJ1cHQuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+Cj4+ICsjaW5jbHVkZSA8 bGludXgvb2ZfZ3JhcGguaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KPj4gKyNpbmNs dWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5o Pgo+PiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWNfaGVscGVyLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+PiAr I2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KPj4gKwo+PiArI2RlZmluZSBTTl9ERVZJQ0Vf UkVWX1JFRyAweDA4Cj4+ICsKPj4gKy8qIExpbmsgVHJhaW5pbmcgc3BlY2lmaWMgcmVnaXN0ZXJz ICovCj4+ICsjZGVmaW5lIFNOX1JFRkNMS19GUkVRX1JFRyAweDBBCj4+ICsjZGVmaW5lIFNOX0RT SV9MQU5FU19SRUcgMHgxMAo+PiArI2RlZmluZSBTTl9EU0lBX0NMS19GUkVRX1JFRyAweDEyCj4+ ICsjZGVmaW5lIFNOX0VOSF9GUkFNRV9SRUcgMHg1QQo+PiArI2RlZmluZSBTTl9TU0NfQ09ORklH X1JFRyAweDkzCj4+ICsjZGVmaW5lIFNOX0RBVEFSQVRFX0NPTkZJR19SRUcgMHg5NAo+PiArI2Rl ZmluZSBTTl9QTExfRU5BQkxFX1JFRyAweDBECj4+ICsjZGVmaW5lIFNOX1NDUkFNQkxFX0NPTkZJ R19SRUcgMHg5NQo+PiArI2RlZmluZSBTTl9BVVhfV0RBVEEwX1JFRyAweDY0Cj4+ICsjZGVmaW5l IFNOX0FVWF9BRERSXzE5XzE2X1JFRyAweDc0Cj4+ICsjZGVmaW5lIFNOX0FVWF9BRERSXzE1Xzhf UkVHIDB4NzUKPj4gKyNkZWZpbmUgU05fQVVYX0FERFJfN18wX1JFRyAweDc2Cj4+ICsjZGVmaW5l IFNOX0FVWF9MRU5HVEhfUkVHIDB4NzcKPj4gKyNkZWZpbmUgU05fQVVYX0NNRF9SRUcgMHg3OAo+ PiArI2RlZmluZSBTTl9NTF9UWF9NT0RFX1JFRyAweDk2Cj4+ICsjZGVmaW5lIFNOX1BBR0VfU0VM RUNUX1JFRyAweEZGCj4+ICsjZGVmaW5lIFNOX0FVWF9SREFUQTBfUkVHIDB4NzkKPj4gKwo+PiAr LyogdmlkZW8gY29uZmlnIHNwZWNpZmljIHJlZ2lzdGVycyAqLwo+PiArI2RlZmluZSBTTl9DSEFf QUNUSVZFX0xJTkVfTEVOR1RIX0xPV19SRUcgMHgyMAo+PiArI2RlZmluZSBTTl9DSEFfQUNUSVZF X0xJTkVfTEVOR1RIX0hJR0hfUkVHIDB4MjEKPj4gKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0RJ U1BMQVlfU0laRV9MT1dfUkVHIDB4MjQKPj4gKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0RJU1BM QVlfU0laRV9ISUdIX1JFRyAweDI1Cj4+ICsjZGVmaW5lIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURU SF9MT1dfUkVHIDB4MkMKPj4gKyNkZWZpbmUgU05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0hJR0hf UkVHIDB4MkQKPj4gKyNkZWZpbmUgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcgMHgz MAo+PiArI2RlZmluZSBTTl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcgMHgzMQo+PiAr I2RlZmluZSBTTl9DSEFfSE9SSVpPTlRBTF9CQUNLX1BPUkNIX1JFRyAweDM0Cj4+ICsjZGVmaW5l IFNOX0NIQV9WRVJUSUNBTF9CQUNLX1BPUkNIX1JFRyAweDM2Cj4+ICsjZGVmaW5lIFNOX0NIQV9I T1JJWk9OVEFMX0ZST05UX1BPUkNIX1JFRyAweDM4Cj4+ICsjZGVmaW5lIFNOX0NIQV9WRVJUSUNB TF9GUk9OVF9QT1JDSF9SRUcgMHgzQQo+PiArI2RlZmluZSBTTl9EQVRBX0ZPUk1BVF9SRUcgMHg1 Qgo+PiArI2RlZmluZSBTTl9DT0xPUl9CQVJfQ09ORklHX1JFRyAweDNDCj4gCj4gSXQnZCBiZSBu aWNlIGlmIHlvdSBjb3VsZCB0YWItYWxpZ24gdGhlIHZhbHVlcy4KPiAKPj4gKwo+PiArc3RydWN0 IHNuNjVkc2k4Nl9yZWdfY2ZnIHsKPj4gKwl1OCByZWc7Cj4+ICsJdTggdmFsOwo+PiArCWludCBz bGVlcF9pbl9tczsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBzbjY1ZHNpODZfdmlkZW9fY2ZnIHsK Pj4gKwl1MzIgaF9hY3RpdmU7Cj4+ICsJdTMyIGhfZnJvbnRfcG9yY2g7Cj4+ICsJdTMyIGhfcHVs c2Vfd2lkdGg7Cj4+ICsJdTMyIGhfYmFja19wb3JjaDsKPj4gKwlib29sIGhfcG9sYXJpdHk7Cj4+ ICsJdTMyIHZfYWN0aXZlOwo+PiArCXUzMiB2X2Zyb250X3BvcmNoOwo+PiArCXUzMiB2X3B1bHNl X3dpZHRoOwo+PiArCXUzMiB2X2JhY2tfcG9yY2g7Cj4+ICsJYm9vbCB2X3BvbGFyaXR5Owo+PiAr CXUzMiBwY2xrX2toejsKPj4gKwl1MzIgbnVtX29mX2xhbmVzOwo+PiArfTsKPiAKPiBBbGwgb2Yg dGhlc2UgY2FuIGJlIGRlcml2ZWQgZnJvbSBkcm1fZGlzcGxheV9tb2RlIGV4Y2VwdCBmb3IgCj4g bnVtX29mX2xhbmVzIHdoaWNoCj4gaXMgaGFyZGNvZGVkLiBTbyBsZXQncyBqdXN0IHVzZSBkcm1f ZGlzcGxheV9tb2RlIGRpcmVjdGx5Lgo+IAo+PiArCj4+ICtzdHJ1Y3Qgc242NWRzaTg2X2dwaW9z IHsKPj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICppcnFfZ3BpbzsKPj4gKwlzdHJ1Y3QgZ3Bpb19kZXNj ICplbmFibGVfZ3BpbzsKPj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICphdXhfaTJjX3NkYTsKPj4gKwlz dHJ1Y3QgZ3Bpb19kZXNjICphdXhfaTJjX3NjbDsKPj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICplZHBf Ymlhc19lbjsKPj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICplZHBfYmtsdF9lbjsKPj4gKwlzdHJ1Y3Qg Z3Bpb19kZXNjICplZHBfYmtsdF9jdHJsOwo+PiArfTsKPiAKPiBJIHNlZSBJUlEgYW5kIEVOIGlu IHRoZSBkYXRhc2hlZXQsIGJ1dCBub3QgdGhlIG90aGVycy4gSXQgc2VlbXMgbGlrZSAKPiB0aGUg YXV4XyoKPiBhbmQgZWRwXyogZ3Bpb3MgYXJlIGFsd2F5cyBlcXVhbCB0byBlbi4gU28gaWYgeW91 IGFjdHVhbGx5IG5lZWQgdGhlbSwgCj4gZG9uJ3QKPiBzcGVjaWZ5IGEgbmV3IHN0cnVjdCwganVz dCBhZGQgaXJxX2dwaW8gdG8gdGhlIG1haW4gc3RydWN0IGFuZCBhZGQgYW4gCj4gYXJyYXkgb2YK PiBlbl9ncGlvcyB0byBoYW5kbGUgdGhlIHJlc3QuCj4gCj4+ICsKPj4gK3N0cnVjdCBzbjY1ZHNp ODYgewo+IAo+IEkgd2lsbCBoYXZlIGZpdHMgdHJ5aW5nIHRvIHR5cGUgdGhpcyBuYW1lLiBDb3Vs ZCB5b3UgcGxlYXNlIHVzZSAKPiBzb21ldGhpbmcKPiBzaW1wbGUsIGxpa2Ugc25fYnJpZGdlPyBT YW1lIGNvbW1lbnQgYXBwbGllcyB0byBhbGwgb2YgdGhlIGZ1bmN0aW9uIAo+IG5hbWVzLgo+IAo+ PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7Cj4+ ICsJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOwo+PiArCj4+ICsJc3RydWN0IGRldmlj ZV9ub2RlICpob3N0X25vZGU7Cj4+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOwo+PiAr Cj4+ICsJdTggaTJjX2FkZHI7Cj4gCj4gVW51c2VkCj4gCj4+ICsJaW50IGlycTsKPj4gKwo+PiAr CXN0cnVjdCBzbjY1ZHNpODZfZ3Bpb3MgZ3Bpb3M7Cj4+ICsKPj4gKwl1bnNpZ25lZCBpbnQgbnVt X3N1cHBsaWVzOwo+PiArCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhICpzdXBwbGllczsKPj4g Kwo+PiArCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50Owo+PiArCj4+ICsJZW51bSBkcm1f Y29ubmVjdG9yX3N0YXR1cyBjb25uZWN0b3Jfc3RhdHVzOwo+IAo+IFlvdSBuZXZlciB1c2UgdGhl IHZhbHVlIG9mIHRoaXMsIHlvdSBqdXN0IGFzc2lnbiBpdC4gU28geW91IGNhbiByZW1vdmUgCj4g dGhpcy4KPiAKPj4gKwlib29sIHBvd2VyX29uOwo+PiArCj4+ICsJYm9vbCBpc19wbHVnZ2FibGU7 Cj4gCj4gQXMgSSBtZW50aW9uZWQgaW4gdGhlIGR0IHJldmlldywgeW91IGNhbiBkZXRlcm1pbmUg dGhpcyB2aWEgcGFuZWwuIFlvdSAKPiBzaG91bGQKPiBhbHNvIHRha2UgdGhpcyBpbnRvIGFjY291 bnQgaW4gZGV0ZWN0KCkuCj4gCj4+ICsJdTMyIG51bV9vZl9tb2RlczsKPj4gKwlzdHJ1Y3QgbGlz dF9oZWFkIG1vZGVfbGlzdDsKPj4gKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKPj4gKwo+PiArCXN0cnVj dCBkcm1fZGlzcGxheV9tb2RlIGN1cnJfbW9kZTsKPiAKPiBUaGlzIGlzIG5vdCB1c2VkIGFueXdo ZXJlCj4gCj4+ICsJc3RydWN0IHNuNjVkc2k4Nl92aWRlb19jZmcgdmlkZW9fY2ZnOwo+PiArfTsK Pj4gKwo+PiArc3RydWN0IHNuNjVkc2k4Nl9yZWdfY2ZnIGNmZ19wcm90b18wX2luaXRbXSA9IHsK Pj4gKwl7U05fUkVGQ0xLX0ZSRVFfUkVHLCAweDAyLCAweDB9LAo+PiArCXtTTl9EU0lfTEFORVNf UkVHLCAweDI2LCAweDE0fSwKPj4gKwl7U05fRFNJQV9DTEtfRlJFUV9SRUcsIDB4N0IsIDB4MH0s Cj4+ICsJe1NOX0VOSF9GUkFNRV9SRUcsIDB4MDUsIDB4MH0sCj4+ICsJe1NOX1NTQ19DT05GSUdf UkVHLCAweDMwLCAweDB9LAo+PiArCXtTTl9EQVRBUkFURV9DT05GSUdfUkVHLCAweDgwLCAweDB9 LAo+PiArCXtTTl9QTExfRU5BQkxFX1JFRywgMHgwMSwgMHgwfSwKPj4gKwl7U05fU0NSQU1CTEVf Q09ORklHX1JFRywgMHgwMCwgMHgwfSwKPj4gKwl7U05fQVVYX1dEQVRBMF9SRUcsIDB4MDEsIDB4 MH0sCj4+ICsJe1NOX0FVWF9BRERSXzE5XzE2X1JFRywgMHgwMCwgMHgwfSwKPj4gKwl7U05fQVVY X0FERFJfMTVfOF9SRUcsIDB4MDEsIDB4MH0sCj4+ICsJe1NOX0FVWF9BRERSXzdfMF9SRUcsIDB4 MEEsIDB4MH0sCj4+ICsJe1NOX0FVWF9MRU5HVEhfUkVHLCAweDAxLCAweDB9LAo+PiArCXtTTl9B VVhfQ01EX1JFRywgMHg4MSwgMHgxNH0sCj4+ICsJe1NOX01MX1RYX01PREVfUkVHLCAweDBBLCAw eDE0fSwKPj4gKwl7U05fUEFHRV9TRUxFQ1RfUkVHLCAweDE0LCAweDB9LAo+PiArCXtTTl9DSEFf QUNUSVZFX0xJTkVfTEVOR1RIX0xPV19SRUcsIDB4NzAsIDB4MH0sCj4+ICsJe1NOX0NIQV9BQ1RJ VkVfTElORV9MRU5HVEhfSElHSF9SRUcsIDB4MDgsIDB4MH0sCj4+ICsJe1NOX0NIQV9WRVJUSUNB TF9ESVNQTEFZX1NJWkVfTE9XX1JFRywgMHhBMCwgMHgwfSwKPj4gKwl7U05fQ0hBX1ZFUlRJQ0FM X0RJU1BMQVlfU0laRV9ISUdIX1JFRywgMHgwNSwgMHgwfSwKPj4gKwl7U05fQ0hBX0hTWU5DX1BV TFNFX1dJRFRIX0xPV19SRUcsIDB4MjAsIDB4MH0sCj4+ICsJe1NOX0NIQV9IU1lOQ19QVUxTRV9X SURUSF9ISUdIX1JFRywgMHg4MCwgMHgwfSwKPj4gKwl7U05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRI X0xPV19SRUcsIDB4MEEsIDB4MH0sCj4+ICsJe1NOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9ISUdI X1JFRywgMHg4MCwgMHgwfSwKPj4gKwl7U05fQ0hBX0hPUklaT05UQUxfQkFDS19QT1JDSF9SRUcs IDB4NTAsIDB4MH0sCj4+ICsJe1NOX0NIQV9WRVJUSUNBTF9CQUNLX1BPUkNIX1JFRywgMHgxQiwg MHgwfSwKPj4gKwl7U05fQ0hBX0hPUklaT05UQUxfRlJPTlRfUE9SQ0hfUkVHLCAweDMwLCAweDB9 LAo+PiArCXtTTl9DSEFfVkVSVElDQUxfRlJPTlRfUE9SQ0hfUkVHLCAweDAzLCAweDB9LAo+PiAr CXtTTl9EQVRBX0ZPUk1BVF9SRUcsIDB4MDAsIDB4MH0sCj4+ICsJe1NOX0NPTE9SX0JBUl9DT05G SUdfUkVHLCAweDAwLCAweDE0fSwKPj4gKwl7U05fRU5IX0ZSQU1FX1JFRywgMHgwRCwgMHgwfSwK Pj4gK307Cj4gCj4gVGhpcyBzaG91bGQgYmUgcHJvZ3JhbW1lZCB1c2luZyB0aGUgZGlzcGxheSBw YXJhbWV0ZXJzIHNldCBvdXQgYnkgCj4gbW9kZS9wYW5lbCwgYXMKPiBvcHBvc2VkIHRvIGp1c3Qg ZHVtcGVkIGluIGEgdGFibGUuCj4gCj4+ICsKPj4gK3N0YXRpYyBpbnQgc242NWRzaTg2X3dyaXRl KHN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhLCB1OCByZWcsIHU4IHZhbCkKPj4gK3sKPj4gKwlzdHJ1 Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gcGRhdGEtPmkyY19jbGllbnQ7Cj4+ICsJdTggYnVmWzJd ID0ge3JlZywgdmFsfTsKPj4gKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7Cj4+ICsJCS5hZGRyID0g Y2xpZW50LT5hZGRyLAo+PiArCQkuZmxhZ3MgPSAwLAo+PiArCQkubGVuID0gMiwKPj4gKwkJLmJ1 ZiA9IGJ1ZiwKPj4gKwl9Owo+PiArCj4+ICsJaWYgKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0 ZXIsICZtc2csIDEpIDwgMSkgewo+PiArCQlwcl9lcnIoImkyYyB3cml0ZSBmYWlsZWRcbiIpOwo+ PiArCQlyZXR1cm4gLUVJTzsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGludCBzbjY1ZHNpODZfcmVhZChzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YSwgdTgg cmVnLCBjaGFyICpidWYsIAo+PiB1MzIgc2l6ZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50ID0gcGRhdGEtPmkyY19jbGllbnQ7Cj4+ICsJc3RydWN0IGkyY19tc2cgbXNnWzJd ID0gewo+PiArCQl7Cj4+ICsJCQkuYWRkciA9IGNsaWVudC0+YWRkciwKPj4gKwkJCS5mbGFncyA9 IDAsCj4+ICsJCQkubGVuID0gMSwKPj4gKwkJCS5idWYgPSAmcmVnLAo+PiArCQl9LAo+PiArCQl7 Cj4+ICsJCQkuYWRkciA9IGNsaWVudC0+YWRkciwKPj4gKwkJCS5mbGFncyA9IEkyQ19NX1JELAo+ PiArCQkJLmxlbiA9IHNpemUsCj4+ICsJCQkuYnVmID0gYnVmLAo+PiArCQl9Cj4+ICsJfTsKPj4g Kwo+PiArCWlmIChpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2csIDIpICE9IDIpIHsK Pj4gKwkJcHJfZXJyKCJpMmMgcmVhZCBmYWlsZWRcbiIpOwo+PiArCQlyZXR1cm4gLUVJTzsKPj4g Kwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBzbjY1ZHNp ODZfd3JpdGVfYXJyYXkoc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEsCj4+ICsJc3RydWN0IHNuNjVk c2k4Nl9yZWdfY2ZnICpjZmcsIGludCBzaXplKQo+PiArewo+PiArCWludCByZXQgPSAwOwo+PiAr CWludCBpOwo+PiArCj4+ICsJc2l6ZSA9IHNpemUgLyBzaXplb2Yoc3RydWN0IHNuNjVkc2k4Nl9y ZWdfY2ZnKTsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Cj4+ICsJCXJldCA9IHNu NjVkc2k4Nl93cml0ZShwZGF0YSwgY2ZnW2ldLnJlZywgY2ZnW2ldLnZhbCk7Cj4+ICsKPj4gKwkJ aWYgKHJldCAhPSAwKSB7Cj4+ICsJCQlwcl9lcnIoInJlZyB3cml0ZXMgZmFpbGVkLiBMYXN0IHdy aXRlICUwMlggdG8gJTAyWFxuIiwKPj4gKwkJCQljZmdbaV0udmFsLCBjZmdbaV0ucmVnKTsKPj4g KwkJCWdvdG8gd19yZWdzX2ZhaWw7Cj4+ICsJCX0KPj4gKwo+PiArCQlpZiAoY2ZnW2ldLnNsZWVw X2luX21zKQo+PiArCQkJbXNsZWVwKGNmZ1tpXS5zbGVlcF9pbl9tcyk7Cj4+ICsJfQo+PiArCj4+ ICt3X3JlZ3NfZmFpbDoKPj4gKwlpZiAocmV0ICE9IDApCj4+ICsJCXByX2VycigiZXhpdGluZyB3 aXRoIHJldCA9ICVkIGFmdGVyICVkIHdyaXRlc1xuIiwgcmV0LCBpKTsKPj4gKwo+PiArCXJldHVy biByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHNuNjVkc2k4Nl9ncGlvX2NvbmZpZ3Vy ZShzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YSwgYm9vbCAKPj4gb24pCj4+ICt7Cj4+ICsJaW50IHZh bHVlOwo+PiArCj4+ICsJdmFsdWUgPSBvbiA/IDE6IDA7Cj4+ICsKPj4gKwlncGlvZF9zZXRfdmFs dWUocGRhdGEtPmdwaW9zLmVuYWJsZV9ncGlvLCB2YWx1ZSk7Cj4+ICsJZ3Bpb2Rfc2V0X3ZhbHVl KHBkYXRhLT5ncGlvcy5hdXhfaTJjX3NkYSwgdmFsdWUpOwo+PiArCWdwaW9kX3NldF92YWx1ZShw ZGF0YS0+Z3Bpb3MuYXV4X2kyY19zY2wsIHZhbHVlKTsKPj4gKwlncGlvZF9zZXRfdmFsdWUocGRh dGEtPmdwaW9zLmVkcF9iaWFzX2VuLCB2YWx1ZSk7Cj4+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKHBkYXRh LT5ncGlvcy5lZHBfYmtsdF9lbiwgdmFsdWUpOwo+PiArCWdwaW9kX3NldF92YWx1ZShwZGF0YS0+ Z3Bpb3MuaXJxX2dwaW8sIHZhbHVlKTsKPj4gKwlncGlvZF9zZXRfdmFsdWUocGRhdGEtPmdwaW9z LmVkcF9ia2x0X2N0cmwsIHZhbHVlKTsKPj4gKwo+PiArCXByX2RlYnVnKCJjb25maWcgdG86ICVk XG4iLCB2YWx1ZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHNuNjVkc2k4Nl9wb3dlcl9j dHJsKHN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhLCBib29sIAo+PiBlbmFibGUpCj4+ICt7Cj4+ICsJ aWYgKCFwZGF0YSkKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJaWYgKCFwZGF0YS0+cG93ZXJfb24g JiYgZW5hYmxlKSB7Cj4+ICsJCXNuNjVkc2k4Nl9ncGlvX2NvbmZpZ3VyZShwZGF0YSwgdHJ1ZSk7 Cj4+ICsKPj4gKwkJaWYgKHJlZ3VsYXRvcl9idWxrX2VuYWJsZShwZGF0YS0+bnVtX3N1cHBsaWVz LAo+PiArCQkJCQkJcGRhdGEtPnN1cHBsaWVzKSkgewo+PiArCQkJcHJfZXJyKCJicmlkZ2UgcmVn dWxhdG9yIGVuYWJsZSBmYWlsZWRcbiIpOwo+PiArCQkJcmV0dXJuOwo+PiArCQl9Cj4+ICsJCXBk YXRhLT5wb3dlcl9vbiA9IHRydWU7Cj4+ICsJfSBlbHNlIGlmIChwZGF0YS0+cG93ZXJfb24gJiYg IWVuYWJsZSkgewo+PiArCQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKHBkYXRhLT5udW1fc3VwcGxp ZXMsIHBkYXRhLT5zdXBwbGllcyk7Cj4+ICsKPj4gKwkJc242NWRzaTg2X2dwaW9fY29uZmlndXJl KHBkYXRhLCBmYWxzZSk7Cj4+ICsJCXBkYXRhLT5wb3dlcl9vbiA9IGZhbHNlOwo+PiArCX0gZWxz ZSB7Cj4+ICsJCXByX2RlYnVnKCJ1bm5lY2Vzc2FyeSBjYWxsIHRvIHBvd2VyIGNvbnRyb2xcbiIp Owo+PiArCX0KPj4gK30KPj4gKwo+PiArLyogQ29ubmVjdG9yIGZ1bmNzICovCj4+ICtzdGF0aWMg c3RydWN0IHNuNjVkc2k4NiAqY29ubmVjdG9yX3RvX3NuNjVkc2k4NihzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAKPj4gKmNvbm5lY3RvcikKPj4gK3sKPj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGNvbm5l Y3Rvciwgc3RydWN0IHNuNjVkc2k4NiwgY29ubmVjdG9yKTsKPj4gK30KPj4gKwo+PiArc3RhdGlj IGludCBzbjY1ZHNpODZfc2VuZF9hdXhfY21kKHN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhLAo+PiAr CQkJCSAgdTggY21kLCB1OCBhZGRyLCB1OCBsZW5ndGgsIGludCB3X2RhdGEpCj4+ICt7Cj4+ICsJ dTggcmVhZCA9IDA7Cj4+ICsJaW50IHJldHJ5X2NudCA9IDEwOwo+PiArCj4+ICsJc242NWRzaTg2 X3dyaXRlKHBkYXRhLCBTTl9BVVhfQ01EX1JFRywgKGNtZCA8PCA0KSk7Cj4+ICsJc242NWRzaTg2 X3dyaXRlKHBkYXRhLCBTTl9BVVhfQUREUl83XzBfUkVHLCBhZGRyKTsKPj4gKwlzbjY1ZHNpODZf d3JpdGUocGRhdGEsIFNOX0FVWF9MRU5HVEhfUkVHLCBsZW5ndGgpOwo+PiArCWlmICh3X2RhdGEg Pj0gMCkKPj4gKwkJc242NWRzaTg2X3dyaXRlKHBkYXRhLCBTTl9BVVhfV0RBVEEwX1JFRywgKHU4 KXdfZGF0YSk7Cj4+ICsKPj4gKwkvKiBzZXQgU0VORCBiaXQgKi8KPj4gKwlzbjY1ZHNpODZfcmVh ZChwZGF0YSwgU05fQVVYX0NNRF9SRUcsICZyZWFkLCAxKTsKPj4gKwlyZWFkIHw9IEJJVCgwKTsK Pj4gKwlzbjY1ZHNpODZfd3JpdGUocGRhdGEsIFNOX0FVWF9DTURfUkVHLCByZWFkKTsKPj4gKwo+ PiArCS8qIHBvbGwgZm9yIGJyaWRnZSB0byBhY2sgU0VORCBiaXQgKi8KPj4gKwl3aGlsZSAocmV0 cnlfY250KSB7Cj4+ICsJCXNuNjVkc2k4Nl9yZWFkKHBkYXRhLCBTTl9BVVhfQ01EX1JFRywgJnJl YWQsIDB4MSk7Cj4+ICsJCWlmICghKHJlYWQgJiBCSVQoMCkpKQo+PiArCQkJYnJlYWs7Cj4+ICsJ CXJldHJ5X2NudC0tOwo+PiArCQl1ZGVsYXkoMTAwMCk7Cj4+ICsJfQo+PiArCj4+ICsJaWYgKCFy ZXRyeV9jbnQpIHsKPj4gKwkJcHJfZXJyKCJhdXhfY21kIHRyYW5zZmVyIGZhaWxlZFxuIik7Cj4+ ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGludCBzbjY1ZHNpODZfcmVhZF9lZGlkKHN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhLCB1 OCAqYnVmKQo+PiArewo+PiArCWludCBpID0gMDsKPj4gKwl1OCBhZGRyID0gU05fQVVYX1JEQVRB MF9SRUc7Cj4+ICsJdTggKmRhdGEgPSBidWY7Cj4+ICsKPj4gKwlpZiAoIWRhdGEpCj4+ICsJCXJl dHVybiAtRU5PTUVNOwo+PiArCj4+ICsJaWYgKHNuNjVkc2k4Nl9zZW5kX2F1eF9jbWQocGRhdGEs IDB4NCwgMHg1MCwgMHgwLCAtMSkgfHwKPj4gKwkJc242NWRzaTg2X3NlbmRfYXV4X2NtZChwZGF0 YSwgMHg0LCAweDUwLCAweDAxLCAweDApIHx8Cj4+ICsJCXNuNjVkc2k4Nl9zZW5kX2F1eF9jbWQo cGRhdGEsIDB4NSwgMHg1MCwgMHgwLCAtMSkgfHwKPj4gKwkJc242NWRzaTg2X3NlbmRfYXV4X2Nt ZChwZGF0YSwgMHg1LCAweDUwLCAweDEwLCAtMSkpCj4+ICsJCWdvdG8gZXJyb3I7Cj4gCj4gSW5z dGVhZCBvZiBoYW5kLWNyYWZ0aW5nIHRoaXMsIHlvdSBzaG91bGQgaW1wbGVtZW50IGFuIGkyY19h ZGFwdGVyLiBZb3UgCj4gY2FuIHRoZW4KPiB1c2UgdGhhdCBpbiBkcm1fZ2V0X2VkaWQoKSB0byBy ZWFkIHRoZSBlZGlkIHZpYSB0aGUgY29yZS4KPiAKPiBTZWUgdGhlIGNvbW1lbnQgYWJvdXQgZHJt X2RvX2dldF9lZGlkKCk6Cj4gICogZHJpdmVycyBtdXN0IG1ha2UgYWxsIHJlYXNvbmFibGUgZWZm b3J0cyB0byBleHBvc2UgaXQgYXMgYW4gSTJDCj4gICogYWRhcHRlciBhbmQgdXNlIGRybV9nZXRf ZWRpZCgpIGluc3RlYWQgb2YgYWJ1c2luZyB0aGlzIGZ1bmN0aW9uLgo+IAo+PiArCj4+ICsJZm9y IChpID0gMDsgaSA8IDE2OyBpKyspIHsKPj4gKwkJaWYgKHNuNjVkc2k4Nl9yZWFkKHBkYXRhLCBh ZGRyLCBkYXRhLCAweDEpKQo+PiArCQkJZ290byBlcnJvcjsKPj4gKwkJYWRkcisrOwo+PiArCQlk YXRhKys7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICtlcnJvcjoKPj4gKwlwcl9lcnIo ImVkaWQgcmVhZCBvdmVyIGkyYyBmYWlsZWRcbiIpOwo+PiArCXJldHVybiAtRUlOVkFMOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50IHNuNjVkc2k4Nl9yZWFkX2VkaWRfYmxvY2soc3RydWN0IHNu NjVkc2k4NiAqcGRhdGEsCj4+ICsJCQkgICAgICAgdTggKmJ1ZiwgdW5zaWduZWQgaW50IGJsb2Nr KQo+PiArewo+PiArCWlmIChibG9jayA9PSAwKSB7Cj4+ICsJCWlmIChzbjY1ZHNpODZfcmVhZF9l ZGlkKHBkYXRhLCBidWYpKQo+PiArCQkJZ290byBlcnJvcjsKPj4gKwl9IGVsc2UgaWYgKGJsb2Nr ID09IDEpIHsKPj4gKwkJLyogbW92ZSBzZWdtZW50IHBvaW50ZXIgKi8KPj4gKwkJaWYgKHNuNjVk c2k4Nl9zZW5kX2F1eF9jbWQocGRhdGEsIDB4NCwgMHgzMCwgMHgwLCAtMSkgfHwKPj4gKwkJCXNu NjVkc2k4Nl9zZW5kX2F1eF9jbWQocGRhdGEsIDB4NCwgMHgzMCwgMHgwMSwgMHgxKSB8fAo+PiAr CQkJc242NWRzaTg2X3NlbmRfYXV4X2NtZChwZGF0YSwgMHgwLCAweDMwLCAweDAwLCAtMSkpCj4+ ICsJCQlnb3RvIGVycm9yOwo+PiArCQllbHNlCj4+ICsJCQlpZiAoc242NWRzaTg2X3JlYWRfZWRp ZChwZGF0YSwgYnVmKSkKPj4gKwkJCQlnb3RvIGVycm9yOwo+PiArCX0gZWxzZSB7Cj4+ICsJCXBy X2RlYnVnKCJ1bnN1cHBvcnRlZCBlZGlkIGJsb2NrXG4iKTsKPj4gKwkJZ290byBlcnJvcjsKPj4g Kwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK2Vycm9yOgo+PiArCXByX2VycigiZWRpZCBibG9j ayByZWFkIGZhaWxlZFxuIik7Cj4+ICsJcmV0dXJuIC1FSU5WQUw7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgc242NWRzaTg2X2dldF9lZGlkX2Jsb2NrKHZvaWQgKmRhdGEsIHU4ICpidWYsIHVu c2lnbmVkIGludCAKPj4gYmxvY2ssCj4+ICsJCQkJICBzaXplX3QgbGVuKQo+PiArewo+PiArCXN0 cnVjdCBzbjY1ZHNpODYgKnBkYXRhID0gZGF0YTsKPj4gKwlpbnQgcmV0ID0gMDsKPj4gKwo+PiAr CXByX2RlYnVnKCJnZXQgZWRpZCBibG9jazogYmxvY2s9JWQsIGxlbj0lZFxuIiwgYmxvY2ssIChp bnQpbGVuKTsKPj4gKwo+PiArCWlmIChsZW4gPiAxMjggfHwgYmxvY2sgPiAxKQo+PiArCQlyZXR1 cm4gLUVJTlZBTDsKPj4gKwo+PiArCXJldCA9IHNuNjVkc2k4Nl9yZWFkX2VkaWRfYmxvY2socGRh dGEsIGJ1ZiwgYmxvY2spOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJcHJfZXJyKCJlZGlkIHJlYWQg ZmFpbGVkIGZvciBibG9jazogJWQgcmV0OiAlZFxuIiwgYmxvY2ssIHJldCk7Cj4+ICsJCXJldHVy biByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bnQgc242NWRzaTg2X2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgCj4+ ICpjb25uZWN0b3IpCj4+ICt7Cj4+ICsJc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEgPSBjb25uZWN0 b3JfdG9fc242NWRzaTg2KGNvbm5lY3Rvcik7Cj4+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUsICptOwo+PiArCj4+ICsJaWYgKHBkYXRhLT5lZGlkKQo+PiArCQlyZXR1cm4gZHJtX2Fk ZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgcGRhdGEtPmVkaWQpOwo+IAo+IFdoYXQgaWYgdGhlIGVk aWQgY2hhbmdlcz8gWW91J2xsIG5ldmVyIHVwZGF0ZSBpdC4KPiAKPj4gKwo+PiArCXNuNjVkc2k4 Nl9wb3dlcl9jdHJsKHBkYXRhLCB0cnVlKTsKPj4gKwlpZiAocGRhdGEtPmlzX3BsdWdnYWJsZSkg ewo+IAo+IEhlcmUsIGNhbGwgdGhlIHBhbmVsIGZ1bmMgaWYgYSBwYW5lbCBpcyBjb25uZWN0ZWQs IG9yIHByb2JlIHRoZSBlZGlkLgo+IAo+PiArCQlwZGF0YS0+ZWRpZCA9IGRybV9kb19nZXRfZWRp ZChjb25uZWN0b3IsCj4+ICsJCQkJc242NWRzaTg2X2dldF9lZGlkX2Jsb2NrLCBwZGF0YSk7Cj4g Cj4gQXJlIHlvdSBsZWFraW5nIG1lbW9yeSBoZXJlPwo+IAo+PiArCj4+ICsJCWRybV9tb2RlX2Nv bm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIHBkYXRhLT5lZGlkKTsKPj4g KwkJcGRhdGEtPm51bV9vZl9tb2RlcyA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsCj4+ ICsJCQkJCQkJCXBkYXRhLT5lZGlkKTsKPiAKPiBZb3Ugc2hvdWxkIGJlIGFibGUgdG8gcmVtb3Zl IG51bV9vZl9tb2RlcyBhbmQgbW9kZV9saXN0IG9uY2UgeW91IHJlbW92ZSAKPiB0aGUgZHQKPiBj dXN0b20gbW9kZXMuIE1ha2Ugc3VyZSB5b3UgaW5jb3Jwb3JhdGUgYSBjYWxsIHRvIGRybV9wYW5l bF9nZXRfbW9kZXMoKSAKPiBoZXJlLgo+IAo+PiArCX0KPj4gKwo+PiArCWlmICghcGRhdGEtPmlz X3BsdWdnYWJsZSB8fCAhcGRhdGEtPm51bV9vZl9tb2Rlcykgewo+PiArCQkvKgo+PiArCQkgKiBp ZiBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBIUEQgb3IgZHVlIHRvIHNvbWUgcmVhc29uCj4+ICsJ CSAqIEVESUQgcmVhZCBmYWlsZWQgdGhlbiBmYWxsIGJhY2sgdG8gbW9kZV9saXN0IHdoaWNoIGlz Cj4+ICsJCSAqIGFscmVhZHkgcGFyc2VkIGZyb20gZHQgaWYgYW55Lgo+PiArCQkgKi8KPj4gKwkJ bGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmcGRhdGEtPm1vZGVfbGlzdCwgaGVhZCkgewo+PiAr CQkJbSA9IGRybV9tb2RlX2R1cGxpY2F0ZShjb25uZWN0b3ItPmRldiwgbW9kZSk7Cj4+ICsJCQlp ZiAoIW0pIHsKPj4gKwkJCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgbW9kZSAlZHglZFxuIiwKPj4g KwkJCQkJbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5KTsKPj4gKwkJCQlicmVhazsKPj4g KwkJCX0KPj4gKwkJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtKTsKPj4gKwkJfQo+ PiArCX0KPj4gKwo+PiArCXNuNjVkc2k4Nl9wb3dlcl9jdHJsKHBkYXRhLCBmYWxzZSk7Cj4gCj4g V2hhdCBpZiBwb3dlciB3YXMgYWxyZWFkeSBvbj8KPiAKPj4gKwlyZXR1cm4gcGRhdGEtPm51bV9v Zl9tb2RlczsKPj4gK30KPj4gKwo+PiArc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCj4+ICtz bjY1ZHNpODZfY29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKPj4gKwkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4+ICt7Cj4+ ICsJc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEgPSBjb25uZWN0b3JfdG9fc242NWRzaTg2KGNvbm5l Y3Rvcik7Cj4+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm07Cj4+ICsKPj4gKwlpZiAocGRh dGEtPmVkaWQpCj4+ICsJCXJldHVybiBNT0RFX09LOwo+IAo+IENhcmVmdWwgaGVyZSwgdXNlcnNw YWNlIGNvdWxkIGFkZCBhbiBpbnZhbGlkIG1vZGUgYW5kIHRoaXMgd291bGQgc2F5IAo+IGl0J3MK PiBjb3JyZWN0LiBJbnN0ZWFkIG9mIGRvaW5nIHRoaXMsIGFuZCB0aGUgY2hlY2sgYmVsb3csIGp1 c3QgY2hlY2sgdGhlIAo+IGdpdmVuIG1vZGUKPiBhZ2FpbnN0IHRoZSBtYXggaGFyZHdhcmUgbGlt aXRhdGlvbnMgbGlzdGVkIGluIHRoZSBkYXRhc2hlZXQgKDRrNjApLiBJIAo+IGFzc3VtZQo+IHRo aXMgd2lsbCBhbHNvIGRlcGVuZCBvbiBob3cgbWFueSBkc2kgY2hhbm5lbHMgd2UgaGF2ZSBjb21p bmcgaW4uCj4gCj4+ICsKPj4gKwlpZiAoIXBkYXRhLT5pc19wbHVnZ2FibGUpIHsKPj4gKwkJbGlz dF9mb3JfZWFjaF9lbnRyeShtLCAmcGRhdGEtPm1vZGVfbGlzdCwgaGVhZCkgewo+PiArCQkJaWYg KG0tPmhkaXNwbGF5ID09IG1vZGUtPmhkaXNwbGF5ICYmCj4+ICsJCQkJbS0+dmRpc3BsYXkgPT0g bW9kZS0+dmRpc3BsYXkpCj4+ICsJCQkJcmV0dXJuIE1PREVfT0s7Cj4+ICsJCX0KPj4gKwl9Cj4+ ICsKPj4gKwlyZXR1cm4gTU9ERV9CQUQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgCj4+IHNuNjVkc2k4Nl9jb25uZWN0b3JfaGVscGVyX2Z1 bmNzID0gewo+PiArCS5nZXRfbW9kZXMgPSBzbjY1ZHNpODZfY29ubmVjdG9yX2dldF9tb2RlcywK Pj4gKwkubW9kZV92YWxpZCA9IHNuNjVkc2k4Nl9jb25uZWN0b3JfbW9kZV92YWxpZCwKPj4gK307 Cj4+ICsKPj4gK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCj4+ICtzbjY1ZHNpODZf Y29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIAo+ PiBmb3JjZSkKPj4gK3sKPj4gKwlzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YSA9IGNvbm5lY3Rvcl90 b19zbjY1ZHNpODYoY29ubmVjdG9yKTsKPj4gKwo+PiArCXBkYXRhLT5jb25uZWN0b3Jfc3RhdHVz ID0gcGRhdGEtPnBvd2VyX29uID8KPj4gKwkJY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgOiBj b25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKPiAKPiBJdCdzIHBvc3NpYmxlIGRldGVjdCgp IHdpbGwgYmUgY2FsbGVkIHdoaWxlIHRoZSBkZXZpY2UgaXMgb2ZmLCBpbiB0aGF0IAo+IGNhc2UK PiB0aGlzIHdpbGwgcmV0dXJuIHRoZSBpbmNvcnJlY3QgdmFsdWUuIElzIHRoZXJlIHNvbWUgcmVh c29uIHlvdSBjYW4ndCAKPiBqdXN0IGRldGVjdAo+IHdoZXRoZXIgdGhlcmUncyBzb21ldGhpbmcg Y29ubmVjdGVkPwo+IAo+PiArCj4+ICsJcmV0dXJuIHBkYXRhLT5jb25uZWN0b3Jfc3RhdHVzOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3Mgc242 NWRzaTg2X2Nvbm5lY3Rvcl9mdW5jcyA9IHsKPj4gKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJf cHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKPj4gKwkuZGV0ZWN0ID0gc242NWRzaTg2X2Nv bm5lY3Rvcl9kZXRlY3QsCj4+ICsJLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9yX2NsZWFudXAsCj4+ ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAo+PiArCS5hdG9t aWNfZHVwbGljYXRlX3N0YXRlID0gCj4+IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBs aWNhdGVfc3RhdGUsCj4+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxw ZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgc3RydWN0 IHNuNjVkc2k4NiAqYnJpZGdlX3RvX3NuNjVkc2k4NihzdHJ1Y3QgZHJtX2JyaWRnZSAKPj4gKmJy aWRnZSkKPj4gK3sKPj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IHNuNjVk c2k4NiwgYnJpZGdlKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBzbjY1ZHNpODZfcmVhZF9k ZXZpY2VfcmV2KHN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhKQo+PiArewo+PiArCXU4IHJldiA9IDA7 Cj4+ICsJaW50IHJldCA9IDA7Cj4+ICsKPj4gKwlyZXQgPSBzbjY1ZHNpODZfcmVhZChwZGF0YSwg U05fREVWSUNFX1JFVl9SRUcsICZyZXYsIDEpOwo+PiArCj4gCj4gZXh0cmEgbGluZQo+IAo+PiAr CWlmICghcmV0KSB7Cj4gCj4gSW4gdGhpcyBjYXNlLCBmbGlwIHRoZSBjb25kaXRpb24gc28geW91 IGNhbiBhdm9pZCBpbmRlbnRpbmcgZXZlcnl0aGluZzoKPiAKPiAgICAgICAgIGlmIChyZXQpCj4g ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gCj4+ICsJCWlmIChyZXYgPT0gMHgyKSB7Cj4g Cj4gV2hhdCdzIDB4Mj8gQ2FuIHlvdSBwbGVhc2UgI2RlZmluZSB0aGlzPwo+IAo+PiArCQkJcHJf aW5mbygiU042NURTSTg2IHJldmlzaW9uIGlkOiAweCV4XG4iLCByZXYpOwo+IAo+IFdoaWxlIEkg cGVyc29uYWxseSBhcHByZWNpYXRlIGluZm8gbWVzc2FnZXMsIG90aGVycyBub3Qgc28gbXVjaC4g U28gCj4gZG93bmdyYWRlCj4gdGhpcyB0byBEUk1fREVCVUdfS01TKCkKPiAKPj4gKwkJfSBlbHNl IHsKPj4gKwkJCXByX3dhcm4oIlNONjVEU0k4NiByZXZpc2lvbiBpZCBtaXNtYXRjaFxuIik7Cj4+ ICsJCQlyZXQgPSAtRUlOVkFMOwo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIHJldDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIGlycXJldHVybl90IHNuNjVkc2k4Nl9pcnFfdGhyZWFkX2hh bmRsZXIoaW50IGlycSwgdm9pZCAKPj4gKmRldl9pZCkKPj4gK3sKPj4gKwlyZXR1cm4gSVJRX0hB TkRMRUQ7Cj4+ICt9Cj4gCj4gV2hhdCdzIHRoZSBwb2ludCBvZiBldmVuIHJlZ2lzdGVyaW5nIHRo aXM/IEp1c3QgbGVhdmUgaXQgYWxsIG91dCBpZiAKPiBpdCdzIHVudXNlZC4KPiBJZiB0aGVyZSdz IGEgbmVlZCBpbiB0aGUgZnV0dXJlLCBpdCBjYW4gZWFzaWx5IGJlIGFkZGVkIGJhY2sgaW4uCj4g Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc242NWRzaTg2X3N1cHBseV9uYW1l c1tdID0gewo+PiArCSJ2Y2NpbyIsCj4+ICsJInZjY2EiLAo+PiArCSJ2Y2NzIgo+PiArfTsKPj4g Kwo+PiArc3RhdGljIGludCBzbjY1ZHNpODZfaW5pdF9yZWd1bGF0b3JzKHN0cnVjdCBzbjY1ZHNp ODYgKnBkYXRhKQo+PiArewo+PiArCWNvbnN0IGNoYXIgKiBjb25zdCAqc3VwcGx5X25hbWVzOwo+ PiArCXVuc2lnbmVkIGludCBpOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlzdXBwbHlfbmFtZXMg PSBzbjY1ZHNpODZfc3VwcGx5X25hbWVzOwo+IAo+IFRoaXMgbG9jYWwgaXNuJ3QgbmVjZXNzYXJ5 Lgo+IAo+PiArCXBkYXRhLT5udW1fc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHNuNjVkc2k4Nl9zdXBw bHlfbmFtZXMpOwo+PiArCj4+ICsJcGRhdGEtPnN1cHBsaWVzID0gZGV2bV9rY2FsbG9jKHBkYXRh LT5kZXYsIHBkYXRhLT5udW1fc3VwcGxpZXMsCj4+ICsJCQkJICAgICBzaXplb2YoKnBkYXRhLT5z dXBwbGllcyksIEdGUF9LRVJORUwpOwo+PiArCWlmICghcGRhdGEtPnN1cHBsaWVzKQo+PiArCQly ZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3N1cHBs aWVzOyBpKyspCj4+ICsJCXBkYXRhLT5zdXBwbGllc1tpXS5zdXBwbHkgPSBzdXBwbHlfbmFtZXNb aV07Cj4+ICsKPj4gKwlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldChwZGF0YS0+ZGV2LAo+ PiArCQkJcGRhdGEtPm51bV9zdXBwbGllcywgcGRhdGEtPnN1cHBsaWVzKTsKPj4gKwlpZiAocmV0 KQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJcmV0dXJuIHJlZ3VsYXRvcl9idWxrX2VuYWJs ZShwZGF0YS0+bnVtX3N1cHBsaWVzLCBwZGF0YS0+c3VwcGxpZXMpOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IHNuNjVkc2k4Nl9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UpCj4+ICt7Cj4+ICsJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3Q7Cj4+ICsJc3RydWN0IG1p cGlfZHNpX2RldmljZSAqZHNpOwo+PiArCXN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhID0gYnJpZGdl X3RvX3NuNjVkc2k4NihicmlkZ2UpOwo+PiArCWludCByZXQ7Cj4+ICsJY29uc3Qgc3RydWN0IG1p cGlfZHNpX2RldmljZV9pbmZvIGluZm8gPSB7IC50eXBlID0gInNuNjVkc2k4NiIsCj4+ICsJCQkJ CQkgICAuY2hhbm5lbCA9IDAsCj4+ICsJCQkJCQkgICAubm9kZSA9IE5VTEwsCj4+ICsJCQkJCQkg fTsKPj4gKwo+PiArCWlmICghYnJpZGdlLT5lbmNvZGVyKSB7Cj4+ICsJCURSTV9FUlJPUigiUGFy ZW50IGVuY29kZXIgb2JqZWN0IG5vdCBmb3VuZCIpOwo+PiArCQlyZXR1cm4gLUVOT0RFVjsKPj4g Kwl9Cj4+ICsKPj4gKwkvKiBIUEQgbm90IHN1cHBvcnRlZCAqLwo+PiArCXBkYXRhLT5jb25uZWN0 b3IucG9sbGVkID0gMDsKPj4gKwo+IAo+IFlvdSdsbCBuZWVkIHRvIHJlZmFjdG9yIHRoZSBiZWxv dyB0byBhY2NvbW1vZGF0ZSBwYW5lbHMuIElmIHlvdSdyZSBub3QgCj4gcGxhbm5pbmcKPiBvbiBz dXBwb3J0aW5nIGhvdHBsdWcsIHlvdSBzaG91bGQgcHJvYmFibHkgcmVtb3ZlIGFsbCBvZiB0aGUg Cj4gY29ubmVjdG9yLXJlbGF0ZWQKPiBzdHVmZiBmcm9tIHRoaXMgZHJpdmVyLCBzaW5jZSB5b3Ug d2lsbCBhbHdheXMgYmUgdXNpbmcgYSBwYW5lbCBkcml2ZXIuCj4gCgpUaGFua3MgZm9yIHJldmll d2luZyB0aGUgcGF0Y2ggaW4gZGV0YWlsLgoKSSBoYXZlIG9uZSBkb3VidCBoZXJlLiBJZiB3ZSBy ZW1vdmUgY29ubmVjdG9yIGZyb20gYnJpZGdlIGRyaXZlciwgdGhlbiAKaG93IHdpbGwgZGV0ZWN0 KCkKYW5kIGdldF9tb2RlcygpIGNhbGxlZC4gSWYgeW91IGFyZSBzdWdnZXN0aW5nIHRvIHVzZSBw YW5lbCBmdW5jJ3MgCmRldGVjdCgpIGFuZCBnZXRfbW9kZSgpCnRoZW4gaXQgbWlnaHQgbm90IHdv cmssIGJlY2F1c2Ugb25jZSB1cHN0cmVhbSBEU0kgZHJpdmVyIHNlZXMgYW4gCmV4dGVybmFsIGJy aWRnZSBpcyBjb25uZWN0ZWQKdG8gRFNJLCB0aGVuIGl0IGRvZXMgbm90IGNyZWF0ZSBhIGNvbm5l Y3RvciBvZiBpdCBvd24sIGl0IGV4cGVjdHMgdGhlIApleHRlcm5hbCBicmlkZ2UKdG8gY3JlYXRl IHRoZSBjb25uZWN0b3Igbm9kZS4gSSB0aGluayBoZXJlIHRoZSBleHRlcm5hbCBicmlkZ2UgaGFz IHRvIApjcmVhdGUgdGhlIGNvbm5lY3RvcgphbmQgd2hlbiBkZXRlY3QoKSBhbmQgZ2V0X21vZGVz KCkgY2FsbCBjb21lIHRvIGV4dGVybmFsIGJyaWRnZSB0aGVuIGl0IApzaG91bGQgcXVlcnkgY29u bmVjdGVkCnBhbmVsJ3MgZGV0ZWN0KCkgYW5kIGdldF9tb2RlcygpIEFQSS4KCj4+ICsJcmV0ID0g ZHJtX2Nvbm5lY3Rvcl9pbml0KGJyaWRnZS0+ZGV2LCAmcGRhdGEtPmNvbm5lY3RvciwKPj4gKwkJ CQkgJnNuNjVkc2k4Nl9jb25uZWN0b3JfZnVuY3MsCj4+ICsJCQkJIERSTV9NT0RFX0NPTk5FQ1RP Ul9lRFApOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlh bGl6ZSBjb25uZWN0b3Igd2l0aCBkcm1cbiIpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4g Kwo+PiArCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcGRhdGEtPmNvbm5lY3RvciwKPj4gKwkJ CQkgJnNuNjVkc2k4Nl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKPj4gKwlkcm1fbW9kZV9jb25u ZWN0b3JfYXR0YWNoX2VuY29kZXIoJnBkYXRhLT5jb25uZWN0b3IsIAo+PiBicmlkZ2UtPmVuY29k ZXIpOwo+PiArCj4+ICsJaG9zdCA9IG9mX2ZpbmRfbWlwaV9kc2lfaG9zdF9ieV9ub2RlKHBkYXRh LT5ob3N0X25vZGUpOwo+PiArCWlmICghaG9zdCkgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBm aW5kIGRzaSBob3N0XG4iKTsKPj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4+ICsJfQo+PiArCj4+ICsJ ZHNpID0gbWlwaV9kc2lfZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoaG9zdCwgJmluZm8pOwo+PiArCWlm IChJU19FUlIoZHNpKSkgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBjcmVhdGUgZHNpIGRldmlj ZVxuIik7Cj4+ICsJCXJldCA9IFBUUl9FUlIoZHNpKTsKPj4gKwkJZ290byBlcnJfZHNpX2Rldmlj ZTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBzZXR0aW5nIHRvIDQgbGFuZXMgYWx3YXlzIGZvciBub3cg Ki8KPj4gKwlkc2ktPmxhbmVzID0gNDsKPiAKPiBQZXJoYXBzIGFkZCBhIFRPRE8gZm9yIHRoaXM/ Cj4gCj4+ICsJZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRfUkdCODg4Owo+PiArCWRzaS0+bW9k ZV9mbGFncyA9IE1JUElfRFNJX01PREVfVklERU8gfCAKPj4gTUlQSV9EU0lfTU9ERV9WSURFT19T WU5DX1BVTFNFIHwKPj4gKwkJCSAgTUlQSV9EU0lfTU9ERV9FT1RfUEFDS0VUIHwgTUlQSV9EU0lf TU9ERV9WSURFT19IU0U7Cj4+ICsKPj4gKwlyZXQgPSBtaXBpX2RzaV9hdHRhY2goZHNpKTsKPj4g KwlpZiAocmV0IDwgMCkgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBhdHRhY2ggZHNpIHRvIGhv c3RcbiIpOwo+PiArCQlnb3RvIGVycl9kc2lfYXR0YWNoOwo+PiArCX0KPj4gKwo+PiArCXBkYXRh LT5kc2kgPSBkc2k7Cj4+ICsKPj4gKwlwcl9kZWJ1ZygiYnJpZGdlIGF0dGFjaGVkXG4iKTsKPj4g Kwo+PiArCXJldHVybiAwOwo+PiArCj4+ICtlcnJfZHNpX2F0dGFjaDoKPj4gKwltaXBpX2RzaV9k ZXZpY2VfdW5yZWdpc3Rlcihkc2kpOwo+PiArZXJyX2RzaV9kZXZpY2U6Cj4+ICsJcmV0dXJuIHJl dDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgc242NWRzaTg2X3NldF92aWRlb19jZmcoc3Ry dWN0IHNuNjVkc2k4NiAqcGRhdGEsCj4+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUs Cj4+ICsJc3RydWN0IHNuNjVkc2k4Nl92aWRlb19jZmcgKnZpZGVvX2NmZykKPj4gK3sKPj4gKwl2 aWRlb19jZmctPmhfYWN0aXZlID0gbW9kZS0+aGRpc3BsYXk7Cj4+ICsJdmlkZW9fY2ZnLT52X2Fj dGl2ZSA9IG1vZGUtPnZkaXNwbGF5Owo+PiArCXZpZGVvX2NmZy0+aF9mcm9udF9wb3JjaCA9IG1v ZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3BsYXk7Cj4+ICsJdmlkZW9fY2ZnLT52X2Zyb250 X3BvcmNoID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsKPj4gKwl2aWRlb19j ZmctPmhfYmFja19wb3JjaCA9IG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZDsKPj4gKwl2 aWRlb19jZmctPnZfYmFja19wb3JjaCA9IG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZDsK Pj4gKwl2aWRlb19jZmctPmhfcHVsc2Vfd2lkdGggPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5o c3luY19zdGFydDsKPj4gKwl2aWRlb19jZmctPnZfcHVsc2Vfd2lkdGggPSBtb2RlLT52c3luY19l bmQgLSBtb2RlLT52c3luY19zdGFydDsKPj4gKwl2aWRlb19jZmctPnBjbGtfa2h6ID0gbW9kZS0+ Y2xvY2s7Cj4+ICsKPj4gKwl2aWRlb19jZmctPmhfcG9sYXJpdHkgPSAhIShtb2RlLT5mbGFncyAm IERSTV9NT0RFX0ZMQUdfUEhTWU5DKTsKPj4gKwl2aWRlb19jZmctPnZfcG9sYXJpdHkgPSAhISht b2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKTsKPj4gKwo+PiArCS8qIHNldHRpbmcg dG8gNCBsYW5lcyBhbHdheXMgZm9yIG5vdyAqLwo+PiArCXZpZGVvX2NmZy0+bnVtX29mX2xhbmVz ID0gNDsKPj4gKwo+PiArCXByX2RlYnVnKCJ2aWRlbz1oWyVkLCVkLCVkLCVkXSB2WyVkLCVkLCVk LCVkXSBwY2xrPSVkIGxhbmU9JWRcbiIsCj4+ICsJCXZpZGVvX2NmZy0+aF9hY3RpdmUsIHZpZGVv X2NmZy0+aF9mcm9udF9wb3JjaCwKPj4gKwkJdmlkZW9fY2ZnLT5oX3B1bHNlX3dpZHRoLCB2aWRl b19jZmctPmhfYmFja19wb3JjaCwKPj4gKwkJdmlkZW9fY2ZnLT52X2FjdGl2ZSwgdmlkZW9fY2Zn LT52X2Zyb250X3BvcmNoLAo+PiArCQl2aWRlb19jZmctPnZfcHVsc2Vfd2lkdGgsIHZpZGVvX2Nm Zy0+dl9iYWNrX3BvcmNoLAo+PiArCQl2aWRlb19jZmctPnBjbGtfa2h6LCB2aWRlb19jZmctPm51 bV9vZl9sYW5lcyk7Cj4+ICt9Cj4gCj4gQXMgbWVudGlvbmVkIGFib3ZlLCB0aGlzIG5lZWRzIHRv IGJlIHJlbW92ZWQuCj4gCj4+ICsKPj4gK3N0YXRpYyB2b2lkIHNuNjVkc2k4Nl9icmlkZ2VfbW9k ZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPj4gKwkJCQkgICAgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUsCj4+ICsJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICph ZGpfbW9kZSkKPj4gK3sKPj4gKwlzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YSA9IGJyaWRnZV90b19z bjY1ZHNpODYoYnJpZGdlKTsKPj4gKwlzdHJ1Y3Qgc242NWRzaTg2X3ZpZGVvX2NmZyAqdmlkZW9f Y2ZnID0gJnBkYXRhLT52aWRlb19jZmc7Cj4+ICsJaW50IHJldCA9IDA7Cj4+ICsKPj4gKwlwcl9k ZWJ1ZygibW9kZV9zZXQ6IGhkaXNwbGF5PSVkLCB2ZGlzcGxheT0lZCwgdnJlZnJlc2g9JWQsIAo+ PiBjbG9jaz0lZFxuIiwKPj4gKwkJYWRqX21vZGUtPmhkaXNwbGF5LCBhZGpfbW9kZS0+dmRpc3Bs YXksCj4+ICsJCWFkal9tb2RlLT52cmVmcmVzaCwgYWRqX21vZGUtPmNsb2NrKTsKPj4gKwo+PiAr CWRybV9tb2RlX2NvcHkoJnBkYXRhLT5jdXJyX21vZGUsIGFkal9tb2RlKTsKPj4gKwo+PiArCW1l bXNldCh2aWRlb19jZmcsIDAsIHNpemVvZihzdHJ1Y3Qgc242NWRzaTg2X3ZpZGVvX2NmZykpOwo+ PiArCXNuNjVkc2k4Nl9zZXRfdmlkZW9fY2ZnKHBkYXRhLCBhZGpfbW9kZSwgdmlkZW9fY2ZnKTsK Pj4gKwo+PiArCWlmICh2aWRlb19jZmctPm51bV9vZl9sYW5lcyAhPSBwZGF0YS0+ZHNpLT5sYW5l cykgewo+PiArCQltaXBpX2RzaV9kZXRhY2gocGRhdGEtPmRzaSk7Cj4+ICsJCXBkYXRhLT5kc2kt PmxhbmVzID0gdmlkZW9fY2ZnLT5udW1fb2ZfbGFuZXM7Cj4+ICsJCXJldCA9IG1pcGlfZHNpX2F0 dGFjaChwZGF0YS0+ZHNpKTsKPiAKPiBIbW0sIGlmIHRoaXMgaXMgY29uZmlndXJhYmxlIGlzIHRo ZXJlIG5vIGJldHRlciB3YXkgb2YgZG9pbmcgdGhpcyB0aGFuIAo+IGRldGFjaGluZwo+IGFuZCBh dHRhY2hpbmc/Cj4gCj4+ICsJCWlmIChyZXQpCj4+ICsJCQlwcl9lcnIoImZhaWxlZCB0byBjaGFu Z2UgaG9zdCBsYW5lc1xuIik7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBzbjY1 ZHNpODZfYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPj4gK3sKPj4g KwlzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YSA9IGJyaWRnZV90b19zbjY1ZHNpODYoYnJpZGdlKTsK Pj4gKwo+PiArCXNuNjVkc2k4Nl9wb3dlcl9jdHJsKHBkYXRhLCBmYWxzZSk7Cj4+ICsJcGRhdGEt PmNvbm5lY3Rvcl9zdGF0dXMgPSAgY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHNuNjVkc2k4Nl9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UpCj4+ICt7Cj4+ICsJc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEgPSBicmlk Z2VfdG9fc242NWRzaTg2KGJyaWRnZSk7Cj4+ICsKPj4gKwlzbjY1ZHNpODZfcG93ZXJfY3RybChw ZGF0YSwgdHJ1ZSk7Cj4+ICsJcGRhdGEtPmNvbm5lY3Rvcl9zdGF0dXMgPSAgY29ubmVjdG9yX3N0 YXR1c19jb25uZWN0ZWQ7Cj4+ICsJc242NWRzaTg2X3dyaXRlX2FycmF5KHBkYXRhLCBjZmdfcHJv dG9fMF9pbml0LAo+PiArCQkJICAgICAgc2l6ZW9mKGNmZ19wcm90b18wX2luaXQpKTsKPiAKPiBB cyBtZW50aW9uZWQgYWJvdmUsIG1vc3QgdGhlc2Ugc2hvdWxkIGxpa2VseSBiZSBzZXQgaW4gbW9k ZV9zZXQoKSB1c2luZyAKPiB0aGUKPiB2YWx1ZXMgc2V0IGluIHRoZSBjdXJyZW50IG1vZGUuCj4g Cj4gU2Vhbgo+IAo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2Vf ZnVuY3Mgc242NWRzaTg2X2JyaWRnZV9mdW5jcyA9IHsKPj4gKwkuYXR0YWNoID0gc242NWRzaTg2 X2JyaWRnZV9hdHRhY2gsCj4+ICsJLmVuYWJsZSA9IHNuNjVkc2k4Nl9icmlkZ2VfZW5hYmxlLAo+ PiArCS5kaXNhYmxlID0gc242NWRzaTg2X2JyaWRnZV9kaXNhYmxlLAo+PiArCS5tb2RlX3NldCA9 IHNuNjVkc2k4Nl9icmlkZ2VfbW9kZV9zZXQsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW50IHNu NjVkc2k4Nl9wYXJzZV9kdF9tb2RlcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAo+PiArCQkJCQlz dHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAo+PiArCQkJCQl1MzIgKm51bV9vZl9tb2RlcykKPj4gK3sK Pj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOwo+PiAr CXUzMiBtb2RlX2NvdW50ID0gMDsKPj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBOVUxM Owo+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdF9ub2RlID0gTlVMTDsKPj4gKwl1MzIgaF9m cm9udF9wb3JjaCwgaF9wdWxzZV93aWR0aCwgaF9iYWNrX3BvcmNoOwo+PiArCXUzMiB2X2Zyb250 X3BvcmNoLCB2X3B1bHNlX3dpZHRoLCB2X2JhY2tfcG9yY2g7Cj4+ICsJYm9vbCBoX2FjdGl2ZV9o aWdoLCB2X2FjdGl2ZV9oaWdoOwo+PiArCXUzMiBmbGFncyA9IDA7Cj4+ICsKPj4gKwlyb290X25v ZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgInNuLGN1c3RvbS1tb2RlcyIpOwo+PiArCWlm ICghcm9vdF9ub2RlKSB7Cj4+ICsJCXJvb3Rfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsICJz bixjdXN0b20tbW9kZXMiLCAwKTsKPj4gKwkJaWYgKCFyb290X25vZGUpIHsKPj4gKwkJCXByX2lu Zm8oIk5vIG1vZGVzIHByZXNlbnQgZm9yIHNuLGN1c3RvbS1tb2RlcyIpOwo+PiArCQkJZ290byBl bmQ7Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKHJvb3Rf bm9kZSwgbm9kZSkgewo+PiArCQlyYyA9IDA7Cj4+ICsJCW1vZGUgPSBremFsbG9jKHNpemVvZigq bW9kZSksIEdGUF9LRVJORUwpOwo+PiArCQlpZiAoIW1vZGUpIHsKPj4gKwkJCXJjID0gIC1FTk9N RU07Cj4+ICsJCQlnb3RvIGVuZDsKPj4gKwkJfQo+PiArCj4+ICsJCW9mX3Byb3BlcnR5X3JlYWRf dTMyKG5vZGUsICJzbixtb2RlLWgtYWN0aXZlIiwKPj4gKwkJCQkJCSZtb2RlLT5oZGlzcGxheSk7 Cj4+ICsKPj4gKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInNuLG1vZGUtaC1mcm9udC1w b3JjaCIsCj4+ICsJCQkJCQkmaF9mcm9udF9wb3JjaCk7Cj4+ICsJCW9mX3Byb3BlcnR5X3JlYWRf dTMyKG5vZGUsICJzbixtb2RlLWgtcHVsc2Utd2lkdGgiLAo+PiArCQkJCQkJJmhfcHVsc2Vfd2lk dGgpOwo+PiArCj4+ICsJCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJzbixtb2RlLWgtYmFj ay1wb3JjaCIsCj4+ICsJCQkJCQkmaF9iYWNrX3BvcmNoKTsKPj4gKwo+PiArCQloX2FjdGl2ZV9o aWdoID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5vZGUsCj4+ICsJCQkJCQkic24sbW9kZS1oLWFj dGl2ZS1oaWdoIik7Cj4+ICsKPj4gKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInNuLG1v ZGUtdi1hY3RpdmUiLAo+PiArCQkJCQkJJm1vZGUtPnZkaXNwbGF5KTsKPj4gKwkJb2ZfcHJvcGVy dHlfcmVhZF91MzIobm9kZSwgInNuLG1vZGUtdi1mcm9udC1wb3JjaCIsCj4+ICsJCQkJCQkmdl9m cm9udF9wb3JjaCk7Cj4+ICsKPj4gKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInNuLG1v ZGUtdi1wdWxzZS13aWR0aCIsCj4+ICsJCQkJCQkmdl9wdWxzZV93aWR0aCk7Cj4+ICsJCW9mX3By b3BlcnR5X3JlYWRfdTMyKG5vZGUsICJzbixtb2RlLXYtYmFjay1wb3JjaCIsCj4+ICsJCQkJCQkm dl9iYWNrX3BvcmNoKTsKPj4gKwkJdl9hY3RpdmVfaGlnaCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9v bChub2RlLAo+PiArCQkJCQkJInNuLG1vZGUtdi1hY3RpdmUtaGlnaCIpOwo+PiArCj4+ICsJCW9m X3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJzbixtb2RlLXJlZnJlc2gtcmF0ZSIsCj4+ICsJCQkJ CQkmbW9kZS0+dnJlZnJlc2gpOwo+PiArCj4+ICsJCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUs ICJzbixtb2RlLWNsb2NrLWluLWtoeiIsCj4+ICsJCQkJCQkmbW9kZS0+Y2xvY2spOwo+PiArCj4+ ICsJCW1vZGUtPmhzeW5jX3N0YXJ0ID0gbW9kZS0+aGRpc3BsYXkgKyBoX2Zyb250X3BvcmNoOwo+ PiArCQltb2RlLT5oc3luY19lbmQgPSBtb2RlLT5oc3luY19zdGFydCArIGhfcHVsc2Vfd2lkdGg7 Cj4+ICsJCW1vZGUtPmh0b3RhbCA9IG1vZGUtPmhzeW5jX2VuZCArIGhfYmFja19wb3JjaDsKPj4g KwkJbW9kZS0+dnN5bmNfc3RhcnQgPSBtb2RlLT52ZGlzcGxheSArIHZfZnJvbnRfcG9yY2g7Cj4+ ICsJCW1vZGUtPnZzeW5jX2VuZCA9IG1vZGUtPnZzeW5jX3N0YXJ0ICsgdl9wdWxzZV93aWR0aDsK Pj4gKwkJbW9kZS0+dnRvdGFsID0gbW9kZS0+dnN5bmNfZW5kICsgdl9iYWNrX3BvcmNoOwo+PiAr Cj4+ICsJCWlmICghbW9kZS0+aHRvdGFsIHx8ICFtb2RlLT52dG90YWwpIHsKPj4gKwkJCXJjID0g LUVJTlZBTDsKPj4gKwkJCWdvdG8gZmFpbDsKPj4gKwkJfQo+PiArCj4+ICsJCWlmIChoX2FjdGl2 ZV9oaWdoKQo+PiArCQkJZmxhZ3MgfD0gRFJNX01PREVfRkxBR19QSFNZTkM7Cj4+ICsJCWVsc2UK Pj4gKwkJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTkhTWU5DOwo+PiArCQlpZiAodl9hY3RpdmVf aGlnaCkKPj4gKwkJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfUFZTWU5DOwo+PiArCQllbHNlCj4+ ICsJCQlmbGFncyB8PSBEUk1fTU9ERV9GTEFHX05WU1lOQzsKPj4gKwkJbW9kZS0+ZmxhZ3MgPSBm bGFnczsKPj4gKwo+PiArCQlpZiAoIXJjKSB7Cj4+ICsJCQltb2RlX2NvdW50Kys7Cj4+ICsJCQls aXN0X2FkZF90YWlsKCZtb2RlLT5oZWFkLCBoZWFkKTsKPj4gKwkJfQo+PiArCj4+ICsJCWRybV9t b2RlX3NldF9uYW1lKG1vZGUpOwo+PiArCj4+ICsJCXByX2RlYnVnKCJtb2RlWyVzXSBoWyVkLCVk LCVkLCVkXSB2WyVkLCVkLCVkLCVkXSAlZCAleCAlZGtIWlxuIiwKPj4gKwkJCW1vZGUtPm5hbWUs IG1vZGUtPmhkaXNwbGF5LCBtb2RlLT5oc3luY19zdGFydCwKPj4gKwkJCW1vZGUtPmhzeW5jX2Vu ZCwgbW9kZS0+aHRvdGFsLCBtb2RlLT52ZGlzcGxheSwKPj4gKwkJCW1vZGUtPnZzeW5jX3N0YXJ0 LCBtb2RlLT52c3luY19lbmQsIG1vZGUtPnZ0b3RhbCwKPj4gKwkJCW1vZGUtPnZyZWZyZXNoLCBt b2RlLT5mbGFncywgbW9kZS0+Y2xvY2spOwo+PiArZmFpbDoKPj4gKwkJaWYgKHJjKSB7Cj4+ICsJ CQlrZnJlZShtb2RlKTsKPj4gKwkJCWNvbnRpbnVlOwo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJ aWYgKG51bV9vZl9tb2RlcykKPj4gKwkJKm51bV9vZl9tb2RlcyA9IG1vZGVfY291bnQ7Cj4+ICsK Pj4gK2VuZDoKPj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgc242NWRz aTg2X3BhcnNlX2dwaW9zKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCj4+ICsJCQkJCXN0cnVjdCBz bjY1ZHNpODYgKnBkYXRhKQo+PiArewo+PiArCWludCByZXQgPSAwOwo+PiArCj4+ICsJaWYgKCFw ZGF0YSB8fCAhcGRhdGEtPmRldikKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwlwZGF0 YS0+Z3Bpb3MuZW5hYmxlX2dwaW8gPSBkZXZtX2dwaW9kX2dldChwZGF0YS0+ZGV2LCAiZW5hYmxl IiwKPj4gKwkJCQkJCSAgR1BJT0RfT1VUX0hJR0gpOwo+PiArCWlmIChJU19FUlIocGRhdGEtPmdw aW9zLmVuYWJsZV9ncGlvKSkgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgZW5hYmxlIGdw aW8gZnJvbSBEVFxuIik7Cj4+ICsJCXJldCA9IFBUUl9FUlIocGRhdGEtPmdwaW9zLmVuYWJsZV9n cGlvKTsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwo+PiArCXBkYXRhLT5ncGlvcy5hdXhf aTJjX3NjbCA9IGRldm1fZ3Bpb2RfZ2V0KHBkYXRhLT5kZXYsICJhdXgtc2NsIiwKPj4gKwkJCQkJ CSAgR1BJT0RfT1VUX0hJR0gpOwo+PiArCWlmIChJU19FUlIocGRhdGEtPmdwaW9zLmF1eF9pMmNf c2NsKSkgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgYXV4IHNjbCBncGlvIGZyb20gRFRc biIpOwo+PiArCQlyZXQgPSBQVFJfRVJSKHBkYXRhLT5ncGlvcy5hdXhfaTJjX3NjbCk7Cj4+ICsJ CWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsKPj4gKwlwZGF0YS0+Z3Bpb3MuYXV4X2kyY19zZGEgPSBk ZXZtX2dwaW9kX2dldChwZGF0YS0+ZGV2LCAiYXV4LXNkYSIsCj4+ICsJCQkJCQkgIEdQSU9EX09V VF9ISUdIKTsKPj4gKwlpZiAoSVNfRVJSKHBkYXRhLT5ncGlvcy5hdXhfaTJjX3NkYSkpIHsKPj4g KwkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IGF1eCBzZGEgZ3BpbyBmcm9tIERUXG4iKTsKPj4gKwkJ cmV0ID0gUFRSX0VSUihwZGF0YS0+Z3Bpb3MuYXV4X2kyY19zZGEpOwo+PiArCQlnb3RvIGV4aXQ7 Cj4+ICsJfQo+PiArCj4+ICsJcGRhdGEtPmdwaW9zLmVkcF9iaWFzX2VuID0gZGV2bV9ncGlvZF9n ZXQocGRhdGEtPmRldiwgImJpYXMtZW4iLAo+PiArCQkJCQkJICBHUElPRF9PVVRfSElHSCk7Cj4+ ICsJaWYgKElTX0VSUihwZGF0YS0+Z3Bpb3MuZWRwX2JpYXNfZW4pKSB7Cj4+ICsJCXByX2Vycigi ZmFpbGVkIHRvIGdldCBiaWFzIGVuIGdwaW8gZnJvbSBEVFxuIik7Cj4+ICsJCXJldCA9IFBUUl9F UlIocGRhdGEtPmdwaW9zLmVkcF9iaWFzX2VuKTsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4g Kwo+PiArCXBkYXRhLT5ncGlvcy5lZHBfYmtsdF9lbiA9IGRldm1fZ3Bpb2RfZ2V0KHBkYXRhLT5k ZXYsICJia2x0LWVuIiwKPj4gKwkJCQkJCSAgR1BJT0RfT1VUX0hJR0gpOwo+PiArCWlmIChJU19F UlIocGRhdGEtPmdwaW9zLmVkcF9ia2x0X2VuKSkgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBn ZXQgYmtsdCBlbiBncGlvIGZyb20gRFRcbiIpOwo+PiArCQlyZXQgPSBQVFJfRVJSKHBkYXRhLT5n cGlvcy5lZHBfYmtsdF9lbik7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsKPj4gKwlwZGF0 YS0+Z3Bpb3MuaXJxX2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwZGF0YS0+ZGV2LCAi aXJxIiwKPj4gKwkJCQkJCSAgR1BJT0RfT1VUX0hJR0gpOwo+PiArCWlmIChJU19FUlIocGRhdGEt PmdwaW9zLmlycV9ncGlvKSkKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IGlycSBncGlvIGZy b20gRFRcbiIpOwo+PiArCj4+ICsJcGRhdGEtPmdwaW9zLmVkcF9ia2x0X2N0cmwgPSBkZXZtX2dw aW9kX2dldF9vcHRpb25hbChwZGF0YS0+ZGV2LAo+PiArCQkJCQkiYmtsdC1jdHJsIiwgR1BJT0Rf T1VUX0hJR0gpOwo+PiArCWlmIChJU19FUlIocGRhdGEtPmdwaW9zLmVkcF9ia2x0X2N0cmwpKQo+ PiArCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgYmtsdCBjdHJsIGdwaW8gZnJvbSBEVFxuIik7Cj4+ ICsKPj4gK2V4aXQ6Cj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBz bjY1ZHNpODZfcGFyc2VfZHQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc242NWRzaTg2IAo+ PiAqcGRhdGEpCj4+ICt7Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9k ZTsKPj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVuZF9ub2RlOwo+PiArCWludCByZXQgPSAwOwo+ PiArCj4+ICsJZW5kX25vZGUgPSBvZl9ncmFwaF9nZXRfZW5kcG9pbnRfYnlfcmVncyhucCwgMCwg MCk7Cj4+ICsJaWYgKCFlbmRfbm9kZSkgewo+PiArCQlwcl9lcnIoInJlbW90ZSBlbmRwb2ludCBu b3QgZm91bmRcbiIpOwo+PiArCQlyZXR1cm4gLUVOT0RFVjsKPj4gKwl9Cj4+ICsKPj4gKwlwZGF0 YS0+aG9zdF9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlbmRfbm9kZSk7 Cj4+ICsJb2Zfbm9kZV9wdXQoZW5kX25vZGUpOwo+PiArCWlmICghcGRhdGEtPmhvc3Rfbm9kZSkg ewo+PiArCQlwcl9lcnIoInJlbW90ZSBub2RlIG5vdCBmb3VuZFxuIik7Cj4+ICsJCXJldHVybiAt RU5PREVWOwo+PiArCX0KPj4gKwlvZl9ub2RlX3B1dChwZGF0YS0+aG9zdF9ub2RlKTsKPj4gKwo+ PiArCXJldCA9IHNuNjVkc2k4Nl9wYXJzZV9ncGlvcyhucCwgcGRhdGEpOwo+PiArCj4+ICsJcGRh dGEtPmlzX3BsdWdnYWJsZSA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgInNuLGlzLXBsdWdn YWJsZSIpOwo+PiArCXByX2RlYnVnKCJpc19wbHVnZ2FibGUgPSAlZFxuIiwgcGRhdGEtPmlzX3Bs dWdnYWJsZSk7Cj4+ICsJaWYgKCFwZGF0YS0+aXNfcGx1Z2dhYmxlKSB7Cj4+ICsJCUlOSVRfTElT VF9IRUFEKCZwZGF0YS0+bW9kZV9saXN0KTsKPj4gKwkJc242NWRzaTg2X3BhcnNlX2R0X21vZGVz KG5wLAo+PiArCQkJJnBkYXRhLT5tb2RlX2xpc3QsICZwZGF0YS0+bnVtX29mX21vZGVzKTsKPj4g Kwl9Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHNuNjVk c2k4Nl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAo+PiArCSBjb25zdCBzdHJ1Y3Qg aTJjX2RldmljZV9pZCAqaWQpCj4+ICt7Cj4+ICsJc3RydWN0IHNuNjVkc2k4NiAqcGRhdGE7Cj4+ ICsJaW50IHJldCA9IDA7Cj4+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsICpuOwo+ PiArCj4+ICsJaWYgKCFjbGllbnQgfHwgIWNsaWVudC0+ZGV2Lm9mX25vZGUpIHsKPj4gKwkJcHJf ZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiAr Cj4+ICsJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19G VU5DX0kyQykpIHsKPj4gKwkJcHJfZXJyKCJkZXZpY2UgZG9lc24ndCBzdXBwb3J0IEkyQ1xuIik7 Cj4+ICsJCXJldHVybiAtRU5PREVWOwo+PiArCX0KPj4gKwo+PiArCXBkYXRhID0gZGV2bV9remFs bG9jKCZjbGllbnQtPmRldiwKPj4gKwkJc2l6ZW9mKHN0cnVjdCBzbjY1ZHNpODYpLCBHRlBfS0VS TkVMKTsKPj4gKwlpZiAoIXBkYXRhKQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCXBk YXRhLT5wb3dlcl9vbiA9IGZhbHNlOwo+PiArCXBkYXRhLT5pc19wbHVnZ2FibGUgPSBmYWxzZTsK Pj4gKwlwZGF0YS0+Y29ubmVjdG9yX3N0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVj dGVkOwo+PiArCXBkYXRhLT5kZXYgPSAmY2xpZW50LT5kZXY7Cj4+ICsJcGRhdGEtPmkyY19jbGll bnQgPSBjbGllbnQ7Cj4+ICsJcHJfZGVidWcoIkkyQyBhZGRyZXNzIGlzICV4XG4iLCBjbGllbnQt PmFkZHIpOwo+PiArCj4+ICsJcmV0ID0gc242NWRzaTg2X3BhcnNlX2R0KCZjbGllbnQtPmRldiwg cGRhdGEpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgZGV2 aWNlIHRyZWVcbiIpOwo+PiArCQlnb3RvIGVycl9kdF9wYXJzZTsKPj4gKwl9Cj4+ICsKPj4gKwlz bjY1ZHNpODZfZ3Bpb19jb25maWd1cmUocGRhdGEsIHRydWUpOwo+PiArCj4+ICsJcmV0ID0gc242 NWRzaTg2X2luaXRfcmVndWxhdG9ycyhwZGF0YSk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlwcl9l cnIoImZhaWxlZCB0byBlbmFibGUgcmVndWxhdG9yc1xuIik7Cj4+ICsJCWdvdG8gZXJyX2dwaW9f Y29uZmlnOwo+PiArCX0KPj4gKwo+PiArCXJldCA9IHNuNjVkc2k4Nl9yZWFkX2RldmljZV9yZXYo cGRhdGEpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVhZCBjaGlw IHJldlxuIik7Cj4+ICsJCWdvdG8gZXJyX2dwaW9fY29uZmlnOwo+PiArCX0gZWxzZSB7Cj4+ICsJ CXByX2RlYnVnKCJicmlkZ2UgY2hpcCBlbmFibGVkIHN1Y2Nlc3NmdWxseVxuIik7Cj4+ICsJCXBk YXRhLT5wb3dlcl9vbiA9IHRydWU7Cj4+ICsJfQo+PiArCj4+ICsJcGRhdGEtPmlycSA9IGdwaW9k X3RvX2lycShwZGF0YS0+Z3Bpb3MuaXJxX2dwaW8pOwo+PiArCXJldCA9IHJlcXVlc3RfdGhyZWFk ZWRfaXJxKHBkYXRhLT5pcnEsIE5VTEwsCj4+ICsJCQlzbjY1ZHNpODZfaXJxX3RocmVhZF9oYW5k bGVyLAo+PiArCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX09ORVNIT1QsCj4+ICsJCQki c242NWRzaTg2IiwgcGRhdGEpOwo+PiArCj4+ICsJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwg cGRhdGEpOwo+PiArCWRldl9zZXRfZHJ2ZGF0YSgmY2xpZW50LT5kZXYsIHBkYXRhKTsKPj4gKwo+ PiArCXBkYXRhLT5icmlkZ2UuZnVuY3MgPSAmc242NWRzaTg2X2JyaWRnZV9mdW5jczsKPj4gKwlw ZGF0YS0+YnJpZGdlLm9mX25vZGUgPSBjbGllbnQtPmRldi5vZl9ub2RlOwo+PiArCj4+ICsJZHJt X2JyaWRnZV9hZGQoJnBkYXRhLT5icmlkZ2UpOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gKwo+ PiArZXJyX2dwaW9fY29uZmlnOgo+PiArCXNuNjVkc2k4Nl9ncGlvX2NvbmZpZ3VyZShwZGF0YSwg ZmFsc2UpOwo+PiArZXJyX2R0X3BhcnNlOgo+PiArCWlmICghcGRhdGEtPmlzX3BsdWdnYWJsZSkg ewo+PiArCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9kZSwgbiwgJnBkYXRhLT5tb2RlX2xp c3QsIGhlYWQpIHsKPj4gKwkJCWxpc3RfZGVsKCZtb2RlLT5oZWFkKTsKPj4gKwkJCWtmcmVlKG1v ZGUpOwo+PiArCQl9Cj4+ICsJCXBkYXRhLT5udW1fb2ZfbW9kZXMgPSAwOwo+PiArCX0KPj4gKwlk ZXZtX2tmcmVlKCZjbGllbnQtPmRldiwgcGRhdGEpOwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBpbnQgc242NWRzaTg2X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xp ZW50KQo+PiArewo+PiArCWludCByZXQgPSAtRUlOVkFMOwo+PiArCXN0cnVjdCBzbjY1ZHNpODYg KnBkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Cj4+ICsJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUsICpuOwo+PiArCj4+ICsJaWYgKCFwZGF0YSkKPj4gKwkJZ290byBlbmQ7 Cj4+ICsKPj4gKwltaXBpX2RzaV9kZXRhY2gocGRhdGEtPmRzaSk7Cj4+ICsJbWlwaV9kc2lfZGV2 aWNlX3VucmVnaXN0ZXIocGRhdGEtPmRzaSk7Cj4+ICsKPj4gKwlkcm1fYnJpZGdlX3JlbW92ZSgm cGRhdGEtPmJyaWRnZSk7Cj4+ICsKPj4gKwlkaXNhYmxlX2lycShwZGF0YS0+aXJxKTsKPj4gKwlm cmVlX2lycShwZGF0YS0+aXJxLCBwZGF0YSk7Cj4+ICsKPj4gKwlzbjY1ZHNpODZfZ3Bpb19jb25m aWd1cmUocGRhdGEsIGZhbHNlKTsKPj4gKwo+PiArCWlmICghcGRhdGEtPmlzX3BsdWdnYWJsZSkg ewo+PiArCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9kZSwgbiwgJnBkYXRhLT5tb2RlX2xp c3QsIGhlYWQpIHsKPj4gKwkJCWxpc3RfZGVsKCZtb2RlLT5oZWFkKTsKPj4gKwkJCWtmcmVlKG1v ZGUpOwo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJZGV2bV9rZnJlZSgmY2xpZW50LT5kZXYsIHBk YXRhKTsKPj4gKwo+PiArZW5kOgo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzbjY1ZHNpODZfaWRbXSA9IHsKPj4gKwl7ICJ0aSxzbjY1 ZHNpODYiLCAwfSwKPj4gKwl7fQo+PiArfTsKPj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBz bjY1ZHNpODZfaWQpOwo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBz bjY1ZHNpODZfbWF0Y2hfdGFibGVbXSA9IHsKPj4gKwl7LmNvbXBhdGlibGUgPSAidGksc242NWRz aTg2In0sCj4+ICsJe30KPj4gK307Cj4+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzbjY1ZHNp ODZfbWF0Y2hfdGFibGUpOwo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc242NWRz aTg2X2RyaXZlciA9IHsKPj4gKwkuZHJpdmVyID0gewo+PiArCQkubmFtZSA9ICJzbjY1ZHNpODYi LAo+PiArCQkub3duZXIgPSBUSElTX01PRFVMRSwKPj4gKwkJLm9mX21hdGNoX3RhYmxlID0gc242 NWRzaTg2X21hdGNoX3RhYmxlLAo+PiArCX0sCj4+ICsJLnByb2JlID0gc242NWRzaTg2X3Byb2Jl LAo+PiArCS5yZW1vdmUgPSBzbjY1ZHNpODZfcmVtb3ZlLAo+PiArCS5pZF90YWJsZSA9IHNuNjVk c2k4Nl9pZCwKPj4gK307Cj4+ICsKPj4gK21vZHVsZV9pMmNfZHJpdmVyKHNuNjVkc2k4Nl9kcml2 ZXIpOwo+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJTTjY1RFNJODYgRFNJIHRvIGVEUCBicmlkZ2Ug ZHJpdmVyIik7Cj4+IC0tCj4+IFRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBp cyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgCj4+IEZvcnVtLAo+PiBhIExpbnV4IEZvdW5k YXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0Cj4+IApfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0Bs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9mcmVlZHJlbm8K