From mboxrd@z Thu Jan 1 00:00:00 1970 From: Qiang Yu Subject: [PATCH v7 2/2] drm/lima: driver for ARM Mali4xx GPUs Date: Wed, 6 Mar 2019 23:23:39 +0800 Message-ID: <20190306152339.5340-1-yuq825@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Marek Vasut , lima@lists.freedesktop.org, Maxime Ripard , =?UTF-8?q?Christian=20K=C3=B6nig?= , Neil Armstrong , Sam Ravnborg , David Airlie , Qiang Yu , Simon Shields , Vasily Khoruzhick , Sean Paul , Andreas Baierl , Erico Nunes List-Id: dri-devel@lists.freedesktop.org LSBNYWxpIDR4eCBHUFVzIGhhdmUgdHdvIGtpbmRzIG9mIHByb2Nlc3NvcnMgR1AgYW5kIFBQLiBH UCBpcyBmb3IKICBPcGVuR0wgdmVydGV4IHNoYWRlciBwcm9jZXNzaW5nIGFuZCBQUCBpcyBmb3Ig ZnJhZ21lbnQgc2hhZGVyCiAgcHJvY2Vzc2luZy4gRWFjaCBwcm9jZXNzb3IgaGFzIGl0cyBvd24g TU1VIHNvIHByY2Vzc29ycyB3b3JrIGluCiAgdmlydHVhbCBhZGRyZXNzIHNwYWNlLgotIFRoZXJl J3Mgb25seSBvbmUgR1AgYnV0IG11bHRpcGxlIFBQIChtYXggNCBmb3IgbWFsaSA0MDAgYW5kIDgK ICBmb3IgbWFsaSA0NTApIGluIHRoZSBzYW1lIG1hbGkgNHh4IEdQVS4gQWxsIFBQcyBhcmUgZ3Jv dXBlZAogIHRvZ2F0aGVyIHRvIGhhbmRsZSBhIHNpbmdsZSBmcmFnbWVudCBzaGFkZXIgdGFzayBk aXZpZGVkIGJ5CiAgRkIgb3V0cHV0IHRpbGVkIHBpeGVscy4gTWFsaSA0MDAgdXNlciBzcGFjZSBk cml2ZXIgaXMKICByZXNwb25zaWJsZSBmb3IgYXNzaWduIHRhcmdldCB0aWxlZCBwaXhlbHMgdG8g ZWFjaCBQUCwgYnV0IG1hbGkKICA0NTAgaGFzIGEgSFcgbW9kdWxlIGNhbGxlZCBETEJVIHRvIGR5 bmFtaWNhbGx5IGJhbGFuY2UgZWFjaAogIFBQJ3MgbG9hZC4KLSBVc2VyIHNwYWNlIGRyaXZlciBh bGxvY2F0ZSBidWZmZXIgb2JqZWN0IGFuZCBtYXAgaW50byBHUFUKICB2aXJ0dWFsIGFkZHJlc3Mg c3BhY2UsIHVwbG9hZCBjb21tYW5kIHN0cmVhbSBhbmQgZHJhdyBkYXRhIHdpdGgKICBDUFUgbW1h cCBvZiB0aGUgYnVmZmVyIG9iamVjdCwgdGhlbiBzdWJtaXQgdGFzayB0byBHUC9QUCB3aXRoCiAg YSByZWdpc3RlciBmcmFtZSBpbmRpY2F0aW5nIHdoZXJlIGlzIHRoZSBjb21tYW5kIHN0cmVhbSBh bmQgbWlzYwogIHNldHRpbmdzLgotIFRoZXJlJ3Mgbm8gY29tbWFuZCBzdHJlYW0gdmFsaWRhdGlv bi9yZWxvY2F0aW9uIGR1ZSB0byBlYWNoIHVzZXIKICBwcm9jZXNzIGhhcyBpdHMgb3duIEdQVSB2 aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuIEdQL1BQJ3MgTU1VIHN3aXRjaAogIHZpcnR1YWwgYWRkcmVz cyBzcGFjZSBiZWZvcmUgcnVubmluZyB0d28gdGFza3MgZnJvbSBkaWZmZXJlbnQKICB1c2VyIHBy b2Nlc3MuIEVycm9yIG9yIGV2aWwgdXNlciBzcGFjZSBjb2RlIGp1c3QgZ2V0IE1NVSBmYXVsdAog IG9yIEdQL1BQIGVycm9yIElSUSwgdGhlbiB0aGUgSFcvU1cgd2lsbCBiZSByZWNvdmVyZWQuCi0g VXNlIEdFTStzaG1lbSBmb3IgTU0uIEN1cnJlbnRseSBqdXN0IGFsbG9jIGFuZCBwaW4gbWVtb3J5 IHdoZW4KICBnZW0gb2JqZWN0IGNyZWF0aW9uLiBHUFUgdm0gbWFwIG9mIHRoZSBidWZmZXIgaXMg YWxzbyBkb25lIGluCiAgdGhlIGFsbG9jIHN0YWdlIGluIGtlcm5lbCBzcGFjZS4gV2UgbWF5IGRl bGF5IHRoZSBtZW1vcnkKICBhbGxvY2F0aW9uIGFuZCByZWFsIEdQVSB2bSBtYXAgdG8gY29tbWFu ZCBzdWJtaXNzaW9uIHN0YWdlIGluIHRoZQogIGZ1cnR1cmUgYXMgaW1wcm92ZW1lbnQuCi0gVXNl IGRybV9zY2hlZCBmb3IgR1BVIHRhc2sgc2NoZWR1bGUuIEVhY2ggT3BlbkdMIGNvbnRleHQgc2hv dWxkCiAgaGF2ZSBhIGxpbWEgY29udGV4dCBvYmplY3QgaW4gdGhlIGtlcm5lbCB0byBkaXN0aW5n dWlzaCB0YXNrcwogIGZyb20gZGlmZmVyZW50IHVzZXIuIGRybV9zY2hlZCBnZXRzIHRhc2sgZnJv bSBlYWNoIGxpbWEgY29udGV4dAogIGluIGEgZmFpciB3YXkuCgptZXNhIGRyaXZlciBjYW4gYmUg Zm91bmQgaGVyZSBiZWZvcmUgdXBzdHJlYW1lZDoKaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Au b3JnL2xpbWEvbWVzYQoKdjc6Ci0gcmVtb3ZlIGxpbWFfZmVuY2Vfb3BzIHdpdGggZGVmYXVsdCB2 YWx1ZQotIG1vdmUgZmVuY2Ugc2xhYiBjcmVhdGUgdG8gZGV2aWNlIHByb2JlCi0gY2hlY2sgcGFk IGlvY3RsIGFyZ3MgdG8gYmUgemVybwotIGFkZCBjb21tZW50cyBmb3IgdXNlci9rZXJuZWwgaW50 ZXJmYWNlCgp2NjoKLSBmaXggY29tbWVudHMgYnkgY2hlY2twYXRjaC5wbAoKdjU6Ci0gZXhwb3J0 IGdwL3BwIHZlcnNpb24gdG8gdXNlcnNwYWNlCi0gcmViYXNlIG9uIGRybS1taXNjLW5leHQKCnY0 OgotIHVzZSBnZXQgcGFyYW0gaW50ZXJmYWNlIHRvIGdldCBpbmZvCi0gc2VwYXJhdGUgY29udGV4 dCBjcmVhdGUvZnJlZSBpb2N0bAotIHJlbW92ZSB1bnVzZWQgbWF4IHNjaGVkIHRhc2sgcGFyYW0K LSB1cGRhdGUgY29weXJpZ2h0IHRpbWUKLSB1c2UgeGFycmF5IGluc3RlYWQgb2YgaWRyCi0gc3Rv cCB1c2luZyBkcm1QLmgKCnYzOgotIGZpeCBjb21tZW50cyBmcm9tIGtidWlsZCByb2JvdAotIHJl c3RyaWN0IHN1cHBvcnRlZCBhcmNoIHRvIHRlc3RlZCBvbmVzCgp2MjoKLSBmaXggc3lzY2FsbCBh cmd1bWVudCBjaGVjawotIGZpeCBqb2IgZmluaXNoIGZlbmNlIGxlYWsgc2luY2Uga2VybmVsIDUu MAotIHVzZSBkcm0gc3luY29iaiB0byByZXBsYWNlIG5hdGl2ZSBmZW5jZQotIG1vdmUgYnVmZmVy IG9iamVjdCBHUFUgdmEgbWFwIGludG8ga2VybmVsCi0gcmVzZXJ2ZSBzeXNjYWxsIGFyZ3VtZW50 IHNwYWNlIGZvciBmdXR1cmUgaW5mbwotIHJlbW92ZSBrZXJuZWwgZ2VtIG1vZGlmaWVyCi0gc3dp dGNoIFRUTSBiYWNrIHRvIEdFTStzaG1lbSBNTQotIHVzZSB0aW1lIGJhc2VkIGlvIHBvbGwKLSB1 c2Ugd2hvbGUgcmVnaXN0ZXIgbmFtZQotIGFkb3B0IGdlbSByZXNlcnZhdGlvbiBvYmogaW50ZWdy YXRpb24KLSB1c2UgZHJtX3RpbWVvdXRfYWJzX3RvX2ppZmZpZXMKCkNjOiBFcmljIEFuaG9sdCA8 ZXJpY0BhbmhvbHQubmV0PgpDYzogUm9iIEhlcnJpbmcgPHJvYmhAa2VybmVsLm9yZz4KQ2M6IENo cmlzdGlhbiBLw7ZuaWcgPGNrb2VuaWcubGVpY2h0enVtZXJrZW5AZ21haWwuY29tPgpDYzogRGFu aWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPgpDYzogQWxleCBEZXVjaGVyIDxhbGV4ZGV1Y2hl ckBnbWFpbC5jb20+CkNjOiBTYW0gUmF2bmJvcmcgPHNhbUByYXZuYm9yZy5vcmc+CkNjOiBSb2Ig Q2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+ClNpZ25lZC1vZmYtYnk6IEFuZHJlYXMgQmFpZXJs IDxpY2hnZWhAaW1rcmVpc3J1bS5kZT4KU2lnbmVkLW9mZi1ieTogRXJpY28gTnVuZXMgPG51bmVz LmVyaWNvQGdtYWlsLmNvbT4KU2lnbmVkLW9mZi1ieTogSGVpa28gU3R1ZWJuZXIgPGhlaWtvQHNu dGVjaC5kZT4KU2lnbmVkLW9mZi1ieTogTWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+ClNpZ25l ZC1vZmYtYnk6IE5laWwgQXJtc3Ryb25nIDxuYXJtc3Ryb25nQGJheWxpYnJlLmNvbT4KU2lnbmVk LW9mZi1ieTogU2ltb24gU2hpZWxkcyA8c2ltb25AbGluZWFnZW9zLm9yZz4KU2lnbmVkLW9mZi1i eTogVmFzaWx5IEtob3J1emhpY2sgPGFuYXJzb3VsQGdtYWlsLmNvbT4KU2lnbmVkLW9mZi1ieTog UWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL0tjb25maWcg ICAgICAgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAg ICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9saW1hL0tjb25maWcgICAgICAgICAgfCAgMTAg KwogZHJpdmVycy9ncHUvZHJtL2xpbWEvTWFrZWZpbGUgICAgICAgICB8ICAyMSArKwogZHJpdmVy cy9ncHUvZHJtL2xpbWEvbGltYV9iY2FzdC5jICAgICB8ICA0NyArKysKIGRyaXZlcnMvZ3B1L2Ry bS9saW1hL2xpbWFfYmNhc3QuaCAgICAgfCAgMTQgKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGlt YV9jdHguYyAgICAgICB8ICA5NyArKysrKysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfY3R4 LmggICAgICAgfCAgMzAgKysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZGV2aWNlLmMgICAg fCAzODUgKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFf ZGV2aWNlLmggICAgfCAxMzEgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZGxi dS5jICAgICAgfCAgNTggKysrKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kbGJ1LmggICAg ICB8ICAxOCArKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kcnYuYyAgICAgICB8IDM3NiAr KysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kcnYuaCAg ICAgICB8ICA0NSArKysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmMgICAgICAgfCAz ODEgKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2Vt LmggICAgICAgfCAgMjUgKysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtX3ByaW1lLmMg fCAgNDcgKysrCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbV9wcmltZS5oIHwgIDEzICsK IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ3AuYyAgICAgICAgfCAyODMgKysrKysrKysrKysr KysrKysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ3AuaCAgICAgICAgfCAgMTYgKwogZHJp dmVycy9ncHUvZHJtL2xpbWEvbGltYV9sMl9jYWNoZS5jICB8ICA4MCArKysrKwogZHJpdmVycy9n cHUvZHJtL2xpbWEvbGltYV9sMl9jYWNoZS5oICB8ICAxNCArCiBkcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX21tdS5jICAgICAgIHwgMTQyICsrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9tbXUuaCAgICAgICB8ICAxNiArCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX29iamVj dC5jICAgIHwgMTIyICsrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX29iamVjdC5o ICAgIHwgIDM2ICsrKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9wbXUuYyAgICAgICB8ICA2 MCArKysrCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BtdS5oICAgICAgIHwgIDEyICsKIGRy aXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcHAuYyAgICAgICAgfCA0MjcgKysrKysrKysrKysrKysr KysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcHAuaCAgICAgICAgfCAgMTkg KysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcmVncy5oICAgICAgfCAyOTggKysrKysrKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMgICAgIHwgNDA0ICsr KysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9zY2hlZC5o ICAgICB8IDEwNCArKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3ZtLmMgICAgICAg IHwgMjgyICsrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3ZtLmgg ICAgICAgIHwgIDYyICsrKysKIGluY2x1ZGUvdWFwaS9kcm0vbGltYV9kcm0uaCAgICAgICAgICAg fCAxNjQgKysrKysrKysrKwogMzYgZmlsZXMgY2hhbmdlZCwgNDI0MiBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvS2NvbmZpZwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9iY2FzdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9iY2FzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2xpbWEvbGltYV9jdHguYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfY3R4LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbGltYS9saW1hX2RldmljZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV9kZXZpY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfZGxidS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9kbGJ1LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1h X2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kcnYu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW1fcHJpbWUuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtX3ByaW1lLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dwLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dwLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2wyX2NhY2hlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2wyX2NhY2hlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX21tdS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2xpbWEvbGltYV9tbXUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfb2JqZWN0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbGltYS9saW1hX29iamVjdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2xpbWEvbGltYV9wbXUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfcG11LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9s aW1hX3BwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3Bw LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3JlZ3MuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfc2NoZWQuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfc2NoZWQuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfdm0uYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfdm0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGluY2x1ZGUvdWFwaS9kcm0vbGltYV9kcm0uaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggYmQ5NDNhNzE3NTZjLi4x NzE2ZTQyMGJhZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0zMjksNiArMzI5LDggQEAgc291cmNlICJkcml2ZXJz L2dwdS9kcm0vdHZlMjAwL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3hlbi9L Y29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9saW1hL0tjb25maWciCisKICMgS2Vl cCBsZWdhY3kgZHJpdmVycyBsYXN0CiAKIG1lbnVjb25maWcgRFJNX0xFR0FDWQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmlu ZGV4IDFhYzU1YzY1ZWFjMC4uMWY5ZDAwNzZmOTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCkBAIC0xMDksMyArMTA5 LDQgQEAgb2JqLSQoQ09ORklHX0RSTV9USU5ZRFJNKSArPSB0aW55ZHJtLwogb2JqLSQoQ09ORklH X0RSTV9QTDExMSkgKz0gcGwxMTEvCiBvYmotJChDT05GSUdfRFJNX1RWRTIwMCkgKz0gdHZlMjAw Lwogb2JqLSQoQ09ORklHX0RSTV9YRU4pICs9IHhlbi8KK29iai0kKENPTkZJR19EUk1fTElNQSkg ICs9IGxpbWEvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9LY29uZmlnIGIvZHJp dmVycy9ncHUvZHJtL2xpbWEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLmYxMTMxNDQ0ODA5MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9saW1hL0tjb25maWcKQEAgLTAsMCArMSwxMCBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCBPUiBNSVQKKyMgQ29weXJpZ2h0IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1 QGdtYWlsLmNvbT4KKworY29uZmlnIERSTV9MSU1BCisgICAgICAgdHJpc3RhdGUgIkxJTUEgKERS TSBzdXBwb3J0IGZvciBBUk0gTWFsaSA0MDAvNDUwIEdQVSkiCisgICAgICAgZGVwZW5kcyBvbiBE Uk0KKyAgICAgICBkZXBlbmRzIG9uIEFSTSB8fCBBUk02NCB8fCBDT01QSUxFX1RFU1QKKyAgICAg ICBzZWxlY3QgRFJNX1NDSEVECisgICAgICAgaGVscAorICAgICAgICAgRFJNIGRyaXZlciBmb3Ig QVJNIE1hbGkgNDAwLzQ1MCBHUFVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEv TWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM4Y2M3MDI4MWJhNQotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9saW1hL01ha2VmaWxlCkBAIC0wLDAgKzEsMjEgQEAKKyMgU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisjIENvcHlyaWdodCAyMDE3LTIwMTkg UWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+CisKK2xpbWEteSA6PSBcCisJbGltYV9kcnYubyBc CisJbGltYV9kZXZpY2UubyBcCisJbGltYV9wbXUubyBcCisJbGltYV9sMl9jYWNoZS5vIFwKKwls aW1hX21tdS5vIFwKKwlsaW1hX2dwLm8gXAorCWxpbWFfcHAubyBcCisJbGltYV9nZW0ubyBcCisJ bGltYV92bS5vIFwKKwlsaW1hX3NjaGVkLm8gXAorCWxpbWFfY3R4Lm8gXAorCWxpbWFfZ2VtX3By aW1lLm8gXAorCWxpbWFfZGxidS5vIFwKKwlsaW1hX2JjYXN0Lm8gXAorCWxpbWFfb2JqZWN0Lm8K Kworb2JqLSQoQ09ORklHX0RSTV9MSU1BKSArPSBsaW1hLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfYmNhc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfYmNh c3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjI4ODM5ODAyN2Jm YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfYmNhc3QuYwpA QCAtMCwwICsxLDQ3IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBN SVQKKy8qIENvcHlyaWdodCAyMDE4LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICov CisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisj aW5jbHVkZSAibGltYV9kZXZpY2UuaCIKKyNpbmNsdWRlICJsaW1hX2JjYXN0LmgiCisjaW5jbHVk ZSAibGltYV9yZWdzLmgiCisKKyNkZWZpbmUgYmNhc3Rfd3JpdGUocmVnLCBkYXRhKSB3cml0ZWwo ZGF0YSwgaXAtPmlvbWVtICsgcmVnKQorI2RlZmluZSBiY2FzdF9yZWFkKHJlZykgcmVhZGwoaXAt PmlvbWVtICsgcmVnKQorCit2b2lkIGxpbWFfYmNhc3RfZW5hYmxlKHN0cnVjdCBsaW1hX2Rldmlj ZSAqZGV2LCBpbnQgbnVtX3BwKQoreworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBk ZXYtPnBpcGUgKyBsaW1hX3BpcGVfcHA7CisJc3RydWN0IGxpbWFfaXAgKmlwID0gZGV2LT5pcCAr IGxpbWFfaXBfYmNhc3Q7CisJaW50IGksIG1hc2sgPSBiY2FzdF9yZWFkKExJTUFfQkNBU1RfQlJP QURDQVNUX01BU0spICYgMHhmZmZmMDAwMDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcHA7IGkr KykgeworCQlzdHJ1Y3QgbGltYV9pcCAqcHAgPSBwaXBlLT5wcm9jZXNzb3JbaV07CisKKwkJbWFz ayB8PSAxIDw8IChwcC0+aWQgLSBsaW1hX2lwX3BwMCk7CisJfQorCisJYmNhc3Rfd3JpdGUoTElN QV9CQ0FTVF9CUk9BRENBU1RfTUFTSywgbWFzayk7Cit9CisKK2ludCBsaW1hX2JjYXN0X2luaXQo c3RydWN0IGxpbWFfaXAgKmlwKQoreworCWludCBpLCBtYXNrID0gMDsKKworCWZvciAoaSA9IGxp bWFfaXBfcHAwOyBpIDw9IGxpbWFfaXBfcHA3OyBpKyspIHsKKwkJaWYgKGlwLT5kZXYtPmlwW2ld LnByZXNlbnQpCisJCQltYXNrIHw9IDEgPDwgKGkgLSBsaW1hX2lwX3BwMCk7CisJfQorCisJYmNh c3Rfd3JpdGUoTElNQV9CQ0FTVF9CUk9BRENBU1RfTUFTSywgbWFzayA8PCAxNik7CisJYmNhc3Rf d3JpdGUoTElNQV9CQ0FTVF9JTlRFUlJVUFRfTUFTSywgbWFzayk7CisJcmV0dXJuIDA7Cit9CisK K3ZvaWQgbGltYV9iY2FzdF9maW5pKHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKworfQorCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2JjYXN0LmggYi9kcml2ZXJzL2dwdS9k cm0vbGltYS9saW1hX2JjYXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi5jNDdlNTg1NjNkMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX2JjYXN0LmgKQEAgLTAsMCArMSwxNCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmlnaHQgMjAxOC0yMDE5IFFpYW5nIFl1IDx5 dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVmIF9fTElNQV9CQ0FTVF9IX18KKyNkZWZpbmUg X19MSU1BX0JDQVNUX0hfXworCitzdHJ1Y3QgbGltYV9pcDsKKworaW50IGxpbWFfYmNhc3RfaW5p dChzdHJ1Y3QgbGltYV9pcCAqaXApOwordm9pZCBsaW1hX2JjYXN0X2Zpbmkoc3RydWN0IGxpbWFf aXAgKmlwKTsKKwordm9pZCBsaW1hX2JjYXN0X2VuYWJsZShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRl diwgaW50IG51bV9wcCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xp bWEvbGltYV9jdHguYyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfY3R4LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xMjY5NzI2NzhlYjYKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2N0eC5jCkBAIC0wLDAgKzEsOTcgQEAK Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorLyogQ29weXJpZ2h0 IDIwMTgtMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2luY2x1ZGUgPGxp bnV4L3NsYWIuaD4KKworI2luY2x1ZGUgImxpbWFfZGV2aWNlLmgiCisjaW5jbHVkZSAibGltYV9j dHguaCIKKworaW50IGxpbWFfY3R4X2NyZWF0ZShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiwgc3Ry dWN0IGxpbWFfY3R4X21nciAqbWdyLCB1MzIgKmlkKQoreworCXN0cnVjdCBsaW1hX2N0eCAqY3R4 OworCWludCBpLCBlcnI7CisKKwljdHggPSBremFsbG9jKHNpemVvZigqY3R4KSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFjdHgpCisJCXJldHVybiAtRU5PTUVNOworCWN0eC0+ZGV2ID0gZGV2OworCWty ZWZfaW5pdCgmY3R4LT5yZWZjbnQpOworCisJZm9yIChpID0gMDsgaSA8IGxpbWFfcGlwZV9udW07 IGkrKykgeworCQllcnIgPSBsaW1hX3NjaGVkX2NvbnRleHRfaW5pdChkZXYtPnBpcGUgKyBpLCBj dHgtPmNvbnRleHQgKyBpLCAmY3R4LT5ndWlsdHkpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJf b3V0MDsKKwl9CisKKwllcnIgPSB4YV9hbGxvYygmbWdyLT5oYW5kbGVzLCBpZCwgVUlOVF9NQVgs IGN0eCwgR0ZQX0tFUk5FTCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX291dDA7CisKKwly ZXR1cm4gMDsKKworZXJyX291dDA6CisJZm9yIChpLS07IGkgPj0gMDsgaS0tKQorCQlsaW1hX3Nj aGVkX2NvbnRleHRfZmluaShkZXYtPnBpcGUgKyBpLCBjdHgtPmNvbnRleHQgKyBpKTsKKwlrZnJl ZShjdHgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfY3R4X2RvX3JlbGVh c2Uoc3RydWN0IGtyZWYgKnJlZikKK3sKKwlzdHJ1Y3QgbGltYV9jdHggKmN0eCA9IGNvbnRhaW5l cl9vZihyZWYsIHN0cnVjdCBsaW1hX2N0eCwgcmVmY250KTsKKwlpbnQgaTsKKworCWZvciAoaSA9 IDA7IGkgPCBsaW1hX3BpcGVfbnVtOyBpKyspCisJCWxpbWFfc2NoZWRfY29udGV4dF9maW5pKGN0 eC0+ZGV2LT5waXBlICsgaSwgY3R4LT5jb250ZXh0ICsgaSk7CisJa2ZyZWUoY3R4KTsKK30KKwor aW50IGxpbWFfY3R4X2ZyZWUoc3RydWN0IGxpbWFfY3R4X21nciAqbWdyLCB1MzIgaWQpCit7CisJ c3RydWN0IGxpbWFfY3R4ICpjdHg7CisKKwltdXRleF9sb2NrKCZtZ3ItPmxvY2spOworCWN0eCA9 IHhhX2VyYXNlKCZtZ3ItPmhhbmRsZXMsIGlkKTsKKwlpZiAoY3R4KSB7CisJCWtyZWZfcHV0KCZj dHgtPnJlZmNudCwgbGltYV9jdHhfZG9fcmVsZWFzZSk7CisJCXJldHVybiAwOworCX0KKwltdXRl eF91bmxvY2soJm1nci0+bG9jayk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0cnVjdCBsaW1h X2N0eCAqbGltYV9jdHhfZ2V0KHN0cnVjdCBsaW1hX2N0eF9tZ3IgKm1nciwgdTMyIGlkKQorewor CXN0cnVjdCBsaW1hX2N0eCAqY3R4OworCisJbXV0ZXhfbG9jaygmbWdyLT5sb2NrKTsKKwljdHgg PSB4YV9sb2FkKCZtZ3ItPmhhbmRsZXMsIGlkKTsKKwlpZiAoY3R4KQorCQlrcmVmX2dldCgmY3R4 LT5yZWZjbnQpOworCW11dGV4X3VubG9jaygmbWdyLT5sb2NrKTsKKwlyZXR1cm4gY3R4OworfQor Cit2b2lkIGxpbWFfY3R4X3B1dChzdHJ1Y3QgbGltYV9jdHggKmN0eCkKK3sKKwlrcmVmX3B1dCgm Y3R4LT5yZWZjbnQsIGxpbWFfY3R4X2RvX3JlbGVhc2UpOworfQorCit2b2lkIGxpbWFfY3R4X21n cl9pbml0KHN0cnVjdCBsaW1hX2N0eF9tZ3IgKm1ncikKK3sKKwltdXRleF9pbml0KCZtZ3ItPmxv Y2spOworCXhhX2luaXRfZmxhZ3MoJm1nci0+aGFuZGxlcywgWEFfRkxBR1NfQUxMT0MpOworfQor Cit2b2lkIGxpbWFfY3R4X21ncl9maW5pKHN0cnVjdCBsaW1hX2N0eF9tZ3IgKm1ncikKK3sKKwlz dHJ1Y3QgbGltYV9jdHggKmN0eDsKKwl1bnNpZ25lZCBsb25nIGlkOworCisJeGFfZm9yX2VhY2go Jm1nci0+aGFuZGxlcywgaWQsIGN0eCkgeworCQlrcmVmX3B1dCgmY3R4LT5yZWZjbnQsIGxpbWFf Y3R4X2RvX3JlbGVhc2UpOworCX0KKworCXhhX2Rlc3Ryb3koJm1nci0+aGFuZGxlcyk7CisJbXV0 ZXhfZGVzdHJveSgmbWdyLT5sb2NrKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfY3R4LmggYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2N0eC5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjE1NGU1YzliZmU0Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9jdHguaApAQCAtMCwwICsxLDMwIEBA CisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KKy8qIENvcHly aWdodCAyMDE4LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNpZm5kZWYg X19MSU1BX0NUWF9IX18KKyNkZWZpbmUgX19MSU1BX0NUWF9IX18KKworI2luY2x1ZGUgPGxpbnV4 L3hhcnJheS5oPgorCisjaW5jbHVkZSAibGltYV9kZXZpY2UuaCIKKworc3RydWN0IGxpbWFfY3R4 IHsKKwlzdHJ1Y3Qga3JlZiByZWZjbnQ7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXY7CisJc3Ry dWN0IGxpbWFfc2NoZWRfY29udGV4dCBjb250ZXh0W2xpbWFfcGlwZV9udW1dOworCWF0b21pY190 IGd1aWx0eTsKK307CisKK3N0cnVjdCBsaW1hX2N0eF9tZ3IgeworCXN0cnVjdCBtdXRleCBsb2Nr OworCXN0cnVjdCB4YXJyYXkgaGFuZGxlczsKK307CisKK2ludCBsaW1hX2N0eF9jcmVhdGUoc3Ry dWN0IGxpbWFfZGV2aWNlICpkZXYsIHN0cnVjdCBsaW1hX2N0eF9tZ3IgKm1nciwgdTMyICppZCk7 CitpbnQgbGltYV9jdHhfZnJlZShzdHJ1Y3QgbGltYV9jdHhfbWdyICptZ3IsIHUzMiBpZCk7Citz dHJ1Y3QgbGltYV9jdHggKmxpbWFfY3R4X2dldChzdHJ1Y3QgbGltYV9jdHhfbWdyICptZ3IsIHUz MiBpZCk7Cit2b2lkIGxpbWFfY3R4X3B1dChzdHJ1Y3QgbGltYV9jdHggKmN0eCk7Cit2b2lkIGxp bWFfY3R4X21ncl9pbml0KHN0cnVjdCBsaW1hX2N0eF9tZ3IgKm1ncik7Cit2b2lkIGxpbWFfY3R4 X21ncl9maW5pKHN0cnVjdCBsaW1hX2N0eF9tZ3IgKm1ncik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfZGV2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li41NzBkMGU5M2Y5YTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9s aW1hX2RldmljZS5jCkBAIC0wLDAgKzEsMzg1IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCBPUiBNSVQKKy8qIENvcHlyaWdodCAyMDE3LTIwMTkgUWlhbmcgWXUgPHl1cTgy NUBnbWFpbC5jb20+ICovCisKKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4K KyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1 ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNl Lmg+CisKKyNpbmNsdWRlICJsaW1hX2RldmljZS5oIgorI2luY2x1ZGUgImxpbWFfZ3AuaCIKKyNp bmNsdWRlICJsaW1hX3BwLmgiCisjaW5jbHVkZSAibGltYV9tbXUuaCIKKyNpbmNsdWRlICJsaW1h X3BtdS5oIgorI2luY2x1ZGUgImxpbWFfbDJfY2FjaGUuaCIKKyNpbmNsdWRlICJsaW1hX2RsYnUu aCIKKyNpbmNsdWRlICJsaW1hX2JjYXN0LmgiCisjaW5jbHVkZSAibGltYV92bS5oIgorCitzdHJ1 Y3QgbGltYV9pcF9kZXNjIHsKKwljaGFyICpuYW1lOworCWNoYXIgKmlycV9uYW1lOworCWJvb2wg bXVzdF9oYXZlW2xpbWFfZ3B1X251bV07CisJaW50IG9mZnNldFtsaW1hX2dwdV9udW1dOworCisJ aW50ICgqaW5pdCkoc3RydWN0IGxpbWFfaXAgKmlwKTsKKwl2b2lkICgqZmluaSkoc3RydWN0IGxp bWFfaXAgKmlwKTsKK307CisKKyNkZWZpbmUgTElNQV9JUF9ERVNDKGlwbmFtZSwgbXN0MCwgbXN0 MSwgb2ZmMCwgb2ZmMSwgZnVuYywgaXJxKSBcCisJW2xpbWFfaXBfIyNpcG5hbWVdID0geyBcCisJ CS5uYW1lID0gI2lwbmFtZSwgXAorCQkuaXJxX25hbWUgPSBpcnEsIFwKKwkJLm11c3RfaGF2ZSA9 IHsgXAorCQkJW2xpbWFfZ3B1X21hbGk0MDBdID0gbXN0MCwgXAorCQkJW2xpbWFfZ3B1X21hbGk0 NTBdID0gbXN0MSwgXAorCQl9LCBcCisJCS5vZmZzZXQgPSB7IFwKKwkJCVtsaW1hX2dwdV9tYWxp NDAwXSA9IG9mZjAsIFwKKwkJCVtsaW1hX2dwdV9tYWxpNDUwXSA9IG9mZjEsIFwKKwkJfSwgXAor CQkuaW5pdCA9IGxpbWFfIyNmdW5jIyNfaW5pdCwgXAorCQkuZmluaSA9IGxpbWFfIyNmdW5jIyNf ZmluaSwgXAorCX0KKworc3RhdGljIHN0cnVjdCBsaW1hX2lwX2Rlc2MgbGltYV9pcF9kZXNjW2xp bWFfaXBfbnVtXSA9IHsKKwlMSU1BX0lQX0RFU0MocG11LCAgICAgICAgIGZhbHNlLCBmYWxzZSwg MHgwMjAwMCwgMHgwMjAwMCwgcG11LCAgICAgICJwbXUiKSwKKwlMSU1BX0lQX0RFU0MobDJfY2Fj aGUwLCAgIHRydWUsICB0cnVlLCAgMHgwMTAwMCwgMHgxMDAwMCwgbDJfY2FjaGUsIE5VTEwpLAor CUxJTUFfSVBfREVTQyhsMl9jYWNoZTEsICAgZmFsc2UsIHRydWUsICAtMSwgICAgICAweDAxMDAw LCBsMl9jYWNoZSwgTlVMTCksCisJTElNQV9JUF9ERVNDKGwyX2NhY2hlMiwgICBmYWxzZSwgZmFs c2UsIC0xLCAgICAgIDB4MTEwMDAsIGwyX2NhY2hlLCBOVUxMKSwKKwlMSU1BX0lQX0RFU0MoZ3As ICAgICAgICAgIHRydWUsICB0cnVlLCAgMHgwMDAwMCwgMHgwMDAwMCwgZ3AsICAgICAgICJncCIp LAorCUxJTUFfSVBfREVTQyhwcDAsICAgICAgICAgdHJ1ZSwgIHRydWUsICAweDA4MDAwLCAweDA4 MDAwLCBwcCwgICAgICAgInBwMCIpLAorCUxJTUFfSVBfREVTQyhwcDEsICAgICAgICAgZmFsc2Us IGZhbHNlLCAweDBBMDAwLCAweDBBMDAwLCBwcCwgICAgICAgInBwMSIpLAorCUxJTUFfSVBfREVT QyhwcDIsICAgICAgICAgZmFsc2UsIGZhbHNlLCAweDBDMDAwLCAweDBDMDAwLCBwcCwgICAgICAg InBwMiIpLAorCUxJTUFfSVBfREVTQyhwcDMsICAgICAgICAgZmFsc2UsIGZhbHNlLCAweDBFMDAw LCAweDBFMDAwLCBwcCwgICAgICAgInBwMyIpLAorCUxJTUFfSVBfREVTQyhwcDQsICAgICAgICAg ZmFsc2UsIGZhbHNlLCAtMSwgICAgICAweDI4MDAwLCBwcCwgICAgICAgInBwNCIpLAorCUxJTUFf SVBfREVTQyhwcDUsICAgICAgICAgZmFsc2UsIGZhbHNlLCAtMSwgICAgICAweDJBMDAwLCBwcCwg ICAgICAgInBwNSIpLAorCUxJTUFfSVBfREVTQyhwcDYsICAgICAgICAgZmFsc2UsIGZhbHNlLCAt MSwgICAgICAweDJDMDAwLCBwcCwgICAgICAgInBwNiIpLAorCUxJTUFfSVBfREVTQyhwcDcsICAg ICAgICAgZmFsc2UsIGZhbHNlLCAtMSwgICAgICAweDJFMDAwLCBwcCwgICAgICAgInBwNyIpLAor CUxJTUFfSVBfREVTQyhncG1tdSwgICAgICAgdHJ1ZSwgIHRydWUsICAweDAzMDAwLCAweDAzMDAw LCBtbXUsICAgICAgImdwbW11IiksCisJTElNQV9JUF9ERVNDKHBwbW11MCwgICAgICB0cnVlLCAg dHJ1ZSwgIDB4MDQwMDAsIDB4MDQwMDAsIG1tdSwgICAgICAicHBtbXUwIiksCisJTElNQV9JUF9E RVNDKHBwbW11MSwgICAgICBmYWxzZSwgZmFsc2UsIDB4MDUwMDAsIDB4MDUwMDAsIG1tdSwgICAg ICAicHBtbXUxIiksCisJTElNQV9JUF9ERVNDKHBwbW11MiwgICAgICBmYWxzZSwgZmFsc2UsIDB4 MDYwMDAsIDB4MDYwMDAsIG1tdSwgICAgICAicHBtbXUyIiksCisJTElNQV9JUF9ERVNDKHBwbW11 MywgICAgICBmYWxzZSwgZmFsc2UsIDB4MDcwMDAsIDB4MDcwMDAsIG1tdSwgICAgICAicHBtbXUz IiksCisJTElNQV9JUF9ERVNDKHBwbW11NCwgICAgICBmYWxzZSwgZmFsc2UsIC0xLCAgICAgIDB4 MUMwMDAsIG1tdSwgICAgICAicHBtbXU0IiksCisJTElNQV9JUF9ERVNDKHBwbW11NSwgICAgICBm YWxzZSwgZmFsc2UsIC0xLCAgICAgIDB4MUQwMDAsIG1tdSwgICAgICAicHBtbXU1IiksCisJTElN QV9JUF9ERVNDKHBwbW11NiwgICAgICBmYWxzZSwgZmFsc2UsIC0xLCAgICAgIDB4MUUwMDAsIG1t dSwgICAgICAicHBtbXU2IiksCisJTElNQV9JUF9ERVNDKHBwbW11NywgICAgICBmYWxzZSwgZmFs c2UsIC0xLCAgICAgIDB4MUYwMDAsIG1tdSwgICAgICAicHBtbXU3IiksCisJTElNQV9JUF9ERVND KGRsYnUsICAgICAgICBmYWxzZSwgdHJ1ZSwgIC0xLCAgICAgIDB4MTQwMDAsIGRsYnUsICAgICBO VUxMKSwKKwlMSU1BX0lQX0RFU0MoYmNhc3QsICAgICAgIGZhbHNlLCB0cnVlLCAgLTEsICAgICAg MHgxMzAwMCwgYmNhc3QsICAgIE5VTEwpLAorCUxJTUFfSVBfREVTQyhwcF9iY2FzdCwgICAgZmFs c2UsIHRydWUsICAtMSwgICAgICAweDE2MDAwLCBwcF9iY2FzdCwgInBwIiksCisJTElNQV9JUF9E RVNDKHBwbW11X2JjYXN0LCBmYWxzZSwgdHJ1ZSwgIC0xLCAgICAgIDB4MTUwMDAsIG1tdSwgICAg ICBOVUxMKSwKK307CisKK2NvbnN0IGNoYXIgKmxpbWFfaXBfbmFtZShzdHJ1Y3QgbGltYV9pcCAq aXApCit7CisJcmV0dXJuIGxpbWFfaXBfZGVzY1tpcC0+aWRdLm5hbWU7Cit9CisKK3N0YXRpYyBp bnQgbGltYV9jbGtfaW5pdChzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyOwor CXVuc2lnbmVkIGxvbmcgYnVzX3JhdGUsIGdwdV9yYXRlOworCisJZGV2LT5jbGtfYnVzID0gZGV2 bV9jbGtfZ2V0KGRldi0+ZGV2LCAiYnVzIik7CisJaWYgKElTX0VSUihkZXYtPmNsa19idXMpKSB7 CisJCWRldl9lcnIoZGV2LT5kZXYsICJnZXQgYnVzIGNsayBmYWlsZWQgJWxkXG4iLCBQVFJfRVJS KGRldi0+Y2xrX2J1cykpOworCQlyZXR1cm4gUFRSX0VSUihkZXYtPmNsa19idXMpOworCX0KKwor CWRldi0+Y2xrX2dwdSA9IGRldm1fY2xrX2dldChkZXYtPmRldiwgImNvcmUiKTsKKwlpZiAoSVNf RVJSKGRldi0+Y2xrX2dwdSkpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgImdldCBjb3JlIGNsayBm YWlsZWQgJWxkXG4iLCBQVFJfRVJSKGRldi0+Y2xrX2dwdSkpOworCQlyZXR1cm4gUFRSX0VSUihk ZXYtPmNsa19ncHUpOworCX0KKworCWJ1c19yYXRlID0gY2xrX2dldF9yYXRlKGRldi0+Y2xrX2J1 cyk7CisJZGV2X2luZm8oZGV2LT5kZXYsICJidXMgcmF0ZSA9ICVsdVxuIiwgYnVzX3JhdGUpOwor CisJZ3B1X3JhdGUgPSBjbGtfZ2V0X3JhdGUoZGV2LT5jbGtfZ3B1KTsKKwlkZXZfaW5mbyhkZXYt PmRldiwgIm1vZCByYXRlID0gJWx1IiwgZ3B1X3JhdGUpOworCisJZXJyID0gY2xrX3ByZXBhcmVf ZW5hYmxlKGRldi0+Y2xrX2J1cyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9 IGNsa19wcmVwYXJlX2VuYWJsZShkZXYtPmNsa19ncHUpOworCWlmIChlcnIpCisJCWdvdG8gZXJy b3Jfb3V0MDsKKworCWRldi0+cmVzZXQgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0X29wdGlvbmFs KGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRldi0+cmVzZXQpKSB7CisJCWVyciA9IFBU Ul9FUlIoZGV2LT5yZXNldCk7CisJCWdvdG8gZXJyb3Jfb3V0MTsKKwl9IGVsc2UgaWYgKGRldi0+ cmVzZXQgIT0gTlVMTCkgeworCQllcnIgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KGRldi0+cmVz ZXQpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcl9vdXQxOworCX0KKworCXJldHVybiAwOwor CitlcnJvcl9vdXQxOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShkZXYtPmNsa19ncHUpOworZXJy b3Jfb3V0MDoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGV2LT5jbGtfYnVzKTsKKwlyZXR1cm4g ZXJyOworfQorCitzdGF0aWMgdm9pZCBsaW1hX2Nsa19maW5pKHN0cnVjdCBsaW1hX2RldmljZSAq ZGV2KQoreworCWlmIChkZXYtPnJlc2V0ICE9IE5VTEwpCisJCXJlc2V0X2NvbnRyb2xfYXNzZXJ0 KGRldi0+cmVzZXQpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkZXYtPmNsa19ncHUpOworCWNs a19kaXNhYmxlX3VucHJlcGFyZShkZXYtPmNsa19idXMpOworfQorCitzdGF0aWMgaW50IGxpbWFf cmVndWxhdG9yX2luaXQoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKwor CWRldi0+cmVndWxhdG9yID0gZGV2bV9yZWd1bGF0b3JfZ2V0X29wdGlvbmFsKGRldi0+ZGV2LCAi bWFsaSIpOworCWlmIChJU19FUlIoZGV2LT5yZWd1bGF0b3IpKSB7CisJCXJldCA9IFBUUl9FUlIo ZGV2LT5yZWd1bGF0b3IpOworCQlkZXYtPnJlZ3VsYXRvciA9IE5VTEw7CisJCWlmIChyZXQgPT0g LUVOT0RFVikKKwkJCXJldHVybiAwOworCQlkZXZfZXJyKGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdl dCByZWd1bGF0b3I6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHJl Z3VsYXRvcl9lbmFibGUoZGV2LT5yZWd1bGF0b3IpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9l cnIoZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIHJlZ3VsYXRvcjogJWRcbiIsIHJldCk7CisJ CXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfcmVn dWxhdG9yX2Zpbmkoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+cmVndWxh dG9yKQorCQlyZWd1bGF0b3JfZGlzYWJsZShkZXYtPnJlZ3VsYXRvcik7Cit9CisKK3N0YXRpYyBp bnQgbGltYV9pbml0X2lwKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2LCBpbnQgaW5kZXgpCit7CisJ c3RydWN0IGxpbWFfaXBfZGVzYyAqZGVzYyA9IGxpbWFfaXBfZGVzYyArIGluZGV4OworCXN0cnVj dCBsaW1hX2lwICppcCA9IGRldi0+aXAgKyBpbmRleDsKKwlpbnQgb2Zmc2V0ID0gZGVzYy0+b2Zm c2V0W2Rldi0+aWRdOworCWJvb2wgbXVzdCA9IGRlc2MtPm11c3RfaGF2ZVtkZXYtPmlkXTsKKwlp bnQgZXJyOworCisJaWYgKG9mZnNldCA8IDApCisJCXJldHVybiAwOworCisJaXAtPmRldiA9IGRl djsKKwlpcC0+aWQgPSBpbmRleDsKKwlpcC0+aW9tZW0gPSBkZXYtPmlvbWVtICsgb2Zmc2V0Owor CWlmIChkZXNjLT5pcnFfbmFtZSkgeworCQllcnIgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShk ZXYtPnBkZXYsIGRlc2MtPmlycV9uYW1lKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dDsK KwkJaXAtPmlycSA9IGVycjsKKwl9CisKKwllcnIgPSBkZXNjLT5pbml0KGlwKTsKKwlpZiAoIWVy cikgeworCQlpcC0+cHJlc2VudCA9IHRydWU7CisJCXJldHVybiAwOworCX0KKworb3V0OgorCXJl dHVybiBtdXN0ID8gZXJyIDogMDsKK30KKworc3RhdGljIHZvaWQgbGltYV9maW5pX2lwKHN0cnVj dCBsaW1hX2RldmljZSAqbGRldiwgaW50IGluZGV4KQoreworCXN0cnVjdCBsaW1hX2lwX2Rlc2Mg KmRlc2MgPSBsaW1hX2lwX2Rlc2MgKyBpbmRleDsKKwlzdHJ1Y3QgbGltYV9pcCAqaXAgPSBsZGV2 LT5pcCArIGluZGV4OworCisJaWYgKGlwLT5wcmVzZW50KQorCQlkZXNjLT5maW5pKGlwKTsKK30K Kworc3RhdGljIGludCBsaW1hX2luaXRfZ3BfcGlwZShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldikK K3sKKwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlID0gZGV2LT5waXBlICsgbGltYV9waXBl X2dwOworCWludCBlcnI7CisKKwllcnIgPSBsaW1hX3NjaGVkX3BpcGVfaW5pdChwaXBlLCAiZ3Ai KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcGlwZS0+bDJfY2FjaGVbcGlwZS0+bnVt X2wyX2NhY2hlKytdID0gZGV2LT5pcCArIGxpbWFfaXBfbDJfY2FjaGUwOworCXBpcGUtPm1tdVtw aXBlLT5udW1fbW11KytdID0gZGV2LT5pcCArIGxpbWFfaXBfZ3BtbXU7CisJcGlwZS0+cHJvY2Vz c29yW3BpcGUtPm51bV9wcm9jZXNzb3IrK10gPSBkZXYtPmlwICsgbGltYV9pcF9ncDsKKworCWVy ciA9IGxpbWFfZ3BfcGlwZV9pbml0KGRldik7CisJaWYgKGVycikgeworCQlsaW1hX3NjaGVkX3Bp cGVfZmluaShwaXBlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHZvaWQgbGltYV9maW5pX2dwX3BpcGUoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpCit7CisJ c3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSA9IGRldi0+cGlwZSArIGxpbWFfcGlwZV9ncDsK KworCWxpbWFfZ3BfcGlwZV9maW5pKGRldik7CisJbGltYV9zY2hlZF9waXBlX2ZpbmkocGlwZSk7 Cit9CisKK3N0YXRpYyBpbnQgbGltYV9pbml0X3BwX3BpcGUoc3RydWN0IGxpbWFfZGV2aWNlICpk ZXYpCit7CisJc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSA9IGRldi0+cGlwZSArIGxpbWFf cGlwZV9wcDsKKwlpbnQgZXJyLCBpOworCisJZXJyID0gbGltYV9zY2hlZF9waXBlX2luaXQocGlw ZSwgInBwIik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWZvciAoaSA9IDA7IGkgPCBM SU1BX1NDSEVEX1BJUEVfTUFYX1BST0NFU1NPUjsgaSsrKSB7CisJCXN0cnVjdCBsaW1hX2lwICpw cCA9IGRldi0+aXAgKyBsaW1hX2lwX3BwMCArIGk7CisJCXN0cnVjdCBsaW1hX2lwICpwcG1tdSA9 IGRldi0+aXAgKyBsaW1hX2lwX3BwbW11MCArIGk7CisJCXN0cnVjdCBsaW1hX2lwICpsMl9jYWNo ZTsKKworCQlpZiAoZGV2LT5pZCA9PSBsaW1hX2dwdV9tYWxpNDAwKQorCQkJbDJfY2FjaGUgPSBk ZXYtPmlwICsgbGltYV9pcF9sMl9jYWNoZTA7CisJCWVsc2UKKwkJCWwyX2NhY2hlID0gZGV2LT5p cCArIGxpbWFfaXBfbDJfY2FjaGUxICsgKGkgPj4gMik7CisKKwkJaWYgKHBwLT5wcmVzZW50ICYm IHBwbW11LT5wcmVzZW50ICYmIGwyX2NhY2hlLT5wcmVzZW50KSB7CisJCQlwaXBlLT5tbXVbcGlw ZS0+bnVtX21tdSsrXSA9IHBwbW11OworCQkJcGlwZS0+cHJvY2Vzc29yW3BpcGUtPm51bV9wcm9j ZXNzb3IrK10gPSBwcDsKKwkJCWlmICghcGlwZS0+bDJfY2FjaGVbaSA+PiAyXSkKKwkJCQlwaXBl LT5sMl9jYWNoZVtwaXBlLT5udW1fbDJfY2FjaGUrK10gPSBsMl9jYWNoZTsKKwkJfQorCX0KKwor CWlmIChkZXYtPmlwW2xpbWFfaXBfYmNhc3RdLnByZXNlbnQpIHsKKwkJcGlwZS0+YmNhc3RfcHJv Y2Vzc29yID0gZGV2LT5pcCArIGxpbWFfaXBfcHBfYmNhc3Q7CisJCXBpcGUtPmJjYXN0X21tdSA9 IGRldi0+aXAgKyBsaW1hX2lwX3BwbW11X2JjYXN0OworCX0KKworCWVyciA9IGxpbWFfcHBfcGlw ZV9pbml0KGRldik7CisJaWYgKGVycikgeworCQlsaW1hX3NjaGVkX3BpcGVfZmluaShwaXBlKTsK KwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGltYV9m aW5pX3BwX3BpcGUoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGxpbWFfc2No ZWRfcGlwZSAqcGlwZSA9IGRldi0+cGlwZSArIGxpbWFfcGlwZV9wcDsKKworCWxpbWFfcHBfcGlw ZV9maW5pKGRldik7CisJbGltYV9zY2hlZF9waXBlX2ZpbmkocGlwZSk7Cit9CisKK2ludCBsaW1h X2RldmljZV9pbml0KHN0cnVjdCBsaW1hX2RldmljZSAqbGRldikKK3sKKwlpbnQgZXJyLCBpOwor CXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJZG1hX3NldF9jb2hlcmVudF9tYXNrKGxkZXYtPmRl diwgRE1BX0JJVF9NQVNLKDMyKSk7CisKKwllcnIgPSBsaW1hX2Nsa19pbml0KGxkZXYpOworCWlm IChlcnIpIHsKKwkJZGV2X2VycihsZGV2LT5kZXYsICJjbGsgaW5pdCBmYWlsICVkXG4iLCBlcnIp OworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IGxpbWFfcmVndWxhdG9yX2luaXQobGRldik7 CisJaWYgKGVycikgeworCQlkZXZfZXJyKGxkZXYtPmRldiwgInJlZ3VsYXRvciBpbml0IGZhaWwg JWRcbiIsIGVycik7CisJCWdvdG8gZXJyX291dDA7CisJfQorCisJbGRldi0+ZW1wdHlfdm0gPSBs aW1hX3ZtX2NyZWF0ZShsZGV2KTsKKwlpZiAoIWxkZXYtPmVtcHR5X3ZtKSB7CisJCWVyciA9IC1F Tk9NRU07CisJCWdvdG8gZXJyX291dDE7CisJfQorCisJbGRldi0+dmFfc3RhcnQgPSAwOworCWlm IChsZGV2LT5pZCA9PSBsaW1hX2dwdV9tYWxpNDUwKSB7CisJCWxkZXYtPnZhX2VuZCA9IExJTUFf VkFfUkVTRVJWRV9TVEFSVDsKKwkJbGRldi0+ZGxidV9jcHUgPSBkbWFfYWxsb2Nfd2MoCisJCQls ZGV2LT5kZXYsIExJTUFfUEFHRV9TSVpFLAorCQkJJmxkZXYtPmRsYnVfZG1hLCBHRlBfS0VSTkVM KTsKKwkJaWYgKCFsZGV2LT5kbGJ1X2NwdSkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8g ZXJyX291dDI7CisJCX0KKwl9IGVsc2UKKwkJbGRldi0+dmFfZW5kID0gTElNQV9WQV9SRVNFUlZF X0VORDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShsZGV2LT5wZGV2LCBJT1JFU09V UkNFX01FTSwgMCk7CisJbGRldi0+aW9tZW0gPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UobGRldi0+ ZGV2LCByZXMpOworCWlmIChJU19FUlIobGRldi0+aW9tZW0pKSB7CisJCWRldl9lcnIobGRldi0+ ZGV2LCAiZmFpbCB0byBpb3JlbWFwIGlvbWVtXG4iKTsKKwkJZXJyID0gUFRSX0VSUihsZGV2LT5p b21lbSk7CisJCWdvdG8gZXJyX291dDM7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGxpbWFfaXBf bnVtOyBpKyspIHsKKwkJZXJyID0gbGltYV9pbml0X2lwKGxkZXYsIGkpOworCQlpZiAoZXJyKQor CQkJZ290byBlcnJfb3V0NDsKKwl9CisKKwllcnIgPSBsaW1hX2luaXRfZ3BfcGlwZShsZGV2KTsK KwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQ0OworCisJZXJyID0gbGltYV9pbml0X3BwX3BpcGUo bGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0NTsKKworCXJldHVybiAwOworCitlcnJf b3V0NToKKwlsaW1hX2ZpbmlfZ3BfcGlwZShsZGV2KTsKK2Vycl9vdXQ0OgorCXdoaWxlICgtLWkg Pj0gMCkKKwkJbGltYV9maW5pX2lwKGxkZXYsIGkpOworZXJyX291dDM6CisJaWYgKGxkZXYtPmRs YnVfY3B1KQorCQlkbWFfZnJlZV93YyhsZGV2LT5kZXYsIExJTUFfUEFHRV9TSVpFLAorCQkJICAg IGxkZXYtPmRsYnVfY3B1LCBsZGV2LT5kbGJ1X2RtYSk7CitlcnJfb3V0MjoKKwlsaW1hX3ZtX3B1 dChsZGV2LT5lbXB0eV92bSk7CitlcnJfb3V0MToKKwlsaW1hX3JlZ3VsYXRvcl9maW5pKGxkZXYp OworZXJyX291dDA6CisJbGltYV9jbGtfZmluaShsZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCit2 b2lkIGxpbWFfZGV2aWNlX2Zpbmkoc3RydWN0IGxpbWFfZGV2aWNlICpsZGV2KQoreworCWludCBp OworCisJbGltYV9maW5pX3BwX3BpcGUobGRldik7CisJbGltYV9maW5pX2dwX3BpcGUobGRldik7 CisKKwlmb3IgKGkgPSBsaW1hX2lwX251bSAtIDE7IGkgPj0gMDsgaS0tKQorCQlsaW1hX2Zpbmlf aXAobGRldiwgaSk7CisKKwlpZiAobGRldi0+ZGxidV9jcHUpCisJCWRtYV9mcmVlX3djKGxkZXYt PmRldiwgTElNQV9QQUdFX1NJWkUsCisJCQkgICAgbGRldi0+ZGxidV9jcHUsIGxkZXYtPmRsYnVf ZG1hKTsKKworCWxpbWFfdm1fcHV0KGxkZXYtPmVtcHR5X3ZtKTsKKworCWxpbWFfcmVndWxhdG9y X2ZpbmkobGRldik7CisKKwlsaW1hX2Nsa19maW5pKGxkZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2xpbWEvbGltYV9kZXZpY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xp bWFfZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zMTE1 OGQ4NjI3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2Rl dmljZS5oCkBAIC0wLDAgKzEsMTMxIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCBPUiBNSVQgKi8KKy8qIENvcHlyaWdodCAyMDE4LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBn bWFpbC5jb20+ICovCisKKyNpZm5kZWYgX19MSU1BX0RFVklDRV9IX18KKyNkZWZpbmUgX19MSU1B X0RFVklDRV9IX18KKworI2luY2x1ZGUgPGRybS9kcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KKworI2luY2x1ZGUgImxpbWFfc2NoZWQuaCIKKworZW51bSBsaW1hX2dwdV9p ZCB7CisJbGltYV9ncHVfbWFsaTQwMCA9IDAsCisJbGltYV9ncHVfbWFsaTQ1MCwKKwlsaW1hX2dw dV9udW0sCit9OworCitlbnVtIGxpbWFfaXBfaWQgeworCWxpbWFfaXBfcG11LAorCWxpbWFfaXBf Z3BtbXUsCisJbGltYV9pcF9wcG1tdTAsCisJbGltYV9pcF9wcG1tdTEsCisJbGltYV9pcF9wcG1t dTIsCisJbGltYV9pcF9wcG1tdTMsCisJbGltYV9pcF9wcG1tdTQsCisJbGltYV9pcF9wcG1tdTUs CisJbGltYV9pcF9wcG1tdTYsCisJbGltYV9pcF9wcG1tdTcsCisJbGltYV9pcF9ncCwKKwlsaW1h X2lwX3BwMCwKKwlsaW1hX2lwX3BwMSwKKwlsaW1hX2lwX3BwMiwKKwlsaW1hX2lwX3BwMywKKwls aW1hX2lwX3BwNCwKKwlsaW1hX2lwX3BwNSwKKwlsaW1hX2lwX3BwNiwKKwlsaW1hX2lwX3BwNywK KwlsaW1hX2lwX2wyX2NhY2hlMCwKKwlsaW1hX2lwX2wyX2NhY2hlMSwKKwlsaW1hX2lwX2wyX2Nh Y2hlMiwKKwlsaW1hX2lwX2RsYnUsCisJbGltYV9pcF9iY2FzdCwKKwlsaW1hX2lwX3BwX2JjYXN0 LAorCWxpbWFfaXBfcHBtbXVfYmNhc3QsCisJbGltYV9pcF9udW0sCit9OworCitzdHJ1Y3QgbGlt YV9kZXZpY2U7CisKK3N0cnVjdCBsaW1hX2lwIHsKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldjsK KwllbnVtIGxpbWFfaXBfaWQgaWQ7CisJYm9vbCBwcmVzZW50OworCisJdm9pZCBfX2lvbWVtICpp b21lbTsKKwlpbnQgaXJxOworCisJdW5pb24geworCQkvKiBncC9wcCAqLworCQlib29sIGFzeW5j X3Jlc2V0OworCQkvKiBsMiBjYWNoZSAqLworCQlzcGlubG9ja190IGxvY2s7CisJfSBkYXRhOwor fTsKKworZW51bSBsaW1hX3BpcGVfaWQgeworCWxpbWFfcGlwZV9ncCwKKwlsaW1hX3BpcGVfcHAs CisJbGltYV9waXBlX251bSwKK307CisKK3N0cnVjdCBsaW1hX2RldmljZSB7CisJc3RydWN0IGRl dmljZSAqZGV2OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXY7CisKKwllbnVtIGxpbWFfZ3B1X2lkIGlkOworCXUzMiBncF92ZXJzaW9uOwor CXUzMiBwcF92ZXJzaW9uOworCWludCBudW1fcHA7CisKKwl2b2lkIF9faW9tZW0gKmlvbWVtOwor CXN0cnVjdCBjbGsgKmNsa19idXM7CisJc3RydWN0IGNsayAqY2xrX2dwdTsKKwlzdHJ1Y3QgcmVz ZXRfY29udHJvbCAqcmVzZXQ7CisJc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yOworCisJc3Ry dWN0IGxpbWFfaXAgaXBbbGltYV9pcF9udW1dOworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgcGlw ZVtsaW1hX3BpcGVfbnVtXTsKKworCXN0cnVjdCBsaW1hX3ZtICplbXB0eV92bTsKKwl1aW50NjRf dCB2YV9zdGFydDsKKwl1aW50NjRfdCB2YV9lbmQ7CisKKwl1MzIgKmRsYnVfY3B1OworCWRtYV9h ZGRyX3QgZGxidV9kbWE7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsaW1hX2RldmljZSAq Cit0b19saW1hX2RldihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPmRl dl9wcml2YXRlOworfQorCitpbnQgbGltYV9kZXZpY2VfaW5pdChzdHJ1Y3QgbGltYV9kZXZpY2Ug KmxkZXYpOwordm9pZCBsaW1hX2RldmljZV9maW5pKHN0cnVjdCBsaW1hX2RldmljZSAqbGRldik7 CisKK2NvbnN0IGNoYXIgKmxpbWFfaXBfbmFtZShzdHJ1Y3QgbGltYV9pcCAqaXApOworCit0eXBl ZGVmIGludCAoKmxpbWFfcG9sbF9mdW5jX3QpKHN0cnVjdCBsaW1hX2lwICopOworCitzdGF0aWMg aW5saW5lIGludCBsaW1hX3BvbGxfdGltZW91dChzdHJ1Y3QgbGltYV9pcCAqaXAsIGxpbWFfcG9s bF9mdW5jX3QgZnVuYywKKwkJCQkgICAgaW50IHNsZWVwX3VzLCBpbnQgdGltZW91dF91cykKK3sK KwlrdGltZV90IHRpbWVvdXQgPSBrdGltZV9hZGRfdXMoa3RpbWVfZ2V0KCksIHRpbWVvdXRfdXMp OworCisJbWlnaHRfc2xlZXBfaWYoc2xlZXBfdXMpOworCXdoaWxlICgxKSB7CisJCWlmIChmdW5j KGlwKSkKKwkJCXJldHVybiAwOworCisJCWlmICh0aW1lb3V0X3VzICYmIGt0aW1lX2NvbXBhcmUo a3RpbWVfZ2V0KCksIHRpbWVvdXQpID4gMCkKKwkJCXJldHVybiAtRVRJTUVET1VUOworCisJCWlm IChzbGVlcF91cykKKwkJCXVzbGVlcF9yYW5nZSgoc2xlZXBfdXMgPj4gMikgKyAxLCBzbGVlcF91 cyk7CisJfQorCXJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9saW1hL2xpbWFfZGxidS5jIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kbGJ1LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44Mzk5Y2VmZmI5NGIKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2RsYnUuYwpAQCAtMCww ICsxLDU4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQKKy8q IENvcHlyaWdodCAyMDE4LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNp bmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVk ZSAibGltYV9kZXZpY2UuaCIKKyNpbmNsdWRlICJsaW1hX2RsYnUuaCIKKyNpbmNsdWRlICJsaW1h X3ZtLmgiCisjaW5jbHVkZSAibGltYV9yZWdzLmgiCisKKyNkZWZpbmUgZGxidV93cml0ZShyZWcs IGRhdGEpIHdyaXRlbChkYXRhLCBpcC0+aW9tZW0gKyByZWcpCisjZGVmaW5lIGRsYnVfcmVhZChy ZWcpIHJlYWRsKGlwLT5pb21lbSArIHJlZykKKwordm9pZCBsaW1hX2RsYnVfZW5hYmxlKHN0cnVj dCBsaW1hX2RldmljZSAqZGV2LCBpbnQgbnVtX3BwKQoreworCXN0cnVjdCBsaW1hX3NjaGVkX3Bp cGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVfcHA7CisJc3RydWN0IGxpbWFfaXAgKmlw ID0gZGV2LT5pcCArIGxpbWFfaXBfZGxidTsKKwlpbnQgaSwgbWFzayA9IDA7CisKKwlmb3IgKGkg PSAwOyBpIDwgbnVtX3BwOyBpKyspIHsKKwkJc3RydWN0IGxpbWFfaXAgKnBwID0gcGlwZS0+cHJv Y2Vzc29yW2ldOworCisJCW1hc2sgfD0gMSA8PCAocHAtPmlkIC0gbGltYV9pcF9wcDApOworCX0K KworCWRsYnVfd3JpdGUoTElNQV9ETEJVX1BQX0VOQUJMRV9NQVNLLCBtYXNrKTsKK30KKwordm9p ZCBsaW1hX2RsYnVfZGlzYWJsZShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qg bGltYV9pcCAqaXAgPSBkZXYtPmlwICsgbGltYV9pcF9kbGJ1OworCisJZGxidV93cml0ZShMSU1B X0RMQlVfUFBfRU5BQkxFX01BU0ssIDApOworfQorCit2b2lkIGxpbWFfZGxidV9zZXRfcmVnKHN0 cnVjdCBsaW1hX2lwICppcCwgdTMyICpyZWcpCit7CisJZGxidV93cml0ZShMSU1BX0RMQlVfVExM SVNUX1ZCQVNFQUREUiwgcmVnWzBdKTsKKwlkbGJ1X3dyaXRlKExJTUFfRExCVV9GQl9ESU0sIHJl Z1sxXSk7CisJZGxidV93cml0ZShMSU1BX0RMQlVfVExMSVNUX0NPTkYsIHJlZ1syXSk7CisJZGxi dV93cml0ZShMSU1BX0RMQlVfU1RBUlRfVElMRV9QT1MsIHJlZ1szXSk7Cit9CisKK2ludCBsaW1h X2RsYnVfaW5pdChzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpk ZXYgPSBpcC0+ZGV2OworCisJZGxidV93cml0ZShMSU1BX0RMQlVfTUFTVEVSX1RMTElTVF9QSFlT X0FERFIsIGRldi0+ZGxidV9kbWEgfCAxKTsKKwlkbGJ1X3dyaXRlKExJTUFfRExCVV9NQVNURVJf VExMSVNUX1ZBRERSLCBMSU1BX1ZBX1JFU0VSVkVfRExCVSk7CisKKwlyZXR1cm4gMDsKK30KKwor dm9pZCBsaW1hX2RsYnVfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZGxidS5oIGIvZHJpdmVycy9ncHUvZHJtL2xp bWEvbGltYV9kbGJ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4x NmY4Nzc5ODQ0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1h X2RsYnUuaApAQCAtMCwwICsxLDE4IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCBPUiBNSVQgKi8KKy8qIENvcHlyaWdodCAyMDE4LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBn bWFpbC5jb20+ICovCisKKyNpZm5kZWYgX19MSU1BX0RMQlVfSF9fCisjZGVmaW5lIF9fTElNQV9E TEJVX0hfXworCitzdHJ1Y3QgbGltYV9pcDsKK3N0cnVjdCBsaW1hX2RldmljZTsKKwordm9pZCBs aW1hX2RsYnVfZW5hYmxlKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2LCBpbnQgbnVtX3BwKTsKK3Zv aWQgbGltYV9kbGJ1X2Rpc2FibGUoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpOworCit2b2lkIGxp bWFfZGxidV9zZXRfcmVnKHN0cnVjdCBsaW1hX2lwICppcCwgdTMyICpyZWcpOworCitpbnQgbGlt YV9kbGJ1X2luaXQoc3RydWN0IGxpbWFfaXAgKmlwKTsKK3ZvaWQgbGltYV9kbGJ1X2Zpbmkoc3Ry dWN0IGxpbWFfaXAgKmlwKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bGltYS9saW1hX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kcnYuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmY5YTI4MWE2MjA4MwotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZHJ2LmMKQEAgLTAsMCArMSwzNzYg QEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorLyogQ29weXJp Z2h0IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVk ZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2lvY3RsLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX3ByaW1lLmg+CisjaW5jbHVkZSA8ZHJtL2xpbWFfZHJtLmg+CisKKyNpbmNsdWRlICJsaW1h X2Rydi5oIgorI2luY2x1ZGUgImxpbWFfZ2VtLmgiCisjaW5jbHVkZSAibGltYV9nZW1fcHJpbWUu aCIKKyNpbmNsdWRlICJsaW1hX3ZtLmgiCisKK2ludCBsaW1hX3NjaGVkX3RpbWVvdXRfbXM7CisK K01PRFVMRV9QQVJNX0RFU0Moc2NoZWRfdGltZW91dF9tcywgInRhc2sgcnVuIHRpbWVvdXQgaW4g bXMgKDAgPSBubyB0aW1lb3V0IChkZWZhdWx0KSkiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChzY2hl ZF90aW1lb3V0X21zLCBsaW1hX3NjaGVkX3RpbWVvdXRfbXMsIGludCwgMDQ0NCk7CisKK3N0YXRp YyBpbnQgbGltYV9pb2N0bF9nZXRfcGFyYW0oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBkcm1fbGltYV9nZXRfcGFy YW0gKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBsaW1hX2RldmljZSAqbGRldiA9IHRvX2xpbWFfZGV2 KGRldik7CisKKwlpZiAoYXJncy0+cGFkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAo YXJncy0+cGFyYW0pIHsKKwljYXNlIERSTV9MSU1BX1BBUkFNX0dQVV9JRDoKKwkJc3dpdGNoIChs ZGV2LT5pZCkgeworCQljYXNlIGxpbWFfZ3B1X21hbGk0MDA6CisJCQlhcmdzLT52YWx1ZSA9IERS TV9MSU1BX1BBUkFNX0dQVV9JRF9NQUxJNDAwOworCQkJYnJlYWs7CisJCWNhc2UgbGltYV9ncHVf bWFsaTQ1MDoKKwkJCWFyZ3MtPnZhbHVlID0gRFJNX0xJTUFfUEFSQU1fR1BVX0lEX01BTEk0NTA7 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFyZ3MtPnZhbHVlID0gRFJNX0xJTUFfUEFSQU1f R1BVX0lEX1VOS05PV047CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRFJNX0xJ TUFfUEFSQU1fTlVNX1BQOgorCQlhcmdzLT52YWx1ZSA9IGxkZXYtPnBpcGVbbGltYV9waXBlX3Bw XS5udW1fcHJvY2Vzc29yOworCQlicmVhazsKKworCWNhc2UgRFJNX0xJTUFfUEFSQU1fR1BfVkVS U0lPTjoKKwkJYXJncy0+dmFsdWUgPSBsZGV2LT5ncF92ZXJzaW9uOworCQlicmVhazsKKworCWNh c2UgRFJNX0xJTUFfUEFSQU1fUFBfVkVSU0lPTjoKKwkJYXJncy0+dmFsdWUgPSBsZGV2LT5wcF92 ZXJzaW9uOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpbWFfaW9jdGxfZ2VtX2NyZWF0ZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJ c3RydWN0IGRybV9saW1hX2dlbV9jcmVhdGUgKmFyZ3MgPSBkYXRhOworCisJaWYgKGFyZ3MtPnBh ZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXJncy0+ZmxhZ3MpCisJCXJldHVybiAtRUlO VkFMOworCisJaWYgKGFyZ3MtPnNpemUgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1 cm4gbGltYV9nZW1fY3JlYXRlX2hhbmRsZShkZXYsIGZpbGUsIGFyZ3MtPnNpemUsIGFyZ3MtPmZs YWdzLCAmYXJncy0+aGFuZGxlKTsKK30KKworc3RhdGljIGludCBsaW1hX2lvY3RsX2dlbV9pbmZv KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmls ZSkKK3sKKwlzdHJ1Y3QgZHJtX2xpbWFfZ2VtX2luZm8gKmFyZ3MgPSBkYXRhOworCisJcmV0dXJu IGxpbWFfZ2VtX2dldF9pbmZvKGZpbGUsIGFyZ3MtPmhhbmRsZSwgJmFyZ3MtPnZhLCAmYXJncy0+ b2Zmc2V0KTsKK30KKworc3RhdGljIGludCBsaW1hX2lvY3RsX2dlbV9zdWJtaXQoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0 cnVjdCBkcm1fbGltYV9nZW1fc3VibWl0ICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgbGltYV9kZXZp Y2UgKmxkZXYgPSB0b19saW1hX2RldihkZXYpOworCXN0cnVjdCBsaW1hX2RybV9wcml2ICpwcml2 ID0gZmlsZS0+ZHJpdmVyX3ByaXY7CisJc3RydWN0IGRybV9saW1hX2dlbV9zdWJtaXRfYm8gKmJv czsKKwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlOworCXN0cnVjdCBsaW1hX3NjaGVkX3Rh c2sgKnRhc2s7CisJc3RydWN0IGxpbWFfY3R4ICpjdHg7CisJc3RydWN0IGxpbWFfc3VibWl0IHN1 Ym1pdCA9IHswfTsKKwlzaXplX3Qgc2l6ZTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChhcmdzLT5w aXBlID49IGxpbWFfcGlwZV9udW0gfHwgYXJncy0+bnJfYm9zID09IDApCisJCXJldHVybiAtRUlO VkFMOworCisJaWYgKGFyZ3MtPmZsYWdzICYgfihMSU1BX1NVQk1JVF9GTEFHX0VYUExJQ0lUX0ZF TkNFKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwaXBlID0gbGRldi0+cGlwZSArIGFyZ3MtPnBp cGU7CisJaWYgKGFyZ3MtPmZyYW1lX3NpemUgIT0gcGlwZS0+ZnJhbWVfc2l6ZSkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlib3MgPSBrdmNhbGxvYyhhcmdzLT5ucl9ib3MsIHNpemVvZigqc3VibWl0 LmJvcykgKyBzaXplb2YoKnN1Ym1pdC5sYm9zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFib3MpCisJ CXJldHVybiAtRU5PTUVNOworCisJc2l6ZSA9IGFyZ3MtPm5yX2JvcyAqIHNpemVvZigqc3VibWl0 LmJvcyk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJvcywgdTY0X3RvX3VzZXJfcHRyKGFyZ3MtPmJv cyksIHNpemUpKSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0MDsKKwl9CisKKwl0YXNr ID0ga21lbV9jYWNoZV96YWxsb2MocGlwZS0+dGFza19zbGFiLCBHRlBfS0VSTkVMKTsKKwlpZiAo IXRhc2spIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQwOworCX0KKworCXRhc2stPmZy YW1lID0gdGFzayArIDE7CisJaWYgKGNvcHlfZnJvbV91c2VyKHRhc2stPmZyYW1lLCB1NjRfdG9f dXNlcl9wdHIoYXJncy0+ZnJhbWUpLCBhcmdzLT5mcmFtZV9zaXplKSkgeworCQllcnIgPSAtRUZB VUxUOworCQlnb3RvIG91dDE7CisJfQorCisJZXJyID0gcGlwZS0+dGFza192YWxpZGF0ZShwaXBl LCB0YXNrKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDE7CisKKwljdHggPSBsaW1hX2N0eF9nZXQo JnByaXYtPmN0eF9tZ3IsIGFyZ3MtPmN0eCk7CisJaWYgKCFjdHgpIHsKKwkJZXJyID0gLUVOT0VO VDsKKwkJZ290byBvdXQxOworCX0KKworCXN1Ym1pdC5waXBlID0gYXJncy0+cGlwZTsKKwlzdWJt aXQuYm9zID0gYm9zOworCXN1Ym1pdC5sYm9zID0gKHZvaWQgKilib3MgKyBzaXplOworCXN1Ym1p dC5ucl9ib3MgPSBhcmdzLT5ucl9ib3M7CisJc3VibWl0LnRhc2sgPSB0YXNrOworCXN1Ym1pdC5j dHggPSBjdHg7CisJc3VibWl0LmZsYWdzID0gYXJncy0+ZmxhZ3M7CisJc3VibWl0LmluX3N5bmNb MF0gPSBhcmdzLT5pbl9zeW5jWzBdOworCXN1Ym1pdC5pbl9zeW5jWzFdID0gYXJncy0+aW5fc3lu Y1sxXTsKKwlzdWJtaXQub3V0X3N5bmMgPSBhcmdzLT5vdXRfc3luYzsKKworCWVyciA9IGxpbWFf Z2VtX3N1Ym1pdChmaWxlLCAmc3VibWl0KTsKKworCWxpbWFfY3R4X3B1dChjdHgpOworb3V0MToK KwlpZiAoZXJyKQorCQlrbWVtX2NhY2hlX2ZyZWUocGlwZS0+dGFza19zbGFiLCB0YXNrKTsKK291 dDA6CisJa3ZmcmVlKGJvcyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBsaW1hX2lv Y3RsX2dlbV93YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBk cm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2xpbWFfZ2VtX3dhaXQgKmFyZ3MgPSBkYXRh OworCisJaWYgKGFyZ3MtPm9wICYgfihMSU1BX0dFTV9XQUlUX1JFQUR8TElNQV9HRU1fV0FJVF9X UklURSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGxpbWFfZ2VtX3dhaXQoZmlsZSwg YXJncy0+aGFuZGxlLCBhcmdzLT5vcCwgYXJncy0+dGltZW91dF9ucyk7Cit9CisKK3N0YXRpYyBp bnQgbGltYV9pb2N0bF9jdHhfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRh dGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2xpbWFfY3R4X2NyZWF0 ZSAqYXJncyA9IGRhdGE7CisJc3RydWN0IGxpbWFfZHJtX3ByaXYgKnByaXYgPSBmaWxlLT5kcml2 ZXJfcHJpdjsKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmxkZXYgPSB0b19saW1hX2RldihkZXYpOwor CisJaWYgKGFyZ3MtPl9wYWQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGxpbWFfY3R4 X2NyZWF0ZShsZGV2LCAmcHJpdi0+Y3R4X21nciwgJmFyZ3MtPmlkKTsKK30KKworc3RhdGljIGlu dCBsaW1hX2lvY3RsX2N0eF9mcmVlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs IHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2xpbWFfY3R4X2NyZWF0ZSAq YXJncyA9IGRhdGE7CisJc3RydWN0IGxpbWFfZHJtX3ByaXYgKnByaXYgPSBmaWxlLT5kcml2ZXJf cHJpdjsKKworCWlmIChhcmdzLT5fcGFkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBs aW1hX2N0eF9mcmVlKCZwcml2LT5jdHhfbWdyLCBhcmdzLT5pZCk7Cit9CisKK3N0YXRpYyBpbnQg bGltYV9kcm1fZHJpdmVyX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9m aWxlICpmaWxlKQoreworCWludCBlcnI7CisJc3RydWN0IGxpbWFfZHJtX3ByaXYgKnByaXY7CisJ c3RydWN0IGxpbWFfZGV2aWNlICpsZGV2ID0gdG9fbGltYV9kZXYoZGV2KTsKKworCXByaXYgPSBr emFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlwcml2LT52bSA9IGxpbWFfdm1fY3JlYXRlKGxkZXYpOworCWlmICghcHJp di0+dm0pIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0MDsKKwl9CisKKwlsaW1h X2N0eF9tZ3JfaW5pdCgmcHJpdi0+Y3R4X21ncik7CisKKwlmaWxlLT5kcml2ZXJfcHJpdiA9IHBy aXY7CisJcmV0dXJuIDA7CisKK2Vycl9vdXQwOgorCWtmcmVlKHByaXYpOworCXJldHVybiBlcnI7 Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZHJtX2RyaXZlcl9wb3N0Y2xvc2Uoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBsaW1hX2RybV9w cml2ICpwcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7CisKKwlsaW1hX2N0eF9tZ3JfZmluaSgmcHJp di0+Y3R4X21ncik7CisJbGltYV92bV9wdXQocHJpdi0+dm0pOworCWtmcmVlKHByaXYpOworfQor CitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIGxpbWFfZHJtX2RyaXZlcl9pb2N0 bHNbXSA9IHsKKwlEUk1fSU9DVExfREVGX0RSVihMSU1BX0dFVF9QQVJBTSwgbGltYV9pb2N0bF9n ZXRfcGFyYW0sIERSTV9BVVRIfERSTV9SRU5ERVJfQUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJW KExJTUFfR0VNX0NSRUFURSwgbGltYV9pb2N0bF9nZW1fY3JlYXRlLCBEUk1fQVVUSHxEUk1fUkVO REVSX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGX0RSVihMSU1BX0dFTV9JTkZPLCBsaW1hX2lvY3Rs X2dlbV9pbmZvLCBEUk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGX0RS VihMSU1BX0dFTV9TVUJNSVQsIGxpbWFfaW9jdGxfZ2VtX3N1Ym1pdCwgRFJNX0FVVEh8RFJNX1JF TkRFUl9BTExPVyksCisJRFJNX0lPQ1RMX0RFRl9EUlYoTElNQV9HRU1fV0FJVCwgbGltYV9pb2N0 bF9nZW1fd2FpdCwgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RMX0RFRl9E UlYoTElNQV9DVFhfQ1JFQVRFLCBsaW1hX2lvY3RsX2N0eF9jcmVhdGUsIERSTV9BVVRIfERSTV9S RU5ERVJfQUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJWKExJTUFfQ1RYX0ZSRUUsIGxpbWFfaW9j dGxfY3R4X2ZyZWUsIERSTV9BVVRIfERSTV9SRU5ERVJfQUxMT1cpLAorfTsKKworc3RhdGljIGNv bnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGltYV9kcm1fZHJpdmVyX2ZvcHMgPSB7CisJLm93 bmVyICAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgICAgICAgICAgICAgPSBk cm1fb3BlbiwKKwkucmVsZWFzZSAgICAgICAgICAgID0gZHJtX3JlbGVhc2UsCisJLnVubG9ja2Vk X2lvY3RsICAgICA9IGRybV9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9p b2N0bCAgICAgICA9IGRybV9jb21wYXRfaW9jdGwsCisjZW5kaWYKKwkubW1hcCAgICAgICAgICAg ICAgID0gbGltYV9nZW1fbW1hcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBsaW1h X2RybV9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcyAgICA9IERSSVZFUl9SRU5ERVIgfCBE UklWRVJfR0VNIHwgRFJJVkVSX1BSSU1FIHwgRFJJVkVSX1NZTkNPQkosCisJLm9wZW4gICAgICAg ICAgICAgICA9IGxpbWFfZHJtX2RyaXZlcl9vcGVuLAorCS5wb3N0Y2xvc2UgICAgICAgICAgPSBs aW1hX2RybV9kcml2ZXJfcG9zdGNsb3NlLAorCS5pb2N0bHMgICAgICAgICAgICAgPSBsaW1hX2Ry bV9kcml2ZXJfaW9jdGxzLAorCS5udW1faW9jdGxzICAgICAgICAgPSBBUlJBWV9TSVpFKGxpbWFf ZHJtX2RyaXZlcl9pb2N0bHMpLAorCS5mb3BzICAgICAgICAgICAgICAgPSAmbGltYV9kcm1fZHJp dmVyX2ZvcHMsCisJLmdlbV9mcmVlX29iamVjdF91bmxvY2tlZCA9IGxpbWFfZ2VtX2ZyZWVfb2Jq ZWN0LAorCS5nZW1fb3Blbl9vYmplY3QgICAgPSBsaW1hX2dlbV9vYmplY3Rfb3BlbiwKKwkuZ2Vt X2Nsb3NlX29iamVjdCAgID0gbGltYV9nZW1fb2JqZWN0X2Nsb3NlLAorCS5nZW1fdm1fb3BzICAg ICAgICAgPSAmbGltYV9nZW1fdm1fb3BzLAorCS5uYW1lICAgICAgICAgICAgICAgPSAibGltYSIs CisJLmRlc2MgICAgICAgICAgICAgICA9ICJsaW1hIERSTSIsCisJLmRhdGUgICAgICAgICAgICAg ICA9ICIyMDE5MDIxNyIsCisJLm1ham9yICAgICAgICAgICAgICA9IDEsCisJLm1pbm9yICAgICAg ICAgICAgICA9IDAsCisJLnBhdGNobGV2ZWwgICAgICAgICA9IDAsCisKKwkucHJpbWVfZmRfdG9f aGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9pbXBvcnRf c2dfdGFibGUgPSBsaW1hX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUsCisJLnByaW1lX2hhbmRs ZV90b19mZCA9IGRybV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkLAorCS5nZW1fcHJpbWVfZ2V0X3Nn X3RhYmxlID0gbGltYV9nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfbW1hcCA9 IGxpbWFfZ2VtX3ByaW1lX21tYXAsCit9OworCitzdGF0aWMgaW50IGxpbWFfcGRldl9wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBsaW1hX2RldmljZSAqbGRl djsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldjsKKwlpbnQgZXJyOworCisJZXJyID0gbGltYV9z Y2hlZF9zbGFiX2luaXQoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbGRldiA9IGRl dm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmxkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWxkZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0MDsKKwl9CisKKwlsZGV2 LT5wZGV2ID0gcGRldjsKKwlsZGV2LT5kZXYgPSAmcGRldi0+ZGV2OworCWxkZXYtPmlkID0gKGVu dW0gbGltYV9ncHVfaWQpb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOworCisJ cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbGRldik7CisKKwkvKiBBbGxvY2F0ZSBhbmQgaW5p dGlhbGl6ZSB0aGUgRFJNIGRldmljZS4gKi8KKwlkZGV2ID0gZHJtX2Rldl9hbGxvYygmbGltYV9k cm1fZHJpdmVyLCAmcGRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRkZXYpKQorCQlyZXR1cm4gUFRS X0VSUihkZGV2KTsKKworCWRkZXYtPmRldl9wcml2YXRlID0gbGRldjsKKwlsZGV2LT5kZGV2ID0g ZGRldjsKKworCWVyciA9IGxpbWFfZGV2aWNlX2luaXQobGRldik7CisJaWYgKGVycikgeworCQlk ZXZfZXJyKCZwZGV2LT5kZXYsICJGYXRhbCBlcnJvciBkdXJpbmcgR1BVIGluaXRcbiIpOworCQln b3RvIGVycl9vdXQxOworCX0KKworCS8qCisJICogUmVnaXN0ZXIgdGhlIERSTSBkZXZpY2Ugd2l0 aCB0aGUgY29yZSBhbmQgdGhlIGNvbm5lY3RvcnMgd2l0aAorCSAqIHN5c2ZzLgorCSAqLworCWVy ciA9IGRybV9kZXZfcmVnaXN0ZXIoZGRldiwgMCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJy X291dDI7CisKKwlyZXR1cm4gMDsKKworZXJyX291dDI6CisJbGltYV9kZXZpY2VfZmluaShsZGV2 KTsKK2Vycl9vdXQxOgorCWRybV9kZXZfcHV0KGRkZXYpOworZXJyX291dDA6CisJbGltYV9zY2hl ZF9zbGFiX2ZpbmkoKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGxpbWFfcGRldl9y ZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbGltYV9kZXZp Y2UgKmxkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGRldiA9IGxkZXYtPmRkZXY7CisKKwlkcm1fZGV2X3VucmVnaXN0ZXIoZGRldik7CisJbGlt YV9kZXZpY2VfZmluaShsZGV2KTsKKwlkcm1fZGV2X3B1dChkZGV2KTsKKwlsaW1hX3NjaGVkX3Ns YWJfZmluaSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCBkdF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYXJtLG1hbGktNDAwIiwgLmRh dGEgPSAodm9pZCAqKWxpbWFfZ3B1X21hbGk0MDAgfSwKKwl7IC5jb21wYXRpYmxlID0gImFybSxt YWxpLTQ1MCIsIC5kYXRhID0gKHZvaWQgKilsaW1hX2dwdV9tYWxpNDUwIH0sCisJe30KK307CitN T0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkdF9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIGxpbWFfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZSAgICAgID0gbGltYV9w ZGV2X3Byb2JlLAorCS5yZW1vdmUgICAgID0gbGltYV9wZGV2X3JlbW92ZSwKKwkuZHJpdmVyICAg ICA9IHsKKwkJLm5hbWUgICA9ICJsaW1hIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gZHRfbWF0Y2gs CisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGxpbWFfaW5pdCh2b2lkKQoreworCXJldHVy biBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmxpbWFfcGxhdGZvcm1fZHJpdmVyKTsKK30KK21v ZHVsZV9pbml0KGxpbWFfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsaW1hX2V4aXQodm9p ZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbGltYV9wbGF0Zm9ybV9kcml2ZXIp OworfQorbW9kdWxlX2V4aXQobGltYV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTGltYSBQcm9q ZWN0IERldmVsb3BlcnMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTGltYSBEUk0gRHJpdmVyIik7 CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bGltYS9saW1hX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kcnYuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY5YzczNDQ3MTVjOQotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZHJ2LmgKQEAgLTAsMCArMSw0NSBA QAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5 cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVm IF9fTElNQV9EUlZfSF9fCisjZGVmaW5lIF9fTElNQV9EUlZfSF9fCisKKyNpbmNsdWRlIDxkcm0v ZHJtX2ZpbGUuaD4KKworI2luY2x1ZGUgImxpbWFfY3R4LmgiCisKK2V4dGVybiBpbnQgbGltYV9z Y2hlZF90aW1lb3V0X21zOworCitzdHJ1Y3QgbGltYV92bTsKK3N0cnVjdCBsaW1hX2JvOworc3Ry dWN0IGxpbWFfc2NoZWRfdGFzazsKKworc3RydWN0IGRybV9saW1hX2dlbV9zdWJtaXRfYm87CisK K3N0cnVjdCBsaW1hX2RybV9wcml2IHsKKwlzdHJ1Y3QgbGltYV92bSAqdm07CisJc3RydWN0IGxp bWFfY3R4X21nciBjdHhfbWdyOworfTsKKworc3RydWN0IGxpbWFfc3VibWl0IHsKKwlzdHJ1Y3Qg bGltYV9jdHggKmN0eDsKKwlpbnQgcGlwZTsKKwl1MzIgZmxhZ3M7CisKKwlzdHJ1Y3QgZHJtX2xp bWFfZ2VtX3N1Ym1pdF9ibyAqYm9zOworCXN0cnVjdCBsaW1hX2JvICoqbGJvczsKKwl1MzIgbnJf Ym9zOworCisJdTMyIGluX3N5bmNbMl07CisJdTMyIG91dF9zeW5jOworCisJc3RydWN0IGxpbWFf c2NoZWRfdGFzayAqdGFzazsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpbWFfZHJtX3By aXYgKgordG9fbGltYV9kcm1fcHJpdihzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJcmV0dXJu IGZpbGUtPmRyaXZlcl9wcml2OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9saW1hL2xpbWFfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmQzY2Y5NmY2YzU4Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW0uYwpAQCAtMCwwICsx LDM4MSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBD b3B5cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaW5j bHVkZSA8bGludXgvc3luY19maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGZuX3QuaD4KKworI2lu Y2x1ZGUgPGRybS9kcm1fZmlsZS5oPgorI2luY2x1ZGUgPGRybS9kcm1fc3luY29iai5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fdXRpbHMuaD4KKworI2luY2x1ZGUgPGRybS9saW1hX2RybS5oPgorCisj aW5jbHVkZSAibGltYV9kcnYuaCIKKyNpbmNsdWRlICJsaW1hX2dlbS5oIgorI2luY2x1ZGUgImxp bWFfZ2VtX3ByaW1lLmgiCisjaW5jbHVkZSAibGltYV92bS5oIgorI2luY2x1ZGUgImxpbWFfb2Jq ZWN0LmgiCisKK2ludCBsaW1hX2dlbV9jcmVhdGVfaGFuZGxlKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCSAgIHUzMiBzaXplLCB1MzIgZmxhZ3MsIHUz MiAqaGFuZGxlKQoreworCWludCBlcnI7CisJc3RydWN0IGxpbWFfYm8gKmJvOworCXN0cnVjdCBs aW1hX2RldmljZSAqbGRldiA9IHRvX2xpbWFfZGV2KGRldik7CisKKwlibyA9IGxpbWFfYm9fY3Jl YXRlKGxkZXYsIHNpemUsIGZsYWdzLCBOVUxMLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGJvKSkKKwkJ cmV0dXJuIFBUUl9FUlIoYm8pOworCisJZXJyID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGUs ICZiby0+Z2VtLCBoYW5kbGUpOworCisJLyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAt IGhhbmRsZSBob2xkcyBpdCBub3cgKi8KKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoJmJv LT5nZW0pOworCisJcmV0dXJuIGVycjsKK30KKwordm9pZCBsaW1hX2dlbV9mcmVlX29iamVjdChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgbGltYV9ibyAqYm8gPSB0b19s aW1hX2JvKG9iaik7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmJvLT52YSkpCisJCWRldl9lcnIob2Jq LT5kZXYtPmRldiwgImxpbWEgZ2VtIGZyZWUgYm8gc3RpbGwgaGFzIHZhXG4iKTsKKworCWxpbWFf Ym9fZGVzdHJveShibyk7Cit9CisKK2ludCBsaW1hX2dlbV9vYmplY3Rfb3BlbihzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBsaW1h X2JvICpibyA9IHRvX2xpbWFfYm8ob2JqKTsKKwlzdHJ1Y3QgbGltYV9kcm1fcHJpdiAqcHJpdiA9 IHRvX2xpbWFfZHJtX3ByaXYoZmlsZSk7CisJc3RydWN0IGxpbWFfdm0gKnZtID0gcHJpdi0+dm07 CisKKwlyZXR1cm4gbGltYV92bV9ib19hZGQodm0sIGJvLCB0cnVlKTsKK30KKwordm9pZCBsaW1h X2dlbV9vYmplY3RfY2xvc2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbGltYV9ibyAqYm8gPSB0b19saW1hX2JvKG9iaik7CisJ c3RydWN0IGxpbWFfZHJtX3ByaXYgKnByaXYgPSB0b19saW1hX2RybV9wcml2KGZpbGUpOworCXN0 cnVjdCBsaW1hX3ZtICp2bSA9IHByaXYtPnZtOworCisJbGltYV92bV9ib19kZWwodm0sIGJvKTsK K30KKworaW50IGxpbWFfZ2VtX2dldF9pbmZvKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgdTMyIGhh bmRsZSwgdTMyICp2YSwgdTY0ICpvZmZzZXQpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpv Ymo7CisJc3RydWN0IGxpbWFfYm8gKmJvOworCXN0cnVjdCBsaW1hX2RybV9wcml2ICpwcml2ID0g dG9fbGltYV9kcm1fcHJpdihmaWxlKTsKKwlzdHJ1Y3QgbGltYV92bSAqdm0gPSBwcml2LT52bTsK KwlpbnQgZXJyOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGZpbGUsIGhhbmRsZSk7 CisJaWYgKCFvYmopCisJCXJldHVybiAtRU5PRU5UOworCisJYm8gPSB0b19saW1hX2JvKG9iaik7 CisKKwkqdmEgPSBsaW1hX3ZtX2dldF92YSh2bSwgYm8pOworCisJZXJyID0gZHJtX2dlbV9jcmVh dGVfbW1hcF9vZmZzZXQob2JqKTsKKwlpZiAoIWVycikKKwkJKm9mZnNldCA9IGRybV92bWFfbm9k ZV9vZmZzZXRfYWRkcigmb2JqLT52bWFfbm9kZSk7CisKKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5s b2NrZWQob2JqKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm1fZmF1bHRfdCBsaW1hX2dl bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSA9IHZtZi0+dm1hOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9w cml2YXRlX2RhdGE7CisJc3RydWN0IGxpbWFfYm8gKmJvID0gdG9fbGltYV9ibyhvYmopOworCXBm bl90IHBmbjsKKwlwZ29mZl90IHBnb2ZmOworCisJLyogV2UgZG9uJ3QgdXNlIHZtZi0+cGdvZmYg c2luY2UgdGhhdCBoYXMgdGhlIGZha2Ugb2Zmc2V0OiAqLworCXBnb2ZmID0gKHZtZi0+YWRkcmVz cyAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJcGZuID0gX19wZm5fdG9fcGZuX3Qo cGFnZV90b19wZm4oYm8tPnBhZ2VzW3Bnb2ZmXSksIFBGTl9ERVYpOworCisJcmV0dXJuIHZtZl9p bnNlcnRfbWl4ZWQodm1hLCB2bWYtPmFkZHJlc3MsIHBmbik7Cit9CisKK2NvbnN0IHN0cnVjdCB2 bV9vcGVyYXRpb25zX3N0cnVjdCBsaW1hX2dlbV92bV9vcHMgPSB7CisJLmZhdWx0ID0gbGltYV9n ZW1fZmF1bHQsCisJLm9wZW4gPSBkcm1fZ2VtX3ZtX29wZW4sCisJLmNsb3NlID0gZHJtX2dlbV92 bV9jbG9zZSwKK307CisKK3ZvaWQgbGltYV9zZXRfdm1hX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hKQoreworCXBncHJvdF90IHByb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0+dm1f ZmxhZ3MpOworCisJdm1hLT52bV9mbGFncyB8PSBWTV9NSVhFRE1BUDsKKwl2bWEtPnZtX2ZsYWdz ICY9IH5WTV9QRk5NQVA7CisJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5l KHByb3QpOworfQorCitpbnQgbGltYV9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9nZW1fbW1h cChmaWxwLCB2bWEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlsaW1hX3NldF92bWFf ZmxhZ3Modm1hKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaW1hX2dlbV9zeW5jX2Jv KHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2ssIHN0cnVjdCBsaW1hX2JvICpibywKKwkJCSAg ICBib29sIHdyaXRlLCBib29sIGV4cGxpY2l0KQoreworCWludCBlcnIgPSAwOworCisJaWYgKCF3 cml0ZSkgeworCQllcnIgPSByZXNlcnZhdGlvbl9vYmplY3RfcmVzZXJ2ZV9zaGFyZWQoYm8tPmdl bS5yZXN2LCAxKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJLyogZXhwbGlj aXQgc3luYyB1c2UgdXNlciBwYXNzZWQgZGVwIGZlbmNlICovCisJaWYgKGV4cGxpY2l0KQorCQly ZXR1cm4gMDsKKworCS8qIGltcGxpY2l0IHN5bmMgdXNlIGJvIGZlbmNlIGluIHJlc3Ygb2JqICov CisJaWYgKHdyaXRlKSB7CisJCXVuc2lnbmVkIG5yX2ZlbmNlczsKKwkJc3RydWN0IGRtYV9mZW5j ZSAqKmZlbmNlczsKKwkJaW50IGk7CisKKwkJZXJyID0gcmVzZXJ2YXRpb25fb2JqZWN0X2dldF9m ZW5jZXNfcmN1KAorCQkJYm8tPmdlbS5yZXN2LCBOVUxMLCAmbnJfZmVuY2VzLCAmZmVuY2VzKTsK KwkJaWYgKGVyciB8fCAhbnJfZmVuY2VzKQorCQkJcmV0dXJuIGVycjsKKworCQlmb3IgKGkgPSAw OyBpIDwgbnJfZmVuY2VzOyBpKyspIHsKKwkJCWVyciA9IGxpbWFfc2NoZWRfdGFza19hZGRfZGVw KHRhc2ssIGZlbmNlc1tpXSk7CisJCQlpZiAoZXJyKQorCQkJCWJyZWFrOworCQl9CisKKwkJLyog Zm9yIGVycm9yIGNhc2UgZnJlZSByZW1haW5pbmcgZmVuY2VzICovCisJCWZvciAoIDsgaSA8IG5y X2ZlbmNlczsgaSsrKQorCQkJZG1hX2ZlbmNlX3B1dChmZW5jZXNbaV0pOworCisJCWtmcmVlKGZl bmNlcyk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7CisKKwkJZmVuY2Ug PSByZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2V4Y2xfcmN1KGJvLT5nZW0ucmVzdik7CisJCWlmIChm ZW5jZSkgeworCQkJZXJyID0gbGltYV9zY2hlZF90YXNrX2FkZF9kZXAodGFzaywgZmVuY2UpOwor CQkJaWYgKGVycikKKwkJCQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKKwkJfQorCX0KKworCXJldHVy biBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9nZW1fbG9ja19ib3Moc3RydWN0IGxpbWFfYm8g Kipib3MsIHUzMiBucl9ib3MsCisJCQkgICAgIHN0cnVjdCB3d19hY3F1aXJlX2N0eCAqY3R4KQor eworCWludCBpLCByZXQgPSAwLCBjb250ZW5kZWQsIHNsb3dfbG9ja2VkID0gLTE7CisKKwl3d19h Y3F1aXJlX2luaXQoY3R4LCAmcmVzZXJ2YXRpb25fd3dfY2xhc3MpOworCityZXRyeToKKwlmb3Ig KGkgPSAwOyBpIDwgbnJfYm9zOyBpKyspIHsKKwkJaWYgKGkgPT0gc2xvd19sb2NrZWQpIHsKKwkJ CXNsb3dfbG9ja2VkID0gLTE7CisJCQljb250aW51ZTsKKwkJfQorCisJCXJldCA9IHd3X211dGV4 X2xvY2tfaW50ZXJydXB0aWJsZSgmYm9zW2ldLT5nZW0ucmVzdi0+bG9jaywgY3R4KTsKKwkJaWYg KHJldCA8IDApIHsKKwkJCWNvbnRlbmRlZCA9IGk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKwor CXd3X2FjcXVpcmVfZG9uZShjdHgpOworCXJldHVybiAwOworCitlcnI6CisJZm9yIChpLS07IGkg Pj0gMDsgaS0tKQorCQl3d19tdXRleF91bmxvY2soJmJvc1tpXS0+Z2VtLnJlc3YtPmxvY2spOwor CisJaWYgKHNsb3dfbG9ja2VkID49IDApCisJCXd3X211dGV4X3VubG9jaygmYm9zW3Nsb3dfbG9j a2VkXS0+Z2VtLnJlc3YtPmxvY2spOworCisJaWYgKHJldCA9PSAtRURFQURMSykgeworCQkvKiB3 ZSBsb3N0IG91dCBpbiBhIHNlcW5vIHJhY2UsIGxvY2sgYW5kIHJldHJ5Li4gKi8KKwkJcmV0ID0g d3dfbXV0ZXhfbG9ja19zbG93X2ludGVycnVwdGlibGUoCisJCQkmYm9zW2NvbnRlbmRlZF0tPmdl bS5yZXN2LT5sb2NrLCBjdHgpOworCQlpZiAoIXJldCkgeworCQkJc2xvd19sb2NrZWQgPSBjb250 ZW5kZWQ7CisJCQlnb3RvIHJldHJ5OworCQl9CisJfQorCXd3X2FjcXVpcmVfZmluaShjdHgpOwor CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbGltYV9nZW1fdW5sb2NrX2JvcyhzdHJ1 Y3QgbGltYV9ibyAqKmJvcywgdTMyIG5yX2JvcywKKwkJCQlzdHJ1Y3Qgd3dfYWNxdWlyZV9jdHgg KmN0eCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9ib3M7IGkrKykKKwkJd3df bXV0ZXhfdW5sb2NrKCZib3NbaV0tPmdlbS5yZXN2LT5sb2NrKTsKKwl3d19hY3F1aXJlX2Zpbmko Y3R4KTsKK30KKworc3RhdGljIGludCBsaW1hX2dlbV9hZGRfZGVwcyhzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGUsIHN0cnVjdCBsaW1hX3N1Ym1pdCAqc3VibWl0KQoreworCWludCBpLCBlcnI7CisKKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdWJtaXQtPmluX3N5bmMpOyBpKyspIHsKKwkJc3Ry dWN0IGRtYV9mZW5jZSAqZmVuY2UgPSBOVUxMOworCisJCWlmICghc3VibWl0LT5pbl9zeW5jW2ld KQorCQkJY29udGludWU7CisKKwkJZXJyID0gZHJtX3N5bmNvYmpfZmluZF9mZW5jZShmaWxlLCBz dWJtaXQtPmluX3N5bmNbaV0sCisJCQkJCSAgICAgMCwgMCwgJmZlbmNlKTsKKwkJaWYgKGVycikK KwkJCXJldHVybiBlcnI7CisKKwkJZXJyID0gbGltYV9zY2hlZF90YXNrX2FkZF9kZXAoc3VibWl0 LT50YXNrLCBmZW5jZSk7CisJCWlmIChlcnIpIHsKKwkJCWRtYV9mZW5jZV9wdXQoZmVuY2UpOwor CQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQgbGltYV9nZW1f c3VibWl0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgc3RydWN0IGxpbWFfc3VibWl0ICpzdWJtaXQp Cit7CisJaW50IGksIGVyciA9IDA7CisJc3RydWN0IHd3X2FjcXVpcmVfY3R4IGN0eDsKKwlzdHJ1 Y3QgbGltYV9kcm1fcHJpdiAqcHJpdiA9IHRvX2xpbWFfZHJtX3ByaXYoZmlsZSk7CisJc3RydWN0 IGxpbWFfdm0gKnZtID0gcHJpdi0+dm07CisJc3RydWN0IGRybV9zeW5jb2JqICpvdXRfc3luYyA9 IE5VTEw7CisJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7CisJc3RydWN0IGxpbWFfYm8gKipib3Mg PSBzdWJtaXQtPmxib3M7CisKKwlpZiAoc3VibWl0LT5vdXRfc3luYykgeworCQlvdXRfc3luYyA9 IGRybV9zeW5jb2JqX2ZpbmQoZmlsZSwgc3VibWl0LT5vdXRfc3luYyk7CisJCWlmICghb3V0X3N5 bmMpCisJCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc3VibWl0LT5u cl9ib3M7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwkJc3RydWN0IGxp bWFfYm8gKmJvOworCisJCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlLCBzdWJtaXQt PmJvc1tpXS5oYW5kbGUpOworCQlpZiAoIW9iaikgeworCQkJZXJyID0gLUVOT0VOVDsKKwkJCWdv dG8gZXJyX291dDA7CisJCX0KKworCQlibyA9IHRvX2xpbWFfYm8ob2JqKTsKKworCQkvKiBpbmNy ZWFzZSByZWZjbnQgb2YgZ3B1IHZhIG1hcCB0byBwcmV2ZW50IHVubWFwcGVkIHdoZW4gZXhlY3V0 aW5nLAorCQkgKiB3aWxsIGJlIGRlY3JlYXNlZCB3aGVuIHRhc2sgZG9uZQorCQkgKi8KKwkJZXJy ID0gbGltYV92bV9ib19hZGQodm0sIGJvLCBmYWxzZSk7CisJCWlmIChlcnIpIHsKKwkJCWRybV9n ZW1fb2JqZWN0X3B1dF91bmxvY2tlZChvYmopOworCQkJZ290byBlcnJfb3V0MDsKKwkJfQorCisJ CWJvc1tpXSA9IGJvOworCX0KKworCWVyciA9IGxpbWFfZ2VtX2xvY2tfYm9zKGJvcywgc3VibWl0 LT5ucl9ib3MsICZjdHgpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDA7CisKKwllcnIgPSBs aW1hX3NjaGVkX3Rhc2tfaW5pdCgKKwkJc3VibWl0LT50YXNrLCBzdWJtaXQtPmN0eC0+Y29udGV4 dCArIHN1Ym1pdC0+cGlwZSwKKwkJYm9zLCBzdWJtaXQtPm5yX2Jvcywgdm0pOworCWlmIChlcnIp CisJCWdvdG8gZXJyX291dDE7CisKKwllcnIgPSBsaW1hX2dlbV9hZGRfZGVwcyhmaWxlLCBzdWJt aXQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDI7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3Vi bWl0LT5ucl9ib3M7IGkrKykgeworCQllcnIgPSBsaW1hX2dlbV9zeW5jX2JvKAorCQkJc3VibWl0 LT50YXNrLCBib3NbaV0sCisJCQlzdWJtaXQtPmJvc1tpXS5mbGFncyAmIExJTUFfU1VCTUlUX0JP X1dSSVRFLAorCQkJc3VibWl0LT5mbGFncyAmIExJTUFfU1VCTUlUX0ZMQUdfRVhQTElDSVRfRkVO Q0UpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0MjsKKwl9CisKKwlmZW5jZSA9IGxpbWFf c2NoZWRfY29udGV4dF9xdWV1ZV90YXNrKAorCQlzdWJtaXQtPmN0eC0+Y29udGV4dCArIHN1Ym1p dC0+cGlwZSwgc3VibWl0LT50YXNrKTsKKworCWZvciAoaSA9IDA7IGkgPCBzdWJtaXQtPm5yX2Jv czsgaSsrKSB7CisJCWlmIChzdWJtaXQtPmJvc1tpXS5mbGFncyAmIExJTUFfU1VCTUlUX0JPX1dS SVRFKQorCQkJcmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9leGNsX2ZlbmNlKGJvc1tpXS0+Z2VtLnJl c3YsIGZlbmNlKTsKKwkJZWxzZQorCQkJcmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9zaGFyZWRfZmVu Y2UoYm9zW2ldLT5nZW0ucmVzdiwgZmVuY2UpOworCX0KKworCWxpbWFfZ2VtX3VubG9ja19ib3Mo Ym9zLCBzdWJtaXQtPm5yX2JvcywgJmN0eCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3VibWl0LT5u cl9ib3M7IGkrKykKKwkJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKCZib3NbaV0tPmdlbSk7 CisKKwlpZiAob3V0X3N5bmMpIHsKKwkJZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZShvdXRfc3lu YywgZmVuY2UpOworCQlkcm1fc3luY29ial9wdXQob3V0X3N5bmMpOworCX0KKworCWRtYV9mZW5j ZV9wdXQoZmVuY2UpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXQyOgorCWxpbWFfc2NoZWRfdGFz a19maW5pKHN1Ym1pdC0+dGFzayk7CitlcnJfb3V0MToKKwlsaW1hX2dlbV91bmxvY2tfYm9zKGJv cywgc3VibWl0LT5ucl9ib3MsICZjdHgpOworZXJyX291dDA6CisJZm9yIChpID0gMDsgaSA8IHN1 Ym1pdC0+bnJfYm9zOyBpKyspIHsKKwkJaWYgKCFib3NbaV0pCisJCQlicmVhazsKKwkJbGltYV92 bV9ib19kZWwodm0sIGJvc1tpXSk7CisJCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZCgmYm9z W2ldLT5nZW0pOworCX0KKwlpZiAob3V0X3N5bmMpCisJCWRybV9zeW5jb2JqX3B1dChvdXRfc3lu Yyk7CisJcmV0dXJuIGVycjsKK30KKworaW50IGxpbWFfZ2VtX3dhaXQoc3RydWN0IGRybV9maWxl ICpmaWxlLCB1MzIgaGFuZGxlLCB1MzIgb3AsIHM2NCB0aW1lb3V0X25zKQoreworCWJvb2wgd3Jp dGUgPSBvcCAmIExJTUFfR0VNX1dBSVRfV1JJVEU7CisJbG9uZyByZXQsIHRpbWVvdXQ7CisKKwlp ZiAoIW9wKQorCQlyZXR1cm4gMDsKKworCXRpbWVvdXQgPSBkcm1fdGltZW91dF9hYnNfdG9famlm Zmllcyh0aW1lb3V0X25zKTsKKworCXJldCA9IGRybV9nZW1fcmVzZXJ2YXRpb25fb2JqZWN0X3dh aXQoZmlsZSwgaGFuZGxlLCB3cml0ZSwgdGltZW91dCk7CisJaWYgKHJldCA9PSAwKQorCQlyZXQg PSB0aW1lb3V0ID8gLUVUSU1FRE9VVCA6IC1FQlVTWTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5oIGIvZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV9nZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LjU1NjExMWEwMTEzNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xp bWFfZ2VtLmgKQEAgLTAsMCArMSwyNSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVA Z21haWwuY29tPiAqLworCisjaWZuZGVmIF9fTElNQV9HRU1fSF9fCisjZGVmaW5lIF9fTElNQV9H RU1fSF9fCisKK3N0cnVjdCBsaW1hX2JvOworc3RydWN0IGxpbWFfc3VibWl0OworCitleHRlcm4g Y29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGxpbWFfZ2VtX3ZtX29wczsKKworc3Ry dWN0IGxpbWFfYm8gKmxpbWFfZ2VtX2NyZWF0ZV9ibyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1 MzIgc2l6ZSwgdTMyIGZsYWdzKTsKK2ludCBsaW1hX2dlbV9jcmVhdGVfaGFuZGxlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCSAgIHUzMiBzaXplLCB1 MzIgZmxhZ3MsIHUzMiAqaGFuZGxlKTsKK3ZvaWQgbGltYV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmopOworaW50IGxpbWFfZ2VtX29iamVjdF9vcGVuKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwordm9pZCBsaW1hX2dl bV9vYmplY3RfY2xvc2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkcm1fZmls ZSAqZmlsZSk7CitpbnQgbGltYV9nZW1fZ2V0X2luZm8oc3RydWN0IGRybV9maWxlICpmaWxlLCB1 MzIgaGFuZGxlLCB1MzIgKnZhLCB1NjQgKm9mZnNldCk7CitpbnQgbGltYV9nZW1fbW1hcChzdHJ1 Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworaW50IGxpbWFfZ2Vt X3N1Ym1pdChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHN0cnVjdCBsaW1hX3N1Ym1pdCAqc3VibWl0 KTsKK2ludCBsaW1hX2dlbV93YWl0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgdTMyIGhhbmRsZSwg dTMyIG9wLCBzNjQgdGltZW91dF9ucyk7CisKK3ZvaWQgbGltYV9zZXRfdm1hX2ZsYWdzKHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbGltYS9saW1hX2dlbV9wcmltZS5jIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9n ZW1fcHJpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjljNmQ5 ZjFkYmE1NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2Vt X3ByaW1lLmMKQEAgLTAsMCArMSw0NyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAgT1IgTUlUCisvKiBDb3B5cmlnaHQgMjAxOC0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21h aWwuY29tPiAqLworCisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPGRybS9k cm1fcHJpbWUuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgorI2luY2x1ZGUgPGRybS9kcm1f ZmlsZS5oPgorCisjaW5jbHVkZSAibGltYV9kZXZpY2UuaCIKKyNpbmNsdWRlICJsaW1hX29iamVj dC5oIgorI2luY2x1ZGUgImxpbWFfZ2VtLmgiCisjaW5jbHVkZSAibGltYV9nZW1fcHJpbWUuaCIK Kworc3RydWN0IGRybV9nZW1fb2JqZWN0ICpsaW1hX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUo CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0 YWNoLAorCXN0cnVjdCBzZ190YWJsZSAqc2d0KQoreworCXN0cnVjdCBsaW1hX2RldmljZSAqbGRl diA9IHRvX2xpbWFfZGV2KGRldik7CisJc3RydWN0IGxpbWFfYm8gKmJvOworCisJYm8gPSBsaW1h X2JvX2NyZWF0ZShsZGV2LCBhdHRhY2gtPmRtYWJ1Zi0+c2l6ZSwgMCwgc2d0LAorCQkJICAgIGF0 dGFjaC0+ZG1hYnVmLT5yZXN2KTsKKwlpZiAoSVNfRVJSKGJvKSkKKwkJcmV0dXJuIEVSUl9DQVNU KGJvKTsKKworCXJldHVybiAmYm8tPmdlbTsKK30KKworc3RydWN0IHNnX3RhYmxlICpsaW1hX2dl bV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3Ry dWN0IGxpbWFfYm8gKmJvID0gdG9fbGltYV9ibyhvYmopOworCWludCBucGFnZXMgPSBvYmotPnNp emUgPj4gUEFHRV9TSElGVDsKKworCXJldHVybiBkcm1fcHJpbWVfcGFnZXNfdG9fc2coYm8tPnBh Z2VzLCBucGFnZXMpOworfQorCitpbnQgbGltYV9nZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IHJldDsK KworCXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCWxpbWFfc2V0X3ZtYV9mbGFncyh2bWEpOworCXJldHVybiAw OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW1fcHJpbWUuaCBi L2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtX3ByaW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zNGI0ZDM1YzIxZTMKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbV9wcmltZS5oCkBAIC0wLDAgKzEsMTMgQEAKKy8q IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLworLyogQ29weXJpZ2h0 IDIwMTgtMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2lmbmRlZiBfX0xJ TUFfR0VNX1BSSU1FX0hfXworI2RlZmluZSBfX0xJTUFfR0VNX1BSSU1FX0hfXworCitzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKmxpbWFfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSgKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCisJc3Ry dWN0IHNnX3RhYmxlICpzZ3QpOworc3RydWN0IHNnX3RhYmxlICpsaW1hX2dlbV9wcmltZV9nZXRf c2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworaW50IGxpbWFfZ2VtX3ByaW1l X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dw LmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi5jY2Y0OWZhZWRlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dwLmMKQEAgLTAsMCArMSwyODMgQEAKKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorLyogQ29weXJpZ2h0IDIwMTctMjAxOSBR aWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVw dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5o PgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGRybS9saW1hX2RybS5oPgor CisjaW5jbHVkZSAibGltYV9kZXZpY2UuaCIKKyNpbmNsdWRlICJsaW1hX2dwLmgiCisjaW5jbHVk ZSAibGltYV9yZWdzLmgiCisKKyNkZWZpbmUgZ3Bfd3JpdGUocmVnLCBkYXRhKSB3cml0ZWwoZGF0 YSwgaXAtPmlvbWVtICsgcmVnKQorI2RlZmluZSBncF9yZWFkKHJlZykgcmVhZGwoaXAtPmlvbWVt ICsgcmVnKQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbGltYV9ncF9pcnFfaGFuZGxlcihpbnQgaXJx LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBsaW1hX2lwICppcCA9IGRhdGE7CisJc3RydWN0IGxp bWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUg PSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVfZ3A7CisJdTMyIHN0YXRlID0gZ3BfcmVhZChMSU1BX0dQ X0lOVF9TVEFUKTsKKwl1MzIgc3RhdHVzID0gZ3BfcmVhZChMSU1BX0dQX1NUQVRVUyk7CisJYm9v bCBkb25lID0gZmFsc2U7CisKKwkvKiBmb3Igc2hhcmVkIGlycSBjYXNlICovCisJaWYgKCFzdGF0 ZSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJaWYgKHN0YXRlICYgTElNQV9HUF9JUlFfTUFTS19F UlJPUikgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiZ3AgZXJyb3IgaXJxIHN0YXRlPSV4IHN0YXR1 cz0leFxuIiwKKwkJCXN0YXRlLCBzdGF0dXMpOworCisJCS8qIG1hc2sgYWxsIGludGVycnVwdHMg YmVmb3JlIGhhcmQgcmVzZXQgKi8KKwkJZ3Bfd3JpdGUoTElNQV9HUF9JTlRfTUFTSywgMCk7CisK KwkJcGlwZS0+ZXJyb3IgPSB0cnVlOworCQlkb25lID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlib29s IHZhbGlkID0gc3RhdGUgJiAoTElNQV9HUF9JUlFfVlNfRU5EX0NNRF9MU1QgfAorCQkJCSAgICAg IExJTUFfR1BfSVJRX1BMQlVfRU5EX0NNRF9MU1QpOworCQlib29sIGFjdGl2ZSA9IHN0YXR1cyAm IChMSU1BX0dQX1NUQVRVU19WU19BQ1RJVkUgfAorCQkJCQlMSU1BX0dQX1NUQVRVU19QTEJVX0FD VElWRSk7CisJCWRvbmUgPSB2YWxpZCAmJiAhYWN0aXZlOworCX0KKworCWdwX3dyaXRlKExJTUFf R1BfSU5UX0NMRUFSLCBzdGF0ZSk7CisKKwlpZiAoZG9uZSkKKwkJbGltYV9zY2hlZF9waXBlX3Rh c2tfZG9uZShwaXBlKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQg bGltYV9ncF9zb2Z0X3Jlc2V0X2FzeW5jKHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlpZiAoaXAt PmRhdGEuYXN5bmNfcmVzZXQpCisJCXJldHVybjsKKworCWdwX3dyaXRlKExJTUFfR1BfSU5UX01B U0ssIDApOworCWdwX3dyaXRlKExJTUFfR1BfSU5UX0NMRUFSLCBMSU1BX0dQX0lSUV9SRVNFVF9D T01QTEVURUQpOworCWdwX3dyaXRlKExJTUFfR1BfQ01ELCBMSU1BX0dQX0NNRF9TT0ZUX1JFU0VU KTsKKwlpcC0+ZGF0YS5hc3luY19yZXNldCA9IHRydWU7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9n cF9zb2Z0X3Jlc2V0X2FzeW5jX3dhaXQoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCXN0cnVjdCBs aW1hX2RldmljZSAqZGV2ID0gaXAtPmRldjsKKwlpbnQgZXJyOworCXUzMiB2OworCisJaWYgKCFp cC0+ZGF0YS5hc3luY19yZXNldCkKKwkJcmV0dXJuIDA7CisKKwllcnIgPSByZWFkbF9wb2xsX3Rp bWVvdXQoaXAtPmlvbWVtICsgTElNQV9HUF9JTlRfUkFXU1RBVCwgdiwKKwkJCQkgdiAmIExJTUFf R1BfSVJRX1JFU0VUX0NPTVBMRVRFRCwKKwkJCQkgMCwgMTAwKTsKKwlpZiAoZXJyKSB7CisJCWRl dl9lcnIoZGV2LT5kZXYsICJncCBzb2Z0IHJlc2V0IHRpbWUgb3V0XG4iKTsKKwkJcmV0dXJuIGVy cjsKKwl9CisKKwlncF93cml0ZShMSU1BX0dQX0lOVF9DTEVBUiwgTElNQV9HUF9JUlFfTUFTS19B TEwpOworCWdwX3dyaXRlKExJTUFfR1BfSU5UX01BU0ssIExJTUFfR1BfSVJRX01BU0tfVVNFRCk7 CisKKwlpcC0+ZGF0YS5hc3luY19yZXNldCA9IGZhbHNlOworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGxpbWFfZ3BfdGFza192YWxpZGF0ZShzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBl LAorCQkJCSBzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrKQoreworCXN0cnVjdCBkcm1fbGlt YV9ncF9mcmFtZSAqZnJhbWUgPSB0YXNrLT5mcmFtZTsKKwl1MzIgKmYgPSBmcmFtZS0+ZnJhbWU7 CisJKHZvaWQpcGlwZTsKKworCWlmIChmW0xJTUFfR1BfVlNDTF9TVEFSVF9BRERSID4+IDJdID4K KwkgICAgZltMSU1BX0dQX1ZTQ0xfRU5EX0FERFIgPj4gMl0gfHwKKwkgICAgZltMSU1BX0dQX1BM QlVDTF9TVEFSVF9BRERSID4+IDJdID4KKwkgICAgZltMSU1BX0dQX1BMQlVDTF9FTkRfQUREUiA+ PiAyXSB8fAorCSAgICBmW0xJTUFfR1BfUExCVV9BTExPQ19TVEFSVF9BRERSID4+IDJdID4KKwkg ICAgZltMSU1BX0dQX1BMQlVfQUxMT0NfRU5EX0FERFIgPj4gMl0pCisJCXJldHVybiAtRUlOVkFM OworCisJaWYgKGZbTElNQV9HUF9WU0NMX1NUQVJUX0FERFIgPj4gMl0gPT0KKwkgICAgZltMSU1B X0dQX1ZTQ0xfRU5EX0FERFIgPj4gMl0gJiYKKwkgICAgZltMSU1BX0dQX1BMQlVDTF9TVEFSVF9B RERSID4+IDJdID09CisJICAgIGZbTElNQV9HUF9QTEJVQ0xfRU5EX0FERFIgPj4gMl0pCisJCXJl dHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZ3BfdGFz a19ydW4oc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSwKKwkJCSAgICAgc3RydWN0IGxpbWFf c2NoZWRfdGFzayAqdGFzaykKK3sKKwlzdHJ1Y3QgbGltYV9pcCAqaXAgPSBwaXBlLT5wcm9jZXNz b3JbMF07CisJc3RydWN0IGRybV9saW1hX2dwX2ZyYW1lICpmcmFtZSA9IHRhc2stPmZyYW1lOwor CXUzMiAqZiA9IGZyYW1lLT5mcmFtZTsKKwl1MzIgY21kID0gMDsKKwlpbnQgaTsKKworCWlmIChm W0xJTUFfR1BfVlNDTF9TVEFSVF9BRERSID4+IDJdICE9CisJICAgIGZbTElNQV9HUF9WU0NMX0VO RF9BRERSID4+IDJdKQorCQljbWQgfD0gTElNQV9HUF9DTURfU1RBUlRfVlM7CisJaWYgKGZbTElN QV9HUF9QTEJVQ0xfU1RBUlRfQUREUiA+PiAyXSAhPQorCSAgICBmW0xJTUFfR1BfUExCVUNMX0VO RF9BRERSID4+IDJdKQorCQljbWQgfD0gTElNQV9HUF9DTURfU1RBUlRfUExCVTsKKworCS8qIGJl Zm9yZSBhbnkgaHcgb3BzLCB3YWl0IGxhc3Qgc3VjY2VzcyB0YXNrIGFzeW5jIHNvZnQgcmVzZXQg Ki8KKwlsaW1hX2dwX3NvZnRfcmVzZXRfYXN5bmNfd2FpdChpcCk7CisKKwlmb3IgKGkgPSAwOyBp IDwgTElNQV9HUF9GUkFNRV9SRUdfTlVNOyBpKyspCisJCXdyaXRlbChmW2ldLCBpcC0+aW9tZW0g KyBMSU1BX0dQX1ZTQ0xfU1RBUlRfQUREUiArIGkgKiA0KTsKKworCWdwX3dyaXRlKExJTUFfR1Bf Q01ELCBMSU1BX0dQX0NNRF9VUERBVEVfUExCVV9BTExPQyk7CisJZ3Bfd3JpdGUoTElNQV9HUF9D TUQsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9ncF9oYXJkX3Jlc2V0X3BvbGwoc3RydWN0 IGxpbWFfaXAgKmlwKQoreworCWdwX3dyaXRlKExJTUFfR1BfUEVSRl9DTlRfMF9MSU1JVCwgMHhD MDFBMDAwMCk7CisJcmV0dXJuIGdwX3JlYWQoTElNQV9HUF9QRVJGX0NOVF8wX0xJTUlUKSA9PSAw eEMwMUEwMDAwOworfQorCitzdGF0aWMgaW50IGxpbWFfZ3BfaGFyZF9yZXNldChzdHJ1Y3QgbGlt YV9pcCAqaXApCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCWludCBy ZXQ7CisKKwlncF93cml0ZShMSU1BX0dQX1BFUkZfQ05UXzBfTElNSVQsIDB4QzBGRkUwMDApOwor CWdwX3dyaXRlKExJTUFfR1BfSU5UX01BU0ssIDApOworCWdwX3dyaXRlKExJTUFfR1BfQ01ELCBM SU1BX0dQX0NNRF9SRVNFVCk7CisJcmV0ID0gbGltYV9wb2xsX3RpbWVvdXQoaXAsIGxpbWFfZ3Bf aGFyZF9yZXNldF9wb2xsLCAxMCwgMTAwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LT5k ZXYsICJncCBoYXJkIHJlc2V0IHRpbWVvdXRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWdw X3dyaXRlKExJTUFfR1BfUEVSRl9DTlRfMF9MSU1JVCwgMCk7CisJZ3Bfd3JpdGUoTElNQV9HUF9J TlRfQ0xFQVIsIExJTUFfR1BfSVJRX01BU0tfQUxMKTsKKwlncF93cml0ZShMSU1BX0dQX0lOVF9N QVNLLCBMSU1BX0dQX0lSUV9NQVNLX1VTRUQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBsaW1hX2dwX3Rhc2tfZmluaShzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlKQoreworCWxp bWFfZ3Bfc29mdF9yZXNldF9hc3luYyhwaXBlLT5wcm9jZXNzb3JbMF0pOworfQorCitzdGF0aWMg dm9pZCBsaW1hX2dwX3Rhc2tfZXJyb3Ioc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSkKK3sK KwlzdHJ1Y3QgbGltYV9pcCAqaXAgPSBwaXBlLT5wcm9jZXNzb3JbMF07CisKKwlkZXZfZXJyKGlw LT5kZXYtPmRldiwgImdwIHRhc2sgZXJyb3IgaW50X3N0YXRlPSV4IHN0YXR1cz0leFxuIiwKKwkJ Z3BfcmVhZChMSU1BX0dQX0lOVF9TVEFUKSwgZ3BfcmVhZChMSU1BX0dQX1NUQVRVUykpOworCisJ bGltYV9ncF9oYXJkX3Jlc2V0KGlwKTsKK30KKworc3RhdGljIHZvaWQgbGltYV9ncF90YXNrX21t dV9lcnJvcihzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlKQoreworCWxpbWFfc2NoZWRfcGlw ZV90YXNrX2RvbmUocGlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZ3BfcHJpbnRfdmVyc2lv bihzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJdTMyIHZlcnNpb24sIG1ham9yLCBtaW5vcjsKKwlj aGFyICpuYW1lOworCisJdmVyc2lvbiA9IGdwX3JlYWQoTElNQV9HUF9WRVJTSU9OKTsKKwltYWpv ciA9ICh2ZXJzaW9uID4+IDgpICYgMHhGRjsKKwltaW5vciA9IHZlcnNpb24gJiAweEZGOworCXN3 aXRjaCAodmVyc2lvbiA+PiAxNikgeworCWNhc2UgMHhBMDc6CisJICAgIG5hbWUgPSAibWFsaTIw MCI7CisJCWJyZWFrOworCWNhc2UgMHhDMDc6CisJCW5hbWUgPSAibWFsaTMwMCI7CisJCWJyZWFr OworCWNhc2UgMHhCMDc6CisJCW5hbWUgPSAibWFsaTQwMCI7CisJCWJyZWFrOworCWNhc2UgMHhE MDc6CisJCW5hbWUgPSAibWFsaTQ1MCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW5hbWUgPSAi dW5rbm93biI7CisJCWJyZWFrOworCX0KKwlkZXZfaW5mbyhpcC0+ZGV2LT5kZXYsICIlcyAtICVz IHZlcnNpb24gbWFqb3IgJWQgbWlub3IgJWRcbiIsCisJCSBsaW1hX2lwX25hbWUoaXApLCBuYW1l LCBtYWpvciwgbWlub3IpOworfQorCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmxpbWFfZ3Bf dGFza19zbGFiOworc3RhdGljIGludCBsaW1hX2dwX3Rhc2tfc2xhYl9yZWZjbnQ7CisKK2ludCBs aW1hX2dwX2luaXQoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCXN0cnVjdCBsaW1hX2RldmljZSAq ZGV2ID0gaXAtPmRldjsKKwlpbnQgZXJyOworCisJbGltYV9ncF9wcmludF92ZXJzaW9uKGlwKTsK KworCWlwLT5kYXRhLmFzeW5jX3Jlc2V0ID0gZmFsc2U7CisJbGltYV9ncF9zb2Z0X3Jlc2V0X2Fz eW5jKGlwKTsKKwllcnIgPSBsaW1hX2dwX3NvZnRfcmVzZXRfYXN5bmNfd2FpdChpcCk7CisJaWYg KGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LT5kZXYs IGlwLT5pcnEsIGxpbWFfZ3BfaXJxX2hhbmRsZXIsCisJCQkgICAgICAgSVJRRl9TSEFSRUQsIGxp bWFfaXBfbmFtZShpcCksIGlwKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJn cCAlcyBmYWlsIHRvIHJlcXVlc3QgaXJxXG4iLAorCQkJbGltYV9pcF9uYW1lKGlwKSk7CisJCXJl dHVybiBlcnI7CisJfQorCisJZGV2LT5ncF92ZXJzaW9uID0gZ3BfcmVhZChMSU1BX0dQX1ZFUlNJ T04pOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbGltYV9ncF9maW5pKHN0cnVjdCBsaW1hX2lw ICppcCkKK3sKKworfQorCitpbnQgbGltYV9ncF9waXBlX2luaXQoc3RydWN0IGxpbWFfZGV2aWNl ICpkZXYpCit7CisJaW50IGZyYW1lX3NpemUgPSBzaXplb2Yoc3RydWN0IGRybV9saW1hX2dwX2Zy YW1lKTsKKwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlID0gZGV2LT5waXBlICsgbGltYV9w aXBlX2dwOworCisJaWYgKCFsaW1hX2dwX3Rhc2tfc2xhYikgeworCQlsaW1hX2dwX3Rhc2tfc2xh YiA9IGttZW1fY2FjaGVfY3JlYXRlX3VzZXJjb3B5KAorCQkJImxpbWFfZ3BfdGFzayIsIHNpemVv ZihzdHJ1Y3QgbGltYV9zY2hlZF90YXNrKSArIGZyYW1lX3NpemUsCisJCQkwLCBTTEFCX0hXQ0FD SEVfQUxJR04sIHNpemVvZihzdHJ1Y3QgbGltYV9zY2hlZF90YXNrKSwKKwkJCWZyYW1lX3NpemUs IE5VTEwpOworCQlpZiAoIWxpbWFfZ3BfdGFza19zbGFiKQorCQkJcmV0dXJuIC1FTk9NRU07CisJ fQorCWxpbWFfZ3BfdGFza19zbGFiX3JlZmNudCsrOworCisJcGlwZS0+ZnJhbWVfc2l6ZSA9IGZy YW1lX3NpemU7CisJcGlwZS0+dGFza19zbGFiID0gbGltYV9ncF90YXNrX3NsYWI7CisKKwlwaXBl LT50YXNrX3ZhbGlkYXRlID0gbGltYV9ncF90YXNrX3ZhbGlkYXRlOworCXBpcGUtPnRhc2tfcnVu ID0gbGltYV9ncF90YXNrX3J1bjsKKwlwaXBlLT50YXNrX2ZpbmkgPSBsaW1hX2dwX3Rhc2tfZmlu aTsKKwlwaXBlLT50YXNrX2Vycm9yID0gbGltYV9ncF90YXNrX2Vycm9yOworCXBpcGUtPnRhc2tf bW11X2Vycm9yID0gbGltYV9ncF90YXNrX21tdV9lcnJvcjsKKworCXJldHVybiAwOworfQorCit2 b2lkIGxpbWFfZ3BfcGlwZV9maW5pKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2KQoreworCWlmICgh LS1saW1hX2dwX3Rhc2tfc2xhYl9yZWZjbnQpIHsKKwkJa21lbV9jYWNoZV9kZXN0cm95KGxpbWFf Z3BfdGFza19zbGFiKTsKKwkJbGltYV9ncF90YXNrX3NsYWIgPSBOVUxMOworCX0KK30KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ3AuaCBiL2RyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfZ3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjUx NmU1YzFiYWJiYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFf Z3AuaApAQCAtMCwwICsxLDE2IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCBPUiBNSVQgKi8KKy8qIENvcHlyaWdodCAyMDE3LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBnbWFp bC5jb20+ICovCisKKyNpZm5kZWYgX19MSU1BX0dQX0hfXworI2RlZmluZSBfX0xJTUFfR1BfSF9f CisKK3N0cnVjdCBsaW1hX2lwOworc3RydWN0IGxpbWFfZGV2aWNlOworCitpbnQgbGltYV9ncF9p bml0KHN0cnVjdCBsaW1hX2lwICppcCk7Cit2b2lkIGxpbWFfZ3BfZmluaShzdHJ1Y3QgbGltYV9p cCAqaXApOworCitpbnQgbGltYV9ncF9waXBlX2luaXQoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYp Owordm9pZCBsaW1hX2dwX3BpcGVfZmluaShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldik7CisKKyNl bmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9sMl9jYWNoZS5jIGIv ZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9sMl9jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uNjg3M2E3YWY1YTVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL2xpbWEvbGltYV9sMl9jYWNoZS5jCkBAIC0wLDAgKzEsODAgQEAKKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorLyogQ29weXJpZ2h0IDIwMTct MjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2luY2x1ZGUgPGxpbnV4L2lv cG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSAibGltYV9kZXZp Y2UuaCIKKyNpbmNsdWRlICJsaW1hX2wyX2NhY2hlLmgiCisjaW5jbHVkZSAibGltYV9yZWdzLmgi CisKKyNkZWZpbmUgbDJfY2FjaGVfd3JpdGUocmVnLCBkYXRhKSB3cml0ZWwoZGF0YSwgaXAtPmlv bWVtICsgcmVnKQorI2RlZmluZSBsMl9jYWNoZV9yZWFkKHJlZykgcmVhZGwoaXAtPmlvbWVtICsg cmVnKQorCitzdGF0aWMgaW50IGxpbWFfbDJfY2FjaGVfd2FpdF9pZGxlKHN0cnVjdCBsaW1hX2lw ICppcCkKK3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7CisJaW50IGVycjsK Kwl1MzIgdjsKKworCWVyciA9IHJlYWRsX3BvbGxfdGltZW91dChpcC0+aW9tZW0gKyBMSU1BX0wy X0NBQ0hFX1NUQVRVUywgdiwKKwkJCQkgISh2ICYgTElNQV9MMl9DQUNIRV9TVEFUVVNfQ09NTUFO RF9CVVNZKSwKKwkJCQkgMCwgMTAwMCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldi0+ZGV2 LCAibDIgY2FjaGUgd2FpdCBjb21tYW5kIHRpbWVvdXRcbiIpOworCQlyZXR1cm4gZXJyOworCX0K KwlyZXR1cm4gMDsKK30KKworaW50IGxpbWFfbDJfY2FjaGVfZmx1c2goc3RydWN0IGxpbWFfaXAg KmlwKQoreworCWludCByZXQ7CisKKwlzcGluX2xvY2soJmlwLT5kYXRhLmxvY2spOworCWwyX2Nh Y2hlX3dyaXRlKExJTUFfTDJfQ0FDSEVfQ09NTUFORCwgTElNQV9MMl9DQUNIRV9DT01NQU5EX0NM RUFSX0FMTCk7CisJcmV0ID0gbGltYV9sMl9jYWNoZV93YWl0X2lkbGUoaXApOworCXNwaW5fdW5s b2NrKCZpcC0+ZGF0YS5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbGltYV9sMl9jYWNo ZV9pbml0KHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlpbnQgaSwgZXJyOworCXUzMiBzaXplOwor CXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gaXAtPmRldjsKKworCS8qIGwyX2NhY2hlMiBvbmx5 IGV4aXN0cyB3aGVuIG9uZSBvZiBQUDQtNyBwcmVzZW50ICovCisJaWYgKGlwLT5pZCA9PSBsaW1h X2lwX2wyX2NhY2hlMikgeworCQlmb3IgKGkgPSBsaW1hX2lwX3BwNDsgaSA8PSBsaW1hX2lwX3Bw NzsgaSsrKSB7CisJCQlpZiAoZGV2LT5pcFtpXS5wcmVzZW50KQorCQkJCWJyZWFrOworCQl9CisJ CWlmIChpID4gbGltYV9pcF9wcDcpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzcGluX2xv Y2tfaW5pdCgmaXAtPmRhdGEubG9jayk7CisKKwlzaXplID0gbDJfY2FjaGVfcmVhZChMSU1BX0wy X0NBQ0hFX1NJWkUpOworCWRldl9pbmZvKGRldi0+ZGV2LCAibDIgY2FjaGUgJXVLLCAldS13YXks ICV1Ynl0ZSBjYWNoZSBsaW5lLCAldWJpdCBleHRlcm5hbCBidXNcbiIsCisJCSAxIDw8ICgoKHNp emUgPj4gMTYpICYgMHhmZikgLSAxMCksCisJCSAxIDw8ICgoc2l6ZSA+PiA4KSAmIDB4ZmYpLAor CQkgMSA8PCAoc2l6ZSAmIDB4ZmYpLAorCQkgMSA8PCAoKHNpemUgPj4gMjQpICYgMHhmZikpOwor CisJZXJyID0gbGltYV9sMl9jYWNoZV9mbHVzaChpcCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVy cjsKKworCWwyX2NhY2hlX3dyaXRlKExJTUFfTDJfQ0FDSEVfRU5BQkxFLAorCQkgICAgICAgTElN QV9MMl9DQUNIRV9FTkFCTEVfQUNDRVNTfExJTUFfTDJfQ0FDSEVfRU5BQkxFX1JFQURfQUxMT0NB VEUpOworCWwyX2NhY2hlX3dyaXRlKExJTUFfTDJfQ0FDSEVfTUFYX1JFQURTLCAweDFjKTsKKwor CXJldHVybiAwOworfQorCit2b2lkIGxpbWFfbDJfY2FjaGVfZmluaShzdHJ1Y3QgbGltYV9pcCAq aXApCit7CisKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbDJfY2Fj aGUuaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbDJfY2FjaGUuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmM2M2ZiNjc2ZmYxNAotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbDJfY2FjaGUuaApAQCAtMCwwICsxLDE0IEBA CisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KKy8qIENvcHly aWdodCAyMDE3LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNpZm5kZWYg X19MSU1BX0wyX0NBQ0hFX0hfXworI2RlZmluZSBfX0xJTUFfTDJfQ0FDSEVfSF9fCisKK3N0cnVj dCBsaW1hX2lwOworCitpbnQgbGltYV9sMl9jYWNoZV9pbml0KHN0cnVjdCBsaW1hX2lwICppcCk7 Cit2b2lkIGxpbWFfbDJfY2FjaGVfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApOworCitpbnQgbGlt YV9sMl9jYWNoZV9mbHVzaChzdHJ1Y3QgbGltYV9pcCAqaXApOworCisjZW5kaWYKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbW11LmMgYi9kcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX21tdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOGUx NjUxZDZhNjFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9t bXUuYwpAQCAtMCwwICsxLDE0MiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAgT1IgTUlUCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwu Y29tPiAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgv aW9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlICJsaW1hX2Rl dmljZS5oIgorI2luY2x1ZGUgImxpbWFfbW11LmgiCisjaW5jbHVkZSAibGltYV92bS5oIgorI2lu Y2x1ZGUgImxpbWFfb2JqZWN0LmgiCisjaW5jbHVkZSAibGltYV9yZWdzLmgiCisKKyNkZWZpbmUg bW11X3dyaXRlKHJlZywgZGF0YSkgd3JpdGVsKGRhdGEsIGlwLT5pb21lbSArIHJlZykKKyNkZWZp bmUgbW11X3JlYWQocmVnKSByZWFkbChpcC0+aW9tZW0gKyByZWcpCisKKyNkZWZpbmUgbGltYV9t bXVfc2VuZF9jb21tYW5kKGNtZCwgYWRkciwgdmFsLCBjb25kKQkgICAgIFwKKyh7CQkJCQkJCSAg ICAgXAorCWludCBfX3JldDsJCQkJCSAgICAgXAorCQkJCQkJCSAgICAgXAorCW1tdV93cml0ZShM SU1BX01NVV9DT01NQU5ELCBjbWQpOwkJICAgICBcCisJX19yZXQgPSByZWFkbF9wb2xsX3RpbWVv dXQoaXAtPmlvbWVtICsgKGFkZHIpLCB2YWwsICBcCisJCQkJICBjb25kLCAwLCAxMDApOwkgICAg IFwKKwlpZiAoX19yZXQpCQkJCQkgICAgIFwKKwkJZGV2X2VycihkZXYtPmRldiwJCQkgICAgIFwK KwkJCSJtbXUgY29tbWFuZCAleCB0aW1lb3V0XG4iLCBjbWQpOyAgICBcCisJX19yZXQ7CQkJCQkJ ICAgICBcCit9KQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbGltYV9tbXVfaXJxX2hhbmRsZXIoaW50 IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbGltYV9pcCAqaXAgPSBkYXRhOworCXN0cnVj dCBsaW1hX2RldmljZSAqZGV2ID0gaXAtPmRldjsKKwl1MzIgc3RhdHVzID0gbW11X3JlYWQoTElN QV9NTVVfSU5UX1NUQVRVUyk7CisJc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZTsKKworCS8q IGZvciBzaGFyZWQgaXJxIGNhc2UgKi8KKwlpZiAoIXN0YXR1cykKKwkJcmV0dXJuIElSUV9OT05F OworCisJaWYgKHN0YXR1cyAmIExJTUFfTU1VX0lOVF9QQUdFX0ZBVUxUKSB7CisJCXUzMiBmYXVs dCA9IG1tdV9yZWFkKExJTUFfTU1VX1BBR0VfRkFVTFRfQUREUik7CisKKwkJZGV2X2VycihkZXYt PmRldiwgIm1tdSBwYWdlIGZhdWx0IGF0IDB4JXggZnJvbSBidXMgaWQgJWQgb2YgdHlwZSAlcyBv biAlc1xuIiwKKwkJCWZhdWx0LCBMSU1BX01NVV9TVEFUVVNfQlVTX0lEKHN0YXR1cyksCisJCQlz dGF0dXMgJiBMSU1BX01NVV9TVEFUVVNfUEFHRV9GQVVMVF9JU19XUklURSA/ICJ3cml0ZSIgOiAi cmVhZCIsCisJCQlsaW1hX2lwX25hbWUoaXApKTsKKwl9CisKKwlpZiAoc3RhdHVzICYgTElNQV9N TVVfSU5UX1JFQURfQlVTX0VSUk9SKQorCQlkZXZfZXJyKGRldi0+ZGV2LCAibW11ICVzIGlycSBi dXMgZXJyb3JcbiIsIGxpbWFfaXBfbmFtZShpcCkpOworCisJLyogbWFzayBhbGwgaW50ZXJydXB0 cyBiZWZvcmUgcmVzdW1lICovCisJbW11X3dyaXRlKExJTUFfTU1VX0lOVF9NQVNLLCAwKTsKKwlt bXVfd3JpdGUoTElNQV9NTVVfSU5UX0NMRUFSLCBzdGF0dXMpOworCisJcGlwZSA9IGRldi0+cGlw ZSArIChpcC0+aWQgPT0gbGltYV9pcF9ncG1tdSA/IGxpbWFfcGlwZV9ncCA6IGxpbWFfcGlwZV9w cCk7CisJbGltYV9zY2hlZF9waXBlX21tdV9lcnJvcihwaXBlKTsKKworCXJldHVybiBJUlFfSEFO RExFRDsKK30KKworaW50IGxpbWFfbW11X2luaXQoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCXN0 cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gaXAtPmRldjsKKwlpbnQgZXJyOworCXUzMiB2OworCisJ aWYgKGlwLT5pZCA9PSBsaW1hX2lwX3BwbW11X2JjYXN0KQorCQlyZXR1cm4gMDsKKworCW1tdV93 cml0ZShMSU1BX01NVV9EVEVfQUREUiwgMHhDQUZFQkFCRSk7CisJaWYgKG1tdV9yZWFkKExJTUFf TU1VX0RURV9BRERSKSAhPSAweENBRkVCMDAwKSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJtbXUg JXMgZHRlIHdyaXRlIHRlc3QgZmFpbFxuIiwgbGltYV9pcF9uYW1lKGlwKSk7CisJCXJldHVybiAt RUlPOworCX0KKworCW1tdV93cml0ZShMSU1BX01NVV9DT01NQU5ELCBMSU1BX01NVV9DT01NQU5E X0hBUkRfUkVTRVQpOworCWVyciA9IGxpbWFfbW11X3NlbmRfY29tbWFuZChMSU1BX01NVV9DT01N QU5EX0hBUkRfUkVTRVQsCisJCQkJICAgIExJTUFfTU1VX0RURV9BRERSLCB2LCB2ID09IDApOwor CWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldi0+ ZGV2LCBpcC0+aXJxLCBsaW1hX21tdV9pcnFfaGFuZGxlciwKKwkJCSAgICAgICBJUlFGX1NIQVJF RCwgbGltYV9pcF9uYW1lKGlwKSwgaXApOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYtPmRl diwgIm1tdSAlcyBmYWlsIHRvIHJlcXVlc3QgaXJxXG4iLCBsaW1hX2lwX25hbWUoaXApKTsKKwkJ cmV0dXJuIGVycjsKKwl9CisKKwltbXVfd3JpdGUoTElNQV9NTVVfSU5UX01BU0ssIExJTUFfTU1V X0lOVF9QQUdFX0ZBVUxUIHwgTElNQV9NTVVfSU5UX1JFQURfQlVTX0VSUk9SKTsKKwltbXVfd3Jp dGUoTElNQV9NTVVfRFRFX0FERFIsIGRldi0+ZW1wdHlfdm0tPnBkLmRtYSk7CisJcmV0dXJuIGxp bWFfbW11X3NlbmRfY29tbWFuZChMSU1BX01NVV9DT01NQU5EX0VOQUJMRV9QQUdJTkcsCisJCQkJ ICAgICBMSU1BX01NVV9TVEFUVVMsIHYsCisJCQkJICAgICB2ICYgTElNQV9NTVVfU1RBVFVTX1BB R0lOR19FTkFCTEVEKTsKK30KKwordm9pZCBsaW1hX21tdV9maW5pKHN0cnVjdCBsaW1hX2lwICpp cCkKK3sKKworfQorCit2b2lkIGxpbWFfbW11X3N3aXRjaF92bShzdHJ1Y3QgbGltYV9pcCAqaXAs IHN0cnVjdCBsaW1hX3ZtICp2bSkKK3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5k ZXY7CisJdTMyIHY7CisKKwlsaW1hX21tdV9zZW5kX2NvbW1hbmQoTElNQV9NTVVfQ09NTUFORF9F TkFCTEVfU1RBTEwsCisJCQkgICAgICBMSU1BX01NVV9TVEFUVVMsIHYsCisJCQkgICAgICB2ICYg TElNQV9NTVVfU1RBVFVTX1NUQUxMX0FDVElWRSk7CisKKwlpZiAodm0pCisJCW1tdV93cml0ZShM SU1BX01NVV9EVEVfQUREUiwgdm0tPnBkLmRtYSk7CisKKwkvKiBmbHVzaCB0aGUgVExCICovCisJ bW11X3dyaXRlKExJTUFfTU1VX0NPTU1BTkQsIExJTUFfTU1VX0NPTU1BTkRfWkFQX0NBQ0hFKTsK KworCWxpbWFfbW11X3NlbmRfY29tbWFuZChMSU1BX01NVV9DT01NQU5EX0RJU0FCTEVfU1RBTEws CisJCQkgICAgICBMSU1BX01NVV9TVEFUVVMsIHYsCisJCQkgICAgICAhKHYgJiBMSU1BX01NVV9T VEFUVVNfU1RBTExfQUNUSVZFKSk7Cit9CisKK3ZvaWQgbGltYV9tbXVfcGFnZV9mYXVsdF9yZXN1 bWUoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gaXAt PmRldjsKKwl1MzIgc3RhdHVzID0gbW11X3JlYWQoTElNQV9NTVVfU1RBVFVTKTsKKwl1MzIgdjsK KworCWlmIChzdGF0dXMgJiBMSU1BX01NVV9TVEFUVVNfUEFHRV9GQVVMVF9BQ1RJVkUpIHsKKwkJ ZGV2X2luZm8oZGV2LT5kZXYsICJtbXUgcmVzdW1lXG4iKTsKKworCQltbXVfd3JpdGUoTElNQV9N TVVfSU5UX01BU0ssIDApOworCQltbXVfd3JpdGUoTElNQV9NTVVfRFRFX0FERFIsIDB4Q0FGRUJB QkUpOworCQlsaW1hX21tdV9zZW5kX2NvbW1hbmQoTElNQV9NTVVfQ09NTUFORF9IQVJEX1JFU0VU LAorCQkJCSAgICAgIExJTUFfTU1VX0RURV9BRERSLCB2LCB2ID09IDApOworCQltbXVfd3JpdGUo TElNQV9NTVVfSU5UX01BU0ssIExJTUFfTU1VX0lOVF9QQUdFX0ZBVUxUIHwgTElNQV9NTVVfSU5U X1JFQURfQlVTX0VSUk9SKTsKKwkJbW11X3dyaXRlKExJTUFfTU1VX0RURV9BRERSLCBkZXYtPmVt cHR5X3ZtLT5wZC5kbWEpOworCQlsaW1hX21tdV9zZW5kX2NvbW1hbmQoTElNQV9NTVVfQ09NTUFO RF9FTkFCTEVfUEFHSU5HLAorCQkJCSAgICAgIExJTUFfTU1VX1NUQVRVUywgdiwKKwkJCQkgICAg ICB2ICYgTElNQV9NTVVfU1RBVFVTX1BBR0lOR19FTkFCTEVEKTsKKwl9Cit9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX21tdS5oIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhjNzgz MTliY2M4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbW11 LmgKQEAgLTAsMCArMSwxNiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAg T1IgTUlUICovCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwu Y29tPiAqLworCisjaWZuZGVmIF9fTElNQV9NTVVfSF9fCisjZGVmaW5lIF9fTElNQV9NTVVfSF9f CisKK3N0cnVjdCBsaW1hX2lwOworc3RydWN0IGxpbWFfdm07CisKK2ludCBsaW1hX21tdV9pbml0 KHN0cnVjdCBsaW1hX2lwICppcCk7Cit2b2lkIGxpbWFfbW11X2Zpbmkoc3RydWN0IGxpbWFfaXAg KmlwKTsKKwordm9pZCBsaW1hX21tdV9zd2l0Y2hfdm0oc3RydWN0IGxpbWFfaXAgKmlwLCBzdHJ1 Y3QgbGltYV92bSAqdm0pOwordm9pZCBsaW1hX21tdV9wYWdlX2ZhdWx0X3Jlc3VtZShzdHJ1Y3Qg bGltYV9pcCAqaXApOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1h L2xpbWFfb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX29iamVjdC5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWM0MWY4NTlhNzJmCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9vYmplY3QuYwpAQCAtMCwwICsx LDEyMiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBD b3B5cmlnaHQgMjAxOC0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaW5j bHVkZSA8ZHJtL2RybV9wcmltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNs dWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSAibGltYV9vYmplY3QuaCIKKwor dm9pZCBsaW1hX2JvX2Rlc3Ryb3koc3RydWN0IGxpbWFfYm8gKmJvKQoreworCWlmIChiby0+c2d0 KSB7CisJCWtmcmVlKGJvLT5wYWdlcyk7CisJCWRybV9wcmltZV9nZW1fZGVzdHJveSgmYm8tPmdl bSwgYm8tPnNndCk7CisJfSBlbHNlIHsKKwkJaWYgKGJvLT5wYWdlc19kbWFfYWRkcikgeworCQkJ aW50IGksIG5wYWdlcyA9IGJvLT5nZW0uc2l6ZSA+PiBQQUdFX1NISUZUOworCisJCQlmb3IgKGkg PSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKKwkJCQlpZiAoYm8tPnBhZ2VzX2RtYV9hZGRyW2ldKQor CQkJCQlkbWFfdW5tYXBfcGFnZShiby0+Z2VtLmRldi0+ZGV2LAorCQkJCQkJICAgICAgIGJvLT5w YWdlc19kbWFfYWRkcltpXSwKKwkJCQkJCSAgICAgICBQQUdFX1NJWkUsIERNQV9CSURJUkVDVElP TkFMKTsKKwkJCX0KKwkJfQorCisJCWlmIChiby0+cGFnZXMpCisJCQlkcm1fZ2VtX3B1dF9wYWdl cygmYm8tPmdlbSwgYm8tPnBhZ2VzLCB0cnVlLCB0cnVlKTsKKwl9CisKKwlrZnJlZShiby0+cGFn ZXNfZG1hX2FkZHIpOworCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJmJvLT5nZW0pOworCWtmcmVl KGJvKTsKK30KKworc3RhdGljIHN0cnVjdCBsaW1hX2JvICpsaW1hX2JvX2NyZWF0ZV9zdHJ1Y3Qo c3RydWN0IGxpbWFfZGV2aWNlICpkZXYsIHUzMiBzaXplLCB1MzIgZmxhZ3MsCisJCQkJCSAgICAg c3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdikKK3sKKwlzdHJ1Y3QgbGltYV9ibyAqYm87 CisJaW50IGVycjsKKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCisJYm8gPSBremFsbG9j KHNpemVvZigqYm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJvKQorCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKKworCW11dGV4X2luaXQoJmJvLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmYm8t PnZhKTsKKwliby0+Z2VtLnJlc3YgPSByZXN2OworCisJZXJyID0gZHJtX2dlbV9vYmplY3RfaW5p dChkZXYtPmRkZXYsICZiby0+Z2VtLCBzaXplKTsKKwlpZiAoZXJyKSB7CisJCWtmcmVlKGJvKTsK KwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwl9CisKKwlyZXR1cm4gYm87Cit9CisKK3N0cnVjdCBs aW1hX2JvICpsaW1hX2JvX2NyZWF0ZShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiwgdTMyIHNpemUs CisJCQkgICAgICAgdTMyIGZsYWdzLCBzdHJ1Y3Qgc2dfdGFibGUgKnNndCwKKwkJCSAgICAgICBz dHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2KQoreworCWludCBpLCBlcnI7CisJc2l6ZV90 IG5wYWdlczsKKwlzdHJ1Y3QgbGltYV9ibyAqYm8sICpyZXQ7CisKKwlibyA9IGxpbWFfYm9fY3Jl YXRlX3N0cnVjdChkZXYsIHNpemUsIGZsYWdzLCByZXN2KTsKKwlpZiAoSVNfRVJSKGJvKSkKKwkJ cmV0dXJuIGJvOworCisJbnBhZ2VzID0gYm8tPmdlbS5zaXplID4+IFBBR0VfU0hJRlQ7CisKKwli by0+cGFnZXNfZG1hX2FkZHIgPSBrY2FsbG9jKG5wYWdlcywgc2l6ZW9mKGRtYV9hZGRyX3QpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIWJvLT5wYWdlc19kbWFfYWRkcikgeworCQlyZXQgPSBFUlJfUFRS KC1FTk9NRU0pOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJaWYgKHNndCkgeworCQliby0+c2d0 ID0gc2d0OworCisJCWJvLT5wYWdlcyA9IGtjYWxsb2MobnBhZ2VzLCBzaXplb2YoKmJvLT5wYWdl cyksIEdGUF9LRVJORUwpOworCQlpZiAoIWJvLT5wYWdlcykgeworCQkJcmV0ID0gRVJSX1BUUigt RU5PTUVNKTsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCisJCWVyciA9IGRybV9wcmltZV9zZ190 b19wYWdlX2FkZHJfYXJyYXlzKAorCQkJc2d0LCBiby0+cGFnZXMsIGJvLT5wYWdlc19kbWFfYWRk ciwgbnBhZ2VzKTsKKwkJaWYgKGVycikgeworCQkJcmV0ID0gRVJSX1BUUihlcnIpOworCQkJZ290 byBlcnJfb3V0OworCQl9CisJfSBlbHNlIHsKKwkJbWFwcGluZ19zZXRfZ2ZwX21hc2soYm8tPmdl bS5maWxwLT5mX21hcHBpbmcsIEdGUF9ETUEzMik7CisJCWJvLT5wYWdlcyA9IGRybV9nZW1fZ2V0 X3BhZ2VzKCZiby0+Z2VtKTsKKwkJaWYgKElTX0VSUihiby0+cGFnZXMpKSB7CisJCQlyZXQgPSBF UlJfQ0FTVChiby0+cGFnZXMpOworCQkJYm8tPnBhZ2VzID0gTlVMTDsKKwkJCWdvdG8gZXJyX291 dDsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykgeworCQkJZG1hX2FkZHJf dCBhZGRyID0gZG1hX21hcF9wYWdlKGRldi0+ZGV2LCBiby0+cGFnZXNbaV0sIDAsCisJCQkJCQkg ICAgICAgUEFHRV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7CisJCQlpZiAoZG1hX21hcHBpbmdf ZXJyb3IoZGV2LT5kZXYsIGFkZHIpKSB7CisJCQkJcmV0ID0gRVJSX1BUUigtRUZBVUxUKTsKKwkJ CQlnb3RvIGVycl9vdXQ7CisJCQl9CisJCQliby0+cGFnZXNfZG1hX2FkZHJbaV0gPSBhZGRyOwor CQl9CisKKwl9CisKKwlyZXR1cm4gYm87CisKK2Vycl9vdXQ6CisJbGltYV9ib19kZXN0cm95KGJv KTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGlt YV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfb2JqZWN0LmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42NzM4NzI0YWZiN2IKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX29iamVjdC5oCkBAIC0wLDAgKzEsMzYg QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLworLyogQ29w eXJpZ2h0IDIwMTgtMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2lmbmRl ZiBfX0xJTUFfT0JKRUNUX0hfXworI2RlZmluZSBfX0xJTUFfT0JKRUNUX0hfXworCisjaW5jbHVk ZSA8ZHJtL2RybV9nZW0uaD4KKworI2luY2x1ZGUgImxpbWFfZGV2aWNlLmgiCisKK3N0cnVjdCBs aW1hX2JvIHsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgZ2VtOworCisJc3RydWN0IHBhZ2UgKipw YWdlczsKKwlkbWFfYWRkcl90ICpwYWdlc19kbWFfYWRkcjsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNn dDsKKwl2b2lkICp2YWRkcjsKKworCXN0cnVjdCBtdXRleCBsb2NrOworCXN0cnVjdCBsaXN0X2hl YWQgdmE7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsaW1hX2JvICoKK3RvX2xpbWFfYm8o c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihvYmos IHN0cnVjdCBsaW1hX2JvLCBnZW0pOworfQorCitzdHJ1Y3QgbGltYV9ibyAqbGltYV9ib19jcmVh dGUoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYsIHUzMiBzaXplLAorCQkJICAgICAgIHUzMiBmbGFn cywgc3RydWN0IHNnX3RhYmxlICpzZ3QsCisJCQkgICAgICAgc3RydWN0IHJlc2VydmF0aW9uX29i amVjdCAqcmVzdik7Cit2b2lkIGxpbWFfYm9fZGVzdHJveShzdHJ1Y3QgbGltYV9ibyAqYm8pOwor dm9pZCAqbGltYV9ib192bWFwKHN0cnVjdCBsaW1hX2JvICpibyk7Cit2b2lkIGxpbWFfYm9fdnVu bWFwKHN0cnVjdCBsaW1hX2JvICpibyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2xpbWEvbGltYV9wbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcG11LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41NzFmNmQ2NjE1ODEKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BtdS5jCkBAIC0wLDAg KzEsNjAgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorLyog Q29weXJpZ2h0IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2lu Y2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5j bHVkZSAibGltYV9kZXZpY2UuaCIKKyNpbmNsdWRlICJsaW1hX3BtdS5oIgorI2luY2x1ZGUgImxp bWFfcmVncy5oIgorCisjZGVmaW5lIHBtdV93cml0ZShyZWcsIGRhdGEpIHdyaXRlbChkYXRhLCBp cC0+aW9tZW0gKyByZWcpCisjZGVmaW5lIHBtdV9yZWFkKHJlZykgcmVhZGwoaXAtPmlvbWVtICsg cmVnKQorCitzdGF0aWMgaW50IGxpbWFfcG11X3dhaXRfY21kKHN0cnVjdCBsaW1hX2lwICppcCkK K3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7CisJaW50IGVycjsKKwl1MzIg djsKKworCWVyciA9IHJlYWRsX3BvbGxfdGltZW91dChpcC0+aW9tZW0gKyBMSU1BX1BNVV9JTlRf UkFXU1RBVCwKKwkJCQkgdiwgdiAmIExJTUFfUE1VX0lOVF9DTURfTUFTSywKKwkJCQkgMTAwLCAx MDAwMDApOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgInRpbWVvdXQgd2FpdCBw bWQgY21kXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwbXVfd3JpdGUoTElNQV9QTVVfSU5U X0NMRUFSLCBMSU1BX1BNVV9JTlRfQ01EX01BU0spOworCXJldHVybiAwOworfQorCitpbnQgbGlt YV9wbXVfaW5pdChzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJaW50IGVycjsKKwl1MzIgc3RhdDsK KworCXBtdV93cml0ZShMSU1BX1BNVV9JTlRfTUFTSywgMCk7CisKKwkvKiBJZiB0aGlzIHZhbHVl IGlzIHRvbyBsb3csIHdoZW4gaW4gaGlnaCBHUFUgY2xrIGZyZXEsCisJICogR1BVIHdpbGwgYmUg aW4gdW5zdGFibGUgc3RhdGUuCisJICovCisJcG11X3dyaXRlKExJTUFfUE1VX1NXX0RFTEFZLCAw eGZmZmYpOworCisJLyogc3RhdHVzIHJlZyAxPW9mZiAwPW9uICovCisJc3RhdCA9IHBtdV9yZWFk KExJTUFfUE1VX1NUQVRVUyk7CisKKwkvKiBwb3dlciB1cCBhbGwgaXAgKi8KKwlpZiAoc3RhdCkg eworCQlwbXVfd3JpdGUoTElNQV9QTVVfUE9XRVJfVVAsIHN0YXQpOworCQllcnIgPSBsaW1hX3Bt dV93YWl0X2NtZChpcCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4g MDsKK30KKwordm9pZCBsaW1hX3BtdV9maW5pKHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKworfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9wbXUuaCBiL2RyaXZlcnMvZ3B1 L2RybS9saW1hL2xpbWFfcG11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi5hMmExODc3NWViMDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX3BtdS5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wIE9SIE1JVCAqLworLyogQ29weXJpZ2h0IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVx ODI1QGdtYWlsLmNvbT4gKi8KKworI2lmbmRlZiBfX0xJTUFfUE1VX0hfXworI2RlZmluZSBfX0xJ TUFfUE1VX0hfXworCitzdHJ1Y3QgbGltYV9pcDsKKworaW50IGxpbWFfcG11X2luaXQoc3RydWN0 IGxpbWFfaXAgKmlwKTsKK3ZvaWQgbGltYV9wbXVfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApOwor CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcHAuYyBiL2Ry aXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLmQyOTcyMWUxNzdiZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9saW1hL2xpbWFfcHAuYwpAQCAtMCwwICsxLDQyNyBAQAorLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1 IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cisj aW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRl IDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxkcm0vbGltYV9kcm0uaD4KKworI2luY2x1ZGUg ImxpbWFfZGV2aWNlLmgiCisjaW5jbHVkZSAibGltYV9wcC5oIgorI2luY2x1ZGUgImxpbWFfZGxi dS5oIgorI2luY2x1ZGUgImxpbWFfYmNhc3QuaCIKKyNpbmNsdWRlICJsaW1hX3ZtLmgiCisjaW5j bHVkZSAibGltYV9yZWdzLmgiCisKKyNkZWZpbmUgcHBfd3JpdGUocmVnLCBkYXRhKSB3cml0ZWwo ZGF0YSwgaXAtPmlvbWVtICsgcmVnKQorI2RlZmluZSBwcF9yZWFkKHJlZykgcmVhZGwoaXAtPmlv bWVtICsgcmVnKQorCitzdGF0aWMgdm9pZCBsaW1hX3BwX2hhbmRsZV9pcnEoc3RydWN0IGxpbWFf aXAgKmlwLCB1MzIgc3RhdGUpCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2 OworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVf cHA7CisKKwlpZiAoc3RhdGUgJiBMSU1BX1BQX0lSUV9NQVNLX0VSUk9SKSB7CisJCXUzMiBzdGF0 dXMgPSBwcF9yZWFkKExJTUFfUFBfU1RBVFVTKTsKKworCQlkZXZfZXJyKGRldi0+ZGV2LCAicHAg ZXJyb3IgaXJxIHN0YXRlPSV4IHN0YXR1cz0leFxuIiwKKwkJCXN0YXRlLCBzdGF0dXMpOworCisJ CXBpcGUtPmVycm9yID0gdHJ1ZTsKKworCQkvKiBtYXNrIGFsbCBpbnRlcnJ1cHRzIGJlZm9yZSBo YXJkIHJlc2V0ICovCisJCXBwX3dyaXRlKExJTUFfUFBfSU5UX01BU0ssIDApOworCX0KKworCXBw X3dyaXRlKExJTUFfUFBfSU5UX0NMRUFSLCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5f dCBsaW1hX3BwX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGxp bWFfaXAgKmlwID0gZGF0YTsKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7CisJ c3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSA9IGRldi0+cGlwZSArIGxpbWFfcGlwZV9wcDsK Kwl1MzIgc3RhdGUgPSBwcF9yZWFkKExJTUFfUFBfSU5UX1NUQVRVUyk7CisKKwkvKiBmb3Igc2hh cmVkIGlycSBjYXNlICovCisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJbGlt YV9wcF9oYW5kbGVfaXJxKGlwLCBzdGF0ZSk7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgm cGlwZS0+dGFzaykpCisJCWxpbWFfc2NoZWRfcGlwZV90YXNrX2RvbmUocGlwZSk7CisKKwlyZXR1 cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBsaW1hX3BwX2JjYXN0X2ly cV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJaW50IGk7CisJaXJxcmV0dXJuX3Qg cmV0ID0gSVJRX05PTkU7CisJc3RydWN0IGxpbWFfaXAgKnBwX2JjYXN0ID0gZGF0YTsKKwlzdHJ1 Y3QgbGltYV9kZXZpY2UgKmRldiA9IHBwX2JjYXN0LT5kZXY7CisJc3RydWN0IGxpbWFfc2NoZWRf cGlwZSAqcGlwZSA9IGRldi0+cGlwZSArIGxpbWFfcGlwZV9wcDsKKwlzdHJ1Y3QgZHJtX2xpbWFf bTQ1MF9wcF9mcmFtZSAqZnJhbWUgPSBwaXBlLT5jdXJyZW50X3Rhc2stPmZyYW1lOworCisJZm9y IChpID0gMDsgaSA8IGZyYW1lLT5udW1fcHA7IGkrKykgeworCQlzdHJ1Y3QgbGltYV9pcCAqaXAg PSBwaXBlLT5wcm9jZXNzb3JbaV07CisJCXUzMiBzdGF0dXMsIHN0YXRlOworCisJCWlmIChwaXBl LT5kb25lICYgKDEgPDwgaSkpCisJCQljb250aW51ZTsKKworCQkvKiBzdGF0dXMgcmVhZCBmaXJz dCBpbiBjYXNlIGludCBzdGF0ZSBjaGFuZ2UgaW4gdGhlIG1pZGRsZQorCQkgKiB3aGljaCBtYXkg bWlzcyB0aGUgaW50ZXJydXB0IGhhbmRsaW5nCisJCSAqLworCQlzdGF0dXMgPSBwcF9yZWFkKExJ TUFfUFBfU1RBVFVTKTsKKwkJc3RhdGUgPSBwcF9yZWFkKExJTUFfUFBfSU5UX1NUQVRVUyk7CisK KwkJaWYgKHN0YXRlKSB7CisJCQlsaW1hX3BwX2hhbmRsZV9pcnEoaXAsIHN0YXRlKTsKKwkJCXJl dCA9IElSUV9IQU5ETEVEOworCQl9IGVsc2UgeworCQkJaWYgKHN0YXR1cyAmIExJTUFfUFBfU1RB VFVTX1JFTkRFUklOR19BQ1RJVkUpCisJCQkJY29udGludWU7CisJCX0KKworCQlwaXBlLT5kb25l IHw9ICgxIDw8IGkpOworCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcGlwZS0+dGFzaykpCisJ CQlsaW1hX3NjaGVkX3BpcGVfdGFza19kb25lKHBpcGUpOworCX0KKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyB2b2lkIGxpbWFfcHBfc29mdF9yZXNldF9hc3luYyhzdHJ1Y3QgbGltYV9pcCAq aXApCit7CisJaWYgKGlwLT5kYXRhLmFzeW5jX3Jlc2V0KQorCQlyZXR1cm47CisKKwlwcF93cml0 ZShMSU1BX1BQX0lOVF9NQVNLLCAwKTsKKwlwcF93cml0ZShMSU1BX1BQX0lOVF9SQVdTVEFULCBM SU1BX1BQX0lSUV9NQVNLX0FMTCk7CisJcHBfd3JpdGUoTElNQV9QUF9DVFJMLCBMSU1BX1BQX0NU UkxfU09GVF9SRVNFVCk7CisJaXAtPmRhdGEuYXN5bmNfcmVzZXQgPSB0cnVlOworfQorCitzdGF0 aWMgaW50IGxpbWFfcHBfc29mdF9yZXNldF9wb2xsKHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwly ZXR1cm4gIShwcF9yZWFkKExJTUFfUFBfU1RBVFVTKSAmIExJTUFfUFBfU1RBVFVTX1JFTkRFUklO R19BQ1RJVkUpICYmCisJCXBwX3JlYWQoTElNQV9QUF9JTlRfUkFXU1RBVCkgPT0gTElNQV9QUF9J UlFfUkVTRVRfQ09NUExFVEVEOworfQorCitzdGF0aWMgaW50IGxpbWFfcHBfc29mdF9yZXNldF9h c3luY193YWl0X29uZShzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJc3RydWN0IGxpbWFfZGV2aWNl ICpkZXYgPSBpcC0+ZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBsaW1hX3BvbGxfdGltZW91dChp cCwgbGltYV9wcF9zb2Z0X3Jlc2V0X3BvbGwsIDAsIDEwMCk7CisJaWYgKHJldCkgeworCQlkZXZf ZXJyKGRldi0+ZGV2LCAicHAgJXMgcmVzZXQgdGltZSBvdXRcbiIsIGxpbWFfaXBfbmFtZShpcCkp OworCQlyZXR1cm4gcmV0OworCX0KKworCXBwX3dyaXRlKExJTUFfUFBfSU5UX0NMRUFSLCBMSU1B X1BQX0lSUV9NQVNLX0FMTCk7CisJcHBfd3JpdGUoTElNQV9QUF9JTlRfTUFTSywgTElNQV9QUF9J UlFfTUFTS19VU0VEKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaW1hX3BwX3NvZnRf cmVzZXRfYXN5bmNfd2FpdChzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJaW50IGksIGVyciA9IDA7 CisKKwlpZiAoIWlwLT5kYXRhLmFzeW5jX3Jlc2V0KQorCQlyZXR1cm4gMDsKKworCWlmIChpcC0+ aWQgPT0gbGltYV9pcF9wcF9iY2FzdCkgeworCQlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlw LT5kZXY7CisJCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1h X3BpcGVfcHA7CisJCXN0cnVjdCBkcm1fbGltYV9tNDUwX3BwX2ZyYW1lICpmcmFtZSA9IHBpcGUt PmN1cnJlbnRfdGFzay0+ZnJhbWU7CisKKwkJZm9yIChpID0gMDsgaSA8IGZyYW1lLT5udW1fcHA7 IGkrKykKKwkJCWVyciB8PSBsaW1hX3BwX3NvZnRfcmVzZXRfYXN5bmNfd2FpdF9vbmUocGlwZS0+ cHJvY2Vzc29yW2ldKTsKKwl9IGVsc2UKKwkJZXJyID0gbGltYV9wcF9zb2Z0X3Jlc2V0X2FzeW5j X3dhaXRfb25lKGlwKTsKKworCWlwLT5kYXRhLmFzeW5jX3Jlc2V0ID0gZmFsc2U7CisJcmV0dXJu IGVycjsKK30KKworc3RhdGljIHZvaWQgbGltYV9wcF93cml0ZV9mcmFtZShzdHJ1Y3QgbGltYV9p cCAqaXAsIHUzMiAqZnJhbWUsIHUzMiAqd2IpCit7CisJaW50IGksIGosIG4gPSAwOworCisJZm9y IChpID0gMDsgaSA8IExJTUFfUFBfRlJBTUVfUkVHX05VTTsgaSsrKQorCQl3cml0ZWwoZnJhbWVb aV0sIGlwLT5pb21lbSArIExJTUFfUFBfRlJBTUUgKyBpICogNCk7CisKKwlmb3IgKGkgPSAwOyBp IDwgMzsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBMSU1BX1BQX1dCX1JFR19OVU07IGorKykK KwkJCXdyaXRlbCh3YltuKytdLCBpcC0+aW9tZW0gKyBMSU1BX1BQX1dCKGkpICsgaiAqIDQpOwor CX0KK30KKworc3RhdGljIGludCBsaW1hX3BwX2hhcmRfcmVzZXRfcG9sbChzdHJ1Y3QgbGltYV9p cCAqaXApCit7CisJcHBfd3JpdGUoTElNQV9QUF9QRVJGX0NOVF8wX0xJTUlULCAweEMwMUEwMDAw KTsKKwlyZXR1cm4gcHBfcmVhZChMSU1BX1BQX1BFUkZfQ05UXzBfTElNSVQpID09IDB4QzAxQTAw MDA7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9wcF9oYXJkX3Jlc2V0KHN0cnVjdCBsaW1hX2lwICpp cCkKK3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7CisJaW50IHJldDsKKwor CXBwX3dyaXRlKExJTUFfUFBfUEVSRl9DTlRfMF9MSU1JVCwgMHhDMEZGRTAwMCk7CisJcHBfd3Jp dGUoTElNQV9QUF9JTlRfTUFTSywgMCk7CisJcHBfd3JpdGUoTElNQV9QUF9DVFJMLCBMSU1BX1BQ X0NUUkxfRk9SQ0VfUkVTRVQpOworCXJldCA9IGxpbWFfcG9sbF90aW1lb3V0KGlwLCBsaW1hX3Bw X2hhcmRfcmVzZXRfcG9sbCwgMTAsIDEwMCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldi0+ ZGV2LCAicHAgaGFyZCByZXNldCB0aW1lb3V0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlw cF93cml0ZShMSU1BX1BQX1BFUkZfQ05UXzBfTElNSVQsIDApOworCXBwX3dyaXRlKExJTUFfUFBf SU5UX0NMRUFSLCBMSU1BX1BQX0lSUV9NQVNLX0FMTCk7CisJcHBfd3JpdGUoTElNQV9QUF9JTlRf TUFTSywgTElNQV9QUF9JUlFfTUFTS19VU0VEKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgbGltYV9wcF9wcmludF92ZXJzaW9uKHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwl1MzIgdmVy c2lvbiwgbWFqb3IsIG1pbm9yOworCWNoYXIgKm5hbWU7CisKKwl2ZXJzaW9uID0gcHBfcmVhZChM SU1BX1BQX1ZFUlNJT04pOworCW1ham9yID0gKHZlcnNpb24gPj4gOCkgJiAweEZGOworCW1pbm9y ID0gdmVyc2lvbiAmIDB4RkY7CisJc3dpdGNoICh2ZXJzaW9uID4+IDE2KSB7CisJY2FzZSAweEM4 MDc6CisJICAgIG5hbWUgPSAibWFsaTIwMCI7CisJCWJyZWFrOworCWNhc2UgMHhDRTA3OgorCQlu YW1lID0gIm1hbGkzMDAiOworCQlicmVhazsKKwljYXNlIDB4Q0QwNzoKKwkJbmFtZSA9ICJtYWxp NDAwIjsKKwkJYnJlYWs7CisJY2FzZSAweENGMDc6CisJCW5hbWUgPSAibWFsaTQ1MCI7CisJCWJy ZWFrOworCWRlZmF1bHQ6CisJCW5hbWUgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKwlkZXZf aW5mbyhpcC0+ZGV2LT5kZXYsICIlcyAtICVzIHZlcnNpb24gbWFqb3IgJWQgbWlub3IgJWRcbiIs CisJCSBsaW1hX2lwX25hbWUoaXApLCBuYW1lLCBtYWpvciwgbWlub3IpOworfQorCitpbnQgbGlt YV9wcF9pbml0KHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRl diA9IGlwLT5kZXY7CisJaW50IGVycjsKKworCWxpbWFfcHBfcHJpbnRfdmVyc2lvbihpcCk7CisK KwlpcC0+ZGF0YS5hc3luY19yZXNldCA9IGZhbHNlOworCWxpbWFfcHBfc29mdF9yZXNldF9hc3lu YyhpcCk7CisJZXJyID0gbGltYV9wcF9zb2Z0X3Jlc2V0X2FzeW5jX3dhaXQoaXApOworCWlmIChl cnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldi0+ZGV2LCBp cC0+aXJxLCBsaW1hX3BwX2lycV9oYW5kbGVyLAorCQkJICAgICAgIElSUUZfU0hBUkVELCBsaW1h X2lwX25hbWUoaXApLCBpcCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAicHAg JXMgZmFpbCB0byByZXF1ZXN0IGlycVxuIiwKKwkJCWxpbWFfaXBfbmFtZShpcCkpOworCQlyZXR1 cm4gZXJyOworCX0KKworCWRldi0+cHBfdmVyc2lvbiA9IHBwX3JlYWQoTElNQV9QUF9WRVJTSU9O KTsKKworCXJldHVybiAwOworfQorCit2b2lkIGxpbWFfcHBfZmluaShzdHJ1Y3QgbGltYV9pcCAq aXApCit7CisKK30KKworaW50IGxpbWFfcHBfYmNhc3RfaW5pdChzdHJ1Y3QgbGltYV9pcCAqaXAp Cit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCWludCBlcnI7CisKKwll cnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldi0+ZGV2LCBpcC0+aXJxLCBsaW1hX3BwX2JjYXN0X2ly cV9oYW5kbGVyLAorCQkJICAgICAgIElSUUZfU0hBUkVELCBsaW1hX2lwX25hbWUoaXApLCBpcCk7 CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAicHAgJXMgZmFpbCB0byByZXF1ZXN0 IGlycVxuIiwKKwkJCWxpbWFfaXBfbmFtZShpcCkpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJl dHVybiAwOworfQorCit2b2lkIGxpbWFfcHBfYmNhc3RfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXAp Cit7CisKK30KKworc3RhdGljIGludCBsaW1hX3BwX3Rhc2tfdmFsaWRhdGUoc3RydWN0IGxpbWFf c2NoZWRfcGlwZSAqcGlwZSwKKwkJCQkgc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzaykKK3sK Kwl1MzIgbnVtX3BwOworCisJaWYgKHBpcGUtPmJjYXN0X3Byb2Nlc3NvcikgeworCQlzdHJ1Y3Qg ZHJtX2xpbWFfbTQ1MF9wcF9mcmFtZSAqZiA9IHRhc2stPmZyYW1lOworCisJCW51bV9wcCA9IGYt Pm51bV9wcDsKKworCQlpZiAoZi0+X3BhZCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7 CisJCXN0cnVjdCBkcm1fbGltYV9tNDAwX3BwX2ZyYW1lICpmID0gdGFzay0+ZnJhbWU7CisKKwkJ bnVtX3BwID0gZi0+bnVtX3BwOworCX0KKworCWlmIChudW1fcHAgPT0gMCB8fCBudW1fcHAgPiBw aXBlLT5udW1fcHJvY2Vzc29yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgdm9pZCBsaW1hX3BwX3Rhc2tfcnVuKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBp cGUsCisJCQkgICAgIHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spCit7CisJaWYgKHBpcGUt PmJjYXN0X3Byb2Nlc3NvcikgeworCQlzdHJ1Y3QgZHJtX2xpbWFfbTQ1MF9wcF9mcmFtZSAqZnJh bWUgPSB0YXNrLT5mcmFtZTsKKwkJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBwaXBlLT5iY2Fz dF9wcm9jZXNzb3ItPmRldjsKKwkJc3RydWN0IGxpbWFfaXAgKmlwID0gcGlwZS0+YmNhc3RfcHJv Y2Vzc29yOworCQlpbnQgaTsKKworCQlwaXBlLT5kb25lID0gMDsKKwkJYXRvbWljX3NldCgmcGlw ZS0+dGFzaywgZnJhbWUtPm51bV9wcCk7CisKKwkJaWYgKGZyYW1lLT51c2VfZGxidSkgeworCQkJ bGltYV9kbGJ1X2VuYWJsZShkZXYsIGZyYW1lLT5udW1fcHApOworCisJCQlmcmFtZS0+ZnJhbWVb TElNQV9QUF9GUkFNRSA+PiAyXSA9IExJTUFfVkFfUkVTRVJWRV9ETEJVOworCQkJbGltYV9kbGJ1 X3NldF9yZWcoZGV2LT5pcCArIGxpbWFfaXBfZGxidSwgZnJhbWUtPmRsYnVfcmVncyk7CisJCX0g ZWxzZQorCQkJbGltYV9kbGJ1X2Rpc2FibGUoZGV2KTsKKworCQlsaW1hX2JjYXN0X2VuYWJsZShk ZXYsIGZyYW1lLT5udW1fcHApOworCisJCWxpbWFfcHBfc29mdF9yZXNldF9hc3luY193YWl0KGlw KTsKKworCQlsaW1hX3BwX3dyaXRlX2ZyYW1lKGlwLCBmcmFtZS0+ZnJhbWUsIGZyYW1lLT53Yik7 CisKKwkJZm9yIChpID0gMDsgaSA8IGZyYW1lLT5udW1fcHA7IGkrKykgeworCQkJc3RydWN0IGxp bWFfaXAgKmlwID0gcGlwZS0+cHJvY2Vzc29yW2ldOworCisJCQlwcF93cml0ZShMSU1BX1BQX1NU QUNLLCBmcmFtZS0+ZnJhZ21lbnRfc3RhY2tfYWRkcmVzc1tpXSk7CisJCQlpZiAoIWZyYW1lLT51 c2VfZGxidSkKKwkJCQlwcF93cml0ZShMSU1BX1BQX0ZSQU1FLCBmcmFtZS0+cGxidV9hcnJheV9h ZGRyZXNzW2ldKTsKKwkJfQorCisJCXBwX3dyaXRlKExJTUFfUFBfQ1RSTCwgTElNQV9QUF9DVFJM X1NUQVJUX1JFTkRFUklORyk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGRybV9saW1hX200MDBfcHBf ZnJhbWUgKmZyYW1lID0gdGFzay0+ZnJhbWU7CisJCWludCBpOworCisJCWF0b21pY19zZXQoJnBp cGUtPnRhc2ssIGZyYW1lLT5udW1fcHApOworCisJCWZvciAoaSA9IDA7IGkgPCBmcmFtZS0+bnVt X3BwOyBpKyspIHsKKwkJCXN0cnVjdCBsaW1hX2lwICppcCA9IHBpcGUtPnByb2Nlc3NvcltpXTsK KworCQkJZnJhbWUtPmZyYW1lW0xJTUFfUFBfRlJBTUUgPj4gMl0gPQorCQkJCWZyYW1lLT5wbGJ1 X2FycmF5X2FkZHJlc3NbaV07CisJCQlmcmFtZS0+ZnJhbWVbTElNQV9QUF9TVEFDSyA+PiAyXSA9 CisJCQkJZnJhbWUtPmZyYWdtZW50X3N0YWNrX2FkZHJlc3NbaV07CisKKwkJCWxpbWFfcHBfc29m dF9yZXNldF9hc3luY193YWl0KGlwKTsKKworCQkJbGltYV9wcF93cml0ZV9mcmFtZShpcCwgZnJh bWUtPmZyYW1lLCBmcmFtZS0+d2IpOworCisJCQlwcF93cml0ZShMSU1BX1BQX0NUUkwsIExJTUFf UFBfQ1RSTF9TVEFSVF9SRU5ERVJJTkcpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBsaW1h X3BwX3Rhc2tfZmluaShzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlKQoreworCWlmIChwaXBl LT5iY2FzdF9wcm9jZXNzb3IpCisJCWxpbWFfcHBfc29mdF9yZXNldF9hc3luYyhwaXBlLT5iY2Fz dF9wcm9jZXNzb3IpOworCWVsc2UgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgcGlw ZS0+bnVtX3Byb2Nlc3NvcjsgaSsrKQorCQkJbGltYV9wcF9zb2Z0X3Jlc2V0X2FzeW5jKHBpcGUt PnByb2Nlc3NvcltpXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBsaW1hX3BwX3Rhc2tfZXJyb3Io c3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7 IGkgPCBwaXBlLT5udW1fcHJvY2Vzc29yOyBpKyspIHsKKwkJc3RydWN0IGxpbWFfaXAgKmlwID0g cGlwZS0+cHJvY2Vzc29yW2ldOworCisJCWRldl9lcnIoaXAtPmRldi0+ZGV2LCAicHAgdGFzayBl cnJvciAlZCBpbnRfc3RhdGU9JXggc3RhdHVzPSV4XG4iLAorCQkJaSwgcHBfcmVhZChMSU1BX1BQ X0lOVF9TVEFUVVMpLCBwcF9yZWFkKExJTUFfUFBfU1RBVFVTKSk7CisKKwkJbGltYV9wcF9oYXJk X3Jlc2V0KGlwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfcHBfdGFza19tbXVfZXJyb3Io c3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVz dCgmcGlwZS0+dGFzaykpCisJCWxpbWFfc2NoZWRfcGlwZV90YXNrX2RvbmUocGlwZSk7Cit9CisK K3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbGltYV9wcF90YXNrX3NsYWI7CitzdGF0aWMgaW50 IGxpbWFfcHBfdGFza19zbGFiX3JlZmNudDsKKworaW50IGxpbWFfcHBfcGlwZV9pbml0KHN0cnVj dCBsaW1hX2RldmljZSAqZGV2KQoreworCWludCBmcmFtZV9zaXplOworCXN0cnVjdCBsaW1hX3Nj aGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVfcHA7CisKKwlpZiAoZGV2LT5p ZCA9PSBsaW1hX2dwdV9tYWxpNDAwKQorCQlmcmFtZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBkcm1f bGltYV9tNDAwX3BwX2ZyYW1lKTsKKwllbHNlCisJCWZyYW1lX3NpemUgPSBzaXplb2Yoc3RydWN0 IGRybV9saW1hX200NTBfcHBfZnJhbWUpOworCisJaWYgKCFsaW1hX3BwX3Rhc2tfc2xhYikgewor CQlsaW1hX3BwX3Rhc2tfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlX3VzZXJjb3B5KAorCQkJImxp bWFfcHBfdGFzayIsIHNpemVvZihzdHJ1Y3QgbGltYV9zY2hlZF90YXNrKSArIGZyYW1lX3NpemUs CisJCQkwLCBTTEFCX0hXQ0FDSEVfQUxJR04sIHNpemVvZihzdHJ1Y3QgbGltYV9zY2hlZF90YXNr KSwKKwkJCWZyYW1lX3NpemUsIE5VTEwpOworCQlpZiAoIWxpbWFfcHBfdGFza19zbGFiKQorCQkJ cmV0dXJuIC1FTk9NRU07CisJfQorCWxpbWFfcHBfdGFza19zbGFiX3JlZmNudCsrOworCisJcGlw ZS0+ZnJhbWVfc2l6ZSA9IGZyYW1lX3NpemU7CisJcGlwZS0+dGFza19zbGFiID0gbGltYV9wcF90 YXNrX3NsYWI7CisKKwlwaXBlLT50YXNrX3ZhbGlkYXRlID0gbGltYV9wcF90YXNrX3ZhbGlkYXRl OworCXBpcGUtPnRhc2tfcnVuID0gbGltYV9wcF90YXNrX3J1bjsKKwlwaXBlLT50YXNrX2Zpbmkg PSBsaW1hX3BwX3Rhc2tfZmluaTsKKwlwaXBlLT50YXNrX2Vycm9yID0gbGltYV9wcF90YXNrX2Vy cm9yOworCXBpcGUtPnRhc2tfbW11X2Vycm9yID0gbGltYV9wcF90YXNrX21tdV9lcnJvcjsKKwor CXJldHVybiAwOworfQorCit2b2lkIGxpbWFfcHBfcGlwZV9maW5pKHN0cnVjdCBsaW1hX2Rldmlj ZSAqZGV2KQoreworCWlmICghLS1saW1hX3BwX3Rhc2tfc2xhYl9yZWZjbnQpIHsKKwkJa21lbV9j YWNoZV9kZXN0cm95KGxpbWFfcHBfdGFza19zbGFiKTsKKwkJbGltYV9wcF90YXNrX3NsYWIgPSBO VUxMOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcHAuaCBi L2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLmJmNjBjNzdiMjYzMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfcHAuaApAQCAtMCwwICsxLDE5IEBACisvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KKy8qIENvcHlyaWdodCAyMDE3LTIwMTkgUWlh bmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNpZm5kZWYgX19MSU1BX1BQX0hfXworI2Rl ZmluZSBfX0xJTUFfUFBfSF9fCisKK3N0cnVjdCBsaW1hX2lwOworc3RydWN0IGxpbWFfZGV2aWNl OworCitpbnQgbGltYV9wcF9pbml0KHN0cnVjdCBsaW1hX2lwICppcCk7Cit2b2lkIGxpbWFfcHBf ZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApOworCitpbnQgbGltYV9wcF9iY2FzdF9pbml0KHN0cnVj dCBsaW1hX2lwICppcCk7Cit2b2lkIGxpbWFfcHBfYmNhc3RfZmluaShzdHJ1Y3QgbGltYV9pcCAq aXApOworCitpbnQgbGltYV9wcF9waXBlX2luaXQoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpOwor dm9pZCBsaW1hX3BwX3BpcGVfZmluaShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldik7CisKKyNlbmRp ZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9yZWdzLmggYi9kcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLmFjZThlY2VmYmU5MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9saW1hL2xpbWFfcmVncy5oCkBAIC0wLDAgKzEsMjk4IEBACisvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCAqLworLyogQ29weXJpZ2h0IDIwMTAtMjAxNyBBUk0gTGltaXRlZC4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDE3LTIwMTkgUWlhbmcgWXUgPHl1 cTgyNUBnbWFpbC5jb20+CisgKi8KKworI2lmbmRlZiBfX0xJTUFfUkVHU19IX18KKyNkZWZpbmUg X19MSU1BX1JFR1NfSF9fCisKKy8qIFRoaXMgZmlsZSdzIHJlZ2lzdGVyIGRlZmluaXRpb24gaXMg Y29sbGVjdGVkIGZyb20gdGhlCisgKiBvZmZpY2lhbCBBUk0gTWFsaSBVdGdhcmQgR1BVIGtlcm5l bCBkcml2ZXIgc291cmNlIGNvZGUKKyAqLworCisvKiBQTVUgcmVncyAqLworI2RlZmluZSBMSU1B X1BNVV9QT1dFUl9VUCAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTElNQV9QTVVfUE9X RVJfRE9XTiAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lICAgTElNQV9QTVVfUE9XRVJfR1Aw X01BU0sgICAgICAgICAgQklUKDApCisjZGVmaW5lICAgTElNQV9QTVVfUE9XRVJfTDJfTUFTSyAg ICAgICAgICAgQklUKDEpCisjZGVmaW5lICAgTElNQV9QTVVfUE9XRVJfUFBfTUFTSyhpKSAgICAg ICAgQklUKDIgKyBpKQorCisvKgorICogT24gTWFsaTQ1MCBlYWNoIGJsb2NrIGF1dG9tYXRpY2Fs bHkgc3RhcnRzIHVwIGl0cyBjb3JyZXNwb25kaW5nIEwyCisgKiBhbmQgdGhlIFBQcyBhcmUgbm90 IGZ1bGx5IGluZGVwZW5kZW50IGNvbnRyb2xsYWJsZS4KKyAqIEluc3RlYWQgUFAwLCBQUDEtMyBh bmQgUFA0LTcgY2FuIGJlIHR1cm5lZCBvbiBvciBvZmYuCisgKi8KKyNkZWZpbmUgICBMSU1BNDUw X1BNVV9QT1dFUl9QUDBfTUFTSyAgICAgICBCSVQoMSkKKyNkZWZpbmUgICBMSU1BNDUwX1BNVV9Q T1dFUl9QUDEzX01BU0sgICAgICBCSVQoMikKKyNkZWZpbmUgICBMSU1BNDUwX1BNVV9QT1dFUl9Q UDQ3X01BU0sgICAgICBCSVQoMykKKworI2RlZmluZSBMSU1BX1BNVV9TVEFUVVMgICAgICAgICAg ICAgICAgICAgIDB4MDgKKyNkZWZpbmUgTElNQV9QTVVfSU5UX01BU0sgICAgICAgICAgICAgICAg ICAweDBDCisjZGVmaW5lIExJTUFfUE1VX0lOVF9SQVdTVEFUICAgICAgICAgICAgICAgMHgxMAor I2RlZmluZSBMSU1BX1BNVV9JTlRfQ0xFQVIgICAgICAgICAgICAgICAgIDB4MTgKKyNkZWZpbmUg ICBMSU1BX1BNVV9JTlRfQ01EX01BU0sgICAgICAgICAgICBCSVQoMCkKKyNkZWZpbmUgTElNQV9Q TVVfU1dfREVMQVkgICAgICAgICAgICAgICAgICAweDFDCisKKy8qIEwyIGNhY2hlIHJlZ3MgKi8K KyNkZWZpbmUgTElNQV9MMl9DQUNIRV9TSVpFICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2Rl ZmluZSBMSU1BX0wyX0NBQ0hFX1NUQVRVUyAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5l ICAgTElNQV9MMl9DQUNIRV9TVEFUVVNfQ09NTUFORF9CVVNZICBCSVQoMCkKKyNkZWZpbmUgICBM SU1BX0wyX0NBQ0hFX1NUQVRVU19EQVRBX0JVU1kgICAgIEJJVCgxKQorI2RlZmluZSBMSU1BX0wy X0NBQ0hFX0NPTU1BTkQgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lICAgTElNQV9MMl9D QUNIRV9DT01NQU5EX0NMRUFSX0FMTCAgICBCSVQoMCkKKyNkZWZpbmUgTElNQV9MMl9DQUNIRV9D TEVBUl9QQUdFICAgICAgICAgICAgIDB4MDAxNAorI2RlZmluZSBMSU1BX0wyX0NBQ0hFX01BWF9S RUFEUyAgICAgICAgICAgICAgMHgwMDE4CisjZGVmaW5lIExJTUFfTDJfQ0FDSEVfRU5BQkxFICAg ICAgICAgICAgICAgICAweDAwMUMKKyNkZWZpbmUgICBMSU1BX0wyX0NBQ0hFX0VOQUJMRV9BQ0NF U1MgICAgICAgIEJJVCgwKQorI2RlZmluZSAgIExJTUFfTDJfQ0FDSEVfRU5BQkxFX1JFQURfQUxM T0NBVEUgQklUKDEpCisjZGVmaW5lIExJTUFfTDJfQ0FDSEVfUEVSRkNOVF9TUkMwICAgICAgICAg ICAweDAwMjAKKyNkZWZpbmUgTElNQV9MMl9DQUNIRV9QRVJGQ05UX1ZBTDAgICAgICAgICAgIDB4 MDAyNAorI2RlZmluZSBMSU1BX0wyX0NBQ0hFX1BFUkZDTlRfU1JDMSAgICAgICAgICAgMHgwMDI4 CisjZGVmaW5lIExJTUFfTDJfQ0FDSEVfRVJGQ05UX1ZBTDEgICAgICAgICAgICAweDAwMkMKKwor LyogR1AgcmVncyAqLworI2RlZmluZSBMSU1BX0dQX1ZTQ0xfU1RBUlRfQUREUiAgICAgICAgICAg ICAgICAweDAwCisjZGVmaW5lIExJTUFfR1BfVlNDTF9FTkRfQUREUiAgICAgICAgICAgICAgICAg IDB4MDQKKyNkZWZpbmUgTElNQV9HUF9QTEJVQ0xfU1RBUlRfQUREUiAgICAgICAgICAgICAgMHgw OAorI2RlZmluZSBMSU1BX0dQX1BMQlVDTF9FTkRfQUREUiAgICAgICAgICAgICAgICAweDBjCisj ZGVmaW5lIExJTUFfR1BfUExCVV9BTExPQ19TVEFSVF9BRERSICAgICAgICAgIDB4MTAKKyNkZWZp bmUgTElNQV9HUF9QTEJVX0FMTE9DX0VORF9BRERSICAgICAgICAgICAgMHgxNAorI2RlZmluZSBM SU1BX0dQX0NNRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lICAgTElN QV9HUF9DTURfU1RBUlRfVlMgICAgICAgICAgICAgICAgIEJJVCgwKQorI2RlZmluZSAgIExJTUFf R1BfQ01EX1NUQVJUX1BMQlUgICAgICAgICAgICAgICBCSVQoMSkKKyNkZWZpbmUgICBMSU1BX0dQ X0NNRF9VUERBVEVfUExCVV9BTExPQyAgICAgICAgQklUKDQpCisjZGVmaW5lICAgTElNQV9HUF9D TURfUkVTRVQgICAgICAgICAgICAgICAgICAgIEJJVCg1KQorI2RlZmluZSAgIExJTUFfR1BfQ01E X0ZPUkNFX0hBTkcgICAgICAgICAgICAgICBCSVQoNikKKyNkZWZpbmUgICBMSU1BX0dQX0NNRF9T VE9QX0JVUyAgICAgICAgICAgICAgICAgQklUKDkpCisjZGVmaW5lICAgTElNQV9HUF9DTURfU09G VF9SRVNFVCAgICAgICAgICAgICAgIEJJVCgxMCkKKyNkZWZpbmUgTElNQV9HUF9JTlRfUkFXU1RB VCAgICAgICAgICAgICAgICAgICAgMHgyNAorI2RlZmluZSBMSU1BX0dQX0lOVF9DTEVBUiAgICAg ICAgICAgICAgICAgICAgICAweDI4CisjZGVmaW5lIExJTUFfR1BfSU5UX01BU0sgICAgICAgICAg ICAgICAgICAgICAgIDB4MkMKKyNkZWZpbmUgTElNQV9HUF9JTlRfU1RBVCAgICAgICAgICAgICAg ICAgICAgICAgMHgzMAorI2RlZmluZSAgIExJTUFfR1BfSVJRX1ZTX0VORF9DTURfTFNUICAgICAg ICAgICBCSVQoMCkKKyNkZWZpbmUgICBMSU1BX0dQX0lSUV9QTEJVX0VORF9DTURfTFNUICAgICAg ICAgQklUKDEpCisjZGVmaW5lICAgTElNQV9HUF9JUlFfUExCVV9PVVRfT0ZfTUVNICAgICAgICAg IEJJVCgyKQorI2RlZmluZSAgIExJTUFfR1BfSVJRX1ZTX1NFTV9JUlEgICAgICAgICAgICAgICBC SVQoMykKKyNkZWZpbmUgICBMSU1BX0dQX0lSUV9QTEJVX1NFTV9JUlEgICAgICAgICAgICAgQklU KDQpCisjZGVmaW5lICAgTElNQV9HUF9JUlFfSEFORyAgICAgICAgICAgICAgICAgICAgIEJJVCg1 KQorI2RlZmluZSAgIExJTUFfR1BfSVJRX0ZPUkNFX0hBTkcgICAgICAgICAgICAgICBCSVQoNikK KyNkZWZpbmUgICBMSU1BX0dQX0lSUV9QRVJGX0NOVF8wX0xJTUlUICAgICAgICAgQklUKDcpCisj ZGVmaW5lICAgTElNQV9HUF9JUlFfUEVSRl9DTlRfMV9MSU1JVCAgICAgICAgIEJJVCg4KQorI2Rl ZmluZSAgIExJTUFfR1BfSVJRX1dSSVRFX0JPVU5EX0VSUiAgICAgICAgICBCSVQoOSkKKyNkZWZp bmUgICBMSU1BX0dQX0lSUV9TWU5DX0VSUk9SICAgICAgICAgICAgICAgQklUKDEwKQorI2RlZmlu ZSAgIExJTUFfR1BfSVJRX0FYSV9CVVNfRVJST1IgICAgICAgICAgICBCSVQoMTEpCisjZGVmaW5l ICAgTElNQV9HUF9JUlFfQVhJX0JVU19TVE9QUEVEICAgICAgICAgIEJJVCgxMikKKyNkZWZpbmUg ICBMSU1BX0dQX0lSUV9WU19JTlZBTElEX0NNRCAgICAgICAgICAgQklUKDEzKQorI2RlZmluZSAg IExJTUFfR1BfSVJRX1BMQl9JTlZBTElEX0NNRCAgICAgICAgICBCSVQoMTQpCisjZGVmaW5lICAg TElNQV9HUF9JUlFfUkVTRVRfQ09NUExFVEVEICAgICAgICAgIEJJVCgxOSkKKyNkZWZpbmUgICBM SU1BX0dQX0lSUV9TRU1BUEhPUkVfVU5ERVJGTE9XICAgICAgQklUKDIwKQorI2RlZmluZSAgIExJ TUFfR1BfSVJRX1NFTUFQSE9SRV9PVkVSRkxPVyAgICAgICBCSVQoMjEpCisjZGVmaW5lICAgTElN QV9HUF9JUlFfUFRSX0FSUkFZX09VVF9PRl9CT1VORFMgIEJJVCgyMikKKyNkZWZpbmUgTElNQV9H UF9XUklURV9CT1VORF9MT1cgICAgICAgICAgICAgICAgMHgzNAorI2RlZmluZSBMSU1BX0dQX1BF UkZfQ05UXzBfRU5BQkxFICAgICAgICAgICAgICAweDNDCisjZGVmaW5lIExJTUFfR1BfUEVSRl9D TlRfMV9FTkFCTEUgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgTElNQV9HUF9QRVJGX0NOVF8w X1NSQyAgICAgICAgICAgICAgICAgMHg0NAorI2RlZmluZSBMSU1BX0dQX1BFUkZfQ05UXzFfU1JD ICAgICAgICAgICAgICAgICAweDQ4CisjZGVmaW5lIExJTUFfR1BfUEVSRl9DTlRfMF9WQUxVRSAg ICAgICAgICAgICAgIDB4NEMKKyNkZWZpbmUgTElNQV9HUF9QRVJGX0NOVF8xX1ZBTFVFICAgICAg ICAgICAgICAgMHg1MAorI2RlZmluZSBMSU1BX0dQX1BFUkZfQ05UXzBfTElNSVQgICAgICAgICAg ICAgICAweDU0CisjZGVmaW5lIExJTUFfR1BfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAg IDB4NjgKKyNkZWZpbmUgICBMSU1BX0dQX1NUQVRVU19WU19BQ1RJVkUgICAgICAgICAgICAgQklU KDEpCisjZGVmaW5lICAgTElNQV9HUF9TVEFUVVNfQlVTX1NUT1BQRUQgICAgICAgICAgIEJJVCgy KQorI2RlZmluZSAgIExJTUFfR1BfU1RBVFVTX1BMQlVfQUNUSVZFICAgICAgICAgICBCSVQoMykK KyNkZWZpbmUgICBMSU1BX0dQX1NUQVRVU19CVVNfRVJST1IgICAgICAgICAgICAgQklUKDYpCisj ZGVmaW5lICAgTElNQV9HUF9TVEFUVVNfV1JJVEVfQk9VTkRfRVJSICAgICAgIEJJVCg4KQorI2Rl ZmluZSBMSU1BX0dQX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICAweDZDCisjZGVmaW5l IExJTUFfR1BfVlNDTF9TVEFSVF9BRERSX1JFQUQgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgTElN QV9HUF9QTEJDTF9TVEFSVF9BRERSX1JFQUQgICAgICAgICAgMHg4NAorI2RlZmluZSBMSU1BX0dQ X0NPTlRSX0FYSV9CVVNfRVJST1JfU1RBVCAgICAgICAweDk0CisKKyNkZWZpbmUgTElNQV9HUF9J UlFfTUFTS19BTEwJCSAgIFwKKwkoCQkJCSAgIFwKKwkgTElNQV9HUF9JUlFfVlNfRU5EX0NNRF9M U1QgICAgICB8IFwKKwkgTElNQV9HUF9JUlFfUExCVV9FTkRfQ01EX0xTVCAgICB8IFwKKwkgTElN QV9HUF9JUlFfUExCVV9PVVRfT0ZfTUVNICAgICB8IFwKKwkgTElNQV9HUF9JUlFfVlNfU0VNX0lS USAgICAgICAgICB8IFwKKwkgTElNQV9HUF9JUlFfUExCVV9TRU1fSVJRICAgICAgICB8IFwKKwkg TElNQV9HUF9JUlFfSEFORyAgICAgICAgICAgICAgICB8IFwKKwkgTElNQV9HUF9JUlFfRk9SQ0Vf SEFORyAgICAgICAgICB8IFwKKwkgTElNQV9HUF9JUlFfUEVSRl9DTlRfMF9MSU1JVCAgICB8IFwK KwkgTElNQV9HUF9JUlFfUEVSRl9DTlRfMV9MSU1JVCAgICB8IFwKKwkgTElNQV9HUF9JUlFfV1JJ VEVfQk9VTkRfRVJSICAgICB8IFwKKwkgTElNQV9HUF9JUlFfU1lOQ19FUlJPUiAgICAgICAgICB8 IFwKKwkgTElNQV9HUF9JUlFfQVhJX0JVU19FUlJPUiAgICAgICB8IFwKKwkgTElNQV9HUF9JUlFf QVhJX0JVU19TVE9QUEVEICAgICB8IFwKKwkgTElNQV9HUF9JUlFfVlNfSU5WQUxJRF9DTUQgICAg ICB8IFwKKwkgTElNQV9HUF9JUlFfUExCX0lOVkFMSURfQ01EICAgICB8IFwKKwkgTElNQV9HUF9J UlFfUkVTRVRfQ09NUExFVEVEICAgICB8IFwKKwkgTElNQV9HUF9JUlFfU0VNQVBIT1JFX1VOREVS RkxPVyB8IFwKKwkgTElNQV9HUF9JUlFfU0VNQVBIT1JFX09WRVJGTE9XICB8IFwKKwkgTElNQV9H UF9JUlFfUFRSX0FSUkFZX09VVF9PRl9CT1VORFMpCisKKyNkZWZpbmUgTElNQV9HUF9JUlFfTUFT S19FUlJPUiAgICAgICAgICAgICBcCisJKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisJIExJTUFfR1BfSVJRX1BMQlVfT1VUX09GX01FTSAgICAgfCBcCisJIExJTUFfR1BfSVJR X0ZPUkNFX0hBTkcgICAgICAgICAgfCBcCisJIExJTUFfR1BfSVJRX1dSSVRFX0JPVU5EX0VSUiAg ICAgfCBcCisJIExJTUFfR1BfSVJRX1NZTkNfRVJST1IgICAgICAgICAgfCBcCisJIExJTUFfR1Bf SVJRX0FYSV9CVVNfRVJST1IgICAgICAgfCBcCisJIExJTUFfR1BfSVJRX1ZTX0lOVkFMSURfQ01E ICAgICAgfCBcCisJIExJTUFfR1BfSVJRX1BMQl9JTlZBTElEX0NNRCAgICAgfCBcCisJIExJTUFf R1BfSVJRX1NFTUFQSE9SRV9VTkRFUkZMT1cgfCBcCisJIExJTUFfR1BfSVJRX1NFTUFQSE9SRV9P VkVSRkxPVyAgfCBcCisJIExJTUFfR1BfSVJRX1BUUl9BUlJBWV9PVVRfT0ZfQk9VTkRTKQorCisj ZGVmaW5lIExJTUFfR1BfSVJRX01BU0tfVVNFRAkJICAgXAorCSgJCQkJICAgXAorCSBMSU1BX0dQ X0lSUV9WU19FTkRfQ01EX0xTVCAgICAgIHwgXAorCSBMSU1BX0dQX0lSUV9QTEJVX0VORF9DTURf TFNUICAgIHwgXAorCSBMSU1BX0dQX0lSUV9NQVNLX0VSUk9SKQorCisvKiBQUCByZWdzICovCisj ZGVmaW5lIExJTUFfUFBfRlJBTUUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZp bmUgTElNQV9QUF9SU1cJCQkgICAgIDB4MDAwNAorI2RlZmluZSBMSU1BX1BQX1NUQUNLCQkJICAg ICAweDAwMzAKKyNkZWZpbmUgTElNQV9QUF9TVEFDS19TSVpFCQkgICAgIDB4MDAzNAorI2RlZmlu ZSBMSU1BX1BQX09SSUdJTl9PRkZTRVRfWAkgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIExJ TUFfUFBfV0IoaSkgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMTAwICogKGkgKyAxKSkKKyNk ZWZpbmUgICBMSU1BX1BQX1dCX1NPVVJDRV9TRUxFQ1QgICAgICAgICAgIDB4MDAwMAorI2RlZmlu ZQkgIExJTUFfUFBfV0JfU09VUkNFX0FERFIgICAgICAgICAgICAgMHgwMDA0CisKKyNkZWZpbmUg TElNQV9QUF9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBMSU1B X1BQX0NVUlJFTlRfUkVORF9MSVNUX0FERFIgICAgICAgMHgxMDA0CisjZGVmaW5lIExJTUFfUFBf U1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAweDEwMDgKKyNkZWZpbmUgICBMSU1BX1BQX1NU QVRVU19SRU5ERVJJTkdfQUNUSVZFICAgIEJJVCgwKQorI2RlZmluZSAgIExJTUFfUFBfU1RBVFVT X0JVU19TVE9QUEVEICAgICAgICAgQklUKDQpCisjZGVmaW5lIExJTUFfUFBfQ1RSTCAgICAgICAg ICAgICAgICAgICAgICAgICAweDEwMGMKKyNkZWZpbmUgICBMSU1BX1BQX0NUUkxfU1RPUF9CVVMg ICAgICAgICAgICAgIEJJVCgwKQorI2RlZmluZSAgIExJTUFfUFBfQ1RSTF9GTFVTSF9DQUNIRVMg ICAgICAgICAgQklUKDMpCisjZGVmaW5lICAgTElNQV9QUF9DVFJMX0ZPUkNFX1JFU0VUICAgICAg ICAgICBCSVQoNSkKKyNkZWZpbmUgICBMSU1BX1BQX0NUUkxfU1RBUlRfUkVOREVSSU5HICAgICAg IEJJVCg2KQorI2RlZmluZSAgIExJTUFfUFBfQ1RSTF9TT0ZUX1JFU0VUICAgICAgICAgICAgQklU KDcpCisjZGVmaW5lIExJTUFfUFBfSU5UX1JBV1NUQVQgICAgICAgICAgICAgICAgICAweDEwMjAK KyNkZWZpbmUgTElNQV9QUF9JTlRfQ0xFQVIgICAgICAgICAgICAgICAgICAgIDB4MTAyNAorI2Rl ZmluZSBMSU1BX1BQX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgxMDI4CisjZGVmaW5l IExJTUFfUFBfSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgICAweDEwMmMKKyNkZWZpbmUgICBM SU1BX1BQX0lSUV9FTkRfT0ZfRlJBTUUgICAgICAgICAgIEJJVCgwKQorI2RlZmluZSAgIExJTUFf UFBfSVJRX0VORF9PRl9USUxFICAgICAgICAgICAgQklUKDEpCisjZGVmaW5lICAgTElNQV9QUF9J UlFfSEFORyAgICAgICAgICAgICAgICAgICBCSVQoMikKKyNkZWZpbmUgICBMSU1BX1BQX0lSUV9G T1JDRV9IQU5HICAgICAgICAgICAgIEJJVCgzKQorI2RlZmluZSAgIExJTUFfUFBfSVJRX0JVU19F UlJPUiAgICAgICAgICAgICAgQklUKDQpCisjZGVmaW5lICAgTElNQV9QUF9JUlFfQlVTX1NUT1Ag ICAgICAgICAgICAgICBCSVQoNSkKKyNkZWZpbmUgICBMSU1BX1BQX0lSUV9DTlRfMF9MSU1JVCAg ICAgICAgICAgIEJJVCg2KQorI2RlZmluZSAgIExJTUFfUFBfSVJRX0NOVF8xX0xJTUlUICAgICAg ICAgICAgQklUKDcpCisjZGVmaW5lICAgTElNQV9QUF9JUlFfV1JJVEVfQk9VTkRBUllfRVJST1Ig ICBCSVQoOCkKKyNkZWZpbmUgICBMSU1BX1BQX0lSUV9JTlZBTElEX1BMSVNUX0NPTU1BTkQgIEJJ VCg5KQorI2RlZmluZSAgIExJTUFfUFBfSVJRX0NBTExfU1RBQ0tfVU5ERVJGTE9XICAgQklUKDEw KQorI2RlZmluZSAgIExJTUFfUFBfSVJRX0NBTExfU1RBQ0tfT1ZFUkZMT1cgICAgQklUKDExKQor I2RlZmluZSAgIExJTUFfUFBfSVJRX1JFU0VUX0NPTVBMRVRFRCAgICAgICAgQklUKDEyKQorI2Rl ZmluZSBMSU1BX1BQX1dSSVRFX0JPVU5EQVJZX0xPVyAgICAgICAgICAgMHgxMDQ0CisjZGVmaW5l IExJTUFfUFBfQlVTX0VSUk9SX1NUQVRVUyAgICAgICAgICAgICAweDEwNTAKKyNkZWZpbmUgTElN QV9QUF9QRVJGX0NOVF8wX0VOQUJMRSAgICAgICAgICAgIDB4MTA4MAorI2RlZmluZSBMSU1BX1BQ X1BFUkZfQ05UXzBfU1JDICAgICAgICAgICAgICAgMHgxMDg0CisjZGVmaW5lIExJTUFfUFBfUEVS Rl9DTlRfMF9MSU1JVCAgICAgICAgICAgICAweDEwODgKKyNkZWZpbmUgTElNQV9QUF9QRVJGX0NO VF8wX1ZBTFVFICAgICAgICAgICAgIDB4MTA4YworI2RlZmluZSBMSU1BX1BQX1BFUkZfQ05UXzFf RU5BQkxFICAgICAgICAgICAgMHgxMGEwCisjZGVmaW5lIExJTUFfUFBfUEVSRl9DTlRfMV9TUkMg ICAgICAgICAgICAgICAweDEwYTQKKyNkZWZpbmUgTElNQV9QUF9QRVJGX0NOVF8xX0xJTUlUICAg ICAgICAgICAgIDB4MTBhOAorI2RlZmluZSBMSU1BX1BQX1BFUkZfQ05UXzFfVkFMVUUgICAgICAg ICAgICAgMHgxMGFjCisjZGVmaW5lIExJTUFfUFBfUEVSRk1PTl9DT05UUiAgICAgICAgICAgICAg ICAweDEwYjAKKyNkZWZpbmUgTElNQV9QUF9QRVJGTU9OX0JBU0UgICAgICAgICAgICAgICAgIDB4 MTBiNAorCisjZGVmaW5lIExJTUFfUFBfSVJRX01BU0tfQUxMICAgICAgICAgICAgICAgICBcCisJ KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgTElNQV9QUF9JUlFfRU5E X09GX0ZSQU1FICAgICAgICAgIHwgXAorCSBMSU1BX1BQX0lSUV9FTkRfT0ZfVElMRSAgICAgICAg ICAgfCBcCisJIExJTUFfUFBfSVJRX0hBTkcgICAgICAgICAgICAgICAgICB8IFwKKwkgTElNQV9Q UF9JUlFfRk9SQ0VfSEFORyAgICAgICAgICAgIHwgXAorCSBMSU1BX1BQX0lSUV9CVVNfRVJST1Ig ICAgICAgICAgICAgfCBcCisJIExJTUFfUFBfSVJRX0JVU19TVE9QICAgICAgICAgICAgICB8IFwK KwkgTElNQV9QUF9JUlFfQ05UXzBfTElNSVQgICAgICAgICAgIHwgXAorCSBMSU1BX1BQX0lSUV9D TlRfMV9MSU1JVCAgICAgICAgICAgfCBcCisJIExJTUFfUFBfSVJRX1dSSVRFX0JPVU5EQVJZX0VS Uk9SICB8IFwKKwkgTElNQV9QUF9JUlFfSU5WQUxJRF9QTElTVF9DT01NQU5EIHwgXAorCSBMSU1B X1BQX0lSUV9DQUxMX1NUQUNLX1VOREVSRkxPVyAgfCBcCisJIExJTUFfUFBfSVJRX0NBTExfU1RB Q0tfT1ZFUkZMT1cgICB8IFwKKwkgTElNQV9QUF9JUlFfUkVTRVRfQ09NUExFVEVEKQorCisjZGVm aW5lIExJTUFfUFBfSVJRX01BU0tfRVJST1IgICAgICAgICAgICAgICBcCisJKCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgTElNQV9QUF9JUlFfRk9SQ0VfSEFORyAgICAg ICAgICAgIHwgXAorCSBMSU1BX1BQX0lSUV9CVVNfRVJST1IgICAgICAgICAgICAgfCBcCisJIExJ TUFfUFBfSVJRX1dSSVRFX0JPVU5EQVJZX0VSUk9SICB8IFwKKwkgTElNQV9QUF9JUlFfSU5WQUxJ RF9QTElTVF9DT01NQU5EIHwgXAorCSBMSU1BX1BQX0lSUV9DQUxMX1NUQUNLX1VOREVSRkxPVyAg fCBcCisJIExJTUFfUFBfSVJRX0NBTExfU1RBQ0tfT1ZFUkZMT1cpCisKKyNkZWZpbmUgTElNQV9Q UF9JUlFfTUFTS19VU0VEICAgICAgICAgICAgICAgIFwKKwkoICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorCSBMSU1BX1BQX0lSUV9FTkRfT0ZfRlJBTUUgICAgICAgICAgfCBc CisJIExJTUFfUFBfSVJRX01BU0tfRVJST1IpCisKKy8qIE1NVSByZWdzICovCisjZGVmaW5lIExJ TUFfTU1VX0RURV9BRERSICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIExJTUFf TU1VX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lICAgTElNQV9N TVVfU1RBVFVTX1BBR0lOR19FTkFCTEVEICAgICAgQklUKDApCisjZGVmaW5lICAgTElNQV9NTVVf U1RBVFVTX1BBR0VfRkFVTFRfQUNUSVZFICAgQklUKDEpCisjZGVmaW5lICAgTElNQV9NTVVfU1RB VFVTX1NUQUxMX0FDVElWRSAgICAgICAgQklUKDIpCisjZGVmaW5lICAgTElNQV9NTVVfU1RBVFVT X0lETEUgICAgICAgICAgICAgICAgQklUKDMpCisjZGVmaW5lICAgTElNQV9NTVVfU1RBVFVTX1JF UExBWV9CVUZGRVJfRU1QVFkgQklUKDQpCisjZGVmaW5lICAgTElNQV9NTVVfU1RBVFVTX1BBR0Vf RkFVTFRfSVNfV1JJVEUgQklUKDUpCisjZGVmaW5lICAgTElNQV9NTVVfU1RBVFVTX0JVU19JRCh4 KSAgICAgICAgICAgKCh4ID4+IDYpICYgMHgxRikKKyNkZWZpbmUgTElNQV9NTVVfQ09NTUFORCAg ICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgICBMSU1BX01NVV9DT01NQU5EX0VO QUJMRV9QQUdJTkcgICAgICAweDAwCisjZGVmaW5lICAgTElNQV9NTVVfQ09NTUFORF9ESVNBQkxF X1BBR0lORyAgICAgMHgwMQorI2RlZmluZSAgIExJTUFfTU1VX0NPTU1BTkRfRU5BQkxFX1NUQUxM ICAgICAgIDB4MDIKKyNkZWZpbmUgICBMSU1BX01NVV9DT01NQU5EX0RJU0FCTEVfU1RBTEwgICAg ICAweDAzCisjZGVmaW5lICAgTElNQV9NTVVfQ09NTUFORF9aQVBfQ0FDSEUgICAgICAgICAgMHgw NAorI2RlZmluZSAgIExJTUFfTU1VX0NPTU1BTkRfUEFHRV9GQVVMVF9ET05FICAgIDB4MDUKKyNk ZWZpbmUgICBMSU1BX01NVV9DT01NQU5EX0hBUkRfUkVTRVQgICAgICAgICAweDA2CisjZGVmaW5l IExJTUFfTU1VX1BBR0VfRkFVTFRfQUREUiAgICAgICAgICAgICAgMHgwMDBDCisjZGVmaW5lIExJ TUFfTU1VX1pBUF9PTkVfTElORSAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIExJTUFf TU1VX0lOVF9SQVdTVEFUICAgICAgICAgICAgICAgICAgMHgwMDE0CisjZGVmaW5lIExJTUFfTU1V X0lOVF9DTEVBUiAgICAgICAgICAgICAgICAgICAgMHgwMDE4CisjZGVmaW5lIExJTUFfTU1VX0lO VF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDFDCisjZGVmaW5lICAgTElNQV9NTVVfSU5U X1BBR0VfRkFVTFQgICAgICAgICAgICAgQklUKDApCisjZGVmaW5lICAgTElNQV9NTVVfSU5UX1JF QURfQlVTX0VSUk9SICAgICAgICAgQklUKDEpCisjZGVmaW5lIExJTUFfTU1VX0lOVF9TVEFUVVMg ICAgICAgICAgICAgICAgICAgMHgwMDIwCisKKyNkZWZpbmUgTElNQV9WTV9GTEFHX1BSRVNFTlQg ICAgICAgICAgQklUKDApCisjZGVmaW5lIExJTUFfVk1fRkxBR19SRUFEX1BFUk1JU1NJT04gIEJJ VCgxKQorI2RlZmluZSBMSU1BX1ZNX0ZMQUdfV1JJVEVfUEVSTUlTU0lPTiBCSVQoMikKKyNkZWZp bmUgTElNQV9WTV9GTEFHX09WRVJSSURFX0NBQ0hFICAgQklUKDMpCisjZGVmaW5lIExJTUFfVk1f RkxBR19XUklURV9DQUNIRUFCTEUgIEJJVCg0KQorI2RlZmluZSBMSU1BX1ZNX0ZMQUdfV1JJVEVf QUxMT0NBVEUgICBCSVQoNSkKKyNkZWZpbmUgTElNQV9WTV9GTEFHX1dSSVRFX0JVRkZFUkFCTEUg QklUKDYpCisjZGVmaW5lIExJTUFfVk1fRkxBR19SRUFEX0NBQ0hFQUJMRSAgIEJJVCg3KQorI2Rl ZmluZSBMSU1BX1ZNX0ZMQUdfUkVBRF9BTExPQ0FURSAgICBCSVQoOCkKKyNkZWZpbmUgTElNQV9W TV9GTEFHX01BU0sgICAgICAgICAgICAgMHgxRkYKKworI2RlZmluZSBMSU1BX1ZNX0ZMQUdTX0NB Q0hFICgJCQkgXAorCQlMSU1BX1ZNX0ZMQUdfUFJFU0VOVCB8CQkgXAorCQlMSU1BX1ZNX0ZMQUdf UkVBRF9QRVJNSVNTSU9OIHwJIFwKKwkJTElNQV9WTV9GTEFHX1dSSVRFX1BFUk1JU1NJT04gfAkg XAorCQlMSU1BX1ZNX0ZMQUdfT1ZFUlJJREVfQ0FDSEUgfAkgXAorCQlMSU1BX1ZNX0ZMQUdfV1JJ VEVfQ0FDSEVBQkxFIHwJIFwKKwkJTElNQV9WTV9GTEFHX1dSSVRFX0JVRkZFUkFCTEUgfAkgXAor CQlMSU1BX1ZNX0ZMQUdfUkVBRF9DQUNIRUFCTEUgfAkgXAorCQlMSU1BX1ZNX0ZMQUdfUkVBRF9B TExPQ0FURSkKKworI2RlZmluZSBMSU1BX1ZNX0ZMQUdTX1VOQ0FDSEUgKAkJCVwKKwkJTElNQV9W TV9GTEFHX1BSRVNFTlQgfAkJXAorCQlMSU1BX1ZNX0ZMQUdfUkVBRF9QRVJNSVNTSU9OIHwJXAor CQlMSU1BX1ZNX0ZMQUdfV1JJVEVfUEVSTUlTU0lPTikKKworLyogRExCVSByZWdzICovCisjZGVm aW5lIExJTUFfRExCVV9NQVNURVJfVExMSVNUX1BIWVNfQUREUiAgMHgwMDAwCisjZGVmaW5lCUxJ TUFfRExCVV9NQVNURVJfVExMSVNUX1ZBRERSICAgICAgMHgwMDA0CisjZGVmaW5lCUxJTUFfRExC VV9UTExJU1RfVkJBU0VBRERSICAgICAgICAgMHgwMDA4CisjZGVmaW5lCUxJTUFfRExCVV9GQl9E SU0gICAgICAgICAgICAgICAgICAgMHgwMDBDCisjZGVmaW5lCUxJTUFfRExCVV9UTExJU1RfQ09O RiAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lCUxJTUFfRExCVV9TVEFSVF9USUxFX1BPUyAg ICAgICAgICAgMHgwMDE0CisjZGVmaW5lCUxJTUFfRExCVV9QUF9FTkFCTEVfTUFTSyAgICAgICAg ICAgMHgwMDE4CisKKy8qIEJDQVNUIHJlZ3MgKi8KKyNkZWZpbmUgTElNQV9CQ0FTVF9CUk9BRENB U1RfTUFTSyAgICAweDAKKyNkZWZpbmUgTElNQV9CQ0FTVF9JTlRFUlJVUFRfTUFTSyAgICAweDQK KworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMg Yi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi45N2JkOWMxZGViODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmMKQEAgLTAsMCArMSw0MDQgQEAKKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorLyogQ29weXJpZ2h0IDIwMTctMjAx OSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2luY2x1ZGUgPGxpbnV4L2t0aHJl YWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJsaW1hX2Rydi5oIgor I2luY2x1ZGUgImxpbWFfc2NoZWQuaCIKKyNpbmNsdWRlICJsaW1hX3ZtLmgiCisjaW5jbHVkZSAi bGltYV9tbXUuaCIKKyNpbmNsdWRlICJsaW1hX2wyX2NhY2hlLmgiCisjaW5jbHVkZSAibGltYV9v YmplY3QuaCIKKworc3RydWN0IGxpbWFfZmVuY2UgeworCXN0cnVjdCBkbWFfZmVuY2UgYmFzZTsK KwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlOworfTsKKworc3RhdGljIHN0cnVjdCBrbWVt X2NhY2hlICpsaW1hX2ZlbmNlX3NsYWI7CitzdGF0aWMgaW50IGxpbWFfZmVuY2Vfc2xhYl9yZWZj bnQ7CisKK2ludCBsaW1hX3NjaGVkX3NsYWJfaW5pdCh2b2lkKQoreworCWlmICghbGltYV9mZW5j ZV9zbGFiKSB7CisJCWxpbWFfZmVuY2Vfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKAorCQkJImxp bWFfZmVuY2UiLCBzaXplb2Yoc3RydWN0IGxpbWFfZmVuY2UpLCAwLAorCQkJU0xBQl9IV0NBQ0hF X0FMSUdOLCBOVUxMKTsKKwkJaWYgKCFsaW1hX2ZlbmNlX3NsYWIpCisJCQlyZXR1cm4gLUVOT01F TTsKKwl9CisKKwlsaW1hX2ZlbmNlX3NsYWJfcmVmY250Kys7CisJcmV0dXJuIDA7Cit9CisKK3Zv aWQgbGltYV9zY2hlZF9zbGFiX2Zpbmkodm9pZCkKK3sKKwlpZiAoIS0tbGltYV9mZW5jZV9zbGFi X3JlZmNudCkgeworCQlrbWVtX2NhY2hlX2Rlc3Ryb3kobGltYV9mZW5jZV9zbGFiKTsKKwkJbGlt YV9mZW5jZV9zbGFiID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpbWFf ZmVuY2UgKnRvX2xpbWFfZmVuY2Uoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJcmV0dXJu IGNvbnRhaW5lcl9vZihmZW5jZSwgc3RydWN0IGxpbWFfZmVuY2UsIGJhc2UpOworfQorCitzdGF0 aWMgY29uc3QgY2hhciAqbGltYV9mZW5jZV9nZXRfZHJpdmVyX25hbWUoc3RydWN0IGRtYV9mZW5j ZSAqZmVuY2UpCit7CisJcmV0dXJuICJsaW1hIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmxp bWFfZmVuY2VfZ2V0X3RpbWVsaW5lX25hbWUoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJ c3RydWN0IGxpbWFfZmVuY2UgKmYgPSB0b19saW1hX2ZlbmNlKGZlbmNlKTsKKworCXJldHVybiBm LT5waXBlLT5iYXNlLm5hbWU7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZmVuY2VfcmVsZWFzZV9y Y3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpCit7CisJc3RydWN0IGRtYV9mZW5jZSAqZiA9IGNvbnRh aW5lcl9vZihyY3UsIHN0cnVjdCBkbWFfZmVuY2UsIHJjdSk7CisJc3RydWN0IGxpbWFfZmVuY2Ug KmZlbmNlID0gdG9fbGltYV9mZW5jZShmKTsKKworCWttZW1fY2FjaGVfZnJlZShsaW1hX2ZlbmNl X3NsYWIsIGZlbmNlKTsKK30KKworc3RhdGljIHZvaWQgbGltYV9mZW5jZV9yZWxlYXNlKHN0cnVj dCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXN0cnVjdCBsaW1hX2ZlbmNlICpmID0gdG9fbGltYV9m ZW5jZShmZW5jZSk7CisKKwljYWxsX3JjdSgmZi0+YmFzZS5yY3UsIGxpbWFfZmVuY2VfcmVsZWFz ZV9yY3UpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9mZW5jZV9vcHMgbGltYV9mZW5j ZV9vcHMgPSB7CisJLmdldF9kcml2ZXJfbmFtZSA9IGxpbWFfZmVuY2VfZ2V0X2RyaXZlcl9uYW1l LAorCS5nZXRfdGltZWxpbmVfbmFtZSA9IGxpbWFfZmVuY2VfZ2V0X3RpbWVsaW5lX25hbWUsCisJ LnJlbGVhc2UgPSBsaW1hX2ZlbmNlX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGxpbWFf ZmVuY2UgKmxpbWFfZmVuY2VfY3JlYXRlKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUpCit7 CisJc3RydWN0IGxpbWFfZmVuY2UgKmZlbmNlOworCisJZmVuY2UgPSBrbWVtX2NhY2hlX3phbGxv YyhsaW1hX2ZlbmNlX3NsYWIsIEdGUF9LRVJORUwpOworCWlmICghZmVuY2UpCisJCXJldHVybiBO VUxMOworCisJZmVuY2UtPnBpcGUgPSBwaXBlOworCWRtYV9mZW5jZV9pbml0KCZmZW5jZS0+YmFz ZSwgJmxpbWFfZmVuY2Vfb3BzLCAmcGlwZS0+ZmVuY2VfbG9jaywKKwkJICAgICAgIHBpcGUtPmZl bmNlX2NvbnRleHQsICsrcGlwZS0+ZmVuY2Vfc2Vxbm8pOworCisJcmV0dXJuIGZlbmNlOworfQor CitzdGF0aWMgaW5saW5lIHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRvX2xpbWFfdGFzayhzdHJ1 Y3QgZHJtX3NjaGVkX2pvYiAqam9iKQoreworCXJldHVybiBjb250YWluZXJfb2Yoam9iLCBzdHJ1 Y3QgbGltYV9zY2hlZF90YXNrLCBiYXNlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlt YV9zY2hlZF9waXBlICp0b19saW1hX3BpcGUoc3RydWN0IGRybV9ncHVfc2NoZWR1bGVyICpzY2hl ZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNjaGVkLCBzdHJ1Y3QgbGltYV9zY2hlZF9waXBl LCBiYXNlKTsKK30KKworaW50IGxpbWFfc2NoZWRfdGFza19pbml0KHN0cnVjdCBsaW1hX3NjaGVk X3Rhc2sgKnRhc2ssCisJCQkgc3RydWN0IGxpbWFfc2NoZWRfY29udGV4dCAqY29udGV4dCwKKwkJ CSBzdHJ1Y3QgbGltYV9ibyAqKmJvcywgaW50IG51bV9ib3MsCisJCQkgc3RydWN0IGxpbWFfdm0g KnZtKQoreworCWludCBlcnIsIGk7CisKKwl0YXNrLT5ib3MgPSBrbWVtZHVwKGJvcywgc2l6ZW9m KCpib3MpICogbnVtX2JvcywgR0ZQX0tFUk5FTCk7CisJaWYgKCF0YXNrLT5ib3MpCisJCXJldHVy biAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IG51bV9ib3M7IGkrKykKKwkJZHJtX2dlbV9v YmplY3RfZ2V0KCZib3NbaV0tPmdlbSk7CisKKwllcnIgPSBkcm1fc2NoZWRfam9iX2luaXQoJnRh c2stPmJhc2UsICZjb250ZXh0LT5iYXNlLCB2bSk7CisJaWYgKGVycikgeworCQlrZnJlZSh0YXNr LT5ib3MpOworCQlyZXR1cm4gZXJyOworCX0KKworCXRhc2stPm51bV9ib3MgPSBudW1fYm9zOwor CXRhc2stPnZtID0gbGltYV92bV9nZXQodm0pOworCXJldHVybiAwOworfQorCit2b2lkIGxpbWFf c2NoZWRfdGFza19maW5pKHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spCit7CisJaW50IGk7 CisKKwlkcm1fc2NoZWRfam9iX2NsZWFudXAoJnRhc2stPmJhc2UpOworCisJZm9yIChpID0gMDsg aSA8IHRhc2stPm51bV9kZXA7IGkrKykKKwkJZG1hX2ZlbmNlX3B1dCh0YXNrLT5kZXBbaV0pOwor CisJa2ZyZWUodGFzay0+ZGVwKTsKKworCWlmICh0YXNrLT5ib3MpIHsKKwkJZm9yIChpID0gMDsg aSA8IHRhc2stPm51bV9ib3M7IGkrKykKKwkJCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZCgm dGFzay0+Ym9zW2ldLT5nZW0pOworCQlrZnJlZSh0YXNrLT5ib3MpOworCX0KKworCWxpbWFfdm1f cHV0KHRhc2stPnZtKTsKK30KKworaW50IGxpbWFfc2NoZWRfdGFza19hZGRfZGVwKHN0cnVjdCBs aW1hX3NjaGVkX3Rhc2sgKnRhc2ssIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCWludCBp LCBuZXdfZGVwID0gNDsKKworCS8qIHNhbWUgY29udGV4dCdzIGZlbmNlIGlzIGRlZmluaXRseSBl YXJsaWVyIHRoZW4gdGhpcyB0YXNrICovCisJaWYgKGZlbmNlLT5jb250ZXh0ID09IHRhc2stPmJh c2Uuc19mZW5jZS0+ZmluaXNoZWQuY29udGV4dCkgeworCQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsK KwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHRhc2stPmRlcCAmJiB0YXNrLT5udW1fZGVwID09IHRh c2stPm1heF9kZXApCisJCW5ld19kZXAgPSB0YXNrLT5tYXhfZGVwICogMjsKKworCWlmICh0YXNr LT5tYXhfZGVwIDwgbmV3X2RlcCkgeworCQl2b2lkICpkZXAgPSBrcmVhbGxvYyh0YXNrLT5kZXAs IHNpemVvZigqdGFzay0+ZGVwKSAqIG5ld19kZXAsIEdGUF9LRVJORUwpOworCisJCWlmICghZGVw KQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJdGFzay0+bWF4X2RlcCA9IG5ld19kZXA7CisJCXRh c2stPmRlcCA9IGRlcDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgdGFzay0+bnVtX2RlcDsgaSsr KSB7CisJCWlmICh0YXNrLT5kZXBbaV0tPmNvbnRleHQgPT0gZmVuY2UtPmNvbnRleHQgJiYKKwkJ ICAgIGRtYV9mZW5jZV9pc19sYXRlcihmZW5jZSwgdGFzay0+ZGVwW2ldKSkgeworCQkJZG1hX2Zl bmNlX3B1dCh0YXNrLT5kZXBbaV0pOworCQkJdGFzay0+ZGVwW2ldID0gZmVuY2U7CisJCQlyZXR1 cm4gMDsKKwkJfQorCX0KKworCXRhc2stPmRlcFt0YXNrLT5udW1fZGVwKytdID0gZmVuY2U7CisJ cmV0dXJuIDA7Cit9CisKK2ludCBsaW1hX3NjaGVkX2NvbnRleHRfaW5pdChzdHJ1Y3QgbGltYV9z Y2hlZF9waXBlICpwaXBlLAorCQkJICAgIHN0cnVjdCBsaW1hX3NjaGVkX2NvbnRleHQgKmNvbnRl eHQsCisJCQkgICAgYXRvbWljX3QgKmd1aWx0eSkKK3sKKwlzdHJ1Y3QgZHJtX3NjaGVkX3JxICpy cSA9IHBpcGUtPmJhc2Uuc2NoZWRfcnEgKyBEUk1fU0NIRURfUFJJT1JJVFlfTk9STUFMOworCisJ cmV0dXJuIGRybV9zY2hlZF9lbnRpdHlfaW5pdCgmY29udGV4dC0+YmFzZSwgJnJxLCAxLCBndWls dHkpOworfQorCit2b2lkIGxpbWFfc2NoZWRfY29udGV4dF9maW5pKHN0cnVjdCBsaW1hX3NjaGVk X3BpcGUgKnBpcGUsCisJCQkgICAgIHN0cnVjdCBsaW1hX3NjaGVkX2NvbnRleHQgKmNvbnRleHQp Cit7CisJZHJtX3NjaGVkX2VudGl0eV9maW5pKCZjb250ZXh0LT5iYXNlKTsKK30KKworc3RydWN0 IGRtYV9mZW5jZSAqbGltYV9zY2hlZF9jb250ZXh0X3F1ZXVlX3Rhc2soc3RydWN0IGxpbWFfc2No ZWRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCXN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2sp Cit7CisJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UgPSBkbWFfZmVuY2VfZ2V0KCZ0YXNrLT5iYXNl LnNfZmVuY2UtPmZpbmlzaGVkKTsKKworCWRybV9zY2hlZF9lbnRpdHlfcHVzaF9qb2IoJnRhc2st PmJhc2UsICZjb250ZXh0LT5iYXNlKTsKKwlyZXR1cm4gZmVuY2U7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgZG1hX2ZlbmNlICpsaW1hX3NjaGVkX2RlcGVuZGVuY3koc3RydWN0IGRybV9zY2hlZF9qb2Ig KmpvYiwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fc2NoZWRfZW50aXR5ICplbnRpdHkpCit7CisJ c3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzayA9IHRvX2xpbWFfdGFzayhqb2IpOworCWludCBp OworCisJZm9yIChpID0gMDsgaSA8IHRhc2stPm51bV9kZXA7IGkrKykgeworCQlzdHJ1Y3QgZG1h X2ZlbmNlICpmZW5jZSA9IHRhc2stPmRlcFtpXTsKKworCQlpZiAoIXRhc2stPmRlcFtpXSkKKwkJ CWNvbnRpbnVlOworCisJCXRhc2stPmRlcFtpXSA9IE5VTEw7CisKKwkJaWYgKCFkbWFfZmVuY2Vf aXNfc2lnbmFsZWQoZmVuY2UpKQorCQkJcmV0dXJuIGZlbmNlOworCisJCWRtYV9mZW5jZV9wdXQo ZmVuY2UpOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9mZW5j ZSAqbGltYV9zY2hlZF9ydW5fam9iKHN0cnVjdCBkcm1fc2NoZWRfam9iICpqb2IpCit7CisJc3Ry dWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzayA9IHRvX2xpbWFfdGFzayhqb2IpOworCXN0cnVjdCBs aW1hX3NjaGVkX3BpcGUgKnBpcGUgPSB0b19saW1hX3BpcGUoam9iLT5zY2hlZCk7CisJc3RydWN0 IGxpbWFfZmVuY2UgKmZlbmNlOworCXN0cnVjdCBkbWFfZmVuY2UgKnJldDsKKwlzdHJ1Y3QgbGlt YV92bSAqdm0gPSBOVUxMLCAqbGFzdF92bSA9IE5VTEw7CisJaW50IGk7CisKKwkvKiBhZnRlciBH UFUgcmVzZXQgKi8KKwlpZiAoam9iLT5zX2ZlbmNlLT5maW5pc2hlZC5lcnJvciA8IDApCisJCXJl dHVybiBOVUxMOworCisJZmVuY2UgPSBsaW1hX2ZlbmNlX2NyZWF0ZShwaXBlKTsKKwlpZiAoIWZl bmNlKQorCQlyZXR1cm4gTlVMTDsKKwl0YXNrLT5mZW5jZSA9ICZmZW5jZS0+YmFzZTsKKworCS8q IGZvciBjYWxsZXIgdXNhZ2Ugb2YgdGhlIGZlbmNlLCBvdGhlcndpc2UgaXJxIGhhbmRsZXIKKwkg KiBtYXkgY29uc3VtZSB0aGUgZmVuY2UgYmVmb3JlIGNhbGxlciB1c2UgaXQKKwkgKi8KKwlyZXQg PSBkbWFfZmVuY2VfZ2V0KHRhc2stPmZlbmNlKTsKKworCXBpcGUtPmN1cnJlbnRfdGFzayA9IHRh c2s7CisKKwkvKiB0aGlzIGlzIG5lZWRlZCBmb3IgTU1VIHRvIHdvcmsgY29ycmVjdGx5LCBvdGhl cndpc2UgR1AvUFAKKwkgKiB3aWxsIGhhbmcgb3IgcGFnZSBmYXVsdCBmb3IgdW5rbm93biByZWFz b24gYWZ0ZXIgcnVubmluZyBmb3IKKwkgKiBhIHdoaWxlLgorCSAqCisJICogTmVlZCB0byBpbnZl c3RpZ2F0ZToKKwkgKiAxLiBpcyBpdCByZWxhdGVkIHRvIFRMQgorCSAqIDIuIGhvdyBtdWNoIHBl cmZvcm1hbmNlIHdpbGwgYmUgYWZmZWN0ZWQgYnkgTDIgY2FjaGUgZmx1c2gKKwkgKiAzLiBjYW4g d2UgcmVkdWNlIHRoZSBjYWxsaW5nIG9mIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSBhbGwKKwkgKiAg ICBHUC9QUCB1c2UgdGhlIHNhbWUgTDIgY2FjaGUgb24gbWFsaTQwMAorCSAqCisJICogVE9ETzoK KwkgKiAxLiBtb3ZlIHRoaXMgdG8gdGFzayBmaW5pIHRvIHNhdmUgc29tZSB3YWl0IHRpbWU/CisJ ICogMi4gd2hlbiBHUC9QUCB1c2UgZGlmZmVyZW50IGwyIGNhY2hlLCBuZWVkIFBQIHdhaXQgR1Ag bDIKKwkgKiAgICBjYWNoZSBmbHVzaD8KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcGlwZS0+bnVt X2wyX2NhY2hlOyBpKyspCisJCWxpbWFfbDJfY2FjaGVfZmx1c2gocGlwZS0+bDJfY2FjaGVbaV0p OworCisJaWYgKHRhc2stPnZtICE9IHBpcGUtPmN1cnJlbnRfdm0pIHsKKwkJdm0gPSBsaW1hX3Zt X2dldCh0YXNrLT52bSk7CisJCWxhc3Rfdm0gPSBwaXBlLT5jdXJyZW50X3ZtOworCQlwaXBlLT5j dXJyZW50X3ZtID0gdGFzay0+dm07CisJfQorCisJaWYgKHBpcGUtPmJjYXN0X21tdSkKKwkJbGlt YV9tbXVfc3dpdGNoX3ZtKHBpcGUtPmJjYXN0X21tdSwgdm0pOworCWVsc2UgeworCQlmb3IgKGkg PSAwOyBpIDwgcGlwZS0+bnVtX21tdTsgaSsrKQorCQkJbGltYV9tbXVfc3dpdGNoX3ZtKHBpcGUt Pm1tdVtpXSwgdm0pOworCX0KKworCWlmIChsYXN0X3ZtKQorCQlsaW1hX3ZtX3B1dChsYXN0X3Zt KTsKKworCXBpcGUtPmVycm9yID0gZmFsc2U7CisJcGlwZS0+dGFza19ydW4ocGlwZSwgdGFzayk7 CisKKwlyZXR1cm4gdGFzay0+ZmVuY2U7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfc2NoZWRfaGFu ZGxlX2Vycm9yX3Rhc2soc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSwKKwkJCQkJIHN0cnVj dCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spCit7CisJZHJtX3NjaGVkX3N0b3AoJnBpcGUtPmJhc2Up OworCisJaWYgKHRhc2spCisJCWRybV9zY2hlZF9pbmNyZWFzZV9rYXJtYSgmdGFzay0+YmFzZSk7 CisKKwlwaXBlLT50YXNrX2Vycm9yKHBpcGUpOworCisJaWYgKHBpcGUtPmJjYXN0X21tdSkKKwkJ bGltYV9tbXVfcGFnZV9mYXVsdF9yZXN1bWUocGlwZS0+YmNhc3RfbW11KTsKKwllbHNlIHsKKwkJ aW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IHBpcGUtPm51bV9tbXU7IGkrKykKKwkJCWxpbWFf bW11X3BhZ2VfZmF1bHRfcmVzdW1lKHBpcGUtPm1tdVtpXSk7CisJfQorCisJaWYgKHBpcGUtPmN1 cnJlbnRfdm0pCisJCWxpbWFfdm1fcHV0KHBpcGUtPmN1cnJlbnRfdm0pOworCisJcGlwZS0+Y3Vy cmVudF92bSA9IE5VTEw7CisJcGlwZS0+Y3VycmVudF90YXNrID0gTlVMTDsKKworCWRybV9zY2hl ZF9yZXN1Ym1pdF9qb2JzKCZwaXBlLT5iYXNlKTsKKwlkcm1fc2NoZWRfc3RhcnQoJnBpcGUtPmJh c2UsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBsaW1hX3NjaGVkX3RpbWVkb3V0X2pvYihzdHJ1 Y3QgZHJtX3NjaGVkX2pvYiAqam9iKQoreworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUg PSB0b19saW1hX3BpcGUoam9iLT5zY2hlZCk7CisJc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFz ayA9IHRvX2xpbWFfdGFzayhqb2IpOworCisJRFJNX0VSUk9SKCJsaW1hIGpvYiB0aW1lb3V0XG4i KTsKKworCWxpbWFfc2NoZWRfaGFuZGxlX2Vycm9yX3Rhc2socGlwZSwgdGFzayk7Cit9CisKK3N0 YXRpYyB2b2lkIGxpbWFfc2NoZWRfZnJlZV9qb2Ioc3RydWN0IGRybV9zY2hlZF9qb2IgKmpvYikK K3sKKwlzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrID0gdG9fbGltYV90YXNrKGpvYik7CisJ c3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSA9IHRvX2xpbWFfcGlwZShqb2ItPnNjaGVkKTsK KwlzdHJ1Y3QgbGltYV92bSAqdm0gPSB0YXNrLT52bTsKKwlzdHJ1Y3QgbGltYV9ibyAqKmJvcyA9 IHRhc2stPmJvczsKKwlpbnQgaTsKKworCWRtYV9mZW5jZV9wdXQodGFzay0+ZmVuY2UpOworCisJ Zm9yIChpID0gMDsgaSA8IHRhc2stPm51bV9ib3M7IGkrKykKKwkJbGltYV92bV9ib19kZWwodm0s IGJvc1tpXSk7CisKKwlsaW1hX3NjaGVkX3Rhc2tfZmluaSh0YXNrKTsKKwlrbWVtX2NhY2hlX2Zy ZWUocGlwZS0+dGFza19zbGFiLCB0YXNrKTsKK30KKworY29uc3Qgc3RydWN0IGRybV9zY2hlZF9i YWNrZW5kX29wcyBsaW1hX3NjaGVkX29wcyA9IHsKKwkuZGVwZW5kZW5jeSA9IGxpbWFfc2NoZWRf ZGVwZW5kZW5jeSwKKwkucnVuX2pvYiA9IGxpbWFfc2NoZWRfcnVuX2pvYiwKKwkudGltZWRvdXRf am9iID0gbGltYV9zY2hlZF90aW1lZG91dF9qb2IsCisJLmZyZWVfam9iID0gbGltYV9zY2hlZF9m cmVlX2pvYiwKK307CisKK3N0YXRpYyB2b2lkIGxpbWFfc2NoZWRfZXJyb3Jfd29yayhzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSA9CisJ CWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGltYV9zY2hlZF9waXBlLCBlcnJvcl93b3JrKTsK KwlzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrID0gcGlwZS0+Y3VycmVudF90YXNrOworCisJ bGltYV9zY2hlZF9oYW5kbGVfZXJyb3JfdGFzayhwaXBlLCB0YXNrKTsKK30KKworaW50IGxpbWFf c2NoZWRfcGlwZV9pbml0KHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUsIGNvbnN0IGNoYXIg Km5hbWUpCit7CisJbG9uZyB0aW1lb3V0OworCisJaWYgKGxpbWFfc2NoZWRfdGltZW91dF9tcyA8 PSAwKQorCQl0aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7CisJZWxzZQorCQl0aW1lb3V0 ID0gbXNlY3NfdG9famlmZmllcyhsaW1hX3NjaGVkX3RpbWVvdXRfbXMpOworCisJcGlwZS0+ZmVu Y2VfY29udGV4dCA9IGRtYV9mZW5jZV9jb250ZXh0X2FsbG9jKDEpOworCXNwaW5fbG9ja19pbml0 KCZwaXBlLT5mZW5jZV9sb2NrKTsKKworCUlOSVRfV09SSygmcGlwZS0+ZXJyb3Jfd29yaywgbGlt YV9zY2hlZF9lcnJvcl93b3JrKTsKKworCXJldHVybiBkcm1fc2NoZWRfaW5pdCgmcGlwZS0+YmFz ZSwgJmxpbWFfc2NoZWRfb3BzLCAxLCAwLCB0aW1lb3V0LCBuYW1lKTsKK30KKwordm9pZCBsaW1h X3NjaGVkX3BpcGVfZmluaShzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlKQoreworCWRybV9z Y2hlZF9maW5pKCZwaXBlLT5iYXNlKTsKK30KKwordm9pZCBsaW1hX3NjaGVkX3BpcGVfdGFza19k b25lKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUpCit7CisJaWYgKHBpcGUtPmVycm9yKQor CQlzY2hlZHVsZV93b3JrKCZwaXBlLT5lcnJvcl93b3JrKTsKKwllbHNlIHsKKwkJc3RydWN0IGxp bWFfc2NoZWRfdGFzayAqdGFzayA9IHBpcGUtPmN1cnJlbnRfdGFzazsKKworCQlwaXBlLT50YXNr X2ZpbmkocGlwZSk7CisJCWRtYV9mZW5jZV9zaWduYWwodGFzay0+ZmVuY2UpOworCX0KK30KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfc2NoZWQuaCBiL2RyaXZlcnMvZ3B1 L2RybS9saW1hL2xpbWFfc2NoZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLmIwMTdjZmE3ZTMyNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfc2NoZWQuaApAQCAtMCwwICsxLDEwNCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1 IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVmIF9fTElNQV9TQ0hFRF9IX18KKyNkZWZp bmUgX19MSU1BX1NDSEVEX0hfXworCisjaW5jbHVkZSA8ZHJtL2dwdV9zY2hlZHVsZXIuaD4KKwor c3RydWN0IGxpbWFfdm07CisKK3N0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgeworCXN0cnVjdCBkcm1f c2NoZWRfam9iIGJhc2U7CisKKwlzdHJ1Y3QgbGltYV92bSAqdm07CisJdm9pZCAqZnJhbWU7CisK KwlzdHJ1Y3QgZG1hX2ZlbmNlICoqZGVwOworCWludCBudW1fZGVwOworCWludCBtYXhfZGVwOwor CisJc3RydWN0IGxpbWFfYm8gKipib3M7CisJaW50IG51bV9ib3M7CisKKwkvKiBwaXBlIGZlbmNl ICovCisJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cit9OworCitzdHJ1Y3QgbGltYV9zY2hlZF9j b250ZXh0IHsKKwlzdHJ1Y3QgZHJtX3NjaGVkX2VudGl0eSBiYXNlOworfTsKKworI2RlZmluZSBM SU1BX1NDSEVEX1BJUEVfTUFYX01NVSAgICAgICA4CisjZGVmaW5lIExJTUFfU0NIRURfUElQRV9N QVhfTDJfQ0FDSEUgIDIKKyNkZWZpbmUgTElNQV9TQ0hFRF9QSVBFX01BWF9QUk9DRVNTT1IgOAor CitzdHJ1Y3QgbGltYV9pcDsKKworc3RydWN0IGxpbWFfc2NoZWRfcGlwZSB7CisJc3RydWN0IGRy bV9ncHVfc2NoZWR1bGVyIGJhc2U7CisKKwl1NjQgZmVuY2VfY29udGV4dDsKKwl1MzIgZmVuY2Vf c2Vxbm87CisJc3BpbmxvY2tfdCBmZW5jZV9sb2NrOworCisJc3RydWN0IGxpbWFfc2NoZWRfdGFz ayAqY3VycmVudF90YXNrOworCXN0cnVjdCBsaW1hX3ZtICpjdXJyZW50X3ZtOworCisJc3RydWN0 IGxpbWFfaXAgKm1tdVtMSU1BX1NDSEVEX1BJUEVfTUFYX01NVV07CisJaW50IG51bV9tbXU7CisK KwlzdHJ1Y3QgbGltYV9pcCAqbDJfY2FjaGVbTElNQV9TQ0hFRF9QSVBFX01BWF9MMl9DQUNIRV07 CisJaW50IG51bV9sMl9jYWNoZTsKKworCXN0cnVjdCBsaW1hX2lwICpwcm9jZXNzb3JbTElNQV9T Q0hFRF9QSVBFX01BWF9QUk9DRVNTT1JdOworCWludCBudW1fcHJvY2Vzc29yOworCisJc3RydWN0 IGxpbWFfaXAgKmJjYXN0X3Byb2Nlc3NvcjsKKwlzdHJ1Y3QgbGltYV9pcCAqYmNhc3RfbW11Owor CisJdTMyIGRvbmU7CisJYm9vbCBlcnJvcjsKKwlhdG9taWNfdCB0YXNrOworCisJaW50IGZyYW1l X3NpemU7CisJc3RydWN0IGttZW1fY2FjaGUgKnRhc2tfc2xhYjsKKworCWludCAoKnRhc2tfdmFs aWRhdGUpKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUsIHN0cnVjdCBsaW1hX3NjaGVkX3Rh c2sgKnRhc2spOworCXZvaWQgKCp0YXNrX3J1bikoc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlw ZSwgc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzayk7CisJdm9pZCAoKnRhc2tfZmluaSkoc3Ry dWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSk7CisJdm9pZCAoKnRhc2tfZXJyb3IpKHN0cnVjdCBs aW1hX3NjaGVkX3BpcGUgKnBpcGUpOworCXZvaWQgKCp0YXNrX21tdV9lcnJvcikoc3RydWN0IGxp bWFfc2NoZWRfcGlwZSAqcGlwZSk7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXJyb3Jfd29yazsK K307CisKK2ludCBsaW1hX3NjaGVkX3Rhc2tfaW5pdChzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0 YXNrLAorCQkJIHN0cnVjdCBsaW1hX3NjaGVkX2NvbnRleHQgKmNvbnRleHQsCisJCQkgc3RydWN0 IGxpbWFfYm8gKipib3MsIGludCBudW1fYm9zLAorCQkJIHN0cnVjdCBsaW1hX3ZtICp2bSk7Cit2 b2lkIGxpbWFfc2NoZWRfdGFza19maW5pKHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spOwor aW50IGxpbWFfc2NoZWRfdGFza19hZGRfZGVwKHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2ss IHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKTsKKworaW50IGxpbWFfc2NoZWRfY29udGV4dF9pbml0 KHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUsCisJCQkgICAgc3RydWN0IGxpbWFfc2NoZWRf Y29udGV4dCAqY29udGV4dCwKKwkJCSAgICBhdG9taWNfdCAqZ3VpbHR5KTsKK3ZvaWQgbGltYV9z Y2hlZF9jb250ZXh0X2Zpbmkoc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSwKKwkJCSAgICAg c3RydWN0IGxpbWFfc2NoZWRfY29udGV4dCAqY29udGV4dCk7CitzdHJ1Y3QgZG1hX2ZlbmNlICps aW1hX3NjaGVkX2NvbnRleHRfcXVldWVfdGFzayhzdHJ1Y3QgbGltYV9zY2hlZF9jb250ZXh0ICpj b250ZXh0LAorCQkJCQkJc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzayk7CisKK2ludCBsaW1h X3NjaGVkX3BpcGVfaW5pdChzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlLCBjb25zdCBjaGFy ICpuYW1lKTsKK3ZvaWQgbGltYV9zY2hlZF9waXBlX2Zpbmkoc3RydWN0IGxpbWFfc2NoZWRfcGlw ZSAqcGlwZSk7Cit2b2lkIGxpbWFfc2NoZWRfcGlwZV90YXNrX2RvbmUoc3RydWN0IGxpbWFfc2No ZWRfcGlwZSAqcGlwZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaW1hX3NjaGVkX3BpcGVfbW11 X2Vycm9yKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUpCit7CisJcGlwZS0+ZXJyb3IgPSB0 cnVlOworCXBpcGUtPnRhc2tfbW11X2Vycm9yKHBpcGUpOworfQorCitpbnQgbGltYV9zY2hlZF9z bGFiX2luaXQodm9pZCk7Cit2b2lkIGxpbWFfc2NoZWRfc2xhYl9maW5pKHZvaWQpOworCisjZW5k aWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfdm0uYyBiL2RyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfdm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLjE5ZTg4Y2ExNjUyNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfdm0uYwpAQCAtMCwwICsxLDI4MiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4 MjVAZ21haWwuY29tPiAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxp bnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlICJsaW1hX2RldmljZS5oIgorI2luY2x1ZGUg ImxpbWFfdm0uaCIKKyNpbmNsdWRlICJsaW1hX29iamVjdC5oIgorI2luY2x1ZGUgImxpbWFfcmVn cy5oIgorCitzdHJ1Y3QgbGltYV9ib192YSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXVu c2lnbmVkIGludCByZWZfY291bnQ7CisKKwlzdHJ1Y3QgZHJtX21tX25vZGUgbm9kZTsKKworCXN0 cnVjdCBsaW1hX3ZtICp2bTsKK307CisKKyNkZWZpbmUgTElNQV9WTV9QRF9TSElGVCAyMgorI2Rl ZmluZSBMSU1BX1ZNX1BUX1NISUZUIDEyCisjZGVmaW5lIExJTUFfVk1fUEJfU0hJRlQgKExJTUFf Vk1fUERfU0hJRlQgKyBMSU1BX1ZNX05VTV9QVF9QRVJfQlRfU0hJRlQpCisjZGVmaW5lIExJTUFf Vk1fQlRfU0hJRlQgTElNQV9WTV9QVF9TSElGVAorCisjZGVmaW5lIExJTUFfVk1fUFRfTUFTSyAo KDEgPDwgTElNQV9WTV9QRF9TSElGVCkgLSAxKQorI2RlZmluZSBMSU1BX1ZNX0JUX01BU0sgKCgx IDw8IExJTUFfVk1fUEJfU0hJRlQpIC0gMSkKKworI2RlZmluZSBMSU1BX1BERSh2YSkgKHZhID4+ IExJTUFfVk1fUERfU0hJRlQpCisjZGVmaW5lIExJTUFfUFRFKHZhKSAoKHZhICYgTElNQV9WTV9Q VF9NQVNLKSA+PiBMSU1BX1ZNX1BUX1NISUZUKQorI2RlZmluZSBMSU1BX1BCRSh2YSkgKHZhID4+ IExJTUFfVk1fUEJfU0hJRlQpCisjZGVmaW5lIExJTUFfQlRFKHZhKSAoKHZhICYgTElNQV9WTV9C VF9NQVNLKSA+PiBMSU1BX1ZNX0JUX1NISUZUKQorCisKK3N0YXRpYyB2b2lkIGxpbWFfdm1fdW5t YXBfcGFnZV90YWJsZShzdHJ1Y3QgbGltYV92bSAqdm0sIHUzMiBzdGFydCwgdTMyIGVuZCkKK3sK Kwl1MzIgYWRkcjsKKworCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDw9IGVuZDsgYWRkciArPSBM SU1BX1BBR0VfU0laRSkgeworCQl1MzIgcGJlID0gTElNQV9QQkUoYWRkcik7CisJCXUzMiBidGUg PSBMSU1BX0JURShhZGRyKTsKKworCQl2bS0+YnRzW3BiZV0uY3B1W2J0ZV0gPSAwOworCX0KK30K Kworc3RhdGljIGludCBsaW1hX3ZtX21hcF9wYWdlX3RhYmxlKHN0cnVjdCBsaW1hX3ZtICp2bSwg ZG1hX2FkZHJfdCAqZG1hLAorCQkJCSAgdTMyIHN0YXJ0LCB1MzIgZW5kKQoreworCXU2NCBhZGRy OworCWludCBpID0gMDsKKworCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDw9IGVuZDsgYWRkciAr PSBMSU1BX1BBR0VfU0laRSkgeworCQl1MzIgcGJlID0gTElNQV9QQkUoYWRkcik7CisJCXUzMiBi dGUgPSBMSU1BX0JURShhZGRyKTsKKworCQlpZiAoIXZtLT5idHNbcGJlXS5jcHUpIHsKKwkJCWRt YV9hZGRyX3QgcHRzOworCQkJdTMyICpwZDsKKwkJCWludCBqOworCisJCQl2bS0+YnRzW3BiZV0u Y3B1ID0gZG1hX2FsbG9jX3djKAorCQkJCXZtLT5kZXYtPmRldiwgTElNQV9QQUdFX1NJWkUgPDwg TElNQV9WTV9OVU1fUFRfUEVSX0JUX1NISUZULAorCQkJCSZ2bS0+YnRzW3BiZV0uZG1hLCBHRlBf S0VSTkVMIHwgX19HRlBfWkVSTyk7CisJCQlpZiAoIXZtLT5idHNbcGJlXS5jcHUpIHsKKwkJCQlp ZiAoYWRkciAhPSBzdGFydCkKKwkJCQkJbGltYV92bV91bm1hcF9wYWdlX3RhYmxlKHZtLCBzdGFy dCwgYWRkciAtIDEpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCisJCQlwdHMgPSB2bS0+ YnRzW3BiZV0uZG1hOworCQkJcGQgPSB2bS0+cGQuY3B1ICsgKHBiZSA8PCBMSU1BX1ZNX05VTV9Q VF9QRVJfQlRfU0hJRlQpOworCQkJZm9yIChqID0gMDsgaiA8IExJTUFfVk1fTlVNX1BUX1BFUl9C VDsgaisrKSB7CisJCQkJcGRbal0gPSBwdHMgfCBMSU1BX1ZNX0ZMQUdfUFJFU0VOVDsKKwkJCQlw dHMgKz0gTElNQV9QQUdFX1NJWkU7CisJCQl9CisJCX0KKworCQl2bS0+YnRzW3BiZV0uY3B1W2J0 ZV0gPSBkbWFbaSsrXSB8IExJTUFfVk1fRkxBR1NfQ0FDSEU7CisJfQorCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgbGltYV9ib192YSAqCitsaW1hX3ZtX2JvX2ZpbmQoc3RydWN0IGxp bWFfdm0gKnZtLCBzdHJ1Y3QgbGltYV9ibyAqYm8pCit7CisJc3RydWN0IGxpbWFfYm9fdmEgKmJv X3ZhLCAqcmV0ID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYm9fdmEsICZiby0+dmEs IGxpc3QpIHsKKwkJaWYgKGJvX3ZhLT52bSA9PSB2bSkgeworCQkJcmV0ID0gYm9fdmE7CisJCQli cmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCBsaW1hX3ZtX2JvX2FkZChz dHJ1Y3QgbGltYV92bSAqdm0sIHN0cnVjdCBsaW1hX2JvICpibywgYm9vbCBjcmVhdGUpCit7CisJ c3RydWN0IGxpbWFfYm9fdmEgKmJvX3ZhOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZiby0+ bG9jayk7CisKKwlib192YSA9IGxpbWFfdm1fYm9fZmluZCh2bSwgYm8pOworCWlmIChib192YSkg eworCQlib192YS0+cmVmX2NvdW50Kys7CisJCW11dGV4X3VubG9jaygmYm8tPmxvY2spOworCQly ZXR1cm4gMDsKKwl9CisKKwkvKiBzaG91bGQgbm90IGNyZWF0ZSBuZXcgYm9fdmEgaWYgbm90IGFz a2VkIGJ5IGNhbGxlciAqLworCWlmICghY3JlYXRlKSB7CisJCW11dGV4X3VubG9jaygmYm8tPmxv Y2spOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlib192YSA9IGt6YWxsb2Moc2l6ZW9mKCpi b192YSksIEdGUF9LRVJORUwpOworCWlmICghYm9fdmEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJ Z290byBlcnJfb3V0MDsKKwl9CisKKwlib192YS0+dm0gPSB2bTsKKwlib192YS0+cmVmX2NvdW50 ID0gMTsKKworCW11dGV4X2xvY2soJnZtLT5sb2NrKTsKKworCWVyciA9IGRybV9tbV9pbnNlcnRf bm9kZSgmdm0tPm1tLCAmYm9fdmEtPm5vZGUsIGJvLT5nZW0uc2l6ZSk7CisJaWYgKGVycikKKwkJ Z290byBlcnJfb3V0MTsKKworCWVyciA9IGxpbWFfdm1fbWFwX3BhZ2VfdGFibGUodm0sIGJvLT5w YWdlc19kbWFfYWRkciwgYm9fdmEtPm5vZGUuc3RhcnQsCisJCQkJICAgICBib192YS0+bm9kZS5z dGFydCArIGJvX3ZhLT5ub2RlLnNpemUgLSAxKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQy OworCisJbXV0ZXhfdW5sb2NrKCZ2bS0+bG9jayk7CisKKwlsaXN0X2FkZF90YWlsKCZib192YS0+ bGlzdCwgJmJvLT52YSk7CisKKwltdXRleF91bmxvY2soJmJvLT5sb2NrKTsKKwlyZXR1cm4gMDsK KworZXJyX291dDI6CisJZHJtX21tX3JlbW92ZV9ub2RlKCZib192YS0+bm9kZSk7CitlcnJfb3V0 MToKKwltdXRleF91bmxvY2soJnZtLT5sb2NrKTsKKwlrZnJlZShib192YSk7CitlcnJfb3V0MDoK KwltdXRleF91bmxvY2soJmJvLT5sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIGxpbWFf dm1fYm9fZGVsKHN0cnVjdCBsaW1hX3ZtICp2bSwgc3RydWN0IGxpbWFfYm8gKmJvKQoreworCXN0 cnVjdCBsaW1hX2JvX3ZhICpib192YTsKKworCW11dGV4X2xvY2soJmJvLT5sb2NrKTsKKworCWJv X3ZhID0gbGltYV92bV9ib19maW5kKHZtLCBibyk7CisJaWYgKC0tYm9fdmEtPnJlZl9jb3VudCA+ IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZiby0+bG9jayk7CisJCXJldHVybjsKKwl9CisKKwltdXRl eF9sb2NrKCZ2bS0+bG9jayk7CisKKwlsaW1hX3ZtX3VubWFwX3BhZ2VfdGFibGUodm0sIGJvX3Zh LT5ub2RlLnN0YXJ0LAorCQkJCSBib192YS0+bm9kZS5zdGFydCArIGJvX3ZhLT5ub2RlLnNpemUg LSAxKTsKKworCWRybV9tbV9yZW1vdmVfbm9kZSgmYm9fdmEtPm5vZGUpOworCisJbXV0ZXhfdW5s b2NrKCZ2bS0+bG9jayk7CisKKwlsaXN0X2RlbCgmYm9fdmEtPmxpc3QpOworCisJbXV0ZXhfdW5s b2NrKCZiby0+bG9jayk7CisKKwlrZnJlZShib192YSk7Cit9CisKK3UzMiBsaW1hX3ZtX2dldF92 YShzdHJ1Y3QgbGltYV92bSAqdm0sIHN0cnVjdCBsaW1hX2JvICpibykKK3sKKwlzdHJ1Y3QgbGlt YV9ib192YSAqYm9fdmE7CisJdTMyIHJldDsKKworCW11dGV4X2xvY2soJmJvLT5sb2NrKTsKKwor CWJvX3ZhID0gbGltYV92bV9ib19maW5kKHZtLCBibyk7CisJcmV0ID0gYm9fdmEtPm5vZGUuc3Rh cnQ7CisKKwltdXRleF91bmxvY2soJmJvLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 cnVjdCBsaW1hX3ZtICpsaW1hX3ZtX2NyZWF0ZShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldikKK3sK KwlzdHJ1Y3QgbGltYV92bSAqdm07CisKKwl2bSA9IGt6YWxsb2Moc2l6ZW9mKCp2bSksIEdGUF9L RVJORUwpOworCWlmICghdm0pCisJCXJldHVybiBOVUxMOworCisJdm0tPmRldiA9IGRldjsKKwlt dXRleF9pbml0KCZ2bS0+bG9jayk7CisJa3JlZl9pbml0KCZ2bS0+cmVmY291bnQpOworCisJdm0t PnBkLmNwdSA9IGRtYV9hbGxvY193YyhkZXYtPmRldiwgTElNQV9QQUdFX1NJWkUsICZ2bS0+cGQu ZG1hLAorCQkJCSAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOworCWlmICghdm0tPnBkLmNwdSkK KwkJZ290byBlcnJfb3V0MDsKKworCWlmIChkZXYtPmRsYnVfY3B1KSB7CisJCWludCBlcnIgPSBs aW1hX3ZtX21hcF9wYWdlX3RhYmxlKAorCQkJdm0sICZkZXYtPmRsYnVfZG1hLCBMSU1BX1ZBX1JF U0VSVkVfRExCVSwKKwkJCUxJTUFfVkFfUkVTRVJWRV9ETEJVICsgTElNQV9QQUdFX1NJWkUgLSAx KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dDE7CisJfQorCisJZHJtX21tX2luaXQoJnZt LT5tbSwgZGV2LT52YV9zdGFydCwgZGV2LT52YV9lbmQgLSBkZXYtPnZhX3N0YXJ0KTsKKworCXJl dHVybiB2bTsKKworZXJyX291dDE6CisJZG1hX2ZyZWVfd2MoZGV2LT5kZXYsIExJTUFfUEFHRV9T SVpFLCB2bS0+cGQuY3B1LCB2bS0+cGQuZG1hKTsKK2Vycl9vdXQwOgorCWtmcmVlKHZtKTsKKwly ZXR1cm4gTlVMTDsKK30KKwordm9pZCBsaW1hX3ZtX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYp Cit7CisJc3RydWN0IGxpbWFfdm0gKnZtID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBsaW1h X3ZtLCByZWZjb3VudCk7CisJaW50IGk7CisKKwlkcm1fbW1fdGFrZWRvd24oJnZtLT5tbSk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgTElNQV9WTV9OVU1fQlQ7IGkrKykgeworCQlpZiAodm0tPmJ0c1tp XS5jcHUpCisJCQlkbWFfZnJlZV93Yyh2bS0+ZGV2LT5kZXYsIExJTUFfUEFHRV9TSVpFIDw8IExJ TUFfVk1fTlVNX1BUX1BFUl9CVF9TSElGVCwKKwkJCQkgICAgdm0tPmJ0c1tpXS5jcHUsIHZtLT5i dHNbaV0uZG1hKTsKKwl9CisKKwlpZiAodm0tPnBkLmNwdSkKKwkJZG1hX2ZyZWVfd2Modm0tPmRl di0+ZGV2LCBMSU1BX1BBR0VfU0laRSwgdm0tPnBkLmNwdSwgdm0tPnBkLmRtYSk7CisKKwlrZnJl ZSh2bSk7Cit9CisKK3ZvaWQgbGltYV92bV9wcmludChzdHJ1Y3QgbGltYV92bSAqdm0pCit7CisJ aW50IGksIGosIGs7CisJdTMyICpwZCwgKnB0OworCisJaWYgKCF2bS0+cGQuY3B1KQorCQlyZXR1 cm47CisKKwlwZCA9IHZtLT5wZC5jcHU7CisJZm9yIChpID0gMDsgaSA8IExJTUFfVk1fTlVNX0JU OyBpKyspIHsKKwkJaWYgKCF2bS0+YnRzW2ldLmNwdSkKKwkJCWNvbnRpbnVlOworCisJCXB0ID0g dm0tPmJ0c1tpXS5jcHU7CisJCWZvciAoaiA9IDA7IGogPCBMSU1BX1ZNX05VTV9QVF9QRVJfQlQ7 IGorKykgeworCQkJaW50IGlkeCA9IChpIDw8IExJTUFfVk1fTlVNX1BUX1BFUl9CVF9TSElGVCkg KyBqOworCisJCQlwcmludGsoS0VSTl9JTkZPICJsaW1hIHZtIHBkICUwM3g6JTA4eFxuIiwgaWR4 LCBwZFtpZHhdKTsKKworCQkJZm9yIChrID0gMDsgayA8IExJTUFfUEFHRV9FTlRfTlVNOyBrKysp IHsKKwkJCQl1MzIgcHRlID0gKnB0Kys7CisKKwkJCQlpZiAocHRlKQorCQkJCQlwcmludGsoS0VS Tl9JTkZPICIgIHB0ICUwM3g6JTA4eFxuIiwgaywgcHRlKTsKKwkJCX0KKwkJfQorCX0KK30KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfdm0uaCBiL2RyaXZlcnMvZ3B1L2Ry bS9saW1hL2xpbWFfdm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LmNhZWUyZjhhMjliNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xp bWFfdm0uaApAQCAtMCwwICsxLDYyIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCBPUiBNSVQgKi8KKy8qIENvcHlyaWdodCAyMDE3LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBn bWFpbC5jb20+ICovCisKKyNpZm5kZWYgX19MSU1BX1ZNX0hfXworI2RlZmluZSBfX0xJTUFfVk1f SF9fCisKKyNpbmNsdWRlIDxkcm0vZHJtX21tLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgor CisjZGVmaW5lIExJTUFfUEFHRV9TSVpFICAgIDQwOTYKKyNkZWZpbmUgTElNQV9QQUdFX01BU0sg ICAgKExJTUFfUEFHRV9TSVpFIC0gMSkKKyNkZWZpbmUgTElNQV9QQUdFX0VOVF9OVU0gKExJTUFf UEFHRV9TSVpFIC8gc2l6ZW9mKHUzMikpCisKKyNkZWZpbmUgTElNQV9WTV9OVU1fUFRfUEVSX0JU X1NISUZUIDMKKyNkZWZpbmUgTElNQV9WTV9OVU1fUFRfUEVSX0JUICgxIDw8IExJTUFfVk1fTlVN X1BUX1BFUl9CVF9TSElGVCkKKyNkZWZpbmUgTElNQV9WTV9OVU1fQlQgKExJTUFfUEFHRV9FTlRf TlVNID4+IExJTUFfVk1fTlVNX1BUX1BFUl9CVF9TSElGVCkKKworI2RlZmluZSBMSU1BX1ZBX1JF U0VSVkVfU1RBUlQgIDB4RkZGMDAwMDAKKyNkZWZpbmUgTElNQV9WQV9SRVNFUlZFX0RMQlUgICBM SU1BX1ZBX1JFU0VSVkVfU1RBUlQKKyNkZWZpbmUgTElNQV9WQV9SRVNFUlZFX0VORCAgICAweDEw MDAwMDAwMAorCitzdHJ1Y3QgbGltYV9kZXZpY2U7CisKK3N0cnVjdCBsaW1hX3ZtX3BhZ2Ugewor CXUzMiAqY3B1OworCWRtYV9hZGRyX3QgZG1hOworfTsKKworc3RydWN0IGxpbWFfdm0geworCXN0 cnVjdCBtdXRleCBsb2NrOworCXN0cnVjdCBrcmVmIHJlZmNvdW50OworCisJc3RydWN0IGRybV9t bSBtbTsKKworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2OworCisJc3RydWN0IGxpbWFfdm1fcGFn ZSBwZDsKKwlzdHJ1Y3QgbGltYV92bV9wYWdlIGJ0c1tMSU1BX1ZNX05VTV9CVF07Cit9OworCitp bnQgbGltYV92bV9ib19hZGQoc3RydWN0IGxpbWFfdm0gKnZtLCBzdHJ1Y3QgbGltYV9ibyAqYm8s IGJvb2wgY3JlYXRlKTsKK3ZvaWQgbGltYV92bV9ib19kZWwoc3RydWN0IGxpbWFfdm0gKnZtLCBz dHJ1Y3QgbGltYV9ibyAqYm8pOworCit1MzIgbGltYV92bV9nZXRfdmEoc3RydWN0IGxpbWFfdm0g KnZtLCBzdHJ1Y3QgbGltYV9ibyAqYm8pOworCitzdHJ1Y3QgbGltYV92bSAqbGltYV92bV9jcmVh dGUoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpOwordm9pZCBsaW1hX3ZtX3JlbGVhc2Uoc3RydWN0 IGtyZWYgKmtyZWYpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsaW1hX3ZtICpsaW1hX3ZtX2dl dChzdHJ1Y3QgbGltYV92bSAqdm0pCit7CisJa3JlZl9nZXQoJnZtLT5yZWZjb3VudCk7CisJcmV0 dXJuIHZtOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGltYV92bV9wdXQoc3RydWN0IGxpbWFf dm0gKnZtKQoreworCWtyZWZfcHV0KCZ2bS0+cmVmY291bnQsIGxpbWFfdm1fcmVsZWFzZSk7Cit9 CisKK3ZvaWQgbGltYV92bV9wcmludChzdHJ1Y3QgbGltYV92bSAqdm0pOworCisjZW5kaWYKZGlm ZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vbGltYV9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0v bGltYV9kcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA1Zjhj OTEwZDdmYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vbGltYV9kcm0uaApA QCAtMCwwICsxLDE2NCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wIFdJ VEggTGludXgtc3lzY2FsbC1ub3RlKSBPUiBNSVQgKi8KKy8qIENvcHlyaWdodCAyMDE3LTIwMTgg UWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNpZm5kZWYgX19MSU1BX0RSTV9IX18K KyNkZWZpbmUgX19MSU1BX0RSTV9IX18KKworI2luY2x1ZGUgImRybS5oIgorCisjaWYgZGVmaW5l ZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2VudW0gZHJtX2xpbWFfcGFy YW1fZ3B1X2lkIHsKKwlEUk1fTElNQV9QQVJBTV9HUFVfSURfVU5LTk9XTiwKKwlEUk1fTElNQV9Q QVJBTV9HUFVfSURfTUFMSTQwMCwKKwlEUk1fTElNQV9QQVJBTV9HUFVfSURfTUFMSTQ1MCwKK307 CisKK2VudW0gZHJtX2xpbWFfcGFyYW0geworCURSTV9MSU1BX1BBUkFNX0dQVV9JRCwKKwlEUk1f TElNQV9QQVJBTV9OVU1fUFAsCisJRFJNX0xJTUFfUEFSQU1fR1BfVkVSU0lPTiwKKwlEUk1fTElN QV9QQVJBTV9QUF9WRVJTSU9OLAorfTsKKworLyoqCisgKiBnZXQgdmFyaW91cyBpbmZvcm1hdGlv biBvZiB0aGUgR1BVCisgKi8KK3N0cnVjdCBkcm1fbGltYV9nZXRfcGFyYW0geworCV9fdTMyIHBh cmFtOyAvKiBpbiwgdmFsdWUgaW4gZW51bSBkcm1fbGltYV9wYXJhbSAqLworCV9fdTMyIHBhZDsg ICAvKiBwYWQsIG11c3QgYmUgemVybyAqLworCV9fdTY0IHZhbHVlOyAvKiBvdXQsIHBhcmFtZXRl ciB2YWx1ZSAqLworfTsKKworLyoqCisgKiBjcmVhdGUgYSBidWZmZXIgZm9yIHVzZWQgYnkgR1BV CisgKi8KK3N0cnVjdCBkcm1fbGltYV9nZW1fY3JlYXRlIHsKKwlfX3UzMiBzaXplOyAgICAvKiBp biwgYnVmZmVyIHNpemUgKi8KKwlfX3UzMiBmbGFnczsgICAvKiBpbiwgY3VycmVudGx5IG5vIGZs YWdzLCBtdXN0IGJlIHplcm8gKi8KKwlfX3UzMiBoYW5kbGU7ICAvKiBvdXQsIEdFTSBidWZmZXIg aGFuZGxlICovCisJX191MzIgcGFkOyAgICAgLyogcGFkLCBtdXN0IGJlIHplcm8gKi8KK307CisK Ky8qKgorICogZ2V0IGluZm9ybWF0aW9uIG9mIGEgYnVmZmVyCisgKi8KK3N0cnVjdCBkcm1fbGlt YV9nZW1faW5mbyB7CisJX191MzIgaGFuZGxlOyAgLyogaW4sIEdFTSBidWZmZXIgaGFuZGxlICov CisJX191MzIgdmE7ICAgICAgLyogb3V0LCB2aXJ0dWFsIGFkZHJlc3MgbWFwcGVkIGludG8gR1BV IE1NVSAqLworCV9fdTY0IG9mZnNldDsgIC8qIG91dCwgdXNlZCB0byBtbWFwIHRoaXMgYnVmZmVy IHRvIENQVSAqLworfTsKKworI2RlZmluZSBMSU1BX1NVQk1JVF9CT19SRUFEICAgMHgwMQorI2Rl ZmluZSBMSU1BX1NVQk1JVF9CT19XUklURSAgMHgwMgorCisvKiBidWZmZXIgaW5mb3JtYXRpb24g dXNlZCBieSBvbmUgdGFzayAqLworc3RydWN0IGRybV9saW1hX2dlbV9zdWJtaXRfYm8geworCV9f dTMyIGhhbmRsZTsgIC8qIGluLCBHRU0gYnVmZmVyIGhhbmRsZSAqLworCV9fdTMyIGZsYWdzOyAg IC8qIGluLCBidWZmZXIgcmVhZC93cml0ZSBieSBHUFUgKi8KK307CisKKyNkZWZpbmUgTElNQV9H UF9GUkFNRV9SRUdfTlVNIDYKKworLyogZnJhbWUgdXNlZCB0byBzZXR1cCBHUCBmb3IgZWFjaCB0 YXNrICovCitzdHJ1Y3QgZHJtX2xpbWFfZ3BfZnJhbWUgeworCV9fdTMyIGZyYW1lW0xJTUFfR1Bf RlJBTUVfUkVHX05VTV07Cit9OworCisjZGVmaW5lIExJTUFfUFBfRlJBTUVfUkVHX05VTSAyMwor I2RlZmluZSBMSU1BX1BQX1dCX1JFR19OVU0gMTIKKworLyogZnJhbWUgdXNlZCB0byBzZXR1cCBt YWxpNDAwIEdQVSBQUCBmb3IgZWFjaCB0YXNrICovCitzdHJ1Y3QgZHJtX2xpbWFfbTQwMF9wcF9m cmFtZSB7CisJX191MzIgZnJhbWVbTElNQV9QUF9GUkFNRV9SRUdfTlVNXTsKKwlfX3UzMiBudW1f cHA7CisJX191MzIgd2JbMyAqIExJTUFfUFBfV0JfUkVHX05VTV07CisJX191MzIgcGxidV9hcnJh eV9hZGRyZXNzWzRdOworCV9fdTMyIGZyYWdtZW50X3N0YWNrX2FkZHJlc3NbNF07Cit9OworCisv KiBmcmFtZSB1c2VkIHRvIHNldHVwIG1hbGk0NTAgR1BVIFBQIGZvciBlYWNoIHRhc2sgKi8KK3N0 cnVjdCBkcm1fbGltYV9tNDUwX3BwX2ZyYW1lIHsKKwlfX3UzMiBmcmFtZVtMSU1BX1BQX0ZSQU1F X1JFR19OVU1dOworCV9fdTMyIG51bV9wcDsKKwlfX3UzMiB3YlszICogTElNQV9QUF9XQl9SRUdf TlVNXTsKKwlfX3UzMiB1c2VfZGxidTsKKwlfX3UzMiBfcGFkOworCXVuaW9uIHsKKwkJX191MzIg cGxidV9hcnJheV9hZGRyZXNzWzhdOworCQlfX3UzMiBkbGJ1X3JlZ3NbNF07CisJfTsKKwlfX3Uz MiBmcmFnbWVudF9zdGFja19hZGRyZXNzWzhdOworfTsKKworI2RlZmluZSBMSU1BX1BJUEVfR1Ag IDB4MDAKKyNkZWZpbmUgTElNQV9QSVBFX1BQICAweDAxCisKKyNkZWZpbmUgTElNQV9TVUJNSVRf RkxBR19FWFBMSUNJVF9GRU5DRSAoMSA8PCAwKQorCisvKioKKyAqIHN1Ym1pdCBhIHRhc2sgdG8g R1BVCisgKi8KK3N0cnVjdCBkcm1fbGltYV9nZW1fc3VibWl0IHsKKwlfX3UzMiBjdHg7ICAgICAg ICAgLyogaW4sIGNvbnRleHQgaGFuZGxlIHRhc2sgaXMgc3VibWl0dGVkIHRvICovCisJX191MzIg cGlwZTsgICAgICAgIC8qIGluLCB3aGljaCBwaXBlIHRvIHVzZSwgR1AvUFAgKi8KKwlfX3UzMiBu cl9ib3M7ICAgICAgLyogaW4sIGFycmF5IGxlbmd0aCBvZiBib3MgZmllbGQgKi8KKwlfX3UzMiBm cmFtZV9zaXplOyAgLyogaW4sIHNpemUgb2YgZnJhbWUgZmllbGQgKi8KKwlfX3U2NCBib3M7ICAg ICAgICAgLyogaW4sIGFycmF5IG9mIGRybV9saW1hX2dlbV9zdWJtaXRfYm8gKi8KKwlfX3U2NCBm cmFtZTsgICAgICAgLyogaW4sIEdQL1BQIGZyYW1lICovCisJX191MzIgZmxhZ3M7ICAgICAgIC8q IGluLCBzdWJtaXQgZmxhZ3MgKi8KKwlfX3UzMiBvdXRfc3luYzsgICAgLyogaW4sIGRybV9zeW5j b2JqIGhhbmRsZSB1c2VkIHRvIHdhaXQgdGFzayBmaW5pc2ggYWZ0ZXIgc3VibWlzc2lvbiAqLwor CV9fdTMyIGluX3N5bmNbMl07ICAvKiBpbiwgZHJtX3N5bmNvYmogaGFuZGxlIHVzZWQgdG8gd2Fp dCBiZWZvcmUgc3RhcnQgdGhpcyB0YXNrICovCit9OworCisjZGVmaW5lIExJTUFfR0VNX1dBSVRf UkVBRCAgIDB4MDEKKyNkZWZpbmUgTElNQV9HRU1fV0FJVF9XUklURSAgMHgwMgorCisvKioKKyAq IHdhaXQgcGVuZGluZyBHUFUgdGFzayBmaW5pc2ggb2YgYSBidWZmZXIKKyAqLworc3RydWN0IGRy bV9saW1hX2dlbV93YWl0IHsKKwlfX3UzMiBoYW5kbGU7ICAgICAgLyogaW4sIEdFTSBidWZmZXIg aGFuZGxlICovCisJX191MzIgb3A7ICAgICAgICAgIC8qIGluLCBDUFUgd2FudCB0byByZWFkL3dy aXRlIHRoaXMgYnVmZmVyICovCisJX19zNjQgdGltZW91dF9uczsgIC8qIGluLCB3YWl0IHRpbWVv dXQgaW4gYWJzdWx1dGUgdGltZSAqLworfTsKKworLyoqCisgKiBjcmVhdGUgYSBjb250ZXh0Cisg Ki8KK3N0cnVjdCBkcm1fbGltYV9jdHhfY3JlYXRlIHsKKwlfX3UzMiBpZDsgICAgICAgICAgLyog b3V0LCBjb250ZXh0IGhhbmRsZSAqLworCV9fdTMyIF9wYWQ7ICAgICAgICAvKiBwYWQsIG11c3Qg YmUgemVybyAqLworfTsKKworLyoqCisgKiBmcmVlIGEgY29udGV4dAorICovCitzdHJ1Y3QgZHJt X2xpbWFfY3R4X2ZyZWUgeworCV9fdTMyIGlkOyAgICAgICAgICAvKiBpbiwgY29udGV4dCBoYW5k bGUgKi8KKwlfX3UzMiBfcGFkOyAgICAgICAgLyogcGFkLCBtdXN0IGJlIHplcm8gKi8KK307CisK KyNkZWZpbmUgRFJNX0xJTUFfR0VUX1BBUkFNICAgMHgwMAorI2RlZmluZSBEUk1fTElNQV9HRU1f Q1JFQVRFICAweDAxCisjZGVmaW5lIERSTV9MSU1BX0dFTV9JTkZPICAgIDB4MDIKKyNkZWZpbmUg RFJNX0xJTUFfR0VNX1NVQk1JVCAgMHgwMworI2RlZmluZSBEUk1fTElNQV9HRU1fV0FJVCAgICAw eDA0CisjZGVmaW5lIERSTV9MSU1BX0NUWF9DUkVBVEUgIDB4MDUKKyNkZWZpbmUgRFJNX0xJTUFf Q1RYX0ZSRUUgICAgMHgwNgorCisjZGVmaW5lIERSTV9JT0NUTF9MSU1BX0dFVF9QQVJBTSBEUk1f SU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0xJTUFfR0VUX1BBUkFNLCBzdHJ1Y3QgZHJtX2xp bWFfZ2V0X3BhcmFtKQorI2RlZmluZSBEUk1fSU9DVExfTElNQV9HRU1fQ1JFQVRFIERSTV9JT1dS KERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTElNQV9HRU1fQ1JFQVRFLCBzdHJ1Y3QgZHJtX2xpbWFf Z2VtX2NyZWF0ZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0xJTUFfR0VNX0lORk8gRFJNX0lPV1IoRFJN X0NPTU1BTkRfQkFTRSArIERSTV9MSU1BX0dFTV9JTkZPLCBzdHJ1Y3QgZHJtX2xpbWFfZ2VtX2lu Zm8pCisjZGVmaW5lIERSTV9JT0NUTF9MSU1BX0dFTV9TVUJNSVQgRFJNX0lPVyhEUk1fQ09NTUFO RF9CQVNFICsgRFJNX0xJTUFfR0VNX1NVQk1JVCwgc3RydWN0IGRybV9saW1hX2dlbV9zdWJtaXQp CisjZGVmaW5lIERSTV9JT0NUTF9MSU1BX0dFTV9XQUlUIERSTV9JT1coRFJNX0NPTU1BTkRfQkFT RSArIERSTV9MSU1BX0dFTV9XQUlULCBzdHJ1Y3QgZHJtX2xpbWFfZ2VtX3dhaXQpCisjZGVmaW5l IERSTV9JT0NUTF9MSU1BX0NUWF9DUkVBVEUgRFJNX0lPUihEUk1fQ09NTUFORF9CQVNFICsgRFJN X0xJTUFfQ1RYX0NSRUFURSwgc3RydWN0IGRybV9saW1hX2N0eF9jcmVhdGUpCisjZGVmaW5lIERS TV9JT0NUTF9MSU1BX0NUWF9GUkVFIERSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9MSU1B X0NUWF9GUkVFLCBzdHJ1Y3QgZHJtX2xpbWFfY3R4X2ZyZWUpCisKKyNpZiBkZWZpbmVkKF9fY3Bs dXNwbHVzKQorfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0xJTUFfRFJNX0hfXyAqLwotLSAKMi4x Ny4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=