From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v6 02/12] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173.
Date: Wed, 18 Nov 2015 18:34:10 +0100
Message-ID: <1447868060-11620-3-git-send-email-p.zabel@pengutronix.de>
References: <1447868060-11620-1-git-send-email-p.zabel@pengutronix.de>
Mime-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Return-path:
In-Reply-To: <1447868060-11620-1-git-send-email-p.zabel@pengutronix.de>
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: Mark Rutland , devicetree@vger.kernel.org, Paul Bolle , YT Shen , Jitao Shi , Jie Qiu , Pawel Moll , Ian Campbell , Cawa Cheng , Rob Herring , linux-mediatek@lists.infradead.org, Kumar Gala , Matthias Brugger , kernel@pengutronix.de
List-Id: devicetree@vger.kernel.org
RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0
aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUApzdWJzeXN0ZW0uIEl0
IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0cmVhbXMgZnJvbSB0aGUKT1ZM
MC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywgcmVzcGVjdGl2ZWx5LgoKU2ln
bmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWVQg
U2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IFBoaWxpcHAgWmFiZWwg
PHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Ci0tLQpDaGFuZ2VzIHNpbmNlIHY1OgotIENvbWJpbmVk
IG10a19kcm1fY3J0YyBhbmQgbXRrX2NydGNfZGRwX2NvbnRleHQsIGFkZGVkIG10a19kaXNwX292
bAogIHN0cnVjdHVyZSB0byBjb250YWluIG92bCBkZHAgY29tcG9uZW50Ci0gUmV3b3JrZSBjb21w
b25lbnQgY2FsbGJhY2tzIChyZW1vdmVkIGNvbXBfIHByZWZpeCBmcm9tCiAgbXRrX2RkcF9jb21w
X2Z1bmNzLCBtb3ZlIGlkIGludG8gbXRrX2RkcF9jb21wIGFkZGVkIGlubGluZQogIGZ1bmN0aW9u
cyB0byB3cmFwIGNhbGxiYWNrcykKLSBVc2Ugbm9uLXN5bmMgcG1fcnVudGltZV9wdXQgdmFyaWFu
dAotIFdhcm4gYW5kIHVzZSBSR0I4ODggYXMgZmFsbGJhY2sgZm9ybWF0IGluIGNhc2Ugb2YgZHJp
dmVyIGJ1ZwotIFJlbW92ZWQgdW51c2VkIHBpcGUgcGFyYW1ldGVyIGZyb20gbXRrX2RkcF9hZGRf
Y29tcF90b19wYXRoCi0gUmVuYW1lZCBtdGtfZHJtX3ByaXZhdGUtPnBpcGUgLT5udW1fcGlwZXMK
LSBVcGRhdGVkIG10ayBzcGVjaWZpYyBjcnRjIGFuZCBwbGFuZSBhdG9taWMgc3RhdGUgaGFuZGxp
bmcKLSBNb3ZlZCBtdGtfZHJtX2NydGNfcGxhbmVfY29uZmlnIHRvIHBsYW5lIGxvY2FsIG10a19w
bGFuZV9jb25maWcKLSBMZXQgbGF5ZXJfY29uZmlnIHRha2UgYSBzdHJ1Y3QgbXRrX3BsYW5lX3N0
YXRlCi0gVXNlIHdyaXRlbF9yZWxheGVkIGluIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aAotIFJl
bW92ZWQgc29tZSB1bnVzZWQgcGFyYW1ldGVycywgZnVuY3Rpb25zLCBhbmQgbG9jYWwgdmFyaWFi
bGVzCi0gUmVtb3ZlZCBjdXN0b20gY3J0YyBlbmFibGUgZmxhZwotIFJlbW92ZWQgdW5uZWNlc3Nh
cnkgY29tcC0+ZnVuY3MgTlVMTCBjaGVja3MKLSBSZWdpc3RlciBhbmQgdW5yZWdpc3RlciBzdWJk
cml2ZXJzIGluIGEgbG9vcAotIE1vdmVkIExBUkIgaGFuZGxpbmcgb3V0IG9mIGRybSBkcml2ZXIg
Y29kZSBpbnRvIGNydGMgY29kZSwKICByZXF1ZXN0IExBUkIgZHVyaW5nIGNvbXBvbmVudCBpbml0
aWFsaXphdGlvbgotIFVwZGF0ZWQgZGlzcGxheSBkYXRhIHBhdGggLyBtdXRleCBjb2RlCi0gTW92
ZWQgaW5pdGlhbGl6YXRpb24gb2YgZHJpdmVybGVzcyBkZHAgY29tcG9uZW50cyBpbnRvIHRoZSBk
cm0gZHJpdmVyCi0gQ29tbWVudGVkIGNydGNfZGlzYWJsZQotIFJlbW92ZWQgc3VwcG9ydCBmb3Ig
bXVsdGlwbGFuYXIgZnJhbWVidWZmZXJzCi0gQ29uZmlndXJlIHdpZHRoL2hlaWdodCBvZiB0aGUg
Y29sb3IgZW5naW5lIGV2ZW4gaWYgaXQgaXMgYnlwYXNzZWQKLSBBZGRlZCBzdGF0aWMga2V5d29y
ZCB0byB1bmV4cG9ydGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucwotIFVubGluayBkaXNwbGF5
IGRhdGEgcGF0aCBpbiBod19maW5pCi0tLQogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAg
ICAgICAgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAg
ICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnICAgICAg
ICAgICAgfCAgMTYgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlICAgICAgICAg
ICB8ICAxMCArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMgICAgIHwg
NTk2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX2NydGMuaCAgICAgfCAgNDEgKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfZHJtX2RkcC5jICAgICAgfCAzNjIgKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oICAgICAgfCAgNDEgKysKIGRyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMgfCA0MzEgKysrKysrKysrKysrKysrKysrKysKIGRy
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmggfCAxNTIgKysrKysrKwog
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMgICAgICB8IDU1NyArKysrKysr
KysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2
LmggICAgICB8ICA1NSArKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmMg
ICAgICAgfCAxMzkgKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIu
aCAgICAgICB8ICAyOSArKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmMg
ICAgICB8IDE4NyArKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dl
bS5oICAgICAgfCAgNTQgKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFu
ZS5jICAgIHwgMjM1ICsrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9wbGFuZS5oICAgIHwgIDYxICsrKwogMTggZmlsZXMgY2hhbmdlZCwgMjk2OSBpbnNlcnRpb25z
KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRj
LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k
ZHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2RkcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
cm1fZGRwX2NvbXAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX2RkcF9jb21wLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKCmRpZmYgLS1naXQgYS9kcml2
ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IGM0YmY5
YTEuLjhmZGIwYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCisrKyBiL2Ry
aXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0yNjYsMyArMjY2LDUgQEAgc291cmNlICJkcml2ZXJz
L2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vaW14
L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29uZmlnIgorCitzb3Vy
Y2UgImRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVy
cy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDFlOWZm
NGMuLjYwN2E0OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9k
cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTcxLDYgKzcxLDcgQEAgb2JqLSQoQ09ORklHX0RS
TV9NU00pICs9IG1zbS8KIG9iai0kKENPTkZJR19EUk1fVEVHUkEpICs9IHRlZ3JhLwogb2JqLSQo
Q09ORklHX0RSTV9TVEkpICs9IHN0aS8KIG9iai0kKENPTkZJR19EUk1fSU1YKSArPSBpbXgvCitv
YmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRpYXRlay8KIG9iai15CQkJKz0gaTJjLwog
b2JqLXkJCQkrPSBwYW5lbC8KIG9iai15CQkJKz0gYnJpZGdlLwpkaWZmIC0tZ2l0IGEvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2Nv
bmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzQzY2YxCi0tLSAvZGV2
L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKQEAgLTAsMCArMSwx
NiBAQAorY29uZmlnIERSTV9NRURJQVRFSworCXRyaXN0YXRlICJEUk0gU3VwcG9ydCBmb3IgTWVk
aWF0ZWsgU29DcyIKKwlkZXBlbmRzIG9uIERSTQorCWRlcGVuZHMgb24gQVJDSF9NRURJQVRFSyB8
fCAoQVJNICYmIENPTVBJTEVfVEVTVCkKKwlzZWxlY3QgTVRLX1NNSQorCXNlbGVjdCBEUk1fUEFO
RUwKKwlzZWxlY3QgRFJNX01JUElfRFNJCisJc2VsZWN0IERSTV9QQU5FTF9TSU1QTEUKKwlzZWxl
Y3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgSU9NTVVfRE1BCisJaGVscAorCSAgQ2hvb3NlIHRo
aXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgTWVkaWF0ZWsgU29Dcy4KKwkgIFRoZSBtb2R1bGUgd2ls
bCBiZSBjYWxsZWQgbWVkaWF0ZWstZHJtCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBrZXJuZWwg
bW9kZSBzZXR0aW5nIGFuZAorCSAgYnVmZmVyIG1hbmFnZW1lbnQgdG8gdXNlcnNwYWNlLgorCmRp
ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYmE2ZDNmYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9N
YWtlZmlsZQpAQCAtMCwwICsxLDEwIEBACittZWRpYXRlay1kcm0teSA6PSBtdGtfZHJtX2Rydi5v
IFwKKwkJICBtdGtfZHJtX2NydGMubyBcCisJCSAgbXRrX2RybV9kZHAubyBcCisJCSAgbXRrX2Ry
bV9kZHBfY29tcC5vIFwKKwkJICBtdGtfZHJtX2ZiLm8gXAorCQkgIG10a19kcm1fZ2VtLm8gXAor
CQkgIG10a19kcm1fcGxhbmUubworCitvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRp
YXRlay1kcm0ubworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4YzhmMwotLS0gL2Rldi9udWxsCisrKyBi
L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwpAQCAtMCwwICsxLDU5NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt
b2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0v
ZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRy
bS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgor
I2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2lu
Y2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNp
bmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu
aD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXJ2
YXRpb24uaD4KKyNpbmNsdWRlIDxzb2MvbWVkaWF0ZWsvc21pLmg+CisKKyNpbmNsdWRlICJtdGtf
ZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgIm10a19kcm1f
ZGRwLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorI2luY2x1ZGUgIm10a19kcm1f
Z2VtLmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCitzdHJ1Y3QgbXRrX2NydGNfZGRw
X2NvbnRleHQ7CisKKy8qCisgKiBNZWRpYVRlayBzcGVjaWZpYyBjcnRjIHN0cnVjdHVyZS4KKyAq
CisgKiBAYmFzZTogY3J0YyBvYmplY3QuCisgKiBAcGlwZTogYSBjcnRjIGluZGV4IGNyZWF0ZWQg
YXQgbG9hZCgpIHdpdGggYSBuZXcgY3J0YyBvYmplY3QgY3JlYXRpb24KKyAqCWFuZCB0aGUgY3J0
YyBvYmplY3Qgd291bGQgYmUgc2V0IHRvIHByaXZhdGUtPmNydGMgYXJyYXkKKyAqCXRvIGdldCBh
IGNydGMgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwaXBlIGZyb20gcHJpdmF0ZS0+Y3J0
YworICoJYXJyYXkgd2hlbiBpcnEgaW50ZXJydXB0IG9jY3VycmVkLiB0aGUgcmVhc29uIG9mIHVz
aW5nIHRoaXMgcGlwZSBpcyB0aGF0CisgKglkcm0gZnJhbWV3b3JrIGRvZXNuJ3Qgc3VwcG9ydCBt
dWx0aXBsZSBpcnEgeWV0LgorICoJd2UgY2FuIHJlZmVyIHRvIHRoZSBjcnRjIHRvIGN1cnJlbnQg
aGFyZHdhcmUgaW50ZXJydXB0IG9jY3VycmVkIHRocm91Z2gKKyAqCXRoaXMgcGlwZSB2YWx1ZS4K
KyAqLworc3RydWN0IG10a19kcm1fY3J0YyB7CisJc3RydWN0IGRybV9jcnRjCQkJYmFzZTsKKwl1
bnNpZ25lZCBpbnQJCQlwaXBlOworCisJYm9vbAkJCQlkb19mbHVzaDsKKworCXN0cnVjdCBtdGtf
ZHJtX3BsYW5lCQlwbGFuZXNbT1ZMX0xBWUVSX05SXTsKKworCXZvaWQgX19pb21lbQkJCSpjb25m
aWdfcmVnczsKKwlzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXgJCSptdXRleDsKKwl1MzIJCQkJZGRwX2Nv
bXBfbnI7CisJc3RydWN0IG10a19kZHBfY29tcAkJKipkZHBfY29tcDsKK307CisKK3N0cnVjdCBt
dGtfZGlzcF9vdmwgeworCXN0cnVjdCBtdGtfZGRwX2NvbXAJCWRkcF9jb21wOworCXN0cnVjdCBt
dGtfZHJtX2NydGMJCSpjcnRjOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2RybV9j
cnRjICp0b19tdGtfY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmMpCit7CisJcmV0dXJuIGNvbnRhaW5l
cl9vZihjLCBzdHJ1Y3QgbXRrX2RybV9jcnRjLCBiYXNlKTsKK30KKworc3RhdGljIHZvaWQgbXRr
X2RybV9jcnRjX2ZpbmlzaF9wYWdlX2ZsaXAoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMp
Cit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJm10a19jcnRjLT5iYXNlOworCXN0cnVjdCBt
dGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CisK
Kwlkcm1fc2VuZF92YmxhbmtfZXZlbnQoY3J0Yy0+ZGV2LCBzdGF0ZS0+ZXZlbnQtPnBpcGUsIHN0
YXRlLT5ldmVudCk7CisJZHJtX2NydGNfdmJsYW5rX3B1dChjcnRjKTsKKwlzdGF0ZS0+ZXZlbnQg
PSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJt
X2NydGMgKmNydGMpCit7CisJZHJtX2NydGNfY2xlYW51cChjcnRjKTsKK30KKworc3RhdGljIHN0
cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbXRrX2RybV9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3Qg
ZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZTsKKworCXN0
YXRlID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkK
KwkJcmV0dXJuIE5VTEw7CisKKwlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0
YXRlKGNydGMsICZzdGF0ZS0+YmFzZSk7CisKKwlXQVJOX09OKHN0YXRlLT5iYXNlLmNydGMgIT0g
Y3J0Yyk7CisJc3RhdGUtPmJhc2UuY3J0YyA9IGNydGM7CisKKwlyZXR1cm4gJnN0YXRlLT5iYXNl
OworfQorCitzdGF0aWMgYm9vbCBtdGtfZHJtX2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2Ny
dGMgKmNydGMsCisJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQlzdHJ1
Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwkvKiBkcm0gZnJhbWV3b3Jr
IGRvZXNuJ3QgY2hlY2sgTlVMTCAqLworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBt
dGtfZHJtX2NydGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3Ry
dWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRl
KTsKKworCXN0YXRlLT5wZW5kaW5nX3dpZHRoID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKKwlzdGF0
ZS0+cGVuZGluZ19oZWlnaHQgPSBjcnRjLT5tb2RlLnZkaXNwbGF5OworCXN0YXRlLT5wZW5kaW5n
X3ZyZWZyZXNoID0gY3J0Yy0+bW9kZS52cmVmcmVzaDsKKwlzdGF0ZS0+cGVuZGluZ19jb25maWcg
PSB0cnVlOworfQorCitpbnQgbXRrX2RybV9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9k
ZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0
ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2Ny
dGMgPSB0b19tdGtfY3J0Yyhwcml2LT5jcnRjW3BpcGVdKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21w
ICpvdmwgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisKKwltdGtfZGRwX2NvbXBfZW5hYmxlX3Zi
bGFuayhvdmwpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXRrX2RybV9jcnRjX2Rpc2FibGVf
dmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKQoreworCXN0
cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBt
dGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMocHJpdi0+Y3J0Y1twaXBlXSk7CisJ
c3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9jb21wWzBdOworCisJbXRr
X2RkcF9jb21wX2Rpc2FibGVfdmJsYW5rKG92bCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jcnRj
X2RkcF9wb3dlcl9vbihzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlpbnQgcmV0
OworCWludCBpOworCisJRFJNX0lORk8oIm10a19jcnRjX2RkcF9wb3dlcl9vblxuIik7CisJZm9y
IChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKSB7CisJCXJldCA9IGNsa19l
bmFibGUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCQlpZiAocmV0KQorCQkJRFJNX0VS
Uk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNsb2NrICVkOiAlZFxuIiwgaSwgcmV0KTsKKwl9Cit9CisK
K3N0YXRpYyB2b2lkIG10a19jcnRjX2RkcF9wb3dlcl9vZmYoc3RydWN0IG10a19kcm1fY3J0YyAq
bXRrX2NydGMpCit7CisJaW50IGk7CisKKwlEUk1fSU5GTygibXRrX2NydGNfZGRwX3Bvd2VyX29m
ZlxuIik7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQlj
bGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19jcnRjX2RkcF9od19pbml0KHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQorewor
CXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZtdGtfY3J0Yy0+YmFzZTsKKwl1bnNpZ25lZCBpbnQg
d2lkdGgsIGhlaWdodCwgdnJlZnJlc2g7CisJaW50IHJldDsKKwlpbnQgaTsKKworCWlmIChjcnRj
LT5zdGF0ZSkgeworCQl3aWR0aCA9IGNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlLmhkaXNwbGF5
OworCQloZWlnaHQgPSBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS52ZGlzcGxheTsKKwkJdnJl
ZnJlc2ggPSBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS52cmVmcmVzaDsKKwl9IGVsc2Ugewor
CQlXQVJOX09OKHRydWUpOworCQl3aWR0aCA9IDE5MjA7CisJCWhlaWdodCA9IDEwODA7CisJCXZy
ZWZyZXNoID0gNjA7CisJfQorCisJRFJNX0lORk8oIm10a19jcnRjX2RkcF9od19pbml0XG4iKTsK
KworCS8qIGRpc3BfbXRjbW9zICovCisJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhjcnRjLT5k
ZXYtPmRldik7CisJaWYgKHJldCA8IDApCisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBw
b3dlciBkb21haW46ICVkXG4iLCByZXQpOworCisJbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShtdGtf
Y3J0Yy0+bXV0ZXgpOworCW10a19jcnRjX2RkcF9wb3dlcl9vbihtdGtfY3J0Yyk7CisKKwlEUk1f
SU5GTygibWVkaWF0ZWtfZGRwX2RkcF9wYXRoX3NldHVwXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwg
bXRrX2NydGMtPmRkcF9jb21wX25yIC0gMTsgaSsrKSB7CisJCW10a19kZHBfYWRkX2NvbXBfdG9f
cGF0aChtdGtfY3J0Yy0+Y29uZmlnX3JlZ3MsCisJCQkJCSBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0t
PmlkLAorCQkJCQkgbXRrX2NydGMtPmRkcF9jb21wW2kgKyAxXS0+aWQpOworCQltdGtfZGlzcF9t
dXRleF9hZGRfY29tcChtdGtfY3J0Yy0+bXV0ZXgsCisJCQkJCW10a19jcnRjLT5kZHBfY29tcFtp
XS0+aWQpOworCX0KKwltdGtfZGlzcF9tdXRleF9hZGRfY29tcChtdGtfY3J0Yy0+bXV0ZXgsIG10
a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCW10a19kaXNwX211dGV4X2VuYWJsZShtdGtfY3J0
Yy0+bXV0ZXgpOworCisJRFJNX0lORk8oImRkcF9kaXNwX3BhdGhfcG93ZXJfb24gJWR4JWRcbiIs
IHdpZHRoLCBoZWlnaHQpOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7
IGkrKykgeworCQlzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wID0gbXRrX2NydGMtPmRkcF9jb21w
W2ldOworCisJCW10a19kZHBfY29tcF9jb25maWcoY29tcCwgd2lkdGgsIGhlaWdodCwgdnJlZnJl
c2gpOworCQltdGtfZGRwX2NvbXBfcG93ZXJfb24oY29tcCk7CisJfQorfQorCitzdGF0aWMgdm9p
ZCBtdGtfY3J0Y19kZHBfaHdfZmluaShzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sK
KwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gbXRrX2NydGMtPmJhc2UuZGV2OworCWludCBpOwor
CisJRFJNX0lORk8oIm10a19jcnRjX2RkcF9od19maW5pXG4iKTsKKwltdGtfY3J0Y19kZHBfcG93
ZXJfb2ZmKG10a19jcnRjKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25y
OyBpKyspCisJCW10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKG10a19jcnRjLT5tdXRleCwKKwkJ
CQkJICAgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJbXRrX2Rpc3BfbXV0ZXhfZGlzYWJs
ZShtdGtfY3J0Yy0+bXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBf
bnIgLSAxOyBpKyspIHsKKwkJbXRrX2RkcF9yZW1vdmVfY29tcF9mcm9tX3BhdGgobXRrX2NydGMt
PmNvbmZpZ19yZWdzLAorCQkJCQkgICAgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkLAorCQkJ
CQkgICAgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaSArIDFdLT5pZCk7CisJCW10a19kaXNwX211dGV4
X3JlbW92ZV9jb21wKG10a19jcnRjLT5tdXRleCwKKwkJCQkJICAgbXRrX2NydGMtPmRkcF9jb21w
W2ldLT5pZCk7CisJfQorCW10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKG10a19jcnRjLT5tdXRl
eCwgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJbXRrX2Rpc3BfbXV0ZXhfdW5wcmVwYXJl
KG10a19jcnRjLT5tdXRleCk7CisJbXRrX2NydGMtPm11dGV4ID0gTlVMTDsKKworCS8qIGRpc3Bf
bXRjbW9zICovCisJcG1fcnVudGltZV9wdXQoZHJtLT5kZXYpOworfQorCitzdGF0aWMgdm9pZCBt
dGtfZHJtX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRr
X2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOworCXN0cnVjdCBtdGtfZGRw
X2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKKwlpbnQgcmV0OworCisJRFJNX0lO
Rk8oIm10a19kcm1fY3J0Y19lbmFibGUgJWRcbiIsIGNydGMtPmJhc2UuaWQpOworCisJcmV0ID0g
bXRrX3NtaV9sYXJiX2dldChvdmwtPmxhcmJfZGV2KTsKKwlpZiAocmV0KQorCQlEUk1fRVJST1Io
IkZhaWxlZCB0byBnZXQgbGFyYjogJWRcbiIsIHJldCk7CisKKwltdGtfY3J0Y19kZHBfaHdfaW5p
dChtdGtfY3J0Yyk7CisKKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7CisJV0FSTl9PTihkcm1f
Y3J0Y192YmxhbmtfZ2V0KGNydGMpICE9IDApOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2Ny
dGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19kcm1fY3J0
YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUg
KnN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOworCXN0cnVjdCBtdGtfZGRw
X2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKKworCURSTV9JTkZPKCJtdGtfZHJt
X2NydGNfZGlzYWJsZSAlZFxuIiwgY3J0Yy0+YmFzZS5pZCk7CisKKwkvKgorCSAqIEJlZm9yZSBt
dGtfZHJtX2NydGNfZGlzYWJsZSBpcyBjYWxsZWQgYnkgZGlzYWJsZV9vdXRwdXRzIGZyb20KKwkg
KiBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcywgdGhlIHNhbWUgZnVu
Y3Rpb24gYWxyZWFkeQorCSAqIGNhbGxlZCBtdGtfZHNpL2RwaV9lbmNvZGVyX2Rpc2FibGUsIHdo
aWNoIGN1cnJlbnRseSBkaXNhYmxlcyB0aGUKKwkgKiBwaXhlbCBjbG9jaywgYW5kIGNhdXNlZCB0
aGUgcGlwZWxpbmUgdG8gaGFsdCBpbW1lZGlhdGVseS4KKwkgKiBUaGVyZSB3aWxsIGJlIG5vIG1v
cmUgT1ZMIGZyYW1lIGNvbXBsZXRpb24gKHZibGFuaykgaW50ZXJydXB0LgorCSAqCisJICogSWRl
YWxseSwgdGhlIGRpc2FibGluZyBvZiB0aGUgcGl4ZWwgY2xvY2sgc2hvdWxkIGJlIHBvc3Rwb25l
ZAorCSAqIHVudGlsIHZibGFuaywgdGhpcyBmdW5jdGlvbiB3b3VsZCBqdXN0IHNldCBhbGwgcGVu
ZGluZyBwbGFuZQorCSAqIHN0YXRlIHRvIGRpc2FibGVkIGFuZCB3YWl0IGZvciB0aGUgbmV4dCB2
YmxhbmsgaGVyZS4KKwkgKi8KKwltdGtfY3J0Y19kZHBfaHdfZmluaShtdGtfY3J0Yyk7CisKKwlt
dGtfc21pX2xhcmJfcHV0KG92bC0+bGFyYl9kZXYpOworCisJLyogVGhpcyB3aWxsIGJlIGNhbGxl
ZCBmcm9tIHRoZSB2YmxhbmsgaW50ZXJydXB0IGluIHRoZSBmdXR1cmUgKi8KKwltdGtfY3J0Yy0+
ZG9fZmx1c2ggPSBmYWxzZTsKKwlpZiAoc3RhdGUtPmV2ZW50KQorCQltdGtfZHJtX2NydGNfZmlu
aXNoX3BhZ2VfZmxpcChtdGtfY3J0Yyk7CisJZHJtX2NydGNfdmJsYW5rX3B1dChjcnRjKTsKKwlk
cm1fY3J0Y192Ymxhbmtfb2ZmKGNydGMpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNf
YXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgICBzdHJ1Y3QgZHJt
X2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQoreworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAq
c3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CisKKwlpZiAoc3RhdGUtPmJh
c2UuZXZlbnQpIHsKKwkJc3RhdGUtPmJhc2UuZXZlbnQtPnBpcGUgPSBkcm1fY3J0Y19pbmRleChj
cnRjKTsKKwkJV0FSTl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpICE9IDApOworCQlzdGF0
ZS0+ZXZlbnQgPSBzdGF0ZS0+YmFzZS5ldmVudDsKKwkJc3RhdGUtPmJhc2UuZXZlbnQgPSBOVUxM
OworCX0KK30KKwordm9pZCBtdGtfZHJtX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0
YykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMp
OworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsr
KSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFz
ZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwkJcGxhbmVfc3Rh
dGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwkJaWYgKHBsYW5lX3N0YXRl
LT5wZW5kaW5nX2RpcnR5KSB7CisJCQlwbGFuZV9zdGF0ZS0+cGVuZGluZ19jb25maWcgPSB0cnVl
OworCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmdfZGlydHkgPSBmYWxzZTsKKwkJfQorCX0KK30KKwor
c3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNy
dGMsCisJCQkJICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKK3sK
KwltdGtfZHJtX2NydGNfY29tbWl0KGNydGMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRy
bV9jcnRjX2Z1bmNzIG10a19jcnRjX2Z1bmNzID0geworCS5zZXRfY29uZmlnCQk9IGRybV9hdG9t
aWNfaGVscGVyX3NldF9jb25maWcsCisJLnBhZ2VfZmxpcAkJPSBkcm1fYXRvbWljX2hlbHBlcl9w
YWdlX2ZsaXAsCisJLmRlc3Ryb3kJCT0gbXRrX2RybV9jcnRjX2Rlc3Ryb3ksCisJLnJlc2V0CQkJ
PSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRl
CT0gbXRrX2RybV9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUJ
PSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29u
c3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBtdGtfY3J0Y19oZWxwZXJfZnVuY3MgPSB7
CisJLm1vZGVfZml4dXAJPSBtdGtfZHJtX2NydGNfbW9kZV9maXh1cCwKKwkubW9kZV9zZXRfbm9m
Ygk9IG10a19kcm1fY3J0Y19tb2RlX3NldF9ub2ZiLAorCS5lbmFibGUJCT0gbXRrX2RybV9jcnRj
X2VuYWJsZSwKKwkuZGlzYWJsZQk9IG10a19kcm1fY3J0Y19kaXNhYmxlLAorCS5hdG9taWNfYmVn
aW4JPSBtdGtfZHJtX2NydGNfYXRvbWljX2JlZ2luLAorCS5hdG9taWNfZmx1c2gJPSBtdGtfZHJt
X2NydGNfYXRvbWljX2ZsdXNoLAorfTsKKworc3RhdGljIGludCBtdGtfZHJtX2NydGNfaW5pdChz
dHJ1Y3QgZHJtX2RldmljZSAqZHJtLAorCQlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0Yywg
c3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwKKwkJc3RydWN0IGRybV9wbGFuZSAqY3Vyc29yLCBp
bnQgcGlwZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZHJtLT5kZXZfcHJp
dmF0ZTsKKwlpbnQgcmV0OworCisJcHJpdi0+Y3J0Y1twaXBlXSA9ICZtdGtfY3J0Yy0+YmFzZTsK
KworCXJldCA9IGRybV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoZHJtLCAmbXRrX2NydGMtPmJhc2Us
IHByaW1hcnksIGN1cnNvciwKKwkJCSZtdGtfY3J0Y19mdW5jcyk7CisJaWYgKHJldCkKKwkJZ290
byBlcnJfY2xlYW51cF9jcnRjOworCisJZHJtX2NydGNfaGVscGVyX2FkZCgmbXRrX2NydGMtPmJh
c2UsICZtdGtfY3J0Y19oZWxwZXJfZnVuY3MpOworCisJcmV0dXJuIDA7CisKK2Vycl9jbGVhbnVw
X2NydGM6CisJZHJtX2NydGNfY2xlYW51cCgmbXRrX2NydGMtPmJhc2UpOworCXJldHVybiByZXQ7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19jcnRjX2RkcF9pcnEoc3RydWN0IG10a19kcm1fY3J0YyAq
bXRrX2NydGMpCit7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9j
b21wWzBdOworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0
ZShtdGtfY3J0Yy0+YmFzZS5zdGF0ZSk7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKgorCSAqIFRP
RE86IGluc3RlYWQgb2YgdXBkYXRpbmcgdGhlIHJlZ2lzdGVycyBoZXJlLCB3ZSBzaG91bGQgcHJl
cGFyZQorCSAqIHdvcmtpbmcgcmVnaXN0ZXJzIGluIGF0b21pY19jb21taXQgYW5kIGxldCB0aGUg
aGFyZHdhcmUgY29tbWFuZAorCSAqIHF1ZXVlIHVwZGF0ZSBtb2R1bGUgcmVnaXN0ZXJzIG9uIHZi
bGFuay4KKwkgKi8KKwlpZiAoc3RhdGUtPnBlbmRpbmdfY29uZmlnKSB7CisJCW10a19kZHBfY29t
cF9jb25maWcob3ZsLCBzdGF0ZS0+cGVuZGluZ193aWR0aCwKKwkJCQkgICAgc3RhdGUtPnBlbmRp
bmdfaGVpZ2h0LAorCQkJCSAgICBzdGF0ZS0+cGVuZGluZ192cmVmcmVzaCk7CisKKwkJc3RhdGUt
PnBlbmRpbmdfY29uZmlnID0gZmFsc2U7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlF
Ul9OUjsgaSsrKSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5wbGFu
ZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwkJ
cGxhbmVfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKworCQlpZiAo
cGxhbmVfc3RhdGUtPnBlbmRpbmdfY29uZmlnKSB7CisJCQlpZiAoIXBsYW5lX3N0YXRlLT5wZW5k
aW5nX2VuYWJsZSkKKwkJCQltdGtfZGRwX2NvbXBfbGF5ZXJfb2ZmKG92bCwgaSk7CisKKwkJCW10
a19kZHBfY29tcF9sYXllcl9jb25maWcob3ZsLCBpLCBwbGFuZV9zdGF0ZSk7CisKKwkJCWlmIChw
bGFuZV9zdGF0ZS0+cGVuZGluZ19lbmFibGUpCisJCQkJbXRrX2RkcF9jb21wX2xheWVyX29uKG92
bCwgaSk7CisKKwkJCXBsYW5lX3N0YXRlLT5wZW5kaW5nX2NvbmZpZyA9IGZhbHNlOworCQl9CisJ
fQorCisJZHJtX2hhbmRsZV92YmxhbmsobXRrX2NydGMtPmJhc2UuZGV2LCBtdGtfY3J0Yy0+cGlw
ZSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfZGlzcF9vdmxfaXJxX2hhbmRsZXIoaW50
IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBkZXZf
aWQ7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSBwcml2LT5jcnRjOworCXN0cnVj
dCBtdGtfZGRwX2NvbXAgKm92bCA9ICZwcml2LT5kZHBfY29tcDsKKworCW10a19kZHBfY29tcF9j
bGVhcl92Ymxhbmsob3ZsKTsKKworCWlmIChtdGtfY3J0Yy0+cGlwZSA+PSAwICYmIG10a19jcnRj
LT5iYXNlLmRldikKKwkJbXRrX2NydGNfZGRwX2lycShtdGtfY3J0Yyk7CisKKwlyZXR1cm4gSVJR
X0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX2JpbmQoc3RydWN0IGRldmlj
ZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0
IG10a19kaXNwX292bCAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1f
ZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpkcm1fcHJp
diA9IGRybV9kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRj
OworCWludCBwaXBlID0gZHJtX3ByaXYtPm51bV9waXBlczsKKwllbnVtIG10a19kZHBfY29tcF9p
ZCBjb21wX2lkOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKwllbnVtIGRybV9wbGFuZV90
eXBlIHR5cGU7CisJdW5zaWduZWQgaW50IHpwb3M7CisJaW50IHJldDsKKwlpbnQgaTsKKworCXJl
dCA9IG10a19kZHBfY29tcF9yZWdpc3Rlcihkcm1fZGV2LCAmcHJpdi0+ZGRwX2NvbXApOworCWlm
IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVu
dCAlczogJWRcbiIsCisJCQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJu
IHJldDsKKwl9CisKKwltdGtfY3J0YyA9IGRldm1fa3phbGxvYyhkcm1fZGV2LT5kZXYsIHNpemVv
ZigqbXRrX2NydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19jcnRjKQorCQlyZXR1cm4gLUVO
T01FTTsKKworCW10a19jcnRjLT5jb25maWdfcmVncyA9IGRybV9wcml2LT5jb25maWdfcmVnczsK
KwltdGtfY3J0Yy0+ZGRwX2NvbXBfbnIgPSBkcm1fcHJpdi0+cGF0aF9sZW5bcGlwZV07CisJbXRr
X2NydGMtPmRkcF9jb21wID0gZGV2bV9rbWFsbG9jX2FycmF5KGRldiwgbXRrX2NydGMtPmRkcF9j
b21wX25yLAorCQkJCQkJc2l6ZW9mKCptdGtfY3J0Yy0+ZGRwX2NvbXApLAorCQkJCQkJR0ZQX0tF
Uk5FTCk7CisKKwltdGtfY3J0Yy0+bXV0ZXggPSBtdGtfZGlzcF9tdXRleF9nZXQoZHJtX3ByaXYt
Pm11dGV4X2RldiwgcGlwZSk7CisJaWYgKElTX0VSUihtdGtfY3J0Yy0+bXV0ZXgpKSB7CisJCXJl
dCA9IFBUUl9FUlIobXRrX2NydGMtPm11dGV4KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g
Z2V0IG11dGV4OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljb21wX2lkID0g
ZHJtX3ByaXYtPnBhdGhbcGlwZV1bMF07CisKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRk
cF9jb21wX25yOyBpKyspIHsKKwkJc3RydWN0IG10a19kZHBfY29tcCAqY29tcDsKKworCQljb21w
X2lkID0gZHJtX3ByaXYtPnBhdGhbcGlwZV1baV07CisJCWNvbXAgPSBkcm1fcHJpdi0+ZGRwX2Nv
bXBbY29tcF9pZF07CisJCWlmICghY29tcCkgeworCQkJZGV2X2VycihkZXYsICJDb21wb25lbnQg
JXMgbm90IGluaXRpYWxpemVkXG4iLAorCQkJCWRybV9wcml2LT5jb21wX25vZGVbY29tcF9pZF0t
PmZ1bGxfbmFtZSk7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byB1bnByZXBhcmU7CisJCX0K
KworCQlyZXQgPSBjbGtfcHJlcGFyZShjb21wLT5jbGspOworCQlpZiAocmV0KSB7CisJCQlkZXZf
ZXJyKGRldiwKKwkJCQkiRmFpbGVkIHRvIHByZXBhcmUgY2xvY2sgZm9yIGNvbXBvbmVudCAlczog
JWRcbiIsCisJCQkJZHJtX3ByaXYtPmNvbXBfbm9kZVtjb21wX2lkXS0+ZnVsbF9uYW1lLCByZXQp
OworCQkJZ290byB1bnByZXBhcmU7CisJCX0KKworCQltdGtfY3J0Yy0+ZGRwX2NvbXBbaV0gPSBj
b21wOworCX0KKworCWZvciAoenBvcyA9IDA7IHpwb3MgPCBPVkxfTEFZRVJfTlI7IHpwb3MrKykg
eworCQl0eXBlID0gKHpwb3MgPT0gMCkgPyBEUk1fUExBTkVfVFlQRV9QUklNQVJZIDoKKwkJCQko
enBvcyA9PSAxKSA/IERSTV9QTEFORV9UWVBFX0NVUlNPUiA6CisJCQkJCQlEUk1fUExBTkVfVFlQ
RV9PVkVSTEFZOworCQlyZXQgPSBtdGtfcGxhbmVfaW5pdChkcm1fZGV2LCAmbXRrX2NydGMtPnBs
YW5lc1t6cG9zXSwKKwkJCQkgICAgIEJJVChwaXBlKSwgdHlwZSwgenBvcyk7CisJCWlmIChyZXQp
CisJCQlnb3RvIHVucHJlcGFyZTsKKwl9CisKKwlyZXQgPSBtdGtfZHJtX2NydGNfaW5pdChkcm1f
ZGV2LCBtdGtfY3J0YywgJm10a19jcnRjLT5wbGFuZXNbMF0uYmFzZSwKKwkJCQkmbXRrX2NydGMt
PnBsYW5lc1sxXS5iYXNlLCBwaXBlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byB1bnByZXBhcmU7
CisKKwlwcml2LT5jcnRjID0gbXRrX2NydGM7CisJZHJtX3ByaXYtPm51bV9waXBlcysrOworCisJ
cmV0dXJuIDA7CisKK3VucHJlcGFyZToKKwl3aGlsZSAoLS1pID49IDApCisJCWNsa191bnByZXBh
cmUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCW9mX25vZGVfcHV0KG5vZGUpOworCisJ
cmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2Rpc3Bfb3ZsX3VuYmluZChzdHJ1Y3Qg
ZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJdm9pZCAqZGF0YSkKK3sKKwlz
dHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0
IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19j
cnRjID0gcHJpdi0+Y3J0YzsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+
ZGRwX2NvbXBfbnI7IGkrKykKKwkJY2xrX3VucHJlcGFyZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0t
PmNsayk7CisKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm1fZGV2LCAmcHJpdi0+ZGRwX2Nv
bXApOworCW10a19kaXNwX211dGV4X3B1dChtdGtfY3J0Yy0+bXV0ZXgpOworfQorCitzdGF0aWMg
Y29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgbXRrX2Rpc3Bfb3ZsX2NvbXBvbmVudF9vcHMgPSB7
CisJLmJpbmQJPSBtdGtfZGlzcF9vdmxfYmluZCwKKwkudW5iaW5kID0gbXRrX2Rpc3Bfb3ZsX3Vu
YmluZCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX3Byb2JlKHN0cnVjdCBwbGF0Zm9y
bV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlz
dHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2OworCWludCBjb21wX2lkOworCWludCBpcnE7CisJaW50
IHJldDsKKworCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VS
TkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJaXJxID0gcGxhdGZvcm1f
Z2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIGlycTsKKworCXJldCA9
IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIG10a19kaXNwX292bF9pcnFfaGFuZGxlciwKKwkJ
CSAgICAgICBJUlFGX1RSSUdHRVJfTk9ORSwgZGV2X25hbWUoZGV2KSwgcHJpdik7CisJaWYgKHJl
dCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4i
LCBpcnEsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY29tcF9pZCA9IG10a19kZHBfY29t
cF9nZXRfaWQoZGV2LT5vZl9ub2RlLCBNVEtfRElTUF9PVkwpOworCWlmIChjb21wX2lkIDwgMCkg
eworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIsIGNv
bXBfaWQpOworCQlyZXR1cm4gY29tcF9pZDsKKwl9CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5p
dChkZXYsIGRldi0+b2Zfbm9kZSwgJnByaXYtPmRkcF9jb21wLCBjb21wX2lkKTsKKwlpZiAocmV0
KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29tcG9uZW50OiAlZFxu
IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2
LCBwcml2KTsKKworCXJldCA9IGNvbXBvbmVudF9hZGQoZGV2LCAmbXRrX2Rpc3Bfb3ZsX2NvbXBv
bmVudF9vcHMpOworCWlmIChyZXQpCisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFkZCBjb21w
b25lbnQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtf
ZGlzcF9vdmxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9u
ZW50X2RlbCgmcGRldi0+ZGV2LCAmbXRrX2Rpc3Bfb3ZsX2NvbXBvbmVudF9vcHMpOworCisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kaXNwX292
bF9kcml2ZXJfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3
My1kaXNwLW92bCIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRrX2Rp
c3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rp
c3Bfb3ZsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbXRrX2Rpc3Bfb3ZsX3Byb2JlLAorCS5yZW1v
dmUJCT0gbXRrX2Rpc3Bfb3ZsX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibWVk
aWF0ZWstZGlzcC1vdmwiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3Rh
YmxlID0gbXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaCwKKwl9LAorfTsKZGlmZiAtLWdpdCBh
L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaCBiL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi41YmMxMDQwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcm1fY3J0Yy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n
cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fQ1JUQ19ICisjZGVmaW5lIE1US19EUk1f
Q1JUQ19ICisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlICJtdGtfZHJtX3Bs
YW5lLmgiCisKKyNkZWZpbmUgT1ZMX0xBWUVSX05SCTQKKworc3RydWN0IG10a19jcnRjX3N0YXRl
IHsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUJCWJhc2U7CisJc3RydWN0IGRybV9wZW5kaW5nX3Zi
bGFua19ldmVudAkqZXZlbnQ7CisKKwlib29sCQkJCXBlbmRpbmdfY29uZmlnOworCXVuc2lnbmVk
IGludAkJCXBlbmRpbmdfd2lkdGg7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ19oZWlnaHQ7CisJ
dW5zaWduZWQgaW50CQkJcGVuZGluZ192cmVmcmVzaDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3Ry
dWN0IG10a19jcnRjX3N0YXRlICp0b19tdGtfY3J0Y19zdGF0ZShzdHJ1Y3QgZHJtX2NydGNfc3Rh
dGUgKnMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzLCBzdHJ1Y3QgbXRrX2NydGNfc3RhdGUs
IGJhc2UpOworfQorCitpbnQgbXRrX2RybV9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9k
ZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpOwordm9pZCBtdGtfZHJtX2NydGNfZGlzYWJs
ZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpOwordm9p
ZCBtdGtfZHJtX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CisKKyNlbmRpZiAv
KiBNVEtfRFJNX0NSVENfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcm1fZGRwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2MwNjJjCi0tLSAvZGV2L251bGwK
KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMKQEAgLTAsMCArMSwz
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRo
aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8
bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgv
b2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVk
ZSA8bGludXgvcmVnbWFwLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2RkcC5oIgorI2luY2x1ZGUg
Im10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9PVkww
X01PVVRfRU4JMHgwNDAKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMV9NT1VUX0VO
CTB4MDQ0CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX09EX01PVVRfRU4JCTB4MDQ4Cisj
ZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX0dBTU1BX01PVVRfRU4JMHgwNGMKKyNkZWZpbmUg
RElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9NT1VUX0VOCTB4MDUwCisjZGVmaW5lIERJU1BfUkVH
X0NPTkZJR19ESVNQX0NPTE9SMF9TRUxfSU4JMHgwODQKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklH
X0RJU1BfQ09MT1IxX1NFTF9JTgkweDA4OAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfRFBJX1NF
TF9JTgkJMHgwYWMKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfUkRNQTFfTU9VVF9FTgkw
eDBjOAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfTU1TWVNfQ0dfQ09OMAkJMHgxMDAKKworI2Rl
ZmluZSBESVNQX1JFR19NVVRFWF9FTihuKQkoMHgyMCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJ
U1BfUkVHX01VVEVYX1JTVChuKQkoMHgyOCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVH
X01VVEVYX01PRChuKQkoMHgyYyArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX01VVEVY
X1NPRihuKQkoMHgzMCArIDB4MjAgKiAobikpCisKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfT1ZM
MAkJQklUKDExKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9PVkwxCQlCSVQoMTIpCisjZGVmaW5l
IE1VVEVYX01PRF9ESVNQX1JETUEwCQlCSVQoMTMpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JE
TUExCQlCSVQoMTQpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUEyCQlCSVQoMTUpCisjZGVm
aW5lIE1VVEVYX01PRF9ESVNQX1dETUEwCQlCSVQoMTYpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQ
X1dETUExCQlCSVQoMTcpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX0NPTE9SMAkJQklUKDE4KQor
I2RlZmluZSBNVVRFWF9NT0RfRElTUF9DT0xPUjEJCUJJVCgxOSkKKyNkZWZpbmUgTVVURVhfTU9E
X0RJU1BfQUFMCQlCSVQoMjApCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX0dBTU1BCQlCSVQoMjEp
CisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1VGT0UJCUJJVCgyMikKKyNkZWZpbmUgTVVURVhfTU9E
X0RJU1BfUFdNMAkJQklUKDIzKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9QV00xCQlCSVQoMjQp
CisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX09ECQlCSVQoMjUpCisKKyNkZWZpbmUgTVVURVhfU09G
X1NJTkdMRV9NT0RFCQkwCisjZGVmaW5lIE1VVEVYX1NPRl9EU0kwCQkJMQorI2RlZmluZSBNVVRF
WF9TT0ZfRFNJMQkJCTIKKyNkZWZpbmUgTVVURVhfU09GX0RQSTAJCQkzCisKKyNkZWZpbmUgT1ZM
MF9NT1VUX0VOX0NPTE9SMAkJMHgxCisjZGVmaW5lIE9EX01PVVRfRU5fUkRNQTAJCTB4MQorI2Rl
ZmluZSBVRk9FX01PVVRfRU5fRFNJMAkJMHgxCisjZGVmaW5lIENPTE9SMF9TRUxfSU5fT1ZMMAkJ
MHgxCisjZGVmaW5lIE9WTDFfTU9VVF9FTl9DT0xPUjEJCTB4MQorI2RlZmluZSBHQU1NQV9NT1VU
X0VOX1JETUExCQkweDEKKyNkZWZpbmUgUkRNQTFfTU9VVF9EUEkwCQkJMHgyCisjZGVmaW5lIERQ
STBfU0VMX0lOX1JETUExCQkweDEKKyNkZWZpbmUgQ09MT1IxX1NFTF9JTl9PVkwxCQkweDEKKwor
c3RydWN0IG10a19kaXNwX211dGV4IHsKKwlpbnQgaWQ7CisJYm9vbCBjbGFpbWVkOworfTsKKwor
c3RydWN0IG10a19kZHAgeworCXN0cnVjdCBkZXZpY2UJCQkqZGV2OworCXN0cnVjdCBjbGsJCQkq
Y2xrOworCXZvaWQgX19pb21lbQkJCSpyZWdzOworCXN0cnVjdCBtdGtfZGlzcF9tdXRleAkJbXV0
ZXhbMTBdOworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtdXRleF9tb2RbRERQX0NP
TVBPTkVOVF9JRF9NQVhdID0geworCVtERFBfQ09NUE9ORU5UX0FBTF0gPSBNVVRFWF9NT0RfRElT
UF9BQUwsCisJW0REUF9DT01QT05FTlRfQ09MT1IwXSA9IE1VVEVYX01PRF9ESVNQX0NPTE9SMCwK
KwlbRERQX0NPTVBPTkVOVF9DT0xPUjFdID0gTVVURVhfTU9EX0RJU1BfQ09MT1IxLAorCVtERFBf
Q09NUE9ORU5UX0dBTU1BXSA9IE1VVEVYX01PRF9ESVNQX0dBTU1BLAorCVtERFBfQ09NUE9ORU5U
X09EXSA9IE1VVEVYX01PRF9ESVNQX09ELAorCVtERFBfQ09NUE9ORU5UX09WTDBdID0gTVVURVhf
TU9EX0RJU1BfT1ZMMCwKKwlbRERQX0NPTVBPTkVOVF9PVkwxXSA9IE1VVEVYX01PRF9ESVNQX09W
TDEsCisJW0REUF9DT01QT05FTlRfUFdNMF0gPSBNVVRFWF9NT0RfRElTUF9QV00wLAorCVtERFBf
Q09NUE9ORU5UX1BXTTFdID0gTVVURVhfTU9EX0RJU1BfUFdNMSwKKwlbRERQX0NPTVBPTkVOVF9S
RE1BMF0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMCwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMV0gPSBN
VVRFWF9NT0RfRElTUF9SRE1BMSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMl0gPSBNVVRFWF9NT0Rf
RElTUF9SRE1BMiwKKwlbRERQX0NPTVBPTkVOVF9VRk9FXSA9IE1VVEVYX01PRF9ESVNQX1VGT0Us
CisJW0REUF9DT01QT05FTlRfV0RNQTBdID0gTVVURVhfTU9EX0RJU1BfV0RNQTAsCisJW0REUF9D
T01QT05FTlRfV0RNQTFdID0gTVVURVhfTU9EX0RJU1BfV0RNQTEsCit9OworCitzdGF0aWMgdW5z
aWduZWQgaW50IG10a19kZHBfbW91dF9lbihlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkJ
ICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQsCisJCQkJICAgIHVuc2lnbmVkIGludCAqYWRk
cikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwlpZiAoY3VyID09IEREUF9DT01QT05FTlRf
T1ZMMCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IwKSB7CisJCSphZGRyID0gRElTUF9S
RUdfQ09ORklHX0RJU1BfT1ZMMF9NT1VUX0VOOworCQl2YWx1ZSA9IE9WTDBfTU9VVF9FTl9DT0xP
UjA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PRCAmJiBuZXh0ID09IEREUF9D
T01QT05FTlRfUkRNQTApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9PRF9NT1VU
X0VOOworCQl2YWx1ZSA9IE9EX01PVVRfRU5fUkRNQTA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQ
X0NPTVBPTkVOVF9VRk9FICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EU0kwKSB7CisJCSphZGRy
ID0gRElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9NT1VUX0VOOworCQl2YWx1ZSA9IFVGT0VfTU9V
VF9FTl9EU0kwOworCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfT1ZMMSAmJiBuZXh0
ID09IEREUF9DT01QT05FTlRfQ09MT1IxKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJ
U1BfT1ZMMV9NT1VUX0VOOworCQl2YWx1ZSA9IE9WTDFfTU9VVF9FTl9DT0xPUjE7CisJfSBlbHNl
IGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9HQU1NQSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRf
UkRNQTEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9HQU1NQV9NT1VUX0VOOwor
CQl2YWx1ZSA9IEdBTU1BX01PVVRfRU5fUkRNQTE7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NP
TVBPTkVOVF9SRE1BMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfRFBJMCkgeworCQkqYWRkciA9
IERJU1BfUkVHX0NPTkZJR19ESVNQX1JETUExX01PVVRfRU47CisJCXZhbHVlID0gUkRNQTFfTU9V
VF9EUEkwOworCX0gZWxzZSB7CisJCXZhbHVlID0gMDsKKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9
CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXRrX2RkcF9zZWxfaW4oZW51bSBtdGtfZGRwX2NvbXBf
aWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQsCisJCQkJICAgdW5zaWdu
ZWQgaW50ICphZGRyKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCWlmIChjdXIgPT0gRERQ
X0NPTVBPTkVOVF9PVkwwICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjApIHsKKwkJKmFk
ZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjBfU0VMX0lOOworCQl2YWx1ZSA9IENPTE9S
MF9TRUxfSU5fT1ZMMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX1JETUExICYm
IG5leHQgPT0gRERQX0NPTVBPTkVOVF9EUEkwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklH
X0RQSV9TRUxfSU47CisJCXZhbHVlID0gRFBJMF9TRUxfSU5fUkRNQTE7CisJfSBlbHNlIGlmIChj
dXIgPT0gRERQX0NPTVBPTkVOVF9PVkwxICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjEp
IHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjFfU0VMX0lOOworCQl2YWx1
ZSA9IENPTE9SMV9TRUxfSU5fT1ZMMTsKKwl9IGVsc2UgeworCQl2YWx1ZSA9IDA7CisJfQorCisJ
cmV0dXJuIHZhbHVlOworfQorCit2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2b2lkIF9f
aW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAor
CQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCkKK3sKKwl1bnNpZ25lZCBpbnQgYWRk
ciwgdmFsdWUsIHJlZzsKKworCXZhbHVlID0gbXRrX2RkcF9tb3V0X2VuKGN1ciwgbmV4dCwgJmFk
ZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsg
YWRkcikgfCB2YWx1ZTsKKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBjb25maWdfcmVncyArIGFkZHIp
OworCX0KKworCXZhbHVlID0gbXRrX2RkcF9zZWxfaW4oY3VyLCBuZXh0LCAmYWRkcik7CisJaWYg
KHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmlnX3JlZ3MgKyBhZGRyKSB8IHZh
bHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorfQor
Cit2b2lkIG10a19kZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKHZvaWQgX19pb21lbSAqY29uZmln
X3JlZ3MsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRr
X2RkcF9jb21wX2lkIG5leHQpCit7CisJdW5zaWduZWQgaW50IGFkZHIsIHZhbHVlLCByZWc7CisK
Kwl2YWx1ZSA9IG10a19kZHBfbW91dF9lbihjdXIsIG5leHQsICZhZGRyKTsKKwlpZiAodmFsdWUp
IHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpICYgfnZhbHVlOwor
CQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorCisJdmFsdWUg
PSBtdGtfZGRwX3NlbF9pbihjdXIsIG5leHQsICZhZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVn
ID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpICYgfnZhbHVlOworCQl3cml0ZWxf
cmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorfQorCitzdHJ1Y3QgbXRrX2Rp
c3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVk
IGludCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7
CisJaW50IHJldDsKKworCWlmIChpZCA+PSAxMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7
CisJaWYgKGRkcC0+bXV0ZXhbaWRdLmNsYWltZWQpCisJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7
CisKKwlkZHAtPm11dGV4W2lkXS5jbGFpbWVkID0gdHJ1ZTsKKworCXJldCA9IGNsa19wcmVwYXJl
X2VuYWJsZShkZHAtPmNsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0
byBlbmFibGUgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0K
KworCXJldHVybiAmZGRwLT5tdXRleFtpZF07Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcHV0
KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9
IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4
LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKwor
CW11dGV4LT5jbGFpbWVkID0gZmFsc2U7Cit9CisKK2ludCBtdGtfZGlzcF9tdXRleF9wcmVwYXJl
KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9
IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4
LT5pZF0pOworCXJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUoZGRwLT5jbGspOworfQorCit2b2lk
IG10a19kaXNwX211dGV4X3VucHJlcGFyZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQor
eworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtf
ZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUo
ZGRwLT5jbGspOworfQorCit2b2lkIG10a19kaXNwX211dGV4X2FkZF9jb21wKHN0cnVjdCBtdGtf
ZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGlkKQorewor
CXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRw
LAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJV0FS
Tl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXN3aXRjaCAoaWQpIHsK
KwljYXNlIEREUF9DT01QT05FTlRfRFNJMDoKKwkJcmVnID0gTVVURVhfU09GX0RTSTA7CisJCWJy
ZWFrOworCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kxOgorCQlyZWcgPSBNVVRFWF9TT0ZfRFNJMDsK
KwkJYnJlYWs7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RQSTA6CisJCXJlZyA9IE1VVEVYX1NPRl9E
UEkwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWcgPSByZWFkbF9yZWxheGVkKGRkcC0+cmVn
cyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJcmVnIHw9IG11dGV4X21vZFtp
ZF07CisJCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9E
KG11dGV4LT5pZCkpOworCQlyZXR1cm47CisJfQorCisJd3JpdGVsX3JlbGF4ZWQocmVnLCBkZHAt
PnJlZ3MgKyBESVNQX1JFR19NVVRFWF9TT0YobXV0ZXgtPmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rp
c3BfbXV0ZXhfcmVtb3ZlX2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCwKKwkJCQll
bnVtIG10a19kZHBfY29tcF9pZCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFp
bmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7
CisJdW5zaWduZWQgaW50IHJlZzsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAh
PSBtdXRleCk7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RTSTA6CisJ
Y2FzZSBERFBfQ09NUE9ORU5UX0RTSTE6CisJY2FzZSBERFBfQ09NUE9ORU5UX0RQSTA6CisJCXdy
aXRlbF9yZWxheGVkKE1VVEVYX1NPRl9TSU5HTEVfTU9ERSwKKwkJCSAgICAgICBkZHAtPnJlZ3Mg
KyBESVNQX1JFR19NVVRFWF9TT0YobXV0ZXgtPmlkKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ
CXJlZyA9IHJlYWRsX3JlbGF4ZWQoZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4
LT5pZCkpOworCQlyZWcgJj0gfm11dGV4X21vZFtpZF07CisJCXdyaXRlbF9yZWxheGVkKHJlZywg
ZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOworCQlicmVhazsKKwl9
Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAq
bXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3Ry
dWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRw
LT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXdyaXRlbCgxLCBkZHAtPnJlZ3MgKyBE
SVNQX1JFR19NVVRFWF9FTihtdXRleC0+aWQpKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF9k
aXNhYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAg
KmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4
W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4
KTsKKworCXdyaXRlbCgwLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9FTihtdXRleC0+aWQp
KTsKK30KKworc3RhdGljIGludCBtdGtfZGRwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug
KnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRr
X2RkcCAqZGRwOworCXN0cnVjdCByZXNvdXJjZSAqcmVnczsKKwlpbnQgaTsKKworCWRkcCA9IGRl
dm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGRwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZHApCisJ
CXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCWRkcC0+bXV0
ZXhbaV0uaWQgPSBpOworCisJZGRwLT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlp
ZiAoSVNfRVJSKGRkcC0+Y2xrKSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgY2xv
Y2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkZHAtPmNsayk7CisJfQorCisJcmVncyA9IHBsYXRm
b3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJZGRwLT5yZWdzID0g
ZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVncyk7CisJaWYgKElTX0VSUihkZHAtPnJlZ3Mp
KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIG1hcCBtdXRleCByZWdpc3RlcnNcbiIpOwor
CQlyZXR1cm4gUFRSX0VSUihkZHAtPnJlZ3MpOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRh
KHBkZXYsIGRkcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZGRwX3JlbW92
ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0
aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkZHBfZHJpdmVyX2R0X21hdGNoW10gPSB7CisJ
eyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1tdXRleCIgfSwKKwl7fSwKK307
CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkZHBfZHJpdmVyX2R0X21hdGNoKTsKKworc3RhdGlj
IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RkcF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10
a19kZHBfcHJvYmUsCisJLnJlbW92ZQkJPSBtdGtfZGRwX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsK
KwkJLm5hbWUJPSAibWVkaWF0ZWstZGRwIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5v
Zl9tYXRjaF90YWJsZSA9IGRkcF9kcml2ZXJfZHRfbWF0Y2gsCisJfSwKK307CisKK21vZHVsZV9w
bGF0Zm9ybV9kcml2ZXIobXRrX2RkcF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RybV9kZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmMxMTc1Ci0t
LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgK
QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK
KyNpZm5kZWYgTVRLX0RSTV9ERFBfSAorI2RlZmluZSBNVEtfRFJNX0REUF9ICisKKyNpbmNsdWRl
ICJtdGtfZHJtX2RkcF9jb21wLmgiCisKK3N0cnVjdCByZWdtYXA7CitzdHJ1Y3QgZGV2aWNlOwor
c3RydWN0IG10a19kaXNwX211dGV4OworCit2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2
b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQg
Y3VyLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCk7Cit2b2lkIG10a19kZHBf
cmVtb3ZlX2NvbXBfZnJvbV9wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkJICAg
ZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5l
eHQpOworCitzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3Qg
ZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCk7CitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFy
ZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfYWRk
X2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCwKKwkJCSAgICAgZW51bSBtdGtfZGRw
X2NvbXBfaWQgaWQpOwordm9pZCBtdGtfZGlzcF9tdXRleF9lbmFibGUoc3RydWN0IG10a19kaXNw
X211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X2Rpc2FibGUoc3RydWN0IG10a19k
aXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKHN0cnVj
dCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpOwor
dm9pZCBtdGtfZGlzcF9tdXRleF91bnByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRl
eCk7Cit2b2lkIG10a19kaXNwX211dGV4X3B1dChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4
KTsKKworI2VuZGlmIC8qIE1US19EUk1fRERQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RybV9kZHBfY29tcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmRlMDIzNzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RybV9kZHBfY29tcC5jCkBAIC0wLDAgKzEsNDMxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDE1IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcnM6CisgKglZVCBTaGVuIDx5dC5zaGVuQG1lZGlh
dGVrLmNvbT4KKyAqCUNLIEh1IDxjay5odUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9n
cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9j
bGsuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3Mu
aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9y
bS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGRybS9k
cm1QLmg+CisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5l
LmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1BfUkVHX09W
TF9JTlRFTgkJCTB4MDAwNAorI2RlZmluZSBPVkxfRk1FX0NQTF9JTlQJCQkJCUJJVCgxKQorI2Rl
ZmluZSBESVNQX1JFR19PVkxfSU5UU1RBCQkJMHgwMDA4CisjZGVmaW5lIERJU1BfUkVHX09WTF9F
TgkJCQkweDAwMGMKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JTVAkJCTB4MDAxNAorI2RlZmluZSBE
SVNQX1JFR19PVkxfUk9JX1NJWkUJCQkweDAwMjAKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JPSV9C
R0NMUgkJCTB4MDAyOAorI2RlZmluZSBESVNQX1JFR19PVkxfU1JDX0NPTgkJCTB4MDAyYworI2Rl
ZmluZSBESVNQX1JFR19PVkxfQ09OKG4pCQkJKDB4MDAzMCArIDB4MjAgKiBuKQorI2RlZmluZSBE
SVNQX1JFR19PVkxfU1JDX1NJWkUobikJCSgweDAwMzggKyAweDIwICogbikKKyNkZWZpbmUgRElT
UF9SRUdfT1ZMX09GRlNFVChuKQkJCSgweDAwM2MgKyAweDIwICogbikKKyNkZWZpbmUgRElTUF9S
RUdfT1ZMX1BJVENIKG4pCQkJKDB4MDA0NCArIDB4MjAgKiBuKQorI2RlZmluZSBESVNQX1JFR19P
VkxfUkRNQV9DVFJMKG4pCQkoMHgwMGMwICsgMHgyMCAqIG4pCisjZGVmaW5lIERJU1BfUkVHX09W
TF9SRE1BX0dNQyhuKQkJKDB4MDBjOCArIDB4MjAgKiBuKQorI2RlZmluZSBESVNQX1JFR19PVkxf
QUREUihuKQkJCSgweDBmNDAgKyAweDIwICogbikKKworI2RlZmluZSBESVNQX1JFR19SRE1BX0lO
VF9FTkFCTEUJCTB4MDAwMAorI2RlZmluZSBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMJCTB4MDAw
NAorI2RlZmluZSBESVNQX1JFR19SRE1BX0dMT0JBTF9DT04JCTB4MDAxMAorI2RlZmluZSBESVNQ
X1JFR19SRE1BX1NJWkVfQ09OXzAJCTB4MDAxNAorI2RlZmluZSBESVNQX1JFR19SRE1BX1NJWkVf
Q09OXzEJCTB4MDAxOAorI2RlZmluZSBESVNQX1JFR19SRE1BX0ZJRk9fQ09OCQkJMHgwMDQwCisj
ZGVmaW5lIFJETUFfRklGT19VTkRFUkZMT1dfRU4JCQkJQklUKDMxKQorI2RlZmluZSBSRE1BX0ZJ
Rk9fUFNFVURPX1NJWkUoYnl0ZXMpCQkJKCgoYnl0ZXMpIC8gMTYpIDw8IDE2KQorI2RlZmluZSBS
RE1BX09VVFBVVF9WQUxJRF9GSUZPX1RIUkVTSE9MRChieXRlcykJCSgoYnl0ZXMpIC8gMTYpCisK
KyNkZWZpbmUgRElTUF9PRF9FTgkJCQkweDAwMDAKKyNkZWZpbmUgRElTUF9PRF9JTlRFTgkJCQkw
eDAwMDgKKyNkZWZpbmUgRElTUF9PRF9JTlRTVEEJCQkJMHgwMDBjCisjZGVmaW5lIERJU1BfT0Rf
Q0ZHCQkJCTB4MDAyMAorI2RlZmluZSBESVNQX09EX1NJWkUJCQkJMHgwMDMwCisKKyNkZWZpbmUg
RElTUF9SRUdfVUZPX1NUQVJUCQkJMHgwMDAwCisKKyNkZWZpbmUgRElTUF9DT0xPUl9DRkdfTUFJ
TgkJCTB4MDQwMAorI2RlZmluZSBESVNQX0NPTE9SX1NUQVJUCQkJMHgwYzAwCisjZGVmaW5lIERJ
U1BfQ09MT1JfV0lEVEgJCQkweDBjNTAKKyNkZWZpbmUgRElTUF9DT0xPUl9IRUlHSFQJCQkweDBj
NTQKKworZW51bSBPVkxfSU5QVVRfRk9STUFUIHsKKwlPVkxfSU5GTVRfUkdCNTY1ID0gMCwKKwlP
VkxfSU5GTVRfUkdCODg4ID0gMSwKKwlPVkxfSU5GTVRfUkdCQTg4ODggPSAyLAorCU9WTF9JTkZN
VF9BUkdCODg4OCA9IDMsCit9OworCisjZGVmaW5lCU9WTF9SRE1BX01FTV9HTUMJMHg0MDQwMjAy
MAorI2RlZmluZQlPVkxfQUVOCQkJQklUKDgpCisjZGVmaW5lCU9WTF9BTFBIQQkJMHhmZgorCisj
ZGVmaW5lCU9EX1JFTEFZX01PREUJCUJJVCgwKQorCisjZGVmaW5lCVVGT19CWVBBU1MJCUJJVCgy
KQorCisjZGVmaW5lCUNPTE9SX0JZUEFTU19BTEwJQklUKDcpCisjZGVmaW5lCUNPTE9SX1NFUV9T
RUwJCUJJVCgxMykKKworc3RhdGljIHZvaWQgbXRrX2NvbG9yX2NvbmZpZyh2b2lkIF9faW9tZW0g
KmNvbG9yX2Jhc2UsIHVuc2lnbmVkIGludCB3LAorCQl1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQg
aW50IHZyZWZyZXNoKQoreworCXdyaXRlbCh3LCBjb2xvcl9iYXNlICsgRElTUF9DT0xPUl9XSURU
SCk7CisJd3JpdGVsKGgsIGNvbG9yX2Jhc2UgKyBESVNQX0NPTE9SX0hFSUdIVCk7Cit9CisKK3N0
YXRpYyB2b2lkIG10a19jb2xvcl9zdGFydCh2b2lkIF9faW9tZW0gKmNvbG9yX2Jhc2UpCit7CisJ
d3JpdGVsKENPTE9SX0JZUEFTU19BTEwgfCBDT0xPUl9TRVFfU0VMLAorCQljb2xvcl9iYXNlICsg
RElTUF9DT0xPUl9DRkdfTUFJTik7CisJd3JpdGVsKDB4MSwgY29sb3JfYmFzZSArIERJU1BfQ09M
T1JfU1RBUlQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfb2RfY29uZmlnKHZvaWQgX19pb21lbSAq
b2RfYmFzZSwgdW5zaWduZWQgaW50IHcsIHVuc2lnbmVkIGludCBoLAorCQl1bnNpZ25lZCBpbnQg
dnJlZnJlc2gpCit7CisJd3JpdGVsKHcgPDwgMTYgfCBoLCBvZF9iYXNlICsgRElTUF9PRF9TSVpF
KTsKK30KKworc3RhdGljIHZvaWQgbXRrX29kX3N0YXJ0KHZvaWQgX19pb21lbSAqb2RfYmFzZSkK
K3sKKwl3cml0ZWwoT0RfUkVMQVlfTU9ERSwgb2RfYmFzZSArIERJU1BfT0RfQ0ZHKTsKKwl3cml0
ZWwoMSwgb2RfYmFzZSArIERJU1BfT0RfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2Vu
YWJsZV92Ymxhbmsodm9pZCBfX2lvbWVtICpkaXNwX2Jhc2UpCit7CisJd3JpdGVsKE9WTF9GTUVf
Q1BMX0lOVCwgZGlzcF9iYXNlICsgRElTUF9SRUdfT1ZMX0lOVEVOKTsKK30KKworc3RhdGljIHZv
aWQgbXRrX292bF9kaXNhYmxlX3ZibGFuayh2b2lkIF9faW9tZW0gKmRpc3BfYmFzZSkKK3sKKwl3
cml0ZWwoMHgwLCBkaXNwX2Jhc2UgKyBESVNQX1JFR19PVkxfSU5URU4pOworfQorCitzdGF0aWMg
dm9pZCBtdGtfb3ZsX2NsZWFyX3ZibGFuayh2b2lkIF9faW9tZW0gKmRpc3BfYmFzZSkKK3sKKwl3
cml0ZWwoMHgwLCBkaXNwX2Jhc2UgKyBESVNQX1JFR19PVkxfSU5UU1RBKTsKK30KKworc3RhdGlj
IHZvaWQgbXRrX292bF9zdGFydCh2b2lkIF9faW9tZW0gKm92bF9iYXNlKQoreworCXdyaXRlbCgw
eDEsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292
bF9jb25maWcodm9pZCBfX2lvbWVtICpvdmxfYmFzZSwKKwkJdW5zaWduZWQgaW50IHcsIHVuc2ln
bmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCit7CisJaWYgKHcgIT0gMCAmJiBoICE9
IDApCisJCXdyaXRlbChoIDw8IDE2IHwgdywgb3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfUk9JX1NJ
WkUpOworCXdyaXRlbCgweDAsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX1JPSV9CR0NMUik7CisK
Kwl3cml0ZWwoMHgxLCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9SU1QpOworCXdyaXRlbCgweDAs
IG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX1JTVCk7Cit9CisKK3N0YXRpYyBib29sIGhhc19yYl9z
d2FwcGVkKHVuc2lnbmVkIGludCBmbXQpCit7CisJc3dpdGNoIChmbXQpIHsKKwljYXNlIERSTV9G
T1JNQVRfQkdSODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1I1NjU6CisJY2FzZSBEUk1fRk9STUFU
X0FCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRf
QkdSQTg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUlg4ODg4OgorCQlyZXR1cm4gdHJ1ZTsKKwlk
ZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG92
bF9mbXRfY29udmVydCh1bnNpZ25lZCBpbnQgZm10KQoreworCXN3aXRjaCAoZm10KSB7CisJY2Fz
ZSBEUk1fRk9STUFUX1JHQjg4ODoKKwljYXNlIERSTV9GT1JNQVRfQkdSODg4OgorCQlyZXR1cm4g
T1ZMX0lORk1UX1JHQjg4ODsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCWNhc2UgRFJNX0ZP
Uk1BVF9CR1I1NjU6CisJCXJldHVybiBPVkxfSU5GTVRfUkdCNTY1OworCWNhc2UgRFJNX0ZPUk1B
VF9SR0JYODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJY2FzZSBEUk1fRk9STUFU
X0JHUlg4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKKwkJcmV0dXJuIE9WTF9JTkZN
VF9BUkdCODg4ODsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFU
X0FSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRf
QUJHUjg4ODg6CisJCXJldHVybiBPVkxfSU5GTVRfUkdCQTg4ODg7CisJZGVmYXVsdDoKKwkJRFJN
X0VSUk9SKCJ1bnN1cHBvcnRlZCBmb3JtYXRbJTA4eF1cbiIsIGZtdCk7CisJCXJldHVybiBPVkxf
SU5GTVRfUkdCODg4OworCX0KK30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9vbih2b2lk
IF9faW9tZW0gKm92bF9iYXNlLCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGludCBy
ZWc7CisKKwl3cml0ZWwoMHgxLCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9SRE1BX0NUUkwoaWR4
KSk7CisJd3JpdGVsKE9WTF9SRE1BX01FTV9HTUMsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX1JE
TUFfR01DKGlkeCkpOworCisJcmVnID0gcmVhZGwob3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfU1JD
X0NPTik7CisJcmVnID0gcmVnIHwgKDEgPDwgaWR4KTsKKwl3cml0ZWwocmVnLCBvdmxfYmFzZSAr
IERJU1BfUkVHX09WTF9TUkNfQ09OKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9v
ZmYodm9pZCBfX2lvbWVtICpvdmxfYmFzZSwgdW5zaWduZWQgaW50IGlkeCkKK3sKKwl1bnNpZ25l
ZCBpbnQgcmVnOworCisJcmVnID0gcmVhZGwob3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfU1JDX0NP
Tik7CisJcmVnID0gcmVnICYgfigxIDw8IGlkeCk7CisJd3JpdGVsKHJlZywgb3ZsX2Jhc2UgKyBE
SVNQX1JFR19PVkxfU1JDX0NPTik7CisKKwl3cml0ZWwoMHgwLCBvdmxfYmFzZSArIERJU1BfUkVH
X09WTF9SRE1BX0NUUkwoaWR4KSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfbGF5ZXJfY29u
ZmlnKHZvaWQgX19pb21lbSAqb3ZsX2Jhc2UsIHVuc2lnbmVkIGludCBpZHgsCisJCXN0cnVjdCBt
dGtfcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXVuc2lnbmVkIGludCBhZGRyID0gc3RhdGUtPnBl
bmRpbmdfYWRkcjsKKwl1bnNpZ25lZCBpbnQgcGl0Y2ggPSBzdGF0ZS0+cGVuZGluZ19waXRjaCAm
IDB4ZmZmZjsKKwl1bnNpZ25lZCBpbnQgZm10ID0gc3RhdGUtPnBlbmRpbmdfZm9ybWF0OworCXVu
c2lnbmVkIGludCBvZmZzZXQgPSAoc3RhdGUtPnBlbmRpbmdfeSA8PCAxNikgfCBzdGF0ZS0+cGVu
ZGluZ194OworCXVuc2lnbmVkIGludCBzcmNfc2l6ZSA9IChzdGF0ZS0+cGVuZGluZ19oZWlnaHQg
PDwgMTYpIHwKKwkJCQlzdGF0ZS0+cGVuZGluZ193aWR0aDsKKwl1bnNpZ25lZCBpbnQgY29uOwor
CisJY29uID0gaGFzX3JiX3N3YXBwZWQoZm10KSA8PCAyNCB8IG92bF9mbXRfY29udmVydChmbXQp
IDw8IDEyOworCWlmIChpZHggIT0gMCkKKwkJY29uIHw9IE9WTF9BRU4gfCBPVkxfQUxQSEE7CisK
Kwl3cml0ZWwoY29uLCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9DT04oaWR4KSk7CisJd3JpdGVs
KHBpdGNoLCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9QSVRDSChpZHgpKTsKKwl3cml0ZWwoc3Jj
X3NpemUsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX1NSQ19TSVpFKGlkeCkpOworCXdyaXRlbChv
ZmZzZXQsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX09GRlNFVChpZHgpKTsKKwl3cml0ZWwoYWRk
ciwgb3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfQUREUihpZHgpKTsKK30KKworc3RhdGljIHZvaWQg
bXRrX3JkbWFfc3RhcnQodm9pZCBfX2lvbWVtICpyZG1hX2Jhc2UpCit7CisJdW5zaWduZWQgaW50
IHJlZzsKKworCXdyaXRlbCgweDQsIHJkbWFfYmFzZSArIERJU1BfUkVHX1JETUFfSU5UX0VOQUJM
RSk7CisJcmVnID0gcmVhZGwocmRtYV9iYXNlICsgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OKTsK
KwlyZWcgfD0gMTsKKwl3cml0ZWwocmVnLCByZG1hX2Jhc2UgKyBESVNQX1JFR19SRE1BX0dMT0JB
TF9DT04pOworfQorCitzdGF0aWMgdm9pZCBtdGtfcmRtYV9jb25maWcodm9pZCBfX2lvbWVtICpy
ZG1hX2Jhc2UsCisJCXVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGlu
dCB2cmVmcmVzaCkKK3sKKwl1bnNpZ25lZCBpbnQgdGhyZXNob2xkOworCXVuc2lnbmVkIGludCBy
ZWc7CisKKwlyZWcgPSByZWFkbChyZG1hX2Jhc2UgKyBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzAp
OworCXJlZyA9IChyZWcgJiB+KDB4ZmZmKSkgfCAod2lkdGggJiAweGZmZik7CisJd3JpdGVsKHJl
ZywgcmRtYV9iYXNlICsgRElTUF9SRUdfUkRNQV9TSVpFX0NPTl8wKTsKKworCXJlZyA9IHJlYWRs
KHJkbWFfYmFzZSArIERJU1BfUkVHX1JETUFfU0laRV9DT05fMSk7CisJcmVnID0gKHJlZyAmIH4o
MHhmZmZmZikpIHwgKGhlaWdodCAmIDB4ZmZmZmYpOworCXdyaXRlbChyZWcsIHJkbWFfYmFzZSAr
IERJU1BfUkVHX1JETUFfU0laRV9DT05fMSk7CisKKwkvKgorCSAqIEVuYWJsZSBGSUZPIHVuZGVy
ZmxvdyBzaW5jZSBEU0kgYW5kIERQSSBjYW4ndCBiZSBibG9ja2VkLgorCSAqIEtlZXAgdGhlIEZJ
Rk8gcHNldWRvIHNpemUgcmVzZXQgZGVmYXVsdCBvZiA4IEtpQi4gU2V0IHRoZQorCSAqIG91dHB1
dCB0aHJlc2hvbGQgdG8gNiBtaWNyb3NlY29uZHMgd2l0aCA3LzYgb3ZlcmhlYWQgdG8KKwkgKiBh
Y2NvdW50IGZvciBibGFua2luZywgYW5kIHdpdGggYSBwaXhlbCBkZXB0aCBvZiA0IGJ5dGVzOgor
CSAqLworCXRocmVzaG9sZCA9IHdpZHRoICogaGVpZ2h0ICogdnJlZnJlc2ggKiA0ICogNyAvIDEw
MDAwMDA7CisJcmVnID0gUkRNQV9GSUZPX1VOREVSRkxPV19FTiB8CisJICAgICAgUkRNQV9GSUZP
X1BTRVVET19TSVpFKFNaXzhLKSB8CisJICAgICAgUkRNQV9PVVRQVVRfVkFMSURfRklGT19USFJF
U0hPTEQodGhyZXNob2xkKTsKKwl3cml0ZWwocmVnLCByZG1hX2Jhc2UgKyBESVNQX1JFR19SRE1B
X0ZJRk9fQ09OKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3Vmb2Vfc3RhcnQodm9pZCBfX2lvbWVt
ICp1Zm9lX2Jhc2UpCit7CisJd3JpdGVsKFVGT19CWVBBU1MsIHVmb2VfYmFzZSArIERJU1BfUkVH
X1VGT19TVEFSVCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNz
IGRkcF9ub3AgPSB7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5j
cyBkZHBfY29sb3IgPSB7CisJLmNvbmZpZyA9IG10a19jb2xvcl9jb25maWcsCisJLnBvd2VyX29u
ID0gbXRrX2NvbG9yX3N0YXJ0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2Nv
bXBfZnVuY3MgZGRwX29kID0geworCS5jb25maWcgPSBtdGtfb2RfY29uZmlnLAorCS5wb3dlcl9v
biA9IG10a19vZF9zdGFydCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21w
X2Z1bmNzIGRkcF9vdmwgPSB7CisJLmNvbmZpZyA9IG10a19vdmxfY29uZmlnLAorCS5wb3dlcl9v
biA9IG10a19vdmxfc3RhcnQsCisJLmVuYWJsZV92YmxhbmsgPSBtdGtfb3ZsX2VuYWJsZV92Ymxh
bmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRrX292bF9kaXNhYmxlX3ZibGFuaywKKwkuY2xlYXJf
dmJsYW5rID0gbXRrX292bF9jbGVhcl92YmxhbmssCisJLmxheWVyX29uID0gbXRrX292bF9sYXll
cl9vbiwKKwkubGF5ZXJfb2ZmID0gbXRrX292bF9sYXllcl9vZmYsCisJLmxheWVyX2NvbmZpZyA9
IG10a19vdmxfbGF5ZXJfY29uZmlnLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRw
X2NvbXBfZnVuY3MgZGRwX3JkbWEgPSB7CisJLmNvbmZpZyA9IG10a19yZG1hX2NvbmZpZywKKwku
cG93ZXJfb24gPSBtdGtfcmRtYV9zdGFydCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRr
X2RkcF9jb21wX2Z1bmNzIGRkcF91Zm9lID0geworCS5wb3dlcl9vbiA9IG10a191Zm9lX3N0YXJ0
LAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtdGtfZGRwX2NvbXBfc3RlbVtNVEtf
RERQX0NPTVBfVFlQRV9NQVhdID0geworCVtNVEtfRElTUF9PVkxdID0gIm92bCIsCisJW01US19E
SVNQX1JETUFdID0gInJkbWEiLAorCVtNVEtfRElTUF9XRE1BXSA9ICJ3ZG1hIiwKKwlbTVRLX0RJ
U1BfQ09MT1JdID0gImNvbG9yIiwKKwlbTVRLX0RJU1BfQUFMXSA9ICJhYWwiLAorCVtNVEtfRElT
UF9HQU1NQV0gPSAiZ2FtbWEiLAorCVtNVEtfRElTUF9VRk9FXSA9ICJ1Zm9lIiwKKwlbTVRLX0RT
SV0gPSAiZHNpIiwKKwlbTVRLX0RQSV0gPSAiZHBpIiwKKwlbTVRLX0RJU1BfUFdNXSA9ICJwd20i
LAorCVtNVEtfRElTUF9NVVRFWF0gPSAibXV0ZXgiLAorCVtNVEtfRElTUF9PRF0gPSAib2QiLAor
fTsKKworc3RydWN0IG10a19kZHBfY29tcF9tYXRjaCB7CisJZW51bSBtdGtfZGRwX2NvbXBfdHlw
ZSB0eXBlOworCWludCBhbGlhc19pZDsKKwljb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNz
ICpmdW5jczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRrX2RkcF9jb21wX21hdGNoIG10a19kZHBf
bWF0Y2hlc1tERFBfQ09NUE9ORU5UX0lEX01BWF0gPSB7CisJW0REUF9DT01QT05FTlRfQUFMXQk9
IHsgTVRLX0RJU1BfQUFMLAkwLCAmZGRwX25vcCB9LAorCVtERFBfQ09NUE9ORU5UX0NPTE9SMF0J
PSB7IE1US19ESVNQX0NPTE9SLAkwLCAmZGRwX2NvbG9yIH0sCisJW0REUF9DT01QT05FTlRfQ09M
T1IxXQk9IHsgTVRLX0RJU1BfQ09MT1IsCTEsICZkZHBfY29sb3IgfSwKKwlbRERQX0NPTVBPTkVO
VF9EUEkwXQk9IHsgTVRLX0RQSSwJCTAsICZkZHBfbm9wIH0sCisJW0REUF9DT01QT05FTlRfRFNJ
MF0JPSB7IE1US19EU0ksCQkwLCAmZGRwX25vcCB9LAorCVtERFBfQ09NUE9ORU5UX0RTSTFdCT0g
eyBNVEtfRFNJLAkJMSwgJmRkcF9ub3AgfSwKKwlbRERQX0NPTVBPTkVOVF9HQU1NQV0JPSB7IE1U
S19ESVNQX0dBTU1BLAkwLCAmZGRwX25vcCB9LAorCVtERFBfQ09NUE9ORU5UX09EXQk9IHsgTVRL
X0RJU1BfT0QsCTAsICZkZHBfbm9wIH0sCisJW0REUF9DT01QT05FTlRfT1ZMMF0JPSB7IE1US19E
SVNQX09WTCwJMCwgJmRkcF9vdmwgfSwKKwlbRERQX0NPTVBPTkVOVF9PVkwxXQk9IHsgTVRLX0RJ
U1BfT1ZMLAkxLCAmZGRwX292bCB9LAorCVtERFBfQ09NUE9ORU5UX1BXTTBdCT0geyBNVEtfRElT
UF9QV00sCTAsICZkZHBfbm9wIH0sCisJW0REUF9DT01QT05FTlRfUkRNQTBdCT0geyBNVEtfRElT
UF9SRE1BLAkwLCAmZGRwX3JkbWEgfSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMV0JPSB7IE1US19E
SVNQX1JETUEsCTEsICZkZHBfcmRtYSB9LAorCVtERFBfQ09NUE9ORU5UX1JETUEyXQk9IHsgTVRL
X0RJU1BfUkRNQSwJMiwgJmRkcF9yZG1hIH0sCisJW0REUF9DT01QT05FTlRfVUZPRV0JPSB7IE1U
S19ESVNQX1VGT0UsCTAsICZkZHBfdWZvZSB9LAorCVtERFBfQ09NUE9ORU5UX1dETUEwXQk9IHsg
TVRLX0RJU1BfV0RNQSwJMCwgJmRkcF9ub3AgfSwKKwlbRERQX0NPTVBPTkVOVF9XRE1BMV0JPSB7
IE1US19ESVNQX1dETUEsCTEsICZkZHBfbm9wIH0sCit9OworCitpbnQgbXRrX2RkcF9jb21wX2dl
dF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQllbnVtIG10a19kZHBfY29tcF90eXBl
IGNvbXBfdHlwZSkKK3sKKwlpbnQgaWQgPSBvZl9hbGlhc19nZXRfaWQobm9kZSwgbXRrX2RkcF9j
b21wX3N0ZW1bY29tcF90eXBlXSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf
U0laRShtdGtfZGRwX21hdGNoZXMpOyBpKyspIHsKKwkJaWYgKGNvbXBfdHlwZSA9PSBtdGtfZGRw
X21hdGNoZXNbaV0udHlwZSAmJgorCQkgICAgKGlkIDwgMCB8fCBpZCA9PSBtdGtfZGRwX21hdGNo
ZXNbaV0uYWxpYXNfaWQpKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9
CisKK2ludCBtdGtfZGRwX2NvbXBfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZp
Y2Vfbm9kZSAqbm9kZSwKKwkJICAgICAgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgZW51bSBt
dGtfZGRwX2NvbXBfaWQgY29tcF9pZCkKK3sKKwllbnVtIG10a19kZHBfY29tcF90eXBlIHR5cGU7
CisJc3RydWN0IGRldmljZV9ub2RlICpsYXJiX25vZGU7CisJc3RydWN0IHBsYXRmb3JtX2Rldmlj
ZSAqbGFyYl9wZGV2OworCisJaWYgKGNvbXBfaWQgPCAwIHx8IGNvbXBfaWQgPj0gRERQX0NPTVBP
TkVOVF9JRF9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJY29tcC0+aWQgPSBjb21wX2lkOwor
CWNvbXAtPmZ1bmNzID0gbXRrX2RkcF9tYXRjaGVzW2NvbXBfaWRdLmZ1bmNzOworCisJaWYgKGNv
bXBfaWQgPT0gRERQX0NPTVBPTkVOVF9EUEkwIHx8CisJICAgIGNvbXBfaWQgPT0gRERQX0NPTVBP
TkVOVF9EU0kwIHx8CisJICAgIGNvbXBfaWQgPT0gRERQX0NPTVBPTkVOVF9QV00wKSB7CisJCWNv
bXAtPnJlZ3MgPSBOVUxMOworCQljb21wLT5jbGsgPSBOVUxMOworCQljb21wLT5pcnEgPSAwOwor
CQlyZXR1cm4gMDsKKwl9CisKKwljb21wLT5yZWdzID0gb2ZfaW9tYXAobm9kZSwgMCk7CisJY29t
cC0+aXJxID0gb2ZfaXJxX2dldChub2RlLCAwKTsKKwljb21wLT5jbGsgPSBvZl9jbGtfZ2V0KG5v
ZGUsIDApOworCWlmIChJU19FUlIoY29tcC0+Y2xrKSkKKwkJY29tcC0+Y2xrID0gTlVMTDsKKwor
CXR5cGUgPSBtdGtfZGRwX21hdGNoZXNbY29tcF9pZF0udHlwZTsKKworCS8qIE9ubHkgRE1BIGNh
cGFibGUgY29tcG9uZW50cyBuZWVkIHRoZSBMQVJCIHByb3BlcnR5ICovCisJY29tcC0+bGFyYl9k
ZXYgPSBOVUxMOworCWlmICh0eXBlICE9IE1US19ESVNQX09WTCAmJgorCSAgICB0eXBlICE9IE1U
S19ESVNQX1JETUEgJiYKKwkgICAgdHlwZSAhPSBNVEtfRElTUF9XRE1BKQorCQlyZXR1cm4gMDsK
KworCWxhcmJfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobm9kZSwgIm1lZGlhdGVrLGxhcmIiLCAw
KTsKKwlpZiAoIWxhcmJfbm9kZSkgeworCQlkZXZfZXJyKGRldiwKKwkJCSJNaXNzaW5nIG1lZGlh
ZGVrLGxhcmIgcGhhbmRsZSBpbiAlcyBub2RlXG4iLAorCQkJbm9kZS0+ZnVsbF9uYW1lKTsKKwkJ
cmV0dXJuIC1FSU5WQUw7CisJfQorCisJbGFyYl9wZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9k
ZShsYXJiX25vZGUpOworCWlmICghbGFyYl9wZGV2KSB7CisJCWRldl93YXJuKGRldiwgIldhaXRp
bmcgZm9yIGxhcmIgZGV2aWNlICVzXG4iLAorCQkJIGxhcmJfbm9kZS0+ZnVsbF9uYW1lKTsKKwkJ
cmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCisJY29tcC0+bGFyYl9kZXYgPSAmbGFyYl9wZGV2
LT5kZXY7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19kZHBfY29tcF9yZWdpc3RlcihzdHJ1
Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVj
dCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkcm0tPmRldl9wcml2YXRlOworCisJaWYgKHBy
aXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByaXZhdGUt
PmRkcF9jb21wW2NvbXAtPmlkXSA9IGNvbXA7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXRrX2Rk
cF9jb21wX3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kZHBf
Y29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5k
ZXZfcHJpdmF0ZTsKKworCXByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSA9IE5VTEw7Cit9CmRp
ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDZjM2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaApAQCAtMCwwICsxLDE1MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9n
cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9E
RFBfQ09NUF9ICisjZGVmaW5lIE1US19EUk1fRERQX0NPTVBfSAorCisjaW5jbHVkZSA8bGludXgv
aW8uaD4KKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBkcm1f
ZGV2aWNlOworc3RydWN0IG10a19wbGFuZV9zdGF0ZTsKKworZW51bSBtdGtfZGRwX2NvbXBfdHlw
ZSB7CisJTVRLX0RJU1BfT1ZMLAorCU1US19ESVNQX1JETUEsCisJTVRLX0RJU1BfV0RNQSwKKwlN
VEtfRElTUF9DT0xPUiwKKwlNVEtfRElTUF9BQUwsCisJTVRLX0RJU1BfR0FNTUEsCisJTVRLX0RJ
U1BfVUZPRSwKKwlNVEtfRFNJLAorCU1US19EUEksCisJTVRLX0RJU1BfUFdNLAorCU1US19ESVNQ
X01VVEVYLAorCU1US19ESVNQX09ELAorCU1US19ERFBfQ09NUF9UWVBFX01BWCwKK307CisKK2Vu
dW0gbXRrX2RkcF9jb21wX2lkIHsKKwlERFBfQ09NUE9ORU5UX0FBTCwKKwlERFBfQ09NUE9ORU5U
X0NPTE9SMCwKKwlERFBfQ09NUE9ORU5UX0NPTE9SMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCisJ
RERQX0NPTVBPTkVOVF9EU0kwLAorCUREUF9DT01QT05FTlRfRFNJMSwKKwlERFBfQ09NUE9ORU5U
X0dBTU1BLAorCUREUF9DT01QT05FTlRfT0QsCisJRERQX0NPTVBPTkVOVF9PVkwwLAorCUREUF9D
T01QT05FTlRfT1ZMMSwKKwlERFBfQ09NUE9ORU5UX1BXTTAsCisJRERQX0NPTVBPTkVOVF9QV00x
LAorCUREUF9DT01QT05FTlRfUkRNQTAsCisJRERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09N
UE9ORU5UX1JETUEyLAorCUREUF9DT01QT05FTlRfVUZPRSwKKwlERFBfQ09NUE9ORU5UX1dETUEw
LAorCUREUF9DT01QT05FTlRfV0RNQTEsCisJRERQX0NPTVBPTkVOVF9JRF9NQVgsCit9OworCitz
dHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIHsKKwl2b2lkICgqY29uZmlnKSh2b2lkIF9faW9tZW0g
KmJhc2UsIHVuc2lnbmVkIGludCB3LCB1bnNpZ25lZCBpbnQgaCwKKwkJICAgICAgIHVuc2lnbmVk
IGludCB2cmVmcmVzaCk7CisJdm9pZCAoKnBvd2VyX29uKSh2b2lkIF9faW9tZW0gKmJhc2UpOwor
CXZvaWQgKCpwb3dlcl9vZmYpKHZvaWQgX19pb21lbSAqYmFzZSk7CisJdm9pZCAoKmVuYWJsZV92
YmxhbmspKHZvaWQgX19pb21lbSAqYmFzZSk7CisJdm9pZCAoKmRpc2FibGVfdmJsYW5rKSh2b2lk
IF9faW9tZW0gKmJhc2UpOworCXZvaWQgKCpjbGVhcl92YmxhbmspKHZvaWQgX19pb21lbSAqYmFz
ZSk7CisJdm9pZCAoKmxheWVyX29uKSh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBp
ZHgpOworCXZvaWQgKCpsYXllcl9vZmYpKHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50
IGlkeCk7CisJdm9pZCAoKmxheWVyX2NvbmZpZykodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25l
ZCBpbnQgaWR4LAorCQkJICAgICBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cit9Owor
CitzdHJ1Y3QgbXRrX2RkcF9jb21wIHsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdm9pZCBfX2lvbWVt
ICpyZWdzOworCWludCBpcnE7CisJc3RydWN0IGRldmljZSAqbGFyYl9kZXY7CisJZW51bSBtdGtf
ZGRwX2NvbXBfaWQgaWQ7CisJY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3M7
Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2NvbmZpZyhzdHJ1Y3QgbXRr
X2RkcF9jb21wICpjb21wLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdywgdW5zaWduZWQgaW50
IGgsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwlpZiAoY29tcC0+ZnVu
Y3MtPmNvbmZpZykKKwkJY29tcC0+ZnVuY3MtPmNvbmZpZyhjb21wLT5yZWdzLCB3LCBoLCB2cmVm
cmVzaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfcG93ZXJfb24oc3Ry
dWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MtPnBvd2VyX29uKQor
CQljb21wLT5mdW5jcy0+cG93ZXJfb24oY29tcC0+cmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
dm9pZCBtdGtfZGRwX2NvbXBfcG93ZXJfb2ZmKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7
CisJaWYgKGNvbXAtPmZ1bmNzLT5wb3dlcl9vZmYpCisJCWNvbXAtPmZ1bmNzLT5wb3dlcl9vZmYo
Y29tcC0+cmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfZW5hYmxl
X3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5jcy0+
ZW5hYmxlX3ZibGFuaykKKwkJY29tcC0+ZnVuY3MtPmVuYWJsZV92YmxhbmsoY29tcC0+cmVncyk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfZGlzYWJsZV92Ymxhbmsoc3Ry
dWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MtPmRpc2FibGVfdmJs
YW5rKQorCQljb21wLT5mdW5jcy0+ZGlzYWJsZV92YmxhbmsoY29tcC0+cmVncyk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfY2xlYXJfdmJsYW5rKHN0cnVjdCBtdGtfZGRw
X2NvbXAgKmNvbXApCit7CisJaWYgKGNvbXAtPmZ1bmNzLT5jbGVhcl92YmxhbmspCisJCWNvbXAt
PmZ1bmNzLT5jbGVhcl92YmxhbmsoY29tcC0+cmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBtdGtfZGRwX2NvbXBfbGF5ZXJfb24oc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkJ
IHVuc2lnbmVkIGludCBpZHgpCit7CisJaWYgKGNvbXAtPmZ1bmNzLT5sYXllcl9vbikKKwkJY29t
cC0+ZnVuY3MtPmxheWVyX29uKGNvbXAtPnJlZ3MsIGlkeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
dm9pZCBtdGtfZGRwX2NvbXBfbGF5ZXJfb2ZmKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJ
CQkJCSAgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MtPmxheWVyX29mZikK
KwkJY29tcC0+ZnVuY3MtPmxheWVyX29mZihjb21wLT5yZWdzLCBpZHgpOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2xheWVyX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21w
ICpjb21wLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBpZHgsCisJCQkJCSAgICAgc3RydWN0IG10
a19wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJaWYgKGNvbXAtPmZ1bmNzLT5sYXllcl9jb25maWcp
CisJCWNvbXAtPmZ1bmNzLT5sYXllcl9jb25maWcoY29tcC0+cmVncywgaWR4LCBzdGF0ZSk7Cit9
CisKK2ludCBtdGtfZGRwX2NvbXBfZ2V0X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJ
CWVudW0gbXRrX2RkcF9jb21wX3R5cGUgY29tcF90eXBlKTsKK2ludCBtdGtfZGRwX2NvbXBfaW5p
dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29tcF9ub2RlLAorCQkg
ICAgICBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCBlbnVtIG10a19kZHBfY29tcF9pZCBjb21w
X2lkKTsKK2ludCBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwg
c3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7Cit2b2lkIG10a19kZHBfY29tcF91bnJlZ2lzdGVy
KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApOworCisj
ZW5kaWYgLyogTVRLX0RSTV9ERFBfQ09NUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZHJtX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYzBjZmMKLS0t
IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwpA
QCAtMCwwICsxLDU1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu
CisgKiBBdXRob3I6IFlUIFNIRU4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJt
L2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1f
YXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNs
dWRlIDxkcm0vZHJtX2dlbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1
ZGUgPGxpbnV4L2RtYS1pb21tdS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNp
bmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUu
aD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwLmgi
CisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZHJ2Lmgi
CisjaW5jbHVkZSAibXRrX2RybV9mYi5oIgorI2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCisKKyNk
ZWZpbmUgRFJJVkVSX05BTUUgIm1lZGlhdGVrIgorI2RlZmluZSBEUklWRVJfREVTQyAiTWVkaWF0
ZWsgU29DIERSTSIKKyNkZWZpbmUgRFJJVkVSX0RBVEUgIjIwMTUwNTEzIgorI2RlZmluZSBEUklW
RVJfTUFKT1IgMQorI2RlZmluZSBEUklWRVJfTUlOT1IgMAorCitzdGF0aWMgdm9pZCBtdGtfYXRv
bWljX3NjaGVkdWxlKHN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUsCisJCQkJc3RydWN0
IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCXByaXZhdGUtPmNvbW1pdC5zdGF0ZSA9IHN0
YXRlOworCXNjaGVkdWxlX3dvcmsoJnByaXZhdGUtPmNvbW1pdC53b3JrKTsKK30KKworc3RhdGlj
IHZvaWQgbXRrX2F0b21pY19jb21wbGV0ZShzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRl
LAorCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2Rl
dmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOworCisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21v
ZGVzZXRfZGlzYWJsZXMoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3Bs
YW5lcyhkcm0sIHN0YXRlLCBmYWxzZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVz
ZXRfZW5hYmxlcyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92Ymxh
bmtzKGRybSwgc3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRybSwg
c3RhdGUpOworCWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19hdG9taWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG10
a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJc3RydWN0IG10
a19kcm1fcHJpdmF0ZSwgY29tbWl0LndvcmspOworCisJbXRrX2F0b21pY19jb21wbGV0ZShwcml2
YXRlLCBwcml2YXRlLT5jb21taXQuc3RhdGUpOworfQorCitzdGF0aWMgaW50IG10a19hdG9taWNf
Y29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWlj
X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgYm9vbCBhc3luYykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9w
cml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJcmV0ID0g
ZHJtX2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZHJtLCBzdGF0ZSk7CisJaWYgKHJldCkK
KwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsKKwlm
bHVzaF93b3JrKCZwcml2YXRlLT5jb21taXQud29yayk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9z
d2FwX3N0YXRlKGRybSwgc3RhdGUpOworCisJaWYgKGFzeW5jKQorCQltdGtfYXRvbWljX3NjaGVk
dWxlKHByaXZhdGUsIHN0YXRlKTsKKwllbHNlCisJCW10a19hdG9taWNfY29tcGxldGUocHJpdmF0
ZSwgc3RhdGUpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5jb21taXQubG9jayk7CisKKwly
ZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3Mg
bXRrX2RybV9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKKwkuZmJfY3JlYXRlID0gbXRrX2RybV9tb2Rl
X2ZiX2NyZWF0ZSwKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCisJ
LmF0b21pY19jb21taXQgPSBtdGtfYXRvbWljX2NvbW1pdCwKK307CisKK3N0YXRpYyBjb25zdCBl
bnVtIG10a19kZHBfY29tcF9pZCBtdGtfZGRwX21haW5bXSA9IHsKKwlERFBfQ09NUE9ORU5UX09W
TDAsCisJRERQX0NPTVBPTkVOVF9DT0xPUjAsCisJRERQX0NPTVBPTkVOVF9BQUwsCisJRERQX0NP
TVBPTkVOVF9PRCwKKwlERFBfQ09NUE9ORU5UX1JETUEwLAorCUREUF9DT01QT05FTlRfVUZPRSwK
KwlERFBfQ09NUE9ORU5UX0RTSTAsCisJRERQX0NPTVBPTkVOVF9QV00wLAorfTsKKworc3RhdGlj
IGNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkIG10a19kZHBfZXh0W10gPSB7CisJRERQX0NPTVBP
TkVOVF9PVkwxLAorCUREUF9DT01QT05FTlRfQ09MT1IxLAorCUREUF9DT01QT05FTlRfR0FNTUEs
CisJRERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCit9OworCitzdGF0
aWMgaW50IG10a19kcm1fa21zX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1
Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qg
cGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWludCByZXQ7CisKKwlwZGV2ID0gb2ZfZmluZF9kZXZp
Y2VfYnlfbm9kZShwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlpZiAoIXBkZXYpIHsKKwkJZGV2X2Vy
cihkcm0tPmRldiwgIldhaXRpbmcgZm9yIGRpc3AtbXV0ZXggZGV2aWNlICVzXG4iLAorCQkJcHJp
dmF0ZS0+bXV0ZXhfbm9kZS0+ZnVsbF9uYW1lKTsKKwkJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+bXV0
ZXhfbm9kZSk7CisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCX0KKwlwcml2YXRlLT5tdXRleF9k
ZXYgPSAmcGRldi0+ZGV2OworCisJZHJtX21vZGVfY29uZmlnX2luaXQoZHJtKTsKKworCWRybS0+
bW9kZV9jb25maWcubWluX3dpZHRoID0gNjQ7CisJZHJtLT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0
ID0gNjQ7CisKKwkvKgorCSAqIHNldCBtYXggd2lkdGggYW5kIGhlaWdodCBhcyBkZWZhdWx0IHZh
bHVlKDQwOTZ4NDA5NikuCisJICogdGhpcyB2YWx1ZSB3b3VsZCBiZSB1c2VkIHRvIGNoZWNrIGZy
YW1lYnVmZmVyIHNpemUgbGltaXRhdGlvbgorCSAqIGF0IGRybV9tb2RlX2FkZGZiKCkuCisJICov
CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSA0MDk2OworCWRybS0+bW9kZV9jb25maWcu
bWF4X2hlaWdodCA9IDQwOTY7CisJZHJtLT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZtdGtfZHJtX21v
ZGVfY29uZmlnX2Z1bmNzOworCisJLyoKKwkgKiBXZSBjdXJyZW50bHkgc3VwcG9ydCB0d28gZml4
ZWQgZGF0YSBzdHJlYW1zLAorCSAqIE9WTDAgLT4gQ09MT1IwIC0+IEFBTCAtPiBPRCAtPiBSRE1B
MCAtPiBVRk9FIC0+IERTSTAKKwkgKiBhbmQgT1ZMMSAtPiBDT0xPUjEgLT4gR0FNTUEgLT4gUkRN
QTEgLT4gRFBJMC4KKwkgKi8KKwlwcml2YXRlLT5wYXRoX2xlblswXSA9IEFSUkFZX1NJWkUobXRr
X2RkcF9tYWluKTsKKwlwcml2YXRlLT5wYXRoWzBdID0gbXRrX2RkcF9tYWluOworCXByaXZhdGUt
PnBhdGhfbGVuWzFdID0gQVJSQVlfU0laRShtdGtfZGRwX2V4dCk7CisJcHJpdmF0ZS0+cGF0aFsx
XSA9IG10a19kZHBfZXh0OworCisJcmV0ID0gY29tcG9uZW50X2JpbmRfYWxsKGRybS0+ZGV2LCBk
cm0pOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ19jbGVhbnVwOworCisJLyoKKwkgKiBX
ZSBkb24ndCB1c2UgdGhlIGRybV9pcnFfaW5zdGFsbCgpIGhlbHBlcnMgcHJvdmlkZWQgYnkgdGhl
IERSTQorCSAqIGNvcmUsIHNvIHdlIG5lZWQgdG8gc2V0IHRoaXMgbWFudWFsbHkgaW4gb3JkZXIg
dG8gYWxsb3cgdGhlCisJICogRFJNX0lPQ1RMX1dBSVRfVkJMQU5LIHRvIG9wZXJhdGUgY29ycmVj
dGx5LgorCSAqLworCWRybS0+aXJxX2VuYWJsZWQgPSB0cnVlOworCXJldCA9IGRybV92Ymxhbmtf
aW5pdChkcm0sIE1BWF9DUlRDKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfY29tcG9uZW50
X3VuYmluZDsKKworCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkcm0pOworCWRybV9tb2RlX2Nv
bmZpZ19yZXNldChkcm0pOworCisJcmV0dXJuIDA7CisKK2Vycl9jb21wb25lbnRfdW5iaW5kOgor
CWNvbXBvbmVudF91bmJpbmRfYWxsKGRybS0+ZGV2LCBkcm0pOworZXJyX2NvbmZpZ19jbGVhbnVw
OgorCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7CisKKwlyZXR1cm4gcmV0OworfQorCitz
dGF0aWMgdm9pZCBtdGtfZHJtX2ttc19kZWluaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sK
Kwlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJtKTsKKworCWRybV92YmxhbmtfY2xlYW51cChk
cm0pOworCWNvbXBvbmVudF91bmJpbmRfYWxsKGRybS0+ZGV2LCBkcm0pOworCWRybV9tb2RlX2Nv
bmZpZ19jbGVhbnVwKGRybSk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV91bmxvYWQoc3RydWN0
IGRybV9kZXZpY2UgKmRybSkKK3sKKwltdGtfZHJtX2ttc19kZWluaXQoZHJtKTsKKwlkcm0tPmRl
dl9wcml2YXRlID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0
IHZtX29wZXJhdGlvbnNfc3RydWN0IG10a19kcm1fZ2VtX3ZtX29wcyA9IHsKKwkub3BlbiA9IGRy
bV9nZW1fdm1fb3BlbiwKKwkuY2xvc2UgPSBkcm1fZ2VtX3ZtX2Nsb3NlLAorfTsKKworc3RhdGlj
IGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXRrX2RybV9mb3BzID0geworCS5vd25lciA9
IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZHJtX29wZW4sCisJLnJlbGVhc2UgPSBkcm1fcmVsZWFz
ZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCisJLm1tYXAgPSBtdGtfZHJtX2dlbV9t
bWFwLAorCS5wb2xsID0gZHJtX3BvbGwsCisJLnJlYWQgPSBkcm1fcmVhZCwKKyNpZmRlZiBDT05G
SUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGwsCisjZW5kaWYKK307
CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBtdGtfZHJtX2RyaXZlciA9IHsKKwkuZHJpdmVy
X2ZlYXR1cmVzID0gRFJJVkVSX01PREVTRVQgfCBEUklWRVJfR0VNIHwgRFJJVkVSX0FUT01JQywK
KwkudW5sb2FkID0gbXRrX2RybV91bmxvYWQsCisJLnNldF9idXNpZCA9IGRybV9wbGF0Zm9ybV9z
ZXRfYnVzaWQsCisKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gZHJtX3ZibGFua19jb3VudCwKKwku
ZW5hYmxlX3ZibGFuayA9IG10a19kcm1fY3J0Y19lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3Zi
bGFuayA9IG10a19kcm1fY3J0Y19kaXNhYmxlX3ZibGFuaywKKworCS5nZW1fZnJlZV9vYmplY3Qg
PSBtdGtfZHJtX2dlbV9mcmVlX29iamVjdCwKKwkuZ2VtX3ZtX29wcyA9ICZtdGtfZHJtX2dlbV92
bV9vcHMsCisJLmR1bWJfY3JlYXRlID0gbXRrX2RybV9nZW1fZHVtYl9jcmVhdGUsCisJLmR1bWJf
bWFwX29mZnNldCA9IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldCwKKwkuZHVtYl9kZXN0cm95
ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCisKKwkuZm9wcyA9ICZtdGtfZHJtX2ZvcHMsCisKKwku
bmFtZSA9IERSSVZFUl9OQU1FLAorCS5kZXNjID0gRFJJVkVSX0RFU0MsCisJLmRhdGUgPSBEUklW
RVJfREFURSwKKwkubWFqb3IgPSBEUklWRVJfTUFKT1IsCisJLm1pbm9yID0gRFJJVkVSX01JTk9S
LAorfTsKKworc3RhdGljIGludCBjb21wYXJlX29mKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAq
ZGF0YSkKK3sKKwlyZXR1cm4gZGV2LT5vZl9ub2RlID09IGRhdGE7Cit9CisKK3N0YXRpYyBpbnQg
bXRrX2RybV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2
YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2Ug
KmRybTsKKwlpbnQgcmV0OworCisJZHJtID0gZHJtX2Rldl9hbGxvYygmbXRrX2RybV9kcml2ZXIs
IGRldik7CisJaWYgKCFkcm0pCisJCXJldHVybiAtRU5PTUVNOworCisJZHJtX2Rldl9zZXRfdW5p
cXVlKGRybSwgZGV2X25hbWUoZGV2KSk7CisKKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwg
MCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlkcm0tPmRldl9wcml2YXRl
ID0gcHJpdmF0ZTsKKwlwcml2YXRlLT5kcm0gPSBkcm07CisKKwlyZXQgPSBtdGtfZHJtX2ttc19p
bml0KGRybSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CisKKwlyZXR1
cm4gMDsKKworZXJyX3VucmVnaXN0ZXI6CisJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7CitlcnJf
ZnJlZToKKwlkcm1fZGV2X3VucmVmKGRybSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZv
aWQgbXRrX2RybV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHJt
X3ByaXZhdGUgKnByaXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRybV9wdXRfZGV2
KHByaXZhdGUtPmRybSk7CisJcHJpdmF0ZS0+ZHJtID0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0
IHN0cnVjdCBjb21wb25lbnRfbWFzdGVyX29wcyBtdGtfZHJtX29wcyA9IHsKKwkuYmluZAkJPSBt
dGtfZHJtX2JpbmQsCisJLnVuYmluZAkJPSBtdGtfZHJtX3VuYmluZCwKK307CisKK3N0YXRpYyBj
b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kZHBfY29tcF9kdF9pZHNbXSA9IHsKKwl7IC5j
b21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW92bCIsICAgLmRhdGEgPSAodm9pZCAq
KU1US19ESVNQX09WTCB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3At
cmRtYSIsICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfUkRNQSB9LAorCXsgLmNvbXBhdGlibGUg
PSAibWVkaWF0ZWssbXQ4MTczLWRpc3Atd2RtYSIsICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1Bf
V0RNQSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtY29sb3IiLCAu
ZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfQ09MT1IgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlh
dGVrLG10ODE3My1kaXNwLWFhbCIsICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX0FBTH0sCisJ
eyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1nYW1tYSIsIC5kYXRhID0gKHZv
aWQgKilNVEtfRElTUF9HQU1NQSwgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3
My1kaXNwLXVmb2UiLCAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX1VGT0UgfSwKKwl7IC5jb21w
YXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kc2kiLCAgICAgICAgLmRhdGEgPSAodm9pZCAqKU1U
S19EU0kgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kcGkiLCAgICAgICAg
LmRhdGEgPSAodm9pZCAqKU1US19EUEkgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10
ODE3My1kaXNwLW11dGV4IiwgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX01VVEVYIH0sCisJeyAu
Y29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1wd20iLCAgIC5kYXRhID0gKHZvaWQg
KilNVEtfRElTUF9QV00gfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNw
LW9kIiwgICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX09EIH0sCisJeyB9Cit9OworCitzdGF0
aWMgaW50IG10a19kcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlz
dHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUg
KnByaXZhdGU7CisJc3RydWN0IHJlc291cmNlICptZW07CisJc3RydWN0IGRldmljZV9ub2RlICpu
b2RlOworCXN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKKwlpbnQgcmV0Owor
CWludCBpOworCisJcHJpdmF0ZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdmF0ZSks
IEdGUF9LRVJORUwpOworCWlmICghcHJpdmF0ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRl
eF9pbml0KCZwcml2YXRlLT5jb21taXQubG9jayk7CisJSU5JVF9XT1JLKCZwcml2YXRlLT5jb21t
aXQud29yaywgbXRrX2F0b21pY193b3JrKTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJj
ZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcHJpdmF0ZS0+Y29uZmlnX3JlZ3MgPSBkZXZt
X2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19FUlIocHJpdmF0ZS0+Y29uZmln
X3JlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIocHJpdmF0ZS0+Y29uZmlnX3JlZ3MpOworCQlkZXZf
ZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFwIG1tc3lzLWNvbmZpZyByZXNvdXJjZTogJWRcbiIs
CisJCQlyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEl0ZXJhdGUgb3ZlciBzaWJsaW5n
IERJU1AgZnVuY3Rpb24gYmxvY2tzICovCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShkZXYtPm9m
X25vZGUtPnBhcmVudCwgbm9kZSkgeworCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9p
ZDsKKwkJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21wX3R5cGU7CisJCWludCBjb21wX2lkOwor
CisJCW9mX2lkID0gb2ZfbWF0Y2hfbm9kZShtdGtfZGRwX2NvbXBfZHRfaWRzLCBub2RlKTsKKwkJ
aWYgKCFvZl9pZCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJs
ZShub2RlKSkgeworCQkJZGV2X2RiZyhkZXYsICJTa2lwcGluZyBkaXNhYmxlZCBjb21wb25lbnQg
JXNcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29t
cF90eXBlID0gKGVudW0gbXRrX2RkcF9jb21wX3R5cGUpb2ZfaWQtPmRhdGE7CisKKwkJaWYgKGNv
bXBfdHlwZSA9PSBNVEtfRElTUF9NVVRFWCkgeworCQkJcHJpdmF0ZS0+bXV0ZXhfbm9kZSA9IG9m
X25vZGVfZ2V0KG5vZGUpOworCQkJY29udGludWU7CisJCX0KKworCQljb21wX2lkID0gbXRrX2Rk
cF9jb21wX2dldF9pZChub2RlLCBjb21wX3R5cGUpOworCQlpZiAoY29tcF9pZCA8IDApIHsKKwkJ
CWRldl93YXJuKGRldiwgIlNraXBwaW5nIHVua25vd24gY29tcG9uZW50ICVzXG4iLAorCQkJCSBu
b2RlLT5mdWxsX25hbWUpOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBDdXJyZW50
bHkgb25seSB0aGUgT1ZMLCBEU0ksIGFuZCBEUEkgYmxvY2tzIGhhdmUgc2VwYXJhdGUKKwkJICog
Y29tcG9uZW50IHBsYXRmb3JtIGRyaXZlcnMuCisJCSAqLworCQlpZiAoY29tcF90eXBlID09IE1U
S19ESVNQX09WTCB8fAorCQkgICAgY29tcF90eXBlID09IE1US19EU0kgfHwKKwkJICAgIGNvbXBf
dHlwZSA9PSBNVEtfRFBJKSB7CisJCQlkZXZfaW5mbyhkZXYsICJBZGRpbmcgY29tcG9uZW50IG1h
dGNoIGZvciAlc1xuIiwKKwkJCQkgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbXBvbmVudF9tYXRj
aF9hZGQoZGV2LCAmbWF0Y2gsIGNvbXBhcmVfb2YsIG5vZGUpOworCQl9CisKKwkJcHJpdmF0ZS0+
Y29tcF9ub2RlW2NvbXBfaWRdID0gb2Zfbm9kZV9nZXQobm9kZSk7CisKKwkJLyoKKwkJICogQ3Vy
cmVudGx5IG9ubHkgdGhlIE9WTCBkcml2ZXIgaW5pdGlhbGl6ZXMgaXRzIG93biBERFAKKwkJICog
Y29tcG9uZW50IHN0cnVjdHVyZS4gVGhlIG90aGVycyBhcmUgaW5pdGlhbGl6ZWQgaGVyZS4KKwkJ
ICovCisJCWlmIChjb21wX3R5cGUgIT0gTVRLX0RJU1BfT1ZMKSB7CisJCQlzdHJ1Y3QgbXRrX2Rk
cF9jb21wICpjb21wOworCisJCQljb21wID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjb21w
KSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWNvbXApIHsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJ
CWdvdG8gZXJyOworCQkJfQorCisJCQlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIG5vZGUs
IGNvbXAsIGNvbXBfaWQpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycjsKKworCQkJcHJpdmF0
ZS0+ZGRwX2NvbXBbY29tcF9pZF0gPSBjb21wOworCQl9CisJfQorCisJaWYgKCFwcml2YXRlLT5t
dXRleF9ub2RlKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGZpbmQgZGlzcC1tdXRleCBu
b2RlXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnI7CisJfQorCisJcG1fcnVudGlt
ZV9lbmFibGUoZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXZhdGUpOwor
CisJcmV0ID0gY29tcG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaChkZXYsICZtdGtfZHJtX29w
cywgbWF0Y2gpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CisKK2VycjoK
KwlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlmb3IgKGkgPSAwOyBpIDwgRERQ
X0NPTVBPTkVOVF9JRF9NQVg7IGkrKykKKwkJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+Y29tcF9ub2Rl
W2ldKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19kcm1fcmVtb3ZlKHN0cnVj
dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJp
dmF0ZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpOworCisJY29tcG9uZW50
X21hc3Rlcl9kZWwoJnBkZXYtPmRldiwgJm10a19kcm1fb3BzKTsKKwlwbV9ydW50aW1lX2Rpc2Fi
bGUoJnBkZXYtPmRldik7CisJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+bXV0ZXhfbm9kZSk7CisJZm9y
IChpID0gMDsgaSA8IEREUF9DT01QT05FTlRfSURfTUFYOyBpKyspCisJCW9mX25vZGVfcHV0KHBy
aXZhdGUtPmNvbXBfbm9kZVtpXSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19Q
TV9TTEVFUAorc3RhdGljIGludCBtdGtfZHJtX3N5c19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRl
dikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRh
KGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsKKwlzdHJ1Y3Qg
ZHJtX2Nvbm5lY3RvciAqY29ubjsKKworCWRybV9rbXNfaGVscGVyX3BvbGxfZGlzYWJsZShkcm0p
OworCisJZHJtX21vZGVzZXRfbG9ja19hbGwoZHJtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNv
bm4sICZkcm0tPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWludCBvbGRf
ZHBtcyA9IGNvbm4tPmRwbXM7CisKKwkJaWYgKGNvbm4tPmZ1bmNzLT5kcG1zKQorCQkJY29ubi0+
ZnVuY3MtPmRwbXMoY29ubiwgRFJNX01PREVfRFBNU19PRkYpOworCisJCS8qIFNldCB0aGUgb2xk
IG1vZGUgYmFjayB0byB0aGUgY29ubmVjdG9yIGZvciByZXN1bWUgKi8KKwkJY29ubi0+ZHBtcyA9
IG9sZF9kcG1zOworCX0KKwlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRybSk7CisKKwlEUk1fSU5G
TygibXRrX2RybV9zeXNfc3VzcGVuZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg
bXRrX2RybV9zeXNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2Ry
bV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9k
ZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsK
KworCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRybSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25u
LCAmZHJtLT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpbnQgZGVzaXJl
ZF9tb2RlID0gY29ubi0+ZHBtczsKKworCQkvKgorCQkgKiBhdCBzdXNwZW5kIHRpbWUsIHdlIHNh
dmUgZHBtcyB0byBjb25uZWN0b3ItPmRwbXMsCisJCSAqIHJlc3RvcmUgdGhlIG9sZF9kcG1zLCBh
bmQgYXQgY3VycmVudCB0aW1lLCB0aGUgY29ubmVjdG9yCisJCSAqIGRwbXMgc3RhdHVzIG11c3Qg
YmUgRFJNX01PREVfRFBNU19PRkYuCisJCSAqLworCQljb25uLT5kcG1zID0gRFJNX01PREVfRFBN
U19PRkY7CisKKwkJLyoKKwkJICogSWYgdGhlIGNvbm5lY3RvciBoYXMgYmVlbiBkaXNjb25uZWN0
ZWQgZHVyaW5nIHN1c3BlbmQsCisJCSAqIGRpc2Nvbm5lY3QgaXQgZnJvbSB0aGUgZW5jb2RlciBh
bmQgbGVhdmUgaXQgb2ZmLiBXZSdsbCBub3RpZnkKKwkJICogdXNlcnNwYWNlIGF0IHRoZSBlbmQu
CisJCSAqLworCQlpZiAoY29ubi0+ZnVuY3MtPmRwbXMpCisJCQljb25uLT5mdW5jcy0+ZHBtcyhj
b25uLCBkZXNpcmVkX21vZGUpOworCX0KKwlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRybSk7CisK
Kwlkcm1fa21zX2hlbHBlcl9wb2xsX2VuYWJsZShkcm0pOworCisJRFJNX0lORk8oIm10a19kcm1f
c3lzX3Jlc3VtZVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09Q
UyhtdGtfZHJtX3BtX29wcywgbXRrX2RybV9zeXNfc3VzcGVuZCwKKwkJCSBtdGtfZHJtX3N5c19y
ZXN1bWUpOworI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19k
cm1fb2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtbW1zeXMi
LCB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RybV9w
bGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlCT0gbXRrX2RybV9wcm9iZSwKKwkucmVtb3ZlCT0g
bXRrX2RybV9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAibWVkaWF0ZWstZHJtIiwK
KwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2RybV9vZl9pZHMsCisjaWZkZWYgQ09ORklHX1BNX1NM
RUVQCisJCS5wbSAgICAgPSAmbXRrX2RybV9wbV9vcHMsCisjZW5kaWYKKwl9LAorfTsKKworc3Rh
dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBtdGtfZHJtX2RyaXZlcnNbXSA9IHsK
KwkmbXRrX2RybV9wbGF0Zm9ybV9kcml2ZXIsCisJJm10a19kaXNwX292bF9kcml2ZXIsCit9Owor
CitzdGF0aWMgaW50IF9faW5pdCBtdGtfZHJtX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCWlu
dCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXRrX2RybV9kcml2ZXJzKTsgaSsr
KSB7CisJCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihtdGtfZHJtX2RyaXZlcnNbaV0p
OworCQlpZiAocmV0IDwgMCkgeworCQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgJXMgZHJp
dmVyOiAlZFxuIiwKKwkJCSAgICAgICBtdGtfZHJtX2RyaXZlcnNbaV0tPmRyaXZlci5uYW1lLCBy
ZXQpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXdoaWxl
ICgtLWkgPj0gMCkKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIobXRrX2RybV9kcml2ZXJz
W2ldKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdGtfZHJtX2V4
aXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IEFSUkFZX1NJWkUobXRrX2RybV9kcml2
ZXJzKSAtIDE7IGkgPj0gMDsgaS0tKQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtf
ZHJtX2RyaXZlcnNbaV0pOworfQorCittb2R1bGVfaW5pdChtdGtfZHJtX2luaXQpOworbW9kdWxl
X2V4aXQobXRrX2RybV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiWVQgU0hFTiA8eXQuc2hlbkBt
ZWRpYXRlay5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhdGVrIFNvQyBEUk0gZHJp
dmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfZHJtX2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NDBmODQK
LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu
aApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIElu
Yy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8K
KworI2lmbmRlZiBNVEtfRFJNX0RSVl9ICisjZGVmaW5lIE1US19EUk1fRFJWX0gKKworI2luY2x1
ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5l
IE1BWF9DUlRDCTIKKyNkZWZpbmUgTUFYX0NPTk5FQ1RPUgkyCisKK3N0cnVjdCBkZXZpY2U7Citz
dHJ1Y3QgZGV2aWNlX25vZGU7CitzdHJ1Y3QgZHJtX2NydGM7CitzdHJ1Y3QgZHJtX2RldmljZTsK
K3N0cnVjdCBkcm1fZmJfaGVscGVyOworc3RydWN0IGRybV9wcm9wZXJ0eTsKK3N0cnVjdCByZWdt
YXA7CisKK3N0cnVjdCBtdGtfZHJtX3ByaXZhdGUgeworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07
CisKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGNbTUFYX0NSVENdOworCXN0cnVjdCBkcm1fcHJvcGVy
dHkgKnBsYW5lX3pwb3NfcHJvcGVydHk7CisJdW5zaWduZWQgaW50IG51bV9waXBlczsKKworCXN0
cnVjdCBkZXZpY2Vfbm9kZSAqbXV0ZXhfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICptdXRleF9kZXY7
CisJdm9pZCBfX2lvbWVtICpjb25maWdfcmVnczsKKwl1bnNpZ25lZCBpbnQgcGF0aF9sZW5bTUFY
X0NSVENdOworCWNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkICpwYXRoW01BWF9DUlRDXTsKKwlz
dHJ1Y3QgZGV2aWNlX25vZGUgKmNvbXBfbm9kZVtERFBfQ09NUE9ORU5UX0lEX01BWF07CisJc3Ry
dWN0IG10a19kZHBfY29tcCAqZGRwX2NvbXBbRERQX0NPTVBPTkVOVF9JRF9NQVhdOworCisJc3Ry
dWN0IHsKKwkJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOworCQlzdHJ1Y3Qgd29ya19z
dHJ1Y3Qgd29yazsKKwkJc3RydWN0IG11dGV4IGxvY2s7CisJfSBjb21taXQ7Cit9OworCitleHRl
cm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOworCisjZW5kaWYg
LyogTVRLX0RSTV9EUlZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcm1fZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRlZGY2NQotLS0gL2Rldi9udWxsCisr
KyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmMKQEAgLTAsMCArMSwxMzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJt
L2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJt
L2RybV9mYl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorCisjaW5jbHVkZSAi
bXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2ZiLmgiCisjaW5jbHVkZSAibXRrX2Ry
bV9nZW0uaCIKKworLyoKKyAqIG10ayBzcGVjaWZpYyBmcmFtZWJ1ZmZlciBzdHJ1Y3R1cmUuCisg
KgorICogQGZiOiBkcm0gZnJhbWVidWZmZXIgb2JqZWN0LgorICogQGdlbV9vYmo6IGFycmF5IG9m
IGdlbSBvYmplY3RzLgorICovCitzdHJ1Y3QgbXRrX2RybV9mYiB7CisJc3RydWN0IGRybV9mcmFt
ZWJ1ZmZlcgliYXNlOworCS8qIEZvciBub3cgd2Ugb25seSBzdXBwb3J0IGEgc2luZ2xlIHBsYW5l
ICovCisJc3RydWN0IGRybV9nZW1fb2JqZWN0CSpnZW1fb2JqOworfTsKKworI2RlZmluZSB0b19t
dGtfZmIoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBtdGtfZHJtX2ZiLCBiYXNlKQorCitzdHJ1
Y3QgZHJtX2dlbV9vYmplY3QgKm10a19mYl9nZXRfZ2VtX29iaihzdHJ1Y3QgZHJtX2ZyYW1lYnVm
ZmVyICpmYiwKKwkJCQkJICB1bnNpZ25lZCBpbnQgcGxhbmUpCit7CisJc3RydWN0IG10a19kcm1f
ZmIgKm10a19mYiA9IHRvX210a19mYihmYik7CisKKwlpZiAocGxhbmUgPiAwKQorCQlyZXR1cm4g
TlVMTDsKKworCXJldHVybiBtdGtfZmItPmdlbV9vYmo7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2Ry
bV9mYl9jcmVhdGVfaGFuZGxlKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSAgICBz
dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQkgICAgdW5zaWduZWQgaW50ICpoYW5kbGUp
Cit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYiA9IHRvX210a19mYihmYik7CisKKwlyZXR1
cm4gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGVfcHJpdiwgbXRrX2ZiLT5nZW1fb2JqLCBoYW5k
bGUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2ZiX2Rlc3Ryb3koc3RydWN0IGRybV9mcmFt
ZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYiA9IHRvX210a19mYihm
Yik7CisKKwlkcm1fZnJhbWVidWZmZXJfY2xlYW51cChmYik7CisKKwlkcm1fZ2VtX29iamVjdF91
bnJlZmVyZW5jZV91bmxvY2tlZChtdGtfZmItPmdlbV9vYmopOworCisJa2ZyZWUobXRrX2ZiKTsK
K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgbXRrX2RybV9m
Yl9mdW5jcyA9IHsKKwkuY3JlYXRlX2hhbmRsZSA9IG10a19kcm1fZmJfY3JlYXRlX2hhbmRsZSwK
KwkuZGVzdHJveSA9IG10a19kcm1fZmJfZGVzdHJveSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRr
X2RybV9mYiAqbXRrX2RybV9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs
CisJCQkJCQkgICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZSwKKwkJCQkJCSAgIHN0cnVj
dCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmI7CisJ
aW50IHJldDsKKworCWlmIChkcm1fZm9ybWF0X251bV9wbGFuZXMobW9kZS0+cGl4ZWxfZm9ybWF0
KSAhPSAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCW10a19mYiA9IGt6YWxsb2Mo
c2l6ZW9mKCptdGtfZmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19mYikKKwkJcmV0dXJuIEVS
Ul9QVFIoLUVOT01FTSk7CisKKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJm10a19m
Yi0+YmFzZSwgbW9kZSk7CisKKwltdGtfZmItPmdlbV9vYmogPSBvYmo7CisKKwlyZXQgPSBkcm1f
ZnJhbWVidWZmZXJfaW5pdChkZXYsICZtdGtfZmItPmJhc2UsICZtdGtfZHJtX2ZiX2Z1bmNzKTsK
KwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgZnJhbWVidWZm
ZXJcbiIpOworCQlrZnJlZShtdGtfZmIpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKwor
CXJldHVybiBtdGtfZmI7Cit9CisKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19kcm1fbW9k
ZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBk
cm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpjbWQp
Cit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg
KmdlbTsKKwl1bnNpZ25lZCBpbnQgd2lkdGggPSBjbWQtPndpZHRoOworCXVuc2lnbmVkIGludCBo
ZWlnaHQgPSBjbWQtPmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgYnBwOworCWludCByZXQ7
CisKKwlpZiAoZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGNtZC0+cGl4ZWxfZm9ybWF0KSAhPSAxKQor
CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWdlbSA9IGRybV9nZW1fb2JqZWN0X2xvb2t1
cChkZXYsIGZpbGUsIGNtZC0+aGFuZGxlc1swXSk7CisJaWYgKCFnZW0pCisJCXJldHVybiBFUlJf
UFRSKC1FTk9FTlQpOworCisJYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoY21kLT5waXhlbF9m
b3JtYXQsIDApOworCXNpemUgPSAoaGVpZ2h0IC0gMSkgKiBjbWQtPnBpdGNoZXNbMF0gKyB3aWR0
aCAqIGJwcDsKKwlzaXplICs9IGNtZC0+b2Zmc2V0c1swXTsKKworCWlmIChnZW0tPnNpemUgPCBz
aXplKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5yZWZlcmVuY2U7CisJfQorCisJbXRr
X2ZiID0gbXRrX2RybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgY21kLCBnZW0pOworCWlmIChJU19F
UlIobXRrX2ZiKSkgeworCQlyZXQgPSBQVFJfRVJSKG10a19mYik7CisJCWdvdG8gdW5yZWZlcmVu
Y2U7CisJfQorCisJcmV0dXJuICZtdGtfZmItPmJhc2U7CisKK3VucmVmZXJlbmNlOgorCWRybV9n
ZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0
KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmgg
Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjljZTczMDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g
MiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRkJfSAorI2RlZmlu
ZSBNVEtfRFJNX0ZCX0gKKworI2RlZmluZSBNQVhfRkJfT0JKCTMKKworc3RydWN0IGRybV9nZW1f
b2JqZWN0ICptdGtfZmJfZ2V0X2dlbV9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJ
CQkJCSAgdW5zaWduZWQgaW50IHBsYW5lKTsKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19k
cm1fbW9kZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0
cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQy
ICpjbWQpOworCit2b2lkIG10a19kcm1fbW9kZV9vdXRwdXRfcG9sbF9jaGFuZ2VkKHN0cnVjdCBk
cm1fZGV2aWNlICpkZXYpOworaW50IG10a19mYmRldl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2Ug
KmRldik7Cit2b2lkIG10a19mYmRldl9kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwor
CisjZW5kaWYgLyogTVRLX0RSTV9GQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YmM2MzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYwpAQCAt
MCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg
KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNp
bmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisKKyNpbmNsdWRl
ICJtdGtfZHJtX2dlbS5oIgorCitzdGF0aWMgc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2Ry
bV9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJdW5zaWduZWQgbG9uZyBz
aXplKQoreworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW1fb2JqOworCWludCByZXQ7
CisKKwlzaXplID0gcm91bmRfdXAoc2l6ZSwgUEFHRV9TSVpFKTsKKworCW10a19nZW1fb2JqID0g
a3phbGxvYyhzaXplb2YoKm10a19nZW1fb2JqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtdGtfZ2Vt
X29iaikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlyZXQgPSBkcm1fZ2VtX29iamVj
dF9pbml0KGRldiwgJm10a19nZW1fb2JqLT5iYXNlLCBzaXplKTsKKwlpZiAocmV0IDwgMCkgewor
CQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGdlbSBvYmplY3RcbiIpOworCQlrZnJl
ZShtdGtfZ2VtX29iaik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJcmV0dXJuIG10
a19nZW1fb2JqOworfQorCitzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZHJtX2dlbV9jcmVh
dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBzaXplLCBi
b29sIGFsbG9jX2ttYXApCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKKwlz
dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJbXRrX2dlbSA9IG10a19k
cm1fZ2VtX2luaXQoZGV2LCBzaXplKTsKKwlpZiAoSVNfRVJSKG10a19nZW0pKQorCQlyZXR1cm4g
RVJSX0NBU1QobXRrX2dlbSk7CisKKwlvYmogPSAmbXRrX2dlbS0+YmFzZTsKKworCWluaXRfZG1h
X2F0dHJzKCZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCWRtYV9zZXRfYXR0cihETUFfQVRUUl9XUklU
RV9DT01CSU5FLCAmbXRrX2dlbS0+ZG1hX2F0dHJzKTsKKworCWlmICghYWxsb2Nfa21hcCkKKwkJ
ZG1hX3NldF9hdHRyKERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HLCAmbXRrX2dlbS0+ZG1hX2F0
dHJzKTsKKworCW10a19nZW0tPmNvb2tpZSA9IGRtYV9hbGxvY19hdHRycyhkZXYtPmRldiwgb2Jq
LT5zaXplLAorCQkJCShkbWFfYWRkcl90ICopJm10a19nZW0tPmRtYV9hZGRyLCBHRlBfS0VSTkVM
LAorCQkJCSZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCWlmICghbXRrX2dlbS0+Y29va2llKSB7CisJ
CURSTV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlICV6eCBieXRlIGRtYSBidWZmZXIiLCBvYmot
PnNpemUpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9nZW1fZnJlZTsKKwl9CisKKwlp
ZiAoYWxsb2Nfa21hcCkKKwkJbXRrX2dlbS0+a3ZhZGRyID0gbXRrX2dlbS0+Y29va2llOworCisJ
RFJNX0lORk8oImNvb2tpZSA9ICVwIGRtYV9hZGRyID0gJWxseFxuIiwKKwkJCW10a19nZW0tPmNv
b2tpZSwgbXRrX2dlbS0+ZG1hX2FkZHIpOworCisJcmV0dXJuIG10a19nZW07CisKK2Vycl9nZW1f
ZnJlZToKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisJa2ZyZWUobXRrX2dlbSk7CisJ
cmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKwordm9pZCBtdGtfZHJtX2dlbV9mcmVlX29iamVjdChz
dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICpt
dGtfZ2VtID0gdG9fbXRrX2dlbV9vYmoob2JqKTsKKworCWRtYV9mcmVlX2F0dHJzKG9iai0+ZGV2
LT5kZXYsIG9iai0+c2l6ZSwgbXRrX2dlbS0+Y29va2llLAorCQkgICAgICAgbXRrX2dlbS0+ZG1h
X2FkZHIsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJLyogcmVsZWFzZSBmaWxlIHBvaW50ZXIg
dG8gZ2VtIG9iamVjdC4gKi8KKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisKKwlrZnJl
ZShtdGtfZ2VtKTsKK30KKworaW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1f
ZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBk
cm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICpt
dGtfZ2VtOworCWludCByZXQ7CisKKwlhcmdzLT5waXRjaCA9IGFyZ3MtPndpZHRoICogRElWX1JP
VU5EX1VQKGFyZ3MtPmJwcCwgOCk7CisJYXJncy0+c2l6ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+
aGVpZ2h0OworCisJbXRrX2dlbSA9IG10a19kcm1fZ2VtX2NyZWF0ZShkZXYsIGFyZ3MtPnNpemUs
IGZhbHNlKTsKKwlpZiAoSVNfRVJSKG10a19nZW0pKQorCQlyZXR1cm4gUFRSX0VSUihtdGtfZ2Vt
KTsKKworCS8qCisJICogYWxsb2NhdGUgYSBpZCBvZiBpZHIgdGFibGUgd2hlcmUgdGhlIG9iaiBp
cyByZWdpc3RlcmVkCisJICogYW5kIGhhbmRsZSBoYXMgdGhlIGlkIHdoYXQgdXNlciBjYW4gc2Vl
LgorCSAqLworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZtdGtfZ2Vt
LT5iYXNlLCAmYXJncy0+aGFuZGxlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9oYW5kbGVfY3Jl
YXRlOworCisJLyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBp
dCBub3cuICovCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm10a19nZW0t
PmJhc2UpOworCisJcmV0dXJuIDA7CisKK2Vycl9oYW5kbGVfY3JlYXRlOgorCW10a19kcm1fZ2Vt
X2ZyZWVfb2JqZWN0KCZtdGtfZ2VtLT5iYXNlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbXRr
X2RybV9nZW1fZHVtYl9tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJ
CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGhhbmRsZSwKKwkJCQl1aW50NjRfdCAq
b2Zmc2V0KQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwlv
YmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGhhbmRsZSk7CisJaWYg
KCFvYmopIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbG9va3VwIGdlbSBvYmplY3QuXG4iKTsK
KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZz
ZXQob2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCSpvZmZzZXQgPSBkcm1fdm1hX25v
ZGVfb2Zmc2V0X2FkZHIoJm9iai0+dm1hX25vZGUpOworCURSTV9ERUJVR19LTVMoIm9mZnNldCA9
IDB4JWxseFxuIiwgKm9mZnNldCk7CisKK291dDoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5j
ZV91bmxvY2tlZChvYmopOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9n
ZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJICAgc3RydWN0
IHZtX2FyZWFfc3RydWN0ICp2bWEpCisKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtdGtfZHJtX2dl
bV9vYmogKm10a19nZW0gPSB0b19tdGtfZ2VtX29iaihvYmopOworCXN0cnVjdCBkcm1fZGV2aWNl
ICpkcm0gPSBvYmotPmRldjsKKworCS8qCisJICogZG1hX2FsbG9jX2F0dHJzKCkgYWxsb2NhdGVk
IGEgc3RydWN0IHBhZ2UgdGFibGUgZm9yIHJrX29iaiwgc28gY2xlYXIKKwkgKiBWTV9QRk5NQVAg
ZmxhZyB0aGF0IHdhcyBzZXQgYnkgZHJtX2dlbV9tbWFwX29iaigpL2RybV9nZW1fbW1hcCgpLgor
CSAqLworCXZtYS0+dm1fZmxhZ3MgJj0gflZNX1BGTk1BUDsKKwl2bWEtPnZtX3Bnb2ZmID0gMDsK
KworCXJldCA9IGRtYV9tbWFwX2F0dHJzKGRybS0+ZGV2LCB2bWEsIG10a19nZW0tPmNvb2tpZSwg
bXRrX2dlbS0+ZG1hX2FkZHIsCisJCQkgICAgIG9iai0+c2l6ZSwgJm10a19nZW0tPmRtYV9hdHRy
cyk7CisJaWYgKHJldCkKKwkJZHJtX2dlbV92bV9jbG9zZSh2bWEpOworCisJcmV0dXJuIHJldDsK
K30KKworaW50IG10a19kcm1fZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9h
cmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCBy
ZXQ7CisKKwlyZXQgPSBkcm1fZ2VtX21tYXAoZmlscCwgdm1hKTsKKwlpZiAocmV0KQorCQlyZXR1
cm4gcmV0OworCisJb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gbXRrX2Ry
bV9nZW1fb2JqZWN0X21tYXAob2JqLCB2bWEpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RybV9nZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWQ5NWM5Ci0t
LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmgK
QEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK
KyNpZm5kZWYgX01US19EUk1fR0VNX0hfCisjZGVmaW5lIF9NVEtfRFJNX0dFTV9IXworCisjaW5j
bHVkZSA8ZHJtL2RybV9nZW0uaD4KKworLyoKKyAqIG10ayBkcm0gYnVmZmVyIHN0cnVjdHVyZS4K
KyAqCisgKiBAYmFzZTogYSBnZW0gb2JqZWN0LgorICoJLSBhIG5ldyBoYW5kbGUgdG8gdGhpcyBn
ZW0gb2JqZWN0IHdvdWxkIGJlIGNyZWF0ZWQKKyAqCWJ5IGRybV9nZW1faGFuZGxlX2NyZWF0ZSgp
LgorICogQGNvb2tpZTogdGhlIHJldHVybiB2YWx1ZSBvZiBkbWFfYWxsb2NfYXR0cnMoKSwga2Vl
cCBpdCBmb3IgZG1hX2ZyZWVfYXR0cnMoKQorICogQGt2YWRkcjoga2VybmVsIHZpcnR1YWwgYWRk
cmVzcyBvZiBnZW0gYnVmZmVyLgorICogQGRtYV9hZGRyOiBkbWEgYWRkcmVzcyBvZiBnZW0gYnVm
ZmVyLgorICogQGRtYV9hdHRyczogZG1hIGF0dHJpYnV0ZXMgb2YgZ2VtIGJ1ZmZlci4KKyAqCisg
KiBQLlMuIHRoaXMgb2JqZWN0IHdvdWxkIGJlIHRyYW5zZmVycmVkIHRvIHVzZXIgYXMga21zX2Jv
LmhhbmRsZSBzbworICoJdXNlciBjYW4gYWNjZXNzIHRoZSBidWZmZXIgdGhyb3VnaCBrbXNfYm8u
aGFuZGxlLgorICovCitzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqIHsKKwlzdHJ1Y3QgZHJtX2dlbV9v
YmplY3QJYmFzZTsKKwl2b2lkCQkJKmNvb2tpZTsKKwl2b2lkCQkJKmt2YWRkcjsKKwlkbWFfYWRk
cl90CQlkbWFfYWRkcjsKKwlzdHJ1Y3QgZG1hX2F0dHJzCWRtYV9hdHRyczsKK307CisKKyNkZWZp
bmUgdG9fbXRrX2dlbV9vYmooeCkJY29udGFpbmVyX29mKHgsIHN0cnVjdCBtdGtfZHJtX2dlbV9v
YmosIGJhc2UpCisKK3ZvaWQgbXRrX2RybV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1f
b2JqZWN0ICpnZW0pOworc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2RybV9nZW1fY3JlYXRl
KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgYm9vbCBhbGxv
Y19rbWFwKTsKK2ludCBtdGtfZHJtX2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZp
bGVfcHJpdiwKKwkJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9tb2RlX2NyZWF0
ZV9kdW1iICphcmdzKTsKK2ludCBtdGtfZHJtX2dlbV9kdW1iX21hcF9vZmZzZXQoc3RydWN0IGRy
bV9maWxlICpmaWxlX3ByaXYsCisJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGhh
bmRsZSwgdWludDY0X3QgKm9mZnNldCk7CitpbnQgbXRrX2RybV9nZW1fbW1hcChzdHJ1Y3QgZmls
ZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworaW50IG10a19kcm1fZ2VtX21t
YXBfYnVmKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1
Y3QgKnZtYSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcm1fcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5l
LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NhZmZlZQotLS0gL2Rldi9u
dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMKQEAgLTAs
MCArMSwyMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICog
QXV0aG9yOiBDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg
KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl
cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4K
KyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hl
bHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CisjaW5jbHVkZSA8bGlu
dXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CisKKyNpbmNsdWRl
ICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVk
ZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2ZiLmgiCisjaW5jbHVkZSAibXRr
X2RybV9nZW0uaCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCisKK3N0YXRpYyBjb25zdCB1
aW50MzJfdCBmb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFU
X0FSR0I4ODg4LAorCURSTV9GT1JNQVRfUkdCNTY1LAorfTsKKworc3RhdGljIHZvaWQgbXRrX3Bs
YW5lX2NvbmZpZyhzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lLCBib29sIGVuYWJsZSwK
KwkJCSAgICAgZG1hX2FkZHJfdCBhZGRyLCBzdHJ1Y3QgZHJtX3JlY3QgKmRlc3QpCit7CisJc3Ry
dWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX3BsYW5lLT5iYXNlOworCXN0cnVjdCBtdGtfcGxh
bmVfc3RhdGUgKnN0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJdW5z
aWduZWQgaW50IHBpdGNoLCBmb3JtYXQ7CisJaW50IHgsIHk7CisKKwlpZiAoV0FSTl9PTighcGxh
bmUtPnN0YXRlIHx8IChlbmFibGUgJiYgIXBsYW5lLT5zdGF0ZS0+ZmIpKSkKKwkJcmV0dXJuOwor
CisJaWYgKHBsYW5lLT5zdGF0ZS0+ZmIpIHsKKwkJcGl0Y2ggPSBwbGFuZS0+c3RhdGUtPmZiLT5w
aXRjaGVzWzBdOworCQlmb3JtYXQgPSBwbGFuZS0+c3RhdGUtPmZiLT5waXhlbF9mb3JtYXQ7CisJ
fSBlbHNlIHsKKwkJcGl0Y2ggPSAwOworCQlmb3JtYXQgPSBEUk1fRk9STUFUX1JHQkE4ODg4Owor
CX0KKworCXggPSBwbGFuZS0+c3RhdGUtPmNydGNfeDsKKwl5ID0gcGxhbmUtPnN0YXRlLT5jcnRj
X3k7CisKKwlpZiAoeCA8IDApIHsKKwkJYWRkciAtPSB4ICogNDsKKwkJeCA9IDA7CisJfQorCisJ
aWYgKHkgPCAwKSB7CisJCWFkZHIgLT0geSAqIHBpdGNoOworCQl5ID0gMDsKKwl9CisKKwlzdGF0
ZS0+cGVuZGluZ19lbmFibGUgPSBlbmFibGU7CisJc3RhdGUtPnBlbmRpbmdfcGl0Y2ggPSBwaXRj
aDsKKwlzdGF0ZS0+cGVuZGluZ19mb3JtYXQgPSBmb3JtYXQ7CisJc3RhdGUtPnBlbmRpbmdfYWRk
ciA9IGFkZHI7CisJc3RhdGUtPnBlbmRpbmdfeCA9IHg7CisJc3RhdGUtPnBlbmRpbmdfeSA9IHk7
CisJc3RhdGUtPnBlbmRpbmdfd2lkdGggPSBkZXN0LT54MiAtIGRlc3QtPngxOworCXN0YXRlLT5w
ZW5kaW5nX2hlaWdodCA9IGRlc3QtPnkyIC0gZGVzdC0+eTE7CisJc3RhdGUtPnBlbmRpbmdfZGly
dHkgPSB0cnVlOworfQorCitzdGF0aWMgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqbXRrX3BsYW5l
X2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgbXRr
X3BsYW5lX3N0YXRlICpvbGRfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRl
KTsKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0ga3phbGxvYyhz
aXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7
CisKKwlfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShwbGFuZSwgJnN0
YXRlLT5iYXNlKTsKKworCVdBUk5fT04oc3RhdGUtPmJhc2UucGxhbmUgIT0gcGxhbmUpOworCisJ
c3RhdGUtPnBlbmRpbmdfY29uZmlnID0gb2xkX3N0YXRlLT5wZW5kaW5nX2NvbmZpZzsKKwlzdGF0
ZS0+cGVuZGluZ19lbmFibGUgPSBvbGRfc3RhdGUtPnBlbmRpbmdfZW5hYmxlOworCXN0YXRlLT5w
ZW5kaW5nX2FkZHIgPSBvbGRfc3RhdGUtPnBlbmRpbmdfYWRkcjsKKwlzdGF0ZS0+cGVuZGluZ19w
aXRjaCA9IG9sZF9zdGF0ZS0+cGVuZGluZ19waXRjaDsKKwlzdGF0ZS0+cGVuZGluZ19mb3JtYXQg
PSBvbGRfc3RhdGUtPnBlbmRpbmdfZm9ybWF0OworCXN0YXRlLT5wZW5kaW5nX3ggPSBvbGRfc3Rh
dGUtPnBlbmRpbmdfeDsKKwlzdGF0ZS0+cGVuZGluZ195ID0gb2xkX3N0YXRlLT5wZW5kaW5nX3k7
CisJc3RhdGUtPnBlbmRpbmdfd2lkdGggPSBvbGRfc3RhdGUtPnBlbmRpbmdfd2lkdGg7CisJc3Rh
dGUtPnBlbmRpbmdfaGVpZ2h0ID0gb2xkX3N0YXRlLT5wZW5kaW5nX2hlaWdodDsKKwlzdGF0ZS0+
cGVuZGluZ19kaXJ0eSA9IG9sZF9zdGF0ZS0+cGVuZGluZ19kaXJ0eTsKKworCXJldHVybiAmc3Rh
dGUtPmJhc2U7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIG10a19w
bGFuZV9mdW5jcyA9IHsKKwkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRl
X3BsYW5lLAorCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFu
ZSwKKwkuZGVzdHJveSA9IGRybV9wbGFuZV9jbGVhbnVwLAorCS5yZXNldCA9IGRybV9hdG9taWNf
aGVscGVyX3BsYW5lX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gbXRrX3BsYW5l
X2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hl
bHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGludCBtdGtfcGxhbmVfYXRv
bWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgc3RydWN0IGRybV9wbGFu
ZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+
ZmI7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCWJvb2wgdmlzaWJsZTsK
KwlpbnQgcmV0OworCXN0cnVjdCBkcm1fcmVjdCBkZXN0ID0geworCQkueDEgPSBzdGF0ZS0+Y3J0
Y194LAorCQkueTEgPSBzdGF0ZS0+Y3J0Y195LAorCQkueDIgPSBzdGF0ZS0+Y3J0Y194ICsgc3Rh
dGUtPmNydGNfdywKKwkJLnkyID0gc3RhdGUtPmNydGNfeSArIHN0YXRlLT5jcnRjX2gsCisJfTsK
KwlzdHJ1Y3QgZHJtX3JlY3Qgc3JjID0geworCQkvKiAxNi4xNiBmaXhlZCBwb2ludCAqLworCQku
eDEgPSBzdGF0ZS0+c3JjX3gsCisJCS55MSA9IHN0YXRlLT5zcmNfeSwKKwkJLngyID0gc3RhdGUt
PnNyY194ICsgc3RhdGUtPnNyY193LAorCQkueTIgPSBzdGF0ZS0+c3JjX3kgKyBzdGF0ZS0+c3Jj
X2gsCisJfTsKKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcCA9IHsgMCwgfTsKKworCWlmICghZmIpCisJ
CXJldHVybiAwOworCisJaWYgKCFtdGtfZmJfZ2V0X2dlbV9vYmooZmIsIDApKSB7CisJCURSTV9E
RUJVR19LTVMoImJ1ZmZlciBpcyBudWxsXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJ
aWYgKCFzdGF0ZS0+Y3J0YykKKwkJcmV0dXJuIDA7CisKKwljcnRjX3N0YXRlID0gZHJtX2F0b21p
Y19nZXRfY3J0Y19zdGF0ZShzdGF0ZS0+c3RhdGUsIHN0YXRlLT5jcnRjKTsKKwlpZiAoSVNfRVJS
KGNydGNfc3RhdGUpKQorCQlyZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKKworCWNsaXAueDIg
PSBjcnRjX3N0YXRlLT5tb2RlLmhkaXNwbGF5OworCWNsaXAueTIgPSBjcnRjX3N0YXRlLT5tb2Rl
LnZkaXNwbGF5OworCisJcmV0ID0gZHJtX3BsYW5lX2hlbHBlcl9jaGVja191cGRhdGUocGxhbmUs
IHN0YXRlLT5jcnRjLCBmYiwKKwkJCQkJICAgICZzcmMsICZkZXN0LCAmY2xpcCwKKwkJCQkJICAg
IERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKKwkJCQkJICAgIERSTV9QTEFORV9IRUxQRVJf
Tk9fU0NBTElORywKKwkJCQkJICAgIHRydWUsIHRydWUsICZ2aXNpYmxlKTsKKwlpZiAocmV0KQor
CQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19wbGFuZV9h
dG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICBzdHJ1Y3QgZHJt
X3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3Rh
dGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwlzdHJ1Y3QgZHJtX2NydGMg
KmNydGMgPSBzdGF0ZS0+YmFzZS5jcnRjOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOwor
CXN0cnVjdCBtdGtfZHJtX3BsYW5lICptdGtfcGxhbmUgPSB0b19tdGtfcGxhbmUocGxhbmUpOwor
CXN0cnVjdCBkcm1fcmVjdCBkZXN0ID0geworCQkueDEgPSBzdGF0ZS0+YmFzZS5jcnRjX3gsCisJ
CS55MSA9IHN0YXRlLT5iYXNlLmNydGNfeSwKKwkJLngyID0gc3RhdGUtPmJhc2UuY3J0Y194ICsg
c3RhdGUtPmJhc2UuY3J0Y193LAorCQkueTIgPSBzdGF0ZS0+YmFzZS5jcnRjX3kgKyBzdGF0ZS0+
YmFzZS5jcnRjX2gsCisJfTsKKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcCA9IHsgMCwgfTsKKworCWlm
ICghY3J0YykKKwkJcmV0dXJuOworCisJY2xpcC54MiA9IHN0YXRlLT5iYXNlLmNydGMtPnN0YXRl
LT5tb2RlLmhkaXNwbGF5OworCWNsaXAueTIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0ZS0+bW9k
ZS52ZGlzcGxheTsKKwlkcm1fcmVjdF9pbnRlcnNlY3QoJmRlc3QsICZjbGlwKTsKKworCWdlbSA9
IG10a19mYl9nZXRfZ2VtX29iaihzdGF0ZS0+YmFzZS5mYiwgMCk7CisJbXRrX3BsYW5lLT5mbGlw
X29iaiA9IHRvX210a19nZW1fb2JqKGdlbSk7CisJbXRrX3BsYW5lLT5jcnRjID0gY3J0YzsKKwor
CWlmIChtdGtfcGxhbmUtPmZsaXBfb2JqKQorCQltdGtfcGxhbmVfY29uZmlnKG10a19wbGFuZSwg
dHJ1ZSwgbXRrX3BsYW5lLT5mbGlwX29iai0+ZG1hX2FkZHIsCisJCQkJICZkZXN0KTsKK30KKwor
c3RhdGljIHZvaWQgbXRrX3BsYW5lX2F0b21pY19kaXNhYmxlKHN0cnVjdCBkcm1fcGxhbmUgKnBs
YW5lLAorCQkJCSAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQoreworCXN0
cnVjdCBtdGtfZHJtX3BsYW5lICptdGtfcGxhbmUgPSB0b19tdGtfcGxhbmUocGxhbmUpOworCXN0
cnVjdCBkcm1fY3J0YyAqY3J0YyA9IG9sZF9zdGF0ZS0+Y3J0YzsKKwlzdHJ1Y3QgZHJtX3JlY3Qg
ZGVzdCA9IHsgMCwgfTsKKworCWlmICghY3J0YykKKwkJcmV0dXJuOworCisJbXRrX3BsYW5lX2Nv
bmZpZyhtdGtfcGxhbmUsIGZhbHNlLCAwLCAmZGVzdCk7CisKKwltdGtfZHJtX2NydGNfY29tbWl0
KGNydGMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3Mg
bXRrX3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsKKwkuYXRvbWljX2NoZWNrID0gbXRrX3BsYW5lX2F0
b21pY19jaGVjaywKKwkuYXRvbWljX3VwZGF0ZSA9IG10a19wbGFuZV9hdG9taWNfdXBkYXRlLAor
CS5hdG9taWNfZGlzYWJsZSA9IG10a19wbGFuZV9hdG9taWNfZGlzYWJsZSwKK307CisKK2ludCBt
dGtfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgbXRrX2RybV9wbGFu
ZSAqbXRrX3BsYW5lLAorCQkgICB1bnNpZ25lZCBsb25nIHBvc3NpYmxlX2NydGNzLCBlbnVtIGRy
bV9wbGFuZV90eXBlIHR5cGUsCisJCSAgIHVuc2lnbmVkIGludCB6cG9zKQoreworCWludCBlcnI7
CisKKwllcnIgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoZGV2LCAmbXRrX3BsYW5lLT5iYXNl
LCBwb3NzaWJsZV9jcnRjcywKKwkJCSZtdGtfcGxhbmVfZnVuY3MsIGZvcm1hdHMsIEFSUkFZX1NJ
WkUoZm9ybWF0cyksIHR5cGUpOworCisJaWYgKGVycikgeworCQlEUk1fRVJST1IoImZhaWxlZCB0
byBpbml0aWFsaXplIHBsYW5lXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlkcm1fcGxhbmVf
aGVscGVyX2FkZCgmbXRrX3BsYW5lLT5iYXNlLCAmbXRrX3BsYW5lX2hlbHBlcl9mdW5jcyk7CisJ
bXRrX3BsYW5lLT5pZHggPSB6cG9zOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5oIGIvZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19kcm1fcGxhbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hNzAyYmRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kcm1fcGxhbmUuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1
IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KKyAq
CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lm
bmRlZiBfTVRLX0RSTV9QTEFORV9IXworI2RlZmluZSBfTVRLX0RSTV9QTEFORV9IXworCisjaW5j
bHVkZSA8ZHJtL2RybV9jcnRjLmg+CisKK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmo7CisKK3N0cnVj
dCBtdGtfZHJtX3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lCQliYXNlOworCXN0cnVjdCBkcm1f
Y3J0YwkJCSpjcnRjOworCXVuc2lnbmVkIGludAkJCWlkeDsKKworCXN0cnVjdCBtdGtfZHJtX2dl
bV9vYmoJCSpmbGlwX29iajsKK307CisKK3N0cnVjdCBtdGtfcGxhbmVfc3RhdGUgeworCXN0cnVj
dCBkcm1fcGxhbmVfc3RhdGUJCWJhc2U7CisKKwlib29sCQkJCXBlbmRpbmdfY29uZmlnOworCWJv
b2wJCQkJcGVuZGluZ19lbmFibGU7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ19hZGRyOworCXVu
c2lnbmVkIGludAkJCXBlbmRpbmdfcGl0Y2g7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ19mb3Jt
YXQ7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ194OworCXVuc2lnbmVkIGludAkJCXBlbmRpbmdf
eTsKKwl1bnNpZ25lZCBpbnQJCQlwZW5kaW5nX3dpZHRoOworCXVuc2lnbmVkIGludAkJCXBlbmRp
bmdfaGVpZ2h0OworCWJvb2wJCQkJcGVuZGluZ19kaXJ0eTsKK307CisKK3N0YXRpYyBpbmxpbmUg
c3RydWN0IG10a19kcm1fcGxhbmUgKnRvX210a19wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu
ZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHBsYW5lLCBzdHJ1Y3QgbXRrX2RybV9wbGFuZSwg
YmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqCit0b19t
dGtfcGxhbmVfc3RhdGUoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJcmV0dXJu
IGNvbnRhaW5lcl9vZihzdGF0ZSwgc3RydWN0IG10a19wbGFuZV9zdGF0ZSwgYmFzZSk7Cit9CisK
K3ZvaWQgbXRrX3BsYW5lX2ZpbmlzaF9wYWdlX2ZsaXAoc3RydWN0IG10a19kcm1fcGxhbmUgKm10
a19wbGFuZSk7CitpbnQgbXRrX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3Ry
dWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSwKKwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJs
ZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlLAorCQkgICB1bnNpZ25lZCBpbnQgenBv
cyk7CisKKyNlbmRpZgotLSAKMi42LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZy
ZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu
Zm8vZHJpLWRldmVsCg==