Return-path: Received: from mail-we0-f178.google.com ([74.125.82.178]:62437 "EHLO mail-we0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751437AbaANRkx (ORCPT ); Tue, 14 Jan 2014 12:40:53 -0500 Received: by mail-we0-f178.google.com with SMTP id t60so709418wes.37 for ; Tue, 14 Jan 2014 09:40:51 -0800 (PST) MIME-Version: 1.0 Reply-To: andrea.merello@gmail.com In-Reply-To: References: <522F584E.6000806@lwfinger.net> Date: Tue, 14 Jan 2014 18:40:51 +0100 Message-ID: (sfid-20140114_184102_133652_D8E70437) Subject: Re: RTL8187SE staging Linux driver From: Andrea Merello To: Bernhard Schiffner Cc: John Linville , Greg Kroah-Hartman , linux-wireless@vger.kernel.org, Larry Finger Content-Type: multipart/mixed; boundary=089e010d89e08792e704eff1b1b8 Sender: linux-wireless-owner@vger.kernel.org List-ID: --089e010d89e08792e704eff1b1b8 Content-Type: text/plain; charset=ISO-8859-1 Hello Bernhard, Are you still curious to test something ? :) I attach a patch that should apply to wireless-testing.. I still have several items pending on my TODO list, including things to tidy/fix, and things that are currently missing, however I'm getting encouraging results on my setup.. If this works for you, and if other people in CC here agree, I may starting split this mega-patch in something more suitable for kernel maintainers to merge (currently it even changes few misleading names in the common register struct, affecting also rtl8187 driver).. Let me know if it works :) Andrea --089e010d89e08792e704eff1b1b8 Content-Type: text/x-patch; charset=US-ASCII; name="rtl8187se_00.patch" Content-Disposition: attachment; filename="rtl8187se_00.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hqfg3rzh0 ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvS2NvbmZpZyBiL2RyaXZl cnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvS2NvbmZpZwppbmRleCAzMDMzMjE3Li4yZjY0MGEyIDEw MDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L0tjb25maWcKKysrIGIvZHJp dmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9LY29uZmlnCkBAIC0yLDcgKzIsNyBAQAogIyBSVEw4 MThYIFdpcmVsZXNzIExBTiBkZXZpY2UgY29uZmlndXJhdGlvbgogIwogY29uZmlnIFJUTDgxODAK LQl0cmlzdGF0ZSAiUmVhbHRlayA4MTgwLzgxODUgUENJIHN1cHBvcnQiCisJdHJpc3RhdGUgIlJl YWx0ZWsgODE4MC84MTg1LzgxODdTRSBQQ0kgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1BQzgwMjEx ICYmIFBDSQogCXNlbGVjdCBFRVBST01fOTNDWDYKIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODAvTWFrZWZpbGUgYi9kcml2ZXJzL25l dC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODAvTWFrZWZpbGUKaW5kZXggY2I0ZmI4NS4uMDhiMDU2 ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwL01ha2Vm aWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9NYWtlZmlsZQpA QCAtMSw0ICsxLDQgQEAKLXJ0bDgxODAtb2JqcwkJOj0gZGV2Lm8gcnRsODIyNS5vIHNhMjQwMC5v IG1heDI4MjAubyBncmY1MTAxLm8KK3J0bDgxODAtb2JqcwkJOj0gZGV2Lm8gcnRsODIyNS5vIHNh MjQwMC5vIG1heDI4MjAubyBncmY1MTAxLm8gcnRsODIyNXNlLm8KIAogb2JqLSQoQ09ORklHX1JU TDgxODApCSs9IHJ0bDgxODAubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9y dGw4MTh4L3J0bDgxODAvZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgx ODAvZGV2LmMKaW5kZXggOGVjMTdhYS4uOTJiMGZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQv d2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwL2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNz L3J0bDgxOHgvcnRsODE4MC9kZXYuYwpAQCAtMSwyMCArMSwzNiBAQAotCiAvKgotICogTGludXgg ZGV2aWNlIGRyaXZlciBmb3IgUlRMODE4MCAvIFJUTDgxODUKKyAqIExpbnV4IGRldmljZSBkcml2 ZXIgZm9yIFJUTDgxODAgLyBSVEw4MTg1IC8gUlRMODE4N1NFCiAgKgogICogQ29weXJpZ2h0IDIw MDcgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+Ci0gKiBDb3B5cmlnaHQgMjAw NyBBbmRyZWEgTWVyZWxsbyA8YW5kcmVhLm1lcmVsbG9AZ21haWwuY29tPgorICogQ29weXJpZ2h0 IDIwMDcsMjAxMyBBbmRyZWEgTWVyZWxsbyA8YW5kcmVhLm1lcmVsbG9AZ21haWwuY29tPgogICoK ICAqIEJhc2VkIG9uIHRoZSByODE4MCBkcml2ZXIsIHdoaWNoIGlzOgogICogQ29weXJpZ2h0IDIw MDQtMjAwNSBBbmRyZWEgTWVyZWxsbyA8YW5kcmVhLm1lcmVsbG9AZ21haWwuY29tPiwgZXQgYWwu CiAgKgogICogVGhhbmtzIHRvIFJlYWx0ZWsgZm9yIHRoZWlyIHN1cHBvcnQhCiAgKgorICogVGhl IGRyaXZlciB3YXMgZXh0ZW5kZWQgdG8gdGhlIFJUTDgxODdTRSBpbiAyMDE0IGJ5CisgKiBBbmRy ZWEgTWVyZWxsbyA8YW5kcmVhLm1lcmVsbG9AZ21haWwuY29tPgorICogYmFzZWQgYWxzbyBvbjoK KyAqICAtIHBvcnRpb25zIG9mIHJ0bDgxODdzZSBMaW51eCBzdGFnaW5nIGRyaXZlciwgQ29weXJp Z2h0IFJlYWx0ZWsgY29ycC4KKyAqICAtIG90aGVyIEdQTCwgdW5wdWJsaXNoZWQgKHVudGlsIG5v dyksIExpbnV4IGRyaXZlciBjb2RlLAorICogICAgQ29weXJpZ2h0IExhcnJ5IEZpbmdlciA8TGFy cnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKiBBIHNwZWNpYWwgdGhhbmtzIGdvZXMgdG8g QW50b25pbyBDdW5pLCB3aG8gaGVscGVkIG1lIHdpdGgKKyAqIHNvbWUgcHl0aG9uIHVzZXJzcGFj ZSBzdHVmZiBJIHVzZWQgdG8gZGVidWcgUlRMODE4N1NFIGNvZGUuCisgKgogICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KICAqLwogCisKKy8qIEkgd3JvdGUgYSBsaXR0bGUgdXNlcnNwYWNlIFB5dGhvbiB0b29s IHRoYXQgSSB1c2UgdG8gZGVidWcKKyAqIFRYLXJlbGF0ZWQgc3R1ZmYuIEl0IHJlbGllcyBvbiB0 aGUgY29kZSBlbmFibGVkIGJ5IHRoaXMgI2RlZmluZS4KKyAqIFBsZWFzZSBkb24ndCBraWxsIHRo YXQgY29kZSB5ZXQKKyAqLworI3VuZGVmIERFQlVHX1BZX1RPT0wKKwogI2luY2x1ZGUgPGxpbnV4 L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4KQEAgLTI2LDE2ICs0MiwyMyBAQAogCiAjaW5jbHVkZSAicnRsODE4MC5oIgogI2luY2x1 ZGUgInJ0bDgyMjUuaCIKKyNpbmNsdWRlICJydGw4MjI1c2UuaCIKICNpbmNsdWRlICJzYTI0MDAu aCIKICNpbmNsdWRlICJtYXgyODIwLmgiCiAjaW5jbHVkZSAiZ3JmNTEwMS5oIgorI2luY2x1ZGUg InJ0bDgyMjVzZS5oIgorCiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgV3UgPGZsYW1pbmdpY2VA c291cm1pbGsubmV0PiIpOwogTU9EVUxFX0FVVEhPUigiQW5kcmVhIE1lcmVsbG8gPGFuZHJlYS5t ZXJlbGxvQGdtYWlsLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUlRMODE4MCAvIFJUTDgx ODUgUENJIHdpcmVsZXNzIGRyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSVEw4MTgwIC8g UlRMODE4NSAvIFJUTDgxODdTRSBQQ0kgd2lyZWxlc3MgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5T RSgiR1BMIik7CiAKIHN0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShydGw4MTgwX3RhYmxl KSA9IHsKKworCS8qIHJ0bDgxODdzZSAqLworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JF QUxURUssIDB4ODE5OSkgfSwKKwogCS8qIHJ0bDgxODUgKi8KIAl7IFBDSV9ERVZJQ0UoUENJX1ZF TkRPUl9JRF9SRUFMVEVLLCAweDgxODUpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURf QkVMS0lOLCAweDcwMGYpIH0sCkBAIC04NSwzMyArMTA4LDE2NiBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0IGllZWU4MDIxMV9jaGFubmVsIHJ0bDgxOHhfY2hhbm5lbHNbXSA9IHsKIAl7IC5jZW50ZXJf ZnJlcSA9IDI0ODQgfSwKIH07CiAKKy8qIFF1ZXVlcyBmb3IgcnRsODE4N3NlIGNhcmQKKyAqCisg KiBuYW1lIHwgcmVnICB8ICBxdWV1ZQorICogIEJDICB8ICA3ICAgfCAgIDYKKyAqICBNRyAgfCAg MSAgIHwgICAwCisgKiAgSEkgIHwgIDYgICB8ICAgMQorICogIFZPICB8ICA1ICAgfCAgIDIKKyAq ICBWSSAgfCAgNCAgIHwgICAzCisgKiAgQkUgIHwgIDMgICB8ICAgNAorICogIEJLICB8ICAyICAg fCAgIDUKKyAqCisgKiBUaGUgY29tcGxldGUgbWFwIGZvciBETUEga2ljayByZWcgdXNpbmcgdXNl IGFsbCBxdWV1ZSBpczoKKyAqIHN0YXRpYyBjb25zdCBpbnQgcnRsODE4N3NlX3F1ZXVlc19tYXBb UlRMODE4N1NFX05SX1RYX1FVRVVFU10gPQorICoJezEsIDYsIDUsIDQsIDMsIDIsIDd9OworICoK KyAqIC4uIGJ1dC4uIEJlY2F1c2UgZm9yIG1hYzgwMjExIDQgcXVldWVzIGFyZSBlbm91Z2ggZm9y IFFvUyB3ZSB1c2UgdGhpcworICoKKyAqIG5hbWUgfCByZWcgIHwgIHF1ZXVlCisgKiAgQkMgIHwg IDcgICB8ICAgNCAgPC0gdXNlZCwgbm90IHJlcG9ydGVkIHRvIHN0YWNrIChiZWFjb24pCisgKiAg TUcgIHwgIDEgICB8ICAgeCAgPC0gTm90IHVzZWQKKyAqICBISSAgfCAgNiAgIHwgICB4ICA8LSBO b3QgdXNlZAorICogIFZPICB8ICA1ICAgfCAgIDAgIDwtIHVzZWQKKyAqICBWSSAgfCAgNCAgIHwg ICAxICA8LSB1c2VkCisgKiAgQkUgIHwgIDMgICB8ICAgMiAgPC0gdXNlZAorICogIEJLICB8ICAy ICAgfCAgIDMgIDwtIHVzZWQKKyAqCisgKiBJIHRob3VndGggYWJvdXQgdXNpbmcgdGhlIG90aGVy IHR3byBxdWV1ZXMgYnV0IEkgZGVjaWRlZCBub3QgdG8gZG8gdGhpczoKKyAqCisgKiAtIEkgY291 bGQgcm91dGUgTUdNVCBmcmFtZXMgKGN1cnJlbnRseSBzZW50IG92ZXIgVk8gcXVldWUpIHRvIHRo ZSBNR01UCisgKiAgIHF1ZXVlIGJ1dCBzaW5jZSBtYWM4MDIxMSB3aWxsIGRvIG5vdCBrbm93IGFi b3V0IGl0LCBJIHdpbGwgcHJvYmFibHkgZ2FpbgorICogICBzb21lIEhXIHByaW9yaXR5IHdoZW5l dmVyIHRoZSBWTyBxdWV1ZSBpcyBub3QgZW1wdHksIGJ1dCB0aGlzIGdhaW4gaXMKKyAqICAgbGlt aXRlZCBieSB0aGUgZmFjdCB0aGF0IEkgaGFkIHRvIHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIHdo ZW5ldmVyIG9uZSBvZgorICogICB0aGUgVk8gb3IgTUdNVCBxdWV1ZXMgaXMgZnVsbCwgc3RvcHBp bmcgYWxzbyBzdWJtaXR0aW5nIG9mIE1HTVQgZnJhbWUKKyAqICAgdG8gdGhlIGRyaXZlci4KKyAq CisgKiAtIEknbSBkb24nIGtub3cgaG93IHRvIHNldCBpbiB0aGUgSFcgdGhlIGNvbnRlbnRpb24g d2luZG93IHBhcmFtcyBmb3IgTUdNVAorICogICBhbmQgSEktcHJpbyBxdWV1ZXMuCisgKgorICog LSBJJ20gdW5zdXJlIHdoZXRoZXIgdGhlIG1hYzgwMjExIHdpbGwgZXZlciB0cnkgdG8gdXNlIG1v cmUgdGhhbiA0IHF1ZXVlcworICovCisKK3N0YXRpYyBjb25zdCBpbnQgcnRsODE4N3NlX3F1ZXVl c19tYXBbUlRMODE4N1NFX05SX1RYX1FVRVVFU10gPSB7NSwgNCwgMywgMiwgN307CisKKy8qIFF1 ZXVlcyBmb3IgcnRsODE4MC9ydGw4MTg1IGNhcmRzCisgKgorICogbmFtZSB8IHJlZyAgfCAgcHJp bworICogIEJDICB8ICA3ICAgfCAgIDMKKyAqICBISSAgfCAgNiAgIHwgICAwCisgKiAgTk8gIHwg IDUgICB8ICAgMQorICogIExPICB8ICA0ICAgfCAgIDIKKyAqCisgKiBUaGUgY29tcGxldGUgbWFw IGZvciBETUEga2ljayByZWcgdXNpbmcgYWxsIHF1ZXVlIGlzOgorICogc3RhdGljIGNvbnN0IGlu dCBydGw4MTgwX3F1ZXVlc19tYXBbUlRMODE4MF9OUl9UWF9RVUVVRVNdID0gezYsIDUsIDQsIDd9 OworICoKKyAqIC4uIGJ1dCAuLiBCZWNhdXNlIHRoZSBtYWM4MDIxMSBuZWVkcyBhdCBsZWFzdCA0 IHF1ZXVlcyBmb3IgUW9TIG9yCisgKiBvdGhlcndpc2UgUW9TIGNhbid0IGJlIGRvbmUsIHdlIHVz ZSB0aGlzOgorICoKKyAqIG5hbWUgfCByZWcgIHwgIHByaW8KKyAqICBCQyAgfCAgNyAgIHwgICAx ICA8LSB1c2VkLCBub3QgcmVwb3J0ZWQgdG8gc3RhY2sgKGJlYWNvbikKKyAqICBISSAgfCAgNiAg IHwgICB4ICA8LSBub3QgdXNlZAorICogIE5PICB8ICA1ICAgfCAgIHggIDwtIG5vdCB1c2VkCisg KiAgTE8gIHwgIDQgICB8ICAgMCAgPC0gdXNlZAorICoKKyAqLworCitzdGF0aWMgY29uc3QgaW50 IHJ0bDgxODBfcXVldWVzX21hcFtSVEw4MTgwX05SX1RYX1FVRVVFU10gPSB7NCwgN307CisKKwor c3RhdGljIHZvaWQgcnRsODE4MF93cml0ZV9waHlfKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwg dTggYWRkciwgdTMyIGRhdGEpCit7CisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+ cHJpdjsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UEhZWzFdLAorCQkJ ICh1OCkoZGF0YSAgJiAweEZGKSk7CisJcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAt PlBIWVsxXSk7CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlBIWVsyXSwK KwkJCSAodTgpKChkYXRhID4+IDgpICYgMHhGRikpOworCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAm cHJpdi0+bWFwLT5QSFlbMl0pOworCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFw LT5QSFlbM10sCisJCQkgKHU4KSgoZGF0YSA+PiAxNikgJiAweEZGKSk7CisJcnRsODE4eF9pb3Jl YWQ4KHByaXYsICZwcml2LT5tYXAtPlBIWVszXSk7CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYs ICZwcml2LT5tYXAtPlBIWVswXSwKKwkJCSAodTgpKGFkZHIpKTsKK30KIAogdm9pZCBydGw4MTgw X3dyaXRlX3BoeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHU4IGFkZHIsIHUzMiBkYXRhKQog ewogCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JaW50IGkgPSAxMDsK LQl1MzIgYnVmOworCWludCBpOworCXU4IHRtcDsKKwl1OCByZWFkYmFjazsKKwl1MzIgcmJfbWFz ayA9IDB4ZmY7CisKKwlpZiAoKGFkZHIgPT0gMHhhKSAmJiAoCisJCSAgICBwcml2LT5jaGlwX2Zh bWlseSA9PSBSVEw4MThYX0NISVBfRkFNSUxZX1JUTDgxODUpKQorCQlyYl9tYXNrID0gMHg3ZjsK KworCWZvciAoaSA9IDA7IGkgPCAzMDsgaSsrKSB7CisJCXRtcCA9IHJ0bDgxOHhfaW9yZWFkOChw cml2LCAmcHJpdi0+bWFwLT5QSFlbMF0pOworCQlpZiAoISh0bXAgJiAweDgwKSkKKwkJCWJyZWFr OworCQltZGVsYXkoMTApOworCX0KIAotCWJ1ZiA9IChkYXRhIDw8IDgpIHwgYWRkcjsKKwlpZiAo dG1wICYgMHg4MCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgInJ0bDgxOHggZmFp bGVkIHRvIHdyaXRlIEJCIChidXN5KSBhZHI6JXggZGF0YToleFxuIiwKKwkJICAgICAgIGFkZHIs IGRhdGEpOworCisJcnRsODE4MF93cml0ZV9waHlfKGRldiwgYWRkciB8IDB4ODAsIGRhdGEpOwor CisJZm9yIChpID0gMDsgaSA8IDMwOyBpKyspIHsKKwkJcnRsODE4MF93cml0ZV9waHlfKGRldiwg YWRkciAmIH4weDgwLCBkYXRhKTsKKworCQlyZWFkYmFjayA9IHJ0bDgxOHhfaW9yZWFkOChwcml2 LCAmcHJpdi0+bWFwLT5QSFlbMl0pOworCisJCWlmIChyZWFkYmFjayA9PSAoZGF0YSAmIHJiX21h c2spKQorCQkJYnJlYWs7CiAKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAoX19sZTMyIF9faW9t ZW0gKikmcHJpdi0+bWFwLT5QSFlbMF0sIGJ1ZiB8IDB4ODApOwotCXdoaWxlIChpLS0pIHsKLQkJ cnRsODE4eF9pb3dyaXRlMzIocHJpdiwgKF9fbGUzMiBfX2lvbWVtICopJnByaXYtPm1hcC0+UEhZ WzBdLCBidWYpOwotCQlpZiAocnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPlBIWVsy XSkgPT0gKGRhdGEgJiAweEZGKSkKLQkJCXJldHVybjsKIAl9CisKKwlpZiAocmVhZGJhY2sgIT0g KGRhdGEgJiByYl9tYXNrKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgInJ0bDgx OHggZmFpbGVkIHRvIHdyaXRlIEJCIGFkcjoleCBkYXRhOiV4IHJiOiV4XG4iLAorCQkgICAgICAg YWRkciwgZGF0YSwgcmVhZGJhY2spOwogfQogCisKIHN0YXRpYyB2b2lkIHJ0bDgxODBfaGFuZGxl X3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIHsKIAlzdHJ1Y3QgcnRsODE4MF9wcml2ICpw cml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBydGw4MTh4X3J4X2NtZF9kZXNjICpjbWRfZGVzYzsK IAl1bnNpZ25lZCBpbnQgY291bnQgPSAzMjsKIAl1OCBzaWduYWwsIGFnYywgc3E7CisJZG1hX2Fk ZHJfdCBtYXBwaW5nOwogCiAJd2hpbGUgKGNvdW50LS0pIHsKLQkJc3RydWN0IHJ0bDgxODBfcnhf ZGVzYyAqZW50cnkgPSAmcHJpdi0+cnhfcmluZ1twcml2LT5yeF9pZHhdOworCQl2b2lkICplbnRy eSA9IHByaXYtPnJ4X3JpbmcgKyBwcml2LT5yeF9pZHggKiBwcml2LT5yeF9yaW5nX3N6OwogCQlz dHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi0+cnhfYnVmW3ByaXYtPnJ4X2lkeF07Ci0JCXUzMiBm bGFncyA9IGxlMzJfdG9fY3B1KGVudHJ5LT5mbGFncyk7CisKKwkJdTMyIGZsYWdzLCBmbGFnczI7 CisJCXU2NCB0c2Z0OworCisJCWlmIChwcml2LT5jaGlwX2ZhbWlseSA9PSBSVEw4MThYX0NISVBf RkFNSUxZX1JUTDgxODdTRSkgeworCQkJc3RydWN0IHJ0bDgxODdzZV9yeF9kZXNjICpkZXNjID0g ZW50cnk7CisKKwkJCWZsYWdzID0gbGUzMl90b19jcHUoZGVzYy0+ZmxhZ3MpOworCQkJZmxhZ3My ID0gbGUzMl90b19jcHUoZGVzYy0+ZmxhZ3MyKTsKKwkJCXRzZnQgPSBsZTY0X3RvX2NwdShkZXNj LT50c2Z0KTsKKworCQl9IGVsc2UgeworCQkJc3RydWN0IHJ0bDgxODBfcnhfZGVzYyAqZGVzYyA9 IGVudHJ5OworCisJCQlmbGFncyA9IGxlMzJfdG9fY3B1KGRlc2MtPmZsYWdzKTsKKwkJCWZsYWdz MiA9IGxlMzJfdG9fY3B1KGRlc2MtPmZsYWdzMik7CisJCQl0c2Z0ID0gbGU2NF90b19jcHUoZGVz Yy0+dHNmdCk7CisJCX0KIAogCQlpZiAoZmxhZ3MgJiBSVEw4MThYX1JYX0RFU0NfRkxBR19PV04p CiAJCQlyZXR1cm47CkBAIC0xMjEsNTQgKzI3Nyw3NSBAQCBzdGF0aWMgdm9pZCBydGw4MTgwX2hh bmRsZV9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCiAJCQkJICAgICAgUlRMODE4WF9SWF9E RVNDX0ZMQUdfUlhfRVJSKSkpCiAJCQlnb3RvIGRvbmU7CiAJCWVsc2UgewotCQkJdTMyIGZsYWdz MiA9IGxlMzJfdG9fY3B1KGVudHJ5LT5mbGFnczIpOworCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4 X3N0YXR1cyByeF9zdGF0dXMgPSB7MH07CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9IGRl dl9hbGxvY19za2IoTUFYX1JYX1NJWkUpOwogCiAJCQlpZiAodW5saWtlbHkoIW5ld19za2IpKQog CQkJCWdvdG8gZG9uZTsKIAorCQkJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYs CisJCQkJCSAgICAgICBza2JfdGFpbF9wb2ludGVyKG5ld19za2IpLAorCQkJCQkgICAgICAgTUFY X1JYX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJCWlmIChwY2lfZG1hX21hcHBpbmdf ZXJyb3IocHJpdi0+cGRldiwgbWFwcGluZykpIHsKKwkJCQlrZnJlZV9za2IobmV3X3NrYik7CisJ CQkJZGV2X2VycigmcHJpdi0+cGRldi0+ZGV2LCAiVFggRE1BIG1hcCBlcnJvclxuIik7CisKKwkJ CQlnb3RvIGRvbmU7CisJCQl9CisKIAkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwKIAkJ CQkJICooKGRtYV9hZGRyX3QgKilza2ItPmNiKSwKIAkJCQkJIE1BWF9SWF9TSVpFLCBQQ0lfRE1B X0ZST01ERVZJQ0UpOwogCQkJc2tiX3B1dChza2IsIGZsYWdzICYgMHhGRkYpOwogCisKIAkJCXJ4 X3N0YXR1cy5hbnRlbm5hID0gKGZsYWdzMiA+PiAxNSkgJiAxOwogCQkJcnhfc3RhdHVzLnJhdGVf aWR4ID0gKGZsYWdzID4+IDIwKSAmIDB4RjsKIAkJCWFnYyA9IChmbGFnczIgPj4gMTcpICYgMHg3 RjsKLQkJCWlmIChwcml2LT5yODE4NSkgeworCisJCQlpZiAocHJpdi0+Y2hpcF9mYW1pbHkgPT0g UlRMODE4WF9DSElQX0ZBTUlMWV9SVEw4MTg1KSB7CiAJCQkJaWYgKHJ4X3N0YXR1cy5yYXRlX2lk eCA+IDMpCiAJCQkJCXNpZ25hbCA9IDkwIC0gY2xhbXBfdCh1OCwgYWdjLCAyNSwgOTApOwogCQkJ CWVsc2UKIAkJCQkJc2lnbmFsID0gOTUgLSBjbGFtcF90KHU4LCBhZ2MsIDMwLCA5NSk7Ci0JCQl9 IGVsc2UgeworCisJCQl9IGVsc2UgaWYgKHByaXYtPmNoaXBfZmFtaWx5ID09CisJCQkJICAgUlRM ODE4WF9DSElQX0ZBTUlMWV9SVEw4MTgwKSB7CiAJCQkJc3EgPSBmbGFnczIgJiAweGZmOwogCQkJ CXNpZ25hbCA9IHByaXYtPnJmLT5jYWxjX3Jzc2koYWdjLCBzcSk7CisJCQl9IGVsc2UgeworCQkJ CS8qIFRPRE86IHJ0bDgxODdzZSByc3NpICovCisJCQkJc2lnbmFsID0gMTA7CiAJCQl9CisKIAkJ CXJ4X3N0YXR1cy5zaWduYWwgPSBzaWduYWw7CiAJCQlyeF9zdGF0dXMuZnJlcSA9IGRldi0+Y29u Zi5jaGFuZGVmLmNoYW4tPmNlbnRlcl9mcmVxOwogCQkJcnhfc3RhdHVzLmJhbmQgPSBkZXYtPmNv bmYuY2hhbmRlZi5jaGFuLT5iYW5kOwotCQkJcnhfc3RhdHVzLm1hY3RpbWUgPSBsZTY0X3RvX2Nw dShlbnRyeS0+dHNmdCk7CisJCQlyeF9zdGF0dXMubWFjdGltZSA9IHRzZnQ7CiAJCQlyeF9zdGF0 dXMuZmxhZyB8PSBSWF9GTEFHX01BQ1RJTUVfU1RBUlQ7CiAJCQlpZiAoZmxhZ3MgJiBSVEw4MThY X1JYX0RFU0NfRkxBR19DUkMzMl9FUlIpCiAJCQkJcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19G QUlMRURfRkNTX0NSQzsKIAotCQkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmcnhf c3RhdHVzLCBzaXplb2Yocnhfc3RhdHVzKSk7CisJCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENC KHNrYiksICZyeF9zdGF0dXMsCisJCQkgICAgICAgc2l6ZW9mKHJ4X3N0YXR1cykpOwogCQkJaWVl ZTgwMjExX3J4X2lycXNhZmUoZGV2LCBza2IpOwogCiAJCQlza2IgPSBuZXdfc2tiOworCiAJCQlw cml2LT5yeF9idWZbcHJpdi0+cnhfaWR4XSA9IHNrYjsKLQkJCSooKGRtYV9hZGRyX3QgKikgc2ti LT5jYikgPQotCQkJCXBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYl90YWlsX3BvaW50ZXIo c2tiKSwKLQkJCQkJICAgICAgIE1BWF9SWF9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJ KigoZG1hX2FkZHJfdCAqKSBza2ItPmNiKSA9IG1hcHBpbmc7CiAJCX0KIAogCWRvbmU6Ci0JCWVu dHJ5LT5yeF9idWYgPSBjcHVfdG9fbGUzMigqKChkbWFfYWRkcl90ICopc2tiLT5jYikpOwotCQll bnRyeS0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihSVEw4MThYX1JYX0RFU0NfRkxBR19PV04gfAorCQlj bWRfZGVzYyA9IGVudHJ5OworCQljbWRfZGVzYy0+cnhfYnVmID0gY3B1X3RvX2xlMzIoKigoZG1h X2FkZHJfdCAqKXNrYi0+Y2IpKTsKKwkJY21kX2Rlc2MtPmZsYWdzID0gY3B1X3RvX2xlMzIoUlRM ODE4WF9SWF9ERVNDX0ZMQUdfT1dOIHwKIAkJCQkJICAgTUFYX1JYX1NJWkUpOwogCQlpZiAocHJp di0+cnhfaWR4ID09IDMxKQotCQkJZW50cnktPmZsYWdzIHw9IGNwdV90b19sZTMyKFJUTDgxOFhf UlhfREVTQ19GTEFHX0VPUik7CisJCQljbWRfZGVzYy0+ZmxhZ3MgfD0KKwkJCQljcHVfdG9fbGUz MihSVEw4MThYX1JYX0RFU0NfRkxBR19FT1IpOwogCQlwcml2LT5yeF9pZHggPSAocHJpdi0+cnhf aWR4ICsgMSkgJSAzMjsKIAl9CiB9CkBAIC0xODQsOSArMzYxLDMwIEBAIHN0YXRpYyB2b2lkIHJ0 bDgxODBfaGFuZGxlX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdW5zaWduZWQgaW50IHBy aW8pCiAJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAkJdTMyIGZsYWdzID0gbGUz Ml90b19jcHUoZW50cnktPmZsYWdzKTsKIAotCQlpZiAoZmxhZ3MgJiBSVEw4MThYX1RYX0RFU0Nf RkxBR19PV04pCisKKyNpZiAwCisJCS8qIGl0IHNlZW1zIHRoYXQgcnRsODE4N3NlIHNvbWV0aW1l cyBkb2VzIG5vdCBzZXQKKwkJICogdGhlIE9XTiBmbGFnIG9uIGRlc2NyaXB0b3JzIGV2ZW4gaWYg aXQgaGFzIHByb2Nlc3NlZCB0aGVtLgorCQkgKiBNYXliZSBpdCBoYXBwZW4gd2hlbiB0aGUgVFgg aXMgbm90IGRvbmUgYmVjYXVzZSBvZgorCQkgKiBjZXJ0YWlucyBlcnJvcnMKKwkJICovCisJCWlm IChwcml2LT5jaGlwX2ZhbWlseSA9PSBSVEw4MThYX0NISVBfRkFNSUxZX1JUTDgxODdTRSkgewor CisJCQlpZiAoIShmbGFncyAmIFJUTDgxOFhfVFhfREVTQ19GTEFHX0RNQSkpIHsKKwkJCQlmbGFn cyAmPSB+UlRMODE4WF9UWF9ERVNDX0ZMQUdfT1dOOworCQkJCQllbnRyeS0+ZmxhZ3MgPSBjcHVf dG9fbGUzMihmbGFncyk7CisJCQl9CisKKwkJfQorI2VuZGlmCisKKwkJaWYgKGZsYWdzICYgUlRM ODE4WF9UWF9ERVNDX0ZMQUdfT1dOKSB7CiAJCQlyZXR1cm47CisJCX0KIAorI2lmZGVmIERFQlVH X1BZX1RPT0wKKwkJZW50cnktPnJlc2VydmVkIHw9IDB4ODAwMDsKKyNlbmRpZgogCQlyaW5nLT5p ZHggPSAocmluZy0+aWR4ICsgMSkgJSByaW5nLT5lbnRyaWVzOwogCQlza2IgPSBfX3NrYl9kZXF1 ZXVlKCZyaW5nLT5xdWV1ZSk7CiAJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgbGUzMl90 b19jcHUoZW50cnktPnR4X2J1ZiksCkBAIC0yMDMsMTEgKzQwMSw3NCBAQCBzdGF0aWMgdm9pZCBy dGw4MTgwX2hhbmRsZV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHVuc2lnbmVkIGludCBw cmlvKQogCQlpbmZvLT5zdGF0dXMucmF0ZXNbMV0uaWR4ID0gLTE7CiAKIAkJaWVlZTgwMjExX3R4 X3N0YXR1c19pcnFzYWZlKGRldiwgc2tiKTsKLQkJaWYgKHJpbmctPmVudHJpZXMgLSBza2JfcXVl dWVfbGVuKCZyaW5nLT5xdWV1ZSkgPT0gMikKLQkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGRldiwg cHJpbyk7CisJCWlmIChyaW5nLT5lbnRyaWVzIC0gc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUp ID09IDIpIHsKKwkJCWlmIChwcmlvICE9IGRldi0+cXVldWVzKQorCQkJCWllZWU4MDIxMV93YWtl X3F1ZXVlKGRldiwgcHJpbyk7CisJCQllbHNlCisJCQkJcHJpdi0+YmVhY29uX3F1ZXVlX3N0b3Ag PSAwOworCisJCX0KKwl9CisKK30KKworCitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE4N3NlX2lu dGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAq ZGV2ID0gZGV2X2lkOworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJ dTMyIHJlZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0YXRpYyBpbnQgZGVzY19lcnI7CisK KwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCS8qIE5vdGU6IDMyLWJp dCBpbnRlcnJ1cHQgc3RhdHVzICovCisJcmVnID0gcnRsODE4eF9pb3JlYWQzMihwcml2LCAmcHJp di0+bWFwLT5JTlRfU1RBVFVTX1NFKTsKKwlpZiAodW5saWtlbHkocmVnID09IDB4RkZGRkZGRkYp KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0 dXJuIElSUV9IQU5ETEVEOwogCX0KKworCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5t YXAtPklOVF9TVEFUVVNfU0UsIHJlZyk7CisKKwlpZiAocmVnICYgSU1SX1RJTUVPVVQxKQorCQly dGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5JTlRfVElNRU9VVCwgMCk7CisKKwlp ZiAocmVnICYgKElNUl9UQkRPSyB8IElNUl9UQkRFUikpCisJCXJ0bDgxODBfaGFuZGxlX3R4KGRl diwgNCk7CisjaWYgMAorCWlmIChyZWcgJiBJTVJfVE1HRE9LKQorCQlydGw4MTgwX2hhbmRsZV90 eChkZXYsIDApOworCisJaWYgKHJlZyAmIChJTVJfVEhQRE9LIHwgSU1SX1RIUERFUikpCisJCXJ0 bDgxODBfaGFuZGxlX3R4KGRldiwgMSk7CisjZW5kaWYKKwlpZiAocmVnICYgKElNUl9UVk9ET0sg fCBJTVJfVFZPREVSKSkKKwkJcnRsODE4MF9oYW5kbGVfdHgoZGV2LCAwKTsKKworCWlmIChyZWcg JiAoSU1SX1RWSURPSyB8IElNUl9UVklERVIpKQorCQlydGw4MTgwX2hhbmRsZV90eChkZXYsIDEp OworCisJaWYgKHJlZyAmIChJTVJfVEJFRE9LIHwgSU1SX1RCRURFUikpCisJCXJ0bDgxODBfaGFu ZGxlX3R4KGRldiwgMik7CisKKwlpZiAocmVnICYgKElNUl9UQktET0sgfCBJTVJfVEJLREVSKSkK KwkJcnRsODE4MF9oYW5kbGVfdHgoZGV2LCAzKTsKKworCWlmIChyZWcgJiAoSU1SX1JPSyB8IElN Ul9SRVIgfCBSVEw4MThYX0lOVF9TRV9SWF9EVSB8IElNUl9SUU9TT0spKQorCQlydGw4MTgwX2hh bmRsZV9yeChkZXYpOworCS8qIFRoZSBpbnRlcmZhY2Ugc29tZXRpbWVzIGdlbmVyYXRlcyBzZXZl cmFsIFJYIERNQSBkZXNjcmlwdG9yIGVycm9ycworCSAqIGF0IHN0YXJ0dXAuIERvIG5vdCByZXBv cnQgdGhlc2UuCisJICovCisJaWYgKChyZWcgJiBSVEw4MThYX0lOVF9TRV9SWF9EVSkgJiYgZGVz Y19lcnIrKyA+IDIpCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9FUlIg Ik5vIFJYIERNQSBEZXNjcmlwdG9yIGF2YWlsXG4iKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKKwogc3Rh dGljIGlycXJldHVybl90IHJ0bDgxODBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkK IHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBkZXZfaWQ7CkBAIC0yMjQsMTQgKzQ4NSwx NCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE4MF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAq ZGV2X2lkKQogCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPklOVF9TVEFUVVMs IHJlZyk7CiAKIAlpZiAocmVnICYgKFJUTDgxOFhfSU5UX1RYQl9PSyB8IFJUTDgxOFhfSU5UX1RY Ql9FUlIpKQotCQlydGw4MTgwX2hhbmRsZV90eChkZXYsIDMpOwotCisJCXJ0bDgxODBfaGFuZGxl X3R4KGRldiwgMSk7CisjaWYgMAogCWlmIChyZWcgJiAoUlRMODE4WF9JTlRfVFhIX09LIHwgUlRM ODE4WF9JTlRfVFhIX0VSUikpCi0JCXJ0bDgxODBfaGFuZGxlX3R4KGRldiwgMik7CisJCXJ0bDgx ODBfaGFuZGxlX3R4KGRldiwgMCk7CiAKIAlpZiAocmVnICYgKFJUTDgxOFhfSU5UX1RYTl9PSyB8 IFJUTDgxOFhfSU5UX1RYTl9FUlIpKQogCQlydGw4MTgwX2hhbmRsZV90eChkZXYsIDEpOwotCisj ZW5kaWYKIAlpZiAocmVnICYgKFJUTDgxOFhfSU5UX1RYTF9PSyB8IFJUTDgxOFhfSU5UX1RYTF9F UlIpKQogCQlydGw4MTgwX2hhbmRsZV90eChkZXYsIDApOwogCkBAIC0yNDMsNiArNTA0LDcgQEAg c3RhdGljIGlycXJldHVybl90IHJ0bDgxODBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9p ZCkKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKKwogc3RhdGljIHZvaWQgcnRsODE4MF90eChz dHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2Nv bnRyb2wgKmNvbnRyb2wsCiAJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMjUzLDc5 ICs1MTUsMTg5IEBAIHN0YXRpYyB2b2lkIHJ0bDgxODBfdHgoc3RydWN0IGllZWU4MDIxMV9odyAq ZGV2LAogCXN0cnVjdCBydGw4MTgwX3R4X3JpbmcgKnJpbmc7CiAJc3RydWN0IHJ0bDgxODBfdHhf ZGVzYyAqZW50cnk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgaWR4LCBw cmlvOworCXVuc2lnbmVkIGludCBpZHgsIHByaW8sIGh3X3ByaW87CisJdTggbm90X3VzZWRfbWFz azsKIAlkbWFfYWRkcl90IG1hcHBpbmc7CiAJdTMyIHR4X2ZsYWdzOwogCXU4IHJjX2ZsYWdzOwog CXUxNiBwbGNwX2xlbiA9IDA7CiAJX19sZTE2IHJ0c19kdXJhdGlvbiA9IDA7CisJLyogZG8gYXJp dGhtZXRpYyBhbmQgdGhlbiBjb252ZXJ0IHRvIGxlMTYgKi8KKwl1MTYgZnJhbWVfZHVyYXRpb24g PSAwOworCisJV0FSTl9PTihza2ItPmxlbiA+IDB4ZmZmKTsKIAogCXByaW8gPSBza2JfZ2V0X3F1 ZXVlX21hcHBpbmcoc2tiKTsKKwogCXJpbmcgPSAmcHJpdi0+dHhfcmluZ1twcmlvXTsKIAogCW1h cHBpbmcgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2ItPmRhdGEsCiAJCQkJIHNrYi0+ bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAorCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocHJp di0+cGRldiwgbWFwcGluZykpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCWRldl9lcnIoJnByaXYt PnBkZXYtPmRldiwgIlRYIERNQSBtYXBwaW5nIGVycm9yXG4iKTsKKwkJcmV0dXJuOworCisJfQor CisKIAl0eF9mbGFncyA9IFJUTDgxOFhfVFhfREVTQ19GTEFHX09XTiB8IFJUTDgxOFhfVFhfREVT Q19GTEFHX0ZTIHwKIAkJICAgUlRMODE4WF9UWF9ERVNDX0ZMQUdfTFMgfAogCQkgICAoaWVlZTgw MjExX2dldF90eF9yYXRlKGRldiwgaW5mbyktPmh3X3ZhbHVlIDw8IDI0KSB8CiAJCSAgIHNrYi0+ bGVuOwogCi0JaWYgKHByaXYtPnI4MTg1KQorCWlmIChwcml2LT5jaGlwX2ZhbWlseSAhPSBSVEw4 MThYX0NISVBfRkFNSUxZX1JUTDgxODApIHsKIAkJdHhfZmxhZ3MgfD0gUlRMODE4WF9UWF9ERVND X0ZMQUdfRE1BIHwKIAkJCSAgICBSVEw4MThYX1RYX0RFU0NfRkxBR19OT19FTkM7CisJfQogCiAJ cmNfZmxhZ3MgPSBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzOworCisKIAlpZiAocmNfZmxh Z3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpIHsKIAkJdHhfZmxhZ3MgfD0gUlRMODE4 WF9UWF9ERVNDX0ZMQUdfUlRTOwogCQl0eF9mbGFncyB8PSBpZWVlODAyMTFfZ2V0X3J0c19jdHNf cmF0ZShkZXYsIGluZm8pLT5od192YWx1ZSA8PCAxOTsKKwogCX0gZWxzZSBpZiAocmNfZmxhZ3Mg JiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKSB7CiAJCXR4X2ZsYWdzIHw9IFJUTDgx OFhfVFhfREVTQ19GTEFHX0NUUzsKIAkJdHhfZmxhZ3MgfD0gaWVlZTgwMjExX2dldF9ydHNfY3Rz X3JhdGUoZGV2LCBpbmZvKS0+aHdfdmFsdWUgPDwgMTk7CisKIAl9CiAKIAlpZiAocmNfZmxhZ3Mg JiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCiAJCXJ0c19kdXJhdGlvbiA9IGllZWU4MDIx MV9ydHNfZHVyYXRpb24oZGV2LCBwcml2LT52aWYsIHNrYi0+bGVuLAogCQkJCQkJICAgICAgaW5m byk7CiAKLQlpZiAoIXByaXYtPnI4MTg1KSB7CisKKwlpZiAocHJpdi0+Y2hpcF9mYW1pbHkgPT0g UlRMODE4WF9DSElQX0ZBTUlMWV9SVEw4MTgwKSB7CiAJCXVuc2lnbmVkIGludCByZW1haW5kZXI7 CiAKIAkJcGxjcF9sZW4gPSBESVZfUk9VTkRfVVAoMTYgKiAoc2tiLT5sZW4gKyA0KSwKLQkJCQko aWVlZTgwMjExX2dldF90eF9yYXRlKGRldiwgaW5mbyktPmJpdHJhdGUgKiAyKSAvIDEwKTsKKwkJ CShpZWVlODAyMTFfZ2V0X3R4X3JhdGUoZGV2LCBpbmZvKS0+Yml0cmF0ZSAqIDIpIC8gMTApOwog CQlyZW1haW5kZXIgPSAoMTYgKiAoc2tiLT5sZW4gKyA0KSkgJQogCQkJICAgICgoaWVlZTgwMjEx X2dldF90eF9yYXRlKGRldiwgaW5mbyktPmJpdHJhdGUgKiAyKSAvIDEwKTsKIAkJaWYgKHJlbWFp bmRlciA8PSA2KQogCQkJcGxjcF9sZW4gfD0gMSA8PCAxNTsKIAl9CiAKKwlpZiAocHJpdi0+Y2hp cF9mYW1pbHkgPT0gUlRMODE4WF9DSElQX0ZBTUlMWV9SVEw4MTg3U0UpIHsKKworCQkvKiBTSUZT IHRpbWUgKHJlcXVpcmVkIGJ5IEhXKSBpcyBhbHJlYWR5IGluY2x1ZGVkIGJ5CisJCSAqIGllZWU4 MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uCisJCSAqLworCQlmcmFtZV9kdXJhdGlvbiA9ICBw cml2LT5hY2tfdGltZSArIGxlMTZfdG9fY3B1KAorCQkJaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVf ZHVyYXRpb24oZGV2LCBwcml2LT52aWYsCisJCQkJCUlFRUU4MDIxMV9CQU5EXzJHSFosIHNrYi0+ bGVuLAorCQkJCQlpZWVlODAyMTFfZ2V0X3R4X3JhdGUoZGV2LCBpbmZvKSkpOworCX0KKwogCXNw aW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoaW5mby0+ZmxhZ3Mg JiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpIHsKKwogCQlpZiAoaW5mby0+ZmxhZ3MgJiBJ RUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UKQogCQkJcHJpdi0+c2Vxbm8gKz0gMHgxMDsK IAkJaGRyLT5zZXFfY3RybCAmPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKTsKIAkJ aGRyLT5zZXFfY3RybCB8PSBjcHVfdG9fbGUxNihwcml2LT5zZXFubyk7CiAJfQogCisKIAlpZHgg PSAocmluZy0+aWR4ICsgc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSAlIHJpbmctPmVudHJp ZXM7CiAJZW50cnkgPSAmcmluZy0+ZGVzY1tpZHhdOwogCisjaWZkZWYgREVCVUdfUFlfVE9PTAor CWVudHJ5LT5yZXNlcnZlZCA9IDB4MGZmZiAmIHByaXYtPnNlcW5vOworI2VuZGlmCisKKwlpZiAo cHJpdi0+Y2hpcF9mYW1pbHkgPT0gUlRMODE4WF9DSElQX0ZBTUlMWV9SVEw4MTg3U0UpIHsKKwkJ ZW50cnktPmZyYW1lX2R1cmF0aW9uID0gY3B1X3RvX2xlMTYoZnJhbWVfZHVyYXRpb24pOworCQll bnRyeS0+ZnJhbWVfbGVuX3NlID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOworCisJCS8qIHRwYyBw b2xhcml0eSAqLworCQllbnRyeS0+ZmxhZ3MzID0gY3B1X3RvX2xlMTYoMTw8NCk7CisJfSBlbHNl IHsKKwkJZW50cnktPmZyYW1lX2xlbiA9IGNwdV90b19sZTMyKHNrYi0+bGVuKTsKKwl9CisKIAll bnRyeS0+cnRzX2R1cmF0aW9uID0gcnRzX2R1cmF0aW9uOwogCWVudHJ5LT5wbGNwX2xlbiA9IGNw dV90b19sZTE2KHBsY3BfbGVuKTsKIAllbnRyeS0+dHhfYnVmID0gY3B1X3RvX2xlMzIobWFwcGlu Zyk7Ci0JZW50cnktPmZyYW1lX2xlbiA9IGNwdV90b19sZTMyKHNrYi0+bGVuKTsKKwogCWVudHJ5 LT5mbGFnczIgPSBpbmZvLT5jb250cm9sLnJhdGVzWzFdLmlkeCA+PSAwID8KLQkJaWVlZTgwMjEx X2dldF9hbHRfcmV0cnlfcmF0ZShkZXYsIGluZm8sIDApLT5iaXRyYXRlIDw8IDQgOiAwOworCQlp ZWVlODAyMTFfZ2V0X2FsdF9yZXRyeV9yYXRlKGRldiwgaW5mbywgMCktPmh3X3ZhbHVlIDw8IDQg OiAwOworCiAJZW50cnktPnJldHJ5X2xpbWl0ID0gaW5mby0+Y29udHJvbC5yYXRlc1swXS5jb3Vu dDsKKworCS8qIG11c3QgYmUgd3JpdHRlbiBsYXN0ICovCiAJZW50cnktPmZsYWdzID0gY3B1X3Rv X2xlMzIodHhfZmxhZ3MpOworCiAJX19za2JfcXVldWVfdGFpbCgmcmluZy0+cXVldWUsIHNrYik7 Ci0JaWYgKHJpbmctPmVudHJpZXMgLSBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkgPCAyKQot CQlpZWVlODAyMTFfc3RvcF9xdWV1ZShkZXYsIHByaW8pOworCisJaWYgKHJpbmctPmVudHJpZXMg LSBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkgPCAyKSB7CisJCWlmIChwcmlvICE9IGRldi0+ cXVldWVzKQorCQkJaWVlZTgwMjExX3N0b3BfcXVldWUoZGV2LCBwcmlvKTsKKwkJZWxzZQorCQkJ cHJpdi0+YmVhY29uX3F1ZXVlX3N0b3AgPSAxOworCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYt Pm1hcC0+VFhfRE1BX1BPTExJTkcsICgxIDw8IChwcmlvICsgNCkpKTsKKwlpZiAocHJpdi0+Y2hp cF9mYW1pbHkgPT0gUlRMODE4WF9DSElQX0ZBTUlMWV9SVEw4MTg3U0UpIHsKKworCQlod19wcmlv ID0gcnRsODE4N3NlX3F1ZXVlc19tYXBbcHJpb107CisJCS8qIFRQUG9sbFN0b3AgcmVnIGlzIHVz ZWQgKi8KKwkJbm90X3VzZWRfbWFzayA9IDA7CisJfSBlbHNlIHsKKwkJaHdfcHJpbyA9IHJ0bDgx ODBfcXVldWVzX21hcFtwcmlvXTsKKwkJbm90X3VzZWRfbWFzayA9ICgxPDwxKSB8ICgxPDwyKTsK Kwl9CisKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfRE1BX1BPTExJ TkcsCisJCQkgKDEgPDwgaHdfcHJpbykgfCBub3RfdXNlZF9tYXNrKTsKKworfQorCisKK3N0YXRp YyB2b2lkIHJ0bDgxODBfc2V0X2FuYXBhcmFtMyhzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2LCB1 MTYgYW5hcGFyYW0zKQoreworCXU4IHJlZzsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnBy aXYtPm1hcC0+RUVQUk9NX0NNRCwKKwkJCSBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKKwor CXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczKTsKKwlydGw4 MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsCisJCSByZWcgfCBSVEw4MThY X0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOworCisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnBy aXYtPm1hcC0+QU5BUEFSQU0zLCBhbmFwYXJhbTMpOworCisJcnRsODE4eF9pb3dyaXRlOChwcml2 LCAmcHJpdi0+bWFwLT5DT05GSUczLAorCQkgcmVnICYgflJUTDgxOFhfQ09ORklHM19BTkFQQVJB TV9XUklURSk7CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9D TUQsCisJCQkgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7Cit9CisKK3ZvaWQgcnRsODE4MF9z ZXRfYW5hcGFyYW0yKHN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYsIHUzMiBhbmFwYXJhbTIpCit7 CisJdTggcmVnOworCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01f Q01ELAorCQkJIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOworCisJcmVnID0gcnRsODE4eF9p b3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMpOworCXJ0bDgxOHhfaW93cml0ZTgocHJp diwgJnByaXYtPm1hcC0+Q09ORklHMywKKwkJIHJlZyB8IFJUTDgxOFhfQ09ORklHM19BTkFQQVJB TV9XUklURSk7CisKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJB TTIsIGFuYXBhcmFtMik7CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNP TkZJRzMsCisJCSByZWcgJiB+UlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFKTsKKworCXJ0 bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwKKwkJCSBSVEw4MThY X0VFUFJPTV9DTURfTk9STUFMKTsKIH0KIAogdm9pZCBydGw4MTgwX3NldF9hbmFwYXJhbShzdHJ1 Y3QgcnRsODE4MF9wcml2ICpwcml2LCB1MzIgYW5hcGFyYW0pCkBAIC0zMzMsMzEgKzcwNSwzNTYg QEAgdm9pZCBydGw4MTgwX3NldF9hbmFwYXJhbShzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2LCB1 MzIgYW5hcGFyYW0pCiAJdTggcmVnOwogCiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+ bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKKwogCXJlZyA9IHJ0 bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczKTsKIAlydGw4MTh4X2lvd3Jp dGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsCiAJCSByZWcgfCBSVEw4MThYX0NPTkZJRzNf QU5BUEFSQU1fV1JJVEUpOworCiAJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+ QU5BUEFSQU0sIGFuYXBhcmFtKTsKKwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1h cC0+Q09ORklHMywKIAkJIHJlZyAmIH5SVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOwot CXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9F RVBST01fQ01EX05PUk1BTCk7CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAt PkVFUFJPTV9DTUQsCisJCQkgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7CiB9CiAKLXN0YXRp YyBpbnQgcnRsODE4MF9pbml0X2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKKworc3RhdGlj IHZvaWQgcnRsODE4N3NlX21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQorewor CXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKworCXJ0bDgxOHhfaW93 cml0ZTMyKHByaXYsIFJFR19BRERSNCgweDFGMCksIDApOworCXJ0bDgxOHhfaW9yZWFkMzIocHJp diwgUkVHX0FERFI0KDB4MUYwKSk7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgUkVHX0FERFI0 KDB4MUY0KSwgMCk7CisJcnRsODE4eF9pb3JlYWQzMihwcml2LCBSRUdfQUREUjQoMHgxRjQpKTsK KwlydGw4MTh4X2lvd3JpdGU4KHByaXYsIFJFR19BRERSMSgweDFGOCksIDApOworCXJ0bDgxOHhf aW9yZWFkOChwcml2LCBSRUdfQUREUjEoMHgxRjgpKTsKKwkvKiBFbmFibGUgREExMCBUWCBwb3dl ciBzYXZpbmcgKi8KKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlBIWV9QUiwK KwkJCSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+UEhZX1BSKSB8IDB4MDQpOwor CS8qIFBvd2VyICovCisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgUElfREFUQV9SRUcsIDB4MTAw MCk7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgU0lfREFUQV9SRUcsIDB4MTAwMCk7CisJLyog QUZFIC0gZGVmYXVsdCB0byBwb3dlciBPTiAqLworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsIFJF R19BRERSMigweDM3MCksIDB4MDU2MCk7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgUkVHX0FE RFIyKDB4MzcyKSwgMHgwNTYwKTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCBSRUdfQUREUjIo MHgzNzQpLCAweDBEQTQpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsIFJFR19BRERSMigweDM3 NiksIDB4MERBNCk7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgUkVHX0FERFIyKDB4Mzc4KSwg MHgwNTYwKTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCBSRUdfQUREUjIoMHgzN0EpLCAweDA1 NjApOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsIFJFR19BRERSMigweDM3QyksIDB4MDBFQyk7 CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgUkVHX0FERFIyKDB4MzdFKSwgMHgwMEVDKTsKKwly dGw4MTh4X2lvd3JpdGU4KHByaXYsIFJFR19BRERSMSgweDI0RSksIDB4MDEpOworfQorCisKKy8q IFRPRE8gdXNlIHRoaXMgcmVmZXJlbmNlIGNvZGUgZm9yIEJCL0FGRSBwb3dlciBzdGF0ZSBoYW5k bGluZyAqLworI2lmIDAKK3N0YXRpYyBib29sIHJ0bDgxODdzZV9zZXRfemVicmFfcmZfcG93ZXJf c3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgIGVudW0gcnRsODE4N3NlX3Bv d2VyX3N0YXRlIHN0YXRlKQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnBy aXY7CisJdTggY21kcmVnOworCXU4IGNvbmZpZzM7CisJdTggdG1wOworCWludCBpOworCWJvb2wg dHVybl9vZmYgPSB0cnVlOworCisKKwkvKiB0aGlzIGVuYWJsZXMgYW5hcGFyYW1zLgorCSAqIGhl cmUgcG9ydGlvbnMgYXJlIHdyaXR0ZW4gaW4gYnl0ZXMgYWNjZXNzCisJICogVE9ETzogdW5pZm9y bSBhbGwgdGhlIGFuYXBhcm1hcyAgbG9naWMvbmFtZXMKKwkgKi8KKwljbWRyZWcgPSBydGw4MTh4 X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7CisJY29uZmlnMyA9IHJ0bDgx OHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczKTsKKwlydGw4MTh4X2lvd3JpdGU4 KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsIGNvbmZpZzMgfCAweDQwKTsKKwlzd2l0Y2ggKHN0 YXRlKSB7CisJY2FzZSAgUlRMODE4N1NFX1BPV0VSX09OOgorCisJCXJ0bDgxOHhfaW93cml0ZTE2 KHByaXYsIFJFR19BRERSMigweDM3QyksIDB4RUMpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYs IFJFR19BRERSMSgweDA1NCksIDB4MDApOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsIFJFR19B RERSMSgweDA2MiksIDB4MDApOworCisJCS8qIHR1cm4gb24gUkYgKi8KKwkJcnRsODE4N3NlX3Jm X3dyaXRlcmVnKGRldiwgMHgwMCwgMHgwMDlGKTsgdWRlbGF5KDUwMCk7CisJCXJ0bDgxODdzZV9y Zl93cml0ZXJlZyhkZXYsIDB4MDQsIDB4MDk3Mik7IHVkZWxheSg1MDApOworCQkvKiB0dXJuIG9u IFJGIGFnYWluICovCisJCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4MDAsIDB4MDA5Rik7 IHVkZWxheSg1MDApOworCQlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAweDA0LCAweDA5NzIp OyB1ZGVsYXkoNTAwKTsKKworCQkvKiB0dXJuIG9uIEJCICovCisJCXJ0bDgyMjVfd3JpdGVfcGh5 X29mZG0oZGV2LCAweDEwLCAweDQwKTsKKwkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4 MTIsIDB4NDApOworCisJCS8qIGF2b2lkIHBvd2VyIGRvd24gYXQgaW5pdCB0aW1lICovCisJCXJ0 bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHNCwgcHJpdi0+cmZfcHJvZ190 eXBlKTsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCBSRUdfQUREUjEoMHgyNEUpLCBydGw4MTh4 X2lvcmVhZDgocHJpdiwKKwkJCQkgUkVHX0FERFIxKDB4MjRFKSkgJiB+KDB4NjApKTsKKwkJYnJl YWs7CisJY2FzZSBSVEw4MTg3U0VfUE9XRVJfU0xFRVA6CisJCS8qIFRPRE86IFRoaXMgcm91dGlu ZSBoYXMgc29tZSBsb2dpYyB0aGF0IGlzIG5vdCB1bmRlcnN0b29kLgorCQkgKiBGb3Igbm93LCBp dCBpcyBkb2luZyB3aGF0IHRoZSB2ZW5kb3IgZHJpdmVyIGRvZXMsIGJ1dAorCQkgKiBwcm9iYWJs eSBzaG91bGQgYmUgZml4ZWQuCisJCSAqLworCQkvKiB0dXJuIG9mZiBCQiAqLworCQlydGw4MjI1 X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxMCwgMHg0MCk7CisJCXJ0bDgyMjVfd3JpdGVfcGh5X29m ZG0oZGV2LCAweDEyLCAweDQwKTsKKworCisJCS8qIHR1cm4gb2ZmIFJGICovCisJCXJ0bDgxODdz ZV9yZl93cml0ZXJlZyhkZXYsIDB4MDQsIDB4MDAwMCk7CisJCXJ0bDgxODdzZV9yZl93cml0ZXJl ZyhkZXYsIDB4MDAsIDB4MDAwMCk7CisKKwkJLyogVHVybiBvZmYgQUZFIGV4Y2VwdCBQTEwgKi8K KwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCBSRUdfQUREUjEoMHg2MiksIDB4RkYpOworCQlydGw4 MTh4X2lvd3JpdGU4KHByaXYsIFJFR19BRERSMSgweDU0KSwgMHhFQyk7CisJCXRtcCA9IHJ0bDgx OHhfaW9yZWFkOChwcml2LCBSRUdfQUREUjEoMHgyNEYpKTsKKwkJaWYgKHRtcCA9PSAweDAxIHx8 IHRtcCA9PSAweDA5KSB7CisJCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsIFJFR19BRERSMSgweDI0 RSksCisJCQkJICAgcnRsODE4eF9pb3JlYWQ4KHByaXYsIFJFR19BRERSMSgweDI0RSkpIHwKKwkJ CQkgICAweDYwKTsKKwkJCS8qIFR1cm4gb2ZmIEFGRSBQTEwgKi8KKwkJCXJ0bDgxOHhfaW93cml0 ZTgocHJpdiwgUkVHX0FERFIxKDB4NTQpLCAweEZDKTsKKwkJCXJ0bDgxOHhfaW93cml0ZTE2KHBy aXYsIFJFR19BRERSMigweDM3QyksIDB4MDBGQyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBSVEw4 MTg3U0VfUE9XRVJfT0ZGOgorCQkvKiB0dXJuIG9mZiBCQiBSWElRIG1hdHJpeCB0byBjdXQgb2Zm IHJ4IHNpZ25hbCAqLworCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxMCwgMHgwMCk7 CisJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDEyLCAweDAwKTsKKworCisJCS8qIHR1 cm4gb2ZmIFJGICovCisJCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4MDQsIDB4MDAwMCk7 CisJCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4MDAsIDB4MDAwMCk7CisKKwkJLyogdHVy biBvZmYgQUZFIGV4Y2VwdCBQTEwgKi8KKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCBSRUdfQURE UjEoMHg2MiksIDB4ZmYpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsIFJFR19BRERSMSgweDU0 KSwgMHhlYyk7CisJCW1zbGVlcCgxKTsKKwkJaSA9IDA7CisJCWZvciAoOzspIHsKKwkJCXRtcCA9 IHJ0bDgxOHhfaW9yZWFkOChwcml2LCBSRUdfQUREUjEoMHgyNEYpKTsKKwkJCWlmICgodG1wID09 IDEpIHx8ICh0bXAgPT0gMHgwOSkpIHsKKwkJCQl0dXJuX29mZiA9IHRydWU7CisJCQkJYnJlYWs7 CisJCQl9IGVsc2UgeworCQkJCXVkZWxheSgxMCk7CisJCQkJaWYgKGkrKyA+IDUpIHsKKwkJCQkJ dHVybl9vZmYgPSBmYWxzZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCWlmICh0 dXJuX29mZikgeworCQkJLyogdHVybiBvZmYgQkIgKi8KKwkJCXJ0bDgxOHhfaW93cml0ZTgocHJp diwgUkVHX0FERFIxKDB4MjRFKSwKKwkJCQkJcnRsODE4eF9pb3JlYWQ4KHByaXYsIFJFR19BRERS MSgweDI0RSkpIHwKKwkJCQkJMHg2MCk7CisJCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsIFJFR19B RERSMSgweDU0KSwgMHhGQyk7CisJCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCBSRUdfQUREUjIo MHgzN0MpLCAweDAwRkMpOworCQl9CisJCWJyZWFrOworCX0KKwlydGw4MTh4X2lvd3JpdGU4KHBy aXYsICZwcml2LT5tYXAtPkNPTkZJRzMsIGNvbmZpZzMgJiB+KDB4NDApKTsKKwlydGw4MTh4X2lv d3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIGNtZHJlZyAmIH4oMHhDMCkpOwor CisJcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworCisKK3N0YXRpYyB2b2lkIHJ0bDgxODdzZV9z ZXRfYW50ZW5uYV9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1OCBkZWZfYW50LAor CQkJCQkgYm9vbCB1c2VfZGl2ZXIpCit7CisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRl di0+cHJpdjsKKworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MEMsIDB4MDkpOworCWlm ICh1c2VfZGl2ZXIpIHsKKwkJaWYgKGRlZl9hbnQgPT0gMSkgeworCQkJcnRsODE4eF9pb3dyaXRl OChwcml2LCAmcHJpdi0+bWFwLT5UWF9BTlRFTk5BLCAweDAwKTsKKwkJCXJ0bDgyMjVfd3JpdGVf cGh5X2NjayhkZXYsIDB4MTEsIDB4QkIpOworCQkJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwg MHgwMSwgMHhDNyk7CisJCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwRCwgMHg1NCk7 CisJCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxOCwgMHhCMik7CisJCX0gZWxzZSB7 IC8qIG1haW4gYW50ZW5uYSAqLworCQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFw LT5UWF9BTlRFTk5BLCAweDAzKTsKKwkJCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTEs IDB4OUIpOworCQkJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgwMSwgMHhDNyk7CisJCQly dGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwRCwgMHg1Qyk7CisJCQlydGw4MjI1X3dyaXRl X3BoeV9vZmRtKGRldiwgMHgxOCwgMHhCMik7CisJCX0KKwl9IGVsc2UgeyAvKiBkaXNhYmxlIGFu dGVubmEgZGl2ZXJzaXR5ICovCisJCWlmIChkZWZfYW50ID09IDEpIHsKKwkJCXJ0bDgxOHhfaW93 cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfQU5URU5OQSwgMHgwMCk7CisJCQlydGw4MjI1X3dy aXRlX3BoeV9jY2soZGV2LCAweDExLCAweEJCKTsKKwkJCXJ0bDgyMjVfd3JpdGVfcGh5X2Njayhk ZXYsIDB4MDEsIDB4NDcpOworCQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MEQsIDB4 NTQpOworCQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTgsIDB4MzIpOworCQl9IGVs c2UgeyAvKiBtYWluIGFudGVubmEgKi8KKwkJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYt Pm1hcC0+VFhfQU5URU5OQSwgMHgwMyk7CisJCQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAw eDExLCAweDlCKTsKKwkJCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDEsIDB4NDcpOwor CQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MEQsIDB4NUMpOworCQkJcnRsODIyNV93 cml0ZV9waHlfb2ZkbShkZXYsIDB4MTgsIDB4MzIpOworCQl9CisJfQorCS8qIHByaXYtPmN1cnJf YW50ID0gZGVmX2FudDsgKi8KK30KKworI2lmIDAKK3N0YXRpYyB2b2lkIHJ0bDgxODdzZV9wb3dl cl90cmFja2luZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHJ0bDgxODBf cHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1OCB0bXAgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwg UkVHX0FERFIxKDB4MjM4KSk7CisJdTggY3VycmVudF90ZW1wOworCWludCBpOworCWNoYXIgY2Nr X2lkeCwgb2ZkbV9pZHg7CisKKwljdXJyZW50X3RlbXAgPSAodG1wICYgMHhGMCkgPj4gNDsKKwlj dXJyZW50X3RlbXAgPSAoY3VycmVudF90ZW1wID4gMHgwQykgPyBjdXJyZW50X3RlbXAgOiAweDBD OworCWlmIChjdXJyZW50X3RlbXAgIT0gcHJpdi0+dGhlcm1hbF9tZXRlcl92YWwpIHsKKwkJZm9y IChpID0gMTsgaSA8IDE1OyBpKyspIHsKKwkJCWNja19pZHggPSBwcml2LT5jaGFubmVsc1tpIC0g MV0uaHdfdmFsdWUgJiAweEZGOworCQkJb2ZkbV9pZHggPSAocHJpdi0+Y2hhbm5lbHNbaSAtIDFd Lmh3X3ZhbHVlKSA+PiA4OworCQkJY2NrX2lkeCArPSAoY3VycmVudF90ZW1wIC0gcHJpdi0+dGhl cm1hbF9tZXRlcl92YWwpICogMjsKKwkJCW9mZG1faWR4ICs9IChjdXJyZW50X3RlbXAgLSBwcml2 LT50aGVybWFsX21ldGVyX3ZhbCkgKiAyOworCQkJY2NrX2lkeCA9IGNsYW1wKCh1OCljY2tfaWR4 LCAodTgpMCwgKHU4KTM1KTsKKwkJCW9mZG1faWR4ID0gY2xhbXAoKHU4KW9mZG1faWR4LCAodTgp MCwgKHU4KTM1KTsKKwkJCXByaXYtPmNoYW5uZWxzW2kgLSAxXS5od192YWx1ZSA9IG9mZG1faWR4 IDw8IDggfCBjY2tfaWR4OworCQl9CisJCXJ0bDgyMjVzZV9yZl9zZXRfdHhfcG93ZXIoZGV2LCBw cml2LT5jdXJfY2hhbik7CisJfQorCXByaXYtPnRoZXJtYWxfbWV0ZXJfdmFsID0gY3VycmVudF90 ZW1wOworfQorCisKK3N0YXRpYyB2b2lkIHJ0bDgxODdzZV9pbml0X3Bvd2VyX3RyYWNraW5nKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAw eDAyLCBydGw4MTg3c2VfcmZfcmVhZHJlZyhkZXYsIDB4MDIpIHwgMik7CisJbWRlbGF5KDEpOwor fQorCisjZW5kaWYKKworCisKK3N0YXRpYyB2b2lkIHJ0bDgxODBfaW50X2VuYWJsZShzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+ cHJpdjsKKworCWlmIChwcml2LT5jaGlwX2ZhbWlseSA9PSBSVEw4MThYX0NISVBfRkFNSUxZX1JU TDgxODdTRSkgeworCisJCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPklNUiwg SU1SX1RNR0RPSyB8CisJCQkgIElNUl9UQkRFUiB8IElNUl9USFBERVIgfAorCQkJICBJTVJfVEhQ REVSIHwgSU1SX1RIUERPSyB8CisJCQkgIElNUl9UVk9ERVIgfCBJTVJfVFZPRE9LIHwKKwkJCSAg SU1SX1RWSURFUiB8IElNUl9UVklET0sgfAorCQkJICBJTVJfVEJFREVSIHwgSU1SX1RCRURPSyB8 CisJCQkgIElNUl9UQktERVIgfCBJTVJfVEJLRE9LIHwKKwkJCSAgSU1SX1JEVSB8IElNUl9SRVIg fAorCQkJICBJTVJfUk9LIHwgSU1SX1JRT1NPSyk7CisJfSBlbHNlIHsKKworCQlydGw4MTh4X2lv d3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5JTlRfTUFTSywgMHhGRkZGKTsKKwl9CisKK30KKwor c3RhdGljIHZvaWQgcnRsODE4MF9pbnRfZGlzYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYp CiB7CiAJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKworCWlmIChwcml2 LT5jaGlwX2ZhbWlseSA9PSBSVEw4MThYX0NISVBfRkFNSUxZX1JUTDgxODdTRSkgeworCQlydGw4 MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5JTVIsIDApOworCX0gZWxzZSB7CisJCXJ0 bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPklOVF9NQVNLLCAwKTsKKwl9CisKK30K KworCitzdGF0aWMgdm9pZCBydGw4MTgwX2NvbmZfYmFzaWNfcmF0ZXMoc3RydWN0IGllZWU4MDIx MV9odyAqZGV2LAorCQkJICAgIHUzMiByYXRlc19tYXNrKQoreworCXN0cnVjdCBydGw4MTgwX3By aXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwl1OCBtYXgsIG1pbjsKIAl1MTYgcmVnOwogCisJbWF4 ID0gZmxzKHJhdGVzX21hc2spOworCW1pbiA9IGZmcyhyYXRlc19tYXNrKTsKKworCXN3aXRjaCAo cHJpdi0+Y2hpcF9mYW1pbHkpIHsKKworCWNhc2UgUlRMODE4WF9DSElQX0ZBTUlMWV9SVEw4MTgw OgorCisJCS8qIGluIDgxODAgdGhpcyBpcyBOT1QgYSBCSVRNQVAgKi8KKwkJcmVnID0gcnRsODE4 eF9pb3JlYWQxNihwcml2LCAmcHJpdi0+bWFwLT5CUlNSKTsKKwkJcmVnICY9IH4zOworCQlyZWcg fD0gbWF4OworCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5CUlNSLCByZWcp OworCisJCWJyZWFrOworCisJY2FzZSBSVEw4MThYX0NISVBfRkFNSUxZX1JUTDgxODU6CisJCS8q IGluIDgxODUgdGhpcyBpcyBhIEJJVE1BUCAqLworCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAm cHJpdi0+bWFwLT5CUlNSLCByYXRlc19tYXNrKTsKKworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYs ICZwcml2LT5tYXAtPlJFU1BfUkFURSwgKG1heCA8PCA0KSB8IG1pbik7CisJCWJyZWFrOworCisJ Y2FzZSBSVEw4MThYX0NISVBfRkFNSUxZX1JUTDgxODdTRToKKwkJLyogaW4gODE4N3NlIHRoaXMg aXMgYSBCSVRNQVAgKi8KKwkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QlJT Ul84MTg3U0UsIHJhdGVzX21hc2spOworCisJCWJyZWFrOworCisJfQorfQorCitzdGF0aWMgdm9p ZCBydGw4MTgwX2NvbmZpZ19jYXJkYnVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlz dHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXUzMiByZWczMjsKKwl1OCBy ZWc4OworCisJcmVnOCA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUcz KTsKKwlyZWc4IHw9IDEgPDwgMTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAt PkNPTkZJRzMsIHJlZzgpOworCisJaWYgKHByaXYtPmNoaXBfZmFtaWx5ID09IFJUTDgxOFhfQ0hJ UF9GQU1JTFlfUlRMODE4N1NFKSB7CisJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsIEZFTVJfU0Us IDB4ZmZmZik7CisJfSBlbHNlIHsKKwkJcmVnMzIgPSBydGw4MTh4X2lvcmVhZDMyKHByaXYsICZw cml2LT5tYXAtPkZFTVIpOworCQkJcmVnMzIgfD0gKDEgPDwgMTUpIHwgKDEgPDwgMTQpIHwgKDEg PDwgNCk7CisJCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPkZFTVIsIHJlZzMy KTsKKwl9CisKK30KKworc3RhdGljIGludCBydGw4MTgwX2luaXRfaHcoc3RydWN0IGllZWU4MDIx MV9odyAqZGV2KQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisK Kwl1OCByZWc4OworCXUzMiByZWczMjsKKwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYt Pm1hcC0+Q01ELCAwKTsKIAlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKTsK IAltc2xlZXAoMTApOwogCiAJLyogcmVzZXQgKi8KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAm cHJpdi0+bWFwLT5JTlRfTUFTSywgMCk7CisJcnRsODE4MF9pbnRfZGlzYWJsZShkZXYpOworCiAJ cnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNNRCk7CiAKLQlyZWcgPSBydGw4MTh4 X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKTsKLQlyZWcgJj0gKDEgPDwgMSk7Ci0JcmVn IHw9IFJUTDgxOFhfQ01EX1JFU0VUOworCXJlZzggPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnBy aXYtPm1hcC0+Q01EKTsKKwlyZWc4ICY9ICgxIDw8IDEpOworCXJlZzggfD0gUlRMODE4WF9DTURf UkVTRVQ7CiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DTUQsIFJUTDgxOFhf Q01EX1JFU0VUKTsKIAlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKTsKIAlt c2xlZXAoMjAwKTsKQEAgLTM3Myw3OCArMTA3MCwxNjEgQEAgc3RhdGljIGludCBydGw4MTgwX2lu aXRfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQogCW1zbGVlcCgyMDApOwogCiAJaWYgKHJ0 bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczKSAmICgxIDw8IDMpKSB7Ci0J CS8qIEZvciBjYXJkYnVzICovCi0JCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+ bWFwLT5DT05GSUczKTsKLQkJcmVnIHw9IDEgPDwgMTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2 LCAmcHJpdi0+bWFwLT5DT05GSUczLCByZWcpOwotCQlyZWcgPSBydGw4MTh4X2lvcmVhZDE2KHBy aXYsICZwcml2LT5tYXAtPkZFTVIpOwotCQlyZWcgfD0gKDEgPDwgMTUpIHwgKDEgPDwgMTQpIHwg KDEgPDwgNCk7Ci0JCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPkZFTVIsIHJl Zyk7CisJCXJ0bDgxODBfY29uZmlnX2NhcmRidXMoZGV2KTsKIAl9CiAKLQlydGw4MTh4X2lvd3Jp dGU4KHByaXYsICZwcml2LT5tYXAtPk1TUiwgMCk7CisJaWYgKHByaXYtPmNoaXBfZmFtaWx5ID09 IFJUTDgxOFhfQ0hJUF9GQU1JTFlfUlRMODE4N1NFKSB7CisJCXJ0bDgxOHhfaW93cml0ZTgocHJp diwgJnByaXYtPm1hcC0+TVNSLCBSVEw4MThYX01TUl9FTkVEQ0EpOworCX0gZWxzZSB7CisJCXJ0 bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+TVNSLCAwKTsKKwl9CisKKwlpZiAocHJp di0+Y2hpcF9mYW1pbHkgPT0gUlRMODE4WF9DSElQX0ZBTUlMWV9SVEw4MTgwKQorCQlydGw4MTgw X3NldF9hbmFwYXJhbShwcml2LCBwcml2LT5hbmFwYXJhbSk7CisKKwkvKiBUT0RPOiBuZWNlc3Nh cnk/IHNwZWNzIGluZGljYXRlIG5vdCAqLworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYt Pm1hcC0+RUVQUk9NX0NNRCwKKwkJCSBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKKworCXJl ZzggPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMik7CisJcnRsODE4 eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUcyLAorCQkJIHJlZzggJiB+KDEgPDwg MykpOworCisJaWYgKHByaXYtPmNoaXBfZmFtaWx5ID09IFJUTDgxOFhfQ0hJUF9GQU1JTFlfUlRM ODE4NSkgeworCQlyZWc4ID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJ RzIpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzIsCisJCQkJ IHJlZzggfCAoMSA8PCA0KSk7CisJfQorCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+ bWFwLT5FRVBST01fQ01ELAorCQkJIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOworCisJLyog VE9ETzogc2V0IENPTkZJRzUgZm9yIGNhbGlicmF0aW5nIEFHQyBvbiBydGw4MTgwICsgcGhpbGlw cyByYWRpbz8gKi8KKworCS8qIFRPRE86IHR1cm4gb2ZmIGh3IHdlcCBvbiBydGw4MTgwICovCisK KwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5JTlRfVElNRU9VVCwgMCk7CisK KwkvKiBkZWZhdWx0IGJhc2ljIHJhdGVzIGFyZSAxLDIsNiw5LDEyLDE4LDI0IE1icHMKKwkgKiBi aXRtYXNrID0gMHgwMWYzCisJICovCisJcnRsODE4MF9jb25mX2Jhc2ljX3JhdGVzKGRldiwgMHgx ZjMpOworCisJaWYgKHByaXYtPmNoaXBfZmFtaWx5ICE9IFJUTDgxOFhfQ0hJUF9GQU1JTFlfUlRM ODE4MCkgeworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPldQQV9DT05GLCAw KTsKKworCQkvKiBBdXRvIHJhdGUgZmFsbGJhY2sgY29udHJvbCAqLworCQlyZWc4ID0gcnRsODE4 eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPlJBVEVfRkFMTEJBQ0spICYgMHg3QzsKKwkJcmVn OCB8PSBSVEw4MThYX1JBVEVfRkFMTEJBQ0tfRU5BQkxFIHwKKwkJCVJUTDgxOFhfUkFURV9GQUxM QkFDS19BVVRPX1NURVAxOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlJB VEVfRkFMTEJBQ0ssIHJlZzgpOworCisJfSBlbHNlIHsKKworCQlydGw4MTh4X2lvd3JpdGU4KHBy aXYsICZwcml2LT5tYXAtPlNFQ1VSSVRZLCAwKTsKKworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYs ICZwcml2LT5tYXAtPlBIWV9ERUxBWSwgMHg2KTsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAm cHJpdi0+bWFwLT5DQVJSSUVSX1NFTlNFX0NPVU5URVIsIDB4NEMpOworCX0KKworCWlmIChwcml2 LT5jaGlwX2ZhbWlseSA9PSBSVEw4MThYX0NISVBfRkFNSUxZX1JUTDgxODUpIHsKKworCQlyZWc4 ID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkdQX0VOQUJMRSk7CisJCXJ0bDgx OHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BfRU5BQkxFLCByZWc4ICYgfigxIDw8IDYp KTsKKwl9CisKKworCWlmIChwcml2LT5jaGlwX2ZhbWlseSA9PSBSVEw4MThYX0NISVBfRkFNSUxZ X1JUTDgxODdTRSkgeworCisJCS8qIHRoZSBzZXQgYXV0byByYXRlIGZhbGxiYWNrIGJpdG1hc2sg ZnJvbSAxTSB0byA1NCBNYi9zICovCisJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsIEFSRlIsIDB4 RkZGKTsKKwkJcnRsODE4eF9pb3JlYWQxNihwcml2LCBBUkZSKTsKKworCQlydGw4MTh4X2lvd3Jp dGUxNihwcml2LCBGRU1SX1NFLCAweEZGRkYpOworCQlydGw4MTh4X2lvcmVhZDE2KHByaXYsIEZF TVJfU0UpOworCisJCS8qIHN0b3AgdW51c2VkIHF1ZXVzIChubyBkbWEgYWxsb2MpICovCisJCXJ0 bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFBQT0xMX1NUT1AsCisJCQkgICAgICAg UlRMODE4eF9UUFBPTExfU1RPUF9NRyB8IFJUTDgxOHhfVFBQT0xMX1NUT1BfSEkpOworCisJCXJ0 bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+QUNNX0NPTlRST0wsIDB4MDApOworCQly dGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5USURfQUNfTUFQLCAweEZBNTApOwor CisJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPklOVF9NSUcsIDApOworCisJ CS8qIHNvbWUgYmxhY2sgbWFnaWMgaGVyZS4uICovCisJCXJ0bDgxODdzZV9tYWNfY29uZmlnKGRl dik7CisKKwkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgUkZTV19DVFJMLCAweDU2OUEpOworCQly dGw4MTh4X2lvcmVhZDE2KHByaXYsIFJGU1dfQ1RSTCk7CiAKLQlpZiAoIXByaXYtPnI4MTg1KQot CQlydGw4MTgwX3NldF9hbmFwYXJhbShwcml2LCBwcml2LT5hbmFwYXJhbSk7CisJCXJ0bDgxODBf c2V0X2FuYXBhcmFtKHByaXYsIFJUTDgyMjVTRV9BTkFQQVJBTV9PTik7CisJCXJ0bDgxODBfc2V0 X2FuYXBhcmFtMihwcml2LCBSVEw4MjI1U0VfQU5BUEFSQU0yX09OKTsKKwkJcnRsODE4MF9zZXRf YW5hcGFyYW0zKHByaXYsIFJUTDgyMjVTRV9BTkFQQVJBTTMpOwogCi0JcnRsODE4eF9pb3dyaXRl MzIocHJpdiwgJnByaXYtPm1hcC0+UkRTQVIsIHByaXYtPnJ4X3JpbmdfZG1hKTsKLQlydGw4MTh4 X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5UQkRBLCBwcml2LT50eF9yaW5nWzNdLmRtYSk7 Ci0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VEhQREEsIHByaXYtPnR4X3Jp bmdbMl0uZG1hKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5UTlBEQSwg cHJpdi0+dHhfcmluZ1sxXS5kbWEpOwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5t YXAtPlRMUERBLCBwcml2LT50eF9yaW5nWzBdLmRtYSk7CiAKLQkvKiBUT0RPOiBuZWNlc3Nhcnk/ IHNwZWNzIGluZGljYXRlIG5vdCAqLwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1h cC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7Ci0JcmVnID0gcnRsODE4 eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzIpOwotCXJ0bDgxOHhfaW93cml0ZTgo cHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMiwgcmVnICYgfigxIDw8IDMpKTsKLQlpZiAocHJpdi0+ cjgxODUpIHsKLQkJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJ RzIpOwotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzIsIHJlZyB8 ICgxIDw8IDQpKTsKLQl9Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBS T01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKKwkJcnRsODE4eF9pb3dyaXRlOChw cml2LCAmcHJpdi0+bWFwLT5DT05GSUc1LAorCQkJICAgIHJ0bDgxOHhfaW9yZWFkOChwcml2LCAm cHJpdi0+bWFwLT5DT05GSUc1KSAmIDB4N0YpOwogCi0JLyogVE9ETzogc2V0IENPTkZJRzUgZm9y IGNhbGlicmF0aW5nIEFHQyBvbiBydGw4MTgwICsgcGhpbGlwcyByYWRpbz8gKi8KKwkJLypwcm9i YWJseSB0aGlzIHN3aXRjaCBsZWQgb24gKi8KKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJp di0+bWFwLT5QR1NFTEVDVCwKKwkJCSAgICBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1h cC0+UEdTRUxFQ1QpIHwgMHgwOCk7CiAKLQkvKiBUT0RPOiB0dXJuIG9mZiBodyB3ZXAgb24gcnRs ODE4MCAqLworCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRw dXQsIDB4MDQ4MCk7CisJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGlu c0VuYWJsZSwgMHgxQkZGKTsKKwkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+ UkZQaW5zU2VsZWN0LCAweDI0ODgpOwogCi0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYt Pm1hcC0+SU5UX1RJTUVPVVQsIDApOworCQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+ bWFwLT5SRl9USU1JTkcsIDB4NDAwMyk7CiAKLQlpZiAocHJpdi0+cjgxODUpIHsKLQkJcnRsODE4 eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5XUEFfQ09ORiwgMCk7Ci0JCXJ0bDgxOHhfaW93 cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UkFURV9GQUxMQkFDSywgMHg4MSk7Ci0JCXJ0bDgxOHhf aW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UkVTUF9SQVRFLCAoOCA8PCA0KSB8IDApOwotCi0J CXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPkJSU1IsIDB4MDFGMyk7Ci0KLQkJ LyogVE9ETzogc2V0IENsa1J1biBlbmFibGU/IG5lY2Vzc2FyeT8gKi8KLQkJcmVnID0gcnRsODE4 eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkdQX0VOQUJMRSk7Ci0JCXJ0bDgxOHhfaW93cml0 ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BfRU5BQkxFLCByZWcgJiB+KDEgPDwgNikpOwotCQlydGw4 MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9N X0NNRF9DT05GSUcpOwotCQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+ Q09ORklHMyk7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywg cmVnIHwgKDEgPDwgMikpOwotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVF UFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOwotCX0gZWxzZSB7Ci0JCXJ0bDgx OHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPkJSU1IsIDB4MSk7Ci0JCXJ0bDgxOHhfaW93 cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+U0VDVVJJVFksIDApOworCQkvKiB0aGUgcmVmZXJlbmNl IGNvZGUgbWFjIGhhcmRjb2RlIHRhYmxlIHdyaXRlCisJCSAqIHRoaXMgcmVnIGJ5IGRvaW5nIGJ5 dGUtd2lkZSBhY2Nlc3Nlcy4KKwkJICogSXQgZG9lcyBpdCBqdXN0IGZvciBsb3dlc3QgYW5kIGhp Z2hlc3QgYnl0ZS4uCisJCSAqLworCQlyZWczMiA9IHJ0bDgxOHhfaW9yZWFkMzIocHJpdiwgJnBy aXYtPm1hcC0+UkZfUEFSQSk7CisJCXJlZzMyICY9IDB4MDBmZmZmMDA7CisJCXJlZzMyIHw9IDB4 YjgwMDAwNTQ7CisJCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlJGX1BBUkEs IHJlZzMyKTsKIAotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlBIWV9ERUxB WSwgMHg2KTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DQVJSSUVSX1NF TlNFX0NPVU5URVIsIDB4NEMpOworCQlwcml2LT5yZl9wcm9nX3R5cGUgPSBydGw4MTh4X2lvcmVh ZDgocHJpdiwKKwkJCQkJCSAgICAmcHJpdi0+bWFwLT5DT05GSUc0KSAmIDB4MDM7CiAJfQogCiAJ cHJpdi0+cmYtPmluaXQoZGV2KTsKLQlpZiAocHJpdi0+cjgxODUpCi0JCXJ0bDgxOHhfaW93cml0 ZTE2KHByaXYsICZwcml2LT5tYXAtPkJSU1IsIDB4MDFGMyk7CisKKwkvKiBUT0RPOiBmaXggdGhp cyBibG9jayAqLworCWlmIChwcml2LT5jaGlwX2ZhbWlseSA9PSBSVEw4MThYX0NISVBfRkFNSUxZ X1JUTDgxODdTRSkgeworCisJCXJ0bDgxODdzZV9zZXRfYW50ZW5uYV9jb25maWcoZGV2LAorCQkJ CQkgICAgIHByaXYtPmFudGVubmFfZGl2ZXJzaXR5X2RlZmF1bHQsCisJCQkJCSAgICAgcHJpdi0+ YW50ZW5uYV9kaXZlcnNpdHlfZW4pOworCisJCS8qIHRvZG8gcG93ZXIgdHJhY2tpbmcgKi8KKyNp ZiAwCisJCWlmIChwcml2LT50aGVybWFsX21ldGVyX2VuKQorCQkJcnRsODE4N3NlX2luaXRfcG93 ZXJfdHJhY2tpbmcoZGV2KTsKKyNlbmRpZgorCX0KKwogCXJldHVybiAwOwogfQogCisKKworCiBz dGF0aWMgaW50IHJ0bDgxODBfaW5pdF9yeF9yaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikK IHsKIAlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBydGw4 MTgwX3J4X2Rlc2MgKmVudHJ5OworCXN0cnVjdCBydGw4MTh4X3J4X2NtZF9kZXNjICplbnRyeTsK KwlpbnQgZG1hX21hcF9mYWlsX2NvdW50ID0gMDsKIAlpbnQgaTsKIAorCWlmIChwcml2LT5jaGlw X2ZhbWlseSA9PSBSVEw4MThYX0NISVBfRkFNSUxZX1JUTDgxODdTRSkKKwkJcHJpdi0+cnhfcmlu Z19zeiA9IHNpemVvZihzdHJ1Y3QgcnRsODE4N3NlX3J4X2Rlc2MpOworCWVsc2UKKwkJcHJpdi0+ cnhfcmluZ19zeiA9IHNpemVvZihzdHJ1Y3QgcnRsODE4MF9yeF9kZXNjKTsKKwogCXByaXYtPnJ4 X3JpbmcgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wZGV2LAotCQkJCQkgICAgIHNpemVv ZigqcHJpdi0+cnhfcmluZykgKiAzMiwKKwkJCQkJICAgICBwcml2LT5yeF9yaW5nX3N6ICogMzIs CiAJCQkJCSAgICAgJnByaXYtPnJ4X3JpbmdfZG1hKTsKIAogCWlmICghcHJpdi0+cnhfcmluZyB8 fCAodW5zaWduZWQgbG9uZylwcml2LT5yeF9yaW5nICYgMHhGRikgewpAQCAtNDUyLDI1ICsxMjMy LDQxIEBAIHN0YXRpYyBpbnQgcnRsODE4MF9pbml0X3J4X3Jpbmcoc3RydWN0IGllZWU4MDIxMV9o dyAqZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQltZW1zZXQocHJpdi0+cnhfcmluZywg MCwgc2l6ZW9mKCpwcml2LT5yeF9yaW5nKSAqIDMyKTsKKwltZW1zZXQocHJpdi0+cnhfcmluZywg MCwgcHJpdi0+cnhfcmluZ19zeiAqIDMyKTsKIAlwcml2LT5yeF9pZHggPSAwOwogCiAJZm9yIChp ID0gMDsgaSA8IDMyOyBpKyspIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19z a2IoTUFYX1JYX1NJWkUpOwogCQlkbWFfYWRkcl90ICptYXBwaW5nOwotCQllbnRyeSA9ICZwcml2 LT5yeF9yaW5nW2ldOwotCQlpZiAoIXNrYikKLQkJCXJldHVybiAwOwotCisJCWVudHJ5ID0gcHJp di0+cnhfcmluZyArIHByaXYtPnJ4X3Jpbmdfc3oqaTsKKwkJaWYgKCFza2IpIHsKKwkJCXdpcGh5 X2VycihkZXYtPndpcGh5LCAiQ2Fubm90IGFsbG9jYXRlIFJYIHNrYlxuIik7CisJCQlyZXR1cm4g LUVOT01FTTsKKwkJfQogCQlwcml2LT5yeF9idWZbaV0gPSBza2I7CiAJCW1hcHBpbmcgPSAoZG1h X2FkZHJfdCAqKXNrYi0+Y2I7CiAJCSptYXBwaW5nID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRl diwgc2tiX3RhaWxfcG9pbnRlcihza2IpLAogCQkJCQkgIE1BWF9SWF9TSVpFLCBQQ0lfRE1BX0ZS T01ERVZJQ0UpOworCisJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocHJpdi0+cGRldiwgKm1h cHBpbmcpKSB7CisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCWlmIChkbWFfbWFwX2ZhaWxfY291bnQr KyA+IDMyKSB7CisJCQkJd2lwaHlfZXJyKGRldi0+d2lwaHksICJDYW5ub3QgbWFwIFJYIHNrYlxu Iik7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisKKwkJCWktLTsKKwkJCXdpcGh5X2Vycihk ZXYtPndpcGh5LCAiV2FybiByZXRyeSBhbGxvY1xuIik7CisJCQljb250aW51ZTsKKwkJfQorCisK IAkJZW50cnktPnJ4X2J1ZiA9IGNwdV90b19sZTMyKCptYXBwaW5nKTsKIAkJZW50cnktPmZsYWdz ID0gY3B1X3RvX2xlMzIoUlRMODE4WF9SWF9ERVNDX0ZMQUdfT1dOIHwKIAkJCQkJICAgTUFYX1JY X1NJWkUpOwogCX0KIAllbnRyeS0+ZmxhZ3MgfD0gY3B1X3RvX2xlMzIoUlRMODE4WF9SWF9ERVND X0ZMQUdfRU9SKTsKKwogCXJldHVybiAwOwogfQogCkBAIC00OTAsNyArMTI4Niw3IEBAIHN0YXRp YyB2b2lkIHJ0bDgxODBfZnJlZV9yeF9yaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIAkJ a2ZyZWVfc2tiKHNrYik7CiAJfQogCi0JcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wZGV2LCBz aXplb2YoKnByaXYtPnJ4X3JpbmcpICogMzIsCisJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5w ZGV2LCBwcml2LT5yeF9yaW5nX3N6ICogMzIsCiAJCQkgICAgcHJpdi0+cnhfcmluZywgcHJpdi0+ cnhfcmluZ19kbWEpOwogCXByaXYtPnJ4X3JpbmcgPSBOVUxMOwogfQpAQCAtNTU0LDMxICsxMzUw LDg2IEBAIHN0YXRpYyBpbnQgcnRsODE4MF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYp CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJ Zm9yIChpID0gMDsgaSA8IFJUTDgxOFhfTlJfVFhfUVVFVUVTOyBpKyspCiAJCWlmICgocmV0ID0g cnRsODE4MF9pbml0X3R4X3JpbmcoZGV2LCBpLCAxNikpKQogCQkJZ290byBlcnJfZnJlZV9yaW5n czsKIAorI2lmZGVmIERFQlVHX1BZX1RPT0wKKwlmb3IgKGkgPSAwOyBpIDwgUlRMODE4WF9OUl9U WF9RVUVVRVM7IGkrKykgeworCQlwcmludGsoInJpbmcgcHJpbyAlZCAtLSB2aXJ0OiAweCVseCwg RE1BOiAweCVseCwgaWR4OiAweCVseFxuIiwgaSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKSBw cml2LT50eF9yaW5nW2ldLmRlc2MsCisJCSAgICAgICAodW5zaWduZWQgbG9uZykgcHJpdi0+dHhf cmluZ1tpXS5kbWEsCisJCSAgICAgICAodW5zaWduZWQgbG9uZykgJnByaXYtPnR4X3JpbmdbaV0u aWR4KTsKKwl9CisjZW5kaWYKKwogCXJldCA9IHJ0bDgxODBfaW5pdF9odyhkZXYpOwogCWlmIChy ZXQpCiAJCWdvdG8gZXJyX2ZyZWVfcmluZ3M7CiAKIAlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAm cHJpdi0+bWFwLT5SRFNBUiwgcHJpdi0+cnhfcmluZ19kbWEpOwotCXJ0bDgxOHhfaW93cml0ZTMy KHByaXYsICZwcml2LT5tYXAtPlRCREEsIHByaXYtPnR4X3JpbmdbM10uZG1hKTsKLQlydGw4MTh4 X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5USFBEQSwgcHJpdi0+dHhfcmluZ1syXS5kbWEp OwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlROUERBLCBwcml2LT50eF9y aW5nWzFdLmRtYSk7Ci0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VExQREEs IHByaXYtPnR4X3JpbmdbMF0uZG1hKTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKHByaXYtPnBkZXYt PmlycSwgcnRsODE4MF9pbnRlcnJ1cHQsCisKKworCS8qIG1hYzgwMjExIHF1ZXVlIGhhdmUgaGln aGVyIHByaW8gZm9yIGxvd2VyIGluZGV4LiBUaGUgbGFzdCBxdWV1ZQorCSAqICh0aGF0IG1hYzgw MjExIGlzIG5vdCBhd2FyZSBvZikgaXMgcmVzZXJ2ZWQgZm9yIGJlYWNvbnMgKGFuZCBoYXZlCisJ ICogdGhlIGhpZ2hlc3QgcHJpb3JpdHkgb24gdGhlIE5JQykKKwkgKi8KKwlpZiAocHJpdi0+Y2hp cF9mYW1pbHkgIT0gUlRMODE4WF9DSElQX0ZBTUlMWV9SVEw4MTg3U0UpIHsKKwkJcnRsODE4eF9p b3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VEJEQSwgcHJpdi0+dHhfcmluZ1sxXS5kbWEpOwor CQkvKgorCQlub3QgdXNlZAorCQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5U SFBEQSwgcHJpdi0+dHhfcmluZ1swXS5kbWEpOworCQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAm cHJpdi0+bWFwLT5UTlBEQSwgcHJpdi0+dHhfcmluZ1sxXS5kbWEpOworCQkqLworCQlydGw4MTh4 X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5UTFBEQSwgcHJpdi0+dHhfcmluZ1swXS5kbWEp OworCX0gZWxzZSB7CisJCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlRCREEs IHByaXYtPnR4X3JpbmdbNF0uZG1hKTsKKwkJLyoKKwkJbm90IHVzZWQKKwkJcnRsODE4eF9pb3dy aXRlMzIocHJpdiwmcHJpdi0+bWFwLT5UTUdEQSwgcHJpdi0+dHhfcmluZ1swXS5kbWEpOworCQly dGw4MTh4X2lvd3JpdGUzMihwcml2LCZwcml2LT5tYXAtPlRIUERBLCBwcml2LT50eF9yaW5nWzFd LmRtYSk7CisJCSovCisJCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlRWT0RB LCBwcml2LT50eF9yaW5nWzBdLmRtYSk7CisJCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2 LT5tYXAtPlRWSURBLCBwcml2LT50eF9yaW5nWzFdLmRtYSk7CisJCXJ0bDgxOHhfaW93cml0ZTMy KHByaXYsICZwcml2LT5tYXAtPlRCRURBLCBwcml2LT50eF9yaW5nWzJdLmRtYSk7CisJCXJ0bDgx OHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlRCS0RBLCBwcml2LT50eF9yaW5nWzNdLmRt YSk7CisKKwl9CisKKyNpZiAwCisJcHJpbnRrKCJyZWcgVEJEQSBhZHIgJXhcbiIsICZwcml2LT5t YXAtPlRCREEpOworCXByaW50aygicmVnIFRNR0RBIGFkciAleFxuIiwgJnByaXYtPm1hcC0+VE1H REEpOworCXByaW50aygicmVnIFRIUERBIGFkciAleFxuIiwgJnByaXYtPm1hcC0+VEhQREEpOwor CXByaW50aygicmVnIFRWSURBIGFkciAleFxuIiwgJnByaXYtPm1hcC0+VFZJREEpOworCXByaW50 aygicmVnIFRWT0RBIGFkciAleFxuIiwgJnByaXYtPm1hcC0+VFZPREEpOworCXByaW50aygicmVn IFRCRURBIGFkciAleFxuIiwgJnByaXYtPm1hcC0+VEJFREEpOworCXByaW50aygicmVnIFRCS0RB IGFkciAleFxuIiwgJnByaXYtPm1hcC0+VEJLREEpOworI2VuZGlmCisKKwlpZiAocHJpdi0+Y2hp cF9mYW1pbHkgPT0gUlRMODE4WF9DSElQX0ZBTUlMWV9SVEw4MTg3U0UpIHsKKwkJcmV0ID0gcmVx dWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCBydGw4MTg3c2VfaW50ZXJydXB0LAogCQkJICBJUlFG X1NIQVJFRCwgS0JVSUxEX01PRE5BTUUsIGRldik7CisJfSBlbHNlIHsKKworCQlyZXQgPSByZXF1 ZXN0X2lycShwcml2LT5wZGV2LT5pcnEsIHJ0bDgxODBfaW50ZXJydXB0LAorCQkJICBJUlFGX1NI QVJFRCwgS0JVSUxEX01PRE5BTUUsIGRldik7CisJfQorCiAJaWYgKHJldCkgewogCQl3aXBoeV9l cnIoZGV2LT53aXBoeSwgImZhaWxlZCB0byByZWdpc3RlciBJUlEgaGFuZGxlclxuIik7CiAJCWdv dG8gZXJyX2ZyZWVfcmluZ3M7CiAJfQogCi0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYt Pm1hcC0+SU5UX01BU0ssIDB4RkZGRik7CisJcnRsODE4MF9pbnRfZW5hYmxlKGRldik7CiAKLQly dGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5NQVJbMF0sIH4wKTsKLQlydGw4MTh4 X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5NQVJbMV0sIH4wKTsKKwkvKiBpbiBydGw4MTg3 c2UgYXQgTUFSIHJlZ3Mgb2Zmc2V0IHRoZXJlIGlzIHRoZSBtYW5hZ2VtZW50CisJICogVFggZGVz Y3JpcHRvciBETUEgYWRkcmVzLi4KKwkgKi8KKwlpZiAocHJpdi0+Y2hpcF9mYW1pbHkgIT0gUlRM ODE4WF9DSElQX0ZBTUlMWV9SVEw4MTg3U0UpIHsKKwkJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwg JnByaXYtPm1hcC0+TUFSWzBdLCB+MCk7CisJCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2 LT5tYXAtPk1BUlsxXSwgfjApOworCX0KIAogCXJlZyA9IFJUTDgxOFhfUlhfQ09ORl9PTkxZRVJM UEtUIHwKIAkgICAgICBSVEw4MThYX1JYX0NPTkZfUlhfQVVUT1JFU0VUUEhZIHwKQEAgLTU4OCwy NyArMTQzOSw0NSBAQCBzdGF0aWMgaW50IHJ0bDgxODBfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9o dyAqZGV2KQogCSAgICAgIFJUTDgxOFhfUlhfQ09ORl9CUk9BRENBU1QgfAogCSAgICAgIFJUTDgx OFhfUlhfQ09ORl9OSUNNQUM7CiAKLQlpZiAocHJpdi0+cjgxODUpCisJaWYgKHByaXYtPmNoaXBf ZmFtaWx5ID09IFJUTDgxOFhfQ0hJUF9GQU1JTFlfUlRMODE4NSkgewogCQlyZWcgfD0gUlRMODE4 WF9SWF9DT05GX0NTRE0xIHwgUlRMODE4WF9SWF9DT05GX0NTRE0yOwotCWVsc2UgeworCisJfSBl bHNlIGlmIChwcml2LT5jaGlwX2ZhbWlseSA9PSBSVEw4MThYX0NISVBfRkFNSUxZX1JUTDgxODAp IHsKKwogCQlyZWcgfD0gKHByaXYtPnJmcGFyYW0gJiBSRl9QQVJBTV9DQVJSSUVSU0VOU0UxKQog CQkJPyBSVEw4MThYX1JYX0NPTkZfQ1NETTEgOiAwOwogCQlyZWcgfD0gKHByaXYtPnJmcGFyYW0g JiBSRl9QQVJBTV9DQVJSSUVSU0VOU0UyKQogCQkJPyBSVEw4MThYX1JYX0NPTkZfQ1NETTIgOiAw OworCX0gZWxzZSB7CisJCXJlZyAmPSB+KFJUTDgxOFhfUlhfQ09ORl9DU0RNMSB8IFJUTDgxOFhf UlhfQ09ORl9DU0RNMik7CiAJfQogCiAJcHJpdi0+cnhfY29uZiA9IHJlZzsKIAlydGw4MTh4X2lv d3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5SWF9DT05GLCByZWcpOwogCi0JaWYgKHByaXYtPnI4 MTg1KSB7CisJaWYgKHByaXYtPmNoaXBfZmFtaWx5ICE9IFJUTDgxOFhfQ0hJUF9GQU1JTFlfUlRM ODE4MCkgeworCiAJCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DV19D T05GKTsKLQkJcmVnICY9IH5SVEw4MThYX0NXX0NPTkZfUEVSUEFDS0VUX0NXX1NISUZUOwotCQly ZWcgfD0gUlRMODE4WF9DV19DT05GX1BFUlBBQ0tFVF9SRVRSWV9TSElGVDsKKworCQkvKiBDVyBp cyBub3Qgb24gcGVyLXBhY2tldCBiYXNpcy4KKwkJICogaW4gcnRsODE4NSB0aGUgQ1dfVkFMVUUg cmVnIGlzIHVzZWQuCisJCSAqIGluIHJ0bDgxODdzZSB0aGUgQUMgcGFyYW0gcmVncyBhcmUgdXNl ZC4KKwkJICovCisJCXJlZyAmPSB+UlRMODE4WF9DV19DT05GX1BFUlBBQ0tFVF9DVzsKKwkJLyog cmV0cnkgbGltaXQgSVMgb24gcGVyLXBhY2tldCBiYXNpcy4KKwkJICogdGhlIHNob3J0IGFuZCBs b25nIHJldHJ5IGxpbWl0IGluIFRYX0NPTkYKKwkJICogcmVnIGFyZSBpZ25vcmVkCisJCSAqLwor CQlyZWcgfD0gUlRMODE4WF9DV19DT05GX1BFUlBBQ0tFVF9SRVRSWTsKIAkJcnRsODE4eF9pb3dy aXRlOChwcml2LCAmcHJpdi0+bWFwLT5DV19DT05GLCByZWcpOwogCiAJCXJlZyA9IHJ0bDgxOHhf aW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BR0NfQ1RMKTsKLQkJcmVnICY9IH5SVEw4MThY X1RYX0FHQ19DVExfUEVSUEFDS0VUX0dBSU5fU0hJRlQ7Ci0JCXJlZyAmPSB+UlRMODE4WF9UWF9B R0NfQ1RMX1BFUlBBQ0tFVF9BTlRTRUxfU0hJRlQ7CisJCS8qIFRYIGFudGVubmEgYW5kIFRYIGdh aW4gYXJlIG5vdCBvbiBwZXItcGFja2V0IGJhc2lzLgorCQkgKiBUWCBBbnRlbm5hIGlzIHNlbGVj dGVkIGJ5IEFOVFNFTCByZWcgKFJYIGluIEJCIHJlZ3MpLgorCQkgKiBUWCBnYWluIGlzIHNlbGVj dGVkIHdpdGggQ0NLX1RYX0FHQyBhbmQgT0ZETV9UWF9BR0MgcmVncworCQkgKi8KKwkJcmVnICY9 IH5SVEw4MThYX1RYX0FHQ19DVExfUEVSUEFDS0VUX0dBSU47CisJCXJlZyAmPSB+UlRMODE4WF9U WF9BR0NfQ1RMX1BFUlBBQ0tFVF9BTlRTRUw7CiAJCXJlZyB8PSAgUlRMODE4WF9UWF9BR0NfQ1RM X0ZFRURCQUNLX0FOVDsKIAkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9B R0NfQ1RMLCByZWcpOwogCkBAIC02MjAsMTAgKzE0ODksMjIgQEAgc3RhdGljIGludCBydGw4MTgw X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIAlyZWcgfD0gKDYgPDwgMjEgLyogTUFY IFRYIERNQSAqLykgfAogCSAgICAgICBSVEw4MThYX1RYX0NPTkZfTk9fSUNWOwogCi0JaWYgKHBy aXYtPnI4MTg1KQorCisKKwlpZiAocHJpdi0+Y2hpcF9mYW1pbHkgIT0gUlRMODE4WF9DSElQX0ZB TUlMWV9SVEw4MTgwKSB7CiAJCXJlZyAmPSB+UlRMODE4WF9UWF9DT05GX1BST0JFX0RUUzsKLQll bHNlCi0JCXJlZyAmPSB+UlRMODE4WF9UWF9DT05GX0hXX1NFUU5VTTsKKwl9IGVsc2UgeworCQly ZWcgJj0gflJUTDgxOFhfVFhfQ09ORl9DV19NSU47CisJCXJlZyB8PSBSVEw4MThYX1RYX0NPTkZf U1dfU0VRTlVNOworCQkvKiBUT0RPOiAgc2V0X1NSTF9MUkwgKi8KKwl9CisKKworCWlmIChwcml2 LT5jaGlwX2ZhbWlseSA9PSBSVEw4MThYX0NISVBfRkFNSUxZX1JUTDgxODdTRSkgeworCQlyZWcg fD0gMTw8MzA7ICAvKiAgImR1cmF0aW9uIHByb2NlZHVyZSBtb2RlIiAqLworCX0KKworCXJlZyAm PSB+UlRMODE4WF9UWF9DT05GX0RJU0NXOwogCiAJLyogZGlmZmVyZW50IG1lYW5pbmcsIHNhbWUg dmFsdWUgb24gYm90aCBydGw4MTg1IGFuZCBydGw4MTgwICovCiAJcmVnICY9IH5SVEw4MThYX1RY X0NPTkZfU0FUX0hXUExDUDsKQEAgLTYzOSw3ICsxNTIwLDcgQEAgc3RhdGljIGludCBydGw4MTgw X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIAogIGVycl9mcmVlX3JpbmdzOgogCXJ0 bDgxODBfZnJlZV9yeF9yaW5nKGRldik7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwlmb3Ig KGkgPSAwOyBpIDwgUlRMODE4WF9OUl9UWF9RVUVVRVM7IGkrKykKIAkJaWYgKHByaXYtPnR4X3Jp bmdbaV0uZGVzYykKIAkJCXJ0bDgxODBfZnJlZV90eF9yaW5nKGRldiwgaSk7CiAKQEAgLTY1Miw3 ICsxNTMzLDcgQEAgc3RhdGljIHZvaWQgcnRsODE4MF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcg KmRldikKIAl1OCByZWc7CiAJaW50IGk7CiAKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJp di0+bWFwLT5JTlRfTUFTSywgMCk7CisJcnRsODE4MF9pbnRfZGlzYWJsZShkZXYpOwogCiAJcmVn ID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNNRCk7CiAJcmVnICY9IH5SVEw4 MThYX0NNRF9UWF9FTkFCTEU7CkBAIC02NjksNyArMTU1MCw3IEBAIHN0YXRpYyB2b2lkIHJ0bDgx ODBfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCiAJZnJlZV9pcnEocHJpdi0+cGRldi0+ aXJxLCBkZXYpOwogCiAJcnRsODE4MF9mcmVlX3J4X3JpbmcoZGV2KTsKLQlmb3IgKGkgPSAwOyBp IDwgNDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBSVEw4MThYX05SX1RYX1FVRVVFUzsgaSsrKQog CQlydGw4MTgwX2ZyZWVfdHhfcmluZyhkZXYsIGkpOwogfQogCkBAIC02ODksMTEgKzE1NzAsMTUg QEAgc3RhdGljIHZvaWQgcnRsODE4MF9iZWFjb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndv cmspCiAJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiA9CiAJCWNvbnRhaW5lcl9vZigodm9pZCAq KXZpZl9wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiwgZHJ2X3ByaXYpOwogCXN0cnVjdCBpZWVl ODAyMTFfaHcgKmRldiA9IHZpZl9wcml2LT5kZXY7CisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJp diA9IGRldi0+cHJpdjsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CiAJc3RydWN0IHNr X2J1ZmYgKnNrYjsKIAorCS8qIGJhY29uIHF1ZXVlIGlzIHRoZSBsYXN0IG9uZSwgdGhhdCBpcyAx KyBxdWV1ZSBudW0gZGVjbGFyZWQgdG8gbWFjODAyMTEgKi8KKwljb25zdCBpbnQgYmVhY29uX3F1 ZXVlID0gZGV2LT5xdWV1ZXM7CisKIAkvKiBkb24ndCBvdmVyZmxvdyB0aGUgdHggcmluZyAqLwot CWlmIChpZWVlODAyMTFfcXVldWVfc3RvcHBlZChkZXYsIDApKQorCWlmIChwcml2LT5iZWFjb25f cXVldWVfc3RvcCkKIAkJZ290byByZXNjaGVkOwogCiAJLyogZ3JhYiBhIGZyZXNoIGJlYWNvbiAq LwpAQCAtNzA4LDggKzE1OTMsNyBAQCBzdGF0aWMgdm9pZCBydGw4MTgwX2JlYWNvbl93b3JrKHN0 cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAq KXNrYi0+ZGF0YTsKIAltZ210LT51LmJlYWNvbi50aW1lc3RhbXAgPSBjcHVfdG9fbGU2NChydGw4 MTgwX2dldF90c2YoZGV2LCB2aWYpKTsKIAotCS8qIFRPRE86IHVzZSBhY3R1YWwgYmVhY29uIHF1 ZXVlICovCi0Jc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgMCk7CisJc2tiX3NldF9xdWV1ZV9t YXBwaW5nKHNrYiwgYmVhY29uX3F1ZXVlKTsKIAogCXJ0bDgxODBfdHgoZGV2LCBOVUxMLCBza2Ip OwogCkBAIC03NzIsMTEgKzE2NTYsMTQ3IEBAIHN0YXRpYyBpbnQgcnRsODE4MF9jb25maWcoc3Ry dWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MzIgY2hhbmdlZCkKIAlzdHJ1Y3QgcnRsODE4MF9wcml2 ICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZkZXYt PmNvbmY7CiAKKwlpbnQgY2hhbiA9CisJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChj b25mLT5jaGFuZGVmLmNoYW4tPmNlbnRlcl9mcmVxKTsKKworCiAJcHJpdi0+cmYtPnNldF9jaGFu KGRldiwgY29uZik7CiAKKwlwcml2LT5jdXJfY2hhbiA9IGNoYW47CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIHJ0bDgxODdzZV9jb25mX2FjX3Bhcm0oc3RydWN0IGllZWU4MDIxMV9odyAq ZGV2LCB1OCBxdWV1ZSkKK3sKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFt cyAqcGFyYW1zOworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwkv KiBodyB2YWx1ZSAqLworCXUzMiBhY19wYXJhbTsKKworCXU4IGFpZnM7CisJdTggdHhvcDsKKwl1 OCBjd19taW4sIGN3X21heDsKKworCXBhcmFtcyA9ICZwcml2LT5xdWV1ZV9wYXJhbVtxdWV1ZV07 CisKKwljd19taW4gPSBmbHMocGFyYW1zLT5jd19taW4pOworCWN3X21heCA9IGZscyhwYXJhbXMt PmN3X21heCk7CisKKworCWFpZnMgPSAxMCArIHBhcmFtcy0+YWlmcyAqIHByaXYtPnNsb3RfdGlt ZTsKKworCS8qIFRPRE86IGNoZWNrIGlmIHR4b3AgSFcgaXMgaW4gdXMgKG11bHQgYnkgMzIpICov CisJdHhvcCA9IHBhcmFtcy0+dHhvcDsKKworCWFjX3BhcmFtID0gdHhvcCA8PCBBQ19QQVJBTV9U WE9QX0xJTUlUX1NISUZUIHwKKwkJY3dfbWF4IDw8IEFDX1BBUkFNX0VDV19NQVhfU0hJRlQgfAor CQljd19taW4gPDwgQUNfUEFSQU1fRUNXX01JTl9TSElGVCB8CisJCWFpZnMgPDwgQUNfUEFSQU1f QUlGU19TSElGVDsKKworCXN3aXRjaCAocXVldWUpIHsKKwljYXNlIElFRUU4MDIxMV9BQ19CSzoK KwkJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QUNfQktfUEFSQU0sIGFjX3Bh cmFtKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQUNfQkU6CisJCXJ0bDgxOHhfaW93cml0 ZTMyKHByaXYsICZwcml2LT5tYXAtPkFDX0JFX1BBUkFNLCBhY19wYXJhbSk7CisJCWJyZWFrOwor CWNhc2UgSUVFRTgwMjExX0FDX1ZJOgorCQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+ bWFwLT5BQ19WSV9QQVJBTSwgYWNfcGFyYW0pOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9B Q19WTzoKKwkJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QUNfVk9fUEFSQU0s IGFjX3BhcmFtKTsKKwkJYnJlYWs7CisJfQorCit9CisKK3N0YXRpYyBpbnQgcnRsODE4MF9jb25m X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3Zp ZiAqdmlmLCB1MTYgcXVldWUsCisJCQkgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1 ZV9wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5w cml2OworCisJdTggY3dfbWluLCBjd19tYXg7CisKKwkvKiBub3RoaW5nIHRvIGRvID8gKi8KKwlp ZiAocHJpdi0+Y2hpcF9mYW1pbHkgPT0gUlRMODE4WF9DSElQX0ZBTUlMWV9SVEw4MTgwKQorCQly ZXR1cm4gMDsKKworCWN3X21pbiA9IGZscyhwYXJhbXMtPmN3X21pbik7CisJY3dfbWF4ID0gZmxz KHBhcmFtcy0+Y3dfbWF4KTsKKworCisJaWYgKHByaXYtPmNoaXBfZmFtaWx5ID09IFJUTDgxOFhf Q0hJUF9GQU1JTFlfUlRMODE4N1NFKSB7CisJCXByaXYtPnF1ZXVlX3BhcmFtW3F1ZXVlXSA9ICpw YXJhbXM7CisJCXJ0bDgxODdzZV9jb25mX2FjX3Bhcm0oZGV2LCBxdWV1ZSk7CisJfSBlbHNlIHsK KwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DV19WQUwsIChjd19tYXg8PDQp IHwgY3dfbWluKTsKKworCX0KKwogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBydGw4MTgw X2NvbmZfZXJwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgw MjExX2Jzc19jb25mICppbmZvKQoreworCisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRl di0+cHJpdjsKKworCXU4IHNpZnMsIGRpZnM7CisJaW50IGVpZnM7CisJdTggaHdfZWlmczsKKwor CS8qIFRPRE86IHNob3VsZCB3ZSBkbyBzb21ldGhpbmcgPyAqLworCWlmIChwcml2LT5jaGlwX2Zh bWlseSA9PSBSVEw4MThYX0NISVBfRkFNSUxZX1JUTDgxODApCisJCXJldHVybjsKKworCS8qIEkg X2hvcGVfIHRoaXMgbWVhbnMgMTB1UyBmb3IgdGhlIEhXLgorCSAqIEluIHJlZmVyZW5jZSBjb2Rl IGl0IGlzIDB4MjIgZm9yCisJICogYm90aCBydGw4MTg3TCBhbmQgcnRsODE4N1NFCisJICovCisJ c2lmcyA9IDB4MjI7CisKKwlpZiAoaW5mby0+dXNlX3Nob3J0X3Nsb3QpIHsKKwkJcHJpdi0+c2xv dF90aW1lID0gOTsKKwl9IGVsc2UgeworCQlwcml2LT5zbG90X3RpbWUgPSAyMDsKKwl9CisKKwkv KiAxMCBpcyBTSUZTIHRpbWUgaW4gdVMgKi8KKwlkaWZzID0gMTAgKyAyICogcHJpdi0+c2xvdF90 aW1lOworCWVpZnMgPSAxMCArIGRpZnMgKyBwcml2LT5hY2tfdGltZTsKKworCS8qIEhXIHNob3Vs ZCB1c2UgNHVTIHVuaXRzIGZvciBFSUZTIChJJ20gc3VyZSBmb3IgcnRsODE4NSkqLworCWh3X2Vp ZnMgPSBESVZfUk9VTkRfVVAoZWlmcywgNCk7CisKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwg JnByaXYtPm1hcC0+U0xPVCwgcHJpdi0+c2xvdF90aW1lKTsKKwlydGw4MTh4X2lvd3JpdGU4KHBy aXYsICZwcml2LT5tYXAtPlNJRlMsIHNpZnMpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnBy aXYtPm1hcC0+RElGUywgZGlmcyk7CisKKwkvKiBmcm9tIHJlZmVyZW5jZSBjb2RlLiBzZXQgYWNr IHRpbWVvdXQgcmVnID0gZWlmcyByZWcgKi8KKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2 LT5tYXAtPkNBUlJJRVJfU0VOU0VfQ09VTlRFUiwgaHdfZWlmcyk7CisKKwlpZiAocHJpdi0+Y2hp cF9mYW1pbHkgPT0gUlRMODE4WF9DSElQX0ZBTUlMWV9SVEw4MTg3U0UpIHsKKworCisJCXJ0bDgx OHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUlGU184MTg3U0UsIGh3X2VpZnMpOworCisK Kwl9IGVsc2UgaWYgKHByaXYtPmNoaXBfZmFtaWx5ID09IFJUTDgxOFhfQ0hJUF9GQU1JTFlfUlRM ODE4NSkgeworCisJCS8qIHJ0bDgxODcvcnRsODE4NSBIVyBidWcuIEFmdGVyIEVJRlMgaXMgZWxh cHNlZCwKKwkJICogdGhlIEhXIHN0aWxsIHdhaXQgZm9yIERJRlMuCisJCSAqIEhXIHVzZXMgNHVT IHVuaXRzIGZvciBFSUZTLgorCQkgKi8KKwkJaHdfZWlmcyA9IERJVl9ST1VORF9VUChlaWZzIC0g ZGlmcywgNCk7CisKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FSUZTLCBo d19laWZzKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHJ0bDgxODBfYnNzX2luZm9fY2hhbmdlZChz dHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAq dmlmLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKQEAgLTc4OSwx MSArMTgwOSwyNSBAQCBzdGF0aWMgdm9pZCBydGw4MTgwX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0 IGllZWU4MDIxMV9odyAqZGV2LAogCiAJdmlmX3ByaXYgPSAoc3RydWN0IHJ0bDgxODBfdmlmICop JnZpZi0+ZHJ2X3ByaXY7CiAKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9JTlQp CisJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPkJFQUNPTl9JTlRFUlZBTCwK KwkJCQkgIGluZm8tPmJlYWNvbl9pbnQpOworCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9C U1NJRCkgeworCisJCS8qIGFjY2VzcyBic3NpZCBpbiBjb25maWcgbW9kZSBoYXMgYmVlbiBzZWVu IGluIHJ0bDgxODdzZSBjb2RlLi4KKwkJICogVE9ETzogY2hlY2sgaWYgbmVlZGVkCisJCSAqLwor CQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsCisJCQkJIFJU TDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOworCiAJCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsg aSsrKQogCQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5CU1NJRFtpXSwKIAkJ CQkJIGluZm8tPmJzc2lkW2ldKTsKIAorCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5t YXAtPkVFUFJPTV9DTUQsCisJCQkJIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOworCiAJCWlm IChpc192YWxpZF9ldGhlcl9hZGRyKGluZm8tPmJzc2lkKSkgewogCQkJaWYgKHZpZi0+dHlwZSA9 PSBOTDgwMjExX0lGVFlQRV9BREhPQykKIAkJCQlyZWcgPSBSVEw4MThYX01TUl9BREhPQzsKQEAg LTgwMSwxMSArMTgzNSw0MSBAQCBzdGF0aWMgdm9pZCBydGw4MTgwX2Jzc19pbmZvX2NoYW5nZWQo c3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAogCQkJCXJlZyA9IFJUTDgxOFhfTVNSX0lORlJBOwog CQl9IGVsc2UKIAkJCXJlZyA9IFJUTDgxOFhfTVNSX05PX0xJTks7CisKKworCQlpZiAocHJpdi0+ Y2hpcF9mYW1pbHkgPT0gUlRMODE4WF9DSElQX0ZBTUlMWV9SVEw4MTg3U0UpIHsKKwkJCXJlZyB8 PSBSVEw4MThYX01TUl9FTkVEQ0E7CisJCX0KKwogCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZw cml2LT5tYXAtPk1TUiwgcmVnKTsKIAl9CiAKLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VS UF9TTE9UICYmIHByaXYtPnJmLT5jb25mX2VycCkKLQkJcHJpdi0+cmYtPmNvbmZfZXJwKGRldiwg aW5mbyk7CisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CQVNJQ19SQVRFUykKKwkJcnRsODE4 MF9jb25mX2Jhc2ljX3JhdGVzKGRldiwgaW5mby0+YmFzaWNfcmF0ZXMpOworCisJaWYgKGNoYW5n ZWQgJiAoQlNTX0NIQU5HRURfRVJQX1NMT1QgfCBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpKSB7 CisKKwkJLyogd2hlbiBwcmVhbWJsZSBjaGFuZ2VzLCBhY2t0aW1lIGR1cmF0aW9uIGNoYW5nZXMs IGFuZCBlcnAgbXVzdAorCQkgKiBiZSByZWNhbGN1bGF0ZWQuIEFDSyB0aW1lIGlzIGNhbGN1bGF0 ZWQgYXQgbG93ZXN0IHJhdGUuCisJCSAqIFNpbmNlIG1hYzgwMjExIGluY2x1ZGUgU0lGUyB0aW1l d2UgcmVtb3ZlIGl0ICgtMTApCisJCSAqLworCQlwcml2LT5hY2tfdGltZSA9IGxlMTZfdG9fY3B1 KGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uKGRldiwKKwkJCQkJcHJpdi0+dmlmLAor CQkJCQlJRUVFODAyMTFfQkFORF8yR0haLCAxMCwKKwkJCQkJJnByaXYtPnJhdGVzWzBdKSkgLSAx MDsKKworCQlydGw4MTgwX2NvbmZfZXJwKGRldiwgaW5mbyk7CisKKwkJLyogbWFjODAyMTEgc3Vw cGxpZXMgYWlmc19uIHRvIGRyaXZlciBhbmQgY2FsbHMKKwkJICogY29uZl90eCBjYWxsYmFjayB3 aGV0aGVyIGFpZnNfbiBjaGFuZ2VzLCBOT1QKKwkJICogd2hlbiBhaWZzIGNoYW5nZXMuCisJCSAq IEFpZnMgc2hvdWxkIGJlIHJlY2FsY3VsYXRlZCBpZiBzbG90IGNoYW5nZXMuCisJCSAqLworCQlp ZiAocHJpdi0+Y2hpcF9mYW1pbHkgPT0gUlRMODE4WF9DSElQX0ZBTUlMWV9SVEw4MTg3U0UpIHsK KwkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQkJcnRsODE4N3NlX2NvbmZfYWNfcGFybShk ZXYsIGkpOworCQl9CisJfQogCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5B QkxFRCkKIAkJdmlmX3ByaXYtPmVuYWJsZV9iZWFjb24gPSBpbmZvLT5lbmFibGVfYmVhY29uOwpA QCAtODYzLDYgKzE5MjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcnRs ODE4MF9vcHMgPSB7CiAJLnJlbW92ZV9pbnRlcmZhY2UJPSBydGw4MTgwX3JlbW92ZV9pbnRlcmZh Y2UsCiAJLmNvbmZpZwkJCT0gcnRsODE4MF9jb25maWcsCiAJLmJzc19pbmZvX2NoYW5nZWQJPSBy dGw4MTgwX2Jzc19pbmZvX2NoYW5nZWQsCisJLmNvbmZfdHgJCT0gcnRsODE4MF9jb25mX3R4LAog CS5wcmVwYXJlX211bHRpY2FzdAk9IHJ0bDgxODBfcHJlcGFyZV9tdWx0aWNhc3QsCiAJLmNvbmZp Z3VyZV9maWx0ZXIJPSBydGw4MTgwX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmdldF90c2YJCT0gcnRs ODE4MF9nZXRfdHNmLApAQCAtODcwLDggKzE5MzUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGll ZWU4MDIxMV9vcHMgcnRsODE4MF9vcHMgPSB7CiAKIHN0YXRpYyB2b2lkIHJ0bDgxODBfZWVwcm9t X3JlZ2lzdGVyX3JlYWQoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tKQogewotCXN0cnVjdCBp ZWVlODAyMTFfaHcgKmRldiA9IGVlcHJvbS0+ZGF0YTsKLQlzdHJ1Y3QgcnRsODE4MF9wcml2ICpw cml2ID0gZGV2LT5wcml2OworCisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGVlcHJvbS0+ ZGF0YTsKIAl1OCByZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9N X0NNRCk7CiAKIAllZXByb20tPnJlZ19kYXRhX2luID0gcmVnICYgUlRMODE4WF9FRVBST01fQ01E X1dSSVRFOwpAQCAtODgyLDggKzE5NDcsOCBAQCBzdGF0aWMgdm9pZCBydGw4MTgwX2VlcHJvbV9y ZWdpc3Rlcl9yZWFkKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSkKIAogc3RhdGljIHZvaWQg cnRsODE4MF9lZXByb21fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9t KQogewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IGVlcHJvbS0+ZGF0YTsKLQlzdHJ1Y3Qg cnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCisJc3RydWN0IHJ0bDgxODBfcHJpdiAq cHJpdiA9IGVlcHJvbS0+ZGF0YTsKIAl1OCByZWcgPSAyIDw8IDY7CiAKIAlpZiAoZWVwcm9tLT5y ZWdfZGF0YV9pbikKQEAgLTkwMCw2ICsxOTY1LDg2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxODBfZWVw cm9tX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSkKIAl1ZGVsYXko MTApOwogfQogCitzdGF0aWMgdm9pZCBydGw4MTgwX2VlcHJvbV9yZWFkKHN0cnVjdCBydGw4MTgw X3ByaXYgKnByaXYpCit7CisKKwlzdHJ1Y3QgZWVwcm9tXzkzY3g2IGVlcHJvbTsKKwlpbnQgZWVw cm9tX2Nja190YWJsZV9hZHI7CisJdTE2IGVlcHJvbV92YWw7CisJaW50IGk7CisKKworCWVlcHJv bS5kYXRhID0gcHJpdjsKKwllZXByb20ucmVnaXN0ZXJfcmVhZCA9IHJ0bDgxODBfZWVwcm9tX3Jl Z2lzdGVyX3JlYWQ7CisJZWVwcm9tLnJlZ2lzdGVyX3dyaXRlID0gcnRsODE4MF9lZXByb21fcmVn aXN0ZXJfd3JpdGU7CisJaWYgKHJ0bDgxOHhfaW9yZWFkMzIocHJpdiwgJnByaXYtPm1hcC0+Ulhf Q09ORikgJiAoMSA8PCA2KSkKKwkJZWVwcm9tLndpZHRoID0gUENJX0VFUFJPTV9XSURUSF85M0M2 NjsKKwllbHNlCisJCWVlcHJvbS53aWR0aCA9IFBDSV9FRVBST01fV0lEVEhfOTNDNDY7CisKKwly dGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQ Uk9NX0NNRF9QUk9HUkFNKTsKKwlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQ Uk9NX0NNRCk7CisJdWRlbGF5KDEwKTsKKworCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIDB4 MDYsICZlZXByb21fdmFsKTsKKwllZXByb21fdmFsICY9IDB4RkY7CisJcHJpdi0+cmZfdHlwZSA9 IGVlcHJvbV92YWw7CisKKwllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCAweDE3LCAmZWVwcm9t X3ZhbCk7CisJcHJpdi0+Y3N0aHJlc2hvbGQgPSBlZXByb21fdmFsID4+IDg7CisKKwllZXByb21f OTNjeDZfbXVsdGlyZWFkKCZlZXByb20sIDB4NywgKF9fbGUxNiAqKXByaXYtPm1hY19hZGRyLCAz KTsKKworCisJaWYgKHByaXYtPmNoaXBfZmFtaWx5ID09IFJUTDgxOFhfQ0hJUF9GQU1JTFlfUlRM ODE4N1NFKSB7CisJCWVlcHJvbV9jY2tfdGFibGVfYWRyID0gMHgzMDsKKwl9IGVsc2UgeworCQll ZXByb21fY2NrX3RhYmxlX2FkciA9IDB4MTA7CisJfQorCisJLyogQ0NLIFRYIHBvd2VyICovCisJ Zm9yIChpID0gMDsgaSA8IDE0OyBpICs9IDIpIHsKKwkJdTE2IHR4cHdyOworCQllZXByb21fOTNj eDZfcmVhZCgmZWVwcm9tLCBlZXByb21fY2NrX3RhYmxlX2FkciArIChpID4+IDEpLCAmdHhwd3Ip OworCQlwcml2LT5jaGFubmVsc1tpXS5od192YWx1ZSA9IHR4cHdyICYgMHhGRjsKKwkJcHJpdi0+ Y2hhbm5lbHNbaSArIDFdLmh3X3ZhbHVlID0gdHhwd3IgPj4gODsKKwl9CisKKwkvKiBPRkRNIFRY IHBvd2VyICovCisJaWYgKHByaXYtPmNoaXBfZmFtaWx5ICE9IFJUTDgxOFhfQ0hJUF9GQU1JTFlf UlRMODE4MCkgeworCQlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkgKz0gMikgeworCQkJdTE2IHR4cHdy OworCQkJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgMHgyMCArIChpID4+IDEpLCAmdHhwd3Ip OworCQkJcHJpdi0+Y2hhbm5lbHNbaV0uaHdfdmFsdWUgfD0gKHR4cHdyICYgMHhGRikgPDwgODsK KwkJCXByaXYtPmNoYW5uZWxzW2kgKyAxXS5od192YWx1ZSB8PSB0eHB3ciAmIDB4RkYwMDsKKwkJ fQorCX0KKworCisJaWYgKHByaXYtPmNoaXBfZmFtaWx5ID09IFJUTDgxOFhfQ0hJUF9GQU1JTFlf UlRMODE4MCkgeworCQlfX2xlMzIgYW5hcGFyYW07CisJCWVlcHJvbV85M2N4Nl9tdWx0aXJlYWQo JmVlcHJvbSwgMHhELCAoX19sZTE2ICopJmFuYXBhcmFtLCAyKTsKKwkJcHJpdi0+YW5hcGFyYW0g PSBsZTMyX3RvX2NwdShhbmFwYXJhbSk7CisJCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIDB4 MTksICZwcml2LT5yZnBhcmFtKTsKKwl9CisKKworCWlmIChwcml2LT5jaGlwX2ZhbWlseSA9PSBS VEw4MThYX0NISVBfRkFNSUxZX1JUTDgxODdTRSkgeworCQllZXByb21fOTNjeDZfcmVhZCgmZWVw cm9tLCAweDNGLCAmZWVwcm9tX3ZhbCk7CisJCXByaXYtPmFudGVubmFfZGl2ZXJzaXR5X2VuID0g ISEoZWVwcm9tX3ZhbCAmIDB4MTAwKTsKKwkJcHJpdi0+YW50ZW5uYV9kaXZlcnNpdHlfZGVmYXVs dCA9IChlZXByb21fdmFsICYgMHhDMDApID09IDB4NDAwOworCisJCWVlcHJvbV85M2N4Nl9yZWFk KCZlZXByb20sIDB4N0MsICZlZXByb21fdmFsKTsKKwkJcHJpdi0+eHRhbF9vdXQgPSBlZXByb21f dmFsICYgMHhGOworCQlwcml2LT54dGFsX2luID0gKGVlcHJvbV92YWwgJiAweEYwKSA+PiA0Owor CQlwcml2LT54dGFsX2NhbCA9ICEhKGVlcHJvbV92YWwgJiAweDEwMDApOworCQlwcml2LT50aGVy bWFsX21ldGVyX3ZhbCA9IChlZXByb21fdmFsICYgMHhGMDApID4+IDg7CisJCXByaXYtPnRoZXJt YWxfbWV0ZXJfZW4gPSAhIShlZXByb21fdmFsICYgMHgyMDAwKTsKKwl9CisKKwlydGw4MTh4X2lv d3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9O T1JNQUwpOworfQorCiBzdGF0aWMgaW50IHJ0bDgxODBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBk ZXYsCiAJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewpAQCAtOTA3LDEy ICsyMDUyLDkgQEAgc3RhdGljIGludCBydGw4MTgwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2 LAogCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXY7CiAJdW5zaWduZWQgbG9uZyBtZW1fYWRkciwg bWVtX2xlbjsKIAl1bnNpZ25lZCBpbnQgaW9fYWRkciwgaW9fbGVuOwotCWludCBlcnIsIGk7Ci0J c3RydWN0IGVlcHJvbV85M2N4NiBlZXByb207CisJaW50IGVycjsKIAljb25zdCBjaGFyICpjaGlw X25hbWUsICpyZl9uYW1lID0gTlVMTDsKIAl1MzIgcmVnOwotCXUxNiBlZXByb21fdmFsOwotCXU4 IG1hY19hZGRyW0VUSF9BTEVOXTsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwog CWlmIChlcnIpIHsKQEAgLTk0MSw4ICsyMDgzLDggQEAgc3RhdGljIGludCBydGw4MTgwX3Byb2Jl KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQlnb3RvIGVycl9mcmVlX3JlZzsKIAl9CiAKLQlpZiAo KGVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHx8Ci0JICAg IChlcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMy KSkpKSB7CisJaWYgKChlcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIDB4RkZGRkZGMDBVTCkp IHx8CisJICAgIChlcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgMHhGRkZG RkYwMFVMKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcyAocnRsODE4MCk6IE5vIHN1aXRhYmxl IERNQSBhdmFpbGFibGVcbiIsCiAJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CiAJCWdvdG8gZXJy X2ZyZWVfcmVnOwpAQCAtOTk0LDUxICsyMTM2LDcwIEBAIHN0YXRpYyBpbnQgcnRsODE4MF9wcm9i ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAlkZXYtPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3Ry dWN0IHJ0bDgxODBfdmlmKTsKIAlkZXYtPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4 MDIxMV9JRlRZUEVfU1RBVElPTikgfAogCQkJCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOwot CWRldi0+cXVldWVzID0gMTsKKwogCWRldi0+bWF4X3NpZ25hbCA9IDY1OwogCiAJcmVnID0gcnRs ODE4eF9pb3JlYWQzMihwcml2LCAmcHJpdi0+bWFwLT5UWF9DT05GKTsKIAlyZWcgJj0gUlRMODE4 WF9UWF9DT05GX0hXVkVSX01BU0s7CisKIAlzd2l0Y2ggKHJlZykgewogCWNhc2UgUlRMODE4WF9U WF9DT05GX1I4MTgwX0FCQ0Q6CiAJCWNoaXBfbmFtZSA9ICJSVEw4MTgwIjsKKwkJcHJpdi0+Y2hp cF9mYW1pbHkgPSBSVEw4MThYX0NISVBfRkFNSUxZX1JUTDgxODA7CiAJCWJyZWFrOworCiAJY2Fz ZSBSVEw4MThYX1RYX0NPTkZfUjgxODBfRjoKIAkJY2hpcF9uYW1lID0gIlJUTDgxODB2RiI7CisJ CXByaXYtPmNoaXBfZmFtaWx5ID0gUlRMODE4WF9DSElQX0ZBTUlMWV9SVEw4MTgwOwogCQlicmVh azsKKwogCWNhc2UgUlRMODE4WF9UWF9DT05GX1I4MTg1X0FCQzoKIAkJY2hpcF9uYW1lID0gIlJU TDgxODUiOworCQlwcml2LT5jaGlwX2ZhbWlseSA9IFJUTDgxOFhfQ0hJUF9GQU1JTFlfUlRMODE4 NTsKIAkJYnJlYWs7CisKIAljYXNlIFJUTDgxOFhfVFhfQ09ORl9SODE4NV9EOgogCQljaGlwX25h bWUgPSAiUlRMODE4NXZEIjsKKwkJcHJpdi0+Y2hpcF9mYW1pbHkgPSBSVEw4MThYX0NISVBfRkFN SUxZX1JUTDgxODU7CiAJCWJyZWFrOworCisJY2FzZSBSVEw4MThYX1RYX0NPTkZfUlRMODE4N1NF OgorCQljaGlwX25hbWUgPSAiUlRMODE4N1NFIjsKKwkJcHJpdi0+Y2hpcF9mYW1pbHkgPSBSVEw4 MThYX0NISVBfRkFNSUxZX1JUTDgxODdTRTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlwcmlu dGsoS0VSTl9FUlIgIiVzIChydGw4MTgwKTogVW5rbm93biBjaGlwISAoMHgleClcbiIsCiAJCSAg ICAgICBwY2lfbmFtZShwZGV2KSwgcmVnID4+IDI1KTsKIAkJZ290byBlcnJfaW91bm1hcDsKIAl9 CiAKLQlwcml2LT5yODE4NSA9IHJlZyAmIFJUTDgxOFhfVFhfQ09ORl9SODE4NV9BQkM7Ci0JaWYg KHByaXYtPnI4MTg1KSB7CisKKwkvKiB3ZSBkZWNsYXJlIHRvIE1BQzgwMjExIGFsbCB0aGUgcXVl dWVzIGV4Y2VwdCBmb3IgYmVhY29uIHF1ZXVlCisJICogdGhhdCBpcyBoYW5kbGVkIGJ5IERSVi4g VFggcmluZ3MgYXJlIGFycmFuZ2VkIGluIHN1Y2ggYSB3YXkKKwkgKiB0aGF0IGxvd2VyIGlzIHRo ZSBJRFgsIGhpZ2hlciBpcyB0aGUgcHJpb3JpdHksIGluIG9yZGVyIHRvCisJICogYWNoaWV2ZSBk aXJlY3QgbWFwcGluZyB3aXRoIG1hYzgwMjExLCBob3dldmVyIHRoZSBiZWFjb24KKwkgKiBxdWV1 ZSBpcyBhbiBleGNlcHRpb24gYW5kIGl0IGlzIG1hcHBlZCBvbiB0aGUgaGlnaHN0IHR4IHJpbmcg SURYCisJICovCisJaWYgKHByaXYtPmNoaXBfZmFtaWx5ID09IFJUTDgxOFhfQ0hJUF9GQU1JTFlf UlRMODE4N1NFKSB7CisJCWRldi0+cXVldWVzID0gUlRMODE4N1NFX05SX1RYX1FVRVVFUyAtIDE7 CisJfSBlbHNlIHsKKwkJZGV2LT5xdWV1ZXMgPSBSVEw4MTgwX05SX1RYX1FVRVVFUyAtIDE7CisJ fQorCS8qIHRoaXMgZG9lcyBOT1QgbWVhbnMgd2UgYXJlIHNlbmRpbmcgYmVhY29ucywgdGhpcyBt ZWFucyB0aGF0IHRoZQorCSAqIEhXIGJlYWNvbiBxdWV1ZSBpcyBub3QgZnVsbAorCSAqLworCXBy aXYtPmJlYWNvbl9xdWV1ZV9zdG9wID0gZmFsc2U7CisKKworCWlmIChwcml2LT5jaGlwX2ZhbWls eSAhPSBSVEw4MThYX0NISVBfRkFNSUxZX1JUTDgxODApIHsKIAkJcHJpdi0+YmFuZC5uX2JpdHJh dGVzID0gQVJSQVlfU0laRShydGw4MTh4X3JhdGVzKTsKIAkJcGNpX3RyeV9zZXRfbXdpKHBkZXYp OwogCX0KIAotCWVlcHJvbS5kYXRhID0gZGV2OwotCWVlcHJvbS5yZWdpc3Rlcl9yZWFkID0gcnRs ODE4MF9lZXByb21fcmVnaXN0ZXJfcmVhZDsKLQllZXByb20ucmVnaXN0ZXJfd3JpdGUgPSBydGw4 MTgwX2VlcHJvbV9yZWdpc3Rlcl93cml0ZTsKLQlpZiAocnRsODE4eF9pb3JlYWQzMihwcml2LCAm cHJpdi0+bWFwLT5SWF9DT05GKSAmICgxIDw8IDYpKQotCQllZXByb20ud2lkdGggPSBQQ0lfRUVQ Uk9NX1dJRFRIXzkzQzY2OwotCWVsc2UKLQkJZWVwcm9tLndpZHRoID0gUENJX0VFUFJPTV9XSURU SF85M0M0NjsKLQotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NN RCwgUlRMODE4WF9FRVBST01fQ01EX1BST0dSQU0pOwotCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAm cHJpdi0+bWFwLT5FRVBST01fQ01EKTsKLQl1ZGVsYXkoMTApOworCXJ0bDgxODBfZWVwcm9tX3Jl YWQocHJpdik7CiAKLQllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCAweDA2LCAmZWVwcm9tX3Zh bCk7Ci0JZWVwcm9tX3ZhbCAmPSAweEZGOwotCXN3aXRjaCAoZWVwcm9tX3ZhbCkgeworCXN3aXRj aCAocHJpdi0+cmZfdHlwZSkgewogCWNhc2UgMToJcmZfbmFtZSA9ICJJbnRlcnNpbCI7CiAJCWJy ZWFrOwogCWNhc2UgMjoJcmZfbmFtZSA9ICJSRk1EIjsKQEAgLTEwNDksMTQgKzIyMTAsMTkgQEAg c3RhdGljIGludCBydGw4MTgwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQlicmVhazsK IAljYXNlIDU6CXByaXYtPnJmID0gJmdyZjUxMDFfcmZfb3BzOwogCQlicmVhazsKLQljYXNlIDk6 CXByaXYtPnJmID0gcnRsODE4MF9kZXRlY3RfcmYoZGV2KTsKKwljYXNlIDk6CisJCWlmIChwcml2 LT5jaGlwX2ZhbWlseSA9PSBSVEw4MThYX0NISVBfRkFNSUxZX1JUTDgxODdTRSkgeworCQkJcHJp di0+cmYgPSBydGw4MTg3c2VfZGV0ZWN0X3JmKGRldik7CisJCX0gZWxzZSB7CisJCQlwcml2LT5y ZiA9IHJ0bDgxODBfZGV0ZWN0X3JmKGRldik7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSAxMDoKIAkJ cmZfbmFtZSA9ICJSVEw4MjU1IjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5f RVJSICIlcyAocnRsODE4MCk6IFVua25vd24gUkYhICgweCV4KVxuIiwKLQkJICAgICAgIHBjaV9u YW1lKHBkZXYpLCBlZXByb21fdmFsKTsKKwkJICAgICAgIHBjaV9uYW1lKHBkZXYpLCBwcml2LT5y Zl90eXBlKTsKIAkJZ290byBlcnJfaW91bm1hcDsKIAl9CiAKQEAgLTEwNjYsNDIgKzIyMzIsMTUg QEAgc3RhdGljIGludCBydGw4MTgwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQlnb3Rv IGVycl9pb3VubWFwOwogCX0KIAotCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIDB4MTcsICZl ZXByb21fdmFsKTsKLQlwcml2LT5jc3RocmVzaG9sZCA9IGVlcHJvbV92YWwgPj4gODsKLQlpZiAo IXByaXYtPnI4MTg1KSB7Ci0JCV9fbGUzMiBhbmFwYXJhbTsKLQkJZWVwcm9tXzkzY3g2X211bHRp cmVhZCgmZWVwcm9tLCAweEQsIChfX2xlMTYgKikmYW5hcGFyYW0sIDIpOwotCQlwcml2LT5hbmFw YXJhbSA9IGxlMzJfdG9fY3B1KGFuYXBhcmFtKTsKLQkJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJv bSwgMHgxOSwgJnByaXYtPnJmcGFyYW0pOwotCX0KIAotCWVlcHJvbV85M2N4Nl9tdWx0aXJlYWQo JmVlcHJvbSwgMHg3LCAoX19sZTE2ICopbWFjX2FkZHIsIDMpOwotCWlmICghaXNfdmFsaWRfZXRo ZXJfYWRkcihtYWNfYWRkcikpIHsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihwcml2LT5t YWNfYWRkcikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgKHJ0bDgxODApOiBJbnZhbGlk IGh3YWRkciEgVXNpbmciCiAJCSAgICAgICAiIHJhbmRvbWx5IGdlbmVyYXRlZCBNQUMgYWRkclxu IiwgcGNpX25hbWUocGRldikpOwotCQlldGhfcmFuZG9tX2FkZHIobWFjX2FkZHIpOwotCX0KLQlT RVRfSUVFRTgwMjExX1BFUk1fQUREUihkZXYsIG1hY19hZGRyKTsKLQotCS8qIENDSyBUWCBwb3dl ciAqLwotCWZvciAoaSA9IDA7IGkgPCAxNDsgaSArPSAyKSB7Ci0JCXUxNiB0eHB3cjsKLQkJZWVw cm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgMHgxMCArIChpID4+IDEpLCAmdHhwd3IpOwotCQlwcml2 LT5jaGFubmVsc1tpXS5od192YWx1ZSA9IHR4cHdyICYgMHhGRjsKLQkJcHJpdi0+Y2hhbm5lbHNb aSArIDFdLmh3X3ZhbHVlID0gdHhwd3IgPj4gODsKLQl9Ci0KLQkvKiBPRkRNIFRYIHBvd2VyICov Ci0JaWYgKHByaXYtPnI4MTg1KSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAxNDsgaSArPSAyKSB7Ci0J CQl1MTYgdHhwd3I7Ci0JCQllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCAweDIwICsgKGkgPj4g MSksICZ0eHB3cik7Ci0JCQlwcml2LT5jaGFubmVsc1tpXS5od192YWx1ZSB8PSAodHhwd3IgJiAw eEZGKSA8PCA4OwotCQkJcHJpdi0+Y2hhbm5lbHNbaSArIDFdLmh3X3ZhbHVlIHw9IHR4cHdyICYg MHhGRjAwOwotCQl9CisJCWV0aF9yYW5kb21fYWRkcihwcml2LT5tYWNfYWRkcik7CiAJfQorCVNF VF9JRUVFODAyMTFfUEVSTV9BRERSKGRldiwgcHJpdi0+bWFjX2FkZHIpOwogCi0JcnRsODE4eF9p b3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURf Tk9STUFMKTsKIAogCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKIApAQCAtMTExMyw3ICsy MjUyLDcgQEAgc3RhdGljIGludCBydGw4MTgwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAog CX0KIAogCXdpcGh5X2luZm8oZGV2LT53aXBoeSwgImh3YWRkciAlcG0sICVzICsgJXNcbiIsCi0J CSAgIG1hY19hZGRyLCBjaGlwX25hbWUsIHByaXYtPnJmLT5uYW1lKTsKKwkJICAgcHJpdi0+bWFj X2FkZHIsIGNoaXBfbmFtZSwgcHJpdi0+cmYtPm5hbWUpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTEx MjEsNiArMjI2MCw3IEBAIHN0YXRpYyBpbnQgcnRsODE4MF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAq cGRldiwKIAlpb3VubWFwKHByaXYtPm1hcCk7CiAKICBlcnJfZnJlZV9kZXY6CisJcGNpX3NldF9k cnZkYXRhKHBkZXYsIE5VTEwpOwogCWllZWU4MDIxMV9mcmVlX2h3KGRldik7CiAKICBlcnJfZnJl ZV9yZWc6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODAv cnRsODE4MC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwL3J0bDgxODAu aAppbmRleCAzMDUyMzMxLi5iNGM3MjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVz cy9ydGw4MTh4L3J0bDgxODAvcnRsODE4MC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0 bDgxOHgvcnRsODE4MC9ydGw4MTgwLmgKQEAgLTExLDQyICsxMSw4MCBAQAogI2RlZmluZSBSRl9Q QVJBTV9DQVJSSUVSU0VOU0UyCSgxIDw8IDMpCiAKICNkZWZpbmUgQkJfQU5UQVRURU5fQ0hBTjE0 CTB4MEMKLSNkZWZpbmUgQkJfQU5URU5OQV9CIAkJMHg0MAorI2RlZmluZSBCQl9BTlRFTk5BX0IJ CTB4NDAKIAotI2RlZmluZSBCQl9IT1NUX0JBTkcgCQkoMSA8PCAzMCkKLSNkZWZpbmUgQkJfSE9T VF9CQU5HX0VOIAkoMSA8PCAyKQotI2RlZmluZSBCQl9IT1NUX0JBTkdfQ0xLIAkoMSA8PCAxKQor I2RlZmluZSBCQl9IT1NUX0JBTkcJCSgxIDw8IDMwKQorI2RlZmluZSBCQl9IT1NUX0JBTkdfRU4J CSgxIDw8IDIpCisjZGVmaW5lIEJCX0hPU1RfQkFOR19DTEsJKDEgPDwgMSkKICNkZWZpbmUgQkJf SE9TVF9CQU5HX0RBVEEJMQogCiAjZGVmaW5lIEFOQVBBUkFNX1RYREFDT0ZGX1NISUZUCTI3CiAj ZGVmaW5lIEFOQVBBUkFNX1BXUjBfU0hJRlQJMjgKLSNkZWZpbmUgQU5BUEFSQU1fUFdSMF9NQVNL IAkoMHgwNyA8PCBBTkFQQVJBTV9QV1IwX1NISUZUKQorI2RlZmluZSBBTkFQQVJBTV9QV1IwX01B U0sJKDB4MDcgPDwgQU5BUEFSQU1fUFdSMF9TSElGVCkKICNkZWZpbmUgQU5BUEFSQU1fUFdSMV9T SElGVAkyMAogI2RlZmluZSBBTkFQQVJBTV9QV1IxX01BU0sJKDB4N0YgPDwgQU5BUEFSQU1fUFdS MV9TSElGVCkKIAorLyogcnRsODE4MC9ydGw4MTg1IGhhdmUgMyBxdWV1ZSArIGJlYWNvbiBxdWV1 ZS4KKyAqIG1hYzgwMjExIGNhbiB1c2UganVzdCBvbmUsICsgYmVhY29uID0gMiB0b3QuCisgKi8K KyNkZWZpbmUgUlRMODE4MF9OUl9UWF9RVUVVRVMgMgorCisvKiBydGw4MTg3U0UgaGF2ZSA2IHF1 ZXVlcyArIGJlYWNvbiBxdWV1ZXMKKyAqIG1hYzgwMjExIGNhbiB1c2UgNCBRb1MgZGF0YSBxdWV1 ZSwgKyBiZWFjb24gPSA1IHRvdAorICovCisjZGVmaW5lIFJUTDgxODdTRV9OUl9UWF9RVUVVRVMg NQorCisvKiBmb3IgYXJyYXkgc3RhdGljIGFsbG9jYXRpb24sIGl0IGlzIHRoZSBtYXggb2YgYWJv dmUgKi8KKyNkZWZpbmUgUlRMODE4WF9OUl9UWF9RVUVVRVMgNQorCiBzdHJ1Y3QgcnRsODE4MF90 eF9kZXNjIHsKIAlfX2xlMzIgZmxhZ3M7CiAJX19sZTE2IHJ0c19kdXJhdGlvbjsKIAlfX2xlMTYg cGxjcF9sZW47CiAJX19sZTMyIHR4X2J1ZjsKLQlfX2xlMzIgZnJhbWVfbGVuOworCXVuaW9uewor CQlfX2xlMzIgZnJhbWVfbGVuOworCQlzdHJ1Y3QgeworCQkJX19sZTE2IGZyYW1lX2xlbl9zZTsK KwkJCV9fbGUxNiBmcmFtZV9kdXJhdGlvbjsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7 CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAJX19sZTMyIG5leHRfdHhfZGVzYzsKIAl1 OCBjdzsKIAl1OCByZXRyeV9saW1pdDsKIAl1OCBhZ2M7CiAJdTggZmxhZ3MyOwotCXUzMiByZXNl cnZlZFsyXTsKKwkvKiByc3ZkIGZvciA4MTgwLzgxODUuCisJICogdmFsaWQgZm9yIDgxODdzZSBi dXQgd2UgZG9udCB1c2UgaXQKKwkgKi8KKwl1MzIgcmVzZXJ2ZWQ7CisJLyogYWxsIHJzdmQgZm9y IDgxODAvODE4NSAqLworCV9fbGUxNiBmbGFnczM7CisJX19sZTE2IGZyYWdfcXNpemU7Cit9IF9f cGFja2VkOworCitzdHJ1Y3QgcnRsODE4eF9yeF9jbWRfZGVzYyB7CisJX19sZTMyIGZsYWdzOwor CXUzMiByZXNlcnZlZDsKKwlfX2xlMzIgcnhfYnVmOwogfSBfX3BhY2tlZDsKIAogc3RydWN0IHJ0 bDgxODBfcnhfZGVzYyB7CiAJX19sZTMyIGZsYWdzOwogCV9fbGUzMiBmbGFnczI7Ci0JdW5pb24g ewotCQlfX2xlMzIgcnhfYnVmOwotCQlfX2xlNjQgdHNmdDsKLQl9OworCV9fbGU2NCB0c2Z0Owor Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcnRsODE4N3NlX3J4X2Rlc2MgeworCV9fbGUzMiBmbGFn czsKKwlfX2xlNjQgdHNmdDsKKwlfX2xlMzIgZmxhZ3MyOworCV9fbGUzMiBmbGFnczM7CisJdTMy IHJlc2VydmVkWzNdOwogfSBfX3BhY2tlZDsKIAorCiBzdHJ1Y3QgcnRsODE4MF90eF9yaW5nIHsK IAlzdHJ1Y3QgcnRsODE4MF90eF9kZXNjICpkZXNjOwogCWRtYV9hZGRyX3QgZG1hOwpAQCAtNjMs NiArMTAxLDEzIEBAIHN0cnVjdCBydGw4MTgwX3ZpZiB7CiAJYm9vbCBlbmFibGVfYmVhY29uOwog fTsKIAordHlwZWRlZiBlbnVtIHsKKwlSVEw4MThYX0NISVBfRkFNSUxZX1JUTDgxODAsCisJUlRM ODE4WF9DSElQX0ZBTUlMWV9SVEw4MTg1LAorCVJUTDgxOFhfQ0hJUF9GQU1JTFlfUlRMODE4N1NF CisKK30gcnRsODE4eF9jaGlwX2ZhbWlseTsKKwogc3RydWN0IHJ0bDgxODBfcHJpdiB7CiAJLyog Y29tbW9uIGJldHdlZW4gcnRsODE4eCBkcml2ZXJzICovCiAJc3RydWN0IHJ0bDgxOHhfY3NyIF9f aW9tZW0gKm1hcDsKQEAgLTcxLDI4ICsxMTYsNDMgQEAgc3RydWN0IHJ0bDgxODBfcHJpdiB7CiAK IAkvKiBydGw4MTgwIGRyaXZlciBzcGVjaWZpYyAqLwogCXNwaW5sb2NrX3QgbG9jazsKLQlzdHJ1 Y3QgcnRsODE4MF9yeF9kZXNjICpyeF9yaW5nOworCXZvaWQgKnJ4X3Jpbmc7CisJdTggcnhfcmlu Z19zejsKIAlkbWFfYWRkcl90IHJ4X3JpbmdfZG1hOwogCXVuc2lnbmVkIGludCByeF9pZHg7CiAJ c3RydWN0IHNrX2J1ZmYgKnJ4X2J1ZlszMl07Ci0Jc3RydWN0IHJ0bDgxODBfdHhfcmluZyB0eF9y aW5nWzRdOworCXN0cnVjdCBydGw4MTgwX3R4X3JpbmcgdHhfcmluZ1tSVEw4MThYX05SX1RYX1FV RVVFU107CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzWzE0XTsKIAlzdHJ1Y3Qg aWVlZTgwMjExX3JhdGUgcmF0ZXNbMTJdOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2Jh bmQgYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyBxdWV1ZV9wYXJhbVs0 XTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlydGw4MTh4X2NoaXBfZmFtaWx5IGNoaXBfZmFt aWx5OwogCXUzMiByeF9jb25mOwotCi0JaW50IHI4MTg1OworCXU4IHNsb3RfdGltZTsKKwl1MTYg YWNrX3RpbWU7CisJYm9vbCBiZWFjb25fcXVldWVfc3RvcDsKIAl1MzIgYW5hcGFyYW07CiAJdTE2 IHJmcGFyYW07CiAJdTggY3N0aHJlc2hvbGQ7Ci0KKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJ dTggcmZfdHlwZTsKKwl1OCByZl9wcm9nX3R5cGU7CisJdTggeHRhbF9vdXQ7CisJdTggY3VyX2No YW47CisJdTggeHRhbF9pbjsKKwl1OCB4dGFsX2NhbDsKKwl1OCB0aGVybWFsX21ldGVyX3ZhbDsK Kwl1OCB0aGVybWFsX21ldGVyX2VuOworCXU4IGFudGVubmFfZGl2ZXJzaXR5X2VuOworCXU4IGFu dGVubmFfZGl2ZXJzaXR5X2RlZmF1bHQ7CiAJLyogc2VxdWVuY2UgIyAqLwogCXUxNiBzZXFubzsK IH07CiAKIHZvaWQgcnRsODE4MF93cml0ZV9waHkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1 OCBhZGRyLCB1MzIgZGF0YSk7CiB2b2lkIHJ0bDgxODBfc2V0X2FuYXBhcmFtKHN0cnVjdCBydGw4 MTgwX3ByaXYgKnByaXYsIHUzMiBhbmFwYXJhbSk7Cit2b2lkIHJ0bDgxODBfc2V0X2FuYXBhcmFt MihzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2LCB1MzIgYW5hcGFyYW0yKTsKIAogc3RhdGljIGlu bGluZSB1OCBydGw4MTh4X2lvcmVhZDgoc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiwgdTggX19p b21lbSAqYWRkcikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgv cnRsODE4MC9ydGw4MjI1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODAv cnRsODIyNS5jCmluZGV4IGQ2MGE1ZjMuLjQwYTM3NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9ydGw4MjI1LmMKKysrIGIvZHJpdmVycy9uZXQvd2ly ZWxlc3MvcnRsODE4eC9ydGw4MTgwL3J0bDgyMjUuYwpAQCAtMjIsNiArMjIsMTIxIEBACiAjaW5j bHVkZSAicnRsODE4MC5oIgogI2luY2x1ZGUgInJ0bDgyMjUuaCIKIAorc3RhdGljIGNvbnN0IHU4 IHJ0bDgyMjVfZ2FpbltdID0geworCTB4MjMsIDB4ODgsIDB4N2MsIDB4YTUsIC8qIC04MmRibSAq LworCTB4MjMsIDB4ODgsIDB4N2MsIDB4YjUsIC8qIC04MmRibSAqLworCTB4MjMsIDB4ODgsIDB4 N2MsIDB4YzUsIC8qIC04MmRibSAqLworCTB4MzMsIDB4ODAsIDB4NzksIDB4YzUsIC8qIC03OGRi bSAqLworCTB4NDMsIDB4NzgsIDB4NzYsIDB4YzUsIC8qIC03NGRibSAqLworCTB4NTMsIDB4NjAs IDB4NzMsIDB4YzUsIC8qIC03MGRibSAqLworCTB4NjMsIDB4NTgsIDB4NzAsIDB4YzUsIC8qIC02 NmRibSAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjVfdGhyZXNob2xkW10gPSB7CisJ MHg4ZCwgMHg4ZCwgMHg4ZCwgMHg4ZCwgMHg5ZCwgMHhhZCwgMHhiZAorfTsKKworc3RhdGljIGNv bnN0IHU4IHJ0bDgyMjVfdHhfZ2Fpbl9jY2tfb2ZkbVtdID0geworCTB4MDIsIDB4MDYsIDB4MGUs IDB4MWUsIDB4M2UsIDB4N2UKK307CisKK3N0YXRpYyBjb25zdCB1OCBydGw4MjI1X3R4X3Bvd2Vy X2Nja1tdID0geworCTB4MTgsIDB4MTcsIDB4MTUsIDB4MTEsIDB4MGMsIDB4MDgsIDB4MDQsIDB4 MDIsCisJMHgxYiwgMHgxYSwgMHgxNywgMHgxMywgMHgwZSwgMHgwOSwgMHgwNCwgMHgwMiwKKwkw eDFmLCAweDFlLCAweDFhLCAweDE1LCAweDEwLCAweDBhLCAweDA1LCAweDAyLAorCTB4MjIsIDB4 MjEsIDB4MWQsIDB4MTgsIDB4MTEsIDB4MGIsIDB4MDYsIDB4MDIsCisJMHgyNiwgMHgyNSwgMHgy MSwgMHgxYiwgMHgxNCwgMHgwZCwgMHgwNiwgMHgwMywKKwkweDJiLCAweDJhLCAweDI1LCAweDFl LCAweDE2LCAweDBlLCAweDA3LCAweDAzCit9OworCitzdGF0aWMgY29uc3QgdTggcnRsODIyNV90 eF9wb3dlcl9jY2tfY2gxNFtdID0geworCTB4MTgsIDB4MTcsIDB4MTUsIDB4MGMsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHgxYSwgMHgxNywgMHgwZSwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwKKwkweDFmLCAweDFlLCAweDFhLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAw LAorCTB4MjIsIDB4MjEsIDB4MWQsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgy NiwgMHgyNSwgMHgyMSwgMHgxMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDJiLCAweDJh LCAweDI1LCAweDE1LCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworCitzdGF0aWMgY29uc3Qg dTggcnRsODIyNV90eF9wb3dlcl9vZmRtW10gPSB7CisJMHg4MCwgMHg5MCwgMHhhMiwgMHhiNSwg MHhjYiwgMHhlNAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBydGw4MjI1X2NoYW5bXSA9IHsKKwkw eDA4NWMsIDB4MDhkYywgMHgwOTVjLCAweDA5ZGMsIDB4MGE1YywgMHgwYWRjLCAweDBiNWMsCisJ MHgwYmRjLCAweDBjNWMsIDB4MGNkYywgMHgwZDVjLCAweDBkZGMsIDB4MGU1YywgMHgwZjcyCit9 OworCisKK3N0YXRpYyBjb25zdCB1OCBydGw4MjI1ejJfdHhfcG93ZXJfY2NrX2NoMTRbXSA9IHsK KwkweDM2LCAweDM1LCAweDJlLCAweDFiLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworCitz dGF0aWMgY29uc3QgdTggcnRsODIyNXoyX3R4X3Bvd2VyX2Nja19CW10gPSB7CisJMHgzMCwgMHgy ZiwgMHgyOSwgMHgyMSwgMHgxOSwgMHgxMCwgMHgwOCwgMHgwNAorfTsKKworc3RhdGljIGNvbnN0 IHU4IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2tfQVtdID0geworCTB4MzMsIDB4MzIsIDB4MmIsIDB4 MjMsIDB4MWEsIDB4MTEsIDB4MDgsIDB4MDQKK307CisKK3N0YXRpYyBjb25zdCB1OCBydGw4MjI1 ejJfdHhfcG93ZXJfY2NrW10gPSB7CisJMHgzNiwgMHgzNSwgMHgyZSwgMHgyNSwgMHgxYywgMHgx MiwgMHgwOSwgMHgwNAorfTsKKworCitzdGF0aWMgY29uc3QgdTE2IHJ0bDgyMjViY2RfcnhnYWlu W10gPSB7CisJMHgwNDAwLCAweDA0MDEsIDB4MDQwMiwgMHgwNDAzLCAweDA0MDQsIDB4MDQwNSwg MHgwNDA4LCAweDA0MDksCisJMHgwNDBhLCAweDA0MGIsIDB4MDUwMiwgMHgwNTAzLCAweDA1MDQs IDB4MDUwNSwgMHgwNTQwLCAweDA1NDEsCisJMHgwNTQyLCAweDA1NDMsIDB4MDU0NCwgMHgwNTQ1 LCAweDA1ODAsIDB4MDU4MSwgMHgwNTgyLCAweDA1ODMsCisJMHgwNTg0LCAweDA1ODUsIDB4MDU4 OCwgMHgwNTg5LCAweDA1OGEsIDB4MDU4YiwgMHgwNjQzLCAweDA2NDQsCisJMHgwNjQ1LCAweDA2 ODAsIDB4MDY4MSwgMHgwNjgyLCAweDA2ODMsIDB4MDY4NCwgMHgwNjg1LCAweDA2ODgsCisJMHgw Njg5LCAweDA2OGEsIDB4MDY4YiwgMHgwNjhjLCAweDA3NDIsIDB4MDc0MywgMHgwNzQ0LCAweDA3 NDUsCisJMHgwNzgwLCAweDA3ODEsIDB4MDc4MiwgMHgwNzgzLCAweDA3ODQsIDB4MDc4NSwgMHgw Nzg4LCAweDA3ODksCisJMHgwNzhhLCAweDA3OGIsIDB4MDc4YywgMHgwNzhkLCAweDA3OTAsIDB4 MDc5MSwgMHgwNzkyLCAweDA3OTMsCisJMHgwNzk0LCAweDA3OTUsIDB4MDc5OCwgMHgwNzk5LCAw eDA3OWEsIDB4MDc5YiwgMHgwNzljLCAweDA3OWQsCisJMHgwN2EwLCAweDA3YTEsIDB4MDdhMiwg MHgwN2EzLCAweDA3YTQsIDB4MDdhNSwgMHgwN2E4LCAweDA3YTksCisJMHgwN2FhLCAweDA3YWIs IDB4MDdhYywgMHgwN2FkLCAweDA3YjAsIDB4MDdiMSwgMHgwN2IyLCAweDA3YjMsCisJMHgwN2I0 LCAweDA3YjUsIDB4MDdiOCwgMHgwN2I5LCAweDA3YmEsIDB4MDdiYiwgMHgwN2JiCit9OworCisK K3N0YXRpYyBjb25zdCB1MTYgcnRsODIyNXoyX3J4Z2FpbltdID0geworCTB4MDAwMCwgMHgwMDAx LCAweDAwMDIsIDB4MDAwMywgMHgwMDA0LCAweDAwMDUsIDB4MDAwOCwgMHgwMDA5LAorCTB4MDAw YSwgMHgwMDBiLCAweDAxMDIsIDB4MDEwMywgMHgwMTA0LCAweDAxMDUsIDB4MDE0MCwgMHgwMTQx LAorCTB4MDE0MiwgMHgwMTQzLCAweDAxNDQsIDB4MDE0NSwgMHgwMTgwLCAweDAxODEsIDB4MDE4 MiwgMHgwMTgzLAorCTB4MDE4NCwgMHgwMTg1LCAweDAxODgsIDB4MDE4OSwgMHgwMThhLCAweDAx OGIsIDB4MDI0MywgMHgwMjQ0LAorCTB4MDI0NSwgMHgwMjgwLCAweDAyODEsIDB4MDI4MiwgMHgw MjgzLCAweDAyODQsIDB4MDI4NSwgMHgwMjg4LAorCTB4MDI4OSwgMHgwMjhhLCAweDAyOGIsIDB4 MDI4YywgMHgwMzQyLCAweDAzNDMsIDB4MDM0NCwgMHgwMzQ1LAorCTB4MDM4MCwgMHgwMzgxLCAw eDAzODIsIDB4MDM4MywgMHgwMzg0LCAweDAzODUsIDB4MDM4OCwgMHgwMzg5LAorCTB4MDM4YSwg MHgwMzhiLCAweDAzOGMsIDB4MDM4ZCwgMHgwMzkwLCAweDAzOTEsIDB4MDM5MiwgMHgwMzkzLAor CTB4MDM5NCwgMHgwMzk1LCAweDAzOTgsIDB4MDM5OSwgMHgwMzlhLCAweDAzOWIsIDB4MDM5Yywg MHgwMzlkLAorCTB4MDNhMCwgMHgwM2ExLCAweDAzYTIsIDB4MDNhMywgMHgwM2E0LCAweDAzYTUs IDB4MDNhOCwgMHgwM2E5LAorCTB4MDNhYSwgMHgwM2FiLCAweDAzYWMsIDB4MDNhZCwgMHgwM2Iw LCAweDAzYjEsIDB4MDNiMiwgMHgwM2IzLAorCTB4MDNiNCwgMHgwM2I1LCAweDAzYjgsIDB4MDNi OSwgMHgwM2JhLCAweDAzYmIsIDB4MDNiYgorfTsKKworCitzdGF0aWMgY29uc3QgdTggcnRsODIy NV9hZ2NbXSA9IHsKKwkweDllLCAweDllLCAweDllLCAweDllLCAweDllLCAweDllLCAweDllLCAw eDllLAorCTB4OWQsIDB4OWMsIDB4OWIsIDB4OWEsIDB4OTksIDB4OTgsIDB4OTcsIDB4OTYsCisJ MHg5NSwgMHg5NCwgMHg5MywgMHg5MiwgMHg5MSwgMHg5MCwgMHg4ZiwgMHg4ZSwKKwkweDhkLCAw eDhjLCAweDhiLCAweDhhLCAweDg5LCAweDg4LCAweDg3LCAweDg2LAorCTB4ODUsIDB4ODQsIDB4 ODMsIDB4ODIsIDB4ODEsIDB4ODAsIDB4M2YsIDB4M2UsCisJMHgzZCwgMHgzYywgMHgzYiwgMHgz YSwgMHgzOSwgMHgzOCwgMHgzNywgMHgzNiwKKwkweDM1LCAweDM0LCAweDMzLCAweDMyLCAweDMx LCAweDMwLCAweDJmLCAweDJlLAorCTB4MmQsIDB4MmMsIDB4MmIsIDB4MmEsIDB4MjksIDB4Mjgs IDB4MjcsIDB4MjYsCisJMHgyNSwgMHgyNCwgMHgyMywgMHgyMiwgMHgyMSwgMHgyMCwgMHgxZiwg MHgxZSwKKwkweDFkLCAweDFjLCAweDFiLCAweDFhLCAweDE5LCAweDE4LCAweDE3LCAweDE2LAor CTB4MTUsIDB4MTQsIDB4MTMsIDB4MTIsIDB4MTEsIDB4MTAsIDB4MGYsIDB4MGUsCisJMHgwZCwg MHgwYywgMHgwYiwgMHgwYSwgMHgwOSwgMHgwOCwgMHgwNywgMHgwNiwKKwkweDA1LCAweDA0LCAw eDAzLCAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAorCTB4MDEsIDB4MDEsIDB4MDEsIDB4 MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCisJMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgw MSwgMHgwMSwgMHgwMSwgMHgwMSwKKwkweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAx LCAweDAxLCAweDAxCit9OworCisKIHN0YXRpYyB2b2lkIHJ0bDgyMjVfd3JpdGUoc3RydWN0IGll ZWU4MDIxMV9odyAqZGV2LCB1OCBhZGRyLCB1MTYgZGF0YSkKIHsKIAlzdHJ1Y3QgcnRsODE4MF9w cml2ICpwcml2ID0gZGV2LT5wcml2OwpAQCAtMTc2LDg0ICsyOTEsMTAgQEAgc3RhdGljIHUxNiBy dGw4MjI1X3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1OCBhZGRyKQogCXJldHVybiBv dXQ7CiB9CiAKLXN0YXRpYyBjb25zdCB1MTYgcnRsODIyNWJjZF9yeGdhaW5bXSA9IHsKLQkweDA0 MDAsIDB4MDQwMSwgMHgwNDAyLCAweDA0MDMsIDB4MDQwNCwgMHgwNDA1LCAweDA0MDgsIDB4MDQw OSwKLQkweDA0MGEsIDB4MDQwYiwgMHgwNTAyLCAweDA1MDMsIDB4MDUwNCwgMHgwNTA1LCAweDA1 NDAsIDB4MDU0MSwKLQkweDA1NDIsIDB4MDU0MywgMHgwNTQ0LCAweDA1NDUsIDB4MDU4MCwgMHgw NTgxLCAweDA1ODIsIDB4MDU4MywKLQkweDA1ODQsIDB4MDU4NSwgMHgwNTg4LCAweDA1ODksIDB4 MDU4YSwgMHgwNThiLCAweDA2NDMsIDB4MDY0NCwKLQkweDA2NDUsIDB4MDY4MCwgMHgwNjgxLCAw eDA2ODIsIDB4MDY4MywgMHgwNjg0LCAweDA2ODUsIDB4MDY4OCwKLQkweDA2ODksIDB4MDY4YSwg MHgwNjhiLCAweDA2OGMsIDB4MDc0MiwgMHgwNzQzLCAweDA3NDQsIDB4MDc0NSwKLQkweDA3ODAs IDB4MDc4MSwgMHgwNzgyLCAweDA3ODMsIDB4MDc4NCwgMHgwNzg1LCAweDA3ODgsIDB4MDc4OSwK LQkweDA3OGEsIDB4MDc4YiwgMHgwNzhjLCAweDA3OGQsIDB4MDc5MCwgMHgwNzkxLCAweDA3OTIs IDB4MDc5MywKLQkweDA3OTQsIDB4MDc5NSwgMHgwNzk4LCAweDA3OTksIDB4MDc5YSwgMHgwNzli LCAweDA3OWMsIDB4MDc5ZCwKLQkweDA3YTAsIDB4MDdhMSwgMHgwN2EyLCAweDA3YTMsIDB4MDdh NCwgMHgwN2E1LCAweDA3YTgsIDB4MDdhOSwKLQkweDA3YWEsIDB4MDdhYiwgMHgwN2FjLCAweDA3 YWQsIDB4MDdiMCwgMHgwN2IxLCAweDA3YjIsIDB4MDdiMywKLQkweDA3YjQsIDB4MDdiNSwgMHgw N2I4LCAweDA3YjksIDB4MDdiYSwgMHgwN2JiLCAweDA3YmIKLX07CiAKLXN0YXRpYyBjb25zdCB1 OCBydGw4MjI1X2FnY1tdID0gewotCTB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsIDB4OWUs IDB4OWUsIDB4OWUsCi0JMHg5ZCwgMHg5YywgMHg5YiwgMHg5YSwgMHg5OSwgMHg5OCwgMHg5Nywg MHg5NiwKLQkweDk1LCAweDk0LCAweDkzLCAweDkyLCAweDkxLCAweDkwLCAweDhmLCAweDhlLAot CTB4OGQsIDB4OGMsIDB4OGIsIDB4OGEsIDB4ODksIDB4ODgsIDB4ODcsIDB4ODYsCi0JMHg4NSwg MHg4NCwgMHg4MywgMHg4MiwgMHg4MSwgMHg4MCwgMHgzZiwgMHgzZSwKLQkweDNkLCAweDNjLCAw eDNiLCAweDNhLCAweDM5LCAweDM4LCAweDM3LCAweDM2LAotCTB4MzUsIDB4MzQsIDB4MzMsIDB4 MzIsIDB4MzEsIDB4MzAsIDB4MmYsIDB4MmUsCi0JMHgyZCwgMHgyYywgMHgyYiwgMHgyYSwgMHgy OSwgMHgyOCwgMHgyNywgMHgyNiwKLQkweDI1LCAweDI0LCAweDIzLCAweDIyLCAweDIxLCAweDIw LCAweDFmLCAweDFlLAotCTB4MWQsIDB4MWMsIDB4MWIsIDB4MWEsIDB4MTksIDB4MTgsIDB4MTcs IDB4MTYsCi0JMHgxNSwgMHgxNCwgMHgxMywgMHgxMiwgMHgxMSwgMHgxMCwgMHgwZiwgMHgwZSwK LQkweDBkLCAweDBjLCAweDBiLCAweDBhLCAweDA5LCAweDA4LCAweDA3LCAweDA2LAotCTB4MDUs IDB4MDQsIDB4MDMsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCi0JMHgwMSwgMHgwMSwg MHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKLQkweDAxLCAweDAxLCAweDAxLCAw eDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAotCTB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4 MDEsIDB4MDEsIDB4MDEsIDB4MDEKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBydGw4MjI1X2dhaW5b XSA9IHsKLQkweDIzLCAweDg4LCAweDdjLCAweGE1LCAvKiAtODJkYm0gKi8KLQkweDIzLCAweDg4 LCAweDdjLCAweGI1LCAvKiAtODJkYm0gKi8KLQkweDIzLCAweDg4LCAweDdjLCAweGM1LCAvKiAt ODJkYm0gKi8KLQkweDMzLCAweDgwLCAweDc5LCAweGM1LCAvKiAtNzhkYm0gKi8KLQkweDQzLCAw eDc4LCAweDc2LCAweGM1LCAvKiAtNzRkYm0gKi8KLQkweDUzLCAweDYwLCAweDczLCAweGM1LCAv KiAtNzBkYm0gKi8KLQkweDYzLCAweDU4LCAweDcwLCAweGM1LCAvKiAtNjZkYm0gKi8KLX07Ci0K LXN0YXRpYyBjb25zdCB1OCBydGw4MjI1X3RocmVzaG9sZFtdID0gewotCTB4OGQsIDB4OGQsIDB4 OGQsIDB4OGQsIDB4OWQsIDB4YWQsIDB4YmQKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBydGw4MjI1 X3R4X2dhaW5fY2NrX29mZG1bXSA9IHsKLQkweDAyLCAweDA2LCAweDBlLCAweDFlLCAweDNlLCAw eDdlCi19OwotCi1zdGF0aWMgY29uc3QgdTggcnRsODIyNV90eF9wb3dlcl9jY2tbXSA9IHsKLQkw eDE4LCAweDE3LCAweDE1LCAweDExLCAweDBjLCAweDA4LCAweDA0LCAweDAyLAotCTB4MWIsIDB4 MWEsIDB4MTcsIDB4MTMsIDB4MGUsIDB4MDksIDB4MDQsIDB4MDIsCi0JMHgxZiwgMHgxZSwgMHgx YSwgMHgxNSwgMHgxMCwgMHgwYSwgMHgwNSwgMHgwMiwKLQkweDIyLCAweDIxLCAweDFkLCAweDE4 LCAweDExLCAweDBiLCAweDA2LCAweDAyLAotCTB4MjYsIDB4MjUsIDB4MjEsIDB4MWIsIDB4MTQs IDB4MGQsIDB4MDYsIDB4MDMsCi0JMHgyYiwgMHgyYSwgMHgyNSwgMHgxZSwgMHgxNiwgMHgwZSwg MHgwNywgMHgwMwotfTsKIAotc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjVfdHhfcG93ZXJfY2NrX2No MTRbXSA9IHsKLQkweDE4LCAweDE3LCAweDE1LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAw LAotCTB4MWIsIDB4MWEsIDB4MTcsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgx ZiwgMHgxZSwgMHgxYSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDIx LCAweDFkLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MjYsIDB4MjUsIDB4MjEs IDB4MTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgyYiwgMHgyYSwgMHgyNSwgMHgxNSwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMAotfTsKIAotc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjVfdHhf cG93ZXJfb2ZkbVtdID0gewotCTB4ODAsIDB4OTAsIDB4YTIsIDB4YjUsIDB4Y2IsIDB4ZTQKLX07 CiAKLXN0YXRpYyBjb25zdCB1MzIgcnRsODIyNV9jaGFuW10gPSB7Ci0JMHgwODVjLCAweDA4ZGMs IDB4MDk1YywgMHgwOWRjLCAweDBhNWMsIDB4MGFkYywgMHgwYjVjLAotCTB4MGJkYywgMHgwYzVj LCAweDBjZGMsIDB4MGQ1YywgMHgwZGRjLCAweDBlNWMsIDB4MGY3MgotfTsKIAogc3RhdGljIHZv aWQgcnRsODIyNV9yZl9zZXRfdHhfcG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBpbnQg Y2hhbm5lbCkKIHsKQEAgLTI4Miw2ICszMjMsNyBAQCBzdGF0aWMgdm9pZCBydGw4MjI1X3JmX3Nl dF90eF9wb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCBjaGFubmVsKQogCiAJbXNs ZWVwKDEpOyAvKiBGSVhNRTogb3B0aW9uYWw/ICovCiAKKwkvKiBUT0RPOiB1c2VfYW5hcGFyYW0y X2Rldi5jX2Z1bmMqLwogCS8qIGFuYXBhcmFtMiBvbiAqLwogCXJ0bDgxOHhfaW93cml0ZTgocHJp diwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CiAJ cmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMpOwpAQCAtMzEy LDYgKzM1NCw3IEBAIHN0YXRpYyB2b2lkIHJ0bDgyMjVfcmZfaW5pdChzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpkZXYpCiAJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0 cHV0LCAweDA0ODApOwogCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGlu c0VuYWJsZSwgMHgxRkZGKTsKIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5S RlBpbnNTZWxlY3QsIDB4MDQ4OCk7CisKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5t YXAtPkdQX0VOQUJMRSwgMCk7CiAJcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVF UFJPTV9DTUQpOwogCW1zbGVlcCgyMDApOwkvKiBGSVhNRTogZWhoPz8gKi8KQEAgLTQ1NSwyMiAr NDk4LDYgQEAgc3RhdGljIHZvaWQgcnRsODIyNV9yZl9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcg KmRldikKIAlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQxLCBydGw4MjI1X3RocmVzaG9s ZFswXSk7CiB9CiAKLXN0YXRpYyBjb25zdCB1OCBydGw4MjI1ejJfdHhfcG93ZXJfY2NrX2NoMTRb XSA9IHsKLQkweDM2LCAweDM1LCAweDJlLCAweDFiLCAweDAwLCAweDAwLCAweDAwLCAweDAwCi19 OwotCi1zdGF0aWMgY29uc3QgdTggcnRsODIyNXoyX3R4X3Bvd2VyX2Nja19CW10gPSB7Ci0JMHgz MCwgMHgyZiwgMHgyOSwgMHgyMSwgMHgxOSwgMHgxMCwgMHgwOCwgMHgwNAotfTsKLQotc3RhdGlj IGNvbnN0IHU4IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2tfQVtdID0gewotCTB4MzMsIDB4MzIsIDB4 MmIsIDB4MjMsIDB4MWEsIDB4MTEsIDB4MDgsIDB4MDQKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBy dGw4MjI1ejJfdHhfcG93ZXJfY2NrW10gPSB7Ci0JMHgzNiwgMHgzNSwgMHgyZSwgMHgyNSwgMHgx YywgMHgxMiwgMHgwOSwgMHgwNAotfTsKLQogc3RhdGljIHZvaWQgcnRsODIyNXoyX3JmX3NldF90 eF9wb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCBjaGFubmVsKQogewogCXN0cnVj dCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CkBAIC01MTUsMjEgKzU0Miw2IEBAIHN0 YXRpYyB2b2lkIHJ0bDgyMjV6Ml9yZl9zZXRfdHhfcG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAq ZGV2LCBpbnQgY2hhbm5lbCkKIAltc2xlZXAoMSk7CiB9CiAKLXN0YXRpYyBjb25zdCB1MTYgcnRs ODIyNXoyX3J4Z2FpbltdID0gewotCTB4MDAwMCwgMHgwMDAxLCAweDAwMDIsIDB4MDAwMywgMHgw MDA0LCAweDAwMDUsIDB4MDAwOCwgMHgwMDA5LAotCTB4MDAwYSwgMHgwMDBiLCAweDAxMDIsIDB4 MDEwMywgMHgwMTA0LCAweDAxMDUsIDB4MDE0MCwgMHgwMTQxLAotCTB4MDE0MiwgMHgwMTQzLCAw eDAxNDQsIDB4MDE0NSwgMHgwMTgwLCAweDAxODEsIDB4MDE4MiwgMHgwMTgzLAotCTB4MDE4NCwg MHgwMTg1LCAweDAxODgsIDB4MDE4OSwgMHgwMThhLCAweDAxOGIsIDB4MDI0MywgMHgwMjQ0LAot CTB4MDI0NSwgMHgwMjgwLCAweDAyODEsIDB4MDI4MiwgMHgwMjgzLCAweDAyODQsIDB4MDI4NSwg MHgwMjg4LAotCTB4MDI4OSwgMHgwMjhhLCAweDAyOGIsIDB4MDI4YywgMHgwMzQyLCAweDAzNDMs IDB4MDM0NCwgMHgwMzQ1LAotCTB4MDM4MCwgMHgwMzgxLCAweDAzODIsIDB4MDM4MywgMHgwMzg0 LCAweDAzODUsIDB4MDM4OCwgMHgwMzg5LAotCTB4MDM4YSwgMHgwMzhiLCAweDAzOGMsIDB4MDM4 ZCwgMHgwMzkwLCAweDAzOTEsIDB4MDM5MiwgMHgwMzkzLAotCTB4MDM5NCwgMHgwMzk1LCAweDAz OTgsIDB4MDM5OSwgMHgwMzlhLCAweDAzOWIsIDB4MDM5YywgMHgwMzlkLAotCTB4MDNhMCwgMHgw M2ExLCAweDAzYTIsIDB4MDNhMywgMHgwM2E0LCAweDAzYTUsIDB4MDNhOCwgMHgwM2E5LAotCTB4 MDNhYSwgMHgwM2FiLCAweDAzYWMsIDB4MDNhZCwgMHgwM2IwLCAweDAzYjEsIDB4MDNiMiwgMHgw M2IzLAotCTB4MDNiNCwgMHgwM2I1LCAweDAzYjgsIDB4MDNiOSwgMHgwM2JhLCAweDAzYmIsIDB4 MDNiYgotfTsKLQogc3RhdGljIHZvaWQgcnRsODIyNXoyX3JmX2luaXQoc3RydWN0IGllZWU4MDIx MV9odyAqZGV2KQogewogCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CkBA IC03MzAsMzIgKzc0MiwxMyBAQCBzdGF0aWMgdm9pZCBydGw4MjI1X3JmX3NldF9jaGFubmVsKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKIAltc2xlZXAoMTApOwogfQogCi1zdGF0aWMgdm9pZCBy dGw4MjI1X3JmX2NvbmZfZXJwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQlzdHJ1Y3Qg aWVlZTgwMjExX2Jzc19jb25mICppbmZvKQotewotCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYg PSBkZXYtPnByaXY7Ci0KLQlpZiAoaW5mby0+dXNlX3Nob3J0X3Nsb3QpIHsKLQkJcnRsODE4eF9p b3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5TTE9ULCAweDkpOwotCQlydGw4MTh4X2lvd3JpdGU4 KHByaXYsICZwcml2LT5tYXAtPlNJRlMsIDB4MjIpOwotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYs ICZwcml2LT5tYXAtPkRJRlMsIDB4MTQpOwotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2 LT5tYXAtPkVJRlMsIDgxKTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5D V19WQUwsIDB4NzMpOwotCX0gZWxzZSB7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYt Pm1hcC0+U0xPVCwgMHgxNCk7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+ U0lGUywgMHg0NCk7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RElGUywg MHgyNCk7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUlGUywgODEpOwot CQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNXX1ZBTCwgMHhhNSk7Ci0JfQot fQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bDgxOHhfcmZfb3BzIHJ0bDgyMjVfb3BzID0gewog CS5uYW1lCQk9ICJydGw4MjI1IiwKIAkuaW5pdAkJPSBydGw4MjI1X3JmX2luaXQsCiAJLnN0b3AJ CT0gcnRsODIyNV9yZl9zdG9wLAogCS5zZXRfY2hhbgk9IHJ0bDgyMjVfcmZfc2V0X2NoYW5uZWws Ci0JLmNvbmZfZXJwCT0gcnRsODIyNV9yZl9jb25mX2VycCwKKwogfTsKIAogc3RhdGljIGNvbnN0 IHN0cnVjdCBydGw4MTh4X3JmX29wcyBydGw4MjI1ejJfb3BzID0gewpAQCAtNzYzLDcgKzc1Niw3 IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsODE4eF9yZl9vcHMgcnRsODIyNXoyX29wcyA9IHsK IAkuaW5pdAkJPSBydGw4MjI1ejJfcmZfaW5pdCwKIAkuc3RvcAkJPSBydGw4MjI1X3JmX3N0b3As CiAJLnNldF9jaGFuCT0gcnRsODIyNV9yZl9zZXRfY2hhbm5lbCwKLQkuY29uZl9lcnAJPSBydGw4 MjI1X3JmX2NvbmZfZXJwLAorCiB9OwogCiBjb25zdCBzdHJ1Y3QgcnRsODE4eF9yZl9vcHMgKiBy dGw4MTgwX2RldGVjdF9yZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCmRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODAvcnRsODIyNXNlLmMgYi9kcml2ZXJz L25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODAvcnRsODIyNXNlLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uY2E0ZDE0OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv bmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9ydGw4MjI1c2UuYwpAQCAtMCwwICsxLDUwMCBA QAorCisvKgorICogUmFkaW8gdHVuaW5nIGZvciBSVEw4MjI1IG9uIFJUTDgxODdTRQorICoKKyAq IENvcHlyaWdodCAyMDA5IExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4K KyAqCisgKiBCYXNlZCBvbiB0aGUgcjgxODAgYW5kIFJlYWx0ZWsgcjgxODdzZSBkcml2ZXJzLCB3 aGljaCBhcmU6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA1IEFuZHJlYSBNZXJlbGxvIDxhbmRyZWFt cmxAdGlzY2FsaS5pdD4sIGV0IGFsLgorICoKKyAqIEFsc28gYmFzZWQgb24gdGhlIHJ0bDgxODcg ZHJpdmVyLCB3aGljaCBpczoKKyAqIENvcHlyaWdodCAyMDA3IE1pY2hhZWwgV3UgPGZsYW1pbmdp Y2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IDIwMDcgQW5kcmVhIE1lcmVsbG8gPGFuZHJl YW1ybEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8 bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJydGw4MTgwLmgiCisjaW5jbHVkZSAicnRsODIy NXNlLmgiCisKKworI2RlZmluZSBQRlggInJ0bDgyMjUgKHNlKSIKKworc3RhdGljIGNvbnN0IHUz MiBSRl9HQUlOX1RBQkxFW10gPSB7CisJMHgwMDk2LCAweDAwNzYsIDB4MDA1NiwgMHgwMDM2LCAw eDAwMTYsIDB4MDFmNiwgMHgwMWQ2LCAweDAxYjYsCisJMHgwMTk2LCAweDAxNzYsIDB4MDBGNywg MHgwMEQ3LCAweDAwQjcsIDB4MDA5NywgMHgwMDc3LCAweDAwNTcsCisJMHgwMDM3LCAweDAwRkIs IDB4MDBEQiwgMHgwMEJCLCAweDAwRkYsIDB4MDBFMywgMHgwMEMzLCAweDAwQTMsCisJMHgwMDgz LCAweDAwNjMsIDB4MDA0MywgMHgwMDIzLCAweDAwMDMsIDB4MDFFMywgMHgwMUMzLCAweDAxQTMs CisJMHgwMTgzLCAweDAxNjMsIDB4MDE0MywgMHgwMTIzLCAweDAxMDMKK307CisKKworc3RhdGlj IGNvbnN0IHU4IGNja19vZmRtX2dhaW5fc2V0dGluZ3NbXSA9IHsKKwkweDAwLCAweDAxLCAweDAy LCAweDAzLCAweDA0LCAweDA1LAorCTB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIs CisJMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwgMHgxMCwgMHgxMSwKKwkweDEyLCAweDEzLCAweDE0 LCAweDE1LCAweDE2LCAweDE3LAorCTB4MTgsIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQs CisJMHgxZSwgMHgxZiwgMHgyMCwgMHgyMSwgMHgyMiwgMHgyMywKK307CisKKworCitzdGF0aWMg Y29uc3QgdTggcnRsODIyNXNlX3R4X2dhaW5fY2NrX29mZG1bXSA9IHsKKwkweDAyLCAweDA2LCAw eDBlLCAweDFlLCAweDNlLCAweDdlCit9OworCitzdGF0aWMgY29uc3QgdTggcnRsODIyNXNlX3R4 X3Bvd2VyX2Nja1tdID0geworCTB4MTgsIDB4MTcsIDB4MTUsIDB4MTEsIDB4MGMsIDB4MDgsIDB4 MDQsIDB4MDIsCisJMHgxYiwgMHgxYSwgMHgxNywgMHgxMywgMHgwZSwgMHgwOSwgMHgwNCwgMHgw MiwKKwkweDFmLCAweDFlLCAweDFhLCAweDE1LCAweDEwLCAweDBhLCAweDA1LCAweDAyLAorCTB4 MjIsIDB4MjEsIDB4MWQsIDB4MTgsIDB4MTEsIDB4MGIsIDB4MDYsIDB4MDIsCisJMHgyNiwgMHgy NSwgMHgyMSwgMHgxYiwgMHgxNCwgMHgwZCwgMHgwNiwgMHgwMywKKwkweDJiLCAweDJhLCAweDI1 LCAweDFlLCAweDE2LCAweDBlLCAweDA3LCAweDAzCit9OworCitzdGF0aWMgY29uc3QgdTggcnRs ODIyNXNlX3R4X3Bvd2VyX2Nja19jaDE0W10gPSB7CisJMHgxOCwgMHgxNywgMHgxNSwgMHgwYywg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDFhLCAweDE3LCAweDBlLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLAorCTB4MWYsIDB4MWUsIDB4MWEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsCisJMHgyMiwgMHgyMSwgMHgxZCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwKKwkweDI2LCAweDI1LCAweDIxLCAweDEzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4 MmIsIDB4MmEsIDB4MjUsIDB4MTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKK307CisKK3N0YXRp YyBjb25zdCB1OCBydGw4MjI1c2VfdHhfcG93ZXJfb2ZkbVtdID0geworCTB4ODAsIDB4OTAsIDB4 YTIsIDB4YjUsIDB4Y2IsIDB4ZTQKK307CisKK3N0YXRpYyBjb25zdCB1MzIgcnRsODIyNXNlX2No YW5bXSA9IHsKKwkweDAwODAsIDB4MDEwMCwgMHgwMTgwLCAweDAyMDAsIDB4MDI4MCwgMHgwMzAw LCAweDAzODAsCisJMHgwNDAwLCAweDA0ODAsIDB4MDUwMCwgMHgwNTgwLCAweDA2MDAsIDB4MDY4 MCwgMHgwNzRBLAorfTsKKworc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjVzZXoyX3R4X3Bvd2VyX2Nj a19jaDE0W10gPSB7CisJMHgzNiwgMHgzNSwgMHgyZSwgMHgxYiwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMAorfTsKKworc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjVzZXoyX3R4X3Bvd2VyX2Nja19CW10g PSB7CisJMHgzMCwgMHgyZiwgMHgyOSwgMHgyMSwgMHgxOSwgMHgxMCwgMHgwOCwgMHgwNAorfTsK Kworc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjVzZXoyX3R4X3Bvd2VyX2Nja19BW10gPSB7CisJMHgz MywgMHgzMiwgMHgyYiwgMHgyMywgMHgxYSwgMHgxMSwgMHgwOCwgMHgwNAorfTsKKworc3RhdGlj IGNvbnN0IHU4IHJ0bDgyMjVzZXoyX3R4X3Bvd2VyX2Nja1tdID0geworCTB4MzYsIDB4MzUsIDB4 MmUsIDB4MjUsIDB4MWMsIDB4MTIsIDB4MDksIDB4MDQKK307CisKK3N0YXRpYyBjb25zdCB1OCBa RUJSQV9BR0NbXSA9IHsKKwkweDdFLCAweDdFLCAweDdFLCAweDdFLCAweDdELCAweDdDLCAweDdC LCAweDdBLAorCTB4NzksIDB4NzgsIDB4NzcsIDB4NzYsIDB4NzUsIDB4NzQsIDB4NzMsIDB4NzIs CisJMHg3MSwgMHg3MCwgMHg2RiwgMHg2RSwgMHg2RCwgMHg2QywgMHg2QiwgMHg2QSwKKwkweDY5 LCAweDY4LCAweDY3LCAweDY2LCAweDY1LCAweDY0LCAweDYzLCAweDYyLAorCTB4NDgsIDB4NDcs IDB4NDYsIDB4NDUsIDB4NDQsIDB4MjksIDB4MjgsIDB4MjcsCisJMHgyNiwgMHgyNSwgMHgyNCwg MHgyMywgMHgyMiwgMHgyMSwgMHgwOCwgMHgwNywKKwkweDA2LCAweDA1LCAweDA0LCAweDAzLCAw eDAyLCAweDAxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsCisJMHgwZiwgMHgwZiwgMHgwZiwgMHgwZiwgMHgwZiwgMHgwZiwgMHgw ZiwgMHgwZiwKKwkweDBmLCAweDBmLCAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE1LCAweDE2 LAorCTB4MTcsIDB4MTcsIDB4MTgsIDB4MTgsIDB4MTksIDB4MWEsIDB4MWEsIDB4MWIsCisJMHgx YiwgMHgxYywgMHgxYywgMHgxZCwgMHgxZCwgMHgxZCwgMHgxZSwgMHgxZSwKKwkweDFmLCAweDFm LCAweDFmLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIxLAorCTB4MjEsIDB4MjEsIDB4MjIs IDB4MjIsIDB4MjIsIDB4MjMsIDB4MjMsIDB4MjQsCisJMHgyNCwgMHgyNSwgMHgyNSwgMHgyNSwg MHgyNiwgMHgyNiwgMHgyNywgMHgyNywKKwkweDJGLCAweDJGLCAweDJGLCAweDJGLCAweDJGLCAw eDJGLCAweDJGLCAweDJGCit9OworCitzdGF0aWMgY29uc3QgdTggT0ZETV9DT05GSUdbXSA9IHsK KwkweDEwLCAweDBGLCAweDBBLCAweDBDLCAweDE0LCAweEZBLCAweEZGLCAweDUwLAorCTB4MDAs IDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NUMsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHgwMCwg MHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgyNiwKKwkweDMyLCAweDMzLCAweDA2LCAw eEE1LCAweDZGLCAweDU1LCAweEM4LCAweEJCLAorCTB4MEEsIDB4RTEsIDB4MkMsIDB4NEEsIDB4 ODYsIDB4ODMsIDB4MzQsIDB4MDAsCisJMHg0RiwgMHgyNCwgMHg2RiwgMHhDMiwgMHgwMywgMHg0 MCwgMHg4MCwgMHgwMCwKKwkweEMwLCAweEMxLCAweDU4LCAweEYxLCAweDAwLCAweEM0LCAweDkw LCAweDNlLAorCTB4RDgsIDB4M0MsIDB4N0IsIDB4MTAsIDB4MTAKK307CisKKworCisKKworc3Rh dGljIHZvaWQgcnRsODE4N3NlX3RocmVlX3dpcmVfaW8oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2 LCB1OCAqZGF0YSwKKwkJCQkgICAgdTggbGVuLCBib29sIHdyaXRlKQoreworCXN0cnVjdCBydGw4 MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJaW50IGk7CisJdTggdG1wOworCisJZG8gewor CQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCQl0bXAgPSBydGw4MTh4X2lvcmVhZDgocHJp diwgU1dfM1dfQ01EMSk7CisJCQlpZiAoISh0bXAgJiAweDMpKQorCQkJCWJyZWFrOworCQkJdWRl bGF5KDEwKTsKKwkJfQorCQlpZiAoaSA9PSA1KQorCQkJcHJpbnRrKEtFUk5fRVJSICBQRlggIkNt ZFJlZzogMHgleCBSRS9XRSBiaXRzIGFyZSBub3QiCisJCQkgICAgICAgIiBjbGVhclxuIiwgdG1w KTsKKwkJdG1wID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPnJmX3N3X2NvbmZp ZykgfCAweDAyOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPnJmX3N3X2Nv bmZpZywgdG1wKTsKKworCQl0bXAgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgUkVHX0FERFIxKDB4 ODQpKSAmIDB4Rjc7CisJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgUkVHX0FERFIxKDB4ODQpLCB0 bXApOworCQlpZiAod3JpdGUpIHsKKwkJCWlmIChsZW4gPT0gMTYpIHsKKwkJCQlydGw4MTh4X2lv d3JpdGUxNihwcml2LCBTV18zV19EQjAsCisJCQkJICAqKHUxNiAqKWRhdGEpOworCQkJfSBlbHNl IGlmIChsZW4gPT0gNjQpIHsKKwkJCQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCBTV18zV19EQjBf NCwKKwkJCQkgICooKHUzMiAqKWRhdGEpKTsKKwkJCQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCBT V18zV19EQjFfNCwKKwkJCQkgICooKHUzMiAqKShkYXRhICsgNCkpKTsKKwkJCX0gZWxzZQorCQkJ CXByaW50ayhLRVJOX0VSUiBQRlggIlVuaW1wbGVtZW50ZWQgbGVuZ3RoXG4iKTsKKwkJfSBlbHNl IHsKKwkJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsIFNXXzNXX0RCMCwgKih1MTYgKilkYXRhKTsK KwkJfQorCQlpZiAod3JpdGUpCisJCQl0bXAgPSAyOworCQllbHNlCisJCQl0bXAgPSAxOworCQly dGw4MTh4X2lvd3JpdGU4KHByaXYsIFNXXzNXX0NNRDEsIHRtcCk7CisJCWZvciAoaSA9IDA7IGkg PCA1OyBpKyspIHsKKwkJCXRtcCA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCBTV18zV19DTUQxKTsK KwkJCWlmICghKHRtcCAmIDB4MykpCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoMTApOworCQl9CisJ CXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgU1dfM1dfQ01EMSwgMCk7CisJCWlmICghd3JpdGUpIHsK KwkJCSooKHUxNiAqKWRhdGEpID0gcnRsODE4eF9pb3JlYWQxNihwcml2LCBTSV9EQVRBX1JFRyk7 CisJCQkqKCh1MTYgKilkYXRhKSAmPSAweDBGRkY7CisJCX0KKwl9IHdoaWxlICgwKTsKK30KKwor c3RhdGljIHUzMiBydGw4MTg3c2VfcmZfcmVhZHJlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYs IHU4IGFkZHIpCit7CisJdTMyIGRhdGFyZWFkID0gYWRkciAmIDB4MEY7CisJcnRsODE4N3NlX3Ro cmVlX3dpcmVfaW8oZGV2LCAodTggKikmZGF0YXJlYWQsIDE2LCAwKTsKKwlyZXR1cm4gZGF0YXJl YWQ7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxODdzZV9yZl93cml0ZXJlZyhzdHJ1Y3QgaWVlZTgw MjExX2h3ICpkZXYsIHU4IGFkZHIsIHUzMiBkYXRhKQoreworCXUzMiBvdXRkYXRhID0gKGRhdGEg PDwgNCkgfCAodTMyKShhZGRyICYgMHgwRik7CisJcnRsODE4N3NlX3RocmVlX3dpcmVfaW8oZGV2 LCAodTggKikmb3V0ZGF0YSwgMTYsIDEpOworfQorCisKK3N0YXRpYyB2b2lkIHJ0bDgyMjVzZV93 cml0ZV96ZWJyYV9hZ2Moc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCWludCBpOworCisJ Zm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7CisKKwkJcnRsODIyNXNlX3dyaXRlX3BoeV9vZmRt KGRldiwgMHhGLCBaRUJSQV9BR0NbaV0pOworCQlydGw4MjI1c2Vfd3JpdGVfcGh5X29mZG0oZGV2 LCAweEUsIGkrMHg4MCk7CisJCXJ0bDgyMjVzZV93cml0ZV9waHlfb2ZkbShkZXYsIDB4RSwgMCk7 CisKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxODdzZV93cml0ZV9vZmRtX2NvbmZpZyhzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJLyogd3JpdGUgT0ZETV9DT05GSUcgdGFibGUgKi8K KwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA2MDsgaSsrKQorCQlydGw4MjI1c2Vfd3JpdGVf cGh5X29mZG0oZGV2LCBpLCBPRkRNX0NPTkZJR1tpXSk7CisKK30KKworc3RhdGljIHZvaWQgcnRs ODIyNXNlejJfcmZfc2V0X3R4X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IGNo YW5uZWwpCit7CisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1OCBj Y2tfcG93ZXIsIG9mZG1fcG93ZXI7CisKKwljY2tfcG93ZXIgPSBwcml2LT5jaGFubmVsc1tjaGFu bmVsIC0gMV0uaHdfdmFsdWUgJiAweEZGOworCWlmIChjY2tfcG93ZXIgPiAzNSkKKwkJY2NrX3Bv d2VyID0gMzU7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9HQUlOX0ND SywKKwkJCSBjY2tfb2ZkbV9nYWluX3NldHRpbmdzW2Nja19wb3dlcl0pOworCisJbXNsZWVwKDEp OworCW9mZG1fcG93ZXIgPSBwcml2LT5jaGFubmVsc1tjaGFubmVsIC0gMV0uaHdfdmFsdWUgPj4g ODsKKwlpZiAob2ZkbV9wb3dlciA+IDM1KQorCQlvZmRtX3Bvd2VyID0gMzU7CisjaWYgMAorCWlm ICghZG9fb25jZSkgeworCQlydGw4MjI1c2Vfd3JpdGVfcGh5X29mZG0oZGV2LCAyLCAweDQyKTsK KwkJcnRsODIyNXNlX3dyaXRlX3BoeV9vZmRtKGRldiwgNSwgMHgwMCk7CisJCXJ0bDgyMjVzZV93 cml0ZV9waHlfb2ZkbShkZXYsIDYsIDB4NDApOworCQlydGw4MjI1c2Vfd3JpdGVfcGh5X29mZG0o ZGV2LCA3LCAweDAwKTsKKwkJcnRsODIyNXNlX3dyaXRlX3BoeV9vZmRtKGRldiwgOCwgMHg0MCk7 CisJCWRvX29uY2UrKzsKKwl9CisjZW5kaWYKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnBy aXYtPm1hcC0+VFhfR0FJTl9PRkRNLAorCQkJIGNja19vZmRtX2dhaW5fc2V0dGluZ3Nbb2ZkbV9w b3dlcl0pOworCWlmIChvZmRtX3Bvd2VyIDwgMTIpIHsKKwkJcnRsODIyNXNlX3dyaXRlX3BoeV9v ZmRtKGRldiwgNywgMHg1Qyk7CisJCXJ0bDgyMjVzZV93cml0ZV9waHlfb2ZkbShkZXYsIDksIDB4 NUMpOworCX0KKwlpZiAob2ZkbV9wb3dlciA8IDE4KSB7CisJCXJ0bDgyMjVzZV93cml0ZV9waHlf b2ZkbShkZXYsIDcsIDB4NTQpOworCQlydGw4MjI1c2Vfd3JpdGVfcGh5X29mZG0oZGV2LCA5LCAw eDU0KTsKKwl9IGVsc2UgeworCQlydGw4MjI1c2Vfd3JpdGVfcGh5X29mZG0oZGV2LCA3LCAweDUw KTsKKwkJcnRsODIyNXNlX3dyaXRlX3BoeV9vZmRtKGRldiwgOSwgMHg1MCk7CisJfQorCisJbXNs ZWVwKDEpOworfQorCisKK3N0YXRpYyB2b2lkIHJ0bDgxODdzZV93cml0ZV9yZl9nYWluKHN0cnVj dCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPD0gMzY7 IGkrKykgeworCQlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAweDAxLCBpKTsgbWRlbGF5KDEp OworCQlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAweDAyLCBSRl9HQUlOX1RBQkxFW2ldKTsg bWRlbGF5KDEpOworCX0KK30KKworc3RhdGljIHZvaWQgcnRsODE4N3NlX3dyaXRlX2luaXRpYWxf Z2FpbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCBpbml0X2dhaW4pCit7CisKKwlzd2l0 Y2ggKGluaXRfZ2FpbikgeworCWRlZmF1bHQ6CisJCXJ0bDgyMjVzZV93cml0ZV9waHlfb2ZkbShk ZXYsIDB4MTcsIDB4MjYpOyBtZGVsYXkoMSk7CisJCXJ0bDgyMjVzZV93cml0ZV9waHlfb2ZkbShk ZXYsIDB4MjQsIDB4ODYpOyBtZGVsYXkoMSk7CisJCXJ0bDgyMjVzZV93cml0ZV9waHlfb2ZkbShk ZXYsIDB4MDUsIDB4RkEpOyBtZGVsYXkoMSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcnRsODIy NXNlX3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHgzNik7IG1kZWxheSgxKTsKKwkJcnRsODIy NXNlX3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyNCwgMHg4Nik7IG1kZWxheSgxKTsKKwkJcnRsODIy NXNlX3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHhGQSk7IG1kZWxheSgxKTsKKwkJYnJlYWs7 CisJY2FzZSAzOgorCQlydGw4MjI1c2Vfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE3LCAweDM2KTsg bWRlbGF5KDEpOworCQlydGw4MjI1c2Vfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweDg2KTsg bWRlbGF5KDEpOworCQlydGw4MjI1c2Vfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA1LCAweEZCKTsg bWRlbGF5KDEpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXJ0bDgyMjVzZV93cml0ZV9waHlfb2Zk bShkZXYsIDB4MTcsIDB4NDYpOyBtZGVsYXkoMSk7CisJCXJ0bDgyMjVzZV93cml0ZV9waHlfb2Zk bShkZXYsIDB4MjQsIDB4ODYpOyBtZGVsYXkoMSk7CisJCXJ0bDgyMjVzZV93cml0ZV9waHlfb2Zk bShkZXYsIDB4MDUsIDB4RkIpOyBtZGVsYXkoMSk7CisJCWJyZWFrOworCWNhc2UgNToKKwkJcnRs ODIyNXNlX3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHg0Nik7IG1kZWxheSgxKTsKKwkJcnRs ODIyNXNlX3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyNCwgMHg5Nik7IG1kZWxheSgxKTsKKwkJcnRs ODIyNXNlX3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHhGQik7IG1kZWxheSgxKTsKKwkJYnJl YWs7CisJY2FzZSA2OgorCQlydGw4MjI1c2Vfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE3LCAweDU2 KTsgbWRlbGF5KDEpOworCQlydGw4MjI1c2Vfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweDk2 KTsgbWRlbGF5KDEpOworCQlydGw4MjI1c2Vfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA1LCAweEZD KTsgbWRlbGF5KDEpOworCQlicmVhazsKKwljYXNlIDc6CisJCXJ0bDgyMjVzZV93cml0ZV9waHlf b2ZkbShkZXYsIDB4MTcsIDB4NTYpOyBtZGVsYXkoMSk7CisJCXJ0bDgyMjVzZV93cml0ZV9waHlf b2ZkbShkZXYsIDB4MjQsIDB4QTYpOyBtZGVsYXkoMSk7CisJCXJ0bDgyMjVzZV93cml0ZV9waHlf b2ZkbShkZXYsIDB4MDUsIDB4RkMpOyBtZGVsYXkoMSk7CisJCWJyZWFrOworCWNhc2UgODoKKwkJ cnRsODIyNXNlX3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHg2Nik7IG1kZWxheSgxKTsKKwkJ cnRsODIyNXNlX3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyNCwgMHhCNik7IG1kZWxheSgxKTsKKwkJ cnRsODIyNXNlX3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHhGQyk7IG1kZWxheSgxKTsKKwkJ YnJlYWs7CisJfQorfQorCisKK3ZvaWQgcnRsODIyNXNlX3JmX2luaXQoc3RydWN0IGllZWU4MDIx MV9odyAqZGV2KQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJ dTMyIHJmMjMsIHJmMjQ7CisJdTggZF9jdXQgPSAwOworCXU4IHRtcDsKKworCS8qIFBhZ2UgMSAq LworCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4MDAsIDB4MDEzRik7IG1kZWxheSgxKTsK KwlyZjIzID0gcnRsODE4N3NlX3JmX3JlYWRyZWcoZGV2LCAweDA4KTsgbWRlbGF5KDEpOworCXJm MjQgPSBydGw4MTg3c2VfcmZfcmVhZHJlZyhkZXYsIDB4MDkpOyBtZGVsYXkoMSk7CisJaWYgKHJm MjMgPT0gMHgwODE4ICYmIHJmMjQgPT0gMHgwNzBDKQorCQlkX2N1dCA9IDE7CisKKwlwcmludGso S0VSTl9JTkZPIlJUTDgyMjUtU0UgdmVyc2lvbiAlc1xuIiwgZF9jdXQgPyAiRCIgOiAibm90LUQi KTsKKworCS8qIFBhZ2UgMDogcmVnIDAgLSAxNSAqLworCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhk ZXYsIDB4MDAsIDB4MDA5Rik7IG1kZWxheSgxKTsKKwlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2 LCAweDAxLCAweDA2RTApOyBtZGVsYXkoMSk7CisJcnRsODE4N3NlX3JmX3dyaXRlcmVnKGRldiwg MHgwMiwgMHgwMDREKTsgbWRlbGF5KDEpOworCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4 MDMsIDB4MDdGMSk7IG1kZWxheSgxKTsKKwlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAweDA0 LCAweDA5NzUpOyBtZGVsYXkoMSk7CisJcnRsODE4N3NlX3JmX3dyaXRlcmVnKGRldiwgMHgwNSwg MHgwQzcyKTsgbWRlbGF5KDEpOworCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4MDYsIDB4 MEFFNik7IG1kZWxheSgxKTsKKwlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAweDA3LCAweDAw Q0EpOyBtZGVsYXkoMSk7CisJcnRsODE4N3NlX3JmX3dyaXRlcmVnKGRldiwgMHgwOCwgMHgwRTFD KTsgbWRlbGF5KDEpOworCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4MDksIDB4MDJGMCk7 IG1kZWxheSgxKTsKKwlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAweDBBLCAweDA5RDApOyBt ZGVsYXkoMSk7CisJcnRsODE4N3NlX3JmX3dyaXRlcmVnKGRldiwgMHgwQiwgMHgwMUJBKTsgbWRl bGF5KDEpOworCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4MEMsIDB4MDY0MCk7IG1kZWxh eSgxKTsKKwlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAweDBELCAweDA4REYpOyBtZGVsYXko MSk7CisJcnRsODE4N3NlX3JmX3dyaXRlcmVnKGRldiwgMHgwRSwgMHgwMDIwKTsgbWRlbGF5KDEp OworCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4MEYsIDB4MDk5MCk7IG1kZWxheSgxKTsK KwkvKiBwYWdlIDE6IHJlZyAxNi0zMCAqLworCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4 MDAsIDB4MDEzRik7IG1kZWxheSgxKTsKKwlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAweDAz LCAweDA4MDYpOyBtZGVsYXkoMSk7CisJcnRsODE4N3NlX3JmX3dyaXRlcmVnKGRldiwgMHgwNCwg MHgwM0E3KTsgbWRlbGF5KDEpOworCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4MDUsIDB4 MDU5Qik7IG1kZWxheSgxKTsKKwlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAweDA2LCAweDAw ODEpOyBtZGVsYXkoMSk7CisJcnRsODE4N3NlX3JmX3dyaXRlcmVnKGRldiwgMHgwNywgMHgwMUEw KTsgbWRlbGF5KDEpOworCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4MEEsIDB4MDAwMSk7 IG1kZWxheSgxKTsKKwlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAweDBCLCAweDA0MTgpOyBt ZGVsYXkoMSk7CisJcnRsODE4N3NlX3JmX3dyaXRlcmVnKGRldiwgMHgwQywgMHgwRkJFKTsgbWRl bGF5KDEpOworCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4MEQsIDB4MDAwOCk7IG1kZWxh eSgxKTsKKwlpZiAoZF9jdXQpCisJCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4MEUsIDB4 MDgwNyk7CisJZWxzZQorCQlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAweDBFLCAweDA4MDYp OworCW1kZWxheSgxKTsKKwlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAweDBGLCAweDBBQ0Mp OyBtZGVsYXkoMSk7CisJcnRsODE4N3NlX3JmX3dyaXRlcmVnKGRldiwgMHgwMCwgMHgwMUQ3KTsg bWRlbGF5KDEpOworCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4MDMsIDB4MEUwMCk7IG1k ZWxheSgxKTsKKwlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAweDA0LCAweDBFNTApOyBtZGVs YXkoMSk7CisKKwlydGw4MTg3c2Vfd3JpdGVfcmZfZ2FpbihkZXYpOworCisJcnRsODE4N3NlX3Jm X3dyaXRlcmVnKGRldiwgMHgwNSwgMHgwMjAzKTsgbWRlbGF5KDEpOworCXJ0bDgxODdzZV9yZl93 cml0ZXJlZyhkZXYsIDB4MDYsIDB4MDIwMCk7IG1kZWxheSgxKTsKKwlydGw4MTg3c2VfcmZfd3Jp dGVyZWcoZGV2LCAweDAwLCAweDAxMzcpOyBtZGVsYXkoMTEpOworCXJ0bDgxODdzZV9yZl93cml0 ZXJlZyhkZXYsIDB4MEQsIDB4MDAwOCk7IG1kZWxheSgxMSk7CisJcnRsODE4N3NlX3JmX3dyaXRl cmVnKGRldiwgMHgwMCwgMHgwMDM3KTsgbWRlbGF5KDExKTsKKwlydGw4MTg3c2VfcmZfd3JpdGVy ZWcoZGV2LCAweDA0LCAweDAxNjApOyBtZGVsYXkoMTEpOworCXJ0bDgxODdzZV9yZl93cml0ZXJl ZyhkZXYsIDB4MDcsIDB4MDA4MCk7IG1kZWxheSgxMSk7CisJcnRsODE4N3NlX3JmX3dyaXRlcmVn KGRldiwgMHgwMiwgMHgwODhEKTsgbWRlbGF5KDIyMSk7CisJcnRsODE4N3NlX3JmX3dyaXRlcmVn KGRldiwgMHgwMCwgMHgwMTM3KTsgbWRlbGF5KDExKTsKKwlydGw4MTg3c2VfcmZfd3JpdGVyZWco ZGV2LCAweDA3LCAweDAwMDApOyBtZGVsYXkoMSk7CisJcnRsODE4N3NlX3JmX3dyaXRlcmVnKGRl diwgMHgwNywgMHgwMTgwKTsgbWRlbGF5KDEpOworCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYs IDB4MDcsIDB4MDIyMCk7IG1kZWxheSgxKTsKKwlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAw eDA3LCAweDAzRTApOyBtZGVsYXkoMSk7CisJcnRsODE4N3NlX3JmX3dyaXRlcmVnKGRldiwgMHgw NiwgMHgwMEMxKTsgbWRlbGF5KDEpOworCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4MEEs IDB4MDAwMSk7IG1kZWxheSgxKTsKKwlpZiAocHJpdi0+eHRhbF9jYWwpIHsKKwkJdG1wID0gKHBy aXYtPnh0YWxfaW4gPDwgNCkgfCAocHJpdi0+eHRhbF9vdXQgPDwgMSkgfAorCQkgICAgICAoMSA8 PCAxMSkgfCAoMSA8PCA5KTsKKwkJcnRsODE4N3NlX3JmX3dyaXRlcmVnKGRldiwgMHgwRiwgdG1w KTsKKwkJcHJpbnRrKCJYdGFsIGNhbFxuIik7CisJCW1kZWxheSgxKTsKKwl9IGVsc2UgeworCQlw cmludGsoIk5PIFh0YWwgY2FsXG4iKTsKKwkJcnRsODE4N3NlX3JmX3dyaXRlcmVnKGRldiwgMHgw RiwgMHgwQUNDKTsKKwkJbWRlbGF5KDEpOworCX0KKwkvKiBwYWdlIDAgKi8KKwlydGw4MTg3c2Vf cmZfd3JpdGVyZWcoZGV2LCAweDAwLCAweDAwQkYpOyBtZGVsYXkoMSk7CisJcnRsODE4N3NlX3Jm X3dyaXRlcmVnKGRldiwgMHgwRCwgMHgwOERGKTsgbWRlbGF5KDEpOworCXJ0bDgxODdzZV9yZl93 cml0ZXJlZyhkZXYsIDB4MDIsIDB4MDA0RCk7IG1kZWxheSgxKTsKKwlydGw4MTg3c2VfcmZfd3Jp dGVyZWcoZGV2LCAweDA0LCAweDA5NzUpOyBtZGVsYXkoMzEpOworCXJ0bDgxODdzZV9yZl93cml0 ZXJlZyhkZXYsIDB4MDAsIDB4MDE5Nyk7IG1kZWxheSgxKTsKKwlydGw4MTg3c2VfcmZfd3JpdGVy ZWcoZGV2LCAweDA1LCAweDA1QUIpOyBtZGVsYXkoMSk7CisKKwlydGw4MTg3c2VfcmZfd3JpdGVy ZWcoZGV2LCAweDAwLCAweDAwOUYpOyBtZGVsYXkoMSk7CisJcnRsODE4N3NlX3JmX3dyaXRlcmVn KGRldiwgMHgwMSwgMHgwMDAwKTsgbWRlbGF5KDEpOworCXJ0bDgxODdzZV9yZl93cml0ZXJlZyhk ZXYsIDB4MDIsIDB4MDAwMCk7IG1kZWxheSgxKTsKKwkvKiBwb3dlciBzYXZlIHBhcmFtZXRlcnMg Ki8KKwkvKiBUT0RPOiBtb3ZlIHRvIGRldi5jICovCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCBS RUdfQUREUjEoMHgwMjRFKSwKKwkJIHJ0bDgxOHhfaW9yZWFkOChwcml2LCBSRUdfQUREUjEoMHgy NEUpKSAmIDB4OUYpOworCXJ0bDgyMjVzZV93cml0ZV9waHlfY2NrKGRldiwgMHgwMCwgMHhDOCk7 CisJcnRsODIyNXNlX3dyaXRlX3BoeV9jY2soZGV2LCAweDA2LCAweDFDKTsKKwlydGw4MjI1c2Vf d3JpdGVfcGh5X2NjayhkZXYsIDB4MTAsIDB4NzgpOworCXJ0bDgyMjVzZV93cml0ZV9waHlfY2Nr KGRldiwgMHgyRSwgMHhEMCk7CisJcnRsODIyNXNlX3dyaXRlX3BoeV9jY2soZGV2LCAweDJGLCAw eDA2KTsKKwlydGw4MjI1c2Vfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDEsIDB4NDYpOworCisJLyog cG93ZXIgY29udHJvbCAqLworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhf R0FJTl9DQ0ssIDB4MTApOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhf R0FJTl9PRkRNLCAweDFCKTsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+ VFhfQU5URU5OQSwgMHgwMyk7CisJcnRsODIyNXNlX3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwMCwg MHgxMik7CisKKwlydGw4MjI1c2Vfd3JpdGVfemVicmFfYWdjKGRldik7CisKKwlydGw4MjI1c2Vf d3JpdGVfcGh5X29mZG0oZGV2LCAweDEwLCAweDAwKTsKKworCXJ0bDgxODdzZV93cml0ZV9vZmRt X2NvbmZpZyhkZXYpOworCisJLyogdHVybiBvbiBSRiAqLworCXJ0bDgxODdzZV9yZl93cml0ZXJl ZyhkZXYsIDB4MDAsIDB4MDA5Rik7IHVkZWxheSg1MDApOworCXJ0bDgxODdzZV9yZl93cml0ZXJl ZyhkZXYsIDB4MDQsIDB4MDk3Mik7IHVkZWxheSg1MDApOworCS8qIHR1cm4gb24gUkYgYWdhaW4g Ki8KKwlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAweDAwLCAweDAwOUYpOyB1ZGVsYXkoNTAw KTsKKwlydGw4MTg3c2VfcmZfd3JpdGVyZWcoZGV2LCAweDA0LCAweDA5NzIpOyB1ZGVsYXkoNTAw KTsKKwkvKiB0dXJuIG9uIEJCICovCisJcnRsODIyNXNlX3dyaXRlX3BoeV9vZmRtKGRldiwgMHgx MCwgMHg0MCk7CisJcnRsODIyNXNlX3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxMiwgMHg0MCk7CisK KwlydGw4MTg3c2Vfd3JpdGVfaW5pdGlhbF9nYWluKGRldiwgNCk7Cit9CisKKwordm9pZCBydGw4 MjI1c2VfcmZfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJLyogY2hlY2tlZCBm b3IgODE4N3NlICovCisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwor CisJLyogdHVybiBvZmYgQkIgUlhJUSBtYXRyaXggdG8gY3V0IG9mZiByeCBzaWduYWwgKi8KKwly dGw4MjI1c2Vfd3JpdGVfcGh5X29mZG0oZGV2LCAweDEwLCAweDAwKTsKKwlydGw4MjI1c2Vfd3Jp dGVfcGh5X29mZG0oZGV2LCAweDEyLCAweDAwKTsKKwkvKiB0dXJuIG9mZiBSRiAqLworCXJ0bDgx ODdzZV9yZl93cml0ZXJlZyhkZXYsIDB4MDQsIDB4MDAwMCk7CisJcnRsODE4N3NlX3JmX3dyaXRl cmVnKGRldiwgMHgwMCwgMHgwMDAwKTsKKworCW1zbGVlcCgxKTsKKwkvKiB0dXJuIG9mZiBBL0Qg YW5kIEQvQSAqLworCXJ0bDgxODBfc2V0X2FuYXBhcmFtKHByaXYsIFJUTDgyMjVTRV9BTkFQQVJB TV9PRkYpOworCXJ0bDgxODBfc2V0X2FuYXBhcmFtMihwcml2LCBSVEw4MjI1U0VfQU5BUEFSQU0y X09GRik7Cit9CisKK3ZvaWQgcnRsODIyNXNlX3JmX3NldF9jaGFubmVsKHN0cnVjdCBpZWVlODAy MTFfaHcgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCit7CisKKwlp bnQgY2hhbiA9CisJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjb25mLT5jaGFuZGVm LmNoYW4tPmNlbnRlcl9mcmVxKTsKKworCisJcnRsODIyNXNlejJfcmZfc2V0X3R4X3Bvd2VyKGRl diwgY2hhbik7CisJcnRsODE4N3NlX3JmX3dyaXRlcmVnKGRldiwgMHg3LCBydGw4MjI1c2VfY2hh bltjaGFuIC0gMV0pOworCWlmICgocnRsODE4N3NlX3JmX3JlYWRyZWcoZGV2LCAweDcpICYgMHgw RjgwKSAhPSBydGw4MjI1c2VfY2hhbltjaGFuIC0gMV0pCisJCXJ0bDgxODdzZV9yZl93cml0ZXJl ZyhkZXYsIDB4NywgcnRsODIyNXNlX2NoYW5bY2hhbiAtIDFdKTsKKwltc2xlZXAoMSk7CisKKwlt c2xlZXAoMTApOworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsODE4eF9yZl9vcHMgcnRs ODIyNXNlX29wcyA9IHsKKwkubmFtZQkJPSAicnRsODIyNS1zZSIsCisJLmluaXQJCT0gcnRsODIy NXNlX3JmX2luaXQsCisJLnN0b3AJCT0gcnRsODIyNXNlX3JmX3N0b3AsCisJLnNldF9jaGFuCT0g cnRsODIyNXNlX3JmX3NldF9jaGFubmVsLAorfTsKKworY29uc3Qgc3RydWN0IHJ0bDgxOHhfcmZf b3BzICpydGw4MTg3c2VfZGV0ZWN0X3JmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwly ZXR1cm4gJnJ0bDgyMjVzZV9vcHM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVz cy9ydGw4MTh4L3J0bDgxODAvcnRsODIyNXNlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4 MTh4L3J0bDgxODAvcnRsODIyNXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uYTFmOTJiYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgx OHgvcnRsODE4MC9ydGw4MjI1c2UuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogRGVmaW5pdGlv bnMgZm9yIFJUTDgxODdTRSBoYXJkd2FyZQorICoKKyAqIENvcHlyaWdodCAyMDA5IExhcnJ5IEZp bmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqIENvcHlyaWdodCAyMDE0IEFuZHJl YSBNZXJlbGxvIDxhbmRyZWEubWVyZWxsb0BnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gdGhl IHI4MTgwIGFuZCBSZWFsdGVrIHI4MTg3c2UgZHJpdmVycywgd2hpY2ggYXJlOgorICogQ29weXJp Z2h0IDIwMDQtMjAwNSBBbmRyZWEgTWVyZWxsbyA8YW5kcmVhLm1lcmVsbG9AZ21haWwuY29tPiwg ZXQgYWwuCisgKgorICogQWxzbyBiYXNlZCBvbiB0aGUgcnRsODE4NyBkcml2ZXIsIHdoaWNoIGlz OgorICogQ29weXJpZ2h0IDIwMDcgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+ CisgKiBDb3B5cmlnaHQgMjAwNyBBbmRyZWEgTWVyZWxsbyA8YW5kcmVhbXJsQHRpc2NhbGkuaXQ+ CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIFJUTDgxODdTRV9SVEw4MjI1 X0gKKyNkZWZpbmUgUlRMODE4N1NFX1JUTDgyMjVfSAorCisjZGVmaW5lIFJUTDgyMjVTRV9BTkFQ QVJBTV9PTgkweGIwMDU0ZDAwCisjZGVmaW5lIFJUTDgyMjVTRV9BTkFQQVJBTTJfT04JMHgwMDAw MDRjNgorCisvKiBhbGwgb2ZmIGV4Y2VwdCBQTEwgKi8KKyNkZWZpbmUgUlRMODIyNVNFX0FOQVBB UkFNX09GRgkweGIwMDU0ZGVjCisvKiBhbGwgb24gaW5jbHVkaW5nIFBMTCAqLworI2RlZmluZSBS VEw4MjI1U0VfQU5BUEFSQU1fT0ZGMgkweGIwMDU0ZGZjCisKKyNkZWZpbmUgUlRMODIyNVNFX0FO QVBBUkFNMl9PRkYJMHgwMGZmMDRjNgorCisjZGVmaW5lIFJUTDgyMjVTRV9BTkFQQVJBTTMgCTB4 MTAKKworZW51bSBydGw4MTg3c2VfcG93ZXJfc3RhdGUgeworCVJUTDgxODdTRV9QT1dFUl9PTiwK KwlSVEw4MTg3U0VfUE9XRVJfT0ZGLAorCVJUTDgxODdTRV9QT1dFUl9TTEVFUAorfTsKKworCitz dGF0aWMgaW5saW5lIHZvaWQgcnRsODIyNXNlX3dyaXRlX3BoeV9vZmRtKHN0cnVjdCBpZWVlODAy MTFfaHcgKmRldiwKKwkJCQkJICB1OCBhZGRyLCB1OCBkYXRhKQoreworCXJ0bDgxODBfd3JpdGVf cGh5KGRldiwgYWRkciwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MjI1c2Vf d3JpdGVfcGh5X2NjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJCSB1OCBhZGRyLCB1 OCBkYXRhKQoreworCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgYWRkciwgZGF0YSB8IDB4MTAwMDAp OworfQorCisKK2NvbnN0IHN0cnVjdCBydGw4MTh4X3JmX29wcyAqcnRsODE4N3NlX2RldGVjdF9y ZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICopOwordm9pZCBydGw4MjI1c2VfcmZfc3RvcChzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpkZXYpOwordm9pZCBydGw4MjI1c2VfcmZfc2V0X2NoYW5uZWwoc3RydWN0 IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25m KTsKK3ZvaWQgcnRsODIyNXNlX3JmX2NvbmZfZXJwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwK KwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pOwordm9pZCBydGw4MjI1c2Vf cmZfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpOworCisKKyNlbmRpZiAvKiBSVEw4MTg3 U0VfUlRMODIyNV9IICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgx OHgvcnRsODE4Ny9kZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny9k ZXYuYwppbmRleCBmZDc4ZGY4Li5mM2NlYzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJl bGVzcy9ydGw4MTh4L3J0bDgxODcvZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRs ODE4eC9ydGw4MTg3L2Rldi5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvaW5pdC5o PgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNs dWRlIDxsaW51eC9kZWxheS5oPgpAQCAtNDE1LDcgKzQxNiw3IEBAIHN0YXRpYyBpbnQgcnRsODE4 N19pbml0X3VyYnMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQogCXN0cnVjdCBydGw4MTg3X3J4 X2luZm8gKmluZm87CiAJaW50IHJldCA9IDA7CiAKLQl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcHJp di0+cnhfcXVldWUpIDwgMzIpIHsKKwl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+cnhfcXVl dWUpIDwgMTYpIHsKIAkJc2tiID0gX19kZXZfYWxsb2Nfc2tiKFJUTDgxODdfTUFYX1JYLCBHRlBf S0VSTkVMKTsKIAkJaWYgKCFza2IpIHsKIAkJCXJldCA9IC1FTk9NRU07CkBAIC03ODUsNyArNzg2 LDcgQEAgc3RhdGljIGludCBydGw4MTg3Yl9pbml0X2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRl dikKIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAoX19sZTE2ICopMHhGRjM0LCAweDBGRkYpOwog CiAJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNXX0NPTkYpOwotCXJl ZyB8PSBSVEw4MThYX0NXX0NPTkZfUEVSUEFDS0VUX1JFVFJZX1NISUZUOworCXJlZyB8PSBSVEw4 MThYX0NXX0NPTkZfUEVSUEFDS0VUX1JFVFJZOwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnBy aXYtPm1hcC0+Q1dfQ09ORiwgcmVnKTsKIAogCS8qIEF1dG8gUmF0ZSBGYWxsYmFjayBSZWdpc3Rl ciAoQVJGUik6IDFNLTU0TSBzZXR0aW5nICovCkBAIC05NDMsMTMgKzk0NCwxMyBAQCBzdGF0aWMg aW50IHJ0bDgxODdfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQogCQlydGw4MTh4X2lv d3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5SWF9DT05GLCByZWcpOwogCiAJCXJlZyA9IHJ0bDgx OHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BR0NfQ1RMKTsKLQkJcmVnICY9IH5SVEw4 MThYX1RYX0FHQ19DVExfUEVSUEFDS0VUX0dBSU5fU0hJRlQ7Ci0JCXJlZyAmPSB+UlRMODE4WF9U WF9BR0NfQ1RMX1BFUlBBQ0tFVF9BTlRTRUxfU0hJRlQ7CisJCXJlZyAmPSB+UlRMODE4WF9UWF9B R0NfQ1RMX1BFUlBBQ0tFVF9HQUlOOworCQlyZWcgJj0gflJUTDgxOFhfVFhfQUdDX0NUTF9QRVJQ QUNLRVRfQU5UU0VMOwogCQlyZWcgJj0gflJUTDgxOFhfVFhfQUdDX0NUTF9GRUVEQkFDS19BTlQ7 CiAJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfQUdDX0NUTCwgcmVnKTsK IAogCQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5UWF9DT05GLAotCQkJCSAg UlRMODE4WF9UWF9DT05GX0hXX1NFUU5VTSB8CisJCQkJICBSVEw4MThYX1RYX0NPTkZfU1dfU0VR TlVNIHwKIAkJCQkgIFJUTDgxOFhfVFhfQ09ORl9ESVNSRVFRU0laRSB8CiAJCQkJICAoUkVUUllf Q09VTlQgPDwgOCAgLyogc2hvcnQgcmV0cnkgbGltaXQgKi8pIHwKIAkJCQkgIChSRVRSWV9DT1VO VCA8PCAwICAvKiBsb25nIHJldHJ5IGxpbWl0ICovKSB8CkBAIC05ODYsMTMgKzk4NywxMyBAQCBz dGF0aWMgaW50IHJ0bDgxODdfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQogCXJ0bDgx OHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlJYX0NPTkYsIHJlZyk7CiAKIAlyZWcgPSBy dGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q1dfQ09ORik7Ci0JcmVnICY9IH5SVEw4 MThYX0NXX0NPTkZfUEVSUEFDS0VUX0NXX1NISUZUOwotCXJlZyB8PSBSVEw4MThYX0NXX0NPTkZf UEVSUEFDS0VUX1JFVFJZX1NISUZUOworCXJlZyAmPSB+UlRMODE4WF9DV19DT05GX1BFUlBBQ0tF VF9DVzsKKwlyZWcgfD0gUlRMODE4WF9DV19DT05GX1BFUlBBQ0tFVF9SRVRSWTsKIAlydGw4MTh4 X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNXX0NPTkYsIHJlZyk7CiAKIAlyZWcgPSBydGw4 MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+VFhfQUdDX0NUTCk7Ci0JcmVnICY9IH5SVEw4 MThYX1RYX0FHQ19DVExfUEVSUEFDS0VUX0dBSU5fU0hJRlQ7Ci0JcmVnICY9IH5SVEw4MThYX1RY X0FHQ19DVExfUEVSUEFDS0VUX0FOVFNFTF9TSElGVDsKKwlyZWcgJj0gflJUTDgxOFhfVFhfQUdD X0NUTF9QRVJQQUNLRVRfR0FJTjsKKwlyZWcgJj0gflJUTDgxOFhfVFhfQUdDX0NUTF9QRVJQQUNL RVRfQU5UU0VMOwogCXJlZyAmPSB+UlRMODE4WF9UWF9BR0NfQ1RMX0ZFRURCQUNLX0FOVDsKIAly dGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0FHQ19DVEwsIHJlZyk7CiAKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny9ydGw4MjI1LmMg Yi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcvcnRsODIyNS5jCmluZGV4IDVl Y2YxOGUuLmEyNjE5M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgv cnRsODE4Ny9ydGw4MjI1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4 MTg3L3J0bDgyMjUuYwpAQCAtMTYsNiArMTYsNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNp bmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIApkaWZmIC0t Z2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTh4LmggYi9kcml2ZXJzL25l dC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxOHguaAppbmRleCBjZTIzZGZkLi42OWEwZWRmIDEwMDY0 NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxOHguaAorKysgYi9kcml2 ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxOHguaApAQCAtMTUsMzEgKzE1LDkxIEBACiAj aWZuZGVmIFJUTDgxOFhfSAogI2RlZmluZSBSVEw4MThYX0gKIAorCiBzdHJ1Y3QgcnRsODE4eF9j c3IgewotCXU4CU1BQ1s2XTsKKworCXVuaW9uIHsKKwkJdTgJTUFDWzZdOworCQl1OAlvZmZzZXQx WzZdOyAgICAgLyogdXBwZXIgcGFnZSBpbmRleGluZyBoZWxwZXJzICovCisJCV9fbGUxNglvZmZz ZXQyWzFdOworCQlfX2xlMzIJb2Zmc2V0NFsxXTsKKwl9IF9fYXR0cmlidXRlX18oKF9fcGFja2Vk X18pKTsKKworCiAJdTgJcmVzZXJ2ZWRfMFsyXTsKLQlfX2xlMzIJTUFSWzJdOwotCXU4CVJYX0ZJ Rk9fQ09VTlQ7Ci0JdTgJcmVzZXJ2ZWRfMTsKLQl1OAlUWF9GSUZPX0NPVU5UOwotCXU4CUJRUkVR OwotCXU4CXJlc2VydmVkXzJbNF07CisKKwl1bmlvbiB7CisJCV9fbGUzMglNQVJbMl07ICAvKiAw eDggKi8KKworCQlzdHJ1Y3R7IC8qIHJ0bDgxODdzZSAqLworCQkJdTggcmZfc3dfY29uZmlnOyAv KiAweDggKi8KKwkJCXU4IHJlc2VydmVkXzAxWzNdOworCQkJX19sZTMyIFRNR0RBOyAvKiAweGMg Ki8KKwkJfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisJfSBfX2F0dHJpYnV0ZV9fKChf X3BhY2tlZF9fKSk7CisKKwl1bmlvbiB7IC8qICAweDEwICAqLworCQlzdHJ1Y3QgeworCQkJdTgJ UlhfRklGT19DT1VOVDsKKwkJCXU4CXJlc2VydmVkXzE7CisJCQl1OAlUWF9GSUZPX0NPVU5UOwor CQkJdTgJQlFSRVE7CisJCX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisJCV9fbGUz MiBUQktEQTsgLyogZm9yIDgxODdzZSAqLworCX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykp OworCisJX19sZTMyIFRCRURBOyAvKiAweDE0IC0gZm9yIHJ0bDgxODdzZSAqLworCiAJX19sZTMy CVRTRlRbMl07Ci0JX19sZTMyCVRMUERBOwotCV9fbGUzMglUTlBEQTsKLQlfX2xlMzIJVEhQREE7 Ci0JX19sZTE2CUJSU1I7Ci0JdTgJQlNTSURbNl07Ci0JdTgJUkVTUF9SQVRFOwotCXU4CUVJRlM7 Ci0JdTgJcmVzZXJ2ZWRfM1sxXTsKLQl1OAlDTUQ7CisKKwl1bmlvbiB7IC8qIDB4MjAgKi8KKwkJ X19sZTMyCVRMUERBOworCQlfX2xlMzIgIFRWSURBOyAvKiBmb3IgODE4N3NlICovCisJfSBfX2F0 dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKwl1bmlvbiB7IC8qIDB4MjQgKi8KKwkJX19sZTMy CVROUERBOworCQlfX2xlMzIgIFRWT0RBOyAvKiBmb3IgODE4N3NlICovCisJfSBfX2F0dHJpYnV0 ZV9fKChfX3BhY2tlZF9fKSk7CisKKwkvKiBoaSBwcmkgcmluZyBmb3IgYWxsIGNhcmRzICovCisJ X19sZTMyCVRIUERBOyAvKiAweDI4ICovCisKKwl1bmlvbiB7IC8qIDB4MmMgKi8KKwkJc3RydWN0 IHsKKwkJCXU4IHJlc2VydmVkXzJhOworCQkJdTggRUlGU184MTg3U0U7CisJCX0gX19hdHRyaWJ1 dGVfXygoX19wYWNrZWRfXykpOworCisJCV9fbGUxNglCUlNSOworCX0gX19hdHRyaWJ1dGVfXygo X19wYWNrZWRfXykpOworCisJdTgJQlNTSURbNl07IC8qIDB4MmUgKi8KKworCXVuaW9uIHsgLyog MHgzNCAqLworCQlzdHJ1Y3QgeworCQkJdTggUkVTUF9SQVRFOworCQkJdTggRUlGUzsKKwkJfSBf X2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisJCV9fbGUxNiBCUlNSXzgxODdTRTsKKwl9IF9f YXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworCXU4CXJlc2VydmVkXzNbMV07IC8qIDB4MzYg Ki8KKwl1OAlDTUQ7IC8qIDB4MzcgKi8KICNkZWZpbmUgUlRMODE4WF9DTURfVFhfRU5BQkxFCQko MSA8PCAyKQogI2RlZmluZSBSVEw4MThYX0NNRF9SWF9FTkFCTEUJCSgxIDw8IDMpCiAjZGVmaW5l IFJUTDgxOFhfQ01EX1JFU0VUCQkoMSA8PCA0KQotCXU4CXJlc2VydmVkXzRbNF07Ci0JX19sZTE2 CUlOVF9NQVNLOwotCV9fbGUxNglJTlRfU1RBVFVTOworCXU4CXJlc2VydmVkXzRbNF07IC8qIDB4 MzggKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX2xlMTYJSU5UX01BU0s7CisJCQlfX2xl MTYJSU5UX1NUQVRVUzsKKwkJfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCisJCV9f bGUzMglJTlRfU1RBVFVTX1NFOyAvKiAweDNjICovCisJfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNr ZWRfXykpOworLyogc3RhdHVzIGJpdHMgZm9yIHJ0bDgxODcgYW5kIHJ0bDgxODAvODE4NSAqLwog I2RlZmluZSBSVEw4MThYX0lOVF9SWF9PSwkJKDEgPDwgIDApCiAjZGVmaW5lIFJUTDgxOFhfSU5U X1JYX0VSUgkJKDEgPDwgIDEpCiAjZGVmaW5lIFJUTDgxOFhfSU5UX1RYTF9PSwkJKDEgPDwgIDIp CkBAIC01Niw3ICsxMTYsMzQgQEAgc3RydWN0IHJ0bDgxOHhfY3NyIHsKICNkZWZpbmUgUlRMODE4 WF9JTlRfQkVBQ09OCQkoMSA8PCAxMykKICNkZWZpbmUgUlRMODE4WF9JTlRfVElNRV9PVVQJCSgx IDw8IDE0KQogI2RlZmluZSBSVEw4MThYX0lOVF9UWF9GTwkJKDEgPDwgMTUpCi0JX19sZTMyCVRY X0NPTkY7CisvKiBzdGF0dXMgYml0cyBmb3IgcnRsODE4N3NlICovCisjZGVmaW5lIFJUTDgxOFhf SU5UX1NFX1RJTUVSMwkJKDEgPDwgIDApCisjZGVmaW5lIFJUTDgxOFhfSU5UX1NFX1RJTUVSMgkJ KDEgPDwgIDEpCisjZGVmaW5lIFJUTDgxOFhfSU5UX1NFX1JRMFNPUgkJKDEgPDwgIDIpCisjZGVm aW5lIFJUTDgxOFhfSU5UX1NFX1RYQkVEX09LCQkoMSA8PCAgMykKKyNkZWZpbmUgUlRMODE4WF9J TlRfU0VfVFhCRURfRVJSCSgxIDw8ICA0KQorI2RlZmluZSBSVEw4MThYX0lOVF9TRV9UWEJFX09L CQkoMSA8PCAgNSkKKyNkZWZpbmUgUlRMODE4WF9JTlRfU0VfVFhCRV9FUlIJCSgxIDw8ICA2KQor I2RlZmluZSBSVEw4MThYX0lOVF9TRV9SWF9PSwkJKDEgPDwgIDcpCisjZGVmaW5lIFJUTDgxOFhf SU5UX1NFX1JYX0VSUgkJKDEgPDwgIDgpCisjZGVmaW5lIFJUTDgxOFhfSU5UX1NFX1RYTF9PSwkJ KDEgPDwgIDkpCisjZGVmaW5lIFJUTDgxOFhfSU5UX1NFX1RYTF9FUlIJCSgxIDw8IDEwKQorI2Rl ZmluZSBSVEw4MThYX0lOVF9TRV9SWF9EVQkJKDEgPDwgMTEpCisjZGVmaW5lIFJUTDgxOFhfSU5U X1NFX1JYX0ZJRk8JCSgxIDw8IDEyKQorI2RlZmluZSBSVEw4MThYX0lOVF9TRV9UWE5fT0sJCSgx IDw8IDEzKQorI2RlZmluZSBSVEw4MThYX0lOVF9TRV9UWE5fRVJSCQkoMSA8PCAxNCkKKyNkZWZp bmUgUlRMODE4WF9JTlRfU0VfVFhIX09LCQkoMSA8PCAxNSkKKyNkZWZpbmUgUlRMODE4WF9JTlRf U0VfVFhIX0VSUgkJKDEgPDwgMTYpCisjZGVmaW5lIFJUTDgxOFhfSU5UX1NFX1RYQl9PSwkJKDEg PDwgMTcpCisjZGVmaW5lIFJUTDgxOFhfSU5UX1NFX1RYQl9FUlIJCSgxIDw8IDE4KQorI2RlZmlu ZSBSVEw4MThYX0lOVF9TRV9BVElNX1RPCQkoMSA8PCAxOSkKKyNkZWZpbmUgUlRMODE4WF9JTlRf U0VfQktfVE8JCSgxIDw8IDIwKQorI2RlZmluZSBSVEw4MThYX0lOVF9TRV9USU1FUjEJCSgxIDw8 IDIxKQorI2RlZmluZSBSVEw4MThYX0lOVF9TRV9UWF9GSUZPCQkoMSA8PCAyMikKKyNkZWZpbmUg UlRMODE4WF9JTlRfU0VfV0FLRVVQCQkoMSA8PCAyMykKKyNkZWZpbmUgUlRMODE4WF9JTlRfU0Vf QktfRE1BCQkoMSA8PCAyNCkKKyNkZWZpbmUgUlRMODE4WF9JTlRfU0VfVE1HRF9PSwkJKDEgPDwg MzApCisJX19sZTMyCVRYX0NPTkY7IC8qIDB4NDAgKi8KICNkZWZpbmUgUlRMODE4WF9UWF9DT05G X0xPT1BCQUNLX01BQwkoMSA8PCAxNykKICNkZWZpbmUgUlRMODE4WF9UWF9DT05GX0xPT1BCQUNL X0NPTlQJKDMgPDwgMTcpCiAjZGVmaW5lIFJUTDgxOFhfVFhfQ09ORl9OT19JQ1YJCSgxIDw8IDE5 KQpAQCAtNjgsMTcgKzE1NSwyMSBAQCBzdHJ1Y3QgcnRsODE4eF9jc3IgewogI2RlZmluZSBSVEw4 MThYX1RYX0NPTkZfUjgxODVfRAkJKDUgPDwgMjUpCiAjZGVmaW5lIFJUTDgxOFhfVFhfQ09ORl9S ODE4N3ZECQkoNSA8PCAyNSkKICNkZWZpbmUgUlRMODE4WF9UWF9DT05GX1I4MTg3dkRfQgkoNiA8 PCAyNSkKKyNkZWZpbmUgUlRMODE4WF9UWF9DT05GX1JUTDgxODdTRQkoNiA8PCAyNSkKICNkZWZp bmUgUlRMODE4WF9UWF9DT05GX0hXVkVSX01BU0sJKDcgPDwgMjUpCiAjZGVmaW5lIFJUTDgxOFhf VFhfQ09ORl9ESVNSRVFRU0laRQkoMSA8PCAyOCkKICNkZWZpbmUgUlRMODE4WF9UWF9DT05GX1BS T0JFX0RUUwkoMSA8PCAyOSkKLSNkZWZpbmUgUlRMODE4WF9UWF9DT05GX0hXX1NFUU5VTQkoMSA8 PCAzMCkKKyNkZWZpbmUgUlRMODE4WF9UWF9DT05GX1NXX1NFUU5VTQkoMSA8PCAzMCkKICNkZWZp bmUgUlRMODE4WF9UWF9DT05GX0NXX01JTgkJKDEgPDwgMzEpCi0JX19sZTMyCVJYX0NPTkY7CisJ X19sZTMyCVJYX0NPTkY7IC8qIDB4NDQgKi8KICNkZWZpbmUgUlRMODE4WF9SWF9DT05GX01PTklU T1IJCSgxIDw8ICAwKQogI2RlZmluZSBSVEw4MThYX1JYX0NPTkZfTklDTUFDCQkoMSA8PCAgMSkK ICNkZWZpbmUgUlRMODE4WF9SWF9DT05GX01VTFRJQ0FTVAkoMSA8PCAgMikKICNkZWZpbmUgUlRM ODE4WF9SWF9DT05GX0JST0FEQ0FTVAkoMSA8PCAgMykKICNkZWZpbmUgUlRMODE4WF9SWF9DT05G X0ZDUwkJKDEgPDwgIDUpCisjZGVmaW5lIFJUTDgxOFhfUlhfQ09ORl85MzU2U0VMCQkoMSA8PCAg NikKKyNkZWZpbmUgUlRMODE4WF9SWF9DT05GX01BWERNQQkJKDcgPDwgIDgpCisjZGVmaW5lIFJU TDgxOFhfUlhfQ09ORl9GSUZPCQkoNyA8PCAxMykKICNkZWZpbmUgUlRMODE4WF9SWF9DT05GX0RB VEEJCSgxIDw8IDE4KQogI2RlZmluZSBSVEw4MThYX1JYX0NPTkZfQ1RSTAkJKDEgPDwgMTkpCiAj ZGVmaW5lIFJUTDgxOFhfUlhfQ09ORl9NR01UCQkoMSA8PCAyMCkKQEAgLTg5LDkgKzE4MCw5IEBA IHN0cnVjdCBydGw4MTh4X2NzciB7CiAjZGVmaW5lIFJUTDgxOFhfUlhfQ09ORl9DU0RNMQkJKDEg PDwgMjkpCiAjZGVmaW5lIFJUTDgxOFhfUlhfQ09ORl9DU0RNMgkJKDEgPDwgMzApCiAjZGVmaW5l IFJUTDgxOFhfUlhfQ09ORl9PTkxZRVJMUEtUCSgxIDw8IDMxKQotCV9fbGUzMglJTlRfVElNRU9V VDsKLQlfX2xlMzIJVEJEQTsKLQl1OAlFRVBST01fQ01EOworCV9fbGUzMglJTlRfVElNRU9VVDsg LyogMHg0OCAqLworCV9fbGUzMglUQkRBOyAvKiAweDRjICovCisJdTgJRUVQUk9NX0NNRDsgLyog MHg1MCAqLwogI2RlZmluZSBSVEw4MThYX0VFUFJPTV9DTURfUkVBRAkJKDEgPDwgMCkKICNkZWZp bmUgUlRMODE4WF9FRVBST01fQ01EX1dSSVRFCSgxIDw8IDEpCiAjZGVmaW5lIFJUTDgxOFhfRUVQ Uk9NX0NNRF9DSwkJKDEgPDwgMikKQEAgLTEwMCw3NCArMTkxLDExMyBAQCBzdHJ1Y3QgcnRsODE4 eF9jc3IgewogI2RlZmluZSBSVEw4MThYX0VFUFJPTV9DTURfTE9BRAkJKDEgPDwgNikKICNkZWZp bmUgUlRMODE4WF9FRVBST01fQ01EX1BST0dSQU0JKDIgPDwgNikKICNkZWZpbmUgUlRMODE4WF9F RVBST01fQ01EX0NPTkZJRwkoMyA8PCA2KQotCXU4CUNPTkZJRzA7Ci0JdTgJQ09ORklHMTsKLQl1 OAlDT05GSUcyOworCXU4CUNPTkZJRzA7IC8qIDB4NTEgKi8KKwl1OAlDT05GSUcxOyAvKiAweDUy ICovCisJdTgJQ09ORklHMjsgLyogMHg1MyAqLwogI2RlZmluZSBSVEw4MThYX0NPTkZJRzJfQU5U RU5OQV9ESVYJKDEgPDwgNikKLQlfX2xlMzIJQU5BUEFSQU07Ci0JdTgJTVNSOworCV9fbGUzMglB TkFQQVJBTTsgLyogMHg1NCAqLworCXU4CU1TUjsgLyogMHg1OCAqLwogI2RlZmluZSBSVEw4MThY X01TUl9OT19MSU5LCQkoMCA8PCAyKQogI2RlZmluZSBSVEw4MThYX01TUl9BREhPQwkJKDEgPDwg MikKICNkZWZpbmUgUlRMODE4WF9NU1JfSU5GUkEJCSgyIDw8IDIpCiAjZGVmaW5lIFJUTDgxOFhf TVNSX01BU1RFUgkJKDMgPDwgMikKICNkZWZpbmUgUlRMODE4WF9NU1JfRU5FRENBCQkoNCA8PCAy KQotCXU4CUNPTkZJRzM7CisJdTgJQ09ORklHMzsgLyogMHg1OSAqLwogI2RlZmluZSBSVEw4MThY X0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUJKDEgPDwgNikKICNkZWZpbmUgUlRMODE4WF9DT05GSUcz X0dOVF9TRUxFQ1QJKDEgPDwgNykKLQl1OAlDT05GSUc0OworCXU4CUNPTkZJRzQ7IC8qIDB4NUEg Ki8KICNkZWZpbmUgUlRMODE4WF9DT05GSUc0X1BPV0VST0ZGCSgxIDw8IDYpCiAjZGVmaW5lIFJU TDgxOFhfQ09ORklHNF9WQ09PRkYJCSgxIDw8IDcpCi0JdTgJVEVTVFI7Ci0JdTgJcmVzZXJ2ZWRf OVsyXTsKLQl1OAlQR1NFTEVDVDsKLQl1OAlTRUNVUklUWTsKLQlfX2xlMzIJQU5BUEFSQU0yOwot CXU4CXJlc2VydmVkXzEwWzEyXTsKLQlfX2xlMTYJQkVBQ09OX0lOVEVSVkFMOwotCV9fbGUxNglB VElNX1dORDsKLQlfX2xlMTYJQkVBQ09OX0lOVEVSVkFMX1RJTUU7Ci0JX19sZTE2CUFUSU1UUl9J TlRFUlZBTDsKLQl1OAlQSFlfREVMQVk7Ci0JdTgJQ0FSUklFUl9TRU5TRV9DT1VOVEVSOwotCXU4 CXJlc2VydmVkXzExWzJdOwotCXU4CVBIWVs0XTsKLQlfX2xlMTYJUkZQaW5zT3V0cHV0OwotCV9f bGUxNglSRlBpbnNFbmFibGU7Ci0JX19sZTE2CVJGUGluc1NlbGVjdDsKLQlfX2xlMTYJUkZQaW5z SW5wdXQ7Ci0JX19sZTMyCVJGX1BBUkE7Ci0JX19sZTMyCVJGX1RJTUlORzsKLQl1OAlHUF9FTkFC TEU7Ci0JdTgJR1BJTzA7Ci0JdTgJR1BJTzE7Ci0JdTgJcmVzZXJ2ZWRfMTI7Ci0JX19sZTMyCUhT U0lfUEFSQTsKLQl1OAlyZXNlcnZlZF8xM1s0XTsKLQl1OAlUWF9BR0NfQ1RMOwotI2RlZmluZSBS VEw4MThYX1RYX0FHQ19DVExfUEVSUEFDS0VUX0dBSU5fU0hJRlQJCSgxIDw8IDApCi0jZGVmaW5l IFJUTDgxOFhfVFhfQUdDX0NUTF9QRVJQQUNLRVRfQU5UU0VMX1NISUZUCSgxIDw8IDEpCi0jZGVm aW5lIFJUTDgxOFhfVFhfQUdDX0NUTF9GRUVEQkFDS19BTlQJCQkoMSA8PCAyKQotCXU4CVRYX0dB SU5fQ0NLOwotCXU4CVRYX0dBSU5fT0ZETTsKLQl1OAlUWF9BTlRFTk5BOwotCXU4CXJlc2VydmVk XzE0WzE2XTsKLQl1OAlXUEFfQ09ORjsKLQl1OAlyZXNlcnZlZF8xNVszXTsKLQl1OAlTSUZTOwot CXU4CURJRlM7Ci0JdTgJU0xPVDsKKwl1OAlURVNUUjsgLyogMHg1YiAqLworCXU4CXJlc2VydmVk XzlbMl07IC8qIDB4NWMgKi8KKwl1OAlQR1NFTEVDVDsgLyogMHg1ZSAqLworCXU4CVNFQ1VSSVRZ OyAvKiAweDVmICovCisJX19sZTMyCUFOQVBBUkFNMjsgLyogMHg2MCAqLworCXU4CXJlc2VydmVk XzEwWzhdOyAvKiAweDY0ICovCisJX19sZTMyICBJTVI7CQkvKiAweDZjCS0gSW50ZXJydXB0IG1h c2sgcmVnIGZvciA4MTg3c2UgKi8KKyNkZWZpbmUgSU1SX1RNR0RPSyAgICAgICgoMSA8PCAzMCkp CisjZGVmaW5lIElNUl9ET1QxMUhJTlQJKCgxIDw8IDI1KSkJLyogODAyLjExaCBNZWFzdXJlbWVu dCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU1SX0JDTkRNQUlOVAkoKDEgPDwgMjQpKQkvKiBCZWFj b24gRE1BIEludGVycnVwdCAqLworI2RlZmluZSBJTVJfV0FLRUlOVAkoKDEgPDwgMjMpKQkvKiBX YWtlIFVwIEludGVycnVwdCAqLworI2RlZmluZSBJTVJfVFhGT1ZXCSgoMSA8PCAyMikpCS8qIFR4 IEZJRk8gT3ZlcmZsb3cgKi8KKyNkZWZpbmUgSU1SX1RJTUVPVVQxCSgoMSA8PCAyMSkpCS8qIFRp bWUgT3V0IEludGVycnVwdCAxICovCisjZGVmaW5lIElNUl9CQ05JTlQJKCgxIDw8IDIwKSkJLyog QmVhY29uIFRpbWUgb3V0ICovCisjZGVmaW5lIElNUl9BVElNSU5UCSgoMSA8PCAxOSkpCS8qIEFU SU0gVGltZSBPdXQgKi8KKyNkZWZpbmUgSU1SX1RCREVSCSgoMSA8PCAxOCkpCS8qIFR4IEJlYWNv biBEZXNjcmlwdG9yIEVycm9yICovCisjZGVmaW5lIElNUl9UQkRPSwkoKDEgPDwgMTcpKQkvKiBU eCBCZWFjb24gRGVzY3JpcHRvciBPSyAqLworI2RlZmluZSBJTVJfVEhQREVSCSgoMSA8PCAxNikp CS8qIFR4IEhpZ2ggUHJpb3JpdHkgRGVzY3JpcHRvciBFcnJvciAqLworI2RlZmluZSBJTVJfVEhQ RE9LCSgoMSA8PCAxNSkpCS8qIFR4IEhpZ2ggUHJpb3JpdHkgRGVzY3JpcHRvciBPSyAqLworI2Rl ZmluZSBJTVJfVFZPREVSCSgoMSA8PCAxNCkpCS8qIFR4IEFDX1ZPIERlc2NyaXB0b3IgRXJyb3Ig SW50ICovCisjZGVmaW5lIElNUl9UVk9ET0sJKCgxIDw8IDEzKSkJLyogVHggQUNfVk8gRGVzY3Jp cHRvciBPSyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU1SX0ZPVlcJKCgxIDw8IDEyKSkJLyogUngg RklGTyBPdmVyZmxvdyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU1SX1JEVQkJKCgxIDw8IDExKSkJ LyogUnggRGVzY3JpcHRvciBVbmF2YWlsYWJsZSAqLworI2RlZmluZSBJTVJfVFZJREVSCSgoMSA8 PCAxMCkpCS8qIFR4IEFDX1ZJIERlc2NyaXB0b3IgRXJyb3IgKi8KKyNkZWZpbmUgSU1SX1RWSURP SwkoKDEgPDwgOSkpCS8qIFR4IEFDX1ZJIERlc2NyaXB0b3IgT0sgSW50ZXJydXB0ICovCisjZGVm aW5lIElNUl9SRVIJCSgoMSA8PCA4KSkJLyogUnggRXJyb3IgSW50ZXJydXB0ICovCisjZGVmaW5l IElNUl9ST0sJCSgoMSA8PCA3KSkJLyogUmVjZWl2ZSBPSyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUg SU1SX1RCRURFUgkoKDEgPDwgNikpCS8qIFR4IEFDX0JFIERlc2NyaXB0b3IgRXJyb3IgKi8KKyNk ZWZpbmUgSU1SX1RCRURPSwkoKDEgPDwgNSkpCS8qIFR4IEFDX0JFIERlc2NyaXB0b3IgT0sgKi8K KyNkZWZpbmUgSU1SX1RCS0RFUgkoKDEgPDwgNCkpCS8qIFR4IEFDX0JLIERlc2NyaXB0b3IgRXJy b3IgKi8KKyNkZWZpbmUgSU1SX1RCS0RPSwkoKDEgPDwgMykpCS8qIFR4IEFDX0JLIERlc2NyaXB0 b3IgT0sgKi8KKyNkZWZpbmUgSU1SX1JRT1NPSwkoKDEgPDwgMikpCS8qIFJ4IFFvUyBPSyBJbnRl cnJ1cHQgKi8KKyNkZWZpbmUgSU1SX1RJTUVPVVQyCSgoMSA8PCAxKSkJLyogVGltZSBPdXQgSW50 ZXJydXB0IDIgKi8KKyNkZWZpbmUgSU1SX1RJTUVPVVQzCSgoMSA8PCAwKSkJLyogVGltZSBPdXQg SW50ZXJydXB0IDMgKi8KKwlfX2xlMTYJQkVBQ09OX0lOVEVSVkFMOyAvKiAweDcwICovCisJX19s ZTE2CUFUSU1fV05EOyAvKiAgMHg3MiAqLworCV9fbGUxNglCRUFDT05fSU5URVJWQUxfVElNRTsg LyogIDB4NzQgKi8KKwlfX2xlMTYJQVRJTVRSX0lOVEVSVkFMOyAvKiAgMHg3NiAqLworCXU4CVBI WV9ERUxBWTsgLyogIDB4NzggKi8KKwl1OAlDQVJSSUVSX1NFTlNFX0NPVU5URVI7IC8qIDB4Nzkg Ki8KKwl1OAlyZXNlcnZlZF8xMVsyXTsgLyogMHg3YSAqLworCXU4CVBIWVs0XTsgLyogMHg3YyAg Ki8KKwlfX2xlMTYJUkZQaW5zT3V0cHV0OyAvKiAweDgwICovCisJX19sZTE2CVJGUGluc0VuYWJs ZTsgLyogMHg4MiAqLworCV9fbGUxNglSRlBpbnNTZWxlY3Q7IC8qIDB4ODQgKi8KKwlfX2xlMTYJ UkZQaW5zSW5wdXQ7ICAvKiAweDg2ICovCisJX19sZTMyCVJGX1BBUkE7IC8qICAweDg4ICovCisJ X19sZTMyCVJGX1RJTUlORzsgLyogIDB4OGMgKi8KKwl1OAlHUF9FTkFCTEU7IC8qICAweDkwICov CisJdTgJR1BJTzA7IC8qICAweDkxICovCisJdTgJR1BJTzE7IC8qICAweDkyICovCisJdTgJVFBQ T0xMX1NUT1A7IC8qICAweDkzIC0gcnRsODE4N3NlIG9ubHkgKi8KKyNkZWZpbmUgUlRMODE4eF9U UFBPTExfU1RPUF9CUQkJCSgxIDw8IDcpCisjZGVmaW5lIFJUTDgxOHhfVFBQT0xMX1NUT1BfVkkJ CQkoMSA8PCA0KQorI2RlZmluZSBSVEw4MTh4X1RQUE9MTF9TVE9QX1ZPCQkJKDEgPDwgNSkKKyNk ZWZpbmUgUlRMODE4eF9UUFBPTExfU1RPUF9CRQkJCSgxIDw8IDMpCisjZGVmaW5lIFJUTDgxOHhf VFBQT0xMX1NUT1BfQksJCQkoMSA8PCAyKQorI2RlZmluZSBSVEw4MTh4X1RQUE9MTF9TVE9QX01H CQkJKDEgPDwgMSkKKyNkZWZpbmUgUlRMODE4eF9UUFBPTExfU1RPUF9ISQkJCSgxIDw8IDYpCisK KwlfX2xlMzIJSFNTSV9QQVJBOyAvKiAgMHg5NCAqLworCXU4CXJlc2VydmVkXzEzWzRdOyAvKiAw eDk4ICovCisJdTgJVFhfQUdDX0NUTDsgLyogIDB4OWMgKi8KKyNkZWZpbmUgUlRMODE4WF9UWF9B R0NfQ1RMX1BFUlBBQ0tFVF9HQUlOCSgxIDw8IDApCisjZGVmaW5lIFJUTDgxOFhfVFhfQUdDX0NU TF9QRVJQQUNLRVRfQU5UU0VMCSgxIDw8IDEpCisjZGVmaW5lIFJUTDgxOFhfVFhfQUdDX0NUTF9G RUVEQkFDS19BTlQJCSgxIDw8IDIpCisJdTgJVFhfR0FJTl9DQ0s7IC8qIDB4OWQgKi8KKwl1OAlU WF9HQUlOX09GRE07IC8qIDB4OWUgKi8KKwl1OAlUWF9BTlRFTk5BOyAvKiAgMHg5ZiAqLworCXU4 CXJlc2VydmVkXzE0WzE2XTsgLyogIDB4YTAgKi8KKwl1OAlXUEFfQ09ORjsgLyogIDB4YjAgKi8K Kwl1OAlyZXNlcnZlZF8xNVszXTsgLyogIDB4YjEgKi8KKwl1OAlTSUZTOyAvKiAweGI0ICovCisJ dTgJRElGUzsgLyogMHhiNSAqLworCXU4CVNMT1Q7IC8qICAweGI2ICovCiAJdTgJcmVzZXJ2ZWRf MTZbNV07CiAJdTgJQ1dfQ09ORjsKLSNkZWZpbmUgUlRMODE4WF9DV19DT05GX1BFUlBBQ0tFVF9D V19TSElGVAkoMSA8PCAwKQotI2RlZmluZSBSVEw4MThYX0NXX0NPTkZfUEVSUEFDS0VUX1JFVFJZ X1NISUZUCSgxIDw8IDEpCisjZGVmaW5lIFJUTDgxOFhfQ1dfQ09ORl9QRVJQQUNLRVRfQ1cJKDEg PDwgMCkKKyNkZWZpbmUgUlRMODE4WF9DV19DT05GX1BFUlBBQ0tFVF9SRVRSWQkoMSA8PCAxKQog CXU4CUNXX1ZBTDsKIAl1OAlSQVRFX0ZBTExCQUNLOwogI2RlZmluZSBSVEw4MThYX1JBVEVfRkFM TEJBQ0tfRU5BQkxFCSgxIDw8IDcpCisjZGVmaW5lIFJUTDgxOFhfUkFURV9GQUxMQkFDS19BVVRP X1NURVAxCTB4MDEKKwogCXU4CUFDTV9DT05UUk9MOwogCXU4CXJlc2VydmVkXzE3WzI0XTsKLQl1 OAlDT05GSUc1OwotCXU4CVRYX0RNQV9QT0xMSU5HOwotCXU4CXJlc2VydmVkXzE4WzJdOworCXU4 CUNPTkZJRzU7IC8qICAweGQ4ICovCisJdTgJVFhfRE1BX1BPTExJTkc7IC8qICAweGQ5ICovCisJ dTgJUEhZX1BSOworCXU4CXJlc2VydmVkXzE4OwogCV9fbGUxNglDV1I7CiAJdTgJUkVUUllfQ1RS OwogCXU4CXJlc2VydmVkXzE5WzNdOwpAQCAtMTc2LDIzICszMDYsNjkgQEAgc3RydWN0IHJ0bDgx OHhfY3NyIHsKICNkZWZpbmUgUlRMODE4WF9SODE4N0JfQgkwCiAjZGVmaW5lIFJUTDgxOFhfUjgx ODdCX0QJMQogI2RlZmluZSBSVEw4MThYX1I4MTg3Ql9FCTIKLQlfX2xlMzIJUkRTQVI7Ci0JX19s ZTE2CVRJRF9BQ19NQVA7CisJX19sZTMyCVJEU0FSOyAvKiAweGU0ICovCisJX19sZTE2CVRJRF9B Q19NQVA7IC8qIDB4ZTggKi8KIAl1OAlyZXNlcnZlZF8yMFs0XTsKLQl1OAlBTkFQQVJBTTM7Ci0J dTgJcmVzZXJ2ZWRfMjFbNV07Ci0JX19sZTE2CUZFTVI7Ci0JdTgJcmVzZXJ2ZWRfMjJbNF07Ci0J X19sZTE2CVRBTExZX0NOVDsKLQl1OAlUQUxMWV9TRUw7Ci19IF9fcGFja2VkOworCV9fbGUxNglB TkFQQVJBTTM7IC8qIDB4ZWUgKi8KKworI2RlZmluZSBBQ19QQVJBTV9UWE9QX0xJTUlUX1NISUZU CTE2CisjZGVmaW5lIEFDX1BBUkFNX0VDV19NQVhfU0hJRlQJCTEyCisjZGVmaW5lIEFDX1BBUkFN X0VDV19NSU5fU0hJRlQJCTgKKyNkZWZpbmUgQUNfUEFSQU1fQUlGU19TSElGVAkJMAorCisJX19s ZTMyIEFDX1ZPX1BBUkFNOyAvKiAweGYwICovCisKKwl1bmlvbiB7IC8qIDB4ZjQgKi8KKwkJX19s ZTMyIEFDX1ZJX1BBUkFNOworCQlfX2xlMzIgRkVNUjsKKwl9IF9fYXR0cmlidXRlX18gKChfX3Bh Y2tlZF9fKSk7CisKKwl1bmlvbnsgLyogMHhmOCAqLworCQlfX2xlMzIgIEFDX0JFX1BBUkFNOyAv KiBydGw4MTg3c2UgKi8KKwkJc3RydWN0eworCQkJdTggICAgICByZXNlcnZlZF8yMVsyXTsKKwkJ CV9fbGUxNglUQUxMWV9DTlQ7IC8qIDB4ZmEgKi8KKwkJfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNr ZWRfXykpOworCX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworCXVuaW9uIHsKKwkJ dTgJVEFMTFlfU0VMOyAvKiAweGZjICovCisJCV9fbGUzMiAgQUNfQktfUEFSQU07CisKKwl9IF9f YXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2Vk X18pKTsKKworCisvKiBUaGVzZSBhcmUgYWRkcmVzc2VzIHdpdGggTk9OLXN0YW5kYXJkIHVzYWdl LgorICogVGhleSBoYXZlIG9mZnNldHMgdmVyeSBmYXIgZnJvbSB0aGlzIHN0cnVjdC4KKyAqIEkg ZG9uJ3QgbGlrZSB0byBpbnRyb2R1Y2UgYSB0b24gb2YgInJlc2VydmVkIi4uCisgKiBUaGV5IGFy ZSBmb3IgUlRMODE4N1NFCisgKi8KKworI2RlZmluZSBSRUdfQUREUjEoYWRkcikJKCh1OCBfX2lv bWVtICopKCZwcml2LT5tYXAtPm9mZnNldDFbKGFkZHIpXSkpCisjZGVmaW5lIFJFR19BRERSMihh ZGRyKQkoKF9fbGUxNiBfX2lvbWVtICopKCZwcml2LT5tYXAtPm9mZnNldDJbKChhZGRyKSA+PiAx KV0pKQorI2RlZmluZSBSRUdfQUREUjQoYWRkcikJKChfX2xlMzIgX19pb21lbSAqKSgmcHJpdi0+ bWFwLT5vZmZzZXQ0WygoYWRkcikgPj4gMildKSkKKworCisjZGVmaW5lIEZFTVJfU0UJCVJFR19B RERSMigweDFENCkKKyNkZWZpbmUgQVJGUgkJUkVHX0FERFIyKDB4MUUwKQorI2RlZmluZSBSRlNX X0NUUkwJUkVHX0FERFIyKDB4MjcyKQorI2RlZmluZSBTV18zV19EQjAJUkVHX0FERFIyKDB4Mjc0 KQorI2RlZmluZSBTV18zV19EQjBfNAlSRUdfQUREUjQoMHgyNzQpCisjZGVmaW5lIFNXXzNXX0RC MQlSRUdfQUREUjIoMHgyNzgpCisjZGVmaW5lIFNXXzNXX0RCMV80CVJFR19BRERSNCgweDI3OCkK KyNkZWZpbmUgU1dfM1dfQ01EMQlSRUdfQUREUjEoMHgyN0QpCisjZGVmaW5lIFBJX0RBVEFfUkVH CVJFR19BRERSMigweDM2MCkKKyNkZWZpbmUgU0lfREFUQV9SRUcgICAgIFJFR19BRERSMigweDM2 MikKKworCiAKIHN0cnVjdCBydGw4MTh4X3JmX29wcyB7CiAJY2hhciAqbmFtZTsKIAl2b2lkICgq aW5pdCkoc3RydWN0IGllZWU4MDIxMV9odyAqKTsKIAl2b2lkICgqc3RvcCkoc3RydWN0IGllZWU4 MDIxMV9odyAqKTsKIAl2b2lkICgqc2V0X2NoYW4pKHN0cnVjdCBpZWVlODAyMTFfaHcgKiwgc3Ry dWN0IGllZWU4MDIxMV9jb25mICopOwotCXZvaWQgKCpjb25mX2VycCkoc3RydWN0IGllZWU4MDIx MV9odyAqLCBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICopOwogCXU4ICgqY2FsY19yc3NpKSh1 OCBhZ2MsIHU4IHNxKTsKIH07CiAK --089e010d89e08792e704eff1b1b8--