From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Airlie Subject: [PATCH 2/2] drm: add new QXL driver. Date: Wed, 6 Mar 2013 16:57:12 +1000 Message-ID: <1362553032-4484-3-git-send-email-airlied@gmail.com> References: <1362553032-4484-1-git-send-email-airlied@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTP id 45E46E5D4B for ; Tue, 5 Mar 2013 22:57:24 -0800 (PST) Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r266vKGj003531 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 6 Mar 2013 01:57:20 -0500 Received: from prime.bne.redhat.com (dhcp-40-183.bne.redhat.com [10.64.40.183]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r266vF7x022122 for ; Wed, 6 Mar 2013 01:57:18 -0500 In-Reply-To: <1362553032-4484-1-git-send-email-airlied@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org UVhMIGlzIGEgcGFyYXZpcnR1YWwgZ3JhcGhpY3MgZGV2aWNlIHVzZWQgYnkgdGhlIFNwaWNlIHZp cnR1YWwgZGVza3RvcAppbnRlcmZhY2UuCgpUaGUgZHJpdmVycyB1c2VzIEdFTSBhbmQgVFRNIHRv IG1hbmFnZSBtZW1vcnksIHRoZSBxeGwgaHcgZmVuY2luZyBob3dldmVyCmlzIHF1aXRlIGRpZmZl cmVudCB0aGFuIG5vcm1hbCBUVE0gZXhwZWN0cywgd2UgaGF2ZSB0byBrZWVwIHRyYWNrIG9mIGEg bnVtYmVyCm9mIG5vbi1saW5lYXIgZmVuY2UgaWRzIHBlciBibyB0aGF0IHdlIG5lZWQgdG8gaGF2 ZSByZWxlYXNlZCBieSB0aGUgaGFyZHdhcmUuCgpUaGUgcmVsZWFzZXMgYXJlIGZyZWVkIGZyb20g YSB3b3JrcXVldWUgdGhhdCB3YWtlcyB1cCBhbmQgcHJvY2Vzc2VzIHRoZQpyZWxlYXNlIHJpbmcu CgpyZWxlYXNlcyBhcmUgc3ViYWxsb2NhdGVkIGZyb20gYSBCTywgdGhlcmUgYXJlIDMgcmVsZWFz ZSBjYXRlZ29yaWVzLCBkcmF3YWJsZXMsCnN1cmZhY2VzIGFuZCBjdXJzb3IgY21kcy4gVGhlIGh3 IGFsc28gaGFzIDMgcmluZ3MgZm9yIGNvbW1hbmRzLCBjdXJzb3IgYW5kIHJlbGVhc2UgaGFuZGxp bmcuCgpUaGUgaGFyZHdhcmUgYWxzbyBoYXZlIGEgc3VyZmFjZSBpZCB0cmFja2luZyBtZWNobmFp c20gYW5kIHRoZSBkcml2ZXIgZW5jYXBzdWxhdGVzIGl0IGNvbXBsZXRlbHkgaW5zaWRlIHRoZSBr ZXJuZWwsIHVzZXJzcGFjZSBuZXZlciBzZWVzIHRoZSBhY3R1YWwgaHcgc3VyZmFjZQppZHMuCgpU aGlzIHJlcXVpcmVzIGEgbmV3ZXIgdmVyc2lvbiBvZiB0aGUgUVhMIHVzZXJzcGFjZSBkcml2ZXIs IHNvIHNob3VsZG4ndCBiZQplbmFibGVkIHVudGlsIHRoYXQgaGFzIGJlZW4gcGxhY2VkIGludG8g eW91ciBkaXN0cm8gb2YgY2hvaWNlLgoKQXV0aG9yczogRGF2ZSBBaXJsaWUsIEFsb24gTGV2eQoK U2lnbmVkLW9mZi1ieTogQWxvbiBMZXZ5IDxhbGV2eUByZWRoYXQuY29tPgpTaWduZWQtb2ZmLWJ5 OiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9L Y29uZmlnICAgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAg ICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3F4bC9LY29uZmlnICAgICAgIHwgIDEwICsKIGRy aXZlcnMvZ3B1L2RybS9xeGwvTWFrZWZpbGUgICAgICB8ICAgOSArCiBkcml2ZXJzL2dwdS9kcm0v cXhsL3F4bF9jbWQuYyAgICAgfCA3MTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vcXhsL3F4bF9kZWJ1Z2ZzLmMgfCAxMzUgKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vcXhsL3F4bF9kZXYuaCAgICAgfCA4NzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZGlzcGxheS5jIHwgOTgxICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcmF3 LmMgICAgfCAzNzggKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcnYu YyAgICAgfCAxMzEgKysrKysKIGRyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2Rydi5oICAgICB8IDU2 NiArKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kdW1iLmMg ICAgfCAgNzYgKysrCiBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9mYi5jICAgICAgfCA1NjcgKysr KysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZmVuY2UuYyAgIHwg IDk3ICsrKysKIGRyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2dlbS5jICAgICB8IDE3OCArKysrKysr CiBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9pbWFnZS5jICAgfCAxMjAgKysrKysKIGRyaXZlcnMv Z3B1L2RybS9xeGwvcXhsX2lvY3RsLmMgICB8IDQxMSArKysrKysrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vcXhsL3F4bF9pcnEuYyAgICAgfCAgOTcgKysrKwogZHJpdmVycy9ncHUvZHJtL3F4 bC9xeGxfa21zLmMgICAgIHwgMzAwICsrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3F4bC9x eGxfb2JqZWN0LmMgIHwgMzY1ICsrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4 bF9vYmplY3QuaCAgfCAxMTIgKysrKysKIGRyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX3JlbGVhc2Uu YyB8IDMwNyArKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX3R0bS5jICAgICB8 IDU4MCArKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL3VhcGkvZHJtL0tidWlsZCAgICAg ICAgICAgfCAgIDEgKwogaW5jbHVkZS91YXBpL2RybS9xeGxfZHJtLmggICAgICAgIHwgMTUxICsr KysrKwogMjUgZmlsZXMgY2hhbmdlZCwgNzE2NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL3F4bC9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL3F4bC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9xeGwvcXhsX2NtZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3F4 bC9xeGxfZGVidWdmcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3F4bC9x eGxfZGV2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kaXNw bGF5LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcmF3LmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcnYuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2Rydi5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHVtYi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZmIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9xeGwvcXhsX2ZlbmNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vcXhsL3F4bF9nZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9xeGwv cXhsX2ltYWdlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9p b2N0bC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfaXJxLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9rbXMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29iamVjdC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9yZWxlYXNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF90dG0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1 ZGUvdWFwaS9kcm0vcXhsX2RybS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25m aWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCAxZTgyODgyLi4xOWI4ZTBkIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2Nv bmZpZwpAQCAtMjIwLDMgKzIyMCw1IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3RlZ3JhL0tj b25maWciCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL0tjb25maWciCiAKIHNvdXJj ZSAiZHJpdmVycy9ncHUvZHJtL3RpbGNkYy9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvZ3B1 L2RybS9xeGwvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCAwZDU5YjI0Li42YTQyMTE1IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlCkBAIC01Miw0ICs1Miw1IEBAIG9iai0kKENPTkZJR19EUk1fU0hNT0JJTEUpICs9c2htb2Jp bGUvCiBvYmotJChDT05GSUdfRFJNX1RFR1JBKSArPSB0ZWdyYS8KIG9iai0kKENPTkZJR19EUk1f T01BUCkJKz0gb21hcGRybS8KIG9iai0kKENPTkZJR19EUk1fVElMQ0RDKQkrPSB0aWxjZGMvCitv YmotJChDT05GSUdfRFJNX1FYTCkgKz0gcXhsLwogb2JqLXkJCQkrPSBpMmMvCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vcXhsL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcXhsL0tjb25m aWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYxYTU3ZQotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvS2NvbmZpZwpAQCAtMCwwICsxLDEwIEBACitj b25maWcgRFJNX1FYTAorCXRyaXN0YXRlICJRWEwgdmlydHVhbCBHUFUiCisJZGVwZW5kcyBvbiBE Uk0gJiYgUENJCisJc2VsZWN0IEZCX1NZU19GSUxMUkVDVAorCXNlbGVjdCBGQl9TWVNfQ09QWUFS RUEKKwlzZWxlY3QgRkJfU1lTX0lNQUdFQkxJVAorICAgICAgICBzZWxlY3QgRFJNX0tNU19IRUxQ RVIKKyAgICAgICAgc2VsZWN0IERSTV9UVE0KKwloZWxwCisJCVFYTCB2aXJ0dWFsIEdQVSBmb3Ig U3BpY2UgdmlydHVhbGl6YXRpb24gZGVza3RvcCBpbnRlZ3JhdGlvbi4gRG8gbm90IGVuYWJsZSB0 aGlzIGRyaXZlciB1bmxlc3MgeW91ciBkaXN0cm8gc2hpcHMgYSBjb3JyZXNwb25kaW5nIFgub3Jn IFFYTCBkcml2ZXIgdGhhdCBjYW4gaGFuZGxlIGtlcm5lbCBtb2Rlc2V0dGluZy4KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9xeGwvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcXhsL01h a2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMDQ2YmEKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcXhsL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBA QAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGRybSBkZXZpY2UgZHJpdmVyLiAgVGhpcyBkcml2ZXIg cHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlCisjIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1 cmUgKERSSSkgaW4gWEZyZWU4NiA0LjEuMCBhbmQgaGlnaGVyLgorCitjY2ZsYWdzLXkgOj0gLUlp bmNsdWRlL2RybQorCitxeGwteSA6PSBxeGxfZHJ2Lm8gcXhsX2ttcy5vIHF4bF9kaXNwbGF5Lm8g cXhsX3R0bS5vIHF4bF9mYi5vIHF4bF9vYmplY3QubyBxeGxfZ2VtLm8gcXhsX2NtZC5vIHF4bF9p bWFnZS5vIHF4bF9kcmF3Lm8gcXhsX2RlYnVnZnMubyBxeGxfaXJxLm8gcXhsX2R1bWIubyBxeGxf aW9jdGwubyBxeGxfZmVuY2UubyBxeGxfcmVsZWFzZS5vCisKK29iai0kKENPTkZJR19EUk1fUVhM KSs9IHF4bC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9jbWQuYyBiL2Ry aXZlcnMvZ3B1L2RybS9xeGwvcXhsX2NtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmE4NjBkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4 bF9jbWQuYwpAQCAtMCwwICsxLDcxMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFJlZCBIYXQg SW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlS SUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElO R1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAg ICAgICBBbG9uIExldnkKKyAqLworCisvKiBRWEwgY21kL3JpbmcgaGFuZGxpbmcgKi8KKworI2lu Y2x1ZGUgInF4bF9kcnYuaCIKKyNpbmNsdWRlICJxeGxfb2JqZWN0LmgiCisKK3N0YXRpYyBpbnQg cXhsX3JlYXBfc3VyZmFjZV9pZChzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwgaW50IG1heF90b19y ZWFwKTsKKworc3RydWN0IHJpbmcgeworCXN0cnVjdCBxeGxfcmluZ19oZWFkZXIgICAgICBoZWFk ZXI7CisJdWludDhfdCAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzWzBdOworfTsKKworc3Ry dWN0IHF4bF9yaW5nIHsKKwlzdHJ1Y3QgcmluZwkgICAgICAgKnJpbmc7CisJaW50CQkJZWxlbWVu dF9zaXplOworCWludAkJCW5fZWxlbWVudHM7CisJaW50CQkJcHJvZF9ub3RpZnk7CisJd2FpdF9x dWV1ZV9oZWFkX3QgICAgICAqcHVzaF9ldmVudDsKKwlzcGlubG9ja190ICAgICAgICAgICAgIGxv Y2s7Cit9OworCit2b2lkIHF4bF9yaW5nX2ZyZWUoc3RydWN0IHF4bF9yaW5nICpyaW5nKQorewor CWtmcmVlKHJpbmcpOworfQorCitzdHJ1Y3QgcXhsX3JpbmcgKgorcXhsX3JpbmdfY3JlYXRlKHN0 cnVjdCBxeGxfcmluZ19oZWFkZXIgKmhlYWRlciwKKwkJaW50IGVsZW1lbnRfc2l6ZSwKKwkJaW50 IG5fZWxlbWVudHMsCisJCWludCBwcm9kX25vdGlmeSwKKwkJd2FpdF9xdWV1ZV9oZWFkX3QgKnB1 c2hfZXZlbnQpCit7CisJc3RydWN0IHF4bF9yaW5nICpyaW5nOworCisJcmluZyA9IGttYWxsb2Mo c2l6ZW9mKCpyaW5nKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyaW5nKQorCQlyZXR1cm4gTlVMTDsK KworCXJpbmctPnJpbmcgPSAoc3RydWN0IHJpbmcgKiloZWFkZXI7CisJcmluZy0+ZWxlbWVudF9z aXplID0gZWxlbWVudF9zaXplOworCXJpbmctPm5fZWxlbWVudHMgPSBuX2VsZW1lbnRzOworCXJp bmctPnByb2Rfbm90aWZ5ID0gcHJvZF9ub3RpZnk7CisJcmluZy0+cHVzaF9ldmVudCA9IHB1c2hf ZXZlbnQ7CisKKwlzcGluX2xvY2tfaW5pdCgmcmluZy0+bG9jayk7CisJcmV0dXJuIHJpbmc7Cit9 CisKK3N0YXRpYyBpbnQgcXhsX2NoZWNrX2hlYWRlcihzdHJ1Y3QgcXhsX3JpbmcgKnJpbmcpCit7 CisJaW50IHJldDsKKwlzdHJ1Y3QgcXhsX3JpbmdfaGVhZGVyICpoZWFkZXIgPSAmKHJpbmctPnJp bmctPmhlYWRlcik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgm cmluZy0+bG9jaywgZmxhZ3MpOworCXJldCA9IGhlYWRlci0+cHJvZCAtIGhlYWRlci0+Y29ucyA8 IGhlYWRlci0+bnVtX2l0ZW1zOworCWlmIChyZXQgPT0gMCkKKwkJaGVhZGVyLT5ub3RpZnlfb25f Y29ucyA9IGhlYWRlci0+Y29ucyArIDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmluZy0+ bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcXhsX2NoZWNrX2lk bGUoc3RydWN0IHF4bF9yaW5nICpyaW5nKQoreworCWludCByZXQ7CisJc3RydWN0IHF4bF9yaW5n X2hlYWRlciAqaGVhZGVyID0gJihyaW5nLT5yaW5nLT5oZWFkZXIpOworCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSBo ZWFkZXItPnByb2QgPT0gaGVhZGVyLT5jb25zOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJp bmctPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcXhsX3JpbmdfcHVzaChz dHJ1Y3QgcXhsX3JpbmcgKnJpbmcsCisJCSAgY29uc3Qgdm9pZCAqbmV3X2VsdCwgYm9vbCBpbnRl cnJ1cHRpYmxlKQoreworCXN0cnVjdCBxeGxfcmluZ19oZWFkZXIgKmhlYWRlciA9ICYocmluZy0+ cmluZy0+aGVhZGVyKTsKKwl1aW50OF90ICplbHQ7CisJaW50IGlkeCwgcmV0OworCXVuc2lnbmVk IGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKKwlp ZiAoaGVhZGVyLT5wcm9kIC0gaGVhZGVyLT5jb25zID09IGhlYWRlci0+bnVtX2l0ZW1zKSB7CisJ CWhlYWRlci0+bm90aWZ5X29uX2NvbnMgPSBoZWFkZXItPmNvbnMgKyAxOworCQltYigpOworCQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5sb2NrLCBmbGFncyk7CisJCWlmICghZHJtX2Nh bl9zbGVlcCgpKSB7CisJCQl3aGlsZSAoIXF4bF9jaGVja19oZWFkZXIocmluZykpCisJCQkJdWRl bGF5KDEpOworCQl9IGVsc2UgeworCQkJaWYgKGludGVycnVwdGlibGUpIHsKKwkJCQlyZXQgPSB3 YWl0X2V2ZW50X2ludGVycnVwdGlibGUoKnJpbmctPnB1c2hfZXZlbnQsCisJCQkJCQkJICAgICAg IHF4bF9jaGVja19oZWFkZXIocmluZykpOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiByZXQ7 CisJCQl9IGVsc2UgeworCQkJCXdhaXRfZXZlbnQoKnJpbmctPnB1c2hfZXZlbnQsCisJCQkJCSAg IHF4bF9jaGVja19oZWFkZXIocmluZykpOworCQkJfQorCisJCX0KKwkJc3Bpbl9sb2NrX2lycXNh dmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKKwl9CisKKwlpZHggPSBoZWFkZXItPnByb2QgJiAocmlu Zy0+bl9lbGVtZW50cyAtIDEpOworCWVsdCA9IHJpbmctPnJpbmctPmVsZW1lbnRzICsgaWR4ICog cmluZy0+ZWxlbWVudF9zaXplOworCisJbWVtY3B5KCh2b2lkICopZWx0LCBuZXdfZWx0LCByaW5n LT5lbGVtZW50X3NpemUpOworCisJaGVhZGVyLT5wcm9kKys7CisKKwltYigpOworCisJaWYgKGhl YWRlci0+cHJvZCA9PSBoZWFkZXItPm5vdGlmeV9vbl9wcm9kKQorCQlvdXRiKDAsIHJpbmctPnBy b2Rfbm90aWZ5KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmxvY2ssIGZsYWdz KTsKKwlyZXR1cm4gMDsKK30KKworYm9vbCBxeGxfcmluZ19wb3Aoc3RydWN0IHF4bF9yaW5nICpy aW5nLAorCQkgIHZvaWQgKmVsZW1lbnQpCit7CisJdm9sYXRpbGUgc3RydWN0IHF4bF9yaW5nX2hl YWRlciAqaGVhZGVyID0gJihyaW5nLT5yaW5nLT5oZWFkZXIpOworCXZvbGF0aWxlIHVpbnQ4X3Qg KnJpbmdfZWx0OworCWludCBpZHg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tf aXJxc2F2ZSgmcmluZy0+bG9jaywgZmxhZ3MpOworCWlmIChoZWFkZXItPmNvbnMgPT0gaGVhZGVy LT5wcm9kKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmxvY2ssIGZsYWdzKTsK KwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlkeCA9IGhlYWRlci0+Y29ucyAmIChyaW5nLT5uX2Vs ZW1lbnRzIC0gMSk7CisJcmluZ19lbHQgPSByaW5nLT5yaW5nLT5lbGVtZW50cyArIGlkeCAqIHJp bmctPmVsZW1lbnRfc2l6ZTsKKworCW1lbWNweShlbGVtZW50LCAodm9pZCAqKXJpbmdfZWx0LCBy aW5nLT5lbGVtZW50X3NpemUpOworCisJaGVhZGVyLT5jb25zKys7CisKKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZyaW5nLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg cXhsX3Jpbmdfd2FpdF9pZGxlKHN0cnVjdCBxeGxfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgcXhs X3JpbmdfaGVhZGVyICpoZWFkZXIgPSAmKHJpbmctPnJpbmctPmhlYWRlcik7CisJdW5zaWduZWQg bG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7CisJ aWYgKHJpbmctPnJpbmctPmhlYWRlci5jb25zIDwgcmluZy0+cmluZy0+aGVhZGVyLnByb2QpIHsK KwkJaGVhZGVyLT5ub3RpZnlfb25fY29ucyA9IGhlYWRlci0+cHJvZDsKKwkJbWIoKTsKKwkJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmcmluZy0+bG9jaywgZmxhZ3MpOworCQl3YWl0X2V2ZW50X2lu dGVycnVwdGlibGUoKnJpbmctPnB1c2hfZXZlbnQsCisJCQkJCSBxeGxfY2hlY2tfaWRsZShyaW5n KSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7CisJfQorCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKK30KKwordm9pZCBxeGxfcmVs ZWFzZV9yaW5nX2ZsdXNoKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2KQoreworCWlmICghcXhsX2No ZWNrX2hlYWRlcihxZGV2LT5yZWxlYXNlX3JpbmcpKQorCQlyZXR1cm47CisJcXhsX2lvX2ZsdXNo X3JlbGVhc2UocWRldik7Cit9CisKK2ludAorcXhsX3B1c2hfY29tbWFuZF9yaW5nX3JlbGVhc2Uo c3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsIHN0cnVjdCBxeGxfcmVsZWFzZSAqcmVsZWFzZSwKKwkJ CSAgICAgIHVpbnQzMl90IHR5cGUsIGJvb2wgaW50ZXJydXB0aWJsZSkKK3sKKwlzdHJ1Y3QgcXhs X2NvbW1hbmQgY21kOworCisJY21kLnR5cGUgPSB0eXBlOworCWNtZC5kYXRhID0gcXhsX2JvX3Bo eXNpY2FsX2FkZHJlc3MocWRldiwgcmVsZWFzZS0+Ym9zWzBdLCByZWxlYXNlLT5yZWxlYXNlX29m ZnNldCk7CisKKwlyZXR1cm4gcXhsX3JpbmdfcHVzaChxZGV2LT5jb21tYW5kX3JpbmcsICZjbWQs IGludGVycnVwdGlibGUpOworfQorCitpbnQKK3F4bF9wdXNoX2N1cnNvcl9yaW5nX3JlbGVhc2Uo c3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsIHN0cnVjdCBxeGxfcmVsZWFzZSAqcmVsZWFzZSwKKwkJ CSAgICAgdWludDMyX3QgdHlwZSwgYm9vbCBpbnRlcnJ1cHRpYmxlKQoreworCXN0cnVjdCBxeGxf Y29tbWFuZCBjbWQ7CisKKwljbWQudHlwZSA9IHR5cGU7CisJY21kLmRhdGEgPSBxeGxfYm9fcGh5 c2ljYWxfYWRkcmVzcyhxZGV2LCByZWxlYXNlLT5ib3NbMF0sIHJlbGVhc2UtPnJlbGVhc2Vfb2Zm c2V0KTsKKworCXJldHVybiBxeGxfcmluZ19wdXNoKHFkZXYtPmN1cnNvcl9yaW5nLCAmY21kLCBp bnRlcnJ1cHRpYmxlKTsKK30KKworYm9vbCBxeGxfcXVldWVfZ2FyYmFnZV9jb2xsZWN0KHN0cnVj dCBxeGxfZGV2aWNlICpxZGV2LCBib29sIGZsdXNoKQoreworCWlmICghcXhsX2NoZWNrX2lkbGUo cWRldi0+cmVsZWFzZV9yaW5nKSkgeworCQlxdWV1ZV93b3JrKHFkZXYtPmdjX3F1ZXVlLCAmcWRl di0+Z2Nfd29yayk7CisJCWlmIChmbHVzaCkKKwkJCWZsdXNoX3dvcmsoJnFkZXYtPmdjX3dvcmsp OworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitpbnQgcXhsX2dhcmJh Z2VfY29sbGVjdChzdHJ1Y3QgcXhsX2RldmljZSAqcWRldikKK3sKKwlzdHJ1Y3QgcXhsX3JlbGVh c2UgKnJlbGVhc2U7CisJdWludDY0X3QgaWQsIG5leHRfaWQ7CisJaW50IGkgPSAwOworCWludCBy ZXQ7CisJdW5pb24gcXhsX3JlbGVhc2VfaW5mbyAqaW5mbzsKKworCXdoaWxlIChxeGxfcmluZ19w b3AocWRldi0+cmVsZWFzZV9yaW5nLCAmaWQpKSB7CisJCVFYTF9JTkZPKHFkZXYsICJwb3BwZWQg JWxsZFxuIiwgaWQpOworCQl3aGlsZSAoaWQpIHsKKwkJCXJlbGVhc2UgPSBxeGxfcmVsZWFzZV9m cm9tX2lkX2xvY2tlZChxZGV2LCBpZCk7CisJCQlpZiAocmVsZWFzZSA9PSBOVUxMKQorCQkJCWJy ZWFrOworCisJCQlyZXQgPSBxeGxfcmVsZWFzZV9yZXNlcnZlKHFkZXYsIHJlbGVhc2UsIGZhbHNl KTsKKwkJCWlmIChyZXQpIHsKKwkJCQlxeGxfaW9fbG9nKHFkZXYsICJmYWlsZWQgdG8gcmVzZXJ2 ZSByZWxlYXNlIG9uIGdhcmJhZ2UgY29sbGVjdCAlbGxkXG4iLCBpZCk7CisJCQkJRFJNX0VSUk9S KCJmYWlsZWQgdG8gcmVzZXJ2ZSByZWxlYXNlICVsbGRcbiIsIGlkKTsKKwkJCX0KKworCQkJaW5m byA9IHF4bF9yZWxlYXNlX21hcChxZGV2LCByZWxlYXNlKTsKKwkJCW5leHRfaWQgPSBpbmZvLT5u ZXh0OworCQkJcXhsX3JlbGVhc2VfdW5tYXAocWRldiwgcmVsZWFzZSwgaW5mbyk7CisKKwkJCXF4 bF9yZWxlYXNlX3VucmVzZXJ2ZShxZGV2LCByZWxlYXNlKTsKKwkJCVFYTF9JTkZPKHFkZXYsICJw b3BwZWQgJWxsZCwgbmV4dCAlbGxkXG4iLCBpZCwKKwkJCQluZXh0X2lkKTsKKworCQkJc3dpdGNo IChyZWxlYXNlLT50eXBlKSB7CisJCQljYXNlIFFYTF9SRUxFQVNFX0RSQVdBQkxFOgorCQkJY2Fz ZSBRWExfUkVMRUFTRV9TVVJGQUNFX0NNRDoKKwkJCWNhc2UgUVhMX1JFTEVBU0VfQ1VSU09SX0NN RDoKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJRFJNX0VSUk9SKCJ1bmV4cGVjdGVkIHJl bGVhc2UgdHlwZVxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZCA9IG5leHRfaWQ7CisKKwkJ CXF4bF9yZWxlYXNlX2ZyZWUocWRldiwgcmVsZWFzZSk7CisJCQkrK2k7CisJCX0KKwl9CisKKwlR WExfSU5GTyhxZGV2LCAiJXM6ICVsbGRcbiIsIF9fZnVuY19fLCBpKTsKKworCXJldHVybiBpOwor fQorCitpbnQgcXhsX2FsbG9jX2JvX3Jlc2VydmVkKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LCB1 bnNpZ25lZCBsb25nIHNpemUsCisJCQkgIHN0cnVjdCBxeGxfYm8gKipfYm8pCit7CisJc3RydWN0 IHF4bF9ibyAqYm87CisJaW50IHJldDsKKworCXJldCA9IHF4bF9ib19jcmVhdGUocWRldiwgc2l6 ZSwgZmFsc2UgLyogbm90IGtlcm5lbCAtIGRldmljZSAqLywKKwkJCSAgICBRWExfR0VNX0RPTUFJ Tl9WUkFNLCBOVUxMLCAmYm8pOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g YWxsb2NhdGUgVlJBTSBCT1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IHF4bF9ib19y ZXNlcnZlKGJvLCBmYWxzZSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBvdXRf dW5yZWY7CisKKwkqX2JvID0gYm87CisJcmV0dXJuIDA7CitvdXRfdW5yZWY6CisJcXhsX2JvX3Vu cmVmKCZibyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9mb3JfaW9fY21kX3Vz ZXIoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsIHVpbnQ4X3QgdmFsLCBsb25nIHBvcnQpCit7CisJ aW50IGlycV9udW07CisJbG9uZyBhZGRyID0gcWRldi0+aW9fYmFzZSArIHBvcnQ7CisJaW50IHJl dDsKKworCW11dGV4X2xvY2soJnFkZXYtPmFzeW5jX2lvX211dGV4KTsKKwlpcnFfbnVtID0gYXRv bWljX3JlYWQoJnFkZXYtPmlycV9yZWNlaXZlZF9pb19jbWQpOworCisKKwlpZiAocWRldi0+bGFz dF9zZW50X2lvX2NtZCA+IGlycV9udW0pIHsKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRp YmxlKHFkZXYtPmlvX2NtZF9ldmVudCwKKwkJCQkJICAgICAgIGF0b21pY19yZWFkKCZxZGV2LT5p cnFfcmVjZWl2ZWRfaW9fY21kKSA+IGlycV9udW0pOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7 CisJCWlycV9udW0gPSBhdG9taWNfcmVhZCgmcWRldi0+aXJxX3JlY2VpdmVkX2lvX2NtZCk7CisJ fQorCW91dGIodmFsLCBhZGRyKTsKKwlxZGV2LT5sYXN0X3NlbnRfaW9fY21kID0gaXJxX251bSAr IDE7CisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHFkZXYtPmlvX2NtZF9ldmVudCwK KwkJCQkgICAgICAgYXRvbWljX3JlYWQoJnFkZXYtPmlycV9yZWNlaXZlZF9pb19jbWQpID4gaXJx X251bSk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZxZGV2LT5hc3luY19pb19tdXRleCk7CisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd2FpdF9mb3JfaW9fY21kKHN0cnVjdCBxeGxfZGV2 aWNlICpxZGV2LCB1aW50OF90IHZhbCwgbG9uZyBwb3J0KQoreworCWludCByZXQ7CisKK3Jlc3Rh cnQ6CisJcmV0ID0gd2FpdF9mb3JfaW9fY21kX3VzZXIocWRldiwgdmFsLCBwb3J0KTsKKwlpZiAo cmV0ID09IC1FUkVTVEFSVFNZUykKKwkJZ290byByZXN0YXJ0OworfQorCitpbnQgcXhsX2lvX3Vw ZGF0ZV9hcmVhKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LCBzdHJ1Y3QgcXhsX2JvICpzdXJmLAor CQkJY29uc3Qgc3RydWN0IHF4bF9yZWN0ICphcmVhKQoreworCWludCBzdXJmYWNlX2lkOworCXVp bnQzMl90IHN1cmZhY2Vfd2lkdGgsIHN1cmZhY2VfaGVpZ2h0OworCWludCByZXQ7CisKKwlpZiAo IXN1cmYtPmh3X3N1cmZfYWxsb2MpCisJCURSTV9FUlJPUigiZ290IGlvIHVwZGF0ZSBhcmVhIHdp dGggbm8gaHcgc3VyZmFjZVxuIik7CisKKwlpZiAoc3VyZi0+aXNfcHJpbWFyeSkKKwkJc3VyZmFj ZV9pZCA9IDA7CisJZWxzZQorCQlzdXJmYWNlX2lkID0gc3VyZi0+c3VyZmFjZV9pZDsKKwlzdXJm YWNlX3dpZHRoID0gc3VyZi0+c3VyZi53aWR0aDsKKwlzdXJmYWNlX2hlaWdodCA9IHN1cmYtPnN1 cmYuaGVpZ2h0OworCisJaWYgKGFyZWEtPmxlZnQgPCAwIHx8IGFyZWEtPnRvcCA8IDAgfHwKKwkg ICAgYXJlYS0+cmlnaHQgPiBzdXJmYWNlX3dpZHRoIHx8IGFyZWEtPmJvdHRvbSA+IHN1cmZhY2Vf aGVpZ2h0KSB7CisJCXF4bF9pb19sb2cocWRldiwgIiVzOiBub3QgZG9pbmcgYXJlYSB1cGRhdGUg Zm9yICIKKwkJCSAgICIlZCwgKCVkLCVkLCVkLCVkKSAoJWQsJWQpXG4iLCBfX2Z1bmNfXywgc3Vy ZmFjZV9pZCwgYXJlYS0+bGVmdCwKKwkJCSAgIGFyZWEtPnRvcCwgYXJlYS0+cmlnaHQsIGFyZWEt PmJvdHRvbSwgc3VyZmFjZV93aWR0aCwgc3VyZmFjZV9oZWlnaHQpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisJbXV0ZXhfbG9jaygmcWRldi0+dXBkYXRlX2FyZWFfbXV0ZXgpOworCXFkZXYtPnJh bV9oZWFkZXItPnVwZGF0ZV9hcmVhID0gKmFyZWE7CisJcWRldi0+cmFtX2hlYWRlci0+dXBkYXRl X3N1cmZhY2UgPSBzdXJmYWNlX2lkOworCXJldCA9IHdhaXRfZm9yX2lvX2NtZF91c2VyKHFkZXYs IDAsIFFYTF9JT19VUERBVEVfQVJFQV9BU1lOQyk7CisJbXV0ZXhfdW5sb2NrKCZxZGV2LT51cGRh dGVfYXJlYV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBxeGxfaW9fbm90aWZ5X29v bShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldikKK3sKKwlvdXRiKDAsIHFkZXYtPmlvX2Jhc2UgKyBR WExfSU9fTk9USUZZX09PTSk7Cit9CisKK3ZvaWQgcXhsX2lvX2ZsdXNoX3JlbGVhc2Uoc3RydWN0 IHF4bF9kZXZpY2UgKnFkZXYpCit7CisJb3V0YigwLCBxZGV2LT5pb19iYXNlICsgUVhMX0lPX0ZM VVNIX1JFTEVBU0UpOworfQorCit2b2lkIHF4bF9pb19mbHVzaF9zdXJmYWNlcyhzdHJ1Y3QgcXhs X2RldmljZSAqcWRldikKK3sKKwl3YWl0X2Zvcl9pb19jbWQocWRldiwgMCwgUVhMX0lPX0ZMVVNI X1NVUkZBQ0VTX0FTWU5DKTsKK30KKworCit2b2lkIHF4bF9pb19kZXN0cm95X3ByaW1hcnkoc3Ry dWN0IHF4bF9kZXZpY2UgKnFkZXYpCit7CisJd2FpdF9mb3JfaW9fY21kKHFkZXYsIDAsIFFYTF9J T19ERVNUUk9ZX1BSSU1BUllfQVNZTkMpOworfQorCit2b2lkIHF4bF9pb19jcmVhdGVfcHJpbWFy eShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwgdW5zaWduZWQgd2lkdGgsCisJCQkgICB1bnNpZ25l ZCBoZWlnaHQsIHVuc2lnbmVkIG9mZnNldCwgc3RydWN0IHF4bF9ibyAqYm8pCit7CisJc3RydWN0 IHF4bF9zdXJmYWNlX2NyZWF0ZSAqY3JlYXRlOworCisJUVhMX0lORk8ocWRldiwgIiVzOiBxZGV2 ICVwLCByYW1faGVhZGVyICVwXG4iLCBfX2Z1bmNfXywgcWRldiwKKwkJIHFkZXYtPnJhbV9oZWFk ZXIpOworCWNyZWF0ZSA9ICZxZGV2LT5yYW1faGVhZGVyLT5jcmVhdGVfc3VyZmFjZTsKKwljcmVh dGUtPmZvcm1hdCA9IGJvLT5zdXJmLmZvcm1hdDsKKwljcmVhdGUtPndpZHRoID0gd2lkdGg7CisJ Y3JlYXRlLT5oZWlnaHQgPSBoZWlnaHQ7CisJY3JlYXRlLT5zdHJpZGUgPSBiby0+c3VyZi5zdHJp ZGU7CisJY3JlYXRlLT5tZW0gPSBxeGxfYm9fcGh5c2ljYWxfYWRkcmVzcyhxZGV2LCBibywgb2Zm c2V0KTsKKworCVFYTF9JTkZPKHFkZXYsICIlczogbWVtID0gJWxseCwgZnJvbSAlcFxuIiwgX19m dW5jX18sIGNyZWF0ZS0+bWVtLAorCQkgYm8tPmtwdHIpOworCisJY3JlYXRlLT5mbGFncyA9IFFY TF9TVVJGX0ZMQUdfS0VFUF9EQVRBOworCWNyZWF0ZS0+dHlwZSA9IFFYTF9TVVJGX1RZUEVfUFJJ TUFSWTsKKworCXdhaXRfZm9yX2lvX2NtZChxZGV2LCAwLCBRWExfSU9fQ1JFQVRFX1BSSU1BUllf QVNZTkMpOworfQorCit2b2lkIHF4bF9pb19tZW1zbG90X2FkZChzdHJ1Y3QgcXhsX2RldmljZSAq cWRldiwgdWludDhfdCBpZCkKK3sKKwlRWExfSU5GTyhxZGV2LCAicXhsX21lbXNsb3RfYWRkICVk XG4iLCBpZCk7CisJd2FpdF9mb3JfaW9fY21kKHFkZXYsIGlkLCBRWExfSU9fTUVNU0xPVF9BRERf QVNZTkMpOworfQorCit2b2lkIHF4bF9pb19sb2coc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsIGNv bnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKworCXZhX3N0YXJ0KGFyZ3Ms IGZtdCk7CisJdnNucHJpbnRmKHFkZXYtPnJhbV9oZWFkZXItPmxvZ19idWYsIFFYTF9MT0dfQlVG X1NJWkUsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCS8qCisJICogRE8gbm90IGRvIGEg RFJNIG91dHB1dCBoZXJlIC0gdGhpcyB3aWxsIGNhbGwgcHJpbnRrLCB3aGljaCB3aWxsCisJICog Y2FsbCBiYWNrIGludG8gcXhsIGZvciByZW5kZXJpbmcgKHF4bF9mYikKKwkgKi8KKwlvdXRiKDAs IHFkZXYtPmlvX2Jhc2UgKyBRWExfSU9fTE9HKTsKK30KKwordm9pZCBxeGxfaW9fcmVzZXQoc3Ry dWN0IHF4bF9kZXZpY2UgKnFkZXYpCit7CisJb3V0YigwLCBxZGV2LT5pb19iYXNlICsgUVhMX0lP X1JFU0VUKTsKK30KKwordm9pZCBxeGxfaW9fbW9uaXRvcnNfY29uZmlnKHN0cnVjdCBxeGxfZGV2 aWNlICpxZGV2KQoreworCXF4bF9pb19sb2cocWRldiwgIiVzOiAlZCBbJWR4JWQrJWQrJWRdXG4i LCBfX2Z1bmNfXywKKwkJICAgcWRldi0+bW9uaXRvcnNfY29uZmlnID8KKwkJICAgcWRldi0+bW9u aXRvcnNfY29uZmlnLT5jb3VudCA6IC0xLAorCQkgICBxZGV2LT5tb25pdG9yc19jb25maWcgJiYg cWRldi0+bW9uaXRvcnNfY29uZmlnLT5jb3VudCA/CisJCSAgIHFkZXYtPm1vbml0b3JzX2NvbmZp Zy0+aGVhZHNbMF0ud2lkdGggOiAtMSwKKwkJICAgcWRldi0+bW9uaXRvcnNfY29uZmlnICYmIHFk ZXYtPm1vbml0b3JzX2NvbmZpZy0+Y291bnQgPworCQkgICBxZGV2LT5tb25pdG9yc19jb25maWct PmhlYWRzWzBdLmhlaWdodCA6IC0xLAorCQkgICBxZGV2LT5tb25pdG9yc19jb25maWcgJiYgcWRl di0+bW9uaXRvcnNfY29uZmlnLT5jb3VudCA/CisJCSAgIHFkZXYtPm1vbml0b3JzX2NvbmZpZy0+ aGVhZHNbMF0ueCA6IC0xLAorCQkgICBxZGV2LT5tb25pdG9yc19jb25maWcgJiYgcWRldi0+bW9u aXRvcnNfY29uZmlnLT5jb3VudCA/CisJCSAgIHFkZXYtPm1vbml0b3JzX2NvbmZpZy0+aGVhZHNb MF0ueSA6IC0xCisJCSAgICk7CisKKwl3YWl0X2Zvcl9pb19jbWQocWRldiwgMCwgUVhMX0lPX01P TklUT1JTX0NPTkZJR19BU1lOQyk7Cit9CisKK2ludCBxeGxfc3VyZmFjZV9pZF9hbGxvYyhzdHJ1 Y3QgcXhsX2RldmljZSAqcWRldiwKKwkJICAgICAgc3RydWN0IHF4bF9ibyAqc3VyZikKK3sKKwl1 aW50MzJfdCBoYW5kbGUgPSAtRU5PTUVNOworCWludCBpZHJfcmV0OworCWludCBjb3VudCA9IDA7 CithZ2FpbjoKKwlpZiAoaWRyX3ByZV9nZXQoJnFkZXYtPnN1cmZfaWRfaWRyLCBHRlBfQVRPTUlD KSA9PSAwKSB7CisJCURSTV9FUlJPUigiT3V0IG9mIG1lbW9yeSBmb3Igc3VyZiBpZHJcbiIpOwor CQlrZnJlZShzdXJmKTsKKwkJZ290byBhbGxvY19mYWlsOworCX0KKworCXNwaW5fbG9jaygmcWRl di0+c3VyZl9pZF9pZHJfbG9jayk7CisJaWRyX3JldCA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZxZGV2 LT5zdXJmX2lkX2lkciwgTlVMTCwgMSwgJmhhbmRsZSk7CisJc3Bpbl91bmxvY2soJnFkZXYtPnN1 cmZfaWRfaWRyX2xvY2spOworCisJaWYgKGlkcl9yZXQgPT0gLUVBR0FJTikKKwkJZ290byBhZ2Fp bjsKKworCWlmIChoYW5kbGUgPj0gcWRldi0+cm9tLT5uX3N1cmZhY2VzKSB7CisJCWNvdW50Kys7 CisJCXNwaW5fbG9jaygmcWRldi0+c3VyZl9pZF9pZHJfbG9jayk7CisJCWlkcl9yZW1vdmUoJnFk ZXYtPnN1cmZfaWRfaWRyLCBoYW5kbGUpOworCQlzcGluX3VubG9jaygmcWRldi0+c3VyZl9pZF9p ZHJfbG9jayk7CisJCXF4bF9yZWFwX3N1cmZhY2VfaWQocWRldiwgMik7CisJCWdvdG8gYWdhaW47 CisJfQorCXN1cmYtPnN1cmZhY2VfaWQgPSBoYW5kbGU7CisKKwlzcGluX2xvY2soJnFkZXYtPnN1 cmZfaWRfaWRyX2xvY2spOworCXFkZXYtPmxhc3RfYWxsb2NlZF9zdXJmX2lkID0gaGFuZGxlOwor CXNwaW5fdW5sb2NrKCZxZGV2LT5zdXJmX2lkX2lkcl9sb2NrKTsKKyBhbGxvY19mYWlsOgorCXJl dHVybiAwOworfQorCit2b2lkIHF4bF9zdXJmYWNlX2lkX2RlYWxsb2Moc3RydWN0IHF4bF9kZXZp Y2UgKnFkZXYsCisJCQkgICAgdWludDMyX3Qgc3VyZmFjZV9pZCkKK3sKKwlzcGluX2xvY2soJnFk ZXYtPnN1cmZfaWRfaWRyX2xvY2spOworCWlkcl9yZW1vdmUoJnFkZXYtPnN1cmZfaWRfaWRyLCBz dXJmYWNlX2lkKTsKKwlzcGluX3VubG9jaygmcWRldi0+c3VyZl9pZF9pZHJfbG9jayk7Cit9CisK K2ludCBxeGxfaHdfc3VyZmFjZV9hbGxvYyhzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKKwkJCSBz dHJ1Y3QgcXhsX2JvICpzdXJmLAorCQkJIHN0cnVjdCB0dG1fbWVtX3JlZyAqbmV3X21lbSkKK3sK KwlzdHJ1Y3QgcXhsX3N1cmZhY2VfY21kICpjbWQ7CisJc3RydWN0IHF4bF9yZWxlYXNlICpyZWxl YXNlOworCWludCByZXQ7CisKKwlpZiAoc3VyZi0+aHdfc3VyZl9hbGxvYykKKwkJcmV0dXJuIDA7 CisKKwlyZXQgPSBxeGxfYWxsb2Nfc3VyZmFjZV9yZWxlYXNlX3Jlc2VydmVkKHFkZXYsIFFYTF9T VVJGQUNFX0NNRF9DUkVBVEUsCisJCQkJCQkgTlVMTCwKKwkJCQkJCSAmcmVsZWFzZSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCWNtZCA9IChzdHJ1Y3QgcXhsX3N1cmZhY2VfY21kICop cXhsX3JlbGVhc2VfbWFwKHFkZXYsIHJlbGVhc2UpOworCWNtZC0+dHlwZSA9IFFYTF9TVVJGQUNF X0NNRF9DUkVBVEU7CisJY21kLT51LnN1cmZhY2VfY3JlYXRlLmZvcm1hdCA9IHN1cmYtPnN1cmYu Zm9ybWF0OworCWNtZC0+dS5zdXJmYWNlX2NyZWF0ZS53aWR0aCA9IHN1cmYtPnN1cmYud2lkdGg7 CisJY21kLT51LnN1cmZhY2VfY3JlYXRlLmhlaWdodCA9IHN1cmYtPnN1cmYuaGVpZ2h0OworCWNt ZC0+dS5zdXJmYWNlX2NyZWF0ZS5zdHJpZGUgPSBzdXJmLT5zdXJmLnN0cmlkZTsKKwlpZiAobmV3 X21lbSkgeworCQlpbnQgc2xvdF9pZCA9IHN1cmYtPnR5cGUgPT0gUVhMX0dFTV9ET01BSU5fVlJB TSA/IHFkZXYtPm1haW5fbWVtX3Nsb3QgOiBxZGV2LT5zdXJmYWNlc19tZW1fc2xvdDsKKwkJc3Ry dWN0IHF4bF9tZW1zbG90ICpzbG90ID0gJihxZGV2LT5tZW1fc2xvdHNbc2xvdF9pZF0pOworCisJ CS8qIFRPRE8gLSBuZWVkIHRvIGhvbGQgb25lIG9mIHRoZSBsb2NrcyB0byByZWFkIHRiby5vZmZz ZXQgKi8KKwkJY21kLT51LnN1cmZhY2VfY3JlYXRlLmRhdGEgPSBzbG90LT5oaWdoX2JpdHM7CisK KwkJY21kLT51LnN1cmZhY2VfY3JlYXRlLmRhdGEgfD0gKG5ld19tZW0tPnN0YXJ0IDw8IFBBR0Vf U0hJRlQpICsgc3VyZi0+dGJvLmJkZXYtPm1hbltuZXdfbWVtLT5tZW1fdHlwZV0uZ3B1X29mZnNl dDsKKwl9IGVsc2UKKwkJY21kLT51LnN1cmZhY2VfY3JlYXRlLmRhdGEgPSBxeGxfYm9fcGh5c2lj YWxfYWRkcmVzcyhxZGV2LCBzdXJmLCAwKTsKKwljbWQtPnN1cmZhY2VfaWQgPSBzdXJmLT5zdXJm YWNlX2lkOworCXF4bF9yZWxlYXNlX3VubWFwKHFkZXYsIHJlbGVhc2UsICZjbWQtPnJlbGVhc2Vf aW5mbyk7CisKKwlzdXJmLT5zdXJmX2NyZWF0ZSA9IHJlbGVhc2U7CisKKwkvKiBubyBuZWVkIHRv IGFkZCBhIHJlbGVhc2UgdG8gdGhlIGZlbmNlIGZvciB0aGlzIGJvLAorCSAgIHNpbmNlIGl0IGlz IG9ubHkgcmVsZWFzZWQgd2hlbiB3ZSBhc2sgdG8gZGVzdHJveSB0aGUgc3VyZmFjZQorCSAgIGFu ZCBpdCB3b3VsZCBuZXZlciBzaWduYWwgb3RoZXJ3aXNlICovCisJcXhsX2ZlbmNlX3JlbGVhc2Vh YmxlKHFkZXYsIHJlbGVhc2UpOworCisJcXhsX3B1c2hfY29tbWFuZF9yaW5nX3JlbGVhc2UocWRl diwgcmVsZWFzZSwgUVhMX0NNRF9TVVJGQUNFLCBmYWxzZSk7CisKKwlxeGxfcmVsZWFzZV91bnJl c2VydmUocWRldiwgcmVsZWFzZSk7CisKKwlzdXJmLT5od19zdXJmX2FsbG9jID0gdHJ1ZTsKKwlz cGluX2xvY2soJnFkZXYtPnN1cmZfaWRfaWRyX2xvY2spOworCWlkcl9yZXBsYWNlKCZxZGV2LT5z dXJmX2lkX2lkciwgc3VyZiwgc3VyZi0+c3VyZmFjZV9pZCk7CisJc3Bpbl91bmxvY2soJnFkZXYt PnN1cmZfaWRfaWRyX2xvY2spOworCXJldHVybiAwOworfQorCitpbnQgcXhsX2h3X3N1cmZhY2Vf ZGVhbGxvYyhzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKKwkJCSAgIHN0cnVjdCBxeGxfYm8gKnN1 cmYpCit7CisJc3RydWN0IHF4bF9zdXJmYWNlX2NtZCAqY21kOworCXN0cnVjdCBxeGxfcmVsZWFz ZSAqcmVsZWFzZTsKKwlpbnQgcmV0OworCWludCBpZDsKKworCWlmICghc3VyZi0+aHdfc3VyZl9h bGxvYykKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBxeGxfYWxsb2Nfc3VyZmFjZV9yZWxlYXNlX3Jl c2VydmVkKHFkZXYsIFFYTF9TVVJGQUNFX0NNRF9ERVNUUk9ZLAorCQkJCQkJIHN1cmYtPnN1cmZf Y3JlYXRlLAorCQkJCQkJICZyZWxlYXNlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ c3VyZi0+c3VyZl9jcmVhdGUgPSBOVUxMOworCS8qIHJlbW92ZSB0aGUgc3VyZmFjZSBmcm9tIHRo ZSBpZHIsIGJ1dCBub3QgdGhlIHN1cmZhY2UgaWQgeWV0ICovCisJc3Bpbl9sb2NrKCZxZGV2LT5z dXJmX2lkX2lkcl9sb2NrKTsKKwlpZHJfcmVwbGFjZSgmcWRldi0+c3VyZl9pZF9pZHIsIE5VTEws IHN1cmYtPnN1cmZhY2VfaWQpOworCXNwaW5fdW5sb2NrKCZxZGV2LT5zdXJmX2lkX2lkcl9sb2Nr KTsKKwlzdXJmLT5od19zdXJmX2FsbG9jID0gZmFsc2U7CisKKwlpZCA9IHN1cmYtPnN1cmZhY2Vf aWQ7CisJc3VyZi0+c3VyZmFjZV9pZCA9IDA7CisKKwlyZWxlYXNlLT5zdXJmYWNlX3JlbGVhc2Vf aWQgPSBpZDsKKwljbWQgPSAoc3RydWN0IHF4bF9zdXJmYWNlX2NtZCAqKXF4bF9yZWxlYXNlX21h cChxZGV2LCByZWxlYXNlKTsKKwljbWQtPnR5cGUgPSBRWExfU1VSRkFDRV9DTURfREVTVFJPWTsK KwljbWQtPnN1cmZhY2VfaWQgPSBpZDsKKwlxeGxfcmVsZWFzZV91bm1hcChxZGV2LCByZWxlYXNl LCAmY21kLT5yZWxlYXNlX2luZm8pOworCisJcXhsX2ZlbmNlX3JlbGVhc2VhYmxlKHFkZXYsIHJl bGVhc2UpOworCisJcXhsX3B1c2hfY29tbWFuZF9yaW5nX3JlbGVhc2UocWRldiwgcmVsZWFzZSwg UVhMX0NNRF9TVVJGQUNFLCBmYWxzZSk7CisKKwlxeGxfcmVsZWFzZV91bnJlc2VydmUocWRldiwg cmVsZWFzZSk7CisKKworCXJldHVybiAwOworfQorCitpbnQgcXhsX3VwZGF0ZV9zdXJmYWNlKHN0 cnVjdCBxeGxfZGV2aWNlICpxZGV2LCBzdHJ1Y3QgcXhsX2JvICpzdXJmKQoreworCXN0cnVjdCBx eGxfcmVjdCByZWN0OworCWludCByZXQ7CisKKwkvKiBpZiB3ZSBhcmUgZXZpY3RpbmcsIHdlIG5l ZWQgdG8gbWFrZSBzdXJlIHRoZSBzdXJmYWNlIGlzIHVwCisJICAgdG8gZGF0ZSAqLworCXJlY3Qu bGVmdCA9IDA7CisJcmVjdC5yaWdodCA9IHN1cmYtPnN1cmYud2lkdGg7CisJcmVjdC50b3AgPSAw OworCXJlY3QuYm90dG9tID0gc3VyZi0+c3VyZi5oZWlnaHQ7CityZXRyeToKKwlyZXQgPSBxeGxf aW9fdXBkYXRlX2FyZWEocWRldiwgc3VyZiwgJnJlY3QpOworCWlmIChyZXQgPT0gLUVSRVNUQVJU U1lTKQorCQlnb3RvIHJldHJ5OworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcXhsX3N1cmZhY2Vf ZXZpY3RfbG9ja2VkKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LCBzdHJ1Y3QgcXhsX2JvICpzdXJm LCBib29sIGRvX3VwZGF0ZV9hcmVhKQoreworCS8qIG5vIG5lZWQgdG8gdXBkYXRlIGFyZWEgaWYg d2UgYXJlIGp1c3QgZnJlZWluZyB0aGUgc3VyZmFjZSBub3JtYWxseSAqLworCWlmIChkb191cGRh dGVfYXJlYSkKKwkJcXhsX3VwZGF0ZV9zdXJmYWNlKHFkZXYsIHN1cmYpOworCisJLyogbnVrZSB0 aGUgc3VyZmFjZSBpZCBhdCB0aGUgaHcgKi8KKwlxeGxfaHdfc3VyZmFjZV9kZWFsbG9jKHFkZXYs IHN1cmYpOworfQorCit2b2lkIHF4bF9zdXJmYWNlX2V2aWN0KHN0cnVjdCBxeGxfZGV2aWNlICpx ZGV2LCBzdHJ1Y3QgcXhsX2JvICpzdXJmLCBib29sIGRvX3VwZGF0ZV9hcmVhKQoreworCW11dGV4 X2xvY2soJnFkZXYtPnN1cmZfZXZpY3RfbXV0ZXgpOworCXF4bF9zdXJmYWNlX2V2aWN0X2xvY2tl ZChxZGV2LCBzdXJmLCBkb191cGRhdGVfYXJlYSk7CisJbXV0ZXhfdW5sb2NrKCZxZGV2LT5zdXJm X2V2aWN0X211dGV4KTsKK30KKworc3RhdGljIGludCBxeGxfcmVhcF9zdXJmKHN0cnVjdCBxeGxf ZGV2aWNlICpxZGV2LCBzdHJ1Y3QgcXhsX2JvICpzdXJmLCBib29sIHN0YWxsKQoreworCWludCBy ZXQ7CisKKwlyZXQgPSBxeGxfYm9fcmVzZXJ2ZShzdXJmLCBmYWxzZSk7CisJaWYgKHJldCA9PSAt RUJVU1kpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoc3VyZi0+ZmVuY2UubnVtX2FjdGl2ZV9y ZWxlYXNlcyA+IDAgJiYgc3RhbGwgPT0gZmFsc2UpIHsKKwkJcXhsX2JvX3VucmVzZXJ2ZShzdXJm KTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoc3RhbGwpCisJCW11dGV4X3VubG9jaygm cWRldi0+c3VyZl9ldmljdF9tdXRleCk7CisKKwlzcGluX2xvY2soJnN1cmYtPnRiby5iZGV2LT5m ZW5jZV9sb2NrKTsKKwlyZXQgPSB0dG1fYm9fd2FpdCgmc3VyZi0+dGJvLCB0cnVlLCB0cnVlLCAh c3RhbGwpOworCXNwaW5fdW5sb2NrKCZzdXJmLT50Ym8uYmRldi0+ZmVuY2VfbG9jayk7CisKKwlp ZiAoc3RhbGwpCisJCW11dGV4X2xvY2soJnFkZXYtPnN1cmZfZXZpY3RfbXV0ZXgpOworCWlmIChy ZXQgPT0gLUVCVVNZKSB7CisJCXF4bF9ib191bnJlc2VydmUoc3VyZik7CisJCXJldHVybiAtRUJV U1k7CisJfQorCisJcXhsX3N1cmZhY2VfZXZpY3RfbG9ja2VkKHFkZXYsIHN1cmYsIHRydWUpOwor CXF4bF9ib191bnJlc2VydmUoc3VyZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcXhs X3JlYXBfc3VyZmFjZV9pZChzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwgaW50IG1heF90b19yZWFw KQoreworCWludCBudW1fcmVhcGVkID0gMDsKKwlpbnQgaSwgcmV0OworCWJvb2wgc3RhbGwgPSBm YWxzZTsKKwlpbnQgc3RhcnQgPSAwOworCisJbXV0ZXhfbG9jaygmcWRldi0+c3VyZl9ldmljdF9t dXRleCk7CithZ2FpbjoKKworCXNwaW5fbG9jaygmcWRldi0+c3VyZl9pZF9pZHJfbG9jayk7CisJ c3RhcnQgPSBxZGV2LT5sYXN0X2FsbG9jZWRfc3VyZl9pZCArIDE7CisJc3Bpbl91bmxvY2soJnFk ZXYtPnN1cmZfaWRfaWRyX2xvY2spOworCisJZm9yIChpID0gc3RhcnQ7IGkgPCBzdGFydCArIHFk ZXYtPnJvbS0+bl9zdXJmYWNlczsgaSsrKSB7CisJCXZvaWQgKm9ianB0cjsKKwkJaW50IHN1cmZp ZCA9IGkgJSBxZGV2LT5yb20tPm5fc3VyZmFjZXM7CisKKwkJLyogdGhpcyBhdm9pZHMgdGhlIGNh c2Ugd2hlcmUgdGhlIG9iamVjdHMgaXMgaW4gdGhlCisJCSAgIGlkciBidXQgaGFzIGJlZW4gZXZp Y3RlZCBoYWxmIHdheSAtIGl0cyBtYWtlcworCQkgICB0aGUgaWRyIGxvb2t1cCBhdG9taWMgd2l0 aCB0aGUgZXZpY3Rpb24gKi8KKwkJc3Bpbl9sb2NrKCZxZGV2LT5zdXJmX2lkX2lkcl9sb2NrKTsK KwkJb2JqcHRyID0gaWRyX2ZpbmQoJnFkZXYtPnN1cmZfaWRfaWRyLCBzdXJmaWQpOworCQlzcGlu X3VubG9jaygmcWRldi0+c3VyZl9pZF9pZHJfbG9jayk7CisKKwkJaWYgKCFvYmpwdHIpCisJCQlj b250aW51ZTsKKworCQlyZXQgPSBxeGxfcmVhcF9zdXJmKHFkZXYsIG9ianB0ciwgc3RhbGwpOwor CQlpZiAocmV0ID09IDApCisJCQludW1fcmVhcGVkKys7CisJCWlmIChudW1fcmVhcGVkID49IG1h eF90b19yZWFwKQorCQkJYnJlYWs7CisJfQorCWlmIChudW1fcmVhcGVkID09IDAgJiYgc3RhbGwg PT0gZmFsc2UpIHsKKwkJc3RhbGwgPSB0cnVlOworCQlnb3RvIGFnYWluOworCX0KKworCW11dGV4 X3VubG9jaygmcWRldi0+c3VyZl9ldmljdF9tdXRleCk7CisJaWYgKG51bV9yZWFwZWQpIHsKKwkJ dXNsZWVwX3JhbmdlKDUwMCwgMTAwMCk7CisJCXF4bF9xdWV1ZV9nYXJiYWdlX2NvbGxlY3QocWRl diwgdHJ1ZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vcXhsL3F4bF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kZWJ1Z2ZzLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzMDE1MgotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2RlYnVnZnMuYwpAQCAtMCwwICsxLDEzNSBA QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0IDxic2tlZ2dzQHJlZGhhdC5jb20+ CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhv dXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCisgKiBwb3J0aW9ucyBvZiB0 aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJ TElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIoUykgQU5EL09SIElU UyBTVVBQTElFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdB UkUuCisgKgorICovCisKKy8qCisgKiBBdXRob3JzOgorICogIEFsb24gTGV2eSA8YWxldnlAcmVk aGF0LmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorCisjaW5jbHVkZSAi ZHJtUC5oIgorI2luY2x1ZGUgInF4bF9kcnYuaCIKKyNpbmNsdWRlICJxeGxfb2JqZWN0LmgiCisK Kworc3RhdGljIGludAorcXhsX2RlYnVnZnNfaXJxX3JlY2VpdmVkKHN0cnVjdCBzZXFfZmlsZSAq bSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3Qg ZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBxeGxfZGV2aWNlICpxZGV2ID0g bm9kZS0+bWlub3ItPmRldi0+ZGV2X3ByaXZhdGU7CisKKwlzZXFfcHJpbnRmKG0sICIlZFxuIiwg YXRvbWljX3JlYWQoJnFkZXYtPmlycV9yZWNlaXZlZCkpOworCXNlcV9wcmludGYobSwgIiVkXG4i LCBhdG9taWNfcmVhZCgmcWRldi0+aXJxX3JlY2VpdmVkX2Rpc3BsYXkpKTsKKwlzZXFfcHJpbnRm KG0sICIlZFxuIiwgYXRvbWljX3JlYWQoJnFkZXYtPmlycV9yZWNlaXZlZF9jdXJzb3IpKTsKKwlz ZXFfcHJpbnRmKG0sICIlZFxuIiwgYXRvbWljX3JlYWQoJnFkZXYtPmlycV9yZWNlaXZlZF9pb19j bWQpKTsKKwlzZXFfcHJpbnRmKG0sICIlZFxuIiwgcWRldi0+aXJxX3JlY2VpdmVkX2Vycm9yKTsK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcXhsX2RlYnVnZnNfYnVmZmVyc19pbmZvKHN0 cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAq bm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBxeGxf ZGV2aWNlICpxZGV2ID0gbm9kZS0+bWlub3ItPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHF4 bF9ibyAqYm87CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJvLCAmcWRldi0+Z2VtLm9iamVjdHMs IGxpc3QpIHsKKwkJc2VxX3ByaW50ZihtLCAic2l6ZSAlbGQsIHBjICVkLCBzeW5jIG9iaiAlcCwg bnVtIHJlbGVhc2VzICVkXG4iLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpYm8tPmdlbV9iYXNlLnNp emUsIGJvLT5waW5fY291bnQsCisJCQkgICBiby0+dGJvLnN5bmNfb2JqLCBiby0+ZmVuY2UubnVt X2FjdGl2ZV9yZWxlYXNlcyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRy bV9pbmZvX2xpc3QgcXhsX2RlYnVnZnNfbGlzdFtdID0geworCXsgImlycV9yZWNlaXZlZCIsIHF4 bF9kZWJ1Z2ZzX2lycV9yZWNlaXZlZCwgMCwgTlVMTCB9LAorCXsgInF4bF9idWZmZXJzIiwgcXhs X2RlYnVnZnNfYnVmZmVyc19pbmZvLCAwLCBOVUxMIH0sCit9OworI2RlZmluZSBRWExfREVCVUdG U19FTlRSSUVTIEFSUkFZX1NJWkUocXhsX2RlYnVnZnNfbGlzdCkKKworaW50CitxeGxfZGVidWdm c19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCWRybV9kZWJ1Z2ZzX2NyZWF0ZV9m aWxlcyhxeGxfZGVidWdmc19saXN0LCBRWExfREVCVUdGU19FTlRSSUVTLAorCQkJCSBtaW5vci0+ ZGVidWdmc19yb290LCBtaW5vcik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK3F4bF9kZWJ1Z2Zz X3Rha2Vkb3duKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCWRybV9kZWJ1Z2ZzX3JlbW92 ZV9maWxlcyhxeGxfZGVidWdmc19saXN0LCBRWExfREVCVUdGU19FTlRSSUVTLAorCQkJCSBtaW5v cik7Cit9CisKK2ludCBxeGxfZGVidWdmc19hZGRfZmlsZXMoc3RydWN0IHF4bF9kZXZpY2UgKnFk ZXYsCisJCQkgIHN0cnVjdCBkcm1faW5mb19saXN0ICpmaWxlcywKKwkJCSAgdW5zaWduZWQgbmZp bGVzKQoreworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcWRldi0+ZGVidWdmc19j b3VudDsgaSsrKSB7CisJCWlmIChxZGV2LT5kZWJ1Z2ZzW2ldLmZpbGVzID09IGZpbGVzKSB7CisJ CQkvKiBBbHJlYWR5IHJlZ2lzdGVyZWQgKi8KKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaSA9 IHFkZXYtPmRlYnVnZnNfY291bnQgKyAxOworCWlmIChpID4gUVhMX0RFQlVHRlNfTUFYX0NPTVBP TkVOVFMpIHsKKwkJRFJNX0VSUk9SKCJSZWFjaGVkIG1heGltdW0gbnVtYmVyIG9mIGRlYnVnZnMg Y29tcG9uZW50cy5cbiIpOworCQlEUk1fRVJST1IoIlJlcG9ydCBzbyB3ZSBpbmNyZWFzZSBRWExf REVCVUdGU19NQVhfQ09NUE9ORU5UUy5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcWRl di0+ZGVidWdmc1txZGV2LT5kZWJ1Z2ZzX2NvdW50XS5maWxlcyA9IGZpbGVzOworCXFkZXYtPmRl YnVnZnNbcWRldi0+ZGVidWdmc19jb3VudF0ubnVtX2ZpbGVzID0gbmZpbGVzOworCXFkZXYtPmRl YnVnZnNfY291bnQgPSBpOworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCWRybV9kZWJ1 Z2ZzX2NyZWF0ZV9maWxlcyhmaWxlcywgbmZpbGVzLAorCQkJCSBxZGV2LT5kZGV2LT5jb250cm9s LT5kZWJ1Z2ZzX3Jvb3QsCisJCQkJIHFkZXYtPmRkZXYtPmNvbnRyb2wpOworCWRybV9kZWJ1Z2Zz X2NyZWF0ZV9maWxlcyhmaWxlcywgbmZpbGVzLAorCQkJCSBxZGV2LT5kZGV2LT5wcmltYXJ5LT5k ZWJ1Z2ZzX3Jvb3QsCisJCQkJIHFkZXYtPmRkZXYtPnByaW1hcnkpOworI2VuZGlmCisJcmV0dXJu IDA7Cit9CisKK3ZvaWQgcXhsX2RlYnVnZnNfcmVtb3ZlX2ZpbGVzKHN0cnVjdCBxeGxfZGV2aWNl ICpxZGV2KQoreworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCXVuc2lnbmVkIGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgcWRldi0+ZGVidWdmc19jb3VudDsgaSsrKSB7CisJCWRybV9kZWJ1 Z2ZzX3JlbW92ZV9maWxlcyhxZGV2LT5kZWJ1Z2ZzW2ldLmZpbGVzLAorCQkJCQkgcWRldi0+ZGVi dWdmc1tpXS5udW1fZmlsZXMsCisJCQkJCSBxZGV2LT5kZGV2LT5jb250cm9sKTsKKwkJZHJtX2Rl YnVnZnNfcmVtb3ZlX2ZpbGVzKHFkZXYtPmRlYnVnZnNbaV0uZmlsZXMsCisJCQkJCSBxZGV2LT5k ZWJ1Z2ZzW2ldLm51bV9maWxlcywKKwkJCQkJIHFkZXYtPmRkZXYtPnByaW1hcnkpOworCX0KKyNl bmRpZgorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZGV2LmggYi9kcml2 ZXJzL2dwdS9kcm0vcXhsL3F4bF9kZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi45NGM1YWVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxf ZGV2LmgKQEAgLTAsMCArMSw4NzkgQEAKKy8qCisgICBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhh dCwgSW5jLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAgIG1ldDoKKworICAg ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKwkgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLgorICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKwkgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisJIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKwkg ZGlzdHJpYnV0aW9uLgorICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0 IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworCSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKwkgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIEFORCBDT05UUklC VVRPUlMgIkFTCisgICBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICAgUEFSVElDVUxBUiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBI T0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKwor CisjaWZuZGVmIEhfUVhMX0RFVgorI2RlZmluZSBIX1FYTF9ERVYKKworI2luY2x1ZGUgPGxpbnV4 L3R5cGVzLmg+CisKKy8qCisgKiBmcm9tIHNwaWNlLXByb3RvY29sCisgKiBSZWxlYXNlIDAuMTAu MAorICovCisKKy8qIGVudW1zLmggKi8KKworZW51bSBTcGljZUltYWdlVHlwZSB7CisJU1BJQ0Vf SU1BR0VfVFlQRV9CSVRNQVAsCisJU1BJQ0VfSU1BR0VfVFlQRV9RVUlDLAorCVNQSUNFX0lNQUdF X1RZUEVfUkVTRVJWRUQsCisJU1BJQ0VfSU1BR0VfVFlQRV9MWl9QTFQgPSAxMDAsCisJU1BJQ0Vf SU1BR0VfVFlQRV9MWl9SR0IsCisJU1BJQ0VfSU1BR0VfVFlQRV9HTFpfUkdCLAorCVNQSUNFX0lN QUdFX1RZUEVfRlJPTV9DQUNIRSwKKwlTUElDRV9JTUFHRV9UWVBFX1NVUkZBQ0UsCisJU1BJQ0Vf SU1BR0VfVFlQRV9KUEVHLAorCVNQSUNFX0lNQUdFX1RZUEVfRlJPTV9DQUNIRV9MT1NTTEVTUywK KwlTUElDRV9JTUFHRV9UWVBFX1pMSUJfR0xaX1JHQiwKKwlTUElDRV9JTUFHRV9UWVBFX0pQRUdf QUxQSEEsCisKKwlTUElDRV9JTUFHRV9UWVBFX0VOVU1fRU5ECit9OworCitlbnVtIFNwaWNlQml0 bWFwRm10IHsKKwlTUElDRV9CSVRNQVBfRk1UX0lOVkFMSUQsCisJU1BJQ0VfQklUTUFQX0ZNVF8x QklUX0xFLAorCVNQSUNFX0JJVE1BUF9GTVRfMUJJVF9CRSwKKwlTUElDRV9CSVRNQVBfRk1UXzRC SVRfTEUsCisJU1BJQ0VfQklUTUFQX0ZNVF80QklUX0JFLAorCVNQSUNFX0JJVE1BUF9GTVRfOEJJ VCwKKwlTUElDRV9CSVRNQVBfRk1UXzE2QklULAorCVNQSUNFX0JJVE1BUF9GTVRfMjRCSVQsCisJ U1BJQ0VfQklUTUFQX0ZNVF8zMkJJVCwKKwlTUElDRV9CSVRNQVBfRk1UX1JHQkEsCisKKwlTUElD RV9CSVRNQVBfRk1UX0VOVU1fRU5ECit9OworCitlbnVtIFNwaWNlU3VyZmFjZUZtdCB7CisJU1BJ Q0VfU1VSRkFDRV9GTVRfSU5WQUxJRCwKKwlTUElDRV9TVVJGQUNFX0ZNVF8xX0EsCisJU1BJQ0Vf U1VSRkFDRV9GTVRfOF9BID0gOCwKKwlTUElDRV9TVVJGQUNFX0ZNVF8xNl81NTUgPSAxNiwKKwlT UElDRV9TVVJGQUNFX0ZNVF8zMl94UkdCID0gMzIsCisJU1BJQ0VfU1VSRkFDRV9GTVRfMTZfNTY1 ID0gODAsCisJU1BJQ0VfU1VSRkFDRV9GTVRfMzJfQVJHQiA9IDk2LAorCisJU1BJQ0VfU1VSRkFD RV9GTVRfRU5VTV9FTkQKK307CisKK2VudW0gU3BpY2VDbGlwVHlwZSB7CisJU1BJQ0VfQ0xJUF9U WVBFX05PTkUsCisJU1BJQ0VfQ0xJUF9UWVBFX1JFQ1RTLAorCisJU1BJQ0VfQ0xJUF9UWVBFX0VO VU1fRU5ECit9OworCitlbnVtIFNwaWNlUm9wZCB7CisJU1BJQ0VfUk9QRF9JTlZFUlNfU1JDID0g KDEgPDwgMCksCisJU1BJQ0VfUk9QRF9JTlZFUlNfQlJVU0ggPSAoMSA8PCAxKSwKKwlTUElDRV9S T1BEX0lOVkVSU19ERVNUID0gKDEgPDwgMiksCisJU1BJQ0VfUk9QRF9PUF9QVVQgPSAoMSA8PCAz KSwKKwlTUElDRV9ST1BEX09QX09SID0gKDEgPDwgNCksCisJU1BJQ0VfUk9QRF9PUF9BTkQgPSAo MSA8PCA1KSwKKwlTUElDRV9ST1BEX09QX1hPUiA9ICgxIDw8IDYpLAorCVNQSUNFX1JPUERfT1Bf QkxBQ0tORVNTID0gKDEgPDwgNyksCisJU1BJQ0VfUk9QRF9PUF9XSElURU5FU1MgPSAoMSA8PCA4 KSwKKwlTUElDRV9ST1BEX09QX0lOVkVSUyA9ICgxIDw8IDkpLAorCVNQSUNFX1JPUERfSU5WRVJT X1JFUyA9ICgxIDw8IDEwKSwKKworCVNQSUNFX1JPUERfTUFTSyA9IDB4N2ZmCit9OworCitlbnVt IFNwaWNlQnJ1c2hUeXBlIHsKKwlTUElDRV9CUlVTSF9UWVBFX05PTkUsCisJU1BJQ0VfQlJVU0hf VFlQRV9TT0xJRCwKKwlTUElDRV9CUlVTSF9UWVBFX1BBVFRFUk4sCisKKwlTUElDRV9CUlVTSF9U WVBFX0VOVU1fRU5ECit9OworCitlbnVtIFNwaWNlQ3Vyc29yVHlwZSB7CisJU1BJQ0VfQ1VSU09S X1RZUEVfQUxQSEEsCisJU1BJQ0VfQ1VSU09SX1RZUEVfTU9OTywKKwlTUElDRV9DVVJTT1JfVFlQ RV9DT0xPUjQsCisJU1BJQ0VfQ1VSU09SX1RZUEVfQ09MT1I4LAorCVNQSUNFX0NVUlNPUl9UWVBF X0NPTE9SMTYsCisJU1BJQ0VfQ1VSU09SX1RZUEVfQ09MT1IyNCwKKwlTUElDRV9DVVJTT1JfVFlQ RV9DT0xPUjMyLAorCisJU1BJQ0VfQ1VSU09SX1RZUEVfRU5VTV9FTkQKK307CisKKy8qIHF4bF9k ZXYuaCAqLworCisjcHJhZ21hIHBhY2socHVzaCwgMSkKKworI2RlZmluZSBSRURIQVRfUENJX1ZF TkRPUl9JRCAweDFiMzYKKworLyogMHgxMDAtMHgxMWYgcmVzZXJ2ZWQgZm9yIHNwaWNlLCAweDFm ZiB1c2VkIGZvciB1bnN0YWJsZSB3b3JrICovCisjZGVmaW5lIFFYTF9ERVZJQ0VfSURfU1RBQkxF IDB4MDEwMAorCitlbnVtIHsKKwlRWExfUkVWSVNJT05fU1RBQkxFX1YwNCA9IDB4MDEsCisJUVhM X1JFVklTSU9OX1NUQUJMRV9WMDYgPSAweDAyLAorCVFYTF9SRVZJU0lPTl9TVEFCTEVfVjEwID0g MHgwMywKKwlRWExfUkVWSVNJT05fU1RBQkxFX1YxMiA9IDB4MDQsCit9OworCisjZGVmaW5lIFFY TF9ERVZJQ0VfSURfREVWRUwgMHgwMWZmCisjZGVmaW5lIFFYTF9SRVZJU0lPTl9ERVZFTCAweDAx CisKKyNkZWZpbmUgUVhMX1JPTV9NQUdJQyAoKih1aW50MzJfdCAqKSJRWFJPIikKKyNkZWZpbmUg UVhMX1JBTV9NQUdJQyAoKih1aW50MzJfdCAqKSJRWFJBIikKKworZW51bSB7CisJUVhMX1JBTV9S QU5HRV9JTkRFWCwKKwlRWExfVlJBTV9SQU5HRV9JTkRFWCwKKwlRWExfUk9NX1JBTkdFX0lOREVY LAorCVFYTF9JT19SQU5HRV9JTkRFWCwKKworCVFYTF9QQ0lfUkFOR0VTCit9OworCisvKiBxeGwt MSBjb21wYXQ6IGFwcGVuZCBvbmx5ICovCitlbnVtIHsKKwlRWExfSU9fTk9USUZZX0NNRCwKKwlR WExfSU9fTk9USUZZX0NVUlNPUiwKKwlRWExfSU9fVVBEQVRFX0FSRUEsCisJUVhMX0lPX1VQREFU RV9JUlEsCisJUVhMX0lPX05PVElGWV9PT00sCisJUVhMX0lPX1JFU0VULAorCVFYTF9JT19TRVRf TU9ERSwgICAgICAgICAgICAgICAgICAvKiBxeGwtMSAqLworCVFYTF9JT19MT0csCisJLyogYXBw ZW5kZWQgZm9yIHF4bC0yICovCisJUVhMX0lPX01FTVNMT1RfQURELAorCVFYTF9JT19NRU1TTE9U X0RFTCwKKwlRWExfSU9fREVUQUNIX1BSSU1BUlksCisJUVhMX0lPX0FUVEFDSF9QUklNQVJZLAor CVFYTF9JT19DUkVBVEVfUFJJTUFSWSwKKwlRWExfSU9fREVTVFJPWV9QUklNQVJZLAorCVFYTF9J T19ERVNUUk9ZX1NVUkZBQ0VfV0FJVCwKKwlRWExfSU9fREVTVFJPWV9BTExfU1VSRkFDRVMsCisJ LyogYXBwZW5kZWQgZm9yIHF4bC0zICovCisJUVhMX0lPX1VQREFURV9BUkVBX0FTWU5DLAorCVFY TF9JT19NRU1TTE9UX0FERF9BU1lOQywKKwlRWExfSU9fQ1JFQVRFX1BSSU1BUllfQVNZTkMsCisJ UVhMX0lPX0RFU1RST1lfUFJJTUFSWV9BU1lOQywKKwlRWExfSU9fREVTVFJPWV9TVVJGQUNFX0FT WU5DLAorCVFYTF9JT19ERVNUUk9ZX0FMTF9TVVJGQUNFU19BU1lOQywKKwlRWExfSU9fRkxVU0hf U1VSRkFDRVNfQVNZTkMsCisJUVhMX0lPX0ZMVVNIX1JFTEVBU0UsCisJLyogYXBwZW5kZWQgZm9y IHF4bC00ICovCisJUVhMX0lPX01PTklUT1JTX0NPTkZJR19BU1lOQywKKworCVFYTF9JT19SQU5H RV9TSVpFCit9OworCit0eXBlZGVmIHVpbnQ2NF90IFFYTFBIWVNJQ0FMOwordHlwZWRlZiBpbnQz Ml90IFFYTEZJWEVEOyAvKiBmaXhlZCAyOC40ICovCisKK3N0cnVjdCBxeGxfcG9pbnRfZml4IHsK KwlRWExGSVhFRCB4OworCVFYTEZJWEVEIHk7Cit9OworCitzdHJ1Y3QgcXhsX3BvaW50IHsKKwlp bnQzMl90IHg7CisJaW50MzJfdCB5OworfTsKKworc3RydWN0IHF4bF9wb2ludF8xXzYgeworCWlu dDE2X3QgeDsKKwlpbnQxNl90IHk7Cit9OworCitzdHJ1Y3QgcXhsX3JlY3QgeworCWludDMyX3Qg dG9wOworCWludDMyX3QgbGVmdDsKKwlpbnQzMl90IGJvdHRvbTsKKwlpbnQzMl90IHJpZ2h0Owor fTsKKworc3RydWN0IHF4bF91cmVjdCB7CisJdWludDMyX3QgdG9wOworCXVpbnQzMl90IGxlZnQ7 CisJdWludDMyX3QgYm90dG9tOworCXVpbnQzMl90IHJpZ2h0OworfTsKKworLyogcXhsLTEgY29t cGF0OiBhcHBlbmQgb25seSAqLworc3RydWN0IHF4bF9yb20geworCXVpbnQzMl90IG1hZ2ljOwor CXVpbnQzMl90IGlkOworCXVpbnQzMl90IHVwZGF0ZV9pZDsKKwl1aW50MzJfdCBjb21wcmVzc2lv bl9sZXZlbDsKKwl1aW50MzJfdCBsb2dfbGV2ZWw7CisJdWludDMyX3QgbW9kZTsJCQkgIC8qIHF4 bC0xICovCisJdWludDMyX3QgbW9kZXNfb2Zmc2V0OworCXVpbnQzMl90IG51bV9pb19wYWdlczsK Kwl1aW50MzJfdCBwYWdlc19vZmZzZXQ7CQkgIC8qIHF4bC0xICovCisJdWludDMyX3QgZHJhd19h cmVhX29mZnNldDsJICAvKiBxeGwtMSAqLworCXVpbnQzMl90IHN1cmZhY2UwX2FyZWFfc2l6ZTsJ ICAvKiBxeGwtMSBuYW1lOiBkcmF3X2FyZWFfc2l6ZSAqLworCXVpbnQzMl90IHJhbV9oZWFkZXJf b2Zmc2V0OworCXVpbnQzMl90IG1tX2Nsb2NrOworCS8qIGFwcGVuZGVkIGZvciBxeGwtMiAqLwor CXVpbnQzMl90IG5fc3VyZmFjZXM7CisJdWludDY0X3QgZmxhZ3M7CisJdWludDhfdCBzbG90c19z dGFydDsKKwl1aW50OF90IHNsb3RzX2VuZDsKKwl1aW50OF90IHNsb3RfZ2VuX2JpdHM7CisJdWlu dDhfdCBzbG90X2lkX2JpdHM7CisJdWludDhfdCBzbG90X2dlbmVyYXRpb247CisJLyogYXBwZW5k ZWQgZm9yIHF4bC00ICovCisJdWludDhfdCBjbGllbnRfcHJlc2VudDsKKwl1aW50OF90IGNsaWVu dF9jYXBhYmlsaXRpZXNbNThdOworCXVpbnQzMl90IGNsaWVudF9tb25pdG9yc19jb25maWdfY3Jj OworCXN0cnVjdCB7CisJCXVpbnQxNl90IGNvdW50OworCXVpbnQxNl90IHBhZGRpbmc7CisJCXN0 cnVjdCBxeGxfdXJlY3QgaGVhZHNbNjRdOworCX0gY2xpZW50X21vbml0b3JzX2NvbmZpZzsKK307 CisKKy8qIHF4bC0xIGNvbXBhdDogZml4ZWQgKi8KK3N0cnVjdCBxeGxfbW9kZSB7CisJdWludDMy X3QgaWQ7CisJdWludDMyX3QgeF9yZXM7CisJdWludDMyX3QgeV9yZXM7CisJdWludDMyX3QgYml0 czsKKwl1aW50MzJfdCBzdHJpZGU7CisJdWludDMyX3QgeF9taWxpOworCXVpbnQzMl90IHlfbWls aTsKKwl1aW50MzJfdCBvcmllbnRhdGlvbjsKK307CisKKy8qIHF4bC0xIGNvbXBhdDogZml4ZWQg Ki8KK3N0cnVjdCBxeGxfbW9kZXMgeworCXVpbnQzMl90IG5fbW9kZXM7CisJc3RydWN0IHF4bF9t b2RlIG1vZGVzWzBdOworfTsKKworLyogcXhsLTEgY29tcGF0OiBhcHBlbmQgb25seSAqLworZW51 bSBxeGxfY21kX3R5cGUgeworCVFYTF9DTURfTk9QLAorCVFYTF9DTURfRFJBVywKKwlRWExfQ01E X1VQREFURSwKKwlRWExfQ01EX0NVUlNPUiwKKwlRWExfQ01EX01FU1NBR0UsCisJUVhMX0NNRF9T VVJGQUNFLAorfTsKKworLyogcXhsLTEgY29tcGF0OiBmaXhlZCAqLworc3RydWN0IHF4bF9jb21t YW5kIHsKKwlRWExQSFlTSUNBTCBkYXRhOworCXVpbnQzMl90IHR5cGU7CisJdWludDMyX3QgcGFk ZGluZzsKK307CisKKyNkZWZpbmUgUVhMX0NPTU1BTkRfRkxBR19DT01QQVQJCSgxPDwwKQorI2Rl ZmluZSBRWExfQ09NTUFORF9GTEFHX0NPTVBBVF8xNkJQUAkoMjw8MCkKKworc3RydWN0IHF4bF9j b21tYW5kX2V4dCB7CisJc3RydWN0IHF4bF9jb21tYW5kIGNtZDsKKwl1aW50MzJfdCBncm91cF9p ZDsKKwl1aW50MzJfdCBmbGFnczsKK307CisKK3N0cnVjdCBxeGxfbWVtX3Nsb3QgeworCXVpbnQ2 NF90IG1lbV9zdGFydDsKKwl1aW50NjRfdCBtZW1fZW5kOworfTsKKworI2RlZmluZSBRWExfU1VS Rl9UWVBFX1BSSU1BUlkJICAgMAorCisjZGVmaW5lIFFYTF9TVVJGX0ZMQUdfS0VFUF9EQVRBCSAg ICgxIDw8IDApCisKK3N0cnVjdCBxeGxfc3VyZmFjZV9jcmVhdGUgeworCXVpbnQzMl90IHdpZHRo OworCXVpbnQzMl90IGhlaWdodDsKKwlpbnQzMl90IHN0cmlkZTsKKwl1aW50MzJfdCBmb3JtYXQ7 CisJdWludDMyX3QgcG9zaXRpb247CisJdWludDMyX3QgbW91c2VfbW9kZTsKKwl1aW50MzJfdCBm bGFnczsKKwl1aW50MzJfdCB0eXBlOworCVFYTFBIWVNJQ0FMIG1lbTsKK307CisKKyNkZWZpbmUg UVhMX0NPTU1BTkRfUklOR19TSVpFIDMyCisjZGVmaW5lIFFYTF9DVVJTT1JfUklOR19TSVpFIDMy CisjZGVmaW5lIFFYTF9SRUxFQVNFX1JJTkdfU0laRSA4CisKKyNkZWZpbmUgUVhMX0xPR19CVUZf U0laRSA0MDk2CisKKyNkZWZpbmUgUVhMX0lOVEVSUlVQVF9ESVNQTEFZICgxIDw8IDApCisjZGVm aW5lIFFYTF9JTlRFUlJVUFRfQ1VSU09SICgxIDw8IDEpCisjZGVmaW5lIFFYTF9JTlRFUlJVUFRf SU9fQ01EICgxIDw8IDIpCisjZGVmaW5lIFFYTF9JTlRFUlJVUFRfRVJST1IgICgxIDw8IDMpCisj ZGVmaW5lIFFYTF9JTlRFUlJVUFRfQ0xJRU5UICgxIDw8IDQpCisjZGVmaW5lIFFYTF9JTlRFUlJV UFRfQ0xJRU5UX01PTklUT1JTX0NPTkZJRyAgKDEgPDwgNSkKKworc3RydWN0IHF4bF9yaW5nX2hl YWRlciB7CisJdWludDMyX3QgbnVtX2l0ZW1zOworCXVpbnQzMl90IHByb2Q7CisJdWludDMyX3Qg bm90aWZ5X29uX3Byb2Q7CisJdWludDMyX3QgY29uczsKKwl1aW50MzJfdCBub3RpZnlfb25fY29u czsKK307CisKKy8qIHF4bC0xIGNvbXBhdDogYXBwZW5kIG9ubHkgKi8KK3N0cnVjdCBxeGxfcmFt X2hlYWRlciB7CisJdWludDMyX3QgbWFnaWM7CisJdWludDMyX3QgaW50X3BlbmRpbmc7CisJdWlu dDMyX3QgaW50X21hc2s7CisJdWludDhfdCBsb2dfYnVmW1FYTF9MT0dfQlVGX1NJWkVdOworCXN0 cnVjdCBxeGxfcmluZ19oZWFkZXIgIGNtZF9yaW5nX2hkcjsKKwlzdHJ1Y3QgcXhsX2NvbW1hbmQJ Y21kX3JpbmdbUVhMX0NPTU1BTkRfUklOR19TSVpFXTsKKwlzdHJ1Y3QgcXhsX3JpbmdfaGVhZGVy ICBjdXJzb3JfcmluZ19oZHI7CisJc3RydWN0IHF4bF9jb21tYW5kCWN1cnNvcl9yaW5nW1FYTF9D VVJTT1JfUklOR19TSVpFXTsKKwlzdHJ1Y3QgcXhsX3JpbmdfaGVhZGVyICByZWxlYXNlX3Jpbmdf aGRyOworCXVpbnQ2NF90CQlyZWxlYXNlX3JpbmdbUVhMX1JFTEVBU0VfUklOR19TSVpFXTsKKwlz dHJ1Y3QgcXhsX3JlY3QgdXBkYXRlX2FyZWE7CisJLyogYXBwZW5kZWQgZm9yIHF4bC0yICovCisJ dWludDMyX3QgdXBkYXRlX3N1cmZhY2U7CisJc3RydWN0IHF4bF9tZW1fc2xvdCBtZW1fc2xvdDsK KwlzdHJ1Y3QgcXhsX3N1cmZhY2VfY3JlYXRlIGNyZWF0ZV9zdXJmYWNlOworCXVpbnQ2NF90IGZs YWdzOworCisJLyogYXBwZW5kZWQgZm9yIHF4bC00ICovCisKKwkvKiB1c2VkIGJ5IFFYTF9JT19N T05JVE9SU19DT05GSUdfQVNZTkMgKi8KKwlRWExQSFlTSUNBTCBtb25pdG9yc19jb25maWc7CisJ dWludDhfdCBndWVzdF9jYXBhYmlsaXRpZXNbNjRdOworfTsKKwordW5pb24gcXhsX3JlbGVhc2Vf aW5mbyB7CisJdWludDY0X3QgaWQ7CSAgLyogaW4gICovCisJdWludDY0X3QgbmV4dDsJICAvKiBv dXQgKi8KK307CisKK3N0cnVjdCBxeGxfcmVsZWFzZV9pbmZvX2V4dCB7CisJdW5pb24gcXhsX3Jl bGVhc2VfaW5mbyAqaW5mbzsKKwl1aW50MzJfdCBncm91cF9pZDsKK307CisKK3N0cnVjdCBxeGxf ZGF0YV9jaHVuayB7CisJdWludDMyX3QgZGF0YV9zaXplOworCVFYTFBIWVNJQ0FMIHByZXZfY2h1 bms7CisJUVhMUEhZU0lDQUwgbmV4dF9jaHVuazsKKwl1aW50OF90IGRhdGFbMF07Cit9OworCitz dHJ1Y3QgcXhsX21lc3NhZ2UgeworCXVuaW9uIHF4bF9yZWxlYXNlX2luZm8gcmVsZWFzZV9pbmZv OworCXVpbnQ4X3QgZGF0YVswXTsKK307CisKK3N0cnVjdCBxeGxfY29tcGF0X3VwZGF0ZV9jbWQg eworCXVuaW9uIHF4bF9yZWxlYXNlX2luZm8gcmVsZWFzZV9pbmZvOworCXN0cnVjdCBxeGxfcmVj dCBhcmVhOworCXVpbnQzMl90IHVwZGF0ZV9pZDsKK307CisKK3N0cnVjdCBxeGxfdXBkYXRlX2Nt ZCB7CisJdW5pb24gcXhsX3JlbGVhc2VfaW5mbyByZWxlYXNlX2luZm87CisJc3RydWN0IHF4bF9y ZWN0IGFyZWE7CisJdWludDMyX3QgdXBkYXRlX2lkOworCXVpbnQzMl90IHN1cmZhY2VfaWQ7Cit9 OworCitzdHJ1Y3QgcXhsX2N1cnNvcl9oZWFkZXIgeworCXVpbnQ2NF90IHVuaXF1ZTsKKwl1aW50 MTZfdCB0eXBlOworCXVpbnQxNl90IHdpZHRoOworCXVpbnQxNl90IGhlaWdodDsKKwl1aW50MTZf dCBob3Rfc3BvdF94OworCXVpbnQxNl90IGhvdF9zcG90X3k7Cit9OworCitzdHJ1Y3QgcXhsX2N1 cnNvciB7CisJc3RydWN0IHF4bF9jdXJzb3JfaGVhZGVyIGhlYWRlcjsKKwl1aW50MzJfdCBkYXRh X3NpemU7CisJc3RydWN0IHF4bF9kYXRhX2NodW5rIGNodW5rOworfTsKKworZW51bSB7CisJUVhM X0NVUlNPUl9TRVQsCisJUVhMX0NVUlNPUl9NT1ZFLAorCVFYTF9DVVJTT1JfSElERSwKKwlRWExf Q1VSU09SX1RSQUlMLAorfTsKKworI2RlZmluZSBRWExfQ1VSU09SX0RFVklDRV9EQVRBX1NJWkUg MTI4CisKK3N0cnVjdCBxeGxfY3Vyc29yX2NtZCB7CisJdW5pb24gcXhsX3JlbGVhc2VfaW5mbyBy ZWxlYXNlX2luZm87CisJdWludDhfdCB0eXBlOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXN0 cnVjdCBxeGxfcG9pbnRfMV82IHBvc2l0aW9uOworCQkJdWludDhfdCB2aXNpYmxlOworCQkJUVhM UEhZU0lDQUwgc2hhcGU7CisJCX0gc2V0OworCQlzdHJ1Y3QgeworCQkJdWludDE2X3QgbGVuZ3Ro OworCQkJdWludDE2X3QgZnJlcXVlbmN5OworCQl9IHRyYWlsOworCQlzdHJ1Y3QgcXhsX3BvaW50 XzFfNiBwb3NpdGlvbjsKKwl9IHU7CisJLyogdG9kbzogZHluYW1pYyBzaXplIGZyb20gcm9tICov CisJdWludDhfdCBkZXZpY2VfZGF0YVtRWExfQ1VSU09SX0RFVklDRV9EQVRBX1NJWkVdOworfTsK KworZW51bSB7CisJUVhMX0RSQVdfTk9QLAorCVFYTF9EUkFXX0ZJTEwsCisJUVhMX0RSQVdfT1BB UVVFLAorCVFYTF9EUkFXX0NPUFksCisJUVhMX0NPUFlfQklUUywKKwlRWExfRFJBV19CTEVORCwK KwlRWExfRFJBV19CTEFDS05FU1MsCisJUVhMX0RSQVdfV0hJVEVORVNTLAorCVFYTF9EUkFXX0lO VkVSUywKKwlRWExfRFJBV19ST1AzLAorCVFYTF9EUkFXX1NUUk9LRSwKKwlRWExfRFJBV19URVhU LAorCVFYTF9EUkFXX1RSQU5TUEFSRU5ULAorCVFYTF9EUkFXX0FMUEhBX0JMRU5ELAorCVFYTF9E UkFXX0NPTVBPU0lURQorfTsKKworc3RydWN0IHF4bF9yYXN0ZXJfZ2x5cGggeworCXN0cnVjdCBx eGxfcG9pbnQgcmVuZGVyX3BvczsKKwlzdHJ1Y3QgcXhsX3BvaW50IGdseXBoX29yaWdpbjsKKwl1 aW50MTZfdCB3aWR0aDsKKwl1aW50MTZfdCBoZWlnaHQ7CisJdWludDhfdCBkYXRhWzBdOworfTsK Kworc3RydWN0IHF4bF9zdHJpbmcgeworCXVpbnQzMl90IGRhdGFfc2l6ZTsKKwl1aW50MTZfdCBs ZW5ndGg7CisJdWludDE2X3QgZmxhZ3M7CisJc3RydWN0IHF4bF9kYXRhX2NodW5rIGNodW5rOwor fTsKKworc3RydWN0IHF4bF9jb3B5X2JpdHMgeworCXN0cnVjdCBxeGxfcG9pbnQgc3JjX3BvczsK K307CisKK2VudW0gcXhsX2VmZmVjdF90eXBlIHsKKwlRWExfRUZGRUNUX0JMRU5EID0gMCwKKwlR WExfRUZGRUNUX09QQVFVRSA9IDEsCisJUVhMX0VGRkVDVF9SRVZFUlRfT05fRFVQID0gMiwKKwlR WExfRUZGRUNUX0JMQUNLTkVTU19PTl9EVVAgPSAzLAorCVFYTF9FRkZFQ1RfV0hJVEVORVNTX09O X0RVUCA9IDQsCisJUVhMX0VGRkVDVF9OT1BfT05fRFVQID0gNSwKKwlRWExfRUZGRUNUX05PUCA9 IDYsCisJUVhMX0VGRkVDVF9PUEFRVUVfQlJVU0ggPSA3Cit9OworCitzdHJ1Y3QgcXhsX3BhdHRl cm4geworCVFYTFBIWVNJQ0FMIHBhdDsKKwlzdHJ1Y3QgcXhsX3BvaW50IHBvczsKK307CisKK3N0 cnVjdCBxeGxfYnJ1c2ggeworCXVpbnQzMl90IHR5cGU7CisJdW5pb24geworCQl1aW50MzJfdCBj b2xvcjsKKwkJc3RydWN0IHF4bF9wYXR0ZXJuIHBhdHRlcm47CisJfSB1OworfTsKKworc3RydWN0 IHF4bF9xX21hc2sgeworCXVpbnQ4X3QgZmxhZ3M7CisJc3RydWN0IHF4bF9wb2ludCBwb3M7CisJ UVhMUEhZU0lDQUwgYml0bWFwOworfTsKKworc3RydWN0IHF4bF9maWxsIHsKKwlzdHJ1Y3QgcXhs X2JydXNoIGJydXNoOworCXVpbnQxNl90IHJvcF9kZXNjcmlwdG9yOworCXN0cnVjdCBxeGxfcV9t YXNrIG1hc2s7Cit9OworCitzdHJ1Y3QgcXhsX29wYXF1ZSB7CisJUVhMUEhZU0lDQUwgc3JjX2Jp dG1hcDsKKwlzdHJ1Y3QgcXhsX3JlY3Qgc3JjX2FyZWE7CisJc3RydWN0IHF4bF9icnVzaCBicnVz aDsKKwl1aW50MTZfdCByb3BfZGVzY3JpcHRvcjsKKwl1aW50OF90IHNjYWxlX21vZGU7CisJc3Ry dWN0IHF4bF9xX21hc2sgbWFzazsKK307CisKK3N0cnVjdCBxeGxfY29weSB7CisJUVhMUEhZU0lD QUwgc3JjX2JpdG1hcDsKKwlzdHJ1Y3QgcXhsX3JlY3Qgc3JjX2FyZWE7CisJdWludDE2X3Qgcm9w X2Rlc2NyaXB0b3I7CisJdWludDhfdCBzY2FsZV9tb2RlOworCXN0cnVjdCBxeGxfcV9tYXNrIG1h c2s7Cit9OworCitzdHJ1Y3QgcXhsX3RyYW5zcGFyZW50IHsKKwlRWExQSFlTSUNBTCBzcmNfYml0 bWFwOworCXN0cnVjdCBxeGxfcmVjdCBzcmNfYXJlYTsKKwl1aW50MzJfdCBzcmNfY29sb3I7CisJ dWludDMyX3QgdHJ1ZV9jb2xvcjsKK307CisKK3N0cnVjdCBxeGxfYWxwaGFfYmxlbmQgeworCXVp bnQxNl90IGFscGhhX2ZsYWdzOworCXVpbnQ4X3QgYWxwaGE7CisJUVhMUEhZU0lDQUwgc3JjX2Jp dG1hcDsKKwlzdHJ1Y3QgcXhsX3JlY3Qgc3JjX2FyZWE7Cit9OworCitzdHJ1Y3QgcXhsX2NvbXBh dF9hbHBoYV9ibGVuZCB7CisJdWludDhfdCBhbHBoYTsKKwlRWExQSFlTSUNBTCBzcmNfYml0bWFw OworCXN0cnVjdCBxeGxfcmVjdCBzcmNfYXJlYTsKK307CisKK3N0cnVjdCBxeGxfcm9wXzMgewor CVFYTFBIWVNJQ0FMIHNyY19iaXRtYXA7CisJc3RydWN0IHF4bF9yZWN0IHNyY19hcmVhOworCXN0 cnVjdCBxeGxfYnJ1c2ggYnJ1c2g7CisJdWludDhfdCByb3AzOworCXVpbnQ4X3Qgc2NhbGVfbW9k ZTsKKwlzdHJ1Y3QgcXhsX3FfbWFzayBtYXNrOworfTsKKworc3RydWN0IHF4bF9saW5lX2F0dHIg eworCXVpbnQ4X3QgZmxhZ3M7CisJdWludDhfdCBqb2luX3N0eWxlOworCXVpbnQ4X3QgZW5kX3N0 eWxlOworCXVpbnQ4X3Qgc3R5bGVfbnNlZzsKKwlRWExGSVhFRCB3aWR0aDsKKwlRWExGSVhFRCBt aXRlcl9saW1pdDsKKwlRWExQSFlTSUNBTCBzdHlsZTsKK307CisKK3N0cnVjdCBxeGxfc3Ryb2tl IHsKKwlRWExQSFlTSUNBTCBwYXRoOworCXN0cnVjdCBxeGxfbGluZV9hdHRyIGF0dHI7CisJc3Ry dWN0IHF4bF9icnVzaCBicnVzaDsKKwl1aW50MTZfdCBmb3JlX21vZGU7CisJdWludDE2X3QgYmFj a19tb2RlOworfTsKKworc3RydWN0IHF4bF90ZXh0IHsKKwlRWExQSFlTSUNBTCBzdHI7CisJc3Ry dWN0IHF4bF9yZWN0IGJhY2tfYXJlYTsKKwlzdHJ1Y3QgcXhsX2JydXNoIGZvcmVfYnJ1c2g7CisJ c3RydWN0IHF4bF9icnVzaCBiYWNrX2JydXNoOworCXVpbnQxNl90IGZvcmVfbW9kZTsKKwl1aW50 MTZfdCBiYWNrX21vZGU7Cit9OworCitzdHJ1Y3QgcXhsX21hc2sgeworCXN0cnVjdCBxeGxfcV9t YXNrIG1hc2s7Cit9OworCitzdHJ1Y3QgcXhsX2NsaXAgeworCXVpbnQzMl90IHR5cGU7CisJUVhM UEhZU0lDQUwgZGF0YTsKK307CisKK2VudW0gcXhsX29wZXJhdG9yIHsKKwlRWExfT1BfQ0xFQVIJ CQkgPSAweDAwLAorCVFYTF9PUF9TT1VSQ0UJCQkgPSAweDAxLAorCVFYTF9PUF9EU1QJCQkgPSAw eDAyLAorCVFYTF9PUF9PVkVSCQkJID0gMHgwMywKKwlRWExfT1BfT1ZFUl9SRVZFUlNFCQkgPSAw eDA0LAorCVFYTF9PUF9JTgkJCSA9IDB4MDUsCisJUVhMX09QX0lOX1JFVkVSU0UJCSA9IDB4MDYs CisJUVhMX09QX09VVAkJCSA9IDB4MDcsCisJUVhMX09QX09VVF9SRVZFUlNFCQkgPSAweDA4LAor CVFYTF9PUF9BVE9QCQkJID0gMHgwOSwKKwlRWExfT1BfQVRPUF9SRVZFUlNFCQkgPSAweDBhLAor CVFYTF9PUF9YT1IJCQkgPSAweDBiLAorCVFYTF9PUF9BREQJCQkgPSAweDBjLAorCVFYTF9PUF9T QVRVUkFURQkJCSA9IDB4MGQsCisJLyogTm90ZSB0aGUganVtcCBoZXJlIGZyb20gMHgwZCB0byAw eDMwICovCisJUVhMX09QX01VTFRJUExZCQkJID0gMHgzMCwKKwlRWExfT1BfU0NSRUVOCQkJID0g MHgzMSwKKwlRWExfT1BfT1ZFUkxBWQkJCSA9IDB4MzIsCisJUVhMX09QX0RBUktFTgkJCSA9IDB4 MzMsCisJUVhMX09QX0xJR0hURU4JCQkgPSAweDM0LAorCVFYTF9PUF9DT0xPUl9ET0RHRQkJID0g MHgzNSwKKwlRWExfT1BfQ09MT1JfQlVSTgkJID0gMHgzNiwKKwlRWExfT1BfSEFSRF9MSUdIVAkJ ID0gMHgzNywKKwlRWExfT1BfU09GVF9MSUdIVAkJID0gMHgzOCwKKwlRWExfT1BfRElGRkVSRU5D RQkJID0gMHgzOSwKKwlRWExfT1BfRVhDTFVTSU9OCQkgPSAweDNhLAorCVFYTF9PUF9IU0xfSFVF CQkJID0gMHgzYiwKKwlRWExfT1BfSFNMX1NBVFVSQVRJT04JCSA9IDB4M2MsCisJUVhMX09QX0hT TF9DT0xPUgkJID0gMHgzZCwKKwlRWExfT1BfSFNMX0xVTUlOT1NJVFkJCSA9IDB4M2UKK307CisK K3N0cnVjdCBxeGxfdHJhbnNmb3JtIHsKKwl1aW50MzJfdAl0MDA7CisJdWludDMyX3QJdDAxOwor CXVpbnQzMl90CXQwMjsKKwl1aW50MzJfdAl0MTA7CisJdWludDMyX3QJdDExOworCXVpbnQzMl90 CXQxMjsKK307CisKKy8qIFRoZSBmbGFncyBmaWVsZCBoYXMgdGhlIGZvbGxvd2luZyBiaXQgZmll bGRzOgorICoKKyAqICAgICBvcGVyYXRvcjoJCVsgIDAgLSAgNyBdCisgKiAgICAgc3JjX2ZpbHRl cjoJCVsgIDggLSAxMCBdCisgKiAgICAgbWFza19maWx0ZXI6CQlbIDExIC0gMTMgXQorICogICAg IHNyY19yZXBlYXQ6CQlbIDE0IC0gMTUgXQorICogICAgIG1hc2tfcmVwZWF0OgkJWyAxNiAtIDE3 IF0KKyAqICAgICBjb21wb25lbnRfYWxwaGE6CQlbIDE4IC0gMTggXQorICogICAgIHJlc2VydmVk OgkJWyAxOSAtIDMxIF0KKyAqCisgKiBUaGUgcmVwZWF0IGFuZCBmaWx0ZXIgdmFsdWVzIGFyZSB0 aG9zZSBvZiBwaXhtYW46CisgKgkJUkVQRUFUX05PTkUgPQkJMAorICogICAgICAgICAgICAgIFJF UEVBVF9OT1JNQUwgPQkJMQorICoJCVJFUEVBVF9QQUQgPQkJMgorICoJCVJFUEVBVF9SRUZMRUNU ID0JMworICoKKyAqIFRoZSBmaWx0ZXIgdmFsdWVzIGFyZToKKyAqCQlGSUxURVJfTkVBUkVTVCA9 CTAKKyAqCQlGSUxURVJfQklMSU5FQVIJPQkxCisgKi8KK3N0cnVjdCBxeGxfY29tcG9zaXRlIHsK Kwl1aW50MzJfdAkJZmxhZ3M7CisKKwlRWExQSFlTSUNBTAkJCXNyYzsKKwlRWExQSFlTSUNBTAkJ CXNyY190cmFuc2Zvcm07CS8qIE1heSBiZSBOVUxMICovCisJUVhMUEhZU0lDQUwJCQltYXNrOwkJ LyogTWF5IGJlIE5VTEwgKi8KKwlRWExQSFlTSUNBTAkJCW1hc2tfdHJhbnNmb3JtOwkvKiBNYXkg YmUgTlVMTCAqLworCXN0cnVjdCBxeGxfcG9pbnRfMV82CXNyY19vcmlnaW47CisJc3RydWN0IHF4 bF9wb2ludF8xXzYJbWFza19vcmlnaW47Cit9OworCitzdHJ1Y3QgcXhsX2NvbXBhdF9kcmF3YWJs ZSB7CisJdW5pb24gcXhsX3JlbGVhc2VfaW5mbyByZWxlYXNlX2luZm87CisJdWludDhfdCBlZmZl Y3Q7CisJdWludDhfdCB0eXBlOworCXVpbnQxNl90IGJpdG1hcF9vZmZzZXQ7CisJc3RydWN0IHF4 bF9yZWN0IGJpdG1hcF9hcmVhOworCXN0cnVjdCBxeGxfcmVjdCBiYm94OworCXN0cnVjdCBxeGxf Y2xpcCBjbGlwOworCXVpbnQzMl90IG1tX3RpbWU7CisJdW5pb24geworCQlzdHJ1Y3QgcXhsX2Zp bGwgZmlsbDsKKwkJc3RydWN0IHF4bF9vcGFxdWUgb3BhcXVlOworCQlzdHJ1Y3QgcXhsX2NvcHkg Y29weTsKKwkJc3RydWN0IHF4bF90cmFuc3BhcmVudCB0cmFuc3BhcmVudDsKKwkJc3RydWN0IHF4 bF9jb21wYXRfYWxwaGFfYmxlbmQgYWxwaGFfYmxlbmQ7CisJCXN0cnVjdCBxeGxfY29weV9iaXRz IGNvcHlfYml0czsKKwkJc3RydWN0IHF4bF9jb3B5IGJsZW5kOworCQlzdHJ1Y3QgcXhsX3JvcF8z IHJvcDM7CisJCXN0cnVjdCBxeGxfc3Ryb2tlIHN0cm9rZTsKKwkJc3RydWN0IHF4bF90ZXh0IHRl eHQ7CisJCXN0cnVjdCBxeGxfbWFzayBibGFja25lc3M7CisJCXN0cnVjdCBxeGxfbWFzayBpbnZl cnM7CisJCXN0cnVjdCBxeGxfbWFzayB3aGl0ZW5lc3M7CisJfSB1OworfTsKKworc3RydWN0IHF4 bF9kcmF3YWJsZSB7CisJdW5pb24gcXhsX3JlbGVhc2VfaW5mbyByZWxlYXNlX2luZm87CisJdWlu dDMyX3Qgc3VyZmFjZV9pZDsKKwl1aW50OF90IGVmZmVjdDsKKwl1aW50OF90IHR5cGU7CisJdWlu dDhfdCBzZWxmX2JpdG1hcDsKKwlzdHJ1Y3QgcXhsX3JlY3Qgc2VsZl9iaXRtYXBfYXJlYTsKKwlz dHJ1Y3QgcXhsX3JlY3QgYmJveDsKKwlzdHJ1Y3QgcXhsX2NsaXAgY2xpcDsKKwl1aW50MzJfdCBt bV90aW1lOworCWludDMyX3Qgc3VyZmFjZXNfZGVzdFszXTsKKwlzdHJ1Y3QgcXhsX3JlY3Qgc3Vy ZmFjZXNfcmVjdHNbM107CisJdW5pb24geworCQlzdHJ1Y3QgcXhsX2ZpbGwgZmlsbDsKKwkJc3Ry dWN0IHF4bF9vcGFxdWUgb3BhcXVlOworCQlzdHJ1Y3QgcXhsX2NvcHkgY29weTsKKwkJc3RydWN0 IHF4bF90cmFuc3BhcmVudCB0cmFuc3BhcmVudDsKKwkJc3RydWN0IHF4bF9hbHBoYV9ibGVuZCBh bHBoYV9ibGVuZDsKKwkJc3RydWN0IHF4bF9jb3B5X2JpdHMgY29weV9iaXRzOworCQlzdHJ1Y3Qg cXhsX2NvcHkgYmxlbmQ7CisJCXN0cnVjdCBxeGxfcm9wXzMgcm9wMzsKKwkJc3RydWN0IHF4bF9z dHJva2Ugc3Ryb2tlOworCQlzdHJ1Y3QgcXhsX3RleHQgdGV4dDsKKwkJc3RydWN0IHF4bF9tYXNr IGJsYWNrbmVzczsKKwkJc3RydWN0IHF4bF9tYXNrIGludmVyczsKKwkJc3RydWN0IHF4bF9tYXNr IHdoaXRlbmVzczsKKwkJc3RydWN0IHF4bF9jb21wb3NpdGUgY29tcG9zaXRlOworCX0gdTsKK307 CisKK2VudW0gcXhsX3N1cmZhY2VfY21kX3R5cGUgeworCVFYTF9TVVJGQUNFX0NNRF9DUkVBVEUs CisJUVhMX1NVUkZBQ0VfQ01EX0RFU1RST1ksCit9OworCitzdHJ1Y3QgcXhsX3N1cmZhY2Ugewor CXVpbnQzMl90IGZvcm1hdDsKKwl1aW50MzJfdCB3aWR0aDsKKwl1aW50MzJfdCBoZWlnaHQ7CisJ aW50MzJfdCBzdHJpZGU7CisJUVhMUEhZU0lDQUwgZGF0YTsKK307CisKK3N0cnVjdCBxeGxfc3Vy ZmFjZV9jbWQgeworCXVuaW9uIHF4bF9yZWxlYXNlX2luZm8gcmVsZWFzZV9pbmZvOworCXVpbnQz Ml90IHN1cmZhY2VfaWQ7CisJdWludDhfdCB0eXBlOworCXVpbnQzMl90IGZsYWdzOworCXVuaW9u IHsKKwkJc3RydWN0IHF4bF9zdXJmYWNlIHN1cmZhY2VfY3JlYXRlOworCX0gdTsKK307CisKK3N0 cnVjdCBxeGxfY2xpcF9yZWN0cyB7CisJdWludDMyX3QgbnVtX3JlY3RzOworCXN0cnVjdCBxeGxf ZGF0YV9jaHVuayBjaHVuazsKK307CisKK2VudW0geworCVFYTF9QQVRIX0JFR0lOID0gKDEgPDwg MCksCisJUVhMX1BBVEhfRU5EID0gKDEgPDwgMSksCisJUVhMX1BBVEhfQ0xPU0UgPSAoMSA8PCAz KSwKKwlRWExfUEFUSF9CRVpJRVIgPSAoMSA8PCA0KSwKK307CisKK3N0cnVjdCBxeGxfcGF0aF9z ZWcgeworCXVpbnQzMl90IGZsYWdzOworCXVpbnQzMl90IGNvdW50OworCXN0cnVjdCBxeGxfcG9p bnRfZml4IHBvaW50c1swXTsKK307CisKK3N0cnVjdCBxeGxfcGF0aCB7CisJdWludDMyX3QgZGF0 YV9zaXplOworCXN0cnVjdCBxeGxfZGF0YV9jaHVuayBjaHVuazsKK307CisKK2VudW0geworCVFY TF9JTUFHRV9HUk9VUF9EUklWRVIsCisJUVhMX0lNQUdFX0dST1VQX0RFVklDRSwKKwlRWExfSU1B R0VfR1JPVVBfUkVELAorCVFYTF9JTUFHRV9HUk9VUF9EUklWRVJfRE9OVF9DQUNIRSwKK307CisK K3N0cnVjdCBxeGxfaW1hZ2VfaWQgeworCXVpbnQzMl90IGdyb3VwOworCXVpbnQzMl90IHVuaXF1 ZTsKK307CisKK3VuaW9uIHF4bF9pbWFnZV9pZF91bmlvbiB7CisJc3RydWN0IHF4bF9pbWFnZV9p ZCBpZDsKKwl1aW50NjRfdCB2YWx1ZTsKK307CisKK2VudW0gcXhsX2ltYWdlX2ZsYWdzIHsKKwlR WExfSU1BR0VfQ0FDSEUgPSAoMSA8PCAwKSwKKwlRWExfSU1BR0VfSElHSF9CSVRTX1NFVCA9ICgx IDw8IDEpLAorfTsKKworZW51bSBxeGxfYml0bWFwX2ZsYWdzIHsKKwlRWExfQklUTUFQX0RJUkVD VCA9ICgxIDw8IDApLAorCVFYTF9CSVRNQVBfVU5TVEFCTEUgPSAoMSA8PCAxKSwKKwlRWExfQklU TUFQX1RPUF9ET1dOID0gKDEgPDwgMiksIC8qID09IFNQSUNFX0JJVE1BUF9GTEFHU19UT1BfRE9X TiAqLworfTsKKworI2RlZmluZSBRWExfU0VUX0lNQUdFX0lEKGltYWdlLCBfZ3JvdXAsIF91bmlx dWUpIHsgICAgICAgICAgICAgIFwKKwkoaW1hZ2UpLT5kZXNjcmlwdG9yLmlkID0gKCgodWludDY0 X3QpX3VuaXF1ZSkgPDwgMzIpIHwgX2dyb3VwOwlcCit9CisKK3N0cnVjdCBxeGxfaW1hZ2VfZGVz Y3JpcHRvciB7CisJdWludDY0X3QgaWQ7CisJdWludDhfdCB0eXBlOworCXVpbnQ4X3QgZmxhZ3M7 CisJdWludDMyX3Qgd2lkdGg7CisJdWludDMyX3QgaGVpZ2h0OworfTsKKworc3RydWN0IHF4bF9w YWxldHRlIHsKKwl1aW50NjRfdCB1bmlxdWU7CisJdWludDE2X3QgbnVtX2VudHM7CisJdWludDMy X3QgZW50c1swXTsKK307CisKK3N0cnVjdCBxeGxfYml0bWFwIHsKKwl1aW50OF90IGZvcm1hdDsK Kwl1aW50OF90IGZsYWdzOworCXVpbnQzMl90IHg7CisJdWludDMyX3QgeTsKKwl1aW50MzJfdCBz dHJpZGU7CisJUVhMUEhZU0lDQUwgcGFsZXR0ZTsKKwlRWExQSFlTSUNBTCBkYXRhOyAvKiBkYXRh WzBdID8gKi8KK307CisKK3N0cnVjdCBxeGxfc3VyZmFjZV9pZCB7CisJdWludDMyX3Qgc3VyZmFj ZV9pZDsKK307CisKK3N0cnVjdCBxeGxfZW5jb2Rlcl9kYXRhIHsKKwl1aW50MzJfdCBkYXRhX3Np emU7CisJdWludDhfdCBkYXRhWzBdOworfTsKKworc3RydWN0IHF4bF9pbWFnZSB7CisJc3RydWN0 IHF4bF9pbWFnZV9kZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisJdW5pb24geyAvKiB2YXJpYWJsZSBs ZW5ndGggKi8KKwkJc3RydWN0IHF4bF9iaXRtYXAgYml0bWFwOworCQlzdHJ1Y3QgcXhsX2VuY29k ZXJfZGF0YSBxdWljOworCQlzdHJ1Y3QgcXhsX3N1cmZhY2VfaWQgc3VyZmFjZV9pbWFnZTsKKwl9 IHU7Cit9OworCisvKiBBIFFYTEhlYWQgaXMgYSBzaW5nbGUgbW9uaXRvciBvdXRwdXQgYmFja2Vk IGJ5IGEgUVhMU3VyZmFjZS4KKyAqIHggYW5kIHkgb2Zmc2V0cyBhcmUgdW5zaWduZWQgc2luY2Ug dGhleSBhcmUgdXNlZCBpbiByZWxhdGlvbiB0bworICogdGhlIGdpdmVuIHN1cmZhY2UsIG5vdCB0 aGUgc2FtZSBhcyB0aGUgeCwgeSBjb29yZGluYXRlcyBpbiB0aGUgZ3Vlc3QKKyAqIHNjcmVlbiBy ZWZlcmVuY2UgZnJhbWUuICovCitzdHJ1Y3QgcXhsX2hlYWQgeworCXVpbnQzMl90IGlkOworCXVp bnQzMl90IHN1cmZhY2VfaWQ7CisJdWludDMyX3Qgd2lkdGg7CisJdWludDMyX3QgaGVpZ2h0Owor CXVpbnQzMl90IHg7CisJdWludDMyX3QgeTsKKwl1aW50MzJfdCBmbGFnczsKK307CisKK3N0cnVj dCBxeGxfbW9uaXRvcnNfY29uZmlnIHsKKwl1aW50MTZfdCBjb3VudDsKKwl1aW50MTZfdCBtYXhf YWxsb3dlZDsgLyogSWYgaXQgaXMgMCBubyBmaXhlZCBsaW1pdCBpcyBnaXZlbiBieSB0aGUKKwkJ CQkgZHJpdmVyICovCisJc3RydWN0IHF4bF9oZWFkIGhlYWRzWzBdOworfTsKKworI3ByYWdtYSBw YWNrKHBvcCkKKworI2VuZGlmIC8qIF9IX1FYTF9ERVYgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9xeGwvcXhsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2Rpc3Bs YXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODBkZGZlCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZGlzcGxheS5jCkBAIC0wLDAgKzEs OTgxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgUmVkIEhhdCBJbmMuCisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFs bCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBB VVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUu CisgKgorICogQXV0aG9yczogRGF2ZSBBaXJsaWUKKyAqICAgICAgICAgIEFsb24gTGV2eQorICov CisKKworI2luY2x1ZGUgImxpbnV4L2NyYzMyLmgiCisKKyNpbmNsdWRlICJxeGxfZHJ2LmgiCisj aW5jbHVkZSAicXhsX29iamVjdC5oIgorI2luY2x1ZGUgImRybV9jcnRjX2hlbHBlci5oIgorCitz dGF0aWMgdm9pZCBxeGxfY3J0Y19zZXRfdG9fbW9kZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwK KwkJCQkgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgc3RydWN0IHF4bF9o ZWFkICpoZWFkKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsK KwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwgKnQ7CisJaW50IHdpZHRoID0gaGVhZC0+ d2lkdGg7CisJaW50IGhlaWdodCA9IGhlYWQtPmhlaWdodDsKKworCWlmICh3aWR0aCA8IDMyMCB8 fCBoZWlnaHQgPCAyNDApIHsKKwkJcXhsX2lvX2xvZyhxZGV2LCAiJXM6IGJhZCBoZWFkOiAlZHgl ZCIsIHdpZHRoLCBoZWlnaHQpOworCQl3aWR0aCA9IDEwMjQ7CisJCWhlaWdodCA9IDc2ODsKKwl9 CisJaWYgKHdpZHRoICogaGVpZ2h0ICogNCA+IDE2KjEwMjQqMTAyNCkgeworCQl3aWR0aCA9IDEw MjQ7CisJCWhlaWdodCA9IDc2ODsKKwl9CisJLyogVE9ETzogZ28gb3ZlciByZWd1bGFyIG1vZGVz IGFuZCByZW1vdmVkIHByZWZlcnJlZD8gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9k ZSwgdCwgJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLCBoZWFkKQorCQlkcm1fbW9kZV9yZW1vdmUo Y29ubmVjdG9yLCBtb2RlKTsKKwltb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgd2lkdGgsIGhlaWdo dCwgNjAsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCW1vZGUtPnR5cGUgfD0gRFJNX01PREVfVFlQ RV9QUkVGRVJSRUQ7CisJbW9kZS0+c3RhdHVzID0gTU9ERV9PSzsKKwlkcm1fbW9kZV9wcm9iZWRf YWRkKGNvbm5lY3RvciwgbW9kZSk7CisJcXhsX2lvX2xvZyhxZGV2LCAiJXM6ICVkIHggJWRcbiIs IF9fZnVuY19fLCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBxeGxfY3J0Y19zZXRfZnJvbV9t b25pdG9yc19jb25maWcoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYpCit7CisJc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcjsKKwlpbnQgaTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g cWRldi0+ZGRldjsKKworCWkgPSAwOworCXF4bF9pb19sb2cocWRldiwgIiVzOiAlZCwgJWRcbiIs IF9fZnVuY19fLAorCQkgICBkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IsCisJCSAgIHFk ZXYtPm1vbml0b3JzX2NvbmZpZy0+Y291bnQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVj dG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpZiAoaSA+ IHFkZXYtPm1vbml0b3JzX2NvbmZpZy0+Y291bnQpIHsKKwkJCS8qIGNydGMgd2lsbCBiZSByZXBv cnRlZCBhcyBkaXNhYmxlZCAqLworCQkJY29udGludWU7CisJCX0KKwkJcXhsX2NydGNfc2V0X3Rv X21vZGUocWRldiwgY29ubmVjdG9yLAorCQkJCSAgICAgJnFkZXYtPm1vbml0b3JzX2NvbmZpZy0+ aGVhZHNbaV0pOworCQkrK2k7CisJfQorfQorCit2b2lkIHF4bF9hbGxvY19jbGllbnRfbW9uaXRv cnNfY29uZmlnKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LCB1bnNpZ25lZCBjb3VudCkKK3sKKwlp ZiAocWRldi0+Y2xpZW50X21vbml0b3JzX2NvbmZpZyAmJgorCSAgICBjb3VudCA+IHFkZXYtPmNs aWVudF9tb25pdG9yc19jb25maWctPmNvdW50KSB7CisJCWtmcmVlKHFkZXYtPmNsaWVudF9tb25p dG9yc19jb25maWcpOworCX0KKwlpZiAoIXFkZXYtPmNsaWVudF9tb25pdG9yc19jb25maWcpIHsK KwkJcWRldi0+Y2xpZW50X21vbml0b3JzX2NvbmZpZyA9IGt6YWxsb2MoCisJCQkJc2l6ZW9mKHN0 cnVjdCBxeGxfbW9uaXRvcnNfY29uZmlnKSArCisJCQkJc2l6ZW9mKHN0cnVjdCBxeGxfaGVhZCkg KiBjb3VudCwgR0ZQX0tFUk5FTCk7CisJCWlmICghcWRldi0+Y2xpZW50X21vbml0b3JzX2NvbmZp ZykgeworCQkJcXhsX2lvX2xvZyhxZGV2LAorCQkJCSAgICIlczogYWxsb2NhdGlvbiBmYWlsdXJl IGZvciAldSBoZWFkc1xuIiwKKwkJCQkgICBfX2Z1bmNfXywgY291bnQpOworCQkJcmV0dXJuOwor CQl9CisJfQorCXFkZXYtPmNsaWVudF9tb25pdG9yc19jb25maWctPmNvdW50ID0gY291bnQ7Cit9 CisKK3N0YXRpYyBpbnQgcXhsX2Rpc3BsYXlfY29weV9yb21fY2xpZW50X21vbml0b3JzX2NvbmZp ZyhzdHJ1Y3QgcXhsX2RldmljZSAqcWRldikKK3sKKwlpbnQgaTsKKwlpbnQgbnVtX21vbml0b3Jz OworCXVpbnQzMl90IGNyYzsKKworCUJVR19PTighcWRldi0+bW9uaXRvcnNfY29uZmlnKTsKKwlu dW1fbW9uaXRvcnMgPSBxZGV2LT5yb20tPmNsaWVudF9tb25pdG9yc19jb25maWcuY291bnQ7CisJ Y3JjID0gY3JjMzIoMCwgKGNvbnN0IHVpbnQ4X3QgKikmcWRldi0+cm9tLT5jbGllbnRfbW9uaXRv cnNfY29uZmlnLAorCQkgIHNpemVvZihxZGV2LT5yb20tPmNsaWVudF9tb25pdG9yc19jb25maWcp KTsKKwlpZiAoY3JjICE9IHFkZXYtPnJvbS0+Y2xpZW50X21vbml0b3JzX2NvbmZpZ19jcmMpIHsK KwkJcXhsX2lvX2xvZyhxZGV2LCAiY3JjIG1pc21hdGNoOiBoYXZlICVYICglZCkgIT0gJVhcbiIs IGNyYywKKwkJCSAgIHNpemVvZihxZGV2LT5yb20tPmNsaWVudF9tb25pdG9yc19jb25maWcpLAor CQkJICAgcWRldi0+cm9tLT5jbGllbnRfbW9uaXRvcnNfY29uZmlnX2NyYyk7CisJCXJldHVybiAx OworCX0KKwlpZiAobnVtX21vbml0b3JzID4gcWRldi0+bW9uaXRvcnNfY29uZmlnLT5tYXhfYWxs b3dlZCkgeworCQlEUk1fSU5GTygiY2xpZW50IG1vbml0b3JzIGxpc3Qgd2lsbCBiZSB0cnVuY2F0 ZWQ6ICVkIDwgJWRcbiIsCisJCQkgcWRldi0+bW9uaXRvcnNfY29uZmlnLT5tYXhfYWxsb3dlZCwg bnVtX21vbml0b3JzKTsKKwkJbnVtX21vbml0b3JzID0gcWRldi0+bW9uaXRvcnNfY29uZmlnLT5t YXhfYWxsb3dlZDsKKwl9IGVsc2UgeworCQludW1fbW9uaXRvcnMgPSBxZGV2LT5yb20tPmNsaWVu dF9tb25pdG9yc19jb25maWcuY291bnQ7CisJfQorCXF4bF9hbGxvY19jbGllbnRfbW9uaXRvcnNf Y29uZmlnKHFkZXYsIG51bV9tb25pdG9ycyk7CisJLyogd2UgY29weSBtYXggZnJvbSB0aGUgY2xp ZW50IGJ1dCBpdCBpc24ndCB1c2VkICovCisJcWRldi0+Y2xpZW50X21vbml0b3JzX2NvbmZpZy0+ bWF4X2FsbG93ZWQgPQorCQkJCXFkZXYtPm1vbml0b3JzX2NvbmZpZy0+bWF4X2FsbG93ZWQ7CisJ Zm9yIChpID0gMCA7IGkgPCBxZGV2LT5jbGllbnRfbW9uaXRvcnNfY29uZmlnLT5jb3VudCA7ICsr aSkgeworCQlzdHJ1Y3QgcXhsX3VyZWN0ICpjX3JlY3QgPQorCQkJJnFkZXYtPnJvbS0+Y2xpZW50 X21vbml0b3JzX2NvbmZpZy5oZWFkc1tpXTsKKwkJc3RydWN0IHF4bF9oZWFkICpjbGllbnRfaGVh ZCA9CisJCQkmcWRldi0+Y2xpZW50X21vbml0b3JzX2NvbmZpZy0+aGVhZHNbaV07CisJCXN0cnVj dCBxeGxfaGVhZCAqaGVhZCA9ICZxZGV2LT5tb25pdG9yc19jb25maWctPmhlYWRzW2ldOworCQlj bGllbnRfaGVhZC0+eCA9IGhlYWQtPnggPSBjX3JlY3QtPmxlZnQ7CisJCWNsaWVudF9oZWFkLT55 ID0gaGVhZC0+eSA9IGNfcmVjdC0+dG9wOworCQljbGllbnRfaGVhZC0+d2lkdGggPSBoZWFkLT53 aWR0aCA9CisJCQkJCQljX3JlY3QtPnJpZ2h0IC0gY19yZWN0LT5sZWZ0OworCQljbGllbnRfaGVh ZC0+aGVpZ2h0ID0gaGVhZC0+aGVpZ2h0ID0KKwkJCQkJCWNfcmVjdC0+Ym90dG9tIC0gY19yZWN0 LT50b3A7CisJCWNsaWVudF9oZWFkLT5zdXJmYWNlX2lkID0gaGVhZC0+c3VyZmFjZV9pZCA9IDA7 CisJCWNsaWVudF9oZWFkLT5pZCA9IGhlYWQtPmlkID0gaTsKKwkJY2xpZW50X2hlYWQtPmZsYWdz ID0gaGVhZC0+ZmxhZ3MgPSAwOworCQlRWExfREVCVUcocWRldiwgInJlYWQgJWR4JWQrJWQrJWRc biIsIGhlYWQtPndpZHRoLCBoZWFkLT5oZWlnaHQsCisJCQkgIGhlYWQtPngsIGhlYWQtPnkpOwor CX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBxeGxfZGlzcGxheV9yZWFkX2NsaWVudF9tb25pdG9y c19jb25maWcoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYpCit7CisKKwl3aGlsZSAocXhsX2Rpc3Bs YXlfY29weV9yb21fY2xpZW50X21vbml0b3JzX2NvbmZpZyhxZGV2KSkgeworCQlxeGxfaW9fbG9n KHFkZXYsICJmYWlsZWQgY3JjIGNoZWNrIGZvciBjbGllbnRfbW9uaXRvcnNfY29uZmlnLCIKKwkJ CQkgIiByZXRyeWluZ1xuIik7CisJfQorCXF4bF9jcnRjX3NldF9mcm9tX21vbml0b3JzX2NvbmZp ZyhxZGV2KTsKKwkvKiBmaXJlIG9mZiBhIHVldmVudCBhbmQgbGV0IHVzZXJzcGFjZSB0ZWxsIHVz IHdoYXQgdG8gZG8gKi8KKwlxeGxfaW9fbG9nKHFkZXYsICJjYWxsaW5nIGRybV9zeXNmc19ob3Rw bHVnX2V2ZW50XG4iKTsKKwlkcm1fc3lzZnNfaG90cGx1Z19ldmVudChxZGV2LT5kZGV2KTsKK30K Kworc3RhdGljIGludCBxeGxfYWRkX21vbml0b3JzX2NvbmZpZ19tb2RlcyhzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0 b3ItPmRldjsKKwlzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJ c3RydWN0IHF4bF9vdXRwdXQgKm91dHB1dCA9IGRybV9jb25uZWN0b3JfdG9fcXhsX291dHB1dChj b25uZWN0b3IpOworCWludCBoID0gb3V0cHV0LT5pbmRleDsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSA9IE5VTEw7CisJc3RydWN0IHF4bF9oZWFkICpoZWFkOworCisJaWYgKCFxZGV2 LT5tb25pdG9yc19jb25maWcpCisJCXJldHVybiAwOworCWhlYWQgPSAmcWRldi0+bW9uaXRvcnNf Y29uZmlnLT5oZWFkc1toXTsKKworCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBoZWFkLT53aWR0 aCwgaGVhZC0+aGVpZ2h0LCA2MCwgZmFsc2UsIGZhbHNlLAorCQkJICAgIGZhbHNlKTsKKwltb2Rl LT50eXBlIHw9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOworCWRybV9tb2RlX3Byb2JlZF9hZGQo Y29ubmVjdG9yLCBtb2RlKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBxeGxfYWRkX2Nv bW1vbl9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSA9IE5VTEw7CisJaW50IGk7CisJc3RydWN0IG1vZGVfc2l6ZSB7CisJCWludCB3Owor CQlpbnQgaDsKKwl9IGNvbW1vbl9tb2Rlc1tdID0geworCQl7IDY0MCwgIDQ4MH0sCisJCXsgNzIw LCAgNDgwfSwKKwkJeyA4MDAsICA2MDB9LAorCQl7IDg0OCwgIDQ4MH0sCisJCXsxMDI0LCAgNzY4 fSwKKwkJezExNTIsICA3Njh9LAorCQl7MTI4MCwgIDcyMH0sCisJCXsxMjgwLCAgODAwfSwKKwkJ ezEyODAsICA4NTR9LAorCQl7MTI4MCwgIDk2MH0sCisJCXsxMjgwLCAxMDI0fSwKKwkJezE0NDAs ICA5MDB9LAorCQl7MTQwMCwgMTA1MH0sCisJCXsxNjgwLCAxMDUwfSwKKwkJezE2MDAsIDEyMDB9 LAorCQl7MTkyMCwgMTA4MH0sCisJCXsxOTIwLCAxMjAwfQorCX07CisKKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShjb21tb25fbW9kZXMpOyBpKyspIHsKKwkJaWYgKGNvbW1vbl9tb2Rlc1tp XS53IDwgMzIwIHx8IGNvbW1vbl9tb2Rlc1tpXS5oIDwgMjAwKQorCQkJY29udGludWU7CisKKwkJ bW9kZSA9IGRybV9jdnRfbW9kZShkZXYsIGNvbW1vbl9tb2Rlc1tpXS53LCBjb21tb25fbW9kZXNb aV0uaCwKKwkJCQkgICAgNjAsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworCQlpZiAoY29tbW9uX21v ZGVzW2ldLncgPT0gMTAyNCAmJiBjb21tb25fbW9kZXNbaV0uaCA9PSA3NjgpCisJCQltb2RlLT50 eXBlIHw9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOworCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNv bm5lY3RvciwgbW9kZSk7CisJfQorCXJldHVybiBpIC0gMTsKK30KKworc3RhdGljIHZvaWQgcXhs X2NydGNfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3Jl ZW4sCisJCQkgICAgICAgdTE2ICpibHVlLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3Qgc2l6ZSkK K3sKKwkvKiBUT0RPICovCit9CisKK3N0YXRpYyB2b2lkIHF4bF9jcnRjX2Rlc3Ryb3koc3RydWN0 IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBxeGxfY3J0YyAqcXhsX2NydGMgPSB0b19xeGxf Y3J0YyhjcnRjKTsKKworCWRybV9jcnRjX2NsZWFudXAoY3J0Yyk7CisJa2ZyZWUocXhsX2NydGMp OworfQorCitzdGF0aWMgdm9pZAorcXhsX2hpZGVfY3Vyc29yKHN0cnVjdCBxeGxfZGV2aWNlICpx ZGV2KQoreworCXN0cnVjdCBxeGxfcmVsZWFzZSAqcmVsZWFzZTsKKwlzdHJ1Y3QgcXhsX2N1cnNv cl9jbWQgKmNtZDsKKwlpbnQgcmV0OworCisJcmV0ID0gcXhsX2FsbG9jX3JlbGVhc2VfcmVzZXJ2 ZWQocWRldiwgc2l6ZW9mKCpjbWQpLCBRWExfUkVMRUFTRV9DVVJTT1JfQ01ELAorCQkJCQkgJnJl bGVhc2UsIE5VTEwpOworCisJY21kID0gKHN0cnVjdCBxeGxfY3Vyc29yX2NtZCAqKXF4bF9yZWxl YXNlX21hcChxZGV2LCByZWxlYXNlKTsKKwljbWQtPnR5cGUgPSBRWExfQ1VSU09SX0hJREU7CisJ cXhsX3JlbGVhc2VfdW5tYXAocWRldiwgcmVsZWFzZSwgJmNtZC0+cmVsZWFzZV9pbmZvKTsKKwor CXF4bF9mZW5jZV9yZWxlYXNlYWJsZShxZGV2LCByZWxlYXNlKTsKKwlxeGxfcHVzaF9jdXJzb3Jf cmluZ19yZWxlYXNlKHFkZXYsIHJlbGVhc2UsIFFYTF9DTURfQ1VSU09SLCBmYWxzZSk7CisJcXhs X3JlbGVhc2VfdW5yZXNlcnZlKHFkZXYsIHJlbGVhc2UpOworfQorCitzdGF0aWMgaW50IHF4bF9j cnRjX2N1cnNvcl9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJICAgICAgIHN0cnVjdCBk cm1fZmlsZSAqZmlsZV9wcml2LAorCQkJICAgICAgIHVpbnQzMl90IGhhbmRsZSwKKwkJCSAgICAg ICB1aW50MzJfdCB3aWR0aCwKKwkJCSAgICAgICB1aW50MzJfdCBoZWlnaHQpCit7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiA9 IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHF4bF9jcnRjICpxY3J0YyA9IHRvX3F4bF9jcnRj KGNydGMpOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBxeGxfY3Vyc29y ICpjdXJzb3I7CisJc3RydWN0IHF4bF9jdXJzb3JfY21kICpjbWQ7CisJc3RydWN0IHF4bF9ibyAq Y3Vyc29yX2JvLCAqdXNlcl9ibzsKKwlzdHJ1Y3QgcXhsX3JlbGVhc2UgKnJlbGVhc2U7CisJdm9p ZCAqdXNlcl9wdHI7CisKKwlpbnQgc2l6ZSA9IDY0KjY0KjQ7CisJaW50IHJldCA9IDA7CisJaWYg KCFoYW5kbGUpIHsKKwkJcXhsX2hpZGVfY3Vyc29yKHFkZXYpOworCQlyZXR1cm4gMDsKKwl9CisK KwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoY3J0Yy0+ZGV2LCBmaWxlX3ByaXYsIGhhbmRs ZSk7CisJaWYgKCFvYmopIHsKKwkJRFJNX0VSUk9SKCJjYW5ub3QgZmluZCBjdXJzb3Igb2JqZWN0 XG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJdXNlcl9ibyA9IGdlbV90b19xeGxfYm8o b2JqKTsKKworCXJldCA9IHF4bF9ib19yZXNlcnZlKHVzZXJfYm8sIGZhbHNlKTsKKwlpZiAocmV0 KQorCQlnb3RvIG91dF91bnJlZjsKKworCXJldCA9IHF4bF9ib19waW4odXNlcl9ibywgUVhMX0dF TV9ET01BSU5fQ1BVLCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bnJlc2VydmU7CisK KwlyZXQgPSBxeGxfYm9fa21hcCh1c2VyX2JvLCAmdXNlcl9wdHIpOworCWlmIChyZXQpCisJCWdv dG8gb3V0X3VucGluOworCisJcmV0ID0gcXhsX2FsbG9jX3JlbGVhc2VfcmVzZXJ2ZWQocWRldiwg c2l6ZW9mKCpjbWQpLAorCQkJCQkgUVhMX1JFTEVBU0VfQ1VSU09SX0NNRCwKKwkJCQkJICZyZWxl YXNlLCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9rdW5tYXA7CisJcmV0ID0gcXhsX2Fs bG9jX2JvX3Jlc2VydmVkKHFkZXYsIHNpemVvZihzdHJ1Y3QgcXhsX2N1cnNvcikgKyBzaXplLAor CQkJCSAgICAmY3Vyc29yX2JvKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlX3JlbGVhc2U7 CisJcmV0ID0gcXhsX2JvX2ttYXAoY3Vyc29yX2JvLCAodm9pZCAqKikmY3Vyc29yKTsKKwlpZiAo cmV0KQorCQlnb3RvIG91dF9mcmVlX2JvOworCisJY3Vyc29yLT5oZWFkZXIudW5pcXVlID0gMDsK KwljdXJzb3ItPmhlYWRlci50eXBlID0gU1BJQ0VfQ1VSU09SX1RZUEVfQUxQSEE7CisJY3Vyc29y LT5oZWFkZXIud2lkdGggPSA2NDsKKwljdXJzb3ItPmhlYWRlci5oZWlnaHQgPSA2NDsKKwljdXJz b3ItPmhlYWRlci5ob3Rfc3BvdF94ID0gMDsKKwljdXJzb3ItPmhlYWRlci5ob3Rfc3BvdF95ID0g MDsKKwljdXJzb3ItPmRhdGFfc2l6ZSA9IHNpemU7CisJY3Vyc29yLT5jaHVuay5uZXh0X2NodW5r ID0gMDsKKwljdXJzb3ItPmNodW5rLnByZXZfY2h1bmsgPSAwOworCWN1cnNvci0+Y2h1bmsuZGF0 YV9zaXplID0gc2l6ZTsKKworCW1lbWNweShjdXJzb3ItPmNodW5rLmRhdGEsIHVzZXJfcHRyLCBz aXplKTsKKworCXF4bF9ib19rdW5tYXAoY3Vyc29yX2JvKTsKKworCS8qIGZpbmlzaCB3aXRoIHRo ZSB1c2Vyc3BhY2UgYm8gKi8KKwlxeGxfYm9fa3VubWFwKHVzZXJfYm8pOworCXF4bF9ib191bnBp bih1c2VyX2JvKTsKKwlxeGxfYm9fdW5yZXNlcnZlKHVzZXJfYm8pOworCWRybV9nZW1fb2JqZWN0 X3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7CisKKwljbWQgPSAoc3RydWN0IHF4bF9jdXJzb3Jf Y21kICopcXhsX3JlbGVhc2VfbWFwKHFkZXYsIHJlbGVhc2UpOworCWNtZC0+dHlwZSA9IFFYTF9D VVJTT1JfU0VUOworCWNtZC0+dS5zZXQucG9zaXRpb24ueCA9IHFjcnRjLT5jdXJfeDsKKwljbWQt PnUuc2V0LnBvc2l0aW9uLnkgPSBxY3J0Yy0+Y3VyX3k7CisKKwljbWQtPnUuc2V0LnNoYXBlID0g cXhsX2JvX3BoeXNpY2FsX2FkZHJlc3MocWRldiwgY3Vyc29yX2JvLCAwKTsKKwlxeGxfcmVsZWFz ZV9hZGRfcmVzKHFkZXYsIHJlbGVhc2UsIGN1cnNvcl9ibyk7CisKKwljbWQtPnUuc2V0LnZpc2li bGUgPSAxOworCXF4bF9yZWxlYXNlX3VubWFwKHFkZXYsIHJlbGVhc2UsICZjbWQtPnJlbGVhc2Vf aW5mbyk7CisKKwlxeGxfZmVuY2VfcmVsZWFzZWFibGUocWRldiwgcmVsZWFzZSk7CisJcXhsX3B1 c2hfY3Vyc29yX3JpbmdfcmVsZWFzZShxZGV2LCByZWxlYXNlLCBRWExfQ01EX0NVUlNPUiwgZmFs c2UpOworCXF4bF9yZWxlYXNlX3VucmVzZXJ2ZShxZGV2LCByZWxlYXNlKTsKKworCXF4bF9ib191 bnJlc2VydmUoY3Vyc29yX2JvKTsKKwlxeGxfYm9fdW5yZWYoJmN1cnNvcl9ibyk7CisKKwlyZXR1 cm4gcmV0Oworb3V0X2ZyZWVfYm86CisJcXhsX2JvX3VucmVmKCZjdXJzb3JfYm8pOworb3V0X2Zy ZWVfcmVsZWFzZToKKwlxeGxfcmVsZWFzZV91bnJlc2VydmUocWRldiwgcmVsZWFzZSk7CisJcXhs X3JlbGVhc2VfZnJlZShxZGV2LCByZWxlYXNlKTsKK291dF9rdW5tYXA6CisJcXhsX2JvX2t1bm1h cCh1c2VyX2JvKTsKK291dF91bnBpbjoKKwlxeGxfYm9fdW5waW4odXNlcl9ibyk7CitvdXRfdW5y ZXNlcnZlOgorCXF4bF9ib191bnJlc2VydmUodXNlcl9ibyk7CitvdXRfdW5yZWY6CisJZHJtX2dl bV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50IHF4bF9jcnRjX2N1cnNvcl9tb3ZlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJ CQlpbnQgeCwgaW50IHkpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsK KwlzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHF4 bF9jcnRjICpxY3J0YyA9IHRvX3F4bF9jcnRjKGNydGMpOworCXN0cnVjdCBxeGxfcmVsZWFzZSAq cmVsZWFzZTsKKwlzdHJ1Y3QgcXhsX2N1cnNvcl9jbWQgKmNtZDsKKwlpbnQgcmV0OworCisJcmV0 ID0gcXhsX2FsbG9jX3JlbGVhc2VfcmVzZXJ2ZWQocWRldiwgc2l6ZW9mKCpjbWQpLCBRWExfUkVM RUFTRV9DVVJTT1JfQ01ELAorCQkJCSAgICZyZWxlYXNlLCBOVUxMKTsKKworCXFjcnRjLT5jdXJf eCA9IHg7CisJcWNydGMtPmN1cl95ID0geTsKKworCWNtZCA9IChzdHJ1Y3QgcXhsX2N1cnNvcl9j bWQgKilxeGxfcmVsZWFzZV9tYXAocWRldiwgcmVsZWFzZSk7CisJY21kLT50eXBlID0gUVhMX0NV UlNPUl9NT1ZFOworCWNtZC0+dS5wb3NpdGlvbi54ID0gcWNydGMtPmN1cl94OworCWNtZC0+dS5w b3NpdGlvbi55ID0gcWNydGMtPmN1cl95OworCXF4bF9yZWxlYXNlX3VubWFwKHFkZXYsIHJlbGVh c2UsICZjbWQtPnJlbGVhc2VfaW5mbyk7CisKKwlxeGxfZmVuY2VfcmVsZWFzZWFibGUocWRldiwg cmVsZWFzZSk7CisJcXhsX3B1c2hfY3Vyc29yX3JpbmdfcmVsZWFzZShxZGV2LCByZWxlYXNlLCBR WExfQ01EX0NVUlNPUiwgZmFsc2UpOworCXF4bF9yZWxlYXNlX3VucmVzZXJ2ZShxZGV2LCByZWxl YXNlKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1 bmNzIHF4bF9jcnRjX2Z1bmNzID0geworCS5jdXJzb3Jfc2V0ID0gcXhsX2NydGNfY3Vyc29yX3Nl dCwKKwkuY3Vyc29yX21vdmUgPSBxeGxfY3J0Y19jdXJzb3JfbW92ZSwKKwkuZ2FtbWFfc2V0ID0g cXhsX2NydGNfZ2FtbWFfc2V0LAorCS5zZXRfY29uZmlnID0gZHJtX2NydGNfaGVscGVyX3NldF9j b25maWcsCisJLmRlc3Ryb3kgPSBxeGxfY3J0Y19kZXN0cm95LAorfTsKKworc3RhdGljIHZvaWQg cXhsX3VzZXJfZnJhbWVidWZmZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikK K3sKKwlzdHJ1Y3QgcXhsX2ZyYW1lYnVmZmVyICpxeGxfZmIgPSB0b19xeGxfZnJhbWVidWZmZXIo ZmIpOworCisJaWYgKHF4bF9mYi0+b2JqKQorCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91 bmxvY2tlZChxeGxfZmItPm9iaik7CisJZHJtX2ZyYW1lYnVmZmVyX2NsZWFudXAoZmIpOworCWtm cmVlKHF4bF9mYik7Cit9CisKK2ludCBxeGxfZnJhbWVidWZmZXJfc3VyZmFjZV9kaXJ0eShzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 LAorCQkJCSAgdW5zaWduZWQgZmxhZ3MsIHVuc2lnbmVkIGNvbG9yLAorCQkJCSAgc3RydWN0IGRy bV9jbGlwX3JlY3QgKmNsaXBzLAorCQkJCSAgdW5zaWduZWQgbnVtX2NsaXBzKQoreworCS8qIFRP RE86IHZtd2dmeCB3aGVyZSB0aGlzIHdhcyBjcmliYmVkIGZyb20gaGFkIGxvY2tpbmcuIFdoeT8g Ki8KKwlzdHJ1Y3QgcXhsX2ZyYW1lYnVmZmVyICpxeGxfZmIgPSB0b19xeGxfZnJhbWVidWZmZXIo ZmIpOworCXN0cnVjdCBxeGxfZGV2aWNlICpxZGV2ID0gcXhsX2ZiLT5iYXNlLmRldi0+ZGV2X3By aXZhdGU7CisJc3RydWN0IGRybV9jbGlwX3JlY3Qgbm9yZWN0OworCXN0cnVjdCBxeGxfYm8gKnFv Ymo7CisJaW50IGluYyA9IDE7CisKKwlxb2JqID0gZ2VtX3RvX3F4bF9ibyhxeGxfZmItPm9iaik7 CisJaWYgKHF4bF9mYiAhPSBxZGV2LT5hY3RpdmVfdXNlcl9mcmFtZWJ1ZmZlcikgeworCQlEUk1f SU5GTygiJXM6IHF4bF9mYiAweCVwICE9IHFkZXYtPmFjdGl2ZV91c2VyX2ZyYW1lYnVmZmVyIDB4 JXBcbiIsCisJCQlfX2Z1bmNfXywgcXhsX2ZiLCBxZGV2LT5hY3RpdmVfdXNlcl9mcmFtZWJ1ZmZl cik7CisJfQorCWlmICghbnVtX2NsaXBzKSB7CisJCW51bV9jbGlwcyA9IDE7CisJCWNsaXBzID0g Jm5vcmVjdDsKKwkJbm9yZWN0LngxID0gbm9yZWN0LnkxID0gMDsKKwkJbm9yZWN0LngyID0gZmIt PndpZHRoOworCQlub3JlY3QueTIgPSBmYi0+aGVpZ2h0OworCX0gZWxzZSBpZiAoZmxhZ3MgJiBE Uk1fTU9ERV9GQl9ESVJUWV9BTk5PVEFURV9DT1BZKSB7CisJCW51bV9jbGlwcyAvPSAyOworCQlp bmMgPSAyOyAvKiBza2lwIHNvdXJjZSByZWN0cyAqLworCX0KKworCXF4bF9kcmF3X2RpcnR5X2Zi KHFkZXYsIHF4bF9mYiwgcW9iaiwgZmxhZ3MsIGNvbG9yLAorCQkJICBjbGlwcywgbnVtX2NsaXBz LCBpbmMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlcl9mdW5jcyBxeGxfZmJfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBxeGxfdXNlcl9mcmFtZWJ1 ZmZlcl9kZXN0cm95LAorCS5kaXJ0eSA9IHF4bF9mcmFtZWJ1ZmZlcl9zdXJmYWNlX2RpcnR5LAor LyoJVE9ETz8KKyAqCS5jcmVhdGVfaGFuZGxlID0gcXhsX3VzZXJfZnJhbWVidWZmZXJfY3JlYXRl X2hhbmRsZSwgKi8KK307CisKK2ludAorcXhsX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKKwkJICAgICBzdHJ1Y3QgcXhsX2ZyYW1lYnVmZmVyICpxZmIsCisJCSAgICAg c3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kLAorCQkgICAgIHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqKQoreworCWludCByZXQ7CisKKwlxZmItPm9iaiA9IG9iajsKKwlyZXQgPSBk cm1fZnJhbWVidWZmZXJfaW5pdChkZXYsICZxZmItPmJhc2UsICZxeGxfZmJfZnVuY3MpOworCWlm IChyZXQpIHsKKwkJcWZiLT5vYmogPSBOVUxMOworCQlyZXR1cm4gcmV0OworCX0KKwlkcm1faGVs cGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJnFmYi0+YmFzZSwgbW9kZV9jbWQpOworCXJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBxeGxfY3J0Y19kcG1zKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywg aW50IG1vZGUpCit7Cit9CisKK3N0YXRpYyBib29sIHF4bF9jcnRjX21vZGVfZml4dXAoc3RydWN0 IGRybV9jcnRjICpjcnRjLAorCQkJCSAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUsCisJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBxeGxfZGV2aWNlICpx ZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXF4bF9pb19sb2cocWRldiwgIiVzOiAoJWQsJWQp ID0+ICglZCwlZClcbiIsCisJCSAgIF9fZnVuY19fLAorCQkgICBtb2RlLT5oZGlzcGxheSwgbW9k ZS0+dmRpc3BsYXksCisJCSAgIGFkanVzdGVkX21vZGUtPmhkaXNwbGF5LAorCQkgICBhZGp1c3Rl ZF9tb2RlLT52ZGlzcGxheSk7CisJcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQKK3F4bF9zZW5kX21v bml0b3JzX2NvbmZpZyhzdHJ1Y3QgcXhsX2RldmljZSAqcWRldikKK3sKKwlpbnQgaTsKKworCUJV R19PTighcWRldi0+cmFtX2hlYWRlci0+bW9uaXRvcnNfY29uZmlnKTsKKworCWlmIChxZGV2LT5t b25pdG9yc19jb25maWctPmNvdW50ID09IDApIHsKKwkJcXhsX2lvX2xvZyhxZGV2LCAiJXM6IDAg bW9uaXRvcnM/P1xuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCWZvciAoaSA9IDAgOyBp IDwgcWRldi0+bW9uaXRvcnNfY29uZmlnLT5jb3VudCA7ICsraSkgeworCQlzdHJ1Y3QgcXhsX2hl YWQgKmhlYWQgPSAmcWRldi0+bW9uaXRvcnNfY29uZmlnLT5oZWFkc1tpXTsKKworCQlpZiAoaGVh ZC0+eSA+IDgxOTIgfHwgaGVhZC0+eSA8IGhlYWQtPnggfHwKKwkJICAgIGhlYWQtPndpZHRoID4g ODE5MiB8fCBoZWFkLT5oZWlnaHQgPiA4MTkyKSB7CisJCQlEUk1fRVJST1IoImhlYWQgJWQgd3Jv bmc6ICVkeCVkKyVkKyVkXG4iLAorCQkJCSAgaSwgaGVhZC0+d2lkdGgsIGhlYWQtPmhlaWdodCwK KwkJCQkgIGhlYWQtPngsIGhlYWQtPnkpOworCQkJcmV0dXJuOworCQl9CisJfQorCXF4bF9pb19t b25pdG9yc19jb25maWcocWRldik7Cit9CisKK3N0YXRpYyB2b2lkIHF4bF9tb25pdG9yc19jb25m aWdfc2V0X3NpbmdsZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKKwkJCQkJICAgdW5zaWduZWQg eCwgdW5zaWduZWQgeSwKKwkJCQkJICAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkK K3sKKwlEUk1fREVCVUcoIiVkeCVkKyVkKyVkXG4iLCB3aWR0aCwgaGVpZ2h0LCB4LCB5KTsKKwlx ZGV2LT5tb25pdG9yc19jb25maWctPmNvdW50ID0gMTsKKwlxZGV2LT5tb25pdG9yc19jb25maWct PmhlYWRzWzBdLnggPSB4OworCXFkZXYtPm1vbml0b3JzX2NvbmZpZy0+aGVhZHNbMF0ueSA9IHk7 CisJcWRldi0+bW9uaXRvcnNfY29uZmlnLT5oZWFkc1swXS53aWR0aCA9IHdpZHRoOworCXFkZXYt Pm1vbml0b3JzX2NvbmZpZy0+aGVhZHNbMF0uaGVpZ2h0ID0gaGVpZ2h0OworfQorCitzdGF0aWMg aW50IHF4bF9jcnRjX21vZGVfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCSAgICAgICBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSwKKwkJCSAgICAgICBpbnQgeCwgaW50IHksCisJCQkgICAg ICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKQoreworCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYgPSBkZXYtPmRldl9w cml2YXRlOworCXN0cnVjdCBxeGxfbW9kZSAqbSA9ICh2b2lkICopbW9kZS0+cHJpdmF0ZTsKKwlz dHJ1Y3QgcXhsX2ZyYW1lYnVmZmVyICpxZmI7CisJc3RydWN0IHF4bF9ibyAqYm8sICpvbGRfYm8g PSBOVUxMOworCXVpbnQzMl90IHdpZHRoLCBoZWlnaHQsIGJhc2Vfb2Zmc2V0OworCWJvb2wgcmVj cmVhdGVfcHJpbWFyeSA9IGZhbHNlOworCWludCByZXQ7CisKKwlpZiAoIWNydGMtPmZiKSB7CisJ CURSTV9ERUJVR19LTVMoIk5vIEZCIGJvdW5kXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYg KG9sZF9mYikgeworCQlxZmIgPSB0b19xeGxfZnJhbWVidWZmZXIob2xkX2ZiKTsKKwkJb2xkX2Jv ID0gZ2VtX3RvX3F4bF9ibyhxZmItPm9iaik7CisJfQorCXFmYiA9IHRvX3F4bF9mcmFtZWJ1ZmZl cihjcnRjLT5mYik7CisJYm8gPSBnZW1fdG9fcXhsX2JvKHFmYi0+b2JqKTsKKwlpZiAoIW0pCisJ CS8qIGFuZCBkbyB3ZSBjYXJlPyAqLworCQlEUk1fREVCVUcoIiVkeCVkOiBub3QgYSBuYXRpdmUg bW9kZVxuIiwgeCwgeSk7CisJZWxzZQorCQlEUk1fREVCVUcoIiVkeCVkOiBxeGwgaWQgJWRcbiIs CisJCQkgIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwgbS0+aWQpOworCURSTV9ERUJV RygiKyVkKyVkICglZCwlZCkgPT4gKCVkLCVkKVxuIiwKKwkJICB4LCB5LAorCQkgIG1vZGUtPmhk aXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKKwkJICBhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSwKKwkJ ICBhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSk7CisKKwlyZWNyZWF0ZV9wcmltYXJ5ID0gdHJ1ZTsK KworCXdpZHRoID0gbW9kZS0+aGRpc3BsYXk7CisJaGVpZ2h0ID0gbW9kZS0+dmRpc3BsYXk7CisJ YmFzZV9vZmZzZXQgPSAwOworCisJcmV0ID0gcXhsX2JvX3Jlc2VydmUoYm8sIGZhbHNlKTsKKwlp ZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisJcmV0ID0gcXhsX2JvX3BpbihibywgYm8tPnR5 cGUsIE5VTEwpOworCWlmIChyZXQgIT0gMCkgeworCQlxeGxfYm9fdW5yZXNlcnZlKGJvKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCXF4bF9ib191bnJlc2VydmUoYm8pOworCWlmIChyZWNyZWF0 ZV9wcmltYXJ5KSB7CisJCXF4bF9pb19kZXN0cm95X3ByaW1hcnkocWRldik7CisJCXF4bF9pb19s b2cocWRldiwKKwkJCSAgICJyZWNyZWF0ZSBwcmltYXJ5OiAlZHglZCAod2FzICVkeCVkLCVkLCVk KVxuIiwKKwkJCSAgIHdpZHRoLCBoZWlnaHQsIGJvLT5zdXJmLndpZHRoLAorCQkJICAgYm8tPnN1 cmYuaGVpZ2h0LCBiby0+c3VyZi5zdHJpZGUsIGJvLT5zdXJmLmZvcm1hdCk7CisJCXF4bF9pb19j cmVhdGVfcHJpbWFyeShxZGV2LCB3aWR0aCwgaGVpZ2h0LCBiYXNlX29mZnNldCwgYm8pOworCQli by0+aXNfcHJpbWFyeSA9IHRydWU7CisJfQorCisJaWYgKG9sZF9ibyAmJiBvbGRfYm8gIT0gYm8p IHsKKwkJb2xkX2JvLT5pc19wcmltYXJ5ID0gZmFsc2U7CisJCXJldCA9IHF4bF9ib19yZXNlcnZl KG9sZF9ibywgZmFsc2UpOworCQlxeGxfYm9fdW5waW4ob2xkX2JvKTsKKwkJcXhsX2JvX3VucmVz ZXJ2ZShvbGRfYm8pOworCX0KKworCWlmIChxZGV2LT5tb25pdG9yc19jb25maWctPmNvdW50ID09 IDApIHsKKwkJcXhsX21vbml0b3JzX2NvbmZpZ19zZXRfc2luZ2xlKHFkZXYsIHgsIHksCisJCQkJ CSAgICAgICBtb2RlLT5oZGlzcGxheSwKKwkJCQkJICAgICAgIG1vZGUtPnZkaXNwbGF5KTsKKwl9 CisJcWRldi0+bW9kZV9zZXQgPSB0cnVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBx eGxfY3J0Y19wcmVwYXJlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlEUk1fREVCVUcoImN1 cnJlbnQ6ICVkeCVkKyVkKyVkICglZCkuXG4iLAorCQkgIGNydGMtPm1vZGUuaGRpc3BsYXksIGNy dGMtPm1vZGUudmRpc3BsYXksCisJCSAgY3J0Yy0+eCwgY3J0Yy0+eSwgY3J0Yy0+ZW5hYmxlZCk7 Cit9CisKK3N0YXRpYyB2b2lkIHF4bF9jcnRjX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Cit7CisJRFJNX0RFQlVHKCJcbiIpOworfQorCit2b2lkIHF4bF9jcnRjX2xvYWRfbHV0KHN0cnVj dCBkcm1fY3J0YyAqY3J0YykKK3sKKwlEUk1fREVCVUcoIlxuIik7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIHF4bF9jcnRjX2hlbHBlcl9mdW5jcyA9IHsK KwkuZHBtcyA9IHF4bF9jcnRjX2RwbXMsCisJLm1vZGVfZml4dXAgPSBxeGxfY3J0Y19tb2RlX2Zp eHVwLAorCS5tb2RlX3NldCA9IHF4bF9jcnRjX21vZGVfc2V0LAorCS5wcmVwYXJlID0gcXhsX2Ny dGNfcHJlcGFyZSwKKwkuY29tbWl0ID0gcXhsX2NydGNfY29tbWl0LAorCS5sb2FkX2x1dCA9IHF4 bF9jcnRjX2xvYWRfbHV0LAorfTsKKworaW50IHFkZXZfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIGludCBudW1fY3J0YykKK3sKKwlzdHJ1Y3QgcXhsX2NydGMgKnF4bF9jcnRjOwor CisJcXhsX2NydGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcXhsX2NydGMpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIXF4bF9jcnRjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRybV9jcnRjX2luaXQo ZGV2LCAmcXhsX2NydGMtPmJhc2UsICZxeGxfY3J0Y19mdW5jcyk7CisKKwlkcm1fbW9kZV9jcnRj X3NldF9nYW1tYV9zaXplKCZxeGxfY3J0Yy0+YmFzZSwgMjU2KTsKKwlkcm1fY3J0Y19oZWxwZXJf YWRkKCZxeGxfY3J0Yy0+YmFzZSwgJnF4bF9jcnRjX2hlbHBlcl9mdW5jcyk7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyB2b2lkIHF4bF9lbmNfZHBtcyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIsIGludCBtb2RlKQoreworCURSTV9ERUJVRygiXG4iKTsKK30KKworc3RhdGljIGJvb2wgcXhs X2VuY19tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCSAgICAgICBj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlEUk1fREVCVUcoIlxuIik7CisJcmV0 dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHF4bF9lbmNfcHJlcGFyZShzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIpCit7CisJRFJNX0RFQlVHKCJcbiIpOworfQorCitzdGF0aWMgdm9pZCBx eGxfd3JpdGVfbW9uaXRvcnNfY29uZmlnX2Zvcl9lbmNvZGVyKHN0cnVjdCBxeGxfZGV2aWNlICpx ZGV2LAorCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJaW50IGk7CisJc3RydWN0 IHF4bF9oZWFkICpoZWFkOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCisJQlVH X09OKCFlbmNvZGVyKTsKKwkvKiBUT0RPOiB1Z2x5LCBkbyBiZXR0ZXIgKi8KKwlmb3IgKGkgPSAw IDsgKGVuY29kZXItPnBvc3NpYmxlX2NydGNzICE9ICgxIDw8IGkpKSAmJiBpIDwgMzI7ICsraSkK KwkJOworCWlmIChlbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyAhPSAoMSA8PCBpKSkgeworCQlEUk1f RVJST1IoImVuY29kZXIgaGFzIHdyb25nIHBvc3NpYmxlX2NydGNzOiAleFxuIiwKKwkJCSAgZW5j b2Rlci0+cG9zc2libGVfY3J0Y3MpOworCQlyZXR1cm47CisJfQorCWlmICghcWRldi0+bW9uaXRv cnNfY29uZmlnIHx8CisJICAgIHFkZXYtPm1vbml0b3JzX2NvbmZpZy0+bWF4X2FsbG93ZWQgPD0g aSkgeworCQlEUk1fRVJST1IoCisJCSJoZWFkIG51bWJlciB0b28gbGFyZ2Ugb3IgbWlzc2luZyBt b25pdG9ycyBjb25maWc6ICVwLCAlZCIsCisJCXFkZXYtPm1vbml0b3JzX2NvbmZpZywKKwkJcWRl di0+bW9uaXRvcnNfY29uZmlnID8KKwkJCXFkZXYtPm1vbml0b3JzX2NvbmZpZy0+bWF4X2FsbG93 ZWQgOiAtMSk7CisJCXJldHVybjsKKwl9CisJaWYgKCFlbmNvZGVyLT5jcnRjKSB7CisJCURSTV9F UlJPUigibWlzc2luZyBjcnRjIG9uIGVuY29kZXIgJXBcbiIsIGVuY29kZXIpOworCQlyZXR1cm47 CisJfQorCWlmIChpICE9IDApCisJCURSTV9ERUJVRygibWlzc2luZyBmb3IgbXVsdGlwbGUgbW9u aXRvcnM6IG5vIGhlYWQgaG9sZXNcbiIpOworCWhlYWQgPSAmcWRldi0+bW9uaXRvcnNfY29uZmln LT5oZWFkc1tpXTsKKwloZWFkLT5pZCA9IGk7CisJaGVhZC0+c3VyZmFjZV9pZCA9IDA7CisJaWYg KGVuY29kZXItPmNydGMtPmVuYWJsZWQpIHsKKwkJbW9kZSA9ICZlbmNvZGVyLT5jcnRjLT5tb2Rl OworCQloZWFkLT53aWR0aCA9IG1vZGUtPmhkaXNwbGF5OworCQloZWFkLT5oZWlnaHQgPSBtb2Rl LT52ZGlzcGxheTsKKwkJaGVhZC0+eCA9IGVuY29kZXItPmNydGMtPng7CisJCWhlYWQtPnkgPSBl bmNvZGVyLT5jcnRjLT55OworCQlpZiAocWRldi0+bW9uaXRvcnNfY29uZmlnLT5jb3VudCA8IGkg KyAxKQorCQkJcWRldi0+bW9uaXRvcnNfY29uZmlnLT5jb3VudCA9IGkgKyAxOworCX0gZWxzZSB7 CisJCWhlYWQtPndpZHRoID0gMDsKKwkJaGVhZC0+aGVpZ2h0ID0gMDsKKwkJaGVhZC0+eCA9IDA7 CisJCWhlYWQtPnkgPSAwOworCX0KKwlEUk1fREVCVUcoInNldHRpbmcgaGVhZCAlZCB0byArJWQr JWQgJWR4JWRcbiIsCisJCSAgaSwgaGVhZC0+eCwgaGVhZC0+eSwgaGVhZC0+d2lkdGgsIGhlYWQt PmhlaWdodCk7CisJaGVhZC0+ZmxhZ3MgPSAwOworCS8qIFRPRE8gLSBzb21ld2hlcmUgZWxzZSB0 byBjYWxsIHRoaXMgZm9yIG11bHRpcGxlIG1vbml0b3JzCisJICogKGNvbmZpZ19jb21taXQ/KSAq LworCXF4bF9zZW5kX21vbml0b3JzX2NvbmZpZyhxZGV2KTsKK30KKworc3RhdGljIHZvaWQgcXhs X2VuY19jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBxeGxf ZGV2aWNlICpxZGV2ID0gZW5jb2Rlci0+ZGV2LT5kZXZfcHJpdmF0ZTsKKworCXF4bF93cml0ZV9t b25pdG9yc19jb25maWdfZm9yX2VuY29kZXIocWRldiwgZW5jb2Rlcik7CisJRFJNX0RFQlVHKCJc biIpOworfQorCitzdGF0aWMgdm9pZCBxeGxfZW5jX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlciwKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlEUk1fREVCVUcoIlxuIik7 Cit9CisKK3N0YXRpYyBpbnQgcXhsX2Nvbm5fZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYg PSBjb25uZWN0b3ItPmRldi0+ZGV2X3ByaXZhdGU7CisKKwlEUk1fREVCVUdfS01TKCJtb25pdG9y c19jb25maWc9JXBcbiIsIHFkZXYtPm1vbml0b3JzX2NvbmZpZyk7CisJLyogVE9ETzogd2hhdCBz aG91bGQgd2UgZG8gaGVyZT8gb25seSBzaG93IHRoZSBjb25maWd1cmVkIG1vZGVzIGZvciB0aGUK KwkgKiBkZXZpY2UsIG9yIGFsbG93IHRoZSBmdWxsIGxpc3QsIG9yIGJvdGg/ICovCisJaWYgKHFk ZXYtPm1vbml0b3JzX2NvbmZpZyAmJiBxZGV2LT5tb25pdG9yc19jb25maWctPmNvdW50KSB7CisJ CXJldCA9IHF4bF9hZGRfbW9uaXRvcnNfY29uZmlnX21vZGVzKGNvbm5lY3Rvcik7CisJCWlmIChy ZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0ICs9IHF4bF9hZGRfY29tbW9uX21vZGVz KGNvbm5lY3Rvcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBxeGxfY29ubl9tb2Rl X3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkgICAgICAgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJLyogVE9ETzogaXMgdGhpcyBjYWxsZWQgZm9y IHVzZXIgZGVmaW5lZCBtb2Rlcz8gKHhyYW5kciAtLWFkZC1tb2RlKQorCSAqIFRPRE86IGNoZWNr IHRoYXQgdGhlIG1vZGUgZml0cyBpbiB0aGUgZnJhbWVidWZmZXIgKi8KKwlEUk1fREVCVUcoIiVz OiAlZHglZCBzdGF0dXM9JWRcbiIsIG1vZGUtPm5hbWUsIG1vZGUtPmhkaXNwbGF5LAorCQkgIG1v ZGUtPnZkaXNwbGF5LCBtb2RlLT5zdGF0dXMpOworCXJldHVybiBNT0RFX09LOworfQorCitzdHJ1 Y3QgZHJtX2VuY29kZXIgKnF4bF9iZXN0X2VuY29kZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcikKK3sKKwlzdHJ1Y3QgcXhsX291dHB1dCAqcXhsX291dHB1dCA9CisJCWRybV9jb25u ZWN0b3JfdG9fcXhsX291dHB1dChjb25uZWN0b3IpOworCisJRFJNX0RFQlVHKCJcbiIpOworCXJl dHVybiAmcXhsX291dHB1dC0+ZW5jOworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Vu Y29kZXJfaGVscGVyX2Z1bmNzIHF4bF9lbmNfaGVscGVyX2Z1bmNzID0geworCS5kcG1zID0gcXhs X2VuY19kcG1zLAorCS5tb2RlX2ZpeHVwID0gcXhsX2VuY19tb2RlX2ZpeHVwLAorCS5wcmVwYXJl ID0gcXhsX2VuY19wcmVwYXJlLAorCS5tb2RlX3NldCA9IHF4bF9lbmNfbW9kZV9zZXQsCisJLmNv bW1pdCA9IHF4bF9lbmNfY29tbWl0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29u bmVjdG9yX2hlbHBlcl9mdW5jcyBxeGxfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0 X21vZGVzID0gcXhsX2Nvbm5fZ2V0X21vZGVzLAorCS5tb2RlX3ZhbGlkID0gcXhsX2Nvbm5fbW9k ZV92YWxpZCwKKwkuYmVzdF9lbmNvZGVyID0gcXhsX2Jlc3RfZW5jb2RlciwKK307CisKK3N0YXRp YyB2b2lkIHF4bF9jb25uX3NhdmUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sK KwlEUk1fREVCVUcoIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHF4bF9jb25uX3Jlc3RvcmUoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlEUk1fREVCVUcoIlxuIik7Cit9CisK K3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHF4bF9jb25uX2RldGVjdCgKKwkJCXN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQlib29sIGZvcmNlKQoreworCXN0cnVj dCBxeGxfb3V0cHV0ICpvdXRwdXQgPQorCQlkcm1fY29ubmVjdG9yX3RvX3F4bF9vdXRwdXQoY29u bmVjdG9yKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0 cnVjdCBxeGxfZGV2aWNlICpxZGV2ID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGNvbm5lY3Rl ZDsKKworCS8qIFRoZSBmaXJzdCBtb25pdG9yIGlzIGFsd2F5cyBjb25uZWN0ZWQgKi8KKwljb25u ZWN0ZWQgPSAob3V0cHV0LT5pbmRleCA9PSAwKSB8fAorCQkgICAgKHFkZXYtPm1vbml0b3JzX2Nv bmZpZyAmJgorCQkgICAgIHFkZXYtPm1vbml0b3JzX2NvbmZpZy0+Y291bnQgPiBvdXRwdXQtPmlu ZGV4KTsKKworCURSTV9ERUJVRygiXG4iKTsKKwlyZXR1cm4gY29ubmVjdGVkID8gY29ubmVjdG9y X3N0YXR1c19jb25uZWN0ZWQKKwkJCSA6IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwor fQorCitzdGF0aWMgaW50IHF4bF9jb25uX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLAorCQkJCSAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAorCQkJ CSAgIHVpbnQ2NF90IHZhbHVlKQoreworCURSTV9ERUJVRygiXG4iKTsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQgcXhsX2Nvbm5fZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQoreworCXN0cnVjdCBxeGxfb3V0cHV0ICpxeGxfb3V0cHV0ID0KKwkJZHJtX2Nvbm5l Y3Rvcl90b19xeGxfb3V0cHV0KGNvbm5lY3Rvcik7CisKKwlkcm1fc3lzZnNfY29ubmVjdG9yX3Jl bW92ZShjb25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworCWtm cmVlKHF4bF9vdXRwdXQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jf ZnVuY3MgcXhsX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9oZWxwZXJfY29ubmVj dG9yX2RwbXMsCisJLnNhdmUgPSBxeGxfY29ubl9zYXZlLAorCS5yZXN0b3JlID0gcXhsX2Nvbm5f cmVzdG9yZSwKKwkuZGV0ZWN0ID0gcXhsX2Nvbm5fZGV0ZWN0LAorCS5maWxsX21vZGVzID0gZHJt X2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5zZXRfcHJvcGVydHkgPSBx eGxfY29ubl9zZXRfcHJvcGVydHksCisJLmRlc3Ryb3kgPSBxeGxfY29ubl9kZXN0cm95LAorfTsK Kworc3RhdGljIHZvaWQgcXhsX2VuY19kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikKK3sKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIHF4bF9lbmNfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBx eGxfZW5jX2Rlc3Ryb3ksCit9OworCitpbnQgcWRldl9vdXRwdXRfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBpbnQgbnVtX291dHB1dCkKK3sKKwlzdHJ1Y3QgcXhsX291dHB1dCAqcXhsX291 dHB1dDsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlcjsKKworCXF4bF9vdXRwdXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcXhs X291dHB1dCksIEdGUF9LRVJORUwpOworCWlmICghcXhsX291dHB1dCkKKwkJcmV0dXJuIC1FTk9N RU07CisKKwlxeGxfb3V0cHV0LT5pbmRleCA9IG51bV9vdXRwdXQ7CisKKwljb25uZWN0b3IgPSAm cXhsX291dHB1dC0+YmFzZTsKKwllbmNvZGVyID0gJnF4bF9vdXRwdXQtPmVuYzsKKwlkcm1fY29u bmVjdG9yX2luaXQoZGV2LCAmcXhsX291dHB1dC0+YmFzZSwKKwkJCSAgICZxeGxfY29ubmVjdG9y X2Z1bmNzLCBEUk1fTU9ERV9DT05ORUNUT1JfVklSVFVBTCk7CisKKwlkcm1fZW5jb2Rlcl9pbml0 KGRldiwgJnF4bF9vdXRwdXQtPmVuYywgJnF4bF9lbmNfZnVuY3MsCisJCQkgRFJNX01PREVfRU5D T0RFUl9WSVJUVUFMKTsKKworCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMSA8PCBudW1fb3V0 cHV0OworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmcXhsX291dHB1dC0+YmFz ZSwKKwkJCQkJICAmcXhsX291dHB1dC0+ZW5jKTsKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVu Y29kZXIsICZxeGxfZW5jX2hlbHBlcl9mdW5jcyk7CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRk KGNvbm5lY3RvciwgJnF4bF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKworCWRybV9zeXNmc19j b25uZWN0b3JfYWRkKGNvbm5lY3Rvcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICoKK3F4bF91c2VyX2ZyYW1lYnVmZmVyX2NyZWF0ZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJICAg IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKm9iajsKKwlzdHJ1Y3QgcXhsX2ZyYW1lYnVmZmVyICpxeGxfZmI7CisJc3RydWN0IHF4 bF9kZXZpY2UgKnFkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQ7CisKKwlvYmogPSBk cm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIG1vZGVfY21kLT5oYW5kbGVzWzBd KTsKKworCXF4bF9mYiA9IGt6YWxsb2Moc2l6ZW9mKCpxeGxfZmIpLCBHRlBfS0VSTkVMKTsKKwlp ZiAocXhsX2ZiID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJcmV0ID0gcXhsX2ZyYW1lYnVm ZmVyX2luaXQoZGV2LCBxeGxfZmIsIG1vZGVfY21kLCBvYmopOworCWlmIChyZXQpIHsKKwkJa2Zy ZWUocXhsX2ZiKTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsK KwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKHFkZXYtPmFjdGl2ZV91c2VyX2ZyYW1lYnVmZmVy KSB7CisJCURSTV9JTkZPKCIlczogYWN0aXZlX3VzZXJfZnJhbWVidWZmZXIgJXAgLT4gJXBcbiIs CisJCQkgX19mdW5jX18sCisJCQkgcWRldi0+YWN0aXZlX3VzZXJfZnJhbWVidWZmZXIsIHF4bF9m Yik7CisJfQorCXFkZXYtPmFjdGl2ZV91c2VyX2ZyYW1lYnVmZmVyID0gcXhsX2ZiOworCisJcmV0 dXJuICZxeGxfZmItPmJhc2U7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29u ZmlnX2Z1bmNzIHF4bF9tb2RlX2Z1bmNzID0geworCS5mYl9jcmVhdGUgPSBxeGxfdXNlcl9mcmFt ZWJ1ZmZlcl9jcmVhdGUsCit9OworCitpbnQgcXhsX21vZGVzZXRfaW5pdChzdHJ1Y3QgcXhsX2Rl dmljZSAqcWRldikKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCXN0cnVjdCBkcm1fZ2VtX29iamVj dCAqZ29iajsKKwlpbnQgbWF4X2FsbG93ZWQgPSBRWExfTlVNX09VVFBVVFM7CisJaW50IG1vbml0 b3JzX2NvbmZpZ19zaXplID0gc2l6ZW9mKHN0cnVjdCBxeGxfbW9uaXRvcnNfY29uZmlnKSArCisJ CQkJICAgbWF4X2FsbG93ZWQgKiBzaXplb2Yoc3RydWN0IHF4bF9oZWFkKTsKKworCWRybV9tb2Rl X2NvbmZpZ19pbml0KHFkZXYtPmRkZXYpOworCXJldCA9IHF4bF9nZW1fb2JqZWN0X2NyZWF0ZShx ZGV2LCBtb25pdG9yc19jb25maWdfc2l6ZSwgMCwKKwkJCQkgICAgUVhMX0dFTV9ET01BSU5fVlJB TSwKKwkJCQkgICAgZmFsc2UsIGZhbHNlLCBOVUxMLCAmZ29iaik7CisJaWYgKHJldCkgeworCQlE Uk1fRVJST1IoIiVzOiBmYWlsZWQgdG8gY3JlYXRlIGdlbSByZXQ9JWRcbiIsIF9fZnVuY19fLCBy ZXQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcWRldi0+bW9uaXRvcnNfY29uZmlnX2JvID0g Z2VtX3RvX3F4bF9ibyhnb2JqKTsKKwlxeGxfYm9fa21hcChxZGV2LT5tb25pdG9yc19jb25maWdf Ym8sIE5VTEwpOworCXFkZXYtPm1vbml0b3JzX2NvbmZpZyA9IHFkZXYtPm1vbml0b3JzX2NvbmZp Z19iby0+a3B0cjsKKwlxZGV2LT5yYW1faGVhZGVyLT5tb25pdG9yc19jb25maWcgPQorCQlxeGxf Ym9fcGh5c2ljYWxfYWRkcmVzcyhxZGV2LCBxZGV2LT5tb25pdG9yc19jb25maWdfYm8sIDApOwor CisJbWVtc2V0KHFkZXYtPm1vbml0b3JzX2NvbmZpZywgMCwgbW9uaXRvcnNfY29uZmlnX3NpemUp OworCXFkZXYtPm1vbml0b3JzX2NvbmZpZy0+bWF4X2FsbG93ZWQgPSBtYXhfYWxsb3dlZDsKKwor CXFkZXYtPmRkZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gKHZvaWQgKikmcXhsX21vZGVfZnVuY3M7 CisKKwkvKiBtb2RlcyB3aWxsIGJlIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBmcmFtZWJ1ZmZlciBz aXplICovCisJcWRldi0+ZGRldi0+bW9kZV9jb25maWcubWluX3dpZHRoID0gMzIwOworCXFkZXYt PmRkZXYtPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSAyMDA7CisJcWRldi0+ZGRldi0+bW9kZV9j b25maWcubWF4X3dpZHRoID0gODE5MjsKKwlxZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVp Z2h0ID0gODE5MjsKKworCXFkZXYtPmRkZXYtPm1vZGVfY29uZmlnLmZiX2Jhc2UgPSBxZGV2LT52 cmFtX2Jhc2U7CisJZm9yIChpID0gMCA7IGkgPCBRWExfTlVNX09VVFBVVFM7ICsraSkgeworCQlx ZGV2X2NydGNfaW5pdChxZGV2LT5kZGV2LCBpKTsKKwkJcWRldl9vdXRwdXRfaW5pdChxZGV2LT5k ZGV2LCBpKTsKKwl9CisKKwlxZGV2LT5tb2RlX2luZm8ubW9kZV9jb25maWdfaW5pdGlhbGl6ZWQg PSB0cnVlOworCisJLyogcHJpbWFyeSBzdXJmYWNlIG11c3QgYmUgY3JlYXRlZCBieSB0aGlzIHBv aW50LCB0byBhbGxvdworCSAqIGlzc3VpbmcgY29tbWFuZCBxdWV1ZSBjb21tYW5kcyBhbmQgaGF2 aW5nIHRoZW0gcmVhZCBieQorCSAqIHNwaWNlIHNlcnZlci4gKi8KKwlxeGxfZmJkZXZfaW5pdChx ZGV2KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBxeGxfbW9kZXNldF9maW5pKHN0cnVjdCBxeGxf ZGV2aWNlICpxZGV2KQoreworCXF4bF9mYmRldl9maW5pKHFkZXYpOworCWlmIChxZGV2LT5tb2Rl X2luZm8ubW9kZV9jb25maWdfaW5pdGlhbGl6ZWQpIHsKKwkJZHJtX21vZGVfY29uZmlnX2NsZWFu dXAocWRldi0+ZGRldik7CisJCXFkZXYtPm1vZGVfaW5mby5tb2RlX2NvbmZpZ19pbml0aWFsaXpl ZCA9IGZhbHNlOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2Ry YXcuYyBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2RyYXcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5jMzVjNzE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3F4bC9xeGxfZHJhdy5jCkBAIC0wLDAgKzEsMzc4IEBACisvKgorICogQ29weXJpZ2h0IDIw MTEgUmVkIEhhdCwgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YgorICogbGljZW5zZSwgYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20KKyAqIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT04tSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhF UgorICogSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1 ZGUgInF4bF9kcnYuaCIKKyNpbmNsdWRlICJxeGxfb2JqZWN0LmgiCisKKy8qIHJldHVybnMgYSBw b2ludGVyIHRvIHRoZSBhbHJlYWR5IGFsbG9jYXRlZCBxeGxfcmVjdCBhcnJheSBpbnNpZGUKKyAq IHRoZSBxeGxfY2xpcF9yZWN0cy4gVGhpcyBpcyAqbm90KiB0aGUgc2FtZSBhcyB0aGUgbWVtb3J5 IGFsbG9jYXRlZAorICogb24gdGhlIGRldmljZSwgaXQgaXMgb2Zmc2V0IHRvIHF4bF9jbGlwX3Jl Y3RzLmNodW5rLmRhdGEgKi8KK3N0YXRpYyBzdHJ1Y3QgcXhsX3JlY3QgKmRyYXdhYmxlX3NldF9j bGlwcGluZyhzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKKwkJCQkJICAgICAgc3RydWN0IHF4bF9k cmF3YWJsZSAqZHJhd2FibGUsCisJCQkJCSAgICAgIHVuc2lnbmVkIG51bV9jbGlwcywKKwkJCQkJ ICAgICAgc3RydWN0IHF4bF9ibyAqKmNsaXBzX2JvLAorCQkJCQkgICAgICBzdHJ1Y3QgcXhsX3Jl bGVhc2UgKnJlbGVhc2UpCit7CisJc3RydWN0IHF4bF9jbGlwX3JlY3RzICpkZXZfY2xpcHM7CisJ aW50IHJldDsKKwlpbnQgc2l6ZSA9IHNpemVvZigqZGV2X2NsaXBzKSArIHNpemVvZihzdHJ1Y3Qg cXhsX3JlY3QpICogbnVtX2NsaXBzOworCXJldCA9IHF4bF9hbGxvY19ib19yZXNlcnZlZChxZGV2 LCBzaXplLCBjbGlwc19ibyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXQgPSBx eGxfYm9fa21hcCgqY2xpcHNfYm8sICh2b2lkICoqKSZkZXZfY2xpcHMpOworCWlmIChyZXQpIHsK KwkJcXhsX2JvX3VucmVmKGNsaXBzX2JvKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWRldl9jbGlw cy0+bnVtX3JlY3RzID0gbnVtX2NsaXBzOworCWRldl9jbGlwcy0+Y2h1bmsubmV4dF9jaHVuayA9 IDA7CisJZGV2X2NsaXBzLT5jaHVuay5wcmV2X2NodW5rID0gMDsKKwlkZXZfY2xpcHMtPmNodW5r LmRhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcXhsX3JlY3QpICogbnVtX2NsaXBzOworCXJldHVy biAoc3RydWN0IHF4bF9yZWN0ICopZGV2X2NsaXBzLT5jaHVuay5kYXRhOworfQorCitzdGF0aWMg aW50CittYWtlX2RyYXdhYmxlKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LCBpbnQgc3VyZmFjZSwg dWludDhfdCB0eXBlLAorCSAgICAgIGNvbnN0IHN0cnVjdCBxeGxfcmVjdCAqcmVjdCwKKwkgICAg ICBzdHJ1Y3QgcXhsX3JlbGVhc2UgKipyZWxlYXNlKQoreworCXN0cnVjdCBxeGxfZHJhd2FibGUg KmRyYXdhYmxlOworCWludCBpLCByZXQ7CisKKwlyZXQgPSBxeGxfYWxsb2NfcmVsZWFzZV9yZXNl cnZlZChxZGV2LCBzaXplb2YoKmRyYXdhYmxlKSwKKwkJCQkJIFFYTF9SRUxFQVNFX0RSQVdBQkxF LCByZWxlYXNlLAorCQkJCQkgTlVMTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWRy YXdhYmxlID0gKHN0cnVjdCBxeGxfZHJhd2FibGUgKilxeGxfcmVsZWFzZV9tYXAocWRldiwgKnJl bGVhc2UpOworCWRyYXdhYmxlLT50eXBlID0gdHlwZTsKKworCWRyYXdhYmxlLT5zdXJmYWNlX2lk ID0gc3VyZmFjZTsJCS8qIE9ubHkgcHJpbWFyeSBmb3Igbm93ICovCisJZHJhd2FibGUtPmVmZmVj dCA9IFFYTF9FRkZFQ1RfT1BBUVVFOworCWRyYXdhYmxlLT5zZWxmX2JpdG1hcCA9IDA7CisJZHJh d2FibGUtPnNlbGZfYml0bWFwX2FyZWEudG9wID0gMDsKKwlkcmF3YWJsZS0+c2VsZl9iaXRtYXBf YXJlYS5sZWZ0ID0gMDsKKwlkcmF3YWJsZS0+c2VsZl9iaXRtYXBfYXJlYS5ib3R0b20gPSAwOwor CWRyYXdhYmxlLT5zZWxmX2JpdG1hcF9hcmVhLnJpZ2h0ID0gMDsKKwkvKiBGSVhNRTogYWRkIGNs aXBwaW5nICovCisJZHJhd2FibGUtPmNsaXAudHlwZSA9IFNQSUNFX0NMSVBfVFlQRV9OT05FOwor CisJLyoKKwkgKiBzdXJmYWNlc19kZXN0W2ldIHNob3VsZCBhcHBhcmVudGx5IGJlIGZpbGxlZCBv dXQgd2l0aCB0aGUKKwkgKiBzdXJmYWNlcyB0aGF0IHdlIGRlcGVuZCBvbiwgYW5kIHN1cmZhY2Vf cmVjdHMgc2hvdWxkIGJlCisJICogZmlsbGVkIHdpdGggdGhlIHJlY3RhbmdsZXMgb2YgdGhvc2Ug c3VyZmFjZXMgdGhhdCB3ZQorCSAqIGFyZSBnb2luZyB0byB1c2UuCisJICovCisJZm9yIChpID0g MDsgaSA8IDM7ICsraSkKKwkJZHJhd2FibGUtPnN1cmZhY2VzX2Rlc3RbaV0gPSAtMTsKKworCWlm IChyZWN0KQorCQlkcmF3YWJsZS0+YmJveCA9ICpyZWN0OworCisJZHJhd2FibGUtPm1tX3RpbWUg PSBxZGV2LT5yb20tPm1tX2Nsb2NrOworCXF4bF9yZWxlYXNlX3VubWFwKHFkZXYsICpyZWxlYXNl LCAmZHJhd2FibGUtPnJlbGVhc2VfaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg cXhsX3BhbGV0dGVfY3JlYXRlXzFiaXQoc3RydWN0IHF4bF9ibyAqKnBhbGV0dGVfYm8sCisJCQkJ ICAgY29uc3Qgc3RydWN0IHF4bF9mYl9pbWFnZSAqcXhsX2ZiX2ltYWdlKQoreworCXN0cnVjdCBx eGxfZGV2aWNlICpxZGV2ID0gcXhsX2ZiX2ltYWdlLT5xZGV2OworCWNvbnN0IHN0cnVjdCBmYl9p bWFnZSAqZmJfaW1hZ2UgPSAmcXhsX2ZiX2ltYWdlLT5mYl9pbWFnZTsKKwl1aW50MzJfdCB2aXN1 YWwgPSBxeGxfZmJfaW1hZ2UtPnZpc3VhbDsKKwljb25zdCB1aW50MzJfdCAqcHNldWRvX3BhbGV0 dGUgPSBxeGxfZmJfaW1hZ2UtPnBzZXVkb19wYWxldHRlOworCXN0cnVjdCBxeGxfcGFsZXR0ZSAq cGFsOworCWludCByZXQ7CisJdWludDMyX3QgZmdjb2xvciwgYmdjb2xvcjsKKwlzdGF0aWMgdWlu dDY0X3QgdW5pcXVlOyAvKiB3ZSBtYWtlIG5vIGF0dGVtcHQgdG8gYWN0dWFsbHkgc2V0IHRoaXMK KwkJCQkgKiBjb3JyZWN0bHkgZ2xvYmFseSwgc2luY2UgdGhhdCB3b3VsZCByZXF1aXJlCisJCQkJ ICogdHJhY2tpbmcgYWxsIG9mIG91ciBwYWxldHRlcy4gKi8KKworCXJldCA9IHF4bF9hbGxvY19i b19yZXNlcnZlZChxZGV2LAorCQkJCSAgICBzaXplb2Yoc3RydWN0IHF4bF9wYWxldHRlKSArIHNp emVvZih1aW50MzJfdCkgKiAyLAorCQkJCSAgICBwYWxldHRlX2JvKTsKKworCXJldCA9IHF4bF9i b19rbWFwKCpwYWxldHRlX2JvLCAodm9pZCAqKikmcGFsKTsKKwlwYWwtPm51bV9lbnRzID0gMjsK KwlwYWwtPnVuaXF1ZSA9IHVuaXF1ZSsrOworCWlmICh2aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVD T0xPUiB8fCB2aXN1YWwgPT0gRkJfVklTVUFMX0RJUkVDVENPTE9SKSB7CisJCS8qIE5COiB0aGlz IGlzIHRoZSBvbmx5IHVzZWQgYnJhbmNoIGN1cnJlbnRseS4gKi8KKwkJZmdjb2xvciA9IHBzZXVk b19wYWxldHRlW2ZiX2ltYWdlLT5mZ19jb2xvcl07CisJCWJnY29sb3IgPSBwc2V1ZG9fcGFsZXR0 ZVtmYl9pbWFnZS0+YmdfY29sb3JdOworCX0gZWxzZSB7CisJCWZnY29sb3IgPSBmYl9pbWFnZS0+ ZmdfY29sb3I7CisJCWJnY29sb3IgPSBmYl9pbWFnZS0+YmdfY29sb3I7CisJfQorCXBhbC0+ZW50 c1swXSA9IGJnY29sb3I7CisJcGFsLT5lbnRzWzFdID0gZmdjb2xvcjsKKwlxeGxfYm9fa3VubWFw KCpwYWxldHRlX2JvKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBxeGxfZHJhd19vcGFxdWVfZmIo Y29uc3Qgc3RydWN0IHF4bF9mYl9pbWFnZSAqcXhsX2ZiX2ltYWdlLAorCQkJaW50IHN0cmlkZSAv KiBmaWxsZWQgaW4gaWYgMCAqLykKK3sKKwlzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiA9IHF4bF9m Yl9pbWFnZS0+cWRldjsKKwlzdHJ1Y3QgcXhsX2RyYXdhYmxlICpkcmF3YWJsZTsKKwlzdHJ1Y3Qg cXhsX3JlY3QgcmVjdDsKKwljb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmZiX2ltYWdlID0gJnF4bF9m Yl9pbWFnZS0+ZmJfaW1hZ2U7CisJaW50IHggPSBmYl9pbWFnZS0+ZHg7CisJaW50IHkgPSBmYl9p bWFnZS0+ZHk7CisJaW50IHdpZHRoID0gZmJfaW1hZ2UtPndpZHRoOworCWludCBoZWlnaHQgPSBm Yl9pbWFnZS0+aGVpZ2h0OworCWNvbnN0IGNoYXIgKnNyYyA9IGZiX2ltYWdlLT5kYXRhOworCWlu dCBkZXB0aCA9IGZiX2ltYWdlLT5kZXB0aDsKKwlzdHJ1Y3QgcXhsX3JlbGVhc2UgKnJlbGVhc2U7 CisJc3RydWN0IHF4bF9ibyAqaW1hZ2VfYm87CisJc3RydWN0IHF4bF9pbWFnZSAqaW1hZ2U7CisJ aW50IHJldDsKKworCWlmIChzdHJpZGUgPT0gMCkKKwkJc3RyaWRlID0gZGVwdGggKiB3aWR0aCAv IDg7CisKKwlyZWN0LmxlZnQgPSB4OworCXJlY3QucmlnaHQgPSB4ICsgd2lkdGg7CisJcmVjdC50 b3AgPSB5OworCXJlY3QuYm90dG9tID0geSArIGhlaWdodDsKKworCXJldCA9IG1ha2VfZHJhd2Fi bGUocWRldiwgMCwgUVhMX0RSQVdfQ09QWSwgJnJlY3QsICZyZWxlYXNlKTsKKwlpZiAocmV0KQor CQlyZXR1cm47CisKKwlyZXQgPSBxeGxfaW1hZ2VfY3JlYXRlKHFkZXYsIHJlbGVhc2UsICZpbWFn ZV9ibywKKwkJCSAgICAgICAoY29uc3QgdWludDhfdCAqKXNyYywgMCwgMCwKKwkJCSAgICAgICB3 aWR0aCwgaGVpZ2h0LCBkZXB0aCwgc3RyaWRlKTsKKwlRWExfSU5GTyhxZGV2LCAiaW1hZ2VfYm8g b2Zmc2V0ICVsbHhcbiIsCisJCSBpbWFnZV9iby0+dGJvLmFkZHJfc3BhY2Vfb2Zmc2V0IC0gRFJN X0ZJTEVfT0ZGU0VUKTsKKwlpZiAoZGVwdGggPT0gMSkgeworCQlzdHJ1Y3QgcXhsX2JvICpwYWxl dHRlX2JvOworCisJCXJldCA9IHF4bF9wYWxldHRlX2NyZWF0ZV8xYml0KCZwYWxldHRlX2JvLCBx eGxfZmJfaW1hZ2UpOworCQlxeGxfcmVsZWFzZV9hZGRfcmVzKHFkZXYsIHJlbGVhc2UsIHBhbGV0 dGVfYm8pOworCQlyZXQgPSBxeGxfYm9fa21hcChpbWFnZV9ibywgKHZvaWQgKiopJmltYWdlKTsK KwkJaW1hZ2UtPnUuYml0bWFwLnBhbGV0dGUgPQorCQkJcXhsX2JvX3BoeXNpY2FsX2FkZHJlc3Mo cWRldiwgcGFsZXR0ZV9ibywgMCk7CisJCXF4bF9ib19rdW5tYXAoaW1hZ2VfYm8pOworCQlxeGxf Ym9fdW5yZWYoJnBhbGV0dGVfYm8pOworCX0KKworCWRyYXdhYmxlID0gKHN0cnVjdCBxeGxfZHJh d2FibGUgKilxeGxfcmVsZWFzZV9tYXAocWRldiwgcmVsZWFzZSk7CisKKwlkcmF3YWJsZS0+dS5j b3B5LnNyY19hcmVhLnRvcCA9IDA7CisJZHJhd2FibGUtPnUuY29weS5zcmNfYXJlYS5ib3R0b20g PSBoZWlnaHQ7CisJZHJhd2FibGUtPnUuY29weS5zcmNfYXJlYS5sZWZ0ID0gMDsKKwlkcmF3YWJs ZS0+dS5jb3B5LnNyY19hcmVhLnJpZ2h0ID0gd2lkdGg7CisKKwlkcmF3YWJsZS0+dS5jb3B5LnJv cF9kZXNjcmlwdG9yID0gU1BJQ0VfUk9QRF9PUF9QVVQ7CisJZHJhd2FibGUtPnUuY29weS5zY2Fs ZV9tb2RlID0gMDsKKwlkcmF3YWJsZS0+dS5jb3B5Lm1hc2suZmxhZ3MgPSAwOworCWRyYXdhYmxl LT51LmNvcHkubWFzay5wb3MueCA9IDA7CisJZHJhd2FibGUtPnUuY29weS5tYXNrLnBvcy55ID0g MDsKKwlkcmF3YWJsZS0+dS5jb3B5Lm1hc2suYml0bWFwID0gMDsKKworCWRyYXdhYmxlLT51LmNv cHkuc3JjX2JpdG1hcCA9CisJCXF4bF9ib19waHlzaWNhbF9hZGRyZXNzKHFkZXYsIGltYWdlX2Jv LCAwKTsKKwlxeGxfcmVsZWFzZV91bm1hcChxZGV2LCByZWxlYXNlLCAmZHJhd2FibGUtPnJlbGVh c2VfaW5mbyk7CisKKwlxeGxfcmVsZWFzZV9hZGRfcmVzKHFkZXYsIHJlbGVhc2UsIGltYWdlX2Jv KTsKKwlxeGxfYm9fdW5yZXNlcnZlKGltYWdlX2JvKTsKKwlxeGxfYm9fdW5yZWYoJmltYWdlX2Jv KTsKKworCXF4bF9mZW5jZV9yZWxlYXNlYWJsZShxZGV2LCByZWxlYXNlKTsKKwlxeGxfcHVzaF9j b21tYW5kX3JpbmdfcmVsZWFzZShxZGV2LCByZWxlYXNlLCBRWExfQ01EX0RSQVcsIGZhbHNlKTsK KwlxeGxfcmVsZWFzZV91bnJlc2VydmUocWRldiwgcmVsZWFzZSk7Cit9CisKKy8qIHB1c2ggYSBk cmF3IGNvbW1hbmQgdXNpbmcgdGhlIGdpdmVuIGNsaXBwaW5nIHJlY3RhbmdsZXMgYXMKKyAqIHRo ZSBzb3VyY2VzIGZyb20gdGhlIHNoYWRvdyBmcmFtZWJ1ZmZlci4KKyAqCisgKiBSaWdodCBub3cg aW1wbGVtZW50aW5nIHdpdGggYSBzaW5nbGUgZHJhdyBhbmQgYSBjbGlwIGxpc3QuIENsaXAKKyAq IGxpc3RzIGFyZSBrbm93biB0byBiZSBhIHByb2JsZW0gcGVyZm9ybWFuY2Ugd2lzZSwgdGhpcyBj YW4gYmUgc29sdmVkCisgKiBieSB0cmVhdGluZyB0aGVtIGRpZmZlcmVudGx5IGluIHRoZSBzZXJ2 ZXIuCisgKi8KK3ZvaWQgcXhsX2RyYXdfZGlydHlfZmIoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYs CisJCSAgICAgICBzdHJ1Y3QgcXhsX2ZyYW1lYnVmZmVyICpxeGxfZmIsCisJCSAgICAgICBzdHJ1 Y3QgcXhsX2JvICpibywKKwkJICAgICAgIHVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBjb2xvciwK KwkJICAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKKwkJICAgICAgIHVuc2lnbmVk IG51bV9jbGlwcywgaW50IGluYykKK3sKKwkvKgorCSAqIFRPRE86IGlmIGZsYWdzICYgRFJNX01P REVfRkJfRElSVFlfQU5OT1RBVEVfRklMTCB0aGVuIHdlIHNob3VsZAorCSAqIHNlbmQgYSBmaWxs IGNvbW1hbmQgaW5zdGVhZCwgbXVjaCBjaGVhcGVyLgorCSAqCisJICogU2VlIGluY2x1ZGUvZHJt L2RybV9tb2RlLmgKKwkgKi8KKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHNfcHRyOworCWlu dCBpOworCWludCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b207CisJaW50IHdpZHRoLCBoZWlnaHQ7 CisJc3RydWN0IHF4bF9kcmF3YWJsZSAqZHJhd2FibGU7CisJc3RydWN0IHF4bF9yZWN0IGRyYXdh YmxlX3JlY3Q7CisJc3RydWN0IHF4bF9yZWN0ICpyZWN0czsKKwlpbnQgc3RyaWRlID0gcXhsX2Zi LT5iYXNlLnBpdGNoZXNbMF07CisJLyogZGVwdGggaXMgbm90IGFjdHVhbGx5IGludGVyZXN0aW5n LCB3ZSBkb24ndCBtYXNrIHdpdGggaXQgKi8KKwlpbnQgZGVwdGggPSBxeGxfZmItPmJhc2UuYml0 c19wZXJfcGl4ZWw7CisJdWludDhfdCAqc3VyZmFjZV9iYXNlID0gYm8tPmtwdHI7CisJc3RydWN0 IHF4bF9yZWxlYXNlICpyZWxlYXNlOworCXN0cnVjdCBxeGxfYm8gKmltYWdlX2JvOworCXN0cnVj dCBxeGxfYm8gKmNsaXBzX2JvOworCWludCByZXQ7CisKKwlsZWZ0ID0gY2xpcHMtPngxOworCXJp Z2h0ID0gY2xpcHMtPngyOworCXRvcCA9IGNsaXBzLT55MTsKKwlib3R0b20gPSBjbGlwcy0+eTI7 CisKKwkvKiBza2lwIHRoZSBmaXJzdCBjbGlwIHJlY3QgKi8KKwlmb3IgKGkgPSAxLCBjbGlwc19w dHIgPSBjbGlwcyArIGluYzsKKwkgICAgIGkgPCBudW1fY2xpcHM7IGkrKywgY2xpcHNfcHRyICs9 IGluYykgeworCQlsZWZ0ID0gbWluX3QoaW50LCBsZWZ0LCAoaW50KWNsaXBzX3B0ci0+eDEpOwor CQlyaWdodCA9IG1heF90KGludCwgcmlnaHQsIChpbnQpY2xpcHNfcHRyLT54Mik7CisJCXRvcCA9 IG1pbl90KGludCwgdG9wLCAoaW50KWNsaXBzX3B0ci0+eTEpOworCQlib3R0b20gPSBtYXhfdChp bnQsIGJvdHRvbSwgKGludCljbGlwc19wdHItPnkyKTsKKwl9CisKKwl3aWR0aCA9IHJpZ2h0IC0g bGVmdDsKKwloZWlnaHQgPSBib3R0b20gLSB0b3A7CisJZHJhd2FibGVfcmVjdC5sZWZ0ID0gbGVm dDsKKwlkcmF3YWJsZV9yZWN0LnJpZ2h0ID0gcmlnaHQ7CisJZHJhd2FibGVfcmVjdC50b3AgPSB0 b3A7CisJZHJhd2FibGVfcmVjdC5ib3R0b20gPSBib3R0b207CisJcmV0ID0gbWFrZV9kcmF3YWJs ZShxZGV2LCAwLCBRWExfRFJBV19DT1BZLCAmZHJhd2FibGVfcmVjdCwKKwkJCSAgICAmcmVsZWFz ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJcmV0ID0gcXhsX2ltYWdlX2NyZWF0ZShxZGV2 LCByZWxlYXNlLCAmaW1hZ2VfYm8sIHN1cmZhY2VfYmFzZSwKKwkJCSAgICAgICBsZWZ0LCB0b3As IHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBzdHJpZGUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3Vu cmVmOworCisJcmVjdHMgPSBkcmF3YWJsZV9zZXRfY2xpcHBpbmcocWRldiwgZHJhd2FibGUsIG51 bV9jbGlwcywgJmNsaXBzX2JvLCByZWxlYXNlKTsKKwlpZiAoIXJlY3RzKSB7CisJCXF4bF9ib191 bnJlZigmaW1hZ2VfYm8pOworCQlnb3RvIG91dF91bnJlZjsKKwl9CisJZHJhd2FibGUgPSAoc3Ry dWN0IHF4bF9kcmF3YWJsZSAqKXF4bF9yZWxlYXNlX21hcChxZGV2LCByZWxlYXNlKTsKKworCWRy YXdhYmxlLT5jbGlwLnR5cGUgPSBTUElDRV9DTElQX1RZUEVfUkVDVFM7CisJZHJhd2FibGUtPmNs aXAuZGF0YSA9IHF4bF9ib19waHlzaWNhbF9hZGRyZXNzKHFkZXYsCisJCQkJCQkgICAgICBjbGlw c19ibywgMCk7CisJcXhsX3JlbGVhc2VfYWRkX3JlcyhxZGV2LCByZWxlYXNlLCBjbGlwc19ibyk7 CisKKwlkcmF3YWJsZS0+dS5jb3B5LnNyY19hcmVhLnRvcCA9IDA7CisJZHJhd2FibGUtPnUuY29w eS5zcmNfYXJlYS5ib3R0b20gPSBoZWlnaHQ7CisJZHJhd2FibGUtPnUuY29weS5zcmNfYXJlYS5s ZWZ0ID0gMDsKKwlkcmF3YWJsZS0+dS5jb3B5LnNyY19hcmVhLnJpZ2h0ID0gd2lkdGg7CisKKwlk cmF3YWJsZS0+dS5jb3B5LnJvcF9kZXNjcmlwdG9yID0gU1BJQ0VfUk9QRF9PUF9QVVQ7CisJZHJh d2FibGUtPnUuY29weS5zY2FsZV9tb2RlID0gMDsKKwlkcmF3YWJsZS0+dS5jb3B5Lm1hc2suZmxh Z3MgPSAwOworCWRyYXdhYmxlLT51LmNvcHkubWFzay5wb3MueCA9IDA7CisJZHJhd2FibGUtPnUu Y29weS5tYXNrLnBvcy55ID0gMDsKKwlkcmF3YWJsZS0+dS5jb3B5Lm1hc2suYml0bWFwID0gMDsK KworCWRyYXdhYmxlLT51LmNvcHkuc3JjX2JpdG1hcCA9IHF4bF9ib19waHlzaWNhbF9hZGRyZXNz KHFkZXYsIGltYWdlX2JvLCAwKTsKKwlxeGxfcmVsZWFzZV91bm1hcChxZGV2LCByZWxlYXNlLCAm ZHJhd2FibGUtPnJlbGVhc2VfaW5mbyk7CisJcXhsX3JlbGVhc2VfYWRkX3JlcyhxZGV2LCByZWxl YXNlLCBpbWFnZV9ibyk7CisJcXhsX2JvX3VucmVzZXJ2ZShpbWFnZV9ibyk7CisJcXhsX2JvX3Vu cmVmKCZpbWFnZV9ibyk7CisJY2xpcHNfcHRyID0gY2xpcHM7CisJZm9yIChpID0gMDsgaSA8IG51 bV9jbGlwczsgaSsrLCBjbGlwc19wdHIgKz0gaW5jKSB7CisJCXJlY3RzW2ldLmxlZnQgICA9IGNs aXBzX3B0ci0+eDE7CisJCXJlY3RzW2ldLnJpZ2h0ICA9IGNsaXBzX3B0ci0+eDI7CisJCXJlY3Rz W2ldLnRvcCAgICA9IGNsaXBzX3B0ci0+eTE7CisJCXJlY3RzW2ldLmJvdHRvbSA9IGNsaXBzX3B0 ci0+eTI7CisJfQorCXF4bF9ib19rdW5tYXAoY2xpcHNfYm8pOworCXF4bF9ib191bnJlc2VydmUo Y2xpcHNfYm8pOworCXF4bF9ib191bnJlZigmY2xpcHNfYm8pOworCisJcXhsX2ZlbmNlX3JlbGVh c2VhYmxlKHFkZXYsIHJlbGVhc2UpOworCXF4bF9wdXNoX2NvbW1hbmRfcmluZ19yZWxlYXNlKHFk ZXYsIHJlbGVhc2UsIFFYTF9DTURfRFJBVywgZmFsc2UpOworCXF4bF9yZWxlYXNlX3VucmVzZXJ2 ZShxZGV2LCByZWxlYXNlKTsKKwlyZXR1cm47CisKK291dF91bnJlZjoKKwlxeGxfcmVsZWFzZV91 bnJlc2VydmUocWRldiwgcmVsZWFzZSk7CisJcXhsX3JlbGVhc2VfZnJlZShxZGV2LCByZWxlYXNl KTsKK30KKwordm9pZCBxeGxfZHJhd19jb3B5YXJlYShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwK KwkJICAgICAgIHUzMiB3aWR0aCwgdTMyIGhlaWdodCwKKwkJICAgICAgIHUzMiBzeCwgdTMyIHN5 LAorCQkgICAgICAgdTMyIGR4LCB1MzIgZHkpCit7CisJc3RydWN0IHF4bF9kcmF3YWJsZSAqZHJh d2FibGU7CisJc3RydWN0IHF4bF9yZWN0IHJlY3Q7CisJc3RydWN0IHF4bF9yZWxlYXNlICpyZWxl YXNlOworCWludCByZXQ7CisKKwlyZWN0LmxlZnQgPSBkeDsKKwlyZWN0LnRvcCA9IGR5OworCXJl Y3QucmlnaHQgPSBkeCArIHdpZHRoOworCXJlY3QuYm90dG9tID0gZHkgKyBoZWlnaHQ7CisJcmV0 ID0gbWFrZV9kcmF3YWJsZShxZGV2LCAwLCBRWExfQ09QWV9CSVRTLCAmcmVjdCwgJnJlbGVhc2Up OworCWlmIChyZXQpCisJCXJldHVybjsKKworCWRyYXdhYmxlID0gKHN0cnVjdCBxeGxfZHJhd2Fi bGUgKilxeGxfcmVsZWFzZV9tYXAocWRldiwgcmVsZWFzZSk7CisJZHJhd2FibGUtPnUuY29weV9i aXRzLnNyY19wb3MueCA9IHN4OworCWRyYXdhYmxlLT51LmNvcHlfYml0cy5zcmNfcG9zLnkgPSBz eTsKKworCXF4bF9yZWxlYXNlX3VubWFwKHFkZXYsIHJlbGVhc2UsICZkcmF3YWJsZS0+cmVsZWFz ZV9pbmZvKTsKKwlxeGxfZmVuY2VfcmVsZWFzZWFibGUocWRldiwgcmVsZWFzZSk7CisJcXhsX3B1 c2hfY29tbWFuZF9yaW5nX3JlbGVhc2UocWRldiwgcmVsZWFzZSwgUVhMX0NNRF9EUkFXLCBmYWxz ZSk7CisJcXhsX3JlbGVhc2VfdW5yZXNlcnZlKHFkZXYsIHJlbGVhc2UpOworfQorCit2b2lkIHF4 bF9kcmF3X2ZpbGwoc3RydWN0IHF4bF9kcmF3X2ZpbGwgKnF4bF9kcmF3X2ZpbGxfcmVjKQorewor CXN0cnVjdCBxeGxfZGV2aWNlICpxZGV2ID0gcXhsX2RyYXdfZmlsbF9yZWMtPnFkZXY7CisJc3Ry dWN0IHF4bF9yZWN0IHJlY3QgPSBxeGxfZHJhd19maWxsX3JlYy0+cmVjdDsKKwl1aW50MzJfdCBj b2xvciA9IHF4bF9kcmF3X2ZpbGxfcmVjLT5jb2xvcjsKKwl1aW50MTZfdCByb3AgPSBxeGxfZHJh d19maWxsX3JlYy0+cm9wOworCXN0cnVjdCBxeGxfZHJhd2FibGUgKmRyYXdhYmxlOworCXN0cnVj dCBxeGxfcmVsZWFzZSAqcmVsZWFzZTsKKwlpbnQgcmV0OworCisJcmV0ID0gbWFrZV9kcmF3YWJs ZShxZGV2LCAwLCBRWExfRFJBV19GSUxMLCAmcmVjdCwgJnJlbGVhc2UpOworCWlmIChyZXQpCisJ CXJldHVybjsKKworCWRyYXdhYmxlID0gKHN0cnVjdCBxeGxfZHJhd2FibGUgKilxeGxfcmVsZWFz ZV9tYXAocWRldiwgcmVsZWFzZSk7CisJZHJhd2FibGUtPnUuZmlsbC5icnVzaC50eXBlID0gU1BJ Q0VfQlJVU0hfVFlQRV9TT0xJRDsKKwlkcmF3YWJsZS0+dS5maWxsLmJydXNoLnUuY29sb3IgPSBj b2xvcjsKKwlkcmF3YWJsZS0+dS5maWxsLnJvcF9kZXNjcmlwdG9yID0gcm9wOworCWRyYXdhYmxl LT51LmZpbGwubWFzay5mbGFncyA9IDA7CisJZHJhd2FibGUtPnUuZmlsbC5tYXNrLnBvcy54ID0g MDsKKwlkcmF3YWJsZS0+dS5maWxsLm1hc2sucG9zLnkgPSAwOworCWRyYXdhYmxlLT51LmZpbGwu bWFzay5iaXRtYXAgPSAwOworCisJcXhsX3JlbGVhc2VfdW5tYXAocWRldiwgcmVsZWFzZSwgJmRy YXdhYmxlLT5yZWxlYXNlX2luZm8pOworCXF4bF9mZW5jZV9yZWxlYXNlYWJsZShxZGV2LCByZWxl YXNlKTsKKwlxeGxfcHVzaF9jb21tYW5kX3JpbmdfcmVsZWFzZShxZGV2LCByZWxlYXNlLCBRWExf Q01EX0RSQVcsIGZhbHNlKTsKKwlxeGxfcmVsZWFzZV91bnJlc2VydmUocWRldiwgcmVsZWFzZSk7 Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcnYuYyBiL2RyaXZlcnMv Z3B1L2RybS9xeGwvcXhsX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjFjNjg1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcnYu YwpAQCAtMCwwICsxLDEzMSBAQAorLyogdmltOiBzZXQgdHM9OCBzdz04IHR3PTc4IGFpIG5vZXhw YW5kdGFiICovCisvKiBxeGxfZHJ2LmMgLS0gUVhMIGRyaXZlciAtKi0gbGludXgtYyAtKi0KKyAq CisgKiBDb3B5cmlnaHQgMjAxMSBSZWQgSGF0LCBJbmMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVk LgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICog U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBWQSBMSU5VWCBTWVNURU1TIEFORC9PUiBJVFMgU1VQUExJ RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwK KyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoK KyAqIEF1dGhvcnM6CisgKiAgICBEYXZlIEFpcmxpZSA8YWlybGllQHJlZGhhdC5jb20+CisgKiAg ICBBbG9uIExldnkgPGFsZXZ5QHJlZGhhdC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgorCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS9kcm0uaCIKKworI2lu Y2x1ZGUgInF4bF9kcnYuaCIKKworZXh0ZXJuIGludCBxeGxfbWF4X2lvY3RsczsKK3N0YXRpYyBE RUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2lpZGxpc3QpID0geworCXsgMHgxYjM2LCAweDEwMCwg UENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsCisJICAw eGZmZmYwMCwgMCB9LAorCXsgMHgxYjM2LCAweDEwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwg UENJX0NMQVNTX0RJU1BMQVlfT1RIRVIgPDwgOCwKKwkgIDB4ZmZmZjAwLCAwIH0sCisJeyAwLCAw LCAwIH0sCit9OworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgcXhsX2RyaXZlcjsKK3N0YXRp YyBzdHJ1Y3QgcGNpX2RyaXZlciBxeGxfcGNpX2RyaXZlcjsKKworc3RhdGljIGludAorcXhsX3Bj aV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQg KmVudCkKK3sKKwlpZiAocGRldi0+cmV2aXNpb24gPCA0KSB7CisJCURSTV9FUlJPUigicXhsIHRv byBvbGQsIGRvZXNuJ3Qgc3VwcG9ydCBjbGllbnRfbW9uaXRvcnNfY29uZmlnLCIKKwkJCSAgIiB1 c2UgeGY4Ni12aWRlby1xeGwgaW4gdXNlciBtb2RlIik7CisJCXJldHVybiAtRUlOVkFMOyAvKiBU T0RPOiBFTk9ERVYgPyAqLworCX0KKwlyZXR1cm4gZHJtX2dldF9wY2lfZGV2KHBkZXYsIGVudCwg JnF4bF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZAorcXhsX3BjaV9yZW1vdmUoc3RydWN0IHBj aV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0 YShwZGV2KTsKKworCWRybV9wdXRfZGV2KGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2Ry aXZlciBxeGxfcGNpX2RyaXZlciA9IHsKKwkgLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkgLmlkX3Rh YmxlID0gcGNpaWRsaXN0LAorCSAucHJvYmUgPSBxeGxfcGNpX3Byb2JlLAorCSAucmVtb3ZlID0g cXhsX3BjaV9yZW1vdmUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9u cyBxeGxfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGRybV9vcGVu LAorCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3Rs LAorCS5wb2xsID0gZHJtX3BvbGwsCisJLmZhc3luYyA9IGRybV9mYXN5bmMsCisJLm1tYXAgPSBx eGxfbW1hcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBxeGxfZHJpdmVyID0gewor CS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfR0VNIHwgRFJJVkVSX01PREVTRVQgfAorCQkJICAg RFJJVkVSX0hBVkVfSVJRIHwgRFJJVkVSX0lSUV9TSEFSRUQsCisJLmRldl9wcml2X3NpemUgPSAw LAorCS5sb2FkID0gcXhsX2RyaXZlcl9sb2FkLAorCS51bmxvYWQgPSBxeGxfZHJpdmVyX3VubG9h ZCwKKworCS5kdW1iX2NyZWF0ZSA9IHF4bF9tb2RlX2R1bWJfY3JlYXRlLAorCS5kdW1iX21hcF9v ZmZzZXQgPSBxeGxfbW9kZV9kdW1iX21tYXAsCisJLmR1bWJfZGVzdHJveSA9IHF4bF9tb2RlX2R1 bWJfZGVzdHJveSwKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKwkuZGVidWdmc19pbml0 ID0gcXhsX2RlYnVnZnNfaW5pdCwKKwkuZGVidWdmc19jbGVhbnVwID0gcXhsX2RlYnVnZnNfdGFr ZWRvd24sCisjZW5kaWYKKwkuZ2VtX2luaXRfb2JqZWN0ID0gcXhsX2dlbV9vYmplY3RfaW5pdCwK KwkuZ2VtX2ZyZWVfb2JqZWN0ID0gcXhsX2dlbV9vYmplY3RfZnJlZSwKKwkuZ2VtX29wZW5fb2Jq ZWN0ID0gcXhsX2dlbV9vYmplY3Rfb3BlbiwKKwkuZ2VtX2Nsb3NlX29iamVjdCA9IHF4bF9nZW1f b2JqZWN0X2Nsb3NlLAorCS5mb3BzID0gJnF4bF9mb3BzLAorCS5pb2N0bHMgPSBxeGxfaW9jdGxz LAorCS5pcnFfaGFuZGxlciA9IHF4bF9pcnFfaGFuZGxlciwKKwkubmFtZSA9IERSSVZFUl9OQU1F LAorCS5kZXNjID0gRFJJVkVSX0RFU0MsCisJLmRhdGUgPSBEUklWRVJfREFURSwKKwkubWFqb3Ig PSAwLAorCS5taW5vciA9IDEsCisJLnBhdGNobGV2ZWwgPSAwLAorfTsKKworc3RhdGljIGludCBf X2luaXQgcXhsX2luaXQodm9pZCkKK3sKKwlxeGxfZHJpdmVyLm51bV9pb2N0bHMgPSBxeGxfbWF4 X2lvY3RsczsKKwlyZXR1cm4gZHJtX3BjaV9pbml0KCZxeGxfZHJpdmVyLCAmcXhsX3BjaV9kcml2 ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcXhsX2V4aXQodm9pZCkKK3sKKwlkcm1fcGNp X2V4aXQoJnF4bF9kcml2ZXIsICZxeGxfcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHF4 bF9pbml0KTsKK21vZHVsZV9leGl0KHF4bF9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJf QVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5T RSgiR1BMIGFuZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3F4bC9xeGxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9kcnYuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWI0NjM4Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHJ2LmgKQEAgLTAsMCArMSw1NjYgQEAKKy8qCisgKiBD b3B5cmlnaHQgMjAxMyBSZWQgSGF0IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAor ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGlu CisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4K KyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZF TlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5H IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3Jz OiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxvbiBMZXZ5CisgKi8KKworCisjaWZuZGVmIFFY TF9EUlZfSAorI2RlZmluZSBRWExfRFJWX0gKKworLyoKKyAqIERlZmluaXRpb25zIHRha2VuIGZy b20gc3BpY2UtcHJvdG9jb2wsIHBsdXMga2VybmVsIGRyaXZlciBzcGVjaWZpYyBiaXRzLgorICov CisKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2Fy ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAiZHJt UC5oIgorI2luY2x1ZGUgImRybV9jcnRjLmgiCisjaW5jbHVkZSA8dHRtL3R0bV9ib19hcGkuaD4K KyNpbmNsdWRlIDx0dG0vdHRtX2JvX2RyaXZlci5oPgorI2luY2x1ZGUgPHR0bS90dG1fcGxhY2Vt ZW50Lmg+CisjaW5jbHVkZSA8dHRtL3R0bV9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGRybS9xeGxf ZHJtLmg+CisjaW5jbHVkZSAicXhsX2Rldi5oIgorCisjZGVmaW5lIERSSVZFUl9BVVRIT1IJCSJE YXZlIEFpcmxpZSIKKworI2RlZmluZSBEUklWRVJfTkFNRQkJInF4bCIKKyNkZWZpbmUgRFJJVkVS X0RFU0MJCSJSSCBRWEwiCisjZGVmaW5lIERSSVZFUl9EQVRFCQkiMjAxMjAxMTciCisKKyNkZWZp bmUgRFJJVkVSX01BSk9SIDAKKyNkZWZpbmUgRFJJVkVSX01JTk9SIDEKKyNkZWZpbmUgRFJJVkVS X1BBVENITEVWRUwgMAorCisjZGVmaW5lIFFYTF9OVU1fT1VUUFVUUyAxCisKKyNkZWZpbmUgUVhM X0RFQlVHRlNfTUFYX0NPTVBPTkVOVFMJCTMyCisKK2V4dGVybiBpbnQgcXhsX2xvZ19sZXZlbDsK KworZW51bSB7CisJUVhMX0lORk9fTEVWRUwgPSAxLAorCVFYTF9ERUJVR19MRVZFTCA9IDIsCit9 OworCisjZGVmaW5lIFFYTF9JTkZPKHFkZXYsIGZtdCwgLi4uKSBkbyB7IFwKKwkJaWYgKHF4bF9s b2dfbGV2ZWwgPj0gUVhMX0lORk9fTEVWRUwpIHsJXAorCQkJcXhsX2lvX2xvZyhxZGV2LCBmbXQs IF9fVkFfQVJHU19fKTsgXAorCQl9CVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBRWExfREVCVUco cWRldiwgZm10LCAuLi4pIGRvIHsgXAorCQlpZiAocXhsX2xvZ19sZXZlbCA+PSBRWExfREVCVUdf TEVWRUwpIHsJXAorCQkJcXhsX2lvX2xvZyhxZGV2LCBmbXQsIF9fVkFfQVJHU19fKTsgXAorCQl9 CVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBRWExfSU5GT19PTkNFKHFkZXYsIGZtdCwgLi4uKSBk byB7IFwKKwkJc3RhdGljIGludCBkb25lOwkJXAorCQlpZiAoIWRvbmUpIHsJCQlcCisJCQlkb25l ID0gMTsJCQlcCisJCQlRWExfSU5GTyhxZGV2LCBmbXQsIF9fVkFfQVJHU19fKTsJXAorCQl9CQkJ CQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgRFJNX0ZJTEVfT0ZGU0VUIDB4MTAwMDAwMDAw VUxMCisjZGVmaW5lIERSTV9GSUxFX1BBR0VfT0ZGU0VUIChEUk1fRklMRV9PRkZTRVQgPj4gUEFH RV9TSElGVCkKKworI2RlZmluZSBRWExfSU5URVJSVVBUX01BU0sgKFwKKwlRWExfSU5URVJSVVBU X0RJU1BMQVkgfFwKKwlRWExfSU5URVJSVVBUX0NVUlNPUiB8XAorCVFYTF9JTlRFUlJVUFRfSU9f Q01EIHxcCisJUVhMX0lOVEVSUlVQVF9DTElFTlRfTU9OSVRPUlNfQ09ORklHKQorCitzdHJ1Y3Qg cXhsX2ZlbmNlIHsKKwlzdHJ1Y3QgcXhsX2RldmljZSAqcWRldjsKKwl1aW50MzJfdCBudW1fYWN0 aXZlX3JlbGVhc2VzOworCXVpbnQzMl90ICpyZWxlYXNlX2lkczsKKwlzdHJ1Y3QgcmFkaXhfdHJl ZV9yb290IHRyZWU7Cit9OworCitzdHJ1Y3QgcXhsX2JvIHsKKwkvKiBQcm90ZWN0ZWQgYnkgZ2Vt Lm11dGV4ICovCisJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKKwkvKiBQcm90ZWN0ZWQgYnkgdGJv LnJlc2VydmVkICovCisJdTMyCQkJCXBsYWNlbWVudHNbM107CisJc3RydWN0IHR0bV9wbGFjZW1l bnQJCXBsYWNlbWVudDsKKwlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QJdGJvOworCXN0cnVjdCB0 dG1fYm9fa21hcF9vYmoJCWttYXA7CisJdW5zaWduZWQJCQlwaW5fY291bnQ7CisJdm9pZAkJCQkq a3B0cjsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU7CisJLyogQ29uc3Rh bnQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gKi8KKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QJCWdlbV9i YXNlOworCWJvb2wgaXNfcHJpbWFyeTsgLyogaXMgdGhpcyBub3cgYSBwcmltYXJ5IHN1cmZhY2Ug Ki8KKwlib29sIGh3X3N1cmZfYWxsb2M7CisJc3RydWN0IHF4bF9zdXJmYWNlIHN1cmY7CisJdWlu dDMyX3Qgc3VyZmFjZV9pZDsKKwlzdHJ1Y3QgcXhsX2ZlbmNlIGZlbmNlOyAvKiBwZXIgYm8gZmVu Y2UgIC0gbGlzdCBvZiByZWxlYXNlcyAqLworCXN0cnVjdCBxeGxfcmVsZWFzZSAqc3VyZl9jcmVh dGU7CisJYXRvbWljX3QgcmVzZXJ2ZV9jb3VudDsKK307CisjZGVmaW5lIGdlbV90b19xeGxfYm8o Z29iaikgY29udGFpbmVyX29mKChnb2JqKSwgc3RydWN0IHF4bF9ibywgZ2VtX2Jhc2UpCisKK3N0 cnVjdCBxeGxfZ2VtIHsKKwlzdHJ1Y3QgbXV0ZXgJCW11dGV4OworCXN0cnVjdCBsaXN0X2hlYWQJ b2JqZWN0czsKK307CisKK3N0cnVjdCBxeGxfYm9fbGlzdCB7CisJc3RydWN0IGxpc3RfaGVhZCBs aGVhZDsKKwlzdHJ1Y3QgcXhsX2JvICpibzsKK307CisKK3N0cnVjdCBxeGxfcmVsb2NfbGlzdCB7 CisJc3RydWN0IGxpc3RfaGVhZCBib3M7Cit9OworCitzdHJ1Y3QgcXhsX2NydGMgeworCXN0cnVj dCBkcm1fY3J0YyBiYXNlOworCWludCBjdXJfeDsKKwlpbnQgY3VyX3k7Cit9OworCitzdHJ1Y3Qg cXhsX291dHB1dCB7CisJaW50IGluZGV4OworCXN0cnVjdCBkcm1fY29ubmVjdG9yIGJhc2U7CisJ c3RydWN0IGRybV9lbmNvZGVyIGVuYzsKK307CisKK3N0cnVjdCBxeGxfZnJhbWVidWZmZXIgewor CXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgYmFzZTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i ajsKK307CisKKyNkZWZpbmUgdG9fcXhsX2NydGMoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBx eGxfY3J0YywgYmFzZSkKKyNkZWZpbmUgZHJtX2Nvbm5lY3Rvcl90b19xeGxfb3V0cHV0KHgpIGNv bnRhaW5lcl9vZih4LCBzdHJ1Y3QgcXhsX291dHB1dCwgYmFzZSkKKyNkZWZpbmUgZHJtX2VuY29k ZXJfdG9fcXhsX291dHB1dCh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IHF4bF9vdXRwdXQsIGJh c2UpCisjZGVmaW5lIHRvX3F4bF9mcmFtZWJ1ZmZlcih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0 IHF4bF9mcmFtZWJ1ZmZlciwgYmFzZSkKKworc3RydWN0IHF4bF9tbWFuIHsKKwlzdHJ1Y3QgdHRt X2JvX2dsb2JhbF9yZWYgICAgICAgIGJvX2dsb2JhbF9yZWY7CisJc3RydWN0IGRybV9nbG9iYWxf cmVmZXJlbmNlCW1lbV9nbG9iYWxfcmVmOworCWJvb2wJCQkJbWVtX2dsb2JhbF9yZWZlcmVuY2Vk OworCXN0cnVjdCB0dG1fYm9fZGV2aWNlCQliZGV2OworfTsKKworc3RydWN0IHF4bF9tb2RlX2lu Zm8geworCWludCBudW1fbW9kZXM7CisJc3RydWN0IHF4bF9tb2RlICptb2RlczsKKwlib29sIG1v ZGVfY29uZmlnX2luaXRpYWxpemVkOworCisJLyogcG9pbnRlciB0byBmYmRldiBpbmZvIHN0cnVj dHVyZSAqLworCXN0cnVjdCBxeGxfZmJkZXYgKnFmYmRldjsKK307CisKKworc3RydWN0IHF4bF9t ZW1zbG90IHsKKwl1aW50OF90CQlnZW5lcmF0aW9uOworCXVpbnQ2NF90CXN0YXJ0X3BoeXNfYWRk cjsKKwl1aW50NjRfdAllbmRfcGh5c19hZGRyOworCXVpbnQ2NF90CWhpZ2hfYml0czsKK307CisK K2VudW0geworCVFYTF9SRUxFQVNFX0RSQVdBQkxFLAorCVFYTF9SRUxFQVNFX1NVUkZBQ0VfQ01E LAorCVFYTF9SRUxFQVNFX0NVUlNPUl9DTUQsCit9OworCisvKiBkcm1fIHByZWZpeCB0byBkaWZm ZXJlbnRpYXRlIGZyb20gcXhsX3JlbGVhc2VfaW5mbyBpbgorICogc3BpY2UtcHJvdG9jb2wvcXhs X2Rldi5oICovCisjZGVmaW5lIFFYTF9NQVhfUkVTIDk2CitzdHJ1Y3QgcXhsX3JlbGVhc2Ugewor CWludCBpZDsKKwlpbnQgdHlwZTsKKwlpbnQgYm9fY291bnQ7CisJdWludDMyX3QgcmVsZWFzZV9v ZmZzZXQ7CisJdWludDMyX3Qgc3VyZmFjZV9yZWxlYXNlX2lkOworCXN0cnVjdCBxeGxfYm8gKmJv c1tRWExfTUFYX1JFU107Cit9OworCitzdHJ1Y3QgcXhsX2ZiX2ltYWdlIHsKKwlzdHJ1Y3QgcXhs X2RldmljZSAqcWRldjsKKwl1aW50MzJfdCBwc2V1ZG9fcGFsZXR0ZVsxNl07CisJc3RydWN0IGZi X2ltYWdlIGZiX2ltYWdlOworCXVpbnQzMl90IHZpc3VhbDsKK307CisKK3N0cnVjdCBxeGxfZHJh d19maWxsIHsKKwlzdHJ1Y3QgcXhsX2RldmljZSAqcWRldjsKKwlzdHJ1Y3QgcXhsX3JlY3QgcmVj dDsKKwl1aW50MzJfdCBjb2xvcjsKKwl1aW50MTZfdCByb3A7Cit9OworCisvKgorICogRGVidWdm cworICovCitzdHJ1Y3QgcXhsX2RlYnVnZnMgeworCXN0cnVjdCBkcm1faW5mb19saXN0CSpmaWxl czsKKwl1bnNpZ25lZAkJbnVtX2ZpbGVzOworfTsKKworaW50IHF4bF9kZWJ1Z2ZzX2FkZF9maWxl cyhzdHJ1Y3QgcXhsX2RldmljZSAqcmRldiwKKwkJCSAgICAgc3RydWN0IGRybV9pbmZvX2xpc3Qg KmZpbGVzLAorCQkJICAgICB1bnNpZ25lZCBuZmlsZXMpOworaW50IHF4bF9kZWJ1Z2ZzX2ZlbmNl X2luaXQoc3RydWN0IHF4bF9kZXZpY2UgKnJkZXYpOwordm9pZCBxeGxfZGVidWdmc19yZW1vdmVf ZmlsZXMoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYpOworCitzdHJ1Y3QgcXhsX2RldmljZTsKKwor c3RydWN0IHF4bF9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UJCQkqZGV2OworCXN0cnVjdCBkcm1f ZGV2aWNlCQkqZGRldjsKKwlzdHJ1Y3QgcGNpX2RldgkJCSpwZGV2OworCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CisKKwlyZXNvdXJjZV9zaXplX3QgdnJhbV9iYXNlLCB2cmFtX3NpemU7CisJcmVzb3Vy Y2Vfc2l6ZV90IHN1cmZhY2VyYW1fYmFzZSwgc3VyZmFjZXJhbV9zaXplOworCXJlc291cmNlX3Np emVfdCByb21fYmFzZSwgcm9tX3NpemU7CisJc3RydWN0IHF4bF9yb20gKnJvbTsKKworCXN0cnVj dCBxeGxfbW9kZSAqbW9kZXM7CisJc3RydWN0IHF4bF9ibyAqbW9uaXRvcnNfY29uZmlnX2JvOwor CXN0cnVjdCBxeGxfbW9uaXRvcnNfY29uZmlnICptb25pdG9yc19jb25maWc7CisKKwkvKiBsYXN0 IHJlY2VpdmVkIGNsaWVudF9tb25pdG9yc19jb25maWcgKi8KKwlzdHJ1Y3QgcXhsX21vbml0b3Jz X2NvbmZpZyAqY2xpZW50X21vbml0b3JzX2NvbmZpZzsKKworCWludCBpb19iYXNlOworCXZvaWQg KnJhbTsKKwlzdHJ1Y3QgcXhsX21tYW4JCW1tYW47CisJc3RydWN0IHF4bF9nZW0JCWdlbTsKKwlz dHJ1Y3QgcXhsX21vZGVfaW5mbyBtb2RlX2luZm87CisKKwkvKgorCSAqIGxhc3QgY3JlYXRlZCBm cmFtZWJ1ZmZlciB3aXRoIGZiX2NyZWF0ZQorCSAqIG9ubHkgdXNlZCBieSBkZWJ1Z2ZzIGR1bWJw cG0KKwkgKi8KKwlzdHJ1Y3QgcXhsX2ZyYW1lYnVmZmVyICphY3RpdmVfdXNlcl9mcmFtZWJ1ZmZl cjsKKworCXN0cnVjdCBmYl9pbmZvCQkJKmZiZGV2X2luZm87CisJc3RydWN0IHF4bF9mcmFtZWJ1 ZmZlcgkqZmJkZXZfcWZiOworCXZvaWQgKnJhbV9waHlzaWNhbDsKKworCXN0cnVjdCBxeGxfcmlu ZyAqcmVsZWFzZV9yaW5nOworCXN0cnVjdCBxeGxfcmluZyAqY29tbWFuZF9yaW5nOworCXN0cnVj dCBxeGxfcmluZyAqY3Vyc29yX3Jpbmc7CisKKwlzdHJ1Y3QgcXhsX3JhbV9oZWFkZXIgKnJhbV9o ZWFkZXI7CisJYm9vbCBtb2RlX3NldDsKKworCWJvb2wgcHJpbWFyeV9jcmVhdGVkOworCisJc3Ry dWN0IHF4bF9tZW1zbG90CSptZW1fc2xvdHM7CisJdWludDhfdAkJbl9tZW1fc2xvdHM7CisKKwl1 aW50OF90CQltYWluX21lbV9zbG90OworCXVpbnQ4X3QJCXN1cmZhY2VzX21lbV9zbG90OworCXVp bnQ4X3QJCXNsb3RfaWRfYml0czsKKwl1aW50OF90CQlzbG90X2dlbl9iaXRzOworCXVpbnQ2NF90 CXZhX3Nsb3RfbWFzazsKKworCXN0cnVjdCBpZHIJcmVsZWFzZV9pZHI7CisJc3BpbmxvY2tfdCBy ZWxlYXNlX2lkcl9sb2NrOworCXN0cnVjdCBtdXRleAlhc3luY19pb19tdXRleDsKKwl1bnNpZ25l ZCBpbnQgbGFzdF9zZW50X2lvX2NtZDsKKworCS8qIGludGVycnVwdCBoYW5kbGluZyAqLworCWF0 b21pY190IGlycV9yZWNlaXZlZDsKKwlhdG9taWNfdCBpcnFfcmVjZWl2ZWRfZGlzcGxheTsKKwlh dG9taWNfdCBpcnFfcmVjZWl2ZWRfY3Vyc29yOworCWF0b21pY190IGlycV9yZWNlaXZlZF9pb19j bWQ7CisJdW5zaWduZWQgaXJxX3JlY2VpdmVkX2Vycm9yOworCXdhaXRfcXVldWVfaGVhZF90IGRp c3BsYXlfZXZlbnQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgY3Vyc29yX2V2ZW50OworCXdhaXRfcXVl dWVfaGVhZF90IGlvX2NtZF9ldmVudDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2xpZW50X21vbml0 b3JzX2NvbmZpZ193b3JrOworCisJLyogZGVidWdmcyAqLworCXN0cnVjdCBxeGxfZGVidWdmcwlk ZWJ1Z2ZzW1FYTF9ERUJVR0ZTX01BWF9DT01QT05FTlRTXTsKKwl1bnNpZ25lZAkJZGVidWdmc19j b3VudDsKKworCXN0cnVjdCBtdXRleAkJdXBkYXRlX2FyZWFfbXV0ZXg7CisKKwlzdHJ1Y3QgaWRy CXN1cmZfaWRfaWRyOworCXNwaW5sb2NrX3Qgc3VyZl9pZF9pZHJfbG9jazsKKwlpbnQgbGFzdF9h bGxvY2VkX3N1cmZfaWQ7CisKKwlzdHJ1Y3QgbXV0ZXggc3VyZl9ldmljdF9tdXRleDsKKwlzdHJ1 Y3QgaW9fbWFwcGluZyAqdnJhbV9tYXBwaW5nOworCXN0cnVjdCBpb19tYXBwaW5nICpzdXJmYWNl X21hcHBpbmc7CisKKwkvKiAqLworCXN0cnVjdCBtdXRleCByZWxlYXNlX211dGV4OworCXN0cnVj dCBxeGxfYm8gKmN1cnJlbnRfcmVsZWFzZV9ib1szXTsKKwlpbnQgY3VycmVudF9yZWxlYXNlX2Jv X29mZnNldFszXTsKKworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpnY19xdWV1ZTsKKwlzdHJ1 Y3Qgd29ya19zdHJ1Y3QgZ2Nfd29yazsKKworfTsKKworLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBm b3IgUVhMX0lORk9fSU8gKi8KK3ZvaWQgcXhsX2lvX2xvZyhzdHJ1Y3QgcXhsX2RldmljZSAqcWRl diwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCitleHRlcm4gc3RydWN0IGRybV9pb2N0bF9kZXNj IHF4bF9pb2N0bHNbXTsKK2V4dGVybiBpbnQgcXhsX21heF9pb2N0bDsKKworaW50IHF4bF9kcml2 ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK2lu dCBxeGxfZHJpdmVyX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworaW50IHF4bF9t b2Rlc2V0X2luaXQoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYpOwordm9pZCBxeGxfbW9kZXNldF9m aW5pKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2KTsKKworaW50IHF4bF9ib19pbml0KHN0cnVjdCBx eGxfZGV2aWNlICpxZGV2KTsKK3ZvaWQgcXhsX2JvX2Zpbmkoc3RydWN0IHF4bF9kZXZpY2UgKnFk ZXYpOworCitzdHJ1Y3QgcXhsX3JpbmcgKnF4bF9yaW5nX2NyZWF0ZShzdHJ1Y3QgcXhsX3Jpbmdf aGVhZGVyICpoZWFkZXIsCisJCQkJIGludCBlbGVtZW50X3NpemUsCisJCQkJIGludCBuX2VsZW1l bnRzLAorCQkJCSBpbnQgcHJvZF9ub3RpZnksCisJCQkJIHdhaXRfcXVldWVfaGVhZF90ICpwdXNo X2V2ZW50KTsKK3ZvaWQgcXhsX3JpbmdfZnJlZShzdHJ1Y3QgcXhsX3JpbmcgKnJpbmcpOworCitz dGF0aWMgaW5saW5lIHZvaWQgKgorcXhsX2ZiX3ZpcnR1YWxfYWRkcmVzcyhzdHJ1Y3QgcXhsX2Rl dmljZSAqcWRldiwgdW5zaWduZWQgbG9uZyBwaHlzaWNhbCkKK3sKKwlRWExfSU5GTyhxZGV2LCAi bm90IGltcGxlbWVudGVkICglbHUpXG4iLCBwaHlzaWNhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdWludDY0X3QKK3F4bF9ib19waHlzaWNhbF9hZGRyZXNzKHN0cnVjdCBxeGxf ZGV2aWNlICpxZGV2LCBzdHJ1Y3QgcXhsX2JvICpibywKKwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0 KQoreworCWludCBzbG90X2lkID0gYm8tPnR5cGUgPT0gUVhMX0dFTV9ET01BSU5fVlJBTSA/IHFk ZXYtPm1haW5fbWVtX3Nsb3QgOiBxZGV2LT5zdXJmYWNlc19tZW1fc2xvdDsKKwlzdHJ1Y3QgcXhs X21lbXNsb3QgKnNsb3QgPSAmKHFkZXYtPm1lbV9zbG90c1tzbG90X2lkXSk7CisKKwkvKiBUT0RP IC0gbmVlZCB0byBob2xkIG9uZSBvZiB0aGUgbG9ja3MgdG8gcmVhZCB0Ym8ub2Zmc2V0ICovCisJ cmV0dXJuIHNsb3QtPmhpZ2hfYml0cyB8IChiby0+dGJvLm9mZnNldCArIG9mZnNldCk7Cit9CisK Ky8qIHF4bF9mYi5jICovCisjZGVmaW5lIFFYTEZCX0NPTk5fTElNSVQgMQorCitpbnQgcXhsX2Zi ZGV2X2luaXQoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYpOwordm9pZCBxeGxfZmJkZXZfZmluaShz dHJ1Y3QgcXhsX2RldmljZSAqcWRldik7CitpbnQgcXhsX2dldF9oYW5kbGVfZm9yX3ByaW1hcnlf ZmIoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsCisJCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVf cHJpdiwKKwkJCQkgIHVpbnQzMl90ICpoYW5kbGUpOworCisvKiBxeGxfZGlzcGxheS5jICovCitp bnQKK3F4bF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICAg c3RydWN0IHF4bF9mcmFtZWJ1ZmZlciAqcmZiLAorCQkgICAgIHN0cnVjdCBkcm1fbW9kZV9mYl9j bWQyICptb2RlX2NtZCwKKwkJICAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cit2b2lk IHF4bF9kaXNwbGF5X3JlYWRfY2xpZW50X21vbml0b3JzX2NvbmZpZyhzdHJ1Y3QgcXhsX2Rldmlj ZSAqcWRldik7Cit2b2lkIHF4bF9zZW5kX21vbml0b3JzX2NvbmZpZyhzdHJ1Y3QgcXhsX2Rldmlj ZSAqcWRldik7CisKKy8qIHVzZWQgYnkgcXhsX2RlYnVnZnMgb25seSAqLwordm9pZCBxeGxfY3J0 Y19zZXRfZnJvbV9tb25pdG9yc19jb25maWcoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYpOwordm9p ZCBxeGxfYWxsb2NfY2xpZW50X21vbml0b3JzX2NvbmZpZyhzdHJ1Y3QgcXhsX2RldmljZSAqcWRl diwgdW5zaWduZWQgY291bnQpOworCisvKiBxeGxfZ2VtLmMgKi8KK2ludCBxeGxfZ2VtX2luaXQo c3RydWN0IHF4bF9kZXZpY2UgKnFkZXYpOwordm9pZCBxeGxfZ2VtX2Zpbmkoc3RydWN0IHF4bF9k ZXZpY2UgKnFkZXYpOworaW50IHF4bF9nZW1fb2JqZWN0X2NyZWF0ZShzdHJ1Y3QgcXhsX2Rldmlj ZSAqcWRldiwgaW50IHNpemUsCisJCQkgIGludCBhbGlnbm1lbnQsIGludCBpbml0aWFsX2RvbWFp biwKKwkJCSAgYm9vbCBkaXNjYXJkYWJsZSwgYm9vbCBrZXJuZWwsCisJCQkgIHN0cnVjdCBxeGxf c3VyZmFjZSAqc3VyZiwKKwkJCSAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICoqb2JqKTsKK2ludCBx eGxfZ2VtX29iamVjdF9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHVpbnQzMl90IHBp bl9kb21haW4sCisJCQkgIHVpbnQ2NF90ICpncHVfYWRkcik7Cit2b2lkIHF4bF9nZW1fb2JqZWN0 X3VucGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK2ludCBxeGxfZ2VtX29iamVjdF9j cmVhdGVfd2l0aF9oYW5kbGUoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsCisJCQkJICAgICAgc3Ry dWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJICAgICAgdTMyIGRvbWFpbiwKKwkJCQkgICAg ICBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICBzdHJ1Y3QgcXhsX3N1cmZhY2UgKnN1cmYsCisJCQkJ ICAgICAgc3RydWN0IHF4bF9ibyAqKnFvYmosCisJCQkJICAgICAgdWludDMyX3QgKmhhbmRsZSk7 CitpbnQgcXhsX2dlbV9vYmplY3RfaW5pdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cit2 b2lkIHF4bF9nZW1fb2JqZWN0X2ZyZWUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqKTsKK2lu dCBxeGxfZ2VtX29iamVjdF9vcGVuKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdik7Cit2b2lkIHF4bF9nZW1fb2JqZWN0X2Nsb3NlKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqLAorCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Cit2 b2lkIHF4bF9ib19mb3JjZV9kZWxldGUoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYpOworaW50IHF4 bF9ib19rbWFwKHN0cnVjdCBxeGxfYm8gKmJvLCB2b2lkICoqcHRyKTsKKworLyogcXhsX2R1bWIu YyAqLworaW50IHF4bF9tb2RlX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 LAorCQkJIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRybV9tb2RlX2NyZWF0 ZV9kdW1iICphcmdzKTsKK2ludCBxeGxfbW9kZV9kdW1iX2Rlc3Ryb3koc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYsCisJCQkgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgIHVpbnQzMl90 IGhhbmRsZSk7CitpbnQgcXhsX21vZGVfZHVtYl9tbWFwKHN0cnVjdCBkcm1fZmlsZSAqZmlscCwK KwkJICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICAgICB1aW50MzJfdCBoYW5k bGUsIHVpbnQ2NF90ICpvZmZzZXRfcCk7CisKKworLyogcXhsIHR0bSAqLworaW50IHF4bF90dG1f aW5pdChzdHJ1Y3QgcXhsX2RldmljZSAqcWRldik7Cit2b2lkIHF4bF90dG1fZmluaShzdHJ1Y3Qg cXhsX2RldmljZSAqcWRldik7CitpbnQgcXhsX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKKworLyogcXhsIGltYWdlICovCisKK2ludCBxeGxfaW1h Z2VfY3JlYXRlKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAorCQkgICAgIHN0cnVjdCBxeGxfcmVs ZWFzZSAqcmVsZWFzZSwKKwkJICAgICBzdHJ1Y3QgcXhsX2JvICoqaW1hZ2VfYm8sCisJCSAgICAg Y29uc3QgdWludDhfdCAqZGF0YSwKKwkJICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50 IGhlaWdodCwKKwkJICAgICBpbnQgZGVwdGgsIGludCBzdHJpZGUpOwordm9pZCBxeGxfdXBkYXRl X3NjcmVlbihzdHJ1Y3QgcXhsX2RldmljZSAqcXhsKTsKKworLyogcXhsIGlvIG9wZXJhdGlvbnMg KHF4bF9jbWQuYykgKi8KKwordm9pZCBxeGxfaW9fY3JlYXRlX3ByaW1hcnkoc3RydWN0IHF4bF9k ZXZpY2UgKnFkZXYsCisJCQkgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNp Z25lZCBvZmZzZXQsCisJCQkgICBzdHJ1Y3QgcXhsX2JvICpibyk7Cit2b2lkIHF4bF9pb19kZXN0 cm95X3ByaW1hcnkoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYpOwordm9pZCBxeGxfaW9fbWVtc2xv dF9hZGQoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsIHVpbnQ4X3QgaWQpOwordm9pZCBxeGxfaW9f bm90aWZ5X29vbShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldik7CisKK2ludCBxeGxfaW9fdXBkYXRl X2FyZWEoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsIHN0cnVjdCBxeGxfYm8gKnN1cmYsCisJCSAg ICAgICBjb25zdCBzdHJ1Y3QgcXhsX3JlY3QgKmFyZWEpOworCit2b2lkIHF4bF9pb19yZXNldChz dHJ1Y3QgcXhsX2RldmljZSAqcWRldik7Cit2b2lkIHF4bF9pb19tb25pdG9yc19jb25maWcoc3Ry dWN0IHF4bF9kZXZpY2UgKnFkZXYpOworaW50IHF4bF9yaW5nX3B1c2goc3RydWN0IHF4bF9yaW5n ICpyaW5nLCBjb25zdCB2b2lkICpuZXdfZWx0LCBib29sIGludGVycnVwdGlibGUpOwordm9pZCBx eGxfaW9fZmx1c2hfcmVsZWFzZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldik7Cit2b2lkIHF4bF9p b19mbHVzaF9zdXJmYWNlcyhzdHJ1Y3QgcXhsX2RldmljZSAqcWRldik7Cit2b2lkIHF4bF9yZWxl YXNlX3JpbmdfZmx1c2goc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYpOworCitpbnQgcXhsX3JlbGVh c2VfcmVzZXJ2ZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKKwkJCXN0cnVjdCBxeGxfcmVsZWFz ZSAqcmVsZWFzZSwgYm9vbCBub193YWl0KTsKK3ZvaWQgcXhsX3JlbGVhc2VfdW5yZXNlcnZlKHN0 cnVjdCBxeGxfZGV2aWNlICpxZGV2LAorCQkJICAgc3RydWN0IHF4bF9yZWxlYXNlICpyZWxlYXNl KTsKK3VuaW9uIHF4bF9yZWxlYXNlX2luZm8gKnF4bF9yZWxlYXNlX21hcChzdHJ1Y3QgcXhsX2Rl dmljZSAqcWRldiwKKwkJCQkJc3RydWN0IHF4bF9yZWxlYXNlICpyZWxlYXNlKTsKK3ZvaWQgcXhs X3JlbGVhc2VfdW5tYXAoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsCisJCSAgICAgICBzdHJ1Y3Qg cXhsX3JlbGVhc2UgKnJlbGVhc2UsCisJCSAgICAgICB1bmlvbiBxeGxfcmVsZWFzZV9pbmZvICpp bmZvKTsKKy8qCisgKiBxeGxfYm9fYWRkX3Jlc291cmNlLgorICoKKyAqLwordm9pZCBxeGxfYm9f YWRkX3Jlc291cmNlKHN0cnVjdCBxeGxfYm8gKm1haW5fYm8sIHN0cnVjdCBxeGxfYm8gKnJlc291 cmNlKTsKKworaW50IHF4bF9hbGxvY19zdXJmYWNlX3JlbGVhc2VfcmVzZXJ2ZWQoc3RydWN0IHF4 bF9kZXZpY2UgKnFkZXYsCisJCQkJICAgICAgIGVudW0gcXhsX3N1cmZhY2VfY21kX3R5cGUgc3Vy ZmFjZV9jbWRfdHlwZSwKKwkJCQkgICAgICAgc3RydWN0IHF4bF9yZWxlYXNlICpjcmVhdGVfcmVs LAorCQkJCSAgICAgICBzdHJ1Y3QgcXhsX3JlbGVhc2UgKipyZWxlYXNlKTsKK2ludCBxeGxfYWxs b2NfcmVsZWFzZV9yZXNlcnZlZChzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwgdW5zaWduZWQgbG9u ZyBzaXplLAorCQkJICAgICAgIGludCB0eXBlLCBzdHJ1Y3QgcXhsX3JlbGVhc2UgKipyZWxlYXNl LAorCQkJICAgICAgIHN0cnVjdCBxeGxfYm8gKipyYm8pOworaW50IHF4bF9mZW5jZV9yZWxlYXNl YWJsZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKKwkJCSAgc3RydWN0IHF4bF9yZWxlYXNlICpy ZWxlYXNlKTsKK2ludAorcXhsX3B1c2hfY29tbWFuZF9yaW5nX3JlbGVhc2Uoc3RydWN0IHF4bF9k ZXZpY2UgKnFkZXYsIHN0cnVjdCBxeGxfcmVsZWFzZSAqcmVsZWFzZSwKKwkJCSAgICAgIHVpbnQz Ml90IHR5cGUsIGJvb2wgaW50ZXJydXB0aWJsZSk7CitpbnQKK3F4bF9wdXNoX2N1cnNvcl9yaW5n X3JlbGVhc2Uoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsIHN0cnVjdCBxeGxfcmVsZWFzZSAqcmVs ZWFzZSwKKwkJCSAgICAgdWludDMyX3QgdHlwZSwgYm9vbCBpbnRlcnJ1cHRpYmxlKTsKK2ludCBx eGxfYWxsb2NfYm9fcmVzZXJ2ZWQoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsIHVuc2lnbmVkIGxv bmcgc2l6ZSwKKwkJCSAgc3RydWN0IHF4bF9ibyAqKl9ibyk7CisvKiBxeGwgZHJhd2luZyBjb21t YW5kcyAqLworCit2b2lkIHF4bF9kcmF3X29wYXF1ZV9mYihjb25zdCBzdHJ1Y3QgcXhsX2ZiX2lt YWdlICpxeGxfZmJfaW1hZ2UsCisJCQlpbnQgc3RyaWRlIC8qIGZpbGxlZCBpbiBpZiAwICovKTsK Kwordm9pZCBxeGxfZHJhd19kaXJ0eV9mYihzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKKwkJICAg ICAgIHN0cnVjdCBxeGxfZnJhbWVidWZmZXIgKnF4bF9mYiwKKwkJICAgICAgIHN0cnVjdCBxeGxf Ym8gKmJvLAorCQkgICAgICAgdW5zaWduZWQgZmxhZ3MsIHVuc2lnbmVkIGNvbG9yLAorCQkgICAg ICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzLAorCQkgICAgICAgdW5zaWduZWQgbnVtX2Ns aXBzLCBpbnQgaW5jKTsKKwordm9pZCBxeGxfZHJhd19maWxsKHN0cnVjdCBxeGxfZHJhd19maWxs ICpxeGxfZHJhd19maWxsX3JlYyk7CisKK3ZvaWQgcXhsX2RyYXdfY29weWFyZWEoc3RydWN0IHF4 bF9kZXZpY2UgKnFkZXYsCisJCSAgICAgICB1MzIgd2lkdGgsIHUzMiBoZWlnaHQsCisJCSAgICAg ICB1MzIgc3gsIHUzMiBzeSwKKwkJICAgICAgIHUzMiBkeCwgdTMyIGR5KTsKKwordWludDY0X3QK K3F4bF9yZWxlYXNlX2FsbG9jKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LCBpbnQgdHlwZSwKKwkJ ICBzdHJ1Y3QgcXhsX3JlbGVhc2UgKipyZXQpOworCit2b2lkIHF4bF9yZWxlYXNlX2ZyZWUoc3Ry dWN0IHF4bF9kZXZpY2UgKnFkZXYsCisJCSAgICAgIHN0cnVjdCBxeGxfcmVsZWFzZSAqcmVsZWFz ZSk7Cit2b2lkIHF4bF9yZWxlYXNlX2FkZF9yZXMoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsCisJ CQkgc3RydWN0IHF4bF9yZWxlYXNlICpyZWxlYXNlLAorCQkJIHN0cnVjdCBxeGxfYm8gKmJvKTsK Ky8qIHVzZWQgYnkgcXhsX2RlYnVnZnNfcmVsZWFzZSAqLworc3RydWN0IHF4bF9yZWxlYXNlICpx eGxfcmVsZWFzZV9mcm9tX2lkX2xvY2tlZChzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKKwkJCQkJ CSAgIHVpbnQ2NF90IGlkKTsKKworYm9vbCBxeGxfcXVldWVfZ2FyYmFnZV9jb2xsZWN0KHN0cnVj dCBxeGxfZGV2aWNlICpxZGV2LCBib29sIGZsdXNoKTsKK2ludCBxeGxfZ2FyYmFnZV9jb2xsZWN0 KHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2KTsKKworLyogZGVidWdmcyAqLworCitpbnQgcXhsX2Rl YnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7Cit2b2lkIHF4bF9kZWJ1Z2ZzX3Rh a2Vkb3duKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKKworLyogcXhsX2lycS5jICovCitpbnQg cXhsX2lycV9pbml0KHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2KTsKK2lycXJldHVybl90IHF4bF9p cnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpOworCisvKiBxeGxfZmIuYyAqLworaW50IHF4bF9mYl9p bml0KHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2KTsKKworaW50IHF4bF9kZWJ1Z2ZzX2FkZF9maWxl cyhzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKKwkJCSAgc3RydWN0IGRybV9pbmZvX2xpc3QgKmZp bGVzLAorCQkJICB1bnNpZ25lZCBuZmlsZXMpOworCitpbnQgcXhsX3N1cmZhY2VfaWRfYWxsb2Mo c3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsCisJCQkgc3RydWN0IHF4bF9ibyAqc3VyZik7Cit2b2lk IHF4bF9zdXJmYWNlX2lkX2RlYWxsb2Moc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsCisJCQkgICAg dWludDMyX3Qgc3VyZmFjZV9pZCk7CitpbnQgcXhsX2h3X3N1cmZhY2VfYWxsb2Moc3RydWN0IHF4 bF9kZXZpY2UgKnFkZXYsCisJCQkgc3RydWN0IHF4bF9ibyAqc3VyZiwKKwkJCSBzdHJ1Y3QgdHRt X21lbV9yZWcgKm1lbSk7CitpbnQgcXhsX2h3X3N1cmZhY2VfZGVhbGxvYyhzdHJ1Y3QgcXhsX2Rl dmljZSAqcWRldiwKKwkJCSAgIHN0cnVjdCBxeGxfYm8gKnN1cmYpOworCitpbnQgcXhsX2JvX2No ZWNrX2lkKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LCBzdHJ1Y3QgcXhsX2JvICpibyk7CisKK3N0 cnVjdCBxeGxfZHJ2X3N1cmZhY2UgKgorcXhsX3N1cmZhY2VfbG9va3VwKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIGludCBzdXJmYWNlX2lkKTsKK3ZvaWQgcXhsX3N1cmZhY2VfZXZpY3Qoc3RydWN0 IHF4bF9kZXZpY2UgKnFkZXYsIHN0cnVjdCBxeGxfYm8gKnN1cmYsIGJvb2wgZnJlZWluZyk7Citp bnQgcXhsX3VwZGF0ZV9zdXJmYWNlKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LCBzdHJ1Y3QgcXhs X2JvICpzdXJmKTsKKworLyogcXhsX2ZlbmNlLmMgKi8KK2ludCBxeGxfZmVuY2VfYWRkX3JlbGVh c2Uoc3RydWN0IHF4bF9mZW5jZSAqcWZlbmNlLCB1aW50MzJfdCByZWxfaWQpOworaW50IHF4bF9m ZW5jZV9yZW1vdmVfcmVsZWFzZShzdHJ1Y3QgcXhsX2ZlbmNlICpxZmVuY2UsIHVpbnQzMl90IHJl bF9pZCk7CitpbnQgcXhsX2ZlbmNlX2luaXQoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsIHN0cnVj dCBxeGxfZmVuY2UgKnFmZW5jZSk7Cit2b2lkIHF4bF9mZW5jZV9maW5pKHN0cnVjdCBxeGxfZmVu Y2UgKnFmZW5jZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3F4bC9x eGxfZHVtYi5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfZHVtYi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjUzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vcXhsL3F4bF9kdW1iLmMKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdo dCAyMDEzIFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgor ICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUg QWlybGllCisgKiAgICAgICAgICBBbG9uIExldnkKKyAqLworCisjaW5jbHVkZSAicXhsX2Rydi5o IgorI2luY2x1ZGUgInF4bF9vYmplY3QuaCIKKworLyogZHVtYiBpb2N0bHMgaW1wbGVtZW50YXRp b24gKi8KKworaW50IHF4bF9tb2RlX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2LAorCQkJICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRybV9t b2RlX2NyZWF0ZV9kdW1iICphcmdzKQoreworCXN0cnVjdCBxeGxfZGV2aWNlICpxZGV2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcXhsX2JvICpxb2JqOworCXVpbnQzMl90IGhhbmRsZTsK KwlpbnQgcjsKKworCWFyZ3MtPnBpdGNoID0gYXJncy0+d2lkdGggKiAoKGFyZ3MtPmJwcCArIDEp IC8gOCk7CisJYXJncy0+c2l6ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0OworCWFyZ3Mt PnNpemUgPSBBTElHTihhcmdzLT5zaXplLCBQQUdFX1NJWkUpOworCisJciA9IHF4bF9nZW1fb2Jq ZWN0X2NyZWF0ZV93aXRoX2hhbmRsZShxZGV2LCBmaWxlX3ByaXYsCisJCQkJCSAgICAgIFFYTF9H RU1fRE9NQUlOX1ZSQU0sCisJCQkJCSAgICAgIGFyZ3MtPnNpemUsIE5VTEwsICZxb2JqLAorCQkJ CQkgICAgICAmaGFuZGxlKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJYXJncy0+aGFuZGxlID0g aGFuZGxlOworCXJldHVybiAwOworfQorCitpbnQgcXhsX21vZGVfZHVtYl9kZXN0cm95KHN0cnVj dCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAor CQkJICAgICB1aW50MzJfdCBoYW5kbGUpCit7CisJcmV0dXJuIGRybV9nZW1faGFuZGxlX2RlbGV0 ZShmaWxlX3ByaXYsIGhhbmRsZSk7Cit9CisKK2ludCBxeGxfbW9kZV9kdW1iX21tYXAoc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYsCisJCSAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAor CQkgICAgICAgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCAqb2Zmc2V0X3ApCit7CisJc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpnb2JqOworCXN0cnVjdCBxeGxfYm8gKnFvYmo7CisKKwlCVUdfT04o IW9mZnNldF9wKTsKKwlnb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2 LCBoYW5kbGUpOworCWlmIChnb2JqID09IE5VTEwpCisJCXJldHVybiAtRU5PRU5UOworCXFvYmog PSBnZW1fdG9fcXhsX2JvKGdvYmopOworCSpvZmZzZXRfcCA9IHF4bF9ib19tbWFwX29mZnNldChx b2JqKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnb2JqKTsKKwlyZXR1 cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2ZiLmMgYi9kcml2 ZXJzL2dwdS9kcm0vcXhsL3F4bF9mYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjBjNTA2N2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9m Yi5jCkBAIC0wLDAgKzEsNTY3IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTMgUmVkIEhhdAor ICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29m dHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcK KyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRo b3JzOgorICogICAgIERhdmlkIEFpcmxpZQorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJk cm0vZHJtLmgiCisjaW5jbHVkZSAiZHJtL2RybV9jcnRjLmgiCisjaW5jbHVkZSAiZHJtL2RybV9j cnRjX2hlbHBlci5oIgorI2luY2x1ZGUgInF4bF9kcnYuaCIKKworI2luY2x1ZGUgInF4bF9vYmpl Y3QuaCIKKyNpbmNsdWRlICJkcm1fZmJfaGVscGVyLmgiCisKKyNkZWZpbmUgUVhMX0RJUlRZX0RF TEFZIChIWiAvIDMwKQorCitzdHJ1Y3QgcXhsX2ZiZGV2IHsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBl ciBoZWxwZXI7CisJc3RydWN0IHF4bF9mcmFtZWJ1ZmZlcglxZmI7CisJc3RydWN0IGxpc3RfaGVh ZAlmYmRldl9saXN0OworCXN0cnVjdCBxeGxfZGV2aWNlCSpxZGV2OworCisJdm9pZCAqc2hhZG93 OworCWludCBzaXplOworCisJLyogZGlydHkgbWVtb3J5IGxvZ2dpbmcgKi8KKwlzdHJ1Y3Qgewor CQlzcGlubG9ja190IGxvY2s7CisJCWJvb2wgYWN0aXZlOworCQl1bnNpZ25lZCB4MTsKKwkJdW5z aWduZWQgeTE7CisJCXVuc2lnbmVkIHgyOworCQl1bnNpZ25lZCB5MjsKKwl9IGRpcnR5OworfTsK Kworc3RhdGljIHZvaWQgcXhsX2ZiX2ltYWdlX2luaXQoc3RydWN0IHF4bF9mYl9pbWFnZSAqcXhs X2ZiX2ltYWdlLAorCQkJICAgICAgc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsIHN0cnVjdCBmYl9p bmZvICppbmZvLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSkKK3sKKwlx eGxfZmJfaW1hZ2UtPnFkZXYgPSBxZGV2OworCWlmIChpbmZvKSB7CisJCXF4bF9mYl9pbWFnZS0+ dmlzdWFsID0gaW5mby0+Zml4LnZpc3VhbDsKKwkJaWYgKHF4bF9mYl9pbWFnZS0+dmlzdWFsID09 IEZCX1ZJU1VBTF9UUlVFQ09MT1IgfHwKKwkJICAgIHF4bF9mYl9pbWFnZS0+dmlzdWFsID09IEZC X1ZJU1VBTF9ESVJFQ1RDT0xPUikKKwkJCW1lbWNweSgmcXhsX2ZiX2ltYWdlLT5wc2V1ZG9fcGFs ZXR0ZSwKKwkJCSAgICAgICBpbmZvLT5wc2V1ZG9fcGFsZXR0ZSwKKwkJCSAgICAgICBzaXplb2Yo cXhsX2ZiX2ltYWdlLT5wc2V1ZG9fcGFsZXR0ZSkpOworCX0gZWxzZSB7CisJCSAvKiBmYWxsYmFj ayAqLworCQlpZiAoaW1hZ2UtPmRlcHRoID09IDEpCisJCQlxeGxfZmJfaW1hZ2UtPnZpc3VhbCA9 IEZCX1ZJU1VBTF9NT05PMTA7CisJCWVsc2UKKwkJCXF4bF9mYl9pbWFnZS0+dmlzdWFsID0gRkJf VklTVUFMX0RJUkVDVENPTE9SOworCX0KKwlpZiAoaW1hZ2UpIHsKKwkJbWVtY3B5KCZxeGxfZmJf aW1hZ2UtPmZiX2ltYWdlLCBpbWFnZSwKKwkJICAgICAgIHNpemVvZihxeGxfZmJfaW1hZ2UtPmZi X2ltYWdlKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBxeGxfZmJfZGlydHlfZmx1c2goc3RydWN0 IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHF4bF9mYmRldiAqcWZiZGV2ID0gaW5mby0+cGFy OworCXN0cnVjdCBxeGxfZGV2aWNlICpxZGV2ID0gcWZiZGV2LT5xZGV2OworCXN0cnVjdCBxeGxf ZmJfaW1hZ2UgcXhsX2ZiX2ltYWdlOworCXN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UgPSAmcXhsX2Zi X2ltYWdlLmZiX2ltYWdlOworCXUzMiB4MSwgeDIsIHkxLCB5MjsKKworCS8qIFRPRE86IGhhcmQg Y29kaW5nIDMyIGJwcCAqLworCWludCBzdHJpZGUgPSBxZmJkZXYtPnFmYi5iYXNlLnBpdGNoZXNb MF0gKiA0OworCisJeDEgPSBxZmJkZXYtPmRpcnR5LngxOworCXgyID0gcWZiZGV2LT5kaXJ0eS54 MjsKKwl5MSA9IHFmYmRldi0+ZGlydHkueTE7CisJeTIgPSBxZmJkZXYtPmRpcnR5LnkyOworCS8q CisJICogd2UgYXJlIHVzaW5nIGEgc2hhZG93IGRyYXcgYnVmZmVyLCBhdCBxZGV2LT5zdXJmYWNl MF9zaGFkb3cKKwkgKi8KKwlxeGxfaW9fbG9nKHFkZXYsICJkaXJ0eSB4WyVkLCAlZF0sIHlbJWQs ICVkXSIsIHgxLCB4MiwgeTEsIHkyKTsKKwlpbWFnZS0+ZHggPSB4MTsKKwlpbWFnZS0+ZHkgPSB5 MTsKKwlpbWFnZS0+d2lkdGggPSB4MiAtIHgxOworCWltYWdlLT5oZWlnaHQgPSB5MiAtIHkxOwor CWltYWdlLT5mZ19jb2xvciA9IDB4ZmZmZmZmZmY7IC8qIHVudXNlZCwganVzdCB0byBhdm9pZCB1 bmluaXRpYWxpemVkCisJCQkJCSB3YXJuaW5ncyAqLworCWltYWdlLT5iZ19jb2xvciA9IDA7CisJ aW1hZ2UtPmRlcHRoID0gMzI7CSAgICAgLyogVE9ETzogdGFrZSBmcm9tIHNvbWV3aGVyZT8gKi8K KwlpbWFnZS0+Y21hcC5zdGFydCA9IDA7CisJaW1hZ2UtPmNtYXAubGVuID0gMDsKKwlpbWFnZS0+ Y21hcC5yZWQgPSBOVUxMOworCWltYWdlLT5jbWFwLmdyZWVuID0gTlVMTDsKKwlpbWFnZS0+Y21h cC5ibHVlID0gTlVMTDsKKwlpbWFnZS0+Y21hcC50cmFuc3AgPSBOVUxMOworCWltYWdlLT5kYXRh ID0gcWZiZGV2LT5zaGFkb3cgKyAoeDEgKiA0KSArIChzdHJpZGUgKiB5MSk7CisKKwlxeGxfZmJf aW1hZ2VfaW5pdCgmcXhsX2ZiX2ltYWdlLCBxZGV2LCBpbmZvLCBOVUxMKTsKKwlxeGxfZHJhd19v cGFxdWVfZmIoJnF4bF9mYl9pbWFnZSwgc3RyaWRlKTsKKwlxZmJkZXYtPmRpcnR5LngxID0gMDsK KwlxZmJkZXYtPmRpcnR5LngyID0gMDsKKwlxZmJkZXYtPmRpcnR5LnkxID0gMDsKKwlxZmJkZXYt PmRpcnR5LnkyID0gMDsKK30KKworc3RhdGljIHZvaWQgcXhsX2RlZmVycmVkX2lvKHN0cnVjdCBm Yl9pbmZvICppbmZvLAorCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0KQoreworCXN0 cnVjdCBxeGxfZmJkZXYgKnFmYmRldiA9IGluZm8tPnBhcjsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0 LCBlbmQsIG1pbiwgbWF4OworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCB5MSwgeTI7CisKKwlt aW4gPSBVTE9OR19NQVg7CisJbWF4ID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsIHBh Z2VsaXN0LCBscnUpIHsKKwkJc3RhcnQgPSBwYWdlLT5pbmRleCA8PCBQQUdFX1NISUZUOworCQll bmQgPSBzdGFydCArIFBBR0VfU0laRSAtIDE7CisJCW1pbiA9IG1pbihtaW4sIHN0YXJ0KTsKKwkJ bWF4ID0gbWF4KG1heCwgZW5kKTsKKwl9CisKKwlpZiAobWluIDwgbWF4KSB7CisJCXkxID0gbWlu IC8gaW5mby0+Zml4LmxpbmVfbGVuZ3RoOworCQl5MiA9IChtYXggLyBpbmZvLT5maXgubGluZV9s ZW5ndGgpICsgMTsKKworCQkvKiBUT0RPOiBhZGQgc3BpbiBsb2NrPyAqLworCQkvKiBzcGluX2xv Y2tfaXJxc2F2ZSgmcWZiZGV2LT5kaXJ0eS5sb2NrLCBmbGFncyk7ICovCisJCXFmYmRldi0+ZGly dHkueDEgPSAwOworCQlxZmJkZXYtPmRpcnR5LnkxID0geTE7CisJCXFmYmRldi0+ZGlydHkueDIg PSBpbmZvLT52YXIueHJlczsKKwkJcWZiZGV2LT5kaXJ0eS55MiA9IHkyOworCQkvKiBzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZxZmJkZXYtPmRpcnR5LmxvY2ssIGZsYWdzKTsgKi8KKwl9CisKKwlx eGxfZmJfZGlydHlfZmx1c2goaW5mbyk7Cit9OworCisKK3N0cnVjdCBmYl9kZWZlcnJlZF9pbyBx eGxfZGVmaW8gPSB7CisJLmRlbGF5CQk9IFFYTF9ESVJUWV9ERUxBWSwKKwkuZGVmZXJyZWRfaW8J PSBxeGxfZGVmZXJyZWRfaW8sCit9OworCitzdGF0aWMgdm9pZCBxeGxfZmJfZmlsbHJlY3Qoc3Ry dWN0IGZiX2luZm8gKmluZm8sCisJCQkgICAgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpmYl9y ZWN0KQoreworCXN0cnVjdCBxeGxfZmJkZXYgKnFmYmRldiA9IGluZm8tPnBhcjsKKwlzdHJ1Y3Qg cXhsX2RldmljZSAqcWRldiA9IHFmYmRldi0+cWRldjsKKwlzdHJ1Y3QgcXhsX3JlY3QgcmVjdDsK Kwl1aW50MzJfdCBjb2xvcjsKKwlpbnQgeCA9IGZiX3JlY3QtPmR4OworCWludCB5ID0gZmJfcmVj dC0+ZHk7CisJaW50IHdpZHRoID0gZmJfcmVjdC0+d2lkdGg7CisJaW50IGhlaWdodCA9IGZiX3Jl Y3QtPmhlaWdodDsKKwl1aW50MTZfdCByb3A7CisJc3RydWN0IHF4bF9kcmF3X2ZpbGwgcXhsX2Ry YXdfZmlsbF9yZWM7CisKKwlpZiAoaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfVFJVRUNP TE9SIHx8CisJICAgIGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX0RJUkVDVENPTE9SKQor CQljb2xvciA9ICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW2ZiX3JlY3QtPmNvbG9y XTsKKwllbHNlCisJCWNvbG9yID0gZmJfcmVjdC0+Y29sb3I7CisJcmVjdC5sZWZ0ID0geDsKKwly ZWN0LnJpZ2h0ID0geCArIHdpZHRoOworCXJlY3QudG9wID0geTsKKwlyZWN0LmJvdHRvbSA9IHkg KyBoZWlnaHQ7CisJc3dpdGNoIChmYl9yZWN0LT5yb3ApIHsKKwljYXNlIFJPUF9YT1I6CisJCXJv cCA9IFNQSUNFX1JPUERfT1BfWE9SOworCQlicmVhazsKKwljYXNlIFJPUF9DT1BZOgorCQlyb3Ag PSBTUElDRV9ST1BEX09QX1BVVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZXJyKCJxeGxf ZmJfZmlsbHJlY3QoKTogdW5rbm93biByb3AsICIKKwkJICAgICAgICJkZWZhdWx0aW5nIHRvIFNQ SUNFX1JPUERfT1BfUFVUXG4iKTsKKwkJcm9wID0gU1BJQ0VfUk9QRF9PUF9QVVQ7CisJfQorCXF4 bF9kcmF3X2ZpbGxfcmVjLnFkZXYgPSBxZGV2OworCXF4bF9kcmF3X2ZpbGxfcmVjLnJlY3QgPSBy ZWN0OworCXF4bF9kcmF3X2ZpbGxfcmVjLmNvbG9yID0gY29sb3I7CisJcXhsX2RyYXdfZmlsbF9y ZWMucm9wID0gcm9wOworCWlmICghZHJtX2Nhbl9zbGVlcCgpKSB7CisJCXF4bF9pb19sb2cocWRl diwKKwkJCSIlczogVE9ETyB1c2UgUkNVLCBteXN0ZXJpb3VzIGxvY2tzIHdpdGggc3Bpbl9sb2Nr XG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCXF4bF9kcmF3X2ZpbGwoJnF4bF9k cmF3X2ZpbGxfcmVjKTsKK30KKworc3RhdGljIHZvaWQgcXhsX2ZiX2NvcHlhcmVhKHN0cnVjdCBm Yl9pbmZvICppbmZvLAorCQkJICAgIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqcmVnaW9uKQor eworCXN0cnVjdCBxeGxfZmJkZXYgKnFmYmRldiA9IGluZm8tPnBhcjsKKworCXF4bF9kcmF3X2Nv cHlhcmVhKHFmYmRldi0+cWRldiwKKwkJCSAgcmVnaW9uLT53aWR0aCwgcmVnaW9uLT5oZWlnaHQs CisJCQkgIHJlZ2lvbi0+c3gsIHJlZ2lvbi0+c3ksCisJCQkgIHJlZ2lvbi0+ZHgsIHJlZ2lvbi0+ ZHkpOworfQorCitzdGF0aWMgdm9pZCBxeGxfZmJfaW1hZ2VibGl0X3NhZmUoc3RydWN0IHF4bF9m Yl9pbWFnZSAqcXhsX2ZiX2ltYWdlKQoreworCXF4bF9kcmF3X29wYXF1ZV9mYihxeGxfZmJfaW1h Z2UsIDApOworfQorCitzdGF0aWMgdm9pZCBxeGxfZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZv ICppbmZvLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQoreworCXN0cnVj dCBxeGxfZmJkZXYgKnFmYmRldiA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgcXhsX2RldmljZSAqcWRl diA9IHFmYmRldi0+cWRldjsKKwlzdHJ1Y3QgcXhsX2ZiX2ltYWdlIHF4bF9mYl9pbWFnZTsKKwor CWlmICghZHJtX2Nhbl9zbGVlcCgpKSB7CisJCS8qIHdlIGNhbm5vdCBkbyBhbnkgdHRtX2JvIGFs bG9jYXRpb24gc2luY2UgdGhhdCB3aWxsIGZhaWwgb24KKwkJICogaW9yZW1hcF93Yy4uX19nZXRf dm1fYXJlYV9ub2RlLCBzbyBxdWV1ZSB0aGUgd29yayBpdGVtCisJCSAqIGluc3RlYWQgVGhpcyBj YW4gaGFwcGVuIGZyb20gcHJpbnRrIGluc2lkZSBhbiBpbnRlcnJ1cHQKKwkJICogY29udGV4dCwg aS5lLjogc21wX2FwaWNfdGltZXJfaW50ZXJydXB0Li5jaGVja19jcHVfc3RhbGwgKi8KKwkJcXhs X2lvX2xvZyhxZGV2LAorCQkJIiVzOiBUT0RPIHVzZSBSQ1UsIG15c3RlcmlvdXMgbG9ja3Mgd2l0 aCBzcGluX2xvY2tcbiIsCisJCQkgICBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBl bnN1cmUgcHJvcGVyIG9yZGVyIG9mIHJlbmRlcmluZyBvcGVyYXRpb25zIC0gVE9ETzogbXVzdCBk byB0aGlzCisJICogZm9yIGV2ZXJ5dGhpbmcuICovCisJcXhsX2ZiX2ltYWdlX2luaXQoJnF4bF9m Yl9pbWFnZSwgcWZiZGV2LT5xZGV2LCBpbmZvLCBpbWFnZSk7CisJcXhsX2ZiX2ltYWdlYmxpdF9z YWZlKCZxeGxfZmJfaW1hZ2UpOworfQorCitpbnQgcXhsX2ZiX2luaXQoc3RydWN0IHF4bF9kZXZp Y2UgKnFkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIHF4bGZi X29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmJfY2hlY2tfdmFyID0gZHJtX2Zi X2hlbHBlcl9jaGVja192YXIsCisJLmZiX3NldF9wYXIgPSBkcm1fZmJfaGVscGVyX3NldF9wYXIs IC8qIFRPRE86IGNvcHkgdm13Z2Z4ICovCisJLmZiX2ZpbGxyZWN0ID0gcXhsX2ZiX2ZpbGxyZWN0 LAorCS5mYl9jb3B5YXJlYSA9IHF4bF9mYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0ID0gcXhs X2ZiX2ltYWdlYmxpdCwKKwkuZmJfcGFuX2Rpc3BsYXkgPSBkcm1fZmJfaGVscGVyX3Bhbl9kaXNw bGF5LAorCS5mYl9ibGFuayA9IGRybV9mYl9oZWxwZXJfYmxhbmssCisJLmZiX3NldGNtYXAgPSBk cm1fZmJfaGVscGVyX3NldGNtYXAsCisJLmZiX2RlYnVnX2VudGVyID0gZHJtX2ZiX2hlbHBlcl9k ZWJ1Z19lbnRlciwKKwkuZmJfZGVidWdfbGVhdmUgPSBkcm1fZmJfaGVscGVyX2RlYnVnX2xlYXZl LAorfTsKKworc3RhdGljIHZvaWQgcXhsZmJfZGVzdHJveV9waW5uZWRfb2JqZWN0KHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqZ29iaikKK3sKKwlzdHJ1Y3QgcXhsX2JvICpxYm8gPSBnZW1fdG9fcXhs X2JvKGdvYmopOworCWludCByZXQ7CisKKwlyZXQgPSBxeGxfYm9fcmVzZXJ2ZShxYm8sIGZhbHNl KTsKKwlpZiAobGlrZWx5KHJldCA9PSAwKSkgeworCQlxeGxfYm9fa3VubWFwKHFibyk7CisJCXF4 bF9ib191bnBpbihxYm8pOworCQlxeGxfYm9fdW5yZXNlcnZlKHFibyk7CisJfQorCWRybV9nZW1f b2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdvYmopOworfQorCitpbnQgcXhsX2dldF9oYW5k bGVfZm9yX3ByaW1hcnlfZmIoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsCisJCQkJICBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQkgIHVpbnQzMl90ICpoYW5kbGUpCit7CisJaW50IHI7 CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqID0gcWRldi0+ZmJkZXZfcWZiLT5vYmo7CisK KwlCVUdfT04oIWdvYmopOworCS8qIGRybV9nZXRfaGFuZGxlX2NyZWF0ZSBhZGRzIGEgcmVmZXJl bmNlIC0gZ29vZCAqLworCXIgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBnb2Jq LCBoYW5kbGUpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBxeGxmYl9jcmVhdGVfcGlubmVkX29iamVjdChzdHJ1Y3QgcXhsX2ZiZGV2ICpxZmJkZXYs CisJCQkJICAgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kLAorCQkJCSAgICAg IHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKmdvYmpfcCkKK3sKKwlzdHJ1Y3QgcXhsX2RldmljZSAq cWRldiA9IHFmYmRldi0+cWRldjsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdvYmogPSBOVUxM OworCXN0cnVjdCBxeGxfYm8gKnFibyA9IE5VTEw7CisJaW50IHJldDsKKwlpbnQgYWxpZ25lZF9z aXplLCBzaXplOworCWludCBoZWlnaHQgPSBtb2RlX2NtZC0+aGVpZ2h0OworCWludCBicHA7CisJ aW50IGRlcHRoOworCisJZHJtX2ZiX2dldF9icHBfZGVwdGgobW9kZV9jbWQtPnBpeGVsX2Zvcm1h dCwgJmJwcCwgJmRlcHRoKTsKKworCXNpemUgPSBtb2RlX2NtZC0+cGl0Y2hlc1swXSAqIGhlaWdo dDsKKwlhbGlnbmVkX3NpemUgPSBBTElHTihzaXplLCBQQUdFX1NJWkUpOworCS8qIFRPRE86IHVu YWxsb2NhdGUgYW5kIHJlYWxsb2NhdGUgc3VyZmFjZTAgZm9yIHJlYWwuIEhhY2sgdG8ganVzdAor CSAqIGhhdmUgYSBsYXJnZSBlbm91Z2ggc3VyZmFjZTAgZm9yIDEwMjR4NzY4IFhvcmcgMzJicHAg bW9kZSAqLworCXJldCA9IHF4bF9nZW1fb2JqZWN0X2NyZWF0ZShxZGV2LCBhbGlnbmVkX3NpemUs IDAsCisJCQkJICAgIFFYTF9HRU1fRE9NQUlOX1NVUkZBQ0UsCisJCQkJICAgIGZhbHNlLCAvKiBp cyBkaXNjYXJkYWJsZSAqLworCQkJCSAgICBmYWxzZSwgLyogaXMga2VybmVsIChmYWxzZSBtZWFu cyBkZXZpY2UpICovCisJCQkJICAgIE5VTEwsCisJCQkJICAgICZnb2JqKTsKKwlpZiAocmV0KSB7 CisJCXByX2VycigiZmFpbGVkIHRvIGFsbG9jYXRlIGZyYW1lYnVmZmVyICglZClcbiIsCisJCSAg ICAgICBhbGlnbmVkX3NpemUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcWJvID0gZ2VtX3Rv X3F4bF9ibyhnb2JqKTsKKworCXFiby0+c3VyZi53aWR0aCA9IG1vZGVfY21kLT53aWR0aDsKKwlx Ym8tPnN1cmYuaGVpZ2h0ID0gbW9kZV9jbWQtPmhlaWdodDsKKwlxYm8tPnN1cmYuc3RyaWRlID0g bW9kZV9jbWQtPnBpdGNoZXNbMF07CisJcWJvLT5zdXJmLmZvcm1hdCA9IFNQSUNFX1NVUkZBQ0Vf Rk1UXzMyX3hSR0I7CisJcmV0ID0gcXhsX2JvX3Jlc2VydmUocWJvLCBmYWxzZSk7CisJaWYgKHVu bGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBvdXRfdW5yZWY7CisJcmV0ID0gcXhsX2JvX3Bpbihx Ym8sIFFYTF9HRU1fRE9NQUlOX1NVUkZBQ0UsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJcXhsX2Jv X3VucmVzZXJ2ZShxYm8pOworCQlnb3RvIG91dF91bnJlZjsKKwl9CisJcmV0ID0gcXhsX2JvX2tt YXAocWJvLCBOVUxMKTsKKwlxeGxfYm9fdW5yZXNlcnZlKHFibyk7IC8qIHVucmVzZXJ2ZSwgd2ls bCBiZSBtbWFwZWQgKi8KKwlpZiAocmV0KQorCQlnb3RvIG91dF91bnJlZjsKKworCSpnb2JqX3Ag PSBnb2JqOworCXJldHVybiAwOworb3V0X3VucmVmOgorCXF4bGZiX2Rlc3Ryb3lfcGlubmVkX29i amVjdChnb2JqKTsKKwkqZ29ial9wID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IHF4bGZiX2NyZWF0ZShzdHJ1Y3QgcXhsX2ZiZGV2ICpxZmJkZXYsCisJCQlzdHJ1Y3QgZHJt X2ZiX2hlbHBlcl9zdXJmYWNlX3NpemUgKnNpemVzKQoreworCXN0cnVjdCBxeGxfZGV2aWNlICpx ZGV2ID0gcWZiZGV2LT5xZGV2OworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCXN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiBtb2RlX2Nt ZDsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdvYmogPSBOVUxMOworCXN0cnVjdCBxeGxfYm8g KnFibyA9IE5VTEw7CisJc3RydWN0IGRldmljZSAqZGV2aWNlID0gJnFkZXYtPnBkZXYtPmRldjsK KwlpbnQgcmV0OworCWludCBzaXplOworCWludCBicHAgPSBzaXplcy0+c3VyZmFjZV9icHA7CisJ aW50IGRlcHRoID0gc2l6ZXMtPnN1cmZhY2VfZGVwdGg7CisJdm9pZCAqc2hhZG93OworCisJbW9k ZV9jbWQud2lkdGggPSBzaXplcy0+c3VyZmFjZV93aWR0aDsKKwltb2RlX2NtZC5oZWlnaHQgPSBz aXplcy0+c3VyZmFjZV9oZWlnaHQ7CisKKwltb2RlX2NtZC5waXRjaGVzWzBdID0gQUxJR04obW9k ZV9jbWQud2lkdGggKiAoKGJwcCArIDEpIC8gOCksIDY0KTsKKwltb2RlX2NtZC5waXhlbF9mb3Jt YXQgPSBkcm1fbW9kZV9sZWdhY3lfZmJfZm9ybWF0KGJwcCwgZGVwdGgpOworCisJcmV0ID0gcXhs ZmJfY3JlYXRlX3Bpbm5lZF9vYmplY3QocWZiZGV2LCAmbW9kZV9jbWQsICZnb2JqKTsKKwlxYm8g PSBnZW1fdG9fcXhsX2JvKGdvYmopOworCVFYTF9JTkZPKHFkZXYsICIlczogJWR4JWQgJWRcbiIs IF9fZnVuY19fLCBtb2RlX2NtZC53aWR0aCwKKwkJIG1vZGVfY21kLmhlaWdodCwgbW9kZV9jbWQu cGl0Y2hlc1swXSk7CisKKwlzaGFkb3cgPSB2bWFsbG9jKG1vZGVfY21kLnBpdGNoZXNbMF0gKiBt b2RlX2NtZC5oZWlnaHQpOworCS8qIFRPRE86IHdoYXQncyB0aGUgdXN1YWwgcmVzcG9uc2UgdG8g bWVtb3J5IGFsbG9jYXRpb24gZXJyb3JzPyAqLworCUJVR19PTighc2hhZG93KTsKKwlRWExfSU5G TyhxZGV2LAorCSJzdXJmYWNlMCBhdCBncHUgb2Zmc2V0ICVsbGQsIG1tYXBfb2Zmc2V0ICVsbGQg KHZpcnQgJXAsIHNoYWRvdyAlcClcbiIsCisJCSBxeGxfYm9fZ3B1X29mZnNldChxYm8pLAorCQkg cXhsX2JvX21tYXBfb2Zmc2V0KHFibyksCisJCSBxYm8tPmtwdHIsCisJCSBzaGFkb3cpOworCXNp emUgPSBtb2RlX2NtZC5waXRjaGVzWzBdICogbW9kZV9jbWQuaGVpZ2h0OworCisJaW5mbyA9IGZy YW1lYnVmZmVyX2FsbG9jKDAsIGRldmljZSk7CisJaWYgKGluZm8gPT0gTlVMTCkgeworCQlyZXQg PSAtRU5PTUVNOworCQlnb3RvIG91dF91bnJlZjsKKwl9CisKKwlpbmZvLT5wYXIgPSBxZmJkZXY7 CisKKwlxeGxfZnJhbWVidWZmZXJfaW5pdChxZGV2LT5kZGV2LCAmcWZiZGV2LT5xZmIsICZtb2Rl X2NtZCwgZ29iaik7CisKKwlmYiA9ICZxZmJkZXYtPnFmYi5iYXNlOworCisJLyogc2V0dXAgaGVs cGVyIHdpdGggZmIgZGF0YSAqLworCXFmYmRldi0+aGVscGVyLmZiID0gZmI7CisJcWZiZGV2LT5o ZWxwZXIuZmJkZXYgPSBpbmZvOworCXFmYmRldi0+c2hhZG93ID0gc2hhZG93OworCXN0cmNweShp bmZvLT5maXguaWQsICJxeGxkcm1mYiIpOworCisJZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChpbmZv LCBmYi0+cGl0Y2hlc1swXSwgZmItPmRlcHRoKTsKKworCWluZm8tPmZsYWdzID0gRkJJTkZPX0RF RkFVTFQ7CisJaW5mby0+ZmJvcHMgPSAmcXhsZmJfb3BzOworCisJLyoKKwkgKiBUT0RPOiB1c2lu ZyBnb2JqLT5zaXplIGluIHZhcmlvdXMgcGxhY2VzIGluIHRoaXMgZnVuY3Rpb24uIE5vdCBzdXJl CisJICogd2hhdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgc2l6ZXMgaXMu CisJICovCisJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBxZGV2LT52cmFtX2Jhc2U7IC8qIFRPRE8g LSBjb3JyZWN0PyAqLworCWluZm8tPmZpeC5zbWVtX2xlbiA9IGdvYmotPnNpemU7CisJaW5mby0+ c2NyZWVuX2Jhc2UgPSBxZmJkZXYtPnNoYWRvdzsKKwlpbmZvLT5zY3JlZW5fc2l6ZSA9IGdvYmot PnNpemU7CisKKwlkcm1fZmJfaGVscGVyX2ZpbGxfdmFyKGluZm8sICZxZmJkZXYtPmhlbHBlciwg c2l6ZXMtPmZiX3dpZHRoLAorCQkJICAgICAgIHNpemVzLT5mYl9oZWlnaHQpOworCisJLyogc2V0 dXAgYXBlcnR1cmUgYmFzZS9zaXplIGZvciB2ZXNhZmIgdGFrZW92ZXIgKi8KKwlpbmZvLT5hcGVy dHVyZXMgPSBhbGxvY19hcGVydHVyZXMoMSk7CisJaWYgKCFpbmZvLT5hcGVydHVyZXMpIHsKKwkJ cmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5yZWY7CisJfQorCWluZm8tPmFwZXJ0dXJlcy0+ cmFuZ2VzWzBdLmJhc2UgPSBxZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlOworCWluZm8t PmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLnNpemUgPSBxZGV2LT52cmFtX3NpemU7CisKKwlpbmZvLT5m aXgubW1pb19zdGFydCA9IDA7CisJaW5mby0+Zml4Lm1taW9fbGVuID0gMDsKKworCWlmIChpbmZv LT5zY3JlZW5fYmFzZSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9TUEM7CisJCWdvdG8gb3V0X3Vu cmVmOworCX0KKworCXJldCA9IGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCk7CisJ aWYgKHJldCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF91bnJlZjsKKwl9CisKKwlp bmZvLT5mYmRlZmlvID0gJnF4bF9kZWZpbzsKKwlmYl9kZWZlcnJlZF9pb19pbml0KGluZm8pOwor CisJcWRldi0+ZmJkZXZfaW5mbyA9IGluZm87CisJcWRldi0+ZmJkZXZfcWZiID0gJnFmYmRldi0+ cWZiOworCURSTV9JTkZPKCJmYiBtYXBwYWJsZSBhdCAweCVsWCwgc2l6ZSAlbHVcbiIsICBpbmZv LT5maXguc21lbV9zdGFydCwgKHVuc2lnbmVkIGxvbmcpaW5mby0+c2NyZWVuX3NpemUpOworCURS TV9JTkZPKCJmYjogZGVwdGggJWQsIHBpdGNoICVkLCB3aWR0aCAlZCwgaGVpZ2h0ICVkXG4iLCBm Yi0+ZGVwdGgsIGZiLT5waXRjaGVzWzBdLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQpOworCXJldHVy biAwOworCitvdXRfdW5yZWY6CisJaWYgKHFibykgeworCQlyZXQgPSBxeGxfYm9fcmVzZXJ2ZShx Ym8sIGZhbHNlKTsKKwkJaWYgKGxpa2VseShyZXQgPT0gMCkpIHsKKwkJCXF4bF9ib19rdW5tYXAo cWJvKTsKKwkJCXF4bF9ib191bnBpbihxYm8pOworCQkJcXhsX2JvX3VucmVzZXJ2ZShxYm8pOwor CQl9CisJfQorCWlmIChmYiAmJiByZXQpIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uo Z29iaik7CisJCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKKwkJa2ZyZWUoZmIpOworCX0K Kwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnb2JqKTsKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50IHF4bF9mYl9maW5kX29yX2NyZWF0ZV9zaW5nbGUoCisJCXN0cnVjdCBkcm1fZmJf aGVscGVyICpoZWxwZXIsCisJCXN0cnVjdCBkcm1fZmJfaGVscGVyX3N1cmZhY2Vfc2l6ZSAqc2l6 ZXMpCit7CisJc3RydWN0IHF4bF9mYmRldiAqcWZiZGV2ID0gKHN0cnVjdCBxeGxfZmJkZXYgKilo ZWxwZXI7CisJaW50IG5ld19mYiA9IDA7CisJaW50IHJldDsKKworCWlmICghaGVscGVyLT5mYikg eworCQlyZXQgPSBxeGxmYl9jcmVhdGUocWZiZGV2LCBzaXplcyk7CisJCWlmIChyZXQpCisJCQly ZXR1cm4gcmV0OworCQluZXdfZmIgPSAxOworCX0KKwlyZXR1cm4gbmV3X2ZiOworfQorCitzdGF0 aWMgaW50IHF4bF9mYmRldl9kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBx eGxfZmJkZXYgKnFmYmRldikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcXhs X2ZyYW1lYnVmZmVyICpxZmIgPSAmcWZiZGV2LT5xZmI7CisKKwlpZiAocWZiZGV2LT5oZWxwZXIu ZmJkZXYpIHsKKwkJaW5mbyA9IHFmYmRldi0+aGVscGVyLmZiZGV2OworCisJCXVucmVnaXN0ZXJf ZnJhbWVidWZmZXIoaW5mbyk7CisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisJfQorCWlm IChxZmItPm9iaikgeworCQlxeGxmYl9kZXN0cm95X3Bpbm5lZF9vYmplY3QocWZiLT5vYmopOwor CQlxZmItPm9iaiA9IE5VTEw7CisJfQorCWRybV9mYl9oZWxwZXJfZmluaSgmcWZiZGV2LT5oZWxw ZXIpOworCXZmcmVlKHFmYmRldi0+c2hhZG93KTsKKwlkcm1fZnJhbWVidWZmZXJfY2xlYW51cCgm cWZiLT5iYXNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRybV9mYl9oZWxw ZXJfZnVuY3MgcXhsX2ZiX2hlbHBlcl9mdW5jcyA9IHsKKwkvKiBUT0RPCisJLmdhbW1hX3NldCA9 IHF4bF9jcnRjX2ZiX2dhbW1hX3NldCwKKwkuZ2FtbWFfZ2V0ID0gcXhsX2NydGNfZmJfZ2FtbWFf Z2V0LAorCSovCisJLmZiX3Byb2JlID0gcXhsX2ZiX2ZpbmRfb3JfY3JlYXRlX3NpbmdsZSwKK307 CisKK2ludCBxeGxfZmJkZXZfaW5pdChzdHJ1Y3QgcXhsX2RldmljZSAqcWRldikKK3sKKwlzdHJ1 Y3QgcXhsX2ZiZGV2ICpxZmJkZXY7CisJaW50IGJwcF9zZWwgPSAzMjsgLyogVE9ETzogcGFyYW1l dGVyIGZyb20gc29tZXdoZXJlPyAqLworCWludCByZXQ7CisKKwlxZmJkZXYgPSBremFsbG9jKHNp emVvZihzdHJ1Y3QgcXhsX2ZiZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFxZmJkZXYpCisJCXJl dHVybiAtRU5PTUVNOworCisJcWZiZGV2LT5xZGV2ID0gcWRldjsKKwlxZGV2LT5tb2RlX2luZm8u cWZiZGV2ID0gcWZiZGV2OworCXFmYmRldi0+aGVscGVyLmZ1bmNzID0gJnF4bF9mYl9oZWxwZXJf ZnVuY3M7CisKKwlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXQocWRldi0+ZGRldiwgJnFmYmRldi0+ aGVscGVyLAorCQkJCSAxIC8qIG51bV9jcnRjIC0gUVhMIHN1cHBvcnRzIGp1c3QgMSAqLywKKwkJ CQkgUVhMRkJfQ09OTl9MSU1JVCk7CisJaWYgKHJldCkgeworCQlrZnJlZShxZmJkZXYpOworCQly ZXR1cm4gcmV0OworCX0KKworCWRybV9mYl9oZWxwZXJfc2luZ2xlX2FkZF9hbGxfY29ubmVjdG9y cygmcWZiZGV2LT5oZWxwZXIpOworCWRybV9mYl9oZWxwZXJfaW5pdGlhbF9jb25maWcoJnFmYmRl di0+aGVscGVyLCBicHBfc2VsKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBxeGxfZmJkZXZfZmlu aShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldikKK3sKKwlpZiAoIXFkZXYtPm1vZGVfaW5mby5xZmJk ZXYpCisJCXJldHVybjsKKworCXF4bF9mYmRldl9kZXN0cm95KHFkZXYtPmRkZXYsIHFkZXYtPm1v ZGVfaW5mby5xZmJkZXYpOworCWtmcmVlKHFkZXYtPm1vZGVfaW5mby5xZmJkZXYpOworCXFkZXYt Pm1vZGVfaW5mby5xZmJkZXYgPSBOVUxMOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9xeGwvcXhsX2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9mZW5jZS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzY3MTUKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9mZW5jZS5jCkBAIC0wLDAgKzEsOTcgQEAKKy8q CisgKiBDb3B5cmlnaHQgMjAxMyBSZWQgSGF0IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1 ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0 d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBB UklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBB dXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxvbiBMZXZ5CisgKi8KKworCisjaW5j bHVkZSAicXhsX2Rydi5oIgorCisvKiBRWEwgZmVuY2luZy0KKworICAgV2hlbiB3ZSBzdWJtaXQg b3BlcmF0aW9ucyB0byB0aGUgR1BVIHdlIHBhc3MgYSByZWxlYXNlIHJlZmVyZW5jZSB0byB0aGUg R1BVCisgICB3aXRoIHRoZW0sIHRoZSByZWxlYXNlIHJlZmVyZW5jZSBpcyB0aGVuIGFkZGVkIHRv IHRoZSByZWxlYXNlIHJpbmcgd2hlbgorICAgdGhlIEdQVSBpcyBmaW5pc2hlZCB3aXRoIHRoYXQg cGFydGljdWxhciBvcGVyYXRpb24gYW5kIGhhcyByZW1vdmVkIGl0IGZyb20KKyAgIGl0cyB0cmVl LgorCisgICBTbyB3ZSBoYXZlIGNhbiBoYXZlIG11bHRpcGxlIG91dHN0YW5kaW5nIG5vbiBsaW5l YXIgZmVuY2VzIHBlciBvYmplY3QuCisKKyAgIEZyb20gYSBUVE0gUE9WIHdlIG9ubHkgY2FyZSBp ZiB0aGUgb2JqZWN0IGhhcyBhbnkgb3V0c3RhbmRpbmcgcmVsZWFzZXMgb24KKyAgIGl0LgorCisg ICB3ZSB3YWl0IHVudGlsIGFsbCBvdXRzdGFuZGluZyByZWxlYXNlcyBhcmUgcHJvY2Vzc2VlZC4K KworICAgc3luYyBvYmplY3QgaXMganVzdCBhIGxpc3Qgb2YgcmVsZWFzZSBpZHMgdGhhdCByZXBy ZXNlbnQgdGhhdCBmZW5jZSBvbgorICAgdGhhdCBidWZmZXIuCisKKyAgIHdlIGp1c3QgYWRkIG5l dyByZWxlYXNlcyBvbnRvIHRoZSBzeW5jIG9iamVjdCBhdHRhY2hlZCB0byB0aGUgb2JqZWN0Lgor CisgICBUaGlzIGN1cnJlbnRseSB1c2VzIGEgcmFkaXggdHJlZSB0byBzdG9yZSB0aGUgbGlzdCBv ZiByZWxlYXNlIGlkcy4KKworICAgRm9yIHNvbWUgcmVhc29uIGV2ZXJ5IHNvIG9mdGVuIHF4bCBo dyBmYWlscyB0byByZWxlYXNlLCB0aGluZ3MgZ28gd3JvbmcuCisqLworCisKK2ludCBxeGxfZmVu Y2VfYWRkX3JlbGVhc2Uoc3RydWN0IHF4bF9mZW5jZSAqcWZlbmNlLCB1aW50MzJfdCByZWxfaWQp Cit7CisJc3RydWN0IHF4bF9ibyAqYm8gPSBjb250YWluZXJfb2YocWZlbmNlLCBzdHJ1Y3QgcXhs X2JvLCBmZW5jZSk7CisKKwlzcGluX2xvY2soJmJvLT50Ym8uYmRldi0+ZmVuY2VfbG9jayk7CisJ cmFkaXhfdHJlZV9pbnNlcnQoJnFmZW5jZS0+dHJlZSwgcmVsX2lkLCBxZmVuY2UpOworCXFmZW5j ZS0+bnVtX2FjdGl2ZV9yZWxlYXNlcysrOworCXNwaW5fdW5sb2NrKCZiby0+dGJvLmJkZXYtPmZl bmNlX2xvY2spOworCXJldHVybiAwOworfQorCitpbnQgcXhsX2ZlbmNlX3JlbW92ZV9yZWxlYXNl KHN0cnVjdCBxeGxfZmVuY2UgKnFmZW5jZSwgdWludDMyX3QgcmVsX2lkKQoreworCXZvaWQgKnJl dDsKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgcXhsX2JvICpibyA9IGNvbnRhaW5lcl9vZihx ZmVuY2UsIHN0cnVjdCBxeGxfYm8sIGZlbmNlKTsKKworCXNwaW5fbG9jaygmYm8tPnRiby5iZGV2 LT5mZW5jZV9sb2NrKTsKKworCXJldCA9IHJhZGl4X3RyZWVfZGVsZXRlKCZxZmVuY2UtPnRyZWUs IHJlbF9pZCk7CisJaWYgKHJldCA9PSBxZmVuY2UpCisJCXFmZW5jZS0+bnVtX2FjdGl2ZV9yZWxl YXNlcy0tOworCWVsc2UgeworCQlEUk1fREVCVUcoImRpZG4ndCBmaW5kIGZlbmNlIGluIHJhZGl4 IHRyZWUgZm9yICVkXG4iLCByZWxfaWQpOworCQlyZXR2YWwgPSAtRU5PRU5UOworCX0KKwlzcGlu X3VubG9jaygmYm8tPnRiby5iZGV2LT5mZW5jZV9sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQor CisKK2ludCBxeGxfZmVuY2VfaW5pdChzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwgc3RydWN0IHF4 bF9mZW5jZSAqcWZlbmNlKQoreworCXFmZW5jZS0+cWRldiA9IHFkZXY7CisJcWZlbmNlLT5udW1f YWN0aXZlX3JlbGVhc2VzID0gMDsKKwlJTklUX1JBRElYX1RSRUUoJnFmZW5jZS0+dHJlZSwgR0ZQ X0FUT01JQyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcXhsX2ZlbmNlX2Zpbmkoc3RydWN0IHF4 bF9mZW5jZSAqcWZlbmNlKQoreworCWtmcmVlKHFmZW5jZS0+cmVsZWFzZV9pZHMpOworCXFmZW5j ZS0+bnVtX2FjdGl2ZV9yZWxlYXNlcyA9IDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vcXhsL3F4bF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2dlbS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYzFlZTIKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9nZW0uYwpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENv cHlyaWdodCAyMDEzIFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4K KyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcg RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6 IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbG9uIExldnkKKyAqLworCisjaW5jbHVkZSAiZHJt UC5oIgorI2luY2x1ZGUgImRybS9kcm0uaCIKKyNpbmNsdWRlICJxeGxfZHJ2LmgiCisjaW5jbHVk ZSAicXhsX29iamVjdC5oIgorCitpbnQgcXhsX2dlbV9vYmplY3RfaW5pdChzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaikKK3sKKwkvKiB3ZSBkbyBub3RoaW5ncyBoZXJlICovCisJcmV0dXJuIDA7 Cit9CisKK3ZvaWQgcXhsX2dlbV9vYmplY3RfZnJlZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdv YmopCit7CisJc3RydWN0IHF4bF9ibyAqcW9iaiA9IGdlbV90b19xeGxfYm8oZ29iaik7CisKKwlp ZiAocW9iaikKKwkJcXhsX2JvX3VucmVmKCZxb2JqKTsKK30KKworaW50IHF4bF9nZW1fb2JqZWN0 X2NyZWF0ZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwgaW50IHNpemUsCisJCQkgIGludCBhbGln bm1lbnQsIGludCBpbml0aWFsX2RvbWFpbiwKKwkJCSAgYm9vbCBkaXNjYXJkYWJsZSwgYm9vbCBr ZXJuZWwsCisJCQkgIHN0cnVjdCBxeGxfc3VyZmFjZSAqc3VyZiwKKwkJCSAgc3RydWN0IGRybV9n ZW1fb2JqZWN0ICoqb2JqKQoreworCXN0cnVjdCBxeGxfYm8gKnFibzsKKwlpbnQgcjsKKworCSpv YmogPSBOVUxMOworCS8qIEF0IGxlYXN0IGFsaWduIG9uIHBhZ2Ugc2l6ZSAqLworCWlmIChhbGln bm1lbnQgPCBQQUdFX1NJWkUpCisJCWFsaWdubWVudCA9IFBBR0VfU0laRTsKKwlyID0gcXhsX2Jv X2NyZWF0ZShxZGV2LCBzaXplLCBrZXJuZWwsIGluaXRpYWxfZG9tYWluLCBzdXJmLCAmcWJvKTsK KwlpZiAocikgeworCQlpZiAociAhPSAtRVJFU1RBUlRTWVMpCisJCQlEUk1fRVJST1IoCisJCQki RmFpbGVkIHRvIGFsbG9jYXRlIEdFTSBvYmplY3QgKCVkLCAlZCwgJXUsICVkKVxuIiwKKwkJCQkg IHNpemUsIGluaXRpYWxfZG9tYWluLCBhbGlnbm1lbnQsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJ Km9iaiA9ICZxYm8tPmdlbV9iYXNlOworCisJbXV0ZXhfbG9jaygmcWRldi0+Z2VtLm11dGV4KTsK KwlsaXN0X2FkZF90YWlsKCZxYm8tPmxpc3QsICZxZGV2LT5nZW0ub2JqZWN0cyk7CisJbXV0ZXhf dW5sb2NrKCZxZGV2LT5nZW0ubXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBxeGxfZ2Vt X29iamVjdF9jcmVhdGVfd2l0aF9oYW5kbGUoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsCisJCQkJ ICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJICAgICAgdTMyIGRvbWFpbiwK KwkJCQkgICAgICBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICBzdHJ1Y3QgcXhsX3N1cmZhY2UgKnN1 cmYsCisJCQkJICAgICAgc3RydWN0IHF4bF9ibyAqKnFvYmosCisJCQkJICAgICAgdWludDMyX3Qg KmhhbmRsZSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdvYmo7CisJaW50IHI7CisKKwlC VUdfT04oIXFvYmopOworCUJVR19PTighaGFuZGxlKTsKKworCXIgPSBxeGxfZ2VtX29iamVjdF9j cmVhdGUocWRldiwgc2l6ZSwgMCwKKwkJCQkgIGRvbWFpbiwKKwkJCQkgIGZhbHNlLCBmYWxzZSwg c3VyZiwKKwkJCQkgICZnb2JqKTsKKwlpZiAocikKKwkJcmV0dXJuIC1FTk9NRU07CisJciA9IGRy bV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsIGdvYmosIGhhbmRsZSk7CisJaWYgKHIpCisJ CXJldHVybiByOworCS8qIGRyb3AgcmVmZXJlbmNlIGZyb20gYWxsb2NhdGUgLSBoYW5kbGUgaG9s ZHMgaXQgbm93ICovCisJKnFvYmogPSBnZW1fdG9fcXhsX2JvKGdvYmopOworCWRybV9nZW1fb2Jq ZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdvYmopOworCXJldHVybiAwOworfQorCitpbnQgcXhs X2dlbV9vYmplY3RfcGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1aW50MzJfdCBwaW5f ZG9tYWluLAorCQkJICB1aW50NjRfdCAqZ3B1X2FkZHIpCit7CisJc3RydWN0IHF4bF9ibyAqcW9i aiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHI7CisKKwlyID0gcXhsX2JvX3Jlc2VydmUo cW9iaiwgZmFsc2UpOworCWlmICh1bmxpa2VseShyICE9IDApKQorCQlyZXR1cm4gcjsKKwlyID0g cXhsX2JvX3Bpbihxb2JqLCBwaW5fZG9tYWluLCBncHVfYWRkcik7CisJcXhsX2JvX3VucmVzZXJ2 ZShxb2JqKTsKKwlyZXR1cm4gcjsKK30KKwordm9pZCBxeGxfZ2VtX29iamVjdF91bnBpbihzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgcXhsX2JvICpxb2JqID0gb2JqLT5k cml2ZXJfcHJpdmF0ZTsKKwlpbnQgcjsKKworCXIgPSBxeGxfYm9fcmVzZXJ2ZShxb2JqLCBmYWxz ZSk7CisJaWYgKGxpa2VseShyID09IDApKSB7CisJCXF4bF9ib191bnBpbihxb2JqKTsKKwkJcXhs X2JvX3VucmVzZXJ2ZShxb2JqKTsKKwl9Cit9CisKK2ludCBxeGxfZ2VtX3NldF9kb21haW4oc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqLAorCQkJICB1aW50MzJfdCByZG9tYWluLCB1aW50MzJf dCB3ZG9tYWluKQoreworCXN0cnVjdCBxeGxfYm8gKnFvYmo7CisJdWludDMyX3QgZG9tYWluOwor CWludCByOworCisJLyogRklYTUU6IHJlZWltcGxlbWVudCAqLworCXFvYmogPSBnb2JqLT5kcml2 ZXJfcHJpdmF0ZTsKKwkvKiB3b3JrIG91dCB3aGVyZSB0byB2YWxpZGF0ZSB0aGUgYnVmZmVyIHRv ICovCisJZG9tYWluID0gd2RvbWFpbjsKKwlpZiAoIWRvbWFpbikKKwkJZG9tYWluID0gcmRvbWFp bjsKKwlpZiAoIWRvbWFpbikgeworCQkvKiBEbyBub3RoaW5ncyAqLworCQlwcl93YXJuKCJTZXQg ZG9tYWluIHdpdGhvdSBkb21haW4gIVxuIik7CisJCXJldHVybiAwOworCX0KKwlpZiAoZG9tYWlu ID09IFFYTF9HRU1fRE9NQUlOX0NQVSkgeworCQkvKiBBc2tpbmcgZm9yIGNwdSBhY2Nlc3Mgd2Fp dCBmb3Igb2JqZWN0IGlkbGUgKi8KKwkJciA9IHF4bF9ib193YWl0KHFvYmosIE5VTEwsIGZhbHNl KTsKKwkJaWYgKHIpIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIHdhaXQgZm9yIG9iamVjdCAhXG4i KTsKKwkJCXJldHVybiByOworCQl9CisJfQorCXJldHVybiAwOworfQorCitpbnQgcXhsX2dlbV9v YmplY3Rfb3BlbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcXhsX2dlbV9vYmplY3RfY2xvc2Uo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2KQoreworfQorCitpbnQgcXhsX2dlbV9pbml0KHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2KQor eworCUlOSVRfTElTVF9IRUFEKCZxZGV2LT5nZW0ub2JqZWN0cyk7CisJcmV0dXJuIDA7Cit9CisK K3ZvaWQgcXhsX2dlbV9maW5pKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2KQoreworCXF4bF9ib19m b3JjZV9kZWxldGUocWRldik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4 bF9pbWFnZS5jIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfaW1hZ2UuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmM3MjA0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3F4bC9xeGxfaW1hZ2UuYwpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHly aWdodCAyMDEzIFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAq IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERh dmUgQWlybGllCisgKiAgICAgICAgICBBbG9uIExldnkKKyAqLworCisjaW5jbHVkZSA8bGludXgv Z2ZwLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAicXhsX2Rydi5oIgor I2luY2x1ZGUgInF4bF9vYmplY3QuaCIKKworc3RhdGljIGludAorcXhsX2ltYWdlX2NyZWF0ZV9o ZWxwZXIoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsCisJCQlzdHJ1Y3QgcXhsX3JlbGVhc2UgKnJl bGVhc2UsCisJCQlzdHJ1Y3QgcXhsX2JvICoqaW1hZ2VfYm8sCisJCQljb25zdCB1aW50OF90ICpk YXRhLAorCQkJaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorCQkJaW50IGRlcHRoLCB1bnNpZ25lZCBp bnQgaGFzaCwKKwkJCWludCBzdHJpZGUpCit7CisJc3RydWN0IHF4bF9pbWFnZSAqaW1hZ2U7CisJ c3RydWN0IHF4bF9kYXRhX2NodW5rICpjaHVuazsKKwlpbnQgaTsKKwlpbnQgY2h1bmtfc3RyaWRl OworCWludCBsaW5lc2l6ZSA9IHdpZHRoICogZGVwdGggLyA4OworCXN0cnVjdCBxeGxfYm8gKmNo dW5rX2JvOworCWludCByZXQ7CisJLyogQ2h1bmsgKi8KKwkvKiBGSVhNRTogQ2hlY2sgaW50ZWdl ciBvdmVyZmxvdyAqLworCS8qIFRPRE86IHZhcmlhYmxlIG51bWJlciBvZiBjaHVua3MgKi8KKwlj aHVua19zdHJpZGUgPSBzdHJpZGU7IC8qIFRPRE86IHNob3VsZCB1c2UgbGluZXNpemUsIGJ1dCBp dCByZW5kZXJzCisJCQkJICB3cm9uZyAoY2hlY2sgdGhlIGJpdG1hcHMgYXJlIHNlbnQgY29ycmVj dGx5CisJCQkJICBmaXJzdCkgKi8KKwlyZXQgPSBxeGxfYWxsb2NfYm9fcmVzZXJ2ZWQocWRldiwg c2l6ZW9mKCpjaHVuaykgKyBoZWlnaHQgKiBjaHVua19zdHJpZGUsCisJCQkJICAgICZjaHVua19i byk7CisJcmV0ID0gcXhsX2JvX2ttYXAoY2h1bmtfYm8sICh2b2lkICoqKSZjaHVuayk7CisJY2h1 bmstPmRhdGFfc2l6ZSA9IGhlaWdodCAqIGNodW5rX3N0cmlkZTsKKwljaHVuay0+cHJldl9jaHVu ayA9IDA7CisJY2h1bmstPm5leHRfY2h1bmsgPSAwOworCisJaWYgKHN0cmlkZSA9PSBsaW5lc2l6 ZSAmJiBjaHVua19zdHJpZGUgPT0gc3RyaWRlKQorCQltZW1jcHkoY2h1bmstPmRhdGEsIGRhdGEs IGxpbmVzaXplICogaGVpZ2h0KTsKKwllbHNlCisJCWZvciAoaSA9IDAgOyBpIDwgaGVpZ2h0IDsg KytpKQorCQkJbWVtY3B5KGNodW5rLT5kYXRhICsgaSpjaHVua19zdHJpZGUsIGRhdGEgKyBpKnN0 cmlkZSwKKwkJCSAgICAgICBsaW5lc2l6ZSk7CisKKwlxeGxfYm9fa3VubWFwKGNodW5rX2JvKTsK KworCS8qIEltYWdlICovCisJcmV0ID0gcXhsX2FsbG9jX2JvX3Jlc2VydmVkKHFkZXYsIHNpemVv ZigqaW1hZ2UpLCBpbWFnZV9ibyk7CisJcXhsX2JvX2ttYXAoKmltYWdlX2JvLCAodm9pZCAqKikm aW1hZ2UpOworCisJaW1hZ2UtPmRlc2NyaXB0b3IuaWQgPSAwOworCWltYWdlLT5kZXNjcmlwdG9y LnR5cGUgPSBTUElDRV9JTUFHRV9UWVBFX0JJVE1BUDsKKworCWltYWdlLT5kZXNjcmlwdG9yLmZs YWdzID0gMDsKKwlpbWFnZS0+ZGVzY3JpcHRvci53aWR0aCA9IHdpZHRoOworCWltYWdlLT5kZXNj cmlwdG9yLmhlaWdodCA9IGhlaWdodDsKKworCXN3aXRjaCAoZGVwdGgpIHsKKwljYXNlIDE6CisJ CS8qIFRPRE86IEJFPyBjaGVjayBieSBhcmNoPyAqLworCQlpbWFnZS0+dS5iaXRtYXAuZm9ybWF0 ID0gU1BJQ0VfQklUTUFQX0ZNVF8xQklUX0JFOworCQlicmVhazsKKwljYXNlIDI0OgorCQlpbWFn ZS0+dS5iaXRtYXAuZm9ybWF0ID0gU1BJQ0VfQklUTUFQX0ZNVF8yNEJJVDsKKwkJYnJlYWs7CisJ Y2FzZSAzMjoKKwkJaW1hZ2UtPnUuYml0bWFwLmZvcm1hdCA9IFNQSUNFX0JJVE1BUF9GTVRfMzJC SVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigidW5zdXBwb3J0ZWQgaW1hZ2Ug Yml0IGRlcHRoXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIFRPRE86IGNsZWFudXAgKi8KKwl9 CisJaW1hZ2UtPnUuYml0bWFwLmZsYWdzID0gUVhMX0JJVE1BUF9UT1BfRE9XTjsKKwlpbWFnZS0+ dS5iaXRtYXAueCA9IHdpZHRoOworCWltYWdlLT51LmJpdG1hcC55ID0gaGVpZ2h0OworCWltYWdl LT51LmJpdG1hcC5zdHJpZGUgPSBjaHVua19zdHJpZGU7CisJaW1hZ2UtPnUuYml0bWFwLnBhbGV0 dGUgPSAwOworCWltYWdlLT51LmJpdG1hcC5kYXRhID0gcXhsX2JvX3BoeXNpY2FsX2FkZHJlc3Mo cWRldiwgY2h1bmtfYm8sIDApOworCXF4bF9yZWxlYXNlX2FkZF9yZXMocWRldiwgcmVsZWFzZSwg Y2h1bmtfYm8pOworCXF4bF9ib191bnJlc2VydmUoY2h1bmtfYm8pOworCXF4bF9ib191bnJlZigm Y2h1bmtfYm8pOworCisJcXhsX2JvX2t1bm1hcCgqaW1hZ2VfYm8pOworCXJldHVybiAwOworfQor CitpbnQgcXhsX2ltYWdlX2NyZWF0ZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKKwkJICAgICBz dHJ1Y3QgcXhsX3JlbGVhc2UgKnJlbGVhc2UsCisJCSAgICAgc3RydWN0IHF4bF9ibyAqKmltYWdl X2JvLAorCQkgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCisJCSAgICAgaW50IHgsIGludCB5LCBp bnQgd2lkdGgsIGludCBoZWlnaHQsCisJCSAgICAgaW50IGRlcHRoLCBpbnQgc3RyaWRlKQorewor CWRhdGEgKz0geSAqIHN0cmlkZSArIHggKiAoZGVwdGggLyA4KTsKKwlyZXR1cm4gcXhsX2ltYWdl X2NyZWF0ZV9oZWxwZXIocWRldiwgcmVsZWFzZSwgaW1hZ2VfYm8sIGRhdGEsCisJCQkJICAgICAg IHdpZHRoLCBoZWlnaHQsIGRlcHRoLCAwLCBzdHJpZGUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3F4bC9xeGxfaW9jdGwuYyBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2lvY3Rs LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNjYTRmNwotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2lvY3RsLmMKQEAgLTAsMCArMSw0MTEg QEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBSZWQgSGF0IEluYy4KKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl IGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks CisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhP UihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us CisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAq CisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxvbiBMZXZ5CisgKi8KKwor I2luY2x1ZGUgInF4bF9kcnYuaCIKKyNpbmNsdWRlICJxeGxfb2JqZWN0LmgiCisKKy8qCisgKiBU T0RPOiBhbGxvY2F0aW5nIGEgbmV3IGdlbShpbiBxeGxfYm8pIGZvciBlYWNoIHJlcXVlc3QuCisg KiBUaGlzIGlzIHdhc3RlZnVsIHNpbmNlIGJvJ3MgYXJlIHBhZ2UgYWxpZ25lZC4KKyAqLworaW50 IHF4bF9hbGxvY19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkg ICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IHF4bF9kZXZpY2UgKnFk ZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fcXhsX2FsbG9jICpxeGxfYWxsb2Mg PSBkYXRhOworCWludCByZXQ7CisJc3RydWN0IHF4bF9ibyAqcW9iajsKKwl1aW50MzJfdCBoYW5k bGU7CisJdTMyIGRvbWFpbiA9IFFYTF9HRU1fRE9NQUlOX1ZSQU07CisKKwlpZiAocXhsX2FsbG9j LT5zaXplID09IDApIHsKKwkJRFJNX0VSUk9SKCJpbnZhbGlkIHNpemUgJWRcbiIsIHF4bF9hbGxv Yy0+c2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXQgPSBxeGxfZ2VtX29iamVjdF9j cmVhdGVfd2l0aF9oYW5kbGUocWRldiwgZmlsZV9wcml2LAorCQkJCQkJZG9tYWluLAorCQkJCQkJ cXhsX2FsbG9jLT5zaXplLAorCQkJCQkJTlVMTCwKKwkJCQkJCSZxb2JqLCAmaGFuZGxlKTsKKwlp ZiAocmV0KSB7CisJCURSTV9FUlJPUigiJXM6IGZhaWxlZCB0byBjcmVhdGUgZ2VtIHJldD0lZFxu IiwKKwkJCSAgX19mdW5jX18sIHJldCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlxeGxfYWxs b2MtPmhhbmRsZSA9IGhhbmRsZTsKKwlyZXR1cm4gMDsKK30KKworaW50IHF4bF9tYXBfaW9jdGwo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiA9IGRldi0+ZGV2X3ByaXZh dGU7CisJc3RydWN0IGRybV9xeGxfbWFwICpxeGxfbWFwID0gZGF0YTsKKworCXJldHVybiBxeGxf bW9kZV9kdW1iX21tYXAoZmlsZV9wcml2LCBxZGV2LT5kZGV2LCBxeGxfbWFwLT5oYW5kbGUsCisJ CQkJICAmcXhsX21hcC0+b2Zmc2V0KTsKK30KKworLyoKKyAqIGRzdCBtdXN0IGJlIHZhbGlkYXRl ZCwgaS5lLiB3aG9sZSBibyBvbiB2cmFtL3N1cmZhY2VzcmFtIChyaWdodCBub3cgYWxsIGJvJ3MK KyAqIGFyZSBvbiB2cmFtKS4KKyAqICooZHN0ICsgZHN0X29mZikgPSBxeGxfYm9fcGh5c2ljYWxf YWRkcmVzcyhzcmMsIHNyY19vZmYpCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9yZWxvYyhzdHJ1 Y3QgcXhsX2RldmljZSAqcWRldiwgc3RydWN0IHF4bF9ibyAqZHN0LCB1aW50NjRfdCBkc3Rfb2Zm LAorCSAgICBzdHJ1Y3QgcXhsX2JvICpzcmMsIHVpbnQ2NF90IHNyY19vZmYpCit7CisJdm9pZCAq cmVsb2NfcGFnZTsKKworCXJlbG9jX3BhZ2UgPSBxeGxfYm9fa21hcF9hdG9taWNfcGFnZShxZGV2 LCBkc3QsIGRzdF9vZmYgJiBQQUdFX01BU0spOworCSoodWludDY0X3QgKikocmVsb2NfcGFnZSAr IChkc3Rfb2ZmICYgflBBR0VfTUFTSykpID0gcXhsX2JvX3BoeXNpY2FsX2FkZHJlc3MocWRldiwK KwkJCQkJCQkJICAgICBzcmMsIHNyY19vZmYpOworCXF4bF9ib19rdW5tYXBfYXRvbWljX3BhZ2Uo cWRldiwgZHN0LCByZWxvY19wYWdlKTsKK30KKworc3RhdGljIHZvaWQKK2FwcGx5X3N1cmZfcmVs b2Moc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsIHN0cnVjdCBxeGxfYm8gKmRzdCwgdWludDY0X3Qg ZHN0X29mZiwKKwkJIHN0cnVjdCBxeGxfYm8gKnNyYykKK3sKKwl1aW50MzJfdCBpZCA9IDA7CisJ dm9pZCAqcmVsb2NfcGFnZTsKKworCWlmIChzcmMgJiYgIXNyYy0+aXNfcHJpbWFyeSkKKwkJaWQg PSBzcmMtPnN1cmZhY2VfaWQ7CisKKwlyZWxvY19wYWdlID0gcXhsX2JvX2ttYXBfYXRvbWljX3Bh Z2UocWRldiwgZHN0LCBkc3Rfb2ZmICYgUEFHRV9NQVNLKTsKKwkqKHVpbnQzMl90ICopKHJlbG9j X3BhZ2UgKyAoZHN0X29mZiAmIH5QQUdFX01BU0spKSA9IGlkOworCXF4bF9ib19rdW5tYXBfYXRv bWljX3BhZ2UocWRldiwgZHN0LCByZWxvY19wYWdlKTsKK30KKworLyogcmV0dXJuIGhvbGRpbmcg dGhlIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCAqLworc3RydWN0IHF4bF9ibyAqcXhsaHdfaGFu ZGxlX3RvX2JvKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAorCQkJCSAgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYsIHVpbnQ2NF90IGhhbmRsZSwKKwkJCQkgIHN0cnVjdCBxeGxfcmVsb2NfbGlz dCAqcmVsb2NfbGlzdCkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdvYmo7CisJc3RydWN0 IHF4bF9ibyAqcW9iajsKKwlpbnQgcmV0OworCisJZ29iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1 cChxZGV2LT5kZGV2LCBmaWxlX3ByaXYsIGhhbmRsZSk7CisJaWYgKCFnb2JqKSB7CisJCURSTV9F UlJPUigiYmFkIGJvIGhhbmRsZSAlbGxkXG4iLCBoYW5kbGUpOworCQlyZXR1cm4gTlVMTDsKKwl9 CisJcW9iaiA9IGdlbV90b19xeGxfYm8oZ29iaik7CisKKwlyZXQgPSBxeGxfYm9fbGlzdF9hZGQo cmVsb2NfbGlzdCwgcW9iaik7CisJaWYgKHJldCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4g cW9iajsKK30KKworLyoKKyAqIFVzYWdlIG9mIGV4ZWNidWZmZXI6CisgKiBSZWxvY2F0aW9ucyBu ZWVkIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBmdWxsIFFYTERyYXdhYmxlIHNpemUuCisgKiBI b3dldmVyLCB0aGUgY29tbWFuZCBhcyBwYXNzZWQgZnJvbSB1c2VyIHNwYWNlIG11c3QgKm5vdCog Y29udGFpbiB0aGUgaW5pdGlhbAorICogUVhMUmVsZWFzZUluZm8gc3RydWN0IChmaXJzdCBYWFgg Ynl0ZXMpCisgKi8KK2ludCBxeGxfZXhlY2J1ZmZlcl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLAorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0 cnVjdCBxeGxfZGV2aWNlICpxZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX3F4 bF9leGVjYnVmZmVyICpleGVjYnVmZmVyID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX3F4bF9jb21tYW5k IHVzZXJfY21kOworCWludCBjbWRfbnVtOworCXN0cnVjdCBxeGxfYm8gKnJlbG9jX3NyY19ibzsK KwlzdHJ1Y3QgcXhsX2JvICpyZWxvY19kc3RfYm87CisJc3RydWN0IGRybV9xeGxfcmVsb2MgcmVs b2M7CisJdm9pZCAqZmJfY21kOworCWludCBpLCByZXQ7CisJc3RydWN0IHF4bF9yZWxvY19saXN0 IHJlbG9jX2xpc3Q7CisJaW50IHVud3JpdHRlbjsKKwl1aW50MzJfdCByZWxvY19kc3Rfb2Zmc2V0 OworCUlOSVRfTElTVF9IRUFEKCZyZWxvY19saXN0LmJvcyk7CisKKwlmb3IgKGNtZF9udW0gPSAw OyBjbWRfbnVtIDwgZXhlY2J1ZmZlci0+Y29tbWFuZHNfbnVtOyArK2NtZF9udW0pIHsKKwkJc3Ry dWN0IHF4bF9yZWxlYXNlICpyZWxlYXNlOworCQlzdHJ1Y3QgcXhsX2JvICpjbWRfYm87CisJCWlu dCByZWxlYXNlX3R5cGU7CisJCXN0cnVjdCBkcm1fcXhsX2NvbW1hbmQgKmNvbW1hbmRzID0KKwkJ CShzdHJ1Y3QgZHJtX3F4bF9jb21tYW5kICopZXhlY2J1ZmZlci0+Y29tbWFuZHM7CisKKwkJaWYg KERSTV9DT1BZX0ZST01fVVNFUigmdXNlcl9jbWQsICZjb21tYW5kc1tjbWRfbnVtXSwKKwkJCQkg ICAgICAgc2l6ZW9mKHVzZXJfY21kKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJc3dpdGNoICh1 c2VyX2NtZC50eXBlKSB7CisJCWNhc2UgUVhMX0NNRF9EUkFXOgorCQkJcmVsZWFzZV90eXBlID0g UVhMX1JFTEVBU0VfRFJBV0FCTEU7CisJCQlicmVhazsKKwkJY2FzZSBRWExfQ01EX1NVUkZBQ0U6 CisJCWNhc2UgUVhMX0NNRF9DVVJTT1I6CisJCWRlZmF1bHQ6CisJCQlEUk1fREVCVUcoIk9ubHkg ZHJhdyBjb21tYW5kcyBpbiBleGVjYnVmZmVyc1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJ CWJyZWFrOworCQl9CisKKwkJaWYgKHVzZXJfY21kLmNvbW1hbmRfc2l6ZSA+IFBBR0VfU0laRSAt IHNpemVvZih1bmlvbiBxeGxfcmVsZWFzZV9pbmZvKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJ CXJldCA9IHF4bF9hbGxvY19yZWxlYXNlX3Jlc2VydmVkKHFkZXYsCisJCQkJCQkgc2l6ZW9mKHVu aW9uIHF4bF9yZWxlYXNlX2luZm8pICsKKwkJCQkJCSB1c2VyX2NtZC5jb21tYW5kX3NpemUsCisJ CQkJCQkgcmVsZWFzZV90eXBlLAorCQkJCQkJICZyZWxlYXNlLAorCQkJCQkJICZjbWRfYm8pOwor CQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBUT0RPIGNvcHkgc2xvdyBwYXRoIGNv ZGUgZnJvbSBpOTE1ICovCisJCWZiX2NtZCA9IHF4bF9ib19rbWFwX2F0b21pY19wYWdlKHFkZXYs IGNtZF9ibywgKHJlbGVhc2UtPnJlbGVhc2Vfb2Zmc2V0ICYgUEFHRV9TSVpFKSk7CisJCXVud3Jp dHRlbiA9IF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWNfbm9jYWNoZShmYl9jbWQgKyBzaXplb2Yo dW5pb24gcXhsX3JlbGVhc2VfaW5mbykgKyAocmVsZWFzZS0+cmVsZWFzZV9vZmZzZXQgJiB+UEFH RV9TSVpFKSwgKHZvaWQgKikodW5zaWduZWQgbG9uZyl1c2VyX2NtZC5jb21tYW5kLCB1c2VyX2Nt ZC5jb21tYW5kX3NpemUpOworCQlxeGxfYm9fa3VubWFwX2F0b21pY19wYWdlKHFkZXYsIGNtZF9i bywgZmJfY21kKTsKKwkJaWYgKHVud3JpdHRlbikgeworCQkJRFJNX0VSUk9SKCJnb3QgdW53cml0 dGVuICVkXG4iLCB1bndyaXR0ZW4pOworCQkJcXhsX3JlbGVhc2VfdW5yZXNlcnZlKHFkZXYsIHJl bGVhc2UpOworCQkJcXhsX3JlbGVhc2VfZnJlZShxZGV2LCByZWxlYXNlKTsKKwkJCXJldHVybiAt RUZBVUxUOworCQl9CisKKwkJZm9yIChpID0gMCA7IGkgPCB1c2VyX2NtZC5yZWxvY3NfbnVtOyAr K2kpIHsKKwkJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoJnJlbG9jLAorCQkJCQkgICAgICAgJigo c3RydWN0IGRybV9xeGxfcmVsb2MgKil1c2VyX2NtZC5yZWxvY3MpW2ldLAorCQkJCQkgICAgICAg c2l6ZW9mKHJlbG9jKSkpIHsKKwkJCQlxeGxfYm9fbGlzdF91bnJlc2VydmUoJnJlbG9jX2xpc3Qs IHRydWUpOworCQkJCXF4bF9yZWxlYXNlX3VucmVzZXJ2ZShxZGV2LCByZWxlYXNlKTsKKwkJCQlx eGxfcmVsZWFzZV9mcmVlKHFkZXYsIHJlbGVhc2UpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJ fQorCisJCQkvKiBhZGQgdGhlIGJvcyB0byB0aGUgbGlzdCBvZiBib3MgdG8gdmFsaWRhdGUgLQor CQkJICAgbmVlZCB0byB2YWxpZGF0ZSBmaXJzdCB0aGVuIHByb2Nlc3MgcmVsb2NzPyAqLworCQkJ aWYgKHJlbG9jLmRzdF9oYW5kbGUpIHsKKwkJCQlyZWxvY19kc3RfYm8gPSBxeGxod19oYW5kbGVf dG9fYm8ocWRldiwgZmlsZV9wcml2LAorCQkJCQkJCQkgIHJlbG9jLmRzdF9oYW5kbGUsICZyZWxv Y19saXN0KTsKKwkJCQlpZiAoIXJlbG9jX2RzdF9ibykgeworCQkJCQlxeGxfYm9fbGlzdF91bnJl c2VydmUoJnJlbG9jX2xpc3QsIHRydWUpOworCQkJCQlxeGxfcmVsZWFzZV91bnJlc2VydmUocWRl diwgcmVsZWFzZSk7CisJCQkJCXF4bF9yZWxlYXNlX2ZyZWUocWRldiwgcmVsZWFzZSk7CisJCQkJ CXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCQlyZWxvY19kc3Rfb2Zmc2V0ID0gMDsKKwkJCX0g ZWxzZSB7CisJCQkJcmVsb2NfZHN0X2JvID0gY21kX2JvOworCQkJCXJlbG9jX2RzdF9vZmZzZXQg PSByZWxlYXNlLT5yZWxlYXNlX29mZnNldDsKKwkJCX0KKworCQkJLyogcmVzZXJ2ZSBhbmQgdmFs aWRhdGUgdGhlIHJlbG9jIGRzdCBibyAqLworCQkJaWYgKHJlbG9jLnJlbG9jX3R5cGUgPT0gUVhM X1JFTE9DX1RZUEVfQk8gfHwgcmVsb2Muc3JjX2hhbmRsZSA+IDApIHsKKwkJCQlyZWxvY19zcmNf Ym8gPQorCQkJCQlxeGxod19oYW5kbGVfdG9fYm8ocWRldiwgZmlsZV9wcml2LAorCQkJCQkJCSAg IHJlbG9jLnNyY19oYW5kbGUsICZyZWxvY19saXN0KTsKKwkJCQlpZiAoIXJlbG9jX3NyY19ibykg eworCQkJCQlpZiAocmVsb2NfZHN0X2JvICE9IGNtZF9ibykKKwkJCQkJCWRybV9nZW1fb2JqZWN0 X3VucmVmZXJlbmNlX3VubG9ja2VkKCZyZWxvY19kc3RfYm8tPmdlbV9iYXNlKTsKKwkJCQkJcXhs X2JvX2xpc3RfdW5yZXNlcnZlKCZyZWxvY19saXN0LCB0cnVlKTsKKwkJCQkJcXhsX3JlbGVhc2Vf dW5yZXNlcnZlKHFkZXYsIHJlbGVhc2UpOworCQkJCQlxeGxfcmVsZWFzZV9mcmVlKHFkZXYsIHJl bGVhc2UpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQl9IGVsc2UKKwkJCQlyZWxv Y19zcmNfYm8gPSBOVUxMOworCQkJaWYgKHJlbG9jLnJlbG9jX3R5cGUgPT0gUVhMX1JFTE9DX1RZ UEVfQk8pIHsKKwkJCQlhcHBseV9yZWxvYyhxZGV2LCByZWxvY19kc3RfYm8sIHJlbG9jX2RzdF9v ZmZzZXQgKyByZWxvYy5kc3Rfb2Zmc2V0LAorCQkJCQkgICAgcmVsb2Nfc3JjX2JvLCByZWxvYy5z cmNfb2Zmc2V0KTsKKwkJCX0gZWxzZSBpZiAocmVsb2MucmVsb2NfdHlwZSA9PSBRWExfUkVMT0Nf VFlQRV9TVVJGKSB7CisJCQkJYXBwbHlfc3VyZl9yZWxvYyhxZGV2LCByZWxvY19kc3RfYm8sIHJl bG9jX2RzdF9vZmZzZXQgKyByZWxvYy5kc3Rfb2Zmc2V0LCByZWxvY19zcmNfYm8pOworCQkJfSBl bHNlIHsKKwkJCQlEUk1fRVJST1IoInVua25vd24gcmVsb2MgdHlwZSAlZFxuIiwgcmVsb2MucmVs b2NfdHlwZSk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWlmIChyZWxvY19zcmNf Ym8gJiYgcmVsb2Nfc3JjX2JvICE9IGNtZF9ibykgeworCQkJCXF4bF9yZWxlYXNlX2FkZF9yZXMo cWRldiwgcmVsZWFzZSwgcmVsb2Nfc3JjX2JvKTsKKwkJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVy ZW5jZV91bmxvY2tlZCgmcmVsb2Nfc3JjX2JvLT5nZW1fYmFzZSk7CisJCQl9CisKKwkJCWlmIChy ZWxvY19kc3RfYm8gIT0gY21kX2JvKQorCQkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3Vu bG9ja2VkKCZyZWxvY19kc3RfYm8tPmdlbV9iYXNlKTsKKwkJfQorCQlxeGxfZmVuY2VfcmVsZWFz ZWFibGUocWRldiwgcmVsZWFzZSk7CisKKwkJcmV0ID0gcXhsX3B1c2hfY29tbWFuZF9yaW5nX3Jl bGVhc2UocWRldiwgcmVsZWFzZSwgdXNlcl9jbWQudHlwZSwgdHJ1ZSk7CisJCWlmIChyZXQgPT0g LUVSRVNUQVJUU1lTKSB7CisJCQlxeGxfcmVsZWFzZV91bnJlc2VydmUocWRldiwgcmVsZWFzZSk7 CisJCQlxeGxfcmVsZWFzZV9mcmVlKHFkZXYsIHJlbGVhc2UpOworCQkJcXhsX2JvX2xpc3RfdW5y ZXNlcnZlKCZyZWxvY19saXN0LCB0cnVlKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJcXhsX3Jl bGVhc2VfdW5yZXNlcnZlKHFkZXYsIHJlbGVhc2UpOworCX0KKwlxeGxfYm9fbGlzdF91bnJlc2Vy dmUoJnJlbG9jX2xpc3QsIDApOworCXJldHVybiAwOworfQorCitpbnQgcXhsX3VwZGF0ZV9hcmVh X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgIHN0cnVjdCBk cm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiA9IGRldi0+ZGV2X3By aXZhdGU7CisJc3RydWN0IGRybV9xeGxfdXBkYXRlX2FyZWEgKnVwZGF0ZV9hcmVhID0gZGF0YTsK KwlzdHJ1Y3QgcXhsX3JlY3QgYXJlYSA9IHsubGVmdCA9IHVwZGF0ZV9hcmVhLT5sZWZ0LAorCQkJ CS50b3AgPSB1cGRhdGVfYXJlYS0+dG9wLAorCQkJCS5yaWdodCA9IHVwZGF0ZV9hcmVhLT5yaWdo dCwKKwkJCQkuYm90dG9tID0gdXBkYXRlX2FyZWEtPmJvdHRvbX07CisJaW50IHJldDsKKwlzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKmdvYmogPSBOVUxMOworCXN0cnVjdCBxeGxfYm8gKnFvYmogPSBO VUxMOworCisJaWYgKHVwZGF0ZV9hcmVhLT5sZWZ0ID49IHVwZGF0ZV9hcmVhLT5yaWdodCB8fAor CSAgICB1cGRhdGVfYXJlYS0+dG9wID49IHVwZGF0ZV9hcmVhLT5ib3R0b20pCisJCXJldHVybiAt RUlOVkFMOworCisJZ29iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGUsIHVwZGF0 ZV9hcmVhLT5oYW5kbGUpOworCWlmIChnb2JqID09IE5VTEwpCisJCXJldHVybiAtRU5PRU5UOwor CisJcW9iaiA9IGdlbV90b19xeGxfYm8oZ29iaik7CisKKwlyZXQgPSBxeGxfYm9fcmVzZXJ2ZShx b2JqLCBmYWxzZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpZiAoIXFvYmotPnBpbl9j b3VudCkgeworCQlyZXQgPSB0dG1fYm9fdmFsaWRhdGUoJnFvYmotPnRibywgJnFvYmotPnBsYWNl bWVudCwKKwkJCQkgICAgICB0cnVlLCBmYWxzZSk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJ Z290byBvdXQ7CisJfQorCisJcmV0ID0gcXhsX2JvX2NoZWNrX2lkKHFkZXYsIHFvYmopOworCWlm IChyZXQpCisJCWdvdG8gb3V0MjsKKwlpZiAoIXFvYmotPnN1cmZhY2VfaWQpCisJCURSTV9FUlJP UigiZ290IHVwZGF0ZSBhcmVhIGZvciBzdXJmYWNlIHdpdGggbm8gaWQgJWRcbiIsIHVwZGF0ZV9h cmVhLT5oYW5kbGUpOworCXJldCA9IHF4bF9pb191cGRhdGVfYXJlYShxZGV2LCBxb2JqLCAmYXJl YSk7CisKK291dDI6CisJcXhsX2JvX3VucmVzZXJ2ZShxb2JqKTsKKworb3V0OgorCWRybV9nZW1f b2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdvYmopOworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgcXhsX2dldHBhcmFtX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCisJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3Qg cXhsX2RldmljZSAqcWRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9xeGxfZ2V0 cGFyYW0gKnBhcmFtID0gZGF0YTsKKworCXN3aXRjaCAocGFyYW0tPnBhcmFtKSB7CisJY2FzZSBR WExfUEFSQU1fTlVNX1NVUkZBQ0VTOgorCQlwYXJhbS0+dmFsdWUgPSBxZGV2LT5yb20tPm5fc3Vy ZmFjZXM7CisJCWJyZWFrOworCWNhc2UgUVhMX1BBUkFNX01BWF9SRUxPQ1M6CisJCXBhcmFtLT52 YWx1ZSA9IFFYTF9NQVhfUkVTOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcXhsX2NsaWVudGNhcF9pb2N0bChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCSAgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpCit7CisJc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYgPSBkZXYtPmRldl9wcml2 YXRlOworCXN0cnVjdCBkcm1fcXhsX2NsaWVudGNhcCAqcGFyYW0gPSBkYXRhOworCWludCBieXRl LCBpZHg7CisKKwlieXRlID0gcGFyYW0tPmluZGV4IC8gODsKKwlpZHggPSBwYXJhbS0+aW5kZXgg JSA4OworCisJaWYgKHFkZXYtPnBkZXYtPnJldmlzaW9uIDwgNCkKKwkJcmV0dXJuIC1FTk9TWVM7 CisKKwlpZiAoYnl0ZSA+IDU4KQorCQlyZXR1cm4gLUVOT1NZUzsKKworCWlmIChxZGV2LT5yb20t PmNsaWVudF9jYXBhYmlsaXRpZXNbYnl0ZV0gJiAoMSA8PCBpZHgpKQorCQlyZXR1cm4gMDsKKwly ZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGludCBxeGxfYWxsb2Nfc3VyZl9pb2N0bChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmls ZSkKK3sKKwlzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3Ry dWN0IGRybV9xeGxfYWxsb2Nfc3VyZiAqcGFyYW0gPSBkYXRhOworCXN0cnVjdCBxeGxfYm8gKnFv Ymo7CisJaW50IGhhbmRsZTsKKwlpbnQgcmV0OworCWludCBzaXplLCBhY3R1YWxfc3RyaWRlOwor CXN0cnVjdCBxeGxfc3VyZmFjZSBzdXJmOworCisJLyogd29yayBvdXQgc2l6ZSBhbGxvY2F0ZSBi byB3aXRoIGhhbmRsZSAqLworCWFjdHVhbF9zdHJpZGUgPSBwYXJhbS0+c3RyaWRlIDwgMCA/IC1w YXJhbS0+c3RyaWRlIDogcGFyYW0tPnN0cmlkZTsKKwlzaXplID0gYWN0dWFsX3N0cmlkZSAqIHBh cmFtLT5oZWlnaHQgKyBhY3R1YWxfc3RyaWRlOworCisJc3VyZi5mb3JtYXQgPSBwYXJhbS0+Zm9y bWF0OworCXN1cmYud2lkdGggPSBwYXJhbS0+d2lkdGg7CisJc3VyZi5oZWlnaHQgPSBwYXJhbS0+ aGVpZ2h0OworCXN1cmYuc3RyaWRlID0gcGFyYW0tPnN0cmlkZTsKKwlzdXJmLmRhdGEgPSAwOwor CisJcmV0ID0gcXhsX2dlbV9vYmplY3RfY3JlYXRlX3dpdGhfaGFuZGxlKHFkZXYsIGZpbGUsCisJ CQkJCQlRWExfR0VNX0RPTUFJTl9TVVJGQUNFLAorCQkJCQkJc2l6ZSwKKwkJCQkJCSZzdXJmLAor CQkJCQkJJnFvYmosICZoYW5kbGUpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCIlczogZmFp bGVkIHRvIGNyZWF0ZSBnZW0gcmV0PSVkXG4iLAorCQkJICBfX2Z1bmNfXywgcmV0KTsKKwkJcmV0 dXJuIC1FTk9NRU07CisJfSBlbHNlCisJCXBhcmFtLT5oYW5kbGUgPSBoYW5kbGU7CisJcmV0dXJu IHJldDsKK30KKworc3RydWN0IGRybV9pb2N0bF9kZXNjIHF4bF9pb2N0bHNbXSA9IHsKKwlEUk1f SU9DVExfREVGX0RSVihRWExfQUxMT0MsIHF4bF9hbGxvY19pb2N0bCwgRFJNX0FVVEh8RFJNX1VO TE9DS0VEKSwKKworCURSTV9JT0NUTF9ERUZfRFJWKFFYTF9NQVAsIHF4bF9tYXBfaW9jdGwsIERS TV9BVVRIfERSTV9VTkxPQ0tFRCksCisKKwlEUk1fSU9DVExfREVGX0RSVihRWExfRVhFQ0JVRkZF UiwgcXhsX2V4ZWNidWZmZXJfaW9jdGwsCisJCQkJCQkJRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwK KwlEUk1fSU9DVExfREVGX0RSVihRWExfVVBEQVRFX0FSRUEsIHF4bF91cGRhdGVfYXJlYV9pb2N0 bCwKKwkJCQkJCQlEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUZfRFJWKFFY TF9HRVRQQVJBTSwgcXhsX2dldHBhcmFtX2lvY3RsLAorCQkJCQkJCURSTV9BVVRIfERSTV9VTkxP Q0tFRCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoUVhMX0NMSUVOVENBUCwgcXhsX2NsaWVudGNhcF9p b2N0bCwKKwkJCQkJCQlEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCisJRFJNX0lPQ1RMX0RFRl9E UlYoUVhMX0FMTE9DX1NVUkYsIHF4bF9hbGxvY19zdXJmX2lvY3RsLAorCQkJICBEUk1fQVVUSHxE Uk1fVU5MT0NLRUQpLAorfTsKKworaW50IHF4bF9tYXhfaW9jdGxzID0gRFJNX0FSUkFZX1NJWkUo cXhsX2lvY3Rscyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9pcnEuYyBi L2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjIxMzkzZGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcXhs L3F4bF9pcnEuYwpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgUmVkIEhh dCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09Q WVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFM SU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogRGF2ZSBBaXJsaWUKKyAqICAg ICAgICAgIEFsb24gTGV2eQorICovCisKKyNpbmNsdWRlICJxeGxfZHJ2LmgiCisKK2lycXJldHVy bl90IHF4bF9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpCit7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IChzdHJ1Y3QgZHJtX2RldmljZSAqKSBhcmc7CisJc3RydWN0IHF4bF9kZXZpY2UgKnFk ZXYgPSAoc3RydWN0IHF4bF9kZXZpY2UgKilkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IHBl bmRpbmc7CisKKwlwZW5kaW5nID0geGNoZygmcWRldi0+cmFtX2hlYWRlci0+aW50X3BlbmRpbmcs IDApOworCisJYXRvbWljX2luYygmcWRldi0+aXJxX3JlY2VpdmVkKTsKKworCWlmIChwZW5kaW5n ICYgUVhMX0lOVEVSUlVQVF9ESVNQTEFZKSB7CisJCWF0b21pY19pbmMoJnFkZXYtPmlycV9yZWNl aXZlZF9kaXNwbGF5KTsKKwkJd2FrZV91cF9hbGwoJnFkZXYtPmRpc3BsYXlfZXZlbnQpOworCQlx eGxfcXVldWVfZ2FyYmFnZV9jb2xsZWN0KHFkZXYsIGZhbHNlKTsKKwl9CisJaWYgKHBlbmRpbmcg JiBRWExfSU5URVJSVVBUX0NVUlNPUikgeworCQlhdG9taWNfaW5jKCZxZGV2LT5pcnFfcmVjZWl2 ZWRfY3Vyc29yKTsKKwkJd2FrZV91cF9hbGwoJnFkZXYtPmN1cnNvcl9ldmVudCk7CisJfQorCWlm IChwZW5kaW5nICYgUVhMX0lOVEVSUlVQVF9JT19DTUQpIHsKKwkJYXRvbWljX2luYygmcWRldi0+ aXJxX3JlY2VpdmVkX2lvX2NtZCk7CisJCXdha2VfdXBfYWxsKCZxZGV2LT5pb19jbWRfZXZlbnQp OworCX0KKwlpZiAocGVuZGluZyAmIFFYTF9JTlRFUlJVUFRfRVJST1IpIHsKKwkJLyogVE9ETzog bG9nIGl0LCByZXNldCBkZXZpY2UgKG9ubHkgd2F5IHRvIGV4aXQgdGhpcyBjb25kaXRpb24pCisJ CSAqIChkbyBpdCBhIGNlcnRhaW4gbnVtYmVyIG9mIHRpbWVzLCBhZnRlcndhcmRzIGFkbWl0IGRl ZmVhdCwKKwkJICogdG8gYXZvaWQgZW5kbGVzcyBsb29wcykuCisJCSAqLworCQlxZGV2LT5pcnFf cmVjZWl2ZWRfZXJyb3IrKzsKKwkJcXhsX2lvX2xvZyhxZGV2LCAiJXM6IGRyaXZlciBpcyBpbiBi dWcgbW9kZS5cbiIsIF9fZnVuY19fKTsKKwl9CisJaWYgKHBlbmRpbmcgJiBRWExfSU5URVJSVVBU X0NMSUVOVF9NT05JVE9SU19DT05GSUcpIHsKKwkJcXhsX2lvX2xvZyhxZGV2LCAiUVhMX0lOVEVS UlVQVF9DTElFTlRfTU9OSVRPUlNfQ09ORklHXG4iKTsKKwkJc2NoZWR1bGVfd29yaygmcWRldi0+ Y2xpZW50X21vbml0b3JzX2NvbmZpZ193b3JrKTsKKwl9CisJcWRldi0+cmFtX2hlYWRlci0+aW50 X21hc2sgPSBRWExfSU5URVJSVVBUX01BU0s7CisJb3V0YigwLCBxZGV2LT5pb19iYXNlICsgUVhM X0lPX1VQREFURV9JUlEpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQg cXhsX2NsaWVudF9tb25pdG9yc19jb25maWdfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAq d29yaykKK3sKKwlzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBz dHJ1Y3QgcXhsX2RldmljZSwKKwkJCQkJICAgICAgIGNsaWVudF9tb25pdG9yc19jb25maWdfd29y ayk7CisKKwlxeGxfZGlzcGxheV9yZWFkX2NsaWVudF9tb25pdG9yc19jb25maWcocWRldik7Cit9 CisKK2ludCBxeGxfaXJxX2luaXQoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYpCit7CisJaW50IHJl dDsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnFkZXYtPmRpc3BsYXlfZXZlbnQpOworCWluaXRf d2FpdHF1ZXVlX2hlYWQoJnFkZXYtPmN1cnNvcl9ldmVudCk7CisJaW5pdF93YWl0cXVldWVfaGVh ZCgmcWRldi0+aW9fY21kX2V2ZW50KTsKKwlJTklUX1dPUksoJnFkZXYtPmNsaWVudF9tb25pdG9y c19jb25maWdfd29yaywKKwkJICBxeGxfY2xpZW50X21vbml0b3JzX2NvbmZpZ193b3JrX2Z1bmMp OworCWF0b21pY19zZXQoJnFkZXYtPmlycV9yZWNlaXZlZCwgMCk7CisJYXRvbWljX3NldCgmcWRl di0+aXJxX3JlY2VpdmVkX2Rpc3BsYXksIDApOworCWF0b21pY19zZXQoJnFkZXYtPmlycV9yZWNl aXZlZF9jdXJzb3IsIDApOworCWF0b21pY19zZXQoJnFkZXYtPmlycV9yZWNlaXZlZF9pb19jbWQs IDApOworCXFkZXYtPmlycV9yZWNlaXZlZF9lcnJvciA9IDA7CisJcmV0ID0gZHJtX2lycV9pbnN0 YWxsKHFkZXYtPmRkZXYpOworCXFkZXYtPnJhbV9oZWFkZXItPmludF9tYXNrID0gUVhMX0lOVEVS UlVQVF9NQVNLOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJRFJNX0VSUk9SKCJGYWls ZWQgaW5zdGFsbGluZyBpcnE6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJu IDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9rbXMuYyBiL2RyaXZl cnMvZ3B1L2RybS9xeGwvcXhsX2ttcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmE3YmQ2NzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9r bXMuYwpAQCAtMCwwICsxLDMwMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEzIFJlZCBIYXQgSW5j LgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3Rh bnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S CisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdI VCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1Mg SU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAg ICBBbG9uIExldnkKKyAqLworCisjaW5jbHVkZSAicXhsX2Rydi5oIgorI2luY2x1ZGUgInF4bF9v YmplY3QuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvLW1hcHBpbmcuaD4KKworaW50IHF4bF9sb2df bGV2ZWw7CisKK3N0YXRpYyB2b2lkIHF4bF9kdW1wX21vZGUoc3RydWN0IHF4bF9kZXZpY2UgKnFk ZXYsIHZvaWQgKnApCit7CisJc3RydWN0IHF4bF9tb2RlICptID0gcDsKKwlEUk1fREVCVUdfS01T KCIlZDogJWR4JWQgJWQgYml0cywgc3RyaWRlICVkLCAlZG1tIHggJWRtbSwgb3JpZW50YXRpb24g JWRcbiIsCisJCSAgICAgIG0tPmlkLCBtLT54X3JlcywgbS0+eV9yZXMsIG0tPmJpdHMsIG0tPnN0 cmlkZSwgbS0+eF9taWxpLAorCQkgICAgICBtLT55X21pbGksIG0tPm9yaWVudGF0aW9uKTsKK30K Kworc3RhdGljIGJvb2wgcXhsX2NoZWNrX2RldmljZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldikK K3sKKwlzdHJ1Y3QgcXhsX3JvbSAqcm9tID0gcWRldi0+cm9tOworCWludCBtb2RlX29mZnNldDsK KwlpbnQgaTsKKworCWlmIChyb20tPm1hZ2ljICE9IDB4NGY1MjU4NTEpIHsKKwkJRFJNX0VSUk9S KCJiYWQgcm9tIHNpZ25hdHVyZSAleFxuIiwgcm9tLT5tYWdpYyk7CisJCXJldHVybiBmYWxzZTsK Kwl9CisKKwlEUk1fSU5GTygiRGV2aWNlIFZlcnNpb24gJWQuJWRcbiIsIHJvbS0+aWQsIHJvbS0+ dXBkYXRlX2lkKTsKKwlEUk1fSU5GTygiQ29tcHJlc3Npb24gbGV2ZWwgJWQgbG9nIGxldmVsICVk XG4iLCByb20tPmNvbXByZXNzaW9uX2xldmVsLAorCQkgcm9tLT5sb2dfbGV2ZWwpOworCURSTV9J TkZPKCJDdXJyZW50bHkgdXNpbmcgbW9kZSAjJWQsIGxpc3QgYXQgMHgleFxuIiwKKwkJIHJvbS0+ bW9kZSwgcm9tLT5tb2Rlc19vZmZzZXQpOworCURSTV9JTkZPKCIlZCBpbyBwYWdlcyBhdCBvZmZz ZXQgMHgleFxuIiwKKwkJIHJvbS0+bnVtX2lvX3BhZ2VzLCByb20tPnBhZ2VzX29mZnNldCk7CisJ RFJNX0lORk8oIiVkIGJ5dGUgZHJhdyBhcmVhIGF0IG9mZnNldCAweCV4XG4iLAorCQkgcm9tLT5z dXJmYWNlMF9hcmVhX3NpemUsIHJvbS0+ZHJhd19hcmVhX29mZnNldCk7CisKKwlxZGV2LT52cmFt X3NpemUgPSByb20tPnN1cmZhY2UwX2FyZWFfc2l6ZTsKKwlEUk1fSU5GTygiUkFNIGhlYWRlciBv ZmZzZXQ6IDB4JXhcbiIsIHJvbS0+cmFtX2hlYWRlcl9vZmZzZXQpOworCisJbW9kZV9vZmZzZXQg PSByb20tPm1vZGVzX29mZnNldCAvIDQ7CisJcWRldi0+bW9kZV9pbmZvLm51bV9tb2RlcyA9ICgo dTMyICopcm9tKVttb2RlX29mZnNldF07CisJRFJNX0lORk8oInJvbSBtb2RlcyBvZmZzZXQgMHgl eCBmb3IgJWQgbW9kZXNcbiIsIHJvbS0+bW9kZXNfb2Zmc2V0LAorCQkgcWRldi0+bW9kZV9pbmZv Lm51bV9tb2Rlcyk7CisJcWRldi0+bW9kZV9pbmZvLm1vZGVzID0gKHZvaWQgKikoKHVpbnQzMl90 ICopcm9tICsgbW9kZV9vZmZzZXQgKyAxKTsKKwlmb3IgKGkgPSAwOyBpIDwgcWRldi0+bW9kZV9p bmZvLm51bV9tb2RlczsgaSsrKQorCQlxeGxfZHVtcF9tb2RlKHFkZXYsIHFkZXYtPm1vZGVfaW5m by5tb2RlcyArIGkpOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdWludDhfdCBzZXR1cF9z bG90KHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LCB1aW50OF90IHNsb3RfaW5kZXhfb2Zmc2V0LAor CXVuc2lnbmVkIGxvbmcgc3RhcnRfcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIGVuZF9waHlzX2Fk ZHIpCit7CisJdWludDY0X3QgaGlnaF9iaXRzOworCXN0cnVjdCBxeGxfbWVtc2xvdCAqc2xvdDsK Kwl1aW50OF90IHNsb3RfaW5kZXg7CisJc3RydWN0IHF4bF9yYW1faGVhZGVyICpyYW1faGVhZGVy ID0gcWRldi0+cmFtX2hlYWRlcjsKKworCXNsb3RfaW5kZXggPSBxZGV2LT5yb20tPnNsb3RzX3N0 YXJ0ICsgc2xvdF9pbmRleF9vZmZzZXQ7CisJc2xvdCA9ICZxZGV2LT5tZW1fc2xvdHNbc2xvdF9p bmRleF07CisJc2xvdC0+c3RhcnRfcGh5c19hZGRyID0gc3RhcnRfcGh5c19hZGRyOworCXNsb3Qt PmVuZF9waHlzX2FkZHIgPSBlbmRfcGh5c19hZGRyOworCXJhbV9oZWFkZXItPm1lbV9zbG90Lm1l bV9zdGFydCA9IHNsb3QtPnN0YXJ0X3BoeXNfYWRkcjsKKwlyYW1faGVhZGVyLT5tZW1fc2xvdC5t ZW1fZW5kID0gc2xvdC0+ZW5kX3BoeXNfYWRkcjsKKwlxeGxfaW9fbWVtc2xvdF9hZGQocWRldiwg c2xvdF9pbmRleCk7CisJc2xvdC0+Z2VuZXJhdGlvbiA9IHFkZXYtPnJvbS0+c2xvdF9nZW5lcmF0 aW9uOworCWhpZ2hfYml0cyA9IHNsb3RfaW5kZXggPDwgcWRldi0+c2xvdF9nZW5fYml0czsKKwlo aWdoX2JpdHMgfD0gc2xvdC0+Z2VuZXJhdGlvbjsKKwloaWdoX2JpdHMgPDw9ICg2NCAtIChxZGV2 LT5zbG90X2dlbl9iaXRzICsgcWRldi0+c2xvdF9pZF9iaXRzKSk7CisJc2xvdC0+aGlnaF9iaXRz ID0gaGlnaF9iaXRzOworCXJldHVybiBzbG90X2luZGV4OworfQorCitzdGF0aWMgdm9pZCBxeGxf Z2Nfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHF4bF9kZXZpY2Ug KnFkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHF4bF9kZXZpY2UsIGdjX3dvcmspOwor CXF4bF9nYXJiYWdlX2NvbGxlY3QocWRldik7Cit9CisKK2ludCBxeGxfZGV2aWNlX2luaXQoc3Ry dWN0IHF4bF9kZXZpY2UgKnFkZXYsCisJCSAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwKKwkJ ICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sK KwlpbnQgcjsKKworCXFkZXYtPmRldiA9ICZwZGV2LT5kZXY7CisJcWRldi0+ZGRldiA9IGRkZXY7 CisJcWRldi0+cGRldiA9IHBkZXY7CisJcWRldi0+ZmxhZ3MgPSBmbGFnczsKKworCW11dGV4X2lu aXQoJnFkZXYtPmdlbS5tdXRleCk7CisJbXV0ZXhfaW5pdCgmcWRldi0+dXBkYXRlX2FyZWFfbXV0 ZXgpOworCW11dGV4X2luaXQoJnFkZXYtPnJlbGVhc2VfbXV0ZXgpOworCW11dGV4X2luaXQoJnFk ZXYtPnN1cmZfZXZpY3RfbXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZxZGV2LT5nZW0ub2JqZWN0 cyk7CisKKwlxZGV2LT5yb21fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKTsKKwlx ZGV2LT5yb21fc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMik7CisJcWRldi0+dnJhbV9i YXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCXFkZXYtPnN1cmZhY2VyYW1fYmFz ZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKKwlxZGV2LT5zdXJmYWNlcmFtX3NpemUg PSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpOworCXFkZXYtPmlvX2Jhc2UgPSBwY2lfcmVzb3Vy Y2Vfc3RhcnQocGRldiwgMyk7CisKKwlxZGV2LT52cmFtX21hcHBpbmcgPSBpb19tYXBwaW5nX2Ny ZWF0ZV93YyhxZGV2LT52cmFtX2Jhc2UsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOworCXFk ZXYtPnN1cmZhY2VfbWFwcGluZyA9IGlvX21hcHBpbmdfY3JlYXRlX3djKHFkZXYtPnN1cmZhY2Vy YW1fYmFzZSwgcWRldi0+c3VyZmFjZXJhbV9zaXplKTsKKwlEUk1fREVCVUdfS01TKCJxeGw6IHZy YW0gJXAtJXAoJWRNICVkayksIHN1cmZhY2UgJXAtJXAoJWRNICVkaylcbiIsCisJCSAodm9pZCAq KXFkZXYtPnZyYW1fYmFzZSwgKHZvaWQgKilwY2lfcmVzb3VyY2VfZW5kKHBkZXYsIDApLAorCQkg KGludClwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApIC8gMTAyNCAvIDEwMjQsCisJCSAoaW50KXBj aV9yZXNvdXJjZV9sZW4ocGRldiwgMCkgLyAxMDI0LAorCQkgKHZvaWQgKilxZGV2LT5zdXJmYWNl cmFtX2Jhc2UsCisJCSAodm9pZCAqKXBjaV9yZXNvdXJjZV9lbmQocGRldiwgMSksCisJCSAoaW50 KXFkZXYtPnN1cmZhY2VyYW1fc2l6ZSAvIDEwMjQgLyAxMDI0LAorCQkgKGludClxZGV2LT5zdXJm YWNlcmFtX3NpemUgLyAxMDI0KTsKKworCXFkZXYtPnJvbSA9IGlvcmVtYXAocWRldi0+cm9tX2Jh c2UsIHFkZXYtPnJvbV9zaXplKTsKKwlpZiAoIXFkZXYtPnJvbSkgeworCQlwcl9lcnIoIlVuYWJs ZSB0byBpb3JlbWFwIFJPTVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXF4bF9jaGVj a19kZXZpY2UocWRldik7CisKKwlyID0gcXhsX2JvX2luaXQocWRldik7CisJaWYgKHIpIHsKKwkJ RFJNX0VSUk9SKCJibyBpbml0IGZhaWxlZCAlZFxuIiwgcik7CisJCXJldHVybiByOworCX0KKwor CXFkZXYtPnJhbV9oZWFkZXIgPSBpb3JlbWFwKHFkZXYtPnZyYW1fYmFzZSArCisJCQkJICAgcWRl di0+cm9tLT5yYW1faGVhZGVyX29mZnNldCwKKwkJCQkgICBzaXplb2YoKnFkZXYtPnJhbV9oZWFk ZXIpKTsKKworCXFkZXYtPmNvbW1hbmRfcmluZyA9IHF4bF9yaW5nX2NyZWF0ZSgmKHFkZXYtPnJh bV9oZWFkZXItPmNtZF9yaW5nX2hkciksCisJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBxeGxfY29t bWFuZCksCisJCQkJCSAgICAgUVhMX0NPTU1BTkRfUklOR19TSVpFLAorCQkJCQkgICAgIHFkZXYt PmlvX2Jhc2UgKyBRWExfSU9fTk9USUZZX0NNRCwKKwkJCQkJICAgICAmcWRldi0+ZGlzcGxheV9l dmVudCk7CisKKwlxZGV2LT5jdXJzb3JfcmluZyA9IHF4bF9yaW5nX2NyZWF0ZSgKKwkJCQkmKHFk ZXYtPnJhbV9oZWFkZXItPmN1cnNvcl9yaW5nX2hkciksCisJCQkJc2l6ZW9mKHN0cnVjdCBxeGxf Y29tbWFuZCksCisJCQkJUVhMX0NVUlNPUl9SSU5HX1NJWkUsCisJCQkJcWRldi0+aW9fYmFzZSAr IFFYTF9JT19OT1RJRllfQ01ELAorCQkJCSZxZGV2LT5jdXJzb3JfZXZlbnQpOworCisJcWRldi0+ cmVsZWFzZV9yaW5nID0gcXhsX3JpbmdfY3JlYXRlKAorCQkJCSYocWRldi0+cmFtX2hlYWRlci0+ cmVsZWFzZV9yaW5nX2hkciksCisJCQkJc2l6ZW9mKHVpbnQ2NF90KSwKKwkJCQlRWExfUkVMRUFT RV9SSU5HX1NJWkUsIDAsCisJCQkJTlVMTCk7CisKKwkvKiBUT0RPIC0gc2xvdCBpbml0aWFsaXph dGlvbiBzaG91bGQgaGFwcGVuIG9uIHJlc2V0LiB3aGVyZSBpcyBvdXIKKwkgKiByZXNldCBoYW5k bGVyPyAqLworCXFkZXYtPm5fbWVtX3Nsb3RzID0gcWRldi0+cm9tLT5zbG90c19lbmQ7CisJcWRl di0+c2xvdF9nZW5fYml0cyA9IHFkZXYtPnJvbS0+c2xvdF9nZW5fYml0czsKKwlxZGV2LT5zbG90 X2lkX2JpdHMgPSBxZGV2LT5yb20tPnNsb3RfaWRfYml0czsKKwlxZGV2LT52YV9zbG90X21hc2sg PQorCQkofih1aW50NjRfdCkwKSA+PiAocWRldi0+c2xvdF9pZF9iaXRzICsgcWRldi0+c2xvdF9n ZW5fYml0cyk7CisKKwlxZGV2LT5tZW1fc2xvdHMgPQorCQlrbWFsbG9jKHFkZXYtPm5fbWVtX3Ns b3RzICogc2l6ZW9mKHN0cnVjdCBxeGxfbWVtc2xvdCksCisJCQlHRlBfS0VSTkVMKTsKKworCWlk cl9pbml0KCZxZGV2LT5yZWxlYXNlX2lkcik7CisJc3Bpbl9sb2NrX2luaXQoJnFkZXYtPnJlbGVh c2VfaWRyX2xvY2spOworCisJaWRyX2luaXQoJnFkZXYtPnN1cmZfaWRfaWRyKTsKKwlzcGluX2xv Y2tfaW5pdCgmcWRldi0+c3VyZl9pZF9pZHJfbG9jayk7CisKKwltdXRleF9pbml0KCZxZGV2LT5h c3luY19pb19tdXRleCk7CisKKwkvKiByZXNldCB0aGUgZGV2aWNlIGludG8gYSBrbm93biBzdGF0 ZSAtIG5vIG1lbXNsb3RzLCBubyBwcmltYXJ5CisJICogY3JlYXRlZCwgbm8gc3VyZmFjZXMuICov CisJcXhsX2lvX3Jlc2V0KHFkZXYpOworCisJLyogbXVzdCBpbml0aWFsaXplIGlycSBiZWZvcmUg Zmlyc3QgYXN5bmMgaW8gLSBzbG90IGNyZWF0aW9uICovCisJciA9IHF4bF9pcnFfaW5pdChxZGV2 KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwkvKgorCSAqIE5vdGUgdGhhdCB2aXJ0dWFsIGlz IHN1cmZhY2UwLiBXZSByZWx5IG9uIHRoZSBzaW5nbGUgaW9yZW1hcCBkb25lCisJICogYmVmb3Jl LgorCSAqLworCXFkZXYtPm1haW5fbWVtX3Nsb3QgPSBzZXR1cF9zbG90KHFkZXYsIDAsCisJCSh1 bnNpZ25lZCBsb25nKXFkZXYtPnZyYW1fYmFzZSwKKwkJKHVuc2lnbmVkIGxvbmcpcWRldi0+dnJh bV9iYXNlICsgcWRldi0+cm9tLT5yYW1faGVhZGVyX29mZnNldCk7CisJcWRldi0+c3VyZmFjZXNf bWVtX3Nsb3QgPSBzZXR1cF9zbG90KHFkZXYsIDEsCisJCSh1bnNpZ25lZCBsb25nKXFkZXYtPnN1 cmZhY2VyYW1fYmFzZSwKKwkJKHVuc2lnbmVkIGxvbmcpcWRldi0+c3VyZmFjZXJhbV9iYXNlICsg cWRldi0+c3VyZmFjZXJhbV9zaXplKTsKKwlEUk1fSU5GTygibWFpbiBtZW0gc2xvdCAlZCBbJWx4 LCV4KVxuIiwKKwkJcWRldi0+bWFpbl9tZW1fc2xvdCwKKwkJKHVuc2lnbmVkIGxvbmcpcWRldi0+ dnJhbV9iYXNlLCBxZGV2LT5yb20tPnJhbV9oZWFkZXJfb2Zmc2V0KTsKKworCisJcWRldi0+Z2Nf cXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgicXhsX2djIik7CisJSU5JVF9X T1JLKCZxZGV2LT5nY193b3JrLCBxeGxfZ2Nfd29yayk7CisKKwlyID0gcXhsX2ZiX2luaXQocWRl dik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcXhsX2Rl dmljZV9maW5pKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2KQoreworCWlmIChxZGV2LT5jdXJyZW50 X3JlbGVhc2VfYm9bMF0pCisJCXF4bF9ib191bnJlZigmcWRldi0+Y3VycmVudF9yZWxlYXNlX2Jv WzBdKTsKKwlpZiAocWRldi0+Y3VycmVudF9yZWxlYXNlX2JvWzFdKQorCQlxeGxfYm9fdW5yZWYo JnFkZXYtPmN1cnJlbnRfcmVsZWFzZV9ib1sxXSk7CisJZmx1c2hfd29ya3F1ZXVlKHFkZXYtPmdj X3F1ZXVlKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShxZGV2LT5nY19xdWV1ZSk7CisJcWRldi0+Z2Nf cXVldWUgPSBOVUxMOworCisJcXhsX3JpbmdfZnJlZShxZGV2LT5jb21tYW5kX3JpbmcpOworCXF4 bF9yaW5nX2ZyZWUocWRldi0+Y3Vyc29yX3JpbmcpOworCXF4bF9yaW5nX2ZyZWUocWRldi0+cmVs ZWFzZV9yaW5nKTsKKwlxeGxfYm9fZmluaShxZGV2KTsKKwlpb19tYXBwaW5nX2ZyZWUocWRldi0+ c3VyZmFjZV9tYXBwaW5nKTsKKwlpb19tYXBwaW5nX2ZyZWUocWRldi0+dnJhbV9tYXBwaW5nKTsK Kwlpb3VubWFwKHFkZXYtPnJhbV9oZWFkZXIpOworCWlvdW5tYXAocWRldi0+cm9tKTsKKwlxZGV2 LT5yb20gPSBOVUxMOworCXFkZXYtPm1vZGVfaW5mby5tb2RlcyA9IE5VTEw7CisJcWRldi0+bW9k ZV9pbmZvLm51bV9tb2RlcyA9IDA7CisJcXhsX2RlYnVnZnNfcmVtb3ZlX2ZpbGVzKHFkZXYpOwor fQorCitpbnQgcXhsX2RyaXZlcl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlz dHJ1Y3QgcXhsX2RldmljZSAqcWRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAocWRldiA9 PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlxeGxfbW9kZXNldF9maW5pKHFkZXYpOworCXF4bF9kZXZp Y2VfZmluaShxZGV2KTsKKworCWtmcmVlKHFkZXYpOworCWRldi0+ZGV2X3ByaXZhdGUgPSBOVUxM OworCXJldHVybiAwOworfQorCitpbnQgcXhsX2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHF4bF9kZXZpY2UgKnFkZXY7 CisJaW50IHI7CisKKwkvKiByZXF1aXJlIGttcyAqLworCWlmICghZHJtX2NvcmVfY2hlY2tfZmVh dHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlxZGV2ID0g a3phbGxvYyhzaXplb2Yoc3RydWN0IHF4bF9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAocWRl diA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+ZGV2X3ByaXZhdGUgPSBxZGV2 OworCisJciA9IHF4bF9kZXZpY2VfaW5pdChxZGV2LCBkZXYsIGRldi0+cGRldiwgZmxhZ3MpOwor CWlmIChyKQorCQlnb3RvIG91dDsKKworCXIgPSBxeGxfbW9kZXNldF9pbml0KHFkZXYpOworCWlm IChyKSB7CisJCXF4bF9kcml2ZXJfdW5sb2FkKGRldik7CisJCWdvdG8gb3V0OworCX0KKworCXJl dHVybiAwOworb3V0OgorCWtmcmVlKHFkZXYpOworCXJldHVybiByOworfQorCisKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL3F4 bC9xeGxfb2JqZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFlZmI5 NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX29iamVjdC5jCkBA IC0wLDAgKzEsMzY1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTMgUmVkIEhhdCBJbmMuCisgKgor ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK KyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P TklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERF UihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAq IE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUg U09GVFdBUkUuCisgKgorICogQXV0aG9yczogRGF2ZSBBaXJsaWUKKyAqICAgICAgICAgIEFsb24g TGV2eQorICovCisKKyNpbmNsdWRlICJxeGxfZHJ2LmgiCisjaW5jbHVkZSAicXhsX29iamVjdC5o IgorCisjaW5jbHVkZSA8bGludXgvaW8tbWFwcGluZy5oPgorc3RhdGljIHZvaWQgcXhsX3R0bV9i b19kZXN0cm95KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqdGJvKQoreworCXN0cnVjdCBxeGxf Ym8gKmJvOworCXN0cnVjdCBxeGxfZGV2aWNlICpxZGV2OworCisJYm8gPSBjb250YWluZXJfb2Yo dGJvLCBzdHJ1Y3QgcXhsX2JvLCB0Ym8pOworCXFkZXYgPSAoc3RydWN0IHF4bF9kZXZpY2UgKili by0+Z2VtX2Jhc2UuZGV2LT5kZXZfcHJpdmF0ZTsKKworCXF4bF9zdXJmYWNlX2V2aWN0KHFkZXYs IGJvLCBmYWxzZSk7CisJcXhsX2ZlbmNlX2ZpbmkoJmJvLT5mZW5jZSk7CisJbXV0ZXhfbG9jaygm cWRldi0+Z2VtLm11dGV4KTsKKwlsaXN0X2RlbF9pbml0KCZiby0+bGlzdCk7CisJbXV0ZXhfdW5s b2NrKCZxZGV2LT5nZW0ubXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJmJvLT5nZW1f YmFzZSk7CisJa2ZyZWUoYm8pOworfQorCitib29sIHF4bF90dG1fYm9faXNfcXhsX2JvKHN0cnVj dCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCit7CisJaWYgKGJvLT5kZXN0cm95ID09ICZxeGxfdHRt X2JvX2Rlc3Ryb3kpCisJCXJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKK30KKwordm9pZCBx eGxfdHRtX3BsYWNlbWVudF9mcm9tX2RvbWFpbihzdHJ1Y3QgcXhsX2JvICpxYm8sIHUzMiBkb21h aW4pCit7CisJdTMyIGMgPSAwOworCisJcWJvLT5wbGFjZW1lbnQuZnBmbiA9IDA7CisJcWJvLT5w bGFjZW1lbnQubHBmbiA9IDA7CisJcWJvLT5wbGFjZW1lbnQucGxhY2VtZW50ID0gcWJvLT5wbGFj ZW1lbnRzOworCXFiby0+cGxhY2VtZW50LmJ1c3lfcGxhY2VtZW50ID0gcWJvLT5wbGFjZW1lbnRz OworCWlmIChkb21haW4gJiBRWExfR0VNX0RPTUFJTl9WUkFNKQorCQlxYm8tPnBsYWNlbWVudHNb YysrXSA9IFRUTV9QTF9GTEFHX0NBQ0hFRCB8IFRUTV9QTF9GTEFHX1ZSQU07CisJaWYgKGRvbWFp biAmIFFYTF9HRU1fRE9NQUlOX1NVUkZBQ0UpCisJCXFiby0+cGxhY2VtZW50c1tjKytdID0gVFRN X1BMX0ZMQUdfQ0FDSEVEIHwgVFRNX1BMX0ZMQUdfUFJJVjA7CisJaWYgKGRvbWFpbiAmIFFYTF9H RU1fRE9NQUlOX0NQVSkKKwkJcWJvLT5wbGFjZW1lbnRzW2MrK10gPSBUVE1fUExfTUFTS19DQUNI SU5HIHwgVFRNX1BMX0ZMQUdfU1lTVEVNOworCWlmICghYykKKwkJcWJvLT5wbGFjZW1lbnRzW2Mr K10gPSBUVE1fUExfTUFTS19DQUNISU5HIHwgVFRNX1BMX0ZMQUdfU1lTVEVNOworCXFiby0+cGxh Y2VtZW50Lm51bV9wbGFjZW1lbnQgPSBjOworCXFiby0+cGxhY2VtZW50Lm51bV9idXN5X3BsYWNl bWVudCA9IGM7Cit9CisKKworaW50IHF4bF9ib19jcmVhdGUoc3RydWN0IHF4bF9kZXZpY2UgKnFk ZXYsCisJCSAgdW5zaWduZWQgbG9uZyBzaXplLCBib29sIGtlcm5lbCwgdTMyIGRvbWFpbiwKKwkJ ICBzdHJ1Y3QgcXhsX3N1cmZhY2UgKnN1cmYsCisJCSAgc3RydWN0IHF4bF9ibyAqKmJvX3B0cikK K3sKKwlzdHJ1Y3QgcXhsX2JvICpibzsKKwllbnVtIHR0bV9ib190eXBlIHR5cGU7CisJaW50IHI7 CisKKwlpZiAodW5saWtlbHkocWRldi0+bW1hbi5iZGV2LmRldl9tYXBwaW5nID09IE5VTEwpKQor CQlxZGV2LT5tbWFuLmJkZXYuZGV2X21hcHBpbmcgPSBxZGV2LT5kZGV2LT5kZXZfbWFwcGluZzsK KwlpZiAoa2VybmVsKQorCQl0eXBlID0gdHRtX2JvX3R5cGVfa2VybmVsOworCWVsc2UKKwkJdHlw ZSA9IHR0bV9ib190eXBlX2RldmljZTsKKwkqYm9fcHRyID0gTlVMTDsKKwlibyA9IGt6YWxsb2Mo c2l6ZW9mKHN0cnVjdCBxeGxfYm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoYm8gPT0gTlVMTCkKKwkJ cmV0dXJuIC1FTk9NRU07CisJc2l6ZSA9IHJvdW5kdXAoc2l6ZSwgUEFHRV9TSVpFKTsKKwlyID0g ZHJtX2dlbV9vYmplY3RfaW5pdChxZGV2LT5kZGV2LCAmYm8tPmdlbV9iYXNlLCBzaXplKTsKKwlp ZiAodW5saWtlbHkocikpIHsKKwkJa2ZyZWUoYm8pOworCQlyZXR1cm4gcjsKKwl9CisJYm8tPmdl bV9iYXNlLmRyaXZlcl9wcml2YXRlID0gTlVMTDsKKwliby0+dHlwZSA9IGRvbWFpbjsKKwliby0+ cGluX2NvdW50ID0gMDsKKwliby0+c3VyZmFjZV9pZCA9IDA7CisJcXhsX2ZlbmNlX2luaXQocWRl diwgJmJvLT5mZW5jZSk7CisJSU5JVF9MSVNUX0hFQUQoJmJvLT5saXN0KTsKKwlhdG9taWNfc2V0 KCZiby0+cmVzZXJ2ZV9jb3VudCwgMCk7CisJaWYgKHN1cmYpCisJCWJvLT5zdXJmID0gKnN1cmY7 CisKKwlxeGxfdHRtX3BsYWNlbWVudF9mcm9tX2RvbWFpbihibywgZG9tYWluKTsKKworCXIgPSB0 dG1fYm9faW5pdCgmcWRldi0+bW1hbi5iZGV2LCAmYm8tPnRibywgc2l6ZSwgdHlwZSwKKwkJCSZi by0+cGxhY2VtZW50LCAwLCAha2VybmVsLCBOVUxMLCBzaXplLAorCQkJTlVMTCwgJnF4bF90dG1f Ym9fZGVzdHJveSk7CisJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKKwkJaWYgKHIgIT0gLUVSRVNU QVJUU1lTKQorCQkJZGV2X2VycihxZGV2LT5kZXYsCisJCQkJIm9iamVjdF9pbml0IGZhaWxlZCBm b3IgKCVsdSwgMHglMDhYKVxuIiwKKwkJCQlzaXplLCBkb21haW4pOworCQlyZXR1cm4gcjsKKwl9 CisJKmJvX3B0ciA9IGJvOworCXJldHVybiAwOworfQorCitpbnQgcXhsX2JvX2ttYXAoc3RydWN0 IHF4bF9ibyAqYm8sIHZvaWQgKipwdHIpCit7CisJYm9vbCBpc19pb21lbTsKKwlpbnQgcjsKKwor CWlmIChiby0+a3B0cikgeworCQlpZiAocHRyKQorCQkJKnB0ciA9IGJvLT5rcHRyOworCQlyZXR1 cm4gMDsKKwl9CisJciA9IHR0bV9ib19rbWFwKCZiby0+dGJvLCAwLCBiby0+dGJvLm51bV9wYWdl cywgJmJvLT5rbWFwKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJYm8tPmtwdHIgPSB0dG1fa21h cF9vYmpfdmlydHVhbCgmYm8tPmttYXAsICZpc19pb21lbSk7CisJaWYgKHB0cikKKwkJKnB0ciA9 IGJvLT5rcHRyOworCXJldHVybiAwOworfQorCit2b2lkICpxeGxfYm9fa21hcF9hdG9taWNfcGFn ZShzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwKKwkJCSAgICAgIHN0cnVjdCBxeGxfYm8gKmJvLCBp bnQgcGFnZV9vZmZzZXQpCit7CisJc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4gPSAm Ym8tPnRiby5iZGV2LT5tYW5bYm8tPnRiby5tZW0ubWVtX3R5cGVdOworCXZvaWQgKnJwdHI7CisJ aW50IHJldDsKKwlzdHJ1Y3QgaW9fbWFwcGluZyAqbWFwOworCisJaWYgKGJvLT50Ym8ubWVtLm1l bV90eXBlID09IFRUTV9QTF9WUkFNKQorCQltYXAgPSBxZGV2LT52cmFtX21hcHBpbmc7CisJZWxz ZSBpZiAoYm8tPnRiby5tZW0ubWVtX3R5cGUgPT0gVFRNX1BMX1BSSVYwKQorCQltYXAgPSBxZGV2 LT5zdXJmYWNlX21hcHBpbmc7CisJZWxzZQorCQlnb3RvIGZhbGxiYWNrOworCisJKHZvaWQpIHR0 bV9tZW1faW9fbG9jayhtYW4sIGZhbHNlKTsKKwlyZXQgPSB0dG1fbWVtX2lvX3Jlc2VydmUoYm8t PnRiby5iZGV2LCAmYm8tPnRiby5tZW0pOworCXR0bV9tZW1faW9fdW5sb2NrKG1hbik7CisKKwly ZXR1cm4gaW9fbWFwcGluZ19tYXBfYXRvbWljX3djKG1hcCwgYm8tPnRiby5tZW0uYnVzLm9mZnNl dCArIHBhZ2Vfb2Zmc2V0KTsKK2ZhbGxiYWNrOgorCWlmIChiby0+a3B0cikgeworCQlycHRyID0g Ym8tPmtwdHIgKyAocGFnZV9vZmZzZXQgKiBQQUdFX1NJWkUpOworCQlyZXR1cm4gcnB0cjsKKwl9 CisKKwlyZXQgPSBxeGxfYm9fa21hcChibywgJnJwdHIpOworCWlmIChyZXQpCisJCXJldHVybiBO VUxMOworCisJcnB0ciArPSBwYWdlX29mZnNldCAqIFBBR0VfU0laRTsKKwlyZXR1cm4gcnB0cjsK K30KKwordm9pZCBxeGxfYm9fa3VubWFwKHN0cnVjdCBxeGxfYm8gKmJvKQoreworCWlmIChiby0+ a3B0ciA9PSBOVUxMKQorCQlyZXR1cm47CisJYm8tPmtwdHIgPSBOVUxMOworCXR0bV9ib19rdW5t YXAoJmJvLT5rbWFwKTsKK30KKwordm9pZCBxeGxfYm9fa3VubWFwX2F0b21pY19wYWdlKHN0cnVj dCBxeGxfZGV2aWNlICpxZGV2LAorCQkJICAgICAgIHN0cnVjdCBxeGxfYm8gKmJvLCB2b2lkICpw bWFwKQoreworCXN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuID0gJmJvLT50Ym8uYmRl di0+bWFuW2JvLT50Ym8ubWVtLm1lbV90eXBlXTsKKwlzdHJ1Y3QgaW9fbWFwcGluZyAqbWFwOwor CisJaWYgKGJvLT50Ym8ubWVtLm1lbV90eXBlID09IFRUTV9QTF9WUkFNKQorCQltYXAgPSBxZGV2 LT52cmFtX21hcHBpbmc7CisJZWxzZSBpZiAoYm8tPnRiby5tZW0ubWVtX3R5cGUgPT0gVFRNX1BM X1BSSVYwKQorCQltYXAgPSBxZGV2LT5zdXJmYWNlX21hcHBpbmc7CisJZWxzZQorCQlnb3RvIGZh bGxiYWNrOworCisJaW9fbWFwcGluZ191bm1hcF9hdG9taWMocG1hcCk7CisKKwkodm9pZCkgdHRt X21lbV9pb19sb2NrKG1hbiwgZmFsc2UpOworCXR0bV9tZW1faW9fZnJlZShiby0+dGJvLmJkZXYs ICZiby0+dGJvLm1lbSk7CisJdHRtX21lbV9pb191bmxvY2sobWFuKTsKKwlyZXR1cm4gOworIGZh bGxiYWNrOgorCXF4bF9ib19rdW5tYXAoYm8pOworfQorCit2b2lkIHF4bF9ib191bnJlZihzdHJ1 Y3QgcXhsX2JvICoqYm8pCit7CisJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0Ym87CisKKwlp ZiAoKCpibykgPT0gTlVMTCkKKwkJcmV0dXJuOworCXRibyA9ICYoKCpibyktPnRibyk7CisJdHRt X2JvX3VucmVmKCZ0Ym8pOworCWlmICh0Ym8gPT0gTlVMTCkKKwkJKmJvID0gTlVMTDsKK30KKwor c3RydWN0IHF4bF9ibyAqcXhsX2JvX3JlZihzdHJ1Y3QgcXhsX2JvICpibykKK3sKKwl0dG1fYm9f cmVmZXJlbmNlKCZiby0+dGJvKTsKKwlyZXR1cm4gYm87Cit9CisKK2ludCBxeGxfYm9fcGluKHN0 cnVjdCBxeGxfYm8gKmJvLCB1MzIgZG9tYWluLCB1NjQgKmdwdV9hZGRyKQoreworCXN0cnVjdCBx eGxfZGV2aWNlICpxZGV2ID0gKHN0cnVjdCBxeGxfZGV2aWNlICopYm8tPmdlbV9iYXNlLmRldi0+ ZGV2X3ByaXZhdGU7CisJaW50IHIsIGk7CisKKwlpZiAoYm8tPnBpbl9jb3VudCkgeworCQliby0+ cGluX2NvdW50Kys7CisJCWlmIChncHVfYWRkcikKKwkJCSpncHVfYWRkciA9IHF4bF9ib19ncHVf b2Zmc2V0KGJvKTsKKwkJcmV0dXJuIDA7CisJfQorCXF4bF90dG1fcGxhY2VtZW50X2Zyb21fZG9t YWluKGJvLCBkb21haW4pOworCWZvciAoaSA9IDA7IGkgPCBiby0+cGxhY2VtZW50Lm51bV9wbGFj ZW1lbnQ7IGkrKykKKwkJYm8tPnBsYWNlbWVudHNbaV0gfD0gVFRNX1BMX0ZMQUdfTk9fRVZJQ1Q7 CisJciA9IHR0bV9ib192YWxpZGF0ZSgmYm8tPnRibywgJmJvLT5wbGFjZW1lbnQsIGZhbHNlLCBm YWxzZSk7CisJaWYgKGxpa2VseShyID09IDApKSB7CisJCWJvLT5waW5fY291bnQgPSAxOworCQlp ZiAoZ3B1X2FkZHIgIT0gTlVMTCkKKwkJCSpncHVfYWRkciA9IHF4bF9ib19ncHVfb2Zmc2V0KGJv KTsKKwl9CisJaWYgKHVubGlrZWx5KHIgIT0gMCkpCisJCWRldl9lcnIocWRldi0+ZGV2LCAiJXAg cGluIGZhaWxlZFxuIiwgYm8pOworCXJldHVybiByOworfQorCitpbnQgcXhsX2JvX3VucGluKHN0 cnVjdCBxeGxfYm8gKmJvKQoreworCXN0cnVjdCBxeGxfZGV2aWNlICpxZGV2ID0gKHN0cnVjdCBx eGxfZGV2aWNlICopYm8tPmdlbV9iYXNlLmRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHIsIGk7CisK KwlpZiAoIWJvLT5waW5fY291bnQpIHsKKwkJZGV2X3dhcm4ocWRldi0+ZGV2LCAiJXAgdW5waW4g bm90IG5lY2Vzc2FyeVxuIiwgYm8pOworCQlyZXR1cm4gMDsKKwl9CisJYm8tPnBpbl9jb3VudC0t OworCWlmIChiby0+cGluX2NvdW50KQorCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAwOyBpIDwgYm8t PnBsYWNlbWVudC5udW1fcGxhY2VtZW50OyBpKyspCisJCWJvLT5wbGFjZW1lbnRzW2ldICY9IH5U VE1fUExfRkxBR19OT19FVklDVDsKKwlyID0gdHRtX2JvX3ZhbGlkYXRlKCZiby0+dGJvLCAmYm8t PnBsYWNlbWVudCwgZmFsc2UsIGZhbHNlKTsKKwlpZiAodW5saWtlbHkociAhPSAwKSkKKwkJZGV2 X2VycihxZGV2LT5kZXYsICIlcCB2YWxpZGF0ZSBmYWlsZWQgZm9yIHVucGluXG4iLCBibyk7CisJ cmV0dXJuIHI7Cit9CisKK3ZvaWQgcXhsX2JvX2ZvcmNlX2RlbGV0ZShzdHJ1Y3QgcXhsX2Rldmlj ZSAqcWRldikKK3sKKwlzdHJ1Y3QgcXhsX2JvICpibywgKm47CisKKwlpZiAobGlzdF9lbXB0eSgm cWRldi0+Z2VtLm9iamVjdHMpKQorCQlyZXR1cm47CisJZGV2X2VycihxZGV2LT5kZXYsICJVc2Vy c3BhY2Ugc3RpbGwgaGFzIGFjdGl2ZSBvYmplY3RzICFcbiIpOworCWxpc3RfZm9yX2VhY2hfZW50 cnlfc2FmZShibywgbiwgJnFkZXYtPmdlbS5vYmplY3RzLCBsaXN0KSB7CisJCW11dGV4X2xvY2so JnFkZXYtPmRkZXYtPnN0cnVjdF9tdXRleCk7CisJCWRldl9lcnIocWRldi0+ZGV2LCAiJXAgJXAg JWx1ICVsdSBmb3JjZSBmcmVlXG4iLAorCQkJJmJvLT5nZW1fYmFzZSwgYm8sICh1bnNpZ25lZCBs b25nKWJvLT5nZW1fYmFzZS5zaXplLAorCQkJKigodW5zaWduZWQgbG9uZyAqKSZiby0+Z2VtX2Jh c2UucmVmY291bnQpKTsKKwkJbXV0ZXhfbG9jaygmcWRldi0+Z2VtLm11dGV4KTsKKwkJbGlzdF9k ZWxfaW5pdCgmYm8tPmxpc3QpOworCQltdXRleF91bmxvY2soJnFkZXYtPmdlbS5tdXRleCk7CisJ CS8qIHRoaXMgc2hvdWxkIHVucmVmIHRoZSB0dG0gYm8gKi8KKwkJZHJtX2dlbV9vYmplY3RfdW5y ZWZlcmVuY2UoJmJvLT5nZW1fYmFzZSk7CisJCW11dGV4X3VubG9jaygmcWRldi0+ZGRldi0+c3Ry dWN0X211dGV4KTsKKwl9Cit9CisKK2ludCBxeGxfYm9faW5pdChzdHJ1Y3QgcXhsX2RldmljZSAq cWRldikKK3sKKwlyZXR1cm4gcXhsX3R0bV9pbml0KHFkZXYpOworfQorCit2b2lkIHF4bF9ib19m aW5pKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2KQoreworCXF4bF90dG1fZmluaShxZGV2KTsKK30K KworaW50IHF4bF9ib19jaGVja19pZChzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwgc3RydWN0IHF4 bF9ibyAqYm8pCit7CisJaW50IHJldDsKKwlpZiAoYm8tPnR5cGUgPT0gUVhMX0dFTV9ET01BSU5f U1VSRkFDRSAmJiBiby0+c3VyZmFjZV9pZCA9PSAwKSB7CisJCS8qIGFsbG9jYXRlIGEgc3VyZmFj ZSBpZCBmb3IgdGhpcyBzdXJmYWNlIG5vdyAqLworCQlyZXQgPSBxeGxfc3VyZmFjZV9pZF9hbGxv YyhxZGV2LCBibyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IHF4bF9o d19zdXJmYWNlX2FsbG9jKHFkZXYsIGJvLCBOVUxMKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiBy ZXQ7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHF4bF9ib19saXN0X3VucmVzZXJ2ZShzdHJ1 Y3QgcXhsX3JlbG9jX2xpc3QgKnJlbG9jX2xpc3QsIGJvb2wgZmFpbGVkKQoreworCXN0cnVjdCBx eGxfYm9fbGlzdCAqZW50cnksICpzZjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRy eSwgc2YsICZyZWxvY19saXN0LT5ib3MsIGxoZWFkKSB7CisJCXF4bF9ib191bnJlc2VydmUoZW50 cnktPmJvKTsKKwkJbGlzdF9kZWwoJmVudHJ5LT5saGVhZCk7CisJCWtmcmVlKGVudHJ5KTsKKwl9 Cit9CisKK2ludCBxeGxfYm9fbGlzdF9hZGQoc3RydWN0IHF4bF9yZWxvY19saXN0ICpyZWxvY19s aXN0LCBzdHJ1Y3QgcXhsX2JvICpibykKK3sKKwlzdHJ1Y3QgcXhsX2JvX2xpc3QgKmVudHJ5Owor CWludCByZXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmcmVsb2NfbGlzdC0+Ym9z LCBsaGVhZCkgeworCQlpZiAoZW50cnktPmJvID09IGJvKQorCQkJcmV0dXJuIDA7CisJfQorCisJ ZW50cnkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcXhsX2JvX2xpc3QpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIWVudHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVudHJ5LT5ibyA9IGJvOworCWxp c3RfYWRkKCZlbnRyeS0+bGhlYWQsICZyZWxvY19saXN0LT5ib3MpOworCisJcmV0ID0gcXhsX2Jv X3Jlc2VydmUoYm8sIGZhbHNlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKCFi by0+cGluX2NvdW50KSB7CisJCXF4bF90dG1fcGxhY2VtZW50X2Zyb21fZG9tYWluKGJvLCBiby0+ dHlwZSk7CisJCXJldCA9IHR0bV9ib192YWxpZGF0ZSgmYm8tPnRibywgJmJvLT5wbGFjZW1lbnQs CisJCQkJICAgICAgdHJ1ZSwgZmFsc2UpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9 CisKKwkvKiBhbGxvY2F0ZSBhIHN1cmZhY2UgZm9yIHJlc2VydmVkICsgdmFsaWRhdGVkIGJ1ZmZl cnMgKi8KKwlyZXQgPSBxeGxfYm9fY2hlY2tfaWQoYm8tPmdlbV9iYXNlLmRldi0+ZGV2X3ByaXZh dGUsIGJvKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmggYi9kcml2ZXJzL2dwdS9kcm0v cXhsL3F4bF9vYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGZk ODlmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfb2JqZWN0LmgK QEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMyBSZWQgSGF0IEluYy4KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9M REVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgor ICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRI RSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxv biBMZXZ5CisgKi8KKyNpZm5kZWYgUVhMX09CSkVDVF9ICisjZGVmaW5lIFFYTF9PQkpFQ1RfSAor CisjaW5jbHVkZSAicXhsX2Rydi5oIgorCitzdGF0aWMgaW5saW5lIGludCBxeGxfYm9fcmVzZXJ2 ZShzdHJ1Y3QgcXhsX2JvICpibywgYm9vbCBub193YWl0KQoreworCWludCByOworCisJciA9IHR0 bV9ib19yZXNlcnZlKCZiby0+dGJvLCB0cnVlLCBub193YWl0LCBmYWxzZSwgMCk7CisJaWYgKHVu bGlrZWx5KHIgIT0gMCkpIHsKKwkJaWYgKHIgIT0gLUVSRVNUQVJUU1lTKSB7CisJCQlzdHJ1Y3Qg cXhsX2RldmljZSAqcWRldiA9IChzdHJ1Y3QgcXhsX2RldmljZSAqKWJvLT5nZW1fYmFzZS5kZXYt PmRldl9wcml2YXRlOworCQkJZGV2X2VycihxZGV2LT5kZXYsICIlcCByZXNlcnZlIGZhaWxlZFxu IiwgYm8pOworCQl9CisJCXJldHVybiByOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu bGluZSB2b2lkIHF4bF9ib191bnJlc2VydmUoc3RydWN0IHF4bF9ibyAqYm8pCit7CisJdHRtX2Jv X3VucmVzZXJ2ZSgmYm8tPnRibyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IHF4bF9ib19ncHVf b2Zmc2V0KHN0cnVjdCBxeGxfYm8gKmJvKQoreworCXJldHVybiBiby0+dGJvLm9mZnNldDsKK30K Kworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHF4bF9ib19zaXplKHN0cnVjdCBxeGxfYm8g KmJvKQoreworCXJldHVybiBiby0+dGJvLm51bV9wYWdlcyA8PCBQQUdFX1NISUZUOworfQorCitz dGF0aWMgaW5saW5lIGJvb2wgcXhsX2JvX2lzX3Jlc2VydmVkKHN0cnVjdCBxeGxfYm8gKmJvKQor eworCXJldHVybiAhIWF0b21pY19yZWFkKCZiby0+dGJvLnJlc2VydmVkKTsKK30KKworc3RhdGlj IGlubGluZSB1NjQgcXhsX2JvX21tYXBfb2Zmc2V0KHN0cnVjdCBxeGxfYm8gKmJvKQoreworCXJl dHVybiBiby0+dGJvLmFkZHJfc3BhY2Vfb2Zmc2V0OworfQorCitzdGF0aWMgaW5saW5lIGludCBx eGxfYm9fd2FpdChzdHJ1Y3QgcXhsX2JvICpibywgdTMyICptZW1fdHlwZSwKKwkJCSAgICAgIGJv b2wgbm9fd2FpdCkKK3sKKwlpbnQgcjsKKworCXIgPSB0dG1fYm9fcmVzZXJ2ZSgmYm8tPnRibywg dHJ1ZSwgbm9fd2FpdCwgZmFsc2UsIDApOworCWlmICh1bmxpa2VseShyICE9IDApKSB7CisJCWlm IChyICE9IC1FUkVTVEFSVFNZUykgeworCQkJc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYgPSAoc3Ry dWN0IHF4bF9kZXZpY2UgKiliby0+Z2VtX2Jhc2UuZGV2LT5kZXZfcHJpdmF0ZTsKKwkJCWRldl9l cnIocWRldi0+ZGV2LCAiJXAgcmVzZXJ2ZSBmYWlsZWQgZm9yIHdhaXRcbiIsCisJCQkJYm8pOwor CQl9CisJCXJldHVybiByOworCX0KKwlzcGluX2xvY2soJmJvLT50Ym8uYmRldi0+ZmVuY2VfbG9j ayk7CisJaWYgKG1lbV90eXBlKQorCQkqbWVtX3R5cGUgPSBiby0+dGJvLm1lbS5tZW1fdHlwZTsK KwlpZiAoYm8tPnRiby5zeW5jX29iaikKKwkJciA9IHR0bV9ib193YWl0KCZiby0+dGJvLCB0cnVl LCB0cnVlLCBub193YWl0KTsKKwlzcGluX3VubG9jaygmYm8tPnRiby5iZGV2LT5mZW5jZV9sb2Nr KTsKKwl0dG1fYm9fdW5yZXNlcnZlKCZiby0+dGJvKTsKKwlyZXR1cm4gcjsKK30KKworZXh0ZXJu IGludCBxeGxfYm9fY3JlYXRlKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAorCQkJIHVuc2lnbmVk IGxvbmcgc2l6ZSwKKwkJCSBib29sIGtlcm5lbCwgdTMyIGRvbWFpbiwKKwkJCSBzdHJ1Y3QgcXhs X3N1cmZhY2UgKnN1cmYsCisJCQkgc3RydWN0IHF4bF9ibyAqKmJvX3B0cik7CitleHRlcm4gaW50 IHF4bF9ib19rbWFwKHN0cnVjdCBxeGxfYm8gKmJvLCB2b2lkICoqcHRyKTsKK2V4dGVybiB2b2lk IHF4bF9ib19rdW5tYXAoc3RydWN0IHF4bF9ibyAqYm8pOwordm9pZCAqcXhsX2JvX2ttYXBfYXRv bWljX3BhZ2Uoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsIHN0cnVjdCBxeGxfYm8gKmJvLCBpbnQg cGFnZV9vZmZzZXQpOwordm9pZCBxeGxfYm9fa3VubWFwX2F0b21pY19wYWdlKHN0cnVjdCBxeGxf ZGV2aWNlICpxZGV2LCBzdHJ1Y3QgcXhsX2JvICpibywgdm9pZCAqbWFwKTsKK2V4dGVybiBzdHJ1 Y3QgcXhsX2JvICpxeGxfYm9fcmVmKHN0cnVjdCBxeGxfYm8gKmJvKTsKK2V4dGVybiB2b2lkIHF4 bF9ib191bnJlZihzdHJ1Y3QgcXhsX2JvICoqYm8pOworZXh0ZXJuIGludCBxeGxfYm9fcGluKHN0 cnVjdCBxeGxfYm8gKmJvLCB1MzIgZG9tYWluLCB1NjQgKmdwdV9hZGRyKTsKK2V4dGVybiBpbnQg cXhsX2JvX3VucGluKHN0cnVjdCBxeGxfYm8gKmJvKTsKK2V4dGVybiB2b2lkIHF4bF90dG1fcGxh Y2VtZW50X2Zyb21fZG9tYWluKHN0cnVjdCBxeGxfYm8gKnFibywgdTMyIGRvbWFpbik7CitleHRl cm4gYm9vbCBxeGxfdHRtX2JvX2lzX3F4bF9ibyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJv KTsKKworZXh0ZXJuIGludCBxeGxfYm9fbGlzdF9hZGQoc3RydWN0IHF4bF9yZWxvY19saXN0ICpy ZWxvY19saXN0LCBzdHJ1Y3QgcXhsX2JvICpibyk7CitleHRlcm4gdm9pZCBxeGxfYm9fbGlzdF91 bnJlc2VydmUoc3RydWN0IHF4bF9yZWxvY19saXN0ICpyZWxvY19saXN0LCBib29sIGZhaWxlZCk7 CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX3JlbGVhc2UuYyBi L2RyaXZlcnMvZ3B1L2RybS9xeGwvcXhsX3JlbGVhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi4xNjAwNzgxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L3F4bC9xeGxfcmVsZWFzZS5jCkBAIC0wLDAgKzEsMzA3IEBACisvKgorICogQ29weXJpZ2h0IDIw MTEgUmVkIEhhdCwgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YgorICogbGljZW5zZSwgYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20KKyAqIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT04tSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhF UgorICogSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRl ICJxeGxfZHJ2LmgiCisjaW5jbHVkZSAicXhsX29iamVjdC5oIgorCisvKgorICogZHJhd2FibGUg Y21kIGNhY2hlIC0gYWxsb2NhdGUgYSBidW5jaCBvZiBWUkFNIHBhZ2VzLCBzdWJhbGxvY2F0ZQor ICogaW50byAyNTYgYnl0ZSBjaHVua3MgZm9yIG5vdyAtIGdpdmVzIDE2IGNtZHMgcGVyIHBhZ2Uu CisgKgorICogdXNlIGFuIGlkYSB0byBpbmRleCBpbnRvIHRoZSBjaHVua3M/CisgKi8KKy8qIG1h bmFnZSByZWxlYXNlYWJsZXMgKi8KKy8qIHN0YWNrIHRoZW0gMTYgaGlnaCBmb3Igbm93IC1kcmF3 YWJsZSBvYmplY3QgaXMgMTkxICovCisjZGVmaW5lIFJFTEVBU0VfU0laRSAyNTYKKyNkZWZpbmUg UkVMRUFTRVNfUEVSX0JPICg0MDk2IC8gUkVMRUFTRV9TSVpFKQorLyogcHV0IGFuIGFsbG9jL2Rl YWxsb2Mgc3VyZmFjZSBjbWQgaW50byBvbmUgYm8gYW5kIHJvdW5kIHVwIHRvIDEyOCAqLworI2Rl ZmluZSBTVVJGQUNFX1JFTEVBU0VfU0laRSAxMjgKKyNkZWZpbmUgU1VSRkFDRV9SRUxFQVNFU19Q RVJfQk8gKDQwOTYgLyBTVVJGQUNFX1JFTEVBU0VfU0laRSkKKworc3RhdGljIGNvbnN0IGludCBy ZWxlYXNlX3NpemVfcGVyX2JvW10gPSB7IFJFTEVBU0VfU0laRSwgU1VSRkFDRV9SRUxFQVNFX1NJ WkUsIFJFTEVBU0VfU0laRSB9Oworc3RhdGljIGNvbnN0IGludCByZWxlYXNlc19wZXJfYm9bXSA9 IHsgUkVMRUFTRVNfUEVSX0JPLCBTVVJGQUNFX1JFTEVBU0VTX1BFUl9CTywgUkVMRUFTRVNfUEVS X0JPIH07Cit1aW50NjRfdAorcXhsX3JlbGVhc2VfYWxsb2Moc3RydWN0IHF4bF9kZXZpY2UgKnFk ZXYsIGludCB0eXBlLAorCQkgIHN0cnVjdCBxeGxfcmVsZWFzZSAqKnJldCkKK3sKKwlzdHJ1Y3Qg cXhsX3JlbGVhc2UgKnJlbGVhc2U7CisJaW50IGhhbmRsZSA9IDA7CisJc2l6ZV90IHNpemUgPSBz aXplb2YoKnJlbGVhc2UpOworCWludCBpZHJfcmV0OworCisJcmVsZWFzZSA9IGttYWxsb2Moc2l6 ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZWxlYXNlKSB7CisJCURSTV9FUlJPUigiT3V0IG9mIG1l bW9yeVxuIik7CisJCXJldHVybiAwOworCX0KKwlyZWxlYXNlLT50eXBlID0gdHlwZTsKKwlyZWxl YXNlLT5ib19jb3VudCA9IDA7CisJcmVsZWFzZS0+cmVsZWFzZV9vZmZzZXQgPSAwOworCXJlbGVh c2UtPnN1cmZhY2VfcmVsZWFzZV9pZCA9IDA7CithZ2FpbjoKKwlpZiAoaWRyX3ByZV9nZXQoJnFk ZXYtPnJlbGVhc2VfaWRyLCBHRlBfS0VSTkVMKSA9PSAwKSB7CisJCURSTV9FUlJPUigiT3V0IG9m IG1lbW9yeSBmb3IgcmVsZWFzZSBpZHJcbiIpOworCQlrZnJlZShyZWxlYXNlKTsKKwkJZ290byBy ZWxlYXNlX2ZhaWw7CisJfQorCXNwaW5fbG9jaygmcWRldi0+cmVsZWFzZV9pZHJfbG9jayk7CisJ aWRyX3JldCA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZxZGV2LT5yZWxlYXNlX2lkciwgcmVsZWFzZSwg MSwgJmhhbmRsZSk7CisJc3Bpbl91bmxvY2soJnFkZXYtPnJlbGVhc2VfaWRyX2xvY2spOworCWlm IChpZHJfcmV0ID09IC1FQUdBSU4pCisJCWdvdG8gYWdhaW47CisJaWYgKHJldCkKKwkJKnJldCA9 IHJlbGVhc2U7CisJUVhMX0lORk8ocWRldiwgImFsbG9jYXRlZCByZWxlYXNlICVsbGRcbiIsIGhh bmRsZSk7CisJcmVsZWFzZS0+aWQgPSBoYW5kbGU7CityZWxlYXNlX2ZhaWw6CisKKwlyZXR1cm4g aGFuZGxlOworfQorCit2b2lkCitxeGxfcmVsZWFzZV9mcmVlKHN0cnVjdCBxeGxfZGV2aWNlICpx ZGV2LAorCQkgc3RydWN0IHF4bF9yZWxlYXNlICpyZWxlYXNlKQoreworCWludCBpOworCisJUVhM X0lORk8ocWRldiwgInJlbGVhc2UgJWQsIHR5cGUgJWQsICVkIGJvc1xuIiwgcmVsZWFzZS0+aWQs CisJCSByZWxlYXNlLT50eXBlLCByZWxlYXNlLT5ib19jb3VudCk7CisKKwlpZiAocmVsZWFzZS0+ c3VyZmFjZV9yZWxlYXNlX2lkKQorCQlxeGxfc3VyZmFjZV9pZF9kZWFsbG9jKHFkZXYsIHJlbGVh c2UtPnN1cmZhY2VfcmVsZWFzZV9pZCk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IHJlbGVhc2UtPmJv X2NvdW50OyArK2kpIHsKKwkJUVhMX0lORk8ocWRldiwgInJlbGVhc2UgJWxseFxuIiwKKwkJCXJl bGVhc2UtPmJvc1tpXS0+dGJvLmFkZHJfc3BhY2Vfb2Zmc2V0CisJCQkJCQktIERSTV9GSUxFX09G RlNFVCk7CisJCXF4bF9mZW5jZV9yZW1vdmVfcmVsZWFzZSgmcmVsZWFzZS0+Ym9zW2ldLT5mZW5j ZSwgcmVsZWFzZS0+aWQpOworCQlxeGxfYm9fdW5yZWYoJnJlbGVhc2UtPmJvc1tpXSk7CisJfQor CXNwaW5fbG9jaygmcWRldi0+cmVsZWFzZV9pZHJfbG9jayk7CisJaWRyX3JlbW92ZSgmcWRldi0+ cmVsZWFzZV9pZHIsIHJlbGVhc2UtPmlkKTsKKwlzcGluX3VubG9jaygmcWRldi0+cmVsZWFzZV9p ZHJfbG9jayk7CisJa2ZyZWUocmVsZWFzZSk7Cit9CisKK3ZvaWQKK3F4bF9yZWxlYXNlX2FkZF9y ZXMoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsIHN0cnVjdCBxeGxfcmVsZWFzZSAqcmVsZWFzZSwK KwkJICAgIHN0cnVjdCBxeGxfYm8gKmJvKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBy ZWxlYXNlLT5ib19jb3VudDsgaSsrKQorCQlpZiAocmVsZWFzZS0+Ym9zW2ldID09IGJvKQorCQkJ cmV0dXJuOworCisJaWYgKHJlbGVhc2UtPmJvX2NvdW50ID49IFFYTF9NQVhfUkVTKSB7CisJCURS TV9FUlJPUigiZXhjZWVkZWQgbWF4IHJlc291cmNlIG9uIGEgcXhsX3JlbGVhc2UgaXRlbVxuIik7 CisJCXJldHVybjsKKwl9CisJcmVsZWFzZS0+Ym9zW3JlbGVhc2UtPmJvX2NvdW50KytdID0gcXhs X2JvX3JlZihibyk7Cit9CisKK2ludCBxeGxfcmVsZWFzZV9ib19hbGxvYyhzdHJ1Y3QgcXhsX2Rl dmljZSAqcWRldiwKKwkJCSBzdHJ1Y3QgcXhsX2JvICoqYm8pCit7CisJaW50IHJldDsKKwlyZXQg PSBxeGxfYm9fY3JlYXRlKHFkZXYsIFBBR0VfU0laRSwgZmFsc2UsIFFYTF9HRU1fRE9NQUlOX1ZS QU0sIE5VTEwsCisJCQkgICAgYm8pOworCXJldHVybiByZXQ7Cit9CisKK2ludCBxeGxfcmVsZWFz ZV9yZXNlcnZlKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAorCQkJc3RydWN0IHF4bF9yZWxlYXNl ICpyZWxlYXNlLCBib29sIG5vX3dhaXQpCit7CisJaW50IHJldDsKKwlpZiAoYXRvbWljX2luY19y ZXR1cm4oJnJlbGVhc2UtPmJvc1swXS0+cmVzZXJ2ZV9jb3VudCkgPT0gMSkgeworCQlyZXQgPSBx eGxfYm9fcmVzZXJ2ZShyZWxlYXNlLT5ib3NbMF0sIG5vX3dhaXQpOworCQlpZiAocmV0KQorCQkJ cmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcXhsX3JlbGVhc2VfdW5yZXNl cnZlKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2LAorCQkJICBzdHJ1Y3QgcXhsX3JlbGVhc2UgKnJl bGVhc2UpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJlbGVhc2UtPmJvc1swXS0+cmVz ZXJ2ZV9jb3VudCkpCisJCXF4bF9ib191bnJlc2VydmUocmVsZWFzZS0+Ym9zWzBdKTsKK30KKwor aW50IHF4bF9hbGxvY19zdXJmYWNlX3JlbGVhc2VfcmVzZXJ2ZWQoc3RydWN0IHF4bF9kZXZpY2Ug KnFkZXYsCisJCQkJICAgICAgIGVudW0gcXhsX3N1cmZhY2VfY21kX3R5cGUgc3VyZmFjZV9jbWRf dHlwZSwKKwkJCQkgICAgICAgc3RydWN0IHF4bF9yZWxlYXNlICpjcmVhdGVfcmVsLAorCQkJCSAg ICAgICBzdHJ1Y3QgcXhsX3JlbGVhc2UgKipyZWxlYXNlKQoreworCWludCByZXQ7CisKKwlpZiAo c3VyZmFjZV9jbWRfdHlwZSA9PSBRWExfU1VSRkFDRV9DTURfREVTVFJPWSAmJiBjcmVhdGVfcmVs KSB7CisJCWludCBpZHJfcmV0OworCQlzdHJ1Y3QgcXhsX2JvICpibzsKKwkJdW5pb24gcXhsX3Jl bGVhc2VfaW5mbyAqaW5mbzsKKworCQkvKiBzdGFzaCB0aGUgcmVsZWFzZSBhZnRlciB0aGUgY3Jl YXRlIGNvbW1hbmQgKi8KKwkJaWRyX3JldCA9IHF4bF9yZWxlYXNlX2FsbG9jKHFkZXYsIFFYTF9S RUxFQVNFX1NVUkZBQ0VfQ01ELCByZWxlYXNlKTsKKwkJYm8gPSBxeGxfYm9fcmVmKGNyZWF0ZV9y ZWwtPmJvc1swXSk7CisKKwkJKCpyZWxlYXNlKS0+cmVsZWFzZV9vZmZzZXQgPSBjcmVhdGVfcmVs LT5yZWxlYXNlX29mZnNldCArIDY0OworCisJCXF4bF9yZWxlYXNlX2FkZF9yZXMocWRldiwgKnJl bGVhc2UsIGJvKTsKKworCQlyZXQgPSBxeGxfcmVsZWFzZV9yZXNlcnZlKHFkZXYsICpyZWxlYXNl LCBmYWxzZSk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9FUlJPUigicmVsZWFzZSByZXNlcnZlIGZh aWxlZFxuIik7CisJCQlnb3RvIG91dF91bnJlZjsKKwkJfQorCQlpbmZvID0gcXhsX3JlbGVhc2Vf bWFwKHFkZXYsICpyZWxlYXNlKTsKKwkJaW5mby0+aWQgPSBpZHJfcmV0OworCQlxeGxfcmVsZWFz ZV91bm1hcChxZGV2LCAqcmVsZWFzZSwgaW5mbyk7CisKKworb3V0X3VucmVmOgorCQlxeGxfYm9f dW5yZWYoJmJvKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gcXhsX2FsbG9jX3JlbGVh c2VfcmVzZXJ2ZWQocWRldiwgc2l6ZW9mKHN0cnVjdCBxeGxfc3VyZmFjZV9jbWQpLAorCQkJCQkg UVhMX1JFTEVBU0VfU1VSRkFDRV9DTUQsIHJlbGVhc2UsIE5VTEwpOworfQorCitpbnQgcXhsX2Fs bG9jX3JlbGVhc2VfcmVzZXJ2ZWQoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYsIHVuc2lnbmVkIGxv bmcgc2l6ZSwKKwkJCQkgICAgICAgaW50IHR5cGUsIHN0cnVjdCBxeGxfcmVsZWFzZSAqKnJlbGVh c2UsCisJCQkJICAgICAgIHN0cnVjdCBxeGxfYm8gKipyYm8pCit7CisJc3RydWN0IHF4bF9ibyAq Ym87CisJaW50IGlkcl9yZXQ7CisJaW50IHJldDsKKwl1bmlvbiBxeGxfcmVsZWFzZV9pbmZvICpp bmZvOworCWludCBjdXJfaWR4OworCisJaWYgKHR5cGUgPT0gUVhMX1JFTEVBU0VfRFJBV0FCTEUp CisJCWN1cl9pZHggPSAwOworCWVsc2UgaWYgKHR5cGUgPT0gUVhMX1JFTEVBU0VfU1VSRkFDRV9D TUQpCisJCWN1cl9pZHggPSAxOworCWVsc2UgaWYgKHR5cGUgPT0gUVhMX1JFTEVBU0VfQ1VSU09S X0NNRCkKKwkJY3VyX2lkeCA9IDI7CisJZWxzZSB7CisJCURSTV9FUlJPUigiZ290IGlsbGVnYWwg dHlwZTogJWRcbiIsIHR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZHJfcmV0ID0g cXhsX3JlbGVhc2VfYWxsb2MocWRldiwgdHlwZSwgcmVsZWFzZSk7CisKKwltdXRleF9sb2NrKCZx ZGV2LT5yZWxlYXNlX211dGV4KTsKKwlpZiAocWRldi0+Y3VycmVudF9yZWxlYXNlX2JvX29mZnNl dFtjdXJfaWR4XSArIDEgPj0gcmVsZWFzZXNfcGVyX2JvW2N1cl9pZHhdKSB7CisJCXF4bF9ib191 bnJlZigmcWRldi0+Y3VycmVudF9yZWxlYXNlX2JvW2N1cl9pZHhdKTsKKwkJcWRldi0+Y3VycmVu dF9yZWxlYXNlX2JvX29mZnNldFtjdXJfaWR4XSA9IDA7CisJCXFkZXYtPmN1cnJlbnRfcmVsZWFz ZV9ib1tjdXJfaWR4XSA9IE5VTEw7CisJfQorCWlmICghcWRldi0+Y3VycmVudF9yZWxlYXNlX2Jv W2N1cl9pZHhdKSB7CisJCXJldCA9IHF4bF9yZWxlYXNlX2JvX2FsbG9jKHFkZXYsICZxZGV2LT5j dXJyZW50X3JlbGVhc2VfYm9bY3VyX2lkeF0pOworCQlpZiAocmV0KSB7CisJCQltdXRleF91bmxv Y2soJnFkZXYtPnJlbGVhc2VfbXV0ZXgpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCS8qIHBp biByZWxlYXNlcyBibydzIHRoZXkgYXJlIHRvbyBtZXNzeSB0byBldmljdCAqLworCQlyZXQgPSBx eGxfYm9fcmVzZXJ2ZShxZGV2LT5jdXJyZW50X3JlbGVhc2VfYm9bY3VyX2lkeF0sIGZhbHNlKTsK KwkJcXhsX2JvX3BpbihxZGV2LT5jdXJyZW50X3JlbGVhc2VfYm9bY3VyX2lkeF0sIFFYTF9HRU1f RE9NQUlOX1ZSQU0sIE5VTEwpOworCQlxeGxfYm9fdW5yZXNlcnZlKHFkZXYtPmN1cnJlbnRfcmVs ZWFzZV9ib1tjdXJfaWR4XSk7CisJfQorCisJYm8gPSBxeGxfYm9fcmVmKHFkZXYtPmN1cnJlbnRf cmVsZWFzZV9ib1tjdXJfaWR4XSk7CisKKwkoKnJlbGVhc2UpLT5yZWxlYXNlX29mZnNldCA9IHFk ZXYtPmN1cnJlbnRfcmVsZWFzZV9ib19vZmZzZXRbY3VyX2lkeF0gKiByZWxlYXNlX3NpemVfcGVy X2JvW2N1cl9pZHhdOworCXFkZXYtPmN1cnJlbnRfcmVsZWFzZV9ib19vZmZzZXRbY3VyX2lkeF0r KzsKKworCWlmIChyYm8pCisJCSpyYm8gPSBibzsKKworCXF4bF9yZWxlYXNlX2FkZF9yZXMocWRl diwgKnJlbGVhc2UsIGJvKTsKKworCXJldCA9IHF4bF9yZWxlYXNlX3Jlc2VydmUocWRldiwgKnJl bGVhc2UsIGZhbHNlKTsKKwltdXRleF91bmxvY2soJnFkZXYtPnJlbGVhc2VfbXV0ZXgpOworCWlm IChyZXQpCisJCWdvdG8gb3V0X3VucmVmOworCisJaW5mbyA9IHF4bF9yZWxlYXNlX21hcChxZGV2 LCAqcmVsZWFzZSk7CisJaW5mby0+aWQgPSBpZHJfcmV0OworCXF4bF9yZWxlYXNlX3VubWFwKHFk ZXYsICpyZWxlYXNlLCBpbmZvKTsKKworb3V0X3VucmVmOgorCXF4bF9ib191bnJlZigmYm8pOwor CXJldHVybiByZXQ7Cit9CisKK2ludCBxeGxfZmVuY2VfcmVsZWFzZWFibGUoc3RydWN0IHF4bF9k ZXZpY2UgKnFkZXYsCisJCQkgIHN0cnVjdCBxeGxfcmVsZWFzZSAqcmVsZWFzZSkKK3sKKwlpbnQg aSwgcmV0OworCWZvciAoaSA9IDA7IGkgPCByZWxlYXNlLT5ib19jb3VudDsgaSsrKSB7CisJCWlm ICghcmVsZWFzZS0+Ym9zW2ldLT50Ym8uc3luY19vYmopCisJCQlyZWxlYXNlLT5ib3NbaV0tPnRi by5zeW5jX29iaiA9ICZyZWxlYXNlLT5ib3NbaV0tPmZlbmNlOworCQlyZXQgPSBxeGxfZmVuY2Vf YWRkX3JlbGVhc2UoJnJlbGVhc2UtPmJvc1tpXS0+ZmVuY2UsIHJlbGVhc2UtPmlkKTsKKwkJaWYg KHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3QgcXhsX3Jl bGVhc2UgKnF4bF9yZWxlYXNlX2Zyb21faWRfbG9ja2VkKHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2 LAorCQkJCQkJICAgdWludDY0X3QgaWQpCit7CisJc3RydWN0IHF4bF9yZWxlYXNlICpyZWxlYXNl OworCisJc3Bpbl9sb2NrKCZxZGV2LT5yZWxlYXNlX2lkcl9sb2NrKTsKKwlyZWxlYXNlID0gaWRy X2ZpbmQoJnFkZXYtPnJlbGVhc2VfaWRyLCBpZCk7CisJc3Bpbl91bmxvY2soJnFkZXYtPnJlbGVh c2VfaWRyX2xvY2spOworCWlmICghcmVsZWFzZSkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBm aW5kIGlkIGluIHJlbGVhc2VfaWRyXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChyZWxl YXNlLT5ib19jb3VudCA8IDEpIHsKKwkJRFJNX0VSUk9SKCJyZWFkIGEgcmVsZWFzZWQgcmVzb3Vy Y2Ugd2l0aCAwIGJvc1xuIik7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gcmVsZWFzZTsK K30KKwordW5pb24gcXhsX3JlbGVhc2VfaW5mbyAqcXhsX3JlbGVhc2VfbWFwKHN0cnVjdCBxeGxf ZGV2aWNlICpxZGV2LAorCQkJCQlzdHJ1Y3QgcXhsX3JlbGVhc2UgKnJlbGVhc2UpCit7CisJdm9p ZCAqcHRyOworCXVuaW9uIHF4bF9yZWxlYXNlX2luZm8gKmluZm87CisJc3RydWN0IHF4bF9ibyAq Ym8gPSByZWxlYXNlLT5ib3NbMF07CisKKwlwdHIgPSBxeGxfYm9fa21hcF9hdG9taWNfcGFnZShx ZGV2LCBibywgcmVsZWFzZS0+cmVsZWFzZV9vZmZzZXQgJiBQQUdFX1NJWkUpOworCWluZm8gPSBw dHIgKyAocmVsZWFzZS0+cmVsZWFzZV9vZmZzZXQgJiB+UEFHRV9TSVpFKTsKKwlyZXR1cm4gaW5m bzsKK30KKwordm9pZCBxeGxfcmVsZWFzZV91bm1hcChzdHJ1Y3QgcXhsX2RldmljZSAqcWRldiwK KwkJICAgICAgIHN0cnVjdCBxeGxfcmVsZWFzZSAqcmVsZWFzZSwKKwkJICAgICAgIHVuaW9uIHF4 bF9yZWxlYXNlX2luZm8gKmluZm8pCit7CisJc3RydWN0IHF4bF9ibyAqYm8gPSByZWxlYXNlLT5i b3NbMF07CisJdm9pZCAqcHRyOworCisJcHRyID0gKCh2b2lkICopaW5mbykgLSAocmVsZWFzZS0+ cmVsZWFzZV9vZmZzZXQgJiB+UEFHRV9TSVpFKTsKKwlxeGxfYm9fa3VubWFwX2F0b21pY19wYWdl KHFkZXYsIGJvLCBwdHIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxf dHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF90dG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi41YTZlNzcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3F4bC9xeGxfdHRtLmMKQEAgLTAsMCArMSw1ODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAx MyBSZWQgSGF0IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAq IFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9U SEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxp ZQorICogICAgICAgICAgQWxvbiBMZXZ5CisgKi8KKworI2luY2x1ZGUgPHR0bS90dG1fYm9fYXBp Lmg+CisjaW5jbHVkZSA8dHRtL3R0bV9ib19kcml2ZXIuaD4KKyNpbmNsdWRlIDx0dG0vdHRtX3Bs YWNlbWVudC5oPgorI2luY2x1ZGUgPHR0bS90dG1fcGFnZV9hbGxvYy5oPgorI2luY2x1ZGUgPHR0 bS90dG1fbW9kdWxlLmg+CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJt Lmg+CisjaW5jbHVkZSA8ZHJtL3F4bF9kcm0uaD4KKyNpbmNsdWRlICJxeGxfZHJ2LmgiCisjaW5j bHVkZSAicXhsX29iamVjdC5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KK3N0YXRpYyBp bnQgcXhsX3R0bV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYpOworCitzdGF0 aWMgc3RydWN0IHF4bF9kZXZpY2UgKnF4bF9nZXRfcWRldihzdHJ1Y3QgdHRtX2JvX2RldmljZSAq YmRldikKK3sKKwlzdHJ1Y3QgcXhsX21tYW4gKm1tYW47CisJc3RydWN0IHF4bF9kZXZpY2UgKnFk ZXY7CisKKwltbWFuID0gY29udGFpbmVyX29mKGJkZXYsIHN0cnVjdCBxeGxfbW1hbiwgYmRldik7 CisJcWRldiA9IGNvbnRhaW5lcl9vZihtbWFuLCBzdHJ1Y3QgcXhsX2RldmljZSwgbW1hbik7CisJ cmV0dXJuIHFkZXY7Cit9CisKK3N0YXRpYyBpbnQgcXhsX3R0bV9tZW1fZ2xvYmFsX2luaXQoc3Ry dWN0IGRybV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpCit7CisJcmV0dXJuIHR0bV9tZW1fZ2xvYmFs X2luaXQocmVmLT5vYmplY3QpOworfQorCitzdGF0aWMgdm9pZCBxeGxfdHRtX21lbV9nbG9iYWxf cmVsZWFzZShzdHJ1Y3QgZHJtX2dsb2JhbF9yZWZlcmVuY2UgKnJlZikKK3sKKwl0dG1fbWVtX2ds b2JhbF9yZWxlYXNlKHJlZi0+b2JqZWN0KTsKK30KKworc3RhdGljIGludCBxeGxfdHRtX2dsb2Jh bF9pbml0KHN0cnVjdCBxeGxfZGV2aWNlICpxZGV2KQoreworCXN0cnVjdCBkcm1fZ2xvYmFsX3Jl ZmVyZW5jZSAqZ2xvYmFsX3JlZjsKKwlpbnQgcjsKKworCXFkZXYtPm1tYW4ubWVtX2dsb2JhbF9y ZWZlcmVuY2VkID0gZmFsc2U7CisJZ2xvYmFsX3JlZiA9ICZxZGV2LT5tbWFuLm1lbV9nbG9iYWxf cmVmOworCWdsb2JhbF9yZWYtPmdsb2JhbF90eXBlID0gRFJNX0dMT0JBTF9UVE1fTUVNOworCWds b2JhbF9yZWYtPnNpemUgPSBzaXplb2Yoc3RydWN0IHR0bV9tZW1fZ2xvYmFsKTsKKwlnbG9iYWxf cmVmLT5pbml0ID0gJnF4bF90dG1fbWVtX2dsb2JhbF9pbml0OworCWdsb2JhbF9yZWYtPnJlbGVh c2UgPSAmcXhsX3R0bV9tZW1fZ2xvYmFsX3JlbGVhc2U7CisKKwlyID0gZHJtX2dsb2JhbF9pdGVt X3JlZihnbG9iYWxfcmVmKTsKKwlpZiAociAhPSAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHNl dHRpbmcgdXAgVFRNIG1lbW9yeSBhY2NvdW50aW5nICIKKwkJCSAgInN1YnN5c3RlbS5cbiIpOwor CQlyZXR1cm4gcjsKKwl9CisKKwlxZGV2LT5tbWFuLmJvX2dsb2JhbF9yZWYubWVtX2dsb2IgPQor CQlxZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVmLm9iamVjdDsKKwlnbG9iYWxfcmVmID0gJnFkZXYt Pm1tYW4uYm9fZ2xvYmFsX3JlZi5yZWY7CisJZ2xvYmFsX3JlZi0+Z2xvYmFsX3R5cGUgPSBEUk1f R0xPQkFMX1RUTV9CTzsKKwlnbG9iYWxfcmVmLT5zaXplID0gc2l6ZW9mKHN0cnVjdCB0dG1fYm9f Z2xvYmFsKTsKKwlnbG9iYWxfcmVmLT5pbml0ID0gJnR0bV9ib19nbG9iYWxfaW5pdDsKKwlnbG9i YWxfcmVmLT5yZWxlYXNlID0gJnR0bV9ib19nbG9iYWxfcmVsZWFzZTsKKwlyID0gZHJtX2dsb2Jh bF9pdGVtX3JlZihnbG9iYWxfcmVmKTsKKwlpZiAociAhPSAwKSB7CisJCURSTV9FUlJPUigiRmFp bGVkIHNldHRpbmcgdXAgVFRNIEJPIHN1YnN5c3RlbS5cbiIpOworCQlkcm1fZ2xvYmFsX2l0ZW1f dW5yZWYoJnFkZXYtPm1tYW4ubWVtX2dsb2JhbF9yZWYpOworCQlyZXR1cm4gcjsKKwl9CisKKwlx ZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVmZXJlbmNlZCA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIHF4bF90dG1fZ2xvYmFsX2Zpbmkoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYp Cit7CisJaWYgKHFkZXYtPm1tYW4ubWVtX2dsb2JhbF9yZWZlcmVuY2VkKSB7CisJCWRybV9nbG9i YWxfaXRlbV91bnJlZigmcWRldi0+bW1hbi5ib19nbG9iYWxfcmVmLnJlZik7CisJCWRybV9nbG9i YWxfaXRlbV91bnJlZigmcWRldi0+bW1hbi5tZW1fZ2xvYmFsX3JlZik7CisJCXFkZXYtPm1tYW4u bWVtX2dsb2JhbF9yZWZlcmVuY2VkID0gZmFsc2U7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHZt X29wZXJhdGlvbnNfc3RydWN0IHF4bF90dG1fdm1fb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCB2 bV9vcGVyYXRpb25zX3N0cnVjdCAqdHRtX3ZtX29wczsKKworc3RhdGljIGludCBxeGxfdHRtX2Zh dWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sK KwlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvOworCXN0cnVjdCBxeGxfZGV2aWNlICpxZGV2 OworCWludCByOworCisJYm8gPSAoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICopdm1hLT52bV9w cml2YXRlX2RhdGE7CisJaWYgKGJvID09IE5VTEwpCisJCXJldHVybiBWTV9GQVVMVF9OT1BBR0U7 CisJcWRldiA9IHF4bF9nZXRfcWRldihiby0+YmRldik7CisJciA9IHR0bV92bV9vcHMtPmZhdWx0 KHZtYSwgdm1mKTsKKwlyZXR1cm4gcjsKK30KKworaW50IHF4bF9tbWFwKHN0cnVjdCBmaWxlICpm aWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGVfcHJpdjsKKwlzdHJ1Y3QgcXhsX2RldmljZSAqcWRldjsKKwlpbnQgcjsKKworCWlmICh1bmxp a2VseSh2bWEtPnZtX3Bnb2ZmIDwgRFJNX0ZJTEVfUEFHRV9PRkZTRVQpKSB7CisJCXByX2luZm8o IiVzOiB2bWEtPnZtX3Bnb2ZmICglbGQpIDwgRFJNX0ZJTEVfUEFHRV9PRkZTRVRcbiIsCisJCQlf X2Z1bmNfXywgdm1hLT52bV9wZ29mZik7CisJCXJldHVybiBkcm1fbW1hcChmaWxwLCB2bWEpOwor CX0KKworCWZpbGVfcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlxZGV2ID0gZmlsZV9wcml2 LT5taW5vci0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlpZiAocWRldiA9PSBOVUxMKSB7CisJCURSTV9F UlJPUigKKwkJICJmaWxwLT5wcml2YXRlX2RhdGEtPm1pbm9yLT5kZXYtPmRldl9wcml2YXRlID09 IE5VTExcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJUVhMX0lORk8ocWRldiwgIiVzOiBm aWxwLT5wcml2YXRlX2RhdGEgPSAweCVwLCB2bWEtPnZtX3Bnb2ZmID0gJWx4XG4iLAorCQkgX19m dW5jX18sIGZpbHAtPnByaXZhdGVfZGF0YSwgdm1hLT52bV9wZ29mZik7CisKKwlyID0gdHRtX2Jv X21tYXAoZmlscCwgdm1hLCAmcWRldi0+bW1hbi5iZGV2KTsKKwlpZiAodW5saWtlbHkociAhPSAw KSkKKwkJcmV0dXJuIHI7CisJaWYgKHVubGlrZWx5KHR0bV92bV9vcHMgPT0gTlVMTCkpIHsKKwkJ dHRtX3ZtX29wcyA9IHZtYS0+dm1fb3BzOworCQlxeGxfdHRtX3ZtX29wcyA9ICp0dG1fdm1fb3Bz OworCQlxeGxfdHRtX3ZtX29wcy5mYXVsdCA9ICZxeGxfdHRtX2ZhdWx0OworCX0KKwl2bWEtPnZt X29wcyA9ICZxeGxfdHRtX3ZtX29wczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxeGxf aW52YWxpZGF0ZV9jYWNoZXMoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsIHVpbnQzMl90IGZs YWdzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHF4bF9pbml0X21lbV90eXBlKHN0 cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LCB1aW50MzJfdCB0eXBlLAorCQkJICAgICBzdHJ1Y3Qg dHRtX21lbV90eXBlX21hbmFnZXIgKm1hbikKK3sKKwlzdHJ1Y3QgcXhsX2RldmljZSAqcWRldjsK KworCXFkZXYgPSBxeGxfZ2V0X3FkZXYoYmRldik7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNl IFRUTV9QTF9TWVNURU06CisJCS8qIFN5c3RlbSBtZW1vcnkgKi8KKwkJbWFuLT5mbGFncyA9IFRU TV9NRU1UWVBFX0ZMQUdfTUFQUEFCTEU7CisJCW1hbi0+YXZhaWxhYmxlX2NhY2hpbmcgPSBUVE1f UExfTUFTS19DQUNISU5HOworCQltYW4tPmRlZmF1bHRfY2FjaGluZyA9IFRUTV9QTF9GTEFHX0NB Q0hFRDsKKwkJYnJlYWs7CisJY2FzZSBUVE1fUExfVlJBTToKKwljYXNlIFRUTV9QTF9QUklWMDoK KwkJLyogIk9uLWNhcmQiIHZpZGVvIHJhbSAqLworCQltYW4tPmZ1bmMgPSAmdHRtX2JvX21hbmFn ZXJfZnVuYzsKKwkJbWFuLT5ncHVfb2Zmc2V0ID0gMDsKKwkJbWFuLT5mbGFncyA9IFRUTV9NRU1U WVBFX0ZMQUdfRklYRUQgfAorCQkJICAgICBUVE1fTUVNVFlQRV9GTEFHX01BUFBBQkxFOworCQlt YW4tPmF2YWlsYWJsZV9jYWNoaW5nID0gVFRNX1BMX01BU0tfQ0FDSElORzsKKwkJbWFuLT5kZWZh dWx0X2NhY2hpbmcgPSBUVE1fUExfRkxBR19DQUNIRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ CURSTV9FUlJPUigiVW5zdXBwb3J0ZWQgbWVtb3J5IHR5cGUgJXVcbiIsICh1bnNpZ25lZCl0eXBl KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBx eGxfZXZpY3RfZmxhZ3Moc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKKwkJCQlzdHJ1Y3Qg dHRtX3BsYWNlbWVudCAqcGxhY2VtZW50KQoreworCXN0cnVjdCBxeGxfYm8gKnFibzsKKwlzdGF0 aWMgdTMyIHBsYWNlbWVudHMgPSBUVE1fUExfTUFTS19DQUNISU5HIHwgVFRNX1BMX0ZMQUdfU1lT VEVNOworCisJaWYgKCFxeGxfdHRtX2JvX2lzX3F4bF9ibyhibykpIHsKKwkJcGxhY2VtZW50LT5m cGZuID0gMDsKKwkJcGxhY2VtZW50LT5scGZuID0gMDsKKwkJcGxhY2VtZW50LT5wbGFjZW1lbnQg PSAmcGxhY2VtZW50czsKKwkJcGxhY2VtZW50LT5idXN5X3BsYWNlbWVudCA9ICZwbGFjZW1lbnRz OworCQlwbGFjZW1lbnQtPm51bV9wbGFjZW1lbnQgPSAxOworCQlwbGFjZW1lbnQtPm51bV9idXN5 X3BsYWNlbWVudCA9IDE7CisJCXJldHVybjsKKwl9CisJcWJvID0gY29udGFpbmVyX29mKGJvLCBz dHJ1Y3QgcXhsX2JvLCB0Ym8pOworCXF4bF90dG1fcGxhY2VtZW50X2Zyb21fZG9tYWluKHFibywg UVhMX0dFTV9ET01BSU5fQ1BVKTsKKwkqcGxhY2VtZW50ID0gcWJvLT5wbGFjZW1lbnQ7Cit9CisK K3N0YXRpYyBpbnQgcXhsX3ZlcmlmeV9hY2Nlc3Moc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpi bywgc3RydWN0IGZpbGUgKmZpbHApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcXhs X3R0bV9pb19tZW1fcmVzZXJ2ZShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKKwkJCQkgIHN0 cnVjdCB0dG1fbWVtX3JlZyAqbWVtKQoreworCXN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAq bWFuID0gJmJkZXYtPm1hblttZW0tPm1lbV90eXBlXTsKKwlzdHJ1Y3QgcXhsX2RldmljZSAqcWRl diA9IHF4bF9nZXRfcWRldihiZGV2KTsKKworCW1lbS0+YnVzLmFkZHIgPSBOVUxMOworCW1lbS0+ YnVzLm9mZnNldCA9IDA7CisJbWVtLT5idXMuc2l6ZSA9IG1lbS0+bnVtX3BhZ2VzIDw8IFBBR0Vf U0hJRlQ7CisJbWVtLT5idXMuYmFzZSA9IDA7CisJbWVtLT5idXMuaXNfaW9tZW0gPSBmYWxzZTsK KwlpZiAoIShtYW4tPmZsYWdzICYgVFRNX01FTVRZUEVfRkxBR19NQVBQQUJMRSkpCisJCXJldHVy biAtRUlOVkFMOworCXN3aXRjaCAobWVtLT5tZW1fdHlwZSkgeworCWNhc2UgVFRNX1BMX1NZU1RF TToKKwkJLyogc3lzdGVtIG1lbW9yeSAqLworCQlyZXR1cm4gMDsKKwljYXNlIFRUTV9QTF9WUkFN OgorCQltZW0tPmJ1cy5pc19pb21lbSA9IHRydWU7CisJCW1lbS0+YnVzLmJhc2UgPSBxZGV2LT52 cmFtX2Jhc2U7CisJCW1lbS0+YnVzLm9mZnNldCA9IG1lbS0+c3RhcnQgPDwgUEFHRV9TSElGVDsK KwkJYnJlYWs7CisJY2FzZSBUVE1fUExfUFJJVjA6CisJCW1lbS0+YnVzLmlzX2lvbWVtID0gdHJ1 ZTsKKwkJbWVtLT5idXMuYmFzZSA9IHFkZXYtPnN1cmZhY2VyYW1fYmFzZTsKKwkJbWVtLT5idXMu b2Zmc2V0ID0gbWVtLT5zdGFydCA8PCBQQUdFX1NISUZUOworCQlicmVhazsKKwlkZWZhdWx0Ogor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHF4bF90 dG1faW9fbWVtX2ZyZWUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCisJCQkJc3RydWN0IHR0 bV9tZW1fcmVnICptZW0pCit7Cit9CisKKy8qCisgKiBUVE0gYmFja2VuZCBmdW5jdGlvbnMuCisg Ki8KK3N0cnVjdCBxeGxfdHRtX3R0IHsKKwlzdHJ1Y3QgdHRtX2RtYV90dAkJdHRtOworCXN0cnVj dCBxeGxfZGV2aWNlCQkqcWRldjsKKwl1NjQJCQkJb2Zmc2V0OworfTsKKworc3RhdGljIGludCBx eGxfdHRtX2JhY2tlbmRfYmluZChzdHJ1Y3QgdHRtX3R0ICp0dG0sCisJCQkJc3RydWN0IHR0bV9t ZW1fcmVnICpib19tZW0pCit7CisJc3RydWN0IHF4bF90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRt OworCisJZ3R0LT5vZmZzZXQgPSAodW5zaWduZWQgbG9uZykoYm9fbWVtLT5zdGFydCA8PCBQQUdF X1NISUZUKTsKKwlpZiAoIXR0bS0+bnVtX3BhZ2VzKSB7CisJCVdBUk4oMSwgIm5vdGhpbmcgdG8g YmluZCAlbHUgcGFnZXMgZm9yIG1yZWcgJXAgYmFjayAlcCFcbiIsCisJCSAgICAgdHRtLT5udW1f cGFnZXMsIGJvX21lbSwgdHRtKTsKKwl9CisJLyogTm90IGltcGxlbWVudGVkICovCisJcmV0dXJu IC0xOworfQorCitzdGF0aWMgaW50IHF4bF90dG1fYmFja2VuZF91bmJpbmQoc3RydWN0IHR0bV90 dCAqdHRtKQoreworCS8qIE5vdCBpbXBsZW1lbnRlZCAqLworCXJldHVybiAtMTsKK30KKworc3Rh dGljIHZvaWQgcXhsX3R0bV9iYWNrZW5kX2Rlc3Ryb3koc3RydWN0IHR0bV90dCAqdHRtKQorewor CXN0cnVjdCBxeGxfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsKKworCXR0bV9kbWFfdHRfZmlu aSgmZ3R0LT50dG0pOworCWtmcmVlKGd0dCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHRtX2JhY2tl bmRfZnVuYyBxeGxfYmFja2VuZF9mdW5jID0geworCS5iaW5kID0gJnF4bF90dG1fYmFja2VuZF9i aW5kLAorCS51bmJpbmQgPSAmcXhsX3R0bV9iYWNrZW5kX3VuYmluZCwKKwkuZGVzdHJveSA9ICZx eGxfdHRtX2JhY2tlbmRfZGVzdHJveSwKK307CisKK3N0YXRpYyBpbnQgcXhsX3R0bV90dF9wb3B1 bGF0ZShzdHJ1Y3QgdHRtX3R0ICp0dG0pCit7CisJaW50IHI7CisKKwlpZiAodHRtLT5zdGF0ZSAh PSB0dF91bnBvcHVsYXRlZCkKKwkJcmV0dXJuIDA7CisKKwlyID0gdHRtX3Bvb2xfcG9wdWxhdGUo dHRtKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgcXhsX3R0bV90dF91bnBvcHVsYXRlKHN0cnVjdCB0dG1fdHQgKnR0bSkKK3sKKwl0dG1fcG9v bF91bnBvcHVsYXRlKHR0bSk7Cit9CisKK3N0cnVjdCB0dG1fdHQgKnF4bF90dG1fdHRfY3JlYXRl KHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LAorCQkJCSB1bnNpZ25lZCBsb25nIHNpemUsIHVp bnQzMl90IHBhZ2VfZmxhZ3MsCisJCQkJIHN0cnVjdCBwYWdlICpkdW1teV9yZWFkX3BhZ2UpCit7 CisJc3RydWN0IHF4bF9kZXZpY2UgKnFkZXY7CisJc3RydWN0IHF4bF90dG1fdHQgKmd0dDsKKwor CXFkZXYgPSBxeGxfZ2V0X3FkZXYoYmRldik7CisJZ3R0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0 IHF4bF90dG1fdHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZ3R0ID09IE5VTEwpCisJCXJldHVybiBO VUxMOworCWd0dC0+dHRtLnR0bS5mdW5jID0gJnF4bF9iYWNrZW5kX2Z1bmM7CisJZ3R0LT5xZGV2 ID0gcWRldjsKKwlpZiAodHRtX2RtYV90dF9pbml0KCZndHQtPnR0bSwgYmRldiwgc2l6ZSwgcGFn ZV9mbGFncywKKwkJCSAgICBkdW1teV9yZWFkX3BhZ2UpKSB7CisJCWtmcmVlKGd0dCk7CisJCXJl dHVybiBOVUxMOworCX0KKwlyZXR1cm4gJmd0dC0+dHRtLnR0bTsKK30KKworc3RhdGljIHZvaWQg cXhsX21vdmVfbnVsbChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAorCQkJICAgICBzdHJ1 Y3QgdHRtX21lbV9yZWcgKm5ld19tZW0pCit7CisJc3RydWN0IHR0bV9tZW1fcmVnICpvbGRfbWVt ID0gJmJvLT5tZW07CisKKwlCVUdfT04ob2xkX21lbS0+bW1fbm9kZSAhPSBOVUxMKTsKKwkqb2xk X21lbSA9ICpuZXdfbWVtOworCW5ld19tZW0tPm1tX25vZGUgPSBOVUxMOworfQorCitzdGF0aWMg aW50IHF4bF9ib19tb3ZlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCisJCSAgICAgICBi b29sIGV2aWN0LCBib29sIGludGVycnVwdGlibGUsCisJCSAgICAgICBib29sIG5vX3dhaXRfZ3B1 LAorCQkgICAgICAgc3RydWN0IHR0bV9tZW1fcmVnICpuZXdfbWVtKQoreworCXN0cnVjdCB0dG1f bWVtX3JlZyAqb2xkX21lbSA9ICZiby0+bWVtOworCWlmIChvbGRfbWVtLT5tZW1fdHlwZSA9PSBU VE1fUExfU1lTVEVNICYmIGJvLT50dG0gPT0gTlVMTCkgeworCQlxeGxfbW92ZV9udWxsKGJvLCBu ZXdfbWVtKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiB0dG1fYm9fbW92ZV9tZW1jcHkoYm8s IGV2aWN0LCBub193YWl0X2dwdSwgbmV3X21lbSk7Cit9CisKKworc3RhdGljIGludCBxeGxfc3lu Y19vYmpfd2FpdCh2b2lkICpzeW5jX29iaiwKKwkJCSAgICAgYm9vbCBsYXp5LCBib29sIGludGVy cnVwdGlibGUpCit7CisJc3RydWN0IHF4bF9mZW5jZSAqcWZlbmNlID0gKHN0cnVjdCBxeGxfZmVu Y2UgKilzeW5jX29iajsKKwlpbnQgY291bnQgPSAwLCBzYyA9IDA7CisJc3RydWN0IHF4bF9ibyAq Ym8gPSBjb250YWluZXJfb2YocWZlbmNlLCBzdHJ1Y3QgcXhsX2JvLCBmZW5jZSk7CisKKwlpZiAo cWZlbmNlLT5udW1fYWN0aXZlX3JlbGVhc2VzID09IDApCisJCXJldHVybiAwOworCityZXRyeToK KwlpZiAoc2MgPT0gMCkgeworCQlpZiAoYm8tPnR5cGUgPT0gUVhMX0dFTV9ET01BSU5fU1VSRkFD RSkKKwkJCXF4bF91cGRhdGVfc3VyZmFjZShxZmVuY2UtPnFkZXYsIGJvKTsKKwl9IGVsc2UgaWYg KHNjID49IDEpIHsKKwkJcXhsX2lvX25vdGlmeV9vb20ocWZlbmNlLT5xZGV2KTsKKwl9CisKKwlx eGxfcmVsZWFzZV9yaW5nX2ZsdXNoKHFmZW5jZS0+cWRldik7CisJc2MrKzsKKworCWZvciAoY291 bnQgPSAwOyBjb3VudCA8IDEwOyBjb3VudCsrKSB7CisJCWJvb2wgcmV0OworCQlyZXQgPSBxeGxf cXVldWVfZ2FyYmFnZV9jb2xsZWN0KHFmZW5jZS0+cWRldiwgdHJ1ZSk7CisJCWlmIChyZXQgPT0g ZmFsc2UpCisJCQlicmVhazsKKworCQlpZiAocWZlbmNlLT5udW1fYWN0aXZlX3JlbGVhc2VzID09 IDApCisJCQlyZXR1cm4gMDsKKworCQlxeGxfcmVsZWFzZV9yaW5nX2ZsdXNoKHFmZW5jZS0+cWRl dik7CisJfQorCisJaWYgKHFmZW5jZS0+bnVtX2FjdGl2ZV9yZWxlYXNlcykgeworCQlib29sIGhh dmVfZHJhd2FibGVfcmVsZWFzZXMgPSBmYWxzZTsKKwkJdm9pZCAqKnNsb3Q7CisJCXN0cnVjdCBy YWRpeF90cmVlX2l0ZXIgaXRlcjsKKwkJaW50IHJlbGVhc2VfaWQ7CisKKwkJcmFkaXhfdHJlZV9m b3JfZWFjaF9zbG90KHNsb3QsICZxZmVuY2UtPnRyZWUsICZpdGVyLCAwKSB7CisJCQlzdHJ1Y3Qg cXhsX3JlbGVhc2UgKnJlbGVhc2U7CisKKwkJCXJlbGVhc2VfaWQgPSBpdGVyLmluZGV4OworCQkJ cmVsZWFzZSA9IHF4bF9yZWxlYXNlX2Zyb21faWRfbG9ja2VkKHFmZW5jZS0+cWRldiwgcmVsZWFz ZV9pZCk7CisJCQlpZiAocmVsZWFzZSA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAo cmVsZWFzZS0+dHlwZSA9PSBRWExfUkVMRUFTRV9EUkFXQUJMRSkKKwkJCQloYXZlX2RyYXdhYmxl X3JlbGVhc2VzID0gdHJ1ZTsKKwkJfQorCisJCXF4bF9xdWV1ZV9nYXJiYWdlX2NvbGxlY3QocWZl bmNlLT5xZGV2LCB0cnVlKTsKKworCQlpZiAoaGF2ZV9kcmF3YWJsZV9yZWxlYXNlcyB8fCBzYyA8 IDQpIHsKKwkJCWlmIChzYyA+IDIpCisJCQkJLyogYmFjayBvZmYgKi8KKwkJCQl1c2xlZXBfcmFu Z2UoNTAwLCAxMDAwKTsKKwkJCWlmIChoYXZlX2RyYXdhYmxlX3JlbGVhc2VzICYmIHNjID4gMzAw KSB7CisJCQkJV0FSTigxLCAic3luYyBvYmogJWQgc3RpbGwgaGFzIG91dHN0YW5kaW5nIHJlbGVh c2VzICVkICVkICVkICVsZCAlZFxuIiwgc2MsIGJvLT5zdXJmYWNlX2lkLCBiby0+aXNfcHJpbWFy eSwgYm8tPnBpbl9jb3VudCwgKHVuc2lnbmVkIGxvbmcpYm8tPmdlbV9iYXNlLnNpemUsIHFmZW5j ZS0+bnVtX2FjdGl2ZV9yZWxlYXNlcyk7CisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCX0KKwkJCWdv dG8gcmV0cnk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcXhsX3N5bmNf b2JqX2ZsdXNoKHZvaWQgKnN5bmNfb2JqKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBxeGxfc3luY19vYmpfdW5yZWYodm9pZCAqKnN5bmNfb2JqKQoreworfQorCitzdGF0aWMgdm9p ZCAqcXhsX3N5bmNfb2JqX3JlZih2b2lkICpzeW5jX29iaikKK3sKKwlyZXR1cm4gc3luY19vYmo7 Cit9CisKK3N0YXRpYyBib29sIHF4bF9zeW5jX29ial9zaWduYWxlZCh2b2lkICpzeW5jX29iaikK K3sKKwlzdHJ1Y3QgcXhsX2ZlbmNlICpxZmVuY2UgPSAoc3RydWN0IHF4bF9mZW5jZSAqKXN5bmNf b2JqOworCXJldHVybiAocWZlbmNlLT5udW1fYWN0aXZlX3JlbGVhc2VzID09IDApOworfQorCitz dGF0aWMgdm9pZCBxeGxfYm9fbW92ZV9ub3RpZnkoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpi bywKKwkJCSAgICAgICBzdHJ1Y3QgdHRtX21lbV9yZWcgKm5ld19tZW0pCit7CisJc3RydWN0IHF4 bF9ibyAqcWJvOworCXN0cnVjdCBxeGxfZGV2aWNlICpxZGV2OworCisJaWYgKCFxeGxfdHRtX2Jv X2lzX3F4bF9ibyhibykpCisJCXJldHVybjsKKwlxYm8gPSBjb250YWluZXJfb2YoYm8sIHN0cnVj dCBxeGxfYm8sIHRibyk7CisJcWRldiA9IHFiby0+Z2VtX2Jhc2UuZGV2LT5kZXZfcHJpdmF0ZTsK KworCWlmIChiby0+bWVtLm1lbV90eXBlID09IFRUTV9QTF9QUklWMCAmJiBxYm8tPnN1cmZhY2Vf aWQpCisJCXF4bF9zdXJmYWNlX2V2aWN0KHFkZXYsIHFibywgbmV3X21lbSA/IHRydWUgOiBmYWxz ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHRtX2JvX2RyaXZlciBxeGxfYm9fZHJpdmVyID0gewor CS50dG1fdHRfY3JlYXRlID0gJnF4bF90dG1fdHRfY3JlYXRlLAorCS50dG1fdHRfcG9wdWxhdGUg PSAmcXhsX3R0bV90dF9wb3B1bGF0ZSwKKwkudHRtX3R0X3VucG9wdWxhdGUgPSAmcXhsX3R0bV90 dF91bnBvcHVsYXRlLAorCS5pbnZhbGlkYXRlX2NhY2hlcyA9ICZxeGxfaW52YWxpZGF0ZV9jYWNo ZXMsCisJLmluaXRfbWVtX3R5cGUgPSAmcXhsX2luaXRfbWVtX3R5cGUsCisJLmV2aWN0X2ZsYWdz ID0gJnF4bF9ldmljdF9mbGFncywKKwkubW92ZSA9ICZxeGxfYm9fbW92ZSwKKwkudmVyaWZ5X2Fj Y2VzcyA9ICZxeGxfdmVyaWZ5X2FjY2VzcywKKwkuaW9fbWVtX3Jlc2VydmUgPSAmcXhsX3R0bV9p b19tZW1fcmVzZXJ2ZSwKKwkuaW9fbWVtX2ZyZWUgPSAmcXhsX3R0bV9pb19tZW1fZnJlZSwKKwku c3luY19vYmpfc2lnbmFsZWQgPSAmcXhsX3N5bmNfb2JqX3NpZ25hbGVkLAorCS5zeW5jX29ial93 YWl0ID0gJnF4bF9zeW5jX29ial93YWl0LAorCS5zeW5jX29ial9mbHVzaCA9ICZxeGxfc3luY19v YmpfZmx1c2gsCisJLnN5bmNfb2JqX3VucmVmID0gJnF4bF9zeW5jX29ial91bnJlZiwKKwkuc3lu Y19vYmpfcmVmID0gJnF4bF9zeW5jX29ial9yZWYsCisJLm1vdmVfbm90aWZ5ID0gJnF4bF9ib19t b3ZlX25vdGlmeSwKK307CisKKworCitpbnQgcXhsX3R0bV9pbml0KHN0cnVjdCBxeGxfZGV2aWNl ICpxZGV2KQoreworCWludCByOworCWludCBudW1faW9fcGFnZXM7IC8qICE9IHJvbS0+bnVtX2lv X3BhZ2VzLCB3ZSBpbmNsdWRlIHN1cmZhY2UwICovCisKKwlyID0gcXhsX3R0bV9nbG9iYWxfaW5p dChxZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogTm8gb3RoZXJzIHVzZXIgb2YgYWRk cmVzcyBzcGFjZSBzbyBzZXQgaXQgdG8gMCAqLworCXIgPSB0dG1fYm9fZGV2aWNlX2luaXQoJnFk ZXYtPm1tYW4uYmRldiwKKwkJCSAgICAgICBxZGV2LT5tbWFuLmJvX2dsb2JhbF9yZWYucmVmLm9i amVjdCwKKwkJCSAgICAgICAmcXhsX2JvX2RyaXZlciwgRFJNX0ZJTEVfUEFHRV9PRkZTRVQsIDAp OworCWlmIChyKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIGluaXRpYWxpemluZyBidWZmZXIgb2Jq ZWN0IGRyaXZlciglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCS8qIE5PVEU6IHRoaXMg aW5jbHVkZXMgdGhlIGZyYW1lYnVmZmVyIChha2Egc3VyZmFjZSAwKSAqLworCW51bV9pb19wYWdl cyA9IHFkZXYtPnJvbS0+cmFtX2hlYWRlcl9vZmZzZXQgLyBQQUdFX1NJWkU7CisJciA9IHR0bV9i b19pbml0X21tKCZxZGV2LT5tbWFuLmJkZXYsIFRUTV9QTF9WUkFNLAorCQkJICAgbnVtX2lvX3Bh Z2VzKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoIkZhaWxlZCBpbml0aWFsaXppbmcgVlJBTSBo ZWFwLlxuIik7CisJCXJldHVybiByOworCX0KKwlyID0gdHRtX2JvX2luaXRfbW0oJnFkZXYtPm1t YW4uYmRldiwgVFRNX1BMX1BSSVYwLAorCQkJICAgcWRldi0+c3VyZmFjZXJhbV9zaXplIC8gUEFH RV9TSVpFKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoIkZhaWxlZCBpbml0aWFsaXppbmcgU3Vy ZmFjZXMgaGVhcC5cbiIpOworCQlyZXR1cm4gcjsKKwl9CisJRFJNX0lORk8oInF4bDogJXVNIG9m IFZSQU0gbWVtb3J5IHNpemVcbiIsCisJCSAodW5zaWduZWQpcWRldi0+dnJhbV9zaXplIC8gKDEw MjQgKiAxMDI0KSk7CisJRFJNX0lORk8oInF4bDogJWx1TSBvZiBJTyBwYWdlcyBtZW1vcnkgcmVh ZHkgKFZSQU0gZG9tYWluKVxuIiwKKwkJICgodW5zaWduZWQpbnVtX2lvX3BhZ2VzICogUEFHRV9T SVpFKSAvICgxMDI0ICogMTAyNCkpOworCWlmICh1bmxpa2VseShxZGV2LT5tbWFuLmJkZXYuZGV2 X21hcHBpbmcgPT0gTlVMTCkpCisJCXFkZXYtPm1tYW4uYmRldi5kZXZfbWFwcGluZyA9IHFkZXYt PmRkZXYtPmRldl9tYXBwaW5nOworCXIgPSBxeGxfdHRtX2RlYnVnZnNfaW5pdChxZGV2KTsKKwlp ZiAocikgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0IGRlYnVnZnNcbiIpOworCQlyZXR1 cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcXhsX3R0bV9maW5pKHN0cnVjdCBxeGxf ZGV2aWNlICpxZGV2KQoreworCXR0bV9ib19jbGVhbl9tbSgmcWRldi0+bW1hbi5iZGV2LCBUVE1f UExfVlJBTSk7CisJdHRtX2JvX2NsZWFuX21tKCZxZGV2LT5tbWFuLmJkZXYsIFRUTV9QTF9QUklW MCk7CisJdHRtX2JvX2RldmljZV9yZWxlYXNlKCZxZGV2LT5tbWFuLmJkZXYpOworCXF4bF90dG1f Z2xvYmFsX2ZpbmkocWRldik7CisJRFJNX0lORk8oInF4bDogdHRtIGZpbmFsaXplZFxuIik7Cit9 CisKKworI2RlZmluZSBRWExfREVCVUdGU19NRU1fVFlQRVMgMgorCisjaWYgZGVmaW5lZChDT05G SUdfREVCVUdfRlMpCitzdGF0aWMgaW50IHF4bF9tbV9kdW1wX3RhYmxlKHN0cnVjdCBzZXFfZmls ZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1 Y3QgZHJtX2luZm9fbm9kZSAqKW0tPnByaXZhdGU7CisJc3RydWN0IGRybV9tbSAqbW0gPSAoc3Ry dWN0IGRybV9tbSAqKW5vZGUtPmluZm9fZW50LT5kYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBub2RlLT5taW5vci0+ZGV2OworCXN0cnVjdCBxeGxfZGV2aWNlICpyZGV2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCXN0cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0gcmRl di0+bW1hbi5iZGV2Lmdsb2I7CisKKwlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKKwlyZXQg PSBkcm1fbW1fZHVtcF90YWJsZShtLCBtbSk7CisJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2Nr KTsKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgcXhsX3R0bV9kZWJ1Z2Zz X2luaXQoc3RydWN0IHF4bF9kZXZpY2UgKnFkZXYpCit7CisJc3RhdGljIHN0cnVjdCBkcm1faW5m b19saXN0IHF4bF9tZW1fdHlwZXNfbGlzdFtRWExfREVCVUdGU19NRU1fVFlQRVNdOworCXN0YXRp YyBjaGFyIHF4bF9tZW1fdHlwZXNfbmFtZXNbUVhMX0RFQlVHRlNfTUVNX1RZUEVTXVszMl07CisJ dW5zaWduZWQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBRWExfREVCVUdGU19NRU1fVFlQRVM7IGkr KykgeworCQlpZiAoaSA9PSAwKQorCQkJc3ByaW50ZihxeGxfbWVtX3R5cGVzX25hbWVzW2ldLCAi cXhsX21lbV9tbSIpOworCQllbHNlCisJCQlzcHJpbnRmKHF4bF9tZW1fdHlwZXNfbmFtZXNbaV0s ICJxeGxfc3VyZl9tbSIpOworCQlxeGxfbWVtX3R5cGVzX2xpc3RbaV0ubmFtZSA9IHF4bF9tZW1f dHlwZXNfbmFtZXNbaV07CisJCXF4bF9tZW1fdHlwZXNfbGlzdFtpXS5zaG93ID0gJnF4bF9tbV9k dW1wX3RhYmxlOworCQlxeGxfbWVtX3R5cGVzX2xpc3RbaV0uZHJpdmVyX2ZlYXR1cmVzID0gMDsK KwkJaWYgKGkgPT0gMCkKKwkJCXF4bF9tZW1fdHlwZXNfbGlzdFtpXS5kYXRhID0gcWRldi0+bW1h bi5iZGV2Lm1hbltUVE1fUExfVlJBTV0ucHJpdjsKKwkJZWxzZQorCQkJcXhsX21lbV90eXBlc19s aXN0W2ldLmRhdGEgPSBxZGV2LT5tbWFuLmJkZXYubWFuW1RUTV9QTF9QUklWMF0ucHJpdjsKKwor CX0KKwlyZXR1cm4gcXhsX2RlYnVnZnNfYWRkX2ZpbGVzKHFkZXYsIHF4bF9tZW1fdHlwZXNfbGlz dCwgaSk7Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL0tidWlsZCBiL2luY2x1ZGUv dWFwaS9kcm0vS2J1aWxkCmluZGV4IGJhOTljZTMuLmEwNDJhOTUgMTAwNjQ0Ci0tLSBhL2luY2x1 ZGUvdWFwaS9kcm0vS2J1aWxkCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vS2J1aWxkCkBAIC04LDYg KzgsNyBAQCBoZWFkZXIteSArPSBpODEwX2RybS5oCiBoZWFkZXIteSArPSBpOTE1X2RybS5oCiBo ZWFkZXIteSArPSBtZ2FfZHJtLmgKIGhlYWRlci15ICs9IG5vdXZlYXVfZHJtLmgKK2hlYWRlci15 ICs9IHF4bF9kcm0uaAogaGVhZGVyLXkgKz0gcjEyOF9kcm0uaAogaGVhZGVyLXkgKz0gcmFkZW9u X2RybS5oCiBoZWFkZXIteSArPSBzYXZhZ2VfZHJtLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFw aS9kcm0vcXhsX2RybS5oIGIvaW5jbHVkZS91YXBpL2RybS9xeGxfZHJtLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZlOGQ0OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1 ZGUvdWFwaS9kcm0vcXhsX2RybS5oCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0 IDIwMTMgUmVkIEhhdAorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRp bmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAor ICogVEhFIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhF UiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgUVhMX0RSTV9ICisjZGVm aW5lIFFYTF9EUk1fSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSAiZHJtL2RybS5o IgorCisvKiBQbGVhc2Ugbm90ZSB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gYWxsIHN0cnVjdHMgZGVm aW5lZCBoZXJlIGFyZQorICogc3ViamVjdCB0byBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBjb25z dHJhaW50cy4KKyAqCisgKiBEbyBub3QgdXNlIHBvaW50ZXJzLCB1c2UgdWludDY0X3QgaW5zdGVh ZCBmb3IgMzIgYml0IC8gNjQgYml0IHVzZXIva2VybmVsCisgKiBjb21wYXRpYmlsaXR5IEtlZXAg ZmllbGRzIGFsaWduZWQgdG8gdGhlaXIgc2l6ZQorICovCisKKyNkZWZpbmUgUVhMX0dFTV9ET01B SU5fQ1BVIDAKKyNkZWZpbmUgUVhMX0dFTV9ET01BSU5fVlJBTSAxCisjZGVmaW5lIFFYTF9HRU1f RE9NQUlOX1NVUkZBQ0UgMgorCisjZGVmaW5lIERSTV9RWExfQUxMT0MgICAgICAgMHgwMAorI2Rl ZmluZSBEUk1fUVhMX01BUCAgICAgICAgIDB4MDEKKyNkZWZpbmUgRFJNX1FYTF9FWEVDQlVGRkVS ICAweDAyCisjZGVmaW5lIERSTV9RWExfVVBEQVRFX0FSRUEgMHgwMworI2RlZmluZSBEUk1fUVhM X0dFVFBBUkFNICAgIDB4MDQKKyNkZWZpbmUgRFJNX1FYTF9DTElFTlRDQVAgICAweDA1CisKKyNk ZWZpbmUgRFJNX1FYTF9BTExPQ19TVVJGICAweDA2CisKK3N0cnVjdCBkcm1fcXhsX2FsbG9jIHsK Kwl1aW50MzJfdCBzaXplOworCXVpbnQzMl90IGhhbmRsZTsgLyogMCBpcyBhbiBpbnZhbGlkIGhh bmRsZSAqLworfTsKKworc3RydWN0IGRybV9xeGxfbWFwIHsKKwl1aW50NjRfdCBvZmZzZXQ7IC8q IHVzZSBmb3IgbW1hcCBzeXN0ZW0gY2FsbCAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJf dCBwYWQ7Cit9OworCisvKgorICogZGVzdCBpcyB0aGUgYm8gd2UgYXJlIHdyaXRpbmcgdGhlIHJl bG9jYXRpb24gaW50bworICogc3JjIGlzIGJvIHdlIGFyZSByZWxvY2F0aW5nLgorICogKihkZXN0 X2hhbmRsZS5iYXNlX2FkZHIgKyBkZXN0X29mZnNldCkgPSBwaHlzaWNhbF9hZGRyZXNzKHNyY19o YW5kbGUuYWRkciArCisgKiBzcmNfb2Zmc2V0KQorICovCisjZGVmaW5lIFFYTF9SRUxPQ19UWVBF X0JPIDEKKyNkZWZpbmUgUVhMX1JFTE9DX1RZUEVfU1VSRiAyCisKK3N0cnVjdCBkcm1fcXhsX3Jl bG9jIHsKKwl1aW50NjRfdCBzcmNfb2Zmc2V0OyAvKiBvZmZzZXQgaW50byBzcmNfaGFuZGxlIG9y IHNyYyBidWZmZXIgKi8KKwl1aW50NjRfdCBkc3Rfb2Zmc2V0OyAvKiBvZmZzZXQgaW4gZGVzdCBo YW5kbGUgKi8KKwl1aW50MzJfdCBzcmNfaGFuZGxlOyAvKiBkZXN0IGhhbmRsZSB0byBjb21wdXRl IGFkZHJlc3MgZnJvbSAqLworCXVpbnQzMl90IGRzdF9oYW5kbGU7IC8qIDAgaWYgdG8gY29tbWFu ZCBidWZmZXIgKi8KKwl1aW50MzJfdCByZWxvY190eXBlOworCXVpbnQzMl90IHBhZDsKK307CisK K3N0cnVjdCBkcm1fcXhsX2NvbW1hbmQgeworCXVpbnQ2NF90CSBfX3VzZXIgY29tbWFuZDsgLyog dm9pZCogKi8KKwl1aW50NjRfdAkgX191c2VyIHJlbG9jczsgLyogc3RydWN0IGRybV9xeGxfcmVs b2MqICovCisJdWludDMyX3QJCXR5cGU7CisJdWludDMyX3QJCWNvbW1hbmRfc2l6ZTsKKwl1aW50 MzJfdAkJcmVsb2NzX251bTsKKwl1aW50MzJfdCAgICAgICAgICAgICAgICBwYWQ7Cit9OworCisv KiBYWFg6IGNhbGwgaXQgZHJtX3F4bF9jb21tYW5kcz8gKi8KK3N0cnVjdCBkcm1fcXhsX2V4ZWNi dWZmZXIgeworCXVpbnQzMl90CQlmbGFnczsJCS8qIGZvciBmdXR1cmUgdXNlICovCisJdWludDMy X3QJCWNvbW1hbmRzX251bTsKKwl1aW50NjRfdAkgX191c2VyIGNvbW1hbmRzOwkvKiBzdHJ1Y3Qg ZHJtX3F4bF9jb21tYW5kKiAqLworCXVpbnQ4X3QJCQlzcGFyZVsxNl07CS8qIHNwYXJlIGZvciBm dXR1cmUgKi8KK307CisKK3N0cnVjdCBkcm1fcXhsX3VwZGF0ZV9hcmVhIHsKKwl1aW50MzJfdCBo YW5kbGU7CisJdWludDMyX3QgdG9wOworCXVpbnQzMl90IGxlZnQ7CisJdWludDMyX3QgYm90dG9t OworCXVpbnQzMl90IHJpZ2h0OworfTsKKworI2RlZmluZSBRWExfUEFSQU1fTlVNX1NVUkZBQ0VT IDEgLyogcm9tLT5uX3N1cmZhY2VzICovCisjZGVmaW5lIFFYTF9QQVJBTV9NQVhfUkVMT0NTIDIK K3N0cnVjdCBkcm1fcXhsX2dldHBhcmFtIHsKKwl1aW50NjRfdCBwYXJhbTsKKwl1aW50NjRfdCB2 YWx1ZTsKK307CisKKy8qIHRoZXNlIGFyZSBvbmUgYml0IHZhbHVlcyAqLworc3RydWN0IGRybV9x eGxfY2xpZW50Y2FwIHsKKwl1aW50MzJfdCBpbmRleDsKKwl1aW50MzJfdCBwYWQ7Cit9OworCitz dHJ1Y3QgZHJtX3F4bF9hbGxvY19zdXJmIHsKKwl1aW50MzJfdCBmb3JtYXQ7CisJdWludDMyX3Qg d2lkdGg7CisJdWludDMyX3QgaGVpZ2h0OworCWludDMyX3Qgc3RyaWRlOworCXVpbnQzMl90IGhh bmRsZTsKK307CisKKyNkZWZpbmUgRFJNX0lPQ1RMX1FYTF9BTExPQyBcCisJRFJNX0lPV1IoRFJN X0NPTU1BTkRfQkFTRSArIERSTV9RWExfQUxMT0MsIHN0cnVjdCBkcm1fcXhsX2FsbG9jKQorCisj ZGVmaW5lIERSTV9JT0NUTF9RWExfTUFQIFwKKwlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsg RFJNX1FYTF9NQVAsIHN0cnVjdCBkcm1fcXhsX21hcCkKKworI2RlZmluZSBEUk1fSU9DVExfUVhM X0VYRUNCVUZGRVIgXAorCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9RWExfRVhFQ0JV RkZFUixcCisJCXN0cnVjdCBkcm1fcXhsX2V4ZWNidWZmZXIpCisKKyNkZWZpbmUgRFJNX0lPQ1RM X1FYTF9VUERBVEVfQVJFQSBcCisJRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX1FYTF9V UERBVEVfQVJFQSxcCisJCXN0cnVjdCBkcm1fcXhsX3VwZGF0ZV9hcmVhKQorCisjZGVmaW5lIERS TV9JT0NUTF9RWExfR0VUUEFSQU0gXAorCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1f UVhMX0dFVFBBUkFNLFwKKwkJc3RydWN0IGRybV9xeGxfZ2V0cGFyYW0pCisKKyNkZWZpbmUgRFJN X0lPQ1RMX1FYTF9DTElFTlRDQVAgXAorCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9R WExfQ0xJRU5UQ0FQLFwKKwkJc3RydWN0IGRybV9xeGxfY2xpZW50Y2FwKQorCisjZGVmaW5lIERS TV9JT0NUTF9RWExfQUxMT0NfU1VSRiBcCisJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERS TV9RWExfQUxMT0NfU1VSRixcCisJCXN0cnVjdCBkcm1fcXhsX2FsbG9jX3N1cmYpCisKKyNlbmRp ZgotLSAKMS44LjEuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWwK