From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Ujfalusi Subject: Re: [PATCH v2 111/186] ASoC: tlv320dac33: replace codec to component Date: Wed, 31 Jan 2018 11:13:28 +0200 Message-ID: <1a350766-30b7-bc72-3f89-96560bf13c45@ti.com> References: <87607l8k9i.wl%kuninori.morimoto.gx@renesas.com> <87inbl5q6q.wl%kuninori.morimoto.gx@renesas.com> <871si9z4jc.wl%kuninori.morimoto.gx@renesas.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from lelnx194.ext.ti.com (lelnx194.ext.ti.com [198.47.27.80]) by alsa0.perex.cz (Postfix) with ESMTP id BFA6E266A74 for ; Wed, 31 Jan 2018 10:13:06 +0100 (CET) In-Reply-To: <871si9z4jc.wl%kuninori.morimoto.gx@renesas.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Kuninori Morimoto , Mark Brown Cc: Linux-ALSA List-Id: alsa-devel@alsa-project.org CgpPbiAyMDE4LTAxLTI5IDA2OjE0LCBLdW5pbm9yaSBNb3JpbW90byB3cm90ZToKPiAKPiBGcm9t OiBLdW5pbm9yaSBNb3JpbW90byA8a3VuaW5vcmkubW9yaW1vdG8uZ3hAcmVuZXNhcy5jb20+Cj4g Cj4gTm93IHdlIGNhbiByZXBsYWNlIENvZGVjIHRvIENvbXBvbmVudC4gTGV0J3MgZG8gaXQuCj4g Cj4gTm90ZToKPiAJeHh4X2NvZGVjX3h4eCgpCQktPgl4eHhfY29tcG9uZW50X3h4eCgpCj4gCS5p ZGxlX2JpYXNfb2ZmID0gMQktPgkuaWRsZV9iaWFzX29uID0gMAo+IAkuaWdub3JlX3BtZG93bl90 aW1lID0gMAktPgkudXNlX3BtZG93bl90aW1lID0gMQo+IAktCQkJLT4JLmVuZGlhbm5lc3MgPSAx Cj4gCS0JCQktPgkubm9uX2xlZ2FjeV9kYWlfbmFtaW5nID0gMQoKQWNrZWQtYnk6IFBldGVyIFVq ZmFsdXNpIDxwZXRlci51amZhbHVzaUB0aS5jb20+Cgo+IAo+IFNpZ25lZC1vZmYtYnk6IEt1bmlu b3JpIE1vcmltb3RvIDxrdW5pbm9yaS5tb3JpbW90by5neEByZW5lc2FzLmNvbT4KPiAtLS0KPiAg c291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5jIHwgNDAyICsrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gIDEgZmlsZSBjaGFuZ2VkLCAxOTkgaW5zZXJ0aW9ucygr KSwgMjAzIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3Rs djMyMGRhYzMzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmMKPiBpbmRleCA4Yzcx ZDJmLi5hOTU3ZWFlIDEwMDY0NAo+IC0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMu Ywo+ICsrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuYwo+IEBAIC02Myw5ICs2Myw5 IEBACj4gIAkoKChzYW1wbGVzKSo1MDAwKSAvICgoKGJ1cnN0cmF0ZSkqNTAwMCkgLyAoKGJ1cnN0 cmF0ZSkgLSAocGxheXJhdGUpKSkpCj4gIAo+ICBzdGF0aWMgdm9pZCBkYWMzM19jYWxjdWxhdGVf dGltZXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCj4gLQkJCQkgIHN0cnVj dCBzbmRfc29jX2NvZGVjICpjb2RlYyk7Cj4gKwkJCQkgIHN0cnVjdCBzbmRfc29jX2NvbXBvbmVu dCAqY29tcG9uZW50KTsKPiAgc3RhdGljIGludCBkYWMzM19wcmVwYXJlX2NoaXAoc3RydWN0IHNu ZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCj4gLQkJCSAgICAgIHN0cnVjdCBzbmRfc29jX2Nv ZGVjICpjb2RlYyk7Cj4gKwkJCSAgICAgIHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9u ZW50KTsKPiAgCj4gIGVudW0gZGFjMzNfc3RhdGUgewo+ICAJREFDMzNfSURMRSA9IDAsCj4gQEAg LTkxLDcgKzkxLDcgQEAgZW51bSBkYWMzM19maWZvX21vZGVzIHsKPiAgc3RydWN0IHRsdjMyMGRh YzMzX3ByaXYgewo+ICAJc3RydWN0IG11dGV4IG11dGV4Owo+ICAJc3RydWN0IHdvcmtfc3RydWN0 IHdvcms7Cj4gLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7Cj4gKwlzdHJ1Y3Qgc25kX3Nv Y19jb21wb25lbnQgKmNvbXBvbmVudDsKPiAgCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1 cHBsaWVzW0RBQzMzX05VTV9TVVBQTElFU107Cj4gIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0g KnN1YnN0cmVhbTsKPiAgCWludCBwb3dlcl9ncGlvOwo+IEBAIC0xNzEsMTAgKzE3MSwxMCBAQCBz dHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiB7Cj4gIH07Cj4gIAo+ICAvKiBSZWdpc3RlciByZWFkIGFu ZCB3cml0ZSAqLwo+IC1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYWMzM19yZWFkX3JlZ19j YWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCj4gK3N0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgaW50IGRhYzMzX3JlYWRfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29t cG9uZW50LAo+ICAJCQkJCQl1bnNpZ25lZCByZWcpCj4gIHsKPiAtCXN0cnVjdCB0bHYzMjBkYWMz M19wcml2ICpkYWMzMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwo+ICsJc3Ry dWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb21wb25lbnRfZ2V0X2RydmRh dGEoY29tcG9uZW50KTsKPiAgCXU4ICpjYWNoZSA9IGRhYzMzLT5yZWdfY2FjaGU7Cj4gIAlpZiAo cmVnID49IERBQzMzX0NBQ0hFUkVHTlVNKQo+ICAJCXJldHVybiAwOwo+IEBAIC0xODIsMTAgKzE4 MiwxMCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYWMzM19yZWFkX3JlZ19jYWNoZShz dHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCj4gIAlyZXR1cm4gY2FjaGVbcmVnXTsKPiAgfQo+ ICAKPiAtc3RhdGljIGlubGluZSB2b2lkIGRhYzMzX3dyaXRlX3JlZ19jYWNoZShzdHJ1Y3Qgc25k X3NvY19jb2RlYyAqY29kZWMsCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBkYWMzM193cml0ZV9yZWdf Y2FjaGUoc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQsCj4gIAkJCQkJIHU4IHJl ZywgdTggdmFsdWUpCj4gIHsKPiAtCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IHNu ZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwo+ICsJc3RydWN0IHRsdjMyMGRhYzMzX3By aXYgKmRhYzMzID0gc25kX3NvY19jb21wb25lbnRfZ2V0X2RydmRhdGEoY29tcG9uZW50KTsKPiAg CXU4ICpjYWNoZSA9IGRhYzMzLT5yZWdfY2FjaGU7Cj4gIAlpZiAocmVnID49IERBQzMzX0NBQ0hF UkVHTlVNKQo+ICAJCXJldHVybjsKPiBAQCAtMTkzLDEwICsxOTMsMTAgQEAgc3RhdGljIGlubGlu ZSB2b2lkIGRhYzMzX3dyaXRlX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMs Cj4gIAljYWNoZVtyZWddID0gdmFsdWU7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgZGFjMzNfcmVh ZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCj4gK3N0YXRp YyBpbnQgZGFjMzNfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCwgdW5z aWduZWQgaW50IHJlZywKPiAgCQkgICAgICB1OCAqdmFsdWUpCj4gIHsKPiAtCXN0cnVjdCB0bHYz MjBkYWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwo+ ICsJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb21wb25lbnRfZ2V0 X2RydmRhdGEoY29tcG9uZW50KTsKPiAgCWludCB2YWwsIHJldCA9IDA7Cj4gIAo+ICAJKnZhbHVl ID0gcmVnICYgMHhmZjsKPiBAQCAtMjA1LDI0ICsyMDUsMjQgQEAgc3RhdGljIGludCBkYWMzM19y ZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKPiAgCWlm IChkYWMzMy0+Y2hpcF9wb3dlcikgewo+ICAJCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0 YShkYWMzMy0+aTJjLCB2YWx1ZVswXSk7Cj4gIAkJaWYgKHZhbCA8IDApIHsKPiAtCQkJZGV2X2Vy cihjb2RlYy0+ZGV2LCAiUmVhZCBmYWlsZWQgKCVkKVxuIiwgdmFsKTsKPiAtCQkJdmFsdWVbMF0g PSBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgcmVnKTsKPiArCQkJZGV2X2Vycihjb21wb25l bnQtPmRldiwgIlJlYWQgZmFpbGVkICglZClcbiIsIHZhbCk7Cj4gKwkJCXZhbHVlWzBdID0gZGFj MzNfcmVhZF9yZWdfY2FjaGUoY29tcG9uZW50LCByZWcpOwo+ICAJCQlyZXQgPSB2YWw7Cj4gIAkJ fSBlbHNlIHsKPiAgCQkJdmFsdWVbMF0gPSB2YWw7Cj4gLQkJCWRhYzMzX3dyaXRlX3JlZ19jYWNo ZShjb2RlYywgcmVnLCB2YWwpOwo+ICsJCQlkYWMzM193cml0ZV9yZWdfY2FjaGUoY29tcG9uZW50 LCByZWcsIHZhbCk7Cj4gIAkJfQo+ICAJfSBlbHNlIHsKPiAtCQl2YWx1ZVswXSA9IGRhYzMzX3Jl YWRfcmVnX2NhY2hlKGNvZGVjLCByZWcpOwo+ICsJCXZhbHVlWzBdID0gZGFjMzNfcmVhZF9yZWdf Y2FjaGUoY29tcG9uZW50LCByZWcpOwo+ICAJfQo+ICAKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAg Cj4gLXN0YXRpYyBpbnQgZGFjMzNfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1 bnNpZ25lZCBpbnQgcmVnLAo+ICtzdGF0aWMgaW50IGRhYzMzX3dyaXRlKHN0cnVjdCBzbmRfc29j X2NvbXBvbmVudCAqY29tcG9uZW50LCB1bnNpZ25lZCBpbnQgcmVnLAo+ICAJCSAgICAgICB1bnNp Z25lZCBpbnQgdmFsdWUpCj4gIHsKPiAtCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9 IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwo+ICsJc3RydWN0IHRsdjMyMGRhYzMz X3ByaXYgKmRhYzMzID0gc25kX3NvY19jb21wb25lbnRfZ2V0X2RydmRhdGEoY29tcG9uZW50KTsK PiAgCXU4IGRhdGFbMl07Cj4gIAlpbnQgcmV0ID0gMDsKPiAgCj4gQEAgLTIzNCwxMSArMjM0LDEx IEBAIHN0YXRpYyBpbnQgZGFjMzNfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1 bnNpZ25lZCBpbnQgcmVnLAo+ICAJZGF0YVswXSA9IHJlZyAmIDB4ZmY7Cj4gIAlkYXRhWzFdID0g dmFsdWUgJiAweGZmOwo+ICAKPiAtCWRhYzMzX3dyaXRlX3JlZ19jYWNoZShjb2RlYywgZGF0YVsw XSwgZGF0YVsxXSk7Cj4gKwlkYWMzM193cml0ZV9yZWdfY2FjaGUoY29tcG9uZW50LCBkYXRhWzBd LCBkYXRhWzFdKTsKPiAgCWlmIChkYWMzMy0+Y2hpcF9wb3dlcikgewo+ICAJCXJldCA9IGkyY19t YXN0ZXJfc2VuZChkYWMzMy0+aTJjLCBkYXRhLCAyKTsKPiAgCQlpZiAocmV0ICE9IDIpCj4gLQkJ CWRldl9lcnIoY29kZWMtPmRldiwgIldyaXRlIGZhaWxlZCAoJWQpXG4iLCByZXQpOwo+ICsJCQlk ZXZfZXJyKGNvbXBvbmVudC0+ZGV2LCAiV3JpdGUgZmFpbGVkICglZClcbiIsIHJldCk7Cj4gIAkJ ZWxzZQo+ICAJCQlyZXQgPSAwOwo+ICAJfQo+IEBAIC0yNDYsMjQgKzI0NiwyNCBAQCBzdGF0aWMg aW50IGRhYzMzX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50 IHJlZywKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgZGFjMzNfd3JpdGVf bG9ja2VkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKPiAr c3RhdGljIGludCBkYWMzM193cml0ZV9sb2NrZWQoc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpj b21wb25lbnQsIHVuc2lnbmVkIGludCByZWcsCj4gIAkJCSAgICAgIHVuc2lnbmVkIGludCB2YWx1 ZSkKPiAgewo+IC0Jc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb2Rl Y19nZXRfZHJ2ZGF0YShjb2RlYyk7Cj4gKwlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMg PSBzbmRfc29jX2NvbXBvbmVudF9nZXRfZHJ2ZGF0YShjb21wb25lbnQpOwo+ICAJaW50IHJldDsK PiAgCj4gIAltdXRleF9sb2NrKCZkYWMzMy0+bXV0ZXgpOwo+IC0JcmV0ID0gZGFjMzNfd3JpdGUo Y29kZWMsIHJlZywgdmFsdWUpOwo+ICsJcmV0ID0gZGFjMzNfd3JpdGUoY29tcG9uZW50LCByZWcs IHZhbHVlKTsKPiAgCW11dGV4X3VubG9jaygmZGFjMzMtPm11dGV4KTsKPiAgCj4gIAlyZXR1cm4g cmV0Owo+ICB9Cj4gIAo+ICAjZGVmaW5lIERBQzMzX0kyQ19BRERSX0FVVE9JTkMJMHg4MAo+IC1z dGF0aWMgaW50IGRhYzMzX3dyaXRlMTYoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNp Z25lZCBpbnQgcmVnLAo+ICtzdGF0aWMgaW50IGRhYzMzX3dyaXRlMTYoc3RydWN0IHNuZF9zb2Nf Y29tcG9uZW50ICpjb21wb25lbnQsIHVuc2lnbmVkIGludCByZWcsCj4gIAkJICAgICAgIHVuc2ln bmVkIGludCB2YWx1ZSkKPiAgewo+IC0Jc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0g c25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Cj4gKwlzdHJ1Y3QgdGx2MzIwZGFjMzNf cHJpdiAqZGFjMzMgPSBzbmRfc29jX2NvbXBvbmVudF9nZXRfZHJ2ZGF0YShjb21wb25lbnQpOwo+ ICAJdTggZGF0YVszXTsKPiAgCWludCByZXQgPSAwOwo+ICAKPiBAQCAtMjc3LDE1ICsyNzcsMTUg QEAgc3RhdGljIGludCBkYWMzM193cml0ZTE2KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywg dW5zaWduZWQgaW50IHJlZywKPiAgCWRhdGFbMV0gPSAodmFsdWUgPj4gOCkgJiAweGZmOwo+ICAJ ZGF0YVsyXSA9IHZhbHVlICYgMHhmZjsKPiAgCj4gLQlkYWMzM193cml0ZV9yZWdfY2FjaGUoY29k ZWMsIGRhdGFbMF0sIGRhdGFbMV0pOwo+IC0JZGFjMzNfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCBk YXRhWzBdICsgMSwgZGF0YVsyXSk7Cj4gKwlkYWMzM193cml0ZV9yZWdfY2FjaGUoY29tcG9uZW50 LCBkYXRhWzBdLCBkYXRhWzFdKTsKPiArCWRhYzMzX3dyaXRlX3JlZ19jYWNoZShjb21wb25lbnQs IGRhdGFbMF0gKyAxLCBkYXRhWzJdKTsKPiAgCj4gIAlpZiAoZGFjMzMtPmNoaXBfcG93ZXIpIHsK PiAgCQkvKiBXZSBuZWVkIHRvIHNldCBhdXRvaW5jcmVtZW50IG1vZGUgZm9yIDE2IGJpdCB3cml0 ZXMgKi8KPiAgCQlkYXRhWzBdIHw9IERBQzMzX0kyQ19BRERSX0FVVE9JTkM7Cj4gIAkJcmV0ID0g aTJjX21hc3Rlcl9zZW5kKGRhYzMzLT5pMmMsIGRhdGEsIDMpOwo+ICAJCWlmIChyZXQgIT0gMykK PiAtCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiV3JpdGUgZmFpbGVkICglZClcbiIsIHJldCk7Cj4g KwkJCWRldl9lcnIoY29tcG9uZW50LT5kZXYsICJXcml0ZSBmYWlsZWQgKCVkKVxuIiwgcmV0KTsK PiAgCQllbHNlCj4gIAkJCXJldCA9IDA7Cj4gIAl9Cj4gQEAgLTI5Myw1MiArMjkzLDUyIEBAIHN0 YXRpYyBpbnQgZGFjMzNfd3JpdGUxNihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2ln bmVkIGludCByZWcsCj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBkYWMz M19pbml0X2NoaXAoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQo+ICtzdGF0aWMgdm9pZCBk YWMzM19pbml0X2NoaXAoc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQpCj4gIHsK PiAtCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2Ry dmRhdGEoY29kZWMpOwo+ICsJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3Nv Y19jb21wb25lbnRfZ2V0X2RydmRhdGEoY29tcG9uZW50KTsKPiAgCj4gIAlpZiAodW5saWtlbHko IWRhYzMzLT5jaGlwX3Bvd2VyKSkKPiAgCQlyZXR1cm47Cj4gIAo+ICAJLyogQSA6IERBQyBzYW1w bGUgcmF0ZSBGc3JlZi8xLjUgKi8KPiAtCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19EQUNfQ1RS TF9BLCBEQUMzM19EQUNSQVRFKDApKTsKPiArCWRhYzMzX3dyaXRlKGNvbXBvbmVudCwgREFDMzNf REFDX0NUUkxfQSwgREFDMzNfREFDUkFURSgwKSk7Cj4gIAkvKiBCIDogREFDIHNyYz1ub3JtYWws IG5vdCBtdXRlZCAqLwo+IC0JZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0RBQ19DVFJMX0IsIERB QzMzX0RBQ1NSQ1JfUklHSFQgfAo+ICsJZGFjMzNfd3JpdGUoY29tcG9uZW50LCBEQUMzM19EQUNf Q1RSTF9CLCBEQUMzM19EQUNTUkNSX1JJR0hUIHwKPiAgCQkJCQkgICAgIERBQzMzX0RBQ1NSQ0xf TEVGVCk7Cj4gIAkvKiBDIDogKGRlZmF1bHRzKSAqLwo+IC0JZGFjMzNfd3JpdGUoY29kZWMsIERB QzMzX0RBQ19DVFJMX0MsIDB4MDApOwo+ICsJZGFjMzNfd3JpdGUoY29tcG9uZW50LCBEQUMzM19E QUNfQ1RSTF9DLCAweDAwKTsKPiAgCj4gIAkvKiA3MyA6IHZvbHVtZSBzb2Z0IHN0ZXBwaW5nIGNv bnRyb2wsCj4gIAkgY2xvY2sgc291cmNlID0gaW50ZXJuYWwgb3NjICg/KSAqLwo+IC0JZGFjMzNf d3JpdGUoY29kZWMsIERBQzMzX0FOQV9WT0xfU09GVF9TVEVQX0NUUkwsIERBQzMzX1ZPTENMS0VO KTsKPiArCWRhYzMzX3dyaXRlKGNvbXBvbmVudCwgREFDMzNfQU5BX1ZPTF9TT0ZUX1NURVBfQ1RS TCwgREFDMzNfVk9MQ0xLRU4pOwo+ICAKPiAgCS8qIFJlc3RvcmUgb25seSBzZWxlY3RlZCByZWdp c3RlcnMgKGdhaW5zIG1vc3RseSkgKi8KPiAtCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19MREFD X0RJR19WT0xfQ1RSTCwKPiAtCQkgICAgZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIERBQzMz X0xEQUNfRElHX1ZPTF9DVFJMKSk7Cj4gLQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfUkRBQ19E SUdfVk9MX0NUUkwsCj4gLQkJICAgIGRhYzMzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBEQUMzM19S REFDX0RJR19WT0xfQ1RSTCkpOwo+IC0KPiAtCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19MSU5F TF9UT19MTE9fVk9MLAo+IC0JCSAgICBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFDMzNf TElORUxfVE9fTExPX1ZPTCkpOwo+IC0JZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0xJTkVSX1RP X1JMT19WT0wsCj4gLQkJICAgIGRhYzMzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBEQUMzM19MSU5F Ul9UT19STE9fVk9MKSk7Cj4gLQo+IC0JZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX09VVF9BTVBf Q1RSTCwKPiAtCQkgICAgZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIERBQzMzX09VVF9BTVBf Q1RSTCkpOwo+IC0KPiAtCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19MREFDX1BXUl9DVFJMLAo+ IC0JCSAgICBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFDMzNfTERBQ19QV1JfQ1RSTCkp Owo+IC0JZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX1JEQUNfUFdSX0NUUkwsCj4gLQkJICAgIGRh YzMzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBEQUMzM19SREFDX1BXUl9DVFJMKSk7Cj4gKwlkYWMz M193cml0ZShjb21wb25lbnQsIERBQzMzX0xEQUNfRElHX1ZPTF9DVFJMLAo+ICsJCSAgICBkYWMz M19yZWFkX3JlZ19jYWNoZShjb21wb25lbnQsIERBQzMzX0xEQUNfRElHX1ZPTF9DVFJMKSk7Cj4g KwlkYWMzM193cml0ZShjb21wb25lbnQsIERBQzMzX1JEQUNfRElHX1ZPTF9DVFJMLAo+ICsJCSAg ICBkYWMzM19yZWFkX3JlZ19jYWNoZShjb21wb25lbnQsIERBQzMzX1JEQUNfRElHX1ZPTF9DVFJM KSk7Cj4gKwo+ICsJZGFjMzNfd3JpdGUoY29tcG9uZW50LCBEQUMzM19MSU5FTF9UT19MTE9fVk9M LAo+ICsJCSAgICBkYWMzM19yZWFkX3JlZ19jYWNoZShjb21wb25lbnQsIERBQzMzX0xJTkVMX1RP X0xMT19WT0wpKTsKPiArCWRhYzMzX3dyaXRlKGNvbXBvbmVudCwgREFDMzNfTElORVJfVE9fUkxP X1ZPTCwKPiArCQkgICAgZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29tcG9uZW50LCBEQUMzM19MSU5F Ul9UT19STE9fVk9MKSk7Cj4gKwo+ICsJZGFjMzNfd3JpdGUoY29tcG9uZW50LCBEQUMzM19PVVRf QU1QX0NUUkwsCj4gKwkJICAgIGRhYzMzX3JlYWRfcmVnX2NhY2hlKGNvbXBvbmVudCwgREFDMzNf T1VUX0FNUF9DVFJMKSk7Cj4gKwo+ICsJZGFjMzNfd3JpdGUoY29tcG9uZW50LCBEQUMzM19MREFD X1BXUl9DVFJMLAo+ICsJCSAgICBkYWMzM19yZWFkX3JlZ19jYWNoZShjb21wb25lbnQsIERBQzMz X0xEQUNfUFdSX0NUUkwpKTsKPiArCWRhYzMzX3dyaXRlKGNvbXBvbmVudCwgREFDMzNfUkRBQ19Q V1JfQ1RSTCwKPiArCQkgICAgZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29tcG9uZW50LCBEQUMzM19S REFDX1BXUl9DVFJMKSk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbmxpbmUgaW50IGRhYzMzX3JlYWRf aWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQo+ICtzdGF0aWMgaW5saW5lIGludCBkYWMz M19yZWFkX2lkKHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50KQo+ICB7Cj4gIAlp bnQgaSwgcmV0ID0gMDsKPiAgCXU4IHJlZzsKPiAgCj4gIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsr KSB7Cj4gLQkJcmV0ID0gZGFjMzNfcmVhZChjb2RlYywgREFDMzNfREVWSUNFX0lEX01TQiArIGks ICZyZWcpOwo+ICsJCXJldCA9IGRhYzMzX3JlYWQoY29tcG9uZW50LCBEQUMzM19ERVZJQ0VfSURf TVNCICsgaSwgJnJlZyk7Cj4gIAkJaWYgKHJldCA8IDApCj4gIAkJCWJyZWFrOwo+ICAJfQo+IEBA IC0zNDYsNDQgKzM0Niw0NCBAQCBzdGF0aWMgaW5saW5lIGludCBkYWMzM19yZWFkX2lkKHN0cnVj dCBzbmRfc29jX2NvZGVjICpjb2RlYykKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gLXN0YXRp YyBpbmxpbmUgdm9pZCBkYWMzM19zb2Z0X3Bvd2VyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2Rl YywgaW50IHBvd2VyKQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZGFjMzNfc29mdF9wb3dlcihzdHJ1 Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCwgaW50IHBvd2VyKQo+ICB7Cj4gIAl1OCBy ZWc7Cj4gIAo+IC0JcmVnID0gZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIERBQzMzX1BXUl9D VFJMKTsKPiArCXJlZyA9IGRhYzMzX3JlYWRfcmVnX2NhY2hlKGNvbXBvbmVudCwgREFDMzNfUFdS X0NUUkwpOwo+ICAJaWYgKHBvd2VyKQo+ICAJCXJlZyB8PSBEQUMzM19QRE5BTExCOwo+ICAJZWxz ZQo+ICAJCXJlZyAmPSB+KERBQzMzX1BETkFMTEIgfCBEQUMzM19PU0NQRE5CIHwKPiAgCQkJIERB QzMzX0RBQ1JQRE5CIHwgREFDMzNfREFDTFBETkIpOwo+IC0JZGFjMzNfd3JpdGUoY29kZWMsIERB QzMzX1BXUl9DVFJMLCByZWcpOwo+ICsJZGFjMzNfd3JpdGUoY29tcG9uZW50LCBEQUMzM19QV1Jf Q1RSTCwgcmVnKTsKPiAgfQo+ICAKPiAtc3RhdGljIGlubGluZSB2b2lkIGRhYzMzX2Rpc2FibGVf ZGlnaXRhbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCj4gK3N0YXRpYyBpbmxpbmUgdm9p ZCBkYWMzM19kaXNhYmxlX2RpZ2l0YWwoc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25l bnQpCj4gIHsKPiAgCXU4IHJlZzsKPiAgCj4gIAkvKiBTdG9wIHRoZSBEQUkgY2xvY2sgKi8KPiAt CXJlZyA9IGRhYzMzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJM X0IpOwo+ICsJcmVnID0gZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29tcG9uZW50LCBEQUMzM19TRVJf QVVESU9JRl9DVFJMX0IpOwo+ICAJcmVnICY9IH5EQUMzM19CQ0xLT047Cj4gLQlkYWMzM193cml0 ZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9CLCByZWcpOwo+ICsJZGFjMzNfd3JpdGUo Y29tcG9uZW50LCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0IsIHJlZyk7Cj4gIAo+ICAJLyogUG93 ZXIgZG93biB0aGUgT3NjaWxsYXRvciwgYW5kIERBQ3MgKi8KPiAtCXJlZyA9IGRhYzMzX3JlYWRf cmVnX2NhY2hlKGNvZGVjLCBEQUMzM19QV1JfQ1RSTCk7Cj4gKwlyZWcgPSBkYWMzM19yZWFkX3Jl Z19jYWNoZShjb21wb25lbnQsIERBQzMzX1BXUl9DVFJMKTsKPiAgCXJlZyAmPSB+KERBQzMzX09T Q1BETkIgfCBEQUMzM19EQUNSUEROQiB8IERBQzMzX0RBQ0xQRE5CKTsKPiAtCWRhYzMzX3dyaXRl KGNvZGVjLCBEQUMzM19QV1JfQ1RSTCwgcmVnKTsKPiArCWRhYzMzX3dyaXRlKGNvbXBvbmVudCwg REFDMzNfUFdSX0NUUkwsIHJlZyk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgZGFjMzNfaGFyZF9w b3dlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBwb3dlcikKPiArc3RhdGljIGlu dCBkYWMzM19oYXJkX3Bvd2VyKHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50LCBp bnQgcG93ZXIpCj4gIHsKPiAtCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IHNuZF9z b2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwo+ICsJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYg KmRhYzMzID0gc25kX3NvY19jb21wb25lbnRfZ2V0X2RydmRhdGEoY29tcG9uZW50KTsKPiAgCWlu dCByZXQgPSAwOwo+ICAKPiAgCW11dGV4X2xvY2soJmRhYzMzLT5tdXRleCk7Cj4gIAo+ICAJLyog U2FmZXR5IGNoZWNrICovCj4gIAlpZiAodW5saWtlbHkocG93ZXIgPT0gZGFjMzMtPmNoaXBfcG93 ZXIpKSB7Cj4gLQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiVHJ5aW5nIHRvIHNldCB0aGUgc2FtZSBw b3dlciBzdGF0ZTogJXNcbiIsCj4gKwkJZGV2X2RiZyhjb21wb25lbnQtPmRldiwgIlRyeWluZyB0 byBzZXQgdGhlIHNhbWUgcG93ZXIgc3RhdGU6ICVzXG4iLAo+ICAJCQlwb3dlciA/ICJPTiIgOiAi T0ZGIik7Cj4gIAkJZ290byBleGl0Owo+ICAJfQo+IEBAIC0zOTIsNyArMzkyLDcgQEAgc3RhdGlj IGludCBkYWMzM19oYXJkX3Bvd2VyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHBv d2VyKQo+ICAJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKGRhYzMzLT5z dXBwbGllcyksCj4gIAkJCQkJICBkYWMzMy0+c3VwcGxpZXMpOwo+ICAJCWlmIChyZXQgIT0gMCkg ewo+IC0JCQlkZXZfZXJyKGNvZGVjLT5kZXYsCj4gKwkJCWRldl9lcnIoY29tcG9uZW50LT5kZXYs Cj4gIAkJCQkiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7Cj4gIAkJCQln b3RvIGV4aXQ7Cj4gIAkJfQo+IEBAIC00MDIsMTQgKzQwMiwxNCBAQCBzdGF0aWMgaW50IGRhYzMz X2hhcmRfcG93ZXIoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgcG93ZXIpCj4gIAo+ ICAJCWRhYzMzLT5jaGlwX3Bvd2VyID0gMTsKPiAgCX0gZWxzZSB7Cj4gLQkJZGFjMzNfc29mdF9w b3dlcihjb2RlYywgMCk7Cj4gKwkJZGFjMzNfc29mdF9wb3dlcihjb21wb25lbnQsIDApOwo+ICAJ CWlmIChkYWMzMy0+cG93ZXJfZ3BpbyA+PSAwKQo+ICAJCQlncGlvX3NldF92YWx1ZShkYWMzMy0+ cG93ZXJfZ3BpbywgMCk7Cj4gIAo+ICAJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJS QVlfU0laRShkYWMzMy0+c3VwcGxpZXMpLAo+ICAJCQkJCSAgICAgZGFjMzMtPnN1cHBsaWVzKTsK PiAgCQlpZiAocmV0ICE9IDApIHsKPiAtCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAo+ICsJCQlkZXZf ZXJyKGNvbXBvbmVudC0+ZGV2LAo+ICAJCQkJIkZhaWxlZCB0byBkaXNhYmxlIHN1cHBsaWVzOiAl ZFxuIiwgcmV0KTsKPiAgCQkJZ290byBleGl0Owo+ICAJCX0KPiBAQCAtNDI1LDE4ICs0MjUsMTgg QEAgc3RhdGljIGludCBkYWMzM19oYXJkX3Bvd2VyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2Rl YywgaW50IHBvd2VyKQo+ICBzdGF0aWMgaW50IGRhYzMzX3BsYXliYWNrX2V2ZW50KHN0cnVjdCBz bmRfc29jX2RhcG1fd2lkZ2V0ICp3LAo+ICAJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9s LCBpbnQgZXZlbnQpCj4gIHsKPiAtCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9z b2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKPiAtCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpk YWMzMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwo+ICsJc3RydWN0IHNuZF9z b2NfY29tcG9uZW50ICpjb21wb25lbnQgPSBzbmRfc29jX2RhcG1fdG9fY29tcG9uZW50KHctPmRh cG0pOwo+ICsJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb21wb25l bnRfZ2V0X2RydmRhdGEoY29tcG9uZW50KTsKPiAgCj4gIAlzd2l0Y2ggKGV2ZW50KSB7Cj4gIAlj YXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgo+ICAJCWlmIChsaWtlbHkoZGFjMzMtPnN1YnN0cmVh bSkpIHsKPiAtCQkJZGFjMzNfY2FsY3VsYXRlX3RpbWVzKGRhYzMzLT5zdWJzdHJlYW0sIGNvZGVj KTsKPiAtCQkJZGFjMzNfcHJlcGFyZV9jaGlwKGRhYzMzLT5zdWJzdHJlYW0sIGNvZGVjKTsKPiAr CQkJZGFjMzNfY2FsY3VsYXRlX3RpbWVzKGRhYzMzLT5zdWJzdHJlYW0sIGNvbXBvbmVudCk7Cj4g KwkJCWRhYzMzX3ByZXBhcmVfY2hpcChkYWMzMy0+c3Vic3RyZWFtLCBjb21wb25lbnQpOwo+ICAJ CX0KPiAgCQlicmVhazsKPiAgCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgo+IC0JCWRhYzMz X2Rpc2FibGVfZGlnaXRhbChjb2RlYyk7Cj4gKwkJZGFjMzNfZGlzYWJsZV9kaWdpdGFsKGNvbXBv bmVudCk7Cj4gIAkJYnJlYWs7Cj4gIAl9Cj4gIAlyZXR1cm4gMDsKPiBAQCAtNDQ1LDggKzQ0NSw4 IEBAIHN0YXRpYyBpbnQgZGFjMzNfcGxheWJhY2tfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93 aWRnZXQgKncsCj4gIHN0YXRpYyBpbnQgZGFjMzNfZ2V0X2ZpZm9fbW9kZShzdHJ1Y3Qgc25kX2tj b250cm9sICprY29udHJvbCwKPiAgCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250 cm9sKQo+ICB7Cj4gLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2tjb250 cm9sX2NvZGVjKGtjb250cm9sKTsKPiAtCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9 IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwo+ICsJc3RydWN0IHNuZF9zb2NfY29t cG9uZW50ICpjb21wb25lbnQgPSBzbmRfc29jX2tjb250cm9sX2NvbXBvbmVudChrY29udHJvbCk7 Cj4gKwlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMgPSBzbmRfc29jX2NvbXBvbmVudF9n ZXRfZHJ2ZGF0YShjb21wb25lbnQpOwo+ICAKPiAgCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVk Lml0ZW1bMF0gPSBkYWMzMy0+Zmlmb19tb2RlOwo+ICAKPiBAQCAtNDU2LDE0ICs0NTYsMTQgQEAg c3RhdGljIGludCBkYWMzM19nZXRfZmlmb19tb2RlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250 cm9sLAo+ICBzdGF0aWMgaW50IGRhYzMzX3NldF9maWZvX21vZGUoc3RydWN0IHNuZF9rY29udHJv bCAqa2NvbnRyb2wsCj4gIAkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkK PiAgewo+IC0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19rY29udHJvbF9j b2RlYyhrY29udHJvbCk7Cj4gLQlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMgPSBzbmRf c29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKPiArCXN0cnVjdCBzbmRfc29jX2NvbXBvbmVu dCAqY29tcG9uZW50ID0gc25kX3NvY19rY29udHJvbF9jb21wb25lbnQoa2NvbnRyb2wpOwo+ICsJ c3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb21wb25lbnRfZ2V0X2Ry dmRhdGEoY29tcG9uZW50KTsKPiAgCWludCByZXQgPSAwOwo+ICAKPiAgCWlmIChkYWMzMy0+Zmlm b19tb2RlID09IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pCj4gIAkJcmV0dXJu IDA7Cj4gIAkvKiBEbyBub3QgYWxsb3cgY2hhbmdlcyB3aGlsZSBzdHJlYW0gaXMgcnVubmluZyov Cj4gLQlpZiAoc25kX3NvY19jb2RlY19pc19hY3RpdmUoY29kZWMpKQo+ICsJaWYgKHNuZF9zb2Nf Y29tcG9uZW50X2lzX2FjdGl2ZShjb21wb25lbnQpKQo+ICAJCXJldHVybiAtRVBFUk07Cj4gIAo+ ICAJaWYgKHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPj0gREFDMzNfRklGT19M QVNUX01PREUpCj4gQEAgLTYyMyw3ICs2MjMsNyBAQCBzdGF0aWMgU09DX0VOVU1fU0lOR0xFX0RF Q0woZGFjMzNfcmlnaHRfbG9tX2VudW0sCj4gIAl7IlJJR0hUX0xPIiwgTlVMTCwgIkNvZGVjIFBv d2VyIn0sCj4gIH07Cj4gIAo+IC1zdGF0aWMgaW50IGRhYzMzX3NldF9iaWFzX2xldmVsKHN0cnVj dCBzbmRfc29jX2NvZGVjICpjb2RlYywKPiArc3RhdGljIGludCBkYWMzM19zZXRfYmlhc19sZXZl bChzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCwKPiAgCQkJCWVudW0gc25kX3Nv Y19iaWFzX2xldmVsIGxldmVsKQo+ICB7Cj4gIAlpbnQgcmV0Owo+IEBAIC02MzQsMjAgKzYzNCwy MCBAQCBzdGF0aWMgaW50IGRhYzMzX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVj ICpjb2RlYywKPiAgCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6Cj4gIAkJYnJlYWs7Cj4gIAlj YXNlIFNORF9TT0NfQklBU19TVEFOREJZOgo+IC0JCWlmIChzbmRfc29jX2NvZGVjX2dldF9iaWFz X2xldmVsKGNvZGVjKSA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7Cj4gLQkJCS8qIENvbWluZyBmcm9t IE9GRiwgc3dpdGNoIG9uIHRoZSBjb2RlYyAqLwo+IC0JCQlyZXQgPSBkYWMzM19oYXJkX3Bvd2Vy KGNvZGVjLCAxKTsKPiArCQlpZiAoc25kX3NvY19jb21wb25lbnRfZ2V0X2JpYXNfbGV2ZWwoY29t cG9uZW50KSA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7Cj4gKwkJCS8qIENvbWluZyBmcm9tIE9GRiwg c3dpdGNoIG9uIHRoZSBjb21wb25lbnQgKi8KPiArCQkJcmV0ID0gZGFjMzNfaGFyZF9wb3dlcihj b21wb25lbnQsIDEpOwo+ICAJCQlpZiAocmV0ICE9IDApCj4gIAkJCQlyZXR1cm4gcmV0Owo+ICAK PiAtCQkJZGFjMzNfaW5pdF9jaGlwKGNvZGVjKTsKPiArCQkJZGFjMzNfaW5pdF9jaGlwKGNvbXBv bmVudCk7Cj4gIAkJfQo+ICAJCWJyZWFrOwo+ICAJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgo+IC0J CS8qIERvIG5vdCBwb3dlciBvZmYsIHdoZW4gdGhlIGNvZGVjIGlzIGFscmVhZHkgb2ZmICovCj4g LQkJaWYgKHNuZF9zb2NfY29kZWNfZ2V0X2JpYXNfbGV2ZWwoY29kZWMpID09IFNORF9TT0NfQklB U19PRkYpCj4gKwkJLyogRG8gbm90IHBvd2VyIG9mZiwgd2hlbiB0aGUgY29tcG9uZW50IGlzIGFs cmVhZHkgb2ZmICovCj4gKwkJaWYgKHNuZF9zb2NfY29tcG9uZW50X2dldF9iaWFzX2xldmVsKGNv bXBvbmVudCkgPT0gU05EX1NPQ19CSUFTX09GRikKPiAgCQkJcmV0dXJuIDA7Cj4gLQkJcmV0ID0g ZGFjMzNfaGFyZF9wb3dlcihjb2RlYywgMCk7Cj4gKwkJcmV0ID0gZGFjMzNfaGFyZF9wb3dlcihj b21wb25lbnQsIDApOwo+ICAJCWlmIChyZXQgIT0gMCkKPiAgCQkJcmV0dXJuIHJldDsKPiAgCQli cmVhazsKPiBAQCAtNjU4LDEzICs2NTgsMTMgQEAgc3RhdGljIGludCBkYWMzM19zZXRfYmlhc19s ZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCj4gIAo+ICBzdGF0aWMgaW5saW5lIHZv aWQgZGFjMzNfcHJlZmlsbF9oYW5kbGVyKHN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMykK PiAgewo+IC0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFjMzMtPmNvZGVjOwo+ICsJ c3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQgPSBkYWMzMy0+Y29tcG9uZW50Owo+ ICAJdW5zaWduZWQgaW50IGRlbGF5Owo+ICAJdW5zaWduZWQgbG9uZyBmbGFnczsKPiAgCj4gIAlz d2l0Y2ggKGRhYzMzLT5maWZvX21vZGUpIHsKPiAgCWNhc2UgREFDMzNfRklGT19NT0RFMToKPiAt CQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19OU0FNUExFX01TQiwKPiArCQlkYWMzM193cml0 ZTE2KGNvbXBvbmVudCwgREFDMzNfTlNBTVBMRV9NU0IsCj4gIAkJCURBQzMzX1RIUlJFRyhkYWMz My0+bnNhbXBsZSkpOwo+ICAKPiAgCQkvKiBUYWtlIHRoZSB0aW1lc3RhbXBzICovCj4gQEAgLTY3 MywxMyArNjczLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkYWMzM19wcmVmaWxsX2hhbmRsZXIo c3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzKQo+ICAJCWRhYzMzLT50X3N0YW1wMSA9IGRh YzMzLT50X3N0YW1wMjsKPiAgCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYWMzMy0+bG9jaywg ZmxhZ3MpOwo+ICAKPiAtCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19QUkVGSUxMX01TQiwK PiArCQlkYWMzM193cml0ZTE2KGNvbXBvbmVudCwgREFDMzNfUFJFRklMTF9NU0IsCj4gIAkJCQlE QUMzM19USFJSRUcoZGFjMzMtPmFsYXJtX3RocmVzaG9sZCkpOwo+ICAJCS8qIEVuYWJsZSBBbGFy bSBUaHJlc2hvbGQgSVJRIHdpdGggYSBkZWxheSAqLwo+ICAJCWRlbGF5ID0gU0FNUExFU19UT19V UyhkYWMzMy0+YnVyc3RfcmF0ZSwKPiAgCQkJCSAgICAgZGFjMzMtPmFsYXJtX3RocmVzaG9sZCkg KyAxMDAwOwo+ICAJCXVzbGVlcF9yYW5nZShkZWxheSwgZGVsYXkgKyA1MDApOwo+IC0JCWRhYzMz X3dyaXRlKGNvZGVjLCBEQUMzM19GSUZPX0lSUV9NQVNLLCBEQUMzM19NQVQpOwo+ICsJCWRhYzMz X3dyaXRlKGNvbXBvbmVudCwgREFDMzNfRklGT19JUlFfTUFTSywgREFDMzNfTUFUKTsKPiAgCQli cmVhazsKPiAgCWNhc2UgREFDMzNfRklGT19NT0RFNzoKPiAgCQkvKiBUYWtlIHRoZSB0aW1lc3Rh bXAgKi8KPiBAQCAtNjg5LDE0ICs2ODksMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGRhYzMzX3By ZWZpbGxfaGFuZGxlcihzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMpCj4gIAkJZGFjMzMt PnRfc3RhbXAxIC09IGRhYzMzLT5tb2RlN191c190b19sdGhyOwo+ICAJCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmRhYzMzLT5sb2NrLCBmbGFncyk7Cj4gIAo+IC0JCWRhYzMzX3dyaXRlMTYoY29k ZWMsIERBQzMzX1BSRUZJTExfTVNCLAo+ICsJCWRhYzMzX3dyaXRlMTYoY29tcG9uZW50LCBEQUMz M19QUkVGSUxMX01TQiwKPiAgCQkJCURBQzMzX1RIUlJFRyhEQUMzM19NT0RFN19NQVJHSU4pKTsK PiAgCj4gIAkJLyogRW5hYmxlIFVwcGVyIFRocmVzaG9sZCBJUlEgKi8KPiAtCQlkYWMzM193cml0 ZShjb2RlYywgREFDMzNfRklGT19JUlFfTUFTSywgREFDMzNfTVVUKTsKPiArCQlkYWMzM193cml0 ZShjb21wb25lbnQsIERBQzMzX0ZJRk9fSVJRX01BU0ssIERBQzMzX01VVCk7Cj4gIAkJYnJlYWs7 Cj4gIAlkZWZhdWx0Ogo+IC0JCWRldl93YXJuKGNvZGVjLT5kZXYsICJVbmhhbmRsZWQgRklGTyBt b2RlOiAlZFxuIiwKPiArCQlkZXZfd2Fybihjb21wb25lbnQtPmRldiwgIlVuaGFuZGxlZCBGSUZP IG1vZGU6ICVkXG4iLAo+ICAJCQkJCQkJZGFjMzMtPmZpZm9fbW9kZSk7Cj4gIAkJYnJlYWs7Cj4g IAl9Cj4gQEAgLTcwNCw3ICs3MDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZGFjMzNfcHJlZmls bF9oYW5kbGVyKHN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMykKPiAgCj4gIHN0YXRpYyBp bmxpbmUgdm9pZCBkYWMzM19wbGF5YmFja19oYW5kbGVyKHN0cnVjdCB0bHYzMjBkYWMzM19wcml2 ICpkYWMzMykKPiAgewo+IC0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFjMzMtPmNv ZGVjOwo+ICsJc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQgPSBkYWMzMy0+Y29t cG9uZW50Owo+ICAJdW5zaWduZWQgbG9uZyBmbGFnczsKPiAgCj4gIAlzd2l0Y2ggKGRhYzMzLT5m aWZvX21vZGUpIHsKPiBAQCAtNzE0LDE0ICs3MTQsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGRh YzMzX3BsYXliYWNrX2hhbmRsZXIoc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzKQo+ICAJ CWRhYzMzLT50X3N0YW1wMiA9IGt0aW1lX3RvX3VzKGt0aW1lX2dldCgpKTsKPiAgCQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZkYWMzMy0+bG9jaywgZmxhZ3MpOwo+ICAKPiAtCQlkYWMzM193cml0 ZTE2KGNvZGVjLCBEQUMzM19OU0FNUExFX01TQiwKPiArCQlkYWMzM193cml0ZTE2KGNvbXBvbmVu dCwgREFDMzNfTlNBTVBMRV9NU0IsCj4gIAkJCQlEQUMzM19USFJSRUcoZGFjMzMtPm5zYW1wbGUp KTsKPiAgCQlicmVhazsKPiAgCWNhc2UgREFDMzNfRklGT19NT0RFNzoKPiAgCQkvKiBBdCB0aGUg bW9tZW50IHdlIGFyZSBub3QgdXNpbmcgaW50ZXJydXB0cyBpbiBtb2RlNyAqLwo+ICAJCWJyZWFr Owo+ICAJZGVmYXVsdDoKPiAtCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiVW5oYW5kbGVkIEZJRk8g bW9kZTogJWRcbiIsCj4gKwkJZGV2X3dhcm4oY29tcG9uZW50LT5kZXYsICJVbmhhbmRsZWQgRklG TyBtb2RlOiAlZFxuIiwKPiAgCQkJCQkJCWRhYzMzLT5maWZvX21vZGUpOwo+ICAJCWJyZWFrOwo+ ICAJfQo+IEBAIC03MjksMTIgKzcyOSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZGFjMzNfcGxh eWJhY2tfaGFuZGxlcihzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMpCj4gIAo+ICBzdGF0 aWMgdm9pZCBkYWMzM193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgewo+IC0Jc3Ry dWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwo+ICsJc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpj b21wb25lbnQ7Cj4gIAlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzM7Cj4gIAl1OCByZWc7 Cj4gIAo+ICAJZGFjMzMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHRsdjMyMGRhYzMzX3By aXYsIHdvcmspOwo+IC0JY29kZWMgPSBkYWMzMy0+Y29kZWM7Cj4gKwljb21wb25lbnQgPSBkYWMz My0+Y29tcG9uZW50Owo+ICAKPiAgCW11dGV4X2xvY2soJmRhYzMzLT5tdXRleCk7Cj4gIAlzd2l0 Y2ggKGRhYzMzLT5zdGF0ZSkgewo+IEBAIC03NTAsMTIgKzc1MCwxMiBAQCBzdGF0aWMgdm9pZCBk YWMzM193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgCWNhc2UgREFDMzNfRkxVU0g6 Cj4gIAkJZGFjMzMtPnN0YXRlID0gREFDMzNfSURMRTsKPiAgCQkvKiBNYXNrIGFsbCBpbnRlcnJ1 cHRzIGZyb20gZGFjMzMgKi8KPiAtCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfRklGT19JUlFf TUFTSywgMCk7Cj4gKwkJZGFjMzNfd3JpdGUoY29tcG9uZW50LCBEQUMzM19GSUZPX0lSUV9NQVNL LCAwKTsKPiAgCj4gIAkJLyogZmx1c2ggZmlmbyAqLwo+IC0JCXJlZyA9IGRhYzMzX3JlYWRfcmVn X2NhY2hlKGNvZGVjLCBEQUMzM19GSUZPX0NUUkxfQSk7Cj4gKwkJcmVnID0gZGFjMzNfcmVhZF9y ZWdfY2FjaGUoY29tcG9uZW50LCBEQUMzM19GSUZPX0NUUkxfQSk7Cj4gIAkJcmVnIHw9IERBQzMz X0ZJRk9GTFVTSDsKPiAtCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfRklGT19DVFJMX0EsIHJl Zyk7Cj4gKwkJZGFjMzNfd3JpdGUoY29tcG9uZW50LCBEQUMzM19GSUZPX0NUUkxfQSwgcmVnKTsK PiAgCQlicmVhazsKPiAgCX0KPiAgCW11dGV4X3VubG9jaygmZGFjMzMtPm11dGV4KTsKPiBAQCAt NzYzLDggKzc2Myw4IEBAIHN0YXRpYyB2b2lkIGRhYzMzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQo+ICAKPiAgc3RhdGljIGlycXJldHVybl90IGRhYzMzX2ludGVycnVwdF9oYW5kbGVy KGludCBpcnEsIHZvaWQgKmRldikKPiAgewo+IC0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVj ID0gZGV2Owo+IC0Jc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb2Rl Y19nZXRfZHJ2ZGF0YShjb2RlYyk7Cj4gKwlzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBv bmVudCA9IGRldjsKPiArCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2Nf Y29tcG9uZW50X2dldF9kcnZkYXRhKGNvbXBvbmVudCk7Cj4gIAl1bnNpZ25lZCBsb25nIGZsYWdz Owo+ICAKPiAgCXNwaW5fbG9ja19pcnFzYXZlKCZkYWMzMy0+bG9jaywgZmxhZ3MpOwo+IEBAIC03 NzgsMjUgKzc3OCwyNSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgZGFjMzNfaW50ZXJydXB0X2hhbmRs ZXIoaW50IGlycSwgdm9pZCAqZGV2KQo+ICAJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICB9Cj4gIAo+ IC1zdGF0aWMgdm9pZCBkYWMzM19vc2N3YWl0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykK PiArc3RhdGljIHZvaWQgZGFjMzNfb3Njd2FpdChzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNv bXBvbmVudCkKPiAgewo+ICAJaW50IHRpbWVvdXQgPSA2MDsKPiAgCXU4IHJlZzsKPiAgCj4gIAlk byB7Cj4gIAkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwo+IC0JCWRhYzMzX3JlYWQoY29kZWMs IERBQzMzX0lOVF9PU0NfU1RBVFVTLCAmcmVnKTsKPiArCQlkYWMzM19yZWFkKGNvbXBvbmVudCwg REFDMzNfSU5UX09TQ19TVEFUVVMsICZyZWcpOwo+ICAJfSB3aGlsZSAoKChyZWcgJiAweDAzKSAh PSBEQUMzM19PU0NTVEFUVVNfTk9STUFMKSAmJiB0aW1lb3V0LS0pOwo+ICAJaWYgKChyZWcgJiAw eDAzKSAhPSBEQUMzM19PU0NTVEFUVVNfTk9STUFMKQo+IC0JCWRldl9lcnIoY29kZWMtPmRldiwK PiArCQlkZXZfZXJyKGNvbXBvbmVudC0+ZGV2LAo+ICAJCQkiaW50ZXJuYWwgb3NjaWxsYXRvciBj YWxpYnJhdGlvbiBmYWlsZWRcbiIpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IGRhYzMzX3N0YXJ0 dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCj4gIAkJCSAgIHN0cnVjdCBz bmRfc29jX2RhaSAqZGFpKQo+ICB7Cj4gLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBk YWktPmNvZGVjOwo+IC0Jc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19j b2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Cj4gKwlzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNv bXBvbmVudCA9IGRhaS0+Y29tcG9uZW50Owo+ICsJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRh YzMzID0gc25kX3NvY19jb21wb25lbnRfZ2V0X2RydmRhdGEoY29tcG9uZW50KTsKPiAgCj4gIAkv KiBTdHJlYW0gc3RhcnRlZCwgc2F2ZSB0aGUgc3Vic3RyZWFtIHBvaW50ZXIgKi8KPiAgCWRhYzMz LT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07Cj4gQEAgLTgwNyw4ICs4MDcsOCBAQCBzdGF0aWMgaW50 IGRhYzMzX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCj4gIHN0 YXRpYyB2b2lkIGRhYzMzX3NodXRkb3duKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3Ry ZWFtLAo+ICAJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQo+ICB7Cj4gLQlzdHJ1Y3Qg c25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwo+IC0Jc3RydWN0IHRsdjMyMGRhYzMz X3ByaXYgKmRhYzMzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Cj4gKwlzdHJ1 Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCA9IGRhaS0+Y29tcG9uZW50Owo+ICsJc3Ry dWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb21wb25lbnRfZ2V0X2RydmRh dGEoY29tcG9uZW50KTsKPiAgCj4gIAlkYWMzMy0+c3Vic3RyZWFtID0gTlVMTDsKPiAgfQo+IEBA IC04MTksOCArODE5LDggQEAgc3RhdGljIGludCBkYWMzM19od19wYXJhbXMoc3RydWN0IHNuZF9w Y21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCj4gIAkJCSAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFt cyAqcGFyYW1zLAo+ICAJCQkgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKPiAgewo+IC0Jc3Ry dWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKPiAtCXN0cnVjdCB0bHYzMjBk YWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwo+ICsJ c3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQgPSBkYWktPmNvbXBvbmVudDsKPiAr CXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2NfY29tcG9uZW50X2dldF9k cnZkYXRhKGNvbXBvbmVudCk7Cj4gIAo+ICAJLyogQ2hlY2sgcGFyYW1ldGVycyBmb3IgdmFsaWRp dHkgKi8KPiAgCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgewo+IEBAIC04MjgsNyArODI4 LDcgQEAgc3RhdGljIGludCBkYWMzM19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFt ICpzdWJzdHJlYW0sCj4gIAljYXNlIDQ4MDAwOgo+ICAJCWJyZWFrOwo+ICAJZGVmYXVsdDoKPiAt CQlkZXZfZXJyKGNvZGVjLT5kZXYsICJ1bnN1cHBvcnRlZCByYXRlICVkXG4iLAo+ICsJCWRldl9l cnIoY29tcG9uZW50LT5kZXYsICJ1bnN1cHBvcnRlZCByYXRlICVkXG4iLAo+ICAJCQlwYXJhbXNf cmF0ZShwYXJhbXMpKTsKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCX0KPiBAQCAtODQzLDcgKzg0 Myw3IEBAIHN0YXRpYyBpbnQgZGFjMzNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVh bSAqc3Vic3RyZWFtLAo+ICAJCWRhYzMzLT5idXJzdF9yYXRlID0gQ0FMQ19CVVJTVF9SQVRFKGRh YzMzLT5idXJzdF9iY2xrZGl2LCA2NCk7Cj4gIAkJYnJlYWs7Cj4gIAlkZWZhdWx0Ogo+IC0JCWRl dl9lcnIoY29kZWMtPmRldiwgInVuc3VwcG9ydGVkIHdpZHRoICVkXG4iLAo+ICsJCWRldl9lcnIo Y29tcG9uZW50LT5kZXYsICJ1bnN1cHBvcnRlZCB3aWR0aCAlZFxuIiwKPiAgCQkJcGFyYW1zX3dp ZHRoKHBhcmFtcykpOwo+ICAJCXJldHVybiAtRUlOVkFMOwo+ICAJfQo+IEBAIC04NjIsOSArODYy LDkgQEAgc3RhdGljIGludCBkYWMzM19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFt ICpzdWJzdHJlYW0sCj4gICAqIFVzZSB0aGUga25vd24sIHdvcmtpbmcgc2VxdWVuY2Ugb2YgcmVn aXN0ZXIgd3JpdGVzIHRvIGluaXRpYWxpemUgdGhlIGRhYzMzLgo+ICAgKi8KPiAgc3RhdGljIGlu dCBkYWMzM19wcmVwYXJlX2NoaXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0s Cj4gLQkJCSAgICAgIHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKPiArCQkJICAgICAgc3Ry dWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQpCj4gIHsKPiAtCXN0cnVjdCB0bHYzMjBk YWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwo+ICsJ c3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb21wb25lbnRfZ2V0X2Ry dmRhdGEoY29tcG9uZW50KTsKPiAgCXVuc2lnbmVkIGludCBvc2NzZXQsIHJhdGlvc2V0LCBwd3Jf Y3RybCwgcmVnX3RtcDsKPiAgCXU4IGFpY3RybF9hLCBhaWN0cmxfYiwgZmlmb2N0cmxfYTsKPiAg Cj4gQEAgLTg3NiwxNiArODc2LDE2IEBAIHN0YXRpYyBpbnQgZGFjMzNfcHJlcGFyZV9jaGlwKHN0 cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAo+ICAJCQkJCSBkYWMzMy0+cmVmY2xr KTsKPiAgCQlicmVhazsKPiAgCWRlZmF1bHQ6Cj4gLQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAidW5z dXBwb3J0ZWQgcmF0ZSAlZFxuIiwKPiArCQlkZXZfZXJyKGNvbXBvbmVudC0+ZGV2LCAidW5zdXBw b3J0ZWQgcmF0ZSAlZFxuIiwKPiAgCQkJc3Vic3RyZWFtLT5ydW50aW1lLT5yYXRlKTsKPiAgCQly ZXR1cm4gLUVJTlZBTDsKPiAgCX0KPiAgCj4gIAo+IC0JYWljdHJsX2EgPSBkYWMzM19yZWFkX3Jl Z19jYWNoZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9BKTsKPiArCWFpY3RybF9hID0g ZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29tcG9uZW50LCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0Ep Owo+ICAJYWljdHJsX2EgJj0gfihEQUMzM19OQ1lDTF9NQVNLIHwgREFDMzNfV0xFTl9NQVNLKTsK PiAgCS8qIFJlYWQgRklGTyBjb250cm9sIEEsIGFuZCBjbGVhciBGSUZPIGZsdXNoIGJpdCAqLwo+ IC0JZmlmb2N0cmxfYSA9IGRhYzMzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBEQUMzM19GSUZPX0NU UkxfQSk7Cj4gKwlmaWZvY3RybF9hID0gZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29tcG9uZW50LCBE QUMzM19GSUZPX0NUUkxfQSk7Cj4gIAlmaWZvY3RybF9hICY9IH5EQUMzM19GSUZPRkxVU0g7Cj4g IAo+ICAJZmlmb2N0cmxfYSAmPSB+REFDMzNfV0lEVEg7Cj4gQEAgLTg5OCw3ICs4OTgsNyBAQCBz dGF0aWMgaW50IGRhYzMzX3ByZXBhcmVfY2hpcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1 YnN0cmVhbSwKPiAgCQlhaWN0cmxfYSB8PSAoREFDMzNfTkNZQ0xfMzIgfCBEQUMzM19XTEVOXzI0 KTsKPiAgCQlicmVhazsKPiAgCWRlZmF1bHQ6Cj4gLQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAidW5z dXBwb3J0ZWQgZm9ybWF0ICVkXG4iLAo+ICsJCWRldl9lcnIoY29tcG9uZW50LT5kZXYsICJ1bnN1 cHBvcnRlZCBmb3JtYXQgJWRcbiIsCj4gIAkJCXN1YnN0cmVhbS0+cnVudGltZS0+Zm9ybWF0KTsK PiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCX0KPiBAQCAtOTE0LDU3ICs5MTQsNTcgQEAgc3RhdGlj IGludCBkYWMzM19wcmVwYXJlX2NoaXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJl YW0sCj4gIAkJcmV0dXJuIDA7Cj4gIAl9Cj4gIAo+IC0JZGFjMzNfc29mdF9wb3dlcihjb2RlYywg MCk7Cj4gLQlkYWMzM19zb2Z0X3Bvd2VyKGNvZGVjLCAxKTsKPiArCWRhYzMzX3NvZnRfcG93ZXIo Y29tcG9uZW50LCAwKTsKPiArCWRhYzMzX3NvZnRfcG93ZXIoY29tcG9uZW50LCAxKTsKPiAgCj4g LQlyZWdfdG1wID0gZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIERBQzMzX0lOVF9PU0NfQ1RS TCk7Cj4gLQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfSU5UX09TQ19DVFJMLCByZWdfdG1wKTsK PiArCXJlZ190bXAgPSBkYWMzM19yZWFkX3JlZ19jYWNoZShjb21wb25lbnQsIERBQzMzX0lOVF9P U0NfQ1RSTCk7Cj4gKwlkYWMzM193cml0ZShjb21wb25lbnQsIERBQzMzX0lOVF9PU0NfQ1RSTCwg cmVnX3RtcCk7Cj4gIAo+ICAJLyogV3JpdGUgcmVnaXN0ZXJzIDB4MDggYW5kIDB4MDkgKE1TQiwg TFNCKSAqLwo+IC0JZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfSU5UX09TQ19GUkVRX1JBVF9B LCBvc2NzZXQpOwo+ICsJZGFjMzNfd3JpdGUxNihjb21wb25lbnQsIERBQzMzX0lOVF9PU0NfRlJF UV9SQVRfQSwgb3Njc2V0KTsKPiAgCj4gIAkvKiBPU0MgY2FsaWJyYXRpb24gdGltZSAqLwo+IC0J ZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0NBTElCX1RJTUUsIDk2KTsKPiArCWRhYzMzX3dyaXRl KGNvbXBvbmVudCwgREFDMzNfQ0FMSUJfVElNRSwgOTYpOwo+ICAKPiAgCS8qIGFkanVzdG1lbnQg dHJlc2hvbGQgJiBzdGVwICovCj4gLQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfSU5UX09TQ19D VFJMX0IsIERBQzMzX0FESlRIUlNITEQoMikgfAo+ICsJZGFjMzNfd3JpdGUoY29tcG9uZW50LCBE QUMzM19JTlRfT1NDX0NUUkxfQiwgREFDMzNfQURKVEhSU0hMRCgyKSB8Cj4gIAkJCQkJCSBEQUMz M19BREpTVEVQKDEpKTsKPiAgCj4gIAkvKiBkaXY9NCAvIGdhaW49MSAvIGRpdiAqLwo+IC0JZGFj MzNfd3JpdGUoY29kZWMsIERBQzMzX0lOVF9PU0NfQ1RSTF9DLCBEQUMzM19SRUZESVYoNCkpOwo+ ICsJZGFjMzNfd3JpdGUoY29tcG9uZW50LCBEQUMzM19JTlRfT1NDX0NUUkxfQywgREFDMzNfUkVG RElWKDQpKTsKPiAgCj4gLQlwd3JfY3RybCA9IGRhYzMzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBE QUMzM19QV1JfQ1RSTCk7Cj4gKwlwd3JfY3RybCA9IGRhYzMzX3JlYWRfcmVnX2NhY2hlKGNvbXBv bmVudCwgREFDMzNfUFdSX0NUUkwpOwo+ICAJcHdyX2N0cmwgfD0gREFDMzNfT1NDUEROQiB8IERB QzMzX0RBQ1JQRE5CIHwgREFDMzNfREFDTFBETkI7Cj4gLQlkYWMzM193cml0ZShjb2RlYywgREFD MzNfUFdSX0NUUkwsIHB3cl9jdHJsKTsKPiArCWRhYzMzX3dyaXRlKGNvbXBvbmVudCwgREFDMzNf UFdSX0NUUkwsIHB3cl9jdHJsKTsKPiAgCj4gLQlkYWMzM19vc2N3YWl0KGNvZGVjKTsKPiArCWRh YzMzX29zY3dhaXQoY29tcG9uZW50KTsKPiAgCj4gIAlpZiAoZGFjMzMtPmZpZm9fbW9kZSkgewo+ ICAJCS8qIEdlbmVyaWMgZm9yIGFsbCBGSUZPIG1vZGVzICovCj4gIAkJLyogNTAtNTEgOiBBU1JD IENvbnRyb2wgcmVnaXN0ZXJzICovCj4gLQkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0FTUkNf Q1RSTF9BLCBEQUMzM19TUkNMS0RJVigxKSk7Cj4gLQkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMz X0FTUkNfQ1RSTF9CLCAxKTsgLyogPz8/ICovCj4gKwkJZGFjMzNfd3JpdGUoY29tcG9uZW50LCBE QUMzM19BU1JDX0NUUkxfQSwgREFDMzNfU1JDTEtESVYoMSkpOwo+ICsJCWRhYzMzX3dyaXRlKGNv bXBvbmVudCwgREFDMzNfQVNSQ19DVFJMX0IsIDEpOyAvKiA/Pz8gKi8KPiAgCj4gIAkJLyogV3Jp dGUgcmVnaXN0ZXJzIDB4MzQgYW5kIDB4MzUgKE1TQiwgTFNCKSAqLwo+IC0JCWRhYzMzX3dyaXRl MTYoY29kZWMsIERBQzMzX1NSQ19SRUZfQ0xLX1JBVElPX0EsIHJhdGlvc2V0KTsKPiArCQlkYWMz M193cml0ZTE2KGNvbXBvbmVudCwgREFDMzNfU1JDX1JFRl9DTEtfUkFUSU9fQSwgcmF0aW9zZXQp Owo+ICAKPiAgCQkvKiBTZXQgaW50ZXJydXB0cyB0byBoaWdoIGFjdGl2ZSAqLwo+IC0JCWRhYzMz X3dyaXRlKGNvZGVjLCBEQUMzM19JTlRQX0NUUkxfQSwgREFDMzNfSU5UUE1fQUhJR0gpOwo+ICsJ CWRhYzMzX3dyaXRlKGNvbXBvbmVudCwgREFDMzNfSU5UUF9DVFJMX0EsIERBQzMzX0lOVFBNX0FI SUdIKTsKPiAgCX0gZWxzZSB7Cj4gIAkJLyogRklGTyBieXBhc3MgbW9kZSAqLwo+ICAJCS8qIDUw LTUxIDogQVNSQyBDb250cm9sIHJlZ2lzdGVycyAqLwo+IC0JCWRhYzMzX3dyaXRlKGNvZGVjLCBE QUMzM19BU1JDX0NUUkxfQSwgREFDMzNfU1JDQllQKTsKPiAtCQlkYWMzM193cml0ZShjb2RlYywg REFDMzNfQVNSQ19DVFJMX0IsIDApOyAvKiA/Pz8gKi8KPiArCQlkYWMzM193cml0ZShjb21wb25l bnQsIERBQzMzX0FTUkNfQ1RSTF9BLCBEQUMzM19TUkNCWVApOwo+ICsJCWRhYzMzX3dyaXRlKGNv bXBvbmVudCwgREFDMzNfQVNSQ19DVFJMX0IsIDApOyAvKiA/Pz8gKi8KPiAgCX0KPiAgCj4gIAkv KiBJbnRlcnJ1cHQgYmVoYXZpb3VyIGNvbmZpZ3VyYXRpb24gKi8KPiAgCXN3aXRjaCAoZGFjMzMt PmZpZm9fbW9kZSkgewo+ICAJY2FzZSBEQUMzM19GSUZPX01PREUxOgo+IC0JCWRhYzMzX3dyaXRl KGNvZGVjLCBEQUMzM19GSUZPX0lSUV9NT0RFX0IsCj4gKwkJZGFjMzNfd3JpdGUoY29tcG9uZW50 LCBEQUMzM19GSUZPX0lSUV9NT0RFX0IsCj4gIAkJCSAgICBEQUMzM19BVE0oREFDMzNfRklGT19J UlFfTU9ERV9MRVZFTCkpOwo+ICAJCWJyZWFrOwo+ICAJY2FzZSBEQUMzM19GSUZPX01PREU3Ogo+ IC0JCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19GSUZPX0lSUV9NT0RFX0EsCj4gKwkJZGFjMzNf d3JpdGUoY29tcG9uZW50LCBEQUMzM19GSUZPX0lSUV9NT0RFX0EsCj4gIAkJCURBQzMzX1VUTShE QUMzM19GSUZPX0lSUV9NT0RFX0xFVkVMKSk7Cj4gIAkJYnJlYWs7Cj4gIAlkZWZhdWx0Ogo+IEBA IC05NzIsNyArOTcyLDcgQEAgc3RhdGljIGludCBkYWMzM19wcmVwYXJlX2NoaXAoc3RydWN0IHNu ZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCj4gIAkJYnJlYWs7Cj4gIAl9Cj4gIAo+IC0JYWlj dHJsX2IgPSBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RS TF9CKTsKPiArCWFpY3RybF9iID0gZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29tcG9uZW50LCBEQUMz M19TRVJfQVVESU9JRl9DVFJMX0IpOwo+ICAKPiAgCXN3aXRjaCAoZGFjMzMtPmZpZm9fbW9kZSkg ewo+ICAJY2FzZSBEQUMzM19GSUZPX01PREUxOgo+IEBAIC0xMDE0LDkgKzEwMTQsOSBAQCBzdGF0 aWMgaW50IGRhYzMzX3ByZXBhcmVfY2hpcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0 cmVhbSwKPiAgCQlicmVhazsKPiAgCX0KPiAgCj4gLQlkYWMzM193cml0ZShjb2RlYywgREFDMzNf RklGT19DVFJMX0EsIGZpZm9jdHJsX2EpOwo+IC0JZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX1NF Ul9BVURJT0lGX0NUUkxfQSwgYWljdHJsX2EpOwo+IC0JZGFjMzNfd3JpdGUoY29kZWMsIERBQzMz X1NFUl9BVURJT0lGX0NUUkxfQiwgYWljdHJsX2IpOwo+ICsJZGFjMzNfd3JpdGUoY29tcG9uZW50 LCBEQUMzM19GSUZPX0NUUkxfQSwgZmlmb2N0cmxfYSk7Cj4gKwlkYWMzM193cml0ZShjb21wb25l bnQsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQSwgYWljdHJsX2EpOwo+ICsJZGFjMzNfd3JpdGUo Y29tcG9uZW50LCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0IsIGFpY3RybF9iKTsKPiAgCj4gIAkv Kgo+ICAJICogQkNMSyBkaXZpZGUgcmF0aW8KPiBAQCAtMTAyOCwxNyArMTAyOCwxNyBAQCBzdGF0 aWMgaW50IGRhYzMzX3ByZXBhcmVfY2hpcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0 cmVhbSwKPiAgCSAqIDI1NTogMjU1Cj4gIAkgKi8KPiAgCWlmIChkYWMzMy0+Zmlmb19tb2RlKQo+ IC0JCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0MsCj4gKwkJZGFj MzNfd3JpdGUoY29tcG9uZW50LCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0MsCj4gIAkJCQkJCQlk YWMzMy0+YnVyc3RfYmNsa2Rpdik7Cj4gIAllbHNlCj4gIAkJaWYgKHN1YnN0cmVhbS0+cnVudGlt ZS0+Zm9ybWF0ID09IFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFKQo+IC0JCQlkYWMzM193cml0ZShj b2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9DLCAzMik7Cj4gKwkJCWRhYzMzX3dyaXRlKGNv bXBvbmVudCwgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9DLCAzMik7Cj4gIAkJZWxzZQo+IC0JCQlk YWMzM193cml0ZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9DLCAxNik7Cj4gKwkJCWRh YzMzX3dyaXRlKGNvbXBvbmVudCwgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9DLCAxNik7Cj4gIAo+ ICAJc3dpdGNoIChkYWMzMy0+Zmlmb19tb2RlKSB7Cj4gIAljYXNlIERBQzMzX0ZJRk9fTU9ERTE6 Cj4gLQkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfQVRIUl9NU0IsCj4gKwkJZGFjMzNfd3Jp dGUxNihjb21wb25lbnQsIERBQzMzX0FUSFJfTVNCLAo+ICAJCQkgICAgICBEQUMzM19USFJSRUco ZGFjMzMtPmFsYXJtX3RocmVzaG9sZCkpOwo+ICAJCWJyZWFrOwo+ICAJY2FzZSBEQUMzM19GSUZP X01PREU3Ogo+IEBAIC0xMDQ2LDggKzEwNDYsOCBAQCBzdGF0aWMgaW50IGRhYzMzX3ByZXBhcmVf Y2hpcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKPiAgCQkgKiBDb25maWd1 cmUgdGhlIHRocmVzaG9sZCBsZXZlbHMsIGFuZCBsZWF2ZSAxMCBzYW1wbGUgc3BhY2UKPiAgCQkg KiBhdCB0aGUgYm90dG9tLCBhbmQgYWxzbyBhdCB0aGUgdG9wIG9mIHRoZSBGSUZPCj4gIAkJICov Cj4gLQkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfVVRIUl9NU0IsIERBQzMzX1RIUlJFRyhk YWMzMy0+dXRocikpOwo+IC0JCWRhYzMzX3dyaXRlMTYoY29kZWMsIERBQzMzX0xUSFJfTVNCLAo+ ICsJCWRhYzMzX3dyaXRlMTYoY29tcG9uZW50LCBEQUMzM19VVEhSX01TQiwgREFDMzNfVEhSUkVH KGRhYzMzLT51dGhyKSk7Cj4gKwkJZGFjMzNfd3JpdGUxNihjb21wb25lbnQsIERBQzMzX0xUSFJf TVNCLAo+ICAJCQkgICAgICBEQUMzM19USFJSRUcoREFDMzNfTU9ERTdfTUFSR0lOKSk7Cj4gIAkJ YnJlYWs7Cj4gIAlkZWZhdWx0Ogo+IEBAIC0xMDYwLDkgKzEwNjAsOSBAQCBzdGF0aWMgaW50IGRh YzMzX3ByZXBhcmVfY2hpcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKPiAg fQo+ICAKPiAgc3RhdGljIHZvaWQgZGFjMzNfY2FsY3VsYXRlX3RpbWVzKHN0cnVjdCBzbmRfcGNt X3N1YnN0cmVhbSAqc3Vic3RyZWFtLAo+IC0JCQkJICBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29k ZWMpCj4gKwkJCQkgIHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50KQo+ICB7Cj4g LQlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZk YXRhKGNvZGVjKTsKPiArCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2Nf Y29tcG9uZW50X2dldF9kcnZkYXRhKGNvbXBvbmVudCk7Cj4gIAl1bnNpZ25lZCBpbnQgcGVyaW9k X3NpemUgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnBlcmlvZF9zaXplOwo+ICAJdW5zaWduZWQgaW50 IHJhdGUgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnJhdGU7Cj4gIAl1bnNpZ25lZCBpbnQgbnNhbXBs ZV9saW1pdDsKPiBAQCAtMTExOSw4ICsxMTE5LDggQEAgc3RhdGljIHZvaWQgZGFjMzNfY2FsY3Vs YXRlX3RpbWVzKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAo+ICBzdGF0aWMg aW50IGRhYzMzX3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFt LCBpbnQgY21kLAo+ICAJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQo+ICB7Cj4gLQlz dHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwo+IC0Jc3RydWN0IHRsdjMy MGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Cj4g KwlzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCA9IGRhaS0+Y29tcG9uZW50Owo+ ICsJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb21wb25lbnRfZ2V0 X2RydmRhdGEoY29tcG9uZW50KTsKPiAgCWludCByZXQgPSAwOwo+ICAKPiAgCXN3aXRjaCAoY21k KSB7Cj4gQEAgLTExNTEsOCArMTE1MSw4IEBAIHN0YXRpYyBzbmRfcGNtX3NmcmFtZXNfdCBkYWMz M19kYWlfZGVsYXkoCj4gIAkJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAo+ ICAJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKPiAgewo+IC0Jc3RydWN0IHNuZF9zb2NfY29k ZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKPiAtCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMz MyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwo+ICsJc3RydWN0IHNuZF9zb2Nf Y29tcG9uZW50ICpjb21wb25lbnQgPSBkYWktPmNvbXBvbmVudDsKPiArCXN0cnVjdCB0bHYzMjBk YWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2NfY29tcG9uZW50X2dldF9kcnZkYXRhKGNvbXBvbmVu dCk7Cj4gIAl1bnNpZ25lZCBsb25nIGxvbmcgdDAsIHQxLCB0X25vdzsKPiAgCXVuc2lnbmVkIGlu dCB0aW1lX2RlbHRhLCB1dGhyOwo+ICAJaW50IHNhbXBsZXNfb3V0LCBzYW1wbGVzX2luLCBzYW1w bGVzOwo+IEBAIC0xMjg0LDcgKzEyODQsNyBAQCBzdGF0aWMgc25kX3BjbV9zZnJhbWVzX3QgZGFj MzNfZGFpX2RlbGF5KAo+ICAJCX0KPiAgCQlicmVhazsKPiAgCWRlZmF1bHQ6Cj4gLQkJZGV2X3dh cm4oY29kZWMtPmRldiwgIlVuaGFuZGxlZCBGSUZPIG1vZGU6ICVkXG4iLAo+ICsJCWRldl93YXJu KGNvbXBvbmVudC0+ZGV2LCAiVW5oYW5kbGVkIEZJRk8gbW9kZTogJWRcbiIsCj4gIAkJCQkJCQlk YWMzMy0+Zmlmb19tb2RlKTsKPiAgCQlicmVhazsKPiAgCX0KPiBAQCAtMTI5NSwxMiArMTI5NSwx MiBAQCBzdGF0aWMgc25kX3BjbV9zZnJhbWVzX3QgZGFjMzNfZGFpX2RlbGF5KAo+ICBzdGF0aWMg aW50IGRhYzMzX3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAo+ ICAJCWludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQo+ICB7Cj4gLQlzdHJ1 Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwo+IC0Jc3RydWN0IHRs djMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7 Cj4gKwlzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCA9IGNvZGVjX2RhaS0+Y29t cG9uZW50Owo+ICsJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb21w b25lbnRfZ2V0X2RydmRhdGEoY29tcG9uZW50KTsKPiAgCXU4IGlvY19yZWcsIGFzcmNiX3JlZzsK PiAgCj4gLQlpb2NfcmVnID0gZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIERBQzMzX0lOVF9P U0NfQ1RSTCk7Cj4gLQlhc3JjYl9yZWcgPSBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFD MzNfQVNSQ19DVFJMX0IpOwo+ICsJaW9jX3JlZyA9IGRhYzMzX3JlYWRfcmVnX2NhY2hlKGNvbXBv bmVudCwgREFDMzNfSU5UX09TQ19DVFJMKTsKPiArCWFzcmNiX3JlZyA9IGRhYzMzX3JlYWRfcmVn X2NhY2hlKGNvbXBvbmVudCwgREFDMzNfQVNSQ19DVFJMX0IpOwo+ICAJc3dpdGNoIChjbGtfaWQp IHsKPiAgCWNhc2UgVExWMzIwREFDMzNfTUNMSzoKPiAgCQlpb2NfcmVnIHw9IERBQzMzX1JFRlNF TDsKPiBAQCAtMTMxMSwxMyArMTMxMSwxMyBAQCBzdGF0aWMgaW50IGRhYzMzX3NldF9kYWlfc3lz Y2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAo+ICAJCWFzcmNiX3JlZyAmPSB+REFD MzNfU1JDUkVGU0VMOwo+ICAJCWJyZWFrOwo+ICAJZGVmYXVsdDoKPiAtCQlkZXZfZXJyKGNvZGVj LT5kZXYsICJJbnZhbGlkIGNsb2NrIElEICglZClcbiIsIGNsa19pZCk7Cj4gKwkJZGV2X2Vycihj b21wb25lbnQtPmRldiwgIkludmFsaWQgY2xvY2sgSUQgKCVkKVxuIiwgY2xrX2lkKTsKPiAgCQli cmVhazsKPiAgCX0KPiAgCWRhYzMzLT5yZWZjbGsgPSBmcmVxOwo+ICAKPiAtCWRhYzMzX3dyaXRl X3JlZ19jYWNoZShjb2RlYywgREFDMzNfSU5UX09TQ19DVFJMLCBpb2NfcmVnKTsKPiAtCWRhYzMz X3dyaXRlX3JlZ19jYWNoZShjb2RlYywgREFDMzNfQVNSQ19DVFJMX0IsIGFzcmNiX3JlZyk7Cj4g KwlkYWMzM193cml0ZV9yZWdfY2FjaGUoY29tcG9uZW50LCBEQUMzM19JTlRfT1NDX0NUUkwsIGlv Y19yZWcpOwo+ICsJZGFjMzNfd3JpdGVfcmVnX2NhY2hlKGNvbXBvbmVudCwgREFDMzNfQVNSQ19D VFJMX0IsIGFzcmNiX3JlZyk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiBAQCAtMTMyNSwxMiAr MTMyNSwxMiBAQCBzdGF0aWMgaW50IGRhYzMzX3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29j X2RhaSAqY29kZWNfZGFpLAo+ICBzdGF0aWMgaW50IGRhYzMzX3NldF9kYWlfZm10KHN0cnVjdCBz bmRfc29jX2RhaSAqY29kZWNfZGFpLAo+ICAJCQkgICAgIHVuc2lnbmVkIGludCBmbXQpCj4gIHsK PiAtCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7Cj4gLQlz dHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRh KGNvZGVjKTsKPiArCXN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50ID0gY29kZWNf ZGFpLT5jb21wb25lbnQ7Cj4gKwlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMgPSBzbmRf c29jX2NvbXBvbmVudF9nZXRfZHJ2ZGF0YShjb21wb25lbnQpOwo+ICAJdTggYWljdHJsX2EsIGFp Y3RybF9iOwo+ICAKPiAtCWFpY3RybF9hID0gZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIERB QzMzX1NFUl9BVURJT0lGX0NUUkxfQSk7Cj4gLQlhaWN0cmxfYiA9IGRhYzMzX3JlYWRfcmVnX2Nh Y2hlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0IpOwo+ICsJYWljdHJsX2EgPSBkYWMz M19yZWFkX3JlZ19jYWNoZShjb21wb25lbnQsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQSk7Cj4g KwlhaWN0cmxfYiA9IGRhYzMzX3JlYWRfcmVnX2NhY2hlKGNvbXBvbmVudCwgREFDMzNfU0VSX0FV RElPSUZfQ1RSTF9CKTsKPiAgCS8qIHNldCBtYXN0ZXIvc2xhdmUgYXVkaW8gaW50ZXJmYWNlICov Cj4gIAlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7Cj4gIAljYXNl IFNORF9TT0NfREFJRk1UX0NCTV9DRk06Cj4gQEAgLTEzNDAsNyArMTM0MCw3IEBAIHN0YXRpYyBp bnQgZGFjMzNfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCj4gIAlj YXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6Cj4gIAkJLyogQ29kZWMgU2xhdmUgKi8KPiAgCQlp ZiAoZGFjMzMtPmZpZm9fbW9kZSkgewo+IC0JCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGSUZPIG1v ZGUgcmVxdWlyZXMgbWFzdGVyIG1vZGVcbiIpOwo+ICsJCQlkZXZfZXJyKGNvbXBvbmVudC0+ZGV2 LCAiRklGTyBtb2RlIHJlcXVpcmVzIG1hc3RlciBtb2RlXG4iKTsKPiAgCQkJcmV0dXJuIC1FSU5W QUw7Cj4gIAkJfSBlbHNlCj4gIAkJCWFpY3RybF9hICY9IH4oREFDMzNfTVNCQ0xLIHwgREFDMzNf TVNXQ0xLKTsKPiBAQCAtMTM2NiwzNSArMTM2NiwzNSBAQCBzdGF0aWMgaW50IGRhYzMzX3NldF9k YWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAo+ICAJCWFpY3RybF9hIHw9IERB QzMzX0FGTVRfTEVGVF9KOwo+ICAJCWJyZWFrOwo+ICAJZGVmYXVsdDoKPiAtCQlkZXZfZXJyKGNv ZGVjLT5kZXYsICJVbnN1cHBvcnRlZCBmb3JtYXQgKCV1KVxuIiwKPiArCQlkZXZfZXJyKGNvbXBv bmVudC0+ZGV2LCAiVW5zdXBwb3J0ZWQgZm9ybWF0ICgldSlcbiIsCj4gIAkJCWZtdCAmIFNORF9T T0NfREFJRk1UX0ZPUk1BVF9NQVNLKTsKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCX0KPiAgCj4g LQlkYWMzM193cml0ZV9yZWdfY2FjaGUoY29kZWMsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQSwg YWljdHJsX2EpOwo+IC0JZGFjMzNfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCBEQUMzM19TRVJfQVVE SU9JRl9DVFJMX0IsIGFpY3RybF9iKTsKPiArCWRhYzMzX3dyaXRlX3JlZ19jYWNoZShjb21wb25l bnQsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQSwgYWljdHJsX2EpOwo+ICsJZGFjMzNfd3JpdGVf cmVnX2NhY2hlKGNvbXBvbmVudCwgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9CLCBhaWN0cmxfYik7 Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgZGFjMzNfc29jX3Byb2Jl KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKPiArc3RhdGljIGludCBkYWMzM19zb2NfcHJv YmUoc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQpCj4gIHsKPiAtCXN0cnVjdCB0 bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMp Owo+ICsJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb21wb25lbnRf Z2V0X2RydmRhdGEoY29tcG9uZW50KTsKPiAgCWludCByZXQgPSAwOwo+ICAKPiAtCWRhYzMzLT5j b2RlYyA9IGNvZGVjOwo+ICsJZGFjMzMtPmNvbXBvbmVudCA9IGNvbXBvbmVudDsKPiAgCj4gIAkv KiBSZWFkIHRoZSB0bHYzMjBkYWMzMyBJRCByZWdpc3RlcnMgKi8KPiAtCXJldCA9IGRhYzMzX2hh cmRfcG93ZXIoY29kZWMsIDEpOwo+ICsJcmV0ID0gZGFjMzNfaGFyZF9wb3dlcihjb21wb25lbnQs IDEpOwo+ICAJaWYgKHJldCAhPSAwKSB7Cj4gLQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVk IHRvIHBvd2VyIHVwIGNvZGVjOiAlZFxuIiwgcmV0KTsKPiArCQlkZXZfZXJyKGNvbXBvbmVudC0+ ZGV2LCAiRmFpbGVkIHRvIHBvd2VyIHVwIGNvbXBvbmVudDogJWRcbiIsIHJldCk7Cj4gIAkJZ290 byBlcnJfcG93ZXI7Cj4gIAl9Cj4gLQlyZXQgPSBkYWMzM19yZWFkX2lkKGNvZGVjKTsKPiAtCWRh YzMzX2hhcmRfcG93ZXIoY29kZWMsIDApOwo+ICsJcmV0ID0gZGFjMzNfcmVhZF9pZChjb21wb25l bnQpOwo+ICsJZGFjMzNfaGFyZF9wb3dlcihjb21wb25lbnQsIDApOwo+ICAKPiAgCWlmIChyZXQg PCAwKSB7Cj4gLQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgY2hpcCBJRDog JWRcbiIsIHJldCk7Cj4gKwkJZGV2X2Vycihjb21wb25lbnQtPmRldiwgIkZhaWxlZCB0byByZWFk IGNoaXAgSUQ6ICVkXG4iLCByZXQpOwo+ICAJCXJldCA9IC1FTk9ERVY7Cj4gIAkJZ290byBlcnJf cG93ZXI7Cj4gIAl9Cj4gQEAgLTE0MDMsOSArMTQwMyw5IEBAIHN0YXRpYyBpbnQgZGFjMzNfc29j X3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKPiAgCWlmIChkYWMzMy0+aXJxID49 IDApIHsKPiAgCQlyZXQgPSByZXF1ZXN0X2lycShkYWMzMy0+aXJxLCBkYWMzM19pbnRlcnJ1cHRf aGFuZGxlciwKPiAgCQkJCSAgSVJRRl9UUklHR0VSX1JJU0lORywKPiAtCQkJCSAgY29kZWMtPmNv bXBvbmVudC5uYW1lLCBjb2RlYyk7Cj4gKwkJCQkgIGNvbXBvbmVudC0+bmFtZSwgY29tcG9uZW50 KTsKPiAgCQlpZiAocmV0IDwgMCkgewo+IC0JCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJDb3VsZCBu b3QgcmVxdWVzdCBJUlElZCAoJWQpXG4iLAo+ICsJCQlkZXZfZXJyKGNvbXBvbmVudC0+ZGV2LCAi Q291bGQgbm90IHJlcXVlc3QgSVJRJWQgKCVkKVxuIiwKPiAgCQkJCQkJZGFjMzMtPmlycSwgcmV0 KTsKPiAgCQkJZGFjMzMtPmlycSA9IC0xOwo+ICAJCX0KPiBAQCAtMTQxNiw0MSArMTQxNiwzOCBA QCBzdGF0aWMgaW50IGRhYzMzX3NvY19wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMp Cj4gIAo+ICAJLyogT25seSBhZGQgdGhlIEZJRk8gY29udHJvbHMsIGlmIHdlIGhhdmUgdmFsaWQg SVJRIG51bWJlciAqLwo+ICAJaWYgKGRhYzMzLT5pcnEgPj0gMCkKPiAtCQlzbmRfc29jX2FkZF9j b2RlY19jb250cm9scyhjb2RlYywgZGFjMzNfbW9kZV9zbmRfY29udHJvbHMsCj4gKwkJc25kX3Nv Y19hZGRfY29tcG9uZW50X2NvbnRyb2xzKGNvbXBvbmVudCwgZGFjMzNfbW9kZV9zbmRfY29udHJv bHMsCj4gIAkJCQkgICAgIEFSUkFZX1NJWkUoZGFjMzNfbW9kZV9zbmRfY29udHJvbHMpKTsKPiAg Cj4gIGVycl9wb3dlcjoKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgZGFj MzNfc29jX3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCj4gK3N0YXRpYyB2b2lk IGRhYzMzX3NvY19yZW1vdmUoc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQpCj4g IHsKPiAtCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2NfY29kZWNfZ2V0 X2RydmRhdGEoY29kZWMpOwo+ICsJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25k X3NvY19jb21wb25lbnRfZ2V0X2RydmRhdGEoY29tcG9uZW50KTsKPiAgCj4gIAlpZiAoZGFjMzMt PmlycSA+PSAwKSB7Cj4gLQkJZnJlZV9pcnEoZGFjMzMtPmlycSwgZGFjMzMtPmNvZGVjKTsKPiAr CQlmcmVlX2lycShkYWMzMy0+aXJxLCBkYWMzMy0+Y29tcG9uZW50KTsKPiAgCQlmbHVzaF93b3Jr KCZkYWMzMy0+d29yayk7Cj4gIAl9Cj4gLQlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGNv bnN0IHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzb2NfY29kZWNfZGV2X3RsdjMyMGRhYzMz ID0gewo+IC0JLnJlYWQgPSBkYWMzM19yZWFkX3JlZ19jYWNoZSwKPiAtCS53cml0ZSA9IGRhYzMz X3dyaXRlX2xvY2tlZCwKPiAtCS5zZXRfYmlhc19sZXZlbCA9IGRhYzMzX3NldF9iaWFzX2xldmVs LAo+IC0JLmlkbGVfYmlhc19vZmYgPSB0cnVlLAo+IC0KPiAtCS5wcm9iZSA9IGRhYzMzX3NvY19w cm9iZSwKPiAtCS5yZW1vdmUgPSBkYWMzM19zb2NfcmVtb3ZlLAo+IC0KPiAtCS5jb21wb25lbnRf ZHJpdmVyID0gewo+IC0JCS5jb250cm9scwkJPSBkYWMzM19zbmRfY29udHJvbHMsCj4gLQkJLm51 bV9jb250cm9scwkJPSBBUlJBWV9TSVpFKGRhYzMzX3NuZF9jb250cm9scyksCj4gLQkJLmRhcG1f d2lkZ2V0cwkJPSBkYWMzM19kYXBtX3dpZGdldHMsCj4gLQkJLm51bV9kYXBtX3dpZGdldHMJPSBB UlJBWV9TSVpFKGRhYzMzX2RhcG1fd2lkZ2V0cyksCj4gLQkJLmRhcG1fcm91dGVzCQk9IGF1ZGlv X21hcCwKPiAtCQkubnVtX2RhcG1fcm91dGVzCT0gQVJSQVlfU0laRShhdWRpb19tYXApLAo+IC0J fSwKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudF9kcml2ZXIgc29jX2Nv bXBvbmVudF9kZXZfdGx2MzIwZGFjMzMgPSB7Cj4gKwkucmVhZAkJCT0gZGFjMzNfcmVhZF9yZWdf Y2FjaGUsCj4gKwkud3JpdGUJCQk9IGRhYzMzX3dyaXRlX2xvY2tlZCwKPiArCS5zZXRfYmlhc19s ZXZlbAkJPSBkYWMzM19zZXRfYmlhc19sZXZlbCwKPiArCS5wcm9iZQkJCT0gZGFjMzNfc29jX3By b2JlLAo+ICsJLnJlbW92ZQkJCT0gZGFjMzNfc29jX3JlbW92ZSwKPiArCS5jb250cm9scwkJPSBk YWMzM19zbmRfY29udHJvbHMsCj4gKwkubnVtX2NvbnRyb2xzCQk9IEFSUkFZX1NJWkUoZGFjMzNf c25kX2NvbnRyb2xzKSwKPiArCS5kYXBtX3dpZGdldHMJCT0gZGFjMzNfZGFwbV93aWRnZXRzLAo+ ICsJLm51bV9kYXBtX3dpZGdldHMJPSBBUlJBWV9TSVpFKGRhYzMzX2RhcG1fd2lkZ2V0cyksCj4g KwkuZGFwbV9yb3V0ZXMJCT0gYXVkaW9fbWFwLAo+ICsJLm51bV9kYXBtX3JvdXRlcwk9IEFSUkFZ X1NJWkUoYXVkaW9fbWFwKSwKPiArCS51c2VfcG1kb3duX3RpbWUJPSAxLAo+ICsJLmVuZGlhbm5l c3MJCT0gMSwKPiArCS5ub25fbGVnYWN5X2RhaV9uYW1pbmcJPSAxLAo+ICB9Owo+ICAKPiAgI2Rl ZmluZSBEQUMzM19SQVRFUwkoU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCj4gQEAgLTE1NDQsOCAr MTU0MSw4IEBAIHN0YXRpYyBpbnQgZGFjMzNfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpj bGllbnQsCj4gIAkJZ290byBlcnJfZ2V0Owo+ICAJfQo+ICAKPiAtCXJldCA9IHNuZF9zb2NfcmVn aXN0ZXJfY29kZWMoJmNsaWVudC0+ZGV2LAo+IC0JCQkmc29jX2NvZGVjX2Rldl90bHYzMjBkYWMz MywgJmRhYzMzX2RhaSwgMSk7Cj4gKwlyZXQgPSBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY29tcG9u ZW50KCZjbGllbnQtPmRldiwKPiArCQkJJnNvY19jb21wb25lbnRfZGV2X3RsdjMyMGRhYzMzLCAm ZGFjMzNfZGFpLCAxKTsKPiAgCWlmIChyZXQgPCAwKQo+ICAJCWdvdG8gZXJyX2dldDsKPiAgCj4g QEAgLTE1NjIsMTIgKzE1NTksMTEgQEAgc3RhdGljIGludCBkYWMzM19pMmNfcmVtb3ZlKHN0cnVj dCBpMmNfY2xpZW50ICpjbGllbnQpCj4gIAlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMg PSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKPiAgCj4gIAlpZiAodW5saWtlbHkoZGFjMzMt PmNoaXBfcG93ZXIpKQo+IC0JCWRhYzMzX2hhcmRfcG93ZXIoZGFjMzMtPmNvZGVjLCAwKTsKPiAr CQlkYWMzM19oYXJkX3Bvd2VyKGRhYzMzLT5jb21wb25lbnQsIDApOwo+ICAKPiAgCWlmIChkYWMz My0+cG93ZXJfZ3BpbyA+PSAwKQo+ICAJCWdwaW9fZnJlZShkYWMzMy0+cG93ZXJfZ3Bpbyk7Cj4g IAo+IC0Jc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZjbGllbnQtPmRldik7Cj4gIAlyZXR1cm4g MDsKPiAgfQo+ICAKPiAKCi0gUMOpdGVyCgpUZXhhcyBJbnN0cnVtZW50cyBGaW5sYW5kIE95LCBQ b3Jra2FsYW5rYXR1IDIyLCAwMDE4MCBIZWxzaW5raS4KWS10dW5udXMvQnVzaW5lc3MgSUQ6IDA2 MTU1MjEtNC4gS290aXBhaWtrYS9Eb21pY2lsZTogSGVsc2lua2kKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWxzYS1kZXZlbCBtYWlsaW5nIGxpc3QKQWxz YS1kZXZlbEBhbHNhLXByb2plY3Qub3JnCmh0dHA6Ly9tYWlsbWFuLmFsc2EtcHJvamVjdC5vcmcv bWFpbG1hbi9saXN0aW5mby9hbHNhLWRldmVsCg==