From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: Re: [PATCH v2 2/3] drm/xen-front: Use Xen common shared buffer implementation Date: Mon, 17 Dec 2018 12:19:23 +0200 Message-ID: <71920419-f0ef-8489-35ff-ff8375cb7361__33474.2705025294$1545041893$gmane$org@gmail.com> References: <20181130074205.20496-1-andr2000@gmail.com> <20181130074205.20496-2-andr2000@gmail.com> <3c69d924-11e1-7037-bfa5-276d22b245fe@gmail.com> <27491aa5-3548-4c39-13a2-132c738fae14@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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.89) (envelope-from ) id 1gYpzn-00031H-4F for xen-devel@lists.xenproject.org; Mon, 17 Dec 2018 10:19:31 +0000 Received: by mail-lj1-x244.google.com with SMTP id v15-v6so10420838ljh.13 for ; Mon, 17 Dec 2018 02:19:27 -0800 (PST) In-Reply-To: <27491aa5-3548-4c39-13a2-132c738fae14@gmail.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: jgross@suse.com, boris.ostrovsky@oracle.com Cc: alsa-devel@alsa-project.org, Oleksandr Andrushchenko , Daniel Vetter , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org SGVsbG8sIEp1ZXJnZW4sIEJvcmlzIQoKQXMgdGhpcyBEUk0gcGFydCBvZiB0aGUgc2VyaWVzIGlz IHRoZSBvbmx5IG9uZSB3aGljaCBuZWVkcyBhY2svbmFjawoKKGFuZCBpdCBtaWdodCB0YWtlIHF1 aXRlIHNvbWUgdGltZSB0byBjb21wbGV0ZSkgY291bGQgd2UgcGxlYXNlCgptZXJnZSB0aGUgcGF0 Y2hlcyAxIGFuZCAzIG5vdyB0aGF0IGFscmVhZHkgaGF2ZSBhY2svci1iPwoKVGhhbmsgeW91LAoK T2xla3NhbmRyCgpPbiAxMi8xMy8xOCAxMjoxNiBQTSwgT2xla3NhbmRyIEFuZHJ1c2hjaGVua28g d3JvdGU6Cj4gYnVtcAo+Cj4gT24gMTIvNS8xOCAxMDoyMCBBTSwgT2xla3NhbmRyIEFuZHJ1c2hj aGVua28gd3JvdGU6Cj4+IEhlbGxvLCBEYW5pZWwhCj4+Cj4+IENvdWxkIHlvdSBwbGVhc2UgYWNr L25hY2sgdGhlIHBhdGNoLCBzbyBlaXRoZXIgd2UgY2FuIG1lcmdlIHRoZQo+Pgo+PiBzZXJpZXMg b3IgSSBjYW4gYWRkcmVzcyB5b3VyIGNvbW1lbnRzIGlmIGFueQo+Pgo+PiBUaGFuayB5b3UsCj4+ Cj4+IE9sZWtzYW5kcgo+Pgo+PiBPbiAxMS8zMC8xOCA5OjQyIEFNLCBPbGVrc2FuZHIgQW5kcnVz aGNoZW5rbyB3cm90ZToKPj4+IEZyb206IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2Fu ZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KPj4+Cj4+PiBVc2UgcGFnZSBkaXJlY3RvcnkgYmFz ZWQgc2hhcmVkIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbgo+Pj4gbm93IGF2YWlsYWJsZSBhcyBjb21t b24gY29kZSBmb3IgWGVuIGZyb250ZW5kIGRyaXZlcnMuCj4+Pgo+Pj4gUmVtb3ZlIGZsdXNoaW5n IG9mIHNoYXJlZCBidWZmZXIgb24gcGFnZSBmbGlwIGFzIHRoaXMKPj4+IHdvcmthcm91bmQgbmVl ZHMgYSBwcm9wZXIgZml4Lgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IE9sZWtzYW5kciBBbmRydXNo Y2hlbmtvIAo+Pj4gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+Pj4gLS0tCj4+ PiDCoCBkcml2ZXJzL2dwdS9kcm0veGVuL0tjb25maWfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHzCoMKgIDEgKwo+Pj4gwqAgZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtlZmlsZcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgLQo+Pj4gwqAgZHJpdmVycy9ncHUvZHJtL3hlbi94 ZW5fZHJtX2Zyb250LmPCoMKgwqDCoMKgwqAgfMKgIDY1ICsrLS0KPj4+IMKgIGRyaXZlcnMvZ3B1 L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uY8KgwqAgfMKgwqAgMSAtCj4+PiDCoCBkcml2ZXJz L2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfc2hidWYuYyB8IDQxNCAKPj4+IC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KPj4+IMKgIGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9zaGJ1 Zi5oIHzCoCA2NCAtLS0tCj4+PiDCoCA2IGZpbGVzIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKyks IDUyMCBkZWxldGlvbnMoLSkKPj4+IMKgIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0veGVuL3hlbl9kcm1fZnJvbnRfc2hidWYuYwo+Pj4gwqAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9zaGJ1Zi5oCj4+Pgo+Pj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4vS2Nv bmZpZwo+Pj4gaW5kZXggNGNjYTE2MDc4MmFiLi5mOTY5ZDQ4Njg1NWQgMTAwNjQ0Cj4+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0veGVuL0tjb25maWcKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94 ZW4vS2NvbmZpZwo+Pj4gQEAgLTEyLDYgKzEyLDcgQEAgY29uZmlnIERSTV9YRU5fRlJPTlRFTkQK Pj4+IMKgwqDCoMKgwqAgc2VsZWN0IERSTV9LTVNfSEVMUEVSCj4+PiDCoMKgwqDCoMKgIHNlbGVj dCBWSURFT01PREVfSEVMUEVSUwo+Pj4gwqDCoMKgwqDCoCBzZWxlY3QgWEVOX1hFTkJVU19GUk9O VEVORAo+Pj4gK8KgwqDCoCBzZWxlY3QgWEVOX0ZST05UX1BHRElSX1NIQlVGCj4+PiDCoMKgwqDC oMKgIGhlbHAKPj4+IMKgwqDCoMKgwqDCoMKgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2Fu dCB0byBlbmFibGUgYSBwYXJhLXZpcnR1YWxpemVkCj4+PiDCoMKgwqDCoMKgwqDCoCBmcm9udGVu ZCBEUk0vS01TIGRyaXZlciBmb3IgWGVuIGd1ZXN0IE9TZXMuCj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3hlbi9NYWtlZmlsZSAKPj4+IGIvZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtl ZmlsZQo+Pj4gaW5kZXggNzEyYWZmZjVmZmMzLi44MjU5MDVmNjdmYWEgMTAwNjQ0Cj4+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0veGVuL01ha2VmaWxlCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v eGVuL01ha2VmaWxlCj4+PiBAQCAtNCw3ICs0LDYgQEAgZHJtX3hlbl9mcm9udC1vYmpzIDo9IHhl bl9kcm1fZnJvbnQubyBcCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGVuX2Ry bV9mcm9udF9rbXMubyBcCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGVuX2Ry bV9mcm9udF9jb25uLm8gXAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHhlbl9k cm1fZnJvbnRfZXZ0Y2hubC5vIFwKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4ZW5f ZHJtX2Zyb250X3NoYnVmLm8gXAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHhl bl9kcm1fZnJvbnRfY2ZnLm8gXAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHhl bl9kcm1fZnJvbnRfZ2VtLm8KPj4+IMKgIGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVu L3hlbl9kcm1fZnJvbnQuYyAKPj4+IGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250 LmMKPj4+IGluZGV4IDZiNmQ1YWI4MmVjMy4uNGQzZDM2ZmMzYTVkIDEwMDY0NAo+Pj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS94ZW4veGVuX2RybV9mcm9udC5jCj4+PiBAQCAtMTksNiArMTksNyBAQAo+Pj4gwqAgI2lu Y2x1ZGUgPHhlbi94ZW4uaD4KPj4+IMKgICNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+Cj4+PiDCoCAr I2luY2x1ZGUgPHhlbi94ZW4tZnJvbnQtcGdkaXItc2hidWYuaD4KPj4+IMKgICNpbmNsdWRlIDx4 ZW4vaW50ZXJmYWNlL2lvL2Rpc3BsaWYuaD4KPj4+IMKgIMKgICNpbmNsdWRlICJ4ZW5fZHJtX2Zy b250LmgiCj4+PiBAQCAtMjYsMjggKzI3LDIwIEBACj4+PiDCoCAjaW5jbHVkZSAieGVuX2RybV9m cm9udF9ldnRjaG5sLmgiCj4+PiDCoCAjaW5jbHVkZSAieGVuX2RybV9mcm9udF9nZW0uaCIKPj4+ IMKgICNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2ttcy5oIgo+Pj4gLSNpbmNsdWRlICJ4ZW5fZHJt X2Zyb250X3NoYnVmLmgiCj4+PiDCoCDCoCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9kYnVmIHsKPj4+ IMKgwqDCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+Pj4gwqDCoMKgwqDCoCB1NjQgZGJ1 Zl9jb29raWU7Cj4+PiDCoMKgwqDCoMKgIHU2NCBmYl9jb29raWU7Cj4+PiAtwqDCoMKgIHN0cnVj dCB4ZW5fZHJtX2Zyb250X3NoYnVmICpzaGJ1ZjsKPj4+ICsKPj4+ICvCoMKgwqAgc3RydWN0IHhl bl9mcm9udF9wZ2Rpcl9zaGJ1ZiBzaGJ1ZjsKPj4+IMKgIH07Cj4+PiDCoCAtc3RhdGljIGludCBk YnVmX2FkZF90b19saXN0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCj4+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB4ZW5fZHJtX2Zyb250X3No YnVmICpzaGJ1ZiwgdTY0IGRidWZfY29va2llKQo+Pj4gK3N0YXRpYyB2b2lkIGRidWZfYWRkX3Rv X2xpc3Qoc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9kYnVmICpkYnVm LCB1NjQgZGJ1Zl9jb29raWUpCj4+PiDCoCB7Cj4+PiAtwqDCoMKgIHN0cnVjdCB4ZW5fZHJtX2Zy b250X2RidWYgKmRidWY7Cj4+PiAtCj4+PiAtwqDCoMKgIGRidWYgPSBremFsbG9jKHNpemVvZigq ZGJ1ZiksIEdGUF9LRVJORUwpOwo+Pj4gLcKgwqDCoCBpZiAoIWRidWYpCj4+PiAtwqDCoMKgwqDC oMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+PiAtCj4+PiDCoMKgwqDCoMKgIGRidWYtPmRidWZfY29v a2llID0gZGJ1Zl9jb29raWU7Cj4+PiAtwqDCoMKgIGRidWYtPnNoYnVmID0gc2hidWY7Cj4+PiDC oMKgwqDCoMKgIGxpc3RfYWRkKCZkYnVmLT5saXN0LCAmZnJvbnRfaW5mby0+ZGJ1Zl9saXN0KTsK Pj4+IC3CoMKgwqAgcmV0dXJuIDA7Cj4+PiDCoCB9Cj4+PiDCoCDCoCBzdGF0aWMgc3RydWN0IHhl bl9kcm1fZnJvbnRfZGJ1ZiAqZGJ1Zl9nZXQoc3RydWN0IGxpc3RfaGVhZCAKPj4+ICpkYnVmX2xp c3QsCj4+PiBAQCAtNjIsMTUgKzU1LDYgQEAgc3RhdGljIHN0cnVjdCB4ZW5fZHJtX2Zyb250X2Ri dWYgKmRidWZfZ2V0KHN0cnVjdCAKPj4+IGxpc3RfaGVhZCAqZGJ1Zl9saXN0LAo+Pj4gwqDCoMKg wqDCoCByZXR1cm4gTlVMTDsKPj4+IMKgIH0KPj4+IMKgIC1zdGF0aWMgdm9pZCBkYnVmX2ZsdXNo X2ZiKHN0cnVjdCBsaXN0X2hlYWQgKmRidWZfbGlzdCwgdTY0IAo+Pj4gZmJfY29va2llKQo+Pj4g LXsKPj4+IC3CoMKgwqAgc3RydWN0IHhlbl9kcm1fZnJvbnRfZGJ1ZiAqYnVmLCAqcTsKPj4+IC0K Pj4+IC3CoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1ZiwgcSwgZGJ1Zl9saXN0LCBs aXN0KQo+Pj4gLcKgwqDCoMKgwqDCoMKgIGlmIChidWYtPmZiX2Nvb2tpZSA9PSBmYl9jb29raWUp Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4ZW5fZHJtX2Zyb250X3NoYnVmX2ZsdXNoKGJ1 Zi0+c2hidWYpOwo+Pj4gLX0KPj4+IC0KPj4+IMKgIHN0YXRpYyB2b2lkIGRidWZfZnJlZShzdHJ1 Y3QgbGlzdF9oZWFkICpkYnVmX2xpc3QsIHU2NCBkYnVmX2Nvb2tpZSkKPj4+IMKgIHsKPj4+IMKg wqDCoMKgwqAgc3RydWN0IHhlbl9kcm1fZnJvbnRfZGJ1ZiAqYnVmLCAqcTsKPj4+IEBAIC03OCw4 ICs2Miw4IEBAIHN0YXRpYyB2b2lkIGRidWZfZnJlZShzdHJ1Y3QgbGlzdF9oZWFkICpkYnVmX2xp c3QsIAo+Pj4gdTY0IGRidWZfY29va2llKQo+Pj4gwqDCoMKgwqDCoCBsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUoYnVmLCBxLCBkYnVmX2xpc3QsIGxpc3QpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKGJ1Zi0+ZGJ1Zl9jb29raWUgPT0gZGJ1Zl9jb29raWUpIHsKPj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGxpc3RfZGVsKCZidWYtPmxpc3QpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgeGVuX2RybV9mcm9udF9zaGJ1Zl91bm1hcChidWYtPnNoYnVmKTsKPj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHhlbl9kcm1fZnJvbnRfc2hidWZfZnJlZShidWYtPnNoYnVmKTsKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHhlbl9mcm9udF9wZ2Rpcl9zaGJ1Zl91bm1hcCgmYnVm LT5zaGJ1Zik7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4ZW5fZnJvbnRfcGdkaXJfc2hi dWZfZnJlZSgmYnVmLT5zaGJ1Zik7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrZnJl ZShidWYpOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+PiDCoMKgwqDC oMKgwqDCoMKgwqAgfQo+Pj4gQEAgLTkxLDggKzc1LDggQEAgc3RhdGljIHZvaWQgZGJ1Zl9mcmVl X2FsbChzdHJ1Y3QgbGlzdF9oZWFkIAo+Pj4gKmRidWZfbGlzdCkKPj4+IMKgIMKgwqDCoMKgwqAg bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1ZiwgcSwgZGJ1Zl9saXN0LCBsaXN0KSB7Cj4+PiDC oMKgwqDCoMKgwqDCoMKgwqAgbGlzdF9kZWwoJmJ1Zi0+bGlzdCk7Cj4+PiAtwqDCoMKgwqDCoMKg wqAgeGVuX2RybV9mcm9udF9zaGJ1Zl91bm1hcChidWYtPnNoYnVmKTsKPj4+IC3CoMKgwqDCoMKg wqDCoCB4ZW5fZHJtX2Zyb250X3NoYnVmX2ZyZWUoYnVmLT5zaGJ1Zik7Cj4+PiArwqDCoMKgwqDC oMKgwqAgeGVuX2Zyb250X3BnZGlyX3NoYnVmX3VubWFwKCZidWYtPnNoYnVmKTsKPj4+ICvCoMKg wqDCoMKgwqDCoCB4ZW5fZnJvbnRfcGdkaXJfc2hidWZfZnJlZSgmYnVmLT5zaGJ1Zik7Cj4+PiDC oMKgwqDCoMKgwqDCoMKgwqAga2ZyZWUoYnVmKTsKPj4+IMKgwqDCoMKgwqAgfQo+Pj4gwqAgfQo+ Pj4gQEAgLTE3MSw5ICsxNTUsOSBAQCBpbnQgeGVuX2RybV9mcm9udF9kYnVmX2NyZWF0ZShzdHJ1 Y3QgCj4+PiB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCj4+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgYnBwLCB1NjQgc2l6ZSwgc3RydWN0IHBhZ2Ug KipwYWdlcykKPj4+IMKgIHsKPj4+IMKgwqDCoMKgwqAgc3RydWN0IHhlbl9kcm1fZnJvbnRfZXZ0 Y2hubCAqZXZ0Y2hubDsKPj4+IC3CoMKgwqAgc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKnNo YnVmOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9kYnVmICpkYnVmOwo+Pj4gwqDC oMKgwqDCoCBzdHJ1Y3QgeGVuZGlzcGxfcmVxICpyZXE7Cj4+PiAtwqDCoMKgIHN0cnVjdCB4ZW5f ZHJtX2Zyb250X3NoYnVmX2NmZyBidWZfY2ZnOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgeGVuX2Zyb250 X3BnZGlyX3NoYnVmX2NmZyBidWZfY2ZnOwo+Pj4gwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIGZs YWdzOwo+Pj4gwqDCoMKgwqDCoCBpbnQgcmV0Owo+Pj4gwqAgQEAgLTE4MSwyOCArMTY1LDI5IEBA IGludCB4ZW5fZHJtX2Zyb250X2RidWZfY3JlYXRlKHN0cnVjdCAKPj4+IHhlbl9kcm1fZnJvbnRf aW5mbyAqZnJvbnRfaW5mbywKPj4+IMKgwqDCoMKgwqAgaWYgKHVubGlrZWx5KCFldnRjaG5sKSkK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTzsKPj4+IMKgICvCoMKgwqAgZGJ1ZiA9 IGt6YWxsb2Moc2l6ZW9mKCpkYnVmKSwgR0ZQX0tFUk5FTCk7Cj4+PiArwqDCoMKgIGlmICghZGJ1 ZikKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4+ICsKPj4+ICvCoMKgwqAg ZGJ1Zl9hZGRfdG9fbGlzdChmcm9udF9pbmZvLCBkYnVmLCBkYnVmX2Nvb2tpZSk7Cj4+PiArCj4+ PiDCoMKgwqDCoMKgIG1lbXNldCgmYnVmX2NmZywgMCwgc2l6ZW9mKGJ1Zl9jZmcpKTsKPj4+IMKg wqDCoMKgwqAgYnVmX2NmZy54Yl9kZXYgPSBmcm9udF9pbmZvLT54Yl9kZXY7Cj4+PiArwqDCoMKg IGJ1Zl9jZmcubnVtX3BhZ2VzID0gRElWX1JPVU5EX1VQKHNpemUsIFBBR0VfU0laRSk7Cj4+PiDC oMKgwqDCoMKgIGJ1Zl9jZmcucGFnZXMgPSBwYWdlczsKPj4+IC3CoMKgwqAgYnVmX2NmZy5zaXpl ID0gc2l6ZTsKPj4+ICvCoMKgwqAgYnVmX2NmZy5wZ2RpciA9ICZkYnVmLT5zaGJ1ZjsKPj4+IMKg wqDCoMKgwqAgYnVmX2NmZy5iZV9hbGxvYyA9IGZyb250X2luZm8tPmNmZy5iZV9hbGxvYzsKPj4+ IMKgIC3CoMKgwqAgc2hidWYgPSB4ZW5fZHJtX2Zyb250X3NoYnVmX2FsbG9jKCZidWZfY2ZnKTsK Pj4+IC3CoMKgwqAgaWYgKElTX0VSUihzaGJ1ZikpCj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJu IFBUUl9FUlIoc2hidWYpOwo+Pj4gLQo+Pj4gLcKgwqDCoCByZXQgPSBkYnVmX2FkZF90b19saXN0 KGZyb250X2luZm8sIHNoYnVmLCBkYnVmX2Nvb2tpZSk7Cj4+PiAtwqDCoMKgIGlmIChyZXQgPCAw KSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgeGVuX2RybV9mcm9udF9zaGJ1Zl9mcmVlKHNoYnVmKTsK Pj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4gLcKgwqDCoCB9Cj4+PiArwqDCoMKg IHJldCA9IHhlbl9mcm9udF9wZ2Rpcl9zaGJ1Zl9hbGxvYygmYnVmX2NmZyk7Cj4+PiArwqDCoMKg IGlmIChyZXQgPCAwKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbF9zaGJ1Zl9hbGxvYzsK Pj4+IMKgIMKgwqDCoMKgwqAgbXV0ZXhfbG9jaygmZXZ0Y2hubC0+dS5yZXEucmVxX2lvX2xvY2sp Owo+Pj4gwqAgwqDCoMKgwqDCoCBzcGluX2xvY2tfaXJxc2F2ZSgmZnJvbnRfaW5mby0+aW9fbG9j aywgZmxhZ3MpOwo+Pj4gwqDCoMKgwqDCoCByZXEgPSBiZV9wcmVwYXJlX3JlcShldnRjaG5sLCBY RU5ESVNQTF9PUF9EQlVGX0NSRUFURSk7Cj4+PiDCoMKgwqDCoMKgIHJlcS0+b3AuZGJ1Zl9jcmVh dGUuZ3JlZl9kaXJlY3RvcnkgPQo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGVuX2RybV9m cm9udF9zaGJ1Zl9nZXRfZGlyX3N0YXJ0KHNoYnVmKTsKPj4+ICsgeGVuX2Zyb250X3BnZGlyX3No YnVmX2dldF9kaXJfc3RhcnQoJmRidWYtPnNoYnVmKTsKPj4+IMKgwqDCoMKgwqAgcmVxLT5vcC5k YnVmX2NyZWF0ZS5idWZmZXJfc3ogPSBzaXplOwo+Pj4gwqDCoMKgwqDCoCByZXEtPm9wLmRidWZf Y3JlYXRlLmRidWZfY29va2llID0gZGJ1Zl9jb29raWU7Cj4+PiDCoMKgwqDCoMKgIHJlcS0+b3Au ZGJ1Zl9jcmVhdGUud2lkdGggPSB3aWR0aDsKPj4+IEBAIC0yMjEsNyArMjA2LDcgQEAgaW50IHhl bl9kcm1fZnJvbnRfZGJ1Zl9jcmVhdGUoc3RydWN0IAo+Pj4geGVuX2RybV9mcm9udF9pbmZvICpm cm9udF9pbmZvLAo+Pj4gwqDCoMKgwqDCoCBpZiAocmV0IDwgMCkKPj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBnb3RvIGZhaWw7Cj4+PiDCoCAtwqDCoMKgIHJldCA9IHhlbl9kcm1fZnJvbnRfc2hidWZf bWFwKHNoYnVmKTsKPj4+ICvCoMKgwqAgcmV0ID0geGVuX2Zyb250X3BnZGlyX3NoYnVmX21hcCgm ZGJ1Zi0+c2hidWYpOwo+Pj4gwqDCoMKgwqDCoCBpZiAocmV0IDwgMCkKPj4+IMKgwqDCoMKgwqDC oMKgwqDCoCBnb3RvIGZhaWw7Cj4+PiDCoCBAQCAtMjMwLDYgKzIxNSw3IEBAIGludCB4ZW5fZHJt X2Zyb250X2RidWZfY3JlYXRlKHN0cnVjdCAKPj4+IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRf aW5mbywKPj4+IMKgIMKgIGZhaWw6Cj4+PiDCoMKgwqDCoMKgIG11dGV4X3VubG9jaygmZXZ0Y2hu bC0+dS5yZXEucmVxX2lvX2xvY2spOwo+Pj4gK2ZhaWxfc2hidWZfYWxsb2M6Cj4+PiDCoMKgwqDC oMKgIGRidWZfZnJlZSgmZnJvbnRfaW5mby0+ZGJ1Zl9saXN0LCBkYnVmX2Nvb2tpZSk7Cj4+PiDC oMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiDCoCB9Cj4+PiBAQCAtMzU4LDcgKzM0NCw2IEBAIGlu dCB4ZW5fZHJtX2Zyb250X3BhZ2VfZmxpcChzdHJ1Y3QgCj4+PiB4ZW5fZHJtX2Zyb250X2luZm8g KmZyb250X2luZm8sCj4+PiDCoMKgwqDCoMKgIGlmICh1bmxpa2VseShjb25uX2lkeCA+PSBmcm9u dF9pbmZvLT5udW1fZXZ0X3BhaXJzKSkKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJ TlZBTDsKPj4+IMKgIC3CoMKgwqAgZGJ1Zl9mbHVzaF9mYigmZnJvbnRfaW5mby0+ZGJ1Zl9saXN0 LCBmYl9jb29raWUpOwo+Pj4gwqDCoMKgwqDCoCBldnRjaG5sID0gJmZyb250X2luZm8tPmV2dF9w YWlyc1tjb25uX2lkeF0ucmVxOwo+Pj4gwqAgwqDCoMKgwqDCoCBtdXRleF9sb2NrKCZldnRjaG5s LT51LnJlcS5yZXFfaW9fbG9jayk7Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hl bi94ZW5fZHJtX2Zyb250X2dlbS5jIAo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1f ZnJvbnRfZ2VtLmMKPj4+IGluZGV4IGM4NWJmZTc1NzFjYi4uNTNiZTRjN2RjMGE0IDEwMDY0NAo+ Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jCj4+PiArKysg Yi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmMKPj4+IEBAIC0yMiw3ICsy Miw2IEBACj4+PiDCoCAjaW5jbHVkZSA8eGVuL2JhbGxvb24uaD4KPj4+IMKgIMKgICNpbmNsdWRl ICJ4ZW5fZHJtX2Zyb250LmgiCj4+PiAtI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfc2hidWYuaCIK Pj4+IMKgIMKgIHN0cnVjdCB4ZW5fZ2VtX29iamVjdCB7Cj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBk cm1fZ2VtX29iamVjdCBiYXNlOwo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4v eGVuX2RybV9mcm9udF9zaGJ1Zi5jIAo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1f ZnJvbnRfc2hidWYuYwo+Pj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCBkMzMz YjY3Y2MxYTAuLjAwMDAwMDAwMDAwMAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5f ZHJtX2Zyb250X3NoYnVmLmMKPj4+ICsrKyAvZGV2L251bGwKPj4+IEBAIC0xLDQxNCArMCwwIEBA Cj4+PiAtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCj4+PiAtCj4+ PiAtLyoKPj4+IC0gKsKgIFhlbiBwYXJhLXZpcnR1YWwgRFJNIGRldmljZQo+Pj4gLSAqCj4+PiAt ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0ZW1zIEluYy4KPj4+IC0gKgo+Pj4g LSAqIEF1dGhvcjogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hl bmtvQGVwYW0uY29tPgo+Pj4gLSAqLwo+Pj4gLQo+Pj4gLSNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ Pj4gLQo+Pj4gLSNpZiBkZWZpbmVkKENPTkZJR19YODYpCj4+PiAtI2luY2x1ZGUgPGRybS9kcm1f Y2FjaGUuaD4KPj4+IC0jZW5kaWYKPj4+IC0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KPj4+IC0j aW5jbHVkZSA8bGludXgvbW0uaD4KPj4+IC0KPj4+IC0jaW5jbHVkZSA8YXNtL3hlbi9oeXBlcnZp c29yLmg+Cj4+PiAtI2luY2x1ZGUgPHhlbi9iYWxsb29uLmg+Cj4+PiAtI2luY2x1ZGUgPHhlbi94 ZW4uaD4KPj4+IC0jaW5jbHVkZSA8eGVuL3hlbmJ1cy5oPgo+Pj4gLSNpbmNsdWRlIDx4ZW4vaW50 ZXJmYWNlL2lvL3JpbmcuaD4KPj4+IC0jaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9pby9kaXNwbGlm Lmg+Cj4+PiAtCj4+PiAtI2luY2x1ZGUgInhlbl9kcm1fZnJvbnQuaCIKPj4+IC0jaW5jbHVkZSAi eGVuX2RybV9mcm9udF9zaGJ1Zi5oIgo+Pj4gLQo+Pj4gLXN0cnVjdCB4ZW5fZHJtX2Zyb250X3No YnVmX29wcyB7Cj4+PiAtwqDCoMKgIC8qCj4+PiAtwqDCoMKgwqAgKiBDYWxjdWxhdGUgbnVtYmVy IG9mIGdyZWZzIHJlcXVpcmVkIHRvIGhhbmRsZSB0aGlzIGJ1ZmZlciwKPj4+IC3CoMKgwqDCoCAq IGUuZy4gaWYgZ3JlZnMgYXJlIHJlcXVpcmVkIGZvciBwYWdlIGRpcmVjdG9yeSBvbmx5IG9yIHRo ZSAKPj4+IGJ1ZmZlcgo+Pj4gLcKgwqDCoMKgICogcGFnZXMgYXMgd2VsbC4KPj4+IC3CoMKgwqDC oCAqLwo+Pj4gLcKgwqDCoCB2b2lkICgqY2FsY19udW1fZ3JlZnMpKHN0cnVjdCB4ZW5fZHJtX2Zy b250X3NoYnVmICpidWYpOwo+Pj4gLcKgwqDCoCAvKiBGaWxsIHBhZ2UgZGlyZWN0b3J5IGFjY29y ZGluZyB0byBwYXJhLXZpcnR1YWwgZGlzcGxheSAKPj4+IHByb3RvY29sLiAqLwo+Pj4gLcKgwqDC oCB2b2lkICgqZmlsbF9wYWdlX2Rpcikoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1Zik7 Cj4+PiAtwqDCoMKgIC8qIENsYWltIGdyYW50IHJlZmVyZW5jZXMgZm9yIHRoZSBwYWdlcyBvZiB0 aGUgYnVmZmVyLiAqLwo+Pj4gLcKgwqDCoCBpbnQgKCpncmFudF9yZWZzX2Zvcl9idWZmZXIpKHN0 cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYsCj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBncmFudF9yZWZfdCAqcHJpdl9ncmVmX2hlYWQsIGludCBncmVm X2lkeCk7Cj4+PiAtwqDCoMKgIC8qIE1hcCBncmFudCByZWZlcmVuY2VzIG9mIHRoZSBidWZmZXIu ICovCj4+PiAtwqDCoMKgIGludCAoKm1hcCkoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1 Zik7Cj4+PiAtwqDCoMKgIC8qIFVubWFwIGdyYW50IHJlZmVyZW5jZXMgb2YgdGhlIGJ1ZmZlci4g Ki8KPj4+IC3CoMKgwqAgaW50ICgqdW5tYXApKHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpi dWYpOwo+Pj4gLX07Cj4+PiAtCj4+PiAtZ3JhbnRfcmVmX3QgeGVuX2RybV9mcm9udF9zaGJ1Zl9n ZXRfZGlyX3N0YXJ0KHN0cnVjdCAKPj4+IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1ZikKPj4+IC17 Cj4+PiAtwqDCoMKgIGlmICghYnVmLT5ncmVmcykKPj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4g R1JBTlRfSU5WQUxJRF9SRUY7Cj4+PiAtCj4+PiAtwqDCoMKgIHJldHVybiBidWYtPmdyZWZzWzBd Owo+Pj4gLX0KPj4+IC0KPj4+IC1pbnQgeGVuX2RybV9mcm9udF9zaGJ1Zl9tYXAoc3RydWN0IHhl bl9kcm1fZnJvbnRfc2hidWYgKmJ1ZikKPj4+IC17Cj4+PiAtwqDCoMKgIGlmIChidWYtPm9wcy0+ bWFwKQo+Pj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiBidWYtPm9wcy0+bWFwKGJ1Zik7Cj4+PiAt Cj4+PiAtwqDCoMKgIC8qIG5vIG5lZWQgdG8gbWFwIG93biBncmFudCByZWZlcmVuY2VzICovCj4+ PiAtwqDCoMKgIHJldHVybiAwOwo+Pj4gLX0KPj4+IC0KPj4+IC1pbnQgeGVuX2RybV9mcm9udF9z aGJ1Zl91bm1hcChzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKQo+Pj4gLXsKPj4+IC3C oMKgwqAgaWYgKGJ1Zi0+b3BzLT51bm1hcCkKPj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gYnVm LT5vcHMtPnVubWFwKGJ1Zik7Cj4+PiAtCj4+PiAtwqDCoMKgIC8qIG5vIG5lZWQgdG8gdW5tYXAg b3duIGdyYW50IHJlZmVyZW5jZXMgKi8KPj4+IC3CoMKgwqAgcmV0dXJuIDA7Cj4+PiAtfQo+Pj4g LQo+Pj4gLXZvaWQgeGVuX2RybV9mcm9udF9zaGJ1Zl9mbHVzaChzdHJ1Y3QgeGVuX2RybV9mcm9u dF9zaGJ1ZiAqYnVmKQo+Pj4gLXsKPj4+IC0jaWYgZGVmaW5lZChDT05GSUdfWDg2KQo+Pj4gLcKg wqDCoCBkcm1fY2xmbHVzaF9wYWdlcyhidWYtPnBhZ2VzLCBidWYtPm51bV9wYWdlcyk7Cj4+PiAt I2VuZGlmCj4+PiAtfQo+Pj4gLQo+Pj4gLXZvaWQgeGVuX2RybV9mcm9udF9zaGJ1Zl9mcmVlKHN0 cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCj4+PiAtewo+Pj4gLcKgwqDCoCBpZiAoYnVm LT5ncmVmcykgewo+Pj4gLcKgwqDCoMKgwqDCoMKgIGludCBpOwo+Pj4gLQo+Pj4gLcKgwqDCoMKg wqDCoMKgIGZvciAoaSA9IDA7IGkgPCBidWYtPm51bV9ncmVmczsgaSsrKQo+Pj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaWYgKGJ1Zi0+Z3JlZnNbaV0gIT0gR1JBTlRfSU5WQUxJRF9SRUYpCj4+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdudHRhYl9lbmRfZm9yZWlnbl9hY2Nl c3MoYnVmLT5ncmVmc1tpXSwKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAsIDBVTCk7Cj4+PiAtwqDCoMKgIH0KPj4+IC3CoMKg wqAga2ZyZWUoYnVmLT5ncmVmcyk7Cj4+PiAtwqDCoMKgIGtmcmVlKGJ1Zi0+ZGlyZWN0b3J5KTsK Pj4+IC3CoMKgwqAga2ZyZWUoYnVmKTsKPj4+IC19Cj4+PiAtCj4+PiAtLyoKPj4+IC0gKiBudW1i ZXIgb2YgZ3JlZnMgYSBwYWdlIGNhbiBob2xkIHdpdGggcmVzcGVjdCB0byB0aGUKPj4+IC0gKiBz dHJ1Y3QgeGVuZGlzcGxfcGFnZV9kaXJlY3RvcnkgaGVhZGVyCj4+PiAtICovCj4+PiAtI2RlZmlu ZSBYRU5fRFJNX05VTV9HUkVGU19QRVJfUEFHRSAoKFBBR0VfU0laRSAtIFwKPj4+IC3CoMKgwqDC oMKgwqDCoCBvZmZzZXRvZihzdHJ1Y3QgeGVuZGlzcGxfcGFnZV9kaXJlY3RvcnksIGdyZWYpKSAv IFwKPj4+IC3CoMKgwqDCoMKgwqDCoCBzaXplb2YoZ3JhbnRfcmVmX3QpKQo+Pj4gLQo+Pj4gLXN0 YXRpYyBpbnQgZ2V0X251bV9wYWdlc19kaXIoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1 ZikKPj4+IC17Cj4+PiAtwqDCoMKgIC8qIG51bWJlciBvZiBwYWdlcyB0aGUgcGFnZSBkaXJlY3Rv cnkgY29uc3VtZXMgaXRzZWxmICovCj4+PiAtwqDCoMKgIHJldHVybiBESVZfUk9VTkRfVVAoYnVm LT5udW1fcGFnZXMsIFhFTl9EUk1fTlVNX0dSRUZTX1BFUl9QQUdFKTsKPj4+IC19Cj4+PiAtCj4+ PiAtc3RhdGljIHZvaWQgYmFja2VuZF9jYWxjX251bV9ncmVmcyhzdHJ1Y3QgeGVuX2RybV9mcm9u dF9zaGJ1ZiAqYnVmKQo+Pj4gLXsKPj4+IC3CoMKgwqAgLyogb25seSBmb3IgcGFnZXMgdGhlIHBh Z2UgZGlyZWN0b3J5IGNvbnN1bWVzIGl0c2VsZiAqLwo+Pj4gLcKgwqDCoCBidWYtPm51bV9ncmVm cyA9IGdldF9udW1fcGFnZXNfZGlyKGJ1Zik7Cj4+PiAtfQo+Pj4gLQo+Pj4gLXN0YXRpYyB2b2lk IGd1ZXN0X2NhbGNfbnVtX2dyZWZzKHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCj4+ PiAtewo+Pj4gLcKgwqDCoCAvKgo+Pj4gLcKgwqDCoMKgICogbnVtYmVyIG9mIHBhZ2VzIHRoZSBw YWdlIGRpcmVjdG9yeSBjb25zdW1lcyBpdHNlbGYKPj4+IC3CoMKgwqDCoCAqIHBsdXMgZ3JlZnMg Zm9yIHRoZSBidWZmZXIgcGFnZXMKPj4+IC3CoMKgwqDCoCAqLwo+Pj4gLcKgwqDCoCBidWYtPm51 bV9ncmVmcyA9IGdldF9udW1fcGFnZXNfZGlyKGJ1ZikgKyBidWYtPm51bV9wYWdlczsKPj4+IC19 Cj4+PiAtCj4+PiAtI2RlZmluZSB4ZW5fcGFnZV90b192YWRkcihwYWdlKSBcCj4+PiAtwqDCoMKg wqDCoMKgwqAgKCh1aW50cHRyX3QpcGZuX3RvX2thZGRyKHBhZ2VfdG9feGVuX3BmbihwYWdlKSkp Cj4+PiAtCj4+PiAtc3RhdGljIGludCBiYWNrZW5kX3VubWFwKHN0cnVjdCB4ZW5fZHJtX2Zyb250 X3NoYnVmICpidWYpCj4+PiAtewo+Pj4gLcKgwqDCoCBzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50 X3JlZiAqdW5tYXBfb3BzOwo+Pj4gLcKgwqDCoCBpbnQgaSwgcmV0Owo+Pj4gLQo+Pj4gLcKgwqDC oCBpZiAoIWJ1Zi0+cGFnZXMgfHwgIWJ1Zi0+YmFja2VuZF9tYXBfaGFuZGxlcyB8fCAhYnVmLT5n cmVmcykKPj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+IC0KPj4+IC3CoMKgwqAgdW5t YXBfb3BzID0ga2NhbGxvYyhidWYtPm51bV9wYWdlcywgc2l6ZW9mKCp1bm1hcF9vcHMpLAo+Pj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRlBfS0VSTkVMKTsKPj4+IC3CoMKgwqAg aWYgKCF1bm1hcF9vcHMpIHsKPj4+IC3CoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoIkZhaWxlZCB0 byBnZXQgbWVtb3J5IHdoaWxlIHVubWFwcGluZ1xuIik7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIC1FTk9NRU07Cj4+PiAtwqDCoMKgIH0KPj4+IC0KPj4+IC3CoMKgwqAgZm9yIChpID0gMDsg aSA8IGJ1Zi0+bnVtX3BhZ2VzOyBpKyspIHsKPj4+IC3CoMKgwqDCoMKgwqDCoCBwaHlzX2FkZHJf dCBhZGRyOwo+Pj4gLQo+Pj4gLcKgwqDCoMKgwqDCoMKgIGFkZHIgPSB4ZW5fcGFnZV90b192YWRk cihidWYtPnBhZ2VzW2ldKTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBnbnR0YWJfc2V0X3VubWFwX29w KCZ1bm1hcF9vcHNbaV0sIGFkZHIsIEdOVE1BUF9ob3N0X21hcCwKPj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWYtPmJhY2tlbmRfbWFwX2hhbmRsZXNbaV0pOwo+ Pj4gLcKgwqDCoCB9Cj4+PiAtCj4+PiAtwqDCoMKgIHJldCA9IGdudHRhYl91bm1hcF9yZWZzKHVu bWFwX29wcywgTlVMTCwgYnVmLT5wYWdlcywKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYnVmLT5udW1fcGFnZXMpOwo+Pj4gLQo+Pj4gLcKgwqDCoCBmb3IgKGkgPSAwOyBpIDwg YnVmLT5udW1fcGFnZXM7IGkrKykgewo+Pj4gLcKgwqDCoMKgwqDCoMKgIGlmICh1bmxpa2VseSh1 bm1hcF9vcHNbaV0uc3RhdHVzICE9IEdOVFNUX29rYXkpKQo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgRFJNX0VSUk9SKCJGYWlsZWQgdG8gdW5tYXAgcGFnZSAlZDogJWRcbiIsCj4+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpLCB1bm1hcF9vcHNbaV0uc3RhdHVzKTsK Pj4+IC3CoMKgwqAgfQo+Pj4gLQo+Pj4gLcKgwqDCoCBpZiAocmV0KQo+Pj4gLcKgwqDCoMKgwqDC oMKgIERSTV9FUlJPUigiRmFpbGVkIHRvIHVubWFwIGdyYW50IHJlZmVyZW5jZXMsIHJldCAlZCIs IHJldCk7Cj4+PiAtCj4+PiAtwqDCoMKgIGtmcmVlKHVubWFwX29wcyk7Cj4+PiAtwqDCoMKgIGtm cmVlKGJ1Zi0+YmFja2VuZF9tYXBfaGFuZGxlcyk7Cj4+PiAtwqDCoMKgIGJ1Zi0+YmFja2VuZF9t YXBfaGFuZGxlcyA9IE5VTEw7Cj4+PiAtwqDCoMKgIHJldHVybiByZXQ7Cj4+PiAtfQo+Pj4gLQo+ Pj4gLXN0YXRpYyBpbnQgYmFja2VuZF9tYXAoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1 ZikKPj4+IC17Cj4+PiAtwqDCoMKgIHN0cnVjdCBnbnR0YWJfbWFwX2dyYW50X3JlZiAqbWFwX29w cyA9IE5VTEw7Cj4+PiAtwqDCoMKgIHVuc2lnbmVkIGNoYXIgKnB0cjsKPj4+IC3CoMKgwqAgaW50 IHJldCwgY3VyX2dyZWYsIGN1cl9kaXJfcGFnZSwgY3VyX3BhZ2UsIGdyZWZzX2xlZnQ7Cj4+PiAt Cj4+PiAtwqDCoMKgIG1hcF9vcHMgPSBrY2FsbG9jKGJ1Zi0+bnVtX3BhZ2VzLCBzaXplb2YoKm1h cF9vcHMpLCBHRlBfS0VSTkVMKTsKPj4+IC3CoMKgwqAgaWYgKCFtYXBfb3BzKQo+Pj4gLcKgwqDC oMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+Pj4gLQo+Pj4gLcKgwqDCoCBidWYtPmJhY2tlbmRf bWFwX2hhbmRsZXMgPSBrY2FsbG9jKGJ1Zi0+bnVtX3BhZ2VzLAo+Pj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZigqYnVmLT5iYWNrZW5kX21hcF9o YW5kbGVzKSwKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBHRlBfS0VSTkVMKTsKPj4+IC3CoMKgwqAgaWYgKCFidWYtPmJhY2tlbmRfbWFwX2hhbmRsZXMp IHsKPj4+IC3CoMKgwqDCoMKgwqDCoCBrZnJlZShtYXBfb3BzKTsKPj4+IC3CoMKgwqDCoMKgwqDC oCByZXR1cm4gLUVOT01FTTsKPj4+IC3CoMKgwqAgfQo+Pj4gLQo+Pj4gLcKgwqDCoCAvKgo+Pj4g LcKgwqDCoMKgICogcmVhZCBwYWdlIGRpcmVjdG9yeSB0byBnZXQgZ3JlZnMgZnJvbSB0aGUgYmFj a2VuZDogZm9yIGV4dGVybmFsCj4+PiAtwqDCoMKgwqAgKiBidWZmZXIgd2Ugb25seSBhbGxvY2F0 ZSBidWYtPmdyZWZzIGZvciB0aGUgcGFnZSBkaXJlY3RvcnksCj4+PiAtwqDCoMKgwqAgKiBzbyBi dWYtPm51bV9ncmVmcyBoYXMgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBwYWdlIGRpcmVjdG9yeSAK Pj4+IGl0c2VsZgo+Pj4gLcKgwqDCoMKgICovCj4+PiAtwqDCoMKgIHB0ciA9IGJ1Zi0+ZGlyZWN0 b3J5Owo+Pj4gLcKgwqDCoCBncmVmc19sZWZ0ID0gYnVmLT5udW1fcGFnZXM7Cj4+PiAtwqDCoMKg IGN1cl9wYWdlID0gMDsKPj4+IC3CoMKgwqAgZm9yIChjdXJfZGlyX3BhZ2UgPSAwOyBjdXJfZGly X3BhZ2UgPCBidWYtPm51bV9ncmVmczsgCj4+PiBjdXJfZGlyX3BhZ2UrKykgewo+Pj4gLcKgwqDC oMKgwqDCoMKgIHN0cnVjdCB4ZW5kaXNwbF9wYWdlX2RpcmVjdG9yeSAqcGFnZV9kaXIgPQo+Pj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoc3RydWN0IHhlbmRpc3BsX3BhZ2VfZGly ZWN0b3J5ICopcHRyOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIGludCB0b19jb3B5ID0gWEVOX0RSTV9O VU1fR1JFRlNfUEVSX1BBR0U7Cj4+PiAtCj4+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKHRvX2NvcHkg PiBncmVmc19sZWZ0KQo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdG9fY29weSA9IGdyZWZz X2xlZnQ7Cj4+PiAtCj4+PiAtwqDCoMKgwqDCoMKgwqAgZm9yIChjdXJfZ3JlZiA9IDA7IGN1cl9n cmVmIDwgdG9fY29weTsgY3VyX2dyZWYrKykgewo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cGh5c19hZGRyX3QgYWRkcjsKPj4+IC0KPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFkZHIg PSB4ZW5fcGFnZV90b192YWRkcihidWYtPnBhZ2VzW2N1cl9wYWdlXSk7Cj4+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBnbnR0YWJfc2V0X21hcF9vcCgmbWFwX29wc1tjdXJfcGFnZV0sIGFkZHIs Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdOVE1BUF9o b3N0X21hcCwKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cGFnZV9kaXItPmdyZWZbY3VyX2dyZWZdLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBidWYtPnhiX2Rldi0+b3RoZXJlbmRfaWQpOwo+Pj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgY3VyX3BhZ2UrKzsKPj4+IC3CoMKgwqDCoMKgwqDCoCB9Cj4+PiAtCj4+ PiAtwqDCoMKgwqDCoMKgwqAgZ3JlZnNfbGVmdCAtPSB0b19jb3B5Owo+Pj4gLcKgwqDCoMKgwqDC oMKgIHB0ciArPSBQQUdFX1NJWkU7Cj4+PiAtwqDCoMKgIH0KPj4+IC3CoMKgwqAgcmV0ID0gZ250 dGFiX21hcF9yZWZzKG1hcF9vcHMsIE5VTEwsIGJ1Zi0+cGFnZXMsIGJ1Zi0+bnVtX3BhZ2VzKTsK Pj4+IC0KPj4+IC3CoMKgwqAgLyogc2F2ZSBoYW5kbGVzIGV2ZW4gaWYgZXJyb3IsIHNvIHdlIGNh biB1bm1hcCAqLwo+Pj4gLcKgwqDCoCBmb3IgKGN1cl9wYWdlID0gMDsgY3VyX3BhZ2UgPCBidWYt Pm51bV9wYWdlczsgY3VyX3BhZ2UrKykgewo+Pj4gLcKgwqDCoMKgwqDCoMKgIGJ1Zi0+YmFja2Vu ZF9tYXBfaGFuZGxlc1tjdXJfcGFnZV0gPSBtYXBfb3BzW2N1cl9wYWdlXS5oYW5kbGU7Cj4+PiAt wqDCoMKgwqDCoMKgwqAgaWYgKHVubGlrZWx5KG1hcF9vcHNbY3VyX3BhZ2VdLnN0YXR1cyAhPSBH TlRTVF9va2F5KSkKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiRmFpbGVk IHRvIG1hcCBwYWdlICVkOiAlZFxuIiwKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGN1cl9wYWdlLCBtYXBfb3BzW2N1cl9wYWdlXS5zdGF0dXMpOwo+Pj4gLcKgwqDCoCB9 Cj4+PiAtCj4+PiAtwqDCoMKgIGlmIChyZXQpIHsKPj4+IC3CoMKgwqDCoMKgwqDCoCBEUk1fRVJS T1IoIkZhaWxlZCB0byBtYXAgZ3JhbnQgcmVmZXJlbmNlcywgcmV0ICVkIiwgcmV0KTsKPj4+IC3C oMKgwqDCoMKgwqDCoCBiYWNrZW5kX3VubWFwKGJ1Zik7Cj4+PiAtwqDCoMKgIH0KPj4+IC0KPj4+ IC3CoMKgwqAga2ZyZWUobWFwX29wcyk7Cj4+PiAtwqDCoMKgIHJldHVybiByZXQ7Cj4+PiAtfQo+ Pj4gLQo+Pj4gLXN0YXRpYyB2b2lkIGJhY2tlbmRfZmlsbF9wYWdlX2RpcihzdHJ1Y3QgeGVuX2Ry bV9mcm9udF9zaGJ1ZiAqYnVmKQo+Pj4gLXsKPj4+IC3CoMKgwqAgc3RydWN0IHhlbmRpc3BsX3Bh Z2VfZGlyZWN0b3J5ICpwYWdlX2RpcjsKPj4+IC3CoMKgwqAgdW5zaWduZWQgY2hhciAqcHRyOwo+ Pj4gLcKgwqDCoCBpbnQgaSwgbnVtX3BhZ2VzX2RpcjsKPj4+IC0KPj4+IC3CoMKgwqAgcHRyID0g YnVmLT5kaXJlY3Rvcnk7Cj4+PiAtwqDCoMKgIG51bV9wYWdlc19kaXIgPSBnZXRfbnVtX3BhZ2Vz X2RpcihidWYpOwo+Pj4gLQo+Pj4gLcKgwqDCoCAvKiBmaWxsIG9ubHkgZ3JlZnMgZm9yIHRoZSBw YWdlIGRpcmVjdG9yeSBpdHNlbGYgKi8KPj4+IC3CoMKgwqAgZm9yIChpID0gMDsgaSA8IG51bV9w YWdlc19kaXIgLSAxOyBpKyspIHsKPj4+IC3CoMKgwqDCoMKgwqDCoCBwYWdlX2RpciA9IChzdHJ1 Y3QgeGVuZGlzcGxfcGFnZV9kaXJlY3RvcnkgKilwdHI7Cj4+PiAtCj4+PiAtwqDCoMKgwqDCoMKg wqAgcGFnZV9kaXItPmdyZWZfZGlyX25leHRfcGFnZSA9IGJ1Zi0+Z3JlZnNbaSArIDFdOwo+Pj4g LcKgwqDCoMKgwqDCoMKgIHB0ciArPSBQQUdFX1NJWkU7Cj4+PiAtwqDCoMKgIH0KPj4+IC3CoMKg wqAgLyogbGFzdCBwYWdlIG11c3Qgc2F5IHRoZXJlIGlzIG5vIG1vcmUgcGFnZXMgKi8KPj4+IC3C oMKgwqAgcGFnZV9kaXIgPSAoc3RydWN0IHhlbmRpc3BsX3BhZ2VfZGlyZWN0b3J5ICopcHRyOwo+ Pj4gLcKgwqDCoCBwYWdlX2Rpci0+Z3JlZl9kaXJfbmV4dF9wYWdlID0gR1JBTlRfSU5WQUxJRF9S RUY7Cj4+PiAtfQo+Pj4gLQo+Pj4gLXN0YXRpYyB2b2lkIGd1ZXN0X2ZpbGxfcGFnZV9kaXIoc3Ry dWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1ZikKPj4+IC17Cj4+PiAtwqDCoMKgIHVuc2lnbmVk IGNoYXIgKnB0cjsKPj4+IC3CoMKgwqAgaW50IGN1cl9ncmVmLCBncmVmc19sZWZ0LCB0b19jb3B5 LCBpLCBudW1fcGFnZXNfZGlyOwo+Pj4gLQo+Pj4gLcKgwqDCoCBwdHIgPSBidWYtPmRpcmVjdG9y eTsKPj4+IC3CoMKgwqAgbnVtX3BhZ2VzX2RpciA9IGdldF9udW1fcGFnZXNfZGlyKGJ1Zik7Cj4+ PiAtCj4+PiAtwqDCoMKgIC8qCj4+PiAtwqDCoMKgwqAgKiB3aGlsZSBjb3B5aW5nLCBza2lwIGdy ZWZzIGF0IHN0YXJ0LCB0aGV5IGFyZSBmb3IgcGFnZXMKPj4+IC3CoMKgwqDCoCAqIGdyYW50ZWQg Zm9yIHRoZSBwYWdlIGRpcmVjdG9yeSBpdHNlbGYKPj4+IC3CoMKgwqDCoCAqLwo+Pj4gLcKgwqDC oCBjdXJfZ3JlZiA9IG51bV9wYWdlc19kaXI7Cj4+PiAtwqDCoMKgIGdyZWZzX2xlZnQgPSBidWYt Pm51bV9wYWdlczsKPj4+IC3CoMKgwqAgZm9yIChpID0gMDsgaSA8IG51bV9wYWdlc19kaXI7IGkr Kykgewo+Pj4gLcKgwqDCoMKgwqDCoMKgIHN0cnVjdCB4ZW5kaXNwbF9wYWdlX2RpcmVjdG9yeSAq cGFnZV9kaXIgPQo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoc3RydWN0IHhl bmRpc3BsX3BhZ2VfZGlyZWN0b3J5ICopcHRyOwo+Pj4gLQo+Pj4gLcKgwqDCoMKgwqDCoMKgIGlm IChncmVmc19sZWZ0IDw9IFhFTl9EUk1fTlVNX0dSRUZTX1BFUl9QQUdFKSB7Cj4+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB0b19jb3B5ID0gZ3JlZnNfbGVmdDsKPj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHBhZ2VfZGlyLT5ncmVmX2Rpcl9uZXh0X3BhZ2UgPSBHUkFOVF9JTlZBTElEX1JF RjsKPj4+IC3CoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdG9fY29weSA9IFhFTl9EUk1fTlVNX0dSRUZTX1BFUl9QQUdFOwo+Pj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcGFnZV9kaXItPmdyZWZfZGlyX25leHRfcGFnZSA9IGJ1Zi0+Z3JlZnNbaSAr IDFdOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIH0KPj4+IC3CoMKgwqDCoMKgwqDCoCBtZW1jcHkoJnBh Z2VfZGlyLT5ncmVmLCAmYnVmLT5ncmVmc1tjdXJfZ3JlZl0sCj4+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB0b19jb3B5ICogc2l6ZW9mKGdyYW50X3JlZl90KSk7Cj4+PiAtwqDCoMKg wqDCoMKgwqAgcHRyICs9IFBBR0VfU0laRTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBncmVmc19sZWZ0 IC09IHRvX2NvcHk7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgY3VyX2dyZWYgKz0gdG9fY29weTsKPj4+ IC3CoMKgwqAgfQo+Pj4gLX0KPj4+IC0KPj4+IC1zdGF0aWMgaW50IGd1ZXN0X2dyYW50X3JlZnNf Zm9yX2J1ZmZlcihzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAKPj4+ICpidWYsCj4+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ3JhbnRfcmVmX3QgKnBy aXZfZ3JlZl9oZWFkLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGludCBncmVmX2lkeCkKPj4+IC17Cj4+PiAtwqDCoMKgIGludCBpLCBjdXJfcmVmLCBv dGhlcmVuZF9pZDsKPj4+IC0KPj4+IC3CoMKgwqAgb3RoZXJlbmRfaWQgPSBidWYtPnhiX2Rldi0+ b3RoZXJlbmRfaWQ7Cj4+PiAtwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBidWYtPm51bV9wYWdlczsg aSsrKSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgY3VyX3JlZiA9IGdudHRhYl9jbGFpbV9ncmFudF9y ZWZlcmVuY2UocHJpdl9ncmVmX2hlYWQpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIGlmIChjdXJfcmVm IDwgMCkKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBjdXJfcmVmOwo+Pj4gLQo+ Pj4gLcKgwqDCoMKgwqDCoMKgIGdudHRhYl9ncmFudF9mb3JlaWduX2FjY2Vzc19yZWYoY3VyX3Jl Ziwgb3RoZXJlbmRfaWQsCj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB4ZW5fcGFnZV90b19nZm4oYnVmLT5wYWdlc1tpXSksCj4+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAwKTsKPj4+IC3CoMKgwqDCoMKg wqDCoCBidWYtPmdyZWZzW2dyZWZfaWR4KytdID0gY3VyX3JlZjsKPj4+IC3CoMKgwqAgfQo+Pj4g LcKgwqDCoCByZXR1cm4gMDsKPj4+IC19Cj4+PiAtCj4+PiAtc3RhdGljIGludCBncmFudF9yZWZl cmVuY2VzKHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCj4+PiAtewo+Pj4gLcKgwqDC oCBncmFudF9yZWZfdCBwcml2X2dyZWZfaGVhZDsKPj4+IC3CoMKgwqAgaW50IHJldCwgaSwgaiwg Y3VyX3JlZjsKPj4+IC3CoMKgwqAgaW50IG90aGVyZW5kX2lkLCBudW1fcGFnZXNfZGlyOwo+Pj4g LQo+Pj4gLcKgwqDCoCByZXQgPSBnbnR0YWJfYWxsb2NfZ3JhbnRfcmVmZXJlbmNlcyhidWYtPm51 bV9ncmVmcywgCj4+PiAmcHJpdl9ncmVmX2hlYWQpOwo+Pj4gLcKgwqDCoCBpZiAocmV0IDwgMCkg ewo+Pj4gLcKgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiQ2Fubm90IGFsbG9jYXRlIGdyYW50IHJl ZmVyZW5jZXNcbiIpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiAtwqDCoMKg IH0KPj4+IC0KPj4+IC3CoMKgwqAgb3RoZXJlbmRfaWQgPSBidWYtPnhiX2Rldi0+b3RoZXJlbmRf aWQ7Cj4+PiAtwqDCoMKgIGogPSAwOwo+Pj4gLcKgwqDCoCBudW1fcGFnZXNfZGlyID0gZ2V0X251 bV9wYWdlc19kaXIoYnVmKTsKPj4+IC3CoMKgwqAgZm9yIChpID0gMDsgaSA8IG51bV9wYWdlc19k aXI7IGkrKykgewo+Pj4gLcKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgZnJhbWU7Cj4+PiAt Cj4+PiAtwqDCoMKgwqDCoMKgwqAgY3VyX3JlZiA9IGdudHRhYl9jbGFpbV9ncmFudF9yZWZlcmVu Y2UoJnByaXZfZ3JlZl9oZWFkKTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAoY3VyX3JlZiA8IDAp Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gY3VyX3JlZjsKPj4+IC0KPj4+IC3C oMKgwqDCoMKgwqDCoCBmcmFtZSA9IHhlbl9wYWdlX3RvX2dmbih2aXJ0X3RvX3BhZ2UoYnVmLT5k aXJlY3RvcnkgKwo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFBB R0VfU0laRSAqIGkpKTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBnbnR0YWJfZ3JhbnRfZm9yZWlnbl9h Y2Nlc3NfcmVmKGN1cl9yZWYsIG90aGVyZW5kX2lkLCAKPj4+IGZyYW1lLCAwKTsKPj4+IC3CoMKg wqDCoMKgwqDCoCBidWYtPmdyZWZzW2orK10gPSBjdXJfcmVmOwo+Pj4gLcKgwqDCoCB9Cj4+PiAt Cj4+PiAtwqDCoMKgIGlmIChidWYtPm9wcy0+Z3JhbnRfcmVmc19mb3JfYnVmZmVyKSB7Cj4+PiAt wqDCoMKgwqDCoMKgwqAgcmV0ID0gYnVmLT5vcHMtPmdyYW50X3JlZnNfZm9yX2J1ZmZlcihidWYs ICZwcml2X2dyZWZfaGVhZCwgCj4+PiBqKTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+ Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+IC3CoMKgwqAgfQo+Pj4g LQo+Pj4gLcKgwqDCoCBnbnR0YWJfZnJlZV9ncmFudF9yZWZlcmVuY2VzKHByaXZfZ3JlZl9oZWFk KTsKPj4+IC3CoMKgwqAgcmV0dXJuIDA7Cj4+PiAtfQo+Pj4gLQo+Pj4gLXN0YXRpYyBpbnQgYWxs b2Nfc3RvcmFnZShzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKQo+Pj4gLXsKPj4+IC3C oMKgwqAgYnVmLT5ncmVmcyA9IGtjYWxsb2MoYnVmLT5udW1fZ3JlZnMsIHNpemVvZigqYnVmLT5n cmVmcyksIAo+Pj4gR0ZQX0tFUk5FTCk7Cj4+PiAtwqDCoMKgIGlmICghYnVmLT5ncmVmcykKPj4+ IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4+IC0KPj4+IC3CoMKgwqAgYnVmLT5k aXJlY3RvcnkgPSBrY2FsbG9jKGdldF9udW1fcGFnZXNfZGlyKGJ1ZiksIFBBR0VfU0laRSwgCj4+ PiBHRlBfS0VSTkVMKTsKPj4+IC3CoMKgwqAgaWYgKCFidWYtPmRpcmVjdG9yeSkKPj4+IC3CoMKg wqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4+IC0KPj4+IC3CoMKgwqAgcmV0dXJuIDA7Cj4+ PiAtfQo+Pj4gLQo+Pj4gLS8qCj4+PiAtICogRm9yIGJlIGFsbG9jYXRlZCBidWZmZXJzIHdlIGRv bid0IG5lZWQgZ3JhbnRfcmVmc19mb3JfYnVmZmVyIGFzIAo+Pj4gdGhvc2UKPj4+IC0gKiBncmFu dCByZWZlcmVuY2VzIGFyZSBhbGxvY2F0ZWQgYXQgYmFja2VuZCBzaWRlCj4+PiAtICovCj4+PiAt c3RhdGljIGNvbnN0IHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmX29wcyBiYWNrZW5kX29wcyA9 IHsKPj4+IC3CoMKgwqAgLmNhbGNfbnVtX2dyZWZzID0gYmFja2VuZF9jYWxjX251bV9ncmVmcywK Pj4+IC3CoMKgwqAgLmZpbGxfcGFnZV9kaXIgPSBiYWNrZW5kX2ZpbGxfcGFnZV9kaXIsCj4+PiAt wqDCoMKgIC5tYXAgPSBiYWNrZW5kX21hcCwKPj4+IC3CoMKgwqAgLnVubWFwID0gYmFja2VuZF91 bm1hcAo+Pj4gLX07Cj4+PiAtCj4+PiAtLyogRm9yIGxvY2FsbHkgZ3JhbnRlZCByZWZlcmVuY2Vz IHdlIGRvIG5vdCBuZWVkIHRvIG1hcC91bm1hcCB0aGUgCj4+PiByZWZlcmVuY2VzICovCj4+PiAt c3RhdGljIGNvbnN0IHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmX29wcyBsb2NhbF9vcHMgPSB7 Cj4+PiAtwqDCoMKgIC5jYWxjX251bV9ncmVmcyA9IGd1ZXN0X2NhbGNfbnVtX2dyZWZzLAo+Pj4g LcKgwqDCoCAuZmlsbF9wYWdlX2RpciA9IGd1ZXN0X2ZpbGxfcGFnZV9kaXIsCj4+PiAtwqDCoMKg IC5ncmFudF9yZWZzX2Zvcl9idWZmZXIgPSBndWVzdF9ncmFudF9yZWZzX2Zvcl9idWZmZXIsCj4+ PiAtfTsKPj4+IC0KPj4+IC1zdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqCj4+PiAteGVuX2Ry bV9mcm9udF9zaGJ1Zl9hbGxvYyhzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1Zl9jZmcgKmNmZykK Pj4+IC17Cj4+PiAtwqDCoMKgIHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWY7Cj4+PiAt wqDCoMKgIGludCByZXQ7Cj4+PiAtCj4+PiAtwqDCoMKgIGJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpi dWYpLCBHRlBfS0VSTkVMKTsKPj4+IC3CoMKgwqAgaWYgKCFidWYpCj4+PiAtwqDCoMKgwqDCoMKg wqAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4+PiAtCj4+PiAtwqDCoMKgIGlmIChjZmctPmJl X2FsbG9jKQo+Pj4gLcKgwqDCoMKgwqDCoMKgIGJ1Zi0+b3BzID0gJmJhY2tlbmRfb3BzOwo+Pj4g LcKgwqDCoCBlbHNlCj4+PiAtwqDCoMKgwqDCoMKgwqAgYnVmLT5vcHMgPSAmbG9jYWxfb3BzOwo+ Pj4gLQo+Pj4gLcKgwqDCoCBidWYtPnhiX2RldiA9IGNmZy0+eGJfZGV2Owo+Pj4gLcKgwqDCoCBi dWYtPm51bV9wYWdlcyA9IERJVl9ST1VORF9VUChjZmctPnNpemUsIFBBR0VfU0laRSk7Cj4+PiAt wqDCoMKgIGJ1Zi0+cGFnZXMgPSBjZmctPnBhZ2VzOwo+Pj4gLQo+Pj4gLcKgwqDCoCBidWYtPm9w cy0+Y2FsY19udW1fZ3JlZnMoYnVmKTsKPj4+IC0KPj4+IC3CoMKgwqAgcmV0ID0gYWxsb2Nfc3Rv cmFnZShidWYpOwo+Pj4gLcKgwqDCoCBpZiAocmV0KQo+Pj4gLcKgwqDCoMKgwqDCoMKgIGdvdG8g ZmFpbDsKPj4+IC0KPj4+IC3CoMKgwqAgcmV0ID0gZ3JhbnRfcmVmZXJlbmNlcyhidWYpOwo+Pj4g LcKgwqDCoCBpZiAocmV0KQo+Pj4gLcKgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPj4+IC0KPj4+ IC3CoMKgwqAgYnVmLT5vcHMtPmZpbGxfcGFnZV9kaXIoYnVmKTsKPj4+IC0KPj4+IC3CoMKgwqAg cmV0dXJuIGJ1ZjsKPj4+IC0KPj4+IC1mYWlsOgo+Pj4gLcKgwqDCoCB4ZW5fZHJtX2Zyb250X3No YnVmX2ZyZWUoYnVmKTsKPj4+IC3CoMKgwqAgcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4+IC19Cj4+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X3NoYnVmLmgg Cj4+PiBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9zaGJ1Zi5oCj4+PiBkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKPj4+IGluZGV4IDc1NDVjNjkyNTM5ZS4uMDAwMDAwMDAwMDAw Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfc2hidWYuaAo+Pj4g KysrIC9kZXYvbnVsbAo+Pj4gQEAgLTEsNjQgKzAsMCBAQAo+Pj4gLS8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLwo+Pj4gLQo+Pj4gLS8qCj4+PiAtICrCoCBYZW4g cGFyYS12aXJ0dWFsIERSTSBkZXZpY2UKPj4+IC0gKgo+Pj4gLSAqIENvcHlyaWdodCAoQykgMjAx Ni0yMDE4IEVQQU0gU3lzdGVtcyBJbmMuCj4+PiAtICoKPj4+IC0gKiBBdXRob3I6IE9sZWtzYW5k ciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KPj4+IC0g Ki8KPj4+IC0KPj4+IC0jaWZuZGVmIF9fWEVOX0RSTV9GUk9OVF9TSEJVRl9IXwo+Pj4gLSNkZWZp bmUgX19YRU5fRFJNX0ZST05UX1NIQlVGX0hfCj4+PiAtCj4+PiAtI2luY2x1ZGUgPGxpbnV4L2tl cm5lbC5oPgo+Pj4gLSNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgo+Pj4gLQo+Pj4gLSNp bmNsdWRlIDx4ZW4vZ3JhbnRfdGFibGUuaD4KPj4+IC0KPj4+IC1zdHJ1Y3QgeGVuX2RybV9mcm9u dF9zaGJ1ZiB7Cj4+PiAtwqDCoMKgIC8qCj4+PiAtwqDCoMKgwqAgKiBudW1iZXIgb2YgcmVmZXJl bmNlcyBncmFudGVkIGZvciB0aGUgYmFja2VuZCB1c2U6Cj4+PiAtwqDCoMKgwqAgKsKgIC0gZm9y IGFsbG9jYXRlZC9pbXBvcnRlZCBkbWEtYnVmJ3MgdGhpcyBob2xkcyBudW1iZXIgb2YgZ3JhbnQK Pj4+IC3CoMKgwqDCoCAqwqDCoMKgIHJlZmVyZW5jZXMgZm9yIHRoZSBwYWdlIGRpcmVjdG9yeSBh bmQgcGFnZXMgb2YgdGhlIGJ1ZmZlcgo+Pj4gLcKgwqDCoMKgICrCoCAtIGZvciB0aGUgYnVmZmVy IHByb3ZpZGVkIGJ5IHRoZSBiYWNrZW5kIHRoaXMgaG9sZHMgbnVtYmVyIG9mCj4+PiAtwqDCoMKg wqAgKsKgwqDCoCBncmFudCByZWZlcmVuY2VzIGZvciB0aGUgcGFnZSBkaXJlY3RvcnkgYXMgZ3Jh bnQgCj4+PiByZWZlcmVuY2VzIGZvcgo+Pj4gLcKgwqDCoMKgICrCoMKgwqAgdGhlIGJ1ZmZlciB3 aWxsIGJlIHByb3ZpZGVkIGJ5IHRoZSBiYWNrZW5kCj4+PiAtwqDCoMKgwqAgKi8KPj4+IC3CoMKg wqAgaW50IG51bV9ncmVmczsKPj4+IC3CoMKgwqAgZ3JhbnRfcmVmX3QgKmdyZWZzOwo+Pj4gLcKg wqDCoCB1bnNpZ25lZCBjaGFyICpkaXJlY3Rvcnk7Cj4+PiAtCj4+PiAtwqDCoMKgIGludCBudW1f cGFnZXM7Cj4+PiAtwqDCoMKgIHN0cnVjdCBwYWdlICoqcGFnZXM7Cj4+PiAtCj4+PiAtwqDCoMKg IHN0cnVjdCB4ZW5idXNfZGV2aWNlICp4Yl9kZXY7Cj4+PiAtCj4+PiAtwqDCoMKgIC8qIHRoZXNl IGFyZSB0aGUgb3BzIHVzZWQgaW50ZXJuYWxseSBkZXBlbmRpbmcgb24gYmVfYWxsb2MgbW9kZSAq Lwo+Pj4gLcKgwqDCoCBjb25zdCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1Zl9vcHMgKm9wczsK Pj4+IC0KPj4+IC3CoMKgwqAgLyogWGVuIG1hcCBoYW5kbGVzIGZvciB0aGUgYnVmZmVyIGFsbG9j YXRlZCBieSB0aGUgYmFja2VuZCAqLwo+Pj4gLcKgwqDCoCBncmFudF9oYW5kbGVfdCAqYmFja2Vu ZF9tYXBfaGFuZGxlczsKPj4+IC19Owo+Pj4gLQo+Pj4gLXN0cnVjdCB4ZW5fZHJtX2Zyb250X3No YnVmX2NmZyB7Cj4+PiAtwqDCoMKgIHN0cnVjdCB4ZW5idXNfZGV2aWNlICp4Yl9kZXY7Cj4+PiAt wqDCoMKgIHNpemVfdCBzaXplOwo+Pj4gLcKgwqDCoCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwo+Pj4g LcKgwqDCoCBib29sIGJlX2FsbG9jOwo+Pj4gLX07Cj4+PiAtCj4+PiAtc3RydWN0IHhlbl9kcm1f ZnJvbnRfc2hidWYgKgo+Pj4gLXhlbl9kcm1fZnJvbnRfc2hidWZfYWxsb2Moc3RydWN0IHhlbl9k cm1fZnJvbnRfc2hidWZfY2ZnICpjZmcpOwo+Pj4gLQo+Pj4gLWdyYW50X3JlZl90IHhlbl9kcm1f ZnJvbnRfc2hidWZfZ2V0X2Rpcl9zdGFydChzdHJ1Y3QgCj4+PiB4ZW5fZHJtX2Zyb250X3NoYnVm ICpidWYpOwo+Pj4gLQo+Pj4gLWludCB4ZW5fZHJtX2Zyb250X3NoYnVmX21hcChzdHJ1Y3QgeGVu X2RybV9mcm9udF9zaGJ1ZiAqYnVmKTsKPj4+IC0KPj4+IC1pbnQgeGVuX2RybV9mcm9udF9zaGJ1 Zl91bm1hcChzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKTsKPj4+IC0KPj4+IC12b2lk IHhlbl9kcm1fZnJvbnRfc2hidWZfZmx1c2goc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1 Zik7Cj4+PiAtCj4+PiAtdm9pZCB4ZW5fZHJtX2Zyb250X3NoYnVmX2ZyZWUoc3RydWN0IHhlbl9k cm1fZnJvbnRfc2hidWYgKmJ1Zik7Cj4+PiAtCj4+PiAtI2VuZGlmIC8qIF9fWEVOX0RSTV9GUk9O VF9TSEJVRl9IXyAqLwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZl bA==