From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 9/9] drm/i915: Add render decompression support Date: Thu, 5 Jan 2017 17:12:59 +0200 Message-ID: <20170105151259.GS31595@intel.com> References: <20170104184232.23048-1-ville.syrjala@linux.intel.com> <20170104184232.23048-10-ville.syrjala@linux.intel.com> <1483557244.2499.14.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1483557244.2499.14.camel@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Paulo Zanoni Cc: intel-gfx@lists.freedesktop.org, Ben Widawsky , dri-devel@lists.freedesktop.org, Vandana Kannan List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBKYW4gMDQsIDIwMTcgYXQgMDU6MTQ6MDRQTSAtMDIwMCwgUGF1bG8gWmFub25pIHdy b3RlOgo+IEVtIFF1YSwgMjAxNy0wMS0wNCDDoHMgMjA6NDIgKzAyMDAsIHZpbGxlLnN5cmphbGFA bGludXguaW50ZWwuY29tCj4gZXNjcmV2ZXU6Cj4gPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZp bGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4gCj4gPiBTS0wrIGRpc3BsYXkgZW5naW5l IGNhbiBzY2FuIG91dCBjZXJ0YWluIGtpbmRzIG9mIGNvbXByZXNzZWQgc3VyZmFjZXMKPiA+IHBy b2R1Y2VkIGJ5IHRoZSByZW5kZXIgZW5naW5lLiBUaGlzIGludm9sdmVkIHRlbGxpbmcgdGhlIGRp c3BsYXkKPiA+IGVuZ2luZQo+ID4gdGhlIGxvY2F0aW9uIG9mIHRoZSBjb2xvciBjb250cm9sIHN1 cmZhZSAoQ0NTKSB3aGljaCBkZXNjcmliZXMKPiA+IHdoaWNoIHBhcnRzIG9mIHRoZSBtYWluIHN1 cmZhY2UgYXJlIGNvbXByZXNzZWQgYW5kIHdoaWNoIGFyZSBub3QuIFRoZQo+ID4gbG9jYXRpb24g b2YgQ0NTIGlzIHByb3ZpZGVkIGJ5IHVzZXJzcGFjZSBhcyBqdXN0IGFub3RoZXIgcGxhbmUgd2l0 aAo+ID4gaXRzCj4gPiBvd24gb2Zmc2V0Lgo+ID4gCj4gPiBBZGQgdGhlIHJlcXVpcmVkIHN0dWZm IHRvIHZhbGlkYXRlIHRoZSB1c2VyIHByb3ZpZGVkIEFVWCBwbGFuZQo+ID4gbWV0YWRhdGEKPiA+ IGFuZCBjb252ZXJ0IHRoZSB1c2VyIHByb3ZpZGVkIGxpbmVhciBvZmZzZXQgaW50byBzb21ldGhp bmcgdGhlCj4gPiBoYXJkd2FyZQo+ID4gY2FuIGNvbnN1bWUuCj4gPiAKPiA+IER1ZSB0byBoYXJk d2FyZSBsaW1pdGF0aW9ucyB3ZSByZXF1aXJlIHRoYXQgdGhlIG1haW4gc3VyZmFjZSBhbmQKPiA+ IHRoZSBBVVggc3VyZmFjZSAoQ0NTKSBiZSBwYXJ0IG9mIHRoZSBzYW1lIGJvLiBUaGUgaGFyZHdh cmUgYWxzbwo+ID4gbWFrZXMgbGlmZSBoYXJkIGJ5IG5vdCBhbGxvd2luZyB5b3UgdG8gcHJvdmlk ZSBzZXBhcmF0ZSB4L3kgb2Zmc2V0cwo+ID4gZm9yIHRoZSBtYWluIGFuZCBBVVggc3VyZmFjZXMg KGV4Y3BldCB3aXRoIE5WMTIpLCBzbyBmaW5kaW5nIHN1aXRhYmxlCj4gPiBvZmZzZXRzIGZvciBi b3RoIHJlcXVpcmVzIGEgYml0IG9mIHdvcmsuIEFzc3VtaW5nIHdlIHN0aWxsIHdhbnQga2VlcAo+ ID4gcGxheWluZyB0cmlja3Mgd2l0aCB0aGUgb2Zmc2V0cy4gSSd2ZSBqdXN0IGdvbmUgd2l0aCBh IGR1bWIgInNlYXJjaAo+ID4gYmFja3dhcmQgZm9yIHN1aXRhYmxlIG9mZnNldHMiIGFwcHJvYWNo LCB3aGljaCBpcyBmYXIgZnJvbSBvcHRpbWFsLAo+ID4gYnV0IGl0IHdvcmtzLgo+ID4gCj4gPiBB bHNvIG5vdCBhbGwgcGxhbmVzIHdpbGwgYmUgY2FwYWJsZSBvZiBzY2FubmluZyBvdXQgY29tcHJl c3NlZAo+ID4gc3VyZmFjZXMsCj4gPiBhbmQgZWcuIDkwLzI3MCBkZWdyZWUgcm90YXRpb24gaXMg bm90IHN1cHBvcnRlZCBpbiBjb21iaW5hdGlvbiB3aXRoCj4gPiBkZWNvbXByZXNzaW9uIGVpdGhl ci4KPiA+IAo+ID4gVGhpcyBwYXRjaCBtYXkgY29udGFpbiB3b3JrIGZyb20gYXQgbGVhc3QgdGhl IGZvbGxvd2luZyBwZW9wbGU6Cj4gPiAqIFZhbmRhbmEgS2FubmFuIDx2YW5kYW5hLmthbm5hbkBp bnRlbC5jb20+Cj4gPiAqIERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4KPiA+ICogQmVu IFdpZGF3c2t5IDxiZW5AYndpZGF3c2submV0Pgo+IAo+IEFzIEkgbWVudGlvbmVkIHRvIEJlbiBp biB0aGUgb3RoZXIgZW1haWwsIHRoZXJlIGFyZSBzb21lIHBvaW50cyBvZgo+IEJTcGVjIHRoYXQg c2F5ICJpZiByZW5kZXIgZGVjb21wcmVzc2lvbiBpcyBlbmFibGVkLCB0byB0aGlzIiwgd2hpY2gg d2UKPiBsYXJnZWx5IGlnbm9yZWQgc28gZmFyLiBJIGhvcGUgdGhleSBhcmUgYWxsIG1hcmtlZCBh cyB3b3JrYXJvdW5kcy4gRnJvbQo+IGEgcXVpY2sgbG9vaywgaXQgbG9va3MgbGlrZSB3ZSBuZWVk IGF0IGxlYXN0IERpc3BsYXkgV0FzICMwMzkwLCAjMDUzMQo+IGFuZCAjMTEyNSwgYW5kIG1heWJl IHNvbWUgb3RoZXIgbm9uLWRpc3BsYXkgV0FzIChwbGVhc2UgdGFrZSBhIGxvb2sgYXQKPiB0aGUg QlNwZWMgbGlzdCkuIEknbGwgYXNzdW1lIHRoZXkgd2VyZSBub3QgaW1wbGVtZW50ZWQgeWV0IHNp bmNlIEkKPiBkb24ndCBzZWUgV0EgY29tbWVudHMgb24gdGhlIHBhdGNoZXMuIEkgdGhpbmsgd2Ug bmVlZCB0aGVtLCBvdGhlcndpc2UKPiB3ZSBtYXkgaW50cm9kdWNlIG1vcmUgU0tMIGZsaWNrZXJp bmcgcHJvYmxlbXMuCgpJIHdlbnQgdGhyb3VnaCB0aGUgbGlzdCBhbmQgdGhvc2UgdGhyZWUgZG8g c2VlbSBsaWtlIHRoZSBsaWtlbHkgdGhpbmdzCndlIHdhbnQuIEknbGwgcG9zdCBhIHJldmlzZWQg cGF0Y2ggd2l0aCB0aG9zZSBpbmNsdWRlZC4KCj4gCj4gVGhhbmtzLAo+IFBhdWxvCj4gCj4gPiAK PiA+IENjOiBWYW5kYW5hIEthbm5hbiA8dmFuZGFuYS5rYW5uYW5AaW50ZWwuY29tPgo+ID4gQ2M6 IERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4KPiA+IENjOiBCZW4gV2lkYXdza3kgPGJl bkBid2lkYXdzay5uZXQ+Cj4gPiBDYzogSmFzb24gRWtzdHJhbmQgPGphc29uQGpsZWtzdHJhbmQu bmV0Pgo+ID4gU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxp bnV4LmludGVsLmNvbT4KPiA+IC0tLQo+ID4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5owqDCoMKgwqDCoMKgfMKgwqAyMiArKysrCj4gPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYyB8IDIxOQo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LS0KPiA+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uY8KgwqDCoMKgwqDCoHzCoMKg wqA4ICstCj4gPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jwqDCoHzCoMKg wqA1ICsKPiA+IMKgNCBmaWxlcyBjaGFuZ2VkLCAyNDAgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRp b25zKC0pCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5oCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiA+IGluZGV4IDAwOTcw YWE3N2FmYS4uMDVlMThlNzQyNzc2IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9yZWcuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ ID4gQEAgLTYyMDksNiArNjIwOSwyOCBAQCBlbnVtIHsKPiA+IMKgCQkJX0lEKGlkLCBfUFNfRUND X1NUQVRfMUEsCj4gPiBfUFNfRUNDX1NUQVRfMkEpLMKgwqDCoFwKPiA+IMKgCQkJX0lEKGlkLCBf UFNfRUNDX1NUQVRfMUIsIF9QU19FQ0NfU1RBVF8yQikpCj4gPiDCoAo+ID4gKyNkZWZpbmUgUExB TkVfQVVYX0RJU1RfMV9BCQkweDcwMWMwCj4gPiArI2RlZmluZSBQTEFORV9BVVhfRElTVF8yX0EJ CTB4NzAyYzAKPiA+ICsjZGVmaW5lIFBMQU5FX0FVWF9ESVNUXzFfQgkJMHg3MTFjMAo+ID4gKyNk ZWZpbmUgUExBTkVfQVVYX0RJU1RfMl9CCQkweDcxMmMwCj4gPiArI2RlZmluZSBfUExBTkVfQVVY X0RJU1RfMShwaXBlKSBcCj4gPiArCQkJX1BJUEUocGlwZSwgUExBTkVfQVVYX0RJU1RfMV9BLAo+ ID4gUExBTkVfQVVYX0RJU1RfMV9CKQo+ID4gKyNkZWZpbmUgX1BMQU5FX0FVWF9ESVNUXzIocGlw ZSkgXAo+ID4gKwkJCV9QSVBFKHBpcGUsIFBMQU5FX0FVWF9ESVNUXzJfQSwKPiA+IFBMQU5FX0FV WF9ESVNUXzJfQikKPiA+ICsjZGVmaW5lIFBMQU5FX0FVWF9ESVNUKHBpcGUsIHBsYW5lKcKgwqDC oMKgwqBcCj4gPiArCV9NTUlPX1BMQU5FKHBsYW5lLCBfUExBTkVfQVVYX0RJU1RfMShwaXBlKSwK PiA+IF9QTEFORV9BVVhfRElTVF8yKHBpcGUpKQo+ID4gKwo+ID4gKyNkZWZpbmUgUExBTkVfQVVY X09GRlNFVF8xX0EJCTB4NzAxYzQKPiA+ICsjZGVmaW5lIFBMQU5FX0FVWF9PRkZTRVRfMl9BCQkw eDcwMmM0Cj4gPiArI2RlZmluZSBQTEFORV9BVVhfT0ZGU0VUXzFfQgkJMHg3MTFjNAo+ID4gKyNk ZWZpbmUgUExBTkVfQVVYX09GRlNFVF8yX0IJCTB4NzEyYzQKPiA+ICsjZGVmaW5lIF9QTEFORV9B VVhfT0ZGU0VUXzEocGlwZSnCoMKgwqDCoMKgwqDCoFwKPiA+ICsJCV9QSVBFKHBpcGUsIFBMQU5F X0FVWF9PRkZTRVRfMV9BLAo+ID4gUExBTkVfQVVYX09GRlNFVF8xX0IpCj4gPiArI2RlZmluZSBf UExBTkVfQVVYX09GRlNFVF8yKHBpcGUpwqDCoMKgwqDCoMKgwqBcCj4gPiArCQlfUElQRShwaXBl LCBQTEFORV9BVVhfT0ZGU0VUXzJfQSwKPiA+IFBMQU5FX0FVWF9PRkZTRVRfMl9CKQo+ID4gKyNk ZWZpbmUgUExBTkVfQVVYX09GRlNFVChwaXBlLCBwbGFuZSnCoMKgwqBcCj4gPiArCV9NTUlPX1BM QU5FKHBsYW5lLCBfUExBTkVfQVVYX09GRlNFVF8xKHBpcGUpLAo+ID4gX1BMQU5FX0FVWF9PRkZT RVRfMihwaXBlKSkKPiA+ICsKPiA+IMKgLyogbGVnYWN5IHBhbGV0dGUgKi8KPiA+IMKgI2RlZmlu ZSBfTEdDX1BBTEVUVEVfQcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDRhMDAwCj4gPiDCoCNkZWZp bmUgX0xHQ19QQUxFVFRFX0LCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHg0YTgwMAo+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+IGluZGV4IDM4ZGU5ZGYwZWM2MC4uYjU0 NzMzMmVlZGExIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ IEBAIC0yMDY0LDExICsyMDY0LDE5IEBAIGludGVsX3RpbGVfd2lkdGhfYnl0ZXMoY29uc3Qgc3Ry dWN0Cj4gPiBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUpCj4gPiDCoAkJCXJldHVybiAx Mjg7Cj4gPiDCoAkJZWxzZQo+ID4gwqAJCQlyZXR1cm4gNTEyOwo+ID4gKwljYXNlIEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEX0NDUzoKPiA+ICsJCWlmIChwbGFuZSA9PSAxKQo+ID4gKwkJCXJldHVy biA2NDsKPiA+ICsJCS8qIGZhbGwgdGhyb3VnaCAqLwo+ID4gwqAJY2FzZSBJOTE1X0ZPUk1BVF9N T0RfWV9USUxFRDoKPiA+IMKgCQlpZiAoSVNfR0VOMihkZXZfcHJpdikgfHwKPiA+IEhBU18xMjhf QllURV9ZX1RJTElORyhkZXZfcHJpdikpCj4gPiDCoAkJCXJldHVybiAxMjg7Cj4gPiDCoAkJZWxz ZQo+ID4gwqAJCQlyZXR1cm4gNTEyOwo+ID4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxF RF9DQ1M6Cj4gPiArCQlpZiAocGxhbmUgPT0gMSkKPiA+ICsJCQlyZXR1cm4gNjQ7Cj4gPiArCQkv KiBmYWxsIHRocm91Z2ggKi8KPiA+IMKgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgo+ ID4gwqAJCS8qCj4gPiDCoAkJwqAqIEJzcGVjIHNlZW1zIHRvIHN1Z2dlc3QgdGhhdCB0aGUgWWYg dGlsZSB3aWR0aAo+ID4gd291bGQKPiA+IEBAIC0yMTU2LDcgKzIxNjQsNyBAQCBzdGF0aWMgdW5z aWduZWQgaW50IGludGVsX3N1cmZfYWxpZ25tZW50KGNvbnN0Cj4gPiBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiwKPiA+IMKgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoZmItPmRldik7Cj4gPiDCoAo+ID4gwqAJLyogQVVYX0RJU1QgbmVlZHMgb25seSA0SyBh bGlnbm1lbnQgKi8KPiA+IC0JaWYgKGZiLT5mb3JtYXQtPmZvcm1hdCA9PSBEUk1fRk9STUFUX05W MTIgJiYgcGxhbmUgPT0gMSkKPiA+ICsJaWYgKHBsYW5lID09IDEpCj4gPiDCoAkJcmV0dXJuIDQw OTY7Cj4gPiDCoAo+ID4gwqAJc3dpdGNoIChmYi0+bW9kaWZpZXIpIHsKPiA+IEBAIC0yMTY2LDYg KzIxNzQsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGludGVsX3N1cmZfYWxpZ25tZW50KGNvbnN0 Cj4gPiBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiA+IMKgCQlpZiAoSU5URUxfR0VOKGRl dl9wcml2KSA+PSA5KQo+ID4gwqAJCQlyZXR1cm4gMjU2ICogMTAyNDsKPiA+IMKgCQlyZXR1cm4g MDsKPiA+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Cj4gPiArCWNhc2UgSTkx NV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKPiA+IMKgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lf VElMRUQ6Cj4gPiDCoAljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKPiA+IMKgCQlyZXR1 cm4gMSAqIDEwMjQgKiAxMDI0Owo+ID4gQEAgLTI0NzIsNiArMjQ4Miw3IEBAIHN0YXRpYyB1bnNp Z25lZCBpbnQKPiA+IGludGVsX2ZiX21vZGlmaWVyX3RvX3RpbGluZyh1aW50NjRfdCBmYl9tb2Rp ZmllcikKPiA+IMKgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6Cj4gPiDCoAkJcmV0dXJu IEk5MTVfVElMSU5HX1g7Cj4gPiDCoAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgo+ID4g KwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKPiA+IMKgCQlyZXR1cm4gSTkxNV9U SUxJTkdfWTsKPiA+IMKgCWRlZmF1bHQ6Cj4gPiDCoAkJcmV0dXJuIEk5MTVfVElMSU5HX05PTkU7 Cj4gPiBAQCAtMjUzNiw2ICsyNTQ3LDM1IEBAIGludGVsX2ZpbGxfZmJfaW5mbyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZQo+ID4gKmRldl9wcml2LAo+ID4gwqAKPiA+IMKgCQlpbnRlbF9mYl9vZmZz ZXRfdG9feHkoJngsICZ5LCBmYiwgaSk7Cj4gPiDCoAo+ID4gKwkJaWYgKChmYi0+bW9kaWZpZXIg PT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8Cj4gPiArCQnCoMKgwqDCoMKgZmItPm1v ZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1MpCj4gPiAmJiBpID09IDEpIHsK PiA+ICsJCQlpbnQgbWFpbl94LCBtYWluX3k7Cj4gPiArCQkJaW50IGNjc194LCBjY3NfeTsKPiA+ ICsKPiA+ICsJCQkvKgo+ID4gKwkJCcKgKiBFYWNoIGJ5dGUgb2YgQ0NTIGNvcnJlc3BvbmRzIHRv IGEgMTZ4OAo+ID4gYXJlYSBvZiB0aGUgbWFpbiBzdXJmYWNlLCBhbmQKPiA+ICsJCQnCoCogZWFj aCBDQ1MgdGlsZSBpcyA2NHg2NCBieXRlcy4KPiA+ICsJCQnCoCovCj4gPiArCQkJY2NzX3ggPSAo eCAqIDE2KSAlICg2NCAqIDE2KTsKPiA+ICsJCQljY3NfeSA9ICh5ICogOCkgJSAoNjQgKiA4KTsK PiA+ICsJCQltYWluX3ggPSBpbnRlbF9mYi0+bm9ybWFsWzBdLnggJSAoNjQgKiAxNik7Cj4gPiAr CQkJbWFpbl95ID0gaW50ZWxfZmItPm5vcm1hbFswXS55ICUgKDY0ICogOCk7Cj4gPiArCj4gPiAr CQkJLyoKPiA+ICsJCQnCoCogQ0NTIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIHgveSBvZmZzZXQKPiA+ IHJlZ2lzdGVyLCBzbyB0aGUgaW50cmEgQ0NTIHRpbGUKPiA+ICsJCQnCoCogeC95IG9mZnNldHMg bXVzdCBtYXRjaCBiZXR3ZWVuIENDUyBhbmQKPiA+IHRoZSBtYWluIHN1cmZhY2UuCj4gPiArCQkJ wqAqLwo+ID4gKwkJCWlmIChtYWluX3ggIT0gY2NzX3ggfHwgbWFpbl95ICE9IGNjc195KSB7Cj4g PiArCQkJCURSTV9ERUJVR19LTVMoIkJhZCBDQ1MgeC95IChtYWluCj4gPiAlZCwlZCBjY3MgJWQs JWQpIGZ1bGwgKG1haW4gJWQsJWQgY2NzICVkLCVkKVxuIiwKPiA+ICsJCQkJCcKgwqDCoMKgwqDC oG1haW5feCwgbWFpbl95LAo+ID4gKwkJCQkJwqDCoMKgwqDCoMKgY2NzX3gsIGNjc195LAo+ID4g KwkJCQkJwqDCoMKgwqDCoMKgaW50ZWxfZmItPm5vcm1hbFswXS54LAo+ID4gKwkJCQkJwqDCoMKg wqDCoMKgaW50ZWxfZmItPm5vcm1hbFswXS55LAo+ID4gKwkJCQkJwqDCoMKgwqDCoMKgeCwgeSk7 Cj4gPiArCQkJCXJldHVybiAtRUlOVkFMOwo+ID4gKwkJCX0KPiA+ICsJCX0KPiA+ICsKPiA+IMKg CQkvKgo+ID4gwqAJCcKgKiBUaGUgZmVuY2UgKGlmIHVzZWQpIGlzIGFsaWduZWQgdG8gdGhlIHN0 YXJ0IG9mCj4gPiB0aGUgb2JqZWN0Cj4gPiDCoAkJwqAqIHNvIGhhdmluZyB0aGUgZnJhbWVidWZm ZXIgd3JhcCBhcm91bmQgYWNyb3NzIHRoZQo+ID4gZWRnZSBvZiB0aGUKPiA+IEBAIC0yODczLDYg KzI5MTMsOSBAQCBzdGF0aWMgaW50IHNrbF9tYXhfcGxhbmVfd2lkdGgoY29uc3Qgc3RydWN0Cj4g PiBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCj4gPiDCoAkJCWJyZWFrOwo+ID4gwqAJ CX0KPiA+IMKgCQlicmVhazsKPiA+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6 Cj4gPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKPiA+ICsJCS8qIEZJWE1F IEFVWCBwbGFuZT8gKi8KPiA+IMKgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Cj4gPiDC oAljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKPiA+IMKgCQlzd2l0Y2ggKGNwcCkgewo+ ID4gQEAgLTI4OTUsNiArMjkzOCw0MiBAQCBzdGF0aWMgaW50IHNrbF9tYXhfcGxhbmVfd2lkdGgo Y29uc3Qgc3RydWN0Cj4gPiBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCj4gPiDCoAly ZXR1cm4gMjA0ODsKPiA+IMKgfQo+ID4gwqAKPiA+ICtzdGF0aWMgYm9vbCBza2xfY2hlY2tfbWFp bl9jY3NfY29vcmRpbmF0ZXMoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlCj4gPiAqcGxhbmVfc3Rh dGUsCj4gPiArCQkJCQnCoMKgwqBpbnQgbWFpbl94LCBpbnQgbWFpbl95LAo+ID4gdTMyIG1haW5f b2Zmc2V0KQo+ID4gK3sKPiA+ICsJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBw bGFuZV9zdGF0ZS0+YmFzZS5mYjsKPiA+ICsJaW50IGF1eF94ID0gcGxhbmVfc3RhdGUtPmF1eC54 Owo+ID4gKwlpbnQgYXV4X3kgPSBwbGFuZV9zdGF0ZS0+YXV4Lnk7Cj4gPiArCXUzMiBhdXhfb2Zm c2V0ID0gcGxhbmVfc3RhdGUtPmF1eC5vZmZzZXQ7Cj4gPiArCXUzMiBhbGlnbm1lbnQgPSBpbnRl bF9zdXJmX2FsaWdubWVudChmYiwgMSk7Cj4gPiArCj4gPiArCXdoaWxlIChhdXhfb2Zmc2V0ID49 IG1haW5fb2Zmc2V0ICYmIGF1eF95IDw9IG1haW5feSkgewo+ID4gKwkJaW50IHgsIHk7Cj4gPiAr Cj4gPiArCQlpZiAoYXV4X3ggPT0gbWFpbl94ICYmIGF1eF95ID09IG1haW5feSkKPiA+ICsJCQli cmVhazsKPiA+ICsKPiA+ICsJCWlmIChhdXhfb2Zmc2V0ID09IDApCj4gPiArCQkJYnJlYWs7Cj4g PiArCj4gPiArCQl4ID0gYXV4X3ggLyAxNjsKPiA+ICsJCXkgPSBhdXhfeSAvIDg7Cj4gPiArCQlh dXhfb2Zmc2V0ID0gaW50ZWxfYWRqdXN0X3RpbGVfb2Zmc2V0KCZ4LCAmeSwKPiA+IHBsYW5lX3N0 YXRlLCAxLAo+ID4gKwkJCQkJCcKgwqDCoMKgwqDCoGF1eF9vZmZzZXQsCj4gPiBhdXhfb2Zmc2V0 IC0gYWxpZ25tZW50KTsKPiA+ICsJCWF1eF94ID0geCAqIDE2ICsgYXV4X3ggJSAxNjsKPiA+ICsJ CWF1eF95ID0geSAqIDggKyBhdXhfeSAlIDg7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKGF1eF94 ICE9IG1haW5feCB8fCBhdXhfeSAhPSBtYWluX3kpCj4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiAr Cj4gPiArCXBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0ID0gYXV4X29mZnNldDsKPiA+ICsJcGxhbmVf c3RhdGUtPmF1eC54ID0gYXV4X3g7Cj4gPiArCXBsYW5lX3N0YXRlLT5hdXgueSA9IGF1eF95Owo+ ID4gKwo+ID4gKwlyZXR1cm4gdHJ1ZTsKPiA+ICt9Cj4gPiArCj4gPiDCoHN0YXRpYyBpbnQgc2ts X2NoZWNrX21haW5fc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUKPiA+ICpwbGFuZV9z dGF0ZSkKPiA+IMKgewo+ID4gwqAJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBw bGFuZV9zdGF0ZS0+YmFzZS5mYjsKPiA+IEBAIC0yOTM3LDcgKzMwMTYsNyBAQCBzdGF0aWMgaW50 IHNrbF9jaGVja19tYWluX3N1cmZhY2Uoc3RydWN0Cj4gPiBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUpCj4gPiDCoAo+ID4gwqAJCXdoaWxlICgoeCArIHcpICogY3BwID4gZmItPnBpdGNo ZXNbMF0pIHsKPiA+IMKgCQkJaWYgKG9mZnNldCA9PSAwKSB7Cj4gPiAtCQkJCURSTV9ERUJVR19L TVMoIlVuYWJsZSB0byBmaW5kCj4gPiBzdWl0YWJsZSBkaXNwbGF5IHN1cmZhY2Ugb2Zmc2V0XG4i KTsKPiA+ICsJCQkJRFJNX0RFQlVHX0tNUygiVW5hYmxlIHRvIGZpbmQKPiA+IHN1aXRhYmxlIGRp c3BsYXkgc3VyZmFjZSBvZmZzZXQgZHVlIHRvIFgtdGlsaW5nXG4iKTsKPiA+IMKgCQkJCXJldHVy biAtRUlOVkFMOwo+ID4gwqAJCQl9Cj4gPiDCoAo+ID4gQEAgLTI5NDYsNiArMzAyNSwyNiBAQCBz dGF0aWMgaW50IHNrbF9jaGVja19tYWluX3N1cmZhY2Uoc3RydWN0Cj4gPiBpbnRlbF9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGUpCj4gPiDCoAkJfQo+ID4gwqAJfQo+ID4gwqAKPiA+ICsJLyoKPiA+ ICsJwqAqIENDUyBBVVggc3VyZmFjZSBkb2Vzbid0IGhhdmUgaXRzIG93biB4L3kgb2Zmc2V0cywg d2UgbXVzdAo+ID4gbWFrZSBzdXJlCj4gPiArCcKgKiB0aGV5IG1hdGNoIHdpdGggdGhlIG1haW4g c3VyZmFjZSB4L3kgb2Zmc2V0cy4KPiA+ICsJwqAqLwo+ID4gKwlpZiAoZmItPm1vZGlmaWVyID09 IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUyB8fAo+ID4gKwnCoMKgwqDCoGZiLT5tb2RpZmll ciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTKSB7Cj4gPiArCQl3aGlsZSAoIXNrbF9j aGVja19tYWluX2Njc19jb29yZGluYXRlcyhwbGFuZV9zdGF0ZSwKPiA+IHgsIHksIG9mZnNldCkp IHsKPiA+ICsJCQlpZiAob2Zmc2V0ID09IDApCj4gPiArCQkJCWJyZWFrOwo+ID4gKwo+ID4gKwkJ CW9mZnNldCA9IGludGVsX2FkanVzdF90aWxlX29mZnNldCgmeCwgJnksCj4gPiBwbGFuZV9zdGF0 ZSwgMCwKPiA+ICsJCQkJCQkJwqDCoG9mZnNldCwKPiA+IG9mZnNldCAtIGFsaWdubWVudCk7Cj4g PiArCQl9Cj4gPiArCj4gPiArCQlpZiAoeCAhPSBwbGFuZV9zdGF0ZS0+YXV4LnggfHwgeSAhPSBw bGFuZV9zdGF0ZS0KPiA+ID5hdXgueSkgewo+ID4gKwkJCURSTV9ERUJVR19LTVMoIlVuYWJsZSB0 byBmaW5kIHN1aXRhYmxlCj4gPiBkaXNwbGF5IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0byBDQ1NcbiIp Owo+ID4gKwkJCXJldHVybiAtRUlOVkFMOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiDCoAlw bGFuZV9zdGF0ZS0+bWFpbi5vZmZzZXQgPSBvZmZzZXQ7Cj4gPiDCoAlwbGFuZV9zdGF0ZS0+bWFp bi54ID0geDsKPiA+IMKgCXBsYW5lX3N0YXRlLT5tYWluLnkgPSB5Owo+ID4gQEAgLTI5ODIsNiAr MzA4MSw1MyBAQCBzdGF0aWMgaW50IHNrbF9jaGVja19udjEyX2F1eF9zdXJmYWNlKHN0cnVjdAo+ ID4gaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ID4gwqAJcmV0dXJuIDA7Cj4gPiDC oH0KPiA+IMKgCj4gPiArc3RhdGljIGludCBza2xfY2hlY2tfY2NzX2F1eF9zdXJmYWNlKHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZQo+ID4gKnBsYW5lX3N0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0 IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLQo+ID4gPmJh c2UucGxhbmUpOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMo cGxhbmVfc3RhdGUtCj4gPiA+YmFzZS5jcnRjKTsKPiA+ICsJaW50IHNyY194ID0gcGxhbmVfc3Rh dGUtPmJhc2Uuc3JjLngxID4+IDE2Owo+ID4gKwlpbnQgc3JjX3kgPSBwbGFuZV9zdGF0ZS0+YmFz ZS5zcmMueTEgPj4gMTY7Cj4gPiArCWludCB4ID0gc3JjX3ggLyAxNjsKPiA+ICsJaW50IHkgPSBz cmNfeSAvIDg7Cj4gPiArCXUzMiBvZmZzZXQ7Cj4gPiArCj4gPiArCXN3aXRjaCAocGxhbmUtPmlk KSB7Cj4gPiArCWNhc2UgUExBTkVfUFJJTUFSWToKPiA+ICsJY2FzZSBQTEFORV9TUFJJVEUwOgo+ ID4gKwkJYnJlYWs7Cj4gPiArCWRlZmF1bHQ6Cj4gPiArCQlEUk1fREVCVUdfS01TKCJSQyBzdXBw b3J0IG9ubHkgb24gcGxhbmUgMSBhbmQgMlxuIik7Cj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ ICsJfQo+ID4gKwo+ID4gKwlpZiAoY3J0Yy0+cGlwZSA9PSBQSVBFX0MpIHsKPiA+ICsJCURSTV9E RUJVR19LTVMoIk5vIFJDIHN1cHBvcnQgb24gcGlwZSBDXG4iKTsKPiA+ICsJCXJldHVybiAtRUlO VkFMOwo+ID4gKwl9Cj4gPiArCS8qCj4gPiArCcKgKiBUT0RPOgo+ID4gKwnCoCogMS4gRGlzYWJs ZSBzdGVyZW8gM0Qgd2hlbiByZW5kZXIgZGVjb21wIGlzIGVuYWJsZWQgKGJpdAo+ID4gNzo2KQo+ ID4gKwnCoCogMi4gUmVuZGVyIGRlY29tcHJlc3Npb24gbXVzdCBub3QgYmUgdXNlZCBpbiBWVGQg cGFzcy0KPiA+IHRocm91Z2ggbW9kZQo+ID4gKwnCoCogMy4gUHJvZ3JhbSBoYXNoaW5nIHNlbGVj dCBDSElDS0VOX01JU0MxIGJpdCAxNQo+ID4gKwnCoCovCj4gPiArCj4gPiArCWlmIChwbGFuZV9z dGF0ZS0+YmFzZS5yb3RhdGlvbiAmJgo+ID4gKwnCoMKgwqDCoHBsYW5lX3N0YXRlLT5iYXNlLnJv dGF0aW9uICYgfihEUk1fUk9UQVRFXzAgfAo+ID4gRFJNX1JPVEFURV8xODApKSB7Cj4gPiArCQlE Uk1fREVCVUdfS01TKCJSQyBzdXBwb3J0IG9ubHkgd2l0aCAwLzE4MCBkZWdyZWUKPiA+IHJvdGF0 aW9uICV4XG4iLAo+ID4gKwkJCcKgwqDCoMKgwqDCoHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9u KTsKPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gKwl9Cj4gPiArCj4gPiArCWludGVsX2FkZF9m Yl9vZmZzZXRzKCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDEpOwo+ID4gKwlvZmZzZXQgPSBpbnRlbF9j b21wdXRlX3RpbGVfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3RhdGUsIDEpOwo+ID4gKwo+ID4gKwlw bGFuZV9zdGF0ZS0+YXV4Lm9mZnNldCA9IG9mZnNldDsKPiA+ICsJcGxhbmVfc3RhdGUtPmF1eC54 ID0geCAqIDE2ICsgc3JjX3ggJSAxNjsKPiA+ICsJcGxhbmVfc3RhdGUtPmF1eC55ID0geSAqIDgg KyBzcmNfeSAlIDg7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+IMKgaW50 IHNrbF9jaGVja19wbGFuZV9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVf c3RhdGUpCj4gPiDCoHsKPiA+IMKgCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0g cGxhbmVfc3RhdGUtPmJhc2UuZmI7Cj4gPiBAQCAtMzAwMiw2ICszMTQ4LDExIEBAIGludCBza2xf Y2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QKPiA+IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSkKPiA+IMKgCQlyZXQgPSBza2xfY2hlY2tfbnYxMl9hdXhfc3VyZmFjZShwbGFuZV9zdGF0 ZSk7Cj4gPiDCoAkJaWYgKHJldCkKPiA+IMKgCQkJcmV0dXJuIHJldDsKPiA+ICsJfSBlbHNlIGlm IChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8Cj4gPiArCQnC oMKgwqBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUykgewo+ID4g KwkJcmV0ID0gc2tsX2NoZWNrX2Njc19hdXhfc3VyZmFjZShwbGFuZV9zdGF0ZSk7Cj4gPiArCQlp ZiAocmV0KQo+ID4gKwkJCXJldHVybiByZXQ7Cj4gPiDCoAl9IGVsc2Ugewo+ID4gwqAJCXBsYW5l X3N0YXRlLT5hdXgub2Zmc2V0ID0gfjB4ZmZmOwo+ID4gwqAJCXBsYW5lX3N0YXRlLT5hdXgueCA9 IDA7Cj4gPiBAQCAtMzM1Nyw4ICszNTA4LDEyIEBAIHUzMiBza2xfcGxhbmVfY3RsX3RpbGluZyh1 aW50NjRfdCBmYl9tb2RpZmllcikKPiA+IMKgCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1g7Cj4g PiDCoAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgo+ID4gwqAJCXJldHVybiBQTEFORV9D VExfVElMRURfWTsKPiA+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Cj4gPiAr CQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1kgfAo+ID4gUExBTkVfQ1RMX0RFQ09NUFJFU1NJT05f RU5BQkxFOwo+ID4gwqAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6Cj4gPiDCoAkJcmV0 dXJuIFBMQU5FX0NUTF9USUxFRF9ZRjsKPiA+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElM RURfQ0NTOgo+ID4gKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZRiB8Cj4gPiBQTEFORV9DVExf REVDT01QUkVTU0lPTl9FTkFCTEU7Cj4gPiDCoAlkZWZhdWx0Ogo+ID4gwqAJCU1JU1NJTkdfQ0FT RShmYl9tb2RpZmllcik7Cj4gPiDCoAl9Cj4gPiBAQCAtMzQwMSw2ICszNTU2LDcgQEAgc3RhdGlj IHZvaWQgc2t5bGFrZV91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QKPiA+IGRybV9wbGFuZSAq cGxhbmUsCj4gPiDCoAl1MzIgcGxhbmVfY3RsOwo+ID4gwqAJdW5zaWduZWQgaW50IHJvdGF0aW9u ID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247Cj4gPiDCoAl1MzIgc3RyaWRlID0gc2tsX3Bs YW5lX3N0cmlkZShmYiwgMCwgcm90YXRpb24pOwo+ID4gKwl1MzIgYXV4X3N0cmlkZSA9IHNrbF9w bGFuZV9zdHJpZGUoZmIsIDEsIHJvdGF0aW9uKTsKPiA+IMKgCXUzMiBzdXJmX2FkZHIgPSBwbGFu ZV9zdGF0ZS0+bWFpbi5vZmZzZXQ7Cj4gPiDCoAlpbnQgc2NhbGVyX2lkID0gcGxhbmVfc3RhdGUt PnNjYWxlcl9pZDsKPiA+IMKgCWludCBzcmNfeCA9IHBsYW5lX3N0YXRlLT5tYWluLng7Cj4gPiBA QCAtMzQzNiw2ICszNTkyLDEwIEBAIHN0YXRpYyB2b2lkCj4gPiBza3lsYWtlX3VwZGF0ZV9wcmlt YXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4gwqAJSTkxNV9XUklURShQTEFO RV9PRkZTRVQocGlwZSwgcGxhbmVfaWQpLCAoc3JjX3kgPDwgMTYpIHwKPiA+IHNyY194KTsKPiA+ IMKgCUk5MTVfV1JJVEUoUExBTkVfU1RSSURFKHBpcGUsIHBsYW5lX2lkKSwgc3RyaWRlKTsKPiA+ IMKgCUk5MTVfV1JJVEUoUExBTkVfU0laRShwaXBlLCBwbGFuZV9pZCksIChzcmNfaCA8PCAxNikg fAo+ID4gc3JjX3cpOwo+ID4gKwlJOTE1X1dSSVRFKFBMQU5FX0FVWF9ESVNUKHBpcGUsIHBsYW5l X2lkKSwKPiA+ICsJCcKgwqDCoChwbGFuZV9zdGF0ZS0+YXV4Lm9mZnNldCAtIHN1cmZfYWRkcikg fAo+ID4gYXV4X3N0cmlkZSk7Cj4gPiArCUk5MTVfV1JJVEUoUExBTkVfQVVYX09GRlNFVChwaXBl LCBwbGFuZV9pZCksCj4gPiArCQnCoMKgwqAocGxhbmVfc3RhdGUtPmF1eC55IDw8IDE2KSB8IHBs YW5lX3N0YXRlLT5hdXgueCk7Cj4gPiDCoAo+ID4gwqAJaWYgKHNjYWxlcl9pZCA+PSAwKSB7Cj4g PiDCoAkJdWludDMyX3QgcHNfY3RybCA9IDA7Cj4gPiBAQCAtOTgwNywxMCArOTk2NywxNiBAQCBz a3lsYWtlX2dldF9pbml0aWFsX3BsYW5lX2NvbmZpZyhzdHJ1Y3QKPiA+IGludGVsX2NydGMgKmNy dGMsCj4gPiDCoAkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ7Cj4gPiDC oAkJYnJlYWs7Cj4gPiDCoAljYXNlIFBMQU5FX0NUTF9USUxFRF9ZOgo+ID4gLQkJZmItPm1vZGlm aWVyID0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ7Cj4gPiArCQlpZiAodmFsICYgUExBTkVfQ1RM X0RFQ09NUFJFU1NJT05fRU5BQkxFKQo+ID4gKwkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFU X01PRF9ZX1RJTEVEX0NDUzsKPiA+ICsJCWVsc2UKPiA+ICsJCQlmYi0+bW9kaWZpZXIgPSBJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRDsKPiA+IMKgCQlicmVhazsKPiA+IMKgCWNhc2UgUExBTkVfQ1RM X1RJTEVEX1lGOgo+ID4gLQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVE Owo+ID4gKwkJaWYgKHZhbCAmIFBMQU5FX0NUTF9ERUNPTVBSRVNTSU9OX0VOQUJMRSkKPiA+ICsJ CQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOwo+ID4gKwkJZWxz ZQo+ID4gKwkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDsKPiA+IMKg CQlicmVhazsKPiA+IMKgCWRlZmF1bHQ6Cj4gPiDCoAkJTUlTU0lOR19DQVNFKHRpbGluZyk7Cj4g PiBAQCAtMTIwMTQsNyArMTIxODAsNyBAQCBzdGF0aWMgdm9pZCBza2xfZG9fbW1pb19mbGlwKHN0 cnVjdAo+ID4gaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKPiA+IMKgCXUzMiBjdGwsIHN0cmlkZSA9 IHNrbF9wbGFuZV9zdHJpZGUoZmIsIDAsIHJvdGF0aW9uKTsKPiA+IMKgCj4gPiDCoAljdGwgPSBJ OTE1X1JFQUQoUExBTkVfQ1RMKHBpcGUsIDApKTsKPiA+IC0JY3RsICY9IH5QTEFORV9DVExfVElM RURfTUFTSzsKPiA+ICsJY3RsICY9IH4oUExBTkVfQ1RMX1RJTEVEX01BU0sgfAo+ID4gUExBTkVf Q1RMX0RFQ09NUFJFU1NJT05fRU5BQkxFKTsKPiA+IMKgCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7 Cj4gPiDCoAljYXNlIERSTV9GT1JNQVRfTU9EX05PTkU6Cj4gPiDCoAkJYnJlYWs7Cj4gPiBAQCAt MTIwMjQsOSArMTIxOTAsMTUgQEAgc3RhdGljIHZvaWQgc2tsX2RvX21taW9fZmxpcChzdHJ1Y3QK PiA+IGludGVsX2NydGMgKmludGVsX2NydGMsCj4gPiDCoAljYXNlIEk5MTVfRk9STUFUX01PRF9Z X1RJTEVEOgo+ID4gwqAJCWN0bCB8PSBQTEFORV9DVExfVElMRURfWTsKPiA+IMKgCQlicmVhazsK PiA+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Cj4gPiArCQljdGwgfD0gUExB TkVfQ1RMX1RJTEVEX1kgfAo+ID4gUExBTkVfQ1RMX0RFQ09NUFJFU1NJT05fRU5BQkxFOwo+ID4g KwkJYnJlYWs7Cj4gPiDCoAljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKPiA+IMKgCQlj dGwgfD0gUExBTkVfQ1RMX1RJTEVEX1lGOwo+ID4gwqAJCWJyZWFrOwo+ID4gKwljYXNlIEk5MTVf Rk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6Cj4gPiArCQljdGwgfD0gUExBTkVfQ1RMX1RJTEVEX1lG IHwKPiA+IFBMQU5FX0NUTF9ERUNPTVBSRVNTSU9OX0VOQUJMRTsKPiA+ICsJCWJyZWFrOwo+ID4g wqAJZGVmYXVsdDoKPiA+IMKgCQlNSVNTSU5HX0NBU0UoZmItPm1vZGlmaWVyKTsKPiA+IMKgCX0K PiA+IEBAIC0xNTkyNiw4ICsxNjA5OCw4IEBAIHN0YXRpYyBpbnQgaW50ZWxfZnJhbWVidWZmZXJf aW5pdChzdHJ1Y3QKPiA+IGRybV9kZXZpY2UgKmRldiwKPiA+IMKgewo+ID4gwqAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ID4gwqAJdW5zaWduZWQg aW50IHRpbGluZyA9IGk5MTVfZ2VtX29iamVjdF9nZXRfdGlsaW5nKG9iaik7Cj4gPiAtCWludCBy ZXQ7Cj4gPiAtCXUzMiBwaXRjaF9saW1pdCwgc3RyaWRlX2FsaWdubWVudDsKPiA+ICsJaW50IHJl dCwgaTsKPiA+ICsJdTMyIHBpdGNoX2xpbWl0Owo+ID4gwqAJc3RydWN0IGRybV9mb3JtYXRfbmFt ZV9idWYgZm9ybWF0X25hbWU7Cj4gPiDCoAo+ID4gwqAJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2Vk KCZkZXYtPnN0cnVjdF9tdXRleCkpOwo+ID4gQEAgLTE1OTUzLDYgKzE2MTI1LDE5IEBAIHN0YXRp YyBpbnQgaW50ZWxfZnJhbWVidWZmZXJfaW5pdChzdHJ1Y3QKPiA+IGRybV9kZXZpY2UgKmRldiwK PiA+IMKgCj4gPiDCoAkvKiBQYXNzZWQgaW4gbW9kaWZpZXIgc2FuaXR5IGNoZWNraW5nLiAqLwo+ ID4gwqAJc3dpdGNoIChtb2RlX2NtZC0+bW9kaWZpZXJbMF0pIHsKPiA+ICsJY2FzZSBJOTE1X0ZP Uk1BVF9NT0RfWV9USUxFRF9DQ1M6Cj4gPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVE X0NDUzoKPiA+ICsJCXN3aXRjaCAobW9kZV9jbWQtPnBpeGVsX2Zvcm1hdCkgewo+ID4gKwkJY2Fz ZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogo+ID4gKwkJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4Ogo+ ID4gKwkJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4Ogo+ID4gKwkJY2FzZSBEUk1fRk9STUFUX0FS R0I4ODg4Ogo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJZGVmYXVsdDoKPiA+ICsJCQlEUk1fREVCVUdf S01TKCJSQyBzdXBwb3J0ZWQgb25seSB3aXRoCj4gPiBSR0I4ODg4IGZvcm1hdHNcbiIpOwo+ID4g KwkJCXJldHVybiAtRUlOVkFMOwo+ID4gKwkJfQo+ID4gKwkJLyogZmFsbCB0aHJvdWdoICovCj4g PiDCoAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgo+ID4gwqAJY2FzZSBJOTE1X0ZPUk1B VF9NT0RfWWZfVElMRUQ6Cj4gPiDCoAkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA5KSB7Cj4g PiBAQCAtMTYwNjEsMTEgKzE2MjQ2LDIxIEBAIHN0YXRpYyBpbnQgaW50ZWxfZnJhbWVidWZmZXJf aW5pdChzdHJ1Y3QKPiA+IGRybV9kZXZpY2UgKmRldiwKPiA+IMKgCj4gPiDCoAlkcm1faGVscGVy X21vZGVfZmlsbF9mYl9zdHJ1Y3QoZGV2LCAmaW50ZWxfZmItPmJhc2UsCj4gPiBtb2RlX2NtZCk7 Cj4gPiDCoAo+ID4gLQlzdHJpZGVfYWxpZ25tZW50ID0gaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVu dCgmaW50ZWxfZmItCj4gPiA+YmFzZSwgMCk7Cj4gPiAtCWlmIChtb2RlX2NtZC0+cGl0Y2hlc1sw XSAmIChzdHJpZGVfYWxpZ25tZW50IC0gMSkpIHsKPiA+IC0JCURSTV9ERUJVR19LTVMoInBpdGNo ICglZCkgbXVzdCBiZSBhdCBsZWFzdCAldSBieXRlCj4gPiBhbGlnbmVkXG4iLAo+ID4gLQkJCcKg wqDCoMKgwqDCoG1vZGVfY21kLT5waXRjaGVzWzBdLAo+ID4gc3RyaWRlX2FsaWdubWVudCk7Cj4g PiAtCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJZm9yIChpID0gMDsgaSA8IGludGVsX2ZiLT5iYXNl LmZvcm1hdC0+bnVtX3BsYW5lczsgaSsrKSB7Cj4gPiArCQl1MzIgc3RyaWRlX2FsaWdubWVudDsK PiA+ICsKPiA+ICsJCWlmIChtb2RlX2NtZC0+aGFuZGxlc1tpXSAhPSBtb2RlX2NtZC0+aGFuZGxl c1swXSkgewo+ID4gKwkJCURSTV9ERUJVR19LTVMoImJhZCBwbGFuZSAlZCBoYW5kbGVcbiIsIGkp Owo+ID4gKwkJCXJldHVybiAtRUlOVkFMOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJc3RyaWRlX2Fs aWdubWVudCA9Cj4gPiBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KCZpbnRlbF9mYi0+YmFzZSwg aSk7Cj4gPiArCj4gPiArCQlpZiAobW9kZV9jbWQtPnBpdGNoZXNbaV0gJiAoc3RyaWRlX2FsaWdu bWVudCAtIDEpKSB7Cj4gPiArCQkJRFJNX0RFQlVHX0tNUygicGxhbmUgJWQgcGl0Y2ggKCVkKSBt dXN0IGJlCj4gPiBhdCBsZWFzdCAldSBieXRlIGFsaWduZWRcbiIsCj4gPiArCQkJCcKgwqDCoMKg wqDCoGksIG1vZGVfY21kLT5waXRjaGVzW2ldLAo+ID4gc3RyaWRlX2FsaWdubWVudCk7Cj4gPiAr CQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCQl9Cj4gPiDCoAl9Cj4gPiDCoAo+ID4gwqAJaW50ZWxf ZmItPm9iaiA9IG9iajsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9wbS5jCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiA+IGluZGV4IDI0 OTYyM2Q0NWJlMC4uYWRkMzU5MDIyYzk2IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcG0uYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0u Ywo+ID4gQEAgLTMzMTQsNyArMzMxNCw5IEBAIHNrbF9kZGJfbWluX2FsbG9jKGNvbnN0IHN0cnVj dCBkcm1fcGxhbmVfc3RhdGUKPiA+ICpwc3RhdGUsCj4gPiDCoAo+ID4gwqAJLyogRm9yIE5vbiBZ LXRpbGUgcmV0dXJuIDgtYmxvY2tzICovCj4gPiDCoAlpZiAoZmItPm1vZGlmaWVyICE9IEk5MTVf Rk9STUFUX01PRF9ZX1RJTEVEICYmCj4gPiAtCcKgwqDCoMKgZmItPm1vZGlmaWVyICE9IEk5MTVf Rk9STUFUX01PRF9ZZl9USUxFRCkKPiA+ICsJwqDCoMKgwqBmYi0+bW9kaWZpZXIgIT0gSTkxNV9G T1JNQVRfTU9EX1lmX1RJTEVEICYmCj4gPiArCcKgwqDCoMKgZmItPm1vZGlmaWVyICE9IEk5MTVf Rk9STUFUX01PRF9ZX1RJTEVEX0NDUyAmJgo+ID4gKwnCoMKgwqDCoGZiLT5tb2RpZmllciAhPSBJ OTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTKQo+ID4gwqAJCXJldHVybiA4Owo+ID4gwqAKPiA+ IMKgCXNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJmludGVsX3BzdGF0ZS0+YmFzZS5zcmMpID4+IDE2 Owo+ID4gQEAgLTM1OTAsNyArMzU5Miw5IEBAIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVf d20oY29uc3Qgc3RydWN0Cj4gPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+IMKgCX0K PiA+IMKgCj4gPiDCoAl5X3RpbGVkID0gZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9Z X1RJTEVEIHx8Cj4gPiAtCQnCoMKgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9U SUxFRDsKPiA+ICsJCcKgwqBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVE IHx8Cj4gPiArCQnCoMKgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0ND UyB8fAo+ID4gKwkJwqDCoGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURf Q0NTOwo+ID4gwqAJeF90aWxlZCA9IGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9U SUxFRDsKPiA+IMKgCj4gPiDCoAkvKiBEaXNwbGF5IFdBICMxMTQxOiBrYmwuICovCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMKPiA+IGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMKPiA+IGluZGV4IDcwMzFiYzczM2Q5Ny4uMDYz YTk5NDgxNWQwIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3By aXRlLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCj4gPiBA QCAtMjEwLDYgKzIxMCw3IEBAIHNrbF91cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqZHJt X3BsYW5lLAo+ID4gwqAJdTMyIHN1cmZfYWRkciA9IHBsYW5lX3N0YXRlLT5tYWluLm9mZnNldDsK PiA+IMKgCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9u Owo+ID4gwqAJdTMyIHN0cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUoZmIsIDAsIHJvdGF0aW9uKTsK PiA+ICsJdTMyIGF1eF9zdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKGZiLCAxLCByb3RhdGlvbik7 Cj4gPiDCoAlpbnQgY3J0Y194ID0gcGxhbmVfc3RhdGUtPmJhc2UuZHN0LngxOwo+ID4gwqAJaW50 IGNydGNfeSA9IHBsYW5lX3N0YXRlLT5iYXNlLmRzdC55MTsKPiA+IMKgCXVpbnQzMl90IGNydGNf dyA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+YmFzZS5kc3QpOwo+ID4gQEAgLTI0OCw2 ICsyNDksMTAgQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcm1fcGxhbmUs Cj4gPiDCoAlJOTE1X1dSSVRFKFBMQU5FX09GRlNFVChwaXBlLCBwbGFuZV9pZCksICh5IDw8IDE2 KSB8IHgpOwo+ID4gwqAJSTkxNV9XUklURShQTEFORV9TVFJJREUocGlwZSwgcGxhbmVfaWQpLCBz dHJpZGUpOwo+ID4gwqAJSTkxNV9XUklURShQTEFORV9TSVpFKHBpcGUsIHBsYW5lX2lkKSwgKHNy Y19oIDw8IDE2KSB8Cj4gPiBzcmNfdyk7Cj4gPiArCUk5MTVfV1JJVEUoUExBTkVfQVVYX0RJU1Qo cGlwZSwgcGxhbmVfaWQpLAo+ID4gKwkJwqDCoMKgKHBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0IC0g c3VyZl9hZGRyKSB8Cj4gPiBhdXhfc3RyaWRlKTsKPiA+ICsJSTkxNV9XUklURShQTEFORV9BVVhf T0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSwKPiA+ICsJCcKgwqDCoChwbGFuZV9zdGF0ZS0+YXV4Lnkg PDwgMTYpIHwgcGxhbmVfc3RhdGUtPmF1eC54KTsKPiA+IMKgCj4gPiDCoAkvKiBwcm9ncmFtIHBs YW5lIHNjYWxlciAqLwo+ID4gwqAJaWYgKHBsYW5lX3N0YXRlLT5zY2FsZXJfaWQgPj0gMCkgewoK LS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbCBPVEMKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cg==