From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 9/9] drm/i915: Add render decompression support Date: Mon, 13 Feb 2017 19:13:29 +0200 Message-ID: <20170213171329.GJ31595@intel.com> References: <20170104184232.23048-10-ville.syrjala@linux.intel.com> <20170105151454.12862-1-ville.syrjala@linux.intel.com> <20170207153744.GA30805@ideak-desk.fi.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: <20170207153744.GA30805@ideak-desk.fi.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Imre Deak Cc: Ben Widawsky , Paulo Zanoni , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Jason Ekstrand , Vandana Kannan List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBGZWIgMDcsIDIwMTcgYXQgMDU6Mzc6NDRQTSArMDIwMCwgSW1yZSBEZWFrIHdyb3Rl Ogo+IE9uIFRodSwgSmFuIDA1LCAyMDE3IGF0IDA1OjE0OjU0UE0gKzAyMDAsIHZpbGxlLnN5cmph bGFAbGludXguaW50ZWwuY29tIHdyb3RlOgo+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxs ZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+IAo+ID4gU0tMKyBkaXNwbGF5IGVuZ2luZSBj YW4gc2NhbiBvdXQgY2VydGFpbiBraW5kcyBvZiBjb21wcmVzc2VkIHN1cmZhY2VzCj4gPiBwcm9k dWNlZCBieSB0aGUgcmVuZGVyIGVuZ2luZS4gVGhpcyBpbnZvbHZlZCB0ZWxsaW5nIHRoZSBkaXNw bGF5IGVuZ2luZQo+ID4gdGhlIGxvY2F0aW9uIG9mIHRoZSBjb2xvciBjb250cm9sIHN1cmZhZSAo Q0NTKSB3aGljaCBkZXNjcmliZXMKPiA+IHdoaWNoIHBhcnRzIG9mIHRoZSBtYWluIHN1cmZhY2Ug YXJlIGNvbXByZXNzZWQgYW5kIHdoaWNoIGFyZSBub3QuIFRoZQo+ID4gbG9jYXRpb24gb2YgQ0NT IGlzIHByb3ZpZGVkIGJ5IHVzZXJzcGFjZSBhcyBqdXN0IGFub3RoZXIgcGxhbmUgd2l0aCBpdHMK PiA+IG93biBvZmZzZXQuCj4gPiAKPiA+IEFkZCB0aGUgcmVxdWlyZWQgc3R1ZmYgdG8gdmFsaWRh dGUgdGhlIHVzZXIgcHJvdmlkZWQgQVVYIHBsYW5lIG1ldGFkYXRhCj4gPiBhbmQgY29udmVydCB0 aGUgdXNlciBwcm92aWRlZCBsaW5lYXIgb2Zmc2V0IGludG8gc29tZXRoaW5nIHRoZSBoYXJkd2Fy ZQo+ID4gY2FuIGNvbnN1bWUuCj4gPiAKPiA+IER1ZSB0byBoYXJkd2FyZSBsaW1pdGF0aW9ucyB3 ZSByZXF1aXJlIHRoYXQgdGhlIG1haW4gc3VyZmFjZSBhbmQKPiA+IHRoZSBBVVggc3VyZmFjZSAo Q0NTKSBiZSBwYXJ0IG9mIHRoZSBzYW1lIGJvLiBUaGUgaGFyZHdhcmUgYWxzbwo+ID4gbWFrZXMg bGlmZSBoYXJkIGJ5IG5vdCBhbGxvd2luZyB5b3UgdG8gcHJvdmlkZSBzZXBhcmF0ZSB4L3kgb2Zm c2V0cwo+ID4gZm9yIHRoZSBtYWluIGFuZCBBVVggc3VyZmFjZXMgKGV4Y3BldCB3aXRoIE5WMTIp LCBzbyBmaW5kaW5nIHN1aXRhYmxlCj4gPiBvZmZzZXRzIGZvciBib3RoIHJlcXVpcmVzIGEgYml0 IG9mIHdvcmsuIEFzc3VtaW5nIHdlIHN0aWxsIHdhbnQga2VlcAo+ID4gcGxheWluZyB0cmlja3Mg d2l0aCB0aGUgb2Zmc2V0cy4gSSd2ZSBqdXN0IGdvbmUgd2l0aCBhIGR1bWIgInNlYXJjaAo+ID4g YmFja3dhcmQgZm9yIHN1aXRhYmxlIG9mZnNldHMiIGFwcHJvYWNoLCB3aGljaCBpcyBmYXIgZnJv bSBvcHRpbWFsLAo+ID4gYnV0IGl0IHdvcmtzLgo+ID4gCj4gPiBBbHNvIG5vdCBhbGwgcGxhbmVz IHdpbGwgYmUgY2FwYWJsZSBvZiBzY2FubmluZyBvdXQgY29tcHJlc3NlZCBzdXJmYWNlcywKPiA+ IGFuZCBlZy4gOTAvMjcwIGRlZ3JlZSByb3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIGNvbWJp bmF0aW9uIHdpdGgKPiA+IGRlY29tcHJlc3Npb24gZWl0aGVyLgo+ID4gCj4gPiBUaGlzIHBhdGNo IG1heSBjb250YWluIHdvcmsgZnJvbSBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIHBlb3BsZToKPiA+ ICogVmFuZGFuYSBLYW5uYW4gPHZhbmRhbmEua2FubmFuQGludGVsLmNvbT4KPiA+ICogRGFuaWVs IFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPgo+ID4gKiBCZW4gV2lkYXdza3kgPGJlbkBid2lkYXdz ay5uZXQ+Cj4gPiAKPiA+IHYyOiBEZWFsIHdpdGggZGlzcGxheSB3b3JrYXJvdW5kcyAwMzkwLCAw NTMxLCAxMTI1IChQYXVsbykKPiA+IAo+ID4gQ2M6IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5v bmlAaW50ZWwuY29tPgo+ID4gQ2M6IFZhbmRhbmEgS2FubmFuIDx2YW5kYW5hLmthbm5hbkBpbnRl bC5jb20+Cj4gPiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPgo+ID4gQ2M6IEJl biBXaWRhd3NreSA8YmVuQGJ3aWRhd3NrLm5ldD4KPiA+IENjOiBKYXNvbiBFa3N0cmFuZCA8amFz b25Aamxla3N0cmFuZC5uZXQ+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZp bGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4gLS0tCj4gPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9yZWcuaCAgICAgIHwgIDIzICsrKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMgfCAyMzQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst LS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jICAgICAgfCAgMjkgKysrKy0K PiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYyAgfCAgIDUgKwo+ID4gIDQg ZmlsZXMgY2hhbmdlZCwgMjc0IGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQo+ID4gCj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiA+IGluZGV4IDAwOTcwYWE3N2FmYS4uNjg0OWJhOTNm MWQ5IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gQEAgLTYyMDksNiArNjIw OSwyOCBAQCBlbnVtIHsKPiA+ICAJCQlfSUQoaWQsIF9QU19FQ0NfU1RBVF8xQSwgX1BTX0VDQ19T VEFUXzJBKSwgICBcCj4gPiAgCQkJX0lEKGlkLCBfUFNfRUNDX1NUQVRfMUIsIF9QU19FQ0NfU1RB VF8yQikpCj4gPiAgCj4gPiArI2RlZmluZSBQTEFORV9BVVhfRElTVF8xX0EJCTB4NzAxYzAKPiA+ ICsjZGVmaW5lIFBMQU5FX0FVWF9ESVNUXzJfQQkJMHg3MDJjMAo+ID4gKyNkZWZpbmUgUExBTkVf QVVYX0RJU1RfMV9CCQkweDcxMWMwCj4gPiArI2RlZmluZSBQTEFORV9BVVhfRElTVF8yX0IJCTB4 NzEyYzAKPiA+ICsjZGVmaW5lIF9QTEFORV9BVVhfRElTVF8xKHBpcGUpIFwKPiA+ICsJCQlfUElQ RShwaXBlLCBQTEFORV9BVVhfRElTVF8xX0EsIFBMQU5FX0FVWF9ESVNUXzFfQikKPiA+ICsjZGVm aW5lIF9QTEFORV9BVVhfRElTVF8yKHBpcGUpIFwKPiA+ICsJCQlfUElQRShwaXBlLCBQTEFORV9B VVhfRElTVF8yX0EsIFBMQU5FX0FVWF9ESVNUXzJfQikKPiA+ICsjZGVmaW5lIFBMQU5FX0FVWF9E SVNUKHBpcGUsIHBsYW5lKSAgICAgXAo+ID4gKwlfTU1JT19QTEFORShwbGFuZSwgX1BMQU5FX0FV WF9ESVNUXzEocGlwZSksIF9QTEFORV9BVVhfRElTVF8yKHBpcGUpKQo+ID4gKwo+ID4gKyNkZWZp bmUgUExBTkVfQVVYX09GRlNFVF8xX0EJCTB4NzAxYzQKPiA+ICsjZGVmaW5lIFBMQU5FX0FVWF9P RkZTRVRfMl9BCQkweDcwMmM0Cj4gPiArI2RlZmluZSBQTEFORV9BVVhfT0ZGU0VUXzFfQgkJMHg3 MTFjNAo+ID4gKyNkZWZpbmUgUExBTkVfQVVYX09GRlNFVF8yX0IJCTB4NzEyYzQKPiA+ICsjZGVm aW5lIF9QTEFORV9BVVhfT0ZGU0VUXzEocGlwZSkgICAgICAgXAo+ID4gKwkJX1BJUEUocGlwZSwg UExBTkVfQVVYX09GRlNFVF8xX0EsIFBMQU5FX0FVWF9PRkZTRVRfMV9CKQo+ID4gKyNkZWZpbmUg X1BMQU5FX0FVWF9PRkZTRVRfMihwaXBlKSAgICAgICBcCj4gPiArCQlfUElQRShwaXBlLCBQTEFO RV9BVVhfT0ZGU0VUXzJfQSwgUExBTkVfQVVYX09GRlNFVF8yX0IpCj4gPiArI2RlZmluZSBQTEFO RV9BVVhfT0ZGU0VUKHBpcGUsIHBsYW5lKSAgIFwKPiA+ICsJX01NSU9fUExBTkUocGxhbmUsIF9Q TEFORV9BVVhfT0ZGU0VUXzEocGlwZSksIF9QTEFORV9BVVhfT0ZGU0VUXzIocGlwZSkpCj4gPiAr Cj4gPiAgLyogbGVnYWN5IHBhbGV0dGUgKi8KPiA+ICAjZGVmaW5lIF9MR0NfUEFMRVRURV9BICAg ICAgICAgICAweDRhMDAwCj4gPiAgI2RlZmluZSBfTEdDX1BBTEVUVEVfQiAgICAgICAgICAgMHg0 YTgwMAo+ID4gQEAgLTY0MzMsNiArNjQ1NSw3IEBAIGVudW0gewo+ID4gICMgZGVmaW5lIENISUNL RU4zX0RHTUdfRE9ORV9GSVhfRElTQUJMRQkJKDEgPDwgMikKPiA+ICAKPiA+ICAjZGVmaW5lIENI SUNLRU5fUEFSMV8xCQlfTU1JTygweDQyMDgwKQo+ID4gKyNkZWZpbmUgIFNLTF9SQ19IQVNIX09V VFNJREUJKDEgPDwgMTUpCj4gPiAgI2RlZmluZSAgRFBBX01BU0tfVkJMQU5LX1NSRAkoMSA8PCAx NSkKPiA+ICAjZGVmaW5lICBGT1JDRV9BUkJfSURMRV9QTEFORVMJKDEgPDwgMTQpCj4gPiAgI2Rl ZmluZSAgU0tMX0VEUF9QU1JfRklYX1JEV1JBUAkoMSA8PCAzKQo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rpc3BsYXkuYwo+ID4gaW5kZXggMzhkZTlkZjBlYzYwLi4yMjM2YWJlYmQ4YmMgMTAw NjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gQEAgLTIwNjQsMTEg KzIwNjQsMTkgQEAgaW50ZWxfdGlsZV93aWR0aF9ieXRlcyhjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiwgaW50IHBsYW5lKQo+ID4gIAkJCXJldHVybiAxMjg7Cj4gPiAgCQllbHNlCj4g PiAgCQkJcmV0dXJuIDUxMjsKPiA+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6 Cj4gPiArCQlpZiAocGxhbmUgPT0gMSkKPiA+ICsJCQlyZXR1cm4gNjQ7Cj4gPiArCQkvKiBmYWxs IHRocm91Z2ggKi8KPiA+ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKPiA+ICAJCWlm IChJU19HRU4yKGRldl9wcml2KSB8fCBIQVNfMTI4X0JZVEVfWV9USUxJTkcoZGV2X3ByaXYpKQo+ ID4gIAkJCXJldHVybiAxMjg7Cj4gPiAgCQllbHNlCj4gPiAgCQkJcmV0dXJuIDUxMjsKPiA+ICsJ Y2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTOgo+ID4gKwkJaWYgKHBsYW5lID09IDEp Cj4gPiArCQkJcmV0dXJuIDY0Owo+ID4gKwkJLyogZmFsbCB0aHJvdWdoICovCj4gPiAgCWNhc2Ug STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgo+ID4gIAkJLyoKPiA+ICAJCSAqIEJzcGVjIHNlZW1z IHRvIHN1Z2dlc3QgdGhhdCB0aGUgWWYgdGlsZSB3aWR0aCB3b3VsZAo+ID4gQEAgLTIxNTYsNyAr MjE2NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfc3VyZl9hbGlnbm1lbnQoY29uc3Qg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUoZmItPmRldik7Cj4gPiAgCj4gPiAgCS8qIEFVWF9ESVNUIG5l ZWRzIG9ubHkgNEsgYWxpZ25tZW50ICovCj4gPiAtCWlmIChmYi0+Zm9ybWF0LT5mb3JtYXQgPT0g RFJNX0ZPUk1BVF9OVjEyICYmIHBsYW5lID09IDEpCj4gPiArCWlmIChwbGFuZSA9PSAxKQo+ID4g IAkJcmV0dXJuIDQwOTY7Cj4gPiAgCj4gPiAgCXN3aXRjaCAoZmItPm1vZGlmaWVyKSB7Cj4gPiBA QCAtMjE2Niw2ICsyMTc0LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF9zdXJmX2FsaWdu bWVudChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiA+ICAJCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDkpCj4gPiAgCQkJcmV0dXJuIDI1NiAqIDEwMjQ7Cj4gPiAgCQlyZXR1 cm4gMDsKPiA+ICsJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Cj4gPiArCWNhc2Ug STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKPiA+ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0Rf WV9USUxFRDoKPiA+ICAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ6Cj4gPiAgCQlyZXR1 cm4gMSAqIDEwMjQgKiAxMDI0Owo+ID4gQEAgLTI0NzIsNiArMjQ4Miw3IEBAIHN0YXRpYyB1bnNp Z25lZCBpbnQgaW50ZWxfZmJfbW9kaWZpZXJfdG9fdGlsaW5nKHVpbnQ2NF90IGZiX21vZGlmaWVy KQo+ID4gIAljYXNlIEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOgo+ID4gIAkJcmV0dXJuIEk5MTVf VElMSU5HX1g7Cj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Cj4gPiArCWNhc2Ug STkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOgo+ID4gIAkJcmV0dXJuIEk5MTVfVElMSU5HX1k7 Cj4gPiAgCWRlZmF1bHQ6Cj4gPiAgCQlyZXR1cm4gSTkxNV9USUxJTkdfTk9ORTsKPiA+IEBAIC0y NTM2LDYgKzI1NDcsMzUgQEAgaW50ZWxfZmlsbF9mYl9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiA+ICAKPiA+ICAJCWludGVsX2ZiX29mZnNldF90b194eSgmeCwgJnks IGZiLCBpKTsKPiA+ICAKPiA+ICsJCWlmICgoZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01P RF9ZX1RJTEVEX0NDUyB8fAo+ID4gKwkJICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRf TU9EX1lmX1RJTEVEX0NDUykgJiYgaSA9PSAxKSB7Cj4gPiArCQkJaW50IG1haW5feCwgbWFpbl95 Owo+ID4gKwkJCWludCBjY3NfeCwgY2NzX3k7Cj4gPiArCj4gPiArCQkJLyoKPiA+ICsJCQkgKiBF YWNoIGJ5dGUgb2YgQ0NTIGNvcnJlc3BvbmRzIHRvIGEgMTZ4OCBhcmVhIG9mIHRoZSBtYWluIHN1 cmZhY2UsIGFuZAo+ID4gKwkJCSAqIGVhY2ggQ0NTIHRpbGUgaXMgNjR4NjQgYnl0ZXMuCj4gPiAr CQkJICovCj4gPiArCQkJY2NzX3ggPSAoeCAqIDE2KSAlICg2NCAqIDE2KTsKPiA+ICsJCQljY3Nf eSA9ICh5ICogOCkgJSAoNjQgKiA4KTsKPiA+ICsJCQltYWluX3ggPSBpbnRlbF9mYi0+bm9ybWFs WzBdLnggJSAoNjQgKiAxNik7Cj4gPiArCQkJbWFpbl95ID0gaW50ZWxfZmItPm5vcm1hbFswXS55 ICUgKDY0ICogOCk7Cj4gPiArCj4gPiArCQkJLyoKPiA+ICsJCQkgKiBDQ1MgZG9lc24ndCBoYXZl IGl0cyBvd24geC95IG9mZnNldCByZWdpc3Rlciwgc28gdGhlIGludHJhIENDUyB0aWxlCj4gPiAr CQkJICogeC95IG9mZnNldHMgbXVzdCBtYXRjaCBiZXR3ZWVuIENDUyBhbmQgdGhlIG1haW4gc3Vy ZmFjZS4KPiA+ICsJCQkgKi8KPiA+ICsJCQlpZiAobWFpbl94ICE9IGNjc194IHx8IG1haW5feSAh PSBjY3NfeSkgewo+ID4gKwkJCQlEUk1fREVCVUdfS01TKCJCYWQgQ0NTIHgveSAobWFpbiAlZCwl ZCBjY3MgJWQsJWQpIGZ1bGwgKG1haW4gJWQsJWQgY2NzICVkLCVkKVxuIiwKPiA+ICsJCQkJCSAg ICAgIG1haW5feCwgbWFpbl95LAo+ID4gKwkJCQkJICAgICAgY2NzX3gsIGNjc195LAo+ID4gKwkJ CQkJICAgICAgaW50ZWxfZmItPm5vcm1hbFswXS54LAo+ID4gKwkJCQkJICAgICAgaW50ZWxfZmIt Pm5vcm1hbFswXS55LAo+ID4gKwkJCQkJICAgICAgeCwgeSk7Cj4gPiArCQkJCXJldHVybiAtRUlO VkFMOwo+ID4gKwkJCX0KPiA+ICsJCX0KPiA+ICsKPiA+ICAJCS8qCj4gPiAgCQkgKiBUaGUgZmVu Y2UgKGlmIHVzZWQpIGlzIGFsaWduZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBvYmplY3QKPiA+ICAJ CSAqIHNvIGhhdmluZyB0aGUgZnJhbWVidWZmZXIgd3JhcCBhcm91bmQgYWNyb3NzIHRoZSBlZGdl IG9mIHRoZQo+ID4gQEAgLTI4NzMsNiArMjkxMyw5IEBAIHN0YXRpYyBpbnQgc2tsX21heF9wbGFu ZV93aWR0aChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lLAo+ID4g IAkJCWJyZWFrOwo+ID4gIAkJfQo+ID4gIAkJYnJlYWs7Cj4gPiArCWNhc2UgSTkxNV9GT1JNQVRf TU9EX1lfVElMRURfQ0NTOgo+ID4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6 Cj4gPiArCQkvKiBGSVhNRSBBVVggcGxhbmU/ICovCj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9E X1lfVElMRUQ6Cj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgo+ID4gIAkJc3dp dGNoIChjcHApIHsKPiA+IEBAIC0yODk1LDYgKzI5MzgsNDIgQEAgc3RhdGljIGludCBza2xfbWF4 X3BsYW5lX3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUs Cj4gPiAgCXJldHVybiAyMDQ4Owo+ID4gIH0KPiA+ICAKPiA+ICtzdGF0aWMgYm9vbCBza2xfY2hl Y2tfbWFpbl9jY3NfY29vcmRpbmF0ZXMoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSwKPiA+ICsJCQkJCSAgIGludCBtYWluX3gsIGludCBtYWluX3ksIHUzMiBtYWluX29mZnNl dCkKPiA+ICt7Cj4gPiArCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVf c3RhdGUtPmJhc2UuZmI7Cj4gPiArCWludCBhdXhfeCA9IHBsYW5lX3N0YXRlLT5hdXgueDsKPiA+ ICsJaW50IGF1eF95ID0gcGxhbmVfc3RhdGUtPmF1eC55Owo+ID4gKwl1MzIgYXV4X29mZnNldCA9 IHBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0Owo+ID4gKwl1MzIgYWxpZ25tZW50ID0gaW50ZWxfc3Vy Zl9hbGlnbm1lbnQoZmIsIDEpOwo+ID4gKwo+ID4gKwl3aGlsZSAoYXV4X29mZnNldCA+PSBtYWlu X29mZnNldCAmJiBhdXhfeSA8PSBtYWluX3kpIHsKPiA+ICsJCWludCB4LCB5Owo+ID4gKwo+ID4g KwkJaWYgKGF1eF94ID09IG1haW5feCAmJiBhdXhfeSA9PSBtYWluX3kpCj4gPiArCQkJYnJlYWs7 Cj4gPiArCj4gPiArCQlpZiAoYXV4X29mZnNldCA9PSAwKQo+ID4gKwkJCWJyZWFrOwo+ID4gKwo+ ID4gKwkJeCA9IGF1eF94IC8gMTY7Cj4gPiArCQl5ID0gYXV4X3kgLyA4Owo+ID4gKwkJYXV4X29m ZnNldCA9IGludGVsX2FkanVzdF90aWxlX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCAxLAo+ ID4gKwkJCQkJCSAgICAgIGF1eF9vZmZzZXQsIGF1eF9vZmZzZXQgLSBhbGlnbm1lbnQpOwo+ID4g KwkJYXV4X3ggPSB4ICogMTYgKyBhdXhfeCAlIDE2Owo+ID4gKwkJYXV4X3kgPSB5ICogOCArIGF1 eF95ICUgODsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAoYXV4X3ggIT0gbWFpbl94IHx8IGF1eF95 ICE9IG1haW5feSkKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsKPiA+ICsJcGxhbmVfc3RhdGUt PmF1eC5vZmZzZXQgPSBhdXhfb2Zmc2V0Owo+ID4gKwlwbGFuZV9zdGF0ZS0+YXV4LnggPSBhdXhf eDsKPiA+ICsJcGxhbmVfc3RhdGUtPmF1eC55ID0gYXV4X3k7Cj4gPiArCj4gPiArCXJldHVybiB0 cnVlOwo+ID4gK30KPiA+ICsKPiA+ICBzdGF0aWMgaW50IHNrbF9jaGVja19tYWluX3N1cmZhY2Uo c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiA+ICB7Cj4gPiAgCWNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7Cj4gPiBA QCAtMjkzNyw3ICszMDE2LDcgQEAgc3RhdGljIGludCBza2xfY2hlY2tfbWFpbl9zdXJmYWNlKHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gPiAgCj4gPiAgCQl3aGlsZSAo KHggKyB3KSAqIGNwcCA+IGZiLT5waXRjaGVzWzBdKSB7Cj4gPiAgCQkJaWYgKG9mZnNldCA9PSAw KSB7Cj4gPiAtCQkJCURSTV9ERUJVR19LTVMoIlVuYWJsZSB0byBmaW5kIHN1aXRhYmxlIGRpc3Bs YXkgc3VyZmFjZSBvZmZzZXRcbiIpOwo+ID4gKwkJCQlEUk1fREVCVUdfS01TKCJVbmFibGUgdG8g ZmluZCBzdWl0YWJsZSBkaXNwbGF5IHN1cmZhY2Ugb2Zmc2V0IGR1ZSB0byBYLXRpbGluZ1xuIik7 Cj4gPiAgCQkJCXJldHVybiAtRUlOVkFMOwo+ID4gIAkJCX0KPiA+ICAKPiA+IEBAIC0yOTQ2LDYg KzMwMjUsMjYgQEAgc3RhdGljIGludCBza2xfY2hlY2tfbWFpbl9zdXJmYWNlKHN0cnVjdCBpbnRl bF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gPiAgCQl9Cj4gPiAgCX0KPiA+ICAKPiA+ICsJ LyoKPiA+ICsJICogQ0NTIEFVWCBzdXJmYWNlIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIHgveSBvZmZz ZXRzLCB3ZSBtdXN0IG1ha2Ugc3VyZQo+ID4gKwkgKiB0aGV5IG1hdGNoIHdpdGggdGhlIG1haW4g c3VyZmFjZSB4L3kgb2Zmc2V0cy4KPiA+ICsJICovCj4gPiArCWlmIChmYi0+bW9kaWZpZXIgPT0g STkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8Cj4gPiArCSAgICBmYi0+bW9kaWZpZXIgPT0g STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUykgewo+ID4gKwkJd2hpbGUgKCFza2xfY2hlY2tf bWFpbl9jY3NfY29vcmRpbmF0ZXMocGxhbmVfc3RhdGUsIHgsIHksIG9mZnNldCkpIHsKPiA+ICsJ CQlpZiAob2Zmc2V0ID09IDApCj4gPiArCQkJCWJyZWFrOwo+ID4gKwo+ID4gKwkJCW9mZnNldCA9 IGludGVsX2FkanVzdF90aWxlX29mZnNldCgmeCwgJnksIHBsYW5lX3N0YXRlLCAwLAo+ID4gKwkJ CQkJCQkgIG9mZnNldCwgb2Zmc2V0IC0gYWxpZ25tZW50KTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJ CWlmICh4ICE9IHBsYW5lX3N0YXRlLT5hdXgueCB8fCB5ICE9IHBsYW5lX3N0YXRlLT5hdXgueSkg ewo+ID4gKwkJCURSTV9ERUJVR19LTVMoIlVuYWJsZSB0byBmaW5kIHN1aXRhYmxlIGRpc3BsYXkg c3VyZmFjZSBvZmZzZXQgZHVlIHRvIENDU1xuIik7Cj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4g PiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICAJcGxhbmVfc3RhdGUtPm1haW4ub2Zmc2V0ID0gb2Zm c2V0Owo+ID4gIAlwbGFuZV9zdGF0ZS0+bWFpbi54ID0geDsKPiA+ICAJcGxhbmVfc3RhdGUtPm1h aW4ueSA9IHk7Cj4gPiBAQCAtMjk4Miw2ICszMDgxLDQ3IEBAIHN0YXRpYyBpbnQgc2tsX2NoZWNr X252MTJfYXV4X3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkK PiA+ICAJcmV0dXJuIDA7Cj4gPiAgfQo+ID4gIAo+ID4gK3N0YXRpYyBpbnQgc2tsX2NoZWNrX2Nj c19hdXhfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ID4g K3sKPiA+ICsJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5l X3N0YXRlLT5iYXNlLnBsYW5lKTsKPiA+ICsJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19p bnRlbF9jcnRjKHBsYW5lX3N0YXRlLT5iYXNlLmNydGMpOwo+ID4gKwlpbnQgc3JjX3ggPSBwbGFu ZV9zdGF0ZS0+YmFzZS5zcmMueDEgPj4gMTY7Cj4gPiArCWludCBzcmNfeSA9IHBsYW5lX3N0YXRl LT5iYXNlLnNyYy55MSA+PiAxNjsKPiA+ICsJaW50IHggPSBzcmNfeCAvIDE2Owo+ID4gKwlpbnQg eSA9IHNyY195IC8gODsKPiA+ICsJdTMyIG9mZnNldDsKPiA+ICsKPiA+ICsJc3dpdGNoIChwbGFu ZS0+aWQpIHsKPiA+ICsJY2FzZSBQTEFORV9QUklNQVJZOgo+ID4gKwljYXNlIFBMQU5FX1NQUklU RTA6Cj4gPiArCQlicmVhazsKPiA+ICsJZGVmYXVsdDoKPiA+ICsJCURSTV9ERUJVR19LTVMoIlJD IHN1cHBvcnQgb25seSBvbiBwbGFuZSAxIGFuZCAyXG4iKTsKPiA+ICsJCXJldHVybiAtRUlOVkFM Owo+ID4gKwl9Cj4gPiArCj4gPiArCWlmIChjcnRjLT5waXBlID09IFBJUEVfQykgewo+ID4gKwkJ RFJNX0RFQlVHX0tNUygiTm8gUkMgc3VwcG9ydCBvbiBwaXBlIENcbiIpOwo+ID4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0 aW9uICYmCj4gPiArCSAgICBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbiAmIH4oRFJNX1JPVEFU RV8wIHwgRFJNX1JPVEFURV8xODApKSB7Cj4gPiArCQlEUk1fREVCVUdfS01TKCJSQyBzdXBwb3J0 IG9ubHkgd2l0aCAwLzE4MCBkZWdyZWUgcm90YXRpb24gJXhcbiIsCj4gPiArCQkJICAgICAgcGxh bmVfc3RhdGUtPmJhc2Uucm90YXRpb24pOwo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCX0K PiA+ICsKPiA+ICsJaW50ZWxfYWRkX2ZiX29mZnNldHMoJngsICZ5LCBwbGFuZV9zdGF0ZSwgMSk7 Cj4gPiArCW9mZnNldCA9IGludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoJngsICZ5LCBwbGFuZV9z dGF0ZSwgMSk7Cj4gPiArCj4gPiArCXBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0ID0gb2Zmc2V0Owo+ ID4gKwlwbGFuZV9zdGF0ZS0+YXV4LnggPSB4ICogMTYgKyBzcmNfeCAlIDE2Owo+ID4gKwlwbGFu ZV9zdGF0ZS0+YXV4LnkgPSB5ICogOCArIHNyY195ICUgODsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7 Cj4gPiArfQo+ID4gKwo+ID4gIGludCBza2xfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50 ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+ID4gIHsKPiA+ICAJY29uc3Qgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKPiA+IEBAIC0zMDAyLDYg KzMxNDIsMTEgQEAgaW50IHNrbF9jaGVja19wbGFuZV9zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gPiAgCQlyZXQgPSBza2xfY2hlY2tfbnYxMl9hdXhfc3Vy ZmFjZShwbGFuZV9zdGF0ZSk7Cj4gPiAgCQlpZiAocmV0KQo+ID4gIAkJCXJldHVybiByZXQ7Cj4g PiArCX0gZWxzZSBpZiAoZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0ND UyB8fAo+ID4gKwkJICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9D Q1MpIHsKPiA+ICsJCXJldCA9IHNrbF9jaGVja19jY3NfYXV4X3N1cmZhY2UocGxhbmVfc3RhdGUp Owo+ID4gKwkJaWYgKHJldCkKPiA+ICsJCQlyZXR1cm4gcmV0Owo+ID4gIAl9IGVsc2Ugewo+ID4g IAkJcGxhbmVfc3RhdGUtPmF1eC5vZmZzZXQgPSB+MHhmZmY7Cj4gPiAgCQlwbGFuZV9zdGF0ZS0+ YXV4LnggPSAwOwo+ID4gQEAgLTMzNTcsOCArMzUwMiwxMiBAQCB1MzIgc2tsX3BsYW5lX2N0bF90 aWxpbmcodWludDY0X3QgZmJfbW9kaWZpZXIpCj4gPiAgCQlyZXR1cm4gUExBTkVfQ1RMX1RJTEVE X1g7Cj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Cj4gPiAgCQlyZXR1cm4gUExB TkVfQ1RMX1RJTEVEX1k7Cj4gPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOgo+ ID4gKwkJcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9ZIHwgUExBTkVfQ1RMX0RFQ09NUFJFU1NJT05f RU5BQkxFOwo+ID4gIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRDoKPiA+ICAJCXJldHVy biBQTEFORV9DVExfVElMRURfWUY7Cj4gPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVE X0NDUzoKPiA+ICsJCXJldHVybiBQTEFORV9DVExfVElMRURfWUYgfCBQTEFORV9DVExfREVDT01Q UkVTU0lPTl9FTkFCTEU7Cj4gPiAgCWRlZmF1bHQ6Cj4gPiAgCQlNSVNTSU5HX0NBU0UoZmJfbW9k aWZpZXIpOwo+ID4gIAl9Cj4gPiBAQCAtMzQwMSw2ICszNTUwLDcgQEAgc3RhdGljIHZvaWQgc2t5 bGFrZV91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+ICAJ dTMyIHBsYW5lX2N0bDsKPiA+ICAJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUt PmJhc2Uucm90YXRpb247Cj4gPiAgCXUzMiBzdHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKGZiLCAw LCByb3RhdGlvbik7Cj4gPiArCXUzMiBhdXhfc3RyaWRlID0gc2tsX3BsYW5lX3N0cmlkZShmYiwg MSwgcm90YXRpb24pOwo+ID4gIAl1MzIgc3VyZl9hZGRyID0gcGxhbmVfc3RhdGUtPm1haW4ub2Zm c2V0Owo+ID4gIAlpbnQgc2NhbGVyX2lkID0gcGxhbmVfc3RhdGUtPnNjYWxlcl9pZDsKPiA+ICAJ aW50IHNyY194ID0gcGxhbmVfc3RhdGUtPm1haW4ueDsKPiA+IEBAIC0zNDM2LDYgKzM1ODYsMTAg QEAgc3RhdGljIHZvaWQgc2t5bGFrZV91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKPiA+ICAJSTkxNV9XUklURShQTEFORV9PRkZTRVQocGlwZSwgcGxhbmVfaWQp LCAoc3JjX3kgPDwgMTYpIHwgc3JjX3gpOwo+ID4gIAlJOTE1X1dSSVRFKFBMQU5FX1NUUklERShw aXBlLCBwbGFuZV9pZCksIHN0cmlkZSk7Cj4gPiAgCUk5MTVfV1JJVEUoUExBTkVfU0laRShwaXBl LCBwbGFuZV9pZCksIChzcmNfaCA8PCAxNikgfCBzcmNfdyk7Cj4gPiArCUk5MTVfV1JJVEUoUExB TkVfQVVYX0RJU1QocGlwZSwgcGxhbmVfaWQpLAo+ID4gKwkJICAgKHBsYW5lX3N0YXRlLT5hdXgu b2Zmc2V0IC0gc3VyZl9hZGRyKSB8IGF1eF9zdHJpZGUpOwo+ID4gKwlJOTE1X1dSSVRFKFBMQU5F X0FVWF9PRkZTRVQocGlwZSwgcGxhbmVfaWQpLAo+ID4gKwkJICAgKHBsYW5lX3N0YXRlLT5hdXgu eSA8PCAxNikgfCBwbGFuZV9zdGF0ZS0+YXV4LngpOwo+ID4gIAo+ID4gIAlpZiAoc2NhbGVyX2lk ID49IDApIHsKPiA+ICAJCXVpbnQzMl90IHBzX2N0cmwgPSAwOwo+ID4gQEAgLTk4MDcsMTAgKzk5 NjEsMTYgQEAgc2t5bGFrZV9nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcoc3RydWN0IGludGVsX2Ny dGMgKmNydGMsCj4gPiAgCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDsK PiA+ICAJCWJyZWFrOwo+ID4gIAljYXNlIFBMQU5FX0NUTF9USUxFRF9ZOgo+ID4gLQkJZmItPm1v ZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ7Cj4gPiArCQlpZiAodmFsICYgUExBTkVf Q1RMX0RFQ09NUFJFU1NJT05fRU5BQkxFKQo+ID4gKwkJCWZiLT5tb2RpZmllciA9IEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEX0NDUzsKPiA+ICsJCWVsc2UKPiA+ICsJCQlmYi0+bW9kaWZpZXIgPSBJ OTE1X0ZPUk1BVF9NT0RfWV9USUxFRDsKPiA+ICAJCWJyZWFrOwo+ID4gIAljYXNlIFBMQU5FX0NU TF9USUxFRF9ZRjoKPiA+IC0JCWZiLT5tb2RpZmllciA9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxF RDsKPiA+ICsJCWlmICh2YWwgJiBQTEFORV9DVExfREVDT01QUkVTU0lPTl9FTkFCTEUpCj4gPiAr CQkJZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzsKPiA+ICsJCWVs c2UKPiA+ICsJCQlmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ7Cj4gPiAg CQlicmVhazsKPiA+ICAJZGVmYXVsdDoKPiA+ICAJCU1JU1NJTkdfQ0FTRSh0aWxpbmcpOwo+ID4g QEAgLTEyMDE0LDcgKzEyMTc0LDcgQEAgc3RhdGljIHZvaWQgc2tsX2RvX21taW9fZmxpcChzdHJ1 Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKPiA+ICAJdTMyIGN0bCwgc3RyaWRlID0gc2tsX3Bs YW5lX3N0cmlkZShmYiwgMCwgcm90YXRpb24pOwo+ID4gIAo+ID4gIAljdGwgPSBJOTE1X1JFQUQo UExBTkVfQ1RMKHBpcGUsIDApKTsKPiA+IC0JY3RsICY9IH5QTEFORV9DVExfVElMRURfTUFTSzsK PiA+ICsJY3RsICY9IH4oUExBTkVfQ1RMX1RJTEVEX01BU0sgfCBQTEFORV9DVExfREVDT01QUkVT U0lPTl9FTkFCTEUpOwo+ID4gIAlzd2l0Y2ggKGZiLT5tb2RpZmllcikgewo+ID4gIAljYXNlIERS TV9GT1JNQVRfTU9EX05PTkU6Cj4gPiAgCQlicmVhazsKPiA+IEBAIC0xMjAyNCw5ICsxMjE4NCwx NSBAQCBzdGF0aWMgdm9pZCBza2xfZG9fbW1pb19mbGlwKHN0cnVjdCBpbnRlbF9jcnRjICppbnRl bF9jcnRjLAo+ID4gIAljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgo+ID4gIAkJY3RsIHw9 IFBMQU5FX0NUTF9USUxFRF9ZOwo+ID4gIAkJYnJlYWs7Cj4gPiArCWNhc2UgSTkxNV9GT1JNQVRf TU9EX1lfVElMRURfQ0NTOgo+ID4gKwkJY3RsIHw9IFBMQU5FX0NUTF9USUxFRF9ZIHwgUExBTkVf Q1RMX0RFQ09NUFJFU1NJT05fRU5BQkxFOwo+ID4gKwkJYnJlYWs7Cj4gPiAgCWNhc2UgSTkxNV9G T1JNQVRfTU9EX1lmX1RJTEVEOgo+ID4gIAkJY3RsIHw9IFBMQU5FX0NUTF9USUxFRF9ZRjsKPiA+ ICAJCWJyZWFrOwo+ID4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6Cj4gPiAr CQljdGwgfD0gUExBTkVfQ1RMX1RJTEVEX1lGIHwgUExBTkVfQ1RMX0RFQ09NUFJFU1NJT05fRU5B QkxFOwo+ID4gKwkJYnJlYWs7Cj4gPiAgCWRlZmF1bHQ6Cj4gPiAgCQlNSVNTSU5HX0NBU0UoZmIt Pm1vZGlmaWVyKTsKPiA+ICAJfQo+ID4gQEAgLTE1OTI1LDkgKzE2MDkxLDEwIEBAIHN0YXRpYyBp bnQgaW50ZWxfZnJhbWVidWZmZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gIAkJ CQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gPiAgewo+ID4gIAlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gPiArCXN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiID0gJmludGVsX2ZiLT5iYXNlOwo+ID4gIAl1bnNpZ25lZCBpbnQg dGlsaW5nID0gaTkxNV9nZW1fb2JqZWN0X2dldF90aWxpbmcob2JqKTsKPiA+IC0JaW50IHJldDsK PiA+IC0JdTMyIHBpdGNoX2xpbWl0LCBzdHJpZGVfYWxpZ25tZW50Owo+ID4gKwlpbnQgcmV0LCBp Owo+ID4gKwl1MzIgcGl0Y2hfbGltaXQ7Cj4gPiAgCXN0cnVjdCBkcm1fZm9ybWF0X25hbWVfYnVm IGZvcm1hdF9uYW1lOwo+ID4gIAo+ID4gIAlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmRldi0+ c3RydWN0X211dGV4KSk7Cj4gPiBAQCAtMTU5NTMsNiArMTYxMjAsMTkgQEAgc3RhdGljIGludCBp bnRlbF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiAgCj4gPiAg CS8qIFBhc3NlZCBpbiBtb2RpZmllciBzYW5pdHkgY2hlY2tpbmcuICovCj4gPiAgCXN3aXRjaCAo bW9kZV9jbWQtPm1vZGlmaWVyWzBdKSB7Cj4gPiArCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElM RURfQ0NTOgo+ID4gKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6Cj4gPiArCQlz d2l0Y2ggKG1vZGVfY21kLT5waXhlbF9mb3JtYXQpIHsKPiA+ICsJCWNhc2UgRFJNX0ZPUk1BVF9Y QkdSODg4ODoKPiA+ICsJCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKPiA+ICsJCWNhc2UgRFJN X0ZPUk1BVF9YUkdCODg4ODoKPiA+ICsJCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKPiA+ICsJ CQlicmVhazsKPiA+ICsJCWRlZmF1bHQ6Cj4gPiArCQkJRFJNX0RFQlVHX0tNUygiUkMgc3VwcG9y dGVkIG9ubHkgd2l0aCBSR0I4ODg4IGZvcm1hdHNcbiIpOwo+ID4gKwkJCXJldHVybiAtRUlOVkFM Owo+ID4gKwkJfQo+ID4gKwkJLyogZmFsbCB0aHJvdWdoICovCj4gPiAgCWNhc2UgSTkxNV9GT1JN QVRfTU9EX1lfVElMRUQ6Cj4gPiAgCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgo+ID4g IAkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA5KSB7Cj4gPiBAQCAtMTYwNTksMjIgKzE2MjM5 LDQ2IEBAIHN0YXRpYyBpbnQgaW50ZWxfZnJhbWVidWZmZXJfaW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAo+ID4gIAlpZiAobW9kZV9jbWQtPm9mZnNldHNbMF0gIT0gMCkKPiA+ICAJCXJldHVy biAtRUlOVkFMOwo+ID4gIAo+ID4gLQlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoZGV2 LCAmaW50ZWxfZmItPmJhc2UsIG1vZGVfY21kKTsKPiA+ICsJZHJtX2hlbHBlcl9tb2RlX2ZpbGxf ZmJfc3RydWN0KGRldiwgZmIsIG1vZGVfY21kKTsKPiA+ICAKPiA+IC0Jc3RyaWRlX2FsaWdubWVu dCA9IGludGVsX2ZiX3N0cmlkZV9hbGlnbm1lbnQoJmludGVsX2ZiLT5iYXNlLCAwKTsKPiA+IC0J aWYgKG1vZGVfY21kLT5waXRjaGVzWzBdICYgKHN0cmlkZV9hbGlnbm1lbnQgLSAxKSkgewo+ID4g LQkJRFJNX0RFQlVHX0tNUygicGl0Y2ggKCVkKSBtdXN0IGJlIGF0IGxlYXN0ICV1IGJ5dGUgYWxp Z25lZFxuIiwKPiA+IC0JCQkgICAgICBtb2RlX2NtZC0+cGl0Y2hlc1swXSwgc3RyaWRlX2FsaWdu bWVudCk7Cj4gPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJZm9yIChpID0gMDsgaSA8IGZiLT5m b3JtYXQtPm51bV9wbGFuZXM7IGkrKykgewo+ID4gKwkJdTMyIHN0cmlkZV9hbGlnbm1lbnQ7Cj4g PiArCj4gPiArCQlpZiAobW9kZV9jbWQtPmhhbmRsZXNbaV0gIT0gbW9kZV9jbWQtPmhhbmRsZXNb MF0pIHsKPiA+ICsJCQlEUk1fREVCVUdfS01TKCJiYWQgcGxhbmUgJWQgaGFuZGxlXG4iLCBpKTsK PiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCXN0cmlkZV9hbGln bm1lbnQgPSBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGZiLCBpKTsKPiA+ICsKPiA+ICsJCS8q Cj4gPiArCQkgKiBEaXNwbGF5IFdBICMwNTMxOiBza2wsYnh0LGtibCxnbGsKPiA+ICsJCSAqCj4g PiArCQkgKiBSZW5kZXIgZGVjb21wcmVzc2lvbiBhbmQgcGxhbmUgd2lkdGggPiAzODQwCj4gPiAr CQkgKiBjb21iaW5lZCB3aXRoIGhvcml6b250YWwgcGFubmluZyByZXF1aXJlcyB0aGUKPiA+ICsJ CSAqIHBsYW5lIHN0cmlkZSB0byBiZSBhIG11bHRpcGxlIG9mIDQuIFdlJ2xsIGp1c3QKPiA+ICsJ CSAqIHJlcXVpcmUgdGhlIGVudGlyZSBmYiB0byBhY2NvbW1vZGF0ZSB0aGF0IHRvIGF2b2lkCj4g PiArCQkgKiBwb3RlbnRpYWwgcnVudGltZSBlcnJvcnMgYXQgcGxhbmUgY29uZmlndXJhdGlvbiB0 aW1lLgo+ID4gKwkJICovCj4gPiArCQlpZiAoSVNfR0VOOShkZXZfcHJpdikgJiYgaSA9PSAwICYm IGZiLT53aWR0aCA+IDM4NDAgJiYKPiA+ICsJCSAgICAoZmItPm1vZGlmaWVyID09IEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEX0NDUyB8fAo+ID4gKwkJICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9G T1JNQVRfTU9EX1lmX1RJTEVEX0NDUykpCj4gPiArCQkJc3RyaWRlX2FsaWdubWVudCAqPSA0Owo+ ID4gKwo+ID4gKwkJaWYgKGZiLT5waXRjaGVzW2ldICYgKHN0cmlkZV9hbGlnbm1lbnQgLSAxKSkg ewo+ID4gKwkJCURSTV9ERUJVR19LTVMoInBsYW5lICVkIHBpdGNoICglZCkgbXVzdCBiZSBhdCBs ZWFzdCAldSBieXRlIGFsaWduZWRcbiIsCj4gPiArCQkJCSAgICAgIGksIGZiLT5waXRjaGVzW2ld LCBzdHJpZGVfYWxpZ25tZW50KTsKPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJCX0KPiA+ ICAJfQo+ID4gIAo+ID4gIAlpbnRlbF9mYi0+b2JqID0gb2JqOwo+ID4gIAo+ID4gLQlyZXQgPSBp bnRlbF9maWxsX2ZiX2luZm8oZGV2X3ByaXYsICZpbnRlbF9mYi0+YmFzZSk7Cj4gPiArCXJldCA9 IGludGVsX2ZpbGxfZmJfaW5mbyhkZXZfcHJpdiwgZmIpOwo+ID4gIAlpZiAocmV0KQo+ID4gIAkJ cmV0dXJuIHJldDsKPiA+ICAKPiA+IC0JcmV0ID0gZHJtX2ZyYW1lYnVmZmVyX2luaXQoZGV2LCAm aW50ZWxfZmItPmJhc2UsICZpbnRlbF9mYl9mdW5jcyk7Cj4gPiArCXJldCA9IGRybV9mcmFtZWJ1 ZmZlcl9pbml0KGRldiwgZmIsICZpbnRlbF9mYl9mdW5jcyk7Cj4gPiAgCWlmIChyZXQpIHsKPiA+ ICAJCURSTV9FUlJPUigiZnJhbWVidWZmZXIgaW5pdCBmYWlsZWQgJWRcbiIsIHJldCk7Cj4gPiAg CQlyZXR1cm4gcmV0Owo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gPiBpbmRleCAyNDk2MjNk NDViZTAuLjI1NzgyY2QxNzRjMCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3BtLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiA+ IEBAIC02Miw2ICs2MiwyMCBAQCBzdGF0aWMgdm9pZCBnZW45X2luaXRfY2xvY2tfZ2F0aW5nKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ICAJSTkxNV9XUklURShDSElDS0VO X1BBUjFfMSwKPiA+ICAJCSAgIEk5MTVfUkVBRChDSElDS0VOX1BBUjFfMSkgfCBTS0xfRURQX1BT Ul9GSVhfUkRXUkFQKTsKPiA+ICAKPiA+ICsJLyoKPiA+ICsJICogRGlzcGxheSBXQSMwMzkwOiBz a2wsYnh0LGtibCxnbGsKPiA+ICsJICoKPiA+ICsJICogTXVzdCBtYXRjaCBTYW1wbGVyLCBQaXhl bCBCYWNrIEVuZCwgYW5kIE1lZGlhCj4gPiArCSAqICgweEUxOTQgYml0IDgsIDB4NzAxNCBiaXQg MTMsIDB4NEREQyBiaXRzIDI3IGFuZCAzMSkuCj4gPiArCSAqCj4gPiArCSAqIEluY2x1ZGluZyBi aXRzIG91dHNpZGUgdGhlIHBhZ2UgaW4gdGhlIGhhc2ggd291bGQKPiA+ICsJICogcmVxdWlyZSAy IChvciA0PykgTWlCIGFsaWdubWVudCBvZiByZXNvdXJjZXMuIEp1c3QKPiA+ICsJICogYXNzdW1l IHRoZSBkZWZhdWwgaGFzaGluZyBtb2RlIHdoaWNoIG9ubHkgdXNlcyBiaXRzCj4gPiArCSAqIHdp dGhpbiB0aGUgcGFnZS4KPiA+ICsJICovCj4gPiArCUk5MTVfV1JJVEUoQ0hJQ0tFTl9QQVIxXzEs Cj4gPiArCQkgICBJOTE1X1JFQUQoQ0hJQ0tFTl9QQVIxXzEpICYgflNLTF9SQ19IQVNIX09VVFNJ REUpOwo+ID4gKwo+ID4gIAlJOTE1X1dSSVRFKEdFTjhfQ09ORklHMCwKPiA+ICAJCSAgIEk5MTVf UkVBRChHRU44X0NPTkZJRzApIHwgR0VOOV9ERUZBVUxUX0ZJWEVTKTsKPiA+ICAKPiA+IEBAIC0z MzE0LDcgKzMzMjgsOSBAQCBza2xfZGRiX21pbl9hbGxvYyhjb25zdCBzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlICpwc3RhdGUsCj4gPiAgCj4gPiAgCS8qIEZvciBOb24gWS10aWxlIHJldHVybiA4LWJs b2NrcyAqLwo+ID4gIAlpZiAoZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE ICYmCj4gPiAtCSAgICBmYi0+bW9kaWZpZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEKQo+ ID4gKwkgICAgZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRCAmJgo+ID4g KwkgICAgZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUyAmJgo+ID4g KwkgICAgZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1MpCj4gPiAg CQlyZXR1cm4gODsKPiA+ICAKPiA+ICAJc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmaW50ZWxfcHN0 YXRlLT5iYXNlLnNyYykgPj4gMTY7Cj4gPiBAQCAtMzU5MCw3ICszNjA2LDkgQEAgc3RhdGljIGlu dCBza2xfY29tcHV0ZV9wbGFuZV93bShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gPiAgCX0KPiA+ICAKPiA+ICAJeV90aWxlZCA9IGZiLT5tb2RpZmllciA9PSBJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRCB8fAo+ID4gLQkJICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JN QVRfTU9EX1lmX1RJTEVEOwo+ID4gKwkJICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9E X1lmX1RJTEVEIHx8Cj4gPiArCQkgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRF9DQ1MgfHwKPiA+ICsJCSAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZZl9U SUxFRF9DQ1M7Cj4gPiAgCXhfdGlsZWQgPSBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9E X1hfVElMRUQ7Cj4gPiAgCj4gPiAgCS8qIERpc3BsYXkgV0EgIzExNDE6IGtibC4gKi8KPiA+IEBA IC0zNjc1LDYgKzM2OTMsMTMgQEAgc3RhdGljIGludCBza2xfY29tcHV0ZV9wbGFuZV93bShjb25z dCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAgCXJlc19saW5lcyA9IERJ Vl9ST1VORF9VUChzZWxlY3RlZF9yZXN1bHQudmFsLAo+ID4gIAkJCQkgcGxhbmVfYmxvY2tzX3Bl cl9saW5lLnZhbCk7Cj4gPiAgCj4gPiArCS8qIERpc3BsYXkgV0EgIzExMjU6IHNrbCxieHQsa2Js LGdsayAqLwo+ID4gKwlpZiAobGV2ZWwgPT0gMCAmJgo+ID4gKwkgICAgKGZiLT5tb2RpZmllciA9 PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgfHwKPiA+ICsJICAgICBmYi0+bW9kaWZpZXIg PT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUykpCj4gPiArCQlyZXNfYmxvY2tzICs9IGZp eGVkXzE2XzE2X3RvX3UzMl9yb3VuZF91cCh5X3RpbGVfbWluaW11bSk7Cj4gCj4gVGhpcyBXQSBh bHNvIHJlcXVpcmVzIGFkanVzdGluZyByZXNfbGluZXMgYW5kIG1ha2luZyB0aGUgbGV2ZWwgMAo+ IHJlc19ibG9ja3MgYW5kIHJlc19saW5lcyB0aGUgbWluaW11bSBmb3IgdGhlIGhpZ2hlciBsZXZl bHMuCj4gVGhlIGxldmVsIDAgcmVzX2xpbmVzIHdvbid0IGJlIHVzZWQgdGhvdWdoIGxhdGVyIGFu ZCB0aGUgbWluaW11bSBjb3VsZAo+IGJlIGd1YXJhbnRlZWQgYWxyZWFkeSBieSB0aGUgaGlnaGVy IG1lbW9yeSBsYXRlbmN5IHZhbHVlcyBmb3IgaGlnaGVyCj4gbGV2ZWxzLiBJbiBhbnkgY2FzZSB0 aGlzIGNoZWNrIGNhbiBiZSBhZGRlZCBsYXRlciBpZiBuZWVkZWQuIFRoZSByZXN0Cj4gbG9va3Mg Z29vZDoKPiBSZXZpZXdlZC1ieTogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPgo+IAo+ ID4gKwo+ID4gKwkvKiBEaXNwbGF5IFdBICMxMTI2OiBza2wsYnh0LGtibCxnbGsgKi8KPiA+ICAJ aWYgKGxldmVsID49IDEgJiYgbGV2ZWwgPD0gNykgewo+ID4gIAkJaWYgKHlfdGlsZWQpIHsKPiA+ ICAJCQlyZXNfYmxvY2tzICs9IGZpeGVkXzE2XzE2X3RvX3UzMl9yb3VuZF91cCh5X3RpbGVfbWlu aW11bSk7CgpZZWFoIHNvIHRoaXMgXiBpcyB3aGVyZSB3ZSBkbyB0aGUgc2FtZSBhZGp1c3RtZW50 IGZvciBsZXZlbCA+PSAxCnJlZ2FyZGxlc3Mgb2YgQ0NTIG9yIG5vdCwgYW5kIHNvIGFzc3VtaW5n IHRoZSBtZW1vcnkgbGF0ZW5jeSB2YWx1ZXMKYXJlIG5vbi1kZWNyZWFzaW5nIHRoaXMgc2hvdWxk IGdpdmUgdXMgdGhlIHJlcXVpcmVkIGd1YXJhbnRlZSBhbHJlYWR5LgoKPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3Nwcml0ZS5jCj4gPiBpbmRleCA3MDMxYmM3MzNkOTcuLjA2M2E5OTQ4MTVkMCAx MDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCj4gPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwo+ID4gQEAgLTIxMCw2ICsy MTAsNyBAQCBza2xfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKmRybV9wbGFuZSwKPiA+ ICAJdTMyIHN1cmZfYWRkciA9IHBsYW5lX3N0YXRlLT5tYWluLm9mZnNldDsKPiA+ICAJdW5zaWdu ZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247Cj4gPiAgCXUzMiBz dHJpZGUgPSBza2xfcGxhbmVfc3RyaWRlKGZiLCAwLCByb3RhdGlvbik7Cj4gPiArCXUzMiBhdXhf c3RyaWRlID0gc2tsX3BsYW5lX3N0cmlkZShmYiwgMSwgcm90YXRpb24pOwo+ID4gIAlpbnQgY3J0 Y194ID0gcGxhbmVfc3RhdGUtPmJhc2UuZHN0LngxOwo+ID4gIAlpbnQgY3J0Y195ID0gcGxhbmVf c3RhdGUtPmJhc2UuZHN0LnkxOwo+ID4gIAl1aW50MzJfdCBjcnRjX3cgPSBkcm1fcmVjdF93aWR0 aCgmcGxhbmVfc3RhdGUtPmJhc2UuZHN0KTsKPiA+IEBAIC0yNDgsNiArMjQ5LDEwIEBAIHNrbF91 cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqZHJtX3BsYW5lLAo+ID4gIAlJOTE1X1dSSVRF KFBMQU5FX09GRlNFVChwaXBlLCBwbGFuZV9pZCksICh5IDw8IDE2KSB8IHgpOwo+ID4gIAlJOTE1 X1dSSVRFKFBMQU5FX1NUUklERShwaXBlLCBwbGFuZV9pZCksIHN0cmlkZSk7Cj4gPiAgCUk5MTVf V1JJVEUoUExBTkVfU0laRShwaXBlLCBwbGFuZV9pZCksIChzcmNfaCA8PCAxNikgfCBzcmNfdyk7 Cj4gPiArCUk5MTVfV1JJVEUoUExBTkVfQVVYX0RJU1QocGlwZSwgcGxhbmVfaWQpLAo+ID4gKwkJ ICAgKHBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0IC0gc3VyZl9hZGRyKSB8IGF1eF9zdHJpZGUpOwo+ ID4gKwlJOTE1X1dSSVRFKFBMQU5FX0FVWF9PRkZTRVQocGlwZSwgcGxhbmVfaWQpLAo+ID4gKwkJ ICAgKHBsYW5lX3N0YXRlLT5hdXgueSA8PCAxNikgfCBwbGFuZV9zdGF0ZS0+YXV4LngpOwo+ID4g IAo+ID4gIAkvKiBwcm9ncmFtIHBsYW5lIHNjYWxlciAqLwo+ID4gIAlpZiAocGxhbmVfc3RhdGUt PnNjYWxlcl9pZCA+PSAwKSB7Cj4gPiAtLSAKPiA+IDIuMTAuMgo+ID4gCj4gPiBfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gZHJpLWRldmVsIG1haWxp bmcgbGlzdAo+ID4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCi0tIApWaWxs ZSBTeXJqw6Rsw6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RyaS1kZXZlbAo=