From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 7/9] drm/xen-front: Implement KMS/connector handling Date: Tue, 6 Mar 2018 08:22:05 +0100 Message-ID: <20180306072205.GP22212__4088.85595757074$1520320879$gmane$org@phenom.ffwll.local> References: <1519200222-20623-1-git-send-email-andr2000@gmail.com> <1519200222-20623-8-git-send-email-andr2000@gmail.com> <20180305092353.GI22212@phenom.ffwll.local> <8132411b-ee50-fe42-2e62-8816a1f85433@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1et6vN-0005WP-0h for xen-devel@lists.xenproject.org; Tue, 06 Mar 2018 07:22:13 +0000 Received: by mail-wm0-x22b.google.com with SMTP id z81so20601146wmb.4 for ; Mon, 05 Mar 2018 23:22:09 -0800 (PST) Content-Disposition: inline In-Reply-To: <8132411b-ee50-fe42-2e62-8816a1f85433@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Oleksandr Andrushchenko Cc: jgross@suse.com, airlied@linux.ie, gustavo@padovan.org, Oleksandr Andrushchenko , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, seanpaul@chromium.org, daniel.vetter@intel.com, xen-devel@lists.xenproject.org, boris.ostrovsky@oracle.com List-Id: xen-devel@lists.xenproject.org T24gTW9uLCBNYXIgMDUsIDIwMTggYXQgMDI6NTk6MjNQTSArMDIwMCwgT2xla3NhbmRyIEFuZHJ1 c2hjaGVua28gd3JvdGU6Cj4gT24gMDMvMDUvMjAxOCAxMToyMyBBTSwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiA+IE9uIFdlZCwgRmViIDIxLCAyMDE4IGF0IDEwOjAzOjQwQU0gKzAyMDAsIE9sZWtz YW5kciBBbmRydXNoY2hlbmtvIHdyb3RlOgo+ID4gPiBGcm9tOiBPbGVrc2FuZHIgQW5kcnVzaGNo ZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4gPiA+IAo+ID4gPiBJbXBs ZW1lbnQga2VybmVsIG1vZGVzZXRpaW5nL2Nvbm5lY3RvciBoYW5kbGluZyB1c2luZwo+ID4gPiBE Uk0gc2ltcGxlIEtNUyBoZWxwZXIgcGlwZWxpbmU6Cj4gPiA+IAo+ID4gPiAtIGltcGxlbWVudCBL TVMgcGFydCBvZiB0aGUgZHJpdmVyIHdpdGggdGhlIGhlbHAgb2YgRFJNCj4gPiA+ICAgIHNpbXBs ZSBwaXBlcGxpbmUgaGVscGVyIHdoaWNoIGlzIHBvc3NpYmxlIGR1ZSB0byB0aGUgZmFjdAo+ID4g PiAgICB0aGF0IHRoZSBwYXJhLXZpcnR1YWxpemVkIGRyaXZlciBvbmx5IHN1cHBvcnRzIGEgc2lu Z2xlCj4gPiA+ICAgIChwcmltYXJ5KSBwbGFuZToKPiA+ID4gICAgLSBpbml0aWFsaXplIGNvbm5l Y3RvcnMgYWNjb3JkaW5nIHRvIFhlblN0b3JlIGNvbmZpZ3VyYXRpb24KPiA+ID4gICAgLSBoYW5k bGUgZnJhbWUgZG9uZSBldmVudHMgZnJvbSB0aGUgYmFja2VuZAo+ID4gPiAgICAtIGdlbmVyYXRl IHZibGFuayBldmVudHMKPiA+ID4gICAgLSBjcmVhdGUgYW5kIGRlc3Ryb3kgZnJhbWUgYnVmZmVy cyBhbmQgcHJvcGFnYXRlIHRob3NlCj4gPiA+ICAgICAgdG8gdGhlIGJhY2tlbmQKPiA+ID4gICAg LSBwcm9wYWdhdGUgc2V0L3Jlc2V0IG1vZGUgY29uZmlndXJhdGlvbiB0byB0aGUgYmFja2VuZCBv biBkaXNwbGF5Cj4gPiA+ICAgICAgZW5hYmxlL2Rpc2FibGUgY2FsbGJhY2tzCj4gPiA+ICAgIC0g c2VuZCBwYWdlIGZsaXAgcmVxdWVzdCB0byB0aGUgYmFja2VuZCBhbmQgaW1wbGVtZW50IGxvZ2lj IGZvcgo+ID4gPiAgICAgIHJlcG9ydGluZyBiYWNrZW5kIElPIGVycm9ycyBvbiBwcmVwYXJlIGZi IGNhbGxiYWNrCj4gPiA+IAo+ID4gPiAtIGltcGxlbWVudCB2aXJ0dWFsIGNvbm5lY3RvciBoYW5k bGluZzoKPiA+ID4gICAgLSBzdXBwb3J0IG9ubHkgcGl4ZWwgZm9ybWF0cyBzdWl0YWJsZSBmb3Ig c2luZ2xlIHBsYW5lIG1vZGVzCj4gPiA+ICAgIC0gbWFrZSBzdXJlIHRoZSBjb25uZWN0b3IgaXMg YWx3YXlzIGNvbm5lY3RlZAo+ID4gPiAgICAtIHN1cHBvcnQgYSBzaW5nbGUgdmlkZW8gbW9kZSBh cyBwZXIgcGFyYS12aXJ0dWFsaXplZCBkcml2ZXIKPiA+ID4gICAgICBjb25maWd1cmF0aW9uCj4g PiA+IAo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3Nh bmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4gPiBJIHRoaW5rIG9uY2UgeW91J3ZlIHJlbW92 ZWQgdGhlIG1pZGxheWVyIGluIHRoZSBwcmV2aW91cyBwYXRjaCBpdCB3b3VsZAo+ID4gbWFrZXMg c2Vuc2UgdG8gbWVyZ2UgdGhlIDIgcGF0Y2hlcyBpbnRvIDEuCj4gb2ssIHdpbGwgc3F1YXNoIHRo ZSB0d28KPiA+IAo+ID4gQnVuY2ggbW9yZSBjb21tZW50cyBiZWxvdy4KPiA+IC1EYW5pZWwKPiA+ IAo+ID4gPiAtLS0KPiA+ID4gICBkcml2ZXJzL2dwdS9kcm0veGVuL01ha2VmaWxlICAgICAgICAg ICAgIHwgICAyICsKPiA+ID4gICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfY29u bi5jIHwgMTI1ICsrKysrKysrKysrKysKPiA+ID4gICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9k cm1fZnJvbnRfY29ubi5oIHwgIDM1ICsrKysKPiA+ID4gICBkcml2ZXJzL2dwdS9kcm0veGVuL3hl bl9kcm1fZnJvbnRfZHJ2LmMgIHwgIDE1ICsrCj4gPiA+ICAgZHJpdmVycy9ncHUvZHJtL3hlbi94 ZW5fZHJtX2Zyb250X2Rydi5oICB8ICAxMiArKwo+ID4gPiAgIGRyaXZlcnMvZ3B1L2RybS94ZW4v eGVuX2RybV9mcm9udF9rbXMuYyAgfCAyOTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+ID4gPiAgIGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9rbXMuaCAgfCAgMzAg KysrKwo+ID4gPiAgIDcgZmlsZXMgY2hhbmdlZCwgNTE4IGluc2VydGlvbnMoKykKPiA+ID4gICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Nvbm4u Ywo+ID4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1f ZnJvbnRfY29ubi5oCj4gPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94 ZW4veGVuX2RybV9mcm9udF9rbXMuYwo+ID4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfa21zLmgKPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0veGVuL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtl ZmlsZQo+ID4gPiBpbmRleCBkMzA2ODIwMjU5MGYuLjRmY2IwZGExYTljNSAxMDA2NDQKPiA+ID4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtlZmlsZQo+ID4gPiArKysgYi9kcml2ZXJzL2dw dS9kcm0veGVuL01ha2VmaWxlCj4gPiA+IEBAIC0yLDYgKzIsOCBAQAo+ID4gPiAgIGRybV94ZW5f ZnJvbnQtb2JqcyA6PSB4ZW5fZHJtX2Zyb250Lm8gXAo+ID4gPiAgIAkJICAgICAgeGVuX2RybV9m cm9udF9kcnYubyBcCj4gPiA+ICsJCSAgICAgIHhlbl9kcm1fZnJvbnRfa21zLm8gXAo+ID4gPiAr CQkgICAgICB4ZW5fZHJtX2Zyb250X2Nvbm4ubyBcCj4gPiA+ICAgCQkgICAgICB4ZW5fZHJtX2Zy b250X2V2dGNobmwubyBcCj4gPiA+ICAgCQkgICAgICB4ZW5fZHJtX2Zyb250X3NoYnVmLm8gXAo+ ID4gPiAgIAkJICAgICAgeGVuX2RybV9mcm9udF9jZmcubwo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Nvbm4uYyBiL2RyaXZlcnMvZ3B1L2RybS94 ZW4veGVuX2RybV9mcm9udF9jb25uLmMKPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4g aW5kZXggMDAwMDAwMDAwMDAwLi5kOTk4NmEyZTFhM2IKPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfY29ubi5jCj4gPiA+IEBA IC0wLDAgKzEsMTI1IEBACj4gPiA+ICsvKgo+ID4gPiArICogIFhlbiBwYXJhLXZpcnR1YWwgRFJN IGRldmljZQo+ID4gPiArICoKPiA+ID4gKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiA+ID4gKyAqICAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKPiA+ID4gKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPiA+ID4gKyAqICAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiA+ID4gKyAqCj4gPiA+ICsgKiAgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ID4gPiAr ICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgo+ID4gPiArICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gPiA+ICsgKiAgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gPiA+ICsgKgo+ID4gPiArICogQ29weXJpZ2h0 IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0ZW1zIEluYy4KPiA+ID4gKyAqCj4gPiA+ICsgKiBBdXRo b3I6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFt LmNvbT4KPiA+ID4gKyAqLwo+ID4gPiArCj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNf aGVscGVyLmg+Cj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ID4gPiAr Cj4gPiA+ICsjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+Cj4gPiA+ICsKPiA+ID4gKyNpbmNs dWRlICJ4ZW5fZHJtX2Zyb250X2Nvbm4uaCIKPiA+ID4gKyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250 X2Rydi5oIgo+ID4gPiArCj4gPiA+ICtzdGF0aWMgc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3Bp cGVsaW5lICoKPiA+ID4gK3RvX3hlbl9kcm1fcGlwZWxpbmUoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvcikKPiA+ID4gK3sKPiA+ID4gKwlyZXR1cm4gY29udGFpbmVyX29mKGNvbm5lY3Rv ciwgc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lLCBjb25uKTsKPiA+ID4gK30KPiA+ ID4gKwo+ID4gPiArc3RhdGljIGNvbnN0IHVpbnQzMl90IHBsYW5lX2Zvcm1hdHNbXSA9IHsKPiA+ ID4gKwlEUk1fRk9STUFUX1JHQjU2NSwKPiA+ID4gKwlEUk1fRk9STUFUX1JHQjg4OCwKPiA+ID4g KwlEUk1fRk9STUFUX1hSR0I4ODg4LAo+ID4gPiArCURSTV9GT1JNQVRfQVJHQjg4ODgsCj4gPiA+ ICsJRFJNX0ZPUk1BVF9YUkdCNDQ0NCwKPiA+ID4gKwlEUk1fRk9STUFUX0FSR0I0NDQ0LAo+ID4g PiArCURSTV9GT1JNQVRfWFJHQjE1NTUsCj4gPiA+ICsJRFJNX0ZPUk1BVF9BUkdCMTU1NSwKPiA+ ID4gK307Cj4gPiA+ICsKPiA+ID4gK2NvbnN0IHVpbnQzMl90ICp4ZW5fZHJtX2Zyb250X2Nvbm5f Z2V0X2Zvcm1hdHMoaW50ICpmb3JtYXRfY291bnQpCj4gPiA+ICt7Cj4gPiA+ICsJKmZvcm1hdF9j b3VudCA9IEFSUkFZX1NJWkUocGxhbmVfZm9ybWF0cyk7Cj4gPiA+ICsJcmV0dXJuIHBsYW5lX2Zv cm1hdHM7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jf c3RhdHVzIGNvbm5lY3Rvcl9kZXRlY3QoCj4gPiA+ICsJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsIGJvb2wgZm9yY2UpCj4gPiA+ICt7Cj4gPiA+ICsJaWYgKGRybV9kZXZfaXNfdW5w bHVnZ2VkKGNvbm5lY3Rvci0+ZGV2KSkKPiA+ID4gKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNf ZGlzY29ubmVjdGVkOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29u bmVjdGVkOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIFhFTl9EUk1fTlVNX1ZJREVP X01PREVTCQkxCj4gPiA+ICsjZGVmaW5lIFhFTl9EUk1fQ1JUQ19WUkVGUkVTSF9IWgk2MAo+ID4g PiArCj4gPiA+ICtzdGF0aWMgaW50IGNvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcikKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9k cm1fcGlwZWxpbmUgKnBpcGVsaW5lID0KPiA+ID4gKwkJdG9feGVuX2RybV9waXBlbGluZShjb25u ZWN0b3IpOwo+ID4gPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOwo+ID4gPiArCXN0 cnVjdCB2aWRlb21vZGUgdmlkZW9tb2RlOwo+ID4gPiArCWludCB3aWR0aCwgaGVpZ2h0Owo+ID4g PiArCj4gPiA+ICsJbW9kZSA9IGRybV9tb2RlX2NyZWF0ZShjb25uZWN0b3ItPmRldik7Cj4gPiA+ ICsJaWYgKCFtb2RlKQo+ID4gPiArCQlyZXR1cm4gMDsKPiA+ID4gKwo+ID4gPiArCW1lbXNldCgm dmlkZW9tb2RlLCAwLCBzaXplb2YodmlkZW9tb2RlKSk7Cj4gPiA+ICsJdmlkZW9tb2RlLmhhY3Rp dmUgPSBwaXBlbGluZS0+d2lkdGg7Cj4gPiA+ICsJdmlkZW9tb2RlLnZhY3RpdmUgPSBwaXBlbGlu ZS0+aGVpZ2h0Owo+ID4gPiArCXdpZHRoID0gdmlkZW9tb2RlLmhhY3RpdmUgKyB2aWRlb21vZGUu aGZyb250X3BvcmNoICsKPiA+ID4gKwkJdmlkZW9tb2RlLmhiYWNrX3BvcmNoICsgdmlkZW9tb2Rl LmhzeW5jX2xlbjsKPiA+ID4gKwloZWlnaHQgPSB2aWRlb21vZGUudmFjdGl2ZSArIHZpZGVvbW9k ZS52ZnJvbnRfcG9yY2ggKwo+ID4gPiArCQl2aWRlb21vZGUudmJhY2tfcG9yY2ggKyB2aWRlb21v ZGUudnN5bmNfbGVuOwo+ID4gPiArCXZpZGVvbW9kZS5waXhlbGNsb2NrID0gd2lkdGggKiBoZWln aHQgKiBYRU5fRFJNX0NSVENfVlJFRlJFU0hfSFo7Cj4gPiA+ICsJbW9kZS0+dHlwZSA9IERSTV9N T0RFX1RZUEVfUFJFRkVSUkVEIHwgRFJNX01PREVfVFlQRV9EUklWRVI7Cj4gPiA+ICsKPiA+ID4g Kwlkcm1fZGlzcGxheV9tb2RlX2Zyb21fdmlkZW9tb2RlKCZ2aWRlb21vZGUsIG1vZGUpOwo+ID4g PiArCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsKPiA+ID4gKwlyZXR1cm4g WEVOX0RSTV9OVU1fVklERU9fTU9ERVM7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBp bnQgY29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwK PiA+ID4gKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gPiA+ICt7Cj4gPiA+ICsJ c3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSA9Cj4gPiA+ICsJCQl0 b194ZW5fZHJtX3BpcGVsaW5lKGNvbm5lY3Rvcik7Cj4gPiA+ICsKPiA+ID4gKwlpZiAobW9kZS0+ aGRpc3BsYXkgIT0gcGlwZWxpbmUtPndpZHRoKQo+ID4gPiArCQlyZXR1cm4gTU9ERV9FUlJPUjsK PiA+ID4gKwo+ID4gPiArCWlmIChtb2RlLT52ZGlzcGxheSAhPSBwaXBlbGluZS0+aGVpZ2h0KQo+ ID4gPiArCQlyZXR1cm4gTU9ERV9FUlJPUjsKPiA+ID4gKwo+ID4gPiArCXJldHVybiBNT0RFX09L Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0 b3JfaGVscGVyX2Z1bmNzIGNvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7Cj4gPiA+ICsJLmdldF9t b2RlcyA9IGNvbm5lY3Rvcl9nZXRfbW9kZXMsCj4gPiA+ICsJLm1vZGVfdmFsaWQgPSBjb25uZWN0 b3JfbW9kZV92YWxpZCwKPiA+ID4gK307Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBjb25uZWN0b3JfZnVuY3MgPSB7Cj4gPiA+ICsJLmRldGVj dCA9IGNvbm5lY3Rvcl9kZXRlY3QsCj4gPiA+ICsJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3By b2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCj4gPiA+ICsJLmRlc3Ryb3kgPSBkcm1fY29ubmVj dG9yX2NsZWFudXAsCj4gPiA+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9y X3Jlc2V0LAo+ID4gPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxw ZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKPiA+ID4gKwkuYXRvbWljX2Rlc3Ryb3lfc3Rh dGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKPiA+ID4gK307 Cj4gPiA+ICsKPiA+ID4gK2ludCB4ZW5fZHJtX2Zyb250X2Nvbm5faW5pdChzdHJ1Y3QgeGVuX2Ry bV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8sCj4gPiA+ICsJCXN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCj4gPiA+ICt7Cj4gPiA+ICsJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNv bm5lY3RvciwgJmNvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJu IGRybV9jb25uZWN0b3JfaW5pdChkcm1faW5mby0+ZHJtX2RldiwgY29ubmVjdG9yLAo+ID4gPiAr CQkmY29ubmVjdG9yX2Z1bmNzLCBEUk1fTU9ERV9DT05ORUNUT1JfVklSVFVBTCk7Cj4gPiA+ICt9 Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfY29u bi5oIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Nvbm4uaAo+ID4gPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjcwOGU4MGQ0NTk4NQo+ ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udF9jb25uLmgKPiA+ID4gQEAgLTAsMCArMSwzNSBAQAo+ID4gPiArLyoKPiA+ID4gKyAq ICBYZW4gcGFyYS12aXJ0dWFsIERSTSBkZXZpY2UKPiA+ID4gKyAqCj4gPiA+ICsgKiAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5Cj4gPiA+ICsgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gPiA+ICsgKiAgIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4gPiA+ ICsgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gPiA+ICsgKgo+ID4g PiArICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKPiA+ID4gKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiA+ID4gKyAqICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ID4gPiAr ICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ID4gPiAr ICoKPiA+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEVQQU0gU3lzdGVtcyBJbmMuCj4g PiA+ICsgKgo+ID4gPiArICogQXV0aG9yOiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3Nh bmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4gPiA+ICsgKi8KPiA+ID4gKwo+ID4gPiArI2lm bmRlZiBfX1hFTl9EUk1fRlJPTlRfQ09OTl9IXwo+ID4gPiArI2RlZmluZSBfX1hFTl9EUk1fRlJP TlRfQ09OTl9IXwo+ID4gPiArCj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ID4gKyNp bmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiA+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2VuY29kZXIu aD4KPiA+ID4gKwo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KPiA+ID4gKwo+ID4gPiAr c3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm87Cj4gPiA+ICsKPiA+ID4gK2NvbnN0IHVpbnQz Ml90ICp4ZW5fZHJtX2Zyb250X2Nvbm5fZ2V0X2Zvcm1hdHMoaW50ICpmb3JtYXRfY291bnQpOwo+ ID4gPiArCj4gPiA+ICtpbnQgeGVuX2RybV9mcm9udF9jb25uX2luaXQoc3RydWN0IHhlbl9kcm1f ZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvLAo+ID4gPiArCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yKTsKPiA+ID4gKwo+ID4gPiArI2VuZGlmIC8qIF9fWEVOX0RSTV9GUk9OVF9DT05O X0hfICovCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJv bnRfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZHJ2LmMKPiA+ID4g aW5kZXggYjM3NjRkNWVkMGY2Li5lODg2MmQyNmJhMjcgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dw dS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZHJ2LmMKPiA+ID4gQEAgLTIzLDYgKzIzLDcgQEAKPiA+ ID4gICAjaW5jbHVkZSAieGVuX2RybV9mcm9udC5oIgo+ID4gPiAgICNpbmNsdWRlICJ4ZW5fZHJt X2Zyb250X2NmZy5oIgo+ID4gPiAgICNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2Rydi5oIgo+ID4g PiArI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfa21zLmgiCj4gPiA+ICAgc3RhdGljIGludCBkdW1i X2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsCj4gPiA+ICAgCQlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpCj4gPiA+IEBAIC00MSw2 ICs0MiwxMyBAQCBzdGF0aWMgdm9pZCBmcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaikKPiA+ID4gICBzdGF0aWMgdm9pZCBvbl9mcmFtZV9kb25lKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYsCj4gPiA+ICAgCQlpbnQgY29ubl9pZHgsIHVpbnQ2NF90IGZiX2Nvb2tpZSkK PiA+ID4gICB7Cj4gPiA+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZv ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4gPiA+ICsKPiA+ID4gKwlpZiAodW5saWtl bHkoY29ubl9pZHggPj0gZHJtX2luZm8tPmNmZy0+bnVtX2Nvbm5lY3RvcnMpKQo+ID4gPiArCQly ZXR1cm47Cj4gPiA+ICsKPiA+ID4gKwl4ZW5fZHJtX2Zyb250X2ttc19vbl9mcmFtZV9kb25lKCZk cm1faW5mby0+cGlwZWxpbmVbY29ubl9pZHhdLAo+ID4gPiArCQkJZmJfY29va2llKTsKPiA+ID4g ICB9Cj4gPiA+ICAgc3RhdGljIHZvaWQgbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cj4gPiA+IEBAIC0xNTcsNiArMTY1LDEyIEBAIGludCB4ZW5fZHJtX2Zyb250X2Rydl9wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ID4gPiAgIAkJcmV0dXJuIHJldDsKPiA+ID4g ICAJfQo+ID4gPiArCXJldCA9IHhlbl9kcm1fZnJvbnRfa21zX2luaXQoZHJtX2luZm8pOwo+ID4g PiArCWlmIChyZXQpIHsKPiA+ID4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBE Uk0vS01TLCByZXQgJWRcbiIsIHJldCk7Cj4gPiA+ICsJCWdvdG8gZmFpbF9tb2Rlc2V0Owo+ID4g PiArCX0KPiA+ID4gKwo+ID4gPiAgIAlkZXYtPmlycV9lbmFibGVkID0gMTsKPiA+ID4gICAJcmV0 ID0gZHJtX2Rldl9yZWdpc3RlcihkZXYsIDApOwo+ID4gPiBAQCAtMTcyLDYgKzE4Niw3IEBAIGlu dCB4ZW5fZHJtX2Zyb250X2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ ID4gPiAgIGZhaWxfcmVnaXN0ZXI6Cj4gPiA+ICAgCWRybV9kZXZfdW5yZWdpc3RlcihkZXYpOwo+ ID4gPiArZmFpbF9tb2Rlc2V0Ogo+ID4gPiAgIAlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkZXYp Owo+ID4gPiAgIAlyZXR1cm4gcmV0Owo+ID4gPiAgIH0KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZW4v eGVuX2RybV9mcm9udF9kcnYuaAo+ID4gPiBpbmRleCBhYWE0NzY1MzVjMTMuLjU2MzMxOGIxOWYz NCAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Ry di5oCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9kcnYuaAo+ ID4gPiBAQCAtMjAsMTQgKzIwLDI0IEBACj4gPiA+ICAgI2RlZmluZSBfX1hFTl9EUk1fRlJPTlRf RFJWX0hfCj4gPiA+ICAgI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gPiA+ICsjaW5jbHVkZSA8ZHJt L2RybV9zaW1wbGVfa21zX2hlbHBlci5oPgo+ID4gPiAgICNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250 LmgiCj4gPiA+ICAgI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfY2ZnLmgiCj4gPiA+ICsjaW5jbHVk ZSAieGVuX2RybV9mcm9udF9jb25uLmgiCj4gPiA+ICAgc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJt X3BpcGVsaW5lIHsKPiA+ID4gICAJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9p bmZvOwo+ID4gPiAgIAlpbnQgaW5kZXg7Cj4gPiA+ICsKPiA+ID4gKwlzdHJ1Y3QgZHJtX3NpbXBs ZV9kaXNwbGF5X3BpcGUgcGlwZTsKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCBkcm1fY29ubmVjdG9y IGNvbm47Cj4gPiA+ICsJLyogdGhlc2UgYXJlIG9ubHkgZm9yIGNvbm5lY3RvciBtb2RlIGNoZWNr aW5nICovCj4gPiA+ICsJaW50IHdpZHRoLCBoZWlnaHQ7Cj4gPiA+ICsJLyogbGFzdCBiYWNrZW5k IGVycm9yIHNlZW4gb24gcGFnZSBmbGlwICovCj4gPiA+ICsJaW50IHBnZmxpcF9sYXN0X2Vycm9y Owo+ID4gPiAgIH07Cj4gPiA+ICAgc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gewo+ID4g PiBAQCAtMzUsNiArNDUsOCBAQCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyB7Cj4gPiA+ ICAgCXN0cnVjdCB4ZW5fZHJtX2Zyb250X29wcyAqZnJvbnRfb3BzOwo+ID4gPiAgIAlzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtX2RldjsKPiA+ID4gICAJc3RydWN0IHhlbl9kcm1fZnJvbnRfY2ZnICpj Zmc7Cj4gPiA+ICsKPiA+ID4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxpbmUgcGlw ZWxpbmVbWEVOX0RSTV9GUk9OVF9NQVhfQ1JUQ1NdOwo+ID4gPiAgIH07Cj4gPiA+ICAgc3RhdGlj IGlubGluZSB1aW50NjRfdCB4ZW5fZHJtX2Zyb250X2ZiX3RvX2Nvb2tpZSgKPiA+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9rbXMuYyBiL2RyaXZlcnMv Z3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9rbXMuYwo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmFkOTRjMjg4MzVjZAo+ID4gPiAtLS0gL2Rldi9u dWxsCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9rbXMuYwo+ ID4gPiBAQCAtMCwwICsxLDI5OSBAQAo+ID4gPiArLyoKPiA+ID4gKyAqICBYZW4gcGFyYS12aXJ0 dWFsIERSTSBkZXZpY2UKPiA+ID4gKyAqCj4gPiA+ICsgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gPiA+ICsg KiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5Cj4gPiA+ICsgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4gPiA+ICsgKiAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gPiA+ICsgKgo+ID4gPiArICogICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK PiA+ID4gKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKPiA+ID4gKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ID4gPiArICogICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ID4gPiArICoKPiA+ID4gKyAqIENv cHlyaWdodCAoQykgMjAxNi0yMDE4IEVQQU0gU3lzdGVtcyBJbmMuCj4gPiA+ICsgKgo+ID4gPiAr ICogQXV0aG9yOiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVu a29AZXBhbS5jb20+Cj4gPiA+ICsgKi8KPiA+ID4gKwo+ID4gPiArI2luY2x1ZGUgInhlbl9kcm1f ZnJvbnRfa21zLmgiCj4gPiA+ICsKPiA+ID4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ID4gPiAr I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWNfaGVscGVyLmg+Cj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KPiA+ID4gKyNpbmNs dWRlIDxkcm0vZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIuaD4KPiA+ID4gKwo+ID4gPiArI2lu Y2x1ZGUgInhlbl9kcm1fZnJvbnQuaCIKPiA+ID4gKyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2Nv bm4uaCIKPiA+ID4gKyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2Rydi5oIgo+ID4gPiArCj4gPiA+ ICtzdGF0aWMgc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICoKPiA+ID4gK3RvX3hl bl9kcm1fcGlwZWxpbmUoc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlKQo+ID4g PiArewo+ID4gPiArCXJldHVybiBjb250YWluZXJfb2YocGlwZSwgc3RydWN0IHhlbl9kcm1fZnJv bnRfZHJtX3BpcGVsaW5lLCBwaXBlKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZv aWQgZmJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKPiA+ID4gK3sKPiA+ID4g KwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8gPSBmYi0+ZGV2LT5kZXZf cHJpdmF0ZTsKPiA+ID4gKwo+ID4gPiArCWRybV9pbmZvLT5mcm9udF9vcHMtPmZiX2RldGFjaChk cm1faW5mby0+ZnJvbnRfaW5mbywKPiA+ID4gKwkJCXhlbl9kcm1fZnJvbnRfZmJfdG9fY29va2ll KGZiKSk7Cj4gPiA+ICsJZHJtX2dlbV9mYl9kZXN0cm95KGZiKTsKPiA+ID4gK30KPiA+ID4gKwo+ ID4gPiArc3RhdGljIHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgZmJfZnVuY3MgPSB7Cj4g PiA+ICsJLmRlc3Ryb3kgPSBmYl9kZXN0cm95LAo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiArc3Rh dGljIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAo+ID4gPiArCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsIGNvbnN0IHN0cnVjdCBkcm1fbW9k ZV9mYl9jbWQyICptb2RlX2NtZCkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9u dF9kcm1faW5mbyAqZHJtX2luZm8gPSBkZXYtPmRldl9wcml2YXRlOwo+ID4gPiArCXN0YXRpYyBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg KmdlbV9vYmo7Cj4gPiA+ICsJaW50IHJldDsKPiA+ID4gKwo+ID4gPiArCWZiID0gZHJtX2dlbV9m Yl9jcmVhdGVfd2l0aF9mdW5jcyhkZXYsIGZpbHAsIG1vZGVfY21kLCAmZmJfZnVuY3MpOwo+ID4g PiArCWlmIChJU19FUlJfT1JfTlVMTChmYikpCj4gPiA+ICsJCXJldHVybiBmYjsKPiA+ID4gKwo+ ID4gPiArCWdlbV9vYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZmlscCwgbW9kZV9jbWQtPmhh bmRsZXNbMF0pOwo+ID4gPiArCWlmICghZ2VtX29iaikgewo+ID4gPiArCQlEUk1fRVJST1IoIkZh aWxlZCB0byBsb29rdXAgR0VNIG9iamVjdFxuIik7Cj4gPiA+ICsJCXJldCA9IC1FTk9FTlQ7Cj4g PiA+ICsJCWdvdG8gZmFpbDsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlkcm1fZ2VtX29iamVj dF91bnJlZmVyZW5jZV91bmxvY2tlZChnZW1fb2JqKTsKPiA+ID4gKwo+ID4gPiArCXJldCA9IGRy bV9pbmZvLT5mcm9udF9vcHMtPmZiX2F0dGFjaCgKPiA+ID4gKwkJCWRybV9pbmZvLT5mcm9udF9p bmZvLAo+ID4gPiArCQkJeGVuX2RybV9mcm9udF9kYnVmX3RvX2Nvb2tpZShnZW1fb2JqKSwKPiA+ ID4gKwkJCXhlbl9kcm1fZnJvbnRfZmJfdG9fY29va2llKGZiKSwKPiA+ID4gKwkJCWZiLT53aWR0 aCwgZmItPmhlaWdodCwgZmItPmZvcm1hdC0+Zm9ybWF0KTsKPiA+ID4gKwlpZiAocmV0IDwgMCkg ewo+ID4gPiArCQlEUk1fRVJST1IoIkJhY2sgZmFpbGVkIHRvIGF0dGFjaCBGQiAlcDogJWRcbiIs IGZiLCByZXQpOwo+ID4gPiArCQlnb3RvIGZhaWw7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJ cmV0dXJuIGZiOwo+ID4gPiArCj4gPiA+ICtmYWlsOgo+ID4gPiArCWRybV9nZW1fZmJfZGVzdHJv eShmYik7Cj4gPiA+ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiA+ID4gK30KPiA+ID4gKwo+ID4g PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgbW9kZV9jb25maWdf ZnVuY3MgPSB7Cj4gPiA+ICsJLmZiX2NyZWF0ZSA9IGZiX2NyZWF0ZSwKPiA+ID4gKwkuYXRvbWlj X2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCj4gPiA+ICsJLmF0b21pY19jb21taXQg PSBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQsCj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ICtzdGF0 aWMgaW50IGRpc3BsYXlfc2V0X2NvbmZpZyhzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUg KnBpcGUsCj4gPiA+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCj4gPiA+ICt7Cj4gPiA+ ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSA9Cj4gPiA+ICsJ CQl0b194ZW5fZHJtX3BpcGVsaW5lKHBpcGUpOwo+ID4gPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0 YyA9ICZwaXBlLT5jcnRjOwo+ID4gPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9pbmZvICpk cm1faW5mbyA9IHBpcGVsaW5lLT5kcm1faW5mbzsKPiA+ID4gKwlpbnQgcmV0Owo+ID4gPiArCj4g PiA+ICsJaWYgKGZiKQo+ID4gPiArCQlyZXQgPSBkcm1faW5mby0+ZnJvbnRfb3BzLT5tb2RlX3Nl dChwaXBlbGluZSwKPiA+ID4gKwkJCQljcnRjLT54LCBjcnRjLT55LAo+ID4gPiArCQkJCWZiLT53 aWR0aCwgZmItPmhlaWdodCwgZmItPmZvcm1hdC0+Y3BwWzBdICogOCwKPiA+ID4gKwkJCQl4ZW5f ZHJtX2Zyb250X2ZiX3RvX2Nvb2tpZShmYikpOwo+ID4gPiArCWVsc2UKPiA+ID4gKwkJcmV0ID0g ZHJtX2luZm8tPmZyb250X29wcy0+bW9kZV9zZXQocGlwZWxpbmUsCj4gPiA+ICsJCQkJMCwgMCwg MCwgMCwgMCwKPiA+ID4gKwkJCQl4ZW5fZHJtX2Zyb250X2ZiX3RvX2Nvb2tpZShOVUxMKSk7Cj4g PiBUaGlzIGlzIGEgYml0IG11Y2ggbGF5ZXJpbmcsIHRoZSBpZiAoZmIpIGNhc2UgY29ycmVzcG9u ZHMgdG8gdGhlCj4gPiBkaXNwbGF5X2VuYWJsZS9kaXNhYmxlIGhvb2tzLCBwbHMgZm9sZCB0aGF0 IGluIGluc3RlYWQgb2YgdGhlIGluZGlyZWN0aW9uLgo+ID4gc2ltcGxlIGhlbHBlcnMgZ3VhcmFu dGVlIHRoYXQgd2hlbiB0aGUgZGlzcGxheSBpcyBvbiwgdGhlbiB5b3UgaGF2ZSBhbiBmYi4KPiAx LiBPaywgdGhlIG9ubHkgcmVhc29uIGZvciBoYXZpbmcgdGhpcyBmdW5jdGlvbiB3YXMgdG8ga2Vl cAo+IGZyb250X29wcy0+bW9kZV9zZXQgY2FsbHMgYXQgb25lIHBsYWNlICh3aWxsIGJlIHJlZmFj dG9yZWQKPiB0byBiZSBhIGRpcmVjdCBjYWxsLCBub3QgdmlhIGZyb250X29wcykuCj4gMi4gVGhl IGlmIChmYikgY2hlY2sgd2FzIG1lYW50IG5vdCB0byBjaGVjayBpZiBzaW1wbGUgaGVscGVycwo+ IG1heSBnaXZlIHVzIHNvbWUgd3JvbmcgdmFsdWUgd2hlbiB3ZSBkbyBub3QgZXhwZWN0OiB0aGVy ZSBpcwo+IG5vdGhpbmcgd3Jvbmcgd2l0aCB0aGVtLiBUaGUgY2hlY2sgd2FzIGZvciAyIGNhc2Vz IHdoZW4gdGhpcwo+IGZ1bmN0aW9uIHdhcyBjYWxsZWQ6IHdpdGggZmIgIT0gTlVMTCBvbiBkaXNw bGF5IGVuYWJsZSBhbmQKPiB3aXRoIGZiID09IE5VTEwgb24gZGlzcGxheSBkaXNhYmxlLCBlLmcu IGZiIHdhcyB1c2VkIGFzIGEKPiBmbGFnIGluIHRoaXMgY2hlY2suCgpZZWFoIHRoYXQncyB3aGF0 IEkgbWVhbnQgLSBpdCBpcyBuZWVkbGVzc2x5IGNvbmZ1c2luZzogWW91IGdldCAyIGV4cGxpY2l0 CmVuYWJsZS9kaXNhYmxlIGNhbGxiYWNrcywgdGhlbiB5b3Ugc3F1YXNoIHRoZW0gaW50byAxIGZ1 bmN0aW9uIGNhbGwsIG9ubHkKdG8gcmVxdWlyZSBhbgoKaWYgKGRvX0lfbmVlZF90b19lbmFibGVf b3JfZGlzYWJsZSkgewoJLyogY29kZSB0aGF0IHJlYWxseSBzaG91bGQgYmUgZGlyZWN0bHkgcHV0 IGluIHRoZSBlbmFibGUgY2FsbGJhY2sgKi8KfSBlbHNlIHsKCS8qIGNvZGUgdGhhdCByZWFsbHkg c2hvdWxkIGJlIGRpcmVjdGx5IHB1dCBpbiB0aGUgZW5hYmxlIGNhbGxiYWNrICovCn0KCkp1c3Qg YSBiaXQgb2YgaW5kaXJlY3Rpb24gd2hlcmUgSSBkaWRudCcgc2VlIHRoZSBwb2ludC4KCkFzaWRl IGZvciB3aHkgdGhpcyBtYXR0ZXJzOiBXaGVuIHJlZmFjdG9yaW5nIHRoZSBlbnRpcmUgc3Vic3lz dGVtIHlvdSBuZWVkCnRvIGJlIGFibGUgdG8gcXVpY2tseSB1bmRlcnN0YW5kIGhvdyBhbGwgdGhl IGRyaXZlcnMgd29yayBpbiBhIHNwZWNpZmljCmNhc2UsIHdpdGhvdXQgYmVpbmcgYW4gZXhwZXJ0 IG9uIHRoYXQgZHJpdmVyLiBJZiB0aGVyZSdzIHZlcnkgbGl0dGxlCmluZGlyZWN0aW9uIGJldHdl ZW4gdGhlIHNoYXJlZCBkcm0gY29uY2VwdHMvc3RydWN0cy9jYWxsYmFja3MgYW5kIHRoZQphY3R1 YWwgZHJpdmVyIGNvZGUsIHRoZW4gdGhhdCdzIGVhc3kuIElmIHRoZXJlJ3MgYSBidW5jaCBvZiBj YWxsYmFjawpsYXllcnMgb3IgaW5kaXJlY3Rpb25zIGxpa2UgdGhlIGFib3ZlLCB5b3UgbWFrZSBz dWJzeXN0ZW0gcmVmYWN0b3JpbmcKaGFyZGVyIGZvciBubyByZWFzb24uIEFuZCBpbiB1cHN0cmVh bSB3ZSBvcHRpbWl6ZSBmb3IgdGhlIG92ZXJhbGwKc3Vic3lzdGVtLCBub3QgaW5kaXZpZHVhbCBk cml2ZXJzLgoKPiAzLiBJIHdpbGwgcmVtb3ZlIHRoaXMgZnVuY3Rpb24gYXQgYWxsIGFuZCB3aWxs IG1ha2UgZGlyZWN0IGNhbGxzCj4gdG8gdGhlIGJhY2tlbmQgb24gLmRpc3BsYXlfe2VuYWJsZXxk aXNhYmxlfQo+ID4gCj4gPiBNYXliZSB3ZSBuZWVkIHRvIGZpeCB0aGUgZG9jcywgcGxzIGNoZWNr IGFuZCBpZiB0aGF0J3Mgbm90IGNsZWFyLCBzdWJtaXQgYQo+ID4ga2VybmVsLWRvYyBwYXRjaCBm b3IgdGhlIHNpbXBsZSBwaXBlIGhlbHBlcnMuCj4gbm8sIG5vdGhpbmcgd3JvbmcgaGVyZSwganVz dCBzZWUgbXkgcmVhc29uaW5nIGFib3ZlCj4gPiA+ICsKPiA+ID4gKwlpZiAocmV0KQo+ID4gPiAr CQlEUk1fRVJST1IoIkZhaWxlZCB0byBzZXQgbW9kZSB0byBiYWNrOiAlZFxuIiwgcmV0KTsKPiA+ ID4gKwo+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2 b2lkIGRpc3BsYXlfZW5hYmxlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwK PiA+ID4gKwkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ID4gPiArewo+ID4g PiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZwaXBlLT5jcnRjOwo+ID4gPiArCXN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiID0gcGlwZS0+cGxhbmUuc3RhdGUtPmZiOwo+ID4gPiArCj4gPiA+ ICsJaWYgKGRpc3BsYXlfc2V0X2NvbmZpZyhwaXBlLCBmYikgPT0gMCkKPiA+ID4gKwkJZHJtX2Ny dGNfdmJsYW5rX29uKGNydGMpOwo+ID4gSSBnZXQgdGhlIGltcHJlc3Npb24geW91ciBkcml2ZXIg ZG9lc24ndCBzdXBwb3J0IHZibGFua3MgKHRoZSBwYWdlIGZsaXAKPiA+IGNvZGUgYXQgbGVhc3Qg bG9va3MgbGlrZSBpdCdzIG9ubHkgZ2VuZXJhdGluZyBhIHNpbmdsZSBldmVudCksCj4geWVzLCB0 aGlzIGlzIHRydWUKPiA+ICAgeW91IGFsc28KPiA+IGRvbid0IGhhdmUgYSBlbmFibGUvZGlzYWJs ZV92YmxhbmsgaW1wbGVtZW50YXRpb24uCj4gdGhpcyBpcyBiZWNhdXNlIHdpdGggbXkgcHJldmlv dXMgcGF0Y2hlcyBbMV0gdGhlc2UgYXJlIG5vdyBoYW5kbGVkCj4gYnkgc2ltcGxlIGhlbHBlcnMs IHNvIG5vIG5lZWQgdG8gcHJvdmlkZSBkdW1teSBvbmVzIGluIHRoZSBkcml2ZXIKPiA+ICAgSWYg dGhlcmUncyBubyB2YmxhbmsKPiA+IGhhbmRsaW5nIHRoZW4gdGhpcyBzaG91bGRuJ3QgYmUgbmVl ZGVkLgo+IHllcywgSSB3aWxsIHJld29yayB0aGUgY29kZSwgcGxlYXNlIHNlZSBiZWxvdwo+ID4g PiArCWVsc2UKPiA+ID4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIGRpc3BsYXlcbiIp Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBkaXNwbGF5X2Rpc2FibGUoc3Ry dWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlKQo+ID4gPiArewo+ID4gPiArCXN0cnVj dCBkcm1fY3J0YyAqY3J0YyA9ICZwaXBlLT5jcnRjOwo+ID4gPiArCj4gPiA+ICsJZGlzcGxheV9z ZXRfY29uZmlnKHBpcGUsIE5VTEwpOwo+ID4gPiArCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7 Cj4gPiA+ICsJLyogZmluYWwgY2hlY2sgZm9yIHN0YWxsZWQgZXZlbnRzICovCj4gPiA+ICsJaWYg KGNydGMtPnN0YXRlLT5ldmVudCAmJiAhY3J0Yy0+c3RhdGUtPmFjdGl2ZSkgewo+ID4gPiArCQl1 bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gPiArCj4gPiA+ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZj cnRjLT5kZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiA+ID4gKwkJZHJtX2NydGNfc2VuZF92Ymxh bmtfZXZlbnQoY3J0YywgY3J0Yy0+c3RhdGUtPmV2ZW50KTsKPiA+ID4gKwkJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cj4gPiA+ICsJCWNydGMt PnN0YXRlLT5ldmVudCA9IE5VTEw7Cj4gPiA+ICsJfQo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICt2 b2lkIHhlbl9kcm1fZnJvbnRfa21zX29uX2ZyYW1lX2RvbmUoCj4gPiA+ICsJCXN0cnVjdCB4ZW5f ZHJtX2Zyb250X2RybV9waXBlbGluZSAqcGlwZWxpbmUsCj4gPiA+ICsJCXVpbnQ2NF90IGZiX2Nv b2tpZSkKPiA+ID4gK3sKPiA+ID4gKwlkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKCZwaXBlbGluZS0+ cGlwZS5jcnRjKTsKPiA+IEhtLCBhZ2FpbiB0aGlzIGRvZXNuJ3QgbG9vayBsaWtlIHJlYWwgdmJs YW5rLCBidXQgb25seSBhIHBhZ2UtZmxpcCBkb25lCj4gPiBldmVudC4gSWYgdGhhdCdzIGNvcnJl Y3QgdGhlbiBwbGVhc2UgZG9uJ3QgdXNlIHRoZSB2YmxhbmsgbWFjaGluZXJ5LCBidXQKPiA+IGp1 c3Qgc3RvcmUgdGhlIGV2ZW50IGludGVybmFsbHkgKHByb3RlY3RlZCB3aXRoIHlvdXIgb3duIHBy aXZhdGUgc3BpbmxvY2spCj4gV2h5IGNhbid0IEkgdXNlICZkZXYtPmV2ZW50X2xvY2s/IEFueXdh eXMgZm9yIGhhbmRsaW5nCj4gcGFnZS1mbGlwIGV2ZW50cyBJIHdpbGwgbmVlZCB0byBsb2NrIG9u IGl0LCBzbyBJIGNhbiBkbwo+IGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50PwoKWWVhaCB5b3Ug Y2FuIHJldXNlIHRoZSBldmVudF9sb2NrIHRvbywgdGhhdCdzIHdoYXQgbWFueSBkcml2ZXJzIGRv LgoKPiA+IGFuZCBzZW5kIGl0IG91dCB1c2luZyBkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudCBk aXJlY3RseS4gTm8gY2FsbHMgdG8KPiA+IGFybV92YmxhbmtfZXZlbnQgb3IgYW55IG9mIHRoZSBv dGhlciB2YmxhbmsgaW5mcmFzdHJ1Y3R1cmUgc2hvdWxkIGJlCj4gPiBuZWVkZWQuCj4gd2lsbCBy ZS13b3JrLCBlLmcuIHdpbGwgc3RvcmUgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50Cj4gb24gLmRp c3BsYXlfdXBkYXRlIGFuZCBzZW5kIG91dCBvbiBwYWdlIGZsaXAgZXZlbnQgZnJvbSB0aGUKPiBi YWNrZW5kCj4gPiBBbHNvIHBsZWFzZSByZW1vdmUgdGhlIGRybV92YmxhbmtfaW5pdCgpIGNhbGws IHNpbmNlIHlvdXIgaHcgZG9lc24ndAo+ID4gcmVhbGx5IGhhdmUgdmJsYW5rcy4gQW5kIGV4cG9z aW5nIHZibGFua3MgdG8gdXNlcnNwYWNlIHdpdGhvdXQKPiA+IGltcGxlbWVudGluZyB0aGVtIGlz IGNvbmZ1c2luZy4KPiB3aWxsIHJlbW92ZSBhbGwgdmJsYW5rIGhhbmRsaW5nIGF0IGFsbCB3aXRo IHRoZSByZS13b3JrIGFib3ZlCj4gPiAKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZv aWQgZGlzcGxheV9zZW5kX3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUg KnBpcGUsCj4gPiA+ICsJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZSkK PiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSA9IGRy bV9hdG9taWNfZ2V0X25ld19wbGFuZV9zdGF0ZSgKPiA+ID4gKwkJCW9sZF9wbGFuZV9zdGF0ZS0+ c3RhdGUsICZwaXBlLT5wbGFuZSk7Cj4gPiA+ICsKPiA+ID4gKwkvKgo+ID4gPiArCSAqIElmIG9s ZF9wbGFuZV9zdGF0ZS0+ZmIgaXMgTlVMTCBhbmQgcGxhbmVfc3RhdGUtPmZiIGlzIG5vdCwKPiA+ ID4gKwkgKiB0aGVuIHRoaXMgaXMgYW4gYXRvbWljIGNvbW1pdCB3aGljaCB3aWxsIGVuYWJsZSBk aXNwbGF5Lgo+ID4gPiArCSAqIElmIG9sZF9wbGFuZV9zdGF0ZS0+ZmIgaXMgbm90IE5VTEwgYW5k IHBsYW5lX3N0YXRlLT5mYiBpcywKPiA+ID4gKwkgKiB0aGVuIHRoaXMgaXMgYW4gYXRvbWljIGNv bW1pdCB3aGljaCB3aWxsIGRpc2FibGUgZGlzcGxheS4KPiA+ID4gKwkgKiBJZ25vcmUgdGhlc2Ug YW5kIGRvIG5vdCBzZW5kIHBhZ2UgZmxpcCBhcyB0aGlzIGZyYW1lYnVmZmVyIHdpbGwgYmUKPiA+ ID4gKwkgKiBzZW50IHRvIHRoZSBiYWNrZW5kIGFzIGEgcGFydCBvZiBkaXNwbGF5X3NldF9jb25m aWcgY2FsbC4KPiA+ID4gKwkgKi8KPiA+ID4gKwlpZiAob2xkX3BsYW5lX3N0YXRlLT5mYiAmJiBw bGFuZV9zdGF0ZS0+ZmIpIHsKPiA+ID4gKwkJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVs aW5lICpwaXBlbGluZSA9Cj4gPiA+ICsJCQkJdG9feGVuX2RybV9waXBlbGluZShwaXBlKTsKPiA+ ID4gKwkJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0gcGlwZWxpbmUt PmRybV9pbmZvOwo+ID4gPiArCQlpbnQgcmV0Owo+ID4gPiArCj4gPiA+ICsJCXJldCA9IGRybV9p bmZvLT5mcm9udF9vcHMtPnBhZ2VfZmxpcChkcm1faW5mby0+ZnJvbnRfaW5mbywKPiA+ID4gKwkJ CQlwaXBlbGluZS0+aW5kZXgsCj4gPiA+ICsJCQkJeGVuX2RybV9mcm9udF9mYl90b19jb29raWUo cGxhbmVfc3RhdGUtPmZiKSk7Cj4gPiA+ICsJCXBpcGVsaW5lLT5wZ2ZsaXBfbGFzdF9lcnJvciA9 IHJldDsKPiA+ID4gKwkJaWYgKHJldCkgewo+ID4gPiArCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8g c2VuZCBwYWdlIGZsaXAgcmVxdWVzdCB0byBiYWNrZW5kOiAlZFxuIiwgcmV0KTsKPiA+ID4gKwkJ CS8qCj4gPiA+ICsJCQkgKiBBcyB3ZSBhcmUgYXQgY29tbWl0IHN0YWdlIHRoZSBEUk0gY29yZSB3 aWxsIGFueXdheXMKPiA+ID4gKwkJCSAqIHdhaXQgZm9yIHRoZSB2YmxhbmsgYW5kIGtub3dzIG5v dGhpbmcgYWJvdXQgb3VyCj4gPiA+ICsJCQkgKiBmYWlsdXJlLiBUaGUgYmVzdCB3ZSBjYW4gZG8g aXMgdG8gaGFuZGxlCj4gPiA+ICsJCQkgKiB2Ymxhbmsgbm93LCBzbyB0aGVyZSBpcyBubyB2Ymxh bmsvZmxpcF9kb25lCj4gPiA+ICsJCQkgKiB0aW1lIG91dHMKPiA+ID4gKwkJCSAqLwo+ID4gPiAr CQkJZHJtX2NydGNfaGFuZGxlX3ZibGFuaygmcGlwZWxpbmUtPnBpcGUuY3J0Yyk7Cj4gPiA+ICsJ CX0KPiA+ID4gKwl9Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgZGlzcGxheV9w cmVwYXJlX2ZiKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwKPiA+ID4gKwkJ c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gPiA+ICt7Cj4gPiA+ICsJc3Ry dWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSA9Cj4gPiA+ICsJCQl0b194 ZW5fZHJtX3BpcGVsaW5lKHBpcGUpOwo+ID4gPiArCj4gPiA+ICsJaWYgKHBpcGVsaW5lLT5wZ2Zs aXBfbGFzdF9lcnJvcikgewo+ID4gPiArCQlpbnQgcmV0Owo+ID4gPiArCj4gPiA+ICsJCS8qIGlm IHByZXZpb3VzIHBhZ2UgZmxpcCBkaWRuJ3Qgc3VjY2VlZCB0aGVuIHJlcG9ydCB0aGUgZXJyb3Ig Ki8KPiA+ID4gKwkJcmV0ID0gcGlwZWxpbmUtPnBnZmxpcF9sYXN0X2Vycm9yOwo+ID4gPiArCQkv KiBhbmQgbGV0IHVzIHRyeSB0byBwYWdlIGZsaXAgbmV4dCB0aW1lICovCj4gPiA+ICsJCXBpcGVs aW5lLT5wZ2ZsaXBfbGFzdF9lcnJvciA9IDA7Cj4gPiA+ICsJCXJldHVybiByZXQ7Cj4gPiA+ICsJ fQo+ID4gTm9wZSwgdGhpcyBpc24ndCBob3cgdGhlIHVhcGkgd29ya3MuIElmIHlvdXIgZmxpcHMg ZmFpbCB0aGVuIHdlIG1pZ2h0IG5lZWQKPiA+IHRvIGFkZCBzb21lIGVycm9yIHN0YXR1cyB0aGlu ZyB0byB0aGUgZHJtIGV2ZW50cywgYnV0IHlvdSBjYW4ndCBtYWtlIHRoZQo+ID4gbmV4dCBmbGlw IGZhaWwuCj4gV2VsbCwgeWVzLCB0aGVyZSBpcyBubyB3YXkgZm9yIG1lIHRvIHRlbGwgdGhhdCB0 aGUgcGFnZSBmbGlwCj4gaGFzIGZhaWxlZCwgc28gdGhpcyBpcyB3aHkgSSB0cmllZCB0byBkbyB0 aGlzIHdvcmthcm91bmQgd2l0aAo+IHRoZSBuZXh0IHBhZ2UtZmxpcC4gVGhlIHJlYXNvbiBmb3Ig dGhhdCBpcyB0aGF0IGlmLCBmb3IgZXhhbXBsZSwKPiB3ZSBhcmUgZGlzY29ubmVjdGVkIGZyb20g dGhlIGJhY2tlbmQgZm9yIHNvbWUgcmVhc29uLCB0aGVyZSBpcwo+IG5vIHdheSBmb3IgbWUgdG8g dGVsbCB0aGUgdXNlci1zcGFjZSB0aGF0IGhleSwgcGxlYXNlLCBkbyBub3QKPiBzZW5kIGFueSBv dGhlciBwYWdlIGZsaXBzLiBJZiBiYWNrZW5kIGNhbiByZWNvdmVyIGFuZCB0aGF0IHdhcwo+IGEg b25lIHRpbWUgZXJyb3IgdGhlbiB5ZXMsIHRoZSBjb2RlIEkgaGF2ZSB3aWxsIGRvIHdyb25nIHRo aW5nCj4gKGZhaWwgdGhlIGN1cnJlbnQgcGFnZSBmbGlwKSwgYnV0IGlmIHRoZSBlcnJvciBzdGF0 ZSBpcyBwZXJzaXN0ZW50Cj4gdGhlbiBJIHdpbGwgYmUgYWJsZSB0byB0ZWxsIHRoZSB1c2VyLXNw YWNlIHRvIHN0b3AgYnkgcmV0dXJuaW5nIGVycm9ycy4KPiBUaGlzIGlzIGtpbmQgb2YgdHJhZGUt b2ZmIHdoaWNoIEkgYW0gbm90IHN1cmUgaG93IHRvIHNvbHZlIGNvcnJlY3RseS4KPiAKPiBEbyB5 b3UgdGhpbmsgSSBjYW4gcmVtb3ZlIHRoaXMgd29ya2Fyb3VuZCBjb21wbGV0ZWx5PwoKWWVzLiBJ ZiB5b3Ugd2FudCB0byB0ZWxsIHVzZXJzcGFjZSB0aGF0IHRoZSBiYWNrZW5kIGlzIGdvbmUsIHNl bmQgYQpob3RwbHVnIHVldmVudCBhbmQgdXBkYXRlIHRoZSBjb25uZWN0b3Igc3RhdHVzIHRvIGRp c2Nvbm5lY3RlZC4gSG90cGx1Zwp1ZXZlbnRzIGlzIGhvdyB3ZSB0ZWxsIHVzZXJzcGFjZSBhYm91 dCBhc3luY2hyb25vdXMgY2hhbmdlcy4gV2UgYWxzbyBoYXZlCnNwZWNpYWwgc3R1ZmYgdG8gc2ln bmFsIGRpc3BsYXkgY2FibGUgaXNzdWUgdGhhdCBtaWdodCByZXF1aXJlIHBpY2tpbmcgYQpsb3dl ciByZXNvbHV0aW9uIChEUCBsaW5rIHRyYWluaW5nKSBhbmQgd2hlbiBIRENQIGVuY3J5cHRpb24g ZmFpbGVkLgoKU2VuZGluZyBiYWNrIHJhbmRvbSBlcnJvcnMgb24gcGFnZWZsaXBzIGp1c3QgY29u ZnVzZXMgdGhlIGNvbXBvc2l0b3IsIGFuZAphbGwgY29ycmVjdGx5IHdvcmtpbmcgY29tcG9zaXRv cnMgd2lsbCBsaXN0ZW4gdG8gaG90cGx1ZyBldmVudHMgYW5kCnJlcHJvYmUgYWxsIHRoZSBvdXRw dXRzIGFuZCBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gaWYgbmVjZXNzYXJ5LgotRGFuaWVsCgo+ ID4gLURhbmllbAo+ID4gCj4gPiA+ICsJcmV0dXJuIGRybV9nZW1fZmJfcHJlcGFyZV9mYigmcGlw ZS0+cGxhbmUsIHBsYW5lX3N0YXRlKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZv aWQgZGlzcGxheV91cGRhdGUoc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAo+ ID4gPiArCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUpCj4gPiA+ICt7 Cj4gPiA+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJnBpcGUtPmNydGM7Cj4gPiA+ICsJc3Ry dWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQ7Cj4gPiA+ICsKPiA+ID4gKwlldmVu dCA9IGNydGMtPnN0YXRlLT5ldmVudDsKPiA+ID4gKwlpZiAoZXZlbnQpIHsKPiA+ID4gKwkJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiA+ID4gKwkJdW5zaWduZWQgbG9uZyBm bGFnczsKPiA+ID4gKwo+ID4gPiArCQljcnRjLT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOwo+ID4gPiAr Cj4gPiA+ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiA+ ID4gKwkJaWYgKGRybV9jcnRjX3ZibGFua19nZXQoY3J0YykgPT0gMCkKPiA+ID4gKwkJCWRybV9j cnRjX2FybV92YmxhbmtfZXZlbnQoY3J0YywgZXZlbnQpOwo+ID4gPiArCQllbHNlCj4gPiA+ICsJ CQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBldmVudCk7Cj4gPiA+ICsJCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwo+ID4gPiArCX0KPiA+ ID4gKwkvKgo+ID4gPiArCSAqIFNlbmQgcGFnZSBmbGlwIHJlcXVlc3QgdG8gdGhlIGJhY2tlbmQg KmFmdGVyKiB3ZSBoYXZlIGV2ZW50IGFybWVkLwo+ID4gPiArCSAqIHNlbnQgYWJvdmUsIHNvIG9u IHBhZ2UgZmxpcCBkb25lIGV2ZW50IGZyb20gdGhlIGJhY2tlbmQgd2UgY2FuCj4gPiA+ICsJICog ZGVsaXZlciBpdCB3aGlsZSBoYW5kbGluZyB2YmxhbmsuCj4gPiA+ICsJICovCj4gPiA+ICsJZGlz cGxheV9zZW5kX3BhZ2VfZmxpcChwaXBlLCBvbGRfcGxhbmVfc3RhdGUpOwo+ID4gPiArfQo+ID4g PiArCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2Z1 bmNzIGRpc3BsYXlfZnVuY3MgPSB7Cj4gPiA+ICsJLmVuYWJsZSA9IGRpc3BsYXlfZW5hYmxlLAo+ ID4gPiArCS5kaXNhYmxlID0gZGlzcGxheV9kaXNhYmxlLAo+ID4gPiArCS5wcmVwYXJlX2ZiID0g ZGlzcGxheV9wcmVwYXJlX2ZiLAo+ID4gPiArCS51cGRhdGUgPSBkaXNwbGF5X3VwZGF0ZSwKPiA+ ID4gK307Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgZGlzcGxheV9waXBlX2luaXQoc3RydWN0 IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvLAo+ID4gPiArCQlpbnQgaW5kZXgsIHN0 cnVjdCB4ZW5fZHJtX2Zyb250X2NmZ19jb25uZWN0b3IgKmNmZywKPiA+ID4gKwkJc3RydWN0IHhl bl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gZHJtX2luZm8tPmRybV9kZXY7Cj4gPiA+ICsJY29uc3QgdWlu dDMyX3QgKmZvcm1hdHM7Cj4gPiA+ICsJaW50IGZvcm1hdF9jb3VudDsKPiA+ID4gKwlpbnQgcmV0 Owo+ID4gPiArCj4gPiA+ICsJcGlwZWxpbmUtPmRybV9pbmZvID0gZHJtX2luZm87Cj4gPiA+ICsJ cGlwZWxpbmUtPmluZGV4ID0gaW5kZXg7Cj4gPiA+ICsJcGlwZWxpbmUtPmhlaWdodCA9IGNmZy0+ aGVpZ2h0Owo+ID4gPiArCXBpcGVsaW5lLT53aWR0aCA9IGNmZy0+d2lkdGg7Cj4gPiA+ICsKPiA+ ID4gKwlyZXQgPSB4ZW5fZHJtX2Zyb250X2Nvbm5faW5pdChkcm1faW5mbywgJnBpcGVsaW5lLT5j b25uKTsKPiA+ID4gKwlpZiAocmV0KQo+ID4gPiArCQlyZXR1cm4gcmV0Owo+ID4gPiArCj4gPiA+ ICsJZm9ybWF0cyA9IHhlbl9kcm1fZnJvbnRfY29ubl9nZXRfZm9ybWF0cygmZm9ybWF0X2NvdW50 KTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9pbml0KGRl diwgJnBpcGVsaW5lLT5waXBlLAo+ID4gPiArCQkJJmRpc3BsYXlfZnVuY3MsIGZvcm1hdHMsIGZv cm1hdF9jb3VudCwKPiA+ID4gKwkJCU5VTEwsICZwaXBlbGluZS0+Y29ubik7Cj4gPiA+ICt9Cj4g PiA+ICsKPiA+ID4gK2ludCB4ZW5fZHJtX2Zyb250X2ttc19pbml0KHN0cnVjdCB4ZW5fZHJtX2Zy b250X2RybV9pbmZvICpkcm1faW5mbykKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gZHJtX2luZm8tPmRybV9kZXY7Cj4gPiA+ICsJaW50IGksIHJldDsKPiA+ID4gKwo+ ID4gPiArCWRybV9tb2RlX2NvbmZpZ19pbml0KGRldik7Cj4gPiA+ICsKPiA+ID4gKwlkZXYtPm1v ZGVfY29uZmlnLm1pbl93aWR0aCA9IDA7Cj4gPiA+ICsJZGV2LT5tb2RlX2NvbmZpZy5taW5faGVp Z2h0ID0gMDsKPiA+ID4gKwlkZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IDQwOTU7Cj4gPiA+ ICsJZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gMjA0NzsKPiA+ID4gKwlkZXYtPm1vZGVf Y29uZmlnLmZ1bmNzID0gJm1vZGVfY29uZmlnX2Z1bmNzOwo+ID4gPiArCj4gPiA+ICsJZm9yIChp ID0gMDsgaSA8IGRybV9pbmZvLT5jZmctPm51bV9jb25uZWN0b3JzOyBpKyspIHsKPiA+ID4gKwkJ c3RydWN0IHhlbl9kcm1fZnJvbnRfY2ZnX2Nvbm5lY3RvciAqY2ZnID0KPiA+ID4gKwkJCQkmZHJt X2luZm8tPmNmZy0+Y29ubmVjdG9yc1tpXTsKPiA+ID4gKwkJc3RydWN0IHhlbl9kcm1fZnJvbnRf ZHJtX3BpcGVsaW5lICpwaXBlbGluZSA9Cj4gPiA+ICsJCQkJJmRybV9pbmZvLT5waXBlbGluZVtp XTsKPiA+ID4gKwo+ID4gPiArCQlyZXQgPSBkaXNwbGF5X3BpcGVfaW5pdChkcm1faW5mbywgaSwg Y2ZnLCBwaXBlbGluZSk7Cj4gPiA+ICsJCWlmIChyZXQpIHsKPiA+ID4gKwkJCWRybV9tb2RlX2Nv bmZpZ19jbGVhbnVwKGRldik7Cj4gPiA+ICsJCQlyZXR1cm4gcmV0Owo+ID4gPiArCQl9Cj4gPiA+ ICsJfQo+ID4gPiArCj4gPiA+ICsJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRldik7Cj4gPiA+ICsJ cmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVu L3hlbl9kcm1fZnJvbnRfa21zLmggYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRf a21zLmgKPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAw Li42NWE1MDAzM2JiOWIKPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiArKysgYi9kcml2ZXJzL2dw dS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfa21zLmgKPiA+ID4gQEAgLTAsMCArMSwzMCBAQAo+ID4g PiArLyoKPiA+ID4gKyAqICBYZW4gcGFyYS12aXJ0dWFsIERSTSBkZXZpY2UKPiA+ID4gKyAqCj4g PiA+ICsgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gPiA+ICsgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gPiA+ICsgKiAg IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp Y2Vuc2UsIG9yCj4gPiA+ICsgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u Cj4gPiA+ICsgKgo+ID4gPiArICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiA+ID4gKyAqICAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiA+ID4gKyAq ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQo+ID4gPiArICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgo+ID4gPiArICoKPiA+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEVQQU0g U3lzdGVtcyBJbmMuCj4gPiA+ICsgKgo+ID4gPiArICogQXV0aG9yOiBPbGVrc2FuZHIgQW5kcnVz aGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4gPiA+ICsgKi8KPiA+ ID4gKwo+ID4gPiArI2lmbmRlZiBfX1hFTl9EUk1fRlJPTlRfS01TX0hfCj4gPiA+ICsjZGVmaW5l IF9fWEVOX0RSTV9GUk9OVF9LTVNfSF8KPiA+ID4gKwo+ID4gPiArI2luY2x1ZGUgInhlbl9kcm1f ZnJvbnRfZHJ2LmgiCj4gPiA+ICsKPiA+ID4gK2ludCB4ZW5fZHJtX2Zyb250X2ttc19pbml0KHN0 cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9pbmZvICpkcm1faW5mbyk7Cj4gPiA+ICsKPiA+ID4gK3Zv aWQgeGVuX2RybV9mcm9udF9rbXNfb25fZnJhbWVfZG9uZSgKPiA+ID4gKwkJc3RydWN0IHhlbl9k cm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSwKPiA+ID4gKwkJdWludDY0X3QgZmJfY29v a2llKTsKPiA+ID4gKwo+ID4gPiArI2VuZGlmIC8qIF9fWEVOX0RSTV9GUk9OVF9LTVNfSF8gKi8K PiA+ID4gLS0gCj4gPiA+IDIuNy40Cj4gPiA+IAo+ID4gPiBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4g PiA+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiA+ID4gaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKPiBbMV0gaHR0cHM6Ly9w YXRjaHdvcmsua2VybmVsLm9yZy9wYXRjaC8xMDIxMTk5Ny8KPiBfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPiBk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3 YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1h aWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54 ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==