From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jyri Sarha Subject: [PATCH v2 4/5] drm/tidss: New driver for TI Keystone platform Display SubSystem Date: Sun, 1 Dec 2019 15:50:07 +0200 Message-ID: <2928aed8df17794076547f00f0a34d53a840e441.1575203210.git.jsarha@ti.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from lelv0143.ext.ti.com (lelv0143.ext.ti.com [198.47.23.248]) by gabe.freedesktop.org (Postfix) with ESMTPS id 105666E073 for ; Sun, 1 Dec 2019 13:50:17 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: yamonkar@cadence.com, praneeth@ti.com, sjakhade@cadence.com, peter.ujfalusi@ti.com, tomi.valkeinen@ti.com, laurent.pinchart@ideasonboard.com, subhajit_paul@ti.com, sam@ravnborg.org List-Id: dri-devel@lists.freedesktop.org VGhpcyBwYXRjaCBhZGRzIGEgbmV3IERSTSBkcml2ZXIgZm9yIFRleGFzIEluc3RydW1lbnRzIERT UyBJUHMgdXNlZCBvbgpUZXhhcyBJbnN0cnVtZW50cyBLZXlzdG9uZSBLMkcsIEFNNjV4LCBhbmQg SjcyMWUgU29Dcy4gVGhlIG5ldyBEU1MgSVAgaXMKYSBtYWpvciBjaGFuZ2UgdG8gdGhlIG9sZGVy IERTUyBJUCB2ZXJzaW9ucywgd2hpY2ggYXJlIHN1cHBvcnRlZCBieQp0aGUgb21hcGRybSBkcml2 ZXIuIFdoaWxlIG9uIGhpZ2hlciBsZXZlbCB0aGUgS2V5c3RvbmUgRFNTIHJlc2VtYmxlcwp0aGUg b2xkZXIgRFNTIHZlcnNpb25zLCB0aGUgcmVnaXN0ZXJzIGFyZSBjb21wbGV0ZWx5IGRpZmZlcmVu dCBhbmQgdGhlCmludGVybmFsIHBpcGVsaW5lcyBkaWZmZXIgYSBsb3QuCgpEU1MgSVAgZm91bmQg b24gSzJHIGlzIGFuICJ1bHRyYS1saWdodCIgdmVyc2lvbiwgYW5kIGhhcyBvbmx5IGEgc2luZ2xl CnBsYW5lIGFuZCBhIHNpbmdsZSBvdXRwdXQuIFRoZSBLZXlzdG9uZSAzIERTUyBJUHMgYXJlIGZv dW5kIG9uIEFNNjV4CmFuZCBKNzIxRSBTb0NzLiBBTTY1eCBEU1MgaGFzIHR3byB2aWRlbyBwb3J0 cywgb25lIGZ1bGwgdmlkZW8gcGxhbmUsCmFuZCBhbm90aGVyICJsaXRlIiBwbGFuZSB3aXRob3V0 IHNjYWxpbmcgc3VwcG9ydC4gSjcyMUUgaGFzIDQgdmlkZW8KcG9ydHMsIDIgdmlkZW8gcGxhbmVz IGFuZCAyIGxpdGUgcGxhbmVzLiBBTTY1eCBEU1MgaGFzIGFsc28gaW50ZWdyYXRlZApPTERJIChM VkRTKSBvdXRwdXQuCgpDby1kZXZlbG9wZWQtYnk6IFRvbWkgVmFsa2VpbmVuIDx0b21pLnZhbGtl aW5lbkB0aS5jb20+ClNpZ25lZC1vZmYtYnk6IEp5cmkgU2FyaGEgPGpzYXJoYUB0aS5jb20+Ci0t LQogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIGRy aXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJz L2dwdS9kcm0vdGlkc3MvS2NvbmZpZyAgICAgICAgICAgICB8ICAgMTQgKwogZHJpdmVycy9ncHUv ZHJtL3RpZHNzL01ha2VmaWxlICAgICAgICAgICAgfCAgIDEyICsKIGRyaXZlcnMvZ3B1L2RybS90 aWRzcy90aWRzc19jcnRjLmMgICAgICAgIHwgIDM3NiArKysKIGRyaXZlcnMvZ3B1L2RybS90aWRz cy90aWRzc19jcnRjLmggICAgICAgIHwgICA0NiArCiBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlk c3NfZGlzcGMuYyAgICAgICB8IDI2NDMgKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vdGlkc3MvdGlkc3NfZGlzcGMuaCAgICAgICB8ICAxMzIgKwogZHJpdmVycy9ncHUvZHJt L3RpZHNzL3RpZHNzX2Rpc3BjX3JlZ3MuaCAgfCAgMjQzICsrCiBkcml2ZXJzL2dwdS9kcm0vdGlk c3MvdGlkc3NfZHJ2LmMgICAgICAgICB8ICAyODUgKysrCiBkcml2ZXJzL2dwdS9kcm0vdGlkc3Mv dGlkc3NfZHJ2LmggICAgICAgICB8ICAgNDAgKwogZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNz X2VuY29kZXIuYyAgICAgfCAgIDg4ICsKIGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19lbmNv ZGVyLmggICAgIHwgICAxNyArCiBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfaXJxLmMgICAg ICAgICB8ICAxODUgKysKIGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19pcnEuaCAgICAgICAg IHwgICA3MiArCiBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3Nfa21zLmMgICAgICAgICB8ICAy NDggKysKIGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19rbXMuaCAgICAgICAgIHwgICAxNSAr CiBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfcGxhbmUuYyAgICAgICB8ICAyMTcgKysKIGRy aXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19wbGFuZS5oICAgICAgIHwgICAyNSArCiBkcml2ZXJz L2dwdS9kcm0vdGlkc3MvdGlkc3Nfc2NhbGVfY29lZnMuYyB8ICAyMDIgKysKIGRyaXZlcnMvZ3B1 L2RybS90aWRzcy90aWRzc19zY2FsZV9jb2Vmcy5oIHwgICAyMiArCiAyMSBmaWxlcyBjaGFuZ2Vk LCA0ODg1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v dGlkc3MvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy9N YWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19j cnRjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfY3J0 Yy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2Rpc3Bj LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZGlzcGMu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19kaXNwY19y ZWdzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZHJ2 LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZHJ2LmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZW5jb2Rlci5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2VuY29kZXIu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19pcnEuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19pcnEuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19rbXMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19rbXMuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19wbGFuZS5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX3BsYW5lLmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3Nfc2NhbGVfY29lZnMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19zY2FsZV9jb2Vmcy5oCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2Nv bmZpZwppbmRleCAxMTY4MzUxMjY3ZmQuLmNmNmU5Yjg4MTQyMCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTM4Niw2 ICszODYsOCBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hc3BlZWQvS2NvbmZpZyIKIAogc291 cmNlICJkcml2ZXJzL2dwdS9kcm0vbWNkZS9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvZ3B1 L2RybS90aWRzcy9LY29uZmlnIgorCiAjIEtlZXAgbGVnYWN5IGRyaXZlcnMgbGFzdAogCiBtZW51 Y29uZmlnIERSTV9MRUdBQ1kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCA5ZjFjN2M0ODZmODguLjU0NjdhMmI4ODcx ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9NYWtlZmlsZQpAQCAtMTIyLDMgKzEyMiw0IEBAIG9iai0kKENPTkZJR19EUk1fTElNQSkg ICs9IGxpbWEvCiBvYmotJChDT05GSUdfRFJNX1BBTkZST1NUKSArPSBwYW5mcm9zdC8KIG9iai0k KENPTkZJR19EUk1fQVNQRUVEX0dGWCkgKz0gYXNwZWVkLwogb2JqLSQoQ09ORklHX0RSTV9NQ0RF KSArPSBtY2RlLworb2JqLSQoQ09ORklHX0RSTV9USURTUykgKz0gdGlkc3MvCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy9L Y29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjc5MGE1MjE1 MzAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL0tjb25maWcKQEAg LTAsMCArMSwxNCBAQAorY29uZmlnIERSTV9USURTUworCXRyaXN0YXRlICJEUk0gU3VwcG9ydCBm b3IgVEkgS2V5c3RvbmUiCisJZGVwZW5kcyBvbiBEUk0gJiYgT0YKKwlkZXBlbmRzIG9uIEFSTSB8 fCBBUk02NCB8fCBDT01QSUxFX1RFU1QKKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3Qg RFJNX0tNU19DTUFfSEVMUEVSCisJc2VsZWN0IERSTV9HRU1fQ01BX0hFTFBFUgorCWhlbHAKKwkg IFRoZSBUSSBLZXlzdG9uZSBmYW1pbHkgU29DcyBpbnRyb2R1Y2VkIGEgbmV3IGdlbmVyYXRpb24g b2YKKwkgIERpc3BsYXkgU3ViU3lzdGVtLiBUaGVyZSBpcyBjdXJyZW50bHkgdGhyZWUgS2V5c3Rv bmUgZmFtaWx5CisJICBTb0NzIHJlbGVhc2VkIHdpdGggRFNTLiBFYWNoIHdpdGggc29tZXdoYXQg ZGlmZmVyZW50IHZlcnNpb24KKwkgIG9mIGl0LiBUaGUgU29DcyBhcmUgNjZBSzJHeCwgQU02NXgs IGFuZCBKNzIxRS4gU2V0IHRoaXMgdG8gWQorCSAgb3IgTSB0byBhZGQgZGlzcGxheSBzdXBwb3J0 IGZvciBUSSBLZXlzdG9uZSBmYW1pbHkKKwkgIHBsYXRmb3Jtcy4KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS90aWRzcy9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy9NYWtlZmls ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjMxMjY0NTI3MTAxNAot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy9NYWtlZmlsZQpAQCAtMCww ICsxLDEyIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKK3RpZHNzLXkg Oj0gdGlkc3NfY3J0Yy5vIFwKKwl0aWRzc19kcnYubyBcCisJdGlkc3NfZW5jb2Rlci5vIFwKKwl0 aWRzc19rbXMubyBcCisJdGlkc3NfaXJxLm8gXAorCXRpZHNzX3BsYW5lLm8gXAorCXRpZHNzX3Nj YWxlX2NvZWZzLm8gXAorCXRpZHNzX2Rpc3BjLm8KKworb2JqLSQoQ09ORklHX0RSTV9USURTUykg Kz0gdGlkc3MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2NydGMu YyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19jcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42NWYyM2ZiYTY3ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfY3J0Yy5jCkBAIC0wLDAgKzEsMzc2IEBACisvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx OCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAq IEF1dGhvcjogVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KKyAqLworCisj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxw ZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNf aGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV92YmxhbmsuaD4KKworI2luY2x1ZGUgInRpZHNzX2NydGMu aCIKKyNpbmNsdWRlICJ0aWRzc19kaXNwYy5oIgorI2luY2x1ZGUgInRpZHNzX2Rydi5oIgorI2lu Y2x1ZGUgInRpZHNzX2lycS5oIgorCisvKiBQYWdlIGZsaXAgYW5kIGZyYW1lIGRvbmUgSVJRcyAq LworCitzdGF0aWMgdm9pZCB0aWRzc19jcnRjX2ZpbmlzaF9wYWdlX2ZsaXAoc3RydWN0IHRpZHNz X2NydGMgKnRjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gdGNydGMtPmNydGMu ZGV2OworCXN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJ c3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQ7CisJdW5zaWduZWQgbG9uZyBm bGFnczsKKwlib29sIGJ1c3k7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGRldi0+ZXZlbnRfbG9j aywgZmxhZ3MpOworCisJLyoKKwkgKiBOZXcgc2V0dGluZ3MgYXJlIHRha2VuIGludG8gdXNlIGF0 IFZGUCwgYW5kIEdPIGJpdCBpcyBjbGVhcmVkIGF0CisJICogdGhlIHNhbWUgdGltZS4gVGhpcyBo YXBwZW5zIGJlZm9yZSB0aGUgdmVydGljYWwgYmxhbmsgaW50ZXJydXB0LgorCSAqIFNvIHRoZXJl IGlzIGEgc21hbGwgY2hhbmdlIHRoYXQgdGhlIGRyaXZlciBzZXRzIEdPIGJpdCBhZnRlciBWRlAs IGJ1dAorCSAqIGJlZm9yZSB2YmxhbmssIGFuZCB3ZSBoYXZlIHRvIGNoZWNrIGZvciB0aGF0IGNh c2UgaGVyZS4KKwkgKi8KKwlidXN5ID0gZGlzcGNfdnBfZ29fYnVzeSh0aWRzcy0+ZGlzcGMsIHRj cnRjLT5od192aWRlb3BvcnQpOworCWlmIChidXN5KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmRkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWV2ZW50ID0g dGNydGMtPmV2ZW50OworCXRjcnRjLT5ldmVudCA9IE5VTEw7CisKKwlpZiAoIWV2ZW50KSB7CisJ CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwkJcmV0 dXJuOworCX0KKworCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KCZ0Y3J0Yy0+Y3J0YywgZXZl bnQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGRldi0+ZXZlbnRfbG9jaywgZmxhZ3Mp OworCisJZHJtX2NydGNfdmJsYW5rX3B1dCgmdGNydGMtPmNydGMpOworfQorCit2b2lkIHRpZHNz X2NydGNfdmJsYW5rX2lycShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IHRpZHNz X2NydGMgKnRjcnRjID0gdG9fdGlkc3NfY3J0YyhjcnRjKTsKKworCWRybV9jcnRjX2hhbmRsZV92 YmxhbmsoY3J0Yyk7CisKKwl0aWRzc19jcnRjX2ZpbmlzaF9wYWdlX2ZsaXAodGNydGMpOworfQor Cit2b2lkIHRpZHNzX2NydGNfZnJhbWVkb25lX2lycShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7 CisJc3RydWN0IHRpZHNzX2NydGMgKnRjcnRjID0gdG9fdGlkc3NfY3J0YyhjcnRjKTsKKworCWNv bXBsZXRlKCZ0Y3J0Yy0+ZnJhbWVkb25lX2NvbXBsZXRpb24pOworfQorCit2b2lkIHRpZHNzX2Ny dGNfZXJyb3JfaXJxKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTY0IGlycXN0YXR1cykKK3sKKwlz dHJ1Y3QgdGlkc3NfY3J0YyAqdGNydGMgPSB0b190aWRzc19jcnRjKGNydGMpOworCisJZGV2X2Vy cl9yYXRlbGltaXRlZChjcnRjLT5kZXYtPmRldiwgIkNSVEMldSBTWU5DIExPU1Q6IChpcnEgJWxs eClcbiIsCisJCQkgICAgdGNydGMtPmh3X3ZpZGVvcG9ydCwgaXJxc3RhdHVzKTsKK30KKworLyog ZHJtX2NydGNfaGVscGVyX2Z1bmNzICovCisKK3N0YXRpYyBpbnQgdGlkc3NfY3J0Y19hdG9taWNf Y2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBjcnRjLT5kZXY7CisJc3Ry dWN0IHRpZHNzX2RldmljZSAqdGlkc3MgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZGlz cGNfZGV2aWNlICpkaXNwYyA9IHRpZHNzLT5kaXNwYzsKKwlzdHJ1Y3QgdGlkc3NfY3J0YyAqdGNy dGMgPSB0b190aWRzc19jcnRjKGNydGMpOworCXUzMiBod192aWRlb3BvcnQgPSB0Y3J0Yy0+aHdf dmlkZW9wb3J0OworCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCWVudW0g ZHJtX21vZGVfc3RhdHVzIG9rOworCisJZGV2X2RiZyhkZGV2LT5kZXYsICIlc1xuIiwgX19mdW5j X18pOworCisJaWYgKCFzdGF0ZS0+ZW5hYmxlKQorCQlyZXR1cm4gMDsKKworCW1vZGUgPSAmc3Rh dGUtPmFkanVzdGVkX21vZGU7CisKKwlvayA9IGRpc3BjX3ZwX21vZGVfdmFsaWQoZGlzcGMsIGh3 X3ZpZGVvcG9ydCwgbW9kZSk7CisJaWYgKG9rICE9IE1PREVfT0spIHsKKwkJZGV2X2RiZyhkZGV2 LT5kZXYsICIlczogYmFkIG1vZGU6ICV1eCV1IHBjbGsgJXUga0h6XG4iLAorCQkJX19mdW5jX18s IG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwgbW9kZS0+Y2xvY2spOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZGlzcGNfdnBfYnVzX2NoZWNrKGRpc3BjLCBod192aWRl b3BvcnQsIHN0YXRlKTsKK30KKworc3RhdGljIHZvaWQgdGlkc3NfY3J0Y19hdG9taWNfZmx1c2go c3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9s ZF9jcnRjX3N0YXRlKQoreworCXN0cnVjdCB0aWRzc19jcnRjICp0Y3J0YyA9IHRvX3RpZHNzX2Ny dGMoY3J0Yyk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0 IHRpZHNzX2RldmljZSAqdGlkc3MgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25n IGZsYWdzOworCisJZGV2X2RiZyhkZGV2LT5kZXYsCisJCSIlczogJXMgZW5hYmxlZCAlZCwgbmVl ZHMgbW9kZXNldCAlZCwgZXZlbnQgJXBcbiIsIF9fZnVuY19fLAorCQljcnRjLT5uYW1lLCBkcm1f YXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChjcnRjLT5zdGF0ZSksCisJCWNydGMtPnN0YXRlLT5l bmFibGUsIGNydGMtPnN0YXRlLT5ldmVudCk7CisKKwkvKiBUaGVyZSBpcyBub3RoaW5nIHRvIGRv IGlmIENSVEMgaXMgbm90IGdvaW5nIHRvIGJlIGVuYWJsZWQuICovCisJaWYgKCFjcnRjLT5zdGF0 ZS0+ZW5hYmxlKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEZsdXNoIENSVEMgY2hhbmdlcyB3aXRo IGdvIGJpdCBvbmx5IGlmIG5ldyBtb2Rlc2V0IGlzIG5vdAorCSAqIGNvbWluZywgc28gQ1JUQyBp cyBlbmFibGVkIHRyb3VnaCBvdXQgdGhlIGNvbW1pdC4KKwkgKi8KKwlpZiAoZHJtX2F0b21pY19j cnRjX25lZWRzX21vZGVzZXQoY3J0Yy0+c3RhdGUpKQorCQlyZXR1cm47CisKKwkvKiBJZiB0aGUg R08gYml0IGlzIHN0dWNrIHdlIGJldHRlciBxdWl0IGhlcmUuICovCisJaWYgKFdBUk5fT04oZGlz cGNfdnBfZ29fYnVzeSh0aWRzcy0+ZGlzcGMsIHRjcnRjLT5od192aWRlb3BvcnQpKSkKKwkJcmV0 dXJuOworCisJLyogV2Ugc2hvdWxkIGhhdmUgZXZlbnQgaWYgQ1JUQyBpcyBlbmFibGVkIHRocm91 Z2ggb3V0IHRoaXMgY29tbWl0LiAqLworCWlmIChXQVJOX09OKCFjcnRjLT5zdGF0ZS0+ZXZlbnQp KQorCQlyZXR1cm47CisKKwkvKiBXcml0ZSB2cCBwcm9wZXJ0aWVzIHRvIEhXIGlmIG5lZWRlZC4g Ki8KKwlkaXNwY192cF9zZXR1cCh0aWRzcy0+ZGlzcGMsIHRjcnRjLT5od192aWRlb3BvcnQsIGNy dGMtPnN0YXRlKTsKKworCVdBUk5fT04oZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSAhPSAwKTsK KworCXNwaW5fbG9ja19pcnFzYXZlKCZkZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJZGlzcGNf dnBfZ28odGlkc3MtPmRpc3BjLCB0Y3J0Yy0+aHdfdmlkZW9wb3J0KTsKKworCVdBUk5fT04odGNy dGMtPmV2ZW50KTsKKworCXRjcnRjLT5ldmVudCA9IGNydGMtPnN0YXRlLT5ldmVudDsKKwljcnRj LT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGRldi0+ ZXZlbnRfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB0aWRzc19jcnRjX2F0b21pY19l bmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICAgc3RydWN0IGRybV9jcnRjX3N0 YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IHRpZHNzX2NydGMgKnRjcnRjID0gdG9fdGlkc3Nf Y3J0YyhjcnRjKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGNydGMtPmRldjsKKwlzdHJ1 Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyA9IGRkZXYtPmRldl9wcml2YXRlOworCWNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOwor CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHI7CisKKwlkZXZfZGJnKGRkZXYtPmRldiwgIiVz LCBldmVudCAlcFxuIiwgX19mdW5jX18sIGNydGMtPnN0YXRlLT5ldmVudCk7CisKKwl0aWRzc19y dW50aW1lX2dldCh0aWRzcyk7CisKKwlyID0gZGlzcGNfdnBfc2V0X2Nsa19yYXRlKHRpZHNzLT5k aXNwYywgdGNydGMtPmh3X3ZpZGVvcG9ydCwKKwkJCQkgIG1vZGUtPmNsb2NrICogMTAwMCk7CisJ aWYgKHIgIT0gMCkKKwkJcmV0dXJuOworCisJciA9IGRpc3BjX3ZwX2VuYWJsZV9jbGsodGlkc3Mt PmRpc3BjLCB0Y3J0Yy0+aHdfdmlkZW9wb3J0KTsKKwlpZiAociAhPSAwKQorCQlyZXR1cm47CisK KwlkaXNwY192cF9zZXR1cCh0aWRzcy0+ZGlzcGMsIHRjcnRjLT5od192aWRlb3BvcnQsIGNydGMt PnN0YXRlKTsKKworCS8qIFR1cm4gdmVydGljYWwgYmxhbmtpbmcgaW50ZXJydXB0IHJlcG9ydGlu ZyBvbi4gKi8KKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7CisKKwlkaXNwY192cF9wcmVwYXJl KHRpZHNzLT5kaXNwYywgdGNydGMtPmh3X3ZpZGVvcG9ydCwgY3J0Yy0+c3RhdGUpOworCisJZGlz cGNfdnBfZW5hYmxlKHRpZHNzLT5kaXNwYywgdGNydGMtPmh3X3ZpZGVvcG9ydCwgY3J0Yy0+c3Rh dGUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwor CWlmIChjcnRjLT5zdGF0ZS0+ZXZlbnQpIHsKKwkJZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQo Y3J0YywgY3J0Yy0+c3RhdGUtPmV2ZW50KTsKKwkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsK Kwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7 Cit9CisKK3N0YXRpYyB2b2lkIHRpZHNzX2NydGNfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9j cnRjICpjcnRjLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX3N0YXRlKQor eworCXN0cnVjdCB0aWRzc19jcnRjICp0Y3J0YyA9IHRvX3RpZHNzX2NydGMoY3J0Yyk7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHRpZHNzX2RldmljZSAq dGlkc3MgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGV2 X2RiZyhkZGV2LT5kZXYsICIlcywgZXZlbnQgJXBcbiIsIF9fZnVuY19fLCBjcnRjLT5zdGF0ZS0+ ZXZlbnQpOworCisJcmVpbml0X2NvbXBsZXRpb24oJnRjcnRjLT5mcmFtZWRvbmVfY29tcGxldGlv bik7CisKKwlkaXNwY192cF9kaXNhYmxlKHRpZHNzLT5kaXNwYywgdGNydGMtPmh3X3ZpZGVvcG9y dCk7CisKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmdGNydGMtPmZyYW1lZG9u ZV9jb21wbGV0aW9uLAorCQkJCQkgbXNlY3NfdG9famlmZmllcyg1MDApKSkKKwkJZGV2X2Vycih0 aWRzcy0+ZGV2LCAiVGltZW91dCB3YWl0aW5nIGZvciBmcmFtZWRvbmUgb24gY3J0YyAlZCIsCisJ CQl0Y3J0Yy0+aHdfdmlkZW9wb3J0KTsKKworCWRpc3BjX3ZwX3VucHJlcGFyZSh0aWRzcy0+ZGlz cGMsIHRjcnRjLT5od192aWRlb3BvcnQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRkZXYtPmV2 ZW50X2xvY2ssIGZsYWdzKTsKKwlpZiAoY3J0Yy0+c3RhdGUtPmV2ZW50KSB7CisJCWRybV9jcnRj X3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGNydGMtPnN0YXRlLT5ldmVudCk7CisJCWNydGMtPnN0 YXRlLT5ldmVudCA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkZXYtPmV2 ZW50X2xvY2ssIGZsYWdzKTsKKworCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7CisKKwlkaXNw Y192cF9kaXNhYmxlX2Nsayh0aWRzcy0+ZGlzcGMsIHRjcnRjLT5od192aWRlb3BvcnQpOworCisJ dGlkc3NfcnVudGltZV9wdXQodGlkc3MpOworfQorCitzdGF0aWMKK2VudW0gZHJtX21vZGVfc3Rh dHVzIHRpZHNzX2NydGNfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJCSAg IGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCB0aWRzc19j cnRjICp0Y3J0YyA9IHRvX3RpZHNzX2NydGMoY3J0Yyk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRk ZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MgPSBkZGV2LT5kZXZf cHJpdmF0ZTsKKworCXJldHVybiBkaXNwY192cF9tb2RlX3ZhbGlkKHRpZHNzLT5kaXNwYywgdGNy dGMtPmh3X3ZpZGVvcG9ydCwgbW9kZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Ny dGNfaGVscGVyX2Z1bmNzIHRpZHNzX2NydGNfaGVscGVyX2Z1bmNzID0geworCS5hdG9taWNfY2hl Y2sgPSB0aWRzc19jcnRjX2F0b21pY19jaGVjaywKKwkuYXRvbWljX2ZsdXNoID0gdGlkc3NfY3J0 Y19hdG9taWNfZmx1c2gsCisJLmF0b21pY19lbmFibGUgPSB0aWRzc19jcnRjX2F0b21pY19lbmFi bGUsCisJLmF0b21pY19kaXNhYmxlID0gdGlkc3NfY3J0Y19hdG9taWNfZGlzYWJsZSwKKworCS5t b2RlX3ZhbGlkID0gdGlkc3NfY3J0Y19tb2RlX3ZhbGlkLAorfTsKKworLyogZHJtX2NydGNfZnVu Y3MgKi8KKworc3RhdGljIGludCB0aWRzc19jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9j cnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gY3J0Yy0+ZGV2OworCXN0 cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7CisKKwlkZXZfZGJn KGRkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwl0aWRzc19ydW50aW1lX2dldCh0aWRz cyk7CisKKwl0aWRzc19pcnFfZW5hYmxlX3ZibGFuayhjcnRjKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgdm9pZCB0aWRzc19jcnRjX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3Qg dGlkc3NfZGV2aWNlICp0aWRzcyA9IGRkZXYtPmRldl9wcml2YXRlOworCisJZGV2X2RiZyhkZGV2 LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJdGlkc3NfaXJxX2Rpc2FibGVfdmJsYW5rKGNy dGMpOworCisJdGlkc3NfcnVudGltZV9wdXQodGlkc3MpOworfQorCitzdGF0aWMgdm9pZCB0aWRz c19jcnRjX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgdGlkc3NfY3J0 Y19zdGF0ZSAqdGNydGM7CisKKwlpZiAoY3J0Yy0+c3RhdGUpCisJCV9fZHJtX2F0b21pY19oZWxw ZXJfY3J0Y19kZXN0cm95X3N0YXRlKGNydGMtPnN0YXRlKTsKKworCWtmcmVlKGNydGMtPnN0YXRl KTsKKworCXRjcnRjID0ga3phbGxvYyhzaXplb2YoKnRjcnRjKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCF0Y3J0YykgeworCQljcnRjLT5zdGF0ZSA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwljcnRj LT5zdGF0ZSA9ICZ0Y3J0Yy0+YmFzZTsKKwljcnRjLT5zdGF0ZS0+Y3J0YyA9IGNydGM7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnRpZHNzX2NydGNfZHVwbGljYXRlX3N0YXRl KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgdGlkc3NfY3J0Y19zdGF0ZSAqc3Rh dGUsICpjdXJyZW50X3N0YXRlOworCisJaWYgKFdBUk5fT04oIWNydGMtPnN0YXRlKSkKKwkJcmV0 dXJuIE5VTEw7CisKKwljdXJyZW50X3N0YXRlID0gdG9fdGlkc3NfY3J0Y19zdGF0ZShjcnRjLT5z dGF0ZSk7CisKKwlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwor CWlmICghc3RhdGUpCisJCXJldHVybiBOVUxMOworCisJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRj X2R1cGxpY2F0ZV9zdGF0ZShjcnRjLCAmc3RhdGUtPmJhc2UpOworCisJc3RhdGUtPmJ1c19mb3Jt YXQgPSBjdXJyZW50X3N0YXRlLT5idXNfZm9ybWF0OworCXN0YXRlLT5idXNfZmxhZ3MgPSBjdXJy ZW50X3N0YXRlLT5idXNfZmxhZ3M7CisKKwlyZXR1cm4gJnN0YXRlLT5iYXNlOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIHRpZHNzX2NydGNfZnVuY3MgPSB7CisJLnJl c2V0ID0gdGlkc3NfY3J0Y19yZXNldCwKKwkuZGVzdHJveSA9IGRybV9jcnRjX2NsZWFudXAsCisJ LnNldF9jb25maWcgPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLAorCS5wYWdlX2ZsaXAg PSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUg PSB0aWRzc19jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBk cm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUsCisJLmVuYWJsZV92YmxhbmsgPSB0 aWRzc19jcnRjX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gdGlkc3NfY3J0Y19k aXNhYmxlX3ZibGFuaywKK307CisKK3N0cnVjdCB0aWRzc19jcnRjICp0aWRzc19jcnRjX2NyZWF0 ZShzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcywKKwkJCQkgICAgIHUzMiBod192aWRlb3BvcnQs CisJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5KQoreworCXN0cnVjdCB0aWRzc19j cnRjICp0Y3J0YzsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJdW5zaWduZWQgaW50IGdhbW1h X2x1dF9zaXplID0gMDsKKwlib29sIGhhc19jdG0gPSB0cnVlOworCWludCByZXQ7CisKKwl0Y3J0 YyA9IGRldm1fa3phbGxvYyh0aWRzcy0+ZGV2LCBzaXplb2YoKnRjcnRjKSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCF0Y3J0YykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl0Y3J0Yy0+aHdf dmlkZW9wb3J0ID0gaHdfdmlkZW9wb3J0OworCWluaXRfY29tcGxldGlvbigmdGNydGMtPmZyYW1l ZG9uZV9jb21wbGV0aW9uKTsKKworCWNydGMgPSAgJnRjcnRjLT5jcnRjOworCisJcmV0ID0gZHJt X2NydGNfaW5pdF93aXRoX3BsYW5lcygmdGlkc3MtPmRkZXYsIGNydGMsIHByaW1hcnksCisJCQkJ CU5VTEwsICZ0aWRzc19jcnRjX2Z1bmNzLCBOVUxMKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJu IEVSUl9QVFIocmV0KTsKKworCWRybV9jcnRjX2hlbHBlcl9hZGQoY3J0YywgJnRpZHNzX2NydGNf aGVscGVyX2Z1bmNzKTsKKworCS8qCisJICogVGhlIGRpc3BjIGdhbW1hIGZ1bmN0aW9ucyBhZGFw dCB0byB3aGF0IGV2ZXIgc2l6ZSB3ZSBhc2sKKwkgKiBmcm9tIGl0IG5vIG1hdHRlciB3aGF0IEhX IHN1cHBvcnRzLiBYLXNlcnZlciBhc3N1bWVzIDI1NgorCSAqIGVsZW1lbnQgZ2FtbWEgdGFibGVz IHNvIGxldHMgdXNlIHRoYXQuCisJICovCisJZ2FtbWFfbHV0X3NpemUgPSAyNTY7CisKKwlkcm1f Y3J0Y19lbmFibGVfY29sb3JfbWdtdChjcnRjLCAwLCBoYXNfY3RtLCBnYW1tYV9sdXRfc2l6ZSk7 CisJaWYgKGdhbW1hX2x1dF9zaXplKQorCQlkcm1fbW9kZV9jcnRjX3NldF9nYW1tYV9zaXplKGNy dGMsIGdhbW1hX2x1dF9zaXplKTsKKworCXJldHVybiB0Y3J0YzsKK30KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19jcnRjLmggYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3Mv dGlkc3NfY3J0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZGY5 ZDkwYjFhZDJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNz X2NydGMuaApAQCAtMCwwICsxLDQ2IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUZXhhcyBJbnN0cnVtZW50cyBJbmNv cnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4g PHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KKyAqLworCisjaWZuZGVmIF9fVElEU1NfQ1JUQ19IX18K KyNkZWZpbmUgX19USURTU19DUlRDX0hfXworCisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5o PgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgor CisjZGVmaW5lIHRvX3RpZHNzX2NydGMoYykgY29udGFpbmVyX29mKChjKSwgc3RydWN0IHRpZHNz X2NydGMsIGNydGMpCisKK3N0cnVjdCB0aWRzc19kZXZpY2U7CisKK3N0cnVjdCB0aWRzc19jcnRj IHsKKwlzdHJ1Y3QgZHJtX2NydGMgY3J0YzsKKworCXUzMiBod192aWRlb3BvcnQ7CisKKwlzdHJ1 Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudDsKKworCXN0cnVjdCBjb21wbGV0aW9u IGZyYW1lZG9uZV9jb21wbGV0aW9uOworfTsKKworI2RlZmluZSB0b190aWRzc19jcnRjX3N0YXRl KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgdGlkc3NfY3J0Y19zdGF0ZSwgYmFzZSkKKworc3Ry dWN0IHRpZHNzX2NydGNfc3RhdGUgeworCS8qIE11c3QgYmUgZmlyc3QuICovCisJc3RydWN0IGRy bV9jcnRjX3N0YXRlIGJhc2U7CisKKwl1MzIgYnVzX2Zvcm1hdDsKKwl1MzIgYnVzX2ZsYWdzOwor fTsKKwordm9pZCB0aWRzc19jcnRjX3ZibGFua19pcnEoc3RydWN0IGRybV9jcnRjICpjcnRjKTsK K3ZvaWQgdGlkc3NfY3J0Y19mcmFtZWRvbmVfaXJxKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2 b2lkIHRpZHNzX2NydGNfZXJyb3JfaXJxKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTY0IGlycXN0 YXR1cyk7CisKK3N0cnVjdCB0aWRzc19jcnRjICp0aWRzc19jcnRjX2NyZWF0ZShzdHJ1Y3QgdGlk c3NfZGV2aWNlICp0aWRzcywKKwkJCQkgICAgIHUzMiBod192aWRlb3BvcnQsCisJCQkJICAgICBz dHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3RpZHNzL3RpZHNzX2Rpc3BjLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3Nf ZGlzcGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBjODA1Mjcx OTBjYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19kaXNw Yy5jCkBAIC0wLDAgKzEsMjY0MyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBUZXhhcyBJbnN0cnVtZW50cyBJbmNv cnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqIEF1dGhvcjogSnlyaSBTYXJoYSA8anNh cmhhQHRpLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxp bnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4 L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+ CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2Uu aD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9w bV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKKyNpbmNsdWRlIDxkcm0v ZHJtX2ZvdXJjYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2luY2x1 ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+ CisKKyNpbmNsdWRlICJ0aWRzc19jcnRjLmgiCisjaW5jbHVkZSAidGlkc3NfZGlzcGMuaCIKKyNp bmNsdWRlICJ0aWRzc19kcnYuaCIKKyNpbmNsdWRlICJ0aWRzc19pcnEuaCIKKyNpbmNsdWRlICJ0 aWRzc19wbGFuZS5oIgorCisjaW5jbHVkZSAidGlkc3NfZGlzcGNfcmVncy5oIgorI2luY2x1ZGUg InRpZHNzX3NjYWxlX2NvZWZzLmgiCisKK3N0YXRpYyBjb25zdCB1MTYgdGlkc3NfazJnX2NvbW1v bl9yZWdzW0RJU1BDX0NPTU1PTl9SRUdfVEFCTEVfTEVOXSA9IHsKKwlbRFNTX1JFVklTSU9OX09G Rl0gPSAgICAgICAgICAgICAgICAgICAgMHgwMCwKKwlbRFNTX1NZU0NPTkZJR19PRkZdID0gICAg ICAgICAgICAgICAgICAgMHgwNCwKKwlbRFNTX1NZU1NUQVRVU19PRkZdID0gICAgICAgICAgICAg ICAgICAgMHgwOCwKKwlbRElTUENfSVJRX0VPSV9PRkZdID0gICAgICAgICAgICAgICAgICAgMHgy MCwKKwlbRElTUENfSVJRU1RBVFVTX1JBV19PRkZdID0gICAgICAgICAgICAgMHgyNCwKKwlbRElT UENfSVJRU1RBVFVTX09GRl0gPSAgICAgICAgICAgICAgICAgMHgyOCwKKwlbRElTUENfSVJRRU5B QkxFX1NFVF9PRkZdID0gICAgICAgICAgICAgMHgyYywKKwlbRElTUENfSVJRRU5BQkxFX0NMUl9P RkZdID0gICAgICAgICAgICAgMHgzMCwKKworCVtESVNQQ19HTE9CQUxfTUZMQUdfQVRUUklCVVRF X09GRl0gPSAgICAweDQwLAorCVtESVNQQ19HTE9CQUxfQlVGRkVSX09GRl0gPSAgICAgICAgICAg ICAweDQ0LAorCisJW0RJU1BDX0RCR19DT05UUk9MX09GRl0gPSAgICAgICAgICAgICAgIDB4NGMs CisJW0RJU1BDX0RCR19TVEFUVVNfT0ZGXSA9ICAgICAgICAgICAgICAgIDB4NTAsCisKKwlbRElT UENfQ0xLR0FUSU5HX0RJU0FCTEVfT0ZGXSA9ICAgICAgICAgMHg1NCwKK307CisKK2NvbnN0IHN0 cnVjdCBkaXNwY19mZWF0dXJlcyBkaXNwY19rMmdfZmVhdHMgPSB7CisJLm1pbl9wY2xrX2tIeiA9 IDQzNzUsCisKKwkubWF4X3BjbGtfa0h6ID0geworCQlbRElTUENfVlBfRFBJXSA9IDE1MDAwMCwK Kwl9LAorCisJLyoKKwkgKiBYWFggQWNjb3JkaW5nIFRSTSB0aGUgUkdCIGlucHV0IGJ1ZmZlciB3 aWR0aCB1cCB0byAyNTYwIHNob3VsZAorCSAqICAgICB3b3JrIG9uIDMgdGFwcywgYnV0IGluIHBy YWN0aWNlIGl0IG9ubHkgd29ya3MgdXAgdG8gMTI4MC4KKwkgKi8KKwkuc2NhbGluZyA9IHsKKwkJ LmluX3dpZHRoX21heF81dGFwX3JnYiA9IDEyODAsCisJCS5pbl93aWR0aF9tYXhfM3RhcF9yZ2Ig PSAxMjgwLAorCQkuaW5fd2lkdGhfbWF4XzV0YXBfeXV2ID0gMjU2MCwKKwkJLmluX3dpZHRoX21h eF8zdGFwX3l1diA9IDI1NjAsCisJCS51cHNjYWxlX2xpbWl0ID0gMTYsCisJCS5kb3duc2NhbGVf bGltaXRfNXRhcCA9IDQsCisJCS5kb3duc2NhbGVfbGltaXRfM3RhcCA9IDIsCisJCS8qCisJCSAq IFRoZSBtYXggc3VwcG9ydGVkIHBpeGVsIGluYyB2YWx1ZSBpcyAyNTUuIFRoZSB2YWx1ZQorCQkg KiBvZiBwaXhlbCBpbmMgaXMgY2FsY3VsYXRlZCBsaWtlIHRoaXM6IDErKHhpbmMtMSkqYnBwLgor CQkgKiBUaGUgbWF4aW11bSBicHAgb2YgYWxsIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IHRoZSBIVwor CQkgKiBpcyA4LiBTbyB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgeGluYyB2YWx1ZSBpcyAzMiwKKwkJ ICogYmVjYXVzZSAxKygzMi0xKSo4IDwgMjU1IDwgMSsoMzMtMSkqNC4KKwkJICovCisJCS54aW5j X21heCA9IDMyLAorCX0sCisKKwkuc3VicmV2ID0gRElTUENfSzJHLAorCisJLmNvbW1vbiA9ICJj b21tb24iLAorCisJLmNvbW1vbl9yZWdzID0gdGlkc3NfazJnX2NvbW1vbl9yZWdzLAorCisJLm51 bV92cHMgPSAxLAorCS52cF9uYW1lID0geyAidnAxIiB9LAorCS5vdnJfbmFtZSA9IHsgIm92cjEi IH0sCisJLnZwY2xrX25hbWUgPSAgeyAidnAxIiB9LAorCS52cF9idXNfdHlwZSA9IHsgRElTUENf VlBfRFBJIH0sCisKKwkudnBfZmVhdCA9IHsgLmNvbG9yID0geworCQkJLmhhc19jdG0gPSBmYWxz ZSwgLyogWFhYIG5vIEsyRyBpbXBsZW1lbnRhdGlvbiB5ZXQgKi8KKwkJCS5nYW1tYV9zaXplID0g MjU2LAorCQkJLmdhbW1hX3R5cGUgPSBUSURTU19HQU1NQV84QklULAorCQl9LAorCX0sCisKKwku bnVtX3BsYW5lcyA9IDEsCisJLnZpZF9uYW1lID0geyAidmlkMSIgfSwKKwkudmlkX2xpdGUgPSB7 IGZhbHNlIH0sCisJLnZpZF9vcmRlciA9IHsgMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHUxNiB0 aWRzc19hbTY1eF9jb21tb25fcmVnc1tESVNQQ19DT01NT05fUkVHX1RBQkxFX0xFTl0gPSB7CisJ W0RTU19SRVZJU0lPTl9PRkZdID0JCQkweDQsCisJW0RTU19TWVNDT05GSUdfT0ZGXSA9CQkJMHg4 LAorCVtEU1NfU1lTU1RBVFVTX09GRl0gPQkJCTB4MjAsCisJW0RJU1BDX0lSUV9FT0lfT0ZGXSA9 CQkJMHgyNCwKKwlbRElTUENfSVJRU1RBVFVTX1JBV19PRkZdID0JCTB4MjgsCisJW0RJU1BDX0lS UVNUQVRVU19PRkZdID0JCQkweDJjLAorCVtESVNQQ19JUlFFTkFCTEVfU0VUX09GRl0gPQkJMHgz MCwKKwlbRElTUENfSVJRRU5BQkxFX0NMUl9PRkZdID0JCTB4NDAsCisJW0RJU1BDX1ZJRF9JUlFF TkFCTEVfT0ZGXSA9CQkweDQ0LAorCVtESVNQQ19WSURfSVJRU1RBVFVTX09GRl0gPQkJMHg1OCwK KwlbRElTUENfVlBfSVJRRU5BQkxFX09GRl0gPQkJMHg3MCwKKwlbRElTUENfVlBfSVJRU1RBVFVT X09GRl0gPQkJMHg3YywKKworCVtXQl9JUlFFTkFCTEVfT0ZGXSA9CQkJMHg4OCwKKwlbV0JfSVJR U1RBVFVTX09GRl0gPQkJCTB4OGMsCisKKwlbRElTUENfR0xPQkFMX01GTEFHX0FUVFJJQlVURV9P RkZdID0JMHg5MCwKKwlbRElTUENfR0xPQkFMX09VVFBVVF9FTkFCTEVfT0ZGXSA9CTB4OTQsCisJ W0RJU1BDX0dMT0JBTF9CVUZGRVJfT0ZGXSA9CQkweDk4LAorCVtEU1NfQ0JBX0NGR19PRkZdID0J CQkweDljLAorCVtESVNQQ19EQkdfQ09OVFJPTF9PRkZdID0JCTB4YTAsCisJW0RJU1BDX0RCR19T VEFUVVNfT0ZGXSA9CQkweGE0LAorCVtESVNQQ19DTEtHQVRJTkdfRElTQUJMRV9PRkZdID0JCTB4 YTgsCisJW0RJU1BDX1NFQ1VSRV9ESVNBQkxFX09GRl0gPQkJMHhhYywKK307CisKK2NvbnN0IHN0 cnVjdCBkaXNwY19mZWF0dXJlcyBkaXNwY19hbTY1eF9mZWF0cyA9IHsKKwkubWF4X3BjbGtfa0h6 ID0geworCQlbRElTUENfVlBfRFBJXSA9IDE2NTAwMCwKKwkJW0RJU1BDX1ZQX09MREldID0gMTY1 MDAwLAorCX0sCisKKwkuc2NhbGluZyA9IHsKKwkJLmluX3dpZHRoX21heF81dGFwX3JnYiA9IDEy ODAsCisJCS5pbl93aWR0aF9tYXhfM3RhcF9yZ2IgPSAyNTYwLAorCQkuaW5fd2lkdGhfbWF4XzV0 YXBfeXV2ID0gMjU2MCwKKwkJLmluX3dpZHRoX21heF8zdGFwX3l1diA9IDQwOTYsCisJCS51cHNj YWxlX2xpbWl0ID0gMTYsCisJCS5kb3duc2NhbGVfbGltaXRfNXRhcCA9IDQsCisJCS5kb3duc2Nh bGVfbGltaXRfM3RhcCA9IDIsCisJCS8qCisJCSAqIFRoZSBtYXggc3VwcG9ydGVkIHBpeGVsIGlu YyB2YWx1ZSBpcyAyNTUuIFRoZSB2YWx1ZQorCQkgKiBvZiBwaXhlbCBpbmMgaXMgY2FsY3VsYXRl ZCBsaWtlIHRoaXM6IDErKHhpbmMtMSkqYnBwLgorCQkgKiBUaGUgbWF4aW11bSBicHAgb2YgYWxs IGZvcm1hdHMgc3VwcG9ydGVkIGJ5IHRoZSBIVworCQkgKiBpcyA4LiBTbyB0aGUgbWF4aW11bSBz dXBwb3J0ZWQgeGluYyB2YWx1ZSBpcyAzMiwKKwkJICogYmVjYXVzZSAxKygzMi0xKSo4IDwgMjU1 IDwgMSsoMzMtMSkqNC4KKwkJICovCisJCS54aW5jX21heCA9IDMyLAorCX0sCisKKwkuc3VicmV2 ID0gRElTUENfQU02NVgsCisKKwkuY29tbW9uID0gImNvbW1vbiIsCisJLmNvbW1vbl9yZWdzID0g dGlkc3NfYW02NXhfY29tbW9uX3JlZ3MsCisKKwkubnVtX3ZwcyA9IDIsCisJLnZwX25hbWUgPSB7 ICJ2cDEiLCAidnAyIiB9LAorCS5vdnJfbmFtZSA9IHsgIm92cjEiLCAib3ZyMiIgfSwKKwkudnBj bGtfbmFtZSA9ICB7ICJ2cDEiLCAidnAyIiB9LAorCS52cF9idXNfdHlwZSA9IHsgRElTUENfVlBf T0xESSwgRElTUENfVlBfRFBJIH0sCisKKwkudnBfZmVhdCA9IHsgLmNvbG9yID0geworCQkJLmhh c19jdG0gPSB0cnVlLAorCQkJLmdhbW1hX3NpemUgPSAyNTYsCisJCQkuZ2FtbWFfdHlwZSA9IFRJ RFNTX0dBTU1BXzhCSVQsCisJCX0sCisJfSwKKworCS5udW1fcGxhbmVzID0gMiwKKwkvKiBub3Rl OiB2aWQgaXMgcGxhbmVfaWQgMCBhbmQgdmlkbDEgaXMgcGxhbmVfaWQgMSAqLworCS52aWRfbmFt ZSA9IHsgInZpZCIsICJ2aWRsMSIgfSwKKwkudmlkX2xpdGUgPSB7IGZhbHNlLCB0cnVlLCB9LAor CS52aWRfb3JkZXIgPSB7IDEsIDAgfSwKKworCS5lcnJhdGEgPSB7CisJCS5pMjAwMCA9IHRydWUs CisJfSwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgdGlkc3NfajcyMWVfY29tbW9uX3JlZ3NbRElT UENfQ09NTU9OX1JFR19UQUJMRV9MRU5dID0geworCVtEU1NfUkVWSVNJT05fT0ZGXSA9CQkJMHg0 LAorCVtEU1NfU1lTQ09ORklHX09GRl0gPQkJCTB4OCwKKwlbRFNTX1NZU1NUQVRVU19PRkZdID0J CQkweDIwLAorCVtESVNQQ19JUlFfRU9JX09GRl0gPQkJCTB4ODAsCisJW0RJU1BDX0lSUVNUQVRV U19SQVdfT0ZGXSA9CQkweDI4LAorCVtESVNQQ19JUlFTVEFUVVNfT0ZGXSA9CQkJMHgyYywKKwlb RElTUENfSVJRRU5BQkxFX1NFVF9PRkZdID0JCTB4MzAsCisJW0RJU1BDX0lSUUVOQUJMRV9DTFJf T0ZGXSA9CQkweDM0LAorCVtESVNQQ19WSURfSVJRRU5BQkxFX09GRl0gPQkJMHgzOCwKKwlbRElT UENfVklEX0lSUVNUQVRVU19PRkZdID0JCTB4NDgsCisJW0RJU1BDX1ZQX0lSUUVOQUJMRV9PRkZd ID0JCTB4NTgsCisJW0RJU1BDX1ZQX0lSUVNUQVRVU19PRkZdID0JCTB4NjgsCisKKwlbV0JfSVJR RU5BQkxFX09GRl0gPQkJCTB4NzgsCisJW1dCX0lSUVNUQVRVU19PRkZdID0JCQkweDdjLAorCisJ W0RJU1BDX0dMT0JBTF9NRkxBR19BVFRSSUJVVEVfT0ZGXSA9CTB4OTgsCisJW0RJU1BDX0dMT0JB TF9PVVRQVVRfRU5BQkxFX09GRl0gPQkweDljLAorCVtESVNQQ19HTE9CQUxfQlVGRkVSX09GRl0g PQkJMHhhMCwKKwlbRFNTX0NCQV9DRkdfT0ZGXSA9CQkJMHhhNCwKKwlbRElTUENfREJHX0NPTlRS T0xfT0ZGXSA9CQkweGE4LAorCVtESVNQQ19EQkdfU1RBVFVTX09GRl0gPQkJMHhhYywKKwlbRElT UENfQ0xLR0FUSU5HX0RJU0FCTEVfT0ZGXSA9CQkweGIwLAorCVtESVNQQ19TRUNVUkVfRElTQUJM RV9PRkZdID0JCTB4OTAsCisKKwlbRkJEQ19SRVZJU0lPTl8xX09GRl0gPQkJCTB4YjgsCisJW0ZC RENfUkVWSVNJT05fMl9PRkZdID0JCQkweGJjLAorCVtGQkRDX1JFVklTSU9OXzNfT0ZGXSA9CQkJ MHhjMCwKKwlbRkJEQ19SRVZJU0lPTl80X09GRl0gPQkJCTB4YzQsCisJW0ZCRENfUkVWSVNJT05f NV9PRkZdID0JCQkweGM4LAorCVtGQkRDX1JFVklTSU9OXzZfT0ZGXSA9CQkJMHhjYywKKwlbRkJE Q19DT01NT05fQ09OVFJPTF9PRkZdID0JCTB4ZDAsCisJW0ZCRENfQ09OU1RBTlRfQ09MT1JfMF9P RkZdID0JCTB4ZDQsCisJW0ZCRENfQ09OU1RBTlRfQ09MT1JfMV9PRkZdID0JCTB4ZDgsCisJW0RJ U1BDX0NPTk5FQ1RJT05TX09GRl0gPQkJMHhlNCwKKwlbRElTUENfTVNTX1ZQMV9PRkZdID0JCQkw eGU4LAorCVtESVNQQ19NU1NfVlAzX09GRl0gPQkJCTB4ZWMsCit9OworCitjb25zdCBzdHJ1Y3Qg ZGlzcGNfZmVhdHVyZXMgZGlzcGNfajcyMWVfZmVhdHMgPSB7CisJLm1heF9wY2xrX2tIeiA9IHsK KwkJW0RJU1BDX1ZQX0RQSV0gPSAxNzAwMDAsCisJCVtESVNQQ19WUF9JTlRFUk5BTF0gPSA2MDAw MDAsCisJfSwKKworCS5zY2FsaW5nID0geworCQkuaW5fd2lkdGhfbWF4XzV0YXBfcmdiID0gMjA0 OCwKKwkJLmluX3dpZHRoX21heF8zdGFwX3JnYiA9IDQwOTYsCisJCS5pbl93aWR0aF9tYXhfNXRh cF95dXYgPSA0MDk2LAorCQkuaW5fd2lkdGhfbWF4XzN0YXBfeXV2ID0gNDA5NiwKKwkJLnVwc2Nh bGVfbGltaXQgPSAxNiwKKwkJLmRvd25zY2FsZV9saW1pdF81dGFwID0gNCwKKwkJLmRvd25zY2Fs ZV9saW1pdF8zdGFwID0gMiwKKwkJLyoKKwkJICogVGhlIG1heCBzdXBwb3J0ZWQgcGl4ZWwgaW5j IHZhbHVlIGlzIDI1NS4gVGhlIHZhbHVlCisJCSAqIG9mIHBpeGVsIGluYyBpcyBjYWxjdWxhdGVk IGxpa2UgdGhpczogMSsoeGluYy0xKSpicHAuCisJCSAqIFRoZSBtYXhpbXVtIGJwcCBvZiBhbGwg Zm9ybWF0cyBzdXBwb3J0ZWQgYnkgdGhlIEhXCisJCSAqIGlzIDguIFNvIHRoZSBtYXhpbXVtIHN1 cHBvcnRlZCB4aW5jIHZhbHVlIGlzIDMyLAorCQkgKiBiZWNhdXNlIDErKDMyLTEpKjggPCAyNTUg PCAxKygzMy0xKSo0LgorCQkgKi8KKwkJLnhpbmNfbWF4ID0gMzIsCisJfSwKKworCS5zdWJyZXYg PSBESVNQQ19KNzIxRSwKKworCS5jb21tb24gPSAiY29tbW9uX20iLAorCS5jb21tb25fcmVncyA9 IHRpZHNzX2o3MjFlX2NvbW1vbl9yZWdzLAorCisJLm51bV92cHMgPSA0LAorCS52cF9uYW1lID0g eyAidnAxIiwgInZwMiIsICJ2cDMiLCAidnA0IiB9LAorCS5vdnJfbmFtZSA9IHsgIm92cjEiLCAi b3ZyMiIsICJvdnIzIiwgIm92cjQiIH0sCisJLnZwY2xrX25hbWUgPSB7ICJ2cDEiLCAidnAyIiwg InZwMyIsICJ2cDQiIH0sCisJLyogQ3VycmVudGx5IGhhcmQgY29kZWQgVlAgcm91dGluZyAoc2Vl IGRpc3BjX2luaXRpYWxfY29uZmlnKCkpICovCisJLnZwX2J1c190eXBlID0JeyBESVNQQ19WUF9J TlRFUk5BTCwgRElTUENfVlBfRFBJLAorCQkJICBESVNQQ19WUF9JTlRFUk5BTCwgRElTUENfVlBf RFBJLCB9LAorCS52cF9mZWF0ID0geyAuY29sb3IgPSB7CisJCQkuaGFzX2N0bSA9IHRydWUsCisJ CQkuZ2FtbWFfc2l6ZSA9IDEwMjQsCisJCQkuZ2FtbWFfdHlwZSA9IFRJRFNTX0dBTU1BXzEwQklU LAorCQl9LAorCX0sCisJLm51bV9wbGFuZXMgPSA0LAorCS52aWRfbmFtZSA9IHsgInZpZDEiLCAi dmlkbDEiLCAidmlkMiIsICJ2aWRsMiIgfSwKKwkudmlkX2xpdGUgPSB7IDAsIDEsIDAsIDEsIH0s CisJLnZpZF9vcmRlciA9IHsgMSwgMywgMCwgMiB9LAorfTsKKworLyoKKyAqIFRSTSBnaXZlcyBi aXRmaWVsZHMgYXMgc3RhcnQ6ZW5kLCB3aGVyZSBzdGFydCBpcyB0aGUgaGlnaGVyIGJpdAorICog bnVtYmVyLiBGb3IgZXhhbXBsZSA3OjAKKyAqLworCisjZGVmaW5lIEZMRF9NQVNLKHN0YXJ0LCBl bmQpCSgoKDEgPDwgKChzdGFydCkgLSAoZW5kKSArIDEpKSAtIDEpIDw8IChlbmQpKQorI2RlZmlu ZSBGTERfVkFMKHZhbCwgc3RhcnQsIGVuZCkgKCgodmFsKSA8PCAoZW5kKSkgJiBGTERfTUFTSyhz dGFydCwgZW5kKSkKKyNkZWZpbmUgRkxEX0dFVCh2YWwsIHN0YXJ0LCBlbmQpICgoKHZhbCkgJiBG TERfTUFTSyhzdGFydCwgZW5kKSkgPj4gKGVuZCkpCisjZGVmaW5lIEZMRF9NT0Qob3JpZywgdmFs LCBzdGFydCwgZW5kKQkJCQkJXAorCSgoKG9yaWcpICYgfkZMRF9NQVNLKHN0YXJ0LCBlbmQpKSB8 IEZMRF9WQUwodmFsLCBzdGFydCwgZW5kKSkKKworI2RlZmluZSBSRUdfR0VUKGRpc3BjLCBpZHgs IHN0YXJ0LCBlbmQpCQkJXAorCUZMRF9HRVQoZGlzcGNfcmVhZChkaXNwYywgaWR4KSwgc3RhcnQs IGVuZCkKKworI2RlZmluZSBSRUdfRkxEX01PRChkaXNwYywgaWR4LCB2YWwsIHN0YXJ0LCBlbmQp CQkJXAorCWRpc3BjX3dyaXRlKGRpc3BjLCBpZHgsIEZMRF9NT0QoZGlzcGNfcmVhZChkaXNwYywg aWR4KSwgdmFsLCBzdGFydCwgZW5kKSkKKworI2RlZmluZSBWSURfUkVHX0dFVChkaXNwYywgaHdf cGxhbmUsIGlkeCwgc3RhcnQsIGVuZCkJCQlcCisJRkxEX0dFVChkaXNwY192aWRfcmVhZChkaXNw YywgaHdfcGxhbmUsIGlkeCksIHN0YXJ0LCBlbmQpCisKKyNkZWZpbmUgVklEX1JFR19GTERfTU9E KGRpc3BjLCBod19wbGFuZSwgaWR4LCB2YWwsIHN0YXJ0LCBlbmQpCQlcCisJZGlzcGNfdmlkX3dy aXRlKGRpc3BjLCBod19wbGFuZSwgaWR4LCBGTERfTU9EKGRpc3BjX3ZpZF9yZWFkKGRpc3BjLCBo d19wbGFuZSwgaWR4KSwgdmFsLCBzdGFydCwgZW5kKSkKKworI2RlZmluZSBWUF9SRUdfR0VUKGRp c3BjLCB2cCwgaWR4LCBzdGFydCwgZW5kKQkJCVwKKwlGTERfR0VUKGRpc3BjX3ZwX3JlYWQoZGlz cGMsIHZwLCBpZHgpLCBzdGFydCwgZW5kKQorCisjZGVmaW5lIFZQX1JFR19GTERfTU9EKGRpc3Bj LCB2cCwgaWR4LCB2YWwsIHN0YXJ0LCBlbmQpCQkJXAorCWRpc3BjX3ZwX3dyaXRlKGRpc3BjLCB2 cCwgaWR4LCBGTERfTU9EKGRpc3BjX3ZwX3JlYWQoZGlzcGMsIHZwLCBpZHgpLCB2YWwsIHN0YXJ0 LCBlbmQpKQorCisjZGVmaW5lIE9WUl9SRUdfR0VUKGRpc3BjLCBvdnIsIGlkeCwgc3RhcnQsIGVu ZCkJCVwKKwlGTERfR0VUKGRpc3BjX292cl9yZWFkKGRpc3BjLCBvdnIsIGlkeCksIHN0YXJ0LCBl bmQpCisKKyNkZWZpbmUgT1ZSX1JFR19GTERfTU9EKGRpc3BjLCBvdnIsIGlkeCwgdmFsLCBzdGFy dCwgZW5kKQkJXAorCWRpc3BjX292cl93cml0ZShkaXNwYywgb3ZyLCBpZHgsIEZMRF9NT0QoZGlz cGNfb3ZyX3JlYWQoZGlzcGMsIG92ciwgaWR4KSwgdmFsLCBzdGFydCwgZW5kKSkKKworc3RhdGlj IGNvbnN0IHUxNiAqZGlzcGNfY29tbW9uX3JlZ21hcDsKKworc3RydWN0IGRzc192cF9kYXRhIHsK Kwl1MzIgKmdhbW1hX3RhYmxlOworfTsKKworc3RydWN0IGRzc19wbGFuZV9kYXRhIHsKKwl1MzIg em9yZGVyOworCXUzMiBod192aWRlb3BvcnQ7Cit9OworCitzdHJ1Y3QgZGlzcGNfZGV2aWNlIHsK KwlzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzczsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwl2 b2lkIF9faW9tZW0gKmJhc2VfY29tbW9uOworCXZvaWQgX19pb21lbSAqYmFzZV92aWRbVElEU1Nf TUFYX1BMQU5FU107CisJdm9pZCBfX2lvbWVtICpiYXNlX292cltUSURTU19NQVhfUE9SVFNdOwor CXZvaWQgX19pb21lbSAqYmFzZV92cFtUSURTU19NQVhfUE9SVFNdOworCisJc3RydWN0IHJlZ21h cCAqb2xkaV9pb19jdHJsOworCisJc3RydWN0IGNsayAqdnBfY2xrW1RJRFNTX01BWF9QT1JUU107 CisKKwljb25zdCBzdHJ1Y3QgZGlzcGNfZmVhdHVyZXMgKmZlYXQ7CisKKwlzdHJ1Y3QgY2xrICpm Y2xrOworCisJYm9vbCBpc19lbmFibGVkOworCisJc3RydWN0IGRzc192cF9kYXRhIHZwX2RhdGFb VElEU1NfTUFYX1BPUlRTXTsKKworCXN0cnVjdCBkc3NfcGxhbmVfZGF0YSBwbGFuZV9kYXRhW1RJ RFNTX01BWF9QTEFORVNdOworCisJdTMyICpmb3VyY2NzOworCXUzMiBudW1fZm91cmNjczsKKwor CXUzMiBtZW1vcnlfYmFuZHdpZHRoX2xpbWl0OworfTsKKworc3RhdGljIHZvaWQgZGlzcGNfd3Jp dGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJaW93 cml0ZTMyKHZhbCwgZGlzcGMtPmJhc2VfY29tbW9uICsgcmVnKTsKK30KKworc3RhdGljIHUzMiBk aXNwY19yZWFkKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MTYgcmVnKQoreworCXJldHVy biBpb3JlYWQzMihkaXNwYy0+YmFzZV9jb21tb24gKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBk aXNwY192aWRfd3JpdGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBod19wbGFuZSwg dTE2IHJlZywgdTMyIHZhbCkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBkaXNwYy0+YmFzZV92 aWRbaHdfcGxhbmVdOworCisJaW93cml0ZTMyKHZhbCwgYmFzZSArIHJlZyk7Cit9CisKK3N0YXRp YyB1MzIgZGlzcGNfdmlkX3JlYWQoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBod19w bGFuZSwgdTE2IHJlZykKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBkaXNwYy0+YmFzZV92aWRb aHdfcGxhbmVdOworCisJcmV0dXJuIGlvcmVhZDMyKGJhc2UgKyByZWcpOworfQorCitzdGF0aWMg dm9pZCBkaXNwY19vdnJfd3JpdGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBod192 aWRlb3BvcnQsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gZGlz cGMtPmJhc2Vfb3ZyW2h3X3ZpZGVvcG9ydF07CisKKwlpb3dyaXRlMzIodmFsLCBiYXNlICsgcmVn KTsKK30KKworc3RhdGljIHUzMiBkaXNwY19vdnJfcmVhZChzdHJ1Y3QgZGlzcGNfZGV2aWNlICpk aXNwYywgdTMyIGh3X3ZpZGVvcG9ydCwgdTE2IHJlZykKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2Ug PSBkaXNwYy0+YmFzZV9vdnJbaHdfdmlkZW9wb3J0XTsKKworCXJldHVybiBpb3JlYWQzMihiYXNl ICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQgZGlzcGNfdnBfd3JpdGUoc3RydWN0IGRpc3BjX2Rl dmljZSAqZGlzcGMsIHUzMiBod192aWRlb3BvcnQsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJdm9p ZCBfX2lvbWVtICpiYXNlID0gZGlzcGMtPmJhc2VfdnBbaHdfdmlkZW9wb3J0XTsKKworCWlvd3Jp dGUzMih2YWwsIGJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdTMyIGRpc3BjX3ZwX3JlYWQoc3Ry dWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBod192aWRlb3BvcnQsIHUxNiByZWcpCit7CisJ dm9pZCBfX2lvbWVtICpiYXNlID0gZGlzcGMtPmJhc2VfdnBbaHdfdmlkZW9wb3J0XTsKKworCXJl dHVybiBpb3JlYWQzMihiYXNlICsgcmVnKTsKK30KKworc3RhdGljIGRpc3BjX2lycV90IGRpc3Bj X3ZwX2lycV9mcm9tX3Jhdyh1MzIgc3RhdCwgdTMyIGh3X3ZpZGVvcG9ydCkKK3sKKwlkaXNwY19p cnFfdCB2cF9zdGF0ID0gMDsKKworCWlmIChzdGF0ICYgQklUKDApKQorCQl2cF9zdGF0IHw9IERT U19JUlFfVlBfRlJBTUVfRE9ORShod192aWRlb3BvcnQpOworCWlmIChzdGF0ICYgQklUKDEpKQor CQl2cF9zdGF0IHw9IERTU19JUlFfVlBfVlNZTkNfRVZFTihod192aWRlb3BvcnQpOworCWlmIChz dGF0ICYgQklUKDIpKQorCQl2cF9zdGF0IHw9IERTU19JUlFfVlBfVlNZTkNfT0REKGh3X3ZpZGVv cG9ydCk7CisJaWYgKHN0YXQgJiBCSVQoNCkpCisJCXZwX3N0YXQgfD0gRFNTX0lSUV9WUF9TWU5D X0xPU1QoaHdfdmlkZW9wb3J0KTsKKworCXJldHVybiB2cF9zdGF0OworfQorCitzdGF0aWMgdTMy IGRpc3BjX3ZwX2lycV90b19yYXcoZGlzcGNfaXJxX3QgdnBzdGF0LCB1MzIgaHdfdmlkZW9wb3J0 KQoreworCXUzMiBzdGF0ID0gMDsKKworCWlmICh2cHN0YXQgJiBEU1NfSVJRX1ZQX0ZSQU1FX0RP TkUoaHdfdmlkZW9wb3J0KSkKKwkJc3RhdCB8PSBCSVQoMCk7CisJaWYgKHZwc3RhdCAmIERTU19J UlFfVlBfVlNZTkNfRVZFTihod192aWRlb3BvcnQpKQorCQlzdGF0IHw9IEJJVCgxKTsKKwlpZiAo dnBzdGF0ICYgRFNTX0lSUV9WUF9WU1lOQ19PREQoaHdfdmlkZW9wb3J0KSkKKwkJc3RhdCB8PSBC SVQoMik7CisJaWYgKHZwc3RhdCAmIERTU19JUlFfVlBfU1lOQ19MT1NUKGh3X3ZpZGVvcG9ydCkp CisJCXN0YXQgfD0gQklUKDQpOworCisJcmV0dXJuIHN0YXQ7Cit9CisKK3N0YXRpYyBkaXNwY19p cnFfdCBkaXNwY192aWRfaXJxX2Zyb21fcmF3KHUzMiBzdGF0LCB1MzIgaHdfcGxhbmUpCit7CisJ ZGlzcGNfaXJxX3QgdmlkX3N0YXQgPSAwOworCisJaWYgKHN0YXQgJiBCSVQoMCkpCisJCXZpZF9z dGF0IHw9IERTU19JUlFfUExBTkVfRklGT19VTkRFUkZMT1coaHdfcGxhbmUpOworCisJcmV0dXJu IHZpZF9zdGF0OworfQorCitzdGF0aWMgdTMyIGRpc3BjX3ZpZF9pcnFfdG9fcmF3KGRpc3BjX2ly cV90IHZpZHN0YXQsIHUzMiBod19wbGFuZSkKK3sKKwl1MzIgc3RhdCA9IDA7CisKKwlpZiAodmlk c3RhdCAmIERTU19JUlFfUExBTkVfRklGT19VTkRFUkZMT1coaHdfcGxhbmUpKQorCQlzdGF0IHw9 IEJJVCgwKTsKKworCXJldHVybiBzdGF0OworfQorCitzdGF0aWMgZGlzcGNfaXJxX3QgZGlzcGNf azJnX3ZwX3JlYWRfaXJxc3RhdHVzKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkg ICAgICAgdTMyIGh3X3ZpZGVvcG9ydCkKK3sKKwl1MzIgc3RhdCA9IGRpc3BjX3ZwX3JlYWQoZGlz cGMsIGh3X3ZpZGVvcG9ydCwgRElTUENfVlBfSzJHX0lSUVNUQVRVUyk7CisKKwlyZXR1cm4gZGlz cGNfdnBfaXJxX2Zyb21fcmF3KHN0YXQsIGh3X3ZpZGVvcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lk IGRpc3BjX2syZ192cF93cml0ZV9pcnFzdGF0dXMoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMs CisJCQkJCSB1MzIgaHdfdmlkZW9wb3J0LCBkaXNwY19pcnFfdCB2cHN0YXQpCit7CisJdTMyIHN0 YXQgPSBkaXNwY192cF9pcnFfdG9fcmF3KHZwc3RhdCwgaHdfdmlkZW9wb3J0KTsKKworCWRpc3Bj X3ZwX3dyaXRlKGRpc3BjLCBod192aWRlb3BvcnQsIERJU1BDX1ZQX0syR19JUlFTVEFUVVMsIHN0 YXQpOworfQorCitzdGF0aWMgZGlzcGNfaXJxX3QgZGlzcGNfazJnX3ZpZF9yZWFkX2lycXN0YXR1 cyhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkJCXUzMiBod19wbGFuZSkKK3sKKwl1 MzIgc3RhdCA9IGRpc3BjX3ZpZF9yZWFkKGRpc3BjLCBod19wbGFuZSwgRElTUENfVklEX0syR19J UlFTVEFUVVMpOworCisJcmV0dXJuIGRpc3BjX3ZpZF9pcnFfZnJvbV9yYXcoc3RhdCwgaHdfcGxh bmUpOworfQorCitzdGF0aWMgdm9pZCBkaXNwY19rMmdfdmlkX3dyaXRlX2lycXN0YXR1cyhzdHJ1 Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkJICB1MzIgaHdfcGxhbmUsIGRpc3BjX2lycV90 IHZpZHN0YXQpCit7CisJdTMyIHN0YXQgPSBkaXNwY192aWRfaXJxX3RvX3Jhdyh2aWRzdGF0LCBo d19wbGFuZSk7CisKKwlkaXNwY192aWRfd3JpdGUoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURf SzJHX0lSUVNUQVRVUywgc3RhdCk7Cit9CisKK3N0YXRpYyBkaXNwY19pcnFfdCBkaXNwY19rMmdf dnBfcmVhZF9pcnFlbmFibGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkJCSAgICAg ICB1MzIgaHdfdmlkZW9wb3J0KQoreworCXUzMiBzdGF0ID0gZGlzcGNfdnBfcmVhZChkaXNwYywg aHdfdmlkZW9wb3J0LCBESVNQQ19WUF9LMkdfSVJRRU5BQkxFKTsKKworCXJldHVybiBkaXNwY192 cF9pcnFfZnJvbV9yYXcoc3RhdCwgaHdfdmlkZW9wb3J0KTsKK30KKworc3RhdGljIHZvaWQgZGlz cGNfazJnX3ZwX3dyaXRlX2lycWVuYWJsZShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJ CQkJIHUzMiBod192aWRlb3BvcnQsIGRpc3BjX2lycV90IHZwc3RhdCkKK3sKKwl1MzIgc3RhdCA9 IGRpc3BjX3ZwX2lycV90b19yYXcodnBzdGF0LCBod192aWRlb3BvcnQpOworCisJZGlzcGNfdnBf d3JpdGUoZGlzcGMsIGh3X3ZpZGVvcG9ydCwgRElTUENfVlBfSzJHX0lSUUVOQUJMRSwgc3RhdCk7 Cit9CisKK3N0YXRpYyBkaXNwY19pcnFfdCBkaXNwY19rMmdfdmlkX3JlYWRfaXJxZW5hYmxlKHN0 cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkJdTMyIGh3X3BsYW5lKQoreworCXUzMiBz dGF0ID0gZGlzcGNfdmlkX3JlYWQoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURfSzJHX0lSUUVO QUJMRSk7CisKKwlyZXR1cm4gZGlzcGNfdmlkX2lycV9mcm9tX3JhdyhzdGF0LCBod19wbGFuZSk7 Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjX2syZ192aWRfd3JpdGVfaXJxZW5hYmxlKHN0cnVjdCBk aXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkgIHUzMiBod19wbGFuZSwgZGlzcGNfaXJxX3Qgdmlk c3RhdCkKK3sKKwl1MzIgc3RhdCA9IGRpc3BjX3ZpZF9pcnFfdG9fcmF3KHZpZHN0YXQsIGh3X3Bs YW5lKTsKKworCWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUsIERJU1BDX1ZJRF9LMkdf SVJRRU5BQkxFLCBzdGF0KTsKK30KKworc3RhdGljIHZvaWQgZGlzcGNfazJnX2NsZWFyX2lycXN0 YXR1cyhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkgICAgICBkaXNwY19pcnFfdCBt YXNrKQoreworCWRpc3BjX2syZ192cF93cml0ZV9pcnFzdGF0dXMoZGlzcGMsIDAsIG1hc2spOwor CWRpc3BjX2syZ192aWRfd3JpdGVfaXJxc3RhdHVzKGRpc3BjLCAwLCBtYXNrKTsKK30KKworc3Rh dGljCitkaXNwY19pcnFfdCBkaXNwY19rMmdfcmVhZF9hbmRfY2xlYXJfaXJxc3RhdHVzKHN0cnVj dCBkaXNwY19kZXZpY2UgKmRpc3BjKQoreworCWRpc3BjX2lycV90IHN0YXQgPSAwOworCisJLyog YWx3YXlzIGNsZWFyIHRoZSB0b3AgbGV2ZWwgaXJxc3RhdHVzICovCisJZGlzcGNfd3JpdGUoZGlz cGMsIERJU1BDX0lSUVNUQVRVUywKKwkJICAgIGRpc3BjX3JlYWQoZGlzcGMsIERJU1BDX0lSUVNU QVRVUykpOworCisJc3RhdCB8PSBkaXNwY19rMmdfdnBfcmVhZF9pcnFzdGF0dXMoZGlzcGMsIDAp OworCXN0YXQgfD0gZGlzcGNfazJnX3ZpZF9yZWFkX2lycXN0YXR1cyhkaXNwYywgMCk7CisKKwlk aXNwY19rMmdfY2xlYXJfaXJxc3RhdHVzKGRpc3BjLCBzdGF0KTsKKworCXJldHVybiBzdGF0Owor fQorCitzdGF0aWMgZGlzcGNfaXJxX3QgZGlzcGNfazJnX3JlYWRfaXJxZW5hYmxlKHN0cnVjdCBk aXNwY19kZXZpY2UgKmRpc3BjKQoreworCWRpc3BjX2lycV90IHN0YXQgPSAwOworCisJc3RhdCB8 PSBkaXNwY19rMmdfdnBfcmVhZF9pcnFlbmFibGUoZGlzcGMsIDApOworCXN0YXQgfD0gZGlzcGNf azJnX3ZpZF9yZWFkX2lycWVuYWJsZShkaXNwYywgMCk7CisKKwlyZXR1cm4gc3RhdDsKK30KKwor c3RhdGljIHZvaWQgZGlzcGNfazJnX3dyaXRlX2lycWVuYWJsZShzdHJ1Y3QgZGlzcGNfZGV2aWNl ICpkaXNwYywKKwkJCQkgICAgICBkaXNwY19pcnFfdCBtYXNrKQoreworCWRpc3BjX2lycV90IG9s ZF9tYXNrID0gZGlzcGNfazJnX3JlYWRfaXJxZW5hYmxlKGRpc3BjKTsKKworCS8qIGNsZWFyIHRo ZSBpcnFzdGF0dXMgZm9yIG5ld2x5IGVuYWJsZWQgaXJxcyAqLworCWRpc3BjX2syZ19jbGVhcl9p cnFzdGF0dXMoZGlzcGMsIChtYXNrIF4gb2xkX21hc2spICYgbWFzayk7CisKKwlkaXNwY19rMmdf dnBfd3JpdGVfaXJxZW5hYmxlKGRpc3BjLCAwLCBtYXNrKTsKKwlkaXNwY19rMmdfdmlkX3dyaXRl X2lycWVuYWJsZShkaXNwYywgMCwgbWFzayk7CisKKwlkaXNwY193cml0ZShkaXNwYywgRElTUENf SVJRRU5BQkxFX1NFVCwgKDEgPDwgMCkgfCAoMSA8PCA3KSk7CisKKwkvKiBmbHVzaCBwb3N0ZWQg d3JpdGUgKi8KKwlkaXNwY19rMmdfcmVhZF9pcnFlbmFibGUoZGlzcGMpOworfQorCitzdGF0aWMg ZGlzcGNfaXJxX3QgZGlzcGNfazNfdnBfcmVhZF9pcnFzdGF0dXMoc3RydWN0IGRpc3BjX2Rldmlj ZSAqZGlzcGMsCisJCQkJCSAgICAgIHUzMiBod192aWRlb3BvcnQpCit7CisJdTMyIHN0YXQgPSBk aXNwY19yZWFkKGRpc3BjLCBESVNQQ19WUF9JUlFTVEFUVVMoaHdfdmlkZW9wb3J0KSk7CisKKwly ZXR1cm4gZGlzcGNfdnBfaXJxX2Zyb21fcmF3KHN0YXQsIGh3X3ZpZGVvcG9ydCk7Cit9CisKK3N0 YXRpYyB2b2lkIGRpc3BjX2szX3ZwX3dyaXRlX2lycXN0YXR1cyhzdHJ1Y3QgZGlzcGNfZGV2aWNl ICpkaXNwYywKKwkJCQkJdTMyIGh3X3ZpZGVvcG9ydCwgZGlzcGNfaXJxX3QgdnBzdGF0KQorewor CXUzMiBzdGF0ID0gZGlzcGNfdnBfaXJxX3RvX3Jhdyh2cHN0YXQsIGh3X3ZpZGVvcG9ydCk7CisK KwlkaXNwY193cml0ZShkaXNwYywgRElTUENfVlBfSVJRU1RBVFVTKGh3X3ZpZGVvcG9ydCksIHN0 YXQpOworfQorCitzdGF0aWMgZGlzcGNfaXJxX3QgZGlzcGNfazNfdmlkX3JlYWRfaXJxc3RhdHVz KHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkgICAgICAgdTMyIGh3X3BsYW5lKQor eworCXUzMiBzdGF0ID0gZGlzcGNfcmVhZChkaXNwYywgRElTUENfVklEX0lSUVNUQVRVUyhod19w bGFuZSkpOworCisJcmV0dXJuIGRpc3BjX3ZpZF9pcnFfZnJvbV9yYXcoc3RhdCwgaHdfcGxhbmUp OworfQorCitzdGF0aWMgdm9pZCBkaXNwY19rM192aWRfd3JpdGVfaXJxc3RhdHVzKHN0cnVjdCBk aXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkgdTMyIGh3X3BsYW5lLCBkaXNwY19pcnFfdCB2aWRz dGF0KQoreworCXUzMiBzdGF0ID0gZGlzcGNfdmlkX2lycV90b19yYXcodmlkc3RhdCwgaHdfcGxh bmUpOworCisJZGlzcGNfd3JpdGUoZGlzcGMsIERJU1BDX1ZJRF9JUlFTVEFUVVMoaHdfcGxhbmUp LCBzdGF0KTsKK30KKworc3RhdGljIGRpc3BjX2lycV90IGRpc3BjX2szX3ZwX3JlYWRfaXJxZW5h YmxlKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkgICAgICB1MzIgaHdfdmlkZW9w b3J0KQoreworCXUzMiBzdGF0ID0gZGlzcGNfcmVhZChkaXNwYywgRElTUENfVlBfSVJRRU5BQkxF KGh3X3ZpZGVvcG9ydCkpOworCisJcmV0dXJuIGRpc3BjX3ZwX2lycV9mcm9tX3JhdyhzdGF0LCBo d192aWRlb3BvcnQpOworfQorCitzdGF0aWMgdm9pZCBkaXNwY19rM192cF93cml0ZV9pcnFlbmFi bGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkJCXUzMiBod192aWRlb3BvcnQsIGRp c3BjX2lycV90IHZwc3RhdCkKK3sKKwl1MzIgc3RhdCA9IGRpc3BjX3ZwX2lycV90b19yYXcodnBz dGF0LCBod192aWRlb3BvcnQpOworCisJZGlzcGNfd3JpdGUoZGlzcGMsIERJU1BDX1ZQX0lSUUVO QUJMRShod192aWRlb3BvcnQpLCBzdGF0KTsKK30KKworc3RhdGljIGRpc3BjX2lycV90IGRpc3Bj X2szX3ZpZF9yZWFkX2lycWVuYWJsZShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkJ ICAgICAgIHUzMiBod19wbGFuZSkKK3sKKwl1MzIgc3RhdCA9IGRpc3BjX3JlYWQoZGlzcGMsIERJ U1BDX1ZJRF9JUlFFTkFCTEUoaHdfcGxhbmUpKTsKKworCXJldHVybiBkaXNwY192aWRfaXJxX2Zy b21fcmF3KHN0YXQsIGh3X3BsYW5lKTsKK30KKworc3RhdGljIHZvaWQgZGlzcGNfazNfdmlkX3dy aXRlX2lycWVuYWJsZShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkJIHUzMiBod19w bGFuZSwgZGlzcGNfaXJxX3Qgdmlkc3RhdCkKK3sKKwl1MzIgc3RhdCA9IGRpc3BjX3ZpZF9pcnFf dG9fcmF3KHZpZHN0YXQsIGh3X3BsYW5lKTsKKworCWRpc3BjX3dyaXRlKGRpc3BjLCBESVNQQ19W SURfSVJRRU5BQkxFKGh3X3BsYW5lKSwgc3RhdCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjX2sz X2NsZWFyX2lycXN0YXR1cyhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkgICAgIGRp c3BjX2lycV90IGNsZWFybWFzaykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgdG9wX2NsZWFy ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBkaXNwYy0+ZmVhdC0+bnVtX3ZwczsgKytpKSB7CisJ CWlmIChjbGVhcm1hc2sgJiBEU1NfSVJRX1ZQX01BU0soaSkpIHsKKwkJCWRpc3BjX2szX3ZwX3dy aXRlX2lycXN0YXR1cyhkaXNwYywgaSwgY2xlYXJtYXNrKTsKKwkJCXRvcF9jbGVhciB8PSBCSVQo aSk7CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8IGRpc3BjLT5mZWF0LT5udW1fcGxhbmVzOyAr K2kpIHsKKwkJaWYgKGNsZWFybWFzayAmIERTU19JUlFfUExBTkVfTUFTSyhpKSkgeworCQkJZGlz cGNfazNfdmlkX3dyaXRlX2lycXN0YXR1cyhkaXNwYywgaSwgY2xlYXJtYXNrKTsKKwkJCXRvcF9j bGVhciB8PSBCSVQoNCArIGkpOworCQl9CisJfQorCWlmIChkaXNwYy0+ZmVhdC0+c3VicmV2ID09 IERJU1BDX0syRykKKwkJcmV0dXJuOworCisJZGlzcGNfd3JpdGUoZGlzcGMsIERJU1BDX0lSUVNU QVRVUywgdG9wX2NsZWFyKTsKKworCS8qIEZsdXNoIHBvc3RlZCB3cml0ZXMgKi8KKwlkaXNwY19y ZWFkKGRpc3BjLCBESVNQQ19JUlFTVEFUVVMpOworfQorCitzdGF0aWMKK2Rpc3BjX2lycV90IGRp c3BjX2szX3JlYWRfYW5kX2NsZWFyX2lycXN0YXR1cyhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNw YykKK3sKKwlkaXNwY19pcnFfdCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGludCBpOworCisJZm9y IChpID0gMDsgaSA8IGRpc3BjLT5mZWF0LT5udW1fdnBzOyArK2kpCisJCXN0YXR1cyB8PSBkaXNw Y19rM192cF9yZWFkX2lycXN0YXR1cyhkaXNwYywgaSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlz cGMtPmZlYXQtPm51bV9wbGFuZXM7ICsraSkKKwkJc3RhdHVzIHw9IGRpc3BjX2szX3ZpZF9yZWFk X2lycXN0YXR1cyhkaXNwYywgaSk7CisKKwlkaXNwY19rM19jbGVhcl9pcnFzdGF0dXMoZGlzcGMs IHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgZGlzcGNfaXJxX3QgZGlz cGNfazNfcmVhZF9pcnFlbmFibGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMpCit7CisJZGlz cGNfaXJxX3QgZW5hYmxlID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkg PCBkaXNwYy0+ZmVhdC0+bnVtX3ZwczsgKytpKQorCQllbmFibGUgfD0gZGlzcGNfazNfdnBfcmVh ZF9pcnFlbmFibGUoZGlzcGMsIGkpOworCisJZm9yIChpID0gMDsgaSA8IGRpc3BjLT5mZWF0LT5u dW1fcGxhbmVzOyArK2kpCisJCWVuYWJsZSB8PSBkaXNwY19rM192aWRfcmVhZF9pcnFlbmFibGUo ZGlzcGMsIGkpOworCisJcmV0dXJuIGVuYWJsZTsKK30KKworc3RhdGljIHZvaWQgZGlzcGNfazNf d3JpdGVfaXJxZW5hYmxlKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCSAgICAgZGlz cGNfaXJxX3QgbWFzaykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgbWFpbl9lbmFibGUgPSAw LCBtYWluX2Rpc2FibGUgPSAwOworCWRpc3BjX2lycV90IG9sZF9tYXNrOworCisJb2xkX21hc2sg PSBkaXNwY19rM19yZWFkX2lycWVuYWJsZShkaXNwYyk7CisKKwkvKiBjbGVhciB0aGUgaXJxc3Rh dHVzIGZvciBuZXdseSBlbmFibGVkIGlycXMgKi8KKwlkaXNwY19rM19jbGVhcl9pcnFzdGF0dXMo ZGlzcGMsIChvbGRfbWFzayBeIG1hc2spICYgbWFzayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlz cGMtPmZlYXQtPm51bV92cHM7ICsraSkgeworCQlkaXNwY19rM192cF93cml0ZV9pcnFlbmFibGUo ZGlzcGMsIGksIG1hc2spOworCQlpZiAobWFzayAmIERTU19JUlFfVlBfTUFTSyhpKSkKKwkJCW1h aW5fZW5hYmxlIHw9IEJJVChpKTsJCS8qIFZQIElSUSAqLworCQllbHNlCisJCQltYWluX2Rpc2Fi bGUgfD0gQklUKGkpOwkJLyogVlAgSVJRICovCisJfQorCisJZm9yIChpID0gMDsgaSA8IGRpc3Bj LT5mZWF0LT5udW1fcGxhbmVzOyArK2kpIHsKKwkJZGlzcGNfazNfdmlkX3dyaXRlX2lycWVuYWJs ZShkaXNwYywgaSwgbWFzayk7CisJCWlmIChtYXNrICYgRFNTX0lSUV9QTEFORV9NQVNLKGkpKQor CQkJbWFpbl9lbmFibGUgfD0gQklUKGkgKyA0KTsJLyogVklEIElSUSAqLworCQllbHNlCisJCQlt YWluX2Rpc2FibGUgfD0gQklUKGkgKyA0KTsJLyogVklEIElSUSAqLworCX0KKworCWlmIChtYWlu X2VuYWJsZSkKKwkJZGlzcGNfd3JpdGUoZGlzcGMsIERJU1BDX0lSUUVOQUJMRV9TRVQsIG1haW5f ZW5hYmxlKTsKKworCWlmIChtYWluX2Rpc2FibGUpCisJCWRpc3BjX3dyaXRlKGRpc3BjLCBESVNQ Q19JUlFFTkFCTEVfQ0xSLCBtYWluX2Rpc2FibGUpOworCisJLyogRmx1c2ggcG9zdGVkIHdyaXRl cyAqLworCWRpc3BjX3JlYWQoZGlzcGMsIERJU1BDX0lSUUVOQUJMRV9TRVQpOworfQorCitkaXNw Y19pcnFfdCBkaXNwY19yZWFkX2FuZF9jbGVhcl9pcnFzdGF0dXMoc3RydWN0IGRpc3BjX2Rldmlj ZSAqZGlzcGMpCit7CisJc3dpdGNoIChkaXNwYy0+ZmVhdC0+c3VicmV2KSB7CisJY2FzZSBESVNQ Q19LMkc6CisJCXJldHVybiBkaXNwY19rMmdfcmVhZF9hbmRfY2xlYXJfaXJxc3RhdHVzKGRpc3Bj KTsKKwljYXNlIERJU1BDX0FNNjVYOgorCWNhc2UgRElTUENfSjcyMUU6CisJCXJldHVybiBkaXNw Y19rM19yZWFkX2FuZF9jbGVhcl9pcnFzdGF0dXMoZGlzcGMpOworCWRlZmF1bHQ6CisJCVdBUk5f T04oMSk7CisJCXJldHVybiAwOworCX0KK30KKwordm9pZCBkaXNwY193cml0ZV9pcnFlbmFibGUo c3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIGRpc3BjX2lycV90IG1hc2spCit7CisJc3dpdGNo IChkaXNwYy0+ZmVhdC0+c3VicmV2KSB7CisJY2FzZSBESVNQQ19LMkc6CisJCWRpc3BjX2syZ193 cml0ZV9pcnFlbmFibGUoZGlzcGMsIG1hc2spOworCQlicmVhazsKKwljYXNlIERJU1BDX0FNNjVY OgorCWNhc2UgRElTUENfSjcyMUU6CisJCWRpc3BjX2szX3dyaXRlX2lycWVuYWJsZShkaXNwYywg bWFzayk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCX0K K30KKworZW51bSBkaXNwY19vbGRpX21vZGVfcmVnX3ZhbCB7IFNQV0dfMTggPSAwLCBKRUlEQV8y NCA9IDEsIFNQV0dfMjQgPSAyIH07CisKK3N0cnVjdCBkaXNwY19idXNfZm9ybWF0IHsKKwl1MzIg YnVzX2ZtdDsKKwl1MzIgZGF0YV93aWR0aDsKKwlib29sIGlzX29sZGlfZm10OworCWVudW0gZGlz cGNfb2xkaV9tb2RlX3JlZ192YWwgb2xkaV9tb2RlX3JlZ192YWw7Cit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGRpc3BjX2J1c19mb3JtYXQgZGlzcGNfYnVzX2Zvcm1hdHNbXSA9IHsKKwl7IE1F RElBX0JVU19GTVRfUkdCNDQ0XzFYMTIsCQkxMiwgZmFsc2UsIDAgfSwKKwl7IE1FRElBX0JVU19G TVRfUkdCNTY1XzFYMTYsCQkxNiwgZmFsc2UsIDAgfSwKKwl7IE1FRElBX0JVU19GTVRfUkdCNjY2 XzFYMTgsCQkxOCwgZmFsc2UsIDAgfSwKKwl7IE1FRElBX0JVU19GTVRfUkdCODg4XzFYMjQsCQky NCwgZmFsc2UsIDAgfSwKKwl7IE1FRElBX0JVU19GTVRfUkdCMTAxMDEwXzFYMzAsCQkzMCwgZmFs c2UsIDAgfSwKKwl7IE1FRElBX0JVU19GTVRfUkdCMTIxMjEyXzFYMzYsCQkzNiwgZmFsc2UsIDAg fSwKKwl7IE1FRElBX0JVU19GTVRfUkdCNjY2XzFYN1gzX1NQV0csCTE4LCB0cnVlLCBTUFdHXzE4 IH0sCisJeyBNRURJQV9CVVNfRk1UX1JHQjg4OF8xWDdYNF9TUFdHLAkyNCwgdHJ1ZSwgU1BXR18y NCB9LAorCXsgTUVESUFfQlVTX0ZNVF9SR0I4ODhfMVg3WDRfSkVJREEsCTI0LCB0cnVlLCBKRUlE QV8yNCB9LAorfTsKKworc3RhdGljIGNvbnN0CitzdHJ1Y3QgZGlzcGNfYnVzX2Zvcm1hdCAqZGlz cGNfdnBfZmluZF9idXNfZm10KHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkgICAg ICAgdTMyIGh3X3ZpZGVvcG9ydCwKKwkJCQkJICAgICAgIHUzMiBidXNfZm10LCB1MzIgYnVzX2Zs YWdzKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo ZGlzcGNfYnVzX2Zvcm1hdHMpOyArK2kpIHsKKwkJaWYgKGRpc3BjX2J1c19mb3JtYXRzW2ldLmJ1 c19mbXQgPT0gYnVzX2ZtdCkKKwkJCXJldHVybiAmZGlzcGNfYnVzX2Zvcm1hdHNbaV07CisJfQor CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBkaXNwY192cF9idXNfY2hlY2soc3RydWN0IGRpc3Bj X2RldmljZSAqZGlzcGMsIHUzMiBod192aWRlb3BvcnQsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qg ZHJtX2NydGNfc3RhdGUgKnN0YXRlKQoreworCWNvbnN0IHN0cnVjdCB0aWRzc19jcnRjX3N0YXRl ICp0c3RhdGUgPSB0b190aWRzc19jcnRjX3N0YXRlKHN0YXRlKTsKKwljb25zdCBzdHJ1Y3QgZGlz cGNfYnVzX2Zvcm1hdCAqZm10OworCisJZm10ID0gZGlzcGNfdnBfZmluZF9idXNfZm10KGRpc3Bj LCBod192aWRlb3BvcnQsIHRzdGF0ZS0+YnVzX2Zvcm1hdCwKKwkJCQkgICAgdHN0YXRlLT5idXNf ZmxhZ3MpOworCWlmICghZm10KSB7CisJCWRldl9kYmcoZGlzcGMtPmRldiwgIiVzOiBVbnN1cHBv cnRlZCBidXMgZm9ybWF0OiAldVxuIiwKKwkJCV9fZnVuY19fLCB0c3RhdGUtPmJ1c19mb3JtYXQp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZGlzcGMtPmZlYXQtPnZwX2J1c190eXBl W2h3X3ZpZGVvcG9ydF0gIT0gRElTUENfVlBfT0xESSAmJgorCSAgICBmbXQtPmlzX29sZGlfZm10 KSB7CisJCWRldl9kYmcoZGlzcGMtPmRldiwgIiVzOiAlcyBpcyBub3QgT0xESS1wb3J0XG4iLAor CQkJX19mdW5jX18sIGRpc3BjLT5mZWF0LT52cF9uYW1lW2h3X3ZpZGVvcG9ydF0pOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGlzcGNfb2xk aV90eF9wb3dlcihzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywgYm9vbCBwb3dlcikKK3sKKwl1 MzIgdmFsID0gcG93ZXIgPyAwIDogT0xESV9QV1JETl9UWDsKKworCWlmIChXQVJOX09OKCFkaXNw Yy0+b2xkaV9pb19jdHJsKSkKKwkJcmV0dXJuOworCisJcmVnbWFwX3VwZGF0ZV9iaXRzKGRpc3Bj LT5vbGRpX2lvX2N0cmwsIE9MRElfREFUMF9JT19DVFJMLAorCQkJICAgT0xESV9QV1JETl9UWCwg dmFsKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMoZGlzcGMtPm9sZGlfaW9fY3RybCwgT0xESV9EQVQx X0lPX0NUUkwsCisJCQkgICBPTERJX1BXUkROX1RYLCB2YWwpOworCXJlZ21hcF91cGRhdGVfYml0 cyhkaXNwYy0+b2xkaV9pb19jdHJsLCBPTERJX0RBVDJfSU9fQ1RSTCwKKwkJCSAgIE9MRElfUFdS RE5fVFgsIHZhbCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGRpc3BjLT5vbGRpX2lvX2N0cmwsIE9M RElfREFUM19JT19DVFJMLAorCQkJICAgT0xESV9QV1JETl9UWCwgdmFsKTsKKwlyZWdtYXBfdXBk YXRlX2JpdHMoZGlzcGMtPm9sZGlfaW9fY3RybCwgT0xESV9DTEtfSU9fQ1RSTCwKKwkJCSAgIE9M RElfUFdSRE5fVFgsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjX3NldF9udW1fZGF0YWxp bmVzKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCSAgICB1MzIgaHdfdmlkZW9wb3J0 LCBpbnQgbnVtX2xpbmVzKQoreworCWludCB2OworCisJc3dpdGNoIChudW1fbGluZXMpIHsKKwlj YXNlIDEyOgorCQl2ID0gMDsgYnJlYWs7CisJY2FzZSAxNjoKKwkJdiA9IDE7IGJyZWFrOworCWNh c2UgMTg6CisJCXYgPSAyOyBicmVhazsKKwljYXNlIDI0OgorCQl2ID0gMzsgYnJlYWs7CisJY2Fz ZSAzMDoKKwkJdiA9IDQ7IGJyZWFrOworCWNhc2UgMzY6CisJCXYgPSA1OyBicmVhazsKKwlkZWZh dWx0OgorCQlXQVJOX09OKDEpOworCQl2ID0gMzsKKwl9CisKKwlWUF9SRUdfRkxEX01PRChkaXNw YywgaHdfdmlkZW9wb3J0LCBESVNQQ19WUF9DT05UUk9MLCB2LCAxMCwgOCk7Cit9CisKK3N0YXRp YyB2b2lkIGRpc3BjX2VuYWJsZV9vbGRpKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIg aHdfdmlkZW9wb3J0LAorCQkJICAgICAgY29uc3Qgc3RydWN0IGRpc3BjX2J1c19mb3JtYXQgKmZt dCkKK3sKKwl1MzIgb2xkaV9jZmcgPSAwOworCXUzMiBvbGRpX3Jlc2V0X2JpdCA9IEJJVCg1ICsg aHdfdmlkZW9wb3J0KTsKKwlpbnQgY291bnQgPSAwOworCisJLyoKKwkgKiBGb3IgdGhlIG1vbWVu dCBEVUFMTU9ERVNZTkMsIE1BU1RFUlNMQVZFLCBNT0RFLCBhbmQgU1JDCisJICogYml0cyBvZiBE SVNQQ19WUF9EU1NfT0xESV9DRkcgYXJlIHNldCBzdGF0aWNhbGx5IHRvIDAuCisJICovCisKKwlp ZiAoZm10LT5kYXRhX3dpZHRoID09IDI0KQorCQlvbGRpX2NmZyB8PSBCSVQoOCk7IC8qIE1TQiAq LworCWVsc2UgaWYgKGZtdC0+ZGF0YV93aWR0aCAhPSAxOCkKKwkJZGV2X3dhcm4oZGlzcGMtPmRl diwgIiVzOiAlZCBwb3J0IHdpZHRoIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkgX19mdW5jX18sIGZt dC0+ZGF0YV93aWR0aCk7CisKKwlvbGRpX2NmZyB8PSBCSVQoNyk7IC8qIERFUE9MICovCisKKwlv bGRpX2NmZyA9IEZMRF9NT0Qob2xkaV9jZmcsIGZtdC0+b2xkaV9tb2RlX3JlZ192YWwsIDMsIDEp OworCisJb2xkaV9jZmcgfD0gQklUKDEyKTsgLyogU09GVFJTVCAqLworCisJb2xkaV9jZmcgfD0g QklUKDApOyAvKiBFTkFCTEUgKi8KKworCWRpc3BjX3ZwX3dyaXRlKGRpc3BjLCBod192aWRlb3Bv cnQsIERJU1BDX1ZQX0RTU19PTERJX0NGRywgb2xkaV9jZmcpOworCisJd2hpbGUgKCEob2xkaV9y ZXNldF9iaXQgJiBkaXNwY19yZWFkKGRpc3BjLCBEU1NfU1lTU1RBVFVTKSkgJiYKKwkgICAgICAg Y291bnQgPCAxMDAwMCkKKwkJY291bnQrKzsKKworCWlmICghKG9sZGlfcmVzZXRfYml0ICYgZGlz cGNfcmVhZChkaXNwYywgRFNTX1NZU1NUQVRVUykpKQorCQlkZXZfd2FybihkaXNwYy0+ZGV2LCAi JXM6IHRpbWVvdXQgd2FpdGluZyBPTERJIHJlc2V0IGRvbmVcbiIsCisJCQkgX19mdW5jX18pOwor fQorCit2b2lkIGRpc3BjX3ZwX3ByZXBhcmUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUz MiBod192aWRlb3BvcnQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3Rh dGUpCit7CisJY29uc3Qgc3RydWN0IHRpZHNzX2NydGNfc3RhdGUgKnRzdGF0ZSA9IHRvX3RpZHNz X2NydGNfc3RhdGUoc3RhdGUpOworCWNvbnN0IHN0cnVjdCBkaXNwY19idXNfZm9ybWF0ICpmbXQ7 CisKKwlmbXQgPSBkaXNwY192cF9maW5kX2J1c19mbXQoZGlzcGMsIGh3X3ZpZGVvcG9ydCwgdHN0 YXRlLT5idXNfZm9ybWF0LAorCQkJCSAgICB0c3RhdGUtPmJ1c19mbGFncyk7CisKKwlpZiAoV0FS Tl9PTighZm10KSkKKwkJcmV0dXJuOworCisJaWYgKGRpc3BjLT5mZWF0LT52cF9idXNfdHlwZVto d192aWRlb3BvcnRdID09IERJU1BDX1ZQX09MREkpIHsKKwkJZGlzcGNfb2xkaV90eF9wb3dlcihk aXNwYywgdHJ1ZSk7CisKKwkJZGlzcGNfZW5hYmxlX29sZGkoZGlzcGMsIGh3X3ZpZGVvcG9ydCwg Zm10KTsKKwl9Cit9CisKK3ZvaWQgZGlzcGNfdnBfZW5hYmxlKHN0cnVjdCBkaXNwY19kZXZpY2Ug KmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0LAorCQkgICAgIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqc3RhdGUpCit7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAm c3RhdGUtPmFkanVzdGVkX21vZGU7CisJY29uc3Qgc3RydWN0IHRpZHNzX2NydGNfc3RhdGUgKnRz dGF0ZSA9IHRvX3RpZHNzX2NydGNfc3RhdGUoc3RhdGUpOworCWJvb2wgYWxpZ24sIG9ub2ZmLCBy ZiwgaWVvLCBpcGMsIGlocywgaXZzOworCWNvbnN0IHN0cnVjdCBkaXNwY19idXNfZm9ybWF0ICpm bXQ7CisJdTMyIGhzdywgaGZwLCBoYnAsIHZzdywgdmZwLCB2YnA7CisKKwlmbXQgPSBkaXNwY192 cF9maW5kX2J1c19mbXQoZGlzcGMsIGh3X3ZpZGVvcG9ydCwgdHN0YXRlLT5idXNfZm9ybWF0LAor CQkJCSAgICB0c3RhdGUtPmJ1c19mbGFncyk7CisKKwlpZiAoV0FSTl9PTighZm10KSkKKwkJcmV0 dXJuOworCisJZGlzcGNfc2V0X251bV9kYXRhbGluZXMoZGlzcGMsIGh3X3ZpZGVvcG9ydCwgZm10 LT5kYXRhX3dpZHRoKTsKKworCWhmcCA9IG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3Bs YXk7CisJaHN3ID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJaGJwID0g bW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kOworCisJdmZwID0gbW9kZS0+dnN5bmNfc3Rh cnQgLSBtb2RlLT52ZGlzcGxheTsKKwl2c3cgPSBtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3lu Y19zdGFydDsKKwl2YnAgPSBtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQ7CisKKwlkaXNw Y192cF93cml0ZShkaXNwYywgaHdfdmlkZW9wb3J0LCBESVNQQ19WUF9USU1JTkdfSCwKKwkJICAg ICAgIEZMRF9WQUwoaHN3IC0gMSwgNywgMCkgfAorCQkgICAgICAgRkxEX1ZBTChoZnAgLSAxLCAx OSwgOCkgfAorCQkgICAgICAgRkxEX1ZBTChoYnAgLSAxLCAzMSwgMjApKTsKKworCWRpc3BjX3Zw X3dyaXRlKGRpc3BjLCBod192aWRlb3BvcnQsIERJU1BDX1ZQX1RJTUlOR19WLAorCQkgICAgICAg RkxEX1ZBTCh2c3cgLSAxLCA3LCAwKSB8CisJCSAgICAgICBGTERfVkFMKHZmcCwgMTksIDgpIHwK KwkJICAgICAgIEZMRF9WQUwodmJwLCAzMSwgMjApKTsKKworCWl2cyA9ICEhKG1vZGUtPmZsYWdz ICYgRFJNX01PREVfRkxBR19OVlNZTkMpOworCisJaWhzID0gISEobW9kZS0+ZmxhZ3MgJiBEUk1f TU9ERV9GTEFHX05IU1lOQyk7CisKKwlpZW8gPSAhISh0c3RhdGUtPmJ1c19mbGFncyAmIERSTV9C VVNfRkxBR19ERV9MT1cpOworCisJaXBjID0gISEodHN0YXRlLT5idXNfZmxhZ3MgJiBEUk1fQlVT X0ZMQUdfUElYREFUQV9ORUdFREdFKTsKKworCS8qIGFsd2F5cyB1c2UgdGhlICdyZicgc2V0dGlu ZyAqLworCW9ub2ZmID0gdHJ1ZTsKKworCXJmID0gISEodHN0YXRlLT5idXNfZmxhZ3MgJiBEUk1f QlVTX0ZMQUdfU1lOQ19QT1NFREdFKTsKKworCS8qIGFsd2F5cyB1c2UgYWxpZ25lZCBzeW5jcyAq LworCWFsaWduID0gdHJ1ZTsKKworCS8qIGFsd2F5cyB1c2UgREVfSElHSCBmb3IgT0xESSAqLwor CWlmIChkaXNwYy0+ZmVhdC0+dnBfYnVzX3R5cGVbaHdfdmlkZW9wb3J0XSA9PSBESVNQQ19WUF9P TERJKQorCQlpZW8gPSBmYWxzZTsKKworCWRpc3BjX3ZwX3dyaXRlKGRpc3BjLCBod192aWRlb3Bv cnQsIERJU1BDX1ZQX1BPTF9GUkVRLAorCQkgICAgICAgRkxEX1ZBTChhbGlnbiwgMTgsIDE4KSB8 CisJCSAgICAgICBGTERfVkFMKG9ub2ZmLCAxNywgMTcpIHwKKwkJICAgICAgIEZMRF9WQUwocmYs IDE2LCAxNikgfAorCQkgICAgICAgRkxEX1ZBTChpZW8sIDE1LCAxNSkgfAorCQkgICAgICAgRkxE X1ZBTChpcGMsIDE0LCAxNCkgfAorCQkgICAgICAgRkxEX1ZBTChpaHMsIDEzLCAxMykgfAorCQkg ICAgICAgRkxEX1ZBTChpdnMsIDEyLCAxMikpOworCisJZGlzcGNfdnBfd3JpdGUoZGlzcGMsIGh3 X3ZpZGVvcG9ydCwgRElTUENfVlBfU0laRV9TQ1JFRU4sCisJCSAgICAgICBGTERfVkFMKG1vZGUt PmhkaXNwbGF5IC0gMSwgMTEsIDApIHwKKwkJICAgICAgIEZMRF9WQUwobW9kZS0+dmRpc3BsYXkg LSAxLCAyNywgMTYpKTsKKworCVZQX1JFR19GTERfTU9EKGRpc3BjLCBod192aWRlb3BvcnQsIERJ U1BDX1ZQX0NPTlRST0wsIDEsIDAsIDApOworfQorCit2b2lkIGRpc3BjX3ZwX2Rpc2FibGUoc3Ry dWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBod192aWRlb3BvcnQpCit7CisJVlBfUkVHX0ZM RF9NT0QoZGlzcGMsIGh3X3ZpZGVvcG9ydCwgRElTUENfVlBfQ09OVFJPTCwgMCwgMCwgMCk7Cit9 CisKK3ZvaWQgZGlzcGNfdnBfdW5wcmVwYXJlKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1 MzIgaHdfdmlkZW9wb3J0KQoreworCWlmIChkaXNwYy0+ZmVhdC0+dnBfYnVzX3R5cGVbaHdfdmlk ZW9wb3J0XSA9PSBESVNQQ19WUF9PTERJKSB7CisJCWRpc3BjX3ZwX3dyaXRlKGRpc3BjLCBod192 aWRlb3BvcnQsIERJU1BDX1ZQX0RTU19PTERJX0NGRywgMCk7CisKKwkJZGlzcGNfb2xkaV90eF9w b3dlcihkaXNwYywgZmFsc2UpOworCX0KK30KKworYm9vbCBkaXNwY192cF9nb19idXN5KHN0cnVj dCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0KQoreworCXJldHVybiBWUF9S RUdfR0VUKGRpc3BjLCBod192aWRlb3BvcnQsIERJU1BDX1ZQX0NPTlRST0wsIDUsIDUpOworfQor Cit2b2lkIGRpc3BjX3ZwX2dvKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfdmlk ZW9wb3J0KQoreworCVdBUk5fT04oVlBfUkVHX0dFVChkaXNwYywgaHdfdmlkZW9wb3J0LCBESVNQ Q19WUF9DT05UUk9MLCA1LCA1KSk7CisJVlBfUkVHX0ZMRF9NT0QoZGlzcGMsIGh3X3ZpZGVvcG9y dCwgRElTUENfVlBfQ09OVFJPTCwgMSwgNSwgNSk7Cit9CisKK2VudW0gYzhfdG9fYzEyX21vZGUg eyBDOF9UT19DMTJfUkVQTElDQVRFLCBDOF9UT19DMTJfTUFYLCBDOF9UT19DMTJfTUlOIH07CisK K3N0YXRpYyB1MTYgYzhfdG9fYzEyKHU4IGM4LCBlbnVtIGM4X3RvX2MxMl9tb2RlIG1vZGUpCit7 CisJdTE2IGMxMjsKKworCWMxMiA9IGM4IDw8IDQ7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNl IEM4X1RPX0MxMl9SRVBMSUNBVEU6CisJCS8qIENvcHkgYzggNCBNU0IgdG8gNCBMU0IgZm9yIGZ1 bGwgc2NhbGUgYzEyICovCisJCWMxMiB8PSBjOCA+PiA0OworCQlicmVhazsKKwljYXNlIEM4X1RP X0MxMl9NQVg6CisJCWMxMiB8PSAweEY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSBDOF9U T19DMTJfTUlOOgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gYzEyOworfQorCitzdGF0aWMgdTY0 IGFyZ2I4ODg4X3RvX2FyZ2IxMjEyMTIxMih1MzIgYXJnYjg4ODgsIGVudW0gYzhfdG9fYzEyX21v ZGUgbSkKK3sKKwl1OCBhLCByLCBnLCBiOworCXU2NCB2OworCisJYSA9IChhcmdiODg4OCA+PiAy NCkgJiAweGZmOworCXIgPSAoYXJnYjg4ODggPj4gMTYpICYgMHhmZjsKKwlnID0gKGFyZ2I4ODg4 ID4+IDgpICYgMHhmZjsKKwliID0gKGFyZ2I4ODg4ID4+IDApICYgMHhmZjsKKworCXYgPSAoKHU2 NCljOF90b19jMTIoYSwgbSkgPDwgMzYpIHwgKCh1NjQpYzhfdG9fYzEyKHIsIG0pIDw8IDI0KSB8 CisJCSgodTY0KWM4X3RvX2MxMihnLCBtKSA8PCAxMikgfCAodTY0KWM4X3RvX2MxMihiLCBtKTsK KworCXJldHVybiB2OworfQorCitzdGF0aWMgdm9pZCBkaXNwY192cF9zZXRfZGVmYXVsdF9jb2xv cihzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkgICAgICAgdTMyIGh3X3ZpZGVvcG9y dCwgdTMyIGRlZmF1bHRfY29sb3IpCit7CisJdTY0IHY7CisKKwl2ID0gYXJnYjg4ODhfdG9fYXJn YjEyMTIxMjEyKGRlZmF1bHRfY29sb3IsIEM4X1RPX0MxMl9SRVBMSUNBVEUpOworCisJZGlzcGNf b3ZyX3dyaXRlKGRpc3BjLCBod192aWRlb3BvcnQsCisJCQlESVNQQ19PVlJfREVGQVVMVF9DT0xP UiwgdiAmIDB4ZmZmZmZmZmYpOworCWRpc3BjX292cl93cml0ZShkaXNwYywgaHdfdmlkZW9wb3J0 LAorCQkJRElTUENfT1ZSX0RFRkFVTFRfQ09MT1IyLCAodiA+PiAzMikgJiAweGZmZmYpOworfQor CitlbnVtIGRybV9tb2RlX3N0YXR1cyBkaXNwY192cF9tb2RlX3ZhbGlkKHN0cnVjdCBkaXNwY19k ZXZpY2UgKmRpc3BjLAorCQkJCQkgdTMyIGh3X3ZpZGVvcG9ydCwKKwkJCQkJIGNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXUzMiBoc3csIGhmcCwgaGJwLCB2c3csIHZm cCwgdmJwOworCWVudW0gZGlzcGNfdnBfYnVzX3R5cGUgYnVzX3R5cGU7CisJaW50IG1heF9wY2xr OworCisJYnVzX3R5cGUgPSBkaXNwYy0+ZmVhdC0+dnBfYnVzX3R5cGVbaHdfdmlkZW9wb3J0XTsK KworCW1heF9wY2xrID0gZGlzcGMtPmZlYXQtPm1heF9wY2xrX2tIeltidXNfdHlwZV07CisKKwlp ZiAoV0FSTl9PTihtYXhfcGNsayA9PSAwKSkKKwkJcmV0dXJuIE1PREVfQkFEOworCisJaWYgKG1v ZGUtPmNsb2NrIDwgZGlzcGMtPmZlYXQtPm1pbl9wY2xrX2tIeikKKwkJcmV0dXJuIE1PREVfQ0xP Q0tfTE9XOworCisJaWYgKG1vZGUtPmNsb2NrID4gbWF4X3BjbGspCisJCXJldHVybiBNT0RFX0NM T0NLX0hJR0g7CisKKwlpZiAobW9kZS0+aGRpc3BsYXkgPiA0MDk2KQorCQlyZXR1cm4gTU9ERV9C QUQ7CisKKwlpZiAobW9kZS0+dmRpc3BsYXkgPiA0MDk2KQorCQlyZXR1cm4gTU9ERV9CQUQ7CisK KwkvKiBUT0RPOiBhZGQgaW50ZXJsYWNlIHN1cHBvcnQgKi8KKwlpZiAobW9kZS0+ZmxhZ3MgJiBE Uk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKKwkJcmV0dXJuIE1PREVfTk9fSU5URVJMQUNFOworCisJ LyoKKwkgKiBFbmZvcmNlIHRoZSBvdXRwdXQgd2lkdGggaXMgZGl2aXNpYmxlIGJ5IDIuIEFjdHVh bGx5IHRoaXMKKwkgKiBpcyBvbmx5IG5lZWRlZCBpbiBmb2xsb3dpbmcgY2FzZXM6CisJICogLSBZ VVYgb3V0cHV0IHNlbGVjdGVkIChCVDY1NiwgQlQxMTIwKQorCSAqIC0gRGl0aGVyaW5nIGVuYWJs ZWQKKwkgKiAtIFRETSB3aXRoIFRETUN5Y2xlRm9ybWF0ID09IDMKKwkgKiBCdXQgZm9yIHNpbXBs aWNpdHkgd2UgZW5mb3JjZSB0aGF0IGFsd2F5cy4KKwkgKi8KKwlpZiAoKG1vZGUtPmhkaXNwbGF5 ICUgMikgIT0gMCkKKwkJcmV0dXJuIE1PREVfQkFEX0hWQUxVRTsKKworCWhmcCA9IG1vZGUtPmhz eW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3BsYXk7CisJaHN3ID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9k ZS0+aHN5bmNfc3RhcnQ7CisJaGJwID0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kOwor CisJdmZwID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsKKwl2c3cgPSBtb2Rl LT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydDsKKwl2YnAgPSBtb2RlLT52dG90YWwgLSBt b2RlLT52c3luY19lbmQ7CisKKwlpZiAoaHN3IDwgMSB8fCBoc3cgPiAyNTYgfHwKKwkgICAgaGZw IDwgMSB8fCBoZnAgPiA0MDk2IHx8CisJICAgIGhicCA8IDEgfHwgaGJwID4gNDA5NikKKwkJcmV0 dXJuIE1PREVfQkFEX0hWQUxVRTsKKworCWlmICh2c3cgPCAxIHx8IHZzdyA+IDI1NiB8fAorCSAg ICB2ZnAgPiA0MDk1IHx8IHZicCA+IDQwOTUpCisJCXJldHVybiBNT0RFX0JBRF9WVkFMVUU7CisK KwlpZiAoZGlzcGMtPm1lbW9yeV9iYW5kd2lkdGhfbGltaXQpIHsKKwkJY29uc3QgdW5zaWduZWQg aW50IGJwcCA9IDQ7CisJCXU2NCBiYW5kd2lkdGg7CisKKwkJYmFuZHdpZHRoID0gMTAwMCAqIG1v ZGUtPmNsb2NrOworCQliYW5kd2lkdGggPSBiYW5kd2lkdGggKiBtb2RlLT5oZGlzcGxheSAqIG1v ZGUtPnZkaXNwbGF5ICogYnBwOworCQliYW5kd2lkdGggPSBkaXZfdTY0KGJhbmR3aWR0aCwgbW9k ZS0+aHRvdGFsICogbW9kZS0+dnRvdGFsKTsKKworCQlpZiAoZGlzcGMtPm1lbW9yeV9iYW5kd2lk dGhfbGltaXQgPCBiYW5kd2lkdGgpCisJCQlyZXR1cm4gTU9ERV9CQUQ7CisJfQorCisJcmV0dXJu IE1PREVfT0s7Cit9CisKK2ludCBkaXNwY192cF9lbmFibGVfY2xrKHN0cnVjdCBkaXNwY19kZXZp Y2UgKmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0KQoreworCWludCByZXQgPSBjbGtfcHJlcGFyZV9l bmFibGUoZGlzcGMtPnZwX2Nsa1tod192aWRlb3BvcnRdKTsKKworCWlmIChyZXQpCisJCWRldl9l cnIoZGlzcGMtPmRldiwgIiVzOiBlbmFibGluZyBjbGsgZmFpbGVkOiAlZFxuIiwgX19mdW5jX18s CisJCQlyZXQpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBkaXNwY192cF9kaXNhYmxlX2Ns ayhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywgdTMyIGh3X3ZpZGVvcG9ydCkKK3sKKwljbGtf ZGlzYWJsZV91bnByZXBhcmUoZGlzcGMtPnZwX2Nsa1tod192aWRlb3BvcnRdKTsKK30KKworLyoK KyAqIENhbGN1bGF0ZSB0aGUgcGVyY2VudGFnZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHJlcXVl c3RlZCBwaXhlbCBjbG9jayByYXRlCisgKiBhbmQgdGhlIGVmZmVjdGl2ZSByYXRlIHJlc3VsdGlu ZyBmcm9tIGNhbGN1bGF0aW5nIHRoZSBjbG9jayBkaXZpZGVyIHZhbHVlLgorICovCitzdGF0aWMg dW5zaWduZWQgaW50IGRpc3BjX3BjbGtfZGlmZih1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJICAg IHVuc2lnbmVkIGxvbmcgcmVhbF9yYXRlKQoreworCWludCByID0gcmF0ZSAvIDEwMCwgcnIgPSBy ZWFsX3JhdGUgLyAxMDA7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGludCkoYWJzKCgocnIgLSByKSAq IDEwMCkgLyByKSk7Cit9CisKK2ludCBkaXNwY192cF9zZXRfY2xrX3JhdGUoc3RydWN0IGRpc3Bj X2RldmljZSAqZGlzcGMsIHUzMiBod192aWRlb3BvcnQsCisJCQkgIHVuc2lnbmVkIGxvbmcgcmF0 ZSkKK3sKKwlpbnQgcjsKKwl1bnNpZ25lZCBsb25nIG5ld19yYXRlOworCisJciA9IGNsa19zZXRf cmF0ZShkaXNwYy0+dnBfY2xrW2h3X3ZpZGVvcG9ydF0sIHJhdGUpOworCWlmIChyKSB7CisJCWRl dl9lcnIoZGlzcGMtPmRldiwgInZwJWQ6IGZhaWxlZCB0byBzZXQgY2xrIHJhdGUgdG8gJWx1XG4i LAorCQkJaHdfdmlkZW9wb3J0LCByYXRlKTsKKwkJcmV0dXJuIHI7CisJfQorCisJbmV3X3JhdGUg PSBjbGtfZ2V0X3JhdGUoZGlzcGMtPnZwX2Nsa1tod192aWRlb3BvcnRdKTsKKworCWlmIChkaXNw Y19wY2xrX2RpZmYocmF0ZSwgbmV3X3JhdGUpID4gNSkKKwkJZGV2X3dhcm4oZGlzcGMtPmRldiwK KwkJCSAidnAlZDogQ2xvY2sgcmF0ZSAlbHUgZGlmZmVycyBvdmVyIDUlJSBmcm9tIHJlcXVzdGVk ICVsdVxuIiwKKwkJCSBod192aWRlb3BvcnQsIG5ld19yYXRlLCByYXRlKTsKKworCWRldl9kYmco ZGlzcGMtPmRldiwgInZwJWQ6IG5ldyByYXRlICVsdSBIeiAocmVxdWVzdGVkICVsdSBIeilcbiIs CisJCWh3X3ZpZGVvcG9ydCwgY2xrX2dldF9yYXRlKGRpc3BjLT52cF9jbGtbaHdfdmlkZW9wb3J0 XSksIHJhdGUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIE9WUiAqLworc3RhdGljIHZvaWQgZGlz cGNfazJnX292cl9zZXRfcGxhbmUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkJICAg IHUzMiBod19wbGFuZSwgdTMyIGh3X3ZpZGVvcG9ydCwKKwkJCQkgICAgdTMyIHgsIHUzMiB5LCB1 MzIgenBvcykKK3sKKwkvKiBPbiBrMmcgdGhlcmUgaXMgb25seSBvbmUgcGxhbmUgYW5kIG5vIG5l ZWQgZm9yIG92ciAqLworCWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUsIERJU1BDX1ZJ RF9LMkdfUE9TSVRJT04sCisJCQl4IHwgKHkgPDwgMTYpKTsKK30KKworc3RhdGljIHZvaWQgZGlz cGNfYW02NXhfb3ZyX3NldF9wbGFuZShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkg ICAgICB1MzIgaHdfcGxhbmUsIHUzMiBod192aWRlb3BvcnQsCisJCQkJICAgICAgdTMyIHgsIHUz MiB5LCB1MzIgenBvcykKK3sKKwlPVlJfUkVHX0ZMRF9NT0QoZGlzcGMsIGh3X3ZpZGVvcG9ydCwg RElTUENfT1ZSX0FUVFJJQlVURVMoenBvcyksCisJCQlod19wbGFuZSwgNCwgMSk7CisJT1ZSX1JF R19GTERfTU9EKGRpc3BjLCBod192aWRlb3BvcnQsIERJU1BDX09WUl9BVFRSSUJVVEVTKHpwb3Mp LAorCQkJeCwgMTcsIDYpOworCU9WUl9SRUdfRkxEX01PRChkaXNwYywgaHdfdmlkZW9wb3J0LCBE SVNQQ19PVlJfQVRUUklCVVRFUyh6cG9zKSwKKwkJCXksIDMwLCAxOSk7Cit9CisKK3N0YXRpYyB2 b2lkIGRpc3BjX2o3MjFlX292cl9zZXRfcGxhbmUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMs CisJCQkJICAgICAgdTMyIGh3X3BsYW5lLCB1MzIgaHdfdmlkZW9wb3J0LAorCQkJCSAgICAgIHUz MiB4LCB1MzIgeSwgdTMyIHpwb3MpCit7CisJT1ZSX1JFR19GTERfTU9EKGRpc3BjLCBod192aWRl b3BvcnQsIERJU1BDX09WUl9BVFRSSUJVVEVTKHpwb3MpLAorCQkJaHdfcGxhbmUsIDQsIDEpOwor CU9WUl9SRUdfRkxEX01PRChkaXNwYywgaHdfdmlkZW9wb3J0LCBESVNQQ19PVlJfQVRUUklCVVRF UzIoenBvcyksCisJCQl4LCAxMywgMCk7CisJT1ZSX1JFR19GTERfTU9EKGRpc3BjLCBod192aWRl b3BvcnQsIERJU1BDX09WUl9BVFRSSUJVVEVTMih6cG9zKSwKKwkJCXksIDI5LCAxNik7Cit9CisK K3N0YXRpYyB2b2lkIGRpc3BjX292cl9zZXRfcGxhbmUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlz cGMsCisJCQkJdTMyIGh3X3BsYW5lLCB1MzIgaHdfdmlkZW9wb3J0LAorCQkJCXUzMiB4LCB1MzIg eSwgdTMyIHpwb3MpCit7CisJc3dpdGNoIChkaXNwYy0+ZmVhdC0+c3VicmV2KSB7CisJY2FzZSBE SVNQQ19LMkc6CisJCWRpc3BjX2syZ19vdnJfc2V0X3BsYW5lKGRpc3BjLCBod19wbGFuZSwgaHdf dmlkZW9wb3J0LAorCQkJCQl4LCB5LCB6cG9zKTsKKwkJYnJlYWs7CisJY2FzZSBESVNQQ19BTTY1 WDoKKwkJZGlzcGNfYW02NXhfb3ZyX3NldF9wbGFuZShkaXNwYywgaHdfcGxhbmUsIGh3X3ZpZGVv cG9ydCwKKwkJCQkJICB4LCB5LCB6cG9zKTsKKwkJYnJlYWs7CisJY2FzZSBESVNQQ19KNzIxRToK KwkJZGlzcGNfajcyMWVfb3ZyX3NldF9wbGFuZShkaXNwYywgaHdfcGxhbmUsIGh3X3ZpZGVvcG9y dCwKKwkJCQkJICB4LCB5LCB6cG9zKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigx KTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBkaXNwY19vdnJfZW5hYmxlX3BsYW5l KHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCSAgIHUzMiBod192aWRlb3BvcnQsIHUz MiB6cG9zLCBib29sIGVuYWJsZSkKK3sKKwlPVlJfUkVHX0ZMRF9NT0QoZGlzcGMsIGh3X3ZpZGVv cG9ydCwgRElTUENfT1ZSX0FUVFJJQlVURVMoenBvcyksCisJCQkhIWVuYWJsZSwgMCwgMCk7Cit9 CisKKy8qIENTQyAqLworZW51bSBjc2NfY3RtIHsKKwlDU0NfUlIsIENTQ19SRywgQ1NDX1JCLAor CUNTQ19HUiwgQ1NDX0dHLCBDU0NfR0IsCisJQ1NDX0JSLCBDU0NfQkcsIENTQ19CQiwKK307CisK K2VudW0gY3NjX3l1djJyZ2IgeworCUNTQ19SWSwgQ1NDX1JDYiwgQ1NDX1JDciwKKwlDU0NfR1ks IENTQ19HQ2IsIENTQ19HQ3IsCisJQ1NDX0JZLCBDU0NfQkNiLCBDU0NfQkNyLAorfTsKKworZW51 bSBjc2NfcmdiMnl1diB7CisJQ1NDX1lSLCAgQ1NDX1lHLCAgQ1NDX1lCLAorCUNTQ19DYlIsIENT Q19DYkcsIENTQ19DYkIsCisJQ1NDX0NyUiwgQ1NDX0NyRywgQ1NDX0NyQiwKK307CisKK3N0cnVj dCBkaXNwY19jc2NfY29lZiB7CisJdm9pZCAoKnRvX3JlZ3ZhbCkoY29uc3Qgc3RydWN0IGRpc3Bj X2NzY19jb2VmICpjc2MsIHUzMiAqcmVndmFsKTsKKwlpbnQgbVs5XTsKKwlpbnQgcHJlb2Zmc2V0 WzNdOworCWludCBwb3N0b2Zmc2V0WzNdOworCWVudW0geyBDTElQX0xJTUlURURfUkFOR0UgPSAw LCBDTElQX0ZVTExfUkFOR0UgPSAxLCB9IGNsaXBpbmc7CisJY29uc3QgY2hhciAqbmFtZTsKK307 CisKKyNkZWZpbmUgRElTUENfQ1NDX1JFR1ZBTF9MRU4gOAorCitzdGF0aWMgdm9pZCBkaXNwY19j c2Nfb2Zmc2V0X3JlZ3ZhbChjb25zdCBzdHJ1Y3QgZGlzcGNfY3NjX2NvZWYgKmNzYywKKwkJCQkg ICAgdTMyICpyZWd2YWwpCit7CisjZGVmaW5lIE9WQUwoeCwgeSkgKEZMRF9WQUwoeCwgMTUsIDMp IHwgRkxEX1ZBTCh5LCAzMSwgMTkpKQorCXJlZ3ZhbFs1XSA9IE9WQUwoY3NjLT5wcmVvZmZzZXRb MF0sIGNzYy0+cHJlb2Zmc2V0WzFdKTsKKwlyZWd2YWxbNl0gPSBPVkFMKGNzYy0+cHJlb2Zmc2V0 WzJdLCBjc2MtPnBvc3RvZmZzZXRbMF0pOworCXJlZ3ZhbFs3XSA9IE9WQUwoY3NjLT5wb3N0b2Zm c2V0WzFdLCBjc2MtPnBvc3RvZmZzZXRbMl0pOworI3VuZGVmIE9WQUwKK30KKworI2RlZmluZSBD VkFMKHgsIHkpIChGTERfVkFMKHgsIDEwLCAwKSB8IEZMRF9WQUwoeSwgMjYsIDE2KSkKK3N0YXRp YyB2b2lkIGRpc3BjX2NzY195dXYycmdiX3JlZ3ZhbChjb25zdCBzdHJ1Y3QgZGlzcGNfY3NjX2Nv ZWYgKmNzYywKKwkJCQkgICAgIHUzMiAqcmVndmFsKQoreworCXJlZ3ZhbFswXSA9IENWQUwoY3Nj LT5tW0NTQ19SWV0sIGNzYy0+bVtDU0NfUkNyXSk7CisJcmVndmFsWzFdID0gQ1ZBTChjc2MtPm1b Q1NDX1JDYl0sIGNzYy0+bVtDU0NfR1ldKTsKKwlyZWd2YWxbMl0gPSBDVkFMKGNzYy0+bVtDU0Nf R0NyXSwgY3NjLT5tW0NTQ19HQ2JdKTsKKwlyZWd2YWxbM10gPSBDVkFMKGNzYy0+bVtDU0NfQlld LCBjc2MtPm1bQ1NDX0JDcl0pOworCXJlZ3ZhbFs0XSA9IENWQUwoY3NjLT5tW0NTQ19CQ2JdLCAw KTsKKworCWRpc3BjX2NzY19vZmZzZXRfcmVndmFsKGNzYywgcmVndmFsKTsKK30KKworc3RhdGlj IHZvaWQgX19tYXliZV91bnVzZWQgZGlzcGNfY3NjX3JnYjJ5dXZfcmVndmFsKGNvbnN0IHN0cnVj dCBkaXNwY19jc2NfY29lZiAqY3NjLAorCQkJCQkJICAgIHUzMiAqcmVndmFsKQoreworCXJlZ3Zh bFswXSA9IENWQUwoY3NjLT5tW0NTQ19ZUl0sIGNzYy0+bVtDU0NfWUddKTsKKwlyZWd2YWxbMV0g PSBDVkFMKGNzYy0+bVtDU0NfWUJdLCBjc2MtPm1bQ1NDX0NyUl0pOworCXJlZ3ZhbFsyXSA9IENW QUwoY3NjLT5tW0NTQ19DckddLCBjc2MtPm1bQ1NDX0NyQl0pOworCXJlZ3ZhbFszXSA9IENWQUwo Y3NjLT5tW0NTQ19DYlJdLCBjc2MtPm1bQ1NDX0NiR10pOworCXJlZ3ZhbFs0XSA9IENWQUwoY3Nj LT5tW0NTQ19DYkJdLCAwKTsKKworCWRpc3BjX2NzY19vZmZzZXRfcmVndmFsKGNzYywgcmVndmFs KTsKK30KKworc3RhdGljIHZvaWQgZGlzcGNfY3NjX2Nwcl9yZWd2YWwoY29uc3Qgc3RydWN0IGRp c3BjX2NzY19jb2VmICpjc2MsCisJCQkJIHUzMiAqcmVndmFsKQoreworCXJlZ3ZhbFswXSA9IENW QUwoY3NjLT5tW0NTQ19SUl0sIGNzYy0+bVtDU0NfUkddKTsKKwlyZWd2YWxbMV0gPSBDVkFMKGNz Yy0+bVtDU0NfUkJdLCBjc2MtPm1bQ1NDX0dSXSk7CisJcmVndmFsWzJdID0gQ1ZBTChjc2MtPm1b Q1NDX0dHXSwgY3NjLT5tW0NTQ19HQl0pOworCXJlZ3ZhbFszXSA9IENWQUwoY3NjLT5tW0NTQ19C Ul0sIGNzYy0+bVtDU0NfQkddKTsKKwlyZWd2YWxbNF0gPSBDVkFMKGNzYy0+bVtDU0NfQkJdLCAw KTsKKworCWRpc3BjX2NzY19vZmZzZXRfcmVndmFsKGNzYywgcmVndmFsKTsKK30KKworI3VuZGVm IENWQUwKKworc3RhdGljIHZvaWQgZGlzcGNfazJnX3ZpZF93cml0ZV9jc2Moc3RydWN0IGRpc3Bj X2RldmljZSAqZGlzcGMsIHUzMiBod19wbGFuZSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGRpc3Bj X2NzY19jb2VmICpjc2MpCit7CisJc3RhdGljIGNvbnN0IHUxNiBkaXNwY192aWRfY3NjX2NvZWZf cmVnW10gPSB7CisJCURJU1BDX1ZJRF9DU0NfQ09FRigwKSwgRElTUENfVklEX0NTQ19DT0VGKDEp LAorCQlESVNQQ19WSURfQ1NDX0NPRUYoMiksIERJU1BDX1ZJRF9DU0NfQ09FRigzKSwKKwkJRElT UENfVklEX0NTQ19DT0VGKDQpLCBESVNQQ19WSURfQ1NDX0NPRUYoNSksCisJCURJU1BDX1ZJRF9D U0NfQ09FRig2KSwgLyogSzJHIGhhcyBubyBwb3N0IG9mZnNldCBzdXBwb3J0ICovCisJfTsKKwl1 MzIgcmVndmFsW0RJU1BDX0NTQ19SRUdWQUxfTEVOXTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWNz Yy0+dG9fcmVndmFsKGNzYywgcmVndmFsKTsKKworCWlmIChyZWd2YWxbN10gIT0gMCkKKwkJZGV2 X3dhcm4oZGlzcGMtPmRldiwgIiVzOiBObyBwb3N0IG9mZnNldCBzdXBwb3J0IGZvciAlc1xuIiwK KwkJCSBfX2Z1bmNfXywgY3NjLT5uYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGRpc3BjX3ZpZF9jc2NfY29lZl9yZWcpOyBpKyspCisJCWRpc3BjX3ZpZF93cml0ZShkaXNwYywg aHdfcGxhbmUsIGRpc3BjX3ZpZF9jc2NfY29lZl9yZWdbaV0sCisJCQkJcmVndmFsW2ldKTsKK30K Kworc3RhdGljIHZvaWQgZGlzcGNfazNfdmlkX3dyaXRlX2NzYyhzdHJ1Y3QgZGlzcGNfZGV2aWNl ICpkaXNwYywgdTMyIGh3X3BsYW5lLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBkaXNwY19jc2NfY29l ZiAqY3NjKQoreworCXN0YXRpYyBjb25zdCB1MTYgZGlzcGNfdmlkX2NzY19jb2VmX3JlZ1tESVNQ Q19DU0NfUkVHVkFMX0xFTl0gPSB7CisJCURJU1BDX1ZJRF9DU0NfQ09FRigwKSwgRElTUENfVklE X0NTQ19DT0VGKDEpLAorCQlESVNQQ19WSURfQ1NDX0NPRUYoMiksIERJU1BDX1ZJRF9DU0NfQ09F RigzKSwKKwkJRElTUENfVklEX0NTQ19DT0VGKDQpLCBESVNQQ19WSURfQ1NDX0NPRUYoNSksCisJ CURJU1BDX1ZJRF9DU0NfQ09FRig2KSwgRElTUENfVklEX0NTQ19DT0VGNywKKwl9OworCXUzMiBy ZWd2YWxbRElTUENfQ1NDX1JFR1ZBTF9MRU5dOworCXVuc2lnbmVkIGludCBpOworCisJY3NjLT50 b19yZWd2YWwoY3NjLCByZWd2YWwpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGlz cGNfdmlkX2NzY19jb2VmX3JlZyk7IGkrKykKKwkJZGlzcGNfdmlkX3dyaXRlKGRpc3BjLCBod19w bGFuZSwgZGlzcGNfdmlkX2NzY19jb2VmX3JlZ1tpXSwKKwkJCQlyZWd2YWxbaV0pOworfQorCisv KiBZVVYgLT4gUkdCLCBJVFUtUiBCVC42MDEsIGZ1bGwgcmFuZ2UgKi8KK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZGlzcGNfY3NjX2NvZWYgY3NjX3l1djJyZ2JfYnQ2MDFfZnVsbCA9IHsKKwlkaXNwY19j c2NfeXV2MnJnYl9yZWd2YWwsCisJeyAyNTYsICAgMCwgIDM1OCwJLyogcnksIHJjYiwgcmNyIHwx LjAwMCAgMC4wMDAgIDEuNDAyfCovCisJICAyNTYsIC04OCwgLTE4MiwJLyogZ3ksIGdjYiwgZ2Ny IHwxLjAwMCAtMC4zNDQgLTAuNzE0fCovCisJICAyNTYsIDQ1MiwgICAgMCwgfSwJLyogYnksIGJj YiwgYmNyIHwxLjAwMCAgMS43NzIgIDAuMDAwfCovCisJeyAgICAwLCAtMjA0OCwgLTIwNDgsIH0s CS8qIGZ1bGwgcmFuZ2UgKi8KKwl7ICAgIDAsICAgICAwLCAgICAgMCwgfSwKKwlDTElQX0ZVTExf UkFOR0UsCisJIkJULjYwMSBGdWxsIiwKK307CisKKy8qIFlVViAtPiBSR0IsIElUVS1SIEJULjYw MSwgbGltaXRlZCByYW5nZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkaXNwY19jc2NfY29lZiBj c2NfeXV2MnJnYl9idDYwMV9saW0gPSB7CisJZGlzcGNfY3NjX3l1djJyZ2JfcmVndmFsLAorCXsg Mjk4LCAgICAwLCAgNDA5LAkvKiByeSwgcmNiLCByY3IgfDEuMTY0ICAwLjAwMCAgMS41OTZ8Ki8K KwkgIDI5OCwgLTEwMCwgLTIwOCwJLyogZ3ksIGdjYiwgZ2NyIHwxLjE2NCAtMC4zOTIgLTAuODEz fCovCisJICAyOTgsICA1MTYsICAgIDAsIH0sCS8qIGJ5LCBiY2IsIGJjciB8MS4xNjQgIDIuMDE3 ICAwLjAwMHwqLworCXsgLTI1NiwgLTIwNDgsIC0yMDQ4LCB9LAkvKiBsaW1pdGVkIHJhbmdlICov CisJeyAgICAwLCAgICAgMCwgICAgIDAsIH0sCisJQ0xJUF9GVUxMX1JBTkdFLAorCSJCVC42MDEg TGltaXRlZCIsCit9OworCisvKiBZVVYgLT4gUkdCLCBJVFUtUiBCVC43MDksIGZ1bGwgcmFuZ2Ug Ki8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGlzcGNfY3NjX2NvZWYgY3NjX3l1djJyZ2JfYnQ3MDlf ZnVsbCA9IHsKKwlkaXNwY19jc2NfeXV2MnJnYl9yZWd2YWwsCisJeyAyNTYsCSAgMCwgIDQwMiwJ LyogcnksIHJjYiwgcmNyIHwxLjAwMAkwLjAwMCAgMS41NzB8Ki8KKwkgIDI1NiwgIC00OCwgLTEy MCwJLyogZ3ksIGdjYiwgZ2NyIHwxLjAwMCAtMC4xODcgLTAuNDY3fCovCisJICAyNTYsICA0NzUs ICAgIDAsIH0sCS8qIGJ5LCBiY2IsIGJjciB8MS4wMDAJMS44NTYgIDAuMDAwfCovCisJeyAgICAw LCAtMjA0OCwgLTIwNDgsIH0sCS8qIGZ1bGwgcmFuZ2UgKi8KKwl7ICAgIDAsICAgICAwLCAgICAg MCwgfSwKKwlDTElQX0ZVTExfUkFOR0UsCisJIkJULjcwOSBGdWxsIiwKK307CisKKy8qIFlVViAt PiBSR0IsIElUVS1SIEJULjcwOSwgbGltaXRlZCByYW5nZSAqLworc3RhdGljIGNvbnN0IHN0cnVj dCBkaXNwY19jc2NfY29lZiBjc2NfeXV2MnJnYl9idDcwOV9saW0gPSB7CisJZGlzcGNfY3NjX3l1 djJyZ2JfcmVndmFsLAorCXsgMjk4LCAgICAwLCAgNDU5LAkvKiByeSwgcmNiLCByY3IgfDEuMTY0 ICAwLjAwMCAgMS43OTN8Ki8KKwkgIDI5OCwgIC01NSwgLTEzNiwJLyogZ3ksIGdjYiwgZ2NyIHwx LjE2NCAtMC4yMTMgLTAuNTMzfCovCisJICAyOTgsICA1NDEsICAgIDAsIH0sCS8qIGJ5LCBiY2Is IGJjciB8MS4xNjQgIDIuMTEyICAwLjAwMHwqLworCXsgLTI1NiwgLTIwNDgsIC0yMDQ4LCB9LAkv KiBsaW1pdGVkIHJhbmdlICovCisJeyAgICAwLCAgICAgMCwgICAgIDAsIH0sCisJQ0xJUF9GVUxM X1JBTkdFLAorCSJCVC43MDkgTGltaXRlZCIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsK KwllbnVtIGRybV9jb2xvcl9lbmNvZGluZyBlbmNvZGluZzsKKwllbnVtIGRybV9jb2xvcl9yYW5n ZSByYW5nZTsKKwljb25zdCBzdHJ1Y3QgZGlzcGNfY3NjX2NvZWYgKmNzYzsKK30gZGlzcGNfY3Nj X3RhYmxlW10gPSB7CisJeyBEUk1fQ09MT1JfWUNCQ1JfQlQ2MDEsIERSTV9DT0xPUl9ZQ0JDUl9G VUxMX1JBTkdFLAorCSAgJmNzY195dXYycmdiX2J0NjAxX2Z1bGwsIH0sCisJeyBEUk1fQ09MT1Jf WUNCQ1JfQlQ2MDEsIERSTV9DT0xPUl9ZQ0JDUl9MSU1JVEVEX1JBTkdFLAorCSAgJmNzY195dXYy cmdiX2J0NjAxX2xpbSwgfSwKKwl7IERSTV9DT0xPUl9ZQ0JDUl9CVDcwOSwgRFJNX0NPTE9SX1lD QkNSX0ZVTExfUkFOR0UsCisJICAmY3NjX3l1djJyZ2JfYnQ3MDlfZnVsbCwgfSwKKwl7IERSTV9D T0xPUl9ZQ0JDUl9CVDcwOSwgRFJNX0NPTE9SX1lDQkNSX0xJTUlURURfUkFOR0UsCisJICAmY3Nj X3l1djJyZ2JfYnQ3MDlfbGltLCB9LAorfTsKKworc3RhdGljIGNvbnN0CitzdHJ1Y3QgZGlzcGNf Y3NjX2NvZWYgKmRpc3BjX2ZpbmRfY3NjKGVudW0gZHJtX2NvbG9yX2VuY29kaW5nIGVuY29kaW5n LAorCQkJCSAgICAgIGVudW0gZHJtX2NvbG9yX3JhbmdlIHJhbmdlKQoreworCXVuc2lnbmVkIGlu dCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGlzcGNfY3NjX3RhYmxlKTsgaSsr KSB7CisJCWlmIChkaXNwY19jc2NfdGFibGVbaV0uZW5jb2RpbmcgPT0gZW5jb2RpbmcgJiYKKwkJ ICAgIGRpc3BjX2NzY190YWJsZVtpXS5yYW5nZSA9PSByYW5nZSkgeworCQkJcmV0dXJuIGRpc3Bj X2NzY190YWJsZVtpXS5jc2M7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2 b2lkIGRpc3BjX3ZpZF9jc2Nfc2V0dXAoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBo d19wbGFuZSwKKwkJCQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlz dGF0aWMgY29uc3Qgc3RydWN0IGRpc3BjX2NzY19jb2VmICpjb2VmOworCisJY29lZiA9IGRpc3Bj X2ZpbmRfY3NjKHN0YXRlLT5jb2xvcl9lbmNvZGluZywgc3RhdGUtPmNvbG9yX3JhbmdlKTsKKwlp ZiAoIWNvZWYpIHsKKwkJZGV2X2VycihkaXNwYy0+ZGV2LCAiJXM6IENTQyAoJXUsJXUpIG5vdCBm b3VuZFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0ZS0+Y29sb3JfZW5jb2RpbmcsIHN0YXRlLT5jb2xv cl9yYW5nZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZGlzcGMtPmZlYXQtPnN1YnJldiA9PSBE SVNQQ19LMkcpCisJCWRpc3BjX2syZ192aWRfd3JpdGVfY3NjKGRpc3BjLCBod19wbGFuZSwgY29l Zik7CisJZWxzZQorCQlkaXNwY19rM192aWRfd3JpdGVfY3NjKGRpc3BjLCBod19wbGFuZSwgY29l Zik7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjX3ZpZF9jc2NfZW5hYmxlKHN0cnVjdCBkaXNwY19k ZXZpY2UgKmRpc3BjLCB1MzIgaHdfcGxhbmUsCisJCQkJIGJvb2wgZW5hYmxlKQoreworCVZJRF9S RUdfRkxEX01PRChkaXNwYywgaHdfcGxhbmUsIERJU1BDX1ZJRF9BVFRSSUJVVEVTLCAhIWVuYWJs ZSwgOSwgOSk7Cit9CisKKy8qIFNDQUxFUiAqLworCitzdGF0aWMgdTMyIGRpc3BjX2NhbGNfZmly X2luYyh1MzIgaW4sIHUzMiBvdXQpCit7CisJcmV0dXJuICh1MzIpZGl2X3U2NCgweDIwMDAwMHVs bCAqIGluLCBvdXQpOworfQorCitlbnVtIGRpc3BjX3ZpZF9maXJfY29lZl9zZXQgeworCURJU1BD X1ZJRF9GSVJfQ09FRl9IT1JJWiwKKwlESVNQQ19WSURfRklSX0NPRUZfSE9SSVpfVVYsCisJRElT UENfVklEX0ZJUl9DT0VGX1ZFUlQsCisJRElTUENfVklEX0ZJUl9DT0VGX1ZFUlRfVVYsCit9Owor CitzdGF0aWMgdm9pZCBkaXNwY192aWRfd3JpdGVfZmlyX2NvZWZzKHN0cnVjdCBkaXNwY19kZXZp Y2UgKmRpc3BjLAorCQkJCSAgICAgIHUzMiBod19wbGFuZSwKKwkJCQkgICAgICBlbnVtIGRpc3Bj X3ZpZF9maXJfY29lZl9zZXQgY29lZl9zZXQsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHRpZHNz X3NjYWxlX2NvZWZzICpjb2VmcykKK3sKKwlzdGF0aWMgY29uc3QgdTE2IGMwX3JlZ3NbXSA9IHsK KwkJW0RJU1BDX1ZJRF9GSVJfQ09FRl9IT1JJWl0gPSBESVNQQ19WSURfRklSX0NPRUZTX0gwLAor CQlbRElTUENfVklEX0ZJUl9DT0VGX0hPUklaX1VWXSA9IERJU1BDX1ZJRF9GSVJfQ09FRlNfSDBf QywKKwkJW0RJU1BDX1ZJRF9GSVJfQ09FRl9WRVJUXSA9IERJU1BDX1ZJRF9GSVJfQ09FRlNfVjAs CisJCVtESVNQQ19WSURfRklSX0NPRUZfVkVSVF9VVl0gPSBESVNQQ19WSURfRklSX0NPRUZTX1Yw X0MsCisJfTsKKworCXN0YXRpYyBjb25zdCB1MTYgYzEyX3JlZ3NbXSA9IHsKKwkJW0RJU1BDX1ZJ RF9GSVJfQ09FRl9IT1JJWl0gPSBESVNQQ19WSURfRklSX0NPRUZTX0gxMiwKKwkJW0RJU1BDX1ZJ RF9GSVJfQ09FRl9IT1JJWl9VVl0gPSBESVNQQ19WSURfRklSX0NPRUZTX0gxMl9DLAorCQlbRElT UENfVklEX0ZJUl9DT0VGX1ZFUlRdID0gRElTUENfVklEX0ZJUl9DT0VGU19WMTIsCisJCVtESVNQ Q19WSURfRklSX0NPRUZfVkVSVF9VVl0gPSBESVNQQ19WSURfRklSX0NPRUZTX1YxMl9DLAorCX07 CisKKwljb25zdCB1MTYgYzBfYmFzZSA9IGMwX3JlZ3NbY29lZl9zZXRdOworCWNvbnN0IHUxNiBj MTJfYmFzZSA9IGMxMl9yZWdzW2NvZWZfc2V0XTsKKwlpbnQgcGhhc2U7CisKKwlpZiAoIWNvZWZz KSB7CisJCWRldl9lcnIoZGlzcGMtPmRldiwgIiVzOiBObyBjb2VmZmljaWVudHMgZ2l2ZW4uXG4i LCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKHBoYXNlID0gMDsgcGhhc2UgPD0g ODsgKytwaGFzZSkgeworCQl1MTYgcmVnID0gYzBfYmFzZSArIHBoYXNlICogNDsKKwkJdTE2IGMw ID0gY29lZnMtPmMwW3BoYXNlXTsKKworCQlkaXNwY192aWRfd3JpdGUoZGlzcGMsIGh3X3BsYW5l LCByZWcsIGMwKTsKKwl9CisKKwlmb3IgKHBoYXNlID0gMDsgcGhhc2UgPD0gMTU7ICsrcGhhc2Up IHsKKwkJdTE2IHJlZyA9IGMxMl9iYXNlICsgcGhhc2UgKiA0OworCQlzMTYgYzEsIGMyOworCQl1 MzIgYzEyOworCisJCWMxID0gY29lZnMtPmMxW3BoYXNlXTsKKwkJYzIgPSBjb2Vmcy0+YzJbcGhh c2VdOworCQljMTIgPSBGTERfVkFMKGMxLCAxOSwgMTApIHwgRkxEX1ZBTChjMiwgMjksIDIwKTsK KworCQlkaXNwY192aWRfd3JpdGUoZGlzcGMsIGh3X3BsYW5lLCByZWcsIGMxMik7CisJfQorfQor CitzdGF0aWMgYm9vbCBkaXNwY19mb3VyY2NfaXNfeXV2KHUzMiBmb3VyY2MpCit7CisJc3dpdGNo IChmb3VyY2MpIHsKKwljYXNlIERSTV9GT1JNQVRfWVVZVjoKKwljYXNlIERSTV9GT1JNQVRfVVlW WToKKwljYXNlIERSTV9GT1JNQVRfTlYxMjoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJ cmV0dXJuIGZhbHNlOworCX0KK30KKworc3RydWN0IGRpc3BjX3NjYWxpbmdfcGFyYW1zIHsKKwlp bnQgeGluYywgeWluYzsKKwl1MzIgaW5fdywgaW5faCwgaW5fd191diwgaW5faF91djsKKwl1MzIg ZmlyX3hpbmMsIGZpcl95aW5jLCBmaXJfeGluY191diwgZmlyX3lpbmNfdXY7CisJYm9vbCBzY2Fs ZV94LCBzY2FsZV95OworCWNvbnN0IHN0cnVjdCB0aWRzc19zY2FsZV9jb2VmcyAqeGNvZWYsICp5 Y29lZiwgKnhjb2VmX3V2LCAqeWNvZWZfdXY7CisJYm9vbCBmaXZlX3RhcHM7Cit9OworCitzdGF0 aWMgaW50IGRpc3BjX3ZpZF9jYWxjX3NjYWxpbmcoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMs CisJCQkJICBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwKKwkJCQkgIHN0cnVj dCBkaXNwY19zY2FsaW5nX3BhcmFtcyAqc3AsCisJCQkJICBib29sIGxpdGVfcGxhbmUpCit7CisJ Y29uc3Qgc3RydWN0IGRpc3BjX2ZlYXR1cmVzX3NjYWxpbmcgKmYgPSAmZGlzcGMtPmZlYXQtPnNj YWxpbmc7CisJdTMyIGZvdXJjYyA9IHN0YXRlLT5mYi0+Zm9ybWF0LT5mb3JtYXQ7CisJdTMyIGlu X3dpZHRoX21heF81dGFwID0gZi0+aW5fd2lkdGhfbWF4XzV0YXBfcmdiOworCXUzMiBpbl93aWR0 aF9tYXhfM3RhcCA9IGYtPmluX3dpZHRoX21heF8zdGFwX3JnYjsKKwl1MzIgZG93bnNjYWxlX2xp bWl0OworCXUzMiBpbl93aWR0aF9tYXg7CisKKwltZW1zZXQoc3AsIDAsIHNpemVvZigqc3ApKTsK KwlzcC0+eGluYyA9IHNwLT55aW5jID0gMTsKKwlzcC0+aW5fdyA9IHNwLT5pbl93X3V2ID0gc3Rh dGUtPnNyY193ID4+IDE2OworCXNwLT5pbl9oID0gc3AtPmluX2hfdXYgPSBzdGF0ZS0+c3JjX2gg Pj4gMTY7CisKKwlzcC0+c2NhbGVfeCA9IHNwLT5pbl93ICE9IHN0YXRlLT5jcnRjX3c7CisJc3At PnNjYWxlX3kgPSBzcC0+aW5faCAhPSBzdGF0ZS0+Y3J0Y19oOworCisJaWYgKGRpc3BjX2ZvdXJj Y19pc195dXYoZm91cmNjKSkgeworCQlpbl93aWR0aF9tYXhfNXRhcCA9IGYtPmluX3dpZHRoX21h eF81dGFwX3l1djsKKwkJaW5fd2lkdGhfbWF4XzN0YXAgPSBmLT5pbl93aWR0aF9tYXhfM3RhcF95 dXY7CisKKwkJc3AtPmluX3dfdXYgPj49IDE7CisJCXNwLT5zY2FsZV94ID0gdHJ1ZTsKKworCQlp ZiAoZm91cmNjID09IERSTV9GT1JNQVRfTlYxMikgeworCQkJc3AtPmluX2hfdXYgPj49IDE7CisJ CQlzcC0+c2NhbGVfeSA9IHRydWU7CisJCX0KKwl9CisKKwkvKiBTa2lwIHRoZSByZXN0IGlmIG5v IHNjYWxpbmcgaXMgdXNlZCAqLworCWlmICgoIXNwLT5zY2FsZV94ICYmICFzcC0+c2NhbGVfeSkg fHwgbGl0ZV9wbGFuZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3AtPmluX3cgPiBpbl93aWR0aF9t YXhfNXRhcCkgeworCQlzcC0+Zml2ZV90YXBzID0gZmFsc2U7CisJCWluX3dpZHRoX21heCA9IGlu X3dpZHRoX21heF8zdGFwOworCQlkb3duc2NhbGVfbGltaXQgPSBmLT5kb3duc2NhbGVfbGltaXRf M3RhcDsKKwl9IGVsc2UgeworCQlzcC0+Zml2ZV90YXBzID0gdHJ1ZTsKKwkJaW5fd2lkdGhfbWF4 ID0gaW5fd2lkdGhfbWF4XzV0YXA7CisJCWRvd25zY2FsZV9saW1pdCA9IGYtPmRvd25zY2FsZV9s aW1pdF81dGFwOworCX0KKworCWlmIChzcC0+c2NhbGVfeCkgeworCQlzcC0+ZmlyX3hpbmMgPSBk aXNwY19jYWxjX2Zpcl9pbmMoc3AtPmluX3csIHN0YXRlLT5jcnRjX3cpOworCisJCWlmIChzcC0+ ZmlyX3hpbmMgPCBkaXNwY19jYWxjX2Zpcl9pbmMoMSwgZi0+dXBzY2FsZV9saW1pdCkpIHsKKwkJ CWRldl9kYmcoZGlzcGMtPmRldiwKKwkJCQkiJXM6IFgtc2NhbGluZyBmYWN0b3IgJXUvJXUgPiAl dVxuIiwKKwkJCQlfX2Z1bmNfXywgc3RhdGUtPmNydGNfdywgc3RhdGUtPnNyY193ID4+IDE2LAor CQkJCWYtPnVwc2NhbGVfbGltaXQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAo c3AtPmZpcl94aW5jID49IGRpc3BjX2NhbGNfZmlyX2luYyhkb3duc2NhbGVfbGltaXQsIDEpKSB7 CisJCQlzcC0+eGluYyA9IERJVl9ST1VORF9VUChESVZfUk9VTkRfVVAoc3AtPmluX3csCisJCQkJ CQkJICAgICBzdGF0ZS0+Y3J0Y193KSwKKwkJCQkJCWRvd25zY2FsZV9saW1pdCk7CisKKwkJCWlm IChzcC0+eGluYyA+IGYtPnhpbmNfbWF4KSB7CisJCQkJZGV2X2RiZyhkaXNwYy0+ZGV2LAorCQkJ CQkiJXM6IFgtc2NhbGluZyBmYWN0b3IgJXUvJXUgPCAxLyV1XG4iLAorCQkJCQlfX2Z1bmNfXywg c3RhdGUtPmNydGNfdywKKwkJCQkJc3RhdGUtPnNyY193ID4+IDE2LAorCQkJCQlkb3duc2NhbGVf bGltaXQgKiBmLT54aW5jX21heCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCXNw LT5pbl93ID0gKHN0YXRlLT5zcmNfdyA+PiAxNikgLyBzcC0+eGluYzsKKwkJfQorCisJCXdoaWxl IChzcC0+aW5fdyA+IGluX3dpZHRoX21heCkgeworCQkJc3AtPnhpbmMrKzsKKwkJCXNwLT5pbl93 ID0gKHN0YXRlLT5zcmNfdyA+PiAxNikgLyBzcC0+eGluYzsKKwkJfQorCisJCWlmIChzcC0+eGlu YyA+IGYtPnhpbmNfbWF4KSB7CisJCQlkZXZfZGJnKGRpc3BjLT5kZXYsCisJCQkJIiVzOiBUb28g d2lkZSBpbnB1dCBidWZlciAldSA+ICV1XG4iLCBfX2Z1bmNfXywKKwkJCQlzdGF0ZS0+c3JjX3cg Pj4gMTYsIGluX3dpZHRoX21heCAqIGYtPnhpbmNfbWF4KTsKKwkJCXJldHVybiAtRUlOVkFMOwor CQl9CisKKwkJLyoKKwkJICogV2UgbmVlZCBldmVuIGxpbmUgbGVuZ3RoIGZvciBZVVYgZm9ybWF0 cy4gRGVjaW1hdGlvbgorCQkgKiBjYW4gbGVhZCB0byBvZGQgbGVuZ3RoLCBzbyB3ZSBuZWVkIHRv IG1ha2UgaXQgZXZlbgorCQkgKiBhZ2Fpbi4KKwkJICovCisJCWlmIChkaXNwY19mb3VyY2NfaXNf eXV2KGZvdXJjYykpCisJCQlzcC0+aW5fdyAmPSB+MTsKKworCQlzcC0+ZmlyX3hpbmMgPSBkaXNw Y19jYWxjX2Zpcl9pbmMoc3AtPmluX3csIHN0YXRlLT5jcnRjX3cpOworCX0KKworCWlmIChzcC0+ c2NhbGVfeSkgeworCQlzcC0+ZmlyX3lpbmMgPSBkaXNwY19jYWxjX2Zpcl9pbmMoc3AtPmluX2gs IHN0YXRlLT5jcnRjX2gpOworCisJCWlmIChzcC0+ZmlyX3lpbmMgPCBkaXNwY19jYWxjX2Zpcl9p bmMoMSwgZi0+dXBzY2FsZV9saW1pdCkpIHsKKwkJCWRldl9kYmcoZGlzcGMtPmRldiwKKwkJCQki JXM6IFktc2NhbGluZyBmYWN0b3IgJXUvJXUgPiAldVxuIiwKKwkJCQlfX2Z1bmNfXywgc3RhdGUt PmNydGNfaCwgc3RhdGUtPnNyY19oID4+IDE2LAorCQkJCWYtPnVwc2NhbGVfbGltaXQpOworCQkJ cmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoc3AtPmZpcl95aW5jID49IGRpc3BjX2NhbGNf ZmlyX2luYyhkb3duc2NhbGVfbGltaXQsIDEpKSB7CisJCQlzcC0+eWluYyA9IERJVl9ST1VORF9V UChESVZfUk9VTkRfVVAoc3AtPmluX2gsCisJCQkJCQkJICAgICBzdGF0ZS0+Y3J0Y19oKSwKKwkJ CQkJCWRvd25zY2FsZV9saW1pdCk7CisKKwkJCXNwLT5pbl9oIC89IHNwLT55aW5jOworCQkJc3At PmZpcl95aW5jID0gZGlzcGNfY2FsY19maXJfaW5jKHNwLT5pbl9oLAorCQkJCQkJCSAgc3RhdGUt PmNydGNfaCk7CisJCX0KKwl9CisKKwlkZXZfZGJnKGRpc3BjLT5kZXYsCisJCSIlczogJXV4JXUg ZGVjaW0gJXV4JXUgLT4gJXV4JXUgZmlyaW5jICV1LiUwM3V4JXUuJTAzdSB0YXBzICV1IC0+ICV1 eCV1XG4iLAorCQlfX2Z1bmNfXywgc3RhdGUtPnNyY193ID4+IDE2LCBzdGF0ZS0+c3JjX2ggPj4g MTYsCisJCXNwLT54aW5jLCBzcC0+eWluYywgc3AtPmluX3csIHNwLT5pbl9oLAorCQlzcC0+Zmly X3hpbmMgLyAweDIwMDAwMHUsCisJCSgoc3AtPmZpcl94aW5jICYgMHgxRkZGRkZ1KSAqIDk5OXUp IC8gMHgxRkZGRkZ1LAorCQlzcC0+ZmlyX3lpbmMgLyAweDIwMDAwMHUsCisJCSgoc3AtPmZpcl95 aW5jICYgMHgxRkZGRkZ1KSAqIDk5OXUpIC8gMHgxRkZGRkZ1LAorCQlzcC0+Zml2ZV90YXBzID8g NSA6IDMsCisJCXN0YXRlLT5jcnRjX3csIHN0YXRlLT5jcnRjX2gpOworCisJaWYgKGRpc3BjX2Zv dXJjY19pc195dXYoZm91cmNjKSkgeworCQlpZiAoc3AtPnNjYWxlX3gpIHsKKwkJCXNwLT5pbl93 X3V2IC89IHNwLT54aW5jOworCQkJc3AtPmZpcl94aW5jX3V2ID0gZGlzcGNfY2FsY19maXJfaW5j KHNwLT5pbl93X3V2LAorCQkJCQkJCSAgICAgc3RhdGUtPmNydGNfdyk7CisJCQlzcC0+eGNvZWZf dXYgPSB0aWRzc19nZXRfc2NhbGVfY29lZnMoZGlzcGMtPmRldiwKKwkJCQkJCQkgICAgIHNwLT5m aXJfeGluY191diwKKwkJCQkJCQkgICAgIHRydWUpOworCQl9CisJCWlmIChzcC0+c2NhbGVfeSkg eworCQkJc3AtPmluX2hfdXYgLz0gc3AtPnlpbmM7CisJCQlzcC0+ZmlyX3lpbmNfdXYgPSBkaXNw Y19jYWxjX2Zpcl9pbmMoc3AtPmluX2hfdXYsCisJCQkJCQkJICAgICBzdGF0ZS0+Y3J0Y19oKTsK KwkJCXNwLT55Y29lZl91diA9IHRpZHNzX2dldF9zY2FsZV9jb2VmcyhkaXNwYy0+ZGV2LAorCQkJ CQkJCSAgICAgc3AtPmZpcl95aW5jX3V2LAorCQkJCQkJCSAgICAgc3AtPmZpdmVfdGFwcyk7CisJ CX0KKwl9CisKKwlpZiAoc3AtPnNjYWxlX3gpCisJCXNwLT54Y29lZiA9IHRpZHNzX2dldF9zY2Fs ZV9jb2VmcyhkaXNwYy0+ZGV2LCBzcC0+ZmlyX3hpbmMsCisJCQkJCQkgIHRydWUpOworCisJaWYg KHNwLT5zY2FsZV95KQorCQlzcC0+eWNvZWYgPSB0aWRzc19nZXRfc2NhbGVfY29lZnMoZGlzcGMt PmRldiwgc3AtPmZpcl95aW5jLAorCQkJCQkJICBzcC0+Zml2ZV90YXBzKTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBkaXNwY192aWRfc2V0X3NjYWxpbmcoc3RydWN0IGRpc3BjX2Rl dmljZSAqZGlzcGMsCisJCQkJICB1MzIgaHdfcGxhbmUsCisJCQkJICBzdHJ1Y3QgZGlzcGNfc2Nh bGluZ19wYXJhbXMgKnNwLAorCQkJCSAgdTMyIGZvdXJjYykKK3sKKwkvKiBIT1JJWk9OVEFMIFJF U0laRSBFTkFCTEUgKi8KKwlWSURfUkVHX0ZMRF9NT0QoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19W SURfQVRUUklCVVRFUywKKwkJCXNwLT5zY2FsZV94LCA3LCA3KTsKKworCS8qIFZFUlRJQ0FMIFJF U0laRSBFTkFCTEUgKi8KKwlWSURfUkVHX0ZMRF9NT0QoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19W SURfQVRUUklCVVRFUywKKwkJCXNwLT5zY2FsZV95LCA4LCA4KTsKKworCS8qIFNraXAgdGhlIHJl c3QgaWYgbm8gc2NhbGluZyBpcyB1c2VkICovCisJaWYgKCFzcC0+c2NhbGVfeCAmJiAhc3AtPnNj YWxlX3kpCisJCXJldHVybjsKKworCS8qIFZFUlRJQ0FMIDUtVEFQUyAgKi8KKwlWSURfUkVHX0ZM RF9NT0QoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURfQVRUUklCVVRFUywKKwkJCXNwLT5maXZl X3RhcHMsIDIxLCAyMSk7CisKKwlpZiAoZGlzcGNfZm91cmNjX2lzX3l1dihmb3VyY2MpKSB7CisJ CWlmIChzcC0+c2NhbGVfeCkgeworCQkJZGlzcGNfdmlkX3dyaXRlKGRpc3BjLCBod19wbGFuZSwg RElTUENfVklEX0ZJUkgyLAorCQkJCQlzcC0+ZmlyX3hpbmNfdXYpOworCQkJZGlzcGNfdmlkX3dy aXRlX2Zpcl9jb2VmcyhkaXNwYywgaHdfcGxhbmUsCisJCQkJCQkgIERJU1BDX1ZJRF9GSVJfQ09F Rl9IT1JJWl9VViwKKwkJCQkJCSAgc3AtPnhjb2VmX3V2KTsKKwkJfQorCQlpZiAoc3AtPnNjYWxl X3kpIHsKKwkJCWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUsIERJU1BDX1ZJRF9GSVJW MiwKKwkJCQkJc3AtPmZpcl95aW5jX3V2KTsKKwkJCWRpc3BjX3ZpZF93cml0ZV9maXJfY29lZnMo ZGlzcGMsIGh3X3BsYW5lLAorCQkJCQkJICBESVNQQ19WSURfRklSX0NPRUZfVkVSVF9VViwKKwkJ CQkJCSAgc3AtPnljb2VmX3V2KTsKKwkJfQorCX0KKworCWlmIChzcC0+c2NhbGVfeCkgeworCQlk aXNwY192aWRfd3JpdGUoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURfRklSSCwgc3AtPmZpcl94 aW5jKTsKKwkJZGlzcGNfdmlkX3dyaXRlX2Zpcl9jb2VmcyhkaXNwYywgaHdfcGxhbmUsCisJCQkJ CSAgRElTUENfVklEX0ZJUl9DT0VGX0hPUklaLAorCQkJCQkgIHNwLT54Y29lZik7CisJfQorCisJ aWYgKHNwLT5zY2FsZV95KSB7CisJCWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUsIERJ U1BDX1ZJRF9GSVJWLCBzcC0+ZmlyX3lpbmMpOworCQlkaXNwY192aWRfd3JpdGVfZmlyX2NvZWZz KGRpc3BjLCBod19wbGFuZSwKKwkJCQkJICBESVNQQ19WSURfRklSX0NPRUZfVkVSVCwgc3AtPnlj b2VmKTsKKwl9Cit9CisKKy8qIE9USEVSICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXUz MiBmb3VyY2M7CisJdTggZHNzX2NvZGU7Cit9IGRpc3BjX2NvbG9yX2Zvcm1hdHNbXSA9IHsKKwl7 IERSTV9GT1JNQVRfQVJHQjQ0NDQsIDB4MCwgfSwKKwl7IERSTV9GT1JNQVRfQUJHUjQ0NDQsIDB4 MSwgfSwKKwl7IERSTV9GT1JNQVRfUkdCQTQ0NDQsIDB4MiwgfSwKKworCXsgRFJNX0ZPUk1BVF9S R0I1NjUsIDB4MywgfSwKKwl7IERSTV9GT1JNQVRfQkdSNTY1LCAweDQsIH0sCisKKwl7IERSTV9G T1JNQVRfQVJHQjE1NTUsIDB4NSwgfSwKKwl7IERSTV9GT1JNQVRfQUJHUjE1NTUsIDB4NiwgfSwK KworCXsgRFJNX0ZPUk1BVF9BUkdCODg4OCwgMHg3LCB9LAorCXsgRFJNX0ZPUk1BVF9BQkdSODg4 OCwgMHg4LCB9LAorCXsgRFJNX0ZPUk1BVF9SR0JBODg4OCwgMHg5LCB9LAorCXsgRFJNX0ZPUk1B VF9CR1JBODg4OCwgMHhhLCB9LAorCisJeyBEUk1fRk9STUFUX1JHQjg4OCwgMHhiLCB9LAorCXsg RFJNX0ZPUk1BVF9CR1I4ODgsIDB4YywgfSwKKworCXsgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwg MHhlLCB9LAorCXsgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCwgMHhmLCB9LAorCisJeyBEUk1fRk9S TUFUX1hSR0I0NDQ0LCAweDIwLCB9LAorCXsgRFJNX0ZPUk1BVF9YQkdSNDQ0NCwgMHgyMSwgfSwK Kwl7IERSTV9GT1JNQVRfUkdCWDQ0NDQsIDB4MjIsIH0sCisKKwl7IERSTV9GT1JNQVRfQVJHQjE1 NTUsIDB4MjUsIH0sCisJeyBEUk1fRk9STUFUX0FCR1IxNTU1LCAweDI2LCB9LAorCisJeyBEUk1f Rk9STUFUX1hSR0I4ODg4LCAweDI3LCB9LAorCXsgRFJNX0ZPUk1BVF9YQkdSODg4OCwgMHgyOCwg fSwKKwl7IERSTV9GT1JNQVRfUkdCWDg4ODgsIDB4MjksIH0sCisJeyBEUk1fRk9STUFUX0JHUlg4 ODg4LCAweDJhLCB9LAorCisJeyBEUk1fRk9STUFUX1hSR0IyMTAxMDEwLCAweDJlLCB9LAorCXsg RFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwgMHgyZiwgfSwKKworCXsgRFJNX0ZPUk1BVF9ZVVlWLCAw eDNlLCB9LAorCXsgRFJNX0ZPUk1BVF9VWVZZLCAweDNmLCB9LAorCisJeyBEUk1fRk9STUFUX05W MTIsIDB4M2QsIH0sCit9OworCitzdGF0aWMgdm9pZCBkaXNwY19wbGFuZV9zZXRfcGl4ZWxfZm9y bWF0KHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkgdTMyIGh3X3BsYW5lLCB1MzIg Zm91cmNjKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoZGlzcGNfY29sb3JfZm9ybWF0cyk7ICsraSkgeworCQlpZiAoZGlzcGNfY29sb3JfZm9ybWF0 c1tpXS5mb3VyY2MgPT0gZm91cmNjKSB7CisJCQlWSURfUkVHX0ZMRF9NT0QoZGlzcGMsIGh3X3Bs YW5lLCBESVNQQ19WSURfQVRUUklCVVRFUywKKwkJCQkJZGlzcGNfY29sb3JfZm9ybWF0c1tpXS5k c3NfY29kZSwKKwkJCQkJNiwgMSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlXQVJOX09OKDEp OworfQorCitjb25zdCB1MzIgKmRpc3BjX3BsYW5lX2Zvcm1hdHMoc3RydWN0IGRpc3BjX2Rldmlj ZSAqZGlzcGMsIHVuc2lnbmVkIGludCAqbGVuKQoreworCVdBUk5fT04oIWRpc3BjLT5mb3VyY2Nz KTsKKworCSpsZW4gPSBkaXNwYy0+bnVtX2ZvdXJjY3M7CisKKwlyZXR1cm4gZGlzcGMtPmZvdXJj Y3M7Cit9CisKK3N0YXRpYyBzMzIgcGl4aW5jKGludCBwaXhlbHMsIHU4IHBzKQoreworCWlmIChw aXhlbHMgPT0gMSkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAocGl4ZWxzID4gMSkKKwkJcmV0dXJu IDEgKyAocGl4ZWxzIC0gMSkgKiBwczsKKwllbHNlIGlmIChwaXhlbHMgPCAwKQorCQlyZXR1cm4g MSAtICgtcGl4ZWxzICsgMSkgKiBwczsKKworCVdBUk5fT04oMSk7CisJcmV0dXJuIDA7Cit9CisK K2ludCBkaXNwY19wbGFuZV9jaGVjayhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywgdTMyIGh3 X3BsYW5lLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwKKwkJ ICAgICAgdTMyIGh3X3ZpZGVvcG9ydCkKK3sKKwlib29sIGxpdGUgPSBkaXNwYy0+ZmVhdC0+dmlk X2xpdGVbaHdfcGxhbmVdOworCXUzMiBmb3VyY2MgPSBzdGF0ZS0+ZmItPmZvcm1hdC0+Zm9ybWF0 OworCWJvb2wgbmVlZF9zY2FsaW5nID0gc3RhdGUtPnNyY193ID4+IDE2ICE9IHN0YXRlLT5jcnRj X3cgfHwKKwkJc3RhdGUtPnNyY19oID4+IDE2ICE9IHN0YXRlLT5jcnRjX2g7CisJc3RydWN0IGRp c3BjX3NjYWxpbmdfcGFyYW1zIHNjYWxpbmc7CisJaW50IHJldDsKKworCWlmIChkaXNwY19mb3Vy Y2NfaXNfeXV2KGZvdXJjYykpIHsKKwkJaWYgKCFkaXNwY19maW5kX2NzYyhzdGF0ZS0+Y29sb3Jf ZW5jb2RpbmcsCisJCQkJICAgIHN0YXRlLT5jb2xvcl9yYW5nZSkpIHsKKwkJCWRldl9kYmcoZGlz cGMtPmRldiwKKwkJCQkiJXM6IFVuc3VwcG9ydGVkIENTQyAoJXUsJXUpIGZvciBIVyBwbGFuZSAl dVxuIiwKKwkJCQlfX2Z1bmNfXywgc3RhdGUtPmNvbG9yX2VuY29kaW5nLAorCQkJCXN0YXRlLT5j b2xvcl9yYW5nZSwgaHdfcGxhbmUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlp ZiAobmVlZF9zY2FsaW5nKSB7CisJCWlmIChsaXRlKSB7CisJCQlkZXZfZGJnKGRpc3BjLT5kZXYs CisJCQkJIiVzOiBMaXRlIHBsYW5lICV1IGNhbid0IHNjYWxlICV1eCV1IT0ldXgldVxuIiwKKwkJ CQlfX2Z1bmNfXywgaHdfcGxhbmUsCisJCQkJc3RhdGUtPnNyY193ID4+IDE2LCBzdGF0ZS0+c3Jj X2ggPj4gMTYsCisJCQkJc3RhdGUtPmNydGNfdywgc3RhdGUtPmNydGNfaCk7CisJCQlyZXR1cm4g LUVJTlZBTDsKKwkJfQorCQlyZXQgPSBkaXNwY192aWRfY2FsY19zY2FsaW5nKGRpc3BjLCBzdGF0 ZSwgJnNjYWxpbmcsIGZhbHNlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYworZG1hX2FkZHJfdCBkaXNwY19wbGFuZV9zdGF0ZV9wYWRk cihjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpn ZW07CisJdTMyIHggPSBzdGF0ZS0+c3JjX3ggPj4gMTY7CisJdTMyIHkgPSBzdGF0ZS0+c3JjX3kg Pj4gMTY7CisKKwlnZW0gPSBkcm1fZmJfY21hX2dldF9nZW1fb2JqKHN0YXRlLT5mYiwgMCk7CisK KwlyZXR1cm4gZ2VtLT5wYWRkciArIGZiLT5vZmZzZXRzWzBdICsgeCAqIGZiLT5mb3JtYXQtPmNw cFswXSArCisJCXkgKiBmYi0+cGl0Y2hlc1swXTsKK30KKworc3RhdGljCitkbWFfYWRkcl90IGRp c3BjX3BsYW5lX3N0YXRlX3BfdXZfYWRkcihjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpz dGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsKKwlzdHJ1 Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpnZW07CisJdTMyIHggPSBzdGF0ZS0+c3JjX3ggPj4gMTY7 CisJdTMyIHkgPSBzdGF0ZS0+c3JjX3kgPj4gMTY7CisKKwlpZiAoV0FSTl9PTihzdGF0ZS0+ZmIt PmZvcm1hdC0+bnVtX3BsYW5lcyAhPSAyKSkKKwkJcmV0dXJuIDA7CisKKwlnZW0gPSBkcm1fZmJf Y21hX2dldF9nZW1fb2JqKGZiLCAxKTsKKworCXJldHVybiBnZW0tPnBhZGRyICsgZmItPm9mZnNl dHNbMV0gKworCQkoeCAqIGZiLT5mb3JtYXQtPmNwcFsxXSAvIGZiLT5mb3JtYXQtPmhzdWIpICsK KwkJKHkgKiBmYi0+cGl0Y2hlc1sxXSAvIGZiLT5mb3JtYXQtPnZzdWIpOworfQorCitpbnQgZGlz cGNfcGxhbmVfc2V0dXAoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBod19wbGFuZSwK KwkJICAgICAgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsCisJCSAgICAgIHUz MiBod192aWRlb3BvcnQpCit7CisJYm9vbCBsaXRlID0gZGlzcGMtPmZlYXQtPnZpZF9saXRlW2h3 X3BsYW5lXTsKKwl1MzIgZm91cmNjID0gc3RhdGUtPmZiLT5mb3JtYXQtPmZvcm1hdDsKKwl1MTYg Y3BwID0gc3RhdGUtPmZiLT5mb3JtYXQtPmNwcFswXTsKKwl1MzIgZmJfd2lkdGggPSBzdGF0ZS0+ ZmItPnBpdGNoZXNbMF0gLyBjcHA7CisJZG1hX2FkZHJfdCBwYWRkciA9IGRpc3BjX3BsYW5lX3N0 YXRlX3BhZGRyKHN0YXRlKTsKKwlzdHJ1Y3QgZGlzcGNfc2NhbGluZ19wYXJhbXMgc2NhbGU7CisK KwlkaXNwY192aWRfY2FsY19zY2FsaW5nKGRpc3BjLCBzdGF0ZSwgJnNjYWxlLCBsaXRlKTsKKwor CWRpc3BjX3BsYW5lX3NldF9waXhlbF9mb3JtYXQoZGlzcGMsIGh3X3BsYW5lLCBmb3VyY2MpOwor CisJZGlzcGNfdmlkX3dyaXRlKGRpc3BjLCBod19wbGFuZSwgRElTUENfVklEX0JBXzAsIHBhZGRy ICYgMHhmZmZmZmZmZik7CisJZGlzcGNfdmlkX3dyaXRlKGRpc3BjLCBod19wbGFuZSwgRElTUENf VklEX0JBX0VYVF8wLCAodTY0KXBhZGRyID4+IDMyKTsKKwlkaXNwY192aWRfd3JpdGUoZGlzcGMs IGh3X3BsYW5lLCBESVNQQ19WSURfQkFfMSwgcGFkZHIgJiAweGZmZmZmZmZmKTsKKwlkaXNwY192 aWRfd3JpdGUoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURfQkFfRVhUXzEsICh1NjQpcGFkZHIg Pj4gMzIpOworCisJZGlzcGNfdmlkX3dyaXRlKGRpc3BjLCBod19wbGFuZSwgRElTUENfVklEX1BJ Q1RVUkVfU0laRSwKKwkJCShzY2FsZS5pbl93IC0gMSkgfCAoKHNjYWxlLmluX2ggLSAxKSA8PCAx NikpOworCisJLyogRm9yIFlVVjQyMiBmb3JtYXQgd2UgdXNlIHRoZSBtYWNyb3BpeGVsIHNpemUg Zm9yIHBpeGVsIGluYyAqLworCWlmIChmb3VyY2MgPT0gRFJNX0ZPUk1BVF9ZVVlWIHx8IGZvdXJj YyA9PSBEUk1fRk9STUFUX1VZVlkpCisJCWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUs IERJU1BDX1ZJRF9QSVhFTF9JTkMsCisJCQkJcGl4aW5jKHNjYWxlLnhpbmMsIGNwcCAqIDIpKTsK KwllbHNlCisJCWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUsIERJU1BDX1ZJRF9QSVhF TF9JTkMsCisJCQkJcGl4aW5jKHNjYWxlLnhpbmMsIGNwcCkpOworCisJZGlzcGNfdmlkX3dyaXRl KGRpc3BjLCBod19wbGFuZSwgRElTUENfVklEX1JPV19JTkMsCisJCQlwaXhpbmMoMSArIChzY2Fs ZS55aW5jICogZmJfd2lkdGggLQorCQkJCSAgICBzY2FsZS54aW5jICogc2NhbGUuaW5fdyksCisJ CQkgICAgICAgY3BwKSk7CisKKwlpZiAoc3RhdGUtPmZiLT5mb3JtYXQtPm51bV9wbGFuZXMgPT0g MikgeworCQl1MTYgY3BwX3V2ID0gc3RhdGUtPmZiLT5mb3JtYXQtPmNwcFsxXTsKKwkJdTMyIGZi X3dpZHRoX3V2ID0gc3RhdGUtPmZiLT5waXRjaGVzWzFdIC8gY3BwX3V2OworCQlkbWFfYWRkcl90 IHBfdXZfYWRkciA9IGRpc3BjX3BsYW5lX3N0YXRlX3BfdXZfYWRkcihzdGF0ZSk7CisKKwkJZGlz cGNfdmlkX3dyaXRlKGRpc3BjLCBod19wbGFuZSwKKwkJCQlESVNQQ19WSURfQkFfVVZfMCwgcF91 dl9hZGRyICYgMHhmZmZmZmZmZik7CisJCWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUs CisJCQkJRElTUENfVklEX0JBX1VWX0VYVF8wLCAodTY0KXBfdXZfYWRkciA+PiAzMik7CisJCWRp c3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUsCisJCQkJRElTUENfVklEX0JBX1VWXzEsIHBf dXZfYWRkciAmIDB4ZmZmZmZmZmYpOworCQlkaXNwY192aWRfd3JpdGUoZGlzcGMsIGh3X3BsYW5l LAorCQkJCURJU1BDX1ZJRF9CQV9VVl9FWFRfMSwgKHU2NClwX3V2X2FkZHIgPj4gMzIpOworCisJ CWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUsIERJU1BDX1ZJRF9ST1dfSU5DX1VWLAor CQkJCXBpeGluYygxICsgKHNjYWxlLnlpbmMgKiBmYl93aWR0aF91diAtCisJCQkJCSAgICBzY2Fs ZS54aW5jICogc2NhbGUuaW5fd191diksCisJCQkJICAgICAgIGNwcF91dikpOworCX0KKworCWlm ICghbGl0ZSkgeworCQlkaXNwY192aWRfd3JpdGUoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURf U0laRSwKKwkJCQkoc3RhdGUtPmNydGNfdyAtIDEpIHwKKwkJCQkoKHN0YXRlLT5jcnRjX2ggLSAx KSA8PCAxNikpOworCisJCWRpc3BjX3ZpZF9zZXRfc2NhbGluZyhkaXNwYywgaHdfcGxhbmUsICZz Y2FsZSwgZm91cmNjKTsKKwl9CisKKwkvKiBlbmFibGUgWVVWLT5SR0IgY29sb3IgY29udmVyc2lv biAqLworCWlmIChkaXNwY19mb3VyY2NfaXNfeXV2KGZvdXJjYykpIHsKKwkJZGlzcGNfdmlkX2Nz Y19zZXR1cChkaXNwYywgaHdfcGxhbmUsIHN0YXRlKTsKKwkJZGlzcGNfdmlkX2NzY19lbmFibGUo ZGlzcGMsIGh3X3BsYW5lLCB0cnVlKTsKKwl9IGVsc2UgeworCQlkaXNwY192aWRfY3NjX2VuYWJs ZShkaXNwYywgaHdfcGxhbmUsIGZhbHNlKTsKKwl9CisKKwlkaXNwY192aWRfd3JpdGUoZGlzcGMs IGh3X3BsYW5lLCBESVNQQ19WSURfR0xPQkFMX0FMUEhBLAorCQkJMHhGRiAmIChzdGF0ZS0+YWxw aGEgPj4gOCkpOworCisJaWYgKHN0YXRlLT5waXhlbF9ibGVuZF9tb2RlID09IERSTV9NT0RFX0JM RU5EX1BSRU1VTFRJKQorCQlWSURfUkVHX0ZMRF9NT0QoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19W SURfQVRUUklCVVRFUywgMSwgMjgsIDI4KTsKKwllbHNlCisJCVZJRF9SRUdfRkxEX01PRChkaXNw YywgaHdfcGxhbmUsIERJU1BDX1ZJRF9BVFRSSUJVVEVTLCAwLCAyOCwgMjgpOworCisJZGlzcGNf b3ZyX3NldF9wbGFuZShkaXNwYywgaHdfcGxhbmUsIGh3X3ZpZGVvcG9ydCwKKwkJCSAgICBzdGF0 ZS0+Y3J0Y194LCBzdGF0ZS0+Y3J0Y195LAorCQkJICAgIHN0YXRlLT5ub3JtYWxpemVkX3pwb3Mp OworCisJZGlzcGMtPnBsYW5lX2RhdGFbaHdfcGxhbmVdLnpvcmRlciA9IHN0YXRlLT5ub3JtYWxp emVkX3pwb3M7CisJZGlzcGMtPnBsYW5lX2RhdGFbaHdfcGxhbmVdLmh3X3ZpZGVvcG9ydCA9IGh3 X3ZpZGVvcG9ydDsKKworCXJldHVybiAwOworfQorCitpbnQgZGlzcGNfcGxhbmVfZW5hYmxlKHN0 cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfcGxhbmUsIGJvb2wgZW5hYmxlKQorewor CWRpc3BjX292cl9lbmFibGVfcGxhbmUoZGlzcGMsIGRpc3BjLT5wbGFuZV9kYXRhW2h3X3BsYW5l XS5od192aWRlb3BvcnQsCisJCQkgICAgICAgZGlzcGMtPnBsYW5lX2RhdGFbaHdfcGxhbmVdLnpv cmRlciwgZW5hYmxlKTsKKworCVZJRF9SRUdfRkxEX01PRChkaXNwYywgaHdfcGxhbmUsIERJU1BD X1ZJRF9BVFRSSUJVVEVTLCAhIWVuYWJsZSwgMCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHUzMiBkaXNwY192aWRfZ2V0X2ZpZm9fc2l6ZShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNw YywgdTMyIGh3X3BsYW5lKQoreworCXJldHVybiBWSURfUkVHX0dFVChkaXNwYywgaHdfcGxhbmUs IERJU1BDX1ZJRF9CVUZfU0laRV9TVEFUVVMsIDE1LCAwKTsKK30KKworc3RhdGljIHZvaWQgZGlz cGNfdmlkX3NldF9tZmxhZ190aHJlc2hvbGQoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJ CQkJCSAgdTMyIGh3X3BsYW5lLCB1MzIgbG93LCB1MzIgaGlnaCkKK3sKKwlkaXNwY192aWRfd3Jp dGUoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURfTUZMQUdfVEhSRVNIT0xELAorCQkJRkxEX1ZB TChoaWdoLCAzMSwgMTYpIHwgRkxEX1ZBTChsb3csIDE1LCAwKSk7Cit9CisKK3N0YXRpYyB2b2lk IGRpc3BjX3ZpZF9zZXRfYnVmX3RocmVzaG9sZChzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywK KwkJCQkJdTMyIGh3X3BsYW5lLCB1MzIgbG93LCB1MzIgaGlnaCkKK3sKKwlkaXNwY192aWRfd3Jp dGUoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURfQlVGX1RIUkVTSE9MRCwKKwkJCUZMRF9WQUwo aGlnaCwgMzEsIDE2KSB8IEZMRF9WQUwobG93LCAxNSwgMCkpOworfQorCitzdGF0aWMgdm9pZCBk aXNwY19rMmdfcGxhbmVfaW5pdChzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYykKK3sKKwl1bnNp Z25lZCBpbnQgaHdfcGxhbmU7CisKKwlkZXZfZGJnKGRpc3BjLT5kZXYsICIlcygpXG4iLCBfX2Z1 bmNfXyk7CisKKwkvKiBNRkxBR19DVFJMID0gRU5BQkxFRCAqLworCVJFR19GTERfTU9EKGRpc3Bj LCBESVNQQ19HTE9CQUxfTUZMQUdfQVRUUklCVVRFLCAyLCAxLCAwKTsKKwkvKiBNRkxBR19TVEFS VCA9IE1GTEFHTk9STUFMU1RBUlRNT0RFICovCisJUkVHX0ZMRF9NT0QoZGlzcGMsIERJU1BDX0dM T0JBTF9NRkxBR19BVFRSSUJVVEUsIDAsIDYsIDYpOworCisJZm9yIChod19wbGFuZSA9IDA7IGh3 X3BsYW5lIDwgZGlzcGMtPmZlYXQtPm51bV9wbGFuZXM7IGh3X3BsYW5lKyspIHsKKwkJdTMyIHNp emUgPSBkaXNwY192aWRfZ2V0X2ZpZm9fc2l6ZShkaXNwYywgaHdfcGxhbmUpOworCQl1MzIgdGhy X2xvdywgdGhyX2hpZ2g7CisJCXUzMiBtZmxhZ19sb3csIG1mbGFnX2hpZ2g7CisJCXUzMiBwcmVs b2FkOworCisJCXRocl9oaWdoID0gc2l6ZSAtIDE7CisJCXRocl9sb3cgPSBzaXplIC8gMjsKKwor CQltZmxhZ19oaWdoID0gc2l6ZSAqIDIgLyAzOworCQltZmxhZ19sb3cgPSBzaXplIC8gMzsKKwor CQlwcmVsb2FkID0gdGhyX2xvdzsKKworCQlkZXZfZGJnKGRpc3BjLT5kZXYsCisJCQkiJXM6IGJ1 ZnNpemUgJXUsIGJ1Zl90aHJlc2hvbGQgJXUvJXUsIG1mbGFnIHRocmVzaG9sZCAldS8ldSBwcmVs b2FkICV1XG4iLAorCQkJZGlzcGMtPmZlYXQtPnZpZF9uYW1lW2h3X3BsYW5lXSwKKwkJCXNpemUs CisJCQl0aHJfaGlnaCwgdGhyX2xvdywKKwkJCW1mbGFnX2hpZ2gsIG1mbGFnX2xvdywKKwkJCXBy ZWxvYWQpOworCisJCWRpc3BjX3ZpZF9zZXRfYnVmX3RocmVzaG9sZChkaXNwYywgaHdfcGxhbmUs CisJCQkJCSAgICB0aHJfbG93LCB0aHJfaGlnaCk7CisJCWRpc3BjX3ZpZF9zZXRfbWZsYWdfdGhy ZXNob2xkKGRpc3BjLCBod19wbGFuZSwKKwkJCQkJICAgICAgbWZsYWdfbG93LCBtZmxhZ19oaWdo KTsKKworCQlkaXNwY192aWRfd3JpdGUoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURfUFJFTE9B RCwgcHJlbG9hZCk7CisKKwkJLyogUHJlZmVjaCB1cCB0byBQUkVMT0FEIHZhbHVlICovCisJCVZJ RF9SRUdfRkxEX01PRChkaXNwYywgaHdfcGxhbmUsIERJU1BDX1ZJRF9BVFRSSUJVVEVTLCAwLCAx OSwgMTkpOworCX0KK30KKworc3RhdGljIHZvaWQgZGlzcGNfazNfcGxhbmVfaW5pdChzdHJ1Y3Qg ZGlzcGNfZGV2aWNlICpkaXNwYykKK3sKKwl1bnNpZ25lZCBpbnQgaHdfcGxhbmU7CisJdTMyIGNi YV9sb19wcmkgPSAxOworCXUzMiBjYmFfaGlfcHJpID0gMDsKKworCWRldl9kYmcoZGlzcGMtPmRl diwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCVJFR19GTERfTU9EKGRpc3BjLCBEU1NfQ0JBX0NG RywgY2JhX2xvX3ByaSwgMiwgMCk7CisJUkVHX0ZMRF9NT0QoZGlzcGMsIERTU19DQkFfQ0ZHLCBj YmFfaGlfcHJpLCA1LCAzKTsKKworCS8qIE1GTEFHX0NUUkwgPSBFTkFCTEVEICovCisJUkVHX0ZM RF9NT0QoZGlzcGMsIERJU1BDX0dMT0JBTF9NRkxBR19BVFRSSUJVVEUsIDIsIDEsIDApOworCS8q IE1GTEFHX1NUQVJUID0gTUZMQUdOT1JNQUxTVEFSVE1PREUgKi8KKwlSRUdfRkxEX01PRChkaXNw YywgRElTUENfR0xPQkFMX01GTEFHX0FUVFJJQlVURSwgMCwgNiwgNik7CisKKwlmb3IgKGh3X3Bs YW5lID0gMDsgaHdfcGxhbmUgPCBkaXNwYy0+ZmVhdC0+bnVtX3BsYW5lczsgaHdfcGxhbmUrKykg eworCQl1MzIgc2l6ZSA9IGRpc3BjX3ZpZF9nZXRfZmlmb19zaXplKGRpc3BjLCBod19wbGFuZSk7 CisJCXUzMiB0aHJfbG93LCB0aHJfaGlnaDsKKwkJdTMyIG1mbGFnX2xvdywgbWZsYWdfaGlnaDsK KwkJdTMyIHByZWxvYWQ7CisKKwkJdGhyX2hpZ2ggPSBzaXplIC0gMTsKKwkJdGhyX2xvdyA9IHNp emUgLyAyOworCisJCW1mbGFnX2hpZ2ggPSBzaXplICogMiAvIDM7CisJCW1mbGFnX2xvdyA9IHNp emUgLyAzOworCisJCXByZWxvYWQgPSB0aHJfbG93OworCisJCWRldl9kYmcoZGlzcGMtPmRldiwK KwkJCSIlczogYnVmc2l6ZSAldSwgYnVmX3RocmVzaG9sZCAldS8ldSwgbWZsYWcgdGhyZXNob2xk ICV1LyV1IHByZWxvYWQgJXVcbiIsCisJCQlkaXNwYy0+ZmVhdC0+dmlkX25hbWVbaHdfcGxhbmVd LAorCQkJc2l6ZSwKKwkJCXRocl9oaWdoLCB0aHJfbG93LAorCQkJbWZsYWdfaGlnaCwgbWZsYWdf bG93LAorCQkJcHJlbG9hZCk7CisKKwkJZGlzcGNfdmlkX3NldF9idWZfdGhyZXNob2xkKGRpc3Bj LCBod19wbGFuZSwKKwkJCQkJICAgIHRocl9sb3csIHRocl9oaWdoKTsKKwkJZGlzcGNfdmlkX3Nl dF9tZmxhZ190aHJlc2hvbGQoZGlzcGMsIGh3X3BsYW5lLAorCQkJCQkgICAgICBtZmxhZ19sb3cs IG1mbGFnX2hpZ2gpOworCisJCWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUsIERJU1BD X1ZJRF9QUkVMT0FELCBwcmVsb2FkKTsKKworCQkvKiBQcmVmZWNoIHVwIHRvIFBSRUxPQUQgdmFs dWUgKi8KKwkJVklEX1JFR19GTERfTU9EKGRpc3BjLCBod19wbGFuZSwgRElTUENfVklEX0FUVFJJ QlVURVMsIDAsIDE5LCAxOSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkaXNwY19wbGFuZV9pbml0 KHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjKQoreworCXN3aXRjaCAoZGlzcGMtPmZlYXQtPnN1 YnJldikgeworCWNhc2UgRElTUENfSzJHOgorCQlkaXNwY19rMmdfcGxhbmVfaW5pdChkaXNwYyk7 CisJCWJyZWFrOworCWNhc2UgRElTUENfQU02NVg6CisJY2FzZSBESVNQQ19KNzIxRToKKwkJZGlz cGNfazNfcGxhbmVfaW5pdChkaXNwYyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04o MSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkaXNwY192cF9pbml0KHN0cnVjdCBkaXNwY19kZXZp Y2UgKmRpc3BjKQoreworCXVuc2lnbmVkIGludCBpOworCisJZGV2X2RiZyhkaXNwYy0+ZGV2LCAi JXMoKVxuIiwgX19mdW5jX18pOworCisJLyogRW5hYmxlIHRoZSBnYW1tYSBTaGFkb3cgYml0LWZp ZWxkIGZvciBhbGwgVlBzKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGlzcGMtPmZlYXQtPm51bV92cHM7 IGkrKykKKwkJVlBfUkVHX0ZMRF9NT0QoZGlzcGMsIGksIERJU1BDX1ZQX0NPTkZJRywgMSwgMiwg Mik7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjX2luaXRpYWxfY29uZmlnKHN0cnVjdCBkaXNwY19k ZXZpY2UgKmRpc3BjKQoreworCWRpc3BjX3BsYW5lX2luaXQoZGlzcGMpOworCWRpc3BjX3ZwX2lu aXQoZGlzcGMpOworCisJLyogTm90ZTogSGFyZGNvZGVkIERQSSByb3V0aW5nIG9uIEo3MjFFIGZv ciBub3cgKi8KKwlpZiAoZGlzcGMtPmZlYXQtPnN1YnJldiA9PSBESVNQQ19KNzIxRSkgeworCQlk aXNwY193cml0ZShkaXNwYywgRElTUENfQ09OTkVDVElPTlMsCisJCQkgICAgRkxEX1ZBTCgyLCAz LCAwKSB8CQkvKiBWUDEgdG8gRFBJMCAqLworCQkJICAgIEZMRF9WQUwoOCwgNywgNCkJCS8qIFZQ MyB0byBEUEkxICovCisJCQkpOworCX0KK30KKworc3RhdGljIHZvaWQgZGlzcGNfazJnX3ZwX3dy aXRlX2dhbW1hX3RhYmxlKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkgICB1MzIg aHdfdmlkZW9wb3J0KQoreworCXUzMiAqdGFibGUgPSBkaXNwYy0+dnBfZGF0YVtod192aWRlb3Bv cnRdLmdhbW1hX3RhYmxlOworCXUzMiBod2xlbiA9IGRpc3BjLT5mZWF0LT52cF9mZWF0LmNvbG9y LmdhbW1hX3NpemU7CisJdW5zaWduZWQgaW50IGk7CisKKwlkZXZfZGJnKGRpc3BjLT5kZXYsICIl czogaHdfdmlkZW9wb3J0ICVkXG4iLCBfX2Z1bmNfXywgaHdfdmlkZW9wb3J0KTsKKworCWlmIChX QVJOX09OKGRpc3BjLT5mZWF0LT52cF9mZWF0LmNvbG9yLmdhbW1hX3R5cGUgIT0gVElEU1NfR0FN TUFfOEJJVCkpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBod2xlbjsgKytpKSB7CisJ CXUzMiB2ID0gdGFibGVbaV07CisKKwkJdiB8PSBpIDw8IDI0OworCisJCWRpc3BjX3ZwX3dyaXRl KGRpc3BjLCBod192aWRlb3BvcnQsIERJU1BDX1ZQX0syR19HQU1NQV9UQUJMRSwKKwkJCSAgICAg ICB2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjX2FtNjV4X3ZwX3dyaXRlX2dhbW1hX3Rh YmxlKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkgICAgIHUzMiBod192aWRlb3Bv cnQpCit7CisJdTMyICp0YWJsZSA9IGRpc3BjLT52cF9kYXRhW2h3X3ZpZGVvcG9ydF0uZ2FtbWFf dGFibGU7CisJdTMyIGh3bGVuID0gZGlzcGMtPmZlYXQtPnZwX2ZlYXQuY29sb3IuZ2FtbWFfc2l6 ZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWRldl9kYmcoZGlzcGMtPmRldiwgIiVzOiBod192aWRl b3BvcnQgJWRcbiIsIF9fZnVuY19fLCBod192aWRlb3BvcnQpOworCisJaWYgKFdBUk5fT04oZGlz cGMtPmZlYXQtPnZwX2ZlYXQuY29sb3IuZ2FtbWFfdHlwZSAhPSBUSURTU19HQU1NQV84QklUKSkK KwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGh3bGVuOyArK2kpIHsKKwkJdTMyIHYgPSB0 YWJsZVtpXTsKKworCQl2IHw9IGkgPDwgMjQ7CisKKwkJZGlzcGNfdnBfd3JpdGUoZGlzcGMsIGh3 X3ZpZGVvcG9ydCwgRElTUENfVlBfR0FNTUFfVEFCTEUsIHYpOworCX0KK30KKworc3RhdGljIHZv aWQgZGlzcGNfajcyMWVfdnBfd3JpdGVfZ2FtbWFfdGFibGUoc3RydWN0IGRpc3BjX2RldmljZSAq ZGlzcGMsCisJCQkJCSAgICAgdTMyIGh3X3ZpZGVvcG9ydCkKK3sKKwl1MzIgKnRhYmxlID0gZGlz cGMtPnZwX2RhdGFbaHdfdmlkZW9wb3J0XS5nYW1tYV90YWJsZTsKKwl1MzIgaHdsZW4gPSBkaXNw Yy0+ZmVhdC0+dnBfZmVhdC5jb2xvci5nYW1tYV9zaXplOworCXVuc2lnbmVkIGludCBpOworCisJ ZGV2X2RiZyhkaXNwYy0+ZGV2LCAiJXM6IGh3X3ZpZGVvcG9ydCAlZFxuIiwgX19mdW5jX18sIGh3 X3ZpZGVvcG9ydCk7CisKKwlpZiAoV0FSTl9PTihkaXNwYy0+ZmVhdC0+dnBfZmVhdC5jb2xvci5n YW1tYV90eXBlICE9IFRJRFNTX0dBTU1BXzEwQklUKSkKKwkJcmV0dXJuOworCisJZm9yIChpID0g MDsgaSA8IGh3bGVuOyArK2kpIHsKKwkJdTMyIHYgPSB0YWJsZVtpXTsKKworCQlpZiAoaSA9PSAw KQorCQkJdiB8PSAxIDw8IDMxOworCisJCWRpc3BjX3ZwX3dyaXRlKGRpc3BjLCBod192aWRlb3Bv cnQsIERJU1BDX1ZQX0dBTU1BX1RBQkxFLCB2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRpc3Bj X3ZwX3dyaXRlX2dhbW1hX3RhYmxlKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCSAg ICAgICB1MzIgaHdfdmlkZW9wb3J0KQoreworCXN3aXRjaCAoZGlzcGMtPmZlYXQtPnN1YnJldikg eworCWNhc2UgRElTUENfSzJHOgorCQlkaXNwY19rMmdfdnBfd3JpdGVfZ2FtbWFfdGFibGUoZGlz cGMsIGh3X3ZpZGVvcG9ydCk7CisJCWJyZWFrOworCWNhc2UgRElTUENfQU02NVg6CisJCWRpc3Bj X2FtNjV4X3ZwX3dyaXRlX2dhbW1hX3RhYmxlKGRpc3BjLCBod192aWRlb3BvcnQpOworCQlicmVh azsKKwljYXNlIERJU1BDX0o3MjFFOgorCQlkaXNwY19qNzIxZV92cF93cml0ZV9nYW1tYV90YWJs ZShkaXNwYywgaHdfdmlkZW9wb3J0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigx KTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBkaXNwY19yZXN0b3JlX2dhbW1hX3Rh YmxlcyhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwor CWRldl9kYmcoZGlzcGMtPmRldiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCWZvciAoaSA9IDA7 IGkgPCBkaXNwYy0+ZmVhdC0+bnVtX3ZwczsgaSsrKQorCQlkaXNwY192cF93cml0ZV9nYW1tYV90 YWJsZShkaXNwYywgaSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NvbG9yX2x1dCBk aXNwY192cF9nYW1tYV9kZWZhdWx0X2x1dFtdID0geworCXsgLnJlZCA9IDAsIC5ncmVlbiA9IDAs IC5ibHVlID0gMCwgfSwKKwl7IC5yZWQgPSBVMTZfTUFYLCAuZ3JlZW4gPSBVMTZfTUFYLCAuYmx1 ZSA9IFUxNl9NQVgsIH0sCit9OworCitzdGF0aWMgdm9pZCBkaXNwY192cF9zZXRfZ2FtbWEoc3Ry dWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkgICAgICAgdTMyIGh3X3ZpZGVvcG9ydCwKKwkJ CSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAqbHV0LAorCQkJICAgICAgIHVuc2ln bmVkIGludCBsZW5ndGgpCit7CisJdTMyICp0YWJsZSA9IGRpc3BjLT52cF9kYXRhW2h3X3ZpZGVv cG9ydF0uZ2FtbWFfdGFibGU7CisJdTMyIGh3bGVuID0gZGlzcGMtPmZlYXQtPnZwX2ZlYXQuY29s b3IuZ2FtbWFfc2l6ZTsKKwl1MzIgaHdiaXRzOworCXVuc2lnbmVkIGludCBpOworCisJZGV2X2Ri ZyhkaXNwYy0+ZGV2LCAiJXM6IGh3X3ZpZGVvcG9ydCAlZCwgbHV0IGxlbiAldSwgaHcgbGVuICV1 XG4iLAorCQlfX2Z1bmNfXywgaHdfdmlkZW9wb3J0LCBsZW5ndGgsIGh3bGVuKTsKKworCWlmIChk aXNwYy0+ZmVhdC0+dnBfZmVhdC5jb2xvci5nYW1tYV90eXBlID09IFRJRFNTX0dBTU1BXzEwQklU KQorCQlod2JpdHMgPSAxMDsKKwllbHNlCisJCWh3Yml0cyA9IDg7CisKKwlpZiAobHV0ID09IE5V TEwgfHwgbGVuZ3RoIDwgMikgeworCQlsdXQgPSBkaXNwY192cF9nYW1tYV9kZWZhdWx0X2x1dDsK KwkJbGVuZ3RoID0gQVJSQVlfU0laRShkaXNwY192cF9nYW1tYV9kZWZhdWx0X2x1dCk7CisJfQor CisJZm9yIChpID0gMDsgaSA8IGxlbmd0aCAtIDE7ICsraSkgeworCQl1bnNpZ25lZCBpbnQgZmly c3QgPSBpICogKGh3bGVuIC0gMSkgLyAobGVuZ3RoIC0gMSk7CisJCXVuc2lnbmVkIGludCBsYXN0 ID0gKGkgKyAxKSAqIChod2xlbiAtIDEpIC8gKGxlbmd0aCAtIDEpOworCQl1bnNpZ25lZCBpbnQg dyA9IGxhc3QgLSBmaXJzdDsKKwkJdTE2IHIsIGcsIGI7CisJCXVuc2lnbmVkIGludCBqOworCisJ CWlmICh3ID09IDApCisJCQljb250aW51ZTsKKworCQlmb3IgKGogPSAwOyBqIDw9IHc7IGorKykg eworCQkJciA9IChsdXRbaV0ucmVkICogKHcgLSBqKSArIGx1dFtpICsgMV0ucmVkICogaikgLyB3 OworCQkJZyA9IChsdXRbaV0uZ3JlZW4gKiAodyAtIGopICsgbHV0W2kgKyAxXS5ncmVlbiAqIGop IC8gdzsKKwkJCWIgPSAobHV0W2ldLmJsdWUgKiAodyAtIGopICsgbHV0W2kgKyAxXS5ibHVlICog aikgLyB3OworCisJCQlyID4+PSAxNiAtIGh3Yml0czsKKwkJCWcgPj49IDE2IC0gaHdiaXRzOwor CQkJYiA+Pj0gMTYgLSBod2JpdHM7CisKKwkJCXRhYmxlW2ZpcnN0ICsgal0gPSAociA8PCAoaHdi aXRzICogMikpIHwKKwkJCQkoZyA8PCBod2JpdHMpIHwgYjsKKwkJfQorCX0KKworCWlmIChkaXNw Yy0+aXNfZW5hYmxlZCkKKwkJZGlzcGNfdnBfd3JpdGVfZ2FtbWFfdGFibGUoZGlzcGMsIGh3X3Zp ZGVvcG9ydCk7Cit9CisKK3N0YXRpYyBzMTYgZGlzcGNfUzMxXzMyX3RvX3MyXzgoczY0IGNvZWYp Cit7CisJdTY0IHNpZ25fYml0ID0gMVVMTCA8PCA2MzsKKwl1NjQgY2JpdHMgPSAodTY0KSBjb2Vm OworCXMxNiByZXQgPSBjbGFtcF92YWwoKChjYml0cyAmIH5zaWduX2JpdCkgPj4gMjQpLCAwLCAw eDFGRik7CisKKwlpZiAoY2JpdHMgJiBzaWduX2JpdCkKKwkJcmV0ID0gLXJldDsKKworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjX2Nwcl9jc2NfZnJvbV9jdG0oY29uc3Qgc3Ry dWN0IGRybV9jb2xvcl9jdG0gKmN0bSwKKwkJCQkgICBzdHJ1Y3QgZGlzcGNfY3NjX2NvZWYgKmNw cikKK3sKKwltZW1zZXQoY3ByLCAwLCBzaXplb2YoKmNwcikpOworCisJY3ByLT50b19yZWd2YWwg PSBkaXNwY19jc2NfY3ByX3JlZ3ZhbDsKKwljcHItPm1bQ1NDX1JSXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzBdKTsKKwljcHItPm1bQ1NDX1JHXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzFdKTsKKwljcHItPm1bQ1NDX1JCXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzJdKTsKKwljcHItPm1bQ1NDX0dSXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzNdKTsKKwljcHItPm1bQ1NDX0dHXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzRdKTsKKwljcHItPm1bQ1NDX0dCXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzVdKTsKKwljcHItPm1bQ1NDX0JSXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzZdKTsKKwljcHItPm1bQ1NDX0JHXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzddKTsKKwljcHItPm1bQ1NDX0JCXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzhdKTsKK30KKworc3RhdGljIHZvaWQgZGlzcGNfdnBfd3JpdGVf Y3NjKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0LAorCQkJICAg ICAgIGNvbnN0IHN0cnVjdCBkaXNwY19jc2NfY29lZiAqY3NjKQoreworCXN0YXRpYyBjb25zdCB1 MTYgZGlzcGNfdnBfY3NjX2NvZWZfcmVnW0RJU1BDX0NTQ19SRUdWQUxfTEVOXSA9IHsKKwkJRElT UENfVlBfQ1NDX0NPRUYwLCBESVNQQ19WUF9DU0NfQ09FRjEsIERJU1BDX1ZQX0NTQ19DT0VGMiwK KwkJRElTUENfVlBfQ1NDX0NPRUYzLCBESVNQQ19WUF9DU0NfQ09FRjQsIERJU1BDX1ZQX0NTQ19D T0VGNSwKKwkJRElTUENfVlBfQ1NDX0NPRUY2LCBESVNQQ19WUF9DU0NfQ09FRjcsCisJfTsKKwl1 MzIgcmVndmFsW0RJU1BDX0NTQ19SRUdWQUxfTEVOXTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlm ICghV0FSTl9PTihkaXNwYy0+ZmVhdC0+c3VicmV2ID09IERJU1BDX0syRykpCisJCXJldHVybjsK KworCWNzYy0+dG9fcmVndmFsKGNzYywgcmVndmFsKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKHJlZ3ZhbCk7IGkrKykKKwkJZGlzcGNfdnBfd3JpdGUoZGlzcGMsIGh3X3ZpZGVvcG9y dCwgZGlzcGNfdnBfY3NjX2NvZWZfcmVnW2ldLAorCQkJICAgICAgIHJlZ3ZhbFtpXSk7Cit9CisK K3N0YXRpYyB2b2lkIGRpc3BjX3ZwX3NldF9jb2xvcl9tZ210KHN0cnVjdCBkaXNwY19kZXZpY2Ug KmRpc3BjLAorCQkJCSAgICB1MzIgaHdfdmlkZW9wb3J0LAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qg ZHJtX2NydGNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQgPSBO VUxMOworCXVuc2lnbmVkIGludCBsZW5ndGggPSAwOworCWJvb2wgY29sb3Jjb252ZW5hYmxlID0g ZmFsc2U7CisKKwlpZiAoIXN0YXRlLT5jb2xvcl9tZ210X2NoYW5nZWQpCisJCXJldHVybjsKKwor CWlmIChzdGF0ZS0+Z2FtbWFfbHV0KSB7CisJCWx1dCA9IChzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAq KSBzdGF0ZS0+Z2FtbWFfbHV0LT5kYXRhOworCQlsZW5ndGggPSBzdGF0ZS0+Z2FtbWFfbHV0LT5s ZW5ndGggLyBzaXplb2YoKmx1dCk7CisJfQorCisJaWYgKHN0YXRlLT5jdG0pIHsKKwkJc3RydWN0 IGRybV9jb2xvcl9jdG0gKmN0bSA9CisJCQkoc3RydWN0IGRybV9jb2xvcl9jdG0gKikgc3RhdGUt PmN0bS0+ZGF0YTsKKwkJc3RydWN0IGRpc3BjX2NzY19jb2VmIGNwcjsKKworCQlkaXNwY19jcHJf Y3NjX2Zyb21fY3RtKGN0bSwgJmNwcik7CisJCWRpc3BjX3ZwX3dyaXRlX2NzYyhkaXNwYywgaHdf dmlkZW9wb3J0LCAmY3ByKTsKKworCQljb2xvcmNvbnZlbmFibGUgPSB0cnVlOworCX0KKworCWRp c3BjX3ZwX3NldF9nYW1tYShkaXNwYywgaHdfdmlkZW9wb3J0LCBsdXQsIGxlbmd0aCk7CisJVlBf UkVHX0ZMRF9NT0QoZGlzcGMsIGh3X3ZpZGVvcG9ydCwgRElTUENfVlBfQ09ORklHLAorCQkgICAg ICAgY29sb3Jjb252ZW5hYmxlLCAyNCwgMjQpOworfQorCit2b2lkIGRpc3BjX3ZwX3NldHVwKHN0 cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0LAorCQkgICAgY29uc3Qg c3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKK3sKKwlkaXNwY192cF9zZXRfZGVmYXVsdF9j b2xvcihkaXNwYywgaHdfdmlkZW9wb3J0LCAwKTsKKwlkaXNwY192cF9zZXRfY29sb3JfbWdtdChk aXNwYywgaHdfdmlkZW9wb3J0LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgZGlzcGNfaW5pdF9n YW1tYV90YWJsZXMoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMpCit7CisJdW5zaWduZWQgaW50 IGk7CisKKwlkZXZfZGJnKGRpc3BjLT5kZXYsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgZGlzcGMtPmZlYXQtPm51bV92cHM7IGkrKykKKwkJZGlzcGNfdnBfc2V0X2dh bW1hKGRpc3BjLCBpLCBOVUxMLCAwKTsKKworCXJldHVybiAwOworfQorCitpbnQgZGlzcGNfcnVu dGltZV9zdXNwZW5kKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjKQoreworCWRldl9kYmcoZGlz cGMtPmRldiwgInN1c3BlbmRcbiIpOworCisJZGlzcGMtPmlzX2VuYWJsZWQgPSBmYWxzZTsKKwor CWNsa19kaXNhYmxlX3VucHJlcGFyZShkaXNwYy0+ZmNsayk7CisKKwlyZXR1cm4gMDsKK30KKwor aW50IGRpc3BjX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjKQorewor CWRldl9kYmcoZGlzcGMtPmRldiwgInJlc3VtZVxuIik7CisKKwljbGtfcHJlcGFyZV9lbmFibGUo ZGlzcGMtPmZjbGspOworCisJaWYgKFJFR19HRVQoZGlzcGMsIERTU19TWVNTVEFUVVMsIDAsIDAp ID09IDApCisJCWRldl93YXJuKGRpc3BjLT5kZXYsICJEU1MgRlVOQyBSRVNFVCBub3QgZG9uZSFc biIpOworCisJZGV2X2RiZyhkaXNwYy0+ZGV2LCAiT01BUCBEU1M3IHJldiAweCV4XG4iLAorCQlk aXNwY19yZWFkKGRpc3BjLCBEU1NfUkVWSVNJT04pKTsKKworCWRldl9kYmcoZGlzcGMtPmRldiwg IlZQIFJFU0VURE9ORSAlZCwlZCwlZFxuIiwKKwkJUkVHX0dFVChkaXNwYywgRFNTX1NZU1NUQVRV UywgMSwgMSksCisJCVJFR19HRVQoZGlzcGMsIERTU19TWVNTVEFUVVMsIDIsIDIpLAorCQlSRUdf R0VUKGRpc3BjLCBEU1NfU1lTU1RBVFVTLCAzLCAzKSk7CisKKwlpZiAoZGlzcGMtPmZlYXQtPnN1 YnJldiA9PSBESVNQQ19BTTY1WCkKKwkJZGV2X2RiZyhkaXNwYy0+ZGV2LCAiT0xESSBSRVNFVERP TkUgJWQsJWQsJWRcbiIsCisJCQlSRUdfR0VUKGRpc3BjLCBEU1NfU1lTU1RBVFVTLCA1LCA1KSwK KwkJCVJFR19HRVQoZGlzcGMsIERTU19TWVNTVEFUVVMsIDYsIDYpLAorCQkJUkVHX0dFVChkaXNw YywgRFNTX1NZU1NUQVRVUywgNywgNykpOworCisJZGV2X2RiZyhkaXNwYy0+ZGV2LCAiRElTUEMg SURMRSAlZFxuIiwKKwkJUkVHX0dFVChkaXNwYywgRFNTX1NZU1NUQVRVUywgOSwgOSkpOworCisJ ZGlzcGNfaW5pdGlhbF9jb25maWcoZGlzcGMpOworCisJZGlzcGNfcmVzdG9yZV9nYW1tYV90YWJs ZXMoZGlzcGMpOworCisJZGlzcGMtPmlzX2VuYWJsZWQgPSB0cnVlOworCisJdGlkc3NfaXJxX3Jl c3VtZShkaXNwYy0+dGlkc3MpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZGlzcGNfcmVtb3Zl KHN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzKQoreworCWRldl9kYmcodGlkc3MtPmRldiwgIiVz XG4iLCBfX2Z1bmNfXyk7CisKKwl0aWRzcy0+ZGlzcGMgPSBOVUxMOworfQorCitzdGF0aWMgaW50 IGRpc3BjX2lvbWFwX3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGNvbnN0 IGNoYXIgKm5hbWUsCisJCQkJdm9pZCBfX2lvbWVtICoqYmFzZSkKK3sKKwlzdHJ1Y3QgcmVzb3Vy Y2UgKnJlczsKKwl2b2lkIF9faW9tZW0gKmI7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3Vy Y2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBuYW1lKTsKKwlpZiAoIXJlcykgeworCQlk ZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IG1lbSByZXNvdXJjZSAnJXMnXG4iLCBuYW1l KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYiA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgm cGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoYikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2 LCAiY2Fubm90IGlvcmVtYXAgcmVzb3VyY2UgJyVzJ1xuIiwgbmFtZSk7CisJCXJldHVybiBQVFJf RVJSKGIpOworCX0KKworCSpiYXNlID0gYjsKKworCXJldHVybiAwOworfQorCitpbnQgZGlzcGNf aW5pdChzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSB0aWRzcy0+ZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9y bV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYzsKKwljb25zdCBzdHJ1 Y3QgZGlzcGNfZmVhdHVyZXMgKmZlYXQ7CisJdW5zaWduZWQgaW50IGksIG51bV9mb3VyY2NzOwor CWludCByID0gMDsKKworCWRldl9kYmcoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWZlYXQg PSB0aWRzcy0+ZmVhdDsKKworCWlmIChmZWF0LT5zdWJyZXYgIT0gRElTUENfSzJHKSB7CisJCXIg PSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldiwgRE1BX0JJVF9NQVNLKDQ4KSk7CisJCWlm IChyKQorCQkJZGV2X3dhcm4oZGV2LCAiY2Fubm90IHNldCBETUEgbWFza3MgdG8gNDgtYml0XG4i KTsKKwl9CisKKwlkaXNwYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGlzcGMpLCBHRlBf S0VSTkVMKTsKKwlpZiAoIWRpc3BjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRpc3BjLT5mb3Vy Y2NzID0gZGV2bV9rY2FsbG9jKGRldiwgQVJSQVlfU0laRShkaXNwY19jb2xvcl9mb3JtYXRzKSwK KwkJCQkgICAgICBzaXplb2YoKmRpc3BjLT5mb3VyY2NzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFk aXNwYy0+Zm91cmNjcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwludW1fZm91cmNjcyA9IDA7CisJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGlzcGNfY29sb3JfZm9ybWF0cyk7ICsraSkgewor CQlpZiAoZmVhdC0+ZXJyYXRhLmkyMDAwICYmCisJCSAgICBkaXNwY19mb3VyY2NfaXNfeXV2KGRp c3BjX2NvbG9yX2Zvcm1hdHNbaV0uZm91cmNjKSkKKwkJCWNvbnRpbnVlOworCQlkaXNwYy0+Zm91 cmNjc1tudW1fZm91cmNjcysrXSA9IGRpc3BjX2NvbG9yX2Zvcm1hdHNbaV0uZm91cmNjOworCX0K KwlkaXNwYy0+bnVtX2ZvdXJjY3MgPSBudW1fZm91cmNjczsKKwlkaXNwYy0+dGlkc3MgPSB0aWRz czsKKwlkaXNwYy0+ZGV2ID0gZGV2OworCWRpc3BjLT5mZWF0ID0gZmVhdDsKKworCWRpc3BjX2Nv bW1vbl9yZWdtYXAgPSBkaXNwYy0+ZmVhdC0+Y29tbW9uX3JlZ3M7CisKKwlyID0gZGlzcGNfaW9t YXBfcmVzb3VyY2UocGRldiwgZGlzcGMtPmZlYXQtPmNvbW1vbiwKKwkJCQkgJmRpc3BjLT5iYXNl X2NvbW1vbik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJZm9yIChpID0gMDsgaSA8IGRpc3Bj LT5mZWF0LT5udW1fcGxhbmVzOyBpKyspIHsKKwkJciA9IGRpc3BjX2lvbWFwX3Jlc291cmNlKHBk ZXYsIGRpc3BjLT5mZWF0LT52aWRfbmFtZVtpXSwKKwkJCQkJICZkaXNwYy0+YmFzZV92aWRbaV0p OworCQlkZXZfZGJnKGRldiwgIiVzOiAldSAlcyAlZFxuIiwgX19mdW5jX18sCisJCQlpLCBkaXNw Yy0+ZmVhdC0+dmlkX25hbWVbaV0sIHIpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwor CWZvciAoaSA9IDA7IGkgPCBkaXNwYy0+ZmVhdC0+bnVtX3ZwczsgaSsrKSB7CisJCXN0cnVjdCBj bGsgKmNsazsKKworCQlyID0gZGlzcGNfaW9tYXBfcmVzb3VyY2UocGRldiwgZGlzcGMtPmZlYXQt Pm92cl9uYW1lW2ldLAorCQkJCQkgJmRpc3BjLT5iYXNlX292cltpXSk7CisJCWRldl9kYmcoZGV2 LCAiJXM6ICV1ICVzICVkXG4iLCBfX2Z1bmNfXywKKwkJCWksIGRpc3BjLT5mZWF0LT5vdnJfbmFt ZVtpXSwgcik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisKKwkJciA9IGRpc3BjX2lvbWFwX3Jl c291cmNlKHBkZXYsIGRpc3BjLT5mZWF0LT52cF9uYW1lW2ldLAorCQkJCQkgJmRpc3BjLT5iYXNl X3ZwW2ldKTsKKwkJZGV2X2RiZyhkZXYsICIlczogJXUgJXMgJWRcbiIsIF9fZnVuY19fLAorCQkJ aSwgZGlzcGMtPmZlYXQtPnZwX25hbWVbaV0sIHIpOworCQlpZiAocikKKwkJCXJldHVybiByOwor CisJCWNsayA9IGRldm1fY2xrX2dldChkZXYsIGRpc3BjLT5mZWF0LT52cGNsa19uYW1lW2ldKTsK KwkJaWYgKElTX0VSUihjbGspKSB7CisJCQlkZXZfZXJyKGRldiwgIiVzOiBGYWlsZWQgdG8gZ2V0 IGNsayAlczolbGRcbiIsIF9fZnVuY19fLAorCQkJCWRpc3BjLT5mZWF0LT52cGNsa19uYW1lW2ld LCBQVFJfRVJSKGNsaykpOworCQkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKKwkJfQorCQlkaXNwYy0+ dnBfY2xrW2ldID0gY2xrOworCisJCWRpc3BjLT52cF9kYXRhW2ldLmdhbW1hX3RhYmxlID0gZGV2 bV9rbWFsbG9jX2FycmF5KAorCQkJZGV2LCBkaXNwYy0+ZmVhdC0+dnBfZmVhdC5jb2xvci5nYW1t YV9zaXplLAorCQkJc2l6ZW9mKCpkaXNwYy0+dnBfZGF0YVtpXS5nYW1tYV90YWJsZSksIEdGUF9L RVJORUwpOworCQlpZiAoIWRpc3BjLT52cF9kYXRhW2ldLmdhbW1hX3RhYmxlKQorCQkJcmV0dXJu IC1FTk9NRU07CisJfQorCisJaWYgKGZlYXQtPnN1YnJldiA9PSBESVNQQ19BTTY1WCkgeworCQlk aXNwYy0+b2xkaV9pb19jdHJsID0KKwkJCXN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUo ZGV2LT5vZl9ub2RlLAorCQkJCQkJCSJ0aSxhbTY1eC1vbGRpLWlvLWN0cmwiKTsKKwkJaWYgKFBU Ul9FUlIoZGlzcGMtPm9sZGlfaW9fY3RybCkgPT0gLUVOT0RFVikgeworCQkJZGlzcGMtPm9sZGlf aW9fY3RybCA9IE5VTEw7CisJCX0gZWxzZSBpZiAoSVNfRVJSKGRpc3BjLT5vbGRpX2lvX2N0cmwp KSB7CisJCQlkZXZfZXJyKGRldiwgIiVzOiBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxl IGZhaWxlZCAlbGRcbiIsCisJCQkJX19mdW5jX18sIFBUUl9FUlIoZGlzcGMtPm9sZGlfaW9fY3Ry bCkpOworCQkJcmV0dXJuIFBUUl9FUlIoZGlzcGMtPm9sZGlfaW9fY3RybCk7CisJCX0KKwl9CisK KwlkaXNwYy0+ZmNsayA9IGRldm1fY2xrX2dldChkZXYsICJmY2siKTsKKwlpZiAoSVNfRVJSKGRp c3BjLT5mY2xrKSkgeworCQlkZXZfZXJyKGRldiwgIiVzOiBGYWlsZWQgdG8gZ2V0IGZjbGs6ICVs ZFxuIiwKKwkJCV9fZnVuY19fLCBQVFJfRVJSKGRpc3BjLT5mY2xrKSk7CisJCXJldHVybiBQVFJf RVJSKGRpc3BjLT5mY2xrKTsKKwl9CisJZGV2X2RiZyhkZXYsICJEU1MgZmNsayAlbHUgSHpcbiIs IGNsa19nZXRfcmF0ZShkaXNwYy0+ZmNsaykpOworCisJb2ZfcHJvcGVydHlfcmVhZF91MzIoZGlz cGMtPmRldi0+b2Zfbm9kZSwgIm1heC1tZW1vcnktYmFuZHdpZHRoIiwKKwkJCSAgICAgJmRpc3Bj LT5tZW1vcnlfYmFuZHdpZHRoX2xpbWl0KTsKKworCXIgPSBkaXNwY19pbml0X2dhbW1hX3RhYmxl cyhkaXNwYyk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJdGlkc3MtPmRpc3BjID0gZGlzcGM7 CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRz c19kaXNwYy5oIGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2Rpc3BjLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42MTk5NjcxY2E2NDgKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZGlzcGMuaApAQCAtMCwwICsxLDEz MiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBDb3B5 cmlnaHQgKEMpIDIwMTggVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3 dy50aS5jb20vCisgKiBBdXRob3I6IFRvbWkgVmFsa2VpbmVuIDx0b21pLnZhbGtlaW5lbkB0aS5j b20+CisgKi8KKworI2lmbmRlZiBfX1RJRFNTX0RJU1BDX0hfXworI2RlZmluZSBfX1RJRFNTX0RJ U1BDX0hfXworCisjaW5jbHVkZSAidGlkc3NfZHJ2LmgiCisKK3N0cnVjdCBkaXNwY19kZXZpY2U7 CisKK3N0cnVjdCBkcm1fY3J0Y19zdGF0ZTsKKworZW51bSB0aWRzc19nYW1tYV90eXBlIHsgVElE U1NfR0FNTUFfOEJJVCwgVElEU1NfR0FNTUFfMTBCSVQgfTsKKworc3RydWN0IHRpZHNzX3ZwX2Zl YXQgeworCXN0cnVjdCB0aWRzc192cF9jb2xvcl9mZWF0IHsKKwkJdTMyIGdhbW1hX3NpemU7CisJ CWVudW0gdGlkc3NfZ2FtbWFfdHlwZSBnYW1tYV90eXBlOworCQlib29sIGhhc19jdG07CisJfSBj b2xvcjsKK307CisKK3N0cnVjdCB0aWRzc19wbGFuZV9mZWF0IHsKKwlzdHJ1Y3QgdGlkc3NfcGxh bmVfY29sb3JfZmVhdCB7CisJCXUzMiBlbmNvZGluZ3M7CisJCXUzMiByYW5nZXM7CisJCWVudW0g ZHJtX2NvbG9yX2VuY29kaW5nIGRlZmF1bHRfZW5jb2Rpbmc7CisJCWVudW0gZHJtX2NvbG9yX3Jh bmdlIGRlZmF1bHRfcmFuZ2U7CisJfSBjb2xvcjsKKwlzdHJ1Y3QgdGlkc3NfcGxhbmVfYmxlbmRf ZmVhdCB7CisJCWJvb2wgZ2xvYmFsX2FscGhhOworCX0gYmxlbmQ7Cit9OworCitzdHJ1Y3QgZGlz cGNfZmVhdHVyZXNfc2NhbGluZyB7CisJdTMyIGluX3dpZHRoX21heF81dGFwX3JnYjsKKwl1MzIg aW5fd2lkdGhfbWF4XzN0YXBfcmdiOworCXUzMiBpbl93aWR0aF9tYXhfNXRhcF95dXY7CisJdTMy IGluX3dpZHRoX21heF8zdGFwX3l1djsKKwl1MzIgdXBzY2FsZV9saW1pdDsKKwl1MzIgZG93bnNj YWxlX2xpbWl0XzV0YXA7CisJdTMyIGRvd25zY2FsZV9saW1pdF8zdGFwOworCXUzMiB4aW5jX21h eDsKK307CisKK3N0cnVjdCBkaXNwY19lcnJhdGEgeworCWJvb2wgaTIwMDA7IC8qIERTUyBEb2Vz IE5vdCBTdXBwb3J0IFlVViBQaXhlbCBEYXRhIEZvcm1hdHMgKi8KK307CisKK2VudW0gZGlzcGNf dnBfYnVzX3R5cGUgeworCURJU1BDX1ZQX0RQSSwJCS8qIERQSSBvdXRwdXQgKi8KKwlESVNQQ19W UF9PTERJLAkJLyogT0xESSAoTFZEUykgb3V0cHV0ICovCisJRElTUENfVlBfSU5URVJOQUwsCS8q IFNvQyBpbnRlcm5hbCByb3V0aW5nICovCisJRElTUENfVlBfTUFYX0JVU19UWVBFLAorfTsKKwor ZW51bSBkaXNwY19kc3Nfc3VicmV2aXNpb24geworCURJU1BDX0syRywKKwlESVNQQ19BTTY1WCwK KwlESVNQQ19KNzIxRSwKK307CisKK3N0cnVjdCBkaXNwY19mZWF0dXJlcyB7CisJaW50IG1pbl9w Y2xrX2tIejsKKwlpbnQgbWF4X3BjbGtfa0h6W0RJU1BDX1ZQX01BWF9CVVNfVFlQRV07CisKKwlz dHJ1Y3QgZGlzcGNfZmVhdHVyZXNfc2NhbGluZyBzY2FsaW5nOworCisJZW51bSBkaXNwY19kc3Nf c3VicmV2aXNpb24gc3VicmV2OworCisJY29uc3QgY2hhciAqY29tbW9uOworCWNvbnN0IHUxNiAq Y29tbW9uX3JlZ3M7CisJdTMyIG51bV92cHM7CisJY29uc3QgY2hhciAqdnBfbmFtZVtUSURTU19N QVhfUE9SVFNdOyAvKiBTaG91bGQgbWF0Y2ggZHQgcmVnIG5hbWVzICovCisJY29uc3QgY2hhciAq b3ZyX25hbWVbVElEU1NfTUFYX1BPUlRTXTsgLyogU2hvdWxkIG1hdGNoIGR0IHJlZyBuYW1lcyAq LworCWNvbnN0IGNoYXIgKnZwY2xrX25hbWVbVElEU1NfTUFYX1BPUlRTXTsgLyogU2hvdWxkIG1h dGNoIGR0IGNsayBuYW1lcyAqLworCWNvbnN0IGVudW0gZGlzcGNfdnBfYnVzX3R5cGUgdnBfYnVz X3R5cGVbVElEU1NfTUFYX1BPUlRTXTsKKwlzdHJ1Y3QgdGlkc3NfdnBfZmVhdCB2cF9mZWF0Owor CXUzMiBudW1fcGxhbmVzOworCWNvbnN0IGNoYXIgKnZpZF9uYW1lW1RJRFNTX01BWF9QTEFORVNd OyAvKiBTaG91bGQgbWF0Y2ggZHQgcmVnIG5hbWVzICovCisJYm9vbCB2aWRfbGl0ZVtUSURTU19N QVhfUExBTkVTXTsKKwl1MzIgdmlkX29yZGVyW1RJRFNTX01BWF9QTEFORVNdOworCisJc3RydWN0 IGRpc3BjX2VycmF0YSBlcnJhdGE7Cit9OworCitleHRlcm4gY29uc3Qgc3RydWN0IGRpc3BjX2Zl YXR1cmVzIGRpc3BjX2syZ19mZWF0czsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGlzcGNfZmVhdHVy ZXMgZGlzcGNfYW02NXhfZmVhdHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRpc3BjX2ZlYXR1cmVz IGRpc3BjX2o3MjFlX2ZlYXRzOworCit2b2lkIGRpc3BjX3dyaXRlX2lycWVuYWJsZShzdHJ1Y3Qg ZGlzcGNfZGV2aWNlICpkaXNwYywgZGlzcGNfaXJxX3QgbWFzayk7CitkaXNwY19pcnFfdCBkaXNw Y19yZWFkX2FuZF9jbGVhcl9pcnFzdGF0dXMoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMpOwor Cit2b2lkIGRpc3BjX3ZwX3ByZXBhcmUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBo d192aWRlb3BvcnQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUp Owordm9pZCBkaXNwY192cF9lbmFibGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBo d192aWRlb3BvcnQsCisJCSAgICAgY29uc3Qgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSk7 Cit2b2lkIGRpc3BjX3ZwX2Rpc2FibGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBo d192aWRlb3BvcnQpOwordm9pZCBkaXNwY192cF91bnByZXBhcmUoc3RydWN0IGRpc3BjX2Rldmlj ZSAqZGlzcGMsIHUzMiBod192aWRlb3BvcnQpOworYm9vbCBkaXNwY192cF9nb19idXN5KHN0cnVj dCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0KTsKK3ZvaWQgZGlzcGNfdnBf Z28oc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBod192aWRlb3BvcnQpOworaW50IGRp c3BjX3ZwX2J1c19jaGVjayhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywgdTMyIGh3X3ZpZGVv cG9ydCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpOworZW51 bSBkcm1fbW9kZV9zdGF0dXMgZGlzcGNfdnBfbW9kZV92YWxpZChzdHJ1Y3QgZGlzcGNfZGV2aWNl ICpkaXNwYywKKwkJCQkJIHUzMiBod192aWRlb3BvcnQsCisJCQkJCSBjb25zdCBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSk7CitpbnQgZGlzcGNfdnBfZW5hYmxlX2NsayhzdHJ1Y3QgZGlz cGNfZGV2aWNlICpkaXNwYywgdTMyIGh3X3ZpZGVvcG9ydCk7Cit2b2lkIGRpc3BjX3ZwX2Rpc2Fi bGVfY2xrKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0KTsKK2lu dCBkaXNwY192cF9zZXRfY2xrX3JhdGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBo d192aWRlb3BvcnQsCisJCQkgIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Cit2b2lkIGRpc3BjX3ZwX3Nl dHVwKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0LAorCQkgICAg Y29uc3Qgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSk7CisKK2ludCBkaXNwY19ydW50aW1l X3N1c3BlbmQoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMpOworaW50IGRpc3BjX3J1bnRpbWVf cmVzdW1lKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjKTsKKworaW50IGRpc3BjX3BsYW5lX2No ZWNrKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfcGxhbmUsCisJCSAgICAgIGNv bnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLAorCQkgICAgICB1MzIgaHdfdmlkZW9w b3J0KTsKK2ludCBkaXNwY19wbGFuZV9zZXR1cChzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywg dTMyIGh3X3BsYW5lLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0 ZSwKKwkJICAgICAgdTMyIGh3X3ZpZGVvcG9ydCk7CitpbnQgZGlzcGNfcGxhbmVfZW5hYmxlKHN0 cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfcGxhbmUsIGJvb2wgZW5hYmxlKTsKK2Nv bnN0IHUzMiAqZGlzcGNfcGxhbmVfZm9ybWF0cyhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywg dW5zaWduZWQgaW50ICpsZW4pOworCitpbnQgZGlzcGNfaW5pdChzdHJ1Y3QgdGlkc3NfZGV2aWNl ICp0aWRzcyk7Cit2b2lkIGRpc3BjX3JlbW92ZShzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyk7 CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2Rpc3Bj X3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19kaXNwY19yZWdzLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44OGE4M2E0MWI2ZTMKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZGlzcGNfcmVncy5oCkBAIC0w LDAgKzEsMjQzIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoK KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRl ZCAtIGh0dHA6Ly93d3cudGkuY29tLworICogQXV0aG9yOiBKeXJpIFNhcmhhIDxqc2FyaGFAdGku Y29tPgorICovCisKKyNpZm5kZWYgX19USURTU19ESVNQQ19SRUdTX0gKKyNkZWZpbmUgX19USURT U19ESVNQQ19SRUdTX0gKKworZW51bSBkaXNwY19jb21tb25fcmVncyB7CisJTk9UX0FQUExJQ0FC TEVfT0ZGID0gMCwKKwlEU1NfUkVWSVNJT05fT0ZGLAorCURTU19TWVNDT05GSUdfT0ZGLAorCURT U19TWVNTVEFUVVNfT0ZGLAorCURJU1BDX0lSUV9FT0lfT0ZGLAorCURJU1BDX0lSUVNUQVRVU19S QVdfT0ZGLAorCURJU1BDX0lSUVNUQVRVU19PRkYsCisJRElTUENfSVJRRU5BQkxFX1NFVF9PRkYs CisJRElTUENfSVJRRU5BQkxFX0NMUl9PRkYsCisJRElTUENfVklEX0lSUUVOQUJMRV9PRkYsCisJ RElTUENfVklEX0lSUVNUQVRVU19PRkYsCisJRElTUENfVlBfSVJRRU5BQkxFX09GRiwKKwlESVNQ Q19WUF9JUlFTVEFUVVNfT0ZGLAorCVdCX0lSUUVOQUJMRV9PRkYsCisJV0JfSVJRU1RBVFVTX09G RiwKKwlESVNQQ19HTE9CQUxfTUZMQUdfQVRUUklCVVRFX09GRiwKKwlESVNQQ19HTE9CQUxfT1VU UFVUX0VOQUJMRV9PRkYsCisJRElTUENfR0xPQkFMX0JVRkZFUl9PRkYsCisJRFNTX0NCQV9DRkdf T0ZGLAorCURJU1BDX0RCR19DT05UUk9MX09GRiwKKwlESVNQQ19EQkdfU1RBVFVTX09GRiwKKwlE SVNQQ19DTEtHQVRJTkdfRElTQUJMRV9PRkYsCisJRElTUENfU0VDVVJFX0RJU0FCTEVfT0ZGLAor CUZCRENfUkVWSVNJT05fMV9PRkYsCisJRkJEQ19SRVZJU0lPTl8yX09GRiwKKwlGQkRDX1JFVklT SU9OXzNfT0ZGLAorCUZCRENfUkVWSVNJT05fNF9PRkYsCisJRkJEQ19SRVZJU0lPTl81X09GRiwK KwlGQkRDX1JFVklTSU9OXzZfT0ZGLAorCUZCRENfQ09NTU9OX0NPTlRST0xfT0ZGLAorCUZCRENf Q09OU1RBTlRfQ09MT1JfMF9PRkYsCisJRkJEQ19DT05TVEFOVF9DT0xPUl8xX09GRiwKKwlESVNQ Q19DT05ORUNUSU9OU19PRkYsCisJRElTUENfTVNTX1ZQMV9PRkYsCisJRElTUENfTVNTX1ZQM19P RkYsCisJRElTUENfQ09NTU9OX1JFR19UQUJMRV9MRU4sCit9OworCisvKgorICogZGlzcGNfY29t bW9uX3JlZ21hcCBzaG91bGQgYmUgZGVmaW5lZCBhcyBjb25zdCB1MTYgKiBhbmQgcG9pbnRpbmcK KyAqIHRvIGEgdmFsaWQgZHNzIGNvbW1vbiByZWdpc3RlciBtYXAgZm9yIHRoZSBwbGF0Zm9ybSwg YmVmb3JlIHRoZQorICogbWFjcm9zIGJlbGxvdyBjYW4gYmUgdXNlZC4KKyAqLworCisjZGVmaW5l IFJFRyhyKSAoZGlzcGNfY29tbW9uX3JlZ21hcFtyICMjIF9PRkZdKQorCisjZGVmaW5lIERTU19S RVZJU0lPTgkJCVJFRyhEU1NfUkVWSVNJT04pCisjZGVmaW5lIERTU19TWVNDT05GSUcJCQlSRUco RFNTX1NZU0NPTkZJRykKKyNkZWZpbmUgRFNTX1NZU1NUQVRVUwkJCVJFRyhEU1NfU1lTU1RBVFVT KQorI2RlZmluZSBESVNQQ19JUlFfRU9JCQkJUkVHKERJU1BDX0lSUV9FT0kpCisjZGVmaW5lIERJ U1BDX0lSUVNUQVRVU19SQVcJCVJFRyhESVNQQ19JUlFTVEFUVVNfUkFXKQorI2RlZmluZSBESVNQ Q19JUlFTVEFUVVMJCQlSRUcoRElTUENfSVJRU1RBVFVTKQorI2RlZmluZSBESVNQQ19JUlFFTkFC TEVfU0VUCQlSRUcoRElTUENfSVJRRU5BQkxFX1NFVCkKKyNkZWZpbmUgRElTUENfSVJRRU5BQkxF X0NMUgkJUkVHKERJU1BDX0lSUUVOQUJMRV9DTFIpCisjZGVmaW5lIERJU1BDX1ZJRF9JUlFFTkFC TEUobikJCShSRUcoRElTUENfVklEX0lSUUVOQUJMRSkgKyAobikgKiA0KQorI2RlZmluZSBESVNQ Q19WSURfSVJRU1RBVFVTKG4pCQkoUkVHKERJU1BDX1ZJRF9JUlFTVEFUVVMpICsgKG4pICogNCkK KyNkZWZpbmUgRElTUENfVlBfSVJRRU5BQkxFKG4pCQkoUkVHKERJU1BDX1ZQX0lSUUVOQUJMRSkg KyAobikgKiA0KQorI2RlZmluZSBESVNQQ19WUF9JUlFTVEFUVVMobikJCShSRUcoRElTUENfVlBf SVJRU1RBVFVTKSArIChuKSAqIDQpCisjZGVmaW5lIFdCX0lSUUVOQUJMRQkJCVJFRyhXQl9JUlFF TkFCTEUpCisjZGVmaW5lIFdCX0lSUVNUQVRVUwkJCVJFRyhXQl9JUlFTVEFUVVMpCisKKyNkZWZp bmUgRElTUENfR0xPQkFMX01GTEFHX0FUVFJJQlVURQlSRUcoRElTUENfR0xPQkFMX01GTEFHX0FU VFJJQlVURSkKKyNkZWZpbmUgRElTUENfR0xPQkFMX09VVFBVVF9FTkFCTEUJUkVHKERJU1BDX0dM T0JBTF9PVVRQVVRfRU5BQkxFKQorI2RlZmluZSBESVNQQ19HTE9CQUxfQlVGRkVSCQlSRUcoRElT UENfR0xPQkFMX0JVRkZFUikKKyNkZWZpbmUgRFNTX0NCQV9DRkcJCQlSRUcoRFNTX0NCQV9DRkcp CisjZGVmaW5lIERJU1BDX0RCR19DT05UUk9MCQlSRUcoRElTUENfREJHX0NPTlRST0wpCisjZGVm aW5lIERJU1BDX0RCR19TVEFUVVMJCVJFRyhESVNQQ19EQkdfU1RBVFVTKQorI2RlZmluZSBESVNQ Q19DTEtHQVRJTkdfRElTQUJMRQkJUkVHKERJU1BDX0NMS0dBVElOR19ESVNBQkxFKQorI2RlZmlu ZSBESVNQQ19TRUNVUkVfRElTQUJMRQkJUkVHKERJU1BDX1NFQ1VSRV9ESVNBQkxFKQorCisjZGVm aW5lIEZCRENfUkVWSVNJT05fMQkJCVJFRyhGQkRDX1JFVklTSU9OXzEpCisjZGVmaW5lIEZCRENf UkVWSVNJT05fMgkJCVJFRyhGQkRDX1JFVklTSU9OXzIpCisjZGVmaW5lIEZCRENfUkVWSVNJT05f MwkJCVJFRyhGQkRDX1JFVklTSU9OXzMpCisjZGVmaW5lIEZCRENfUkVWSVNJT05fNAkJCVJFRyhG QkRDX1JFVklTSU9OXzQpCisjZGVmaW5lIEZCRENfUkVWSVNJT05fNQkJCVJFRyhGQkRDX1JFVklT SU9OXzUpCisjZGVmaW5lIEZCRENfUkVWSVNJT05fNgkJCVJFRyhGQkRDX1JFVklTSU9OXzYpCisj ZGVmaW5lIEZCRENfQ09NTU9OX0NPTlRST0wJCVJFRyhGQkRDX0NPTU1PTl9DT05UUk9MKQorI2Rl ZmluZSBGQkRDX0NPTlNUQU5UX0NPTE9SXzAJCVJFRyhGQkRDX0NPTlNUQU5UX0NPTE9SXzApCisj ZGVmaW5lIEZCRENfQ09OU1RBTlRfQ09MT1JfMQkJUkVHKEZCRENfQ09OU1RBTlRfQ09MT1JfMSkK KyNkZWZpbmUgRElTUENfQ09OTkVDVElPTlMJCVJFRyhESVNQQ19DT05ORUNUSU9OUykKKyNkZWZp bmUgRElTUENfTVNTX1ZQMQkJCVJFRyhESVNQQ19NU1NfVlAxKQorI2RlZmluZSBESVNQQ19NU1Nf VlAzCQkJUkVHKERJU1BDX01TU19WUDMpCisKKy8qIFZJRCAqLworCisjZGVmaW5lIERJU1BDX1ZJ RF9BQ0NVSF8wCQkweDAKKyNkZWZpbmUgRElTUENfVklEX0FDQ1VIXzEJCTB4NAorI2RlZmluZSBE SVNQQ19WSURfQUNDVUgyXzAJCTB4OAorI2RlZmluZSBESVNQQ19WSURfQUNDVUgyXzEJCTB4Ywor I2RlZmluZSBESVNQQ19WSURfQUNDVVZfMAkJMHgxMAorI2RlZmluZSBESVNQQ19WSURfQUNDVVZf MQkJMHgxNAorI2RlZmluZSBESVNQQ19WSURfQUNDVVYyXzAJCTB4MTgKKyNkZWZpbmUgRElTUENf VklEX0FDQ1VWMl8xCQkweDFjCisjZGVmaW5lIERJU1BDX1ZJRF9BVFRSSUJVVEVTCQkweDIwCisj ZGVmaW5lIERJU1BDX1ZJRF9BVFRSSUJVVEVTMgkJMHgyNAorI2RlZmluZSBESVNQQ19WSURfQkFf MAkJCTB4MjgKKyNkZWZpbmUgRElTUENfVklEX0JBXzEJCQkweDJjCisjZGVmaW5lIERJU1BDX1ZJ RF9CQV9VVl8wCQkweDMwCisjZGVmaW5lIERJU1BDX1ZJRF9CQV9VVl8xCQkweDM0CisjZGVmaW5l IERJU1BDX1ZJRF9CVUZfU0laRV9TVEFUVVMJMHgzOAorI2RlZmluZSBESVNQQ19WSURfQlVGX1RI UkVTSE9MRAkJMHgzYworI2RlZmluZSBESVNQQ19WSURfQ1NDX0NPRUYobikJCSgweDQwICsgKG4p ICogNCkKKworI2RlZmluZSBESVNQQ19WSURfRklSSAkJCTB4NWMKKyNkZWZpbmUgRElTUENfVklE X0ZJUkgyCQkJMHg2MAorI2RlZmluZSBESVNQQ19WSURfRklSVgkJCTB4NjQKKyNkZWZpbmUgRElT UENfVklEX0ZJUlYyCQkJMHg2OAorCisjZGVmaW5lIERJU1BDX1ZJRF9GSVJfQ09FRlNfSDAJCTB4 NmMKKyNkZWZpbmUgRElTUENfVklEX0ZJUl9DT0VGX0gwKHBoYXNlKQkoMHg2YyArIChwaGFzZSkg KiA0KQorI2RlZmluZSBESVNQQ19WSURfRklSX0NPRUZTX0gwX0MJMHg5MAorI2RlZmluZSBESVNQ Q19WSURfRklSX0NPRUZfSDBfQyhwaGFzZSkJKDB4OTAgKyAocGhhc2UpICogNCkKKworI2RlZmlu ZSBESVNQQ19WSURfRklSX0NPRUZTX0gxMgkJMHhiNAorI2RlZmluZSBESVNQQ19WSURfRklSX0NP RUZfSDEyKHBoYXNlKQkoMHhiNCArIChwaGFzZSkgKiA0KQorI2RlZmluZSBESVNQQ19WSURfRklS X0NPRUZTX0gxMl9DCTB4ZjQKKyNkZWZpbmUgRElTUENfVklEX0ZJUl9DT0VGX0gxMl9DKHBoYXNl KQkoMHhmNCArIChwaGFzZSkgKiA0KQorCisjZGVmaW5lIERJU1BDX1ZJRF9GSVJfQ09FRlNfVjAJ CTB4MTM0CisjZGVmaW5lIERJU1BDX1ZJRF9GSVJfQ09FRl9WMChwaGFzZSkJKDB4MTM0ICsgKHBo YXNlKSAqIDQpCisjZGVmaW5lIERJU1BDX1ZJRF9GSVJfQ09FRlNfVjBfQwkweDE1OAorI2RlZmlu ZSBESVNQQ19WSURfRklSX0NPRUZfVjBfQyhwaGFzZSkJKDB4MTU4ICsgKHBoYXNlKSAqIDQpCisK KyNkZWZpbmUgRElTUENfVklEX0ZJUl9DT0VGU19WMTIJCTB4MTdjCisjZGVmaW5lIERJU1BDX1ZJ RF9GSVJfQ09FRl9WMTIocGhhc2UpCSgweDE3YyArIChwaGFzZSkgKiA0KQorI2RlZmluZSBESVNQ Q19WSURfRklSX0NPRUZTX1YxMl9DCTB4MWJjCisjZGVmaW5lIERJU1BDX1ZJRF9GSVJfQ09FRl9W MTJfQyhwaGFzZSkJKDB4MWJjICsgKHBoYXNlKSAqIDQpCisKKyNkZWZpbmUgRElTUENfVklEX0dM T0JBTF9BTFBIQQkJMHgxZmMKKyNkZWZpbmUgRElTUENfVklEX0syR19JUlFFTkFCTEUJCTB4MjAw IC8qIEsyRyAqLworI2RlZmluZSBESVNQQ19WSURfSzJHX0lSUVNUQVRVUwkJMHgyMDQgLyogSzJH ICovCisjZGVmaW5lIERJU1BDX1ZJRF9NRkxBR19USFJFU0hPTEQJMHgyMDgKKyNkZWZpbmUgRElT UENfVklEX1BJQ1RVUkVfU0laRQkJMHgyMGMKKyNkZWZpbmUgRElTUENfVklEX1BJWEVMX0lOQwkJ MHgyMTAKKyNkZWZpbmUgRElTUENfVklEX0syR19QT1NJVElPTgkJMHgyMTQgLyogSzJHICovCisj ZGVmaW5lIERJU1BDX1ZJRF9QUkVMT0FECQkweDIxOAorI2RlZmluZSBESVNQQ19WSURfUk9XX0lO QwkJMHgyMWMKKyNkZWZpbmUgRElTUENfVklEX1NJWkUJCQkweDIyMAorI2RlZmluZSBESVNQQ19W SURfQkFfRVhUXzAJCTB4MjJjCisjZGVmaW5lIERJU1BDX1ZJRF9CQV9FWFRfMQkJMHgyMzAKKyNk ZWZpbmUgRElTUENfVklEX0JBX1VWX0VYVF8wCQkweDIzNAorI2RlZmluZSBESVNQQ19WSURfQkFf VVZfRVhUXzEJCTB4MjM4CisjZGVmaW5lIERJU1BDX1ZJRF9DU0NfQ09FRjcJCTB4MjNjCisjZGVm aW5lIERJU1BDX1ZJRF9ST1dfSU5DX1VWCQkweDI0OAorI2RlZmluZSBESVNQQ19WSURfQ0xVVAkJ CTB4MjYwCisjZGVmaW5lIERJU1BDX1ZJRF9TQUZFVFlfQVRUUklCVVRFUwkweDJhMAorI2RlZmlu ZSBESVNQQ19WSURfU0FGRVRZX0NBUFRfU0lHTkFUVVJFCTB4MmE0CisjZGVmaW5lIERJU1BDX1ZJ RF9TQUZFVFlfUE9TSVRJT04JMHgyYTgKKyNkZWZpbmUgRElTUENfVklEX1NBRkVUWV9SRUZfU0lH TkFUVVJFCTB4MmFjCisjZGVmaW5lIERJU1BDX1ZJRF9TQUZFVFlfU0laRQkJMHgyYjAKKyNkZWZp bmUgRElTUENfVklEX1NBRkVUWV9MRlNSX1NFRUQJMHgyYjQKKyNkZWZpbmUgRElTUENfVklEX0xV TUFLRVkJCTB4MmI4CisjZGVmaW5lIERJU1BDX1ZJRF9ETUFfQlVGU0laRQkJMHgyYmMgLyogSjcy MUUgKi8KKworLyogT1ZSICovCisKKyNkZWZpbmUgRElTUENfT1ZSX0NPTkZJRwkJMHgwCisjZGVm aW5lIERJU1BDX09WUl9WSVJUVlAJCTB4NCAvKiBKNzIxRSAqLworI2RlZmluZSBESVNQQ19PVlJf REVGQVVMVF9DT0xPUgkJMHg4CisjZGVmaW5lIERJU1BDX09WUl9ERUZBVUxUX0NPTE9SMgkweGMK KyNkZWZpbmUgRElTUENfT1ZSX1RSQU5TX0NPTE9SX01BWAkweDEwCisjZGVmaW5lIERJU1BDX09W Ul9UUkFOU19DT0xPUl9NQVgyCTB4MTQKKyNkZWZpbmUgRElTUENfT1ZSX1RSQU5TX0NPTE9SX01J TgkweDE4CisjZGVmaW5lIERJU1BDX09WUl9UUkFOU19DT0xPUl9NSU4yCTB4MWMKKyNkZWZpbmUg RElTUENfT1ZSX0FUVFJJQlVURVMobikJCSgweDIwICsgKG4pICogNCkKKyNkZWZpbmUgRElTUENf T1ZSX0FUVFJJQlVURVMyKG4pCSgweDM0ICsgKG4pICogNCkgLyogSjcyMUUgKi8KKy8qIFZQICov CisKKyNkZWZpbmUgRElTUENfVlBfQ09ORklHCQkJCTB4MAorI2RlZmluZSBESVNQQ19WUF9DT05U Uk9MCQkJMHg0CisjZGVmaW5lIERJU1BDX1ZQX0NTQ19DT0VGMAkJCTB4OAorI2RlZmluZSBESVNQ Q19WUF9DU0NfQ09FRjEJCQkweGMKKyNkZWZpbmUgRElTUENfVlBfQ1NDX0NPRUYyCQkJMHgxMAor I2RlZmluZSBESVNQQ19WUF9EQVRBX0NZQ0xFXzAJCQkweDE0CisjZGVmaW5lIERJU1BDX1ZQX0RB VEFfQ1lDTEVfMQkJCTB4MTgKKyNkZWZpbmUgRElTUENfVlBfSzJHX0dBTU1BX1RBQkxFCQkweDIw IC8qIEsyRyAqLworI2RlZmluZSBESVNQQ19WUF9LMkdfSVJRRU5BQkxFCQkJMHgzYyAvKiBLMkcg Ki8KKyNkZWZpbmUgRElTUENfVlBfSzJHX0lSUVNUQVRVUwkJCTB4NDAgLyogSzJHICovCisjZGVm aW5lIERJU1BDX1ZQX0RBVEFfQ1lDTEVfMgkJCTB4MWMKKyNkZWZpbmUgRElTUENfVlBfTElORV9O VU1CRVIJCQkweDQ0CisjZGVmaW5lIERJU1BDX1ZQX1BPTF9GUkVRCQkJMHg0YworI2RlZmluZSBE SVNQQ19WUF9TSVpFX1NDUkVFTgkJCTB4NTAKKyNkZWZpbmUgRElTUENfVlBfVElNSU5HX0gJCQkw eDU0CisjZGVmaW5lIERJU1BDX1ZQX1RJTUlOR19WCQkJMHg1OAorI2RlZmluZSBESVNQQ19WUF9D U0NfQ09FRjMJCQkweDVjCisjZGVmaW5lIERJU1BDX1ZQX0NTQ19DT0VGNAkJCTB4NjAKKyNkZWZp bmUgRElTUENfVlBfQ1NDX0NPRUY1CQkJMHg2NAorI2RlZmluZSBESVNQQ19WUF9DU0NfQ09FRjYJ CQkweDY4CisjZGVmaW5lIERJU1BDX1ZQX0NTQ19DT0VGNwkJCTB4NmMKKyNkZWZpbmUgRElTUENf VlBfU0FGRVRZX0FUVFJJQlVURVNfMAkJMHg3MAorI2RlZmluZSBESVNQQ19WUF9TQUZFVFlfQVRU UklCVVRFU18xCQkweDc0CisjZGVmaW5lIERJU1BDX1ZQX1NBRkVUWV9BVFRSSUJVVEVTXzIJCTB4 NzgKKyNkZWZpbmUgRElTUENfVlBfU0FGRVRZX0FUVFJJQlVURVNfMwkJMHg3YworI2RlZmluZSBE SVNQQ19WUF9TQUZFVFlfQ0FQVF9TSUdOQVRVUkVfMAkweDkwCisjZGVmaW5lIERJU1BDX1ZQX1NB RkVUWV9DQVBUX1NJR05BVFVSRV8xCTB4OTQKKyNkZWZpbmUgRElTUENfVlBfU0FGRVRZX0NBUFRf U0lHTkFUVVJFXzIJMHg5OAorI2RlZmluZSBESVNQQ19WUF9TQUZFVFlfQ0FQVF9TSUdOQVRVUkVf MwkweDljCisjZGVmaW5lIERJU1BDX1ZQX1NBRkVUWV9QT1NJVElPTl8wCQkweGIwCisjZGVmaW5l IERJU1BDX1ZQX1NBRkVUWV9QT1NJVElPTl8xCQkweGI0CisjZGVmaW5lIERJU1BDX1ZQX1NBRkVU WV9QT1NJVElPTl8yCQkweGI4CisjZGVmaW5lIERJU1BDX1ZQX1NBRkVUWV9QT1NJVElPTl8zCQkw eGJjCisjZGVmaW5lIERJU1BDX1ZQX1NBRkVUWV9SRUZfU0lHTkFUVVJFXzAJCTB4ZDAKKyNkZWZp bmUgRElTUENfVlBfU0FGRVRZX1JFRl9TSUdOQVRVUkVfMQkJMHhkNAorI2RlZmluZSBESVNQQ19W UF9TQUZFVFlfUkVGX1NJR05BVFVSRV8yCQkweGQ4CisjZGVmaW5lIERJU1BDX1ZQX1NBRkVUWV9S RUZfU0lHTkFUVVJFXzMJCTB4ZGMKKyNkZWZpbmUgRElTUENfVlBfU0FGRVRZX1NJWkVfMAkJCTB4 ZjAKKyNkZWZpbmUgRElTUENfVlBfU0FGRVRZX1NJWkVfMQkJCTB4ZjQKKyNkZWZpbmUgRElTUENf VlBfU0FGRVRZX1NJWkVfMgkJCTB4ZjgKKyNkZWZpbmUgRElTUENfVlBfU0FGRVRZX1NJWkVfMwkJ CTB4ZmMKKyNkZWZpbmUgRElTUENfVlBfU0FGRVRZX0xGU1JfU0VFRAkJMHgxMTAKKyNkZWZpbmUg RElTUENfVlBfR0FNTUFfVEFCTEUJCQkweDEyMAorI2RlZmluZSBESVNQQ19WUF9EU1NfT0xESV9D RkcJCQkweDE2MAorI2RlZmluZSBESVNQQ19WUF9EU1NfT0xESV9TVEFUVVMJCTB4MTY0CisjZGVm aW5lIERJU1BDX1ZQX0RTU19PTERJX0xCCQkJMHgxNjgKKyNkZWZpbmUgRElTUENfVlBfRFNTX01F UkdFX1NQTElUCQkweDE2YyAvKiBKNzIxRSAqLworI2RlZmluZSBESVNQQ19WUF9EU1NfRE1BX1RI UkVBRFNJWkUJCTB4MTcwIC8qIEo3MjFFICovCisjZGVmaW5lIERJU1BDX1ZQX0RTU19ETUFfVEhS RUFEU0laRV9TVEFUVVMJMHgxNzQgLyogSjcyMUUgKi8KKworLyoKKyAqIE9MREkgSU9fQ1RSTCBy ZWdpc3RlciBvZmZzZXRzLiBPbiBBTTY1NCB0aGUgcmVnaXN0ZXJzIGFyZSBmb3VuZAorICogZnJv bSBDVFJMX01NUjAsIHRoZXJlIHRoZSBzeXNjb24gcmVnbWFwIHNob3VsZCBtYXAgMHgxNCBieXRl cyBmcm9tCisgKiBDVFJMTU1SMFAxX09MRElfREFUMF9JT19DVFJMIHRvIENUUkxNTVIwUDFfT0xE SV9DTEtfSU9fQ1RSTAorICogcmVnaXN0ZXIgcmFuZ2UuCisgKi8KKyNkZWZpbmUgT0xESV9EQVQw X0lPX0NUUkwJCQkweDAwCisjZGVmaW5lIE9MRElfREFUMV9JT19DVFJMCQkJMHgwNAorI2RlZmlu ZSBPTERJX0RBVDJfSU9fQ1RSTAkJCTB4MDgKKyNkZWZpbmUgT0xESV9EQVQzX0lPX0NUUkwJCQkw eDBDCisjZGVmaW5lIE9MRElfQ0xLX0lPX0NUUkwJCQkweDEwCisKKyNkZWZpbmUgT0xESV9QV1JE Tl9UWAkJCQlCSVQoOCkKKworI2VuZGlmIC8qIF9fVElEU1NfRElTUENfUkVHU19IICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZHJ2LmMgYi9kcml2ZXJzL2dwdS9k cm0vdGlkc3MvdGlkc3NfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi5kOTVlNGJlMmM3YjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlk c3MvdGlkc3NfZHJ2LmMKQEAgLTAsMCArMSwyODUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRleGFzIEluc3RydW1lbnRz IEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICogQXV0aG9yOiBUb21pIFZhbGtl aW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25z b2xlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9kcnYuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2lycS5o PgorI2luY2x1ZGUgPGRybS9kcm1fcHJvYmVfaGVscGVyLmg+CisKKyNpbmNsdWRlICJ0aWRzc19k aXNwYy5oIgorI2luY2x1ZGUgInRpZHNzX2Rydi5oIgorI2luY2x1ZGUgInRpZHNzX2ttcy5oIgor I2luY2x1ZGUgInRpZHNzX2lycS5oIgorCisvKiBQb3dlciBtYW5hZ2VtZW50ICovCisKK2ludCB0 aWRzc19ydW50aW1lX2dldChzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcykKK3sKKwlpbnQgcjsK KworCWRldl9kYmcodGlkc3MtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlyID0gcG1fcnVu dGltZV9nZXRfc3luYyh0aWRzcy0+ZGV2KTsKKwlXQVJOX09OKHIgPCAwKTsKKwlyZXR1cm4gciA8 IDAgPyByIDogMDsKK30KKwordm9pZCB0aWRzc19ydW50aW1lX3B1dChzdHJ1Y3QgdGlkc3NfZGV2 aWNlICp0aWRzcykKK3sKKwlpbnQgcjsKKworCWRldl9kYmcodGlkc3MtPmRldiwgIiVzXG4iLCBf X2Z1bmNfXyk7CisKKwlyID0gcG1fcnVudGltZV9wdXRfc3luYyh0aWRzcy0+ZGV2KTsKKwlXQVJO X09OKHIgPCAwKTsKK30KKworc3RhdGljIGludCBfX21heWJlX3VudXNlZCB0aWRzc19wbV9ydW50 aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB0aWRzc19kZXZpY2Ug KnRpZHNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkZXZfZGJnKGRldiwgIiVzXG4iLCBf X2Z1bmNfXyk7CisKKwlyZXR1cm4gZGlzcGNfcnVudGltZV9zdXNwZW5kKHRpZHNzLT5kaXNwYyk7 Cit9CisKK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgdGlkc3NfcG1fcnVudGltZV9yZXN1bWUo c3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGV2 X2dldF9kcnZkYXRhKGRldik7CisJaW50IHI7CisKKwlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1 bmNfXyk7CisKKwlyID0gZGlzcGNfcnVudGltZV9yZXN1bWUodGlkc3MtPmRpc3BjKTsKKwlpZiAo cikKKwkJcmV0dXJuIHI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX21heWJlX3Vu dXNlZCB0aWRzc19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGlkc3Nf ZGV2aWNlICp0aWRzcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJZGV2X2RiZyhkZXYsICIl c1xuIiwgX19mdW5jX18pOworCisJcmV0dXJuIGRybV9tb2RlX2NvbmZpZ19oZWxwZXJfc3VzcGVu ZCgmdGlkc3MtPmRkZXYpOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHRpZHNzX3Jl c3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3Mg PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRldl9kYmcoZGV2LCAiJXNcbiIsIF9fZnVuY19f KTsKKworCXJldHVybiBkcm1fbW9kZV9jb25maWdfaGVscGVyX3Jlc3VtZSgmdGlkc3MtPmRkZXYp OworfQorCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29w cyB0aWRzc19wbV9vcHMgPSB7CisJLnJ1bnRpbWVfc3VzcGVuZCA9IHRpZHNzX3BtX3J1bnRpbWVf c3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUgPSB0aWRzc19wbV9ydW50aW1lX3Jlc3VtZSwKKwlT RVRfU1lTVEVNX1NMRUVQX1BNX09QUyh0aWRzc19zdXNwZW5kLCB0aWRzc19yZXN1bWUpCit9Owor CisjZW5kaWYgLyogQ09ORklHX1BNICovCisKKy8qIERSTSBkZXZpY2UgSW5mb3JtYXRpb24gKi8K Kworc3RhdGljIHZvaWQgdGlkc3NfcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldikKK3sK KwlzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyA9IGRkZXYtPmRldl9wcml2YXRlOworCisJZHJt X2ttc19oZWxwZXJfcG9sbF9maW5pKGRkZXYpOworCisJdGlkc3NfbW9kZXNldF9jbGVhbnVwKHRp ZHNzKTsKKworCWRybV9kZXZfZmluaShkZGV2KTsKKworCWtmcmVlKHRpZHNzKTsKK30KKworREVG SU5FX0RSTV9HRU1fQ01BX0ZPUFModGlkc3NfZm9wcyk7CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Ry aXZlciB0aWRzc19kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcwk9IERSSVZFUl9HRU0gfCBE UklWRVJfTU9ERVNFVCB8IERSSVZFUl9BVE9NSUMsCisJLmZvcHMJCQk9ICZ0aWRzc19mb3BzLAor CS5yZWxlYXNlCQk9IHRpZHNzX3JlbGVhc2UsCisJRFJNX0dFTV9DTUFfVk1BUF9EUklWRVJfT1BT LAorCS5uYW1lCQkJPSAidGlkc3MiLAorCS5kZXNjCQkJPSAiVEkgS2V5c3RvbmUgRFNTIiwKKwku ZGF0ZQkJCT0gIjIwMTgwMjE1IiwKKwkubWFqb3IJCQk9IDEsCisJLm1pbm9yCQkJPSAwLAorCisJ LmlycV9wcmVpbnN0YWxsCQk9IHRpZHNzX2lycV9wcmVpbnN0YWxsLAorCS5pcnFfcG9zdGluc3Rh bGwJPSB0aWRzc19pcnFfcG9zdGluc3RhbGwsCisJLmlycV9oYW5kbGVyCQk9IHRpZHNzX2lycV9o YW5kbGVyLAorCS5pcnFfdW5pbnN0YWxsCQk9IHRpZHNzX2lycV91bmluc3RhbGwsCit9OworCitz dGF0aWMgaW50IHRpZHNzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJ c3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0 aWRzczsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldjsKKwlpbnQgcmV0OworCWludCBpcnE7CisK KwlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBDYW4ndCB1c2UgZGV2bV8q IHNpbmNlIGRybV9kZXZpY2UncyBsaWZldGltZSBtYXkgZXhjZWVkIGRldidzICovCisJdGlkc3Mg PSBremFsbG9jKHNpemVvZigqdGlkc3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRpZHNzKQorCQly ZXR1cm4gLUVOT01FTTsKKworCWRkZXYgPSAmdGlkc3MtPmRkZXY7CisKKwlyZXQgPSBkZXZtX2Ry bV9kZXZfaW5pdCgmcGRldi0+ZGV2LCBkZGV2LCAmdGlkc3NfZHJpdmVyKTsKKwlpZiAocmV0KSB7 CisJCWtmcmVlKGRkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCXRpZHNzLT5kZXYgPSBkZXY7 CisJdGlkc3MtPmZlYXQgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTsKKworCXBsYXRm b3JtX3NldF9kcnZkYXRhKHBkZXYsIHRpZHNzKTsKKworCWRkZXYtPmRldl9wcml2YXRlID0gdGlk c3M7CisKKwlyZXQgPSBkaXNwY19pbml0KHRpZHNzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgZGlzcGM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4g cmV0OworCX0KKworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisKKyNpZm5kZWYgQ09ORklHX1BN CisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBQTSwgd2UgbmVlZCB0byBjYWxsIHJlc3VtZSBtYW51YWxs eSAqLworCWRpc3BjX3J1bnRpbWVfcmVzdW1lKHRpZHNzLT5kaXNwYyk7CisjZW5kaWYKKworCXJl dCA9IHRpZHNzX21vZGVzZXRfaW5pdCh0aWRzcyk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJl dCAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdCBEUk0v S01TICglZClcbiIsIHJldCk7CisJCWdvdG8gZXJyX3J1bnRpbWVfc3VzcGVuZDsKKwl9CisKKwlp cnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCXJldCA9 IGlycTsKKwkJZ290byBlcnJfcnVudGltZV9zdXNwZW5kOworCX0KKworCXJldCA9IGRybV9pcnFf aW5zdGFsbChkZGV2LCBpcnEpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJkcm1faXJx X2luc3RhbGwgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcnVudGltZV9zdXNwZW5k OworCX0KKworCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkZGV2KTsKKworCWRybV9tb2RlX2Nv bmZpZ19yZXNldChkZGV2KTsKKworCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIoZGRldiwgMCk7CisJ aWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBEUk0gZGV2aWNl XG4iKTsKKwkJZ290byBlcnJfaXJxX3VuaW5zdGFsbDsKKwl9CisKKwlkcm1fZmJkZXZfZ2VuZXJp Y19zZXR1cChkZGV2LCAzMik7CisKKwlkZXZfZGJnKGRldiwgIiVzIGRvbmVcbiIsIF9fZnVuY19f KTsKKworCXJldHVybiAwOworCitlcnJfaXJxX3VuaW5zdGFsbDoKKwlkcm1faXJxX3VuaW5zdGFs bChkZGV2KTsKKworZXJyX3J1bnRpbWVfc3VzcGVuZDoKKyNpZm5kZWYgQ09ORklHX1BNCisJZGlz cGNfcnVudGltZV9zdXNwZW5kKHRpZHNzLT5kaXNwYyk7CisjZW5kaWYKKwlwbV9ydW50aW1lX2Rp c2FibGUoZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdGlkc3NfcmVtb3Zl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0g JnBkZXYtPmRldjsKKwlzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyA9IHBsYXRmb3JtX2dldF9k cnZkYXRhKHBkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gJnRpZHNzLT5kZGV2Owor CisJZGV2X2RiZyhkZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJZHJtX2Rldl91bnJlZ2lzdGVy KGRkZXYpOworCisJZHJtX2F0b21pY19oZWxwZXJfc2h1dGRvd24oZGRldik7CisKKwlkcm1faXJx X3VuaW5zdGFsbChkZGV2KTsKKworI2lmbmRlZiBDT05GSUdfUE0KKwkvKiBJZiB3ZSBkb24ndCBo YXZlIFBNLCB3ZSBuZWVkIHRvIGNhbGwgc3VzcGVuZCBtYW51YWxseSAqLworCWRpc3BjX3J1bnRp bWVfc3VzcGVuZCh0aWRzcy0+ZGlzcGMpOworI2VuZGlmCisJcG1fcnVudGltZV9kaXNhYmxlKGRl dik7CisKKwkvKiBkZXZtIGFsbG9jYXRlZCBkaXNwYyBnb2VzIGF3YXkgd2l0aCB0aGUgZGV2IHNv IG1hcmsgaXQgTlVMTCAqLworCWRpc3BjX3JlbW92ZSh0aWRzcyk7CisKKwlkZXZfZGJnKGRldiwg IiVzIGRvbmVcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0 aWRzc19zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWRybV9hdG9t aWNfaGVscGVyX3NodXRkb3duKHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGlkc3Nfb2ZfdGFibGVbXSA9IHsKKwl7IC5j b21wYXRpYmxlID0gInRpLGsyZy1kc3MiLCAuZGF0YSA9ICZkaXNwY19rMmdfZmVhdHMsIH0sCisJ eyAuY29tcGF0aWJsZSA9ICJ0aSxhbTY1eC1kc3MiLCAuZGF0YSA9ICZkaXNwY19hbTY1eF9mZWF0 cywgfSwKKwl7IC5jb21wYXRpYmxlID0gInRpLGo3MjFlLWRzcyIsIC5kYXRhID0gJmRpc3BjX2o3 MjFlX2ZlYXRzLCB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdGlkc3Nf b2ZfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aWRzc19wbGF0Zm9y bV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHRpZHNzX3Byb2JlLAorCS5yZW1vdmUJCT0gdGlkc3Nf cmVtb3ZlLAorCS5zaHV0ZG93bgk9IHRpZHNzX3NodXRkb3duLAorCS5kcml2ZXIJCT0geworCQku bmFtZQk9ICJ0aWRzcyIsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZ0aWRzc19wbV9vcHMs CisjZW5kaWYKKwkJLm9mX21hdGNoX3RhYmxlID0gdGlkc3Nfb2ZfdGFibGUsCisJCS5zdXBwcmVz c19iaW5kX2F0dHJzID0gdHJ1ZSwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih0 aWRzc19wbGF0Zm9ybV9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJUb21pIFZhbGtlaW5lbiA8 dG9taS52YWxrZWluZW5AdGkuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUSSBLZXlzdG9u ZSBEU1MgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3Mv dGlkc3NfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hM2Fk MGI3MzZlODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3Nf ZHJ2LmgKQEAgLTAsMCArMSw0MCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jw b3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKiBBdXRob3I6IFRvbWkgVmFsa2VpbmVuIDx0 b21pLnZhbGtlaW5lbkB0aS5jb20+CisgKi8KKworI2lmbmRlZiBfX1RJRFNTX0RSVl9IX18KKyNk ZWZpbmUgX19USURTU19EUlZfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisj ZGVmaW5lIFRJRFNTX01BWF9QT1JUUyA0CisjZGVmaW5lIFRJRFNTX01BWF9QTEFORVMgNAorCit0 eXBlZGVmIHUzMiBkaXNwY19pcnFfdDsKKworc3RydWN0IHRpZHNzX2RldmljZSB7CisJc3RydWN0 IGRybV9kZXZpY2UgZGRldjsJCS8qIERSTSBkZXZpY2UgZm9yIERTUyAqLworCXN0cnVjdCBkZXZp Y2UgKmRldjsJCS8qIFVuZGVybHlpbmcgRFNTIGRldmljZSAqLworCisJY29uc3Qgc3RydWN0IGRp c3BjX2ZlYXR1cmVzICpmZWF0OworCXN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjOworCisJdW5z aWduZWQgaW50IG51bV9jcnRjczsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGNzW1RJRFNTX01BWF9Q T1JUU107CisKKwl1bnNpZ25lZCBpbnQgbnVtX3BsYW5lczsKKwlzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZXNbVElEU1NfTUFYX1BMQU5FU107CisKKwlzcGlubG9ja190IHdhaXRfbG9jazsJLyogcHJv dGVjdHMgdGhlIGlycSBtYXNrcyAqLworCWRpc3BjX2lycV90IGlycV9tYXNrOwkvKiBlbmFibGVk IGlycXMgaW4gYWRkaXRpb24gdG8gd2FpdF9saXN0ICovCisJZGlzcGNfaXJxX3QgaXJxX3VmX21h c2s7IC8qIHVuZGVyZmxvdyBpcnEgYml0cyBmb3IgYWxsIHBsYW5lcyAqLworCisJc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnNhdmVkX3N0YXRlOworfTsKKworaW50IHRpZHNzX3J1bnRpbWVfZ2V0 KHN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzKTsKK3ZvaWQgdGlkc3NfcnVudGltZV9wdXQoc3Ry dWN0IHRpZHNzX2RldmljZSAqdGlkc3MpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS90aWRzcy90aWRzc19lbmNvZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlk c3NfZW5jb2Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzJk N2VkZDgwMDg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNz X2VuY29kZXIuYwpAQCAtMCwwICsxLDg4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUZXhhcyBJbnN0cnVtZW50cyBJbmNv cnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4g PHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+ CisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVs cGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2Yu aD4KKworI2luY2x1ZGUgInRpZHNzX2NydGMuaCIKKyNpbmNsdWRlICJ0aWRzc19kcnYuaCIKKyNp bmNsdWRlICJ0aWRzc19lbmNvZGVyLmgiCisKK3N0YXRpYyBpbnQgdGlkc3NfZW5jb2Rlcl9hdG9t aWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICAgIHN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGVuY29k ZXItPmRldjsKKwlzdHJ1Y3QgdGlkc3NfY3J0Y19zdGF0ZSAqdGNydGNfc3RhdGUgPSB0b190aWRz c19jcnRjX3N0YXRlKGNydGNfc3RhdGUpOworCXN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICpkaSA9 ICZjb25uX3N0YXRlLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5mbzsKKwlzdHJ1Y3QgZHJtX2JyaWRn ZSAqYnJpZGdlOworCWJvb2wgYnVzX2ZsYWdzX3NldCA9IGZhbHNlOworCisJZGV2X2RiZyhkZGV2 LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJLyoKKwkgKiBUYWtlIHRoZSBidXNfZmxhZ3Mg ZnJvbSB0aGUgZmlyc3QgYnJpZGdlIHRoYXQgZGVmaW5lcworCSAqIGJyaWRnZSB0aW1pbmdzLCBv ciBmcm9tIHRoZSBjb25uZWN0b3IncyBkaXNwbGF5X2luZm8gaWYgbm8KKwkgKiBicmlkZ2UgZGVm aW5lcyB0aGUgdGltaW5ncy4KKwkgKi8KKwlmb3IgKGJyaWRnZSA9IGVuY29kZXItPmJyaWRnZTsg YnJpZGdlOyBicmlkZ2UgPSBicmlkZ2UtPm5leHQpIHsKKwkJaWYgKCFicmlkZ2UtPnRpbWluZ3Mp CisJCQljb250aW51ZTsKKworCQl0Y3J0Y19zdGF0ZS0+YnVzX2ZsYWdzID0gYnJpZGdlLT50aW1p bmdzLT5pbnB1dF9idXNfZmxhZ3M7CisJCWJ1c19mbGFnc19zZXQgPSB0cnVlOworCQlicmVhazsK Kwl9CisKKwlpZiAoIWRpLT5idXNfZm9ybWF0cyB8fCBkaS0+bnVtX2J1c19mb3JtYXRzID09IDAp ICB7CisJCWRldl9lcnIoZGRldi0+ZGV2LCAiJXM6IE5vIGJ1c19mb3JtYXRzIGluIGNvbm5lY3Rl ZCBkaXNwbGF5XG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkv LyBYWFggYW55IGNsZWFuZXIgd2F5IHRvIHNldCBidXMgZm9ybWF0IGFuZCBmbGFncz8KKwl0Y3J0 Y19zdGF0ZS0+YnVzX2Zvcm1hdCA9IGRpLT5idXNfZm9ybWF0c1swXTsKKwlpZiAoIWJ1c19mbGFn c19zZXQpCisJCXRjcnRjX3N0YXRlLT5idXNfZmxhZ3MgPSBkaS0+YnVzX2ZsYWdzOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNz IGVuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5hdG9taWNfY2hlY2sgPSB0aWRzc19lbmNvZGVy X2F0b21pY19jaGVjaywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVu Y3MgZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGRybV9lbmNvZGVyX2NsZWFudXAsCit9 OworCitzdHJ1Y3QgZHJtX2VuY29kZXIgKnRpZHNzX2VuY29kZXJfY3JlYXRlKHN0cnVjdCB0aWRz c19kZXZpY2UgKnRpZHNzLAorCQkJCQkgdTMyIGVuY29kZXJfdHlwZSwgdTMyIHBvc3NpYmxlX2Ny dGNzKQoreworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jOworCWludCByZXQ7CisKKwllbmMgPSBk ZXZtX2t6YWxsb2ModGlkc3MtPmRldiwgc2l6ZW9mKCplbmMpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWVuYykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwllbmMtPnBvc3NpYmxlX2NydGNz ID0gcG9zc2libGVfY3J0Y3M7CisKKwlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KCZ0aWRzcy0+ZGRl diwgZW5jLCAmZW5jb2Rlcl9mdW5jcywKKwkJCSAgICAgICBlbmNvZGVyX3R5cGUsIE5VTEwpOwor CWlmIChyZXQgPCAwKQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJZHJtX2VuY29kZXJfaGVs cGVyX2FkZChlbmMsICZlbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisKKwlkZXZfZGJnKHRpZHNzLT5k ZXYsICJFbmNvZGVyIGNyZWF0ZSBkb25lXG4iKTsKKworCXJldHVybiBlbmM7Cit9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZW5jb2Rlci5oIGIvZHJpdmVycy9ncHUv ZHJtL3RpZHNzL3RpZHNzX2VuY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjA2ODU0ZDY2ZTdlNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS90aWRzcy90aWRzc19lbmNvZGVyLmgKQEAgLTAsMCArMSwxNyBAQAorLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGV4YXMg SW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKiBBdXRob3I6 IFRvbWkgVmFsa2VpbmVuIDx0b21pLnZhbGtlaW5lbkB0aS5jb20+CisgKi8KKworI2lmbmRlZiBf X1RJRFNTX0VOQ09ERVJfSF9fCisjZGVmaW5lIF9fVElEU1NfRU5DT0RFUl9IX18KKworI2luY2x1 ZGUgPGRybS9kcm1fZW5jb2Rlci5oPgorCitzdHJ1Y3QgdGlkc3NfZGV2aWNlOworCitzdHJ1Y3Qg ZHJtX2VuY29kZXIgKnRpZHNzX2VuY29kZXJfY3JlYXRlKHN0cnVjdCB0aWRzc19kZXZpY2UgKnRp ZHNzLAorCQkJCQkgdTMyIGVuY29kZXJfdHlwZSwgdTMyIHBvc3NpYmxlX2NydGNzKTsKKworI2Vu ZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfaXJxLmMgYi9kcml2 ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi4zMzA4ZWZhY2FlMjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vdGlkc3MvdGlkc3NfaXJxLmMKQEAgLTAsMCArMSwxODUgQEAKKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRleGFzIElu c3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICogQXV0aG9yOiBU b21pIFZhbGtlaW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29tPgorICovCisKKyNpbmNsdWRlIDxk cm0vZHJtX3ByaW50Lmg+CisKKyNpbmNsdWRlICJ0aWRzc19jcnRjLmgiCisjaW5jbHVkZSAidGlk c3NfZGlzcGMuaCIKKyNpbmNsdWRlICJ0aWRzc19kcnYuaCIKKyNpbmNsdWRlICJ0aWRzc19pcnEu aCIKKyNpbmNsdWRlICJ0aWRzc19wbGFuZS5oIgorCisvKiBjYWxsIHdpdGggd2FpdF9sb2NrIGFu ZCBkaXNwYyBydW50aW1lIGhlbGQgKi8KK3N0YXRpYyB2b2lkIHRpZHNzX2lycV91cGRhdGUoc3Ry dWN0IHRpZHNzX2RldmljZSAqdGlkc3MpCit7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZ0aWRzcy0+ d2FpdF9sb2NrKTsKKworCWRpc3BjX3dyaXRlX2lycWVuYWJsZSh0aWRzcy0+ZGlzcGMsIHRpZHNz LT5pcnFfbWFzayk7Cit9CisKK3ZvaWQgdGlkc3NfaXJxX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRy bV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gY3J0Yy0+ZGV2Owor CXN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0 IHRpZHNzX2NydGMgKnRjcnRjID0gdG9fdGlkc3NfY3J0YyhjcnRjKTsKKwl1MzIgaHdfdmlkZW9w b3J0ID0gdGNydGMtPmh3X3ZpZGVvcG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bp bl9sb2NrX2lycXNhdmUoJnRpZHNzLT53YWl0X2xvY2ssIGZsYWdzKTsKKwl0aWRzcy0+aXJxX21h c2sgfD0gRFNTX0lSUV9WUF9WU1lOQ19FVkVOKGh3X3ZpZGVvcG9ydCkgfAorCQkJICAgRFNTX0lS UV9WUF9WU1lOQ19PREQoaHdfdmlkZW9wb3J0KTsKKwl0aWRzc19pcnFfdXBkYXRlKHRpZHNzKTsK KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aWRzcy0+d2FpdF9sb2NrLCBmbGFncyk7Cit9CisK K3ZvaWQgdGlkc3NfaXJxX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgdGlkc3NfZGV2 aWNlICp0aWRzcyA9IGRkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCB0aWRzc19jcnRjICp0Y3J0 YyA9IHRvX3RpZHNzX2NydGMoY3J0Yyk7CisJdTMyIGh3X3ZpZGVvcG9ydCA9IHRjcnRjLT5od192 aWRlb3BvcnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0 aWRzcy0+d2FpdF9sb2NrLCBmbGFncyk7CisJdGlkc3MtPmlycV9tYXNrICY9IH4oRFNTX0lSUV9W UF9WU1lOQ19FVkVOKGh3X3ZpZGVvcG9ydCkgfAorCQkJICAgICBEU1NfSVJRX1ZQX1ZTWU5DX09E RChod192aWRlb3BvcnQpKTsKKwl0aWRzc19pcnFfdXBkYXRlKHRpZHNzKTsKKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZ0aWRzcy0+d2FpdF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lk IHRpZHNzX2lycV9maWZvX3VuZGVyZmxvdyhzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcywKKwkJ CQkgICAgIGRpc3BjX2lycV90IGlycXN0YXR1cykKK3sKKwlzdGF0aWMgREVGSU5FX1JBVEVMSU1J VF9TVEFURShfcnMsIERFRkFVTFRfUkFURUxJTUlUX0lOVEVSVkFMLAorCQkJCSAgICAgIERFRkFV TFRfUkFURUxJTUlUX0JVUlNUKTsKKwlkaXNwY19pcnFfdCBtYXNrZWQ7CisJdW5zaWduZWQgaW50 IGk7CisKKwlzcGluX2xvY2soJnRpZHNzLT53YWl0X2xvY2spOworCW1hc2tlZCA9IGlycXN0YXR1 cyAmIHRpZHNzLT5pcnFfdWZfbWFzayAmIHRpZHNzLT5pcnFfbWFzazsKKwlzcGluX3VubG9jaygm dGlkc3MtPndhaXRfbG9jayk7CisKKwlpZiAoIW1hc2tlZCkKKwkJcmV0dXJuOworCisJaWYgKCFf X3JhdGVsaW1pdCgmX3JzKSkKKwkJcmV0dXJuOworCisJRFJNX0VSUk9SKCJGSUZPIHVuZGVyZmxv dyBvbiAiKTsKKworCWZvciAoaSA9IDA7IGkgPCBUSURTU19NQVhfUExBTkVTOyArK2kpIHsKKwkJ aWYgKG1hc2tlZCAmIERTU19JUlFfUExBTkVfRklGT19VTkRFUkZMT1coaSkpCisJCQlwcl9jb250 KCIldTolcyAiLCBpLCB0aWRzcy0+ZmVhdC0+dmlkX25hbWVbaV0pOworCX0KKworCXByX2NvbnQo IiglMDh4KVxuIiwgaXJxc3RhdHVzKTsKK30KKworaXJxcmV0dXJuX3QgdGlkc3NfaXJxX2hhbmRs ZXIoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gKHN0 cnVjdCBkcm1fZGV2aWNlICopIGFyZzsKKwlzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyA9IGRk ZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGludCBpZDsKKwlkaXNwY19pcnFfdCBpcnFzdGF0 dXM7CisKKwlpZiAoV0FSTl9PTighZGRldi0+aXJxX2VuYWJsZWQpKQorCQlyZXR1cm4gSVJRX05P TkU7CisKKwlpcnFzdGF0dXMgPSBkaXNwY19yZWFkX2FuZF9jbGVhcl9pcnFzdGF0dXModGlkc3Mt PmRpc3BjKTsKKworCWZvciAoaWQgPSAwOyBpZCA8IHRpZHNzLT5udW1fY3J0Y3M7IGlkKyspIHsK KwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gdGlkc3MtPmNydGNzW2lkXTsKKwkJc3RydWN0IHRp ZHNzX2NydGMgKnRjcnRjID0gdG9fdGlkc3NfY3J0YyhjcnRjKTsKKwkJdTMyIGh3X3ZpZGVvcG9y dCA9IHRjcnRjLT5od192aWRlb3BvcnQ7CisKKwkJaWYgKGlycXN0YXR1cyAmIChEU1NfSVJRX1ZQ X1ZTWU5DX0VWRU4oaHdfdmlkZW9wb3J0KSB8CisJCQkJIERTU19JUlFfVlBfVlNZTkNfT0REKGh3 X3ZpZGVvcG9ydCkpKQorCQkJdGlkc3NfY3J0Y192YmxhbmtfaXJxKGNydGMpOworCisJCWlmIChp cnFzdGF0dXMgJiAoRFNTX0lSUV9WUF9GUkFNRV9ET05FKGh3X3ZpZGVvcG9ydCkpKQorCQkJdGlk c3NfY3J0Y19mcmFtZWRvbmVfaXJxKGNydGMpOworCisJCWlmIChpcnFzdGF0dXMgJiBEU1NfSVJR X1ZQX1NZTkNfTE9TVChod192aWRlb3BvcnQpKQorCQkJdGlkc3NfY3J0Y19lcnJvcl9pcnEoY3J0 YywgaXJxc3RhdHVzKTsKKwl9CisKKwlpZiAoaXJxc3RhdHVzICYgRFNTX0lSUV9ERVZJQ0VfT0NQ X0VSUikKKwkJZGV2X2Vycl9yYXRlbGltaXRlZCh0aWRzcy0+ZGV2LCAiT0NQIGVycm9yXG4iKTsK KwlpZiAoaXJxc3RhdHVzICYgdGlkc3MtPmlycV91Zl9tYXNrKQorCQl0aWRzc19pcnFfZmlmb191 bmRlcmZsb3codGlkc3MsIGlycXN0YXR1cyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisK K3ZvaWQgdGlkc3NfaXJxX3Jlc3VtZShzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcykKK3sKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRpZHNzLT53YWl0X2xv Y2ssIGZsYWdzKTsKKwl0aWRzc19pcnFfdXBkYXRlKHRpZHNzKTsKKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZ0aWRzcy0+d2FpdF9sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgdGlkc3NfaXJxX3By ZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYpCit7CisJc3RydWN0IHRpZHNzX2Rldmlj ZSAqdGlkc3MgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKworCXNwaW5fbG9ja19pbml0KCZ0aWRzcy0+ d2FpdF9sb2NrKTsKKworCXRpZHNzX3J1bnRpbWVfZ2V0KHRpZHNzKTsKKworCWRpc3BjX3dyaXRl X2lycWVuYWJsZSh0aWRzcy0+ZGlzcGMsIDApOworCWRpc3BjX3JlYWRfYW5kX2NsZWFyX2lycXN0 YXR1cyh0aWRzcy0+ZGlzcGMpOworCisJdGlkc3NfcnVudGltZV9wdXQodGlkc3MpOworfQorCitp bnQgdGlkc3NfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2KQoreworCXN0 cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQg bG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXRpZHNzX3J1bnRpbWVfZ2V0KHRpZHNz KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0aWRzcy0+d2FpdF9sb2NrLCBmbGFncyk7CisKKwl0 aWRzcy0+aXJxX21hc2sgPSBEU1NfSVJRX0RFVklDRV9PQ1BfRVJSOworCisJdGlkc3MtPmlycV91 Zl9tYXNrID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgdGlkc3MtPm51bV9wbGFuZXM7ICsraSkgewor CQlzdHJ1Y3QgdGlkc3NfcGxhbmUgKnRwbGFuZSA9IHRvX3RpZHNzX3BsYW5lKHRpZHNzLT5wbGFu ZXNbaV0pOworCisJCXRpZHNzLT5pcnFfdWZfbWFzayB8PQorCQkJRFNTX0lSUV9QTEFORV9GSUZP X1VOREVSRkxPVyh0cGxhbmUtPmh3X3BsYW5lX2lkKTsKKwl9CisJdGlkc3MtPmlycV9tYXNrIHw9 IHRpZHNzLT5pcnFfdWZfbWFzazsKKworCWZvciAoaSA9IDA7IGkgPCB0aWRzcy0+bnVtX2NydGNz OyArK2kpIHsKKwkJc3RydWN0IHRpZHNzX2NydGMgKnRjcnRjID0gdG9fdGlkc3NfY3J0Yyh0aWRz cy0+Y3J0Y3NbaV0pOworCisJCXRpZHNzLT5pcnFfbWFzayB8PSBEU1NfSVJRX1ZQX1NZTkNfTE9T VCh0Y3J0Yy0+aHdfdmlkZW9wb3J0KTsKKworCQl0aWRzcy0+aXJxX21hc2sgfD0gRFNTX0lSUV9W UF9GUkFNRV9ET05FKHRjcnRjLT5od192aWRlb3BvcnQpOworCX0KKworCXRpZHNzX2lycV91cGRh dGUodGlkc3MpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGlkc3MtPndhaXRfbG9jaywg ZmxhZ3MpOworCisJdGlkc3NfcnVudGltZV9wdXQodGlkc3MpOworCisJcmV0dXJuIDA7Cit9CisK K3ZvaWQgdGlkc3NfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGRldikKK3sKKwlz dHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyA9IGRkZXYtPmRldl9wcml2YXRlOworCisJdGlkc3Nf cnVudGltZV9nZXQodGlkc3MpOworCWRpc3BjX3dyaXRlX2lycWVuYWJsZSh0aWRzcy0+ZGlzcGMs IDApOworCXRpZHNzX3J1bnRpbWVfcHV0KHRpZHNzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS90aWRzcy90aWRzc19pcnEuaCBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19p cnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjAzM2JjY2IxZTQ3 MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19pcnEuaApA QCAtMCwwICsxLDcyIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwor LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQg LSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4gPHRvbWkudmFs a2VpbmVuQHRpLmNvbT4KKyAqLworCisjaWZuZGVmIF9fVElEU1NfSVJRX0hfXworI2RlZmluZSBf X1RJRFNTX0lSUV9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlICJ0 aWRzc19kcnYuaCIKKworLyoKKyAqIFRoZSBJUlEgc3RhdHVzIGZyb20gdmFyaW91cyBESVNQQyBJ UlEgcmVnaXN0ZXJzIGFyZSBwYWNrZWQgaW50byBhIHNpbmdsZQorICogdmFsdWUsIHdoZXJlIHRo ZSBiaXRzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6CisgKgorICogYml0IGdyb3VwIHxkZXZ8d2Ig fG1yZzB8bXJnMXxtcmcyfG1yZzN8cGxhbmUwLTN8IDx1bnVzZWQ+IHwKKyAqIGJpdCB1c2UgICB8 RCAgfGZvdXxGRU9MfEZFT0x8RkVPTHxGRU9MfCAgVVVVVSAgfCAgICAgICAgICB8CisgKiBiaXQg bnVtYmVyfDAgIHwxLTN8NC03IHw4LTExfCAgMTItMTkgIHwgMjAtMjMgIHwgIDI0LTMxICAgfAor ICoKKyAqIGRldmljZSBiaXRzOglEID0gT0NQIGVycm9yCisgKiBXQiBiaXRzOglmID0gZnJhbWUg ZG9uZSB3YiwgbyA9IHdiIGJ1ZmZlciBvdmVyZmxvdywKKyAqCQl1ID0gd2IgYnVmZmVyIHVuY29t cGxldGUKKyAqIHZwIGJpdHM6CUYgPSBmcmFtZSBkb25lLCBFID0gdnN5bmMgZXZlbiwgTyA9IHZz eW5jIG9kZCwgTCA9IHN5bmMgbG9zdAorICogcGxhbmUgYml0czoJVSA9IGZpZm8gdW5kZXJmbG93 CisgKi8KKworI2RlZmluZSBEU1NfSVJRX0RFVklDRV9PQ1BfRVJSCQkJQklUX1VMTCgwKQorCisj ZGVmaW5lIERTU19JUlFfREVWSUNFX0ZSQU1FRE9ORVdCCQlCSVRfVUxMKDEpCisjZGVmaW5lIERT U19JUlFfREVWSUNFX1dCQlVGRkVST1ZFUkZMT1cJCUJJVF9VTEwoMikKKyNkZWZpbmUgRFNTX0lS UV9ERVZJQ0VfV0JVTkNPTVBMRVRFRVJST1IJQklUX1VMTCgzKQorI2RlZmluZSBEU1NfSVJRX0RF VklDRV9XQl9NQVNLCQkJR0VOTUFTS19VTEwoMywgMSkKKworI2RlZmluZSBEU1NfSVJRX1ZQX0JJ VF9OKGNoLCBiaXQpCSg0ICsgNCAqIChjaCkgKyAoYml0KSkKKyNkZWZpbmUgRFNTX0lSUV9QTEFO RV9CSVRfTihwbGFuZSwgYml0KSBcCisJKERTU19JUlFfVlBfQklUX04oVElEU1NfTUFYX1BPUlRT LCAwKSArIDEgKiAocGxhbmUpICsgKGJpdCkpCisKKyNkZWZpbmUgRFNTX0lSUV9WUF9CSVQoY2gs IGJpdCkJQklUX1VMTChEU1NfSVJRX1ZQX0JJVF9OKChjaCksIChiaXQpKSkKKyNkZWZpbmUgRFNT X0lSUV9QTEFORV9CSVQocGxhbmUsIGJpdCkgXAorCUJJVF9VTEwoRFNTX0lSUV9QTEFORV9CSVRf TigocGxhbmUpLCAoYml0KSkpCisKKyNkZWZpbmUgRFNTX0lSUV9WUF9NQVNLKGNoKSBcCisJR0VO TUFTS19VTEwoRFNTX0lSUV9WUF9CSVRfTigoY2gpLCAzKSwgRFNTX0lSUV9WUF9CSVRfTigoY2gp LCAwKSkKKyNkZWZpbmUgRFNTX0lSUV9QTEFORV9NQVNLKHBsYW5lKSBcCisJR0VOTUFTS19VTEwo RFNTX0lSUV9QTEFORV9CSVRfTigocGxhbmUpLCAwKSwgXAorCQkgICAgRFNTX0lSUV9QTEFORV9C SVRfTigocGxhbmUpLCAwKSkKKworI2RlZmluZSBEU1NfSVJRX1ZQX0ZSQU1FX0RPTkUoY2gpCURT U19JUlFfVlBfQklUKChjaCksIDApCisjZGVmaW5lIERTU19JUlFfVlBfVlNZTkNfRVZFTihjaCkJ RFNTX0lSUV9WUF9CSVQoKGNoKSwgMSkKKyNkZWZpbmUgRFNTX0lSUV9WUF9WU1lOQ19PREQoY2gp CURTU19JUlFfVlBfQklUKChjaCksIDIpCisjZGVmaW5lIERTU19JUlFfVlBfU1lOQ19MT1NUKGNo KQlEU1NfSVJRX1ZQX0JJVCgoY2gpLCAzKQorCisjZGVmaW5lIERTU19JUlFfUExBTkVfRklGT19V TkRFUkZMT1cocGxhbmUpCURTU19JUlFfUExBTkVfQklUKChwbGFuZSksIDApCisKK3N0cnVjdCBk cm1fY3J0YzsKK3N0cnVjdCBkcm1fZGV2aWNlOworCitzdHJ1Y3QgdGlkc3NfZGV2aWNlOworCit2 b2lkIHRpZHNzX2lycV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2b2lk IHRpZHNzX2lycV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOworCit2b2lk IHRpZHNzX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2KTsKK2ludCB0aWRz c19pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYpOwordm9pZCB0aWRzc19p cnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2KTsKK2lycXJldHVybl90IHRpZHNz X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZyk7CisKK3ZvaWQgdGlkc3NfaXJxX3Jlc3Vt ZShzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3Rp ZHNzX2ttcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTZhMzk5 YTM5NmZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2tt cy5jCkBAIC0wLDAgKzEsMjQ4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0 ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4gPHRvbWku dmFsa2VpbmVuQHRpLmNvbT4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2JyaWRn ZS5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2ZiX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1 ZGUgPGRybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f b2YuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8ZHJtL2RybV92Ymxh bmsuaD4KKworI2luY2x1ZGUgInRpZHNzX2NydGMuaCIKKyNpbmNsdWRlICJ0aWRzc19kaXNwYy5o IgorI2luY2x1ZGUgInRpZHNzX2Rydi5oIgorI2luY2x1ZGUgInRpZHNzX2VuY29kZXIuaCIKKyNp bmNsdWRlICJ0aWRzc19rbXMuaCIKKyNpbmNsdWRlICJ0aWRzc19wbGFuZS5oIgorCitzdGF0aWMg dm9pZCB0aWRzc19hdG9taWNfY29tbWl0X3RhaWwoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9s ZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IG9sZF9zdGF0ZS0+ZGV2Owor CXN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7CisKKwlkZXZf ZGJnKGRkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwl0aWRzc19ydW50aW1lX2dldCh0 aWRzcyk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcyhkZGV2 LCBvbGRfc3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXMoZGRldiwgb2xk X3N0YXRlLCAwKTsKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzKGRk ZXYsIG9sZF9zdGF0ZSk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfaHdfZG9uZShvbGRf c3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX2ZsaXBfZG9uZShkZGV2LCBvbGRf c3RhdGUpOworCisJZHJtX2F0b21pY19oZWxwZXJfY2xlYW51cF9wbGFuZXMoZGRldiwgb2xkX3N0 YXRlKTsKKworCXRpZHNzX3J1bnRpbWVfcHV0KHRpZHNzKTsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fbW9kZV9jb25maWdfaGVscGVyX2Z1bmNzIG1vZGVfY29uZmlnX2hlbHBlcl9mdW5j cyA9IHsKKwkuYXRvbWljX2NvbW1pdF90YWlsID0gdGlkc3NfYXRvbWljX2NvbW1pdF90YWlsLAor fTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgbW9kZV9jb25m aWdfZnVuY3MgPSB7CisJLmZiX2NyZWF0ZSA9IGRybV9nZW1fZmJfY3JlYXRlLAorCS5hdG9taWNf Y2hlY2sgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKKwkuYXRvbWljX2NvbW1pdCA9IGRybV9h dG9taWNfaGVscGVyX2NvbW1pdCwKK307CisKK3N0YXRpYyBpbnQgdGlkc3NfZGlzcGNfbW9kZXNl dF9pbml0KHN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzKQoreworCXN0cnVjdCBkZXZpY2UgKmRl diA9IHRpZHNzLT5kZXY7CisJdW5zaWduZWQgaW50IGZvdXJjY3NfbGVuOworCWNvbnN0IHUzMiAq Zm91cmNjcyA9IGRpc3BjX3BsYW5lX2Zvcm1hdHModGlkc3MtPmRpc3BjLCAmZm91cmNjc19sZW4p OworCXVuc2lnbmVkIGludCBpOworCisJc3RydWN0IHBpcGUgeworCQl1MzIgaHdfdmlkZW9wb3J0 OworCQlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlOworCQl1MzIgZW5jX3R5cGU7CisJfTsKKwor CWNvbnN0IHN0cnVjdCBkaXNwY19mZWF0dXJlcyAqZmVhdCA9IHRpZHNzLT5mZWF0OworCXUzMiBt YXhfdnBzID0gZmVhdC0+bnVtX3ZwczsKKwl1MzIgbWF4X3BsYW5lcyA9IGZlYXQtPm51bV9wbGFu ZXM7CisKKwlzdHJ1Y3QgcGlwZSBwaXBlc1tUSURTU19NQVhfUE9SVFNdOworCXUzMiBudW1fcGlw ZXMgPSAwOworCXUzMiBjcnRjX21hc2s7CisKKwkvKiBmaXJzdCBmaW5kIGFsbCB0aGUgY29ubmVj dGVkIHBhbmVscyAmIGJyaWRnZXMgKi8KKworCWZvciAoaSA9IDA7IGkgPCBtYXhfdnBzOyBpKysp IHsKKwkJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7CisJCXN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2U7CisJCXUzMiBlbmNfdHlwZSA9IERSTV9NT0RFX0VOQ09ERVJfTk9ORTsKKwkJaW50IHJldDsK KworCQlyZXQgPSBkcm1fb2ZfZmluZF9wYW5lbF9vcl9icmlkZ2UoZGV2LT5vZl9ub2RlLCBpLCAw LAorCQkJCQkJICAmcGFuZWwsICZicmlkZ2UpOworCQlpZiAocmV0ID09IC1FTk9ERVYpIHsKKwkJ CWRldl9kYmcoZGV2LCAibm8gcGFuZWwvYnJpZGdlIGZvciBwb3J0ICVkXG4iLCBpKTsKKwkJCWNv bnRpbnVlOworCQl9IGVsc2UgaWYgKHJldCkgeworCQkJZGV2X2RiZyhkZXYsICJwb3J0ICVkIHBy b2JlIHJldHVybmVkICVkXG4iLCBpLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWlm IChwYW5lbCkgeworCQkJdTMyIGNvbm5fdHlwZTsKKworCQkJZGV2X2RiZyhkZXYsICJTZXR0aW5n IHVwIHBhbmVsIGZvciBwb3J0ICVkXG4iLCBpKTsKKworCQkJc3dpdGNoIChmZWF0LT52cF9idXNf dHlwZVtpXSkgeworCQkJY2FzZSBESVNQQ19WUF9PTERJOgorCQkJCWVuY190eXBlID0gRFJNX01P REVfRU5DT0RFUl9MVkRTOworCQkJCWNvbm5fdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRT OworCQkJCWJyZWFrOworCQkJY2FzZSBESVNQQ19WUF9EUEk6CisJCQkJZW5jX3R5cGUgPSBEUk1f TU9ERV9FTkNPREVSX0RQSTsKKwkJCQljb25uX3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfTFZE UzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJV0FSTl9PTigxKTsKKwkJCQlyZXR1cm4g LUVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHBhbmVsLT5jb25uZWN0b3JfdHlw ZSAhPSBjb25uX3R5cGUpIHsKKwkJCQlkZXZfZXJyKGRldiwKKwkJCQkJICIlczogUGFuZWwgJXMg aGFzIGluY29tcGF0aWJsZSBjb25uZWN0b3IgdHlwZSBmb3IgdnAlZCAoJWQgIT0gJWQpXG4iLAor CQkJCQkgX19mdW5jX18sIGRldl9uYW1lKHBhbmVsLT5kZXYpLCBpLAorCQkJCQkgcGFuZWwtPmNv bm5lY3Rvcl90eXBlLCBjb25uX3R5cGUpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJ CQlicmlkZ2UgPSBkZXZtX2RybV9wYW5lbF9icmlkZ2VfYWRkKGRldiwgcGFuZWwpOworCQkJaWYg KElTX0VSUihicmlkZ2UpKSB7CisJCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gc2V0IHVwIHBh bmVsIGJyaWRnZSBmb3IgcG9ydCAlZFxuIiwgaSk7CisJCQkJcmV0dXJuIFBUUl9FUlIoYnJpZGdl KTsKKwkJCX0KKwkJfQorCisJCXBpcGVzW251bV9waXBlc10uaHdfdmlkZW9wb3J0ID0gaTsKKwkJ cGlwZXNbbnVtX3BpcGVzXS5icmlkZ2UgPSBicmlkZ2U7CisJCXBpcGVzW251bV9waXBlc10uZW5j X3R5cGUgPSBlbmNfdHlwZTsKKwkJbnVtX3BpcGVzKys7CisJfQorCisJLyogYWxsIHBsYW5lcyBj YW4gYmUgb24gYW55IGNydGMgKi8KKwljcnRjX21hc2sgPSAoMSA8PCBudW1fcGlwZXMpIC0gMTsK KworCS8qIHRoZW4gY3JlYXRlIGEgcGxhbmUsIGEgY3J0YyBhbmQgYW4gZW5jb2RlciBmb3IgZWFj aCBwYW5lbC9icmlkZ2UgKi8KKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGlwZXM7ICsraSkgewor CQlzdHJ1Y3QgdGlkc3NfcGxhbmUgKnRwbGFuZTsKKwkJc3RydWN0IHRpZHNzX2NydGMgKnRjcnRj OworCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuYzsKKwkJdTMyIGh3X3BsYW5lX2lkID0gZmVhdC0+ dmlkX29yZGVyW3RpZHNzLT5udW1fcGxhbmVzXTsKKwkJaW50IHJldDsKKworCQl0cGxhbmUgPSB0 aWRzc19wbGFuZV9jcmVhdGUodGlkc3MsIGh3X3BsYW5lX2lkLAorCQkJCQkgICAgRFJNX1BMQU5F X1RZUEVfUFJJTUFSWSwgY3J0Y19tYXNrLAorCQkJCQkgICAgZm91cmNjcywgZm91cmNjc19sZW4p OworCQlpZiAoSVNfRVJSKHRwbGFuZSkpIHsKKwkJCWRldl9lcnIodGlkc3MtPmRldiwgInBsYW5l IGNyZWF0ZSBmYWlsZWRcbiIpOworCQkJcmV0dXJuIFBUUl9FUlIodHBsYW5lKTsKKwkJfQorCisJ CXRpZHNzLT5wbGFuZXNbdGlkc3MtPm51bV9wbGFuZXMrK10gPSAmdHBsYW5lLT5wbGFuZTsKKwor CQl0Y3J0YyA9IHRpZHNzX2NydGNfY3JlYXRlKHRpZHNzLCBwaXBlc1tpXS5od192aWRlb3BvcnQs CisJCQkJCSAgJnRwbGFuZS0+cGxhbmUpOworCQlpZiAoSVNfRVJSKHRjcnRjKSkgeworCQkJZGV2 X2Vycih0aWRzcy0+ZGV2LCAiY3J0YyBjcmVhdGUgZmFpbGVkXG4iKTsKKwkJCXJldHVybiBQVFJf RVJSKHRjcnRjKTsKKwkJfQorCisJCXRpZHNzLT5jcnRjc1t0aWRzcy0+bnVtX2NydGNzKytdID0g JnRjcnRjLT5jcnRjOworCisJCWVuYyA9IHRpZHNzX2VuY29kZXJfY3JlYXRlKHRpZHNzLCBwaXBl c1tpXS5lbmNfdHlwZSwKKwkJCQkJICAgMSA8PCB0Y3J0Yy0+Y3J0Yy5pbmRleCk7CisJCWlmIChJ U19FUlIoZW5jKSkgeworCQkJZGV2X2Vycih0aWRzcy0+ZGV2LCAiZW5jb2RlciBjcmVhdGUgZmFp bGVkXG4iKTsKKwkJCXJldHVybiBQVFJfRVJSKGVuYyk7CisJCX0KKworCQlyZXQgPSBkcm1fYnJp ZGdlX2F0dGFjaChlbmMsIHBpcGVzW2ldLmJyaWRnZSwgTlVMTCk7CisJCWlmIChyZXQpIHsKKwkJ CWRldl9lcnIodGlkc3MtPmRldiwgImJyaWRnZSBhdHRhY2ggZmFpbGVkOiAlZFxuIiwgcmV0KTsK KwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwkvKiBjcmVhdGUgb3ZlcmxheSBwbGFuZXMgb2Yg dGhlIGxlZnRvdmVyIHBsYW5lcyAqLworCisJd2hpbGUgKHRpZHNzLT5udW1fcGxhbmVzIDwgbWF4 X3BsYW5lcykgeworCQlzdHJ1Y3QgdGlkc3NfcGxhbmUgKnRwbGFuZTsKKwkJdTMyIGh3X3BsYW5l X2lkID0gZmVhdC0+dmlkX29yZGVyW3RpZHNzLT5udW1fcGxhbmVzXTsKKworCQl0cGxhbmUgPSB0 aWRzc19wbGFuZV9jcmVhdGUodGlkc3MsIGh3X3BsYW5lX2lkLAorCQkJCQkgICAgRFJNX1BMQU5F X1RZUEVfT1ZFUkxBWSwgY3J0Y19tYXNrLAorCQkJCQkgICAgZm91cmNjcywgZm91cmNjc19sZW4p OworCisJCWlmIChJU19FUlIodHBsYW5lKSkgeworCQkJZGV2X2Vycih0aWRzcy0+ZGV2LCAicGxh bmUgY3JlYXRlIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gUFRSX0VSUih0cGxhbmUpOworCQl9CisK KwkJdGlkc3MtPnBsYW5lc1t0aWRzcy0+bnVtX3BsYW5lcysrXSA9ICZ0cGxhbmUtPnBsYW5lOwor CX0KKworCXJldHVybiAwOworfQorCitpbnQgdGlkc3NfbW9kZXNldF9pbml0KHN0cnVjdCB0aWRz c19kZXZpY2UgKnRpZHNzKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gJnRpZHNzLT5k ZGV2OworCXVuc2lnbmVkIGludCBpOworCWludCByZXQ7CisKKwlkZXZfZGJnKHRpZHNzLT5kZXYs ICIlc1xuIiwgX19mdW5jX18pOworCisJZHJtX21vZGVfY29uZmlnX2luaXQoZGRldik7CisKKwlk ZGV2LT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSA4OworCWRkZXYtPm1vZGVfY29uZmlnLm1pbl9o ZWlnaHQgPSA4OworCWRkZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IDgwOTY7CisJZGRldi0+ bW9kZV9jb25maWcubWF4X2hlaWdodCA9IDgwOTY7CisJZGRldi0+bW9kZV9jb25maWcubm9ybWFs aXplX3pwb3MgPSB0cnVlOworCWRkZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gJm1vZGVfY29uZmln X2Z1bmNzOworCWRkZXYtPm1vZGVfY29uZmlnLmhlbHBlcl9wcml2YXRlID0gJm1vZGVfY29uZmln X2hlbHBlcl9mdW5jczsKKworCXJldCA9IHRpZHNzX2Rpc3BjX21vZGVzZXRfaW5pdCh0aWRzcyk7 CisJaWYgKHJldCkKKwkJZ290byBlcnJfbW9kZV9jb25maWdfY2xlYW51cDsKKworCXJldCA9IGRy bV92YmxhbmtfaW5pdChkZGV2LCB0aWRzcy0+bnVtX2NydGNzKTsKKwlpZiAocmV0KQorCQlnb3Rv IGVycl9tb2RlX2NvbmZpZ19jbGVhbnVwOworCisJLyogU3RhcnQgd2l0aCB2ZXJ0aWNhbCBibGFu a2luZyBpbnRlcnJ1cHQgcmVwb3J0aW5nIGRpc2FibGVkLiAqLworCWZvciAoaSA9IDA7IGkgPCB0 aWRzcy0+bnVtX2NydGNzOyArK2kpCisJCWRybV9jcnRjX3ZibGFua19yZXNldCh0aWRzcy0+Y3J0 Y3NbaV0pOworCisJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRkZXYpOworCisJZGV2X2RiZyh0aWRz cy0+ZGV2LCAiJXMgZG9uZVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7CisKK2Vycl9tb2Rl X2NvbmZpZ19jbGVhbnVwOgorCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRkZXYpOworCXJldHVy biByZXQ7Cit9CisKK3ZvaWQgdGlkc3NfbW9kZXNldF9jbGVhbnVwKHN0cnVjdCB0aWRzc19kZXZp Y2UgKnRpZHNzKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gJnRpZHNzLT5kZGV2Owor CisJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGRldik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vdGlkc3MvdGlkc3Nfa21zLmggYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3Nf a21zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kZGE1NjI1ZDAx MjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3Nfa21zLmgK QEAgLTAsMCArMSwxNSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8K Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVk IC0gaHR0cDovL3d3dy50aS5jb20vCisgKiBBdXRob3I6IFRvbWkgVmFsa2VpbmVuIDx0b21pLnZh bGtlaW5lbkB0aS5jb20+CisgKi8KKworI2lmbmRlZiBfX1RJRFNTX0tNU19IX18KKyNkZWZpbmUg X19USURTU19LTVNfSF9fCisKK3N0cnVjdCB0aWRzc19kZXZpY2U7CisKK2ludCB0aWRzc19tb2Rl c2V0X2luaXQoc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MpOwordm9pZCB0aWRzc19tb2Rlc2V0 X2NsZWFudXAoc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MpOworCisjZW5kaWYKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJt L3RpZHNzL3RpZHNzX3BsYW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi5mZjk5YjJkZDRhMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlk c3MvdGlkc3NfcGxhbmUuYwpAQCAtMCwwICsxLDIxNyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGV4YXMgSW5zdHJ1bWVu dHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKiBBdXRob3I6IFRvbWkgVmFs a2VpbmVuIDx0b21pLnZhbGtlaW5lbkB0aS5jb20+CisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1 ZGUgPGRybS9kcm1fZm91cmNjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+ CisKKyNpbmNsdWRlICJ0aWRzc19jcnRjLmgiCisjaW5jbHVkZSAidGlkc3NfZGlzcGMuaCIKKyNp bmNsdWRlICJ0aWRzc19kcnYuaCIKKyNpbmNsdWRlICJ0aWRzc19wbGFuZS5oIgorCisvKiBkcm1f cGxhbmVfaGVscGVyX2Z1bmNzICovCisKK3N0YXRpYyBpbnQgdGlkc3NfcGxhbmVfYXRvbWljX2No ZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IHBsYW5lLT5kZXY7CisJ c3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qg dGlkc3NfcGxhbmUgKnRwbGFuZSA9IHRvX3RpZHNzX3BsYW5lKHBsYW5lKTsKKwljb25zdCBzdHJ1 Y3QgZHJtX2Zvcm1hdF9pbmZvICpmaW5mbzsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNf c3RhdGU7CisJdTMyIGh3X3BsYW5lID0gdHBsYW5lLT5od19wbGFuZV9pZDsKKwl1MzIgaHdfdmlk ZW9wb3J0OworCWludCByZXQ7CisKKwlkZXZfZGJnKGRkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNf Xyk7CisKKwlpZiAoIXN0YXRlLT5jcnRjKSB7CisJCS8qCisJCSAqIFRoZSB2aXNpYmxlIGZpZWxk IGlzIG5vdCByZXNldCBieSB0aGUgRFJNIGNvcmUgYnV0IG9ubHkKKwkJICogdXBkYXRlZCBieSBk cm1fcGxhbmVfaGVscGVyX2NoZWNrX3N0YXRlKCksIHNldCBpdCBtYW51YWxseS4KKwkJICovCisJ CXN0YXRlLT52aXNpYmxlID0gZmFsc2U7CisJCXJldHVybiAwOworCX0KKworCWNydGNfc3RhdGUg PSBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmNydGMpOwor CWlmIChJU19FUlIoY3J0Y19zdGF0ZSkpCisJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOwor CisJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2tfcGxhbmVfc3RhdGUoc3RhdGUsIGNydGNf c3RhdGUsIDAsCisJCQkJCQkgIElOVF9NQVgsIHRydWUsIHRydWUpOworCWlmIChyZXQgPCAwKQor CQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBUaGUgSFcgaXMgb25seSBhYmxlIHRvIHN0YXJ0IGRy YXdpbmcgYXQgc3VicGl4ZWwgYm91bmRhcnkKKwkgKiAodGhlIHR3byBmaXJzdCBjaGVja3MgYmVs bG93KS4gQXQgdGhlIGVuZCBvZiBhIHJvdyB0aGUgSFcKKwkgKiBjYW4gb25seSBqdW1wIGludGVn ZXIgbnVtYmVyIG9mIHN1YnBpeGVscyBmb3J3YXJkIHRvIHRoZQorCSAqIGJlZ2lubmluZyBvZiB0 aGUgbmV4dCByb3cuIFNvIHdlIGNhbiBvbmx5IHNob3cgcGljdHVyZSB3aXRoCisJICogaW50ZWdl ciBzdWJwaXhlbCB3aWR0aCAodGhlIHRoaXJkIGNoZWNrKS4gSG93ZXZlciwgYWZ0ZXIKKwkgKiBy ZWFjaGluZyB0aGUgZW5kIG9mIHRoZSBkcmF3biBwaWN0dXJlIHRoZSBkcmF3aW5nIHN0YXJ0cwor CSAqIGFnYWluIGF0IHRoZSBhYnNvbHV0ZSBtZW1vcnkgYWRkcmVzcyB3aGVyZSB0b3AgbGVmdCBj b3JuZXIKKwkgKiBwb3NpdGlvbiBvZiB0aGUgZHJhd24gcGljdHVyZSBpcyAoc28gdGhlcmUgaXMg bm8gbmVlZCB0bworCSAqIGNoZWNrIGZvciBvZGQgaGVpZ2h0KS4KKwkgKi8KKworCWZpbmZvID0g ZHJtX2Zvcm1hdF9pbmZvKHN0YXRlLT5mYi0+Zm9ybWF0LT5mb3JtYXQpOworCisJaWYgKChzdGF0 ZS0+c3JjX3ggPj4gMTYpICUgZmluZm8tPmhzdWIgIT0gMCkgeworCQlkZXZfZGJnKGRkZXYtPmRl diwKKwkJCSIlczogeC1wb3NpdGlvbiAldSBub3QgZGl2aXNpYmxlIHN1YnBpeGVsIHNpemUgJXVc biIsCisJCQlfX2Z1bmNfXywgKHN0YXRlLT5zcmNfeCA+PiAxNiksIGZpbmZvLT5oc3ViKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKChzdGF0ZS0+c3JjX3kgPj4gMTYpICUgZmluZm8t PnZzdWIgIT0gMCkgeworCQlkZXZfZGJnKGRkZXYtPmRldiwKKwkJCSIlczogeS1wb3NpdGlvbiAl dSBub3QgZGl2aXNpYmxlIHN1YnBpeGVsIHNpemUgJXVcbiIsCisJCQlfX2Z1bmNfXywgKHN0YXRl LT5zcmNfeSA+PiAxNiksIGZpbmZvLT52c3ViKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ aWYgKChzdGF0ZS0+c3JjX3cgPj4gMTYpICUgZmluZm8tPmhzdWIgIT0gMCkgeworCQlkZXZfZGJn KGRkZXYtPmRldiwKKwkJCSIlczogc3JjIHdpZHRoICV1IG5vdCBkaXZpc2libGUgYnkgc3VicGl4 ZWwgc2l6ZSAldVxuIiwKKwkJCSBfX2Z1bmNfXywgKHN0YXRlLT5zcmNfdyA+PiAxNiksIGZpbmZv LT5oc3ViKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFzdGF0ZS0+dmlzaWJsZSkK KwkJcmV0dXJuIDA7CisKKwlod192aWRlb3BvcnQgPSB0b190aWRzc19jcnRjKHN0YXRlLT5jcnRj KS0+aHdfdmlkZW9wb3J0OworCisJcmV0ID0gZGlzcGNfcGxhbmVfY2hlY2sodGlkc3MtPmRpc3Bj LCBod19wbGFuZSwgc3RhdGUsIGh3X3ZpZGVvcG9ydCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0aWRzc19wbGFuZV9hdG9taWNfdXBk YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IHBsYW5lLT5k ZXY7CisJc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKwlz dHJ1Y3QgdGlkc3NfcGxhbmUgKnRwbGFuZSA9IHRvX3RpZHNzX3BsYW5lKHBsYW5lKTsKKwlzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHBsYW5lLT5zdGF0ZTsKKwl1MzIgaHdfdmlkZW9w b3J0OworCWludCByZXQ7CisKKwlkZXZfZGJnKGRkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7 CisKKwlpZiAoIXN0YXRlLT52aXNpYmxlKSB7CisJCWRpc3BjX3BsYW5lX2VuYWJsZSh0aWRzcy0+ ZGlzcGMsIHRwbGFuZS0+aHdfcGxhbmVfaWQsIGZhbHNlKTsKKwkJcmV0dXJuOworCX0KKworCWh3 X3ZpZGVvcG9ydCA9IHRvX3RpZHNzX2NydGMoc3RhdGUtPmNydGMpLT5od192aWRlb3BvcnQ7CisK KwlyZXQgPSBkaXNwY19wbGFuZV9zZXR1cCh0aWRzcy0+ZGlzcGMsIHRwbGFuZS0+aHdfcGxhbmVf aWQsCisJCQkJc3RhdGUsIGh3X3ZpZGVvcG9ydCk7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo cGxhbmUtPmRldi0+ZGV2LCAiJXM6IEZhaWxlZCB0byBzZXR1cCBwbGFuZSAlZFxuIiwKKwkJCV9f ZnVuY19fLCB0cGxhbmUtPmh3X3BsYW5lX2lkKTsKKwkJZGlzcGNfcGxhbmVfZW5hYmxlKHRpZHNz LT5kaXNwYywgdHBsYW5lLT5od19wbGFuZV9pZCwgZmFsc2UpOworCQlyZXR1cm47CisJfQorCisJ ZGlzcGNfcGxhbmVfZW5hYmxlKHRpZHNzLT5kaXNwYywgdHBsYW5lLT5od19wbGFuZV9pZCwgdHJ1 ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRpZHNzX3BsYW5lX2F0b21pY19kaXNhYmxlKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRf c3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBwbGFuZS0+ZGV2OworCXN0cnVj dCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHRpZHNz X3BsYW5lICp0cGxhbmUgPSB0b190aWRzc19wbGFuZShwbGFuZSk7CisKKwlkZXZfZGJnKGRkZXYt PmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlkaXNwY19wbGFuZV9lbmFibGUodGlkc3MtPmRp c3BjLCB0cGxhbmUtPmh3X3BsYW5lX2lkLCBmYWxzZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyB0aWRzc19wbGFuZV9oZWxwZXJfZnVuY3MgPSB7CisJ LmF0b21pY19jaGVjayA9IHRpZHNzX3BsYW5lX2F0b21pY19jaGVjaywKKwkuYXRvbWljX3VwZGF0 ZSA9IHRpZHNzX3BsYW5lX2F0b21pY191cGRhdGUsCisJLmF0b21pY19kaXNhYmxlID0gdGlkc3Nf cGxhbmVfYXRvbWljX2Rpc2FibGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFu ZV9mdW5jcyB0aWRzc19wbGFuZV9mdW5jcyA9IHsKKwkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21p Y19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxw ZXJfZGlzYWJsZV9wbGFuZSwKKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNl dCwKKwkuZGVzdHJveSA9IGRybV9wbGFuZV9jbGVhbnVwLAorCS5hdG9taWNfZHVwbGljYXRlX3N0 YXRlID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNf ZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCit9 OworCitzdHJ1Y3QgdGlkc3NfcGxhbmUgKnRpZHNzX3BsYW5lX2NyZWF0ZShzdHJ1Y3QgdGlkc3Nf ZGV2aWNlICp0aWRzcywKKwkJCQkgICAgICAgdTMyIGh3X3BsYW5lX2lkLCB1MzIgcGxhbmVfdHlw ZSwKKwkJCQkgICAgICAgdTMyIGNydGNfbWFzaywgY29uc3QgdTMyICpmb3JtYXRzLAorCQkJCSAg ICAgICB1MzIgbnVtX2Zvcm1hdHMpCit7CisJc3RydWN0IHRpZHNzX3BsYW5lICp0cGxhbmU7CisJ ZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlOworCXUzMiBwb3NzaWJsZV9jcnRjczsKKwl1MzIgbnVt X3BsYW5lcyA9IHRpZHNzLT5mZWF0LT5udW1fcGxhbmVzOworCXUzMiBjb2xvcl9lbmNvZGluZ3Mg PSAoQklUKERSTV9DT0xPUl9ZQ0JDUl9CVDYwMSkgfAorCQkJICAgICAgIEJJVChEUk1fQ09MT1Jf WUNCQ1JfQlQ3MDkpKTsKKwl1MzIgY29sb3JfcmFuZ2VzID0gKEJJVChEUk1fQ09MT1JfWUNCQ1Jf RlVMTF9SQU5HRSkgfAorCQkJICAgIEJJVChEUk1fQ09MT1JfWUNCQ1JfTElNSVRFRF9SQU5HRSkp OworCXUzMiBkZWZhdWx0X2VuY29kaW5nID0gRFJNX0NPTE9SX1lDQkNSX0JUNjAxOworCXUzMiBk ZWZhdWx0X3JhbmdlID0gRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0U7CisJdTMyIGJsZW5kX21v ZGVzID0gKEJJVChEUk1fTU9ERV9CTEVORF9QUkVNVUxUSSkgfAorCQkJICAgQklUKERSTV9NT0RF X0JMRU5EX0NPVkVSQUdFKSk7CisJaW50IHJldDsKKworCXRwbGFuZSA9IGRldm1fa3phbGxvYyh0 aWRzcy0+ZGV2LCBzaXplb2YoKnRwbGFuZSksIEdGUF9LRVJORUwpOworCWlmICghdHBsYW5lKQor CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXRwbGFuZS0+aHdfcGxhbmVfaWQgPSBod19w bGFuZV9pZDsKKworCXBvc3NpYmxlX2NydGNzID0gY3J0Y19tYXNrOworCXR5cGUgPSBwbGFuZV90 eXBlOworCisJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZ0aWRzcy0+ZGRldiwgJnRw bGFuZS0+cGxhbmUsCisJCQkJICAgICAgIHBvc3NpYmxlX2NydGNzLAorCQkJCSAgICAgICAmdGlk c3NfcGxhbmVfZnVuY3MsCisJCQkJICAgICAgIGZvcm1hdHMsIG51bV9mb3JtYXRzLAorCQkJCSAg ICAgICBOVUxMLCB0eXBlLCBOVUxMKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIEVSUl9QVFIo cmV0KTsKKworCWRybV9wbGFuZV9oZWxwZXJfYWRkKCZ0cGxhbmUtPnBsYW5lLCAmdGlkc3NfcGxh bmVfaGVscGVyX2Z1bmNzKTsKKworCWRybV9wbGFuZV9jcmVhdGVfenBvc19wcm9wZXJ0eSgmdHBs YW5lLT5wbGFuZSwgaHdfcGxhbmVfaWQsIDAsCisJCQkJICAgICAgIG51bV9wbGFuZXMgLSAxKTsK KworCXJldCA9IGRybV9wbGFuZV9jcmVhdGVfY29sb3JfcHJvcGVydGllcygmdHBsYW5lLT5wbGFu ZSwKKwkJCQkJCWNvbG9yX2VuY29kaW5ncywKKwkJCQkJCWNvbG9yX3JhbmdlcywKKwkJCQkJCWRl ZmF1bHRfZW5jb2RpbmcsCisJCQkJCQlkZWZhdWx0X3JhbmdlKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gRVJSX1BUUihyZXQpOworCisJcmV0ID0gZHJtX3BsYW5lX2NyZWF0ZV9hbHBoYV9wcm9wZXJ0 eSgmdHBsYW5lLT5wbGFuZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwor CXJldCA9IGRybV9wbGFuZV9jcmVhdGVfYmxlbmRfbW9kZV9wcm9wZXJ0eSgmdHBsYW5lLT5wbGFu ZSwgYmxlbmRfbW9kZXMpOworCWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisKKwly ZXR1cm4gdHBsYW5lOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNz X3BsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfcGxhbmUuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjgwZmYxYzVhMjUzNQotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19wbGFuZS5oCkBAIC0wLDAgKzEsMjUg QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogQ29weXJp Z2h0IChDKSAyMDE4IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cu dGkuY29tLworICogQXV0aG9yOiBUb21pIFZhbGtlaW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29t PgorICovCisKKyNpZm5kZWYgX19USURTU19QTEFORV9IX18KKyNkZWZpbmUgX19USURTU19QTEFO RV9IX18KKworI2RlZmluZSB0b190aWRzc19wbGFuZShwKSBjb250YWluZXJfb2YoKHApLCBzdHJ1 Y3QgdGlkc3NfcGxhbmUsIHBsYW5lKQorCitzdHJ1Y3QgdGlkc3NfZGV2aWNlOworCitzdHJ1Y3Qg dGlkc3NfcGxhbmUgeworCXN0cnVjdCBkcm1fcGxhbmUgcGxhbmU7CisKKwl1MzIgaHdfcGxhbmVf aWQ7Cit9OworCitzdHJ1Y3QgdGlkc3NfcGxhbmUgKnRpZHNzX3BsYW5lX2NyZWF0ZShzdHJ1Y3Qg dGlkc3NfZGV2aWNlICp0aWRzcywKKwkJCQkgICAgICAgdTMyIGh3X3BsYW5lX2lkLCB1MzIgcGxh bmVfdHlwZSwKKwkJCQkgICAgICAgdTMyIGNydGNfbWFzaywgY29uc3QgdTMyICpmb3JtYXRzLAor CQkJCSAgICAgICB1MzIgbnVtX2Zvcm1hdHMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS90aWRzcy90aWRzc19zY2FsZV9jb2Vmcy5jIGIvZHJpdmVycy9ncHUvZHJtL3Rp ZHNzL3RpZHNzX3NjYWxlX2NvZWZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi43MTBmZWFjN2Y5OWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v dGlkc3MvdGlkc3Nfc2NhbGVfY29lZnMuYwpAQCAtMCwwICsxLDIwMiBAQAorLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGV4YXMg SW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKiBBdXRob3I6 IEp5cmkgU2FyaGEgPGpzYXJoYUB0aS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Rldmlj ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAidGlkc3Nfc2NhbGVf Y29lZnMuaCIKKworLyoKKyAqIFRoZXNlIGFyZSBpbnRlcnBvbGF0ZWQgd2l0aCBhIGN1c3RvbSBw eXRob24gc2NyaXB0IGZyb20gRFNTNQorICogKGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9k aXNwY19jb2VmLmMpIGNvZWZmaWNpZW50cy4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0aWRz c19zY2FsZV9jb2VmcyBjb2VmNV9NMzIgPSB7CisJLmMyID0geyAyOCwgMzQsIDQwLCA0NiwgNTIs IDU4LCA2NCwgNzAsIDAsIDIsIDQsIDgsIDEyLCAxNiwgMjAsIDI0LCB9LAorCS5jMSA9IHsgMTMy LCAxMzgsIDE0NCwgMTUwLCAxNTYsIDE2MiwgMTY4LCAxNzQsIDc2LCA4NCwgOTIsIDk4LCAxMDQs IDExMCwgMTE2LCAxMjQsIH0sCisJLmMwID0geyAxOTIsIDE5MiwgMTkyLCAxOTAsIDE4OCwgMTg2 LCAxODQsIDE4MiwgMTgwLCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0aWRzc19zY2Fs ZV9jb2VmcyBjb2VmNV9NMjYgPSB7CisJLmMyID0geyAyNCwgMjgsIDMyLCAzOCwgNDQsIDUwLCA1 NiwgNjQsIDAsIDIsIDQsIDYsIDgsIDEyLCAxNiwgMjAsIH0sCisJLmMxID0geyAxMzIsIDEzOCwg MTQ0LCAxNTIsIDE2MCwgMTY2LCAxNzIsIDE3OCwgNzIsIDgwLCA4OCwgOTQsIDEwMCwgMTA4LCAx MTYsIDEyNCwgfSwKKwkuYzAgPSB7IDIwMCwgMjAyLCAyMDQsIDIwMiwgMjAwLCAxOTYsIDE5Miwg MTg4LCAxODQsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRpZHNzX3NjYWxlX2NvZWZz IGNvZWY1X00yMiA9IHsKKwkuYzIgPSB7IDE2LCAyMCwgMjQsIDMwLCAzNiwgNDIsIDQ4LCA1Niwg MCwgMCwgMCwgMiwgNCwgOCwgMTIsIDE0LCB9LAorCS5jMSA9IHsgMTMyLCAxNDAsIDE0OCwgMTU2 LCAxNjQsIDE3MiwgMTgwLCAxODYsIDY0LCA3MiwgODAsIDg4LCA5NiwgMTA0LCAxMTIsIDEyMiwg fSwKKwkuYzAgPSB7IDIxNiwgMjE2LCAyMTYsIDIxNCwgMjEyLCAyMDgsIDIwNCwgMTk4LCAxOTIs IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRpZHNzX3NjYWxlX2NvZWZzIGNvZWY1X00x OSA9IHsKKwkuYzIgPSB7IDEyLCAxNCwgMTYsIDIyLCAyOCwgMzQsIDQwLCA0OCwgMCwgMCwgMCwg MiwgNCwgNCwgNCwgOCwgfSwKKwkuYzEgPSB7IDEyOCwgMTQwLCAxNTIsIDE2MCwgMTY4LCAxNzYs IDE4NCwgMTkyLCA1NiwgNjQsIDcyLCA4MiwgOTIsIDEwMCwgMTA4LCAxMTgsIH0sCisJLmMwID0g eyAyMzIsIDIzMiwgMjMyLCAyMjYsIDIyMCwgMjE4LCAyMTYsIDIwOCwgMjAwLCB9LAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCB0aWRzc19zY2FsZV9jb2VmcyBjb2VmNV9NMTYgPSB7CisJLmMy ID0geyAwLCAyLCA0LCA4LCAxMiwgMTgsIDI0LCAzMiwgMCwgMCwgMCwgLTIsIC00LCAtNCwgLTQs IC0yLCB9LAorCS5jMSA9IHsgMTI0LCAxMzgsIDE1MiwgMTY0LCAxNzYsIDE4NiwgMTk2LCAyMDYs IDQwLCA0OCwgNTYsIDY4LCA4MCwgOTAsIDEwMCwgMTEyLCB9LAorCS5jMCA9IHsgMjY0LCAyNjIs IDI2MCwgMjU0LCAyNDgsIDI0MiwgMjM2LCAyMjYsIDIxNiwgfSwKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgdGlkc3Nfc2NhbGVfY29lZnMgY29lZjVfTTE0ID0geworCS5jMiA9IHsgLTgsIC02 LCAtNCwgLTIsIDAsIDYsIDEyLCAxOCwgMCwgLTIsIC00LCAtNiwgLTgsIC04LCAtOCwgLTgsIH0s CisJLmMxID0geyAxMjAsIDEzNCwgMTQ4LCAxNjQsIDE4MCwgMTk0LCAyMDgsIDIyMCwgMjQsIDMy LCA0MCwgNTIsIDY0LCA3OCwgOTIsIDEwNiwgfSwKKwkuYzAgPSB7IDI4OCwgMjg2LCAyODQsIDI4 MCwgMjc2LCAyNjYsIDI1NiwgMjQ0LCAyMzIsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IHRpZHNzX3NjYWxlX2NvZWZzIGNvZWY1X00xMyA9IHsKKwkuYzIgPSB7IC0xMiwgLTEyLCAtMTIs IC0xMCwgLTgsIC00LCAwLCA2LCAwLCAtMiwgLTQsIC02LCAtOCwgLTEwLCAtMTIsIC0xMiwgfSwK KwkuYzEgPSB7IDExMiwgMTMwLCAxNDgsIDE2NCwgMTgwLCAxOTYsIDIxMiwgMjI4LCAxMiwgMjIs IDMyLCA0NCwgNTYsIDcwLCA4NCwgOTgsIH0sCisJLmMwID0geyAzMTIsIDMwOCwgMzA0LCAyOTgs IDI5MiwgMjgyLCAyNzIsIDI1OCwgMjQ0LCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0 aWRzc19zY2FsZV9jb2VmcyBjb2VmNV9NMTIgPSB7CisJLmMyID0geyAtMTYsIC0xOCwgLTIwLCAt MTgsIC0xNiwgLTE0LCAtMTIsIC02LCAwLCAtMiwgLTQsIC02LCAtOCwgLTEwLCAtMTIsIC0xNCwg fSwKKwkuYzEgPSB7IDEwNCwgMTI0LCAxNDQsIDE2NCwgMTg0LCAyMDIsIDIyMCwgMjM4LCAwLCAx MCwgMjAsIDMwLCA0MCwgNTYsIDcyLCA4OCwgfSwKKwkuYzAgPSB7IDMzNiwgMzMyLCAzMjgsIDMy MCwgMzEyLCAzMDAsIDI4OCwgMjcyLCAyNTYsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IHRpZHNzX3NjYWxlX2NvZWZzIGNvZWY1X00xMSA9IHsKKwkuYzIgPSB7IC0yMCwgLTIyLCAtMjQs IC0yNCwgLTI0LCAtMjQsIC0yNCwgLTIwLCAwLCAtMiwgLTQsIC02LCAtOCwgLTEwLCAtMTIsIC0x NiwgfSwKKwkuYzEgPSB7IDkyLCAxMTQsIDEzNiwgMTU4LCAxODAsIDIwNCwgMjI4LCAyNTAsIC0x NiwgLTgsIDAsIDEyLCAyNCwgMzgsIDUyLCA3MiwgfSwKKwkuYzAgPSB7IDM2OCwgMzY0LCAzNjAs IDM1MCwgMzQwLCAzMjYsIDMxMiwgMjkyLCAyNzIsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IHRpZHNzX3NjYWxlX2NvZWZzIGNvZWY1X00xMCA9IHsKKwkuYzIgPSB7IC0xNiwgLTIwLCAt MjQsIC0yOCwgLTMyLCAtMzQsIC0zNiwgLTM0LCAwLCAwLCAwLCAtMiwgLTQsIC04LCAtMTIsIC0x NCwgfSwKKwkuYzEgPSB7IDcyLCA5NiwgMTIwLCAxNDgsIDE3NiwgMjA0LCAyMzIsIDI2MCwgLTMy LCAtMjYsIC0yMCwgLTEwLCAwLCAxNiwgMzIsIDUyLCB9LAorCS5jMCA9IHsgNDAwLCAzOTgsIDM5 NiwgMzg0LCAzNzIsIDM1NCwgMzM2LCAzMTIsIDI4OCwgfSwKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgdGlkc3Nfc2NhbGVfY29lZnMgY29lZjVfTTkgPSB7CisJLmMyID0geyAtMTIsIC0xOCwg LTI0LCAtMjgsIC0zMiwgLTM4LCAtNDQsIC00NiwgMCwgMiwgNCwgMiwgMCwgLTIsIC00LCAtOCwg fSwKKwkuYzEgPSB7IDQwLCA2OCwgOTYsIDEyOCwgMTYwLCAxOTYsIDIzMiwgMjY4LCAtNDgsIC00 NiwgLTQ0LCAtMzYsIC0yOCwgLTE0LCAwLCAyMCwgfSwKKwkuYzAgPSB7IDQ1NiwgNDUwLCA0NDQs IDQyOCwgNDEyLCAzODgsIDM2NCwgMzM0LCAzMDQsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IHRpZHNzX3NjYWxlX2NvZWZzIGNvZWY1X004ID0geworCS5jMiA9IHsgMCwgLTQsIC04LCAt MTYsIC0yNCwgLTMyLCAtNDAsIC00OCwgMCwgMiwgNCwgNiwgOCwgNiwgNCwgMiwgfSwKKwkuYzEg PSB7IDAsIDI4LCA1NiwgOTQsIDEzMiwgMTc2LCAyMjAsIDI2NiwgLTU2LCAtNjAsIC02NCwgLTYy LCAtNjAsIC01MCwgLTQwLCAtMjAsIH0sCisJLmMwID0geyA1MTIsIDUwNiwgNTAwLCA0NzgsIDQ1 NiwgNDI0LCAzOTIsIDM1MiwgMzEyLCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0aWRz c19zY2FsZV9jb2VmcyBjb2VmM19NMzIgPSB7CisJLmMxID0geyAxMDgsIDkyLCA3NiwgNjIsIDQ4 LCAzNiwgMjQsIDE0MCwgMjU2LCAyMzYsIDIxNiwgMTk4LCAxODAsIDE2MiwgMTQ0LCAxMjYsIH0s CisJLmMwID0geyAyOTYsIDI5NCwgMjkyLCAyODgsIDI4NCwgMjc4LCAyNzIsIDEzNiwgMjU2LCB9 LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0aWRzc19zY2FsZV9jb2VmcyBjb2VmM19NMjYg PSB7CisJLmMxID0geyAxMDQsIDkwLCA3NiwgNjAsIDQ0LCAzMiwgMjAsIDEzOCwgMjU2LCAyMzYs IDIxNiwgMTk4LCAxODAsIDE2MCwgMTQwLCAxMjIsIH0sCisJLmMwID0geyAzMDQsIDMwMCwgMjk2 LCAyOTIsIDI4OCwgMjgyLCAyNzYsIDEzOCwgMjU2LCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCB0aWRzc19zY2FsZV9jb2VmcyBjb2VmM19NMjIgPSB7CisJLmMxID0geyAxMDAsIDg0LCA2 OCwgNTQsIDQwLCAzMCwgMjAsIDEzOCwgMjU2LCAyMzYsIDIxNiwgMTk2LCAxNzYsIDE1NiwgMTM2 LCAxMTgsIH0sCisJLmMwID0geyAzMTIsIDMxMCwgMzA4LCAzMDIsIDI5NiwgMjg2LCAyNzYsIDEz OCwgMjU2LCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0aWRzc19zY2FsZV9jb2VmcyBj b2VmM19NMTkgPSB7CisJLmMxID0geyA5NiwgODAsIDY0LCA1MCwgMzYsIDI2LCAxNiwgMTM2LCAy NTYsIDIzNiwgMjE2LCAxOTQsIDE3MiwgMTUyLCAxMzIsIDExNCwgfSwKKwkuYzAgPSB7IDMyMCwg MzE4LCAzMTYsIDMxMCwgMzA0LCAyOTIsIDI4MCwgMTQwLCAyNTYsIH0sCit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IHRpZHNzX3NjYWxlX2NvZWZzIGNvZWYzX00xNiA9IHsKKwkuYzEgPSB7IDg4 LCA3MiwgNTYsIDQ0LCAzMiwgMjIsIDEyLCAxMzQsIDI1NiwgMjM0LCAyMTIsIDE5MCwgMTY4LCAx NDgsIDEyOCwgMTA4LCB9LAorCS5jMCA9IHsgMzM2LCAzMzIsIDMyOCwgMzIwLCAzMTIsIDMwMCwg Mjg4LCAxNDQsIDI1NiwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGlkc3Nfc2NhbGVf Y29lZnMgY29lZjNfTTE0ID0geworCS5jMSA9IHsgODAsIDY0LCA0OCwgMzYsIDI0LCAxNiwgOCwg MTMyLCAyNTYsIDIzMiwgMjA4LCAxODYsIDE2NCwgMTQyLCAxMjAsIDEwMCwgfSwKKwkuYzAgPSB7 IDM1MiwgMzQ4LCAzNDQsIDMzNCwgMzI0LCAzMTAsIDI5NiwgMTQ4LCAyNTYsIH0sCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IHRpZHNzX3NjYWxlX2NvZWZzIGNvZWYzX00xMyA9IHsKKwkuYzEg PSB7IDcyLCA1NiwgNDAsIDMwLCAyMCwgMTIsIDQsIDEzMCwgMjU2LCAyMzIsIDIwOCwgMTg0LCAx NjAsIDEzNiwgMTEyLCA5MiwgfSwKKwkuYzAgPSB7IDM2OCwgMzY0LCAzNjAsIDM0NiwgMzMyLCAz MTYsIDMwMCwgMTUwLCAyNTYsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRpZHNzX3Nj YWxlX2NvZWZzIGNvZWYzX00xMiA9IHsKKwkuYzEgPSB7IDY0LCA1MCwgMzYsIDI2LCAxNiwgMTAs IDQsIDEzMCwgMjU2LCAyMzAsIDIwNCwgMTc4LCAxNTIsIDEyOCwgMTA0LCA4NCwgfSwKKwkuYzAg PSB7IDM4NCwgMzc4LCAzNzIsIDM1OCwgMzQ0LCAzMjQsIDMwNCwgMTUyLCAyNTYsIH0sCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IHRpZHNzX3NjYWxlX2NvZWZzIGNvZWYzX00xMSA9IHsKKwku YzEgPSB7IDU2LCA0MCwgMjQsIDE2LCA4LCA0LCAwLCAxMjgsIDI1NiwgMjI4LCAyMDAsIDE3Miwg MTQ0LCAxMjAsIDk2LCA3NiwgfSwKKwkuYzAgPSB7IDQwMCwgMzk2LCAzOTIsIDM3NiwgMzYwLCAz MzYsIDMxMiwgMTU2LCAyNTYsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRpZHNzX3Nj YWxlX2NvZWZzIGNvZWYzX00xMCA9IHsKKwkuYzEgPSB7IDQwLCAyNiwgMTIsIDYsIDAsIC0yLCAt NCwgMTI2LCAyNTYsIDIyNiwgMTk2LCAxNjYsIDEzNiwgMTEwLCA4NCwgNjIsIH0sCisJLmMwID0g eyA0MzIsIDQyNCwgNDE2LCAzOTYsIDM3NiwgMzQ4LCAzMjAsIDE2MCwgMjU2LCB9LAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCB0aWRzc19zY2FsZV9jb2VmcyBjb2VmM19NOSA9IHsKKwkuYzEg PSB7IDI0LCAxMiwgMCwgLTQsIC04LCAtOCwgLTgsIDEyNCwgMjU2LCAyMjIsIDE4OCwgMTU0LCAx MjAsIDkyLCA2NCwgNDQsIH0sCisJLmMwID0geyA0NjQsIDQ1NiwgNDQ4LCA0MjQsIDQwMCwgMzY2 LCAzMzIsIDE2NiwgMjU2LCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0aWRzc19zY2Fs ZV9jb2VmcyBjb2VmM19NOCA9IHsKKwkuYzEgPSB7IDAsIC04LCAtMTYsIC0xNiwgLTE2LCAtMTIs IC04LCAxMjQsIDI1NiwgMjE0LCAxNzIsIDEzNCwgOTYsIDY2LCAzNiwgMTgsIH0sCisJLmMwID0g eyA1MTIsIDUwMiwgNDkyLCA0NjIsIDQzMiwgMzkwLCAzNDgsIDE3NCwgMjU2LCB9LAorfTsKKwor Y29uc3Qgc3RydWN0IHRpZHNzX3NjYWxlX2NvZWZzICp0aWRzc19nZXRfc2NhbGVfY29lZnMoc3Ry dWN0IGRldmljZSAqZGV2LAorCQkJCQkJICAgICAgdTMyIGZpcmluYywKKwkJCQkJCSAgICAgIGJv b2wgZml2ZV90YXBzKQoreworCWludCBpOworCWludCBpbmM7CisJc3RhdGljIGNvbnN0IHN0cnVj dCB7CisJCWludCBNbWluOworCQlpbnQgTW1heDsKKwkJY29uc3Qgc3RydWN0IHRpZHNzX3NjYWxl X2NvZWZzICpjb2VmMzsKKwkJY29uc3Qgc3RydWN0IHRpZHNzX3NjYWxlX2NvZWZzICpjb2VmNTsK KwkJY29uc3QgY2hhciAqbmFtZTsKKwl9IGNvZWZzW10gPSB7CisJCXsgMjcsIDMyLCAmY29lZjNf TTMyLCAmY29lZjVfTTMyLCAiTTMyIiB9LAorCQl7IDIzLCAyNiwgJmNvZWYzX00yNiwgJmNvZWY1 X00yNiwgIk0yNiIgfSwKKwkJeyAyMCwgMjIsICZjb2VmM19NMjIsICZjb2VmNV9NMjIsICJNMjIi IH0sCisJCXsgMTcsIDE5LCAmY29lZjNfTTE5LCAmY29lZjVfTTE5LCAiTTE5IiB9LAorCQl7IDE1 LCAxNiwgJmNvZWYzX00xNiwgJmNvZWY1X00xNiwgIk0xNiIgfSwKKwkJeyAxNCwgMTQsICZjb2Vm M19NMTQsICZjb2VmNV9NMTQsICJNMTQiIH0sCisJCXsgMTMsIDEzLCAmY29lZjNfTTEzLCAmY29l ZjVfTTEzLCAiTTEzIiB9LAorCQl7IDEyLCAxMiwgJmNvZWYzX00xMiwgJmNvZWY1X00xMiwgIk0x MiIgfSwKKwkJeyAxMSwgMTEsICZjb2VmM19NMTEsICZjb2VmNV9NMTEsICJNMTEiIH0sCisJCXsg MTAsIDEwLCAmY29lZjNfTTEwLCAmY29lZjVfTTEwLCAiTTEwIiB9LAorCQl7ICA5LCAgOSwgJmNv ZWYzX005LCAmY29lZjVfTTksICJNOSIgfSwKKwkJeyAgNCwgIDgsICZjb2VmM19NOCwgJmNvZWY1 X004LCAiTTgiIH0sCisJCS8qCisJCSAqIFdoZW4gdXBzY2FsaW5nIG1vcmUgdGhhbiB0d28gdGlt ZXMsIGJsb2NraW5lc3MgYW5kIG91dGxpbmVzCisJCSAqIGFyb3VuZCB0aGUgaW1hZ2UgYXJlIG9i c2VydmVkIHdoZW4gTTggdGFibGVzIGFyZSB1c2VkLiBNMTEsCisJCSAqIE0xNiBhbmQgTTE5IHRh YmxlcyBhcmUgdXNlZCB0byBwcmV2ZW50IHRoaXMuCisJCSAqLworCQl7ICAzLCAgMywgJmNvZWYz X00xMSwgJmNvZWY1X00xMSwgIk0xMSIgfSwKKwkJeyAgMiwgIDIsICZjb2VmM19NMTYsICZjb2Vm NV9NMTYsICJNMTYiIH0sCisJCXsgIDAsICAxLCAmY29lZjNfTTE5LCAmY29lZjVfTTE5LCAiTTE5 IiB9LAorCX07CisKKwkvKgorCSAqIGluYyBpcyByZXN1bHQgb2YgMHgyMDAwMDAgKiBpbl9zaXpl IC8gb3V0X3NpemUuIFRoaXMgZGl2aWRpbmcKKwkgKiBieSAweDQwMDAwIHNjYWxlcyBpdCBkb3du IHRvIDggKiBpbl9zaXplIC8gb3V0X3NpemUuIEFmdGVyCisJICogZGl2aXNpb24gdGhlIGFjdHVh bCBzY2FsaW5nIGZhY3RvciBpcyA4L2luYy4KKwkgKi8KKwlpbmMgPSBmaXJpbmMgLyAweDQwMDAw OworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvZWZzKTsgKytpKSB7CisJCWlmIChpbmMg Pj0gY29lZnNbaV0uTW1pbiAmJiBpbmMgPD0gY29lZnNbaV0uTW1heCkgeworCQkJaWYgKGZpdmVf dGFwcykKKwkJCQlyZXR1cm4gY29lZnNbaV0uY29lZjU7CisJCQllbHNlCisJCQkJcmV0dXJuIGNv ZWZzW2ldLmNvZWYzOworCQl9CisJfQorCisJZGV2X2VycihkZXYsICIlczogQ29lZmZpY2llbnRz IG5vdCBmb3VuZCBmb3IgZmlyaW5jIDB4JTA4eCwgaW5jICVkXG4iLAorCQlfX2Z1bmNfXywgZmly aW5jLCBpbmMpOworCisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdGlkc3MvdGlkc3Nfc2NhbGVfY29lZnMuaCBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRz c19zY2FsZV9jb2Vmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u NjRiNWFmNWI1MzYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3Rp ZHNzX3NjYWxlX2NvZWZzLmgKQEAgLTAsMCArMSwyMiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGV4YXMgSW5zdHJ1 bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKiBBdXRob3I6IEp5cmkg U2FyaGEgPGpzYXJoYUB0aS5jb20+CisgKi8KKworI2lmbmRlZiBfX1RJRFNTX0RJU1BDX0NPRUZf SF9fCisjZGVmaW5lIF9fVElEU1NfRElTUENfQ09FRl9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+CisKK3N0cnVjdCB0aWRzc19zY2FsZV9jb2VmcyB7CisJczE2IGMyWzE2XTsKKwlzMTYg YzFbMTZdOworCXUxNiBjMFs5XTsKK307CisKK2NvbnN0IHN0cnVjdCB0aWRzc19zY2FsZV9jb2Vm cyAqdGlkc3NfZ2V0X3NjYWxlX2NvZWZzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCSAgICAg IHUzMiBmaXJpbmMsCisJCQkJCQkgICAgICBib29sIGZpdmVfdGFwcyk7CisKKyNlbmRpZgotLSAK VGV4YXMgSW5zdHJ1bWVudHMgRmlubGFuZCBPeSwgUG9ya2thbGFua2F0dSAyMiwgMDAxODAgSGVs c2lua2kuIFktdHVubnVzL0J1c2luZXNzIElEOiAwNjE1NTIxLTQuIEtvdGlwYWlra2EvRG9taWNp bGU6IEhlbHNpbmtpCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWw= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 59DF4C432C0 for ; Sun, 1 Dec 2019 13:50:21 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 074CB206E4 for ; Sun, 1 Dec 2019 13:50:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 074CB206E4 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=ti.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4BD876E07D; Sun, 1 Dec 2019 13:50:20 +0000 (UTC) Received: from lelv0143.ext.ti.com (lelv0143.ext.ti.com [198.47.23.248]) by gabe.freedesktop.org (Postfix) with ESMTPS id 105666E073 for ; Sun, 1 Dec 2019 13:50:17 +0000 (UTC) Received: from fllv0035.itg.ti.com ([10.64.41.0]) by lelv0143.ext.ti.com (8.15.2/8.15.2) with ESMTP id xB1DoCPq017963; Sun, 1 Dec 2019 07:50:12 -0600 Received: from DFLE111.ent.ti.com (dfle111.ent.ti.com [10.64.6.32]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTP id xB1DoCMT090604; Sun, 1 Dec 2019 07:50:12 -0600 Received: from DFLE100.ent.ti.com (10.64.6.21) by DFLE111.ent.ti.com (10.64.6.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3; Sun, 1 Dec 2019 07:50:10 -0600 Received: from fllv0039.itg.ti.com (10.64.41.19) by DFLE100.ent.ti.com (10.64.6.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3 via Frontend Transport; Sun, 1 Dec 2019 07:50:10 -0600 Received: from jadmar.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0039.itg.ti.com (8.15.2/8.15.2) with ESMTP id xB1Do7lC076010; Sun, 1 Dec 2019 07:50:08 -0600 From: Jyri Sarha To: Subject: [PATCH v2 4/5] drm/tidss: New driver for TI Keystone platform Display SubSystem Date: Sun, 1 Dec 2019 15:50:07 +0200 Message-ID: <2928aed8df17794076547f00f0a34d53a840e441.1575203210.git.jsarha@ti.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: References: MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1575208212; bh=fLX1E6cn4J9lnDrfpw/XjYTY2gCGpbUkLc+/oOKN6mg=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=DTgnB4ohnvf4eXbPIVjidwQyBlC5QpU1APx1z6eW3rFSkBUwynK9no1VQoRR2oYv8 QadI6HaGDDc9ipg86L7pXfu6/UWBGyUF++tSmp/UoinYcUvhkT6paNL+y/RLZUOLjS QS6ZrZFrBtXIOrGmrJVOLLyaLxRJb/6bs9bRDecM= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: yamonkar@cadence.com, praneeth@ti.com, sjakhade@cadence.com, peter.ujfalusi@ti.com, tomi.valkeinen@ti.com, laurent.pinchart@ideasonboard.com, subhajit_paul@ti.com, sam@ravnborg.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191201135007.m-GVyazj5kv6HnM0Gbd0kj4JJy9FGGPtLeG-a9Gs-Vc@z> VGhpcyBwYXRjaCBhZGRzIGEgbmV3IERSTSBkcml2ZXIgZm9yIFRleGFzIEluc3RydW1lbnRzIERT UyBJUHMgdXNlZCBvbgpUZXhhcyBJbnN0cnVtZW50cyBLZXlzdG9uZSBLMkcsIEFNNjV4LCBhbmQg SjcyMWUgU29Dcy4gVGhlIG5ldyBEU1MgSVAgaXMKYSBtYWpvciBjaGFuZ2UgdG8gdGhlIG9sZGVy IERTUyBJUCB2ZXJzaW9ucywgd2hpY2ggYXJlIHN1cHBvcnRlZCBieQp0aGUgb21hcGRybSBkcml2 ZXIuIFdoaWxlIG9uIGhpZ2hlciBsZXZlbCB0aGUgS2V5c3RvbmUgRFNTIHJlc2VtYmxlcwp0aGUg b2xkZXIgRFNTIHZlcnNpb25zLCB0aGUgcmVnaXN0ZXJzIGFyZSBjb21wbGV0ZWx5IGRpZmZlcmVu dCBhbmQgdGhlCmludGVybmFsIHBpcGVsaW5lcyBkaWZmZXIgYSBsb3QuCgpEU1MgSVAgZm91bmQg b24gSzJHIGlzIGFuICJ1bHRyYS1saWdodCIgdmVyc2lvbiwgYW5kIGhhcyBvbmx5IGEgc2luZ2xl CnBsYW5lIGFuZCBhIHNpbmdsZSBvdXRwdXQuIFRoZSBLZXlzdG9uZSAzIERTUyBJUHMgYXJlIGZv dW5kIG9uIEFNNjV4CmFuZCBKNzIxRSBTb0NzLiBBTTY1eCBEU1MgaGFzIHR3byB2aWRlbyBwb3J0 cywgb25lIGZ1bGwgdmlkZW8gcGxhbmUsCmFuZCBhbm90aGVyICJsaXRlIiBwbGFuZSB3aXRob3V0 IHNjYWxpbmcgc3VwcG9ydC4gSjcyMUUgaGFzIDQgdmlkZW8KcG9ydHMsIDIgdmlkZW8gcGxhbmVz IGFuZCAyIGxpdGUgcGxhbmVzLiBBTTY1eCBEU1MgaGFzIGFsc28gaW50ZWdyYXRlZApPTERJIChM VkRTKSBvdXRwdXQuCgpDby1kZXZlbG9wZWQtYnk6IFRvbWkgVmFsa2VpbmVuIDx0b21pLnZhbGtl aW5lbkB0aS5jb20+ClNpZ25lZC1vZmYtYnk6IEp5cmkgU2FyaGEgPGpzYXJoYUB0aS5jb20+Ci0t LQogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIGRy aXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJz L2dwdS9kcm0vdGlkc3MvS2NvbmZpZyAgICAgICAgICAgICB8ICAgMTQgKwogZHJpdmVycy9ncHUv ZHJtL3RpZHNzL01ha2VmaWxlICAgICAgICAgICAgfCAgIDEyICsKIGRyaXZlcnMvZ3B1L2RybS90 aWRzcy90aWRzc19jcnRjLmMgICAgICAgIHwgIDM3NiArKysKIGRyaXZlcnMvZ3B1L2RybS90aWRz cy90aWRzc19jcnRjLmggICAgICAgIHwgICA0NiArCiBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlk c3NfZGlzcGMuYyAgICAgICB8IDI2NDMgKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vdGlkc3MvdGlkc3NfZGlzcGMuaCAgICAgICB8ICAxMzIgKwogZHJpdmVycy9ncHUvZHJt L3RpZHNzL3RpZHNzX2Rpc3BjX3JlZ3MuaCAgfCAgMjQzICsrCiBkcml2ZXJzL2dwdS9kcm0vdGlk c3MvdGlkc3NfZHJ2LmMgICAgICAgICB8ICAyODUgKysrCiBkcml2ZXJzL2dwdS9kcm0vdGlkc3Mv dGlkc3NfZHJ2LmggICAgICAgICB8ICAgNDAgKwogZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNz X2VuY29kZXIuYyAgICAgfCAgIDg4ICsKIGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19lbmNv ZGVyLmggICAgIHwgICAxNyArCiBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfaXJxLmMgICAg ICAgICB8ICAxODUgKysKIGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19pcnEuaCAgICAgICAg IHwgICA3MiArCiBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3Nfa21zLmMgICAgICAgICB8ICAy NDggKysKIGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19rbXMuaCAgICAgICAgIHwgICAxNSAr CiBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfcGxhbmUuYyAgICAgICB8ICAyMTcgKysKIGRy aXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19wbGFuZS5oICAgICAgIHwgICAyNSArCiBkcml2ZXJz L2dwdS9kcm0vdGlkc3MvdGlkc3Nfc2NhbGVfY29lZnMuYyB8ICAyMDIgKysKIGRyaXZlcnMvZ3B1 L2RybS90aWRzcy90aWRzc19zY2FsZV9jb2Vmcy5oIHwgICAyMiArCiAyMSBmaWxlcyBjaGFuZ2Vk LCA0ODg1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v dGlkc3MvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy9N YWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19j cnRjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfY3J0 Yy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2Rpc3Bj LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZGlzcGMu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19kaXNwY19y ZWdzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZHJ2 LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZHJ2LmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZW5jb2Rlci5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2VuY29kZXIu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19pcnEuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19pcnEuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19rbXMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19rbXMuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19wbGFuZS5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX3BsYW5lLmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3Nfc2NhbGVfY29lZnMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19zY2FsZV9jb2Vmcy5oCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2Nv bmZpZwppbmRleCAxMTY4MzUxMjY3ZmQuLmNmNmU5Yjg4MTQyMCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTM4Niw2 ICszODYsOCBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hc3BlZWQvS2NvbmZpZyIKIAogc291 cmNlICJkcml2ZXJzL2dwdS9kcm0vbWNkZS9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvZ3B1 L2RybS90aWRzcy9LY29uZmlnIgorCiAjIEtlZXAgbGVnYWN5IGRyaXZlcnMgbGFzdAogCiBtZW51 Y29uZmlnIERSTV9MRUdBQ1kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCA5ZjFjN2M0ODZmODguLjU0NjdhMmI4ODcx ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9NYWtlZmlsZQpAQCAtMTIyLDMgKzEyMiw0IEBAIG9iai0kKENPTkZJR19EUk1fTElNQSkg ICs9IGxpbWEvCiBvYmotJChDT05GSUdfRFJNX1BBTkZST1NUKSArPSBwYW5mcm9zdC8KIG9iai0k KENPTkZJR19EUk1fQVNQRUVEX0dGWCkgKz0gYXNwZWVkLwogb2JqLSQoQ09ORklHX0RSTV9NQ0RF KSArPSBtY2RlLworb2JqLSQoQ09ORklHX0RSTV9USURTUykgKz0gdGlkc3MvCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy9L Y29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjc5MGE1MjE1 MzAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL0tjb25maWcKQEAg LTAsMCArMSwxNCBAQAorY29uZmlnIERSTV9USURTUworCXRyaXN0YXRlICJEUk0gU3VwcG9ydCBm b3IgVEkgS2V5c3RvbmUiCisJZGVwZW5kcyBvbiBEUk0gJiYgT0YKKwlkZXBlbmRzIG9uIEFSTSB8 fCBBUk02NCB8fCBDT01QSUxFX1RFU1QKKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3Qg RFJNX0tNU19DTUFfSEVMUEVSCisJc2VsZWN0IERSTV9HRU1fQ01BX0hFTFBFUgorCWhlbHAKKwkg IFRoZSBUSSBLZXlzdG9uZSBmYW1pbHkgU29DcyBpbnRyb2R1Y2VkIGEgbmV3IGdlbmVyYXRpb24g b2YKKwkgIERpc3BsYXkgU3ViU3lzdGVtLiBUaGVyZSBpcyBjdXJyZW50bHkgdGhyZWUgS2V5c3Rv bmUgZmFtaWx5CisJICBTb0NzIHJlbGVhc2VkIHdpdGggRFNTLiBFYWNoIHdpdGggc29tZXdoYXQg ZGlmZmVyZW50IHZlcnNpb24KKwkgIG9mIGl0LiBUaGUgU29DcyBhcmUgNjZBSzJHeCwgQU02NXgs IGFuZCBKNzIxRS4gU2V0IHRoaXMgdG8gWQorCSAgb3IgTSB0byBhZGQgZGlzcGxheSBzdXBwb3J0 IGZvciBUSSBLZXlzdG9uZSBmYW1pbHkKKwkgIHBsYXRmb3Jtcy4KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS90aWRzcy9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy9NYWtlZmls ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjMxMjY0NTI3MTAxNAot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy9NYWtlZmlsZQpAQCAtMCww ICsxLDEyIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKK3RpZHNzLXkg Oj0gdGlkc3NfY3J0Yy5vIFwKKwl0aWRzc19kcnYubyBcCisJdGlkc3NfZW5jb2Rlci5vIFwKKwl0 aWRzc19rbXMubyBcCisJdGlkc3NfaXJxLm8gXAorCXRpZHNzX3BsYW5lLm8gXAorCXRpZHNzX3Nj YWxlX2NvZWZzLm8gXAorCXRpZHNzX2Rpc3BjLm8KKworb2JqLSQoQ09ORklHX0RSTV9USURTUykg Kz0gdGlkc3MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2NydGMu YyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19jcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42NWYyM2ZiYTY3ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfY3J0Yy5jCkBAIC0wLDAgKzEsMzc2IEBACisvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx OCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAq IEF1dGhvcjogVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KKyAqLworCisj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxw ZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNf aGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV92YmxhbmsuaD4KKworI2luY2x1ZGUgInRpZHNzX2NydGMu aCIKKyNpbmNsdWRlICJ0aWRzc19kaXNwYy5oIgorI2luY2x1ZGUgInRpZHNzX2Rydi5oIgorI2lu Y2x1ZGUgInRpZHNzX2lycS5oIgorCisvKiBQYWdlIGZsaXAgYW5kIGZyYW1lIGRvbmUgSVJRcyAq LworCitzdGF0aWMgdm9pZCB0aWRzc19jcnRjX2ZpbmlzaF9wYWdlX2ZsaXAoc3RydWN0IHRpZHNz X2NydGMgKnRjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gdGNydGMtPmNydGMu ZGV2OworCXN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJ c3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQ7CisJdW5zaWduZWQgbG9uZyBm bGFnczsKKwlib29sIGJ1c3k7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGRldi0+ZXZlbnRfbG9j aywgZmxhZ3MpOworCisJLyoKKwkgKiBOZXcgc2V0dGluZ3MgYXJlIHRha2VuIGludG8gdXNlIGF0 IFZGUCwgYW5kIEdPIGJpdCBpcyBjbGVhcmVkIGF0CisJICogdGhlIHNhbWUgdGltZS4gVGhpcyBo YXBwZW5zIGJlZm9yZSB0aGUgdmVydGljYWwgYmxhbmsgaW50ZXJydXB0LgorCSAqIFNvIHRoZXJl IGlzIGEgc21hbGwgY2hhbmdlIHRoYXQgdGhlIGRyaXZlciBzZXRzIEdPIGJpdCBhZnRlciBWRlAs IGJ1dAorCSAqIGJlZm9yZSB2YmxhbmssIGFuZCB3ZSBoYXZlIHRvIGNoZWNrIGZvciB0aGF0IGNh c2UgaGVyZS4KKwkgKi8KKwlidXN5ID0gZGlzcGNfdnBfZ29fYnVzeSh0aWRzcy0+ZGlzcGMsIHRj cnRjLT5od192aWRlb3BvcnQpOworCWlmIChidXN5KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmRkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWV2ZW50ID0g dGNydGMtPmV2ZW50OworCXRjcnRjLT5ldmVudCA9IE5VTEw7CisKKwlpZiAoIWV2ZW50KSB7CisJ CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwkJcmV0 dXJuOworCX0KKworCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KCZ0Y3J0Yy0+Y3J0YywgZXZl bnQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGRldi0+ZXZlbnRfbG9jaywgZmxhZ3Mp OworCisJZHJtX2NydGNfdmJsYW5rX3B1dCgmdGNydGMtPmNydGMpOworfQorCit2b2lkIHRpZHNz X2NydGNfdmJsYW5rX2lycShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IHRpZHNz X2NydGMgKnRjcnRjID0gdG9fdGlkc3NfY3J0YyhjcnRjKTsKKworCWRybV9jcnRjX2hhbmRsZV92 YmxhbmsoY3J0Yyk7CisKKwl0aWRzc19jcnRjX2ZpbmlzaF9wYWdlX2ZsaXAodGNydGMpOworfQor Cit2b2lkIHRpZHNzX2NydGNfZnJhbWVkb25lX2lycShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7 CisJc3RydWN0IHRpZHNzX2NydGMgKnRjcnRjID0gdG9fdGlkc3NfY3J0YyhjcnRjKTsKKworCWNv bXBsZXRlKCZ0Y3J0Yy0+ZnJhbWVkb25lX2NvbXBsZXRpb24pOworfQorCit2b2lkIHRpZHNzX2Ny dGNfZXJyb3JfaXJxKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTY0IGlycXN0YXR1cykKK3sKKwlz dHJ1Y3QgdGlkc3NfY3J0YyAqdGNydGMgPSB0b190aWRzc19jcnRjKGNydGMpOworCisJZGV2X2Vy cl9yYXRlbGltaXRlZChjcnRjLT5kZXYtPmRldiwgIkNSVEMldSBTWU5DIExPU1Q6IChpcnEgJWxs eClcbiIsCisJCQkgICAgdGNydGMtPmh3X3ZpZGVvcG9ydCwgaXJxc3RhdHVzKTsKK30KKworLyog ZHJtX2NydGNfaGVscGVyX2Z1bmNzICovCisKK3N0YXRpYyBpbnQgdGlkc3NfY3J0Y19hdG9taWNf Y2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBjcnRjLT5kZXY7CisJc3Ry dWN0IHRpZHNzX2RldmljZSAqdGlkc3MgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZGlz cGNfZGV2aWNlICpkaXNwYyA9IHRpZHNzLT5kaXNwYzsKKwlzdHJ1Y3QgdGlkc3NfY3J0YyAqdGNy dGMgPSB0b190aWRzc19jcnRjKGNydGMpOworCXUzMiBod192aWRlb3BvcnQgPSB0Y3J0Yy0+aHdf dmlkZW9wb3J0OworCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCWVudW0g ZHJtX21vZGVfc3RhdHVzIG9rOworCisJZGV2X2RiZyhkZGV2LT5kZXYsICIlc1xuIiwgX19mdW5j X18pOworCisJaWYgKCFzdGF0ZS0+ZW5hYmxlKQorCQlyZXR1cm4gMDsKKworCW1vZGUgPSAmc3Rh dGUtPmFkanVzdGVkX21vZGU7CisKKwlvayA9IGRpc3BjX3ZwX21vZGVfdmFsaWQoZGlzcGMsIGh3 X3ZpZGVvcG9ydCwgbW9kZSk7CisJaWYgKG9rICE9IE1PREVfT0spIHsKKwkJZGV2X2RiZyhkZGV2 LT5kZXYsICIlczogYmFkIG1vZGU6ICV1eCV1IHBjbGsgJXUga0h6XG4iLAorCQkJX19mdW5jX18s IG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwgbW9kZS0+Y2xvY2spOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZGlzcGNfdnBfYnVzX2NoZWNrKGRpc3BjLCBod192aWRl b3BvcnQsIHN0YXRlKTsKK30KKworc3RhdGljIHZvaWQgdGlkc3NfY3J0Y19hdG9taWNfZmx1c2go c3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9s ZF9jcnRjX3N0YXRlKQoreworCXN0cnVjdCB0aWRzc19jcnRjICp0Y3J0YyA9IHRvX3RpZHNzX2Ny dGMoY3J0Yyk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0 IHRpZHNzX2RldmljZSAqdGlkc3MgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25n IGZsYWdzOworCisJZGV2X2RiZyhkZGV2LT5kZXYsCisJCSIlczogJXMgZW5hYmxlZCAlZCwgbmVl ZHMgbW9kZXNldCAlZCwgZXZlbnQgJXBcbiIsIF9fZnVuY19fLAorCQljcnRjLT5uYW1lLCBkcm1f YXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChjcnRjLT5zdGF0ZSksCisJCWNydGMtPnN0YXRlLT5l bmFibGUsIGNydGMtPnN0YXRlLT5ldmVudCk7CisKKwkvKiBUaGVyZSBpcyBub3RoaW5nIHRvIGRv IGlmIENSVEMgaXMgbm90IGdvaW5nIHRvIGJlIGVuYWJsZWQuICovCisJaWYgKCFjcnRjLT5zdGF0 ZS0+ZW5hYmxlKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEZsdXNoIENSVEMgY2hhbmdlcyB3aXRo IGdvIGJpdCBvbmx5IGlmIG5ldyBtb2Rlc2V0IGlzIG5vdAorCSAqIGNvbWluZywgc28gQ1JUQyBp cyBlbmFibGVkIHRyb3VnaCBvdXQgdGhlIGNvbW1pdC4KKwkgKi8KKwlpZiAoZHJtX2F0b21pY19j cnRjX25lZWRzX21vZGVzZXQoY3J0Yy0+c3RhdGUpKQorCQlyZXR1cm47CisKKwkvKiBJZiB0aGUg R08gYml0IGlzIHN0dWNrIHdlIGJldHRlciBxdWl0IGhlcmUuICovCisJaWYgKFdBUk5fT04oZGlz cGNfdnBfZ29fYnVzeSh0aWRzcy0+ZGlzcGMsIHRjcnRjLT5od192aWRlb3BvcnQpKSkKKwkJcmV0 dXJuOworCisJLyogV2Ugc2hvdWxkIGhhdmUgZXZlbnQgaWYgQ1JUQyBpcyBlbmFibGVkIHRocm91 Z2ggb3V0IHRoaXMgY29tbWl0LiAqLworCWlmIChXQVJOX09OKCFjcnRjLT5zdGF0ZS0+ZXZlbnQp KQorCQlyZXR1cm47CisKKwkvKiBXcml0ZSB2cCBwcm9wZXJ0aWVzIHRvIEhXIGlmIG5lZWRlZC4g Ki8KKwlkaXNwY192cF9zZXR1cCh0aWRzcy0+ZGlzcGMsIHRjcnRjLT5od192aWRlb3BvcnQsIGNy dGMtPnN0YXRlKTsKKworCVdBUk5fT04oZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSAhPSAwKTsK KworCXNwaW5fbG9ja19pcnFzYXZlKCZkZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJZGlzcGNf dnBfZ28odGlkc3MtPmRpc3BjLCB0Y3J0Yy0+aHdfdmlkZW9wb3J0KTsKKworCVdBUk5fT04odGNy dGMtPmV2ZW50KTsKKworCXRjcnRjLT5ldmVudCA9IGNydGMtPnN0YXRlLT5ldmVudDsKKwljcnRj LT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGRldi0+ ZXZlbnRfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB0aWRzc19jcnRjX2F0b21pY19l bmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICAgc3RydWN0IGRybV9jcnRjX3N0 YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IHRpZHNzX2NydGMgKnRjcnRjID0gdG9fdGlkc3Nf Y3J0YyhjcnRjKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGNydGMtPmRldjsKKwlzdHJ1 Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyA9IGRkZXYtPmRldl9wcml2YXRlOworCWNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOwor CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHI7CisKKwlkZXZfZGJnKGRkZXYtPmRldiwgIiVz LCBldmVudCAlcFxuIiwgX19mdW5jX18sIGNydGMtPnN0YXRlLT5ldmVudCk7CisKKwl0aWRzc19y dW50aW1lX2dldCh0aWRzcyk7CisKKwlyID0gZGlzcGNfdnBfc2V0X2Nsa19yYXRlKHRpZHNzLT5k aXNwYywgdGNydGMtPmh3X3ZpZGVvcG9ydCwKKwkJCQkgIG1vZGUtPmNsb2NrICogMTAwMCk7CisJ aWYgKHIgIT0gMCkKKwkJcmV0dXJuOworCisJciA9IGRpc3BjX3ZwX2VuYWJsZV9jbGsodGlkc3Mt PmRpc3BjLCB0Y3J0Yy0+aHdfdmlkZW9wb3J0KTsKKwlpZiAociAhPSAwKQorCQlyZXR1cm47CisK KwlkaXNwY192cF9zZXR1cCh0aWRzcy0+ZGlzcGMsIHRjcnRjLT5od192aWRlb3BvcnQsIGNydGMt PnN0YXRlKTsKKworCS8qIFR1cm4gdmVydGljYWwgYmxhbmtpbmcgaW50ZXJydXB0IHJlcG9ydGlu ZyBvbi4gKi8KKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7CisKKwlkaXNwY192cF9wcmVwYXJl KHRpZHNzLT5kaXNwYywgdGNydGMtPmh3X3ZpZGVvcG9ydCwgY3J0Yy0+c3RhdGUpOworCisJZGlz cGNfdnBfZW5hYmxlKHRpZHNzLT5kaXNwYywgdGNydGMtPmh3X3ZpZGVvcG9ydCwgY3J0Yy0+c3Rh dGUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwor CWlmIChjcnRjLT5zdGF0ZS0+ZXZlbnQpIHsKKwkJZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQo Y3J0YywgY3J0Yy0+c3RhdGUtPmV2ZW50KTsKKwkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsK Kwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7 Cit9CisKK3N0YXRpYyB2b2lkIHRpZHNzX2NydGNfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9j cnRjICpjcnRjLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX3N0YXRlKQor eworCXN0cnVjdCB0aWRzc19jcnRjICp0Y3J0YyA9IHRvX3RpZHNzX2NydGMoY3J0Yyk7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHRpZHNzX2RldmljZSAq dGlkc3MgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGV2 X2RiZyhkZGV2LT5kZXYsICIlcywgZXZlbnQgJXBcbiIsIF9fZnVuY19fLCBjcnRjLT5zdGF0ZS0+ ZXZlbnQpOworCisJcmVpbml0X2NvbXBsZXRpb24oJnRjcnRjLT5mcmFtZWRvbmVfY29tcGxldGlv bik7CisKKwlkaXNwY192cF9kaXNhYmxlKHRpZHNzLT5kaXNwYywgdGNydGMtPmh3X3ZpZGVvcG9y dCk7CisKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmdGNydGMtPmZyYW1lZG9u ZV9jb21wbGV0aW9uLAorCQkJCQkgbXNlY3NfdG9famlmZmllcyg1MDApKSkKKwkJZGV2X2Vycih0 aWRzcy0+ZGV2LCAiVGltZW91dCB3YWl0aW5nIGZvciBmcmFtZWRvbmUgb24gY3J0YyAlZCIsCisJ CQl0Y3J0Yy0+aHdfdmlkZW9wb3J0KTsKKworCWRpc3BjX3ZwX3VucHJlcGFyZSh0aWRzcy0+ZGlz cGMsIHRjcnRjLT5od192aWRlb3BvcnQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRkZXYtPmV2 ZW50X2xvY2ssIGZsYWdzKTsKKwlpZiAoY3J0Yy0+c3RhdGUtPmV2ZW50KSB7CisJCWRybV9jcnRj X3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGNydGMtPnN0YXRlLT5ldmVudCk7CisJCWNydGMtPnN0 YXRlLT5ldmVudCA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkZXYtPmV2 ZW50X2xvY2ssIGZsYWdzKTsKKworCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7CisKKwlkaXNw Y192cF9kaXNhYmxlX2Nsayh0aWRzcy0+ZGlzcGMsIHRjcnRjLT5od192aWRlb3BvcnQpOworCisJ dGlkc3NfcnVudGltZV9wdXQodGlkc3MpOworfQorCitzdGF0aWMKK2VudW0gZHJtX21vZGVfc3Rh dHVzIHRpZHNzX2NydGNfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJCSAg IGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCB0aWRzc19j cnRjICp0Y3J0YyA9IHRvX3RpZHNzX2NydGMoY3J0Yyk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRk ZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MgPSBkZGV2LT5kZXZf cHJpdmF0ZTsKKworCXJldHVybiBkaXNwY192cF9tb2RlX3ZhbGlkKHRpZHNzLT5kaXNwYywgdGNy dGMtPmh3X3ZpZGVvcG9ydCwgbW9kZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Ny dGNfaGVscGVyX2Z1bmNzIHRpZHNzX2NydGNfaGVscGVyX2Z1bmNzID0geworCS5hdG9taWNfY2hl Y2sgPSB0aWRzc19jcnRjX2F0b21pY19jaGVjaywKKwkuYXRvbWljX2ZsdXNoID0gdGlkc3NfY3J0 Y19hdG9taWNfZmx1c2gsCisJLmF0b21pY19lbmFibGUgPSB0aWRzc19jcnRjX2F0b21pY19lbmFi bGUsCisJLmF0b21pY19kaXNhYmxlID0gdGlkc3NfY3J0Y19hdG9taWNfZGlzYWJsZSwKKworCS5t b2RlX3ZhbGlkID0gdGlkc3NfY3J0Y19tb2RlX3ZhbGlkLAorfTsKKworLyogZHJtX2NydGNfZnVu Y3MgKi8KKworc3RhdGljIGludCB0aWRzc19jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9j cnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gY3J0Yy0+ZGV2OworCXN0 cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7CisKKwlkZXZfZGJn KGRkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwl0aWRzc19ydW50aW1lX2dldCh0aWRz cyk7CisKKwl0aWRzc19pcnFfZW5hYmxlX3ZibGFuayhjcnRjKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgdm9pZCB0aWRzc19jcnRjX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3Qg dGlkc3NfZGV2aWNlICp0aWRzcyA9IGRkZXYtPmRldl9wcml2YXRlOworCisJZGV2X2RiZyhkZGV2 LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJdGlkc3NfaXJxX2Rpc2FibGVfdmJsYW5rKGNy dGMpOworCisJdGlkc3NfcnVudGltZV9wdXQodGlkc3MpOworfQorCitzdGF0aWMgdm9pZCB0aWRz c19jcnRjX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgdGlkc3NfY3J0 Y19zdGF0ZSAqdGNydGM7CisKKwlpZiAoY3J0Yy0+c3RhdGUpCisJCV9fZHJtX2F0b21pY19oZWxw ZXJfY3J0Y19kZXN0cm95X3N0YXRlKGNydGMtPnN0YXRlKTsKKworCWtmcmVlKGNydGMtPnN0YXRl KTsKKworCXRjcnRjID0ga3phbGxvYyhzaXplb2YoKnRjcnRjKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCF0Y3J0YykgeworCQljcnRjLT5zdGF0ZSA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwljcnRj LT5zdGF0ZSA9ICZ0Y3J0Yy0+YmFzZTsKKwljcnRjLT5zdGF0ZS0+Y3J0YyA9IGNydGM7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnRpZHNzX2NydGNfZHVwbGljYXRlX3N0YXRl KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgdGlkc3NfY3J0Y19zdGF0ZSAqc3Rh dGUsICpjdXJyZW50X3N0YXRlOworCisJaWYgKFdBUk5fT04oIWNydGMtPnN0YXRlKSkKKwkJcmV0 dXJuIE5VTEw7CisKKwljdXJyZW50X3N0YXRlID0gdG9fdGlkc3NfY3J0Y19zdGF0ZShjcnRjLT5z dGF0ZSk7CisKKwlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwor CWlmICghc3RhdGUpCisJCXJldHVybiBOVUxMOworCisJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRj X2R1cGxpY2F0ZV9zdGF0ZShjcnRjLCAmc3RhdGUtPmJhc2UpOworCisJc3RhdGUtPmJ1c19mb3Jt YXQgPSBjdXJyZW50X3N0YXRlLT5idXNfZm9ybWF0OworCXN0YXRlLT5idXNfZmxhZ3MgPSBjdXJy ZW50X3N0YXRlLT5idXNfZmxhZ3M7CisKKwlyZXR1cm4gJnN0YXRlLT5iYXNlOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIHRpZHNzX2NydGNfZnVuY3MgPSB7CisJLnJl c2V0ID0gdGlkc3NfY3J0Y19yZXNldCwKKwkuZGVzdHJveSA9IGRybV9jcnRjX2NsZWFudXAsCisJ LnNldF9jb25maWcgPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLAorCS5wYWdlX2ZsaXAg PSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUg PSB0aWRzc19jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBk cm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUsCisJLmVuYWJsZV92YmxhbmsgPSB0 aWRzc19jcnRjX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gdGlkc3NfY3J0Y19k aXNhYmxlX3ZibGFuaywKK307CisKK3N0cnVjdCB0aWRzc19jcnRjICp0aWRzc19jcnRjX2NyZWF0 ZShzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcywKKwkJCQkgICAgIHUzMiBod192aWRlb3BvcnQs CisJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5KQoreworCXN0cnVjdCB0aWRzc19j cnRjICp0Y3J0YzsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJdW5zaWduZWQgaW50IGdhbW1h X2x1dF9zaXplID0gMDsKKwlib29sIGhhc19jdG0gPSB0cnVlOworCWludCByZXQ7CisKKwl0Y3J0 YyA9IGRldm1fa3phbGxvYyh0aWRzcy0+ZGV2LCBzaXplb2YoKnRjcnRjKSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCF0Y3J0YykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl0Y3J0Yy0+aHdf dmlkZW9wb3J0ID0gaHdfdmlkZW9wb3J0OworCWluaXRfY29tcGxldGlvbigmdGNydGMtPmZyYW1l ZG9uZV9jb21wbGV0aW9uKTsKKworCWNydGMgPSAgJnRjcnRjLT5jcnRjOworCisJcmV0ID0gZHJt X2NydGNfaW5pdF93aXRoX3BsYW5lcygmdGlkc3MtPmRkZXYsIGNydGMsIHByaW1hcnksCisJCQkJ CU5VTEwsICZ0aWRzc19jcnRjX2Z1bmNzLCBOVUxMKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJu IEVSUl9QVFIocmV0KTsKKworCWRybV9jcnRjX2hlbHBlcl9hZGQoY3J0YywgJnRpZHNzX2NydGNf aGVscGVyX2Z1bmNzKTsKKworCS8qCisJICogVGhlIGRpc3BjIGdhbW1hIGZ1bmN0aW9ucyBhZGFw dCB0byB3aGF0IGV2ZXIgc2l6ZSB3ZSBhc2sKKwkgKiBmcm9tIGl0IG5vIG1hdHRlciB3aGF0IEhX IHN1cHBvcnRzLiBYLXNlcnZlciBhc3N1bWVzIDI1NgorCSAqIGVsZW1lbnQgZ2FtbWEgdGFibGVz IHNvIGxldHMgdXNlIHRoYXQuCisJICovCisJZ2FtbWFfbHV0X3NpemUgPSAyNTY7CisKKwlkcm1f Y3J0Y19lbmFibGVfY29sb3JfbWdtdChjcnRjLCAwLCBoYXNfY3RtLCBnYW1tYV9sdXRfc2l6ZSk7 CisJaWYgKGdhbW1hX2x1dF9zaXplKQorCQlkcm1fbW9kZV9jcnRjX3NldF9nYW1tYV9zaXplKGNy dGMsIGdhbW1hX2x1dF9zaXplKTsKKworCXJldHVybiB0Y3J0YzsKK30KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19jcnRjLmggYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3Mv dGlkc3NfY3J0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZGY5 ZDkwYjFhZDJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNz X2NydGMuaApAQCAtMCwwICsxLDQ2IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUZXhhcyBJbnN0cnVtZW50cyBJbmNv cnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4g PHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KKyAqLworCisjaWZuZGVmIF9fVElEU1NfQ1JUQ19IX18K KyNkZWZpbmUgX19USURTU19DUlRDX0hfXworCisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5o PgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgor CisjZGVmaW5lIHRvX3RpZHNzX2NydGMoYykgY29udGFpbmVyX29mKChjKSwgc3RydWN0IHRpZHNz X2NydGMsIGNydGMpCisKK3N0cnVjdCB0aWRzc19kZXZpY2U7CisKK3N0cnVjdCB0aWRzc19jcnRj IHsKKwlzdHJ1Y3QgZHJtX2NydGMgY3J0YzsKKworCXUzMiBod192aWRlb3BvcnQ7CisKKwlzdHJ1 Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudDsKKworCXN0cnVjdCBjb21wbGV0aW9u IGZyYW1lZG9uZV9jb21wbGV0aW9uOworfTsKKworI2RlZmluZSB0b190aWRzc19jcnRjX3N0YXRl KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgdGlkc3NfY3J0Y19zdGF0ZSwgYmFzZSkKKworc3Ry dWN0IHRpZHNzX2NydGNfc3RhdGUgeworCS8qIE11c3QgYmUgZmlyc3QuICovCisJc3RydWN0IGRy bV9jcnRjX3N0YXRlIGJhc2U7CisKKwl1MzIgYnVzX2Zvcm1hdDsKKwl1MzIgYnVzX2ZsYWdzOwor fTsKKwordm9pZCB0aWRzc19jcnRjX3ZibGFua19pcnEoc3RydWN0IGRybV9jcnRjICpjcnRjKTsK K3ZvaWQgdGlkc3NfY3J0Y19mcmFtZWRvbmVfaXJxKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2 b2lkIHRpZHNzX2NydGNfZXJyb3JfaXJxKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTY0IGlycXN0 YXR1cyk7CisKK3N0cnVjdCB0aWRzc19jcnRjICp0aWRzc19jcnRjX2NyZWF0ZShzdHJ1Y3QgdGlk c3NfZGV2aWNlICp0aWRzcywKKwkJCQkgICAgIHUzMiBod192aWRlb3BvcnQsCisJCQkJICAgICBz dHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3RpZHNzL3RpZHNzX2Rpc3BjLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3Nf ZGlzcGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBjODA1Mjcx OTBjYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19kaXNw Yy5jCkBAIC0wLDAgKzEsMjY0MyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBUZXhhcyBJbnN0cnVtZW50cyBJbmNv cnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqIEF1dGhvcjogSnlyaSBTYXJoYSA8anNh cmhhQHRpLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxp bnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4 L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+ CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2Uu aD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9w bV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKKyNpbmNsdWRlIDxkcm0v ZHJtX2ZvdXJjYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgorI2luY2x1 ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+ CisKKyNpbmNsdWRlICJ0aWRzc19jcnRjLmgiCisjaW5jbHVkZSAidGlkc3NfZGlzcGMuaCIKKyNp bmNsdWRlICJ0aWRzc19kcnYuaCIKKyNpbmNsdWRlICJ0aWRzc19pcnEuaCIKKyNpbmNsdWRlICJ0 aWRzc19wbGFuZS5oIgorCisjaW5jbHVkZSAidGlkc3NfZGlzcGNfcmVncy5oIgorI2luY2x1ZGUg InRpZHNzX3NjYWxlX2NvZWZzLmgiCisKK3N0YXRpYyBjb25zdCB1MTYgdGlkc3NfazJnX2NvbW1v bl9yZWdzW0RJU1BDX0NPTU1PTl9SRUdfVEFCTEVfTEVOXSA9IHsKKwlbRFNTX1JFVklTSU9OX09G Rl0gPSAgICAgICAgICAgICAgICAgICAgMHgwMCwKKwlbRFNTX1NZU0NPTkZJR19PRkZdID0gICAg ICAgICAgICAgICAgICAgMHgwNCwKKwlbRFNTX1NZU1NUQVRVU19PRkZdID0gICAgICAgICAgICAg ICAgICAgMHgwOCwKKwlbRElTUENfSVJRX0VPSV9PRkZdID0gICAgICAgICAgICAgICAgICAgMHgy MCwKKwlbRElTUENfSVJRU1RBVFVTX1JBV19PRkZdID0gICAgICAgICAgICAgMHgyNCwKKwlbRElT UENfSVJRU1RBVFVTX09GRl0gPSAgICAgICAgICAgICAgICAgMHgyOCwKKwlbRElTUENfSVJRRU5B QkxFX1NFVF9PRkZdID0gICAgICAgICAgICAgMHgyYywKKwlbRElTUENfSVJRRU5BQkxFX0NMUl9P RkZdID0gICAgICAgICAgICAgMHgzMCwKKworCVtESVNQQ19HTE9CQUxfTUZMQUdfQVRUUklCVVRF X09GRl0gPSAgICAweDQwLAorCVtESVNQQ19HTE9CQUxfQlVGRkVSX09GRl0gPSAgICAgICAgICAg ICAweDQ0LAorCisJW0RJU1BDX0RCR19DT05UUk9MX09GRl0gPSAgICAgICAgICAgICAgIDB4NGMs CisJW0RJU1BDX0RCR19TVEFUVVNfT0ZGXSA9ICAgICAgICAgICAgICAgIDB4NTAsCisKKwlbRElT UENfQ0xLR0FUSU5HX0RJU0FCTEVfT0ZGXSA9ICAgICAgICAgMHg1NCwKK307CisKK2NvbnN0IHN0 cnVjdCBkaXNwY19mZWF0dXJlcyBkaXNwY19rMmdfZmVhdHMgPSB7CisJLm1pbl9wY2xrX2tIeiA9 IDQzNzUsCisKKwkubWF4X3BjbGtfa0h6ID0geworCQlbRElTUENfVlBfRFBJXSA9IDE1MDAwMCwK Kwl9LAorCisJLyoKKwkgKiBYWFggQWNjb3JkaW5nIFRSTSB0aGUgUkdCIGlucHV0IGJ1ZmZlciB3 aWR0aCB1cCB0byAyNTYwIHNob3VsZAorCSAqICAgICB3b3JrIG9uIDMgdGFwcywgYnV0IGluIHBy YWN0aWNlIGl0IG9ubHkgd29ya3MgdXAgdG8gMTI4MC4KKwkgKi8KKwkuc2NhbGluZyA9IHsKKwkJ LmluX3dpZHRoX21heF81dGFwX3JnYiA9IDEyODAsCisJCS5pbl93aWR0aF9tYXhfM3RhcF9yZ2Ig PSAxMjgwLAorCQkuaW5fd2lkdGhfbWF4XzV0YXBfeXV2ID0gMjU2MCwKKwkJLmluX3dpZHRoX21h eF8zdGFwX3l1diA9IDI1NjAsCisJCS51cHNjYWxlX2xpbWl0ID0gMTYsCisJCS5kb3duc2NhbGVf bGltaXRfNXRhcCA9IDQsCisJCS5kb3duc2NhbGVfbGltaXRfM3RhcCA9IDIsCisJCS8qCisJCSAq IFRoZSBtYXggc3VwcG9ydGVkIHBpeGVsIGluYyB2YWx1ZSBpcyAyNTUuIFRoZSB2YWx1ZQorCQkg KiBvZiBwaXhlbCBpbmMgaXMgY2FsY3VsYXRlZCBsaWtlIHRoaXM6IDErKHhpbmMtMSkqYnBwLgor CQkgKiBUaGUgbWF4aW11bSBicHAgb2YgYWxsIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IHRoZSBIVwor CQkgKiBpcyA4LiBTbyB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgeGluYyB2YWx1ZSBpcyAzMiwKKwkJ ICogYmVjYXVzZSAxKygzMi0xKSo4IDwgMjU1IDwgMSsoMzMtMSkqNC4KKwkJICovCisJCS54aW5j X21heCA9IDMyLAorCX0sCisKKwkuc3VicmV2ID0gRElTUENfSzJHLAorCisJLmNvbW1vbiA9ICJj b21tb24iLAorCisJLmNvbW1vbl9yZWdzID0gdGlkc3NfazJnX2NvbW1vbl9yZWdzLAorCisJLm51 bV92cHMgPSAxLAorCS52cF9uYW1lID0geyAidnAxIiB9LAorCS5vdnJfbmFtZSA9IHsgIm92cjEi IH0sCisJLnZwY2xrX25hbWUgPSAgeyAidnAxIiB9LAorCS52cF9idXNfdHlwZSA9IHsgRElTUENf VlBfRFBJIH0sCisKKwkudnBfZmVhdCA9IHsgLmNvbG9yID0geworCQkJLmhhc19jdG0gPSBmYWxz ZSwgLyogWFhYIG5vIEsyRyBpbXBsZW1lbnRhdGlvbiB5ZXQgKi8KKwkJCS5nYW1tYV9zaXplID0g MjU2LAorCQkJLmdhbW1hX3R5cGUgPSBUSURTU19HQU1NQV84QklULAorCQl9LAorCX0sCisKKwku bnVtX3BsYW5lcyA9IDEsCisJLnZpZF9uYW1lID0geyAidmlkMSIgfSwKKwkudmlkX2xpdGUgPSB7 IGZhbHNlIH0sCisJLnZpZF9vcmRlciA9IHsgMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHUxNiB0 aWRzc19hbTY1eF9jb21tb25fcmVnc1tESVNQQ19DT01NT05fUkVHX1RBQkxFX0xFTl0gPSB7CisJ W0RTU19SRVZJU0lPTl9PRkZdID0JCQkweDQsCisJW0RTU19TWVNDT05GSUdfT0ZGXSA9CQkJMHg4 LAorCVtEU1NfU1lTU1RBVFVTX09GRl0gPQkJCTB4MjAsCisJW0RJU1BDX0lSUV9FT0lfT0ZGXSA9 CQkJMHgyNCwKKwlbRElTUENfSVJRU1RBVFVTX1JBV19PRkZdID0JCTB4MjgsCisJW0RJU1BDX0lS UVNUQVRVU19PRkZdID0JCQkweDJjLAorCVtESVNQQ19JUlFFTkFCTEVfU0VUX09GRl0gPQkJMHgz MCwKKwlbRElTUENfSVJRRU5BQkxFX0NMUl9PRkZdID0JCTB4NDAsCisJW0RJU1BDX1ZJRF9JUlFF TkFCTEVfT0ZGXSA9CQkweDQ0LAorCVtESVNQQ19WSURfSVJRU1RBVFVTX09GRl0gPQkJMHg1OCwK KwlbRElTUENfVlBfSVJRRU5BQkxFX09GRl0gPQkJMHg3MCwKKwlbRElTUENfVlBfSVJRU1RBVFVT X09GRl0gPQkJMHg3YywKKworCVtXQl9JUlFFTkFCTEVfT0ZGXSA9CQkJMHg4OCwKKwlbV0JfSVJR U1RBVFVTX09GRl0gPQkJCTB4OGMsCisKKwlbRElTUENfR0xPQkFMX01GTEFHX0FUVFJJQlVURV9P RkZdID0JMHg5MCwKKwlbRElTUENfR0xPQkFMX09VVFBVVF9FTkFCTEVfT0ZGXSA9CTB4OTQsCisJ W0RJU1BDX0dMT0JBTF9CVUZGRVJfT0ZGXSA9CQkweDk4LAorCVtEU1NfQ0JBX0NGR19PRkZdID0J CQkweDljLAorCVtESVNQQ19EQkdfQ09OVFJPTF9PRkZdID0JCTB4YTAsCisJW0RJU1BDX0RCR19T VEFUVVNfT0ZGXSA9CQkweGE0LAorCVtESVNQQ19DTEtHQVRJTkdfRElTQUJMRV9PRkZdID0JCTB4 YTgsCisJW0RJU1BDX1NFQ1VSRV9ESVNBQkxFX09GRl0gPQkJMHhhYywKK307CisKK2NvbnN0IHN0 cnVjdCBkaXNwY19mZWF0dXJlcyBkaXNwY19hbTY1eF9mZWF0cyA9IHsKKwkubWF4X3BjbGtfa0h6 ID0geworCQlbRElTUENfVlBfRFBJXSA9IDE2NTAwMCwKKwkJW0RJU1BDX1ZQX09MREldID0gMTY1 MDAwLAorCX0sCisKKwkuc2NhbGluZyA9IHsKKwkJLmluX3dpZHRoX21heF81dGFwX3JnYiA9IDEy ODAsCisJCS5pbl93aWR0aF9tYXhfM3RhcF9yZ2IgPSAyNTYwLAorCQkuaW5fd2lkdGhfbWF4XzV0 YXBfeXV2ID0gMjU2MCwKKwkJLmluX3dpZHRoX21heF8zdGFwX3l1diA9IDQwOTYsCisJCS51cHNj YWxlX2xpbWl0ID0gMTYsCisJCS5kb3duc2NhbGVfbGltaXRfNXRhcCA9IDQsCisJCS5kb3duc2Nh bGVfbGltaXRfM3RhcCA9IDIsCisJCS8qCisJCSAqIFRoZSBtYXggc3VwcG9ydGVkIHBpeGVsIGlu YyB2YWx1ZSBpcyAyNTUuIFRoZSB2YWx1ZQorCQkgKiBvZiBwaXhlbCBpbmMgaXMgY2FsY3VsYXRl ZCBsaWtlIHRoaXM6IDErKHhpbmMtMSkqYnBwLgorCQkgKiBUaGUgbWF4aW11bSBicHAgb2YgYWxs IGZvcm1hdHMgc3VwcG9ydGVkIGJ5IHRoZSBIVworCQkgKiBpcyA4LiBTbyB0aGUgbWF4aW11bSBz dXBwb3J0ZWQgeGluYyB2YWx1ZSBpcyAzMiwKKwkJICogYmVjYXVzZSAxKygzMi0xKSo4IDwgMjU1 IDwgMSsoMzMtMSkqNC4KKwkJICovCisJCS54aW5jX21heCA9IDMyLAorCX0sCisKKwkuc3VicmV2 ID0gRElTUENfQU02NVgsCisKKwkuY29tbW9uID0gImNvbW1vbiIsCisJLmNvbW1vbl9yZWdzID0g dGlkc3NfYW02NXhfY29tbW9uX3JlZ3MsCisKKwkubnVtX3ZwcyA9IDIsCisJLnZwX25hbWUgPSB7 ICJ2cDEiLCAidnAyIiB9LAorCS5vdnJfbmFtZSA9IHsgIm92cjEiLCAib3ZyMiIgfSwKKwkudnBj bGtfbmFtZSA9ICB7ICJ2cDEiLCAidnAyIiB9LAorCS52cF9idXNfdHlwZSA9IHsgRElTUENfVlBf T0xESSwgRElTUENfVlBfRFBJIH0sCisKKwkudnBfZmVhdCA9IHsgLmNvbG9yID0geworCQkJLmhh c19jdG0gPSB0cnVlLAorCQkJLmdhbW1hX3NpemUgPSAyNTYsCisJCQkuZ2FtbWFfdHlwZSA9IFRJ RFNTX0dBTU1BXzhCSVQsCisJCX0sCisJfSwKKworCS5udW1fcGxhbmVzID0gMiwKKwkvKiBub3Rl OiB2aWQgaXMgcGxhbmVfaWQgMCBhbmQgdmlkbDEgaXMgcGxhbmVfaWQgMSAqLworCS52aWRfbmFt ZSA9IHsgInZpZCIsICJ2aWRsMSIgfSwKKwkudmlkX2xpdGUgPSB7IGZhbHNlLCB0cnVlLCB9LAor CS52aWRfb3JkZXIgPSB7IDEsIDAgfSwKKworCS5lcnJhdGEgPSB7CisJCS5pMjAwMCA9IHRydWUs CisJfSwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgdGlkc3NfajcyMWVfY29tbW9uX3JlZ3NbRElT UENfQ09NTU9OX1JFR19UQUJMRV9MRU5dID0geworCVtEU1NfUkVWSVNJT05fT0ZGXSA9CQkJMHg0 LAorCVtEU1NfU1lTQ09ORklHX09GRl0gPQkJCTB4OCwKKwlbRFNTX1NZU1NUQVRVU19PRkZdID0J CQkweDIwLAorCVtESVNQQ19JUlFfRU9JX09GRl0gPQkJCTB4ODAsCisJW0RJU1BDX0lSUVNUQVRV U19SQVdfT0ZGXSA9CQkweDI4LAorCVtESVNQQ19JUlFTVEFUVVNfT0ZGXSA9CQkJMHgyYywKKwlb RElTUENfSVJRRU5BQkxFX1NFVF9PRkZdID0JCTB4MzAsCisJW0RJU1BDX0lSUUVOQUJMRV9DTFJf T0ZGXSA9CQkweDM0LAorCVtESVNQQ19WSURfSVJRRU5BQkxFX09GRl0gPQkJMHgzOCwKKwlbRElT UENfVklEX0lSUVNUQVRVU19PRkZdID0JCTB4NDgsCisJW0RJU1BDX1ZQX0lSUUVOQUJMRV9PRkZd ID0JCTB4NTgsCisJW0RJU1BDX1ZQX0lSUVNUQVRVU19PRkZdID0JCTB4NjgsCisKKwlbV0JfSVJR RU5BQkxFX09GRl0gPQkJCTB4NzgsCisJW1dCX0lSUVNUQVRVU19PRkZdID0JCQkweDdjLAorCisJ W0RJU1BDX0dMT0JBTF9NRkxBR19BVFRSSUJVVEVfT0ZGXSA9CTB4OTgsCisJW0RJU1BDX0dMT0JB TF9PVVRQVVRfRU5BQkxFX09GRl0gPQkweDljLAorCVtESVNQQ19HTE9CQUxfQlVGRkVSX09GRl0g PQkJMHhhMCwKKwlbRFNTX0NCQV9DRkdfT0ZGXSA9CQkJMHhhNCwKKwlbRElTUENfREJHX0NPTlRS T0xfT0ZGXSA9CQkweGE4LAorCVtESVNQQ19EQkdfU1RBVFVTX09GRl0gPQkJMHhhYywKKwlbRElT UENfQ0xLR0FUSU5HX0RJU0FCTEVfT0ZGXSA9CQkweGIwLAorCVtESVNQQ19TRUNVUkVfRElTQUJM RV9PRkZdID0JCTB4OTAsCisKKwlbRkJEQ19SRVZJU0lPTl8xX09GRl0gPQkJCTB4YjgsCisJW0ZC RENfUkVWSVNJT05fMl9PRkZdID0JCQkweGJjLAorCVtGQkRDX1JFVklTSU9OXzNfT0ZGXSA9CQkJ MHhjMCwKKwlbRkJEQ19SRVZJU0lPTl80X09GRl0gPQkJCTB4YzQsCisJW0ZCRENfUkVWSVNJT05f NV9PRkZdID0JCQkweGM4LAorCVtGQkRDX1JFVklTSU9OXzZfT0ZGXSA9CQkJMHhjYywKKwlbRkJE Q19DT01NT05fQ09OVFJPTF9PRkZdID0JCTB4ZDAsCisJW0ZCRENfQ09OU1RBTlRfQ09MT1JfMF9P RkZdID0JCTB4ZDQsCisJW0ZCRENfQ09OU1RBTlRfQ09MT1JfMV9PRkZdID0JCTB4ZDgsCisJW0RJ U1BDX0NPTk5FQ1RJT05TX09GRl0gPQkJMHhlNCwKKwlbRElTUENfTVNTX1ZQMV9PRkZdID0JCQkw eGU4LAorCVtESVNQQ19NU1NfVlAzX09GRl0gPQkJCTB4ZWMsCit9OworCitjb25zdCBzdHJ1Y3Qg ZGlzcGNfZmVhdHVyZXMgZGlzcGNfajcyMWVfZmVhdHMgPSB7CisJLm1heF9wY2xrX2tIeiA9IHsK KwkJW0RJU1BDX1ZQX0RQSV0gPSAxNzAwMDAsCisJCVtESVNQQ19WUF9JTlRFUk5BTF0gPSA2MDAw MDAsCisJfSwKKworCS5zY2FsaW5nID0geworCQkuaW5fd2lkdGhfbWF4XzV0YXBfcmdiID0gMjA0 OCwKKwkJLmluX3dpZHRoX21heF8zdGFwX3JnYiA9IDQwOTYsCisJCS5pbl93aWR0aF9tYXhfNXRh cF95dXYgPSA0MDk2LAorCQkuaW5fd2lkdGhfbWF4XzN0YXBfeXV2ID0gNDA5NiwKKwkJLnVwc2Nh bGVfbGltaXQgPSAxNiwKKwkJLmRvd25zY2FsZV9saW1pdF81dGFwID0gNCwKKwkJLmRvd25zY2Fs ZV9saW1pdF8zdGFwID0gMiwKKwkJLyoKKwkJICogVGhlIG1heCBzdXBwb3J0ZWQgcGl4ZWwgaW5j IHZhbHVlIGlzIDI1NS4gVGhlIHZhbHVlCisJCSAqIG9mIHBpeGVsIGluYyBpcyBjYWxjdWxhdGVk IGxpa2UgdGhpczogMSsoeGluYy0xKSpicHAuCisJCSAqIFRoZSBtYXhpbXVtIGJwcCBvZiBhbGwg Zm9ybWF0cyBzdXBwb3J0ZWQgYnkgdGhlIEhXCisJCSAqIGlzIDguIFNvIHRoZSBtYXhpbXVtIHN1 cHBvcnRlZCB4aW5jIHZhbHVlIGlzIDMyLAorCQkgKiBiZWNhdXNlIDErKDMyLTEpKjggPCAyNTUg PCAxKygzMy0xKSo0LgorCQkgKi8KKwkJLnhpbmNfbWF4ID0gMzIsCisJfSwKKworCS5zdWJyZXYg PSBESVNQQ19KNzIxRSwKKworCS5jb21tb24gPSAiY29tbW9uX20iLAorCS5jb21tb25fcmVncyA9 IHRpZHNzX2o3MjFlX2NvbW1vbl9yZWdzLAorCisJLm51bV92cHMgPSA0LAorCS52cF9uYW1lID0g eyAidnAxIiwgInZwMiIsICJ2cDMiLCAidnA0IiB9LAorCS5vdnJfbmFtZSA9IHsgIm92cjEiLCAi b3ZyMiIsICJvdnIzIiwgIm92cjQiIH0sCisJLnZwY2xrX25hbWUgPSB7ICJ2cDEiLCAidnAyIiwg InZwMyIsICJ2cDQiIH0sCisJLyogQ3VycmVudGx5IGhhcmQgY29kZWQgVlAgcm91dGluZyAoc2Vl IGRpc3BjX2luaXRpYWxfY29uZmlnKCkpICovCisJLnZwX2J1c190eXBlID0JeyBESVNQQ19WUF9J TlRFUk5BTCwgRElTUENfVlBfRFBJLAorCQkJICBESVNQQ19WUF9JTlRFUk5BTCwgRElTUENfVlBf RFBJLCB9LAorCS52cF9mZWF0ID0geyAuY29sb3IgPSB7CisJCQkuaGFzX2N0bSA9IHRydWUsCisJ CQkuZ2FtbWFfc2l6ZSA9IDEwMjQsCisJCQkuZ2FtbWFfdHlwZSA9IFRJRFNTX0dBTU1BXzEwQklU LAorCQl9LAorCX0sCisJLm51bV9wbGFuZXMgPSA0LAorCS52aWRfbmFtZSA9IHsgInZpZDEiLCAi dmlkbDEiLCAidmlkMiIsICJ2aWRsMiIgfSwKKwkudmlkX2xpdGUgPSB7IDAsIDEsIDAsIDEsIH0s CisJLnZpZF9vcmRlciA9IHsgMSwgMywgMCwgMiB9LAorfTsKKworLyoKKyAqIFRSTSBnaXZlcyBi aXRmaWVsZHMgYXMgc3RhcnQ6ZW5kLCB3aGVyZSBzdGFydCBpcyB0aGUgaGlnaGVyIGJpdAorICog bnVtYmVyLiBGb3IgZXhhbXBsZSA3OjAKKyAqLworCisjZGVmaW5lIEZMRF9NQVNLKHN0YXJ0LCBl bmQpCSgoKDEgPDwgKChzdGFydCkgLSAoZW5kKSArIDEpKSAtIDEpIDw8IChlbmQpKQorI2RlZmlu ZSBGTERfVkFMKHZhbCwgc3RhcnQsIGVuZCkgKCgodmFsKSA8PCAoZW5kKSkgJiBGTERfTUFTSyhz dGFydCwgZW5kKSkKKyNkZWZpbmUgRkxEX0dFVCh2YWwsIHN0YXJ0LCBlbmQpICgoKHZhbCkgJiBG TERfTUFTSyhzdGFydCwgZW5kKSkgPj4gKGVuZCkpCisjZGVmaW5lIEZMRF9NT0Qob3JpZywgdmFs LCBzdGFydCwgZW5kKQkJCQkJXAorCSgoKG9yaWcpICYgfkZMRF9NQVNLKHN0YXJ0LCBlbmQpKSB8 IEZMRF9WQUwodmFsLCBzdGFydCwgZW5kKSkKKworI2RlZmluZSBSRUdfR0VUKGRpc3BjLCBpZHgs IHN0YXJ0LCBlbmQpCQkJXAorCUZMRF9HRVQoZGlzcGNfcmVhZChkaXNwYywgaWR4KSwgc3RhcnQs IGVuZCkKKworI2RlZmluZSBSRUdfRkxEX01PRChkaXNwYywgaWR4LCB2YWwsIHN0YXJ0LCBlbmQp CQkJXAorCWRpc3BjX3dyaXRlKGRpc3BjLCBpZHgsIEZMRF9NT0QoZGlzcGNfcmVhZChkaXNwYywg aWR4KSwgdmFsLCBzdGFydCwgZW5kKSkKKworI2RlZmluZSBWSURfUkVHX0dFVChkaXNwYywgaHdf cGxhbmUsIGlkeCwgc3RhcnQsIGVuZCkJCQlcCisJRkxEX0dFVChkaXNwY192aWRfcmVhZChkaXNw YywgaHdfcGxhbmUsIGlkeCksIHN0YXJ0LCBlbmQpCisKKyNkZWZpbmUgVklEX1JFR19GTERfTU9E KGRpc3BjLCBod19wbGFuZSwgaWR4LCB2YWwsIHN0YXJ0LCBlbmQpCQlcCisJZGlzcGNfdmlkX3dy aXRlKGRpc3BjLCBod19wbGFuZSwgaWR4LCBGTERfTU9EKGRpc3BjX3ZpZF9yZWFkKGRpc3BjLCBo d19wbGFuZSwgaWR4KSwgdmFsLCBzdGFydCwgZW5kKSkKKworI2RlZmluZSBWUF9SRUdfR0VUKGRp c3BjLCB2cCwgaWR4LCBzdGFydCwgZW5kKQkJCVwKKwlGTERfR0VUKGRpc3BjX3ZwX3JlYWQoZGlz cGMsIHZwLCBpZHgpLCBzdGFydCwgZW5kKQorCisjZGVmaW5lIFZQX1JFR19GTERfTU9EKGRpc3Bj LCB2cCwgaWR4LCB2YWwsIHN0YXJ0LCBlbmQpCQkJXAorCWRpc3BjX3ZwX3dyaXRlKGRpc3BjLCB2 cCwgaWR4LCBGTERfTU9EKGRpc3BjX3ZwX3JlYWQoZGlzcGMsIHZwLCBpZHgpLCB2YWwsIHN0YXJ0 LCBlbmQpKQorCisjZGVmaW5lIE9WUl9SRUdfR0VUKGRpc3BjLCBvdnIsIGlkeCwgc3RhcnQsIGVu ZCkJCVwKKwlGTERfR0VUKGRpc3BjX292cl9yZWFkKGRpc3BjLCBvdnIsIGlkeCksIHN0YXJ0LCBl bmQpCisKKyNkZWZpbmUgT1ZSX1JFR19GTERfTU9EKGRpc3BjLCBvdnIsIGlkeCwgdmFsLCBzdGFy dCwgZW5kKQkJXAorCWRpc3BjX292cl93cml0ZShkaXNwYywgb3ZyLCBpZHgsIEZMRF9NT0QoZGlz cGNfb3ZyX3JlYWQoZGlzcGMsIG92ciwgaWR4KSwgdmFsLCBzdGFydCwgZW5kKSkKKworc3RhdGlj IGNvbnN0IHUxNiAqZGlzcGNfY29tbW9uX3JlZ21hcDsKKworc3RydWN0IGRzc192cF9kYXRhIHsK Kwl1MzIgKmdhbW1hX3RhYmxlOworfTsKKworc3RydWN0IGRzc19wbGFuZV9kYXRhIHsKKwl1MzIg em9yZGVyOworCXUzMiBod192aWRlb3BvcnQ7Cit9OworCitzdHJ1Y3QgZGlzcGNfZGV2aWNlIHsK KwlzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzczsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwl2 b2lkIF9faW9tZW0gKmJhc2VfY29tbW9uOworCXZvaWQgX19pb21lbSAqYmFzZV92aWRbVElEU1Nf TUFYX1BMQU5FU107CisJdm9pZCBfX2lvbWVtICpiYXNlX292cltUSURTU19NQVhfUE9SVFNdOwor CXZvaWQgX19pb21lbSAqYmFzZV92cFtUSURTU19NQVhfUE9SVFNdOworCisJc3RydWN0IHJlZ21h cCAqb2xkaV9pb19jdHJsOworCisJc3RydWN0IGNsayAqdnBfY2xrW1RJRFNTX01BWF9QT1JUU107 CisKKwljb25zdCBzdHJ1Y3QgZGlzcGNfZmVhdHVyZXMgKmZlYXQ7CisKKwlzdHJ1Y3QgY2xrICpm Y2xrOworCisJYm9vbCBpc19lbmFibGVkOworCisJc3RydWN0IGRzc192cF9kYXRhIHZwX2RhdGFb VElEU1NfTUFYX1BPUlRTXTsKKworCXN0cnVjdCBkc3NfcGxhbmVfZGF0YSBwbGFuZV9kYXRhW1RJ RFNTX01BWF9QTEFORVNdOworCisJdTMyICpmb3VyY2NzOworCXUzMiBudW1fZm91cmNjczsKKwor CXUzMiBtZW1vcnlfYmFuZHdpZHRoX2xpbWl0OworfTsKKworc3RhdGljIHZvaWQgZGlzcGNfd3Jp dGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJaW93 cml0ZTMyKHZhbCwgZGlzcGMtPmJhc2VfY29tbW9uICsgcmVnKTsKK30KKworc3RhdGljIHUzMiBk aXNwY19yZWFkKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MTYgcmVnKQoreworCXJldHVy biBpb3JlYWQzMihkaXNwYy0+YmFzZV9jb21tb24gKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBk aXNwY192aWRfd3JpdGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBod19wbGFuZSwg dTE2IHJlZywgdTMyIHZhbCkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBkaXNwYy0+YmFzZV92 aWRbaHdfcGxhbmVdOworCisJaW93cml0ZTMyKHZhbCwgYmFzZSArIHJlZyk7Cit9CisKK3N0YXRp YyB1MzIgZGlzcGNfdmlkX3JlYWQoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBod19w bGFuZSwgdTE2IHJlZykKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBkaXNwYy0+YmFzZV92aWRb aHdfcGxhbmVdOworCisJcmV0dXJuIGlvcmVhZDMyKGJhc2UgKyByZWcpOworfQorCitzdGF0aWMg dm9pZCBkaXNwY19vdnJfd3JpdGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBod192 aWRlb3BvcnQsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gZGlz cGMtPmJhc2Vfb3ZyW2h3X3ZpZGVvcG9ydF07CisKKwlpb3dyaXRlMzIodmFsLCBiYXNlICsgcmVn KTsKK30KKworc3RhdGljIHUzMiBkaXNwY19vdnJfcmVhZChzdHJ1Y3QgZGlzcGNfZGV2aWNlICpk aXNwYywgdTMyIGh3X3ZpZGVvcG9ydCwgdTE2IHJlZykKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2Ug PSBkaXNwYy0+YmFzZV9vdnJbaHdfdmlkZW9wb3J0XTsKKworCXJldHVybiBpb3JlYWQzMihiYXNl ICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQgZGlzcGNfdnBfd3JpdGUoc3RydWN0IGRpc3BjX2Rl dmljZSAqZGlzcGMsIHUzMiBod192aWRlb3BvcnQsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJdm9p ZCBfX2lvbWVtICpiYXNlID0gZGlzcGMtPmJhc2VfdnBbaHdfdmlkZW9wb3J0XTsKKworCWlvd3Jp dGUzMih2YWwsIGJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdTMyIGRpc3BjX3ZwX3JlYWQoc3Ry dWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBod192aWRlb3BvcnQsIHUxNiByZWcpCit7CisJ dm9pZCBfX2lvbWVtICpiYXNlID0gZGlzcGMtPmJhc2VfdnBbaHdfdmlkZW9wb3J0XTsKKworCXJl dHVybiBpb3JlYWQzMihiYXNlICsgcmVnKTsKK30KKworc3RhdGljIGRpc3BjX2lycV90IGRpc3Bj X3ZwX2lycV9mcm9tX3Jhdyh1MzIgc3RhdCwgdTMyIGh3X3ZpZGVvcG9ydCkKK3sKKwlkaXNwY19p cnFfdCB2cF9zdGF0ID0gMDsKKworCWlmIChzdGF0ICYgQklUKDApKQorCQl2cF9zdGF0IHw9IERT U19JUlFfVlBfRlJBTUVfRE9ORShod192aWRlb3BvcnQpOworCWlmIChzdGF0ICYgQklUKDEpKQor CQl2cF9zdGF0IHw9IERTU19JUlFfVlBfVlNZTkNfRVZFTihod192aWRlb3BvcnQpOworCWlmIChz dGF0ICYgQklUKDIpKQorCQl2cF9zdGF0IHw9IERTU19JUlFfVlBfVlNZTkNfT0REKGh3X3ZpZGVv cG9ydCk7CisJaWYgKHN0YXQgJiBCSVQoNCkpCisJCXZwX3N0YXQgfD0gRFNTX0lSUV9WUF9TWU5D X0xPU1QoaHdfdmlkZW9wb3J0KTsKKworCXJldHVybiB2cF9zdGF0OworfQorCitzdGF0aWMgdTMy IGRpc3BjX3ZwX2lycV90b19yYXcoZGlzcGNfaXJxX3QgdnBzdGF0LCB1MzIgaHdfdmlkZW9wb3J0 KQoreworCXUzMiBzdGF0ID0gMDsKKworCWlmICh2cHN0YXQgJiBEU1NfSVJRX1ZQX0ZSQU1FX0RP TkUoaHdfdmlkZW9wb3J0KSkKKwkJc3RhdCB8PSBCSVQoMCk7CisJaWYgKHZwc3RhdCAmIERTU19J UlFfVlBfVlNZTkNfRVZFTihod192aWRlb3BvcnQpKQorCQlzdGF0IHw9IEJJVCgxKTsKKwlpZiAo dnBzdGF0ICYgRFNTX0lSUV9WUF9WU1lOQ19PREQoaHdfdmlkZW9wb3J0KSkKKwkJc3RhdCB8PSBC SVQoMik7CisJaWYgKHZwc3RhdCAmIERTU19JUlFfVlBfU1lOQ19MT1NUKGh3X3ZpZGVvcG9ydCkp CisJCXN0YXQgfD0gQklUKDQpOworCisJcmV0dXJuIHN0YXQ7Cit9CisKK3N0YXRpYyBkaXNwY19p cnFfdCBkaXNwY192aWRfaXJxX2Zyb21fcmF3KHUzMiBzdGF0LCB1MzIgaHdfcGxhbmUpCit7CisJ ZGlzcGNfaXJxX3QgdmlkX3N0YXQgPSAwOworCisJaWYgKHN0YXQgJiBCSVQoMCkpCisJCXZpZF9z dGF0IHw9IERTU19JUlFfUExBTkVfRklGT19VTkRFUkZMT1coaHdfcGxhbmUpOworCisJcmV0dXJu IHZpZF9zdGF0OworfQorCitzdGF0aWMgdTMyIGRpc3BjX3ZpZF9pcnFfdG9fcmF3KGRpc3BjX2ly cV90IHZpZHN0YXQsIHUzMiBod19wbGFuZSkKK3sKKwl1MzIgc3RhdCA9IDA7CisKKwlpZiAodmlk c3RhdCAmIERTU19JUlFfUExBTkVfRklGT19VTkRFUkZMT1coaHdfcGxhbmUpKQorCQlzdGF0IHw9 IEJJVCgwKTsKKworCXJldHVybiBzdGF0OworfQorCitzdGF0aWMgZGlzcGNfaXJxX3QgZGlzcGNf azJnX3ZwX3JlYWRfaXJxc3RhdHVzKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkg ICAgICAgdTMyIGh3X3ZpZGVvcG9ydCkKK3sKKwl1MzIgc3RhdCA9IGRpc3BjX3ZwX3JlYWQoZGlz cGMsIGh3X3ZpZGVvcG9ydCwgRElTUENfVlBfSzJHX0lSUVNUQVRVUyk7CisKKwlyZXR1cm4gZGlz cGNfdnBfaXJxX2Zyb21fcmF3KHN0YXQsIGh3X3ZpZGVvcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lk IGRpc3BjX2syZ192cF93cml0ZV9pcnFzdGF0dXMoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMs CisJCQkJCSB1MzIgaHdfdmlkZW9wb3J0LCBkaXNwY19pcnFfdCB2cHN0YXQpCit7CisJdTMyIHN0 YXQgPSBkaXNwY192cF9pcnFfdG9fcmF3KHZwc3RhdCwgaHdfdmlkZW9wb3J0KTsKKworCWRpc3Bj X3ZwX3dyaXRlKGRpc3BjLCBod192aWRlb3BvcnQsIERJU1BDX1ZQX0syR19JUlFTVEFUVVMsIHN0 YXQpOworfQorCitzdGF0aWMgZGlzcGNfaXJxX3QgZGlzcGNfazJnX3ZpZF9yZWFkX2lycXN0YXR1 cyhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkJCXUzMiBod19wbGFuZSkKK3sKKwl1 MzIgc3RhdCA9IGRpc3BjX3ZpZF9yZWFkKGRpc3BjLCBod19wbGFuZSwgRElTUENfVklEX0syR19J UlFTVEFUVVMpOworCisJcmV0dXJuIGRpc3BjX3ZpZF9pcnFfZnJvbV9yYXcoc3RhdCwgaHdfcGxh bmUpOworfQorCitzdGF0aWMgdm9pZCBkaXNwY19rMmdfdmlkX3dyaXRlX2lycXN0YXR1cyhzdHJ1 Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkJICB1MzIgaHdfcGxhbmUsIGRpc3BjX2lycV90 IHZpZHN0YXQpCit7CisJdTMyIHN0YXQgPSBkaXNwY192aWRfaXJxX3RvX3Jhdyh2aWRzdGF0LCBo d19wbGFuZSk7CisKKwlkaXNwY192aWRfd3JpdGUoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURf SzJHX0lSUVNUQVRVUywgc3RhdCk7Cit9CisKK3N0YXRpYyBkaXNwY19pcnFfdCBkaXNwY19rMmdf dnBfcmVhZF9pcnFlbmFibGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkJCSAgICAg ICB1MzIgaHdfdmlkZW9wb3J0KQoreworCXUzMiBzdGF0ID0gZGlzcGNfdnBfcmVhZChkaXNwYywg aHdfdmlkZW9wb3J0LCBESVNQQ19WUF9LMkdfSVJRRU5BQkxFKTsKKworCXJldHVybiBkaXNwY192 cF9pcnFfZnJvbV9yYXcoc3RhdCwgaHdfdmlkZW9wb3J0KTsKK30KKworc3RhdGljIHZvaWQgZGlz cGNfazJnX3ZwX3dyaXRlX2lycWVuYWJsZShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJ CQkJIHUzMiBod192aWRlb3BvcnQsIGRpc3BjX2lycV90IHZwc3RhdCkKK3sKKwl1MzIgc3RhdCA9 IGRpc3BjX3ZwX2lycV90b19yYXcodnBzdGF0LCBod192aWRlb3BvcnQpOworCisJZGlzcGNfdnBf d3JpdGUoZGlzcGMsIGh3X3ZpZGVvcG9ydCwgRElTUENfVlBfSzJHX0lSUUVOQUJMRSwgc3RhdCk7 Cit9CisKK3N0YXRpYyBkaXNwY19pcnFfdCBkaXNwY19rMmdfdmlkX3JlYWRfaXJxZW5hYmxlKHN0 cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkJdTMyIGh3X3BsYW5lKQoreworCXUzMiBz dGF0ID0gZGlzcGNfdmlkX3JlYWQoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURfSzJHX0lSUUVO QUJMRSk7CisKKwlyZXR1cm4gZGlzcGNfdmlkX2lycV9mcm9tX3JhdyhzdGF0LCBod19wbGFuZSk7 Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjX2syZ192aWRfd3JpdGVfaXJxZW5hYmxlKHN0cnVjdCBk aXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkgIHUzMiBod19wbGFuZSwgZGlzcGNfaXJxX3Qgdmlk c3RhdCkKK3sKKwl1MzIgc3RhdCA9IGRpc3BjX3ZpZF9pcnFfdG9fcmF3KHZpZHN0YXQsIGh3X3Bs YW5lKTsKKworCWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUsIERJU1BDX1ZJRF9LMkdf SVJRRU5BQkxFLCBzdGF0KTsKK30KKworc3RhdGljIHZvaWQgZGlzcGNfazJnX2NsZWFyX2lycXN0 YXR1cyhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkgICAgICBkaXNwY19pcnFfdCBt YXNrKQoreworCWRpc3BjX2syZ192cF93cml0ZV9pcnFzdGF0dXMoZGlzcGMsIDAsIG1hc2spOwor CWRpc3BjX2syZ192aWRfd3JpdGVfaXJxc3RhdHVzKGRpc3BjLCAwLCBtYXNrKTsKK30KKworc3Rh dGljCitkaXNwY19pcnFfdCBkaXNwY19rMmdfcmVhZF9hbmRfY2xlYXJfaXJxc3RhdHVzKHN0cnVj dCBkaXNwY19kZXZpY2UgKmRpc3BjKQoreworCWRpc3BjX2lycV90IHN0YXQgPSAwOworCisJLyog YWx3YXlzIGNsZWFyIHRoZSB0b3AgbGV2ZWwgaXJxc3RhdHVzICovCisJZGlzcGNfd3JpdGUoZGlz cGMsIERJU1BDX0lSUVNUQVRVUywKKwkJICAgIGRpc3BjX3JlYWQoZGlzcGMsIERJU1BDX0lSUVNU QVRVUykpOworCisJc3RhdCB8PSBkaXNwY19rMmdfdnBfcmVhZF9pcnFzdGF0dXMoZGlzcGMsIDAp OworCXN0YXQgfD0gZGlzcGNfazJnX3ZpZF9yZWFkX2lycXN0YXR1cyhkaXNwYywgMCk7CisKKwlk aXNwY19rMmdfY2xlYXJfaXJxc3RhdHVzKGRpc3BjLCBzdGF0KTsKKworCXJldHVybiBzdGF0Owor fQorCitzdGF0aWMgZGlzcGNfaXJxX3QgZGlzcGNfazJnX3JlYWRfaXJxZW5hYmxlKHN0cnVjdCBk aXNwY19kZXZpY2UgKmRpc3BjKQoreworCWRpc3BjX2lycV90IHN0YXQgPSAwOworCisJc3RhdCB8 PSBkaXNwY19rMmdfdnBfcmVhZF9pcnFlbmFibGUoZGlzcGMsIDApOworCXN0YXQgfD0gZGlzcGNf azJnX3ZpZF9yZWFkX2lycWVuYWJsZShkaXNwYywgMCk7CisKKwlyZXR1cm4gc3RhdDsKK30KKwor c3RhdGljIHZvaWQgZGlzcGNfazJnX3dyaXRlX2lycWVuYWJsZShzdHJ1Y3QgZGlzcGNfZGV2aWNl ICpkaXNwYywKKwkJCQkgICAgICBkaXNwY19pcnFfdCBtYXNrKQoreworCWRpc3BjX2lycV90IG9s ZF9tYXNrID0gZGlzcGNfazJnX3JlYWRfaXJxZW5hYmxlKGRpc3BjKTsKKworCS8qIGNsZWFyIHRo ZSBpcnFzdGF0dXMgZm9yIG5ld2x5IGVuYWJsZWQgaXJxcyAqLworCWRpc3BjX2syZ19jbGVhcl9p cnFzdGF0dXMoZGlzcGMsIChtYXNrIF4gb2xkX21hc2spICYgbWFzayk7CisKKwlkaXNwY19rMmdf dnBfd3JpdGVfaXJxZW5hYmxlKGRpc3BjLCAwLCBtYXNrKTsKKwlkaXNwY19rMmdfdmlkX3dyaXRl X2lycWVuYWJsZShkaXNwYywgMCwgbWFzayk7CisKKwlkaXNwY193cml0ZShkaXNwYywgRElTUENf SVJRRU5BQkxFX1NFVCwgKDEgPDwgMCkgfCAoMSA8PCA3KSk7CisKKwkvKiBmbHVzaCBwb3N0ZWQg d3JpdGUgKi8KKwlkaXNwY19rMmdfcmVhZF9pcnFlbmFibGUoZGlzcGMpOworfQorCitzdGF0aWMg ZGlzcGNfaXJxX3QgZGlzcGNfazNfdnBfcmVhZF9pcnFzdGF0dXMoc3RydWN0IGRpc3BjX2Rldmlj ZSAqZGlzcGMsCisJCQkJCSAgICAgIHUzMiBod192aWRlb3BvcnQpCit7CisJdTMyIHN0YXQgPSBk aXNwY19yZWFkKGRpc3BjLCBESVNQQ19WUF9JUlFTVEFUVVMoaHdfdmlkZW9wb3J0KSk7CisKKwly ZXR1cm4gZGlzcGNfdnBfaXJxX2Zyb21fcmF3KHN0YXQsIGh3X3ZpZGVvcG9ydCk7Cit9CisKK3N0 YXRpYyB2b2lkIGRpc3BjX2szX3ZwX3dyaXRlX2lycXN0YXR1cyhzdHJ1Y3QgZGlzcGNfZGV2aWNl ICpkaXNwYywKKwkJCQkJdTMyIGh3X3ZpZGVvcG9ydCwgZGlzcGNfaXJxX3QgdnBzdGF0KQorewor CXUzMiBzdGF0ID0gZGlzcGNfdnBfaXJxX3RvX3Jhdyh2cHN0YXQsIGh3X3ZpZGVvcG9ydCk7CisK KwlkaXNwY193cml0ZShkaXNwYywgRElTUENfVlBfSVJRU1RBVFVTKGh3X3ZpZGVvcG9ydCksIHN0 YXQpOworfQorCitzdGF0aWMgZGlzcGNfaXJxX3QgZGlzcGNfazNfdmlkX3JlYWRfaXJxc3RhdHVz KHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkgICAgICAgdTMyIGh3X3BsYW5lKQor eworCXUzMiBzdGF0ID0gZGlzcGNfcmVhZChkaXNwYywgRElTUENfVklEX0lSUVNUQVRVUyhod19w bGFuZSkpOworCisJcmV0dXJuIGRpc3BjX3ZpZF9pcnFfZnJvbV9yYXcoc3RhdCwgaHdfcGxhbmUp OworfQorCitzdGF0aWMgdm9pZCBkaXNwY19rM192aWRfd3JpdGVfaXJxc3RhdHVzKHN0cnVjdCBk aXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkgdTMyIGh3X3BsYW5lLCBkaXNwY19pcnFfdCB2aWRz dGF0KQoreworCXUzMiBzdGF0ID0gZGlzcGNfdmlkX2lycV90b19yYXcodmlkc3RhdCwgaHdfcGxh bmUpOworCisJZGlzcGNfd3JpdGUoZGlzcGMsIERJU1BDX1ZJRF9JUlFTVEFUVVMoaHdfcGxhbmUp LCBzdGF0KTsKK30KKworc3RhdGljIGRpc3BjX2lycV90IGRpc3BjX2szX3ZwX3JlYWRfaXJxZW5h YmxlKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkgICAgICB1MzIgaHdfdmlkZW9w b3J0KQoreworCXUzMiBzdGF0ID0gZGlzcGNfcmVhZChkaXNwYywgRElTUENfVlBfSVJRRU5BQkxF KGh3X3ZpZGVvcG9ydCkpOworCisJcmV0dXJuIGRpc3BjX3ZwX2lycV9mcm9tX3JhdyhzdGF0LCBo d192aWRlb3BvcnQpOworfQorCitzdGF0aWMgdm9pZCBkaXNwY19rM192cF93cml0ZV9pcnFlbmFi bGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkJCXUzMiBod192aWRlb3BvcnQsIGRp c3BjX2lycV90IHZwc3RhdCkKK3sKKwl1MzIgc3RhdCA9IGRpc3BjX3ZwX2lycV90b19yYXcodnBz dGF0LCBod192aWRlb3BvcnQpOworCisJZGlzcGNfd3JpdGUoZGlzcGMsIERJU1BDX1ZQX0lSUUVO QUJMRShod192aWRlb3BvcnQpLCBzdGF0KTsKK30KKworc3RhdGljIGRpc3BjX2lycV90IGRpc3Bj X2szX3ZpZF9yZWFkX2lycWVuYWJsZShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkJ ICAgICAgIHUzMiBod19wbGFuZSkKK3sKKwl1MzIgc3RhdCA9IGRpc3BjX3JlYWQoZGlzcGMsIERJ U1BDX1ZJRF9JUlFFTkFCTEUoaHdfcGxhbmUpKTsKKworCXJldHVybiBkaXNwY192aWRfaXJxX2Zy b21fcmF3KHN0YXQsIGh3X3BsYW5lKTsKK30KKworc3RhdGljIHZvaWQgZGlzcGNfazNfdmlkX3dy aXRlX2lycWVuYWJsZShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkJIHUzMiBod19w bGFuZSwgZGlzcGNfaXJxX3Qgdmlkc3RhdCkKK3sKKwl1MzIgc3RhdCA9IGRpc3BjX3ZpZF9pcnFf dG9fcmF3KHZpZHN0YXQsIGh3X3BsYW5lKTsKKworCWRpc3BjX3dyaXRlKGRpc3BjLCBESVNQQ19W SURfSVJRRU5BQkxFKGh3X3BsYW5lKSwgc3RhdCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjX2sz X2NsZWFyX2lycXN0YXR1cyhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkgICAgIGRp c3BjX2lycV90IGNsZWFybWFzaykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgdG9wX2NsZWFy ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBkaXNwYy0+ZmVhdC0+bnVtX3ZwczsgKytpKSB7CisJ CWlmIChjbGVhcm1hc2sgJiBEU1NfSVJRX1ZQX01BU0soaSkpIHsKKwkJCWRpc3BjX2szX3ZwX3dy aXRlX2lycXN0YXR1cyhkaXNwYywgaSwgY2xlYXJtYXNrKTsKKwkJCXRvcF9jbGVhciB8PSBCSVQo aSk7CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8IGRpc3BjLT5mZWF0LT5udW1fcGxhbmVzOyAr K2kpIHsKKwkJaWYgKGNsZWFybWFzayAmIERTU19JUlFfUExBTkVfTUFTSyhpKSkgeworCQkJZGlz cGNfazNfdmlkX3dyaXRlX2lycXN0YXR1cyhkaXNwYywgaSwgY2xlYXJtYXNrKTsKKwkJCXRvcF9j bGVhciB8PSBCSVQoNCArIGkpOworCQl9CisJfQorCWlmIChkaXNwYy0+ZmVhdC0+c3VicmV2ID09 IERJU1BDX0syRykKKwkJcmV0dXJuOworCisJZGlzcGNfd3JpdGUoZGlzcGMsIERJU1BDX0lSUVNU QVRVUywgdG9wX2NsZWFyKTsKKworCS8qIEZsdXNoIHBvc3RlZCB3cml0ZXMgKi8KKwlkaXNwY19y ZWFkKGRpc3BjLCBESVNQQ19JUlFTVEFUVVMpOworfQorCitzdGF0aWMKK2Rpc3BjX2lycV90IGRp c3BjX2szX3JlYWRfYW5kX2NsZWFyX2lycXN0YXR1cyhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNw YykKK3sKKwlkaXNwY19pcnFfdCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGludCBpOworCisJZm9y IChpID0gMDsgaSA8IGRpc3BjLT5mZWF0LT5udW1fdnBzOyArK2kpCisJCXN0YXR1cyB8PSBkaXNw Y19rM192cF9yZWFkX2lycXN0YXR1cyhkaXNwYywgaSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlz cGMtPmZlYXQtPm51bV9wbGFuZXM7ICsraSkKKwkJc3RhdHVzIHw9IGRpc3BjX2szX3ZpZF9yZWFk X2lycXN0YXR1cyhkaXNwYywgaSk7CisKKwlkaXNwY19rM19jbGVhcl9pcnFzdGF0dXMoZGlzcGMs IHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgZGlzcGNfaXJxX3QgZGlz cGNfazNfcmVhZF9pcnFlbmFibGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMpCit7CisJZGlz cGNfaXJxX3QgZW5hYmxlID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkg PCBkaXNwYy0+ZmVhdC0+bnVtX3ZwczsgKytpKQorCQllbmFibGUgfD0gZGlzcGNfazNfdnBfcmVh ZF9pcnFlbmFibGUoZGlzcGMsIGkpOworCisJZm9yIChpID0gMDsgaSA8IGRpc3BjLT5mZWF0LT5u dW1fcGxhbmVzOyArK2kpCisJCWVuYWJsZSB8PSBkaXNwY19rM192aWRfcmVhZF9pcnFlbmFibGUo ZGlzcGMsIGkpOworCisJcmV0dXJuIGVuYWJsZTsKK30KKworc3RhdGljIHZvaWQgZGlzcGNfazNf d3JpdGVfaXJxZW5hYmxlKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCSAgICAgZGlz cGNfaXJxX3QgbWFzaykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgbWFpbl9lbmFibGUgPSAw LCBtYWluX2Rpc2FibGUgPSAwOworCWRpc3BjX2lycV90IG9sZF9tYXNrOworCisJb2xkX21hc2sg PSBkaXNwY19rM19yZWFkX2lycWVuYWJsZShkaXNwYyk7CisKKwkvKiBjbGVhciB0aGUgaXJxc3Rh dHVzIGZvciBuZXdseSBlbmFibGVkIGlycXMgKi8KKwlkaXNwY19rM19jbGVhcl9pcnFzdGF0dXMo ZGlzcGMsIChvbGRfbWFzayBeIG1hc2spICYgbWFzayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlz cGMtPmZlYXQtPm51bV92cHM7ICsraSkgeworCQlkaXNwY19rM192cF93cml0ZV9pcnFlbmFibGUo ZGlzcGMsIGksIG1hc2spOworCQlpZiAobWFzayAmIERTU19JUlFfVlBfTUFTSyhpKSkKKwkJCW1h aW5fZW5hYmxlIHw9IEJJVChpKTsJCS8qIFZQIElSUSAqLworCQllbHNlCisJCQltYWluX2Rpc2Fi bGUgfD0gQklUKGkpOwkJLyogVlAgSVJRICovCisJfQorCisJZm9yIChpID0gMDsgaSA8IGRpc3Bj LT5mZWF0LT5udW1fcGxhbmVzOyArK2kpIHsKKwkJZGlzcGNfazNfdmlkX3dyaXRlX2lycWVuYWJs ZShkaXNwYywgaSwgbWFzayk7CisJCWlmIChtYXNrICYgRFNTX0lSUV9QTEFORV9NQVNLKGkpKQor CQkJbWFpbl9lbmFibGUgfD0gQklUKGkgKyA0KTsJLyogVklEIElSUSAqLworCQllbHNlCisJCQlt YWluX2Rpc2FibGUgfD0gQklUKGkgKyA0KTsJLyogVklEIElSUSAqLworCX0KKworCWlmIChtYWlu X2VuYWJsZSkKKwkJZGlzcGNfd3JpdGUoZGlzcGMsIERJU1BDX0lSUUVOQUJMRV9TRVQsIG1haW5f ZW5hYmxlKTsKKworCWlmIChtYWluX2Rpc2FibGUpCisJCWRpc3BjX3dyaXRlKGRpc3BjLCBESVNQ Q19JUlFFTkFCTEVfQ0xSLCBtYWluX2Rpc2FibGUpOworCisJLyogRmx1c2ggcG9zdGVkIHdyaXRl cyAqLworCWRpc3BjX3JlYWQoZGlzcGMsIERJU1BDX0lSUUVOQUJMRV9TRVQpOworfQorCitkaXNw Y19pcnFfdCBkaXNwY19yZWFkX2FuZF9jbGVhcl9pcnFzdGF0dXMoc3RydWN0IGRpc3BjX2Rldmlj ZSAqZGlzcGMpCit7CisJc3dpdGNoIChkaXNwYy0+ZmVhdC0+c3VicmV2KSB7CisJY2FzZSBESVNQ Q19LMkc6CisJCXJldHVybiBkaXNwY19rMmdfcmVhZF9hbmRfY2xlYXJfaXJxc3RhdHVzKGRpc3Bj KTsKKwljYXNlIERJU1BDX0FNNjVYOgorCWNhc2UgRElTUENfSjcyMUU6CisJCXJldHVybiBkaXNw Y19rM19yZWFkX2FuZF9jbGVhcl9pcnFzdGF0dXMoZGlzcGMpOworCWRlZmF1bHQ6CisJCVdBUk5f T04oMSk7CisJCXJldHVybiAwOworCX0KK30KKwordm9pZCBkaXNwY193cml0ZV9pcnFlbmFibGUo c3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIGRpc3BjX2lycV90IG1hc2spCit7CisJc3dpdGNo IChkaXNwYy0+ZmVhdC0+c3VicmV2KSB7CisJY2FzZSBESVNQQ19LMkc6CisJCWRpc3BjX2syZ193 cml0ZV9pcnFlbmFibGUoZGlzcGMsIG1hc2spOworCQlicmVhazsKKwljYXNlIERJU1BDX0FNNjVY OgorCWNhc2UgRElTUENfSjcyMUU6CisJCWRpc3BjX2szX3dyaXRlX2lycWVuYWJsZShkaXNwYywg bWFzayk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCX0K K30KKworZW51bSBkaXNwY19vbGRpX21vZGVfcmVnX3ZhbCB7IFNQV0dfMTggPSAwLCBKRUlEQV8y NCA9IDEsIFNQV0dfMjQgPSAyIH07CisKK3N0cnVjdCBkaXNwY19idXNfZm9ybWF0IHsKKwl1MzIg YnVzX2ZtdDsKKwl1MzIgZGF0YV93aWR0aDsKKwlib29sIGlzX29sZGlfZm10OworCWVudW0gZGlz cGNfb2xkaV9tb2RlX3JlZ192YWwgb2xkaV9tb2RlX3JlZ192YWw7Cit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGRpc3BjX2J1c19mb3JtYXQgZGlzcGNfYnVzX2Zvcm1hdHNbXSA9IHsKKwl7IE1F RElBX0JVU19GTVRfUkdCNDQ0XzFYMTIsCQkxMiwgZmFsc2UsIDAgfSwKKwl7IE1FRElBX0JVU19G TVRfUkdCNTY1XzFYMTYsCQkxNiwgZmFsc2UsIDAgfSwKKwl7IE1FRElBX0JVU19GTVRfUkdCNjY2 XzFYMTgsCQkxOCwgZmFsc2UsIDAgfSwKKwl7IE1FRElBX0JVU19GTVRfUkdCODg4XzFYMjQsCQky NCwgZmFsc2UsIDAgfSwKKwl7IE1FRElBX0JVU19GTVRfUkdCMTAxMDEwXzFYMzAsCQkzMCwgZmFs c2UsIDAgfSwKKwl7IE1FRElBX0JVU19GTVRfUkdCMTIxMjEyXzFYMzYsCQkzNiwgZmFsc2UsIDAg fSwKKwl7IE1FRElBX0JVU19GTVRfUkdCNjY2XzFYN1gzX1NQV0csCTE4LCB0cnVlLCBTUFdHXzE4 IH0sCisJeyBNRURJQV9CVVNfRk1UX1JHQjg4OF8xWDdYNF9TUFdHLAkyNCwgdHJ1ZSwgU1BXR18y NCB9LAorCXsgTUVESUFfQlVTX0ZNVF9SR0I4ODhfMVg3WDRfSkVJREEsCTI0LCB0cnVlLCBKRUlE QV8yNCB9LAorfTsKKworc3RhdGljIGNvbnN0CitzdHJ1Y3QgZGlzcGNfYnVzX2Zvcm1hdCAqZGlz cGNfdnBfZmluZF9idXNfZm10KHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkgICAg ICAgdTMyIGh3X3ZpZGVvcG9ydCwKKwkJCQkJICAgICAgIHUzMiBidXNfZm10LCB1MzIgYnVzX2Zs YWdzKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo ZGlzcGNfYnVzX2Zvcm1hdHMpOyArK2kpIHsKKwkJaWYgKGRpc3BjX2J1c19mb3JtYXRzW2ldLmJ1 c19mbXQgPT0gYnVzX2ZtdCkKKwkJCXJldHVybiAmZGlzcGNfYnVzX2Zvcm1hdHNbaV07CisJfQor CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBkaXNwY192cF9idXNfY2hlY2soc3RydWN0IGRpc3Bj X2RldmljZSAqZGlzcGMsIHUzMiBod192aWRlb3BvcnQsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qg ZHJtX2NydGNfc3RhdGUgKnN0YXRlKQoreworCWNvbnN0IHN0cnVjdCB0aWRzc19jcnRjX3N0YXRl ICp0c3RhdGUgPSB0b190aWRzc19jcnRjX3N0YXRlKHN0YXRlKTsKKwljb25zdCBzdHJ1Y3QgZGlz cGNfYnVzX2Zvcm1hdCAqZm10OworCisJZm10ID0gZGlzcGNfdnBfZmluZF9idXNfZm10KGRpc3Bj LCBod192aWRlb3BvcnQsIHRzdGF0ZS0+YnVzX2Zvcm1hdCwKKwkJCQkgICAgdHN0YXRlLT5idXNf ZmxhZ3MpOworCWlmICghZm10KSB7CisJCWRldl9kYmcoZGlzcGMtPmRldiwgIiVzOiBVbnN1cHBv cnRlZCBidXMgZm9ybWF0OiAldVxuIiwKKwkJCV9fZnVuY19fLCB0c3RhdGUtPmJ1c19mb3JtYXQp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZGlzcGMtPmZlYXQtPnZwX2J1c190eXBl W2h3X3ZpZGVvcG9ydF0gIT0gRElTUENfVlBfT0xESSAmJgorCSAgICBmbXQtPmlzX29sZGlfZm10 KSB7CisJCWRldl9kYmcoZGlzcGMtPmRldiwgIiVzOiAlcyBpcyBub3QgT0xESS1wb3J0XG4iLAor CQkJX19mdW5jX18sIGRpc3BjLT5mZWF0LT52cF9uYW1lW2h3X3ZpZGVvcG9ydF0pOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGlzcGNfb2xk aV90eF9wb3dlcihzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywgYm9vbCBwb3dlcikKK3sKKwl1 MzIgdmFsID0gcG93ZXIgPyAwIDogT0xESV9QV1JETl9UWDsKKworCWlmIChXQVJOX09OKCFkaXNw Yy0+b2xkaV9pb19jdHJsKSkKKwkJcmV0dXJuOworCisJcmVnbWFwX3VwZGF0ZV9iaXRzKGRpc3Bj LT5vbGRpX2lvX2N0cmwsIE9MRElfREFUMF9JT19DVFJMLAorCQkJICAgT0xESV9QV1JETl9UWCwg dmFsKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMoZGlzcGMtPm9sZGlfaW9fY3RybCwgT0xESV9EQVQx X0lPX0NUUkwsCisJCQkgICBPTERJX1BXUkROX1RYLCB2YWwpOworCXJlZ21hcF91cGRhdGVfYml0 cyhkaXNwYy0+b2xkaV9pb19jdHJsLCBPTERJX0RBVDJfSU9fQ1RSTCwKKwkJCSAgIE9MRElfUFdS RE5fVFgsIHZhbCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGRpc3BjLT5vbGRpX2lvX2N0cmwsIE9M RElfREFUM19JT19DVFJMLAorCQkJICAgT0xESV9QV1JETl9UWCwgdmFsKTsKKwlyZWdtYXBfdXBk YXRlX2JpdHMoZGlzcGMtPm9sZGlfaW9fY3RybCwgT0xESV9DTEtfSU9fQ1RSTCwKKwkJCSAgIE9M RElfUFdSRE5fVFgsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjX3NldF9udW1fZGF0YWxp bmVzKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCSAgICB1MzIgaHdfdmlkZW9wb3J0 LCBpbnQgbnVtX2xpbmVzKQoreworCWludCB2OworCisJc3dpdGNoIChudW1fbGluZXMpIHsKKwlj YXNlIDEyOgorCQl2ID0gMDsgYnJlYWs7CisJY2FzZSAxNjoKKwkJdiA9IDE7IGJyZWFrOworCWNh c2UgMTg6CisJCXYgPSAyOyBicmVhazsKKwljYXNlIDI0OgorCQl2ID0gMzsgYnJlYWs7CisJY2Fz ZSAzMDoKKwkJdiA9IDQ7IGJyZWFrOworCWNhc2UgMzY6CisJCXYgPSA1OyBicmVhazsKKwlkZWZh dWx0OgorCQlXQVJOX09OKDEpOworCQl2ID0gMzsKKwl9CisKKwlWUF9SRUdfRkxEX01PRChkaXNw YywgaHdfdmlkZW9wb3J0LCBESVNQQ19WUF9DT05UUk9MLCB2LCAxMCwgOCk7Cit9CisKK3N0YXRp YyB2b2lkIGRpc3BjX2VuYWJsZV9vbGRpKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIg aHdfdmlkZW9wb3J0LAorCQkJICAgICAgY29uc3Qgc3RydWN0IGRpc3BjX2J1c19mb3JtYXQgKmZt dCkKK3sKKwl1MzIgb2xkaV9jZmcgPSAwOworCXUzMiBvbGRpX3Jlc2V0X2JpdCA9IEJJVCg1ICsg aHdfdmlkZW9wb3J0KTsKKwlpbnQgY291bnQgPSAwOworCisJLyoKKwkgKiBGb3IgdGhlIG1vbWVu dCBEVUFMTU9ERVNZTkMsIE1BU1RFUlNMQVZFLCBNT0RFLCBhbmQgU1JDCisJICogYml0cyBvZiBE SVNQQ19WUF9EU1NfT0xESV9DRkcgYXJlIHNldCBzdGF0aWNhbGx5IHRvIDAuCisJICovCisKKwlp ZiAoZm10LT5kYXRhX3dpZHRoID09IDI0KQorCQlvbGRpX2NmZyB8PSBCSVQoOCk7IC8qIE1TQiAq LworCWVsc2UgaWYgKGZtdC0+ZGF0YV93aWR0aCAhPSAxOCkKKwkJZGV2X3dhcm4oZGlzcGMtPmRl diwgIiVzOiAlZCBwb3J0IHdpZHRoIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkgX19mdW5jX18sIGZt dC0+ZGF0YV93aWR0aCk7CisKKwlvbGRpX2NmZyB8PSBCSVQoNyk7IC8qIERFUE9MICovCisKKwlv bGRpX2NmZyA9IEZMRF9NT0Qob2xkaV9jZmcsIGZtdC0+b2xkaV9tb2RlX3JlZ192YWwsIDMsIDEp OworCisJb2xkaV9jZmcgfD0gQklUKDEyKTsgLyogU09GVFJTVCAqLworCisJb2xkaV9jZmcgfD0g QklUKDApOyAvKiBFTkFCTEUgKi8KKworCWRpc3BjX3ZwX3dyaXRlKGRpc3BjLCBod192aWRlb3Bv cnQsIERJU1BDX1ZQX0RTU19PTERJX0NGRywgb2xkaV9jZmcpOworCisJd2hpbGUgKCEob2xkaV9y ZXNldF9iaXQgJiBkaXNwY19yZWFkKGRpc3BjLCBEU1NfU1lTU1RBVFVTKSkgJiYKKwkgICAgICAg Y291bnQgPCAxMDAwMCkKKwkJY291bnQrKzsKKworCWlmICghKG9sZGlfcmVzZXRfYml0ICYgZGlz cGNfcmVhZChkaXNwYywgRFNTX1NZU1NUQVRVUykpKQorCQlkZXZfd2FybihkaXNwYy0+ZGV2LCAi JXM6IHRpbWVvdXQgd2FpdGluZyBPTERJIHJlc2V0IGRvbmVcbiIsCisJCQkgX19mdW5jX18pOwor fQorCit2b2lkIGRpc3BjX3ZwX3ByZXBhcmUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUz MiBod192aWRlb3BvcnQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3Rh dGUpCit7CisJY29uc3Qgc3RydWN0IHRpZHNzX2NydGNfc3RhdGUgKnRzdGF0ZSA9IHRvX3RpZHNz X2NydGNfc3RhdGUoc3RhdGUpOworCWNvbnN0IHN0cnVjdCBkaXNwY19idXNfZm9ybWF0ICpmbXQ7 CisKKwlmbXQgPSBkaXNwY192cF9maW5kX2J1c19mbXQoZGlzcGMsIGh3X3ZpZGVvcG9ydCwgdHN0 YXRlLT5idXNfZm9ybWF0LAorCQkJCSAgICB0c3RhdGUtPmJ1c19mbGFncyk7CisKKwlpZiAoV0FS Tl9PTighZm10KSkKKwkJcmV0dXJuOworCisJaWYgKGRpc3BjLT5mZWF0LT52cF9idXNfdHlwZVto d192aWRlb3BvcnRdID09IERJU1BDX1ZQX09MREkpIHsKKwkJZGlzcGNfb2xkaV90eF9wb3dlcihk aXNwYywgdHJ1ZSk7CisKKwkJZGlzcGNfZW5hYmxlX29sZGkoZGlzcGMsIGh3X3ZpZGVvcG9ydCwg Zm10KTsKKwl9Cit9CisKK3ZvaWQgZGlzcGNfdnBfZW5hYmxlKHN0cnVjdCBkaXNwY19kZXZpY2Ug KmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0LAorCQkgICAgIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqc3RhdGUpCit7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAm c3RhdGUtPmFkanVzdGVkX21vZGU7CisJY29uc3Qgc3RydWN0IHRpZHNzX2NydGNfc3RhdGUgKnRz dGF0ZSA9IHRvX3RpZHNzX2NydGNfc3RhdGUoc3RhdGUpOworCWJvb2wgYWxpZ24sIG9ub2ZmLCBy ZiwgaWVvLCBpcGMsIGlocywgaXZzOworCWNvbnN0IHN0cnVjdCBkaXNwY19idXNfZm9ybWF0ICpm bXQ7CisJdTMyIGhzdywgaGZwLCBoYnAsIHZzdywgdmZwLCB2YnA7CisKKwlmbXQgPSBkaXNwY192 cF9maW5kX2J1c19mbXQoZGlzcGMsIGh3X3ZpZGVvcG9ydCwgdHN0YXRlLT5idXNfZm9ybWF0LAor CQkJCSAgICB0c3RhdGUtPmJ1c19mbGFncyk7CisKKwlpZiAoV0FSTl9PTighZm10KSkKKwkJcmV0 dXJuOworCisJZGlzcGNfc2V0X251bV9kYXRhbGluZXMoZGlzcGMsIGh3X3ZpZGVvcG9ydCwgZm10 LT5kYXRhX3dpZHRoKTsKKworCWhmcCA9IG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3Bs YXk7CisJaHN3ID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJaGJwID0g bW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kOworCisJdmZwID0gbW9kZS0+dnN5bmNfc3Rh cnQgLSBtb2RlLT52ZGlzcGxheTsKKwl2c3cgPSBtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3lu Y19zdGFydDsKKwl2YnAgPSBtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQ7CisKKwlkaXNw Y192cF93cml0ZShkaXNwYywgaHdfdmlkZW9wb3J0LCBESVNQQ19WUF9USU1JTkdfSCwKKwkJICAg ICAgIEZMRF9WQUwoaHN3IC0gMSwgNywgMCkgfAorCQkgICAgICAgRkxEX1ZBTChoZnAgLSAxLCAx OSwgOCkgfAorCQkgICAgICAgRkxEX1ZBTChoYnAgLSAxLCAzMSwgMjApKTsKKworCWRpc3BjX3Zw X3dyaXRlKGRpc3BjLCBod192aWRlb3BvcnQsIERJU1BDX1ZQX1RJTUlOR19WLAorCQkgICAgICAg RkxEX1ZBTCh2c3cgLSAxLCA3LCAwKSB8CisJCSAgICAgICBGTERfVkFMKHZmcCwgMTksIDgpIHwK KwkJICAgICAgIEZMRF9WQUwodmJwLCAzMSwgMjApKTsKKworCWl2cyA9ICEhKG1vZGUtPmZsYWdz ICYgRFJNX01PREVfRkxBR19OVlNZTkMpOworCisJaWhzID0gISEobW9kZS0+ZmxhZ3MgJiBEUk1f TU9ERV9GTEFHX05IU1lOQyk7CisKKwlpZW8gPSAhISh0c3RhdGUtPmJ1c19mbGFncyAmIERSTV9C VVNfRkxBR19ERV9MT1cpOworCisJaXBjID0gISEodHN0YXRlLT5idXNfZmxhZ3MgJiBEUk1fQlVT X0ZMQUdfUElYREFUQV9ORUdFREdFKTsKKworCS8qIGFsd2F5cyB1c2UgdGhlICdyZicgc2V0dGlu ZyAqLworCW9ub2ZmID0gdHJ1ZTsKKworCXJmID0gISEodHN0YXRlLT5idXNfZmxhZ3MgJiBEUk1f QlVTX0ZMQUdfU1lOQ19QT1NFREdFKTsKKworCS8qIGFsd2F5cyB1c2UgYWxpZ25lZCBzeW5jcyAq LworCWFsaWduID0gdHJ1ZTsKKworCS8qIGFsd2F5cyB1c2UgREVfSElHSCBmb3IgT0xESSAqLwor CWlmIChkaXNwYy0+ZmVhdC0+dnBfYnVzX3R5cGVbaHdfdmlkZW9wb3J0XSA9PSBESVNQQ19WUF9P TERJKQorCQlpZW8gPSBmYWxzZTsKKworCWRpc3BjX3ZwX3dyaXRlKGRpc3BjLCBod192aWRlb3Bv cnQsIERJU1BDX1ZQX1BPTF9GUkVRLAorCQkgICAgICAgRkxEX1ZBTChhbGlnbiwgMTgsIDE4KSB8 CisJCSAgICAgICBGTERfVkFMKG9ub2ZmLCAxNywgMTcpIHwKKwkJICAgICAgIEZMRF9WQUwocmYs IDE2LCAxNikgfAorCQkgICAgICAgRkxEX1ZBTChpZW8sIDE1LCAxNSkgfAorCQkgICAgICAgRkxE X1ZBTChpcGMsIDE0LCAxNCkgfAorCQkgICAgICAgRkxEX1ZBTChpaHMsIDEzLCAxMykgfAorCQkg ICAgICAgRkxEX1ZBTChpdnMsIDEyLCAxMikpOworCisJZGlzcGNfdnBfd3JpdGUoZGlzcGMsIGh3 X3ZpZGVvcG9ydCwgRElTUENfVlBfU0laRV9TQ1JFRU4sCisJCSAgICAgICBGTERfVkFMKG1vZGUt PmhkaXNwbGF5IC0gMSwgMTEsIDApIHwKKwkJICAgICAgIEZMRF9WQUwobW9kZS0+dmRpc3BsYXkg LSAxLCAyNywgMTYpKTsKKworCVZQX1JFR19GTERfTU9EKGRpc3BjLCBod192aWRlb3BvcnQsIERJ U1BDX1ZQX0NPTlRST0wsIDEsIDAsIDApOworfQorCit2b2lkIGRpc3BjX3ZwX2Rpc2FibGUoc3Ry dWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBod192aWRlb3BvcnQpCit7CisJVlBfUkVHX0ZM RF9NT0QoZGlzcGMsIGh3X3ZpZGVvcG9ydCwgRElTUENfVlBfQ09OVFJPTCwgMCwgMCwgMCk7Cit9 CisKK3ZvaWQgZGlzcGNfdnBfdW5wcmVwYXJlKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1 MzIgaHdfdmlkZW9wb3J0KQoreworCWlmIChkaXNwYy0+ZmVhdC0+dnBfYnVzX3R5cGVbaHdfdmlk ZW9wb3J0XSA9PSBESVNQQ19WUF9PTERJKSB7CisJCWRpc3BjX3ZwX3dyaXRlKGRpc3BjLCBod192 aWRlb3BvcnQsIERJU1BDX1ZQX0RTU19PTERJX0NGRywgMCk7CisKKwkJZGlzcGNfb2xkaV90eF9w b3dlcihkaXNwYywgZmFsc2UpOworCX0KK30KKworYm9vbCBkaXNwY192cF9nb19idXN5KHN0cnVj dCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0KQoreworCXJldHVybiBWUF9S RUdfR0VUKGRpc3BjLCBod192aWRlb3BvcnQsIERJU1BDX1ZQX0NPTlRST0wsIDUsIDUpOworfQor Cit2b2lkIGRpc3BjX3ZwX2dvKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfdmlk ZW9wb3J0KQoreworCVdBUk5fT04oVlBfUkVHX0dFVChkaXNwYywgaHdfdmlkZW9wb3J0LCBESVNQ Q19WUF9DT05UUk9MLCA1LCA1KSk7CisJVlBfUkVHX0ZMRF9NT0QoZGlzcGMsIGh3X3ZpZGVvcG9y dCwgRElTUENfVlBfQ09OVFJPTCwgMSwgNSwgNSk7Cit9CisKK2VudW0gYzhfdG9fYzEyX21vZGUg eyBDOF9UT19DMTJfUkVQTElDQVRFLCBDOF9UT19DMTJfTUFYLCBDOF9UT19DMTJfTUlOIH07CisK K3N0YXRpYyB1MTYgYzhfdG9fYzEyKHU4IGM4LCBlbnVtIGM4X3RvX2MxMl9tb2RlIG1vZGUpCit7 CisJdTE2IGMxMjsKKworCWMxMiA9IGM4IDw8IDQ7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNl IEM4X1RPX0MxMl9SRVBMSUNBVEU6CisJCS8qIENvcHkgYzggNCBNU0IgdG8gNCBMU0IgZm9yIGZ1 bGwgc2NhbGUgYzEyICovCisJCWMxMiB8PSBjOCA+PiA0OworCQlicmVhazsKKwljYXNlIEM4X1RP X0MxMl9NQVg6CisJCWMxMiB8PSAweEY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSBDOF9U T19DMTJfTUlOOgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gYzEyOworfQorCitzdGF0aWMgdTY0 IGFyZ2I4ODg4X3RvX2FyZ2IxMjEyMTIxMih1MzIgYXJnYjg4ODgsIGVudW0gYzhfdG9fYzEyX21v ZGUgbSkKK3sKKwl1OCBhLCByLCBnLCBiOworCXU2NCB2OworCisJYSA9IChhcmdiODg4OCA+PiAy NCkgJiAweGZmOworCXIgPSAoYXJnYjg4ODggPj4gMTYpICYgMHhmZjsKKwlnID0gKGFyZ2I4ODg4 ID4+IDgpICYgMHhmZjsKKwliID0gKGFyZ2I4ODg4ID4+IDApICYgMHhmZjsKKworCXYgPSAoKHU2 NCljOF90b19jMTIoYSwgbSkgPDwgMzYpIHwgKCh1NjQpYzhfdG9fYzEyKHIsIG0pIDw8IDI0KSB8 CisJCSgodTY0KWM4X3RvX2MxMihnLCBtKSA8PCAxMikgfCAodTY0KWM4X3RvX2MxMihiLCBtKTsK KworCXJldHVybiB2OworfQorCitzdGF0aWMgdm9pZCBkaXNwY192cF9zZXRfZGVmYXVsdF9jb2xv cihzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkgICAgICAgdTMyIGh3X3ZpZGVvcG9y dCwgdTMyIGRlZmF1bHRfY29sb3IpCit7CisJdTY0IHY7CisKKwl2ID0gYXJnYjg4ODhfdG9fYXJn YjEyMTIxMjEyKGRlZmF1bHRfY29sb3IsIEM4X1RPX0MxMl9SRVBMSUNBVEUpOworCisJZGlzcGNf b3ZyX3dyaXRlKGRpc3BjLCBod192aWRlb3BvcnQsCisJCQlESVNQQ19PVlJfREVGQVVMVF9DT0xP UiwgdiAmIDB4ZmZmZmZmZmYpOworCWRpc3BjX292cl93cml0ZShkaXNwYywgaHdfdmlkZW9wb3J0 LAorCQkJRElTUENfT1ZSX0RFRkFVTFRfQ09MT1IyLCAodiA+PiAzMikgJiAweGZmZmYpOworfQor CitlbnVtIGRybV9tb2RlX3N0YXR1cyBkaXNwY192cF9tb2RlX3ZhbGlkKHN0cnVjdCBkaXNwY19k ZXZpY2UgKmRpc3BjLAorCQkJCQkgdTMyIGh3X3ZpZGVvcG9ydCwKKwkJCQkJIGNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXUzMiBoc3csIGhmcCwgaGJwLCB2c3csIHZm cCwgdmJwOworCWVudW0gZGlzcGNfdnBfYnVzX3R5cGUgYnVzX3R5cGU7CisJaW50IG1heF9wY2xr OworCisJYnVzX3R5cGUgPSBkaXNwYy0+ZmVhdC0+dnBfYnVzX3R5cGVbaHdfdmlkZW9wb3J0XTsK KworCW1heF9wY2xrID0gZGlzcGMtPmZlYXQtPm1heF9wY2xrX2tIeltidXNfdHlwZV07CisKKwlp ZiAoV0FSTl9PTihtYXhfcGNsayA9PSAwKSkKKwkJcmV0dXJuIE1PREVfQkFEOworCisJaWYgKG1v ZGUtPmNsb2NrIDwgZGlzcGMtPmZlYXQtPm1pbl9wY2xrX2tIeikKKwkJcmV0dXJuIE1PREVfQ0xP Q0tfTE9XOworCisJaWYgKG1vZGUtPmNsb2NrID4gbWF4X3BjbGspCisJCXJldHVybiBNT0RFX0NM T0NLX0hJR0g7CisKKwlpZiAobW9kZS0+aGRpc3BsYXkgPiA0MDk2KQorCQlyZXR1cm4gTU9ERV9C QUQ7CisKKwlpZiAobW9kZS0+dmRpc3BsYXkgPiA0MDk2KQorCQlyZXR1cm4gTU9ERV9CQUQ7CisK KwkvKiBUT0RPOiBhZGQgaW50ZXJsYWNlIHN1cHBvcnQgKi8KKwlpZiAobW9kZS0+ZmxhZ3MgJiBE Uk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKKwkJcmV0dXJuIE1PREVfTk9fSU5URVJMQUNFOworCisJ LyoKKwkgKiBFbmZvcmNlIHRoZSBvdXRwdXQgd2lkdGggaXMgZGl2aXNpYmxlIGJ5IDIuIEFjdHVh bGx5IHRoaXMKKwkgKiBpcyBvbmx5IG5lZWRlZCBpbiBmb2xsb3dpbmcgY2FzZXM6CisJICogLSBZ VVYgb3V0cHV0IHNlbGVjdGVkIChCVDY1NiwgQlQxMTIwKQorCSAqIC0gRGl0aGVyaW5nIGVuYWJs ZWQKKwkgKiAtIFRETSB3aXRoIFRETUN5Y2xlRm9ybWF0ID09IDMKKwkgKiBCdXQgZm9yIHNpbXBs aWNpdHkgd2UgZW5mb3JjZSB0aGF0IGFsd2F5cy4KKwkgKi8KKwlpZiAoKG1vZGUtPmhkaXNwbGF5 ICUgMikgIT0gMCkKKwkJcmV0dXJuIE1PREVfQkFEX0hWQUxVRTsKKworCWhmcCA9IG1vZGUtPmhz eW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3BsYXk7CisJaHN3ID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9k ZS0+aHN5bmNfc3RhcnQ7CisJaGJwID0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kOwor CisJdmZwID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsKKwl2c3cgPSBtb2Rl LT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydDsKKwl2YnAgPSBtb2RlLT52dG90YWwgLSBt b2RlLT52c3luY19lbmQ7CisKKwlpZiAoaHN3IDwgMSB8fCBoc3cgPiAyNTYgfHwKKwkgICAgaGZw IDwgMSB8fCBoZnAgPiA0MDk2IHx8CisJICAgIGhicCA8IDEgfHwgaGJwID4gNDA5NikKKwkJcmV0 dXJuIE1PREVfQkFEX0hWQUxVRTsKKworCWlmICh2c3cgPCAxIHx8IHZzdyA+IDI1NiB8fAorCSAg ICB2ZnAgPiA0MDk1IHx8IHZicCA+IDQwOTUpCisJCXJldHVybiBNT0RFX0JBRF9WVkFMVUU7CisK KwlpZiAoZGlzcGMtPm1lbW9yeV9iYW5kd2lkdGhfbGltaXQpIHsKKwkJY29uc3QgdW5zaWduZWQg aW50IGJwcCA9IDQ7CisJCXU2NCBiYW5kd2lkdGg7CisKKwkJYmFuZHdpZHRoID0gMTAwMCAqIG1v ZGUtPmNsb2NrOworCQliYW5kd2lkdGggPSBiYW5kd2lkdGggKiBtb2RlLT5oZGlzcGxheSAqIG1v ZGUtPnZkaXNwbGF5ICogYnBwOworCQliYW5kd2lkdGggPSBkaXZfdTY0KGJhbmR3aWR0aCwgbW9k ZS0+aHRvdGFsICogbW9kZS0+dnRvdGFsKTsKKworCQlpZiAoZGlzcGMtPm1lbW9yeV9iYW5kd2lk dGhfbGltaXQgPCBiYW5kd2lkdGgpCisJCQlyZXR1cm4gTU9ERV9CQUQ7CisJfQorCisJcmV0dXJu IE1PREVfT0s7Cit9CisKK2ludCBkaXNwY192cF9lbmFibGVfY2xrKHN0cnVjdCBkaXNwY19kZXZp Y2UgKmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0KQoreworCWludCByZXQgPSBjbGtfcHJlcGFyZV9l bmFibGUoZGlzcGMtPnZwX2Nsa1tod192aWRlb3BvcnRdKTsKKworCWlmIChyZXQpCisJCWRldl9l cnIoZGlzcGMtPmRldiwgIiVzOiBlbmFibGluZyBjbGsgZmFpbGVkOiAlZFxuIiwgX19mdW5jX18s CisJCQlyZXQpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBkaXNwY192cF9kaXNhYmxlX2Ns ayhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywgdTMyIGh3X3ZpZGVvcG9ydCkKK3sKKwljbGtf ZGlzYWJsZV91bnByZXBhcmUoZGlzcGMtPnZwX2Nsa1tod192aWRlb3BvcnRdKTsKK30KKworLyoK KyAqIENhbGN1bGF0ZSB0aGUgcGVyY2VudGFnZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHJlcXVl c3RlZCBwaXhlbCBjbG9jayByYXRlCisgKiBhbmQgdGhlIGVmZmVjdGl2ZSByYXRlIHJlc3VsdGlu ZyBmcm9tIGNhbGN1bGF0aW5nIHRoZSBjbG9jayBkaXZpZGVyIHZhbHVlLgorICovCitzdGF0aWMg dW5zaWduZWQgaW50IGRpc3BjX3BjbGtfZGlmZih1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJICAg IHVuc2lnbmVkIGxvbmcgcmVhbF9yYXRlKQoreworCWludCByID0gcmF0ZSAvIDEwMCwgcnIgPSBy ZWFsX3JhdGUgLyAxMDA7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGludCkoYWJzKCgocnIgLSByKSAq IDEwMCkgLyByKSk7Cit9CisKK2ludCBkaXNwY192cF9zZXRfY2xrX3JhdGUoc3RydWN0IGRpc3Bj X2RldmljZSAqZGlzcGMsIHUzMiBod192aWRlb3BvcnQsCisJCQkgIHVuc2lnbmVkIGxvbmcgcmF0 ZSkKK3sKKwlpbnQgcjsKKwl1bnNpZ25lZCBsb25nIG5ld19yYXRlOworCisJciA9IGNsa19zZXRf cmF0ZShkaXNwYy0+dnBfY2xrW2h3X3ZpZGVvcG9ydF0sIHJhdGUpOworCWlmIChyKSB7CisJCWRl dl9lcnIoZGlzcGMtPmRldiwgInZwJWQ6IGZhaWxlZCB0byBzZXQgY2xrIHJhdGUgdG8gJWx1XG4i LAorCQkJaHdfdmlkZW9wb3J0LCByYXRlKTsKKwkJcmV0dXJuIHI7CisJfQorCisJbmV3X3JhdGUg PSBjbGtfZ2V0X3JhdGUoZGlzcGMtPnZwX2Nsa1tod192aWRlb3BvcnRdKTsKKworCWlmIChkaXNw Y19wY2xrX2RpZmYocmF0ZSwgbmV3X3JhdGUpID4gNSkKKwkJZGV2X3dhcm4oZGlzcGMtPmRldiwK KwkJCSAidnAlZDogQ2xvY2sgcmF0ZSAlbHUgZGlmZmVycyBvdmVyIDUlJSBmcm9tIHJlcXVzdGVk ICVsdVxuIiwKKwkJCSBod192aWRlb3BvcnQsIG5ld19yYXRlLCByYXRlKTsKKworCWRldl9kYmco ZGlzcGMtPmRldiwgInZwJWQ6IG5ldyByYXRlICVsdSBIeiAocmVxdWVzdGVkICVsdSBIeilcbiIs CisJCWh3X3ZpZGVvcG9ydCwgY2xrX2dldF9yYXRlKGRpc3BjLT52cF9jbGtbaHdfdmlkZW9wb3J0 XSksIHJhdGUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIE9WUiAqLworc3RhdGljIHZvaWQgZGlz cGNfazJnX292cl9zZXRfcGxhbmUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkJICAg IHUzMiBod19wbGFuZSwgdTMyIGh3X3ZpZGVvcG9ydCwKKwkJCQkgICAgdTMyIHgsIHUzMiB5LCB1 MzIgenBvcykKK3sKKwkvKiBPbiBrMmcgdGhlcmUgaXMgb25seSBvbmUgcGxhbmUgYW5kIG5vIG5l ZWQgZm9yIG92ciAqLworCWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUsIERJU1BDX1ZJ RF9LMkdfUE9TSVRJT04sCisJCQl4IHwgKHkgPDwgMTYpKTsKK30KKworc3RhdGljIHZvaWQgZGlz cGNfYW02NXhfb3ZyX3NldF9wbGFuZShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywKKwkJCQkg ICAgICB1MzIgaHdfcGxhbmUsIHUzMiBod192aWRlb3BvcnQsCisJCQkJICAgICAgdTMyIHgsIHUz MiB5LCB1MzIgenBvcykKK3sKKwlPVlJfUkVHX0ZMRF9NT0QoZGlzcGMsIGh3X3ZpZGVvcG9ydCwg RElTUENfT1ZSX0FUVFJJQlVURVMoenBvcyksCisJCQlod19wbGFuZSwgNCwgMSk7CisJT1ZSX1JF R19GTERfTU9EKGRpc3BjLCBod192aWRlb3BvcnQsIERJU1BDX09WUl9BVFRSSUJVVEVTKHpwb3Mp LAorCQkJeCwgMTcsIDYpOworCU9WUl9SRUdfRkxEX01PRChkaXNwYywgaHdfdmlkZW9wb3J0LCBE SVNQQ19PVlJfQVRUUklCVVRFUyh6cG9zKSwKKwkJCXksIDMwLCAxOSk7Cit9CisKK3N0YXRpYyB2 b2lkIGRpc3BjX2o3MjFlX292cl9zZXRfcGxhbmUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMs CisJCQkJICAgICAgdTMyIGh3X3BsYW5lLCB1MzIgaHdfdmlkZW9wb3J0LAorCQkJCSAgICAgIHUz MiB4LCB1MzIgeSwgdTMyIHpwb3MpCit7CisJT1ZSX1JFR19GTERfTU9EKGRpc3BjLCBod192aWRl b3BvcnQsIERJU1BDX09WUl9BVFRSSUJVVEVTKHpwb3MpLAorCQkJaHdfcGxhbmUsIDQsIDEpOwor CU9WUl9SRUdfRkxEX01PRChkaXNwYywgaHdfdmlkZW9wb3J0LCBESVNQQ19PVlJfQVRUUklCVVRF UzIoenBvcyksCisJCQl4LCAxMywgMCk7CisJT1ZSX1JFR19GTERfTU9EKGRpc3BjLCBod192aWRl b3BvcnQsIERJU1BDX09WUl9BVFRSSUJVVEVTMih6cG9zKSwKKwkJCXksIDI5LCAxNik7Cit9CisK K3N0YXRpYyB2b2lkIGRpc3BjX292cl9zZXRfcGxhbmUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlz cGMsCisJCQkJdTMyIGh3X3BsYW5lLCB1MzIgaHdfdmlkZW9wb3J0LAorCQkJCXUzMiB4LCB1MzIg eSwgdTMyIHpwb3MpCit7CisJc3dpdGNoIChkaXNwYy0+ZmVhdC0+c3VicmV2KSB7CisJY2FzZSBE SVNQQ19LMkc6CisJCWRpc3BjX2syZ19vdnJfc2V0X3BsYW5lKGRpc3BjLCBod19wbGFuZSwgaHdf dmlkZW9wb3J0LAorCQkJCQl4LCB5LCB6cG9zKTsKKwkJYnJlYWs7CisJY2FzZSBESVNQQ19BTTY1 WDoKKwkJZGlzcGNfYW02NXhfb3ZyX3NldF9wbGFuZShkaXNwYywgaHdfcGxhbmUsIGh3X3ZpZGVv cG9ydCwKKwkJCQkJICB4LCB5LCB6cG9zKTsKKwkJYnJlYWs7CisJY2FzZSBESVNQQ19KNzIxRToK KwkJZGlzcGNfajcyMWVfb3ZyX3NldF9wbGFuZShkaXNwYywgaHdfcGxhbmUsIGh3X3ZpZGVvcG9y dCwKKwkJCQkJICB4LCB5LCB6cG9zKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigx KTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBkaXNwY19vdnJfZW5hYmxlX3BsYW5l KHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCSAgIHUzMiBod192aWRlb3BvcnQsIHUz MiB6cG9zLCBib29sIGVuYWJsZSkKK3sKKwlPVlJfUkVHX0ZMRF9NT0QoZGlzcGMsIGh3X3ZpZGVv cG9ydCwgRElTUENfT1ZSX0FUVFJJQlVURVMoenBvcyksCisJCQkhIWVuYWJsZSwgMCwgMCk7Cit9 CisKKy8qIENTQyAqLworZW51bSBjc2NfY3RtIHsKKwlDU0NfUlIsIENTQ19SRywgQ1NDX1JCLAor CUNTQ19HUiwgQ1NDX0dHLCBDU0NfR0IsCisJQ1NDX0JSLCBDU0NfQkcsIENTQ19CQiwKK307CisK K2VudW0gY3NjX3l1djJyZ2IgeworCUNTQ19SWSwgQ1NDX1JDYiwgQ1NDX1JDciwKKwlDU0NfR1ks IENTQ19HQ2IsIENTQ19HQ3IsCisJQ1NDX0JZLCBDU0NfQkNiLCBDU0NfQkNyLAorfTsKKworZW51 bSBjc2NfcmdiMnl1diB7CisJQ1NDX1lSLCAgQ1NDX1lHLCAgQ1NDX1lCLAorCUNTQ19DYlIsIENT Q19DYkcsIENTQ19DYkIsCisJQ1NDX0NyUiwgQ1NDX0NyRywgQ1NDX0NyQiwKK307CisKK3N0cnVj dCBkaXNwY19jc2NfY29lZiB7CisJdm9pZCAoKnRvX3JlZ3ZhbCkoY29uc3Qgc3RydWN0IGRpc3Bj X2NzY19jb2VmICpjc2MsIHUzMiAqcmVndmFsKTsKKwlpbnQgbVs5XTsKKwlpbnQgcHJlb2Zmc2V0 WzNdOworCWludCBwb3N0b2Zmc2V0WzNdOworCWVudW0geyBDTElQX0xJTUlURURfUkFOR0UgPSAw LCBDTElQX0ZVTExfUkFOR0UgPSAxLCB9IGNsaXBpbmc7CisJY29uc3QgY2hhciAqbmFtZTsKK307 CisKKyNkZWZpbmUgRElTUENfQ1NDX1JFR1ZBTF9MRU4gOAorCitzdGF0aWMgdm9pZCBkaXNwY19j c2Nfb2Zmc2V0X3JlZ3ZhbChjb25zdCBzdHJ1Y3QgZGlzcGNfY3NjX2NvZWYgKmNzYywKKwkJCQkg ICAgdTMyICpyZWd2YWwpCit7CisjZGVmaW5lIE9WQUwoeCwgeSkgKEZMRF9WQUwoeCwgMTUsIDMp IHwgRkxEX1ZBTCh5LCAzMSwgMTkpKQorCXJlZ3ZhbFs1XSA9IE9WQUwoY3NjLT5wcmVvZmZzZXRb MF0sIGNzYy0+cHJlb2Zmc2V0WzFdKTsKKwlyZWd2YWxbNl0gPSBPVkFMKGNzYy0+cHJlb2Zmc2V0 WzJdLCBjc2MtPnBvc3RvZmZzZXRbMF0pOworCXJlZ3ZhbFs3XSA9IE9WQUwoY3NjLT5wb3N0b2Zm c2V0WzFdLCBjc2MtPnBvc3RvZmZzZXRbMl0pOworI3VuZGVmIE9WQUwKK30KKworI2RlZmluZSBD VkFMKHgsIHkpIChGTERfVkFMKHgsIDEwLCAwKSB8IEZMRF9WQUwoeSwgMjYsIDE2KSkKK3N0YXRp YyB2b2lkIGRpc3BjX2NzY195dXYycmdiX3JlZ3ZhbChjb25zdCBzdHJ1Y3QgZGlzcGNfY3NjX2Nv ZWYgKmNzYywKKwkJCQkgICAgIHUzMiAqcmVndmFsKQoreworCXJlZ3ZhbFswXSA9IENWQUwoY3Nj LT5tW0NTQ19SWV0sIGNzYy0+bVtDU0NfUkNyXSk7CisJcmVndmFsWzFdID0gQ1ZBTChjc2MtPm1b Q1NDX1JDYl0sIGNzYy0+bVtDU0NfR1ldKTsKKwlyZWd2YWxbMl0gPSBDVkFMKGNzYy0+bVtDU0Nf R0NyXSwgY3NjLT5tW0NTQ19HQ2JdKTsKKwlyZWd2YWxbM10gPSBDVkFMKGNzYy0+bVtDU0NfQlld LCBjc2MtPm1bQ1NDX0JDcl0pOworCXJlZ3ZhbFs0XSA9IENWQUwoY3NjLT5tW0NTQ19CQ2JdLCAw KTsKKworCWRpc3BjX2NzY19vZmZzZXRfcmVndmFsKGNzYywgcmVndmFsKTsKK30KKworc3RhdGlj IHZvaWQgX19tYXliZV91bnVzZWQgZGlzcGNfY3NjX3JnYjJ5dXZfcmVndmFsKGNvbnN0IHN0cnVj dCBkaXNwY19jc2NfY29lZiAqY3NjLAorCQkJCQkJICAgIHUzMiAqcmVndmFsKQoreworCXJlZ3Zh bFswXSA9IENWQUwoY3NjLT5tW0NTQ19ZUl0sIGNzYy0+bVtDU0NfWUddKTsKKwlyZWd2YWxbMV0g PSBDVkFMKGNzYy0+bVtDU0NfWUJdLCBjc2MtPm1bQ1NDX0NyUl0pOworCXJlZ3ZhbFsyXSA9IENW QUwoY3NjLT5tW0NTQ19DckddLCBjc2MtPm1bQ1NDX0NyQl0pOworCXJlZ3ZhbFszXSA9IENWQUwo Y3NjLT5tW0NTQ19DYlJdLCBjc2MtPm1bQ1NDX0NiR10pOworCXJlZ3ZhbFs0XSA9IENWQUwoY3Nj LT5tW0NTQ19DYkJdLCAwKTsKKworCWRpc3BjX2NzY19vZmZzZXRfcmVndmFsKGNzYywgcmVndmFs KTsKK30KKworc3RhdGljIHZvaWQgZGlzcGNfY3NjX2Nwcl9yZWd2YWwoY29uc3Qgc3RydWN0IGRp c3BjX2NzY19jb2VmICpjc2MsCisJCQkJIHUzMiAqcmVndmFsKQoreworCXJlZ3ZhbFswXSA9IENW QUwoY3NjLT5tW0NTQ19SUl0sIGNzYy0+bVtDU0NfUkddKTsKKwlyZWd2YWxbMV0gPSBDVkFMKGNz Yy0+bVtDU0NfUkJdLCBjc2MtPm1bQ1NDX0dSXSk7CisJcmVndmFsWzJdID0gQ1ZBTChjc2MtPm1b Q1NDX0dHXSwgY3NjLT5tW0NTQ19HQl0pOworCXJlZ3ZhbFszXSA9IENWQUwoY3NjLT5tW0NTQ19C Ul0sIGNzYy0+bVtDU0NfQkddKTsKKwlyZWd2YWxbNF0gPSBDVkFMKGNzYy0+bVtDU0NfQkJdLCAw KTsKKworCWRpc3BjX2NzY19vZmZzZXRfcmVndmFsKGNzYywgcmVndmFsKTsKK30KKworI3VuZGVm IENWQUwKKworc3RhdGljIHZvaWQgZGlzcGNfazJnX3ZpZF93cml0ZV9jc2Moc3RydWN0IGRpc3Bj X2RldmljZSAqZGlzcGMsIHUzMiBod19wbGFuZSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGRpc3Bj X2NzY19jb2VmICpjc2MpCit7CisJc3RhdGljIGNvbnN0IHUxNiBkaXNwY192aWRfY3NjX2NvZWZf cmVnW10gPSB7CisJCURJU1BDX1ZJRF9DU0NfQ09FRigwKSwgRElTUENfVklEX0NTQ19DT0VGKDEp LAorCQlESVNQQ19WSURfQ1NDX0NPRUYoMiksIERJU1BDX1ZJRF9DU0NfQ09FRigzKSwKKwkJRElT UENfVklEX0NTQ19DT0VGKDQpLCBESVNQQ19WSURfQ1NDX0NPRUYoNSksCisJCURJU1BDX1ZJRF9D U0NfQ09FRig2KSwgLyogSzJHIGhhcyBubyBwb3N0IG9mZnNldCBzdXBwb3J0ICovCisJfTsKKwl1 MzIgcmVndmFsW0RJU1BDX0NTQ19SRUdWQUxfTEVOXTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWNz Yy0+dG9fcmVndmFsKGNzYywgcmVndmFsKTsKKworCWlmIChyZWd2YWxbN10gIT0gMCkKKwkJZGV2 X3dhcm4oZGlzcGMtPmRldiwgIiVzOiBObyBwb3N0IG9mZnNldCBzdXBwb3J0IGZvciAlc1xuIiwK KwkJCSBfX2Z1bmNfXywgY3NjLT5uYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGRpc3BjX3ZpZF9jc2NfY29lZl9yZWcpOyBpKyspCisJCWRpc3BjX3ZpZF93cml0ZShkaXNwYywg aHdfcGxhbmUsIGRpc3BjX3ZpZF9jc2NfY29lZl9yZWdbaV0sCisJCQkJcmVndmFsW2ldKTsKK30K Kworc3RhdGljIHZvaWQgZGlzcGNfazNfdmlkX3dyaXRlX2NzYyhzdHJ1Y3QgZGlzcGNfZGV2aWNl ICpkaXNwYywgdTMyIGh3X3BsYW5lLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBkaXNwY19jc2NfY29l ZiAqY3NjKQoreworCXN0YXRpYyBjb25zdCB1MTYgZGlzcGNfdmlkX2NzY19jb2VmX3JlZ1tESVNQ Q19DU0NfUkVHVkFMX0xFTl0gPSB7CisJCURJU1BDX1ZJRF9DU0NfQ09FRigwKSwgRElTUENfVklE X0NTQ19DT0VGKDEpLAorCQlESVNQQ19WSURfQ1NDX0NPRUYoMiksIERJU1BDX1ZJRF9DU0NfQ09F RigzKSwKKwkJRElTUENfVklEX0NTQ19DT0VGKDQpLCBESVNQQ19WSURfQ1NDX0NPRUYoNSksCisJ CURJU1BDX1ZJRF9DU0NfQ09FRig2KSwgRElTUENfVklEX0NTQ19DT0VGNywKKwl9OworCXUzMiBy ZWd2YWxbRElTUENfQ1NDX1JFR1ZBTF9MRU5dOworCXVuc2lnbmVkIGludCBpOworCisJY3NjLT50 b19yZWd2YWwoY3NjLCByZWd2YWwpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGlz cGNfdmlkX2NzY19jb2VmX3JlZyk7IGkrKykKKwkJZGlzcGNfdmlkX3dyaXRlKGRpc3BjLCBod19w bGFuZSwgZGlzcGNfdmlkX2NzY19jb2VmX3JlZ1tpXSwKKwkJCQlyZWd2YWxbaV0pOworfQorCisv KiBZVVYgLT4gUkdCLCBJVFUtUiBCVC42MDEsIGZ1bGwgcmFuZ2UgKi8KK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZGlzcGNfY3NjX2NvZWYgY3NjX3l1djJyZ2JfYnQ2MDFfZnVsbCA9IHsKKwlkaXNwY19j c2NfeXV2MnJnYl9yZWd2YWwsCisJeyAyNTYsICAgMCwgIDM1OCwJLyogcnksIHJjYiwgcmNyIHwx LjAwMCAgMC4wMDAgIDEuNDAyfCovCisJICAyNTYsIC04OCwgLTE4MiwJLyogZ3ksIGdjYiwgZ2Ny IHwxLjAwMCAtMC4zNDQgLTAuNzE0fCovCisJICAyNTYsIDQ1MiwgICAgMCwgfSwJLyogYnksIGJj YiwgYmNyIHwxLjAwMCAgMS43NzIgIDAuMDAwfCovCisJeyAgICAwLCAtMjA0OCwgLTIwNDgsIH0s CS8qIGZ1bGwgcmFuZ2UgKi8KKwl7ICAgIDAsICAgICAwLCAgICAgMCwgfSwKKwlDTElQX0ZVTExf UkFOR0UsCisJIkJULjYwMSBGdWxsIiwKK307CisKKy8qIFlVViAtPiBSR0IsIElUVS1SIEJULjYw MSwgbGltaXRlZCByYW5nZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkaXNwY19jc2NfY29lZiBj c2NfeXV2MnJnYl9idDYwMV9saW0gPSB7CisJZGlzcGNfY3NjX3l1djJyZ2JfcmVndmFsLAorCXsg Mjk4LCAgICAwLCAgNDA5LAkvKiByeSwgcmNiLCByY3IgfDEuMTY0ICAwLjAwMCAgMS41OTZ8Ki8K KwkgIDI5OCwgLTEwMCwgLTIwOCwJLyogZ3ksIGdjYiwgZ2NyIHwxLjE2NCAtMC4zOTIgLTAuODEz fCovCisJICAyOTgsICA1MTYsICAgIDAsIH0sCS8qIGJ5LCBiY2IsIGJjciB8MS4xNjQgIDIuMDE3 ICAwLjAwMHwqLworCXsgLTI1NiwgLTIwNDgsIC0yMDQ4LCB9LAkvKiBsaW1pdGVkIHJhbmdlICov CisJeyAgICAwLCAgICAgMCwgICAgIDAsIH0sCisJQ0xJUF9GVUxMX1JBTkdFLAorCSJCVC42MDEg TGltaXRlZCIsCit9OworCisvKiBZVVYgLT4gUkdCLCBJVFUtUiBCVC43MDksIGZ1bGwgcmFuZ2Ug Ki8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGlzcGNfY3NjX2NvZWYgY3NjX3l1djJyZ2JfYnQ3MDlf ZnVsbCA9IHsKKwlkaXNwY19jc2NfeXV2MnJnYl9yZWd2YWwsCisJeyAyNTYsCSAgMCwgIDQwMiwJ LyogcnksIHJjYiwgcmNyIHwxLjAwMAkwLjAwMCAgMS41NzB8Ki8KKwkgIDI1NiwgIC00OCwgLTEy MCwJLyogZ3ksIGdjYiwgZ2NyIHwxLjAwMCAtMC4xODcgLTAuNDY3fCovCisJICAyNTYsICA0NzUs ICAgIDAsIH0sCS8qIGJ5LCBiY2IsIGJjciB8MS4wMDAJMS44NTYgIDAuMDAwfCovCisJeyAgICAw LCAtMjA0OCwgLTIwNDgsIH0sCS8qIGZ1bGwgcmFuZ2UgKi8KKwl7ICAgIDAsICAgICAwLCAgICAg MCwgfSwKKwlDTElQX0ZVTExfUkFOR0UsCisJIkJULjcwOSBGdWxsIiwKK307CisKKy8qIFlVViAt PiBSR0IsIElUVS1SIEJULjcwOSwgbGltaXRlZCByYW5nZSAqLworc3RhdGljIGNvbnN0IHN0cnVj dCBkaXNwY19jc2NfY29lZiBjc2NfeXV2MnJnYl9idDcwOV9saW0gPSB7CisJZGlzcGNfY3NjX3l1 djJyZ2JfcmVndmFsLAorCXsgMjk4LCAgICAwLCAgNDU5LAkvKiByeSwgcmNiLCByY3IgfDEuMTY0 ICAwLjAwMCAgMS43OTN8Ki8KKwkgIDI5OCwgIC01NSwgLTEzNiwJLyogZ3ksIGdjYiwgZ2NyIHwx LjE2NCAtMC4yMTMgLTAuNTMzfCovCisJICAyOTgsICA1NDEsICAgIDAsIH0sCS8qIGJ5LCBiY2Is IGJjciB8MS4xNjQgIDIuMTEyICAwLjAwMHwqLworCXsgLTI1NiwgLTIwNDgsIC0yMDQ4LCB9LAkv KiBsaW1pdGVkIHJhbmdlICovCisJeyAgICAwLCAgICAgMCwgICAgIDAsIH0sCisJQ0xJUF9GVUxM X1JBTkdFLAorCSJCVC43MDkgTGltaXRlZCIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsK KwllbnVtIGRybV9jb2xvcl9lbmNvZGluZyBlbmNvZGluZzsKKwllbnVtIGRybV9jb2xvcl9yYW5n ZSByYW5nZTsKKwljb25zdCBzdHJ1Y3QgZGlzcGNfY3NjX2NvZWYgKmNzYzsKK30gZGlzcGNfY3Nj X3RhYmxlW10gPSB7CisJeyBEUk1fQ09MT1JfWUNCQ1JfQlQ2MDEsIERSTV9DT0xPUl9ZQ0JDUl9G VUxMX1JBTkdFLAorCSAgJmNzY195dXYycmdiX2J0NjAxX2Z1bGwsIH0sCisJeyBEUk1fQ09MT1Jf WUNCQ1JfQlQ2MDEsIERSTV9DT0xPUl9ZQ0JDUl9MSU1JVEVEX1JBTkdFLAorCSAgJmNzY195dXYy cmdiX2J0NjAxX2xpbSwgfSwKKwl7IERSTV9DT0xPUl9ZQ0JDUl9CVDcwOSwgRFJNX0NPTE9SX1lD QkNSX0ZVTExfUkFOR0UsCisJICAmY3NjX3l1djJyZ2JfYnQ3MDlfZnVsbCwgfSwKKwl7IERSTV9D T0xPUl9ZQ0JDUl9CVDcwOSwgRFJNX0NPTE9SX1lDQkNSX0xJTUlURURfUkFOR0UsCisJICAmY3Nj X3l1djJyZ2JfYnQ3MDlfbGltLCB9LAorfTsKKworc3RhdGljIGNvbnN0CitzdHJ1Y3QgZGlzcGNf Y3NjX2NvZWYgKmRpc3BjX2ZpbmRfY3NjKGVudW0gZHJtX2NvbG9yX2VuY29kaW5nIGVuY29kaW5n LAorCQkJCSAgICAgIGVudW0gZHJtX2NvbG9yX3JhbmdlIHJhbmdlKQoreworCXVuc2lnbmVkIGlu dCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGlzcGNfY3NjX3RhYmxlKTsgaSsr KSB7CisJCWlmIChkaXNwY19jc2NfdGFibGVbaV0uZW5jb2RpbmcgPT0gZW5jb2RpbmcgJiYKKwkJ ICAgIGRpc3BjX2NzY190YWJsZVtpXS5yYW5nZSA9PSByYW5nZSkgeworCQkJcmV0dXJuIGRpc3Bj X2NzY190YWJsZVtpXS5jc2M7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2 b2lkIGRpc3BjX3ZpZF9jc2Nfc2V0dXAoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBo d19wbGFuZSwKKwkJCQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlz dGF0aWMgY29uc3Qgc3RydWN0IGRpc3BjX2NzY19jb2VmICpjb2VmOworCisJY29lZiA9IGRpc3Bj X2ZpbmRfY3NjKHN0YXRlLT5jb2xvcl9lbmNvZGluZywgc3RhdGUtPmNvbG9yX3JhbmdlKTsKKwlp ZiAoIWNvZWYpIHsKKwkJZGV2X2VycihkaXNwYy0+ZGV2LCAiJXM6IENTQyAoJXUsJXUpIG5vdCBm b3VuZFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0ZS0+Y29sb3JfZW5jb2RpbmcsIHN0YXRlLT5jb2xv cl9yYW5nZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZGlzcGMtPmZlYXQtPnN1YnJldiA9PSBE SVNQQ19LMkcpCisJCWRpc3BjX2syZ192aWRfd3JpdGVfY3NjKGRpc3BjLCBod19wbGFuZSwgY29l Zik7CisJZWxzZQorCQlkaXNwY19rM192aWRfd3JpdGVfY3NjKGRpc3BjLCBod19wbGFuZSwgY29l Zik7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjX3ZpZF9jc2NfZW5hYmxlKHN0cnVjdCBkaXNwY19k ZXZpY2UgKmRpc3BjLCB1MzIgaHdfcGxhbmUsCisJCQkJIGJvb2wgZW5hYmxlKQoreworCVZJRF9S RUdfRkxEX01PRChkaXNwYywgaHdfcGxhbmUsIERJU1BDX1ZJRF9BVFRSSUJVVEVTLCAhIWVuYWJs ZSwgOSwgOSk7Cit9CisKKy8qIFNDQUxFUiAqLworCitzdGF0aWMgdTMyIGRpc3BjX2NhbGNfZmly X2luYyh1MzIgaW4sIHUzMiBvdXQpCit7CisJcmV0dXJuICh1MzIpZGl2X3U2NCgweDIwMDAwMHVs bCAqIGluLCBvdXQpOworfQorCitlbnVtIGRpc3BjX3ZpZF9maXJfY29lZl9zZXQgeworCURJU1BD X1ZJRF9GSVJfQ09FRl9IT1JJWiwKKwlESVNQQ19WSURfRklSX0NPRUZfSE9SSVpfVVYsCisJRElT UENfVklEX0ZJUl9DT0VGX1ZFUlQsCisJRElTUENfVklEX0ZJUl9DT0VGX1ZFUlRfVVYsCit9Owor CitzdGF0aWMgdm9pZCBkaXNwY192aWRfd3JpdGVfZmlyX2NvZWZzKHN0cnVjdCBkaXNwY19kZXZp Y2UgKmRpc3BjLAorCQkJCSAgICAgIHUzMiBod19wbGFuZSwKKwkJCQkgICAgICBlbnVtIGRpc3Bj X3ZpZF9maXJfY29lZl9zZXQgY29lZl9zZXQsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHRpZHNz X3NjYWxlX2NvZWZzICpjb2VmcykKK3sKKwlzdGF0aWMgY29uc3QgdTE2IGMwX3JlZ3NbXSA9IHsK KwkJW0RJU1BDX1ZJRF9GSVJfQ09FRl9IT1JJWl0gPSBESVNQQ19WSURfRklSX0NPRUZTX0gwLAor CQlbRElTUENfVklEX0ZJUl9DT0VGX0hPUklaX1VWXSA9IERJU1BDX1ZJRF9GSVJfQ09FRlNfSDBf QywKKwkJW0RJU1BDX1ZJRF9GSVJfQ09FRl9WRVJUXSA9IERJU1BDX1ZJRF9GSVJfQ09FRlNfVjAs CisJCVtESVNQQ19WSURfRklSX0NPRUZfVkVSVF9VVl0gPSBESVNQQ19WSURfRklSX0NPRUZTX1Yw X0MsCisJfTsKKworCXN0YXRpYyBjb25zdCB1MTYgYzEyX3JlZ3NbXSA9IHsKKwkJW0RJU1BDX1ZJ RF9GSVJfQ09FRl9IT1JJWl0gPSBESVNQQ19WSURfRklSX0NPRUZTX0gxMiwKKwkJW0RJU1BDX1ZJ RF9GSVJfQ09FRl9IT1JJWl9VVl0gPSBESVNQQ19WSURfRklSX0NPRUZTX0gxMl9DLAorCQlbRElT UENfVklEX0ZJUl9DT0VGX1ZFUlRdID0gRElTUENfVklEX0ZJUl9DT0VGU19WMTIsCisJCVtESVNQ Q19WSURfRklSX0NPRUZfVkVSVF9VVl0gPSBESVNQQ19WSURfRklSX0NPRUZTX1YxMl9DLAorCX07 CisKKwljb25zdCB1MTYgYzBfYmFzZSA9IGMwX3JlZ3NbY29lZl9zZXRdOworCWNvbnN0IHUxNiBj MTJfYmFzZSA9IGMxMl9yZWdzW2NvZWZfc2V0XTsKKwlpbnQgcGhhc2U7CisKKwlpZiAoIWNvZWZz KSB7CisJCWRldl9lcnIoZGlzcGMtPmRldiwgIiVzOiBObyBjb2VmZmljaWVudHMgZ2l2ZW4uXG4i LCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKHBoYXNlID0gMDsgcGhhc2UgPD0g ODsgKytwaGFzZSkgeworCQl1MTYgcmVnID0gYzBfYmFzZSArIHBoYXNlICogNDsKKwkJdTE2IGMw ID0gY29lZnMtPmMwW3BoYXNlXTsKKworCQlkaXNwY192aWRfd3JpdGUoZGlzcGMsIGh3X3BsYW5l LCByZWcsIGMwKTsKKwl9CisKKwlmb3IgKHBoYXNlID0gMDsgcGhhc2UgPD0gMTU7ICsrcGhhc2Up IHsKKwkJdTE2IHJlZyA9IGMxMl9iYXNlICsgcGhhc2UgKiA0OworCQlzMTYgYzEsIGMyOworCQl1 MzIgYzEyOworCisJCWMxID0gY29lZnMtPmMxW3BoYXNlXTsKKwkJYzIgPSBjb2Vmcy0+YzJbcGhh c2VdOworCQljMTIgPSBGTERfVkFMKGMxLCAxOSwgMTApIHwgRkxEX1ZBTChjMiwgMjksIDIwKTsK KworCQlkaXNwY192aWRfd3JpdGUoZGlzcGMsIGh3X3BsYW5lLCByZWcsIGMxMik7CisJfQorfQor CitzdGF0aWMgYm9vbCBkaXNwY19mb3VyY2NfaXNfeXV2KHUzMiBmb3VyY2MpCit7CisJc3dpdGNo IChmb3VyY2MpIHsKKwljYXNlIERSTV9GT1JNQVRfWVVZVjoKKwljYXNlIERSTV9GT1JNQVRfVVlW WToKKwljYXNlIERSTV9GT1JNQVRfTlYxMjoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJ cmV0dXJuIGZhbHNlOworCX0KK30KKworc3RydWN0IGRpc3BjX3NjYWxpbmdfcGFyYW1zIHsKKwlp bnQgeGluYywgeWluYzsKKwl1MzIgaW5fdywgaW5faCwgaW5fd191diwgaW5faF91djsKKwl1MzIg ZmlyX3hpbmMsIGZpcl95aW5jLCBmaXJfeGluY191diwgZmlyX3lpbmNfdXY7CisJYm9vbCBzY2Fs ZV94LCBzY2FsZV95OworCWNvbnN0IHN0cnVjdCB0aWRzc19zY2FsZV9jb2VmcyAqeGNvZWYsICp5 Y29lZiwgKnhjb2VmX3V2LCAqeWNvZWZfdXY7CisJYm9vbCBmaXZlX3RhcHM7Cit9OworCitzdGF0 aWMgaW50IGRpc3BjX3ZpZF9jYWxjX3NjYWxpbmcoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMs CisJCQkJICBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwKKwkJCQkgIHN0cnVj dCBkaXNwY19zY2FsaW5nX3BhcmFtcyAqc3AsCisJCQkJICBib29sIGxpdGVfcGxhbmUpCit7CisJ Y29uc3Qgc3RydWN0IGRpc3BjX2ZlYXR1cmVzX3NjYWxpbmcgKmYgPSAmZGlzcGMtPmZlYXQtPnNj YWxpbmc7CisJdTMyIGZvdXJjYyA9IHN0YXRlLT5mYi0+Zm9ybWF0LT5mb3JtYXQ7CisJdTMyIGlu X3dpZHRoX21heF81dGFwID0gZi0+aW5fd2lkdGhfbWF4XzV0YXBfcmdiOworCXUzMiBpbl93aWR0 aF9tYXhfM3RhcCA9IGYtPmluX3dpZHRoX21heF8zdGFwX3JnYjsKKwl1MzIgZG93bnNjYWxlX2xp bWl0OworCXUzMiBpbl93aWR0aF9tYXg7CisKKwltZW1zZXQoc3AsIDAsIHNpemVvZigqc3ApKTsK KwlzcC0+eGluYyA9IHNwLT55aW5jID0gMTsKKwlzcC0+aW5fdyA9IHNwLT5pbl93X3V2ID0gc3Rh dGUtPnNyY193ID4+IDE2OworCXNwLT5pbl9oID0gc3AtPmluX2hfdXYgPSBzdGF0ZS0+c3JjX2gg Pj4gMTY7CisKKwlzcC0+c2NhbGVfeCA9IHNwLT5pbl93ICE9IHN0YXRlLT5jcnRjX3c7CisJc3At PnNjYWxlX3kgPSBzcC0+aW5faCAhPSBzdGF0ZS0+Y3J0Y19oOworCisJaWYgKGRpc3BjX2ZvdXJj Y19pc195dXYoZm91cmNjKSkgeworCQlpbl93aWR0aF9tYXhfNXRhcCA9IGYtPmluX3dpZHRoX21h eF81dGFwX3l1djsKKwkJaW5fd2lkdGhfbWF4XzN0YXAgPSBmLT5pbl93aWR0aF9tYXhfM3RhcF95 dXY7CisKKwkJc3AtPmluX3dfdXYgPj49IDE7CisJCXNwLT5zY2FsZV94ID0gdHJ1ZTsKKworCQlp ZiAoZm91cmNjID09IERSTV9GT1JNQVRfTlYxMikgeworCQkJc3AtPmluX2hfdXYgPj49IDE7CisJ CQlzcC0+c2NhbGVfeSA9IHRydWU7CisJCX0KKwl9CisKKwkvKiBTa2lwIHRoZSByZXN0IGlmIG5v IHNjYWxpbmcgaXMgdXNlZCAqLworCWlmICgoIXNwLT5zY2FsZV94ICYmICFzcC0+c2NhbGVfeSkg fHwgbGl0ZV9wbGFuZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3AtPmluX3cgPiBpbl93aWR0aF9t YXhfNXRhcCkgeworCQlzcC0+Zml2ZV90YXBzID0gZmFsc2U7CisJCWluX3dpZHRoX21heCA9IGlu X3dpZHRoX21heF8zdGFwOworCQlkb3duc2NhbGVfbGltaXQgPSBmLT5kb3duc2NhbGVfbGltaXRf M3RhcDsKKwl9IGVsc2UgeworCQlzcC0+Zml2ZV90YXBzID0gdHJ1ZTsKKwkJaW5fd2lkdGhfbWF4 ID0gaW5fd2lkdGhfbWF4XzV0YXA7CisJCWRvd25zY2FsZV9saW1pdCA9IGYtPmRvd25zY2FsZV9s aW1pdF81dGFwOworCX0KKworCWlmIChzcC0+c2NhbGVfeCkgeworCQlzcC0+ZmlyX3hpbmMgPSBk aXNwY19jYWxjX2Zpcl9pbmMoc3AtPmluX3csIHN0YXRlLT5jcnRjX3cpOworCisJCWlmIChzcC0+ ZmlyX3hpbmMgPCBkaXNwY19jYWxjX2Zpcl9pbmMoMSwgZi0+dXBzY2FsZV9saW1pdCkpIHsKKwkJ CWRldl9kYmcoZGlzcGMtPmRldiwKKwkJCQkiJXM6IFgtc2NhbGluZyBmYWN0b3IgJXUvJXUgPiAl dVxuIiwKKwkJCQlfX2Z1bmNfXywgc3RhdGUtPmNydGNfdywgc3RhdGUtPnNyY193ID4+IDE2LAor CQkJCWYtPnVwc2NhbGVfbGltaXQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAo c3AtPmZpcl94aW5jID49IGRpc3BjX2NhbGNfZmlyX2luYyhkb3duc2NhbGVfbGltaXQsIDEpKSB7 CisJCQlzcC0+eGluYyA9IERJVl9ST1VORF9VUChESVZfUk9VTkRfVVAoc3AtPmluX3csCisJCQkJ CQkJICAgICBzdGF0ZS0+Y3J0Y193KSwKKwkJCQkJCWRvd25zY2FsZV9saW1pdCk7CisKKwkJCWlm IChzcC0+eGluYyA+IGYtPnhpbmNfbWF4KSB7CisJCQkJZGV2X2RiZyhkaXNwYy0+ZGV2LAorCQkJ CQkiJXM6IFgtc2NhbGluZyBmYWN0b3IgJXUvJXUgPCAxLyV1XG4iLAorCQkJCQlfX2Z1bmNfXywg c3RhdGUtPmNydGNfdywKKwkJCQkJc3RhdGUtPnNyY193ID4+IDE2LAorCQkJCQlkb3duc2NhbGVf bGltaXQgKiBmLT54aW5jX21heCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCXNw LT5pbl93ID0gKHN0YXRlLT5zcmNfdyA+PiAxNikgLyBzcC0+eGluYzsKKwkJfQorCisJCXdoaWxl IChzcC0+aW5fdyA+IGluX3dpZHRoX21heCkgeworCQkJc3AtPnhpbmMrKzsKKwkJCXNwLT5pbl93 ID0gKHN0YXRlLT5zcmNfdyA+PiAxNikgLyBzcC0+eGluYzsKKwkJfQorCisJCWlmIChzcC0+eGlu YyA+IGYtPnhpbmNfbWF4KSB7CisJCQlkZXZfZGJnKGRpc3BjLT5kZXYsCisJCQkJIiVzOiBUb28g d2lkZSBpbnB1dCBidWZlciAldSA+ICV1XG4iLCBfX2Z1bmNfXywKKwkJCQlzdGF0ZS0+c3JjX3cg Pj4gMTYsIGluX3dpZHRoX21heCAqIGYtPnhpbmNfbWF4KTsKKwkJCXJldHVybiAtRUlOVkFMOwor CQl9CisKKwkJLyoKKwkJICogV2UgbmVlZCBldmVuIGxpbmUgbGVuZ3RoIGZvciBZVVYgZm9ybWF0 cy4gRGVjaW1hdGlvbgorCQkgKiBjYW4gbGVhZCB0byBvZGQgbGVuZ3RoLCBzbyB3ZSBuZWVkIHRv IG1ha2UgaXQgZXZlbgorCQkgKiBhZ2Fpbi4KKwkJICovCisJCWlmIChkaXNwY19mb3VyY2NfaXNf eXV2KGZvdXJjYykpCisJCQlzcC0+aW5fdyAmPSB+MTsKKworCQlzcC0+ZmlyX3hpbmMgPSBkaXNw Y19jYWxjX2Zpcl9pbmMoc3AtPmluX3csIHN0YXRlLT5jcnRjX3cpOworCX0KKworCWlmIChzcC0+ c2NhbGVfeSkgeworCQlzcC0+ZmlyX3lpbmMgPSBkaXNwY19jYWxjX2Zpcl9pbmMoc3AtPmluX2gs IHN0YXRlLT5jcnRjX2gpOworCisJCWlmIChzcC0+ZmlyX3lpbmMgPCBkaXNwY19jYWxjX2Zpcl9p bmMoMSwgZi0+dXBzY2FsZV9saW1pdCkpIHsKKwkJCWRldl9kYmcoZGlzcGMtPmRldiwKKwkJCQki JXM6IFktc2NhbGluZyBmYWN0b3IgJXUvJXUgPiAldVxuIiwKKwkJCQlfX2Z1bmNfXywgc3RhdGUt PmNydGNfaCwgc3RhdGUtPnNyY19oID4+IDE2LAorCQkJCWYtPnVwc2NhbGVfbGltaXQpOworCQkJ cmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoc3AtPmZpcl95aW5jID49IGRpc3BjX2NhbGNf ZmlyX2luYyhkb3duc2NhbGVfbGltaXQsIDEpKSB7CisJCQlzcC0+eWluYyA9IERJVl9ST1VORF9V UChESVZfUk9VTkRfVVAoc3AtPmluX2gsCisJCQkJCQkJICAgICBzdGF0ZS0+Y3J0Y19oKSwKKwkJ CQkJCWRvd25zY2FsZV9saW1pdCk7CisKKwkJCXNwLT5pbl9oIC89IHNwLT55aW5jOworCQkJc3At PmZpcl95aW5jID0gZGlzcGNfY2FsY19maXJfaW5jKHNwLT5pbl9oLAorCQkJCQkJCSAgc3RhdGUt PmNydGNfaCk7CisJCX0KKwl9CisKKwlkZXZfZGJnKGRpc3BjLT5kZXYsCisJCSIlczogJXV4JXUg ZGVjaW0gJXV4JXUgLT4gJXV4JXUgZmlyaW5jICV1LiUwM3V4JXUuJTAzdSB0YXBzICV1IC0+ICV1 eCV1XG4iLAorCQlfX2Z1bmNfXywgc3RhdGUtPnNyY193ID4+IDE2LCBzdGF0ZS0+c3JjX2ggPj4g MTYsCisJCXNwLT54aW5jLCBzcC0+eWluYywgc3AtPmluX3csIHNwLT5pbl9oLAorCQlzcC0+Zmly X3hpbmMgLyAweDIwMDAwMHUsCisJCSgoc3AtPmZpcl94aW5jICYgMHgxRkZGRkZ1KSAqIDk5OXUp IC8gMHgxRkZGRkZ1LAorCQlzcC0+ZmlyX3lpbmMgLyAweDIwMDAwMHUsCisJCSgoc3AtPmZpcl95 aW5jICYgMHgxRkZGRkZ1KSAqIDk5OXUpIC8gMHgxRkZGRkZ1LAorCQlzcC0+Zml2ZV90YXBzID8g NSA6IDMsCisJCXN0YXRlLT5jcnRjX3csIHN0YXRlLT5jcnRjX2gpOworCisJaWYgKGRpc3BjX2Zv dXJjY19pc195dXYoZm91cmNjKSkgeworCQlpZiAoc3AtPnNjYWxlX3gpIHsKKwkJCXNwLT5pbl93 X3V2IC89IHNwLT54aW5jOworCQkJc3AtPmZpcl94aW5jX3V2ID0gZGlzcGNfY2FsY19maXJfaW5j KHNwLT5pbl93X3V2LAorCQkJCQkJCSAgICAgc3RhdGUtPmNydGNfdyk7CisJCQlzcC0+eGNvZWZf dXYgPSB0aWRzc19nZXRfc2NhbGVfY29lZnMoZGlzcGMtPmRldiwKKwkJCQkJCQkgICAgIHNwLT5m aXJfeGluY191diwKKwkJCQkJCQkgICAgIHRydWUpOworCQl9CisJCWlmIChzcC0+c2NhbGVfeSkg eworCQkJc3AtPmluX2hfdXYgLz0gc3AtPnlpbmM7CisJCQlzcC0+ZmlyX3lpbmNfdXYgPSBkaXNw Y19jYWxjX2Zpcl9pbmMoc3AtPmluX2hfdXYsCisJCQkJCQkJICAgICBzdGF0ZS0+Y3J0Y19oKTsK KwkJCXNwLT55Y29lZl91diA9IHRpZHNzX2dldF9zY2FsZV9jb2VmcyhkaXNwYy0+ZGV2LAorCQkJ CQkJCSAgICAgc3AtPmZpcl95aW5jX3V2LAorCQkJCQkJCSAgICAgc3AtPmZpdmVfdGFwcyk7CisJ CX0KKwl9CisKKwlpZiAoc3AtPnNjYWxlX3gpCisJCXNwLT54Y29lZiA9IHRpZHNzX2dldF9zY2Fs ZV9jb2VmcyhkaXNwYy0+ZGV2LCBzcC0+ZmlyX3hpbmMsCisJCQkJCQkgIHRydWUpOworCisJaWYg KHNwLT5zY2FsZV95KQorCQlzcC0+eWNvZWYgPSB0aWRzc19nZXRfc2NhbGVfY29lZnMoZGlzcGMt PmRldiwgc3AtPmZpcl95aW5jLAorCQkJCQkJICBzcC0+Zml2ZV90YXBzKTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBkaXNwY192aWRfc2V0X3NjYWxpbmcoc3RydWN0IGRpc3BjX2Rl dmljZSAqZGlzcGMsCisJCQkJICB1MzIgaHdfcGxhbmUsCisJCQkJICBzdHJ1Y3QgZGlzcGNfc2Nh bGluZ19wYXJhbXMgKnNwLAorCQkJCSAgdTMyIGZvdXJjYykKK3sKKwkvKiBIT1JJWk9OVEFMIFJF U0laRSBFTkFCTEUgKi8KKwlWSURfUkVHX0ZMRF9NT0QoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19W SURfQVRUUklCVVRFUywKKwkJCXNwLT5zY2FsZV94LCA3LCA3KTsKKworCS8qIFZFUlRJQ0FMIFJF U0laRSBFTkFCTEUgKi8KKwlWSURfUkVHX0ZMRF9NT0QoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19W SURfQVRUUklCVVRFUywKKwkJCXNwLT5zY2FsZV95LCA4LCA4KTsKKworCS8qIFNraXAgdGhlIHJl c3QgaWYgbm8gc2NhbGluZyBpcyB1c2VkICovCisJaWYgKCFzcC0+c2NhbGVfeCAmJiAhc3AtPnNj YWxlX3kpCisJCXJldHVybjsKKworCS8qIFZFUlRJQ0FMIDUtVEFQUyAgKi8KKwlWSURfUkVHX0ZM RF9NT0QoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURfQVRUUklCVVRFUywKKwkJCXNwLT5maXZl X3RhcHMsIDIxLCAyMSk7CisKKwlpZiAoZGlzcGNfZm91cmNjX2lzX3l1dihmb3VyY2MpKSB7CisJ CWlmIChzcC0+c2NhbGVfeCkgeworCQkJZGlzcGNfdmlkX3dyaXRlKGRpc3BjLCBod19wbGFuZSwg RElTUENfVklEX0ZJUkgyLAorCQkJCQlzcC0+ZmlyX3hpbmNfdXYpOworCQkJZGlzcGNfdmlkX3dy aXRlX2Zpcl9jb2VmcyhkaXNwYywgaHdfcGxhbmUsCisJCQkJCQkgIERJU1BDX1ZJRF9GSVJfQ09F Rl9IT1JJWl9VViwKKwkJCQkJCSAgc3AtPnhjb2VmX3V2KTsKKwkJfQorCQlpZiAoc3AtPnNjYWxl X3kpIHsKKwkJCWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUsIERJU1BDX1ZJRF9GSVJW MiwKKwkJCQkJc3AtPmZpcl95aW5jX3V2KTsKKwkJCWRpc3BjX3ZpZF93cml0ZV9maXJfY29lZnMo ZGlzcGMsIGh3X3BsYW5lLAorCQkJCQkJICBESVNQQ19WSURfRklSX0NPRUZfVkVSVF9VViwKKwkJ CQkJCSAgc3AtPnljb2VmX3V2KTsKKwkJfQorCX0KKworCWlmIChzcC0+c2NhbGVfeCkgeworCQlk aXNwY192aWRfd3JpdGUoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURfRklSSCwgc3AtPmZpcl94 aW5jKTsKKwkJZGlzcGNfdmlkX3dyaXRlX2Zpcl9jb2VmcyhkaXNwYywgaHdfcGxhbmUsCisJCQkJ CSAgRElTUENfVklEX0ZJUl9DT0VGX0hPUklaLAorCQkJCQkgIHNwLT54Y29lZik7CisJfQorCisJ aWYgKHNwLT5zY2FsZV95KSB7CisJCWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUsIERJ U1BDX1ZJRF9GSVJWLCBzcC0+ZmlyX3lpbmMpOworCQlkaXNwY192aWRfd3JpdGVfZmlyX2NvZWZz KGRpc3BjLCBod19wbGFuZSwKKwkJCQkJICBESVNQQ19WSURfRklSX0NPRUZfVkVSVCwgc3AtPnlj b2VmKTsKKwl9Cit9CisKKy8qIE9USEVSICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXUz MiBmb3VyY2M7CisJdTggZHNzX2NvZGU7Cit9IGRpc3BjX2NvbG9yX2Zvcm1hdHNbXSA9IHsKKwl7 IERSTV9GT1JNQVRfQVJHQjQ0NDQsIDB4MCwgfSwKKwl7IERSTV9GT1JNQVRfQUJHUjQ0NDQsIDB4 MSwgfSwKKwl7IERSTV9GT1JNQVRfUkdCQTQ0NDQsIDB4MiwgfSwKKworCXsgRFJNX0ZPUk1BVF9S R0I1NjUsIDB4MywgfSwKKwl7IERSTV9GT1JNQVRfQkdSNTY1LCAweDQsIH0sCisKKwl7IERSTV9G T1JNQVRfQVJHQjE1NTUsIDB4NSwgfSwKKwl7IERSTV9GT1JNQVRfQUJHUjE1NTUsIDB4NiwgfSwK KworCXsgRFJNX0ZPUk1BVF9BUkdCODg4OCwgMHg3LCB9LAorCXsgRFJNX0ZPUk1BVF9BQkdSODg4 OCwgMHg4LCB9LAorCXsgRFJNX0ZPUk1BVF9SR0JBODg4OCwgMHg5LCB9LAorCXsgRFJNX0ZPUk1B VF9CR1JBODg4OCwgMHhhLCB9LAorCisJeyBEUk1fRk9STUFUX1JHQjg4OCwgMHhiLCB9LAorCXsg RFJNX0ZPUk1BVF9CR1I4ODgsIDB4YywgfSwKKworCXsgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwg MHhlLCB9LAorCXsgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCwgMHhmLCB9LAorCisJeyBEUk1fRk9S TUFUX1hSR0I0NDQ0LCAweDIwLCB9LAorCXsgRFJNX0ZPUk1BVF9YQkdSNDQ0NCwgMHgyMSwgfSwK Kwl7IERSTV9GT1JNQVRfUkdCWDQ0NDQsIDB4MjIsIH0sCisKKwl7IERSTV9GT1JNQVRfQVJHQjE1 NTUsIDB4MjUsIH0sCisJeyBEUk1fRk9STUFUX0FCR1IxNTU1LCAweDI2LCB9LAorCisJeyBEUk1f Rk9STUFUX1hSR0I4ODg4LCAweDI3LCB9LAorCXsgRFJNX0ZPUk1BVF9YQkdSODg4OCwgMHgyOCwg fSwKKwl7IERSTV9GT1JNQVRfUkdCWDg4ODgsIDB4MjksIH0sCisJeyBEUk1fRk9STUFUX0JHUlg4 ODg4LCAweDJhLCB9LAorCisJeyBEUk1fRk9STUFUX1hSR0IyMTAxMDEwLCAweDJlLCB9LAorCXsg RFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwgMHgyZiwgfSwKKworCXsgRFJNX0ZPUk1BVF9ZVVlWLCAw eDNlLCB9LAorCXsgRFJNX0ZPUk1BVF9VWVZZLCAweDNmLCB9LAorCisJeyBEUk1fRk9STUFUX05W MTIsIDB4M2QsIH0sCit9OworCitzdGF0aWMgdm9pZCBkaXNwY19wbGFuZV9zZXRfcGl4ZWxfZm9y bWF0KHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkgdTMyIGh3X3BsYW5lLCB1MzIg Zm91cmNjKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoZGlzcGNfY29sb3JfZm9ybWF0cyk7ICsraSkgeworCQlpZiAoZGlzcGNfY29sb3JfZm9ybWF0 c1tpXS5mb3VyY2MgPT0gZm91cmNjKSB7CisJCQlWSURfUkVHX0ZMRF9NT0QoZGlzcGMsIGh3X3Bs YW5lLCBESVNQQ19WSURfQVRUUklCVVRFUywKKwkJCQkJZGlzcGNfY29sb3JfZm9ybWF0c1tpXS5k c3NfY29kZSwKKwkJCQkJNiwgMSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlXQVJOX09OKDEp OworfQorCitjb25zdCB1MzIgKmRpc3BjX3BsYW5lX2Zvcm1hdHMoc3RydWN0IGRpc3BjX2Rldmlj ZSAqZGlzcGMsIHVuc2lnbmVkIGludCAqbGVuKQoreworCVdBUk5fT04oIWRpc3BjLT5mb3VyY2Nz KTsKKworCSpsZW4gPSBkaXNwYy0+bnVtX2ZvdXJjY3M7CisKKwlyZXR1cm4gZGlzcGMtPmZvdXJj Y3M7Cit9CisKK3N0YXRpYyBzMzIgcGl4aW5jKGludCBwaXhlbHMsIHU4IHBzKQoreworCWlmIChw aXhlbHMgPT0gMSkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAocGl4ZWxzID4gMSkKKwkJcmV0dXJu IDEgKyAocGl4ZWxzIC0gMSkgKiBwczsKKwllbHNlIGlmIChwaXhlbHMgPCAwKQorCQlyZXR1cm4g MSAtICgtcGl4ZWxzICsgMSkgKiBwczsKKworCVdBUk5fT04oMSk7CisJcmV0dXJuIDA7Cit9CisK K2ludCBkaXNwY19wbGFuZV9jaGVjayhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywgdTMyIGh3 X3BsYW5lLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwKKwkJ ICAgICAgdTMyIGh3X3ZpZGVvcG9ydCkKK3sKKwlib29sIGxpdGUgPSBkaXNwYy0+ZmVhdC0+dmlk X2xpdGVbaHdfcGxhbmVdOworCXUzMiBmb3VyY2MgPSBzdGF0ZS0+ZmItPmZvcm1hdC0+Zm9ybWF0 OworCWJvb2wgbmVlZF9zY2FsaW5nID0gc3RhdGUtPnNyY193ID4+IDE2ICE9IHN0YXRlLT5jcnRj X3cgfHwKKwkJc3RhdGUtPnNyY19oID4+IDE2ICE9IHN0YXRlLT5jcnRjX2g7CisJc3RydWN0IGRp c3BjX3NjYWxpbmdfcGFyYW1zIHNjYWxpbmc7CisJaW50IHJldDsKKworCWlmIChkaXNwY19mb3Vy Y2NfaXNfeXV2KGZvdXJjYykpIHsKKwkJaWYgKCFkaXNwY19maW5kX2NzYyhzdGF0ZS0+Y29sb3Jf ZW5jb2RpbmcsCisJCQkJICAgIHN0YXRlLT5jb2xvcl9yYW5nZSkpIHsKKwkJCWRldl9kYmcoZGlz cGMtPmRldiwKKwkJCQkiJXM6IFVuc3VwcG9ydGVkIENTQyAoJXUsJXUpIGZvciBIVyBwbGFuZSAl dVxuIiwKKwkJCQlfX2Z1bmNfXywgc3RhdGUtPmNvbG9yX2VuY29kaW5nLAorCQkJCXN0YXRlLT5j b2xvcl9yYW5nZSwgaHdfcGxhbmUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlp ZiAobmVlZF9zY2FsaW5nKSB7CisJCWlmIChsaXRlKSB7CisJCQlkZXZfZGJnKGRpc3BjLT5kZXYs CisJCQkJIiVzOiBMaXRlIHBsYW5lICV1IGNhbid0IHNjYWxlICV1eCV1IT0ldXgldVxuIiwKKwkJ CQlfX2Z1bmNfXywgaHdfcGxhbmUsCisJCQkJc3RhdGUtPnNyY193ID4+IDE2LCBzdGF0ZS0+c3Jj X2ggPj4gMTYsCisJCQkJc3RhdGUtPmNydGNfdywgc3RhdGUtPmNydGNfaCk7CisJCQlyZXR1cm4g LUVJTlZBTDsKKwkJfQorCQlyZXQgPSBkaXNwY192aWRfY2FsY19zY2FsaW5nKGRpc3BjLCBzdGF0 ZSwgJnNjYWxpbmcsIGZhbHNlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYworZG1hX2FkZHJfdCBkaXNwY19wbGFuZV9zdGF0ZV9wYWRk cihjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpn ZW07CisJdTMyIHggPSBzdGF0ZS0+c3JjX3ggPj4gMTY7CisJdTMyIHkgPSBzdGF0ZS0+c3JjX3kg Pj4gMTY7CisKKwlnZW0gPSBkcm1fZmJfY21hX2dldF9nZW1fb2JqKHN0YXRlLT5mYiwgMCk7CisK KwlyZXR1cm4gZ2VtLT5wYWRkciArIGZiLT5vZmZzZXRzWzBdICsgeCAqIGZiLT5mb3JtYXQtPmNw cFswXSArCisJCXkgKiBmYi0+cGl0Y2hlc1swXTsKK30KKworc3RhdGljCitkbWFfYWRkcl90IGRp c3BjX3BsYW5lX3N0YXRlX3BfdXZfYWRkcihjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpz dGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsKKwlzdHJ1 Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpnZW07CisJdTMyIHggPSBzdGF0ZS0+c3JjX3ggPj4gMTY7 CisJdTMyIHkgPSBzdGF0ZS0+c3JjX3kgPj4gMTY7CisKKwlpZiAoV0FSTl9PTihzdGF0ZS0+ZmIt PmZvcm1hdC0+bnVtX3BsYW5lcyAhPSAyKSkKKwkJcmV0dXJuIDA7CisKKwlnZW0gPSBkcm1fZmJf Y21hX2dldF9nZW1fb2JqKGZiLCAxKTsKKworCXJldHVybiBnZW0tPnBhZGRyICsgZmItPm9mZnNl dHNbMV0gKworCQkoeCAqIGZiLT5mb3JtYXQtPmNwcFsxXSAvIGZiLT5mb3JtYXQtPmhzdWIpICsK KwkJKHkgKiBmYi0+cGl0Y2hlc1sxXSAvIGZiLT5mb3JtYXQtPnZzdWIpOworfQorCitpbnQgZGlz cGNfcGxhbmVfc2V0dXAoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBod19wbGFuZSwK KwkJICAgICAgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsCisJCSAgICAgIHUz MiBod192aWRlb3BvcnQpCit7CisJYm9vbCBsaXRlID0gZGlzcGMtPmZlYXQtPnZpZF9saXRlW2h3 X3BsYW5lXTsKKwl1MzIgZm91cmNjID0gc3RhdGUtPmZiLT5mb3JtYXQtPmZvcm1hdDsKKwl1MTYg Y3BwID0gc3RhdGUtPmZiLT5mb3JtYXQtPmNwcFswXTsKKwl1MzIgZmJfd2lkdGggPSBzdGF0ZS0+ ZmItPnBpdGNoZXNbMF0gLyBjcHA7CisJZG1hX2FkZHJfdCBwYWRkciA9IGRpc3BjX3BsYW5lX3N0 YXRlX3BhZGRyKHN0YXRlKTsKKwlzdHJ1Y3QgZGlzcGNfc2NhbGluZ19wYXJhbXMgc2NhbGU7CisK KwlkaXNwY192aWRfY2FsY19zY2FsaW5nKGRpc3BjLCBzdGF0ZSwgJnNjYWxlLCBsaXRlKTsKKwor CWRpc3BjX3BsYW5lX3NldF9waXhlbF9mb3JtYXQoZGlzcGMsIGh3X3BsYW5lLCBmb3VyY2MpOwor CisJZGlzcGNfdmlkX3dyaXRlKGRpc3BjLCBod19wbGFuZSwgRElTUENfVklEX0JBXzAsIHBhZGRy ICYgMHhmZmZmZmZmZik7CisJZGlzcGNfdmlkX3dyaXRlKGRpc3BjLCBod19wbGFuZSwgRElTUENf VklEX0JBX0VYVF8wLCAodTY0KXBhZGRyID4+IDMyKTsKKwlkaXNwY192aWRfd3JpdGUoZGlzcGMs IGh3X3BsYW5lLCBESVNQQ19WSURfQkFfMSwgcGFkZHIgJiAweGZmZmZmZmZmKTsKKwlkaXNwY192 aWRfd3JpdGUoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURfQkFfRVhUXzEsICh1NjQpcGFkZHIg Pj4gMzIpOworCisJZGlzcGNfdmlkX3dyaXRlKGRpc3BjLCBod19wbGFuZSwgRElTUENfVklEX1BJ Q1RVUkVfU0laRSwKKwkJCShzY2FsZS5pbl93IC0gMSkgfCAoKHNjYWxlLmluX2ggLSAxKSA8PCAx NikpOworCisJLyogRm9yIFlVVjQyMiBmb3JtYXQgd2UgdXNlIHRoZSBtYWNyb3BpeGVsIHNpemUg Zm9yIHBpeGVsIGluYyAqLworCWlmIChmb3VyY2MgPT0gRFJNX0ZPUk1BVF9ZVVlWIHx8IGZvdXJj YyA9PSBEUk1fRk9STUFUX1VZVlkpCisJCWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUs IERJU1BDX1ZJRF9QSVhFTF9JTkMsCisJCQkJcGl4aW5jKHNjYWxlLnhpbmMsIGNwcCAqIDIpKTsK KwllbHNlCisJCWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUsIERJU1BDX1ZJRF9QSVhF TF9JTkMsCisJCQkJcGl4aW5jKHNjYWxlLnhpbmMsIGNwcCkpOworCisJZGlzcGNfdmlkX3dyaXRl KGRpc3BjLCBod19wbGFuZSwgRElTUENfVklEX1JPV19JTkMsCisJCQlwaXhpbmMoMSArIChzY2Fs ZS55aW5jICogZmJfd2lkdGggLQorCQkJCSAgICBzY2FsZS54aW5jICogc2NhbGUuaW5fdyksCisJ CQkgICAgICAgY3BwKSk7CisKKwlpZiAoc3RhdGUtPmZiLT5mb3JtYXQtPm51bV9wbGFuZXMgPT0g MikgeworCQl1MTYgY3BwX3V2ID0gc3RhdGUtPmZiLT5mb3JtYXQtPmNwcFsxXTsKKwkJdTMyIGZi X3dpZHRoX3V2ID0gc3RhdGUtPmZiLT5waXRjaGVzWzFdIC8gY3BwX3V2OworCQlkbWFfYWRkcl90 IHBfdXZfYWRkciA9IGRpc3BjX3BsYW5lX3N0YXRlX3BfdXZfYWRkcihzdGF0ZSk7CisKKwkJZGlz cGNfdmlkX3dyaXRlKGRpc3BjLCBod19wbGFuZSwKKwkJCQlESVNQQ19WSURfQkFfVVZfMCwgcF91 dl9hZGRyICYgMHhmZmZmZmZmZik7CisJCWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUs CisJCQkJRElTUENfVklEX0JBX1VWX0VYVF8wLCAodTY0KXBfdXZfYWRkciA+PiAzMik7CisJCWRp c3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUsCisJCQkJRElTUENfVklEX0JBX1VWXzEsIHBf dXZfYWRkciAmIDB4ZmZmZmZmZmYpOworCQlkaXNwY192aWRfd3JpdGUoZGlzcGMsIGh3X3BsYW5l LAorCQkJCURJU1BDX1ZJRF9CQV9VVl9FWFRfMSwgKHU2NClwX3V2X2FkZHIgPj4gMzIpOworCisJ CWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUsIERJU1BDX1ZJRF9ST1dfSU5DX1VWLAor CQkJCXBpeGluYygxICsgKHNjYWxlLnlpbmMgKiBmYl93aWR0aF91diAtCisJCQkJCSAgICBzY2Fs ZS54aW5jICogc2NhbGUuaW5fd191diksCisJCQkJICAgICAgIGNwcF91dikpOworCX0KKworCWlm ICghbGl0ZSkgeworCQlkaXNwY192aWRfd3JpdGUoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURf U0laRSwKKwkJCQkoc3RhdGUtPmNydGNfdyAtIDEpIHwKKwkJCQkoKHN0YXRlLT5jcnRjX2ggLSAx KSA8PCAxNikpOworCisJCWRpc3BjX3ZpZF9zZXRfc2NhbGluZyhkaXNwYywgaHdfcGxhbmUsICZz Y2FsZSwgZm91cmNjKTsKKwl9CisKKwkvKiBlbmFibGUgWVVWLT5SR0IgY29sb3IgY29udmVyc2lv biAqLworCWlmIChkaXNwY19mb3VyY2NfaXNfeXV2KGZvdXJjYykpIHsKKwkJZGlzcGNfdmlkX2Nz Y19zZXR1cChkaXNwYywgaHdfcGxhbmUsIHN0YXRlKTsKKwkJZGlzcGNfdmlkX2NzY19lbmFibGUo ZGlzcGMsIGh3X3BsYW5lLCB0cnVlKTsKKwl9IGVsc2UgeworCQlkaXNwY192aWRfY3NjX2VuYWJs ZShkaXNwYywgaHdfcGxhbmUsIGZhbHNlKTsKKwl9CisKKwlkaXNwY192aWRfd3JpdGUoZGlzcGMs IGh3X3BsYW5lLCBESVNQQ19WSURfR0xPQkFMX0FMUEhBLAorCQkJMHhGRiAmIChzdGF0ZS0+YWxw aGEgPj4gOCkpOworCisJaWYgKHN0YXRlLT5waXhlbF9ibGVuZF9tb2RlID09IERSTV9NT0RFX0JM RU5EX1BSRU1VTFRJKQorCQlWSURfUkVHX0ZMRF9NT0QoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19W SURfQVRUUklCVVRFUywgMSwgMjgsIDI4KTsKKwllbHNlCisJCVZJRF9SRUdfRkxEX01PRChkaXNw YywgaHdfcGxhbmUsIERJU1BDX1ZJRF9BVFRSSUJVVEVTLCAwLCAyOCwgMjgpOworCisJZGlzcGNf b3ZyX3NldF9wbGFuZShkaXNwYywgaHdfcGxhbmUsIGh3X3ZpZGVvcG9ydCwKKwkJCSAgICBzdGF0 ZS0+Y3J0Y194LCBzdGF0ZS0+Y3J0Y195LAorCQkJICAgIHN0YXRlLT5ub3JtYWxpemVkX3pwb3Mp OworCisJZGlzcGMtPnBsYW5lX2RhdGFbaHdfcGxhbmVdLnpvcmRlciA9IHN0YXRlLT5ub3JtYWxp emVkX3pwb3M7CisJZGlzcGMtPnBsYW5lX2RhdGFbaHdfcGxhbmVdLmh3X3ZpZGVvcG9ydCA9IGh3 X3ZpZGVvcG9ydDsKKworCXJldHVybiAwOworfQorCitpbnQgZGlzcGNfcGxhbmVfZW5hYmxlKHN0 cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfcGxhbmUsIGJvb2wgZW5hYmxlKQorewor CWRpc3BjX292cl9lbmFibGVfcGxhbmUoZGlzcGMsIGRpc3BjLT5wbGFuZV9kYXRhW2h3X3BsYW5l XS5od192aWRlb3BvcnQsCisJCQkgICAgICAgZGlzcGMtPnBsYW5lX2RhdGFbaHdfcGxhbmVdLnpv cmRlciwgZW5hYmxlKTsKKworCVZJRF9SRUdfRkxEX01PRChkaXNwYywgaHdfcGxhbmUsIERJU1BD X1ZJRF9BVFRSSUJVVEVTLCAhIWVuYWJsZSwgMCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHUzMiBkaXNwY192aWRfZ2V0X2ZpZm9fc2l6ZShzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNw YywgdTMyIGh3X3BsYW5lKQoreworCXJldHVybiBWSURfUkVHX0dFVChkaXNwYywgaHdfcGxhbmUs IERJU1BDX1ZJRF9CVUZfU0laRV9TVEFUVVMsIDE1LCAwKTsKK30KKworc3RhdGljIHZvaWQgZGlz cGNfdmlkX3NldF9tZmxhZ190aHJlc2hvbGQoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJ CQkJCSAgdTMyIGh3X3BsYW5lLCB1MzIgbG93LCB1MzIgaGlnaCkKK3sKKwlkaXNwY192aWRfd3Jp dGUoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURfTUZMQUdfVEhSRVNIT0xELAorCQkJRkxEX1ZB TChoaWdoLCAzMSwgMTYpIHwgRkxEX1ZBTChsb3csIDE1LCAwKSk7Cit9CisKK3N0YXRpYyB2b2lk IGRpc3BjX3ZpZF9zZXRfYnVmX3RocmVzaG9sZChzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywK KwkJCQkJdTMyIGh3X3BsYW5lLCB1MzIgbG93LCB1MzIgaGlnaCkKK3sKKwlkaXNwY192aWRfd3Jp dGUoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURfQlVGX1RIUkVTSE9MRCwKKwkJCUZMRF9WQUwo aGlnaCwgMzEsIDE2KSB8IEZMRF9WQUwobG93LCAxNSwgMCkpOworfQorCitzdGF0aWMgdm9pZCBk aXNwY19rMmdfcGxhbmVfaW5pdChzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYykKK3sKKwl1bnNp Z25lZCBpbnQgaHdfcGxhbmU7CisKKwlkZXZfZGJnKGRpc3BjLT5kZXYsICIlcygpXG4iLCBfX2Z1 bmNfXyk7CisKKwkvKiBNRkxBR19DVFJMID0gRU5BQkxFRCAqLworCVJFR19GTERfTU9EKGRpc3Bj LCBESVNQQ19HTE9CQUxfTUZMQUdfQVRUUklCVVRFLCAyLCAxLCAwKTsKKwkvKiBNRkxBR19TVEFS VCA9IE1GTEFHTk9STUFMU1RBUlRNT0RFICovCisJUkVHX0ZMRF9NT0QoZGlzcGMsIERJU1BDX0dM T0JBTF9NRkxBR19BVFRSSUJVVEUsIDAsIDYsIDYpOworCisJZm9yIChod19wbGFuZSA9IDA7IGh3 X3BsYW5lIDwgZGlzcGMtPmZlYXQtPm51bV9wbGFuZXM7IGh3X3BsYW5lKyspIHsKKwkJdTMyIHNp emUgPSBkaXNwY192aWRfZ2V0X2ZpZm9fc2l6ZShkaXNwYywgaHdfcGxhbmUpOworCQl1MzIgdGhy X2xvdywgdGhyX2hpZ2g7CisJCXUzMiBtZmxhZ19sb3csIG1mbGFnX2hpZ2g7CisJCXUzMiBwcmVs b2FkOworCisJCXRocl9oaWdoID0gc2l6ZSAtIDE7CisJCXRocl9sb3cgPSBzaXplIC8gMjsKKwor CQltZmxhZ19oaWdoID0gc2l6ZSAqIDIgLyAzOworCQltZmxhZ19sb3cgPSBzaXplIC8gMzsKKwor CQlwcmVsb2FkID0gdGhyX2xvdzsKKworCQlkZXZfZGJnKGRpc3BjLT5kZXYsCisJCQkiJXM6IGJ1 ZnNpemUgJXUsIGJ1Zl90aHJlc2hvbGQgJXUvJXUsIG1mbGFnIHRocmVzaG9sZCAldS8ldSBwcmVs b2FkICV1XG4iLAorCQkJZGlzcGMtPmZlYXQtPnZpZF9uYW1lW2h3X3BsYW5lXSwKKwkJCXNpemUs CisJCQl0aHJfaGlnaCwgdGhyX2xvdywKKwkJCW1mbGFnX2hpZ2gsIG1mbGFnX2xvdywKKwkJCXBy ZWxvYWQpOworCisJCWRpc3BjX3ZpZF9zZXRfYnVmX3RocmVzaG9sZChkaXNwYywgaHdfcGxhbmUs CisJCQkJCSAgICB0aHJfbG93LCB0aHJfaGlnaCk7CisJCWRpc3BjX3ZpZF9zZXRfbWZsYWdfdGhy ZXNob2xkKGRpc3BjLCBod19wbGFuZSwKKwkJCQkJICAgICAgbWZsYWdfbG93LCBtZmxhZ19oaWdo KTsKKworCQlkaXNwY192aWRfd3JpdGUoZGlzcGMsIGh3X3BsYW5lLCBESVNQQ19WSURfUFJFTE9B RCwgcHJlbG9hZCk7CisKKwkJLyogUHJlZmVjaCB1cCB0byBQUkVMT0FEIHZhbHVlICovCisJCVZJ RF9SRUdfRkxEX01PRChkaXNwYywgaHdfcGxhbmUsIERJU1BDX1ZJRF9BVFRSSUJVVEVTLCAwLCAx OSwgMTkpOworCX0KK30KKworc3RhdGljIHZvaWQgZGlzcGNfazNfcGxhbmVfaW5pdChzdHJ1Y3Qg ZGlzcGNfZGV2aWNlICpkaXNwYykKK3sKKwl1bnNpZ25lZCBpbnQgaHdfcGxhbmU7CisJdTMyIGNi YV9sb19wcmkgPSAxOworCXUzMiBjYmFfaGlfcHJpID0gMDsKKworCWRldl9kYmcoZGlzcGMtPmRl diwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCVJFR19GTERfTU9EKGRpc3BjLCBEU1NfQ0JBX0NG RywgY2JhX2xvX3ByaSwgMiwgMCk7CisJUkVHX0ZMRF9NT0QoZGlzcGMsIERTU19DQkFfQ0ZHLCBj YmFfaGlfcHJpLCA1LCAzKTsKKworCS8qIE1GTEFHX0NUUkwgPSBFTkFCTEVEICovCisJUkVHX0ZM RF9NT0QoZGlzcGMsIERJU1BDX0dMT0JBTF9NRkxBR19BVFRSSUJVVEUsIDIsIDEsIDApOworCS8q IE1GTEFHX1NUQVJUID0gTUZMQUdOT1JNQUxTVEFSVE1PREUgKi8KKwlSRUdfRkxEX01PRChkaXNw YywgRElTUENfR0xPQkFMX01GTEFHX0FUVFJJQlVURSwgMCwgNiwgNik7CisKKwlmb3IgKGh3X3Bs YW5lID0gMDsgaHdfcGxhbmUgPCBkaXNwYy0+ZmVhdC0+bnVtX3BsYW5lczsgaHdfcGxhbmUrKykg eworCQl1MzIgc2l6ZSA9IGRpc3BjX3ZpZF9nZXRfZmlmb19zaXplKGRpc3BjLCBod19wbGFuZSk7 CisJCXUzMiB0aHJfbG93LCB0aHJfaGlnaDsKKwkJdTMyIG1mbGFnX2xvdywgbWZsYWdfaGlnaDsK KwkJdTMyIHByZWxvYWQ7CisKKwkJdGhyX2hpZ2ggPSBzaXplIC0gMTsKKwkJdGhyX2xvdyA9IHNp emUgLyAyOworCisJCW1mbGFnX2hpZ2ggPSBzaXplICogMiAvIDM7CisJCW1mbGFnX2xvdyA9IHNp emUgLyAzOworCisJCXByZWxvYWQgPSB0aHJfbG93OworCisJCWRldl9kYmcoZGlzcGMtPmRldiwK KwkJCSIlczogYnVmc2l6ZSAldSwgYnVmX3RocmVzaG9sZCAldS8ldSwgbWZsYWcgdGhyZXNob2xk ICV1LyV1IHByZWxvYWQgJXVcbiIsCisJCQlkaXNwYy0+ZmVhdC0+dmlkX25hbWVbaHdfcGxhbmVd LAorCQkJc2l6ZSwKKwkJCXRocl9oaWdoLCB0aHJfbG93LAorCQkJbWZsYWdfaGlnaCwgbWZsYWdf bG93LAorCQkJcHJlbG9hZCk7CisKKwkJZGlzcGNfdmlkX3NldF9idWZfdGhyZXNob2xkKGRpc3Bj LCBod19wbGFuZSwKKwkJCQkJICAgIHRocl9sb3csIHRocl9oaWdoKTsKKwkJZGlzcGNfdmlkX3Nl dF9tZmxhZ190aHJlc2hvbGQoZGlzcGMsIGh3X3BsYW5lLAorCQkJCQkgICAgICBtZmxhZ19sb3cs IG1mbGFnX2hpZ2gpOworCisJCWRpc3BjX3ZpZF93cml0ZShkaXNwYywgaHdfcGxhbmUsIERJU1BD X1ZJRF9QUkVMT0FELCBwcmVsb2FkKTsKKworCQkvKiBQcmVmZWNoIHVwIHRvIFBSRUxPQUQgdmFs dWUgKi8KKwkJVklEX1JFR19GTERfTU9EKGRpc3BjLCBod19wbGFuZSwgRElTUENfVklEX0FUVFJJ QlVURVMsIDAsIDE5LCAxOSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkaXNwY19wbGFuZV9pbml0 KHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjKQoreworCXN3aXRjaCAoZGlzcGMtPmZlYXQtPnN1 YnJldikgeworCWNhc2UgRElTUENfSzJHOgorCQlkaXNwY19rMmdfcGxhbmVfaW5pdChkaXNwYyk7 CisJCWJyZWFrOworCWNhc2UgRElTUENfQU02NVg6CisJY2FzZSBESVNQQ19KNzIxRToKKwkJZGlz cGNfazNfcGxhbmVfaW5pdChkaXNwYyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04o MSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkaXNwY192cF9pbml0KHN0cnVjdCBkaXNwY19kZXZp Y2UgKmRpc3BjKQoreworCXVuc2lnbmVkIGludCBpOworCisJZGV2X2RiZyhkaXNwYy0+ZGV2LCAi JXMoKVxuIiwgX19mdW5jX18pOworCisJLyogRW5hYmxlIHRoZSBnYW1tYSBTaGFkb3cgYml0LWZp ZWxkIGZvciBhbGwgVlBzKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGlzcGMtPmZlYXQtPm51bV92cHM7 IGkrKykKKwkJVlBfUkVHX0ZMRF9NT0QoZGlzcGMsIGksIERJU1BDX1ZQX0NPTkZJRywgMSwgMiwg Mik7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjX2luaXRpYWxfY29uZmlnKHN0cnVjdCBkaXNwY19k ZXZpY2UgKmRpc3BjKQoreworCWRpc3BjX3BsYW5lX2luaXQoZGlzcGMpOworCWRpc3BjX3ZwX2lu aXQoZGlzcGMpOworCisJLyogTm90ZTogSGFyZGNvZGVkIERQSSByb3V0aW5nIG9uIEo3MjFFIGZv ciBub3cgKi8KKwlpZiAoZGlzcGMtPmZlYXQtPnN1YnJldiA9PSBESVNQQ19KNzIxRSkgeworCQlk aXNwY193cml0ZShkaXNwYywgRElTUENfQ09OTkVDVElPTlMsCisJCQkgICAgRkxEX1ZBTCgyLCAz LCAwKSB8CQkvKiBWUDEgdG8gRFBJMCAqLworCQkJICAgIEZMRF9WQUwoOCwgNywgNCkJCS8qIFZQ MyB0byBEUEkxICovCisJCQkpOworCX0KK30KKworc3RhdGljIHZvaWQgZGlzcGNfazJnX3ZwX3dy aXRlX2dhbW1hX3RhYmxlKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkgICB1MzIg aHdfdmlkZW9wb3J0KQoreworCXUzMiAqdGFibGUgPSBkaXNwYy0+dnBfZGF0YVtod192aWRlb3Bv cnRdLmdhbW1hX3RhYmxlOworCXUzMiBod2xlbiA9IGRpc3BjLT5mZWF0LT52cF9mZWF0LmNvbG9y LmdhbW1hX3NpemU7CisJdW5zaWduZWQgaW50IGk7CisKKwlkZXZfZGJnKGRpc3BjLT5kZXYsICIl czogaHdfdmlkZW9wb3J0ICVkXG4iLCBfX2Z1bmNfXywgaHdfdmlkZW9wb3J0KTsKKworCWlmIChX QVJOX09OKGRpc3BjLT5mZWF0LT52cF9mZWF0LmNvbG9yLmdhbW1hX3R5cGUgIT0gVElEU1NfR0FN TUFfOEJJVCkpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBod2xlbjsgKytpKSB7CisJ CXUzMiB2ID0gdGFibGVbaV07CisKKwkJdiB8PSBpIDw8IDI0OworCisJCWRpc3BjX3ZwX3dyaXRl KGRpc3BjLCBod192aWRlb3BvcnQsIERJU1BDX1ZQX0syR19HQU1NQV9UQUJMRSwKKwkJCSAgICAg ICB2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjX2FtNjV4X3ZwX3dyaXRlX2dhbW1hX3Rh YmxlKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCQkgICAgIHUzMiBod192aWRlb3Bv cnQpCit7CisJdTMyICp0YWJsZSA9IGRpc3BjLT52cF9kYXRhW2h3X3ZpZGVvcG9ydF0uZ2FtbWFf dGFibGU7CisJdTMyIGh3bGVuID0gZGlzcGMtPmZlYXQtPnZwX2ZlYXQuY29sb3IuZ2FtbWFfc2l6 ZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWRldl9kYmcoZGlzcGMtPmRldiwgIiVzOiBod192aWRl b3BvcnQgJWRcbiIsIF9fZnVuY19fLCBod192aWRlb3BvcnQpOworCisJaWYgKFdBUk5fT04oZGlz cGMtPmZlYXQtPnZwX2ZlYXQuY29sb3IuZ2FtbWFfdHlwZSAhPSBUSURTU19HQU1NQV84QklUKSkK KwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGh3bGVuOyArK2kpIHsKKwkJdTMyIHYgPSB0 YWJsZVtpXTsKKworCQl2IHw9IGkgPDwgMjQ7CisKKwkJZGlzcGNfdnBfd3JpdGUoZGlzcGMsIGh3 X3ZpZGVvcG9ydCwgRElTUENfVlBfR0FNTUFfVEFCTEUsIHYpOworCX0KK30KKworc3RhdGljIHZv aWQgZGlzcGNfajcyMWVfdnBfd3JpdGVfZ2FtbWFfdGFibGUoc3RydWN0IGRpc3BjX2RldmljZSAq ZGlzcGMsCisJCQkJCSAgICAgdTMyIGh3X3ZpZGVvcG9ydCkKK3sKKwl1MzIgKnRhYmxlID0gZGlz cGMtPnZwX2RhdGFbaHdfdmlkZW9wb3J0XS5nYW1tYV90YWJsZTsKKwl1MzIgaHdsZW4gPSBkaXNw Yy0+ZmVhdC0+dnBfZmVhdC5jb2xvci5nYW1tYV9zaXplOworCXVuc2lnbmVkIGludCBpOworCisJ ZGV2X2RiZyhkaXNwYy0+ZGV2LCAiJXM6IGh3X3ZpZGVvcG9ydCAlZFxuIiwgX19mdW5jX18sIGh3 X3ZpZGVvcG9ydCk7CisKKwlpZiAoV0FSTl9PTihkaXNwYy0+ZmVhdC0+dnBfZmVhdC5jb2xvci5n YW1tYV90eXBlICE9IFRJRFNTX0dBTU1BXzEwQklUKSkKKwkJcmV0dXJuOworCisJZm9yIChpID0g MDsgaSA8IGh3bGVuOyArK2kpIHsKKwkJdTMyIHYgPSB0YWJsZVtpXTsKKworCQlpZiAoaSA9PSAw KQorCQkJdiB8PSAxIDw8IDMxOworCisJCWRpc3BjX3ZwX3dyaXRlKGRpc3BjLCBod192aWRlb3Bv cnQsIERJU1BDX1ZQX0dBTU1BX1RBQkxFLCB2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRpc3Bj X3ZwX3dyaXRlX2dhbW1hX3RhYmxlKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLAorCQkJCSAg ICAgICB1MzIgaHdfdmlkZW9wb3J0KQoreworCXN3aXRjaCAoZGlzcGMtPmZlYXQtPnN1YnJldikg eworCWNhc2UgRElTUENfSzJHOgorCQlkaXNwY19rMmdfdnBfd3JpdGVfZ2FtbWFfdGFibGUoZGlz cGMsIGh3X3ZpZGVvcG9ydCk7CisJCWJyZWFrOworCWNhc2UgRElTUENfQU02NVg6CisJCWRpc3Bj X2FtNjV4X3ZwX3dyaXRlX2dhbW1hX3RhYmxlKGRpc3BjLCBod192aWRlb3BvcnQpOworCQlicmVh azsKKwljYXNlIERJU1BDX0o3MjFFOgorCQlkaXNwY19qNzIxZV92cF93cml0ZV9nYW1tYV90YWJs ZShkaXNwYywgaHdfdmlkZW9wb3J0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigx KTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBkaXNwY19yZXN0b3JlX2dhbW1hX3Rh YmxlcyhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwor CWRldl9kYmcoZGlzcGMtPmRldiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCWZvciAoaSA9IDA7 IGkgPCBkaXNwYy0+ZmVhdC0+bnVtX3ZwczsgaSsrKQorCQlkaXNwY192cF93cml0ZV9nYW1tYV90 YWJsZShkaXNwYywgaSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NvbG9yX2x1dCBk aXNwY192cF9nYW1tYV9kZWZhdWx0X2x1dFtdID0geworCXsgLnJlZCA9IDAsIC5ncmVlbiA9IDAs IC5ibHVlID0gMCwgfSwKKwl7IC5yZWQgPSBVMTZfTUFYLCAuZ3JlZW4gPSBVMTZfTUFYLCAuYmx1 ZSA9IFUxNl9NQVgsIH0sCit9OworCitzdGF0aWMgdm9pZCBkaXNwY192cF9zZXRfZ2FtbWEoc3Ry dWN0IGRpc3BjX2RldmljZSAqZGlzcGMsCisJCQkgICAgICAgdTMyIGh3X3ZpZGVvcG9ydCwKKwkJ CSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAqbHV0LAorCQkJICAgICAgIHVuc2ln bmVkIGludCBsZW5ndGgpCit7CisJdTMyICp0YWJsZSA9IGRpc3BjLT52cF9kYXRhW2h3X3ZpZGVv cG9ydF0uZ2FtbWFfdGFibGU7CisJdTMyIGh3bGVuID0gZGlzcGMtPmZlYXQtPnZwX2ZlYXQuY29s b3IuZ2FtbWFfc2l6ZTsKKwl1MzIgaHdiaXRzOworCXVuc2lnbmVkIGludCBpOworCisJZGV2X2Ri ZyhkaXNwYy0+ZGV2LCAiJXM6IGh3X3ZpZGVvcG9ydCAlZCwgbHV0IGxlbiAldSwgaHcgbGVuICV1 XG4iLAorCQlfX2Z1bmNfXywgaHdfdmlkZW9wb3J0LCBsZW5ndGgsIGh3bGVuKTsKKworCWlmIChk aXNwYy0+ZmVhdC0+dnBfZmVhdC5jb2xvci5nYW1tYV90eXBlID09IFRJRFNTX0dBTU1BXzEwQklU KQorCQlod2JpdHMgPSAxMDsKKwllbHNlCisJCWh3Yml0cyA9IDg7CisKKwlpZiAobHV0ID09IE5V TEwgfHwgbGVuZ3RoIDwgMikgeworCQlsdXQgPSBkaXNwY192cF9nYW1tYV9kZWZhdWx0X2x1dDsK KwkJbGVuZ3RoID0gQVJSQVlfU0laRShkaXNwY192cF9nYW1tYV9kZWZhdWx0X2x1dCk7CisJfQor CisJZm9yIChpID0gMDsgaSA8IGxlbmd0aCAtIDE7ICsraSkgeworCQl1bnNpZ25lZCBpbnQgZmly c3QgPSBpICogKGh3bGVuIC0gMSkgLyAobGVuZ3RoIC0gMSk7CisJCXVuc2lnbmVkIGludCBsYXN0 ID0gKGkgKyAxKSAqIChod2xlbiAtIDEpIC8gKGxlbmd0aCAtIDEpOworCQl1bnNpZ25lZCBpbnQg dyA9IGxhc3QgLSBmaXJzdDsKKwkJdTE2IHIsIGcsIGI7CisJCXVuc2lnbmVkIGludCBqOworCisJ CWlmICh3ID09IDApCisJCQljb250aW51ZTsKKworCQlmb3IgKGogPSAwOyBqIDw9IHc7IGorKykg eworCQkJciA9IChsdXRbaV0ucmVkICogKHcgLSBqKSArIGx1dFtpICsgMV0ucmVkICogaikgLyB3 OworCQkJZyA9IChsdXRbaV0uZ3JlZW4gKiAodyAtIGopICsgbHV0W2kgKyAxXS5ncmVlbiAqIGop IC8gdzsKKwkJCWIgPSAobHV0W2ldLmJsdWUgKiAodyAtIGopICsgbHV0W2kgKyAxXS5ibHVlICog aikgLyB3OworCisJCQlyID4+PSAxNiAtIGh3Yml0czsKKwkJCWcgPj49IDE2IC0gaHdiaXRzOwor CQkJYiA+Pj0gMTYgLSBod2JpdHM7CisKKwkJCXRhYmxlW2ZpcnN0ICsgal0gPSAociA8PCAoaHdi aXRzICogMikpIHwKKwkJCQkoZyA8PCBod2JpdHMpIHwgYjsKKwkJfQorCX0KKworCWlmIChkaXNw Yy0+aXNfZW5hYmxlZCkKKwkJZGlzcGNfdnBfd3JpdGVfZ2FtbWFfdGFibGUoZGlzcGMsIGh3X3Zp ZGVvcG9ydCk7Cit9CisKK3N0YXRpYyBzMTYgZGlzcGNfUzMxXzMyX3RvX3MyXzgoczY0IGNvZWYp Cit7CisJdTY0IHNpZ25fYml0ID0gMVVMTCA8PCA2MzsKKwl1NjQgY2JpdHMgPSAodTY0KSBjb2Vm OworCXMxNiByZXQgPSBjbGFtcF92YWwoKChjYml0cyAmIH5zaWduX2JpdCkgPj4gMjQpLCAwLCAw eDFGRik7CisKKwlpZiAoY2JpdHMgJiBzaWduX2JpdCkKKwkJcmV0ID0gLXJldDsKKworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BjX2Nwcl9jc2NfZnJvbV9jdG0oY29uc3Qgc3Ry dWN0IGRybV9jb2xvcl9jdG0gKmN0bSwKKwkJCQkgICBzdHJ1Y3QgZGlzcGNfY3NjX2NvZWYgKmNw cikKK3sKKwltZW1zZXQoY3ByLCAwLCBzaXplb2YoKmNwcikpOworCisJY3ByLT50b19yZWd2YWwg PSBkaXNwY19jc2NfY3ByX3JlZ3ZhbDsKKwljcHItPm1bQ1NDX1JSXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzBdKTsKKwljcHItPm1bQ1NDX1JHXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzFdKTsKKwljcHItPm1bQ1NDX1JCXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzJdKTsKKwljcHItPm1bQ1NDX0dSXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzNdKTsKKwljcHItPm1bQ1NDX0dHXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzRdKTsKKwljcHItPm1bQ1NDX0dCXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzVdKTsKKwljcHItPm1bQ1NDX0JSXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzZdKTsKKwljcHItPm1bQ1NDX0JHXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzddKTsKKwljcHItPm1bQ1NDX0JCXSA9IGRpc3BjX1MzMV8zMl90 b19zMl84KGN0bS0+bWF0cml4WzhdKTsKK30KKworc3RhdGljIHZvaWQgZGlzcGNfdnBfd3JpdGVf Y3NjKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0LAorCQkJICAg ICAgIGNvbnN0IHN0cnVjdCBkaXNwY19jc2NfY29lZiAqY3NjKQoreworCXN0YXRpYyBjb25zdCB1 MTYgZGlzcGNfdnBfY3NjX2NvZWZfcmVnW0RJU1BDX0NTQ19SRUdWQUxfTEVOXSA9IHsKKwkJRElT UENfVlBfQ1NDX0NPRUYwLCBESVNQQ19WUF9DU0NfQ09FRjEsIERJU1BDX1ZQX0NTQ19DT0VGMiwK KwkJRElTUENfVlBfQ1NDX0NPRUYzLCBESVNQQ19WUF9DU0NfQ09FRjQsIERJU1BDX1ZQX0NTQ19D T0VGNSwKKwkJRElTUENfVlBfQ1NDX0NPRUY2LCBESVNQQ19WUF9DU0NfQ09FRjcsCisJfTsKKwl1 MzIgcmVndmFsW0RJU1BDX0NTQ19SRUdWQUxfTEVOXTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlm ICghV0FSTl9PTihkaXNwYy0+ZmVhdC0+c3VicmV2ID09IERJU1BDX0syRykpCisJCXJldHVybjsK KworCWNzYy0+dG9fcmVndmFsKGNzYywgcmVndmFsKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKHJlZ3ZhbCk7IGkrKykKKwkJZGlzcGNfdnBfd3JpdGUoZGlzcGMsIGh3X3ZpZGVvcG9y dCwgZGlzcGNfdnBfY3NjX2NvZWZfcmVnW2ldLAorCQkJICAgICAgIHJlZ3ZhbFtpXSk7Cit9CisK K3N0YXRpYyB2b2lkIGRpc3BjX3ZwX3NldF9jb2xvcl9tZ210KHN0cnVjdCBkaXNwY19kZXZpY2Ug KmRpc3BjLAorCQkJCSAgICB1MzIgaHdfdmlkZW9wb3J0LAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qg ZHJtX2NydGNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQgPSBO VUxMOworCXVuc2lnbmVkIGludCBsZW5ndGggPSAwOworCWJvb2wgY29sb3Jjb252ZW5hYmxlID0g ZmFsc2U7CisKKwlpZiAoIXN0YXRlLT5jb2xvcl9tZ210X2NoYW5nZWQpCisJCXJldHVybjsKKwor CWlmIChzdGF0ZS0+Z2FtbWFfbHV0KSB7CisJCWx1dCA9IChzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAq KSBzdGF0ZS0+Z2FtbWFfbHV0LT5kYXRhOworCQlsZW5ndGggPSBzdGF0ZS0+Z2FtbWFfbHV0LT5s ZW5ndGggLyBzaXplb2YoKmx1dCk7CisJfQorCisJaWYgKHN0YXRlLT5jdG0pIHsKKwkJc3RydWN0 IGRybV9jb2xvcl9jdG0gKmN0bSA9CisJCQkoc3RydWN0IGRybV9jb2xvcl9jdG0gKikgc3RhdGUt PmN0bS0+ZGF0YTsKKwkJc3RydWN0IGRpc3BjX2NzY19jb2VmIGNwcjsKKworCQlkaXNwY19jcHJf Y3NjX2Zyb21fY3RtKGN0bSwgJmNwcik7CisJCWRpc3BjX3ZwX3dyaXRlX2NzYyhkaXNwYywgaHdf dmlkZW9wb3J0LCAmY3ByKTsKKworCQljb2xvcmNvbnZlbmFibGUgPSB0cnVlOworCX0KKworCWRp c3BjX3ZwX3NldF9nYW1tYShkaXNwYywgaHdfdmlkZW9wb3J0LCBsdXQsIGxlbmd0aCk7CisJVlBf UkVHX0ZMRF9NT0QoZGlzcGMsIGh3X3ZpZGVvcG9ydCwgRElTUENfVlBfQ09ORklHLAorCQkgICAg ICAgY29sb3Jjb252ZW5hYmxlLCAyNCwgMjQpOworfQorCit2b2lkIGRpc3BjX3ZwX3NldHVwKHN0 cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0LAorCQkgICAgY29uc3Qg c3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKK3sKKwlkaXNwY192cF9zZXRfZGVmYXVsdF9j b2xvcihkaXNwYywgaHdfdmlkZW9wb3J0LCAwKTsKKwlkaXNwY192cF9zZXRfY29sb3JfbWdtdChk aXNwYywgaHdfdmlkZW9wb3J0LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgZGlzcGNfaW5pdF9n YW1tYV90YWJsZXMoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMpCit7CisJdW5zaWduZWQgaW50 IGk7CisKKwlkZXZfZGJnKGRpc3BjLT5kZXYsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgZGlzcGMtPmZlYXQtPm51bV92cHM7IGkrKykKKwkJZGlzcGNfdnBfc2V0X2dh bW1hKGRpc3BjLCBpLCBOVUxMLCAwKTsKKworCXJldHVybiAwOworfQorCitpbnQgZGlzcGNfcnVu dGltZV9zdXNwZW5kKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjKQoreworCWRldl9kYmcoZGlz cGMtPmRldiwgInN1c3BlbmRcbiIpOworCisJZGlzcGMtPmlzX2VuYWJsZWQgPSBmYWxzZTsKKwor CWNsa19kaXNhYmxlX3VucHJlcGFyZShkaXNwYy0+ZmNsayk7CisKKwlyZXR1cm4gMDsKK30KKwor aW50IGRpc3BjX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjKQorewor CWRldl9kYmcoZGlzcGMtPmRldiwgInJlc3VtZVxuIik7CisKKwljbGtfcHJlcGFyZV9lbmFibGUo ZGlzcGMtPmZjbGspOworCisJaWYgKFJFR19HRVQoZGlzcGMsIERTU19TWVNTVEFUVVMsIDAsIDAp ID09IDApCisJCWRldl93YXJuKGRpc3BjLT5kZXYsICJEU1MgRlVOQyBSRVNFVCBub3QgZG9uZSFc biIpOworCisJZGV2X2RiZyhkaXNwYy0+ZGV2LCAiT01BUCBEU1M3IHJldiAweCV4XG4iLAorCQlk aXNwY19yZWFkKGRpc3BjLCBEU1NfUkVWSVNJT04pKTsKKworCWRldl9kYmcoZGlzcGMtPmRldiwg IlZQIFJFU0VURE9ORSAlZCwlZCwlZFxuIiwKKwkJUkVHX0dFVChkaXNwYywgRFNTX1NZU1NUQVRV UywgMSwgMSksCisJCVJFR19HRVQoZGlzcGMsIERTU19TWVNTVEFUVVMsIDIsIDIpLAorCQlSRUdf R0VUKGRpc3BjLCBEU1NfU1lTU1RBVFVTLCAzLCAzKSk7CisKKwlpZiAoZGlzcGMtPmZlYXQtPnN1 YnJldiA9PSBESVNQQ19BTTY1WCkKKwkJZGV2X2RiZyhkaXNwYy0+ZGV2LCAiT0xESSBSRVNFVERP TkUgJWQsJWQsJWRcbiIsCisJCQlSRUdfR0VUKGRpc3BjLCBEU1NfU1lTU1RBVFVTLCA1LCA1KSwK KwkJCVJFR19HRVQoZGlzcGMsIERTU19TWVNTVEFUVVMsIDYsIDYpLAorCQkJUkVHX0dFVChkaXNw YywgRFNTX1NZU1NUQVRVUywgNywgNykpOworCisJZGV2X2RiZyhkaXNwYy0+ZGV2LCAiRElTUEMg SURMRSAlZFxuIiwKKwkJUkVHX0dFVChkaXNwYywgRFNTX1NZU1NUQVRVUywgOSwgOSkpOworCisJ ZGlzcGNfaW5pdGlhbF9jb25maWcoZGlzcGMpOworCisJZGlzcGNfcmVzdG9yZV9nYW1tYV90YWJs ZXMoZGlzcGMpOworCisJZGlzcGMtPmlzX2VuYWJsZWQgPSB0cnVlOworCisJdGlkc3NfaXJxX3Jl c3VtZShkaXNwYy0+dGlkc3MpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZGlzcGNfcmVtb3Zl KHN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzKQoreworCWRldl9kYmcodGlkc3MtPmRldiwgIiVz XG4iLCBfX2Z1bmNfXyk7CisKKwl0aWRzcy0+ZGlzcGMgPSBOVUxMOworfQorCitzdGF0aWMgaW50 IGRpc3BjX2lvbWFwX3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGNvbnN0 IGNoYXIgKm5hbWUsCisJCQkJdm9pZCBfX2lvbWVtICoqYmFzZSkKK3sKKwlzdHJ1Y3QgcmVzb3Vy Y2UgKnJlczsKKwl2b2lkIF9faW9tZW0gKmI7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3Vy Y2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBuYW1lKTsKKwlpZiAoIXJlcykgeworCQlk ZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IG1lbSByZXNvdXJjZSAnJXMnXG4iLCBuYW1l KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYiA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgm cGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoYikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2 LCAiY2Fubm90IGlvcmVtYXAgcmVzb3VyY2UgJyVzJ1xuIiwgbmFtZSk7CisJCXJldHVybiBQVFJf RVJSKGIpOworCX0KKworCSpiYXNlID0gYjsKKworCXJldHVybiAwOworfQorCitpbnQgZGlzcGNf aW5pdChzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSB0aWRzcy0+ZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9y bV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYzsKKwljb25zdCBzdHJ1 Y3QgZGlzcGNfZmVhdHVyZXMgKmZlYXQ7CisJdW5zaWduZWQgaW50IGksIG51bV9mb3VyY2NzOwor CWludCByID0gMDsKKworCWRldl9kYmcoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWZlYXQg PSB0aWRzcy0+ZmVhdDsKKworCWlmIChmZWF0LT5zdWJyZXYgIT0gRElTUENfSzJHKSB7CisJCXIg PSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldiwgRE1BX0JJVF9NQVNLKDQ4KSk7CisJCWlm IChyKQorCQkJZGV2X3dhcm4oZGV2LCAiY2Fubm90IHNldCBETUEgbWFza3MgdG8gNDgtYml0XG4i KTsKKwl9CisKKwlkaXNwYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGlzcGMpLCBHRlBf S0VSTkVMKTsKKwlpZiAoIWRpc3BjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRpc3BjLT5mb3Vy Y2NzID0gZGV2bV9rY2FsbG9jKGRldiwgQVJSQVlfU0laRShkaXNwY19jb2xvcl9mb3JtYXRzKSwK KwkJCQkgICAgICBzaXplb2YoKmRpc3BjLT5mb3VyY2NzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFk aXNwYy0+Zm91cmNjcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwludW1fZm91cmNjcyA9IDA7CisJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGlzcGNfY29sb3JfZm9ybWF0cyk7ICsraSkgewor CQlpZiAoZmVhdC0+ZXJyYXRhLmkyMDAwICYmCisJCSAgICBkaXNwY19mb3VyY2NfaXNfeXV2KGRp c3BjX2NvbG9yX2Zvcm1hdHNbaV0uZm91cmNjKSkKKwkJCWNvbnRpbnVlOworCQlkaXNwYy0+Zm91 cmNjc1tudW1fZm91cmNjcysrXSA9IGRpc3BjX2NvbG9yX2Zvcm1hdHNbaV0uZm91cmNjOworCX0K KwlkaXNwYy0+bnVtX2ZvdXJjY3MgPSBudW1fZm91cmNjczsKKwlkaXNwYy0+dGlkc3MgPSB0aWRz czsKKwlkaXNwYy0+ZGV2ID0gZGV2OworCWRpc3BjLT5mZWF0ID0gZmVhdDsKKworCWRpc3BjX2Nv bW1vbl9yZWdtYXAgPSBkaXNwYy0+ZmVhdC0+Y29tbW9uX3JlZ3M7CisKKwlyID0gZGlzcGNfaW9t YXBfcmVzb3VyY2UocGRldiwgZGlzcGMtPmZlYXQtPmNvbW1vbiwKKwkJCQkgJmRpc3BjLT5iYXNl X2NvbW1vbik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJZm9yIChpID0gMDsgaSA8IGRpc3Bj LT5mZWF0LT5udW1fcGxhbmVzOyBpKyspIHsKKwkJciA9IGRpc3BjX2lvbWFwX3Jlc291cmNlKHBk ZXYsIGRpc3BjLT5mZWF0LT52aWRfbmFtZVtpXSwKKwkJCQkJICZkaXNwYy0+YmFzZV92aWRbaV0p OworCQlkZXZfZGJnKGRldiwgIiVzOiAldSAlcyAlZFxuIiwgX19mdW5jX18sCisJCQlpLCBkaXNw Yy0+ZmVhdC0+dmlkX25hbWVbaV0sIHIpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwor CWZvciAoaSA9IDA7IGkgPCBkaXNwYy0+ZmVhdC0+bnVtX3ZwczsgaSsrKSB7CisJCXN0cnVjdCBj bGsgKmNsazsKKworCQlyID0gZGlzcGNfaW9tYXBfcmVzb3VyY2UocGRldiwgZGlzcGMtPmZlYXQt Pm92cl9uYW1lW2ldLAorCQkJCQkgJmRpc3BjLT5iYXNlX292cltpXSk7CisJCWRldl9kYmcoZGV2 LCAiJXM6ICV1ICVzICVkXG4iLCBfX2Z1bmNfXywKKwkJCWksIGRpc3BjLT5mZWF0LT5vdnJfbmFt ZVtpXSwgcik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisKKwkJciA9IGRpc3BjX2lvbWFwX3Jl c291cmNlKHBkZXYsIGRpc3BjLT5mZWF0LT52cF9uYW1lW2ldLAorCQkJCQkgJmRpc3BjLT5iYXNl X3ZwW2ldKTsKKwkJZGV2X2RiZyhkZXYsICIlczogJXUgJXMgJWRcbiIsIF9fZnVuY19fLAorCQkJ aSwgZGlzcGMtPmZlYXQtPnZwX25hbWVbaV0sIHIpOworCQlpZiAocikKKwkJCXJldHVybiByOwor CisJCWNsayA9IGRldm1fY2xrX2dldChkZXYsIGRpc3BjLT5mZWF0LT52cGNsa19uYW1lW2ldKTsK KwkJaWYgKElTX0VSUihjbGspKSB7CisJCQlkZXZfZXJyKGRldiwgIiVzOiBGYWlsZWQgdG8gZ2V0 IGNsayAlczolbGRcbiIsIF9fZnVuY19fLAorCQkJCWRpc3BjLT5mZWF0LT52cGNsa19uYW1lW2ld LCBQVFJfRVJSKGNsaykpOworCQkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKKwkJfQorCQlkaXNwYy0+ dnBfY2xrW2ldID0gY2xrOworCisJCWRpc3BjLT52cF9kYXRhW2ldLmdhbW1hX3RhYmxlID0gZGV2 bV9rbWFsbG9jX2FycmF5KAorCQkJZGV2LCBkaXNwYy0+ZmVhdC0+dnBfZmVhdC5jb2xvci5nYW1t YV9zaXplLAorCQkJc2l6ZW9mKCpkaXNwYy0+dnBfZGF0YVtpXS5nYW1tYV90YWJsZSksIEdGUF9L RVJORUwpOworCQlpZiAoIWRpc3BjLT52cF9kYXRhW2ldLmdhbW1hX3RhYmxlKQorCQkJcmV0dXJu IC1FTk9NRU07CisJfQorCisJaWYgKGZlYXQtPnN1YnJldiA9PSBESVNQQ19BTTY1WCkgeworCQlk aXNwYy0+b2xkaV9pb19jdHJsID0KKwkJCXN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUo ZGV2LT5vZl9ub2RlLAorCQkJCQkJCSJ0aSxhbTY1eC1vbGRpLWlvLWN0cmwiKTsKKwkJaWYgKFBU Ul9FUlIoZGlzcGMtPm9sZGlfaW9fY3RybCkgPT0gLUVOT0RFVikgeworCQkJZGlzcGMtPm9sZGlf aW9fY3RybCA9IE5VTEw7CisJCX0gZWxzZSBpZiAoSVNfRVJSKGRpc3BjLT5vbGRpX2lvX2N0cmwp KSB7CisJCQlkZXZfZXJyKGRldiwgIiVzOiBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxl IGZhaWxlZCAlbGRcbiIsCisJCQkJX19mdW5jX18sIFBUUl9FUlIoZGlzcGMtPm9sZGlfaW9fY3Ry bCkpOworCQkJcmV0dXJuIFBUUl9FUlIoZGlzcGMtPm9sZGlfaW9fY3RybCk7CisJCX0KKwl9CisK KwlkaXNwYy0+ZmNsayA9IGRldm1fY2xrX2dldChkZXYsICJmY2siKTsKKwlpZiAoSVNfRVJSKGRp c3BjLT5mY2xrKSkgeworCQlkZXZfZXJyKGRldiwgIiVzOiBGYWlsZWQgdG8gZ2V0IGZjbGs6ICVs ZFxuIiwKKwkJCV9fZnVuY19fLCBQVFJfRVJSKGRpc3BjLT5mY2xrKSk7CisJCXJldHVybiBQVFJf RVJSKGRpc3BjLT5mY2xrKTsKKwl9CisJZGV2X2RiZyhkZXYsICJEU1MgZmNsayAlbHUgSHpcbiIs IGNsa19nZXRfcmF0ZShkaXNwYy0+ZmNsaykpOworCisJb2ZfcHJvcGVydHlfcmVhZF91MzIoZGlz cGMtPmRldi0+b2Zfbm9kZSwgIm1heC1tZW1vcnktYmFuZHdpZHRoIiwKKwkJCSAgICAgJmRpc3Bj LT5tZW1vcnlfYmFuZHdpZHRoX2xpbWl0KTsKKworCXIgPSBkaXNwY19pbml0X2dhbW1hX3RhYmxl cyhkaXNwYyk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJdGlkc3MtPmRpc3BjID0gZGlzcGM7 CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRz c19kaXNwYy5oIGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2Rpc3BjLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42MTk5NjcxY2E2NDgKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZGlzcGMuaApAQCAtMCwwICsxLDEz MiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBDb3B5 cmlnaHQgKEMpIDIwMTggVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3 dy50aS5jb20vCisgKiBBdXRob3I6IFRvbWkgVmFsa2VpbmVuIDx0b21pLnZhbGtlaW5lbkB0aS5j b20+CisgKi8KKworI2lmbmRlZiBfX1RJRFNTX0RJU1BDX0hfXworI2RlZmluZSBfX1RJRFNTX0RJ U1BDX0hfXworCisjaW5jbHVkZSAidGlkc3NfZHJ2LmgiCisKK3N0cnVjdCBkaXNwY19kZXZpY2U7 CisKK3N0cnVjdCBkcm1fY3J0Y19zdGF0ZTsKKworZW51bSB0aWRzc19nYW1tYV90eXBlIHsgVElE U1NfR0FNTUFfOEJJVCwgVElEU1NfR0FNTUFfMTBCSVQgfTsKKworc3RydWN0IHRpZHNzX3ZwX2Zl YXQgeworCXN0cnVjdCB0aWRzc192cF9jb2xvcl9mZWF0IHsKKwkJdTMyIGdhbW1hX3NpemU7CisJ CWVudW0gdGlkc3NfZ2FtbWFfdHlwZSBnYW1tYV90eXBlOworCQlib29sIGhhc19jdG07CisJfSBj b2xvcjsKK307CisKK3N0cnVjdCB0aWRzc19wbGFuZV9mZWF0IHsKKwlzdHJ1Y3QgdGlkc3NfcGxh bmVfY29sb3JfZmVhdCB7CisJCXUzMiBlbmNvZGluZ3M7CisJCXUzMiByYW5nZXM7CisJCWVudW0g ZHJtX2NvbG9yX2VuY29kaW5nIGRlZmF1bHRfZW5jb2Rpbmc7CisJCWVudW0gZHJtX2NvbG9yX3Jh bmdlIGRlZmF1bHRfcmFuZ2U7CisJfSBjb2xvcjsKKwlzdHJ1Y3QgdGlkc3NfcGxhbmVfYmxlbmRf ZmVhdCB7CisJCWJvb2wgZ2xvYmFsX2FscGhhOworCX0gYmxlbmQ7Cit9OworCitzdHJ1Y3QgZGlz cGNfZmVhdHVyZXNfc2NhbGluZyB7CisJdTMyIGluX3dpZHRoX21heF81dGFwX3JnYjsKKwl1MzIg aW5fd2lkdGhfbWF4XzN0YXBfcmdiOworCXUzMiBpbl93aWR0aF9tYXhfNXRhcF95dXY7CisJdTMy IGluX3dpZHRoX21heF8zdGFwX3l1djsKKwl1MzIgdXBzY2FsZV9saW1pdDsKKwl1MzIgZG93bnNj YWxlX2xpbWl0XzV0YXA7CisJdTMyIGRvd25zY2FsZV9saW1pdF8zdGFwOworCXUzMiB4aW5jX21h eDsKK307CisKK3N0cnVjdCBkaXNwY19lcnJhdGEgeworCWJvb2wgaTIwMDA7IC8qIERTUyBEb2Vz IE5vdCBTdXBwb3J0IFlVViBQaXhlbCBEYXRhIEZvcm1hdHMgKi8KK307CisKK2VudW0gZGlzcGNf dnBfYnVzX3R5cGUgeworCURJU1BDX1ZQX0RQSSwJCS8qIERQSSBvdXRwdXQgKi8KKwlESVNQQ19W UF9PTERJLAkJLyogT0xESSAoTFZEUykgb3V0cHV0ICovCisJRElTUENfVlBfSU5URVJOQUwsCS8q IFNvQyBpbnRlcm5hbCByb3V0aW5nICovCisJRElTUENfVlBfTUFYX0JVU19UWVBFLAorfTsKKwor ZW51bSBkaXNwY19kc3Nfc3VicmV2aXNpb24geworCURJU1BDX0syRywKKwlESVNQQ19BTTY1WCwK KwlESVNQQ19KNzIxRSwKK307CisKK3N0cnVjdCBkaXNwY19mZWF0dXJlcyB7CisJaW50IG1pbl9w Y2xrX2tIejsKKwlpbnQgbWF4X3BjbGtfa0h6W0RJU1BDX1ZQX01BWF9CVVNfVFlQRV07CisKKwlz dHJ1Y3QgZGlzcGNfZmVhdHVyZXNfc2NhbGluZyBzY2FsaW5nOworCisJZW51bSBkaXNwY19kc3Nf c3VicmV2aXNpb24gc3VicmV2OworCisJY29uc3QgY2hhciAqY29tbW9uOworCWNvbnN0IHUxNiAq Y29tbW9uX3JlZ3M7CisJdTMyIG51bV92cHM7CisJY29uc3QgY2hhciAqdnBfbmFtZVtUSURTU19N QVhfUE9SVFNdOyAvKiBTaG91bGQgbWF0Y2ggZHQgcmVnIG5hbWVzICovCisJY29uc3QgY2hhciAq b3ZyX25hbWVbVElEU1NfTUFYX1BPUlRTXTsgLyogU2hvdWxkIG1hdGNoIGR0IHJlZyBuYW1lcyAq LworCWNvbnN0IGNoYXIgKnZwY2xrX25hbWVbVElEU1NfTUFYX1BPUlRTXTsgLyogU2hvdWxkIG1h dGNoIGR0IGNsayBuYW1lcyAqLworCWNvbnN0IGVudW0gZGlzcGNfdnBfYnVzX3R5cGUgdnBfYnVz X3R5cGVbVElEU1NfTUFYX1BPUlRTXTsKKwlzdHJ1Y3QgdGlkc3NfdnBfZmVhdCB2cF9mZWF0Owor CXUzMiBudW1fcGxhbmVzOworCWNvbnN0IGNoYXIgKnZpZF9uYW1lW1RJRFNTX01BWF9QTEFORVNd OyAvKiBTaG91bGQgbWF0Y2ggZHQgcmVnIG5hbWVzICovCisJYm9vbCB2aWRfbGl0ZVtUSURTU19N QVhfUExBTkVTXTsKKwl1MzIgdmlkX29yZGVyW1RJRFNTX01BWF9QTEFORVNdOworCisJc3RydWN0 IGRpc3BjX2VycmF0YSBlcnJhdGE7Cit9OworCitleHRlcm4gY29uc3Qgc3RydWN0IGRpc3BjX2Zl YXR1cmVzIGRpc3BjX2syZ19mZWF0czsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGlzcGNfZmVhdHVy ZXMgZGlzcGNfYW02NXhfZmVhdHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRpc3BjX2ZlYXR1cmVz IGRpc3BjX2o3MjFlX2ZlYXRzOworCit2b2lkIGRpc3BjX3dyaXRlX2lycWVuYWJsZShzdHJ1Y3Qg ZGlzcGNfZGV2aWNlICpkaXNwYywgZGlzcGNfaXJxX3QgbWFzayk7CitkaXNwY19pcnFfdCBkaXNw Y19yZWFkX2FuZF9jbGVhcl9pcnFzdGF0dXMoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMpOwor Cit2b2lkIGRpc3BjX3ZwX3ByZXBhcmUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBo d192aWRlb3BvcnQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUp Owordm9pZCBkaXNwY192cF9lbmFibGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBo d192aWRlb3BvcnQsCisJCSAgICAgY29uc3Qgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSk7 Cit2b2lkIGRpc3BjX3ZwX2Rpc2FibGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBo d192aWRlb3BvcnQpOwordm9pZCBkaXNwY192cF91bnByZXBhcmUoc3RydWN0IGRpc3BjX2Rldmlj ZSAqZGlzcGMsIHUzMiBod192aWRlb3BvcnQpOworYm9vbCBkaXNwY192cF9nb19idXN5KHN0cnVj dCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0KTsKK3ZvaWQgZGlzcGNfdnBf Z28oc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBod192aWRlb3BvcnQpOworaW50IGRp c3BjX3ZwX2J1c19jaGVjayhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywgdTMyIGh3X3ZpZGVv cG9ydCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpOworZW51 bSBkcm1fbW9kZV9zdGF0dXMgZGlzcGNfdnBfbW9kZV92YWxpZChzdHJ1Y3QgZGlzcGNfZGV2aWNl ICpkaXNwYywKKwkJCQkJIHUzMiBod192aWRlb3BvcnQsCisJCQkJCSBjb25zdCBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSk7CitpbnQgZGlzcGNfdnBfZW5hYmxlX2NsayhzdHJ1Y3QgZGlz cGNfZGV2aWNlICpkaXNwYywgdTMyIGh3X3ZpZGVvcG9ydCk7Cit2b2lkIGRpc3BjX3ZwX2Rpc2Fi bGVfY2xrKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0KTsKK2lu dCBkaXNwY192cF9zZXRfY2xrX3JhdGUoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMsIHUzMiBo d192aWRlb3BvcnQsCisJCQkgIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Cit2b2lkIGRpc3BjX3ZwX3Nl dHVwKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfdmlkZW9wb3J0LAorCQkgICAg Y29uc3Qgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSk7CisKK2ludCBkaXNwY19ydW50aW1l X3N1c3BlbmQoc3RydWN0IGRpc3BjX2RldmljZSAqZGlzcGMpOworaW50IGRpc3BjX3J1bnRpbWVf cmVzdW1lKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjKTsKKworaW50IGRpc3BjX3BsYW5lX2No ZWNrKHN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfcGxhbmUsCisJCSAgICAgIGNv bnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLAorCQkgICAgICB1MzIgaHdfdmlkZW9w b3J0KTsKK2ludCBkaXNwY19wbGFuZV9zZXR1cChzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywg dTMyIGh3X3BsYW5lLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0 ZSwKKwkJICAgICAgdTMyIGh3X3ZpZGVvcG9ydCk7CitpbnQgZGlzcGNfcGxhbmVfZW5hYmxlKHN0 cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjLCB1MzIgaHdfcGxhbmUsIGJvb2wgZW5hYmxlKTsKK2Nv bnN0IHUzMiAqZGlzcGNfcGxhbmVfZm9ybWF0cyhzdHJ1Y3QgZGlzcGNfZGV2aWNlICpkaXNwYywg dW5zaWduZWQgaW50ICpsZW4pOworCitpbnQgZGlzcGNfaW5pdChzdHJ1Y3QgdGlkc3NfZGV2aWNl ICp0aWRzcyk7Cit2b2lkIGRpc3BjX3JlbW92ZShzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyk7 CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2Rpc3Bj X3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19kaXNwY19yZWdzLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44OGE4M2E0MWI2ZTMKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZGlzcGNfcmVncy5oCkBAIC0w LDAgKzEsMjQzIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoK KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRl ZCAtIGh0dHA6Ly93d3cudGkuY29tLworICogQXV0aG9yOiBKeXJpIFNhcmhhIDxqc2FyaGFAdGku Y29tPgorICovCisKKyNpZm5kZWYgX19USURTU19ESVNQQ19SRUdTX0gKKyNkZWZpbmUgX19USURT U19ESVNQQ19SRUdTX0gKKworZW51bSBkaXNwY19jb21tb25fcmVncyB7CisJTk9UX0FQUExJQ0FC TEVfT0ZGID0gMCwKKwlEU1NfUkVWSVNJT05fT0ZGLAorCURTU19TWVNDT05GSUdfT0ZGLAorCURT U19TWVNTVEFUVVNfT0ZGLAorCURJU1BDX0lSUV9FT0lfT0ZGLAorCURJU1BDX0lSUVNUQVRVU19S QVdfT0ZGLAorCURJU1BDX0lSUVNUQVRVU19PRkYsCisJRElTUENfSVJRRU5BQkxFX1NFVF9PRkYs CisJRElTUENfSVJRRU5BQkxFX0NMUl9PRkYsCisJRElTUENfVklEX0lSUUVOQUJMRV9PRkYsCisJ RElTUENfVklEX0lSUVNUQVRVU19PRkYsCisJRElTUENfVlBfSVJRRU5BQkxFX09GRiwKKwlESVNQ Q19WUF9JUlFTVEFUVVNfT0ZGLAorCVdCX0lSUUVOQUJMRV9PRkYsCisJV0JfSVJRU1RBVFVTX09G RiwKKwlESVNQQ19HTE9CQUxfTUZMQUdfQVRUUklCVVRFX09GRiwKKwlESVNQQ19HTE9CQUxfT1VU UFVUX0VOQUJMRV9PRkYsCisJRElTUENfR0xPQkFMX0JVRkZFUl9PRkYsCisJRFNTX0NCQV9DRkdf T0ZGLAorCURJU1BDX0RCR19DT05UUk9MX09GRiwKKwlESVNQQ19EQkdfU1RBVFVTX09GRiwKKwlE SVNQQ19DTEtHQVRJTkdfRElTQUJMRV9PRkYsCisJRElTUENfU0VDVVJFX0RJU0FCTEVfT0ZGLAor CUZCRENfUkVWSVNJT05fMV9PRkYsCisJRkJEQ19SRVZJU0lPTl8yX09GRiwKKwlGQkRDX1JFVklT SU9OXzNfT0ZGLAorCUZCRENfUkVWSVNJT05fNF9PRkYsCisJRkJEQ19SRVZJU0lPTl81X09GRiwK KwlGQkRDX1JFVklTSU9OXzZfT0ZGLAorCUZCRENfQ09NTU9OX0NPTlRST0xfT0ZGLAorCUZCRENf Q09OU1RBTlRfQ09MT1JfMF9PRkYsCisJRkJEQ19DT05TVEFOVF9DT0xPUl8xX09GRiwKKwlESVNQ Q19DT05ORUNUSU9OU19PRkYsCisJRElTUENfTVNTX1ZQMV9PRkYsCisJRElTUENfTVNTX1ZQM19P RkYsCisJRElTUENfQ09NTU9OX1JFR19UQUJMRV9MRU4sCit9OworCisvKgorICogZGlzcGNfY29t bW9uX3JlZ21hcCBzaG91bGQgYmUgZGVmaW5lZCBhcyBjb25zdCB1MTYgKiBhbmQgcG9pbnRpbmcK KyAqIHRvIGEgdmFsaWQgZHNzIGNvbW1vbiByZWdpc3RlciBtYXAgZm9yIHRoZSBwbGF0Zm9ybSwg YmVmb3JlIHRoZQorICogbWFjcm9zIGJlbGxvdyBjYW4gYmUgdXNlZC4KKyAqLworCisjZGVmaW5l IFJFRyhyKSAoZGlzcGNfY29tbW9uX3JlZ21hcFtyICMjIF9PRkZdKQorCisjZGVmaW5lIERTU19S RVZJU0lPTgkJCVJFRyhEU1NfUkVWSVNJT04pCisjZGVmaW5lIERTU19TWVNDT05GSUcJCQlSRUco RFNTX1NZU0NPTkZJRykKKyNkZWZpbmUgRFNTX1NZU1NUQVRVUwkJCVJFRyhEU1NfU1lTU1RBVFVT KQorI2RlZmluZSBESVNQQ19JUlFfRU9JCQkJUkVHKERJU1BDX0lSUV9FT0kpCisjZGVmaW5lIERJ U1BDX0lSUVNUQVRVU19SQVcJCVJFRyhESVNQQ19JUlFTVEFUVVNfUkFXKQorI2RlZmluZSBESVNQ Q19JUlFTVEFUVVMJCQlSRUcoRElTUENfSVJRU1RBVFVTKQorI2RlZmluZSBESVNQQ19JUlFFTkFC TEVfU0VUCQlSRUcoRElTUENfSVJRRU5BQkxFX1NFVCkKKyNkZWZpbmUgRElTUENfSVJRRU5BQkxF X0NMUgkJUkVHKERJU1BDX0lSUUVOQUJMRV9DTFIpCisjZGVmaW5lIERJU1BDX1ZJRF9JUlFFTkFC TEUobikJCShSRUcoRElTUENfVklEX0lSUUVOQUJMRSkgKyAobikgKiA0KQorI2RlZmluZSBESVNQ Q19WSURfSVJRU1RBVFVTKG4pCQkoUkVHKERJU1BDX1ZJRF9JUlFTVEFUVVMpICsgKG4pICogNCkK KyNkZWZpbmUgRElTUENfVlBfSVJRRU5BQkxFKG4pCQkoUkVHKERJU1BDX1ZQX0lSUUVOQUJMRSkg KyAobikgKiA0KQorI2RlZmluZSBESVNQQ19WUF9JUlFTVEFUVVMobikJCShSRUcoRElTUENfVlBf SVJRU1RBVFVTKSArIChuKSAqIDQpCisjZGVmaW5lIFdCX0lSUUVOQUJMRQkJCVJFRyhXQl9JUlFF TkFCTEUpCisjZGVmaW5lIFdCX0lSUVNUQVRVUwkJCVJFRyhXQl9JUlFTVEFUVVMpCisKKyNkZWZp bmUgRElTUENfR0xPQkFMX01GTEFHX0FUVFJJQlVURQlSRUcoRElTUENfR0xPQkFMX01GTEFHX0FU VFJJQlVURSkKKyNkZWZpbmUgRElTUENfR0xPQkFMX09VVFBVVF9FTkFCTEUJUkVHKERJU1BDX0dM T0JBTF9PVVRQVVRfRU5BQkxFKQorI2RlZmluZSBESVNQQ19HTE9CQUxfQlVGRkVSCQlSRUcoRElT UENfR0xPQkFMX0JVRkZFUikKKyNkZWZpbmUgRFNTX0NCQV9DRkcJCQlSRUcoRFNTX0NCQV9DRkcp CisjZGVmaW5lIERJU1BDX0RCR19DT05UUk9MCQlSRUcoRElTUENfREJHX0NPTlRST0wpCisjZGVm aW5lIERJU1BDX0RCR19TVEFUVVMJCVJFRyhESVNQQ19EQkdfU1RBVFVTKQorI2RlZmluZSBESVNQ Q19DTEtHQVRJTkdfRElTQUJMRQkJUkVHKERJU1BDX0NMS0dBVElOR19ESVNBQkxFKQorI2RlZmlu ZSBESVNQQ19TRUNVUkVfRElTQUJMRQkJUkVHKERJU1BDX1NFQ1VSRV9ESVNBQkxFKQorCisjZGVm aW5lIEZCRENfUkVWSVNJT05fMQkJCVJFRyhGQkRDX1JFVklTSU9OXzEpCisjZGVmaW5lIEZCRENf UkVWSVNJT05fMgkJCVJFRyhGQkRDX1JFVklTSU9OXzIpCisjZGVmaW5lIEZCRENfUkVWSVNJT05f MwkJCVJFRyhGQkRDX1JFVklTSU9OXzMpCisjZGVmaW5lIEZCRENfUkVWSVNJT05fNAkJCVJFRyhG QkRDX1JFVklTSU9OXzQpCisjZGVmaW5lIEZCRENfUkVWSVNJT05fNQkJCVJFRyhGQkRDX1JFVklT SU9OXzUpCisjZGVmaW5lIEZCRENfUkVWSVNJT05fNgkJCVJFRyhGQkRDX1JFVklTSU9OXzYpCisj ZGVmaW5lIEZCRENfQ09NTU9OX0NPTlRST0wJCVJFRyhGQkRDX0NPTU1PTl9DT05UUk9MKQorI2Rl ZmluZSBGQkRDX0NPTlNUQU5UX0NPTE9SXzAJCVJFRyhGQkRDX0NPTlNUQU5UX0NPTE9SXzApCisj ZGVmaW5lIEZCRENfQ09OU1RBTlRfQ09MT1JfMQkJUkVHKEZCRENfQ09OU1RBTlRfQ09MT1JfMSkK KyNkZWZpbmUgRElTUENfQ09OTkVDVElPTlMJCVJFRyhESVNQQ19DT05ORUNUSU9OUykKKyNkZWZp bmUgRElTUENfTVNTX1ZQMQkJCVJFRyhESVNQQ19NU1NfVlAxKQorI2RlZmluZSBESVNQQ19NU1Nf VlAzCQkJUkVHKERJU1BDX01TU19WUDMpCisKKy8qIFZJRCAqLworCisjZGVmaW5lIERJU1BDX1ZJ RF9BQ0NVSF8wCQkweDAKKyNkZWZpbmUgRElTUENfVklEX0FDQ1VIXzEJCTB4NAorI2RlZmluZSBE SVNQQ19WSURfQUNDVUgyXzAJCTB4OAorI2RlZmluZSBESVNQQ19WSURfQUNDVUgyXzEJCTB4Ywor I2RlZmluZSBESVNQQ19WSURfQUNDVVZfMAkJMHgxMAorI2RlZmluZSBESVNQQ19WSURfQUNDVVZf MQkJMHgxNAorI2RlZmluZSBESVNQQ19WSURfQUNDVVYyXzAJCTB4MTgKKyNkZWZpbmUgRElTUENf VklEX0FDQ1VWMl8xCQkweDFjCisjZGVmaW5lIERJU1BDX1ZJRF9BVFRSSUJVVEVTCQkweDIwCisj ZGVmaW5lIERJU1BDX1ZJRF9BVFRSSUJVVEVTMgkJMHgyNAorI2RlZmluZSBESVNQQ19WSURfQkFf MAkJCTB4MjgKKyNkZWZpbmUgRElTUENfVklEX0JBXzEJCQkweDJjCisjZGVmaW5lIERJU1BDX1ZJ RF9CQV9VVl8wCQkweDMwCisjZGVmaW5lIERJU1BDX1ZJRF9CQV9VVl8xCQkweDM0CisjZGVmaW5l IERJU1BDX1ZJRF9CVUZfU0laRV9TVEFUVVMJMHgzOAorI2RlZmluZSBESVNQQ19WSURfQlVGX1RI UkVTSE9MRAkJMHgzYworI2RlZmluZSBESVNQQ19WSURfQ1NDX0NPRUYobikJCSgweDQwICsgKG4p ICogNCkKKworI2RlZmluZSBESVNQQ19WSURfRklSSAkJCTB4NWMKKyNkZWZpbmUgRElTUENfVklE X0ZJUkgyCQkJMHg2MAorI2RlZmluZSBESVNQQ19WSURfRklSVgkJCTB4NjQKKyNkZWZpbmUgRElT UENfVklEX0ZJUlYyCQkJMHg2OAorCisjZGVmaW5lIERJU1BDX1ZJRF9GSVJfQ09FRlNfSDAJCTB4 NmMKKyNkZWZpbmUgRElTUENfVklEX0ZJUl9DT0VGX0gwKHBoYXNlKQkoMHg2YyArIChwaGFzZSkg KiA0KQorI2RlZmluZSBESVNQQ19WSURfRklSX0NPRUZTX0gwX0MJMHg5MAorI2RlZmluZSBESVNQ Q19WSURfRklSX0NPRUZfSDBfQyhwaGFzZSkJKDB4OTAgKyAocGhhc2UpICogNCkKKworI2RlZmlu ZSBESVNQQ19WSURfRklSX0NPRUZTX0gxMgkJMHhiNAorI2RlZmluZSBESVNQQ19WSURfRklSX0NP RUZfSDEyKHBoYXNlKQkoMHhiNCArIChwaGFzZSkgKiA0KQorI2RlZmluZSBESVNQQ19WSURfRklS X0NPRUZTX0gxMl9DCTB4ZjQKKyNkZWZpbmUgRElTUENfVklEX0ZJUl9DT0VGX0gxMl9DKHBoYXNl KQkoMHhmNCArIChwaGFzZSkgKiA0KQorCisjZGVmaW5lIERJU1BDX1ZJRF9GSVJfQ09FRlNfVjAJ CTB4MTM0CisjZGVmaW5lIERJU1BDX1ZJRF9GSVJfQ09FRl9WMChwaGFzZSkJKDB4MTM0ICsgKHBo YXNlKSAqIDQpCisjZGVmaW5lIERJU1BDX1ZJRF9GSVJfQ09FRlNfVjBfQwkweDE1OAorI2RlZmlu ZSBESVNQQ19WSURfRklSX0NPRUZfVjBfQyhwaGFzZSkJKDB4MTU4ICsgKHBoYXNlKSAqIDQpCisK KyNkZWZpbmUgRElTUENfVklEX0ZJUl9DT0VGU19WMTIJCTB4MTdjCisjZGVmaW5lIERJU1BDX1ZJ RF9GSVJfQ09FRl9WMTIocGhhc2UpCSgweDE3YyArIChwaGFzZSkgKiA0KQorI2RlZmluZSBESVNQ Q19WSURfRklSX0NPRUZTX1YxMl9DCTB4MWJjCisjZGVmaW5lIERJU1BDX1ZJRF9GSVJfQ09FRl9W MTJfQyhwaGFzZSkJKDB4MWJjICsgKHBoYXNlKSAqIDQpCisKKyNkZWZpbmUgRElTUENfVklEX0dM T0JBTF9BTFBIQQkJMHgxZmMKKyNkZWZpbmUgRElTUENfVklEX0syR19JUlFFTkFCTEUJCTB4MjAw IC8qIEsyRyAqLworI2RlZmluZSBESVNQQ19WSURfSzJHX0lSUVNUQVRVUwkJMHgyMDQgLyogSzJH ICovCisjZGVmaW5lIERJU1BDX1ZJRF9NRkxBR19USFJFU0hPTEQJMHgyMDgKKyNkZWZpbmUgRElT UENfVklEX1BJQ1RVUkVfU0laRQkJMHgyMGMKKyNkZWZpbmUgRElTUENfVklEX1BJWEVMX0lOQwkJ MHgyMTAKKyNkZWZpbmUgRElTUENfVklEX0syR19QT1NJVElPTgkJMHgyMTQgLyogSzJHICovCisj ZGVmaW5lIERJU1BDX1ZJRF9QUkVMT0FECQkweDIxOAorI2RlZmluZSBESVNQQ19WSURfUk9XX0lO QwkJMHgyMWMKKyNkZWZpbmUgRElTUENfVklEX1NJWkUJCQkweDIyMAorI2RlZmluZSBESVNQQ19W SURfQkFfRVhUXzAJCTB4MjJjCisjZGVmaW5lIERJU1BDX1ZJRF9CQV9FWFRfMQkJMHgyMzAKKyNk ZWZpbmUgRElTUENfVklEX0JBX1VWX0VYVF8wCQkweDIzNAorI2RlZmluZSBESVNQQ19WSURfQkFf VVZfRVhUXzEJCTB4MjM4CisjZGVmaW5lIERJU1BDX1ZJRF9DU0NfQ09FRjcJCTB4MjNjCisjZGVm aW5lIERJU1BDX1ZJRF9ST1dfSU5DX1VWCQkweDI0OAorI2RlZmluZSBESVNQQ19WSURfQ0xVVAkJ CTB4MjYwCisjZGVmaW5lIERJU1BDX1ZJRF9TQUZFVFlfQVRUUklCVVRFUwkweDJhMAorI2RlZmlu ZSBESVNQQ19WSURfU0FGRVRZX0NBUFRfU0lHTkFUVVJFCTB4MmE0CisjZGVmaW5lIERJU1BDX1ZJ RF9TQUZFVFlfUE9TSVRJT04JMHgyYTgKKyNkZWZpbmUgRElTUENfVklEX1NBRkVUWV9SRUZfU0lH TkFUVVJFCTB4MmFjCisjZGVmaW5lIERJU1BDX1ZJRF9TQUZFVFlfU0laRQkJMHgyYjAKKyNkZWZp bmUgRElTUENfVklEX1NBRkVUWV9MRlNSX1NFRUQJMHgyYjQKKyNkZWZpbmUgRElTUENfVklEX0xV TUFLRVkJCTB4MmI4CisjZGVmaW5lIERJU1BDX1ZJRF9ETUFfQlVGU0laRQkJMHgyYmMgLyogSjcy MUUgKi8KKworLyogT1ZSICovCisKKyNkZWZpbmUgRElTUENfT1ZSX0NPTkZJRwkJMHgwCisjZGVm aW5lIERJU1BDX09WUl9WSVJUVlAJCTB4NCAvKiBKNzIxRSAqLworI2RlZmluZSBESVNQQ19PVlJf REVGQVVMVF9DT0xPUgkJMHg4CisjZGVmaW5lIERJU1BDX09WUl9ERUZBVUxUX0NPTE9SMgkweGMK KyNkZWZpbmUgRElTUENfT1ZSX1RSQU5TX0NPTE9SX01BWAkweDEwCisjZGVmaW5lIERJU1BDX09W Ul9UUkFOU19DT0xPUl9NQVgyCTB4MTQKKyNkZWZpbmUgRElTUENfT1ZSX1RSQU5TX0NPTE9SX01J TgkweDE4CisjZGVmaW5lIERJU1BDX09WUl9UUkFOU19DT0xPUl9NSU4yCTB4MWMKKyNkZWZpbmUg RElTUENfT1ZSX0FUVFJJQlVURVMobikJCSgweDIwICsgKG4pICogNCkKKyNkZWZpbmUgRElTUENf T1ZSX0FUVFJJQlVURVMyKG4pCSgweDM0ICsgKG4pICogNCkgLyogSjcyMUUgKi8KKy8qIFZQICov CisKKyNkZWZpbmUgRElTUENfVlBfQ09ORklHCQkJCTB4MAorI2RlZmluZSBESVNQQ19WUF9DT05U Uk9MCQkJMHg0CisjZGVmaW5lIERJU1BDX1ZQX0NTQ19DT0VGMAkJCTB4OAorI2RlZmluZSBESVNQ Q19WUF9DU0NfQ09FRjEJCQkweGMKKyNkZWZpbmUgRElTUENfVlBfQ1NDX0NPRUYyCQkJMHgxMAor I2RlZmluZSBESVNQQ19WUF9EQVRBX0NZQ0xFXzAJCQkweDE0CisjZGVmaW5lIERJU1BDX1ZQX0RB VEFfQ1lDTEVfMQkJCTB4MTgKKyNkZWZpbmUgRElTUENfVlBfSzJHX0dBTU1BX1RBQkxFCQkweDIw IC8qIEsyRyAqLworI2RlZmluZSBESVNQQ19WUF9LMkdfSVJRRU5BQkxFCQkJMHgzYyAvKiBLMkcg Ki8KKyNkZWZpbmUgRElTUENfVlBfSzJHX0lSUVNUQVRVUwkJCTB4NDAgLyogSzJHICovCisjZGVm aW5lIERJU1BDX1ZQX0RBVEFfQ1lDTEVfMgkJCTB4MWMKKyNkZWZpbmUgRElTUENfVlBfTElORV9O VU1CRVIJCQkweDQ0CisjZGVmaW5lIERJU1BDX1ZQX1BPTF9GUkVRCQkJMHg0YworI2RlZmluZSBE SVNQQ19WUF9TSVpFX1NDUkVFTgkJCTB4NTAKKyNkZWZpbmUgRElTUENfVlBfVElNSU5HX0gJCQkw eDU0CisjZGVmaW5lIERJU1BDX1ZQX1RJTUlOR19WCQkJMHg1OAorI2RlZmluZSBESVNQQ19WUF9D U0NfQ09FRjMJCQkweDVjCisjZGVmaW5lIERJU1BDX1ZQX0NTQ19DT0VGNAkJCTB4NjAKKyNkZWZp bmUgRElTUENfVlBfQ1NDX0NPRUY1CQkJMHg2NAorI2RlZmluZSBESVNQQ19WUF9DU0NfQ09FRjYJ CQkweDY4CisjZGVmaW5lIERJU1BDX1ZQX0NTQ19DT0VGNwkJCTB4NmMKKyNkZWZpbmUgRElTUENf VlBfU0FGRVRZX0FUVFJJQlVURVNfMAkJMHg3MAorI2RlZmluZSBESVNQQ19WUF9TQUZFVFlfQVRU UklCVVRFU18xCQkweDc0CisjZGVmaW5lIERJU1BDX1ZQX1NBRkVUWV9BVFRSSUJVVEVTXzIJCTB4 NzgKKyNkZWZpbmUgRElTUENfVlBfU0FGRVRZX0FUVFJJQlVURVNfMwkJMHg3YworI2RlZmluZSBE SVNQQ19WUF9TQUZFVFlfQ0FQVF9TSUdOQVRVUkVfMAkweDkwCisjZGVmaW5lIERJU1BDX1ZQX1NB RkVUWV9DQVBUX1NJR05BVFVSRV8xCTB4OTQKKyNkZWZpbmUgRElTUENfVlBfU0FGRVRZX0NBUFRf U0lHTkFUVVJFXzIJMHg5OAorI2RlZmluZSBESVNQQ19WUF9TQUZFVFlfQ0FQVF9TSUdOQVRVUkVf MwkweDljCisjZGVmaW5lIERJU1BDX1ZQX1NBRkVUWV9QT1NJVElPTl8wCQkweGIwCisjZGVmaW5l IERJU1BDX1ZQX1NBRkVUWV9QT1NJVElPTl8xCQkweGI0CisjZGVmaW5lIERJU1BDX1ZQX1NBRkVU WV9QT1NJVElPTl8yCQkweGI4CisjZGVmaW5lIERJU1BDX1ZQX1NBRkVUWV9QT1NJVElPTl8zCQkw eGJjCisjZGVmaW5lIERJU1BDX1ZQX1NBRkVUWV9SRUZfU0lHTkFUVVJFXzAJCTB4ZDAKKyNkZWZp bmUgRElTUENfVlBfU0FGRVRZX1JFRl9TSUdOQVRVUkVfMQkJMHhkNAorI2RlZmluZSBESVNQQ19W UF9TQUZFVFlfUkVGX1NJR05BVFVSRV8yCQkweGQ4CisjZGVmaW5lIERJU1BDX1ZQX1NBRkVUWV9S RUZfU0lHTkFUVVJFXzMJCTB4ZGMKKyNkZWZpbmUgRElTUENfVlBfU0FGRVRZX1NJWkVfMAkJCTB4 ZjAKKyNkZWZpbmUgRElTUENfVlBfU0FGRVRZX1NJWkVfMQkJCTB4ZjQKKyNkZWZpbmUgRElTUENf VlBfU0FGRVRZX1NJWkVfMgkJCTB4ZjgKKyNkZWZpbmUgRElTUENfVlBfU0FGRVRZX1NJWkVfMwkJ CTB4ZmMKKyNkZWZpbmUgRElTUENfVlBfU0FGRVRZX0xGU1JfU0VFRAkJMHgxMTAKKyNkZWZpbmUg RElTUENfVlBfR0FNTUFfVEFCTEUJCQkweDEyMAorI2RlZmluZSBESVNQQ19WUF9EU1NfT0xESV9D RkcJCQkweDE2MAorI2RlZmluZSBESVNQQ19WUF9EU1NfT0xESV9TVEFUVVMJCTB4MTY0CisjZGVm aW5lIERJU1BDX1ZQX0RTU19PTERJX0xCCQkJMHgxNjgKKyNkZWZpbmUgRElTUENfVlBfRFNTX01F UkdFX1NQTElUCQkweDE2YyAvKiBKNzIxRSAqLworI2RlZmluZSBESVNQQ19WUF9EU1NfRE1BX1RI UkVBRFNJWkUJCTB4MTcwIC8qIEo3MjFFICovCisjZGVmaW5lIERJU1BDX1ZQX0RTU19ETUFfVEhS RUFEU0laRV9TVEFUVVMJMHgxNzQgLyogSjcyMUUgKi8KKworLyoKKyAqIE9MREkgSU9fQ1RSTCBy ZWdpc3RlciBvZmZzZXRzLiBPbiBBTTY1NCB0aGUgcmVnaXN0ZXJzIGFyZSBmb3VuZAorICogZnJv bSBDVFJMX01NUjAsIHRoZXJlIHRoZSBzeXNjb24gcmVnbWFwIHNob3VsZCBtYXAgMHgxNCBieXRl cyBmcm9tCisgKiBDVFJMTU1SMFAxX09MRElfREFUMF9JT19DVFJMIHRvIENUUkxNTVIwUDFfT0xE SV9DTEtfSU9fQ1RSTAorICogcmVnaXN0ZXIgcmFuZ2UuCisgKi8KKyNkZWZpbmUgT0xESV9EQVQw X0lPX0NUUkwJCQkweDAwCisjZGVmaW5lIE9MRElfREFUMV9JT19DVFJMCQkJMHgwNAorI2RlZmlu ZSBPTERJX0RBVDJfSU9fQ1RSTAkJCTB4MDgKKyNkZWZpbmUgT0xESV9EQVQzX0lPX0NUUkwJCQkw eDBDCisjZGVmaW5lIE9MRElfQ0xLX0lPX0NUUkwJCQkweDEwCisKKyNkZWZpbmUgT0xESV9QV1JE Tl9UWAkJCQlCSVQoOCkKKworI2VuZGlmIC8qIF9fVElEU1NfRElTUENfUkVHU19IICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZHJ2LmMgYi9kcml2ZXJzL2dwdS9k cm0vdGlkc3MvdGlkc3NfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi5kOTVlNGJlMmM3YjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlk c3MvdGlkc3NfZHJ2LmMKQEAgLTAsMCArMSwyODUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRleGFzIEluc3RydW1lbnRz IEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICogQXV0aG9yOiBUb21pIFZhbGtl aW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25z b2xlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9kcnYuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2lycS5o PgorI2luY2x1ZGUgPGRybS9kcm1fcHJvYmVfaGVscGVyLmg+CisKKyNpbmNsdWRlICJ0aWRzc19k aXNwYy5oIgorI2luY2x1ZGUgInRpZHNzX2Rydi5oIgorI2luY2x1ZGUgInRpZHNzX2ttcy5oIgor I2luY2x1ZGUgInRpZHNzX2lycS5oIgorCisvKiBQb3dlciBtYW5hZ2VtZW50ICovCisKK2ludCB0 aWRzc19ydW50aW1lX2dldChzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcykKK3sKKwlpbnQgcjsK KworCWRldl9kYmcodGlkc3MtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlyID0gcG1fcnVu dGltZV9nZXRfc3luYyh0aWRzcy0+ZGV2KTsKKwlXQVJOX09OKHIgPCAwKTsKKwlyZXR1cm4gciA8 IDAgPyByIDogMDsKK30KKwordm9pZCB0aWRzc19ydW50aW1lX3B1dChzdHJ1Y3QgdGlkc3NfZGV2 aWNlICp0aWRzcykKK3sKKwlpbnQgcjsKKworCWRldl9kYmcodGlkc3MtPmRldiwgIiVzXG4iLCBf X2Z1bmNfXyk7CisKKwlyID0gcG1fcnVudGltZV9wdXRfc3luYyh0aWRzcy0+ZGV2KTsKKwlXQVJO X09OKHIgPCAwKTsKK30KKworc3RhdGljIGludCBfX21heWJlX3VudXNlZCB0aWRzc19wbV9ydW50 aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB0aWRzc19kZXZpY2Ug KnRpZHNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkZXZfZGJnKGRldiwgIiVzXG4iLCBf X2Z1bmNfXyk7CisKKwlyZXR1cm4gZGlzcGNfcnVudGltZV9zdXNwZW5kKHRpZHNzLT5kaXNwYyk7 Cit9CisKK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgdGlkc3NfcG1fcnVudGltZV9yZXN1bWUo c3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGV2 X2dldF9kcnZkYXRhKGRldik7CisJaW50IHI7CisKKwlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1 bmNfXyk7CisKKwlyID0gZGlzcGNfcnVudGltZV9yZXN1bWUodGlkc3MtPmRpc3BjKTsKKwlpZiAo cikKKwkJcmV0dXJuIHI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX21heWJlX3Vu dXNlZCB0aWRzc19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGlkc3Nf ZGV2aWNlICp0aWRzcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJZGV2X2RiZyhkZXYsICIl c1xuIiwgX19mdW5jX18pOworCisJcmV0dXJuIGRybV9tb2RlX2NvbmZpZ19oZWxwZXJfc3VzcGVu ZCgmdGlkc3MtPmRkZXYpOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHRpZHNzX3Jl c3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3Mg PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRldl9kYmcoZGV2LCAiJXNcbiIsIF9fZnVuY19f KTsKKworCXJldHVybiBkcm1fbW9kZV9jb25maWdfaGVscGVyX3Jlc3VtZSgmdGlkc3MtPmRkZXYp OworfQorCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29w cyB0aWRzc19wbV9vcHMgPSB7CisJLnJ1bnRpbWVfc3VzcGVuZCA9IHRpZHNzX3BtX3J1bnRpbWVf c3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUgPSB0aWRzc19wbV9ydW50aW1lX3Jlc3VtZSwKKwlT RVRfU1lTVEVNX1NMRUVQX1BNX09QUyh0aWRzc19zdXNwZW5kLCB0aWRzc19yZXN1bWUpCit9Owor CisjZW5kaWYgLyogQ09ORklHX1BNICovCisKKy8qIERSTSBkZXZpY2UgSW5mb3JtYXRpb24gKi8K Kworc3RhdGljIHZvaWQgdGlkc3NfcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldikKK3sK KwlzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyA9IGRkZXYtPmRldl9wcml2YXRlOworCisJZHJt X2ttc19oZWxwZXJfcG9sbF9maW5pKGRkZXYpOworCisJdGlkc3NfbW9kZXNldF9jbGVhbnVwKHRp ZHNzKTsKKworCWRybV9kZXZfZmluaShkZGV2KTsKKworCWtmcmVlKHRpZHNzKTsKK30KKworREVG SU5FX0RSTV9HRU1fQ01BX0ZPUFModGlkc3NfZm9wcyk7CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Ry aXZlciB0aWRzc19kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcwk9IERSSVZFUl9HRU0gfCBE UklWRVJfTU9ERVNFVCB8IERSSVZFUl9BVE9NSUMsCisJLmZvcHMJCQk9ICZ0aWRzc19mb3BzLAor CS5yZWxlYXNlCQk9IHRpZHNzX3JlbGVhc2UsCisJRFJNX0dFTV9DTUFfVk1BUF9EUklWRVJfT1BT LAorCS5uYW1lCQkJPSAidGlkc3MiLAorCS5kZXNjCQkJPSAiVEkgS2V5c3RvbmUgRFNTIiwKKwku ZGF0ZQkJCT0gIjIwMTgwMjE1IiwKKwkubWFqb3IJCQk9IDEsCisJLm1pbm9yCQkJPSAwLAorCisJ LmlycV9wcmVpbnN0YWxsCQk9IHRpZHNzX2lycV9wcmVpbnN0YWxsLAorCS5pcnFfcG9zdGluc3Rh bGwJPSB0aWRzc19pcnFfcG9zdGluc3RhbGwsCisJLmlycV9oYW5kbGVyCQk9IHRpZHNzX2lycV9o YW5kbGVyLAorCS5pcnFfdW5pbnN0YWxsCQk9IHRpZHNzX2lycV91bmluc3RhbGwsCit9OworCitz dGF0aWMgaW50IHRpZHNzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJ c3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0 aWRzczsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldjsKKwlpbnQgcmV0OworCWludCBpcnE7CisK KwlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBDYW4ndCB1c2UgZGV2bV8q IHNpbmNlIGRybV9kZXZpY2UncyBsaWZldGltZSBtYXkgZXhjZWVkIGRldidzICovCisJdGlkc3Mg PSBremFsbG9jKHNpemVvZigqdGlkc3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRpZHNzKQorCQly ZXR1cm4gLUVOT01FTTsKKworCWRkZXYgPSAmdGlkc3MtPmRkZXY7CisKKwlyZXQgPSBkZXZtX2Ry bV9kZXZfaW5pdCgmcGRldi0+ZGV2LCBkZGV2LCAmdGlkc3NfZHJpdmVyKTsKKwlpZiAocmV0KSB7 CisJCWtmcmVlKGRkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCXRpZHNzLT5kZXYgPSBkZXY7 CisJdGlkc3MtPmZlYXQgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTsKKworCXBsYXRm b3JtX3NldF9kcnZkYXRhKHBkZXYsIHRpZHNzKTsKKworCWRkZXYtPmRldl9wcml2YXRlID0gdGlk c3M7CisKKwlyZXQgPSBkaXNwY19pbml0KHRpZHNzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgZGlzcGM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4g cmV0OworCX0KKworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisKKyNpZm5kZWYgQ09ORklHX1BN CisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBQTSwgd2UgbmVlZCB0byBjYWxsIHJlc3VtZSBtYW51YWxs eSAqLworCWRpc3BjX3J1bnRpbWVfcmVzdW1lKHRpZHNzLT5kaXNwYyk7CisjZW5kaWYKKworCXJl dCA9IHRpZHNzX21vZGVzZXRfaW5pdCh0aWRzcyk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJl dCAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdCBEUk0v S01TICglZClcbiIsIHJldCk7CisJCWdvdG8gZXJyX3J1bnRpbWVfc3VzcGVuZDsKKwl9CisKKwlp cnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCXJldCA9 IGlycTsKKwkJZ290byBlcnJfcnVudGltZV9zdXNwZW5kOworCX0KKworCXJldCA9IGRybV9pcnFf aW5zdGFsbChkZGV2LCBpcnEpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJkcm1faXJx X2luc3RhbGwgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcnVudGltZV9zdXNwZW5k OworCX0KKworCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkZGV2KTsKKworCWRybV9tb2RlX2Nv bmZpZ19yZXNldChkZGV2KTsKKworCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIoZGRldiwgMCk7CisJ aWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBEUk0gZGV2aWNl XG4iKTsKKwkJZ290byBlcnJfaXJxX3VuaW5zdGFsbDsKKwl9CisKKwlkcm1fZmJkZXZfZ2VuZXJp Y19zZXR1cChkZGV2LCAzMik7CisKKwlkZXZfZGJnKGRldiwgIiVzIGRvbmVcbiIsIF9fZnVuY19f KTsKKworCXJldHVybiAwOworCitlcnJfaXJxX3VuaW5zdGFsbDoKKwlkcm1faXJxX3VuaW5zdGFs bChkZGV2KTsKKworZXJyX3J1bnRpbWVfc3VzcGVuZDoKKyNpZm5kZWYgQ09ORklHX1BNCisJZGlz cGNfcnVudGltZV9zdXNwZW5kKHRpZHNzLT5kaXNwYyk7CisjZW5kaWYKKwlwbV9ydW50aW1lX2Rp c2FibGUoZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdGlkc3NfcmVtb3Zl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0g JnBkZXYtPmRldjsKKwlzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyA9IHBsYXRmb3JtX2dldF9k cnZkYXRhKHBkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gJnRpZHNzLT5kZGV2Owor CisJZGV2X2RiZyhkZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJZHJtX2Rldl91bnJlZ2lzdGVy KGRkZXYpOworCisJZHJtX2F0b21pY19oZWxwZXJfc2h1dGRvd24oZGRldik7CisKKwlkcm1faXJx X3VuaW5zdGFsbChkZGV2KTsKKworI2lmbmRlZiBDT05GSUdfUE0KKwkvKiBJZiB3ZSBkb24ndCBo YXZlIFBNLCB3ZSBuZWVkIHRvIGNhbGwgc3VzcGVuZCBtYW51YWxseSAqLworCWRpc3BjX3J1bnRp bWVfc3VzcGVuZCh0aWRzcy0+ZGlzcGMpOworI2VuZGlmCisJcG1fcnVudGltZV9kaXNhYmxlKGRl dik7CisKKwkvKiBkZXZtIGFsbG9jYXRlZCBkaXNwYyBnb2VzIGF3YXkgd2l0aCB0aGUgZGV2IHNv IG1hcmsgaXQgTlVMTCAqLworCWRpc3BjX3JlbW92ZSh0aWRzcyk7CisKKwlkZXZfZGJnKGRldiwg IiVzIGRvbmVcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0 aWRzc19zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWRybV9hdG9t aWNfaGVscGVyX3NodXRkb3duKHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGlkc3Nfb2ZfdGFibGVbXSA9IHsKKwl7IC5j b21wYXRpYmxlID0gInRpLGsyZy1kc3MiLCAuZGF0YSA9ICZkaXNwY19rMmdfZmVhdHMsIH0sCisJ eyAuY29tcGF0aWJsZSA9ICJ0aSxhbTY1eC1kc3MiLCAuZGF0YSA9ICZkaXNwY19hbTY1eF9mZWF0 cywgfSwKKwl7IC5jb21wYXRpYmxlID0gInRpLGo3MjFlLWRzcyIsIC5kYXRhID0gJmRpc3BjX2o3 MjFlX2ZlYXRzLCB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdGlkc3Nf b2ZfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aWRzc19wbGF0Zm9y bV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHRpZHNzX3Byb2JlLAorCS5yZW1vdmUJCT0gdGlkc3Nf cmVtb3ZlLAorCS5zaHV0ZG93bgk9IHRpZHNzX3NodXRkb3duLAorCS5kcml2ZXIJCT0geworCQku bmFtZQk9ICJ0aWRzcyIsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZ0aWRzc19wbV9vcHMs CisjZW5kaWYKKwkJLm9mX21hdGNoX3RhYmxlID0gdGlkc3Nfb2ZfdGFibGUsCisJCS5zdXBwcmVz c19iaW5kX2F0dHJzID0gdHJ1ZSwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih0 aWRzc19wbGF0Zm9ybV9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJUb21pIFZhbGtlaW5lbiA8 dG9taS52YWxrZWluZW5AdGkuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUSSBLZXlzdG9u ZSBEU1MgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3Mv dGlkc3NfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hM2Fk MGI3MzZlODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3Nf ZHJ2LmgKQEAgLTAsMCArMSw0MCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jw b3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKiBBdXRob3I6IFRvbWkgVmFsa2VpbmVuIDx0 b21pLnZhbGtlaW5lbkB0aS5jb20+CisgKi8KKworI2lmbmRlZiBfX1RJRFNTX0RSVl9IX18KKyNk ZWZpbmUgX19USURTU19EUlZfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisj ZGVmaW5lIFRJRFNTX01BWF9QT1JUUyA0CisjZGVmaW5lIFRJRFNTX01BWF9QTEFORVMgNAorCit0 eXBlZGVmIHUzMiBkaXNwY19pcnFfdDsKKworc3RydWN0IHRpZHNzX2RldmljZSB7CisJc3RydWN0 IGRybV9kZXZpY2UgZGRldjsJCS8qIERSTSBkZXZpY2UgZm9yIERTUyAqLworCXN0cnVjdCBkZXZp Y2UgKmRldjsJCS8qIFVuZGVybHlpbmcgRFNTIGRldmljZSAqLworCisJY29uc3Qgc3RydWN0IGRp c3BjX2ZlYXR1cmVzICpmZWF0OworCXN0cnVjdCBkaXNwY19kZXZpY2UgKmRpc3BjOworCisJdW5z aWduZWQgaW50IG51bV9jcnRjczsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGNzW1RJRFNTX01BWF9Q T1JUU107CisKKwl1bnNpZ25lZCBpbnQgbnVtX3BsYW5lczsKKwlzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZXNbVElEU1NfTUFYX1BMQU5FU107CisKKwlzcGlubG9ja190IHdhaXRfbG9jazsJLyogcHJv dGVjdHMgdGhlIGlycSBtYXNrcyAqLworCWRpc3BjX2lycV90IGlycV9tYXNrOwkvKiBlbmFibGVk IGlycXMgaW4gYWRkaXRpb24gdG8gd2FpdF9saXN0ICovCisJZGlzcGNfaXJxX3QgaXJxX3VmX21h c2s7IC8qIHVuZGVyZmxvdyBpcnEgYml0cyBmb3IgYWxsIHBsYW5lcyAqLworCisJc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnNhdmVkX3N0YXRlOworfTsKKworaW50IHRpZHNzX3J1bnRpbWVfZ2V0 KHN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzKTsKK3ZvaWQgdGlkc3NfcnVudGltZV9wdXQoc3Ry dWN0IHRpZHNzX2RldmljZSAqdGlkc3MpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS90aWRzcy90aWRzc19lbmNvZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlk c3NfZW5jb2Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzJk N2VkZDgwMDg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNz X2VuY29kZXIuYwpAQCAtMCwwICsxLDg4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUZXhhcyBJbnN0cnVtZW50cyBJbmNv cnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4g PHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+ CisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVs cGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2Yu aD4KKworI2luY2x1ZGUgInRpZHNzX2NydGMuaCIKKyNpbmNsdWRlICJ0aWRzc19kcnYuaCIKKyNp bmNsdWRlICJ0aWRzc19lbmNvZGVyLmgiCisKK3N0YXRpYyBpbnQgdGlkc3NfZW5jb2Rlcl9hdG9t aWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICAgIHN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGVuY29k ZXItPmRldjsKKwlzdHJ1Y3QgdGlkc3NfY3J0Y19zdGF0ZSAqdGNydGNfc3RhdGUgPSB0b190aWRz c19jcnRjX3N0YXRlKGNydGNfc3RhdGUpOworCXN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICpkaSA9 ICZjb25uX3N0YXRlLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5mbzsKKwlzdHJ1Y3QgZHJtX2JyaWRn ZSAqYnJpZGdlOworCWJvb2wgYnVzX2ZsYWdzX3NldCA9IGZhbHNlOworCisJZGV2X2RiZyhkZGV2 LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJLyoKKwkgKiBUYWtlIHRoZSBidXNfZmxhZ3Mg ZnJvbSB0aGUgZmlyc3QgYnJpZGdlIHRoYXQgZGVmaW5lcworCSAqIGJyaWRnZSB0aW1pbmdzLCBv ciBmcm9tIHRoZSBjb25uZWN0b3IncyBkaXNwbGF5X2luZm8gaWYgbm8KKwkgKiBicmlkZ2UgZGVm aW5lcyB0aGUgdGltaW5ncy4KKwkgKi8KKwlmb3IgKGJyaWRnZSA9IGVuY29kZXItPmJyaWRnZTsg YnJpZGdlOyBicmlkZ2UgPSBicmlkZ2UtPm5leHQpIHsKKwkJaWYgKCFicmlkZ2UtPnRpbWluZ3Mp CisJCQljb250aW51ZTsKKworCQl0Y3J0Y19zdGF0ZS0+YnVzX2ZsYWdzID0gYnJpZGdlLT50aW1p bmdzLT5pbnB1dF9idXNfZmxhZ3M7CisJCWJ1c19mbGFnc19zZXQgPSB0cnVlOworCQlicmVhazsK Kwl9CisKKwlpZiAoIWRpLT5idXNfZm9ybWF0cyB8fCBkaS0+bnVtX2J1c19mb3JtYXRzID09IDAp ICB7CisJCWRldl9lcnIoZGRldi0+ZGV2LCAiJXM6IE5vIGJ1c19mb3JtYXRzIGluIGNvbm5lY3Rl ZCBkaXNwbGF5XG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkv LyBYWFggYW55IGNsZWFuZXIgd2F5IHRvIHNldCBidXMgZm9ybWF0IGFuZCBmbGFncz8KKwl0Y3J0 Y19zdGF0ZS0+YnVzX2Zvcm1hdCA9IGRpLT5idXNfZm9ybWF0c1swXTsKKwlpZiAoIWJ1c19mbGFn c19zZXQpCisJCXRjcnRjX3N0YXRlLT5idXNfZmxhZ3MgPSBkaS0+YnVzX2ZsYWdzOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNz IGVuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5hdG9taWNfY2hlY2sgPSB0aWRzc19lbmNvZGVy X2F0b21pY19jaGVjaywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVu Y3MgZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGRybV9lbmNvZGVyX2NsZWFudXAsCit9 OworCitzdHJ1Y3QgZHJtX2VuY29kZXIgKnRpZHNzX2VuY29kZXJfY3JlYXRlKHN0cnVjdCB0aWRz c19kZXZpY2UgKnRpZHNzLAorCQkJCQkgdTMyIGVuY29kZXJfdHlwZSwgdTMyIHBvc3NpYmxlX2Ny dGNzKQoreworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jOworCWludCByZXQ7CisKKwllbmMgPSBk ZXZtX2t6YWxsb2ModGlkc3MtPmRldiwgc2l6ZW9mKCplbmMpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWVuYykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwllbmMtPnBvc3NpYmxlX2NydGNz ID0gcG9zc2libGVfY3J0Y3M7CisKKwlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KCZ0aWRzcy0+ZGRl diwgZW5jLCAmZW5jb2Rlcl9mdW5jcywKKwkJCSAgICAgICBlbmNvZGVyX3R5cGUsIE5VTEwpOwor CWlmIChyZXQgPCAwKQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJZHJtX2VuY29kZXJfaGVs cGVyX2FkZChlbmMsICZlbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisKKwlkZXZfZGJnKHRpZHNzLT5k ZXYsICJFbmNvZGVyIGNyZWF0ZSBkb25lXG4iKTsKKworCXJldHVybiBlbmM7Cit9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfZW5jb2Rlci5oIGIvZHJpdmVycy9ncHUv ZHJtL3RpZHNzL3RpZHNzX2VuY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjA2ODU0ZDY2ZTdlNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS90aWRzcy90aWRzc19lbmNvZGVyLmgKQEAgLTAsMCArMSwxNyBAQAorLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGV4YXMg SW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKiBBdXRob3I6 IFRvbWkgVmFsa2VpbmVuIDx0b21pLnZhbGtlaW5lbkB0aS5jb20+CisgKi8KKworI2lmbmRlZiBf X1RJRFNTX0VOQ09ERVJfSF9fCisjZGVmaW5lIF9fVElEU1NfRU5DT0RFUl9IX18KKworI2luY2x1 ZGUgPGRybS9kcm1fZW5jb2Rlci5oPgorCitzdHJ1Y3QgdGlkc3NfZGV2aWNlOworCitzdHJ1Y3Qg ZHJtX2VuY29kZXIgKnRpZHNzX2VuY29kZXJfY3JlYXRlKHN0cnVjdCB0aWRzc19kZXZpY2UgKnRp ZHNzLAorCQkJCQkgdTMyIGVuY29kZXJfdHlwZSwgdTMyIHBvc3NpYmxlX2NydGNzKTsKKworI2Vu ZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfaXJxLmMgYi9kcml2 ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi4zMzA4ZWZhY2FlMjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vdGlkc3MvdGlkc3NfaXJxLmMKQEAgLTAsMCArMSwxODUgQEAKKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRleGFzIElu c3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICogQXV0aG9yOiBU b21pIFZhbGtlaW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29tPgorICovCisKKyNpbmNsdWRlIDxk cm0vZHJtX3ByaW50Lmg+CisKKyNpbmNsdWRlICJ0aWRzc19jcnRjLmgiCisjaW5jbHVkZSAidGlk c3NfZGlzcGMuaCIKKyNpbmNsdWRlICJ0aWRzc19kcnYuaCIKKyNpbmNsdWRlICJ0aWRzc19pcnEu aCIKKyNpbmNsdWRlICJ0aWRzc19wbGFuZS5oIgorCisvKiBjYWxsIHdpdGggd2FpdF9sb2NrIGFu ZCBkaXNwYyBydW50aW1lIGhlbGQgKi8KK3N0YXRpYyB2b2lkIHRpZHNzX2lycV91cGRhdGUoc3Ry dWN0IHRpZHNzX2RldmljZSAqdGlkc3MpCit7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZ0aWRzcy0+ d2FpdF9sb2NrKTsKKworCWRpc3BjX3dyaXRlX2lycWVuYWJsZSh0aWRzcy0+ZGlzcGMsIHRpZHNz LT5pcnFfbWFzayk7Cit9CisKK3ZvaWQgdGlkc3NfaXJxX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRy bV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gY3J0Yy0+ZGV2Owor CXN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0 IHRpZHNzX2NydGMgKnRjcnRjID0gdG9fdGlkc3NfY3J0YyhjcnRjKTsKKwl1MzIgaHdfdmlkZW9w b3J0ID0gdGNydGMtPmh3X3ZpZGVvcG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bp bl9sb2NrX2lycXNhdmUoJnRpZHNzLT53YWl0X2xvY2ssIGZsYWdzKTsKKwl0aWRzcy0+aXJxX21h c2sgfD0gRFNTX0lSUV9WUF9WU1lOQ19FVkVOKGh3X3ZpZGVvcG9ydCkgfAorCQkJICAgRFNTX0lS UV9WUF9WU1lOQ19PREQoaHdfdmlkZW9wb3J0KTsKKwl0aWRzc19pcnFfdXBkYXRlKHRpZHNzKTsK KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aWRzcy0+d2FpdF9sb2NrLCBmbGFncyk7Cit9CisK K3ZvaWQgdGlkc3NfaXJxX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgdGlkc3NfZGV2 aWNlICp0aWRzcyA9IGRkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCB0aWRzc19jcnRjICp0Y3J0 YyA9IHRvX3RpZHNzX2NydGMoY3J0Yyk7CisJdTMyIGh3X3ZpZGVvcG9ydCA9IHRjcnRjLT5od192 aWRlb3BvcnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0 aWRzcy0+d2FpdF9sb2NrLCBmbGFncyk7CisJdGlkc3MtPmlycV9tYXNrICY9IH4oRFNTX0lSUV9W UF9WU1lOQ19FVkVOKGh3X3ZpZGVvcG9ydCkgfAorCQkJICAgICBEU1NfSVJRX1ZQX1ZTWU5DX09E RChod192aWRlb3BvcnQpKTsKKwl0aWRzc19pcnFfdXBkYXRlKHRpZHNzKTsKKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZ0aWRzcy0+d2FpdF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lk IHRpZHNzX2lycV9maWZvX3VuZGVyZmxvdyhzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcywKKwkJ CQkgICAgIGRpc3BjX2lycV90IGlycXN0YXR1cykKK3sKKwlzdGF0aWMgREVGSU5FX1JBVEVMSU1J VF9TVEFURShfcnMsIERFRkFVTFRfUkFURUxJTUlUX0lOVEVSVkFMLAorCQkJCSAgICAgIERFRkFV TFRfUkFURUxJTUlUX0JVUlNUKTsKKwlkaXNwY19pcnFfdCBtYXNrZWQ7CisJdW5zaWduZWQgaW50 IGk7CisKKwlzcGluX2xvY2soJnRpZHNzLT53YWl0X2xvY2spOworCW1hc2tlZCA9IGlycXN0YXR1 cyAmIHRpZHNzLT5pcnFfdWZfbWFzayAmIHRpZHNzLT5pcnFfbWFzazsKKwlzcGluX3VubG9jaygm dGlkc3MtPndhaXRfbG9jayk7CisKKwlpZiAoIW1hc2tlZCkKKwkJcmV0dXJuOworCisJaWYgKCFf X3JhdGVsaW1pdCgmX3JzKSkKKwkJcmV0dXJuOworCisJRFJNX0VSUk9SKCJGSUZPIHVuZGVyZmxv dyBvbiAiKTsKKworCWZvciAoaSA9IDA7IGkgPCBUSURTU19NQVhfUExBTkVTOyArK2kpIHsKKwkJ aWYgKG1hc2tlZCAmIERTU19JUlFfUExBTkVfRklGT19VTkRFUkZMT1coaSkpCisJCQlwcl9jb250 KCIldTolcyAiLCBpLCB0aWRzcy0+ZmVhdC0+dmlkX25hbWVbaV0pOworCX0KKworCXByX2NvbnQo IiglMDh4KVxuIiwgaXJxc3RhdHVzKTsKK30KKworaXJxcmV0dXJuX3QgdGlkc3NfaXJxX2hhbmRs ZXIoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gKHN0 cnVjdCBkcm1fZGV2aWNlICopIGFyZzsKKwlzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyA9IGRk ZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGludCBpZDsKKwlkaXNwY19pcnFfdCBpcnFzdGF0 dXM7CisKKwlpZiAoV0FSTl9PTighZGRldi0+aXJxX2VuYWJsZWQpKQorCQlyZXR1cm4gSVJRX05P TkU7CisKKwlpcnFzdGF0dXMgPSBkaXNwY19yZWFkX2FuZF9jbGVhcl9pcnFzdGF0dXModGlkc3Mt PmRpc3BjKTsKKworCWZvciAoaWQgPSAwOyBpZCA8IHRpZHNzLT5udW1fY3J0Y3M7IGlkKyspIHsK KwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gdGlkc3MtPmNydGNzW2lkXTsKKwkJc3RydWN0IHRp ZHNzX2NydGMgKnRjcnRjID0gdG9fdGlkc3NfY3J0YyhjcnRjKTsKKwkJdTMyIGh3X3ZpZGVvcG9y dCA9IHRjcnRjLT5od192aWRlb3BvcnQ7CisKKwkJaWYgKGlycXN0YXR1cyAmIChEU1NfSVJRX1ZQ X1ZTWU5DX0VWRU4oaHdfdmlkZW9wb3J0KSB8CisJCQkJIERTU19JUlFfVlBfVlNZTkNfT0REKGh3 X3ZpZGVvcG9ydCkpKQorCQkJdGlkc3NfY3J0Y192YmxhbmtfaXJxKGNydGMpOworCisJCWlmIChp cnFzdGF0dXMgJiAoRFNTX0lSUV9WUF9GUkFNRV9ET05FKGh3X3ZpZGVvcG9ydCkpKQorCQkJdGlk c3NfY3J0Y19mcmFtZWRvbmVfaXJxKGNydGMpOworCisJCWlmIChpcnFzdGF0dXMgJiBEU1NfSVJR X1ZQX1NZTkNfTE9TVChod192aWRlb3BvcnQpKQorCQkJdGlkc3NfY3J0Y19lcnJvcl9pcnEoY3J0 YywgaXJxc3RhdHVzKTsKKwl9CisKKwlpZiAoaXJxc3RhdHVzICYgRFNTX0lSUV9ERVZJQ0VfT0NQ X0VSUikKKwkJZGV2X2Vycl9yYXRlbGltaXRlZCh0aWRzcy0+ZGV2LCAiT0NQIGVycm9yXG4iKTsK KwlpZiAoaXJxc3RhdHVzICYgdGlkc3MtPmlycV91Zl9tYXNrKQorCQl0aWRzc19pcnFfZmlmb191 bmRlcmZsb3codGlkc3MsIGlycXN0YXR1cyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisK K3ZvaWQgdGlkc3NfaXJxX3Jlc3VtZShzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcykKK3sKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRpZHNzLT53YWl0X2xv Y2ssIGZsYWdzKTsKKwl0aWRzc19pcnFfdXBkYXRlKHRpZHNzKTsKKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZ0aWRzcy0+d2FpdF9sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgdGlkc3NfaXJxX3By ZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYpCit7CisJc3RydWN0IHRpZHNzX2Rldmlj ZSAqdGlkc3MgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKworCXNwaW5fbG9ja19pbml0KCZ0aWRzcy0+ d2FpdF9sb2NrKTsKKworCXRpZHNzX3J1bnRpbWVfZ2V0KHRpZHNzKTsKKworCWRpc3BjX3dyaXRl X2lycWVuYWJsZSh0aWRzcy0+ZGlzcGMsIDApOworCWRpc3BjX3JlYWRfYW5kX2NsZWFyX2lycXN0 YXR1cyh0aWRzcy0+ZGlzcGMpOworCisJdGlkc3NfcnVudGltZV9wdXQodGlkc3MpOworfQorCitp bnQgdGlkc3NfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2KQoreworCXN0 cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQg bG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXRpZHNzX3J1bnRpbWVfZ2V0KHRpZHNz KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0aWRzcy0+d2FpdF9sb2NrLCBmbGFncyk7CisKKwl0 aWRzcy0+aXJxX21hc2sgPSBEU1NfSVJRX0RFVklDRV9PQ1BfRVJSOworCisJdGlkc3MtPmlycV91 Zl9tYXNrID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgdGlkc3MtPm51bV9wbGFuZXM7ICsraSkgewor CQlzdHJ1Y3QgdGlkc3NfcGxhbmUgKnRwbGFuZSA9IHRvX3RpZHNzX3BsYW5lKHRpZHNzLT5wbGFu ZXNbaV0pOworCisJCXRpZHNzLT5pcnFfdWZfbWFzayB8PQorCQkJRFNTX0lSUV9QTEFORV9GSUZP X1VOREVSRkxPVyh0cGxhbmUtPmh3X3BsYW5lX2lkKTsKKwl9CisJdGlkc3MtPmlycV9tYXNrIHw9 IHRpZHNzLT5pcnFfdWZfbWFzazsKKworCWZvciAoaSA9IDA7IGkgPCB0aWRzcy0+bnVtX2NydGNz OyArK2kpIHsKKwkJc3RydWN0IHRpZHNzX2NydGMgKnRjcnRjID0gdG9fdGlkc3NfY3J0Yyh0aWRz cy0+Y3J0Y3NbaV0pOworCisJCXRpZHNzLT5pcnFfbWFzayB8PSBEU1NfSVJRX1ZQX1NZTkNfTE9T VCh0Y3J0Yy0+aHdfdmlkZW9wb3J0KTsKKworCQl0aWRzcy0+aXJxX21hc2sgfD0gRFNTX0lSUV9W UF9GUkFNRV9ET05FKHRjcnRjLT5od192aWRlb3BvcnQpOworCX0KKworCXRpZHNzX2lycV91cGRh dGUodGlkc3MpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGlkc3MtPndhaXRfbG9jaywg ZmxhZ3MpOworCisJdGlkc3NfcnVudGltZV9wdXQodGlkc3MpOworCisJcmV0dXJuIDA7Cit9CisK K3ZvaWQgdGlkc3NfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGRldikKK3sKKwlz dHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyA9IGRkZXYtPmRldl9wcml2YXRlOworCisJdGlkc3Nf cnVudGltZV9nZXQodGlkc3MpOworCWRpc3BjX3dyaXRlX2lycWVuYWJsZSh0aWRzcy0+ZGlzcGMs IDApOworCXRpZHNzX3J1bnRpbWVfcHV0KHRpZHNzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS90aWRzcy90aWRzc19pcnEuaCBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19p cnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjAzM2JjY2IxZTQ3 MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19pcnEuaApA QCAtMCwwICsxLDcyIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwor LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQg LSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4gPHRvbWkudmFs a2VpbmVuQHRpLmNvbT4KKyAqLworCisjaWZuZGVmIF9fVElEU1NfSVJRX0hfXworI2RlZmluZSBf X1RJRFNTX0lSUV9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlICJ0 aWRzc19kcnYuaCIKKworLyoKKyAqIFRoZSBJUlEgc3RhdHVzIGZyb20gdmFyaW91cyBESVNQQyBJ UlEgcmVnaXN0ZXJzIGFyZSBwYWNrZWQgaW50byBhIHNpbmdsZQorICogdmFsdWUsIHdoZXJlIHRo ZSBiaXRzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6CisgKgorICogYml0IGdyb3VwIHxkZXZ8d2Ig fG1yZzB8bXJnMXxtcmcyfG1yZzN8cGxhbmUwLTN8IDx1bnVzZWQ+IHwKKyAqIGJpdCB1c2UgICB8 RCAgfGZvdXxGRU9MfEZFT0x8RkVPTHxGRU9MfCAgVVVVVSAgfCAgICAgICAgICB8CisgKiBiaXQg bnVtYmVyfDAgIHwxLTN8NC03IHw4LTExfCAgMTItMTkgIHwgMjAtMjMgIHwgIDI0LTMxICAgfAor ICoKKyAqIGRldmljZSBiaXRzOglEID0gT0NQIGVycm9yCisgKiBXQiBiaXRzOglmID0gZnJhbWUg ZG9uZSB3YiwgbyA9IHdiIGJ1ZmZlciBvdmVyZmxvdywKKyAqCQl1ID0gd2IgYnVmZmVyIHVuY29t cGxldGUKKyAqIHZwIGJpdHM6CUYgPSBmcmFtZSBkb25lLCBFID0gdnN5bmMgZXZlbiwgTyA9IHZz eW5jIG9kZCwgTCA9IHN5bmMgbG9zdAorICogcGxhbmUgYml0czoJVSA9IGZpZm8gdW5kZXJmbG93 CisgKi8KKworI2RlZmluZSBEU1NfSVJRX0RFVklDRV9PQ1BfRVJSCQkJQklUX1VMTCgwKQorCisj ZGVmaW5lIERTU19JUlFfREVWSUNFX0ZSQU1FRE9ORVdCCQlCSVRfVUxMKDEpCisjZGVmaW5lIERT U19JUlFfREVWSUNFX1dCQlVGRkVST1ZFUkZMT1cJCUJJVF9VTEwoMikKKyNkZWZpbmUgRFNTX0lS UV9ERVZJQ0VfV0JVTkNPTVBMRVRFRVJST1IJQklUX1VMTCgzKQorI2RlZmluZSBEU1NfSVJRX0RF VklDRV9XQl9NQVNLCQkJR0VOTUFTS19VTEwoMywgMSkKKworI2RlZmluZSBEU1NfSVJRX1ZQX0JJ VF9OKGNoLCBiaXQpCSg0ICsgNCAqIChjaCkgKyAoYml0KSkKKyNkZWZpbmUgRFNTX0lSUV9QTEFO RV9CSVRfTihwbGFuZSwgYml0KSBcCisJKERTU19JUlFfVlBfQklUX04oVElEU1NfTUFYX1BPUlRT LCAwKSArIDEgKiAocGxhbmUpICsgKGJpdCkpCisKKyNkZWZpbmUgRFNTX0lSUV9WUF9CSVQoY2gs IGJpdCkJQklUX1VMTChEU1NfSVJRX1ZQX0JJVF9OKChjaCksIChiaXQpKSkKKyNkZWZpbmUgRFNT X0lSUV9QTEFORV9CSVQocGxhbmUsIGJpdCkgXAorCUJJVF9VTEwoRFNTX0lSUV9QTEFORV9CSVRf TigocGxhbmUpLCAoYml0KSkpCisKKyNkZWZpbmUgRFNTX0lSUV9WUF9NQVNLKGNoKSBcCisJR0VO TUFTS19VTEwoRFNTX0lSUV9WUF9CSVRfTigoY2gpLCAzKSwgRFNTX0lSUV9WUF9CSVRfTigoY2gp LCAwKSkKKyNkZWZpbmUgRFNTX0lSUV9QTEFORV9NQVNLKHBsYW5lKSBcCisJR0VOTUFTS19VTEwo RFNTX0lSUV9QTEFORV9CSVRfTigocGxhbmUpLCAwKSwgXAorCQkgICAgRFNTX0lSUV9QTEFORV9C SVRfTigocGxhbmUpLCAwKSkKKworI2RlZmluZSBEU1NfSVJRX1ZQX0ZSQU1FX0RPTkUoY2gpCURT U19JUlFfVlBfQklUKChjaCksIDApCisjZGVmaW5lIERTU19JUlFfVlBfVlNZTkNfRVZFTihjaCkJ RFNTX0lSUV9WUF9CSVQoKGNoKSwgMSkKKyNkZWZpbmUgRFNTX0lSUV9WUF9WU1lOQ19PREQoY2gp CURTU19JUlFfVlBfQklUKChjaCksIDIpCisjZGVmaW5lIERTU19JUlFfVlBfU1lOQ19MT1NUKGNo KQlEU1NfSVJRX1ZQX0JJVCgoY2gpLCAzKQorCisjZGVmaW5lIERTU19JUlFfUExBTkVfRklGT19V TkRFUkZMT1cocGxhbmUpCURTU19JUlFfUExBTkVfQklUKChwbGFuZSksIDApCisKK3N0cnVjdCBk cm1fY3J0YzsKK3N0cnVjdCBkcm1fZGV2aWNlOworCitzdHJ1Y3QgdGlkc3NfZGV2aWNlOworCit2 b2lkIHRpZHNzX2lycV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2b2lk IHRpZHNzX2lycV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOworCit2b2lk IHRpZHNzX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2KTsKK2ludCB0aWRz c19pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYpOwordm9pZCB0aWRzc19p cnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2KTsKK2lycXJldHVybl90IHRpZHNz X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZyk7CisKK3ZvaWQgdGlkc3NfaXJxX3Jlc3Vt ZShzdHJ1Y3QgdGlkc3NfZGV2aWNlICp0aWRzcyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3Rp ZHNzX2ttcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTZhMzk5 YTM5NmZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNzX2tt cy5jCkBAIC0wLDAgKzEsMjQ4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0 ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4gPHRvbWku dmFsa2VpbmVuQHRpLmNvbT4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2JyaWRn ZS5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2ZiX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1 ZGUgPGRybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f b2YuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8ZHJtL2RybV92Ymxh bmsuaD4KKworI2luY2x1ZGUgInRpZHNzX2NydGMuaCIKKyNpbmNsdWRlICJ0aWRzc19kaXNwYy5o IgorI2luY2x1ZGUgInRpZHNzX2Rydi5oIgorI2luY2x1ZGUgInRpZHNzX2VuY29kZXIuaCIKKyNp bmNsdWRlICJ0aWRzc19rbXMuaCIKKyNpbmNsdWRlICJ0aWRzc19wbGFuZS5oIgorCitzdGF0aWMg dm9pZCB0aWRzc19hdG9taWNfY29tbWl0X3RhaWwoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9s ZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IG9sZF9zdGF0ZS0+ZGV2Owor CXN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7CisKKwlkZXZf ZGJnKGRkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwl0aWRzc19ydW50aW1lX2dldCh0 aWRzcyk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcyhkZGV2 LCBvbGRfc3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXMoZGRldiwgb2xk X3N0YXRlLCAwKTsKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzKGRk ZXYsIG9sZF9zdGF0ZSk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfaHdfZG9uZShvbGRf c3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX2ZsaXBfZG9uZShkZGV2LCBvbGRf c3RhdGUpOworCisJZHJtX2F0b21pY19oZWxwZXJfY2xlYW51cF9wbGFuZXMoZGRldiwgb2xkX3N0 YXRlKTsKKworCXRpZHNzX3J1bnRpbWVfcHV0KHRpZHNzKTsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fbW9kZV9jb25maWdfaGVscGVyX2Z1bmNzIG1vZGVfY29uZmlnX2hlbHBlcl9mdW5j cyA9IHsKKwkuYXRvbWljX2NvbW1pdF90YWlsID0gdGlkc3NfYXRvbWljX2NvbW1pdF90YWlsLAor fTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgbW9kZV9jb25m aWdfZnVuY3MgPSB7CisJLmZiX2NyZWF0ZSA9IGRybV9nZW1fZmJfY3JlYXRlLAorCS5hdG9taWNf Y2hlY2sgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKKwkuYXRvbWljX2NvbW1pdCA9IGRybV9h dG9taWNfaGVscGVyX2NvbW1pdCwKK307CisKK3N0YXRpYyBpbnQgdGlkc3NfZGlzcGNfbW9kZXNl dF9pbml0KHN0cnVjdCB0aWRzc19kZXZpY2UgKnRpZHNzKQoreworCXN0cnVjdCBkZXZpY2UgKmRl diA9IHRpZHNzLT5kZXY7CisJdW5zaWduZWQgaW50IGZvdXJjY3NfbGVuOworCWNvbnN0IHUzMiAq Zm91cmNjcyA9IGRpc3BjX3BsYW5lX2Zvcm1hdHModGlkc3MtPmRpc3BjLCAmZm91cmNjc19sZW4p OworCXVuc2lnbmVkIGludCBpOworCisJc3RydWN0IHBpcGUgeworCQl1MzIgaHdfdmlkZW9wb3J0 OworCQlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlOworCQl1MzIgZW5jX3R5cGU7CisJfTsKKwor CWNvbnN0IHN0cnVjdCBkaXNwY19mZWF0dXJlcyAqZmVhdCA9IHRpZHNzLT5mZWF0OworCXUzMiBt YXhfdnBzID0gZmVhdC0+bnVtX3ZwczsKKwl1MzIgbWF4X3BsYW5lcyA9IGZlYXQtPm51bV9wbGFu ZXM7CisKKwlzdHJ1Y3QgcGlwZSBwaXBlc1tUSURTU19NQVhfUE9SVFNdOworCXUzMiBudW1fcGlw ZXMgPSAwOworCXUzMiBjcnRjX21hc2s7CisKKwkvKiBmaXJzdCBmaW5kIGFsbCB0aGUgY29ubmVj dGVkIHBhbmVscyAmIGJyaWRnZXMgKi8KKworCWZvciAoaSA9IDA7IGkgPCBtYXhfdnBzOyBpKysp IHsKKwkJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7CisJCXN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2U7CisJCXUzMiBlbmNfdHlwZSA9IERSTV9NT0RFX0VOQ09ERVJfTk9ORTsKKwkJaW50IHJldDsK KworCQlyZXQgPSBkcm1fb2ZfZmluZF9wYW5lbF9vcl9icmlkZ2UoZGV2LT5vZl9ub2RlLCBpLCAw LAorCQkJCQkJICAmcGFuZWwsICZicmlkZ2UpOworCQlpZiAocmV0ID09IC1FTk9ERVYpIHsKKwkJ CWRldl9kYmcoZGV2LCAibm8gcGFuZWwvYnJpZGdlIGZvciBwb3J0ICVkXG4iLCBpKTsKKwkJCWNv bnRpbnVlOworCQl9IGVsc2UgaWYgKHJldCkgeworCQkJZGV2X2RiZyhkZXYsICJwb3J0ICVkIHBy b2JlIHJldHVybmVkICVkXG4iLCBpLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWlm IChwYW5lbCkgeworCQkJdTMyIGNvbm5fdHlwZTsKKworCQkJZGV2X2RiZyhkZXYsICJTZXR0aW5n IHVwIHBhbmVsIGZvciBwb3J0ICVkXG4iLCBpKTsKKworCQkJc3dpdGNoIChmZWF0LT52cF9idXNf dHlwZVtpXSkgeworCQkJY2FzZSBESVNQQ19WUF9PTERJOgorCQkJCWVuY190eXBlID0gRFJNX01P REVfRU5DT0RFUl9MVkRTOworCQkJCWNvbm5fdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRT OworCQkJCWJyZWFrOworCQkJY2FzZSBESVNQQ19WUF9EUEk6CisJCQkJZW5jX3R5cGUgPSBEUk1f TU9ERV9FTkNPREVSX0RQSTsKKwkJCQljb25uX3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfTFZE UzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJV0FSTl9PTigxKTsKKwkJCQlyZXR1cm4g LUVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHBhbmVsLT5jb25uZWN0b3JfdHlw ZSAhPSBjb25uX3R5cGUpIHsKKwkJCQlkZXZfZXJyKGRldiwKKwkJCQkJICIlczogUGFuZWwgJXMg aGFzIGluY29tcGF0aWJsZSBjb25uZWN0b3IgdHlwZSBmb3IgdnAlZCAoJWQgIT0gJWQpXG4iLAor CQkJCQkgX19mdW5jX18sIGRldl9uYW1lKHBhbmVsLT5kZXYpLCBpLAorCQkJCQkgcGFuZWwtPmNv bm5lY3Rvcl90eXBlLCBjb25uX3R5cGUpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJ CQlicmlkZ2UgPSBkZXZtX2RybV9wYW5lbF9icmlkZ2VfYWRkKGRldiwgcGFuZWwpOworCQkJaWYg KElTX0VSUihicmlkZ2UpKSB7CisJCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gc2V0IHVwIHBh bmVsIGJyaWRnZSBmb3IgcG9ydCAlZFxuIiwgaSk7CisJCQkJcmV0dXJuIFBUUl9FUlIoYnJpZGdl KTsKKwkJCX0KKwkJfQorCisJCXBpcGVzW251bV9waXBlc10uaHdfdmlkZW9wb3J0ID0gaTsKKwkJ cGlwZXNbbnVtX3BpcGVzXS5icmlkZ2UgPSBicmlkZ2U7CisJCXBpcGVzW251bV9waXBlc10uZW5j X3R5cGUgPSBlbmNfdHlwZTsKKwkJbnVtX3BpcGVzKys7CisJfQorCisJLyogYWxsIHBsYW5lcyBj YW4gYmUgb24gYW55IGNydGMgKi8KKwljcnRjX21hc2sgPSAoMSA8PCBudW1fcGlwZXMpIC0gMTsK KworCS8qIHRoZW4gY3JlYXRlIGEgcGxhbmUsIGEgY3J0YyBhbmQgYW4gZW5jb2RlciBmb3IgZWFj aCBwYW5lbC9icmlkZ2UgKi8KKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGlwZXM7ICsraSkgewor CQlzdHJ1Y3QgdGlkc3NfcGxhbmUgKnRwbGFuZTsKKwkJc3RydWN0IHRpZHNzX2NydGMgKnRjcnRj OworCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuYzsKKwkJdTMyIGh3X3BsYW5lX2lkID0gZmVhdC0+ dmlkX29yZGVyW3RpZHNzLT5udW1fcGxhbmVzXTsKKwkJaW50IHJldDsKKworCQl0cGxhbmUgPSB0 aWRzc19wbGFuZV9jcmVhdGUodGlkc3MsIGh3X3BsYW5lX2lkLAorCQkJCQkgICAgRFJNX1BMQU5F X1RZUEVfUFJJTUFSWSwgY3J0Y19tYXNrLAorCQkJCQkgICAgZm91cmNjcywgZm91cmNjc19sZW4p OworCQlpZiAoSVNfRVJSKHRwbGFuZSkpIHsKKwkJCWRldl9lcnIodGlkc3MtPmRldiwgInBsYW5l IGNyZWF0ZSBmYWlsZWRcbiIpOworCQkJcmV0dXJuIFBUUl9FUlIodHBsYW5lKTsKKwkJfQorCisJ CXRpZHNzLT5wbGFuZXNbdGlkc3MtPm51bV9wbGFuZXMrK10gPSAmdHBsYW5lLT5wbGFuZTsKKwor CQl0Y3J0YyA9IHRpZHNzX2NydGNfY3JlYXRlKHRpZHNzLCBwaXBlc1tpXS5od192aWRlb3BvcnQs CisJCQkJCSAgJnRwbGFuZS0+cGxhbmUpOworCQlpZiAoSVNfRVJSKHRjcnRjKSkgeworCQkJZGV2 X2Vycih0aWRzcy0+ZGV2LCAiY3J0YyBjcmVhdGUgZmFpbGVkXG4iKTsKKwkJCXJldHVybiBQVFJf RVJSKHRjcnRjKTsKKwkJfQorCisJCXRpZHNzLT5jcnRjc1t0aWRzcy0+bnVtX2NydGNzKytdID0g JnRjcnRjLT5jcnRjOworCisJCWVuYyA9IHRpZHNzX2VuY29kZXJfY3JlYXRlKHRpZHNzLCBwaXBl c1tpXS5lbmNfdHlwZSwKKwkJCQkJICAgMSA8PCB0Y3J0Yy0+Y3J0Yy5pbmRleCk7CisJCWlmIChJ U19FUlIoZW5jKSkgeworCQkJZGV2X2Vycih0aWRzcy0+ZGV2LCAiZW5jb2RlciBjcmVhdGUgZmFp bGVkXG4iKTsKKwkJCXJldHVybiBQVFJfRVJSKGVuYyk7CisJCX0KKworCQlyZXQgPSBkcm1fYnJp ZGdlX2F0dGFjaChlbmMsIHBpcGVzW2ldLmJyaWRnZSwgTlVMTCk7CisJCWlmIChyZXQpIHsKKwkJ CWRldl9lcnIodGlkc3MtPmRldiwgImJyaWRnZSBhdHRhY2ggZmFpbGVkOiAlZFxuIiwgcmV0KTsK KwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwkvKiBjcmVhdGUgb3ZlcmxheSBwbGFuZXMgb2Yg dGhlIGxlZnRvdmVyIHBsYW5lcyAqLworCisJd2hpbGUgKHRpZHNzLT5udW1fcGxhbmVzIDwgbWF4 X3BsYW5lcykgeworCQlzdHJ1Y3QgdGlkc3NfcGxhbmUgKnRwbGFuZTsKKwkJdTMyIGh3X3BsYW5l X2lkID0gZmVhdC0+dmlkX29yZGVyW3RpZHNzLT5udW1fcGxhbmVzXTsKKworCQl0cGxhbmUgPSB0 aWRzc19wbGFuZV9jcmVhdGUodGlkc3MsIGh3X3BsYW5lX2lkLAorCQkJCQkgICAgRFJNX1BMQU5F X1RZUEVfT1ZFUkxBWSwgY3J0Y19tYXNrLAorCQkJCQkgICAgZm91cmNjcywgZm91cmNjc19sZW4p OworCisJCWlmIChJU19FUlIodHBsYW5lKSkgeworCQkJZGV2X2Vycih0aWRzcy0+ZGV2LCAicGxh bmUgY3JlYXRlIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gUFRSX0VSUih0cGxhbmUpOworCQl9CisK KwkJdGlkc3MtPnBsYW5lc1t0aWRzcy0+bnVtX3BsYW5lcysrXSA9ICZ0cGxhbmUtPnBsYW5lOwor CX0KKworCXJldHVybiAwOworfQorCitpbnQgdGlkc3NfbW9kZXNldF9pbml0KHN0cnVjdCB0aWRz c19kZXZpY2UgKnRpZHNzKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gJnRpZHNzLT5k ZGV2OworCXVuc2lnbmVkIGludCBpOworCWludCByZXQ7CisKKwlkZXZfZGJnKHRpZHNzLT5kZXYs ICIlc1xuIiwgX19mdW5jX18pOworCisJZHJtX21vZGVfY29uZmlnX2luaXQoZGRldik7CisKKwlk ZGV2LT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSA4OworCWRkZXYtPm1vZGVfY29uZmlnLm1pbl9o ZWlnaHQgPSA4OworCWRkZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IDgwOTY7CisJZGRldi0+ bW9kZV9jb25maWcubWF4X2hlaWdodCA9IDgwOTY7CisJZGRldi0+bW9kZV9jb25maWcubm9ybWFs aXplX3pwb3MgPSB0cnVlOworCWRkZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gJm1vZGVfY29uZmln X2Z1bmNzOworCWRkZXYtPm1vZGVfY29uZmlnLmhlbHBlcl9wcml2YXRlID0gJm1vZGVfY29uZmln X2hlbHBlcl9mdW5jczsKKworCXJldCA9IHRpZHNzX2Rpc3BjX21vZGVzZXRfaW5pdCh0aWRzcyk7 CisJaWYgKHJldCkKKwkJZ290byBlcnJfbW9kZV9jb25maWdfY2xlYW51cDsKKworCXJldCA9IGRy bV92YmxhbmtfaW5pdChkZGV2LCB0aWRzcy0+bnVtX2NydGNzKTsKKwlpZiAocmV0KQorCQlnb3Rv IGVycl9tb2RlX2NvbmZpZ19jbGVhbnVwOworCisJLyogU3RhcnQgd2l0aCB2ZXJ0aWNhbCBibGFu a2luZyBpbnRlcnJ1cHQgcmVwb3J0aW5nIGRpc2FibGVkLiAqLworCWZvciAoaSA9IDA7IGkgPCB0 aWRzcy0+bnVtX2NydGNzOyArK2kpCisJCWRybV9jcnRjX3ZibGFua19yZXNldCh0aWRzcy0+Y3J0 Y3NbaV0pOworCisJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRkZXYpOworCisJZGV2X2RiZyh0aWRz cy0+ZGV2LCAiJXMgZG9uZVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7CisKK2Vycl9tb2Rl X2NvbmZpZ19jbGVhbnVwOgorCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRkZXYpOworCXJldHVy biByZXQ7Cit9CisKK3ZvaWQgdGlkc3NfbW9kZXNldF9jbGVhbnVwKHN0cnVjdCB0aWRzc19kZXZp Y2UgKnRpZHNzKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gJnRpZHNzLT5kZGV2Owor CisJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGRldik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vdGlkc3MvdGlkc3Nfa21zLmggYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3Nf a21zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kZGE1NjI1ZDAx MjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3Nfa21zLmgK QEAgLTAsMCArMSwxNSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8K Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVk IC0gaHR0cDovL3d3dy50aS5jb20vCisgKiBBdXRob3I6IFRvbWkgVmFsa2VpbmVuIDx0b21pLnZh bGtlaW5lbkB0aS5jb20+CisgKi8KKworI2lmbmRlZiBfX1RJRFNTX0tNU19IX18KKyNkZWZpbmUg X19USURTU19LTVNfSF9fCisKK3N0cnVjdCB0aWRzc19kZXZpY2U7CisKK2ludCB0aWRzc19tb2Rl c2V0X2luaXQoc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MpOwordm9pZCB0aWRzc19tb2Rlc2V0 X2NsZWFudXAoc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MpOworCisjZW5kaWYKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJt L3RpZHNzL3RpZHNzX3BsYW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi5mZjk5YjJkZDRhMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlk c3MvdGlkc3NfcGxhbmUuYwpAQCAtMCwwICsxLDIxNyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGV4YXMgSW5zdHJ1bWVu dHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKiBBdXRob3I6IFRvbWkgVmFs a2VpbmVuIDx0b21pLnZhbGtlaW5lbkB0aS5jb20+CisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1 ZGUgPGRybS9kcm1fZm91cmNjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+ CisKKyNpbmNsdWRlICJ0aWRzc19jcnRjLmgiCisjaW5jbHVkZSAidGlkc3NfZGlzcGMuaCIKKyNp bmNsdWRlICJ0aWRzc19kcnYuaCIKKyNpbmNsdWRlICJ0aWRzc19wbGFuZS5oIgorCisvKiBkcm1f cGxhbmVfaGVscGVyX2Z1bmNzICovCisKK3N0YXRpYyBpbnQgdGlkc3NfcGxhbmVfYXRvbWljX2No ZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IHBsYW5lLT5kZXY7CisJ c3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qg dGlkc3NfcGxhbmUgKnRwbGFuZSA9IHRvX3RpZHNzX3BsYW5lKHBsYW5lKTsKKwljb25zdCBzdHJ1 Y3QgZHJtX2Zvcm1hdF9pbmZvICpmaW5mbzsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNf c3RhdGU7CisJdTMyIGh3X3BsYW5lID0gdHBsYW5lLT5od19wbGFuZV9pZDsKKwl1MzIgaHdfdmlk ZW9wb3J0OworCWludCByZXQ7CisKKwlkZXZfZGJnKGRkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNf Xyk7CisKKwlpZiAoIXN0YXRlLT5jcnRjKSB7CisJCS8qCisJCSAqIFRoZSB2aXNpYmxlIGZpZWxk IGlzIG5vdCByZXNldCBieSB0aGUgRFJNIGNvcmUgYnV0IG9ubHkKKwkJICogdXBkYXRlZCBieSBk cm1fcGxhbmVfaGVscGVyX2NoZWNrX3N0YXRlKCksIHNldCBpdCBtYW51YWxseS4KKwkJICovCisJ CXN0YXRlLT52aXNpYmxlID0gZmFsc2U7CisJCXJldHVybiAwOworCX0KKworCWNydGNfc3RhdGUg PSBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmNydGMpOwor CWlmIChJU19FUlIoY3J0Y19zdGF0ZSkpCisJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOwor CisJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2tfcGxhbmVfc3RhdGUoc3RhdGUsIGNydGNf c3RhdGUsIDAsCisJCQkJCQkgIElOVF9NQVgsIHRydWUsIHRydWUpOworCWlmIChyZXQgPCAwKQor CQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBUaGUgSFcgaXMgb25seSBhYmxlIHRvIHN0YXJ0IGRy YXdpbmcgYXQgc3VicGl4ZWwgYm91bmRhcnkKKwkgKiAodGhlIHR3byBmaXJzdCBjaGVja3MgYmVs bG93KS4gQXQgdGhlIGVuZCBvZiBhIHJvdyB0aGUgSFcKKwkgKiBjYW4gb25seSBqdW1wIGludGVn ZXIgbnVtYmVyIG9mIHN1YnBpeGVscyBmb3J3YXJkIHRvIHRoZQorCSAqIGJlZ2lubmluZyBvZiB0 aGUgbmV4dCByb3cuIFNvIHdlIGNhbiBvbmx5IHNob3cgcGljdHVyZSB3aXRoCisJICogaW50ZWdl ciBzdWJwaXhlbCB3aWR0aCAodGhlIHRoaXJkIGNoZWNrKS4gSG93ZXZlciwgYWZ0ZXIKKwkgKiBy ZWFjaGluZyB0aGUgZW5kIG9mIHRoZSBkcmF3biBwaWN0dXJlIHRoZSBkcmF3aW5nIHN0YXJ0cwor CSAqIGFnYWluIGF0IHRoZSBhYnNvbHV0ZSBtZW1vcnkgYWRkcmVzcyB3aGVyZSB0b3AgbGVmdCBj b3JuZXIKKwkgKiBwb3NpdGlvbiBvZiB0aGUgZHJhd24gcGljdHVyZSBpcyAoc28gdGhlcmUgaXMg bm8gbmVlZCB0bworCSAqIGNoZWNrIGZvciBvZGQgaGVpZ2h0KS4KKwkgKi8KKworCWZpbmZvID0g ZHJtX2Zvcm1hdF9pbmZvKHN0YXRlLT5mYi0+Zm9ybWF0LT5mb3JtYXQpOworCisJaWYgKChzdGF0 ZS0+c3JjX3ggPj4gMTYpICUgZmluZm8tPmhzdWIgIT0gMCkgeworCQlkZXZfZGJnKGRkZXYtPmRl diwKKwkJCSIlczogeC1wb3NpdGlvbiAldSBub3QgZGl2aXNpYmxlIHN1YnBpeGVsIHNpemUgJXVc biIsCisJCQlfX2Z1bmNfXywgKHN0YXRlLT5zcmNfeCA+PiAxNiksIGZpbmZvLT5oc3ViKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKChzdGF0ZS0+c3JjX3kgPj4gMTYpICUgZmluZm8t PnZzdWIgIT0gMCkgeworCQlkZXZfZGJnKGRkZXYtPmRldiwKKwkJCSIlczogeS1wb3NpdGlvbiAl dSBub3QgZGl2aXNpYmxlIHN1YnBpeGVsIHNpemUgJXVcbiIsCisJCQlfX2Z1bmNfXywgKHN0YXRl LT5zcmNfeSA+PiAxNiksIGZpbmZvLT52c3ViKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ aWYgKChzdGF0ZS0+c3JjX3cgPj4gMTYpICUgZmluZm8tPmhzdWIgIT0gMCkgeworCQlkZXZfZGJn KGRkZXYtPmRldiwKKwkJCSIlczogc3JjIHdpZHRoICV1IG5vdCBkaXZpc2libGUgYnkgc3VicGl4 ZWwgc2l6ZSAldVxuIiwKKwkJCSBfX2Z1bmNfXywgKHN0YXRlLT5zcmNfdyA+PiAxNiksIGZpbmZv LT5oc3ViKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFzdGF0ZS0+dmlzaWJsZSkK KwkJcmV0dXJuIDA7CisKKwlod192aWRlb3BvcnQgPSB0b190aWRzc19jcnRjKHN0YXRlLT5jcnRj KS0+aHdfdmlkZW9wb3J0OworCisJcmV0ID0gZGlzcGNfcGxhbmVfY2hlY2sodGlkc3MtPmRpc3Bj LCBod19wbGFuZSwgc3RhdGUsIGh3X3ZpZGVvcG9ydCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0aWRzc19wbGFuZV9hdG9taWNfdXBk YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IHBsYW5lLT5k ZXY7CisJc3RydWN0IHRpZHNzX2RldmljZSAqdGlkc3MgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKwlz dHJ1Y3QgdGlkc3NfcGxhbmUgKnRwbGFuZSA9IHRvX3RpZHNzX3BsYW5lKHBsYW5lKTsKKwlzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHBsYW5lLT5zdGF0ZTsKKwl1MzIgaHdfdmlkZW9w b3J0OworCWludCByZXQ7CisKKwlkZXZfZGJnKGRkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7 CisKKwlpZiAoIXN0YXRlLT52aXNpYmxlKSB7CisJCWRpc3BjX3BsYW5lX2VuYWJsZSh0aWRzcy0+ ZGlzcGMsIHRwbGFuZS0+aHdfcGxhbmVfaWQsIGZhbHNlKTsKKwkJcmV0dXJuOworCX0KKworCWh3 X3ZpZGVvcG9ydCA9IHRvX3RpZHNzX2NydGMoc3RhdGUtPmNydGMpLT5od192aWRlb3BvcnQ7CisK KwlyZXQgPSBkaXNwY19wbGFuZV9zZXR1cCh0aWRzcy0+ZGlzcGMsIHRwbGFuZS0+aHdfcGxhbmVf aWQsCisJCQkJc3RhdGUsIGh3X3ZpZGVvcG9ydCk7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo cGxhbmUtPmRldi0+ZGV2LCAiJXM6IEZhaWxlZCB0byBzZXR1cCBwbGFuZSAlZFxuIiwKKwkJCV9f ZnVuY19fLCB0cGxhbmUtPmh3X3BsYW5lX2lkKTsKKwkJZGlzcGNfcGxhbmVfZW5hYmxlKHRpZHNz LT5kaXNwYywgdHBsYW5lLT5od19wbGFuZV9pZCwgZmFsc2UpOworCQlyZXR1cm47CisJfQorCisJ ZGlzcGNfcGxhbmVfZW5hYmxlKHRpZHNzLT5kaXNwYywgdHBsYW5lLT5od19wbGFuZV9pZCwgdHJ1 ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRpZHNzX3BsYW5lX2F0b21pY19kaXNhYmxlKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRf c3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBwbGFuZS0+ZGV2OworCXN0cnVj dCB0aWRzc19kZXZpY2UgKnRpZHNzID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHRpZHNz X3BsYW5lICp0cGxhbmUgPSB0b190aWRzc19wbGFuZShwbGFuZSk7CisKKwlkZXZfZGJnKGRkZXYt PmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlkaXNwY19wbGFuZV9lbmFibGUodGlkc3MtPmRp c3BjLCB0cGxhbmUtPmh3X3BsYW5lX2lkLCBmYWxzZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyB0aWRzc19wbGFuZV9oZWxwZXJfZnVuY3MgPSB7CisJ LmF0b21pY19jaGVjayA9IHRpZHNzX3BsYW5lX2F0b21pY19jaGVjaywKKwkuYXRvbWljX3VwZGF0 ZSA9IHRpZHNzX3BsYW5lX2F0b21pY191cGRhdGUsCisJLmF0b21pY19kaXNhYmxlID0gdGlkc3Nf cGxhbmVfYXRvbWljX2Rpc2FibGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFu ZV9mdW5jcyB0aWRzc19wbGFuZV9mdW5jcyA9IHsKKwkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21p Y19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxw ZXJfZGlzYWJsZV9wbGFuZSwKKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNl dCwKKwkuZGVzdHJveSA9IGRybV9wbGFuZV9jbGVhbnVwLAorCS5hdG9taWNfZHVwbGljYXRlX3N0 YXRlID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNf ZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCit9 OworCitzdHJ1Y3QgdGlkc3NfcGxhbmUgKnRpZHNzX3BsYW5lX2NyZWF0ZShzdHJ1Y3QgdGlkc3Nf ZGV2aWNlICp0aWRzcywKKwkJCQkgICAgICAgdTMyIGh3X3BsYW5lX2lkLCB1MzIgcGxhbmVfdHlw ZSwKKwkJCQkgICAgICAgdTMyIGNydGNfbWFzaywgY29uc3QgdTMyICpmb3JtYXRzLAorCQkJCSAg ICAgICB1MzIgbnVtX2Zvcm1hdHMpCit7CisJc3RydWN0IHRpZHNzX3BsYW5lICp0cGxhbmU7CisJ ZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlOworCXUzMiBwb3NzaWJsZV9jcnRjczsKKwl1MzIgbnVt X3BsYW5lcyA9IHRpZHNzLT5mZWF0LT5udW1fcGxhbmVzOworCXUzMiBjb2xvcl9lbmNvZGluZ3Mg PSAoQklUKERSTV9DT0xPUl9ZQ0JDUl9CVDYwMSkgfAorCQkJICAgICAgIEJJVChEUk1fQ09MT1Jf WUNCQ1JfQlQ3MDkpKTsKKwl1MzIgY29sb3JfcmFuZ2VzID0gKEJJVChEUk1fQ09MT1JfWUNCQ1Jf RlVMTF9SQU5HRSkgfAorCQkJICAgIEJJVChEUk1fQ09MT1JfWUNCQ1JfTElNSVRFRF9SQU5HRSkp OworCXUzMiBkZWZhdWx0X2VuY29kaW5nID0gRFJNX0NPTE9SX1lDQkNSX0JUNjAxOworCXUzMiBk ZWZhdWx0X3JhbmdlID0gRFJNX0NPTE9SX1lDQkNSX0ZVTExfUkFOR0U7CisJdTMyIGJsZW5kX21v ZGVzID0gKEJJVChEUk1fTU9ERV9CTEVORF9QUkVNVUxUSSkgfAorCQkJICAgQklUKERSTV9NT0RF X0JMRU5EX0NPVkVSQUdFKSk7CisJaW50IHJldDsKKworCXRwbGFuZSA9IGRldm1fa3phbGxvYyh0 aWRzcy0+ZGV2LCBzaXplb2YoKnRwbGFuZSksIEdGUF9LRVJORUwpOworCWlmICghdHBsYW5lKQor CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXRwbGFuZS0+aHdfcGxhbmVfaWQgPSBod19w bGFuZV9pZDsKKworCXBvc3NpYmxlX2NydGNzID0gY3J0Y19tYXNrOworCXR5cGUgPSBwbGFuZV90 eXBlOworCisJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZ0aWRzcy0+ZGRldiwgJnRw bGFuZS0+cGxhbmUsCisJCQkJICAgICAgIHBvc3NpYmxlX2NydGNzLAorCQkJCSAgICAgICAmdGlk c3NfcGxhbmVfZnVuY3MsCisJCQkJICAgICAgIGZvcm1hdHMsIG51bV9mb3JtYXRzLAorCQkJCSAg ICAgICBOVUxMLCB0eXBlLCBOVUxMKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIEVSUl9QVFIo cmV0KTsKKworCWRybV9wbGFuZV9oZWxwZXJfYWRkKCZ0cGxhbmUtPnBsYW5lLCAmdGlkc3NfcGxh bmVfaGVscGVyX2Z1bmNzKTsKKworCWRybV9wbGFuZV9jcmVhdGVfenBvc19wcm9wZXJ0eSgmdHBs YW5lLT5wbGFuZSwgaHdfcGxhbmVfaWQsIDAsCisJCQkJICAgICAgIG51bV9wbGFuZXMgLSAxKTsK KworCXJldCA9IGRybV9wbGFuZV9jcmVhdGVfY29sb3JfcHJvcGVydGllcygmdHBsYW5lLT5wbGFu ZSwKKwkJCQkJCWNvbG9yX2VuY29kaW5ncywKKwkJCQkJCWNvbG9yX3JhbmdlcywKKwkJCQkJCWRl ZmF1bHRfZW5jb2RpbmcsCisJCQkJCQlkZWZhdWx0X3JhbmdlKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gRVJSX1BUUihyZXQpOworCisJcmV0ID0gZHJtX3BsYW5lX2NyZWF0ZV9hbHBoYV9wcm9wZXJ0 eSgmdHBsYW5lLT5wbGFuZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwor CXJldCA9IGRybV9wbGFuZV9jcmVhdGVfYmxlbmRfbW9kZV9wcm9wZXJ0eSgmdHBsYW5lLT5wbGFu ZSwgYmxlbmRfbW9kZXMpOworCWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisKKwly ZXR1cm4gdHBsYW5lOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3RpZHNz X3BsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vdGlkc3MvdGlkc3NfcGxhbmUuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjgwZmYxYzVhMjUzNQotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRzc19wbGFuZS5oCkBAIC0wLDAgKzEsMjUg QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogQ29weXJp Z2h0IChDKSAyMDE4IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cu dGkuY29tLworICogQXV0aG9yOiBUb21pIFZhbGtlaW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29t PgorICovCisKKyNpZm5kZWYgX19USURTU19QTEFORV9IX18KKyNkZWZpbmUgX19USURTU19QTEFO RV9IX18KKworI2RlZmluZSB0b190aWRzc19wbGFuZShwKSBjb250YWluZXJfb2YoKHApLCBzdHJ1 Y3QgdGlkc3NfcGxhbmUsIHBsYW5lKQorCitzdHJ1Y3QgdGlkc3NfZGV2aWNlOworCitzdHJ1Y3Qg dGlkc3NfcGxhbmUgeworCXN0cnVjdCBkcm1fcGxhbmUgcGxhbmU7CisKKwl1MzIgaHdfcGxhbmVf aWQ7Cit9OworCitzdHJ1Y3QgdGlkc3NfcGxhbmUgKnRpZHNzX3BsYW5lX2NyZWF0ZShzdHJ1Y3Qg dGlkc3NfZGV2aWNlICp0aWRzcywKKwkJCQkgICAgICAgdTMyIGh3X3BsYW5lX2lkLCB1MzIgcGxh bmVfdHlwZSwKKwkJCQkgICAgICAgdTMyIGNydGNfbWFzaywgY29uc3QgdTMyICpmb3JtYXRzLAor CQkJCSAgICAgICB1MzIgbnVtX2Zvcm1hdHMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS90aWRzcy90aWRzc19zY2FsZV9jb2Vmcy5jIGIvZHJpdmVycy9ncHUvZHJtL3Rp ZHNzL3RpZHNzX3NjYWxlX2NvZWZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi43MTBmZWFjN2Y5OWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v dGlkc3MvdGlkc3Nfc2NhbGVfY29lZnMuYwpAQCAtMCwwICsxLDIwMiBAQAorLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGV4YXMg SW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKiBBdXRob3I6 IEp5cmkgU2FyaGEgPGpzYXJoYUB0aS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Rldmlj ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAidGlkc3Nfc2NhbGVf Y29lZnMuaCIKKworLyoKKyAqIFRoZXNlIGFyZSBpbnRlcnBvbGF0ZWQgd2l0aCBhIGN1c3RvbSBw eXRob24gc2NyaXB0IGZyb20gRFNTNQorICogKGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9k aXNwY19jb2VmLmMpIGNvZWZmaWNpZW50cy4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0aWRz c19zY2FsZV9jb2VmcyBjb2VmNV9NMzIgPSB7CisJLmMyID0geyAyOCwgMzQsIDQwLCA0NiwgNTIs IDU4LCA2NCwgNzAsIDAsIDIsIDQsIDgsIDEyLCAxNiwgMjAsIDI0LCB9LAorCS5jMSA9IHsgMTMy LCAxMzgsIDE0NCwgMTUwLCAxNTYsIDE2MiwgMTY4LCAxNzQsIDc2LCA4NCwgOTIsIDk4LCAxMDQs IDExMCwgMTE2LCAxMjQsIH0sCisJLmMwID0geyAxOTIsIDE5MiwgMTkyLCAxOTAsIDE4OCwgMTg2 LCAxODQsIDE4MiwgMTgwLCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0aWRzc19zY2Fs ZV9jb2VmcyBjb2VmNV9NMjYgPSB7CisJLmMyID0geyAyNCwgMjgsIDMyLCAzOCwgNDQsIDUwLCA1 NiwgNjQsIDAsIDIsIDQsIDYsIDgsIDEyLCAxNiwgMjAsIH0sCisJLmMxID0geyAxMzIsIDEzOCwg MTQ0LCAxNTIsIDE2MCwgMTY2LCAxNzIsIDE3OCwgNzIsIDgwLCA4OCwgOTQsIDEwMCwgMTA4LCAx MTYsIDEyNCwgfSwKKwkuYzAgPSB7IDIwMCwgMjAyLCAyMDQsIDIwMiwgMjAwLCAxOTYsIDE5Miwg MTg4LCAxODQsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRpZHNzX3NjYWxlX2NvZWZz IGNvZWY1X00yMiA9IHsKKwkuYzIgPSB7IDE2LCAyMCwgMjQsIDMwLCAzNiwgNDIsIDQ4LCA1Niwg MCwgMCwgMCwgMiwgNCwgOCwgMTIsIDE0LCB9LAorCS5jMSA9IHsgMTMyLCAxNDAsIDE0OCwgMTU2 LCAxNjQsIDE3MiwgMTgwLCAxODYsIDY0LCA3MiwgODAsIDg4LCA5NiwgMTA0LCAxMTIsIDEyMiwg fSwKKwkuYzAgPSB7IDIxNiwgMjE2LCAyMTYsIDIxNCwgMjEyLCAyMDgsIDIwNCwgMTk4LCAxOTIs IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRpZHNzX3NjYWxlX2NvZWZzIGNvZWY1X00x OSA9IHsKKwkuYzIgPSB7IDEyLCAxNCwgMTYsIDIyLCAyOCwgMzQsIDQwLCA0OCwgMCwgMCwgMCwg MiwgNCwgNCwgNCwgOCwgfSwKKwkuYzEgPSB7IDEyOCwgMTQwLCAxNTIsIDE2MCwgMTY4LCAxNzYs IDE4NCwgMTkyLCA1NiwgNjQsIDcyLCA4MiwgOTIsIDEwMCwgMTA4LCAxMTgsIH0sCisJLmMwID0g eyAyMzIsIDIzMiwgMjMyLCAyMjYsIDIyMCwgMjE4LCAyMTYsIDIwOCwgMjAwLCB9LAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCB0aWRzc19zY2FsZV9jb2VmcyBjb2VmNV9NMTYgPSB7CisJLmMy ID0geyAwLCAyLCA0LCA4LCAxMiwgMTgsIDI0LCAzMiwgMCwgMCwgMCwgLTIsIC00LCAtNCwgLTQs IC0yLCB9LAorCS5jMSA9IHsgMTI0LCAxMzgsIDE1MiwgMTY0LCAxNzYsIDE4NiwgMTk2LCAyMDYs IDQwLCA0OCwgNTYsIDY4LCA4MCwgOTAsIDEwMCwgMTEyLCB9LAorCS5jMCA9IHsgMjY0LCAyNjIs IDI2MCwgMjU0LCAyNDgsIDI0MiwgMjM2LCAyMjYsIDIxNiwgfSwKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgdGlkc3Nfc2NhbGVfY29lZnMgY29lZjVfTTE0ID0geworCS5jMiA9IHsgLTgsIC02 LCAtNCwgLTIsIDAsIDYsIDEyLCAxOCwgMCwgLTIsIC00LCAtNiwgLTgsIC04LCAtOCwgLTgsIH0s CisJLmMxID0geyAxMjAsIDEzNCwgMTQ4LCAxNjQsIDE4MCwgMTk0LCAyMDgsIDIyMCwgMjQsIDMy LCA0MCwgNTIsIDY0LCA3OCwgOTIsIDEwNiwgfSwKKwkuYzAgPSB7IDI4OCwgMjg2LCAyODQsIDI4 MCwgMjc2LCAyNjYsIDI1NiwgMjQ0LCAyMzIsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IHRpZHNzX3NjYWxlX2NvZWZzIGNvZWY1X00xMyA9IHsKKwkuYzIgPSB7IC0xMiwgLTEyLCAtMTIs IC0xMCwgLTgsIC00LCAwLCA2LCAwLCAtMiwgLTQsIC02LCAtOCwgLTEwLCAtMTIsIC0xMiwgfSwK KwkuYzEgPSB7IDExMiwgMTMwLCAxNDgsIDE2NCwgMTgwLCAxOTYsIDIxMiwgMjI4LCAxMiwgMjIs IDMyLCA0NCwgNTYsIDcwLCA4NCwgOTgsIH0sCisJLmMwID0geyAzMTIsIDMwOCwgMzA0LCAyOTgs IDI5MiwgMjgyLCAyNzIsIDI1OCwgMjQ0LCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0 aWRzc19zY2FsZV9jb2VmcyBjb2VmNV9NMTIgPSB7CisJLmMyID0geyAtMTYsIC0xOCwgLTIwLCAt MTgsIC0xNiwgLTE0LCAtMTIsIC02LCAwLCAtMiwgLTQsIC02LCAtOCwgLTEwLCAtMTIsIC0xNCwg fSwKKwkuYzEgPSB7IDEwNCwgMTI0LCAxNDQsIDE2NCwgMTg0LCAyMDIsIDIyMCwgMjM4LCAwLCAx MCwgMjAsIDMwLCA0MCwgNTYsIDcyLCA4OCwgfSwKKwkuYzAgPSB7IDMzNiwgMzMyLCAzMjgsIDMy MCwgMzEyLCAzMDAsIDI4OCwgMjcyLCAyNTYsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IHRpZHNzX3NjYWxlX2NvZWZzIGNvZWY1X00xMSA9IHsKKwkuYzIgPSB7IC0yMCwgLTIyLCAtMjQs IC0yNCwgLTI0LCAtMjQsIC0yNCwgLTIwLCAwLCAtMiwgLTQsIC02LCAtOCwgLTEwLCAtMTIsIC0x NiwgfSwKKwkuYzEgPSB7IDkyLCAxMTQsIDEzNiwgMTU4LCAxODAsIDIwNCwgMjI4LCAyNTAsIC0x NiwgLTgsIDAsIDEyLCAyNCwgMzgsIDUyLCA3MiwgfSwKKwkuYzAgPSB7IDM2OCwgMzY0LCAzNjAs IDM1MCwgMzQwLCAzMjYsIDMxMiwgMjkyLCAyNzIsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IHRpZHNzX3NjYWxlX2NvZWZzIGNvZWY1X00xMCA9IHsKKwkuYzIgPSB7IC0xNiwgLTIwLCAt MjQsIC0yOCwgLTMyLCAtMzQsIC0zNiwgLTM0LCAwLCAwLCAwLCAtMiwgLTQsIC04LCAtMTIsIC0x NCwgfSwKKwkuYzEgPSB7IDcyLCA5NiwgMTIwLCAxNDgsIDE3NiwgMjA0LCAyMzIsIDI2MCwgLTMy LCAtMjYsIC0yMCwgLTEwLCAwLCAxNiwgMzIsIDUyLCB9LAorCS5jMCA9IHsgNDAwLCAzOTgsIDM5 NiwgMzg0LCAzNzIsIDM1NCwgMzM2LCAzMTIsIDI4OCwgfSwKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgdGlkc3Nfc2NhbGVfY29lZnMgY29lZjVfTTkgPSB7CisJLmMyID0geyAtMTIsIC0xOCwg LTI0LCAtMjgsIC0zMiwgLTM4LCAtNDQsIC00NiwgMCwgMiwgNCwgMiwgMCwgLTIsIC00LCAtOCwg fSwKKwkuYzEgPSB7IDQwLCA2OCwgOTYsIDEyOCwgMTYwLCAxOTYsIDIzMiwgMjY4LCAtNDgsIC00 NiwgLTQ0LCAtMzYsIC0yOCwgLTE0LCAwLCAyMCwgfSwKKwkuYzAgPSB7IDQ1NiwgNDUwLCA0NDQs IDQyOCwgNDEyLCAzODgsIDM2NCwgMzM0LCAzMDQsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IHRpZHNzX3NjYWxlX2NvZWZzIGNvZWY1X004ID0geworCS5jMiA9IHsgMCwgLTQsIC04LCAt MTYsIC0yNCwgLTMyLCAtNDAsIC00OCwgMCwgMiwgNCwgNiwgOCwgNiwgNCwgMiwgfSwKKwkuYzEg PSB7IDAsIDI4LCA1NiwgOTQsIDEzMiwgMTc2LCAyMjAsIDI2NiwgLTU2LCAtNjAsIC02NCwgLTYy LCAtNjAsIC01MCwgLTQwLCAtMjAsIH0sCisJLmMwID0geyA1MTIsIDUwNiwgNTAwLCA0NzgsIDQ1 NiwgNDI0LCAzOTIsIDM1MiwgMzEyLCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0aWRz c19zY2FsZV9jb2VmcyBjb2VmM19NMzIgPSB7CisJLmMxID0geyAxMDgsIDkyLCA3NiwgNjIsIDQ4 LCAzNiwgMjQsIDE0MCwgMjU2LCAyMzYsIDIxNiwgMTk4LCAxODAsIDE2MiwgMTQ0LCAxMjYsIH0s CisJLmMwID0geyAyOTYsIDI5NCwgMjkyLCAyODgsIDI4NCwgMjc4LCAyNzIsIDEzNiwgMjU2LCB9 LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0aWRzc19zY2FsZV9jb2VmcyBjb2VmM19NMjYg PSB7CisJLmMxID0geyAxMDQsIDkwLCA3NiwgNjAsIDQ0LCAzMiwgMjAsIDEzOCwgMjU2LCAyMzYs IDIxNiwgMTk4LCAxODAsIDE2MCwgMTQwLCAxMjIsIH0sCisJLmMwID0geyAzMDQsIDMwMCwgMjk2 LCAyOTIsIDI4OCwgMjgyLCAyNzYsIDEzOCwgMjU2LCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCB0aWRzc19zY2FsZV9jb2VmcyBjb2VmM19NMjIgPSB7CisJLmMxID0geyAxMDAsIDg0LCA2 OCwgNTQsIDQwLCAzMCwgMjAsIDEzOCwgMjU2LCAyMzYsIDIxNiwgMTk2LCAxNzYsIDE1NiwgMTM2 LCAxMTgsIH0sCisJLmMwID0geyAzMTIsIDMxMCwgMzA4LCAzMDIsIDI5NiwgMjg2LCAyNzYsIDEz OCwgMjU2LCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0aWRzc19zY2FsZV9jb2VmcyBj b2VmM19NMTkgPSB7CisJLmMxID0geyA5NiwgODAsIDY0LCA1MCwgMzYsIDI2LCAxNiwgMTM2LCAy NTYsIDIzNiwgMjE2LCAxOTQsIDE3MiwgMTUyLCAxMzIsIDExNCwgfSwKKwkuYzAgPSB7IDMyMCwg MzE4LCAzMTYsIDMxMCwgMzA0LCAyOTIsIDI4MCwgMTQwLCAyNTYsIH0sCit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IHRpZHNzX3NjYWxlX2NvZWZzIGNvZWYzX00xNiA9IHsKKwkuYzEgPSB7IDg4 LCA3MiwgNTYsIDQ0LCAzMiwgMjIsIDEyLCAxMzQsIDI1NiwgMjM0LCAyMTIsIDE5MCwgMTY4LCAx NDgsIDEyOCwgMTA4LCB9LAorCS5jMCA9IHsgMzM2LCAzMzIsIDMyOCwgMzIwLCAzMTIsIDMwMCwg Mjg4LCAxNDQsIDI1NiwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGlkc3Nfc2NhbGVf Y29lZnMgY29lZjNfTTE0ID0geworCS5jMSA9IHsgODAsIDY0LCA0OCwgMzYsIDI0LCAxNiwgOCwg MTMyLCAyNTYsIDIzMiwgMjA4LCAxODYsIDE2NCwgMTQyLCAxMjAsIDEwMCwgfSwKKwkuYzAgPSB7 IDM1MiwgMzQ4LCAzNDQsIDMzNCwgMzI0LCAzMTAsIDI5NiwgMTQ4LCAyNTYsIH0sCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IHRpZHNzX3NjYWxlX2NvZWZzIGNvZWYzX00xMyA9IHsKKwkuYzEg PSB7IDcyLCA1NiwgNDAsIDMwLCAyMCwgMTIsIDQsIDEzMCwgMjU2LCAyMzIsIDIwOCwgMTg0LCAx NjAsIDEzNiwgMTEyLCA5MiwgfSwKKwkuYzAgPSB7IDM2OCwgMzY0LCAzNjAsIDM0NiwgMzMyLCAz MTYsIDMwMCwgMTUwLCAyNTYsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRpZHNzX3Nj YWxlX2NvZWZzIGNvZWYzX00xMiA9IHsKKwkuYzEgPSB7IDY0LCA1MCwgMzYsIDI2LCAxNiwgMTAs IDQsIDEzMCwgMjU2LCAyMzAsIDIwNCwgMTc4LCAxNTIsIDEyOCwgMTA0LCA4NCwgfSwKKwkuYzAg PSB7IDM4NCwgMzc4LCAzNzIsIDM1OCwgMzQ0LCAzMjQsIDMwNCwgMTUyLCAyNTYsIH0sCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IHRpZHNzX3NjYWxlX2NvZWZzIGNvZWYzX00xMSA9IHsKKwku YzEgPSB7IDU2LCA0MCwgMjQsIDE2LCA4LCA0LCAwLCAxMjgsIDI1NiwgMjI4LCAyMDAsIDE3Miwg MTQ0LCAxMjAsIDk2LCA3NiwgfSwKKwkuYzAgPSB7IDQwMCwgMzk2LCAzOTIsIDM3NiwgMzYwLCAz MzYsIDMxMiwgMTU2LCAyNTYsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRpZHNzX3Nj YWxlX2NvZWZzIGNvZWYzX00xMCA9IHsKKwkuYzEgPSB7IDQwLCAyNiwgMTIsIDYsIDAsIC0yLCAt NCwgMTI2LCAyNTYsIDIyNiwgMTk2LCAxNjYsIDEzNiwgMTEwLCA4NCwgNjIsIH0sCisJLmMwID0g eyA0MzIsIDQyNCwgNDE2LCAzOTYsIDM3NiwgMzQ4LCAzMjAsIDE2MCwgMjU2LCB9LAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCB0aWRzc19zY2FsZV9jb2VmcyBjb2VmM19NOSA9IHsKKwkuYzEg PSB7IDI0LCAxMiwgMCwgLTQsIC04LCAtOCwgLTgsIDEyNCwgMjU2LCAyMjIsIDE4OCwgMTU0LCAx MjAsIDkyLCA2NCwgNDQsIH0sCisJLmMwID0geyA0NjQsIDQ1NiwgNDQ4LCA0MjQsIDQwMCwgMzY2 LCAzMzIsIDE2NiwgMjU2LCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0aWRzc19zY2Fs ZV9jb2VmcyBjb2VmM19NOCA9IHsKKwkuYzEgPSB7IDAsIC04LCAtMTYsIC0xNiwgLTE2LCAtMTIs IC04LCAxMjQsIDI1NiwgMjE0LCAxNzIsIDEzNCwgOTYsIDY2LCAzNiwgMTgsIH0sCisJLmMwID0g eyA1MTIsIDUwMiwgNDkyLCA0NjIsIDQzMiwgMzkwLCAzNDgsIDE3NCwgMjU2LCB9LAorfTsKKwor Y29uc3Qgc3RydWN0IHRpZHNzX3NjYWxlX2NvZWZzICp0aWRzc19nZXRfc2NhbGVfY29lZnMoc3Ry dWN0IGRldmljZSAqZGV2LAorCQkJCQkJICAgICAgdTMyIGZpcmluYywKKwkJCQkJCSAgICAgIGJv b2wgZml2ZV90YXBzKQoreworCWludCBpOworCWludCBpbmM7CisJc3RhdGljIGNvbnN0IHN0cnVj dCB7CisJCWludCBNbWluOworCQlpbnQgTW1heDsKKwkJY29uc3Qgc3RydWN0IHRpZHNzX3NjYWxl X2NvZWZzICpjb2VmMzsKKwkJY29uc3Qgc3RydWN0IHRpZHNzX3NjYWxlX2NvZWZzICpjb2VmNTsK KwkJY29uc3QgY2hhciAqbmFtZTsKKwl9IGNvZWZzW10gPSB7CisJCXsgMjcsIDMyLCAmY29lZjNf TTMyLCAmY29lZjVfTTMyLCAiTTMyIiB9LAorCQl7IDIzLCAyNiwgJmNvZWYzX00yNiwgJmNvZWY1 X00yNiwgIk0yNiIgfSwKKwkJeyAyMCwgMjIsICZjb2VmM19NMjIsICZjb2VmNV9NMjIsICJNMjIi IH0sCisJCXsgMTcsIDE5LCAmY29lZjNfTTE5LCAmY29lZjVfTTE5LCAiTTE5IiB9LAorCQl7IDE1 LCAxNiwgJmNvZWYzX00xNiwgJmNvZWY1X00xNiwgIk0xNiIgfSwKKwkJeyAxNCwgMTQsICZjb2Vm M19NMTQsICZjb2VmNV9NMTQsICJNMTQiIH0sCisJCXsgMTMsIDEzLCAmY29lZjNfTTEzLCAmY29l ZjVfTTEzLCAiTTEzIiB9LAorCQl7IDEyLCAxMiwgJmNvZWYzX00xMiwgJmNvZWY1X00xMiwgIk0x MiIgfSwKKwkJeyAxMSwgMTEsICZjb2VmM19NMTEsICZjb2VmNV9NMTEsICJNMTEiIH0sCisJCXsg MTAsIDEwLCAmY29lZjNfTTEwLCAmY29lZjVfTTEwLCAiTTEwIiB9LAorCQl7ICA5LCAgOSwgJmNv ZWYzX005LCAmY29lZjVfTTksICJNOSIgfSwKKwkJeyAgNCwgIDgsICZjb2VmM19NOCwgJmNvZWY1 X004LCAiTTgiIH0sCisJCS8qCisJCSAqIFdoZW4gdXBzY2FsaW5nIG1vcmUgdGhhbiB0d28gdGlt ZXMsIGJsb2NraW5lc3MgYW5kIG91dGxpbmVzCisJCSAqIGFyb3VuZCB0aGUgaW1hZ2UgYXJlIG9i c2VydmVkIHdoZW4gTTggdGFibGVzIGFyZSB1c2VkLiBNMTEsCisJCSAqIE0xNiBhbmQgTTE5IHRh YmxlcyBhcmUgdXNlZCB0byBwcmV2ZW50IHRoaXMuCisJCSAqLworCQl7ICAzLCAgMywgJmNvZWYz X00xMSwgJmNvZWY1X00xMSwgIk0xMSIgfSwKKwkJeyAgMiwgIDIsICZjb2VmM19NMTYsICZjb2Vm NV9NMTYsICJNMTYiIH0sCisJCXsgIDAsICAxLCAmY29lZjNfTTE5LCAmY29lZjVfTTE5LCAiTTE5 IiB9LAorCX07CisKKwkvKgorCSAqIGluYyBpcyByZXN1bHQgb2YgMHgyMDAwMDAgKiBpbl9zaXpl IC8gb3V0X3NpemUuIFRoaXMgZGl2aWRpbmcKKwkgKiBieSAweDQwMDAwIHNjYWxlcyBpdCBkb3du IHRvIDggKiBpbl9zaXplIC8gb3V0X3NpemUuIEFmdGVyCisJICogZGl2aXNpb24gdGhlIGFjdHVh bCBzY2FsaW5nIGZhY3RvciBpcyA4L2luYy4KKwkgKi8KKwlpbmMgPSBmaXJpbmMgLyAweDQwMDAw OworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvZWZzKTsgKytpKSB7CisJCWlmIChpbmMg Pj0gY29lZnNbaV0uTW1pbiAmJiBpbmMgPD0gY29lZnNbaV0uTW1heCkgeworCQkJaWYgKGZpdmVf dGFwcykKKwkJCQlyZXR1cm4gY29lZnNbaV0uY29lZjU7CisJCQllbHNlCisJCQkJcmV0dXJuIGNv ZWZzW2ldLmNvZWYzOworCQl9CisJfQorCisJZGV2X2VycihkZXYsICIlczogQ29lZmZpY2llbnRz IG5vdCBmb3VuZCBmb3IgZmlyaW5jIDB4JTA4eCwgaW5jICVkXG4iLAorCQlfX2Z1bmNfXywgZmly aW5jLCBpbmMpOworCisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdGlkc3MvdGlkc3Nfc2NhbGVfY29lZnMuaCBiL2RyaXZlcnMvZ3B1L2RybS90aWRzcy90aWRz c19zY2FsZV9jb2Vmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u NjRiNWFmNWI1MzYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RpZHNzL3Rp ZHNzX3NjYWxlX2NvZWZzLmgKQEAgLTAsMCArMSwyMiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggVGV4YXMgSW5zdHJ1 bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKiBBdXRob3I6IEp5cmkg U2FyaGEgPGpzYXJoYUB0aS5jb20+CisgKi8KKworI2lmbmRlZiBfX1RJRFNTX0RJU1BDX0NPRUZf SF9fCisjZGVmaW5lIF9fVElEU1NfRElTUENfQ09FRl9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+CisKK3N0cnVjdCB0aWRzc19zY2FsZV9jb2VmcyB7CisJczE2IGMyWzE2XTsKKwlzMTYg YzFbMTZdOworCXUxNiBjMFs5XTsKK307CisKK2NvbnN0IHN0cnVjdCB0aWRzc19zY2FsZV9jb2Vm cyAqdGlkc3NfZ2V0X3NjYWxlX2NvZWZzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCSAgICAg IHUzMiBmaXJpbmMsCisJCQkJCQkgICAgICBib29sIGZpdmVfdGFwcyk7CisKKyNlbmRpZgotLSAK VGV4YXMgSW5zdHJ1bWVudHMgRmlubGFuZCBPeSwgUG9ya2thbGFua2F0dSAyMiwgMDAxODAgSGVs c2lua2kuIFktdHVubnVzL0J1c2luZXNzIElEOiAwNjE1NTIxLTQuIEtvdGlwYWlra2EvRG9taWNp bGU6IEhlbHNpbmtpCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWw=