From mboxrd@z Thu Jan 1 00:00:00 1970 From: spanda-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org Subject: Re: [PATCH v5 1/4] drm/bridge: add support for sn65dsi86 bridge driver Date: Tue, 15 May 2018 11:20:07 +0530 Message-ID: <639106a4c3ab62b86613f79addef0933@codeaurora.org> References: <1525235522-8954-1-git-send-email-spanda@codeaurora.org> <1525235522-8954-2-git-send-email-spanda@codeaurora.org> <20180502190316.GR73214@art_vandelay> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180502190316.GR73214@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 T24gMjAxOC0wNS0wMyAwMDozMywgU2VhbiBQYXVsIHdyb3RlOgo+IE9uIFdlZCwgTWF5IDAyLCAy MDE4IGF0IDEwOjAxOjU5QU0gKzA1MzAsIFNhbmRlZXAgUGFuZGEgd3JvdGU6Cj4+IEFkZCBzdXBw b3J0IGZvciBUSSdzIHNuNjVkc2k4NiBkc2kyZWRwIGJyaWRnZSBjaGlwLgo+PiBUaGUgY2hpcCBj b252ZXJ0cyBEU0kgdHJhbnNtaXR0ZWQgc2lnbmFsIHRvIGVEUCBzaWduYWwsCj4+IHdoaWNoIGlz IGZlZCB0byB0aGUgY29ubmVjdGVkIGVEUCBwYW5lbC4KPj4gCj4+IFRoaXMgY2hpcCBjYW4gYmUg Y29udHJvbGxlZCB2aWEgZWl0aGVyIGkyYyBpbnRlcmZhY2Ugb3IKPj4gZHNpIGludGVyZmFjZS4g Q3VycmVudGx5IGluIGRyaXZlciBhbGwgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzCj4+IGFyZSBiZWlu ZyBhY2Nlc3NlZCB0aHJvdWdoIGkyYyBpbnRlcmZhY2Ugb25seS4KPj4gQWxzbyBhcyBvZiBub3cg SFBEIHN1cHBvcnQgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIGJyaWRnZQo+PiBjaGlwIGRyaXZlci4K Pj4gCj4+IENoYW5nZXMgaW4gdjE6Cj4+ICAtIFNwbGl0IHRoZSBkdC1iaW5kaW5ncyBhbmQgdGhl IGRyaXZlciBzdXBwb3J0IGludG8gc2VwYXJhdGUgcGF0Y2hlcwo+PiAgICAoQW5kcnplaiBIYWpk YSkuCj4+ICAtIFVzZSBvZiBncGlvZCBBUElzIHRvIHBhcnNlIGFuZCBjb25maWd1cmUgZ3Bpb3Mg aW5zdGVhZCBvZiBvYnNvbGV0ZSAKPj4gb25lcwo+PiAgICAoQW5kcnplaiBIYWpkYSkuCj4+ICAt IFVzZSBtYWNyb3MgdG8gZGVmaW5lIHRoZSByZWdpc3RlciBvZmZzZXRzIChBbmRyemVqIEhhamRh KS4KPj4gCj4+IENoYW5nZXMgaW4gdjI6Cj4+ICAtIFNlcGFyYXRlIG91dCBlZHAgcGFuZWwgc3Bl Y2lmaWMgSFcgcmVzb3VyY2UgaGFuZGxpbmcgZnJvbSBicmlkZ2UKPj4gICAgZHJpdmVyIGFuZCBj cmVhdGUgYSBzZXBhcmF0ZSBlZHAgcGFuZWwgZHJpdmVycyB0byBoYW5kbGUgcGFuZWwKPj4gICAg c3BlY2lmaWMgbW9kZSBpbmZvcm1hdGlvbiBhbmQgSFcgcmVzb3VyY2VzIChTZWFuIFBhdWwpLgo+ PiAgLSBSZXBsYWNlIHByXyogQVBJcyB0byBEUk1fKiBBUElzIHRvIGxvZyBlcnJvciBvciBkZWJ1 ZyBpbmZvcm1hdGlvbgo+PiAgICAoU2VhbiBQYXVsKS4KPj4gIC0gUmVtb3ZlIHNvbWUgb2YgdGhl IHVubmVjZXNzYXJ5IHN0cnVjdHVyZS92YXJpYWJsZSBmcm9tIGRyaXZlciAoU2Vhbgo+PiAgICBQ YXVsKS4KPj4gIC0gUmVuYW1lIHRoZSBmdW5jdGlvbiBhbmQgc3RydWN0dXJlIHByZWZpeCAic242 NWRzaTg2IiB0byAKPj4gInRpX3NuX2JyaWRnZSIKPj4gICAgKFNlYW4gUGF1bCAvIFJvYiBIZXJy aW5nKS4KPj4gIC0gUmVtb3ZlIG1vc3Qgb2YgdGhlIGhhcmQtY29kaW5nIGFuZCBtb2RpZmllZCB0 aGUgYnJpZGdlIGluaXQgCj4+IHNlcXVlbmNlCj4+ICAgIGJhc2VkIG9uIGN1cnJlbnQgbW9kZSAo U2VhbiBQYXVsKS4KPj4gIC0gUmVtb3ZlIHRoZSBleGlzdGluZyBmdW5jdGlvbiB0byByZXRyaWV2 ZSB0aGUgRURJRCBkYXRhIGFuZAo+PiAgICBpbXBsZW1lbnRlZCB0aGlzIGFzIGFuIGkyY19hZGFw dGVyIGFuZCB1c2UgZHJtX2dldF9lZGlkKCkgKFNlYW4gCj4+IFBhdWwpLgo+PiAgLSBSZW1vdmUg dGhlIGR1bW15IGlycSBoYW5kbGVyIGltcGxlbWVudGF0aW9uLCB3aWxsIGFkZCBiYWNrIHRoZQo+ PiAgICBwcm9wZXIgaXJxIGhhbmRsaW5nIGxhdGVyIChTZWFuIFBhdWwpLgo+PiAgLSBDYXB0dXJl IHRoZSByZXF1aXJlZCBlbmFibGUgZ3Bpb3MgaW4gYSBzaW5nbGUgYXJyYXkgYmFzZWQgb24gZHQg Cj4+IGVudHJ5Cj4+ICAgIGluc3RlYWQgb2YgaGF2aW5nIGluZGl2aWR1YWwgZGVzY3JpcHRvciBm b3IgZWFjaCBncGlvIChTZWFuIFBhdWwpLgo+PiAKPj4gQ2hhbmdlcyBpbiB2MzoKPj4gIC0gUmVt b3ZlIHVzYWdlIG9mIGlycV9ncGlvIGFuZCByZXBsYWNlIGl0IGFzICJpbnRlcnJ1cHRzIiBwcm9w ZXJ0eSAKPj4gKFJvYgo+PiAgICBIZXJyaW5nKS4KPj4gIC0gUmVtb3ZlIHRoZSB1bm5lY2Vzc2Fy eSBoZWFkZXIgZmlsZSBpbmNsdXNpb25zIChTZWFuIFBhdWwpLgo+PiAgLSBSZWFycmFuZ2UgdGhl IGhlYWRlciBmaWxlcyBpbiBhbHBoYWJldGljYWwgb3JkZXIgKFNlYW4gUGF1bCkuCj4+ICAtIFVz ZSByZWdtYXAgaW50ZXJmYWNlIHRvIHBlcmZvcm0gaTJjIHRyYW5zYWN0aW9ucy4KPj4gIC0gVXBk YXRlIENvcHlyaWdodC9MaWNlbnNlIGZpZWxkIGFuZCBhZGRyZXNzIG90aGVyIHJldmlldyBjb21t ZW50cwo+PiAgICAoSm9yZGFuIENyb3VzZSkuCj4+IAo+PiBDaGFuZ2VzIGluIHY0Ogo+PiAgLSBV cGRhdGUgTGljZW5zZS9Db3B5cmlnaHQgKFNlYW4gUGF1bCkuCj4+ICAtIEFkZCBLY29uZmlnIGFu ZCBNYWtlZmlsZSBjaGFuZ2VzIChTZWFuIFBhdWwpLgo+PiAgLSBEcm9wIGkyYyBncGlvIGhhbmRs aW5nIGZyb20gdGhpcyBicmlkZ2UgZHJpdmVyLCBzaW5jZSBpMmMgc2RhL3NjbCAKPj4gZ3Bpb3MK Pj4gICAgd2lsbCBiZSBoYW5kbGVkIGJ5IGkyYyBtYXN0ZXIuCj4+ICAtIFJlbW92ZSB1bm5lY2Vz c2FyeSBnb3RvIHN0YXRlbWVudHMgKFNlYW4gUGF1bCkuCj4+ICAtIEFkZCBtdXRleCBsb2NrIHRv IHBvd2VyX2N0cmwgQVBJIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyAoU2Vhbgo+PiAgICBQYXVs KS4KPj4gIC0gQWRkIHN1cHBvcnQgdG8gcGFyc2UgcmVmZXJlbmNlIGNsayBmcmVxdWVuY3kgZnJv bSBkdChvcHRpb25hbCkuCj4+ICAtIFVwZGF0ZSB0aGUgYnJpZGdlIGNoaXAgZW5hYmxlL2Rpc2Fi bGUgc2VxdWVuY2UuCj4gCj4gSXQgc2VlbXMgbGlrZSB5b3UgYWxzbyBhZGRlZCAyIG5ldyBzdXBw bHkgbmFtZXMsIGFzIHdlbGwgYXMgcmVtb3ZlIHRoZQo+IGNvbmZpZ3VyYWJsZSBncGlvcz8KPiAK Pj4gCj4+IENoYW5nZXMgaW4gdjU6Cj4+ICAtIEZpeGVkIEtidWlsZCB0ZXN0IHNlcnZpY2UgcmVw b3J0ZWQgd2FybmluZ3MuCj4+IAo+PiBTaWduZWQtb2ZmLWJ5OiBTYW5kZWVwIFBhbmRhIDxzcGFu ZGFAY29kZWF1cm9yYS5vcmc+Cj4+IC0tLQo+PiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29u ZmlnICAgICAgICB8ICAgOSArCj4+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlICAg ICAgIHwgICAxICsKPj4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMgfCA3 MjUgCj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gIDMgZmlsZXMgY2hh bmdlZCwgNzM1IGluc2VydGlvbnMoKykKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jCj4+IAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9LY29uZmlnIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZp Zwo+PiBpbmRleCAzYjk5ZDVhLi44MTUzMTUwIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmln Cj4+IEBAIC0xMDgsNiArMTA4LDE1IEBAIGNvbmZpZyBEUk1fVElfVEZQNDEwCj4+ICAJLS0taGVs cC0tLQo+PiAgCSAgVGV4YXMgSW5zdHJ1bWVudHMgVEZQNDEwIERWSS9IRE1JIFRyYW5zbWl0dGVy IGRyaXZlcgo+PiAKPj4gK2NvbmZpZyBEUk1fVElfU042NURTSTg2Cj4+ICsJdHJpc3RhdGUgIlRJ IFNONjVEU0k4NiBEU0kgdG8gZURQIGJyaWRnZSIKPj4gKwlkZXBlbmRzIG9uIE9GCj4+ICsJc2Vs ZWN0IERSTV9LTVNfSEVMUEVSCj4+ICsJc2VsZWN0IFJFR01BUF9JMkMKPj4gKwlzZWxlY3QgRFJN X1BBTkVMCj4+ICsJLS0taGVscC0tLQo+PiArCSAgVGV4YXMgSW5zdHJ1bWVudHMgU042NURTSTg2 IERTSSB0byBlRFAgQnJpZGdlIGRyaXZlcgo+PiArCj4+ICBzb3VyY2UgImRyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvYW5hbG9naXgvS2NvbmZpZyIKPj4gCj4+ICBzb3VyY2UgImRyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvYWR2NzUxMS9LY29uZmlnIgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9NYWtlZmlsZSAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCj4+ IGluZGV4IDM3M2ViMjguLjM3MTFiZTggMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvTWFrZWZpbGUKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQo+ PiBAQCAtMTIsNCArMTIsNSBAQCBvYmotJChDT05GSUdfRFJNX1RPU0hJQkFfVEMzNTg3NjcpICs9 IHRjMzU4NzY3Lm8KPj4gIG9iai0kKENPTkZJR19EUk1fQU5BTE9HSVhfRFApICs9IGFuYWxvZ2l4 Lwo+PiAgb2JqLSQoQ09ORklHX0RSTV9JMkNfQURWNzUxMSkgKz0gYWR2NzUxMS8KPj4gIG9iai0k KENPTkZJR19EUk1fVElfVEZQNDEwKSArPSB0aS10ZnA0MTAubwo+PiArb2JqLSQoQ09ORklHX0RS TV9USV9TTjY1RFNJODYpICs9IHRpLXNuNjVkc2k4Ni5vCj4+ICBvYmoteSArPSBzeW5vcHN5cy8K Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMgCj4+ IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYwo+PiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi4wMTljN2NkCj4+IC0tLSAvZGV2L251bGwKPj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYwo+PiBAQCAtMCwwICsxLDcy NSBAQAo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPj4gKy8qCj4+ICsg KiBDb3B5cmlnaHQgKGMpIDIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+PiArI2luY2x1 ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVy Lmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+PiArI2luY2x1ZGUgPGRy bS9kcm1fbWlwaV9kc2kuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+Cj4+ICsjaW5j bHVkZSA8bGludXgvZ3Bpby5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+PiArI2luY2x1 ZGUgPGxpbnV4L29mX2dwaW8uaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9j b25zdW1lci5oPgo+PiArCj4+ICsjZGVmaW5lIFNOX0JSSURHRV9SRVZJU0lPTl9JRCAweDIKPj4g Kwo+PiArLyogTGluayBUcmFpbmluZyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KPj4gKyNkZWZpbmUg U05fREVWSUNFX1JFVl9SRUcJCQkweDA4Cj4+ICsjZGVmaW5lIFNOX0hQRF9ESVNBQkxFX1JFRwkJ CTB4NUMKPj4gKyNkZWZpbmUgU05fUkVGQ0xLX0ZSRVFfUkVHCQkJMHgwQQo+PiArI2RlZmluZSBT Tl9EU0lfTEFORVNfUkVHCQkJMHgxMAo+PiArI2RlZmluZSBTTl9EU0lBX0NMS19GUkVRX1JFRwkJ CTB4MTIKPj4gKyNkZWZpbmUgU05fRU5IX0ZSQU1FX1JFRwkJCTB4NUEKPj4gKyNkZWZpbmUgU05f U1NDX0NPTkZJR19SRUcJCQkweDkzCj4+ICsjZGVmaW5lIFNOX0RBVEFSQVRFX0NPTkZJR19SRUcJ CQkweDk0Cj4+ICsjZGVmaW5lIFNOX1BMTF9FTkFCTEVfUkVHCQkJMHgwRAo+PiArI2RlZmluZSBT Tl9TQ1JBTUJMRV9DT05GSUdfUkVHCQkJMHg5NQo+PiArI2RlZmluZSBTTl9BVVhfV0RBVEEwX1JF RwkJCTB4NjQKPj4gKyNkZWZpbmUgU05fQVVYX0FERFJfMTlfMTZfUkVHCQkJMHg3NAo+PiArI2Rl ZmluZSBTTl9BVVhfQUREUl8xNV84X1JFRwkJCTB4NzUKPj4gKyNkZWZpbmUgU05fQVVYX0FERFJf N18wX1JFRwkJCTB4NzYKPj4gKyNkZWZpbmUgU05fQVVYX0xFTkdUSF9SRUcJCQkweDc3Cj4+ICsj ZGVmaW5lIFNOX0FVWF9DTURfUkVHCQkJCTB4NzgKPj4gKyNkZWZpbmUgU05fTUxfVFhfTU9ERV9S RUcJCQkweDk2Cj4+ICsvKiB2aWRlbyBjb25maWcgc3BlY2lmaWMgcmVnaXN0ZXJzICovCj4+ICsj ZGVmaW5lIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfTE9XX1JFRwkweDIwCj4+ICsjZGVmaW5l IFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfSElHSF9SRUcJMHgyMQo+PiArI2RlZmluZSBTTl9D SEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcJMHgyNAo+PiArI2RlZmluZSBTTl9DSEFf VkVSVElDQUxfRElTUExBWV9TSVpFX0hJR0hfUkVHCTB4MjUKPj4gKyNkZWZpbmUgU05fQ0hBX0hT WU5DX1BVTFNFX1dJRFRIX0xPV19SRUcJMHgyQwo+PiArI2RlZmluZSBTTl9DSEFfSFNZTkNfUFVM U0VfV0lEVEhfSElHSF9SRUcJMHgyRAo+PiArI2RlZmluZSBTTl9DSEFfVlNZTkNfUFVMU0VfV0lE VEhfTE9XX1JFRwkweDMwCj4+ICsjZGVmaW5lIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9ISUdI X1JFRwkweDMxCj4+ICsjZGVmaW5lIFNOX0NIQV9IT1JJWk9OVEFMX0JBQ0tfUE9SQ0hfUkVHCTB4 MzQKPj4gKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0JBQ0tfUE9SQ0hfUkVHCQkweDM2Cj4+ICsj ZGVmaW5lIFNOX0NIQV9IT1JJWk9OVEFMX0ZST05UX1BPUkNIX1JFRwkweDM4Cj4+ICsjZGVmaW5l IFNOX0NIQV9WRVJUSUNBTF9GUk9OVF9QT1JDSF9SRUcJCTB4M0EKPj4gKyNkZWZpbmUgU05fREFU QV9GT1JNQVRfUkVHCQkJMHg1Qgo+PiArCj4+ICsjZGVmaW5lIE1JTl9EU0lfQ0xLX0ZSRVFfTUha CTQwCj4+ICsjZGVmaW5lIFNOX0RFRkFVTFRfUkVGX0NMS19LSFoJMTkyMDAKPj4gKwo+PiArLyog ZnVkZ2UgZmFjdG9yIHJlcXVpcmVkIHRvIGFjY291bnQgZm9yIDhiLzEwYiBlbmNvZGluZyAqLwo+ PiArI2RlZmluZSBEUF9DTEtfRlVER0VfTlVNCTEwCj4+ICsjZGVmaW5lIERQX0NMS19GVURHRV9E RU4JOAo+PiArCj4+ICsjZGVmaW5lIERQUExMX0NMS19TUkNfUkVGQ0xLCTAKPj4gKyNkZWZpbmUg RFBQTExfQ0xLX1NSQ19EU0lDTEsJMQo+PiArCj4+ICsjZGVmaW5lIFNOX0RTSUFfUkVGQ0xLX09G RlNFVAkxCj4+ICsjZGVmaW5lIFNOX0RTSUFfTEFORV9PRkZTRVQJMwo+PiArI2RlZmluZSBTTl9E UF9MQU5FX09GRlNFVAk0Cj4+ICsjZGVmaW5lIFNOX0RQX0RBVEFfUkFURV9PRkZTRVQJNQo+PiAr I2RlZmluZSBTTl9USU1JTkdfSElHSF9PRkZTRVQJOAo+PiArCj4+ICsjZGVmaW5lIFNOX0VOQUJM RV9WSURfU1RSRUFNX0JJVAlCSVQoMykKPj4gKyNkZWZpbmUgU05fRFNJQV9OVU1fTEFORVNfQklU UwkJKEJJVCg0KSB8IEJJVCgzKSkKPj4gKyNkZWZpbmUgU05fRFBfTlVNX0xBTkVTX0JJVFMJCShC SVQoNSkgfCBCSVQoNCkpCj4+ICsjZGVmaW5lIFNOX0RQX0RBVEFfUkFURV9CSVRTCQkoQklUKDcp IHwgQklUKDYpIHwgQklUKDUpKQo+PiArI2RlZmluZSBTTl9IUERfRElTQUJMRV9CSVQJCUJJVCgw KQo+PiArCj4+ICtzdHJ1Y3QgdGlfc25fYnJpZGdlIHsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7 Cj4+ICsJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwo+PiArCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRn ZTsKPj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uZWN0b3I7Cj4+ICsJc3RydWN0IGRldmlj ZV9ub2RlICpob3N0X25vZGU7Cj4+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOwo+PiAr CXVuc2lnbmVkIGludCByZWZjbGtfa2h6Owo+PiArCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOwo+ PiArCXN0cnVjdCBncGlvX2Rlc2MgKmVuYWJsZV9ncGlvOwo+PiArCXVuc2lnbmVkIGludCBudW1f c3VwcGxpZXM7Cj4+ICsJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgKnN1cHBsaWVzOwo+PiAr CXN0cnVjdCBpMmNfYWRhcHRlciAqZGRjOwo+PiArCXVuc2lnbmVkIGludCBudW1fbW9kZXM7Cj4g Cj4gWW91IG9ubHkgdXNlIHRoaXMgaW4gb25lIGZ1bmN0aW9uLCBpdCBzaG91bGQgYmUgYSBsb2Nh bC4KPiAKUmVtb3ZlZC4KPj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBjdXJyX21vZGU7Cj4+ ICsJc3RydWN0IG11dGV4IGxvY2s7Cj4+ICsJdW5zaWduZWQgaW50IGN0cmxfcmVmX2NvdW50Owo+ PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2UgdGlfc25fYnJp ZGdlX3ZvbGF0aWxlX3Jhbmdlc1tdID0gewo+PiArCXsgLnJhbmdlX21pbiA9IDAsIC5yYW5nZV9t YXggPSAweGZmIH0sCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9h Y2Nlc3NfdGFibGUgdGlfc25fYnJpZGdlX3ZvbGF0aWxlX3RhYmxlID0gCj4+IHsKPj4gKwkueWVz X3JhbmdlcyA9IHRpX3NuX2JyaWRnZV92b2xhdGlsZV9yYW5nZXMsCj4+ICsJLm5feWVzX3Jhbmdl cyA9IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX3ZvbGF0aWxlX3JhbmdlcyksCj4+ICt9Owo+PiAr Cj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgdGlfc25fYnJpZGdlX3JlZ21h cF9jb25maWcgPSB7Cj4+ICsJLnJlZ19iaXRzID0gOCwKPj4gKwkudmFsX2JpdHMgPSA4LAo+PiAr CS52b2xhdGlsZV90YWJsZSA9ICZ0aV9zbl9icmlkZ2Vfdm9sYXRpbGVfdGFibGUsCj4+ICsJLmNh Y2hlX3R5cGUgPSBSRUdDQUNIRV9OT05FLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGludCB0aV9z bl9icmlkZ2VfcG93ZXJfY3RybChzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSwgYm9vbCAKPj4g ZW5hYmxlKQo+PiArewo+PiArCWludCByZXQgPSAwOwo+PiArCj4+ICsJbXV0ZXhfbG9jaygmcGRh dGEtPmxvY2spOwo+PiArCWlmIChlbmFibGUpCj4+ICsJCXBkYXRhLT5jdHJsX3JlZl9jb3VudCsr Owo+PiArCWVsc2UKPj4gKwkJcGRhdGEtPmN0cmxfcmVmX2NvdW50LS07Cj4gCj4gSSB0aGluayB5 b3Ugc2hvdWxkIHVzZSBhIGtyZWYgaW5zdGVhZCBvZiByb2xsaW5nIHlvdXIgb3duIHJlZl9jb3Vu dC4gCj4gWW91IGNhbgo+IGhhbmRsZSByZWxlYXNlIGJ5IGNhbGxpbmcga3JlZl9wdXRfbXV0ZXgo KSwgd2hpY2ggd2lsbCBoYW5kbGUgdGhlIAo+IHJlZmVyZW5jZSBhbmQKPiB0aGUgbG9jay4gT24g dGhlIGFjcXVpcmUgc2lkZSwgeW91IGNhbiB1c2Uga3JlZl9nZXRfdW5sZXNzX3plcm8gd2hpY2gg Cj4gd2lsbCBiZQo+IGZhc3QgaWYgdGhlIHJlZmVyZW5jZSBpcyBhbHJlYWR5IGFjdGl2ZS4KPiAK QXMgcGVyIGNvbW1lbnQgZnJvbSBTdGVwaGVuIEJveWQgdXNlZCBQTSBydW50aW1lIGluc3RlYWQg b2Ygb3VyIG93biAKcmVmX2NvdW50Lgo+PiArCj4+ICsJaWYgKGVuYWJsZSAmJiAocGRhdGEtPmN0 cmxfcmVmX2NvdW50ID09IDEpKSB7Cj4+ICsJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShw ZGF0YS0+bnVtX3N1cHBsaWVzLAo+PiArCQkJCQkJIHBkYXRhLT5zdXBwbGllcyk7Cj4+ICsJCWlm IChyZXQpIHsKPj4gKwkJCURSTV9FUlJPUigiYnJpZGdlIHJlZ3VsYXRvciBlbmFibGUgZmFpbGVk XG4iKTsKPiAKPiBwcmludCByZXQgb24gZmFpbHVyZQo+IApEb25lLgo+PiArCQkJZ290byBleGl0 Owo+PiArCQl9Cj4+ICsKPj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlKHBkYXRhLT5lbmFibGVfZ3Bpbywg MSk7Cj4+ICsJfSBlbHNlIGlmICghZW5hYmxlICYmICFwZGF0YS0+Y3RybF9yZWZfY291bnQpIHsK Pj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlKHBkYXRhLT5lbmFibGVfZ3BpbywgMCk7Cj4+ICsKPj4gKwkJ cmVndWxhdG9yX2J1bGtfZGlzYWJsZShwZGF0YS0+bnVtX3N1cHBsaWVzLCBwZGF0YS0+c3VwcGxp ZXMpOwo+PiArCX0gZWxzZSB7Cj4+ICsJCURSTV9ERUJVRygidGlfc25fYnJpZGdlIHBvd2VyIGN0 cmw6ICVkIHJlZmNvdW50OiAlZFxuIiwKPj4gKwkJCQkJCWVuYWJsZSwgcGRhdGEtPmN0cmxfcmVm X2NvdW50KTsKPiAKPiBObyBuZWVkIGZvciB0aGlzLgo+IApSZW1vdmVkLgo+PiArCX0KPj4gKwo+ PiArZXhpdDoKPj4gKwltdXRleF91bmxvY2soJnBkYXRhLT5sb2NrKTsKPj4gKwlyZXR1cm4gcmV0 Owo+PiArfQo+PiArCj4+ICsvKiBDb25uZWN0b3IgZnVuY3MgKi8KPj4gK3N0YXRpYyBzdHJ1Y3Qg dGlfc25fYnJpZGdlICoKPj4gK2Nvbm5lY3Rvcl90b190aV9zbl9icmlkZ2Uoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcikKPj4gK3sKPj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGNvbm5l Y3Rvciwgc3RydWN0IHRpX3NuX2JyaWRnZSwgY29ubmVjdG9yKTsKPj4gK30KPj4gKwo+PiArc3Rh dGljIGludCB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAKPj4gKmNvbm5lY3RvcikKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0 YSA9IGNvbm5lY3Rvcl90b190aV9zbl9icmlkZ2UoY29ubmVjdG9yKTsKPj4gKwlzdHJ1Y3QgZHJt X3BhbmVsICpwYW5lbCA9IHBkYXRhLT5wYW5lbDsKPj4gKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKPj4g Kwo+PiArCWlmIChwYW5lbCkgewo+PiArCQlEUk1fREVCVUcoImdldCBtb2RlIGZyb20gY29ubmVj dGVkIGRybV9wYW5lbFxuIik7Cj4+ICsJCXBkYXRhLT5udW1fbW9kZXMgPSBkcm1fcGFuZWxfZ2V0 X21vZGVzKHBhbmVsKTsKPj4gKwkJcmV0dXJuIHBkYXRhLT5udW1fbW9kZXM7Cj4+ICsJfQo+PiAr Cj4+ICsJLyogZ2V0IGZyb20gRURJRCAqLwo+IAo+IFRoaXMgY29tbWVudCBpc24ndCB1c2VmdWwu Cj4gClJlbW92ZWQuCj4+ICsJaWYgKCFwZGF0YS0+ZGRjKQo+PiArCQlyZXR1cm4gMDsKPj4gKwo+ PiArCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBkYXRhLCB0cnVlKTsKPj4gKwllZGlkID0gZHJt X2dldF9lZGlkKGNvbm5lY3RvciwgcGRhdGEtPmRkYyk7Cj4+ICsJdGlfc25fYnJpZGdlX3Bvd2Vy X2N0cmwocGRhdGEsIGZhbHNlKTsKPj4gKwlpZiAoIWVkaWQpCj4+ICsJCXJldHVybiAwOwo+PiAr Cj4+ICsJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3Rvciwg ZWRpZCk7Cj4+ICsJcGRhdGEtPm51bV9tb2RlcyA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0 b3IsIGVkaWQpOwo+PiArCWtmcmVlKGVkaWQpOwo+PiArCj4+ICsJcmV0dXJuIHBkYXRhLT5udW1f bW9kZXM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cwo+PiArdGlf c25fYnJpZGdlX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsCj4+ICsJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+PiArewo+ PiArCS8qIG1heGltdW0gc3VwcG9ydGVkIHJlc29sdXRpb24gaXMgNEsgYXQgNjAgZnBzICovCj4+ ICsJaWYgKG1vZGUtPmNsb2NrID4gNTk0MDAwKQo+PiArCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdI Owo+PiArCj4+ICsJcmV0dXJuIE1PREVfT0s7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgCj4+IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfaGVs cGVyX2Z1bmNzID0gewo+PiArCS5nZXRfbW9kZXMgPSB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2dl dF9tb2RlcywKPj4gKwkubW9kZV92YWxpZCA9IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfbW9kZV92 YWxpZCwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCj4+ ICt0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLCBib29sIAo+PiBmb3JjZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpw ZGF0YSA9IGNvbm5lY3Rvcl90b190aV9zbl9icmlkZ2UoY29ubmVjdG9yKTsKPj4gKwo+PiArCS8q Kgo+PiArCSAqIFRPRE86IEN1cnJlbnRseSBpZiBkcm1fcGFuZWwgaXMgcHJlc2VudCwgdGhlbiBh bHdheXMKPj4gKwkgKiByZXR1cm4gdGhlIHN0YXR1cyBhcyBjb25uZWN0ZWQuIE5lZWQgdG8gYWRk IHN1cHBvcnQgdG8gZGV0ZWN0Cj4+ICsJICogZGV2aWNlIHN0YXRlIGZvciBubyBwYW5lbChob3Qg cGx1Z2dhYmxlKSBzY2VuYXJpb3MuCj4+ICsJICovCj4+ICsJaWYgKHBkYXRhLT5wYW5lbCkKPj4g KwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwo+PiArCWVsc2UKPj4gKwkJcmV0 dXJuIGNvbm5lY3Rvcl9zdGF0dXNfdW5rbm93bjsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfZnVuY3Mg Cj4+ID0gewo+PiArCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVj dG9yX21vZGVzLAo+PiArCS5kZXRlY3QgPSB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2RldGVjdCwK Pj4gKwkuZGVzdHJveSA9IGRybV9jb25uZWN0b3JfY2xlYW51cCwKPj4gKwkucmVzZXQgPSBkcm1f YXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCj4+ICsJLmF0b21pY19kdXBsaWNhdGVfc3Rh dGUgPSAKPj4gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKPj4g KwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVz dHJveV9zdGF0ZSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgdGlfc25fYnJpZGdlICpi cmlkZ2VfdG9fdGlfc25fYnJpZGdlKHN0cnVjdCBkcm1fYnJpZGdlIAo+PiAqYnJpZGdlKQo+PiAr ewo+PiArCXJldHVybiBjb250YWluZXJfb2YoYnJpZGdlLCBzdHJ1Y3QgdGlfc25fYnJpZGdlLCBi cmlkZ2UpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9yZWFkX2Rldmlj ZV9yZXYoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4+ICt7Cj4+ICsJdW5zaWduZWQgaW50 IHJldiA9IDA7Cj4+ICsJaW50IHJldCA9IDA7Cj4+ICsKPj4gKwlyZXQgPSByZWdtYXBfcmVhZChw ZGF0YS0+cmVnbWFwLCBTTl9ERVZJQ0VfUkVWX1JFRywgJnJldik7Cj4+ICsJaWYgKHJldCkKPj4g KwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCWlmIChyZXYgIT0gU05fQlJJREdFX1JFVklTSU9OX0lE KSB7Cj4+ICsJCURSTV9FUlJPUigidGlfc25fYnJpZGdlIHJldmlzaW9uIGlkOiAweCV4IG1pc21h dGNoXG4iLCByZXYpOwo+PiArCQlyZXQgPSAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCXJldHVy biByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGlfc25fYnJp ZGdlX3N1cHBseV9uYW1lc1tdID0gewo+PiArCSJ2Y2NhIiwKPj4gKwkidmNjIiwKPj4gKwkidmNj aW8iLAo+PiArCSJ2cGxsIiwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdl X3BhcnNlX3JlZ3VsYXRvcnMoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4+ICt7Cj4+ICsJ dW5zaWduZWQgaW50IGk7Cj4+ICsKPj4gKwlwZGF0YS0+bnVtX3N1cHBsaWVzID0gQVJSQVlfU0la RSh0aV9zbl9icmlkZ2Vfc3VwcGx5X25hbWVzKTsKPj4gKwo+PiArCXBkYXRhLT5zdXBwbGllcyA9 IGRldm1fa2NhbGxvYyhwZGF0YS0+ZGV2LCBwZGF0YS0+bnVtX3N1cHBsaWVzLAo+PiArCQkJCSAg ICAgc2l6ZW9mKCpwZGF0YS0+c3VwcGxpZXMpLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIXBkYXRh LT5zdXBwbGllcykKPj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBp IDwgcGRhdGEtPm51bV9zdXBwbGllczsgaSsrKQo+PiArCQlwZGF0YS0+c3VwcGxpZXNbaV0uc3Vw cGx5ID0gdGlfc25fYnJpZGdlX3N1cHBseV9uYW1lc1tpXTsKPj4gKwo+PiArCXJldHVybiBkZXZt X3JlZ3VsYXRvcl9idWxrX2dldChwZGF0YS0+ZGV2LAo+PiArCQkJCXBkYXRhLT5udW1fc3VwcGxp ZXMsIHBkYXRhLT5zdXBwbGllcyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25fYnJp ZGdlX2F0dGFjaF9wYW5lbChzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKPj4gK3sKPj4gKwlz dHJ1Y3QgZGV2aWNlX25vZGUgKnBhbmVsX25vZGUsICpwb3J0LCAqZW5kcG9pbnQ7Cj4+ICsKPj4g KwlwZGF0YS0+cGFuZWwgPSBOVUxMOwo+PiArCXBvcnQgPSBvZl9ncmFwaF9nZXRfcG9ydF9ieV9p ZChwZGF0YS0+ZGV2LT5vZl9ub2RlLCAxKTsKPj4gKwlpZiAocG9ydCkgewo+IAo+IEZsaXAgdGhp cyB0byBhdm9pZCBpbmRlbnRpbmcgdGhlIHdob2xlIGZ1bmN0aW9uLiBpZToKPiAKPiBpZiAoIXBv cnQpCj4gICAgICAgICByZXR1cm4gMDsKPiAKRG9uZS4KPj4gKwkJZW5kcG9pbnQgPSBvZl9nZXRf Y2hpbGRfYnlfbmFtZShwb3J0LCAiZW5kcG9pbnQiKTsKPj4gKwkJb2Zfbm9kZV9wdXQocG9ydCk7 Cj4+ICsJCWlmICghZW5kcG9pbnQpIHsKPj4gKwkJCURSTV9FUlJPUigibm8gb3V0cHV0IGVuZHBv aW50IGZvdW5kXG4iKTsKPj4gKwkJCXJldHVybiAtRUlOVkFMOwo+PiArCQl9Cj4+ICsKPj4gKwkJ cGFuZWxfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZW5kcG9pbnQpOwo+ PiArCQlvZl9ub2RlX3B1dChlbmRwb2ludCk7Cj4+ICsJCWlmICghcGFuZWxfbm9kZSkgewo+PiAr CQkJRFJNX0VSUk9SKCJubyBvdXRwdXQgbm9kZSBmb3VuZFxuIik7Cj4+ICsJCQlyZXR1cm4gLUVJ TlZBTDsKPj4gKwkJfQo+PiArCj4+ICsJCXBkYXRhLT5wYW5lbCA9IG9mX2RybV9maW5kX3BhbmVs KHBhbmVsX25vZGUpOwo+PiArCQlvZl9ub2RlX3B1dChwYW5lbF9ub2RlKTsKPj4gKwkJaWYgKCFw ZGF0YS0+cGFuZWwpIHsKPj4gKwkJCURSTV9FUlJPUigibm8gcGFuZWwgbm9kZSBmb3VuZFxuIik7 Cj4+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwkJfQo+PiArCQlkcm1fcGFuZWxfYXR0YWNoKHBk YXRhLT5wYW5lbCwgJnBkYXRhLT5jb25uZWN0b3IpOwo+PiArCQlEUk1fREVCVUcoInBhbmVsIGF0 dGFjaGVkXG4iKTsKPiAKPiBUaGlzIGxvZyBzaG91bGQgYmUgRFJNX0RFQlVHX0tNUyBhbmQgeW91 IHNob3VsZCBiZSBtb3JlIGRlc2NyaXB0aXZlIGluIAo+IHlvdXIKPiBtZXNzYWdlIChpZTogIkF0 dGFjaGVkIHNuNjVkc2k4NiBwYW5lbCIpLgo+IApVcGRhdGVkIHRoZSBkZWJ1ZyBsb2cuCj4+ICsJ fQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25fYnJp ZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+PiArewo+PiArCXN0cnVjdCBt aXBpX2RzaV9ob3N0ICpob3N0Owo+PiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaTsKPj4g KwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJp ZGdlKTsKPj4gKwlpbnQgcmV0Owo+PiArCWNvbnN0IHN0cnVjdCBtaXBpX2RzaV9kZXZpY2VfaW5m byBpbmZvID0geyAudHlwZSA9ICJ0aV9zbl9icmlkZ2UiLAo+PiArCQkJCQkJICAgLmNoYW5uZWwg PSAwLAo+PiArCQkJCQkJICAgLm5vZGUgPSBOVUxMLAo+PiArCQkJCQkJIH07Cj4+ICsKPj4gKwlp ZiAoIWJyaWRnZS0+ZW5jb2Rlcikgewo+PiArCQlEUk1fRVJST1IoIlBhcmVudCBlbmNvZGVyIG9i amVjdCBub3QgZm91bmRcbiIpOwo+PiArCQlyZXR1cm4gLUVOT0RFVjsKPj4gKwl9Cj4+ICsKPj4g KwkvKiBIUEQgbm90IHN1cHBvcnRlZCAqLwo+PiArCXBkYXRhLT5jb25uZWN0b3IucG9sbGVkID0g MDsKPj4gKwo+PiArCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChicmlkZ2UtPmRldiwgJnBkYXRh LT5jb25uZWN0b3IsCj4+ICsJCQkJICZ0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2Z1bmNzLAo+PiAr CQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCURSTV9F UlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9yIHdpdGggZHJtXG4iKTsKPj4gKwkJ cmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4gKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnBk YXRhLT5jb25uZWN0b3IsCj4+ICsJCQkJICZ0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2hlbHBlcl9m dW5jcyk7Cj4+ICsJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZwZGF0YS0+Y29u bmVjdG9yLCAKPj4gYnJpZGdlLT5lbmNvZGVyKTsKPj4gKwo+PiArCWhvc3QgPSBvZl9maW5kX21p cGlfZHNpX2hvc3RfYnlfbm9kZShwZGF0YS0+aG9zdF9ub2RlKTsKPj4gKwlpZiAoIWhvc3QpIHsK Pj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZmluZCBkc2kgaG9zdFxuIik7Cj4+ICsJCXJldHVy biAtRU5PREVWOwo+PiArCX0KPj4gKwo+PiArCWRzaSA9IG1pcGlfZHNpX2RldmljZV9yZWdpc3Rl cl9mdWxsKGhvc3QsICZpbmZvKTsKPj4gKwlpZiAoSVNfRVJSKGRzaSkpIHsKPj4gKwkJRFJNX0VS Uk9SKCJmYWlsZWQgdG8gY3JlYXRlIGRzaSBkZXZpY2VcbiIpOwo+PiArCQlyZXQgPSBQVFJfRVJS KGRzaSk7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJLyogVE9ETzogc2V0dGlu ZyB0byA0IGxhbmVzIGFsd2F5cyBmb3Igbm93ICovCj4+ICsJZHNpLT5sYW5lcyA9IDQ7Cj4+ICsJ ZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRfUkdCODg4Owo+PiArCWRzaS0+bW9kZV9mbGFncyA9 IE1JUElfRFNJX01PREVfVklERU8gfCAKPj4gTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNF IHwKPj4gKwkJCSAgTUlQSV9EU0lfTU9ERV9FT1RfUEFDS0VUIHwgTUlQSV9EU0lfTU9ERV9WSURF T19IU0U7Cj4+ICsKPj4gKwlyZXQgPSBtaXBpX2RzaV9hdHRhY2goZHNpKTsKPj4gKwlpZiAocmV0 IDwgMCkgewo+PiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBhdHRhY2ggZHNpIHRvIGhvc3RcbiIp Owo+PiArCQltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3Rlcihkc2kpOwo+PiArCQlyZXR1cm4gcmV0 Owo+PiArCX0KPj4gKwo+PiArCXBkYXRhLT5kc2kgPSBkc2k7Cj4+ICsKPj4gKwlEUk1fREVCVUco ImJyaWRnZSBhdHRhY2hlZFxuIik7Cj4gCj4gU2FtZSBjb21tZW50IGhlcmUgcmVnYXJkaW5nIGJl aW5nIG1vcmUgZGVzY3JpcHRpdmUuCj4gCj4+ICsJLyogYXR0YWNoIHBhbmVsIHRvIGJyaWRnZSAq Lwo+PiArCXRpX3NuX2JyaWRnZV9hdHRhY2hfcGFuZWwocGRhdGEpOwo+PiArCj4+ICsJcmV0dXJu IDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9tb2RlX3NldChzdHJ1 Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+PiArCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSwKPj4gKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkal9tb2RlKQo+ PiArewo+PiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2Jy aWRnZShicmlkZ2UpOwo+PiArCj4+ICsJRFJNX0RFQlVHKCJtb2RlX3NldDogaGRpc3BsYXk9JWQs IHZkaXNwbGF5PSVkLCB2cmVmcmVzaD0lZCwgCj4+IGNsb2NrPSVkXG4iLAo+PiArCQlhZGpfbW9k ZS0+aGRpc3BsYXksIGFkal9tb2RlLT52ZGlzcGxheSwKPj4gKwkJYWRqX21vZGUtPnZyZWZyZXNo LCBhZGpfbW9kZS0+Y2xvY2spOwo+PiArCj4+ICsJZHJtX21vZGVfY29weSgmcGRhdGEtPmN1cnJf bW9kZSwgYWRqX21vZGUpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2Vf ZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+PiArewo+PiArCXN0cnVjdCB0aV9z bl9icmlkZ2UgKnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOwo+PiArCXN0 cnVjdCBkcm1fcGFuZWwgKnBhbmVsID0gcGRhdGEtPnBhbmVsOwo+PiArCj4+ICsJaWYgKHBhbmVs KSB7Cj4+ICsJCWRybV9wYW5lbF9kaXNhYmxlKHBhbmVsKTsKPj4gKwkJZHJtX3BhbmVsX3VucHJl cGFyZShwYW5lbCk7Cj4+ICsJfQo+PiArCj4+ICsJLyogZGlzYWJsZSB2aWRlbyBzdHJlYW0gKi8K Pj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fRU5IX0ZSQU1FX1JFRywK Pj4gKwkJCVNOX0VOQUJMRV9WSURfU1RSRUFNX0JJVCwgMCk7Cj4+ICsJLyogc2VtaSBhdXRvIGxp bmsgdHJhaW5pbmcgbW9kZSBPRkYgKi8KPj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwg U05fTUxfVFhfTU9ERV9SRUcsIDApOwo+PiArCS8qIGRpc2FibGUgRFAgUExMICovCj4+ICsJcmVn bWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX1BMTF9FTkFCTEVfUkVHLCAwKTsKPj4gK30KPj4g Kwo+PiArLyogcmVmZXJlbmNlIGNsayBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgdGhlIGJyaWRn ZSBpbiBLSHogKi8KPj4gK3N0YXRpYyB1MzIgdGlfc25fYnJpZGdlX3JlZl9jbGtfdGFibGVbXSA9 IHsKPj4gKwkxMjAwMCwKPj4gKwkxOTIwMCwKPj4gKwkyNjAwMCwKPj4gKwkyNzAwMCwKPj4gKwkz ODQwMCwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9zZXRfcmVmY2xr KHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQo+PiArewo+PiArCWludCBpID0gMDsKPj4gKwo+ PiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRpX3NuX2JyaWRnZV9yZWZfY2xrX3RhYmxl KTsgaSsrKQo+PiArCQlpZiAodGlfc25fYnJpZGdlX3JlZl9jbGtfdGFibGVbaV0gPT0gcGRhdGEt PnJlZmNsa19raHopCj4+ICsJCQlicmVhazsKPj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21h cCwgU05fUkVGQ0xLX0ZSRVFfUkVHLAo+PiArCQkoRFBQTExfQ0xLX1NSQ19SRUZDTEsgfCAoaSA8 PCBTTl9EU0lBX1JFRkNMS19PRkZTRVQpKSk7Cj4gCj4gV2hhdCBpZiB0aGUgcmVmY2xrIGZyZXF1 ZW5jeSBpc24ndCBmb3VuZD8KPiAKSWYgcmVmY2xrIGZyZXF1ZW5jeSBpcyBub3QgZm91bmQgdGhl biB3ZSB3aWxsIHByb2dyYW0gaT01LCB3aGljaCBpcyBhbHNvIAp2YWxpZCBhcyBwZXIgZGF0YXNo ZWV0LCB0aGlzIG1lYW5zIDE5LjJNSHouCj4+ICt9Cj4+ICsKPj4gK3N0cnVjdCBkcF9kYXRhX3Jh dGUgewo+PiArCXVuc2lnbmVkIGludCBiaXRfdmFsOwo+PiArCXVuc2lnbmVkIGludCBkcF9yYXRl Owo+PiArfTsKPj4gKwo+PiArLyogZHAgZGF0YSByYXRlIHN1cHBvcnRlZCBieSB0aGUgYnJpZGdl IE1icHMgKi8KPj4gK3N0YXRpYyBzdHJ1Y3QgZHBfZGF0YV9yYXRlIHRpX3NuX2JyaWRnZV9kcF9y YXRlX3RhYmxlW10gPSB7Cj4+ICsJezEsIDE2MjB9LAo+PiArCXsyLCAyMTYwfSwKPj4gKwl7Mywg MjQzMH0sCj4+ICsJezQsIDI3MDB9LAo+PiArCXs1LCAzMjQwfSwKPj4gKwl7NiwgNDMyMH0sCj4+ ICsJezcsIDU0MDB9LAo+PiArfTsKPj4gKwo+PiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3Nl dF9kc2lfZHBfcmF0ZShzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKPj4gK3sKPj4gKwl1bnNp Z25lZCBpbnQgYml0X3JhdGVfbWh6LCBjbGtfZnJlcV9taHosIGRwX3JhdGVfbWh6Owo+PiArCXVu c2lnbmVkIGludCB2YWwgPSAwLCBpID0gMDsKPj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSA9ICZwZGF0YS0+Y3Vycl9tb2RlOwo+PiArCj4+ICsJLyogc2V0IERTSUEgY2xrIGZyZXF1 ZW5jeSAqLwo+PiArCWJpdF9yYXRlX21oeiA9IChtb2RlLT5jbG9jayAvIDEwMDApICoKPj4gKwkJ CW1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAocGRhdGEtPmRzaS0+Zm9ybWF0KTsKPj4gKwlj bGtfZnJlcV9taHogPSBiaXRfcmF0ZV9taHogLyAocGRhdGEtPmRzaS0+bGFuZXMgKiAyKTsKPj4g Kwo+PiArCS8qIGZvciBlYWNoIGluY3JlbWVudCBpbiB2YWwsIGZyZXF1ZW5jeSBpbmNyZWFzZXMg YnkgNU1IeiAqLwo+PiArCXZhbCA9IChNSU5fRFNJX0NMS19GUkVRX01IWiAvIDUpICsKPj4gKwkJ KCgoY2xrX2ZyZXFfbWh6IC0gTUlOX0RTSV9DTEtfRlJFUV9NSFopIC8gNSkgJiAweEZGKTsKPj4g KwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fRFNJQV9DTEtfRlJFUV9SRUcsIHZhbCk7 Cj4+ICsKPj4gKwkvKiBzZXQgRFAgZGF0YSByYXRlICovCj4+ICsJZHBfcmF0ZV9taHogPSAoKGJp dF9yYXRlX21oeiAvIHBkYXRhLT5kc2ktPmxhbmVzKSAqIAo+PiBEUF9DTEtfRlVER0VfTlVNKSAv Cj4+ICsJCQkJCQkJRFBfQ0xLX0ZVREdFX0RFTjsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRSh0aV9zbl9icmlkZ2VfZHBfcmF0ZV90YWJsZSk7IGkrKykKPj4gKwkJaWYgKHRpX3NuX2Jy aWRnZV9kcF9yYXRlX3RhYmxlW2ldLmRwX3JhdGUgPiBkcF9yYXRlX21oeikKPj4gKwkJCWJyZWFr Owo+PiArCWlmIChpID09IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX2RwX3JhdGVfdGFibGUpKQo+ PiArCQlpLS07IC8qIHNldCB0byBtYXhpbXVtIHBvc3NpYmxlICovCj4+ICsKPj4gKwl2YWwgPSB0 aV9zbl9icmlkZ2VfZHBfcmF0ZV90YWJsZVtpXS5iaXRfdmFsIDw8IAo+PiBTTl9EUF9EQVRBX1JB VEVfT0ZGU0VUOwo+PiArCXJlZ21hcF91cGRhdGVfYml0cyhwZGF0YS0+cmVnbWFwLCBTTl9EQVRB UkFURV9DT05GSUdfUkVHLAo+PiArCQkJCQkJU05fRFBfREFUQV9SQVRFX0JJVFMsIHZhbCk7Cj4g Cj4gSSB0aGluayB0aGlzIGNhbiBiZSBzaW1wbGlmaWVkLgo+IAo+IC8qIEFycmF5IGluZGV4IGNv cnJlc3BvbmRzIHRvIHJlZ2lzdGVyIHZhbHVlICovCj4gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlu dCB0aV9zbl9icmlkZ2VfZHBfcmF0ZV9sdXRbXSA9IHsKPiAgICAgICAgIDAsIDE2MjAsIDIxNjAs IDI0MzAsIDI3MDAsIDMyNDAsIDQzMjAsIDU0MDAKPiB9Owo+IAo+IHN0YXRpYyB2b2lkIHRpX3Nu X2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4gewo+ ICAgICAgICAgLi4uCj4gICAgICAgICBmb3IgKGkgPSBBUlJBWV9TSVpFKHRpX3NuX2JyaWRnZV9k cF9yYXRlX2x1dCkgLSAxOyBpID49IDA7IGktLSkgCj4gewo+ICAgICAgICAgICAgICAgICBpZiAo dGlfc25fYnJpZGdlX2RwX3JhdGVfbHV0W2ldIDw9IGRwX3JhdGVfbWh6KQo+ICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwo+ICAgICAgICAgfQo+ICAgICAgICAgcmVnbWFwX3VwZGF0ZV9i aXRzKHBkYXRhLT5yZWdtYXAsIFNOX0RBVEFSQVRFX0NPTkZJR19SRUcsCj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgU05fRFBfREFUQV9SQVRFX0JJVFMsIGkgPDwgCj4gU05fRFBfREFUQV9S QVRFX09GRlNFVCk7Cj4gfQo+IApBcyBwZXIgZGF0YXNoZWV0IHdlIGhhdmUgdG8gcHJvZ3JhbSB0 aGUgZHAgZGF0YSByYXRlIGdyZWF0ZXIgdGhhbiBzdHJlYW0gCnJhdGUuCkluIG9yZGVyIHRvIHN1 cHBvcnQgdGhlIHBhbmVsIHN0cmVhbSBiaXQgcmF0ZSwgdGhlIFNONjVEU0k4NiBlRFAgCmludGVy ZmFjZSBtdXN0IGJlIHByb2dyYW1tZWQgc28gdGhhdCB0aGUgdG90YWwKZURQIGRhdGEgcmF0ZSBp cyBncmVhdGVyIHRoYW4gdGhlIHN0cmVhbSBiaXQgcmF0ZS4KPj4gK30KPj4gKwo+PiArc3RhdGlj IHZvaWQgdGlfc25fYnJpZGdlX3NldF92aWRlb190aW1pbmdzKHN0cnVjdCB0aV9zbl9icmlkZ2Ug Cj4+ICpwZGF0YSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZw ZGF0YS0+Y3Vycl9tb2RlOwo+PiArCj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNO X0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfTE9XX1JFRywKPj4gKwkJCW1vZGUtPmhkaXNwbGF5ICYg MHhGRik7Cj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9BQ1RJVkVfTElO RV9MRU5HVEhfSElHSF9SRUcsCj4+ICsJCQkobW9kZS0+aGRpc3BsYXkgPj4gU05fVElNSU5HX0hJ R0hfT0ZGU0VUKSAmIDB4RkYpOwo+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9D SEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcsCj4+ICsJCQltb2RlLT52ZGlzcGxheSAm IDB4RkYpOwo+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVkVSVElDQUxf RElTUExBWV9TSVpFX0hJR0hfUkVHLAo+PiArCQkJKG1vZGUtPnZkaXNwbGF5ID4+IFNOX1RJTUlO R19ISUdIX09GRlNFVCkgJiAweEZGKTsKPj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwg U05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcsCj4+ICsJCQkobW9kZS0+aHN5bmNfZW5k IC0gbW9kZS0+aHN5bmNfc3RhcnQpICYgMHhGRik7Cj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5y ZWdtYXAsIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRywKPj4gKwkJCSgobW9kZS0+ aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQpID4+Cj4+ICsJCQkgU05fVElNSU5HX0hJR0hf T0ZGU0VUKSAmIDB4RkYpOwo+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFf VlNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRywKPj4gKwkJCShtb2RlLT52c3luY19lbmQgLSBtb2Rl LT52c3luY19zdGFydCkgJiAweEZGKTsKPj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwg U05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHLAo+PiArCQkJKChtb2RlLT52c3luY19l bmQgLSBtb2RlLT52c3luY19zdGFydCkgPj4KPj4gKwkJCSBTTl9USU1JTkdfSElHSF9PRkZTRVQp ICYgMHhGRik7Cj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9IT1JJWk9O VEFMX0JBQ0tfUE9SQ0hfUkVHLAo+PiArCQkJKG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2Vu ZCkgJiAweEZGKTsKPj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZFUlRJ Q0FMX0JBQ0tfUE9SQ0hfUkVHLAo+PiArCQkJKG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2Vu ZCkgJiAweEZGKTsKPj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hPUkla T05UQUxfRlJPTlRfUE9SQ0hfUkVHLAo+PiArCQkJKG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+ aGRpc3BsYXkpICYgMHhGRik7Cj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NI QV9WRVJUSUNBTF9GUk9OVF9QT1JDSF9SRUcsCj4+ICsJCQkobW9kZS0+dnN5bmNfc3RhcnQgLSBt b2RlLT52ZGlzcGxheSkgJiAweEZGKTsKPj4gKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDEwMDUwKTsg LyogMTBtcyBkZWxheSByZWNvbW1lbmRlZCBieSBzcGVjICovCj4gCj4gWW91IHdvdWxkIHByb2Jh Ymx5IGJlIGZpbmUgdG8gc2V0IHRoZSB1cHBlciBib3VuZCB0byAxMDUwMCBzbyB3ZSBkb24ndCAK PiB0cmlnZ2VyCj4gYW4gdW5uZWNlc3NhcnkgaW50ZXJydXB0Lgo+IApEb25lLgo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpi cmlkZ2UpCj4+ICt7Cj4+ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBicmlkZ2VfdG9f dGlfc25fYnJpZGdlKGJyaWRnZSk7Cj4+ICsJc3RydWN0IGRybV9wYW5lbCAqcGFuZWwgPSBwZGF0 YS0+cGFuZWw7Cj4+ICsJdW5zaWduZWQgaW50IHZhbCA9IDA7Cj4+ICsKPj4gKwlpZiAocGFuZWwp IHsKPj4gKwkJZHJtX3BhbmVsX3ByZXBhcmUocGFuZWwpOwo+PiArCQkvKiBpbiBjYXNlIGRybV9w YW5lbCBpcyBjb25uZWN0ZWQgdGhlbiBIUEQgaXMgbm90IHN1cHBvcnRlZCAqLwo+PiArCQlyZWdt YXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fSFBEX0RJU0FCTEVfUkVHLAo+PiArCQkJ CSAgIFNOX0hQRF9ESVNBQkxFX0JJVCwgU05fSFBEX0RJU0FCTEVfQklUKTsKPj4gKwl9Cj4+ICsK Pj4gKwkvKiBEU0lfQSBsYW5lIGNvbmZpZyAqLwo+PiArCXZhbCA9ICg0IC0gcGRhdGEtPmRzaS0+ bGFuZXMpIDw8IFNOX0RTSUFfTEFORV9PRkZTRVQ7Cj4+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKHBk YXRhLT5yZWdtYXAsIFNOX0RTSV9MQU5FU19SRUcsCj4+ICsJCQkJCVNOX0RTSUFfTlVNX0xBTkVT X0JJVFMsIHZhbCk7Cj4+ICsKPj4gKwkvKiBEUCBsYW5lIGNvbmZpZyAqLwo+PiArCXZhbCA9IChw ZGF0YS0+ZHNpLT5sYW5lcyAtIDEpIDw8IFNOX0RQX0xBTkVfT0ZGU0VUOwo+PiArCXJlZ21hcF91 cGRhdGVfYml0cyhwZGF0YS0+cmVnbWFwLCBTTl9TU0NfQ09ORklHX1JFRywKPj4gKwkJCQkJU05f RFBfTlVNX0xBTkVTX0JJVFMsIHZhbCk7Cj4+ICsKPj4gKwkvKiBzZXQgZHNpL2RwIGNsayBmcmVx dWVuY3kgdmFsdWUgKi8KPj4gKwl0aV9zbl9icmlkZ2Vfc2V0X2RzaV9kcF9yYXRlKHBkYXRhKTsK Pj4gKwo+PiArCS8qIGVuYWJsZSBEUCBQTEwgKi8KPj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJl Z21hcCwgU05fUExMX0VOQUJMRV9SRUcsIDEpOwo+PiArCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTAw NTApOyAvKiAxMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNwZWMgKi8KPj4gKwo+PiArCS8qKgo+ PiArCSAqIFRoZSBTTjY1RFNJODYgb25seSBzdXBwb3J0cyBBU1NSIERpc3BsYXkgQXV0aGVudGlj YXRpb24gbWV0aG9kIAo+PiBhbmQKPj4gKwkgKiB0aGlzIG1ldGhvZCBpcyBlbmFibGVkIGJ5IGRl ZmF1bHQuIEFuIGVEUCBwYW5lbCBtdXN0IHN1cHBvcnQgdGhpcwo+PiArCSAqIGF1dGhlbnRpY2F0 aW9uIG1ldGhvZC4gV2UgbmVlZCB0byBlbmFibGUgdGhpcyBtZXRob2QgaW4gdGhlIGVEUCAKPj4g cGFuZWwKPj4gKwkgKiBhdCBEaXNwbGF5UG9ydCBhZGRyZXNzIDB4MDAxMEEgcHJpb3IgdG8gbGlu ayB0cmFpbmluZy4KPj4gKwkgKi8KPj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05f QVVYX1dEQVRBMF9SRUcsIDB4MDEpOwo+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBT Tl9BVVhfQUREUl8xOV8xNl9SRUcsIDB4MDApOwo+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVn bWFwLCBTTl9BVVhfQUREUl8xNV84X1JFRywgMHgwMSk7Cj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRh LT5yZWdtYXAsIFNOX0FVWF9BRERSXzdfMF9SRUcsIDB4MEEpOwo+PiArCXJlZ21hcF93cml0ZShw ZGF0YS0+cmVnbWFwLCBTTl9BVVhfTEVOR1RIX1JFRywgMHgwMSk7Cj4+ICsJcmVnbWFwX3dyaXRl KHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9DTURfUkVHLCAweDgxKTsKPj4gKwl1c2xlZXBfcmFuZ2Uo MTAwMDAsIDEwMDUwKTsgLyogMTBtcyBkZWxheSByZWNvbW1lbmRlZCBieSBzcGVjICovCj4+ICsK Pj4gKwkvKiBTZW1pIGF1dG8gbGluayB0cmFpbmluZyBtb2RlICovCj4+ICsJcmVnbWFwX3dyaXRl KHBkYXRhLT5yZWdtYXAsIFNOX01MX1RYX01PREVfUkVHLCAweDBBKTsKPj4gKwltc2xlZXAoMjAp OyAvKiAyMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNwZWMgKi8KPj4gKwo+PiArCS8qIGNvbmZp ZyB2aWRlbyBwYXJhbWV0ZXJzICovCj4+ICsJdGlfc25fYnJpZGdlX3NldF92aWRlb190aW1pbmdz KHBkYXRhKTsKPj4gKwo+PiArCS8qIGVuYWJsZSB2aWRlbyBzdHJlYW0gKi8KPj4gKwlyZWdtYXBf dXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fRU5IX0ZSQU1FX1JFRywKPj4gKwkJCSAgIFNO X0VOQUJMRV9WSURfU1RSRUFNX0JJVCwgU05fRU5BQkxFX1ZJRF9TVFJFQU1fQklUKTsKPj4gKwo+ PiArCWlmIChwYW5lbCkKPj4gKwkJZHJtX3BhbmVsX2VuYWJsZShwYW5lbCk7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9wcmVfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdl ICpicmlkZ2UpCj4+ICt7Cj4+ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBicmlkZ2Vf dG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7Cj4+ICsKPj4gKwl0aV9zbl9icmlkZ2VfcG93ZXJfY3Ry bChwZGF0YSwgdHJ1ZSk7Cj4+ICsKPj4gKwkvKiBjb25maWd1cmUgYnJpZGdlIENMS19TUkMgYW5k IHJlZl9jbGsgKi8KPj4gKwl0aV9zbl9icmlkZ2Vfc2V0X3JlZmNsayhwZGF0YSk7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9wb3N0X2Rpc2FibGUoc3RydWN0IGRybV9i cmlkZ2UgKmJyaWRnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJy aWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKPj4gKwo+PiArCXRpX3NuX2JyaWRnZV9wb3dl cl9jdHJsKHBkYXRhLCBmYWxzZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2JyaWRnZV9mdW5jcyB0aV9zbl9icmlkZ2VfZnVuY3MgPSB7Cj4+ICsJLmF0dGFjaCA9IHRp X3NuX2JyaWRnZV9hdHRhY2gsCj4+ICsJLnByZV9lbmFibGUgPSB0aV9zbl9icmlkZ2VfcHJlX2Vu YWJsZSwKPj4gKwkuZW5hYmxlID0gdGlfc25fYnJpZGdlX2VuYWJsZSwKPj4gKwkuZGlzYWJsZSA9 IHRpX3NuX2JyaWRnZV9kaXNhYmxlLAo+PiArCS5wb3N0X2Rpc2FibGUgPSB0aV9zbl9icmlkZ2Vf cG9zdF9kaXNhYmxlLAo+PiArCS5tb2RlX3NldCA9IHRpX3NuX2JyaWRnZV9tb2RlX3NldCwKPj4g K307Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0KHN0cnVj dCB0aV9zbl9icmlkZ2UgKnBkYXRhKQo+PiArewo+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAg PSBwZGF0YS0+ZGV2LT5vZl9ub2RlOwo+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZW5kX25vZGU7 Cj4+ICsKPj4gKwllbmRfbm9kZSA9IG9mX2dyYXBoX2dldF9lbmRwb2ludF9ieV9yZWdzKG5wLCAw LCAwKTsKPj4gKwlpZiAoIWVuZF9ub2RlKSB7Cj4+ICsJCURSTV9FUlJPUigicmVtb3RlIGVuZHBv aW50IG5vdCBmb3VuZFxuIik7Cj4+ICsJCXJldHVybiAtRU5PREVWOwo+PiArCX0KPj4gKwo+PiAr CXBkYXRhLT5ob3N0X25vZGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVuZF9u b2RlKTsKPj4gKwlvZl9ub2RlX3B1dChlbmRfbm9kZSk7Cj4+ICsJaWYgKCFwZGF0YS0+aG9zdF9u b2RlKSB7Cj4+ICsJCURSTV9FUlJPUigicmVtb3RlIG5vZGUgbm90IGZvdW5kXG4iKTsKPj4gKwkJ cmV0dXJuIC1FTk9ERVY7Cj4+ICsJfQo+PiArCW9mX25vZGVfcHV0KHBkYXRhLT5ob3N0X25vZGUp Owo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25fYnJp ZGdlX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCj4+ICsJIGNvbnN0IHN0cnVjdCBp MmNfZGV2aWNlX2lkICppZCkKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YTsK Pj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRkY19ub2RlOwo+PiArCWludCByZXQgPSAwOwo+PiAr Cj4+ICsJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19G VU5DX0kyQykpIHsKPj4gKwkJRFJNX0VSUk9SKCJkZXZpY2UgZG9lc24ndCBzdXBwb3J0IEkyQ1xu Iik7Cj4+ICsJCXJldHVybiAtRU5PREVWOwo+PiArCX0KPj4gKwo+PiArCXBkYXRhID0gZGV2bV9r emFsbG9jKCZjbGllbnQtPmRldiwKPj4gKwkJc2l6ZW9mKHN0cnVjdCB0aV9zbl9icmlkZ2UpLCBH RlBfS0VSTkVMKTsKPiAKPiAgICAgICAgIHBkYXRhID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRl diwgc2l6ZW9mKHN0cnVjdCB0aV9zbl9icmlkZ2UpLAo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR0ZQX0tFUk5FTCk7Cj4gCj4+ICsJaWYgKCFwZGF0YSkKPj4gKwkJcmV0dXJuIC1FTk9N RU07Cj4+ICsKPj4gKwlwZGF0YS0+ZGV2ID0gJmNsaWVudC0+ZGV2Owo+PiArCURSTV9ERUJVRygi STJDIGFkZHJlc3MgaXMgJXhcbiIsIGNsaWVudC0+YWRkcik7Cj4gCj4gdW5uZWNlc3NhcnkKPiAK UmVtb3ZlZAo+PiArCj4+ICsJcGRhdGEtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNs aWVudCwKPj4gKwkJCQkmdGlfc25fYnJpZGdlX3JlZ21hcF9jb25maWcpOwo+IAo+IGluZGVudGF0 aW9uIGlzIHdyb25nIGhlcmUsIHNob3VsZCBiZToKPiAKPiAgICAgICAgIHBkYXRhLT5yZWdtYXAg PSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCj4gJnRpX3NuX2JyaWRnZV9yZWdtYXBfY29uZmlnKTsKPiAK Pj4gKwlpZiAoSVNfRVJSKHBkYXRhLT5yZWdtYXApKQo+IAo+IFByaW50IGFuIGVycm9yPwo+IAo+ PiArCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+cmVnbWFwKTsKPj4gKwo+PiArCXBkYXRhLT5lbmFi bGVfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KHBkYXRhLT5kZXYsCj4+ICsJCQkJCSAgICAiZW5hYmxl IiwgR1BJT0RfT1VUX0xPVyk7Cj4+ICsJaWYgKElTX0VSUihwZGF0YS0+ZW5hYmxlX2dwaW8pKSB7 Cj4+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBlbmFibGUgZ3BpbyBmcm9tIERUXG4iKTsK Pj4gKwkJcmV0ID0gUFRSX0VSUihwZGF0YS0+ZW5hYmxlX2dwaW8pOwo+PiArCQlyZXR1cm4gcmV0 Owo+PiArCX0KPj4gKwo+PiArCXJldCA9IHRpX3NuX2JyaWRnZV9wYXJzZV9yZWd1bGF0b3JzKHBk YXRhKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIHJl Z3VsYXRvcnNcbiIpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCXJldCA9IG9m X3Byb3BlcnR5X3JlYWRfdTMyKHBkYXRhLT5kZXYtPm9mX25vZGUsCj4+ICsJCQkicmVmY2xrLWZy ZXEta2h6IiwgJnBkYXRhLT5yZWZjbGtfa2h6KTsKPj4gKwlpZiAocmV0KQo+PiArCQlwZGF0YS0+ cmVmY2xrX2toeiA9IFNOX0RFRkFVTFRfUkVGX0NMS19LSFo7Cj4+ICsKPj4gKwlyZXQgPSB0aV9z bl9icmlkZ2VfcGFyc2VfZHNpX2hvc3QocGRhdGEpOwo+PiArCWlmIChyZXQpCj4gCj4gRFJNX0VS Uk9SPwo+IApJIGFtIGFscmVhZHkgcHJpbnRpbmcgZXJyb3IgaW4gdGlfc25fYnJpZGdlX3BhcnNl X2RzaV9ob3N0KCkgc28gcmVtb3ZlZCAKZnJvbSBoZXJlIGFzIHBlciBjb21tZW50IGZyb20gSm9y ZGFuIENyb3VzZS4KPj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCWRkY19ub2RlID0gb2ZfcGFy c2VfcGhhbmRsZShwZGF0YS0+ZGV2LT5vZl9ub2RlLCAiZGRjLWkyYy1idXMiLCAwKTsKPj4gKwlp ZiAoZGRjX25vZGUpIHsKPj4gKwkJcGRhdGEtPmRkYyA9IG9mX2ZpbmRfaTJjX2FkYXB0ZXJfYnlf bm9kZShkZGNfbm9kZSk7Cj4+ICsJCW9mX25vZGVfcHV0KGRkY19ub2RlKTsKPj4gKwkJaWYgKCFw ZGF0YS0+ZGRjKSB7Cj4+ICsJCQlkZXZfZGJnKHBkYXRhLT5kZXYsICJmYWlsZWQgdG8gcmVhZCBk ZGMgbm9kZVxuIik7Cj4+ICsJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKPj4gKwkJfQo+PiArCX0g ZWxzZSB7Cj4+ICsJCWRldl9kYmcocGRhdGEtPmRldiwgIm5vIGRkYyBwcm9wZXJ0eSBmb3VuZFxu Iik7Cj4gCj4gWW91J3ZlIGNvcGllZCBkZXZfZGJnKCkgbG9ncywgdGhleSBzaG91bGQgYmUgRFJN X0RFQlVHX0tNUygpLgo+IApEb25lLgo+PiArCX0KPj4gKwo+PiArCXRpX3NuX2JyaWRnZV9wb3dl cl9jdHJsKHBkYXRhLCB0cnVlKTsKPj4gKwlyZXQgPSB0aV9zbl9icmlkZ2VfcmVhZF9kZXZpY2Vf cmV2KHBkYXRhKTsKPj4gKwl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwgZmFsc2UpOwo+ IAo+IFRoaXMgY291bGQgYmUgZG9uZSBiZWZvcmUgaGFuZGxpbmcgcmVmY2xrIG9yIGRkYy4KPiAK TW92ZWQgYmVmb3JlIHJlZmNsayBhbmQgZGRjIGhhbmRpbmcuCj4+ICsJaWYgKHJldCkKPj4gKwkJ cmV0dXJuIHJldDsKPj4gKwo+PiArCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHBkYXRhKTsK Pj4gKwltdXRleF9pbml0KCZwZGF0YS0+bG9jayk7Cj4+ICsKPj4gKwlwZGF0YS0+YnJpZGdlLmZ1 bmNzID0gJnRpX3NuX2JyaWRnZV9mdW5jczsKPj4gKwlwZGF0YS0+YnJpZGdlLm9mX25vZGUgPSBj bGllbnQtPmRldi5vZl9ub2RlOwo+PiArCj4+ICsJZHJtX2JyaWRnZV9hZGQoJnBkYXRhLT5icmlk Z2UpOwo+PiArCj4+ICsJRFJNX0RFQlVHKCJicmlkZ2UgZGV2aWNlIHJlZ2lzdGVyZWQgc3VjY2Vz c2Z1bGx5XG4iKTsKPiAKPiB1bm5lY2Vzc2FyeQo+IApSZW1vdmVkCj4+ICsKPj4gKwlyZXR1cm4g MDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcmVtb3ZlKHN0cnVjdCBp MmNfY2xpZW50ICpjbGllbnQpCj4+ICt7Cj4+ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEg PSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKPj4gKwo+PiArCWlmICghcGRhdGEpCj4+ICsJ CXJldHVybiAtRUlOVkFMOwo+PiArCj4+ICsJbWlwaV9kc2lfZGV0YWNoKHBkYXRhLT5kc2kpOwo+ PiArCW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKHBkYXRhLT5kc2kpOwo+PiArCj4+ICsJZHJt X2JyaWRnZV9yZW1vdmUoJnBkYXRhLT5icmlkZ2UpOwo+PiArCWkyY19wdXRfYWRhcHRlcihwZGF0 YS0+ZGRjKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0 IGkyY19kZXZpY2VfaWQgdGlfc25fYnJpZGdlX2lkW10gPSB7Cj4+ICsJeyAidGksc242NWRzaTg2 IiwgMH0sCj4+ICsJe30sCj4+ICt9Owo+PiArTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRpX3Nu X2JyaWRnZV9pZCk7Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRp X3NuX2JyaWRnZV9tYXRjaF90YWJsZVtdID0gewo+PiArCXsuY29tcGF0aWJsZSA9ICJ0aSxzbjY1 ZHNpODYifSwKPj4gKwl7fSwKPj4gK307Cj4+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0aV9z bl9icmlkZ2VfbWF0Y2hfdGFibGUpOwo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIg dGlfc25fYnJpZGdlX2RyaXZlciA9IHsKPj4gKwkuZHJpdmVyID0gewo+PiArCQkubmFtZSA9ICJ0 aV9zbjY1ZHNpODYiLAo+PiArCQkub2ZfbWF0Y2hfdGFibGUgPSB0aV9zbl9icmlkZ2VfbWF0Y2hf dGFibGUsCj4+ICsJfSwKPj4gKwkucHJvYmUgPSB0aV9zbl9icmlkZ2VfcHJvYmUsCj4+ICsJLnJl bW92ZSA9IHRpX3NuX2JyaWRnZV9yZW1vdmUsCj4+ICsJLmlkX3RhYmxlID0gdGlfc25fYnJpZGdl X2lkLAo+PiArfTsKPj4gKwo+PiArbW9kdWxlX2kyY19kcml2ZXIodGlfc25fYnJpZGdlX2RyaXZl cik7Cj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oInNuNjVkc2k4NiBEU0kgdG8gZURQIGJyaWRnZSBk cml2ZXIiKTsKPj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPj4gLS0KPj4gVGhlIFF1YWxj b21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9y YSAKPj4gRm9ydW0sCj4+IGEgTGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QK Pj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVk cmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=