From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v8 02/13] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173.
Date: Mon, 4 Jan 2016 18:36:34 +0100
Message-ID: <1451929005-16372-3-git-send-email-p.zabel@pengutronix.de>
References: <1451929005-16372-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: <1451929005-16372-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 , Michael Turquette , Jie Qiu , Cawa Cheng , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Stephen Boyd , Tomasz Figa , Kumar Gala
List-Id: devicetree@vger.kernel.org
RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0
aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUApzdWJzeXN0ZW0uIEl0
IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0cmVhbXMgZnJvbSB0aGUKT1ZM
MC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywgcmVzcGVjdGl2ZWx5LgoKU2ln
bmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWVQg
U2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IERhbmllbCBLdXJ0eiA8
ZGprdXJ0ekBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IFBoaWxpcHAgWmFiZWwgPHAuemFi
ZWxAcGVuZ3V0cm9uaXguZGU+Ci0tLQpDaGFuZ2VzIHNpbmNlIHY3OgogLSBNb3ZlIFBBTkVMIGFu
ZCBNSVBJX0RTSSBjb25maWcgc2VsZWN0aW9uIHRvIGxhdGVyIHBhdGNoZXMKIC0gU29ydCBvYmpl
Y3QgZmlsZXMgYWxwaGFiZXRpY2FsbHkgaW4gTWFrZWZpbGUKIC0gRHJvcCBtdGtfY3J0Yy0+cGlw
ZSwgdXNlIGRybV9jcnRjX2hhbmRsZV92YmxhbmsgaW5zdGVhZAogLSBNb3ZlIGNvcGllZCBldmVu
dCBmcm9tIG10a19jcnRjX3N0YXRlIGJhY2sgdG8gbXRrX2NydGMKIC0gV2FpdCBmb3IgZXhjbHVz
aXZlIGZlbmNlcyBvbiBpbmNvbWluZyBmcmFtZWJ1ZmZlcnMKICAgdXNpbmcgcmVzZXJ2YXRpb25f
b2JqZWN0X3dhaXRfdGltZW91dF9yY3UgaW4gLmF0b21pY19jb21wbGV0ZSgpLgogLSBBZGQgbWlz
c2luZyBhdG9taWMgZGVzdHJveV9zdGF0ZSBjYWxsYmFja3MKIC0gUmVuYW1lIG10a19jcnRjX2Rk
cF9wb3dlcl9vbi9vZiB0byBfY2xrX2VuYWJsZS9kaXNhYmxlCiAtIEFkZCBhIHBlbmRpbmdfcGxh
bmVzIGZsYWcgdG8gbXRrX2NydGMgc28gd2UgY2FuIGF0b21pY2FsbHkgdXBkYXRlIHRoZSBwbGFu
ZQogICBjb25maWd1cmF0aW9uCiAtIEZvbGQgbXRrX2RybV9jcnRjX2NvbW1pdCBpbnRvIG10a19k
cm1fY3J0Y19hdG9taWNfZmx1c2gKIC0gTWFrZSBhbGwgZGRwX2NvbXAgY2FsbGJhY2tzIHRha2Ug
YSBzdHJ1Y3QgbXRrX2RkcF9jb21wICogZmlyc3QgcGFyYW1ldGVyLgogLSBGaXggT0QgZGRwX2Nv
bXAgZnVuY3Rpb24gc2V0dXAKIC0gRGVmZXIgdW50aWwgaW9tbXUgaXMgcHJlc2VudAogLSBGaXgg
cHJvYmUgZXJyb3IgcGF0aAogLSBSZWxheCBzb21lIHdyaXRlbHMKLS0tCiBkcml2ZXJzL2dwdS9k
cm0vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9N
YWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL0tjb25maWcgICAgICAgICAgICB8ICAxMiArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
TWFrZWZpbGUgICAgICAgICAgIHwgIDEwICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZGlzcF9vdmwuYyAgICAgfCAzMDEgKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX2NydGMuYyAgICAgfCA2MDMgKysrKysrKysrKysrKysrKysrKysrKysrKysr
KwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oICAgICB8ICAzMiArKwog
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMgICAgICB8IDM1NSArKysrKysr
KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaCAgICAgIHwg
IDQxICsrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jIHwgMjc1
ICsrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21w
LmggfCAxNDggKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMg
ICAgICB8IDU3NyArKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19kcm1fZHJ2LmggICAgICB8ICA1MiArKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX2ZiLmMgICAgICAgfCAxNjUgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHJtX2ZiLmggICAgICAgfCAgMjkgKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX2dlbS5jICAgICAgfCAyMjcgKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oICAgICAgfCAgNTUgKysrCiBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jICAgIHwgMjQyICsrKysrKysrKysrCiBkcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5oICAgIHwgIDU5ICsrKwogMTkgZmlsZXMgY2hh
bmdlZCwgMzE4NiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX2Rpc3Bfb3ZsLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0
IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmgKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwogY3JlYXRlIG1v
ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwogY3JlYXRl
IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmgKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oCiBj
cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUu
YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3Bs
YW5lLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1
L2RybS9LY29uZmlnCmluZGV4IGM0YmY5YTEuLjhmZGIwYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv
Z3B1L2RybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0yNjYsMyAr
MjY2LDUgQEAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnIgogc291
cmNlICJkcml2ZXJzL2dwdS9kcm0vaW14L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9ncHUv
ZHJtL3ZjNC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29u
ZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUv
ZHJtL01ha2VmaWxlCmluZGV4IDFlOWZmNGMuLjYwN2E0OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv
Z3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTcxLDYg
KzcxLDcgQEAgb2JqLSQoQ09ORklHX0RSTV9NU00pICs9IG1zbS8KIG9iai0kKENPTkZJR19EUk1f
VEVHUkEpICs9IHRlZ3JhLwogb2JqLSQoQ09ORklHX0RSTV9TVEkpICs9IHN0aS8KIG9iai0kKENP
TkZJR19EUk1fSU1YKSArPSBpbXgvCitvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRp
YXRlay8KIG9iai15CQkJKz0gaTJjLwogb2JqLXkJCQkrPSBwYW5lbC8KIG9iai15CQkJKz0gYnJp
ZGdlLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgYi9kcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44ZGFkODkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL0tjb25maWcKQEAgLTAsMCArMSwxMiBAQAorY29uZmlnIERSTV9NRURJQVRFSworCXRyaXN0
YXRlICJEUk0gU3VwcG9ydCBmb3IgTWVkaWF0ZWsgU29DcyIKKwlkZXBlbmRzIG9uIERSTQorCWRl
cGVuZHMgb24gQVJDSF9NRURJQVRFSyB8fCAoQVJNICYmIENPTVBJTEVfVEVTVCkKKwlzZWxlY3Qg
RFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgSU9NTVVfRE1BCisJc2VsZWN0IE1US19TTUkKKwloZWxw
CisJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBNZWRpYXRlayBTb0NzLgorCSAg
VGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtZWRpYXRlay1kcm0KKwkgIFRoaXMgZHJpdmVyIHBy
b3ZpZGVzIGtlcm5lbCBtb2RlIHNldHRpbmcgYW5kCisJICBidWZmZXIgbWFuYWdlbWVudCB0byB1
c2Vyc3BhY2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUg
Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYzdjYzQxYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9NYWtlZmlsZQpAQCAtMCwwICsxLDEwIEBACittZWRpYXRlay1kcm0teSA6PSBt
dGtfZGlzcF9vdmwubyBcCisJCSAgbXRrX2RybV9jcnRjLm8gXAorCQkgIG10a19kcm1fZGRwLm8g
XAorCQkgIG10a19kcm1fZGRwX2NvbXAubyBcCisJCSAgbXRrX2RybV9kcnYubyBcCisJCSAgbXRr
X2RybV9mYi5vIFwKKwkJICBtdGtfZHJtX2dlbS5vIFwKKwkJICBtdGtfZHJtX3BsYW5lLm8KKwor
b2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykgKz0gbWVkaWF0ZWstZHJtLm8KZGlmZiAtLWdpdCBh
L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYyBiL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40NTVlNjJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kaXNwX292bC5jCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8bGludXgv
Y2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvb2Zf
ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxh
dGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRlICJt
dGtfZHJtX2RkcF9jb21wLmgiCisKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0lOVEVOCQkJMHgwMDA0
CisjZGVmaW5lIE9WTF9GTUVfQ1BMX0lOVAkJCQkJQklUKDEpCisjZGVmaW5lIERJU1BfUkVHX09W
TF9JTlRTVEEJCQkweDAwMDgKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0VOCQkJCTB4MDAwYworI2Rl
ZmluZSBESVNQX1JFR19PVkxfUlNUCQkJMHgwMDE0CisjZGVmaW5lIERJU1BfUkVHX09WTF9ST0lf
U0laRQkJCTB4MDAyMAorI2RlZmluZSBESVNQX1JFR19PVkxfUk9JX0JHQ0xSCQkJMHgwMDI4Cisj
ZGVmaW5lIERJU1BfUkVHX09WTF9TUkNfQ09OCQkJMHgwMDJjCisjZGVmaW5lIERJU1BfUkVHX09W
TF9DT04obikJCQkoMHgwMDMwICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1NS
Q19TSVpFKG4pCQkoMHgwMDM4ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX09G
RlNFVChuKQkJCSgweDAwM2MgKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfUElU
Q0gobikJCQkoMHgwMDQ0ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JETUFf
Q1RSTChuKQkJKDB4MDBjMCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9SRE1B
X0dNQyhuKQkJKDB4MDBjOCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9BRERS
KG4pCQkJKDB4MGY0MCArIDB4MjAgKiAobikpCisKK2VudW0gT1ZMX0lOUFVUX0ZPUk1BVCB7CisJ
T1ZMX0lORk1UX1JHQjU2NSA9IDAsCisJT1ZMX0lORk1UX1JHQjg4OCA9IDEsCisJT1ZMX0lORk1U
X1JHQkE4ODg4ID0gMiwKKwlPVkxfSU5GTVRfQVJHQjg4ODggPSAzLAorfTsKKworI2RlZmluZQlP
VkxfUkRNQV9NRU1fR01DCTB4NDA0MDIwMjAKKyNkZWZpbmUJT1ZMX0FFTgkJCUJJVCg4KQorI2Rl
ZmluZQlPVkxfQUxQSEEJCTB4ZmYKKworLyoqCisgKiBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsIC0gRElT
UF9PVkwgZHJpdmVyIHN0cnVjdHVyZQorICogQGRkcF9jb21wIC0gc3RydWN0dXJlIGNvbnRhaW5p
bmcgdHlwZSBlbnVtIGFuZCBoYXJkd2FyZSByZXNvdXJjZXMKKyAqIEBkcm1fZGV2aWNlIC0gYmFj
a2xpbmsgdG8gYWxsb3cgdGhlIGlycSBoYW5kbGVyIHRvIGZpbmQgdGhlIGFzc29jaWF0ZWQgY3J0
YworICovCitzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsIHsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wCQlkZHBf
Y29tcDsKKwlzdHJ1Y3QgZHJtX2RldmljZQkJKmRybV9kZXY7Cit9OworCitzdGF0aWMgaXJxcmV0
dXJuX3QgbXRrX2Rpc3Bfb3ZsX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sK
KwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gZGV2X2lkOworCXN0cnVjdCBtdGtfZGRwX2Nv
bXAgKm92bCA9ICZwcml2LT5kZHBfY29tcDsKKworCS8qIENsZWFyIGZyYW1lIGNvbXBsZXRpb24g
aW50ZXJydXB0ICovCisJd3JpdGVsKDB4MCwgb3ZsLT5yZWdzICsgRElTUF9SRUdfT1ZMX0lOVFNU
QSk7CisKKwltdGtfY3J0Y19kZHBfaXJxKHByaXYtPmRybV9kZXYsIG92bCk7CisKKwlyZXR1cm4g
SVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfZW5hYmxlX3ZibGFuayhzdHJ1
Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRlbF9yZWxheGVkKE9WTF9GTUVfQ1BMX0lO
VCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9JTlRFTik7Cit9CisKK3N0YXRpYyB2b2lkIG10
a19vdmxfZGlzYWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0
ZWxfcmVsYXhlZCgweDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfSU5URU4pOworfQorCitz
dGF0aWMgdm9pZCBtdGtfb3ZsX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJ
d3JpdGVsX3JlbGF4ZWQoMHgxLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0VOKTsKK30KKwor
c3RhdGljIHZvaWQgbXRrX292bF9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJ
d3JpdGVsX3JlbGF4ZWQoMHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0VOKTsKK30KKwor
c3RhdGljIHZvaWQgbXRrX292bF9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5z
aWduZWQgaW50IHcsCisJCQkgICB1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQgaW50IHZyZWZyZXNo
KQoreworCWlmICh3ICE9IDAgJiYgaCAhPSAwKQorCQl3cml0ZWxfcmVsYXhlZChoIDw8IDE2IHwg
dywgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9ST0lfU0laRSk7CisJd3JpdGVsX3JlbGF4ZWQo
MHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JPSV9CR0NMUik7CisKKwl3cml0ZWwoMHgx
LCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JTVCk7CisJd3JpdGVsKDB4MCwgY29tcC0+cmVn
cyArIERJU1BfUkVHX09WTF9SU1QpOworfQorCitzdGF0aWMgYm9vbCBoYXNfcmJfc3dhcHBlZCh1
bnNpZ25lZCBpbnQgZm10KQoreworCXN3aXRjaCAoZm10KSB7CisJY2FzZSBEUk1fRk9STUFUX0JH
Ujg4ODoKKwljYXNlIERSTV9GT1JNQVRfQkdSNTY1OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4
ODoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4
OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JYODg4ODoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoK
KwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCBvdmxfZm10X2Nv
bnZlcnQodW5zaWduZWQgaW50IGZtdCkKK3sKKwlzd2l0Y2ggKGZtdCkgeworCWNhc2UgRFJNX0ZP
Uk1BVF9SR0I4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKKwkJcmV0dXJuIE9WTF9JTkZN
VF9SR0I4ODg7CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwljYXNlIERSTV9GT1JNQVRfQkdS
NTY1OgorCQlyZXR1cm4gT1ZMX0lORk1UX1JHQjU2NTsKKwljYXNlIERSTV9GT1JNQVRfUkdCWDg4
ODg6CisJY2FzZSBEUk1fRk9STUFUX1JHQkE4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JYODg4
ODoKKwljYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6CisJCXJldHVybiBPVkxfSU5GTVRfQVJHQjg4
ODg7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4
ODoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4
OgorCQlyZXR1cm4gT1ZMX0lORk1UX1JHQkE4ODg4OworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigi
dW5zdXBwb3J0ZWQgZm9ybWF0WyUwOHhdXG4iLCBmbXQpOworCQlyZXR1cm4gT1ZMX0lORk1UX1JH
Qjg4ODsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfbGF5ZXJfb24oc3RydWN0IG10a19k
ZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOwor
CisJd3JpdGVsKDB4MSwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9SRE1BX0NUUkwoaWR4KSk7
CisJd3JpdGVsKE9WTF9SRE1BX01FTV9HTUMsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUkRN
QV9HTUMoaWR4KSk7CisKKwlyZWcgPSByZWFkbChjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NS
Q19DT04pOworCXJlZyA9IHJlZyB8IEJJVChpZHgpOworCXdyaXRlbChyZWcsIGNvbXAtPnJlZ3Mg
KyBESVNQX1JFR19PVkxfU1JDX0NPTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfbGF5ZXJf
b2ZmKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgpCit7CisJdW5z
aWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJlYWRsKGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxf
U1JDX0NPTik7CisJcmVnID0gcmVnICYgfkJJVChpZHgpOworCXdyaXRlbChyZWcsIGNvbXAtPnJl
Z3MgKyBESVNQX1JFR19PVkxfU1JDX0NPTik7CisKKwl3cml0ZWwoMHgwLCBjb21wLT5yZWdzICsg
RElTUF9SRUdfT1ZMX1JETUFfQ1RSTChpZHgpKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9s
YXllcl9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCwK
KwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9w
ZW5kaW5nX3N0YXRlICpwZW5kaW5nID0gJnN0YXRlLT5wZW5kaW5nOworCXVuc2lnbmVkIGludCBh
ZGRyID0gcGVuZGluZy0+YWRkcjsKKwl1bnNpZ25lZCBpbnQgcGl0Y2ggPSBwZW5kaW5nLT5waXRj
aCAmIDB4ZmZmZjsKKwl1bnNpZ25lZCBpbnQgZm10ID0gcGVuZGluZy0+Zm9ybWF0OworCXVuc2ln
bmVkIGludCBvZmZzZXQgPSAocGVuZGluZy0+eSA8PCAxNikgfCBwZW5kaW5nLT54OworCXVuc2ln
bmVkIGludCBzcmNfc2l6ZSA9IChwZW5kaW5nLT5oZWlnaHQgPDwgMTYpIHwgcGVuZGluZy0+d2lk
dGg7CisJdW5zaWduZWQgaW50IGNvbjsKKworCWNvbiA9IGhhc19yYl9zd2FwcGVkKGZtdCkgPDwg
MjQgfCBvdmxfZm10X2NvbnZlcnQoZm10KSA8PCAxMjsKKwlpZiAoaWR4ICE9IDApCisJCWNvbiB8
PSBPVkxfQUVOIHwgT1ZMX0FMUEhBOworCisJd3JpdGVsKGNvbiwgY29tcC0+cmVncyArIERJU1Bf
UkVHX09WTF9DT04oaWR4KSk7CisJd3JpdGVsKHBpdGNoLCBjb21wLT5yZWdzICsgRElTUF9SRUdf
T1ZMX1BJVENIKGlkeCkpOworCXdyaXRlbChzcmNfc2l6ZSwgY29tcC0+cmVncyArIERJU1BfUkVH
X09WTF9TUkNfU0laRShpZHgpKTsKKwl3cml0ZWwob2Zmc2V0LCBjb21wLT5yZWdzICsgRElTUF9S
RUdfT1ZMX09GRlNFVChpZHgpKTsKKwl3cml0ZWwoYWRkciwgY29tcC0+cmVncyArIERJU1BfUkVH
X09WTF9BRERSKGlkeCkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9m
dW5jcyBtdGtfZGlzcF9vdmxfZnVuY3MgPSB7CisJLmNvbmZpZyA9IG10a19vdmxfY29uZmlnLAor
CS5zdGFydCA9IG10a19vdmxfc3RhcnQsCisJLnN0b3AgPSBtdGtfb3ZsX3N0b3AsCisJLmVuYWJs
ZV92YmxhbmsgPSBtdGtfb3ZsX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRr
X292bF9kaXNhYmxlX3ZibGFuaywKKwkubGF5ZXJfb24gPSBtdGtfb3ZsX2xheWVyX29uLAorCS5s
YXllcl9vZmYgPSBtdGtfb3ZsX2xheWVyX29mZiwKKwkubGF5ZXJfY29uZmlnID0gbXRrX292bF9s
YXllcl9jb25maWcsCit9OworCitzdGF0aWMgaW50IG10a19kaXNwX292bF9iaW5kKHN0cnVjdCBk
ZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQl2b2lkICpkYXRhKQoreworCXN0
cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qg
ZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7CisJaW50IHJldDsKKworCXByaXYtPmRybV9kZXYg
PSBkcm1fZGV2OworCisJcmV0ID0gbXRrX2RkcF9jb21wX3JlZ2lzdGVyKGRybV9kZXYsICZwcml2
LT5kZHBfY29tcCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g
cmVnaXN0ZXIgY29tcG9uZW50ICVzOiAlZFxuIiwKKwkJCWRldi0+b2Zfbm9kZS0+ZnVsbF9uYW1l
LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyB2
b2lkIG10a19kaXNwX292bF91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNl
ICptYXN0ZXIsCisJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9
IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0
YTsKKworCW10a19kZHBfY29tcF91bnJlZ2lzdGVyKGRybV9kZXYsICZwcml2LT5kZHBfY29tcCk7
Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBtdGtfZGlzcF9vdmxfY29t
cG9uZW50X29wcyA9IHsKKwkuYmluZAk9IG10a19kaXNwX292bF9iaW5kLAorCS51bmJpbmQgPSBt
dGtfZGlzcF9vdmxfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBtdGtfZGlzcF9vdmxfcHJvYmUo
c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm
cGRldi0+ZGV2OworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXY7CisJaW50IGNvbXBfaWQ7CisJ
aW50IGlycTsKKwlpbnQgcmV0OworCisJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq
cHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlp
cnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4g
aXJxOworCisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgbXRrX2Rpc3Bfb3ZsX2ly
cV9oYW5kbGVyLAorCQkJICAgICAgIElSUUZfVFJJR0dFUl9OT05FLCBkZXZfbmFtZShkZXYpLCBw
cml2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0
IGlycSAlZDogJWRcbiIsIGlycSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljb21wX2lk
ID0gbXRrX2RkcF9jb21wX2dldF9pZChkZXYtPm9mX25vZGUsIE1US19ESVNQX09WTCk7CisJaWYg
KGNvbXBfaWQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGlkZW50aWZ5IGJ5IGFs
aWFzOiAlZFxuIiwgY29tcF9pZCk7CisJCXJldHVybiBjb21wX2lkOworCX0KKworCXJldCA9IG10
a19kZHBfY29tcF9pbml0KGRldiwgZGV2LT5vZl9ub2RlLCAmcHJpdi0+ZGRwX2NvbXAsIGNvbXBf
aWQsCisJCQkJJm10a19kaXNwX292bF9mdW5jcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRl
diwgIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbXBvbmVudDogJWRcbiIsIHJldCk7CisJCXJldHVy
biByZXQ7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisKKwlyZXQg
PSBjb21wb25lbnRfYWRkKGRldiwgJm10a19kaXNwX292bF9jb21wb25lbnRfb3BzKTsKKwlpZiAo
cmV0KQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhZGQgY29tcG9uZW50OiAlZFxuIiwgcmV0
KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX3JlbW92ZShz
dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRl
diwgJm10a19kaXNwX292bF9jb21wb25lbnRfb3BzKTsKKworCXJldHVybiAwOworfQorCitzdGF0
aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZGlzcF9vdmxfZHJpdmVyX2R0X21hdGNo
W10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1vdmwiLCB9LAor
CXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10a19kaXNwX292bF9kcml2ZXJfZHRf
bWF0Y2gpOworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kaXNwX292bF9kcml2ZXIgPSB7
CisJLnByb2JlCQk9IG10a19kaXNwX292bF9wcm9iZSwKKwkucmVtb3ZlCQk9IG10a19kaXNwX292
bF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1lZGlhdGVrLWRpc3Atb3ZsIiwK
KwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kaXNwX292
bF9kcml2ZXJfZHRfbWF0Y2gsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9jcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJmNmU1NAotLS0g
L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwpA
QCAtMCwwICsxLDYwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK
KyNpbmNsdWRlIDxhc20vYmFycmllci5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVk
ZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBl
ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgv
Y2xrLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPHNvYy9tZWRp
YXRlay9zbWkuaD4KKworI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCisjaW5jbHVkZSAibXRrX2Ry
bV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Rk
cF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKyNpbmNsdWRlICJtdGtfZHJtX3Bs
YW5lLmgiCisKKy8qKgorICogc3RydWN0IG10a19kcm1fY3J0YyAtIE1lZGlhVGVrIHNwZWNpZmlj
IGNydGMgc3RydWN0dXJlLgorICogQGJhc2U6IGNydGMgb2JqZWN0LgorICogQGVuYWJsZWQ6IHJl
Y29yZHMgd2hldGhlciBjcnRjX2VuYWJsZSBzdWNjZWVkZWQKKyAqIEBkb19mbHVzaDogZW5hYmxl
ZCBieSBhdG9taWNfZmx1c2gsIGNhdXNlcyBwbGFuZSBhdG9taWNfdXBkYXRlIHRvIGNvbW1pdAor
ICogICAgICAgICAgICBjaGFuZ2VkIHN0YXRlIGltbWVkaWF0ZWx5LgorICogQHBsYW5lczogYXJy
YXkgb2YgNCBtdGtfZHJtX3BsYW5lIHN0cnVjdHVyZXMsIG9uZSBmb3IgZWFjaCBvdmVybGF5IHBs
YW5lCisgKiBAcGVuZGluZ19wbGFuZXM6IHdoZXRoZXIgYW55IHBsYW5lIGhhcyBwZW5kaW5nIGNo
YW5nZXMgdG8gYmUgYXBwbGllZAorICogQGNvbmZpZ19yZWdzOiBtZW1vcnkgbWFwcGVkIG1tc3lz
IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BhY2UKKyAqIEBtdXRleDogaGFuZGxlIHRvIG9uZSBv
ZiB0aGUgdGVuIGRpc3BfbXV0ZXggc3RyZWFtcworICogQGRkcF9jb21wX25yOiBudW1iZXIgb2Yg
Y29tcG9uZW50cyBpbiBkZHBfY29tcAorICogQGRkcF9jb21wOiBhcnJheSBvZiBwb2ludGVycyB0
aGUgbXRrX2RkcF9jb21wIHN0cnVjdHVyZXMgdXNlZCBieSB0aGlzIGNydGMKKyAqLworc3RydWN0
IG10a19kcm1fY3J0YyB7CisJc3RydWN0IGRybV9jcnRjCQkJYmFzZTsKKwlib29sCQkJCWVuYWJs
ZWQ7CisKKwlib29sCQkJCWRvX2ZsdXNoOworCWJvb2wJCQkJcGVuZGluZ19uZWVkc192Ymxhbms7
CisJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudAkqZXZlbnQ7CisKKwlzdHJ1Y3QgbXRr
X2RybV9wbGFuZQkJcGxhbmVzW09WTF9MQVlFUl9OUl07CisJYm9vbAkJCQlwZW5kaW5nX3BsYW5l
czsKKworCXZvaWQgX19pb21lbQkJCSpjb25maWdfcmVnczsKKwlzdHJ1Y3QgbXRrX2Rpc3BfbXV0
ZXgJCSptdXRleDsKKwl1bnNpZ25lZCBpbnQJCQlkZHBfY29tcF9ucjsKKwlzdHJ1Y3QgbXRrX2Rk
cF9jb21wCQkqKmRkcF9jb21wOworfTsKKworc3RydWN0IG10a19jcnRjX3N0YXRlIHsKKwlzdHJ1
Y3QgZHJtX2NydGNfc3RhdGUJCWJhc2U7CisKKwlib29sCQkJCXBlbmRpbmdfY29uZmlnOworCXVu
c2lnbmVkIGludAkJCXBlbmRpbmdfd2lkdGg7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ19oZWln
aHQ7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ192cmVmcmVzaDsKK307CisKK3N0YXRpYyBpbmxp
bmUgc3RydWN0IG10a19kcm1fY3J0YyAqdG9fbXRrX2NydGMoc3RydWN0IGRybV9jcnRjICpjKQor
eworCXJldHVybiBjb250YWluZXJfb2YoYywgc3RydWN0IG10a19kcm1fY3J0YywgYmFzZSk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19jcnRjX3N0YXRlICp0b19tdGtfY3J0Y19zdGF0
ZShzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzLCBz
dHJ1Y3QgbXRrX2NydGNfc3RhdGUsIGJhc2UpOworfQorCisvKgorICogR2l2ZW4gYSBERFAgc291
cmNlIGNvbXBvbmVudCAoT1ZMIG9yIFJETUEpLCBmaW5kIHRoZSBjcnRjIHRoYXQgaGFzIHRoaXMK
KyAqIGNvbXBvbmVudCBhcyBmaXJzdCBlbGVtZW50IG9mIGl0cyBkZHBfY29tcCBhcnJheS4gVGhp
cyBhbGxvd3MgdG8gZGVsaXZlcgorICogdGhlIHNvdXJjZSBjb21wb25lbnQncyBlbmQgb2YgZnJh
bWUgaW50ZXJydXB0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGNydGMuCisgKi8KK3N0YXRpYyBzdHJ1
Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0Y19ieV9zcmNfY29tcChzdHJ1Y3QgbXRrX2RybV9wcml2
YXRlICpwcml2LAorCQkJCQkJIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmRkcF9jb21wKQoreworCXN0
cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8
IE1BWF9DUlRDOyBpKyspIHsKKwkJbXRrX2NydGMgPSB0b19tdGtfY3J0Yyhwcml2LT5jcnRjW2ld
KTsKKwkJaWYgKG10a19jcnRjLT5kZHBfY29tcFswXSA9PSBkZHBfY29tcCkKKwkJCXJldHVybiBt
dGtfY3J0YzsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9j
cnRjX2ZpbmlzaF9wYWdlX2ZsaXAoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJ
c3RydWN0IGRybV9jcnRjICpjcnRjID0gJm10a19jcnRjLT5iYXNlOworCXVuc2lnbmVkIGxvbmcg
ZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFn
cyk7CisJZHJtX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMtPmRldiwgbXRrX2NydGMtPmV2ZW50LT5w
aXBlLCBtdGtfY3J0Yy0+ZXZlbnQpOworCWRybV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7CisJbXRr
X2NydGMtPmV2ZW50ID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcnRjLT5kZXYt
PmV2ZW50X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9maW5pc2hfcGFn
ZV9mbGlwKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCWRybV9jcnRjX2hhbmRs
ZV92YmxhbmsoJm10a19jcnRjLT5iYXNlKTsKKwlpZiAobXRrX2NydGMtPnBlbmRpbmdfbmVlZHNf
dmJsYW5rKSB7CisJCW10a19kcm1fY3J0Y19maW5pc2hfcGFnZV9mbGlwKG10a19jcnRjKTsKKwkJ
bXRrX2NydGMtPnBlbmRpbmdfbmVlZHNfdmJsYW5rID0gZmFsc2U7CisJfQorfQorCitzdGF0aWMg
dm9pZCBtdGtfZHJtX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3Ry
dWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwlpbnQgaTsK
KworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJY2xrX3Vu
cHJlcGFyZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7CisKKwltdGtfZGlzcF9tdXRleF9w
dXQobXRrX2NydGMtPm11dGV4KTsKKworCWRybV9jcnRjX2NsZWFudXAoY3J0Yyk7Cit9CisKK3N0
YXRpYyB2b2lkIG10a19kcm1fY3J0Y19yZXNldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJ
c3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZTsKKworCWlmIChjcnRjLT5zdGF0ZSkgeworCQlp
ZiAoY3J0Yy0+c3RhdGUtPm1vZGVfYmxvYikKKwkJCWRybV9wcm9wZXJ0eV91bnJlZmVyZW5jZV9i
bG9iKGNydGMtPnN0YXRlLT5tb2RlX2Jsb2IpOworCisJCXN0YXRlID0gdG9fbXRrX2NydGNfc3Rh
dGUoY3J0Yy0+c3RhdGUpOworCQltZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKwl9
IGVsc2UgeworCQlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwor
CQlpZiAoIXN0YXRlKQorCQkJcmV0dXJuOworCQljcnRjLT5zdGF0ZSA9ICZzdGF0ZS0+YmFzZTsK
Kwl9CisKKwlzdGF0ZS0+YmFzZS5jcnRjID0gY3J0YzsKK30KKworc3RhdGljIHN0cnVjdCBkcm1f
Y3J0Y19zdGF0ZSAqbXRrX2RybV9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMg
KmNydGMpCit7CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0ga3ph
bGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJu
IE5VTEw7CisKKwlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKGNydGMs
ICZzdGF0ZS0+YmFzZSk7CisKKwlXQVJOX09OKHN0YXRlLT5iYXNlLmNydGMgIT0gY3J0Yyk7CisJ
c3RhdGUtPmJhc2UuY3J0YyA9IGNydGM7CisKKwlyZXR1cm4gJnN0YXRlLT5iYXNlOworfQorCitz
dGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNy
dGMsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJX19kcm1f
YXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoY3J0Yywgc3RhdGUpOworCWtmcmVlKHRv
X210a19jcnRjX3N0YXRlKHN0YXRlKSk7Cit9CisKK3N0YXRpYyBib29sIG10a19kcm1fY3J0Y19t
b2RlX2ZpeHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJY29uc3Qgc3RydWN0IGRybV9kaXNw
bGF5X21vZGUgKm1vZGUsCisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2Rl
KQoreworCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSwgYnV0IHRoaXMgY2FsbGJhY2sgaXMgbWFuZGF0
b3J5LiAqLworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfbW9k
ZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19jcnRjX3N0
YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKworCXN0YXRlLT5w
ZW5kaW5nX3dpZHRoID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKKwlzdGF0ZS0+cGVuZGluZ19oZWln
aHQgPSBjcnRjLT5tb2RlLnZkaXNwbGF5OworCXN0YXRlLT5wZW5kaW5nX3ZyZWZyZXNoID0gY3J0
Yy0+bW9kZS52cmVmcmVzaDsKKwl3bWIoKTsJLyogTWFrZSBzdXJlIHRoZSBhYm92ZSBwYXJhbWV0
ZXJzIGFyZSBzZXQgYmVmb3JlIHVwZGF0ZSAqLworCXN0YXRlLT5wZW5kaW5nX2NvbmZpZyA9IHRy
dWU7Cit9CisKK2ludCBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2Rldmlj
ZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpw
cml2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9
IHRvX210a19jcnRjKHByaXYtPmNydGNbcGlwZV0pOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92
bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKKworCW10a19kZHBfY29tcF9lbmFibGVfdmJsYW5r
KG92bCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtdGtfZHJtX2NydGNfZGlzYWJsZV92Ymxh
bmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJc3RydWN0
IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG10a19k
cm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0Yyhwcml2LT5jcnRjW3BpcGVdKTsKKwlzdHJ1
Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisKKwltdGtfZGRw
X2NvbXBfZGlzYWJsZV92Ymxhbmsob3ZsKTsKK30KKworc3RhdGljIGludCBtdGtfY3J0Y19kZHBf
Y2xrX2VuYWJsZShzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlpbnQgcmV0Owor
CWludCBpOworCisJRFJNX0RFQlVHX0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlmb3IgKGkg
PSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspIHsKKwkJcmV0ID0gY2xrX2VuYWJs
ZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9FUlJP
UigiRmFpbGVkIHRvIGVuYWJsZSBjbG9jayAlZDogJWRcbiIsIGksIHJldCk7CisJCQlnb3RvIGVy
cjsKKwkJfQorCX0KKworCXJldHVybiAwOworZXJyOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJY2xr
X2Rpc2FibGUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCXJldHVybiByZXQ7Cit9CisK
K3N0YXRpYyB2b2lkIG10a19jcnRjX2RkcF9jbGtfZGlzYWJsZShzdHJ1Y3QgbXRrX2RybV9jcnRj
ICptdGtfY3J0YykKK3sKKwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1
bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQlj
bGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7Cit9CisKK3N0YXRpYyBpbnQg
bXRrX2NydGNfZGRwX2h3X2luaXQoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJ
c3RydWN0IGRybV9jcnRjICpjcnRjID0gJm10a19jcnRjLT5iYXNlOworCXVuc2lnbmVkIGludCB3
aWR0aCwgaGVpZ2h0LCB2cmVmcmVzaDsKKwlpbnQgcmV0OworCWludCBpOworCisJRFJNX0RFQlVH
X0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlpZiAoV0FSTl9PTighY3J0Yy0+c3RhdGUpKQor
CQlyZXR1cm4gLUVJTlZBTDsKKworCXdpZHRoID0gY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUu
aGRpc3BsYXk7CisJaGVpZ2h0ID0gY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUudmRpc3BsYXk7
CisJdnJlZnJlc2ggPSBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS52cmVmcmVzaDsKKworCXJl
dCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoY3J0Yy0+ZGV2LT5kZXYpOworCWlmIChyZXQgPCAwKSB7
CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBwb3dlciBkb21haW46ICVkXG4iLCByZXQp
OworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG10a19kaXNwX211dGV4X3ByZXBhcmUobXRr
X2NydGMtPm11dGV4KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBl
bmFibGUgbXV0ZXggY2xvY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9wbV9ydW50aW1lX3B1
dDsKKwl9CisKKwlyZXQgPSBtdGtfY3J0Y19kZHBfY2xrX2VuYWJsZShtdGtfY3J0Yyk7CisJaWYg
KHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNvbXBvbmVudCBjbG9j
a3M6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9tdXRleF91bnByZXBhcmU7CisJfQorCisJRFJN
X0RFQlVHX0RSSVZFUigibWVkaWF0ZWtfZGRwX2RkcF9wYXRoX3NldHVwXG4iKTsKKwlmb3IgKGkg
PSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yIC0gMTsgaSsrKSB7CisJCW10a19kZHBfYWRk
X2NvbXBfdG9fcGF0aChtdGtfY3J0Yy0+Y29uZmlnX3JlZ3MsCisJCQkJCSBtdGtfY3J0Yy0+ZGRw
X2NvbXBbaV0tPmlkLAorCQkJCQkgbXRrX2NydGMtPmRkcF9jb21wW2kgKyAxXS0+aWQpOworCQlt
dGtfZGlzcF9tdXRleF9hZGRfY29tcChtdGtfY3J0Yy0+bXV0ZXgsCisJCQkJCW10a19jcnRjLT5k
ZHBfY29tcFtpXS0+aWQpOworCX0KKwltdGtfZGlzcF9tdXRleF9hZGRfY29tcChtdGtfY3J0Yy0+
bXV0ZXgsIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCW10a19kaXNwX211dGV4X2VuYWJs
ZShtdGtfY3J0Yy0+bXV0ZXgpOworCisJRFJNX0RFQlVHX0RSSVZFUigiZGRwX2Rpc3BfcGF0aF9w
b3dlcl9vbiAlZHglZFxuIiwgd2lkdGgsIGhlaWdodCk7CisJZm9yIChpID0gMDsgaSA8IG10a19j
cnRjLT5kZHBfY29tcF9ucjsgaSsrKSB7CisJCXN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAgPSBt
dGtfY3J0Yy0+ZGRwX2NvbXBbaV07CisKKwkJbXRrX2RkcF9jb21wX2NvbmZpZyhjb21wLCB3aWR0
aCwgaGVpZ2h0LCB2cmVmcmVzaCk7CisJCW10a19kZHBfY29tcF9zdGFydChjb21wKTsKKwl9CisK
KwlyZXR1cm4gMDsKKworZXJyX211dGV4X3VucHJlcGFyZToKKwltdGtfZGlzcF9tdXRleF91bnBy
ZXBhcmUobXRrX2NydGMtPm11dGV4KTsKK2Vycl9wbV9ydW50aW1lX3B1dDoKKwlwbV9ydW50aW1l
X3B1dChjcnRjLT5kZXYtPmRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRr
X2NydGNfZGRwX2h3X2Zpbmkoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJc3Ry
dWN0IGRybV9kZXZpY2UgKmRybSA9IG10a19jcnRjLT5iYXNlLmRldjsKKwlpbnQgaTsKKworCURS
TV9ERUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19j
cnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQltdGtfZGRwX2NvbXBfc3RvcChtdGtfY3J0Yy0+ZGRw
X2NvbXBbaV0pOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykK
KwkJbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAobXRrX2NydGMtPm11dGV4LAorCQkJCQkgICBt
dGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKKwltdGtfZGlzcF9tdXRleF9kaXNhYmxlKG10a19j
cnRjLT5tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9uciAtIDE7
IGkrKykgeworCQltdGtfZGRwX3JlbW92ZV9jb21wX2Zyb21fcGF0aChtdGtfY3J0Yy0+Y29uZmln
X3JlZ3MsCisJCQkJCSAgICAgIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQsCisJCQkJCSAgICAg
IG10a19jcnRjLT5kZHBfY29tcFtpICsgMV0tPmlkKTsKKwkJbXRrX2Rpc3BfbXV0ZXhfcmVtb3Zl
X2NvbXAobXRrX2NydGMtPm11dGV4LAorCQkJCQkgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlk
KTsKKwl9CisJbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAobXRrX2NydGMtPm11dGV4LCBtdGtf
Y3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKKwltdGtfY3J0Y19kZHBfY2xrX2Rpc2FibGUobXRrX2Ny
dGMpOworCW10a19kaXNwX211dGV4X3VucHJlcGFyZShtdGtfY3J0Yy0+bXV0ZXgpOworCisJcG1f
cnVudGltZV9wdXQoZHJtLT5kZXYpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZW5h
YmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtf
Y3J0YyA9IHRvX210a19jcnRjKGNydGMpOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9IG10
a19jcnRjLT5kZHBfY29tcFswXTsKKwlpbnQgcmV0OworCisJRFJNX0RFQlVHX0RSSVZFUigiJXMg
JWRcbiIsIF9fZnVuY19fLCBjcnRjLT5iYXNlLmlkKTsKKworCXJldCA9IG10a19zbWlfbGFyYl9n
ZXQob3ZsLT5sYXJiX2Rldik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBn
ZXQgbGFyYjogJWRcbiIsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBtdGtfY3J0Y19k
ZHBfaHdfaW5pdChtdGtfY3J0Yyk7CisJaWYgKHJldCkgeworCQltdGtfc21pX2xhcmJfcHV0KG92
bC0+bGFyYl9kZXYpOworCQlyZXR1cm47CisJfQorCisJZHJtX2NydGNfdmJsYW5rX29uKGNydGMp
OworCW10a19jcnRjLT5lbmFibGVkID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9j
cnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2Ny
dGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJc3RydWN0IG10a19kZHBfY29tcCAq
b3ZsID0gbXRrX2NydGMtPmRkcF9jb21wWzBdOworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZF
UigiJXMgJWRcbiIsIF9fZnVuY19fLCBjcnRjLT5iYXNlLmlkKTsKKwlpZiAoV0FSTl9PTighbXRr
X2NydGMtPmVuYWJsZWQpKQorCQlyZXR1cm47CisKKwkvKiBTZXQgYWxsIHBlbmRpbmcgcGxhbmUg
c3RhdGUgdG8gZGlzYWJsZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgT1ZMX0xBWUVSX05SOyBpKysp
IHsKKwkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX2NydGMtPnBsYW5lc1tpXS5iYXNl
OworCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCQlwbGFuZV9zdGF0
ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCQlwbGFuZV9zdGF0ZS0+cGVu
ZGluZy5lbmFibGUgPSBmYWxzZTsKKwkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnID0gdHJ1
ZTsKKwl9CisJbXRrX2NydGMtPnBlbmRpbmdfcGxhbmVzID0gdHJ1ZTsKKworCS8qIFdhaXQgZm9y
IHBsYW5lcyB0byBiZSBkaXNhYmxlZCAqLworCWRybV9jcnRjX3dhaXRfb25lX3ZibGFuayhjcnRj
KTsKKworCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7CisJbXRrX2NydGNfZGRwX2h3X2Zpbmko
bXRrX2NydGMpOworCW10a19zbWlfbGFyYl9wdXQob3ZsLT5sYXJiX2Rldik7CisKKwltdGtfY3J0
Yy0+ZG9fZmx1c2ggPSBmYWxzZTsKKwltdGtfY3J0Yy0+ZW5hYmxlZCA9IGZhbHNlOworfQorCitz
dGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0
YywKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQorewor
CXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRjLT5z
dGF0ZSk7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRj
KTsKKworCWlmIChtdGtfY3J0Yy0+ZXZlbnQgJiYgc3RhdGUtPmJhc2UuZXZlbnQpCisJCURSTV9F
UlJPUigibmV3IGV2ZW50IHdoaWxlIHRoZXJlIGlzIHN0aWxsIGEgcGVuZGluZyBldmVudFxuIik7
CisKKwlpZiAoc3RhdGUtPmJhc2UuZXZlbnQpIHsKKwkJc3RhdGUtPmJhc2UuZXZlbnQtPnBpcGUg
PSBkcm1fY3J0Y19pbmRleChjcnRjKTsKKwkJV0FSTl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0KGNy
dGMpICE9IDApOworCQltdGtfY3J0Yy0+ZXZlbnQgPSBzdGF0ZS0+YmFzZS5ldmVudDsKKwkJc3Rh
dGUtPmJhc2UuZXZlbnQgPSBOVUxMOworCX0KK30KKwordm9pZCBtdGtfZHJtX2NydGNfY2hlY2tf
Zmx1c2goc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10
a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJaW50IGk7CisKKwlpZiAobXRrX2NydGMtPmRv
X2ZsdXNoKSB7CisJCWlmIChtdGtfY3J0Yy0+ZXZlbnQpCisJCQltdGtfY3J0Yy0+cGVuZGluZ19u
ZWVkc192YmxhbmsgPSB0cnVlOworCQlmb3IgKGkgPSAwOyBpIDwgT1ZMX0xBWUVSX05SOyBpKysp
IHsKKwkJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFz
ZTsKKwkJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJCQlwbGFuZV9z
dGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCQkJaWYgKHBsYW5lX3N0
YXRlLT5wZW5kaW5nLmRpcnR5KSB7CisJCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnID0g
dHJ1ZTsKKwkJCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IGZhbHNlOworCQkJfQorCQl9
CisJCW10a19jcnRjLT5wZW5kaW5nX3BsYW5lcyA9IHRydWU7CisJCW10a19jcnRjLT5kb19mbHVz
aCA9IGZhbHNlOworCX0KK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2F0b21pY19mbHVz
aChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRl
ICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRv
X210a19jcnRjKGNydGMpOworCisJbXRrX2NydGMtPmRvX2ZsdXNoID0gdHJ1ZTsKKwltdGtfZHJt
X2NydGNfY2hlY2tfZmx1c2goY3J0Yyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Ny
dGNfZnVuY3MgbXRrX2NydGNfZnVuY3MgPSB7CisJLnNldF9jb25maWcJCT0gZHJtX2F0b21pY19o
ZWxwZXJfc2V0X2NvbmZpZywKKwkucGFnZV9mbGlwCQk9IGRybV9hdG9taWNfaGVscGVyX3BhZ2Vf
ZmxpcCwKKwkuZGVzdHJveQkJPSBtdGtfZHJtX2NydGNfZGVzdHJveSwKKwkucmVzZXQJCQk9IG10
a19kcm1fY3J0Y19yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZQk9IG10a19kcm1fY3J0
Y19kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlCT0gbXRrX2RybV9jcnRj
X2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBl
cl9mdW5jcyBtdGtfY3J0Y19oZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVfZml4dXAJPSBtdGtfZHJt
X2NydGNfbW9kZV9maXh1cCwKKwkubW9kZV9zZXRfbm9mYgk9IG10a19kcm1fY3J0Y19tb2RlX3Nl
dF9ub2ZiLAorCS5lbmFibGUJCT0gbXRrX2RybV9jcnRjX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG10
a19kcm1fY3J0Y19kaXNhYmxlLAorCS5hdG9taWNfYmVnaW4JPSBtdGtfZHJtX2NydGNfYXRvbWlj
X2JlZ2luLAorCS5hdG9taWNfZmx1c2gJPSBtdGtfZHJtX2NydGNfYXRvbWljX2ZsdXNoLAorfTsK
Kworc3RhdGljIGludCBtdGtfZHJtX2NydGNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAor
CQlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0Yywgc3RydWN0IGRybV9wbGFuZSAqcHJpbWFy
eSwKKwkJc3RydWN0IGRybV9wbGFuZSAqY3Vyc29yLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlp
bnQgcmV0OworCisJcmV0ID0gZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhkcm0sICZtdGtfY3J0
Yy0+YmFzZSwgcHJpbWFyeSwgY3Vyc29yLAorCQkJJm10a19jcnRjX2Z1bmNzKTsKKwlpZiAocmV0
KQorCQlnb3RvIGVycl9jbGVhbnVwX2NydGM7CisKKwlkcm1fY3J0Y19oZWxwZXJfYWRkKCZtdGtf
Y3J0Yy0+YmFzZSwgJm10a19jcnRjX2hlbHBlcl9mdW5jcyk7CisKKwlyZXR1cm4gMDsKKworZXJy
X2NsZWFudXBfY3J0YzoKKwlkcm1fY3J0Y19jbGVhbnVwKCZtdGtfY3J0Yy0+YmFzZSk7CisJcmV0
dXJuIHJldDsKK30KKwordm9pZCBtdGtfY3J0Y19kZHBfaXJxKHN0cnVjdCBkcm1fZGV2aWNlICpk
cm1fZGV2LCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwpCit7CisJc3RydWN0IG10a19kcm1fcHJp
dmF0ZSAqcHJpdiA9IGRybV9kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBtdGtfZHJtX2NydGMg
Km10a19jcnRjOworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGU7CisJdW5zaWduZWQgaW50
IGk7CisKKwltdGtfY3J0YyA9IG10a19jcnRjX2J5X3NyY19jb21wKHByaXYsIG92bCk7CisJaWYg
KFdBUk5fT04oIW10a19jcnRjKSkKKwkJcmV0dXJuOworCisJc3RhdGUgPSB0b19tdGtfY3J0Y19z
dGF0ZShtdGtfY3J0Yy0+YmFzZS5zdGF0ZSk7CisKKwkvKgorCSAqIFRPRE86IGluc3RlYWQgb2Yg
dXBkYXRpbmcgdGhlIHJlZ2lzdGVycyBoZXJlLCB3ZSBzaG91bGQgcHJlcGFyZQorCSAqIHdvcmtp
bmcgcmVnaXN0ZXJzIGluIGF0b21pY19jb21taXQgYW5kIGxldCB0aGUgaGFyZHdhcmUgY29tbWFu
ZAorCSAqIHF1ZXVlIHVwZGF0ZSBtb2R1bGUgcmVnaXN0ZXJzIG9uIHZibGFuay4KKwkgKi8KKwlp
ZiAoc3RhdGUtPnBlbmRpbmdfY29uZmlnKSB7CisJCW10a19kZHBfY29tcF9jb25maWcob3ZsLCBz
dGF0ZS0+cGVuZGluZ193aWR0aCwKKwkJCQkgICAgc3RhdGUtPnBlbmRpbmdfaGVpZ2h0LAorCQkJ
CSAgICBzdGF0ZS0+cGVuZGluZ192cmVmcmVzaCk7CisKKwkJc3RhdGUtPnBlbmRpbmdfY29uZmln
ID0gZmFsc2U7CisJfQorCisJaWYgKG10a19jcnRjLT5wZW5kaW5nX3BsYW5lcykgeworCQlmb3Ig
KGkgPSAwOyBpIDwgT1ZMX0xBWUVSX05SOyBpKyspIHsKKwkJCXN0cnVjdCBkcm1fcGxhbmUgKnBs
YW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFzZTsKKwkJCXN0cnVjdCBtdGtfcGxhbmVfc3Rh
dGUgKnBsYW5lX3N0YXRlOworCisJCQlwbGFuZV9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShw
bGFuZS0+c3RhdGUpOworCisJCQlpZiAocGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnKSB7CisJ
CQkJaWYgKCFwbGFuZV9zdGF0ZS0+cGVuZGluZy5lbmFibGUpCisJCQkJCW10a19kZHBfY29tcF9s
YXllcl9vZmYob3ZsLCBpKTsKKworCQkJCW10a19kZHBfY29tcF9sYXllcl9jb25maWcob3ZsLCBp
LCBwbGFuZV9zdGF0ZSk7CisKKwkJCQlpZiAocGxhbmVfc3RhdGUtPnBlbmRpbmcuZW5hYmxlKQor
CQkJCQltdGtfZGRwX2NvbXBfbGF5ZXJfb24ob3ZsLCBpKTsKKworCQkJCXBsYW5lX3N0YXRlLT5w
ZW5kaW5nLmNvbmZpZyA9IGZhbHNlOworCQkJfQorCQl9CisJCW10a19jcnRjLT5wZW5kaW5nX3Bs
YW5lcyA9IGZhbHNlOworCX0KKworCW10a19kcm1fZmluaXNoX3BhZ2VfZmxpcChtdGtfY3J0Yyk7
Cit9CisKK2ludCBtdGtfZHJtX2NydGNfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2
LAorCQkJY29uc3QgZW51bSBtdGtfZGRwX2NvbXBfaWQgKnBhdGgsIHVuc2lnbmVkIGludCBwYXRo
X2xlbikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZHJtX2Rldi0+ZGV2X3By
aXZhdGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHJtX2Rldi0+ZGV2OworCXN0cnVjdCBtdGtf
ZHJtX2NydGMgKm10a19jcnRjOworCWVudW0gZHJtX3BsYW5lX3R5cGUgdHlwZTsKKwl1bnNpZ25l
ZCBpbnQgenBvczsKKwlpbnQgcGlwZSA9IHByaXYtPm51bV9waXBlczsKKwlpbnQgcmV0OworCWlu
dCBpOworCisJbXRrX2NydGMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm10a19jcnRjKSwg
R0ZQX0tFUk5FTCk7CisJaWYgKCFtdGtfY3J0YykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdGtf
Y3J0Yy0+Y29uZmlnX3JlZ3MgPSBwcml2LT5jb25maWdfcmVnczsKKwltdGtfY3J0Yy0+ZGRwX2Nv
bXBfbnIgPSBwYXRoX2xlbjsKKwltdGtfY3J0Yy0+ZGRwX2NvbXAgPSBkZXZtX2ttYWxsb2NfYXJy
YXkoZGV2LCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnIsCisJCQkJCQlzaXplb2YoKm10a19jcnRjLT5k
ZHBfY29tcCksCisJCQkJCQlHRlBfS0VSTkVMKTsKKworCW10a19jcnRjLT5tdXRleCA9IG10a19k
aXNwX211dGV4X2dldChwcml2LT5tdXRleF9kZXYsIHBpcGUpOworCWlmIChJU19FUlIobXRrX2Ny
dGMtPm11dGV4KSkgeworCQlyZXQgPSBQVFJfRVJSKG10a19jcnRjLT5tdXRleCk7CisJCWRldl9l
cnIoZGV2LCAiRmFpbGVkIHRvIGdldCBtdXRleDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7
CisJfQorCisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKSB7CisJ
CWVudW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQgPSBwYXRoW2ldOworCQlzdHJ1Y3QgbXRrX2Rk
cF9jb21wICpjb21wOworCisJCWNvbXAgPSBwcml2LT5kZHBfY29tcFtjb21wX2lkXTsKKwkJaWYg
KCFjb21wKSB7CisJCQlkZXZfZXJyKGRldiwgIkNvbXBvbmVudCAlcyBub3QgaW5pdGlhbGl6ZWRc
biIsCisJCQkJcHJpdi0+Y29tcF9ub2RlW2NvbXBfaWRdLT5mdWxsX25hbWUpOworCQkJcmV0ID0g
LUVOT0RFVjsKKwkJCWdvdG8gdW5wcmVwYXJlOworCQl9CisKKwkJcmV0ID0gY2xrX3ByZXBhcmUo
Y29tcC0+Y2xrKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsCisJCQkJIkZhaWxlZCB0
byBwcmVwYXJlIGNsb2NrIGZvciBjb21wb25lbnQgJXM6ICVkXG4iLAorCQkJCXByaXYtPmNvbXBf
bm9kZVtjb21wX2lkXS0+ZnVsbF9uYW1lLCByZXQpOworCQkJZ290byB1bnByZXBhcmU7CisJCX0K
KworCQltdGtfY3J0Yy0+ZGRwX2NvbXBbaV0gPSBjb21wOworCX0KKworCWZvciAoenBvcyA9IDA7
IHpwb3MgPCBPVkxfTEFZRVJfTlI7IHpwb3MrKykgeworCQl0eXBlID0gKHpwb3MgPT0gMCkgPyBE
Uk1fUExBTkVfVFlQRV9QUklNQVJZIDoKKwkJCQkoenBvcyA9PSAxKSA/IERSTV9QTEFORV9UWVBF
X0NVUlNPUiA6CisJCQkJCQlEUk1fUExBTkVfVFlQRV9PVkVSTEFZOworCQlyZXQgPSBtdGtfcGxh
bmVfaW5pdChkcm1fZGV2LCAmbXRrX2NydGMtPnBsYW5lc1t6cG9zXSwKKwkJCQkgICAgIEJJVChw
aXBlKSwgdHlwZSwgenBvcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIHVucHJlcGFyZTsKKwl9CisK
KwlyZXQgPSBtdGtfZHJtX2NydGNfaW5pdChkcm1fZGV2LCBtdGtfY3J0YywgJm10a19jcnRjLT5w
bGFuZXNbMF0uYmFzZSwKKwkJCQkmbXRrX2NydGMtPnBsYW5lc1sxXS5iYXNlLCBwaXBlKTsKKwlp
ZiAocmV0IDwgMCkKKwkJZ290byB1bnByZXBhcmU7CisKKwlwcml2LT5jcnRjW3BpcGVdID0gJm10
a19jcnRjLT5iYXNlOworCXByaXYtPm51bV9waXBlcysrOworCisJcmV0dXJuIDA7CisKK3VucHJl
cGFyZToKKwl3aGlsZSAoLS1pID49IDApCisJCWNsa191bnByZXBhcmUobXRrX2NydGMtPmRkcF9j
b21wW2ldLT5jbGspOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfZHJtX2NydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGViYTNj
Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0
Yy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsg
SW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
LworCisjaWZuZGVmIE1US19EUk1fQ1JUQ19ICisjZGVmaW5lIE1US19EUk1fQ1JUQ19ICisKKyNp
bmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisj
aW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCisjZGVmaW5lIE9WTF9MQVlFUl9OUgk0CisKK2lu
dCBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNp
Z25lZCBpbnQgcGlwZSk7Cit2b2lkIG10a19kcm1fY3J0Y19kaXNhYmxlX3ZibGFuayhzdHJ1Y3Qg
ZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSk7Cit2b2lkIG10a19kcm1fY3J0Y19j
aGVja19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwordm9pZCBtdGtfZHJtX2NydGNfY29t
bWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2b2lkIG10a19jcnRjX2RkcF9pcnEoc3RydWN0
IGRybV9kZXZpY2UgKmRybV9kZXYsIHN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCk7CitpbnQgbXRr
X2RybV9jcnRjX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiwKKwkJCWNvbnN0IGVu
dW0gbXRrX2RkcF9jb21wX2lkICpwYXRoLAorCQkJdW5zaWduZWQgaW50IHBhdGhfbGVuKTsKKwor
I2VuZGlmIC8qIE1US19EUk1fQ1JUQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9kZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2RkcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NTg0ZTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYwpAQCAt
MCwwICsxLDM1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg
KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNp
bmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRl
IDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4K
KyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworI2luY2x1ZGUgIm10a19kcm1fZGRwLmgiCisj
aW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19E
SVNQX09WTDBfTU9VVF9FTgkweDA0MAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwx
X01PVVRfRU4JMHgwNDQKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfT0RfTU9VVF9FTgkJ
MHgwNDgKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfR0FNTUFfTU9VVF9FTgkweDA0Ywor
I2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9VRk9FX01PVVRfRU4JMHgwNTAKKyNkZWZpbmUg
RElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IwX1NFTF9JTgkweDA4NAorI2RlZmluZSBESVNQX1JF
R19DT05GSUdfRElTUF9DT0xPUjFfU0VMX0lOCTB4MDg4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJ
R19EUElfU0VMX0lOCQkweDBhYworI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9SRE1BMV9N
T1VUX0VOCTB4MGM4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19NTVNZU19DR19DT04wCQkweDEw
MAorCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX0VOKG4pCSgweDIwICsgMHgyMCAqIChuKSkKKyNk
ZWZpbmUgRElTUF9SRUdfTVVURVhfUlNUKG4pCSgweDI4ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUg
RElTUF9SRUdfTVVURVhfTU9EKG4pCSgweDJjICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9S
RUdfTVVURVhfU09GKG4pCSgweDMwICsgMHgyMCAqIChuKSkKKworI2RlZmluZSBNVVRFWF9NT0Rf
RElTUF9PVkwwCQlCSVQoMTEpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX09WTDEJCUJJVCgxMikK
KyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUkRNQTAJCUJJVCgxMykKKyNkZWZpbmUgTVVURVhfTU9E
X0RJU1BfUkRNQTEJCUJJVCgxNCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUkRNQTIJCUJJVCgx
NSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfV0RNQTAJCUJJVCgxNikKKyNkZWZpbmUgTVVURVhf
TU9EX0RJU1BfV0RNQTEJCUJJVCgxNykKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfQ09MT1IwCQlC
SVQoMTgpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX0NPTE9SMQkJQklUKDE5KQorI2RlZmluZSBN
VVRFWF9NT0RfRElTUF9BQUwJCUJJVCgyMCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfR0FNTUEJ
CUJJVCgyMSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfVUZPRQkJQklUKDIyKQorI2RlZmluZSBN
VVRFWF9NT0RfRElTUF9QV00wCQlCSVQoMjMpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1BXTTEJ
CUJJVCgyNCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfT0QJCUJJVCgyNSkKKworI2RlZmluZSBN
VVRFWF9TT0ZfU0lOR0xFX01PREUJCTAKKyNkZWZpbmUgTVVURVhfU09GX0RTSTAJCQkxCisjZGVm
aW5lIE1VVEVYX1NPRl9EU0kxCQkJMgorI2RlZmluZSBNVVRFWF9TT0ZfRFBJMAkJCTMKKworI2Rl
ZmluZSBPVkwwX01PVVRfRU5fQ09MT1IwCQkweDEKKyNkZWZpbmUgT0RfTU9VVF9FTl9SRE1BMAkJ
MHgxCisjZGVmaW5lIFVGT0VfTU9VVF9FTl9EU0kwCQkweDEKKyNkZWZpbmUgQ09MT1IwX1NFTF9J
Tl9PVkwwCQkweDEKKyNkZWZpbmUgT1ZMMV9NT1VUX0VOX0NPTE9SMQkJMHgxCisjZGVmaW5lIEdB
TU1BX01PVVRfRU5fUkRNQTEJCTB4MQorI2RlZmluZSBSRE1BMV9NT1VUX0RQSTAJCQkweDIKKyNk
ZWZpbmUgRFBJMF9TRUxfSU5fUkRNQTEJCTB4MQorI2RlZmluZSBDT0xPUjFfU0VMX0lOX09WTDEJ
CTB4MQorCitzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggeworCWludCBpZDsKKwlib29sIGNsYWltZWQ7
Cit9OworCitzdHJ1Y3QgbXRrX2RkcCB7CisJc3RydWN0IGRldmljZQkJCSpkZXY7CisJc3RydWN0
IGNsawkJCSpjbGs7CisJdm9pZCBfX2lvbWVtCQkJKnJlZ3M7CisJc3RydWN0IG10a19kaXNwX211
dGV4CQltdXRleFsxMF07Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG11dGV4X21v
ZFtERFBfQ09NUE9ORU5UX0lEX01BWF0gPSB7CisJW0REUF9DT01QT05FTlRfQUFMXSA9IE1VVEVY
X01PRF9ESVNQX0FBTCwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjBdID0gTVVURVhfTU9EX0RJU1Bf
Q09MT1IwLAorCVtERFBfQ09NUE9ORU5UX0NPTE9SMV0gPSBNVVRFWF9NT0RfRElTUF9DT0xPUjEs
CisJW0REUF9DT01QT05FTlRfR0FNTUFdID0gTVVURVhfTU9EX0RJU1BfR0FNTUEsCisJW0REUF9D
T01QT05FTlRfT0RdID0gTVVURVhfTU9EX0RJU1BfT0QsCisJW0REUF9DT01QT05FTlRfT1ZMMF0g
PSBNVVRFWF9NT0RfRElTUF9PVkwwLAorCVtERFBfQ09NUE9ORU5UX09WTDFdID0gTVVURVhfTU9E
X0RJU1BfT1ZMMSwKKwlbRERQX0NPTVBPTkVOVF9QV00wXSA9IE1VVEVYX01PRF9ESVNQX1BXTTAs
CisJW0REUF9DT01QT05FTlRfUFdNMV0gPSBNVVRFWF9NT0RfRElTUF9QV00xLAorCVtERFBfQ09N
UE9ORU5UX1JETUEwXSA9IE1VVEVYX01PRF9ESVNQX1JETUEwLAorCVtERFBfQ09NUE9ORU5UX1JE
TUExXSA9IE1VVEVYX01PRF9ESVNQX1JETUExLAorCVtERFBfQ09NUE9ORU5UX1JETUEyXSA9IE1V
VEVYX01PRF9ESVNQX1JETUEyLAorCVtERFBfQ09NUE9ORU5UX1VGT0VdID0gTVVURVhfTU9EX0RJ
U1BfVUZPRSwKKwlbRERQX0NPTVBPTkVOVF9XRE1BMF0gPSBNVVRFWF9NT0RfRElTUF9XRE1BMCwK
KwlbRERQX0NPTVBPTkVOVF9XRE1BMV0gPSBNVVRFWF9NT0RfRElTUF9XRE1BMSwKK307CisKK3N0
YXRpYyB1bnNpZ25lZCBpbnQgbXRrX2RkcF9tb3V0X2VuKGVudW0gbXRrX2RkcF9jb21wX2lkIGN1
ciwKKwkJCQkgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCwKKwkJCQkgICAgdW5zaWduZWQg
aW50ICphZGRyKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCWlmIChjdXIgPT0gRERQX0NP
TVBPTkVOVF9PVkwwICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjApIHsKKwkJKmFkZHIg
PSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwwX01PVVRfRU47CisJCXZhbHVlID0gT1ZMMF9NT1VU
X0VOX0NPTE9SMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09EICYmIG5leHQg
PT0gRERQX0NPTVBPTkVOVF9SRE1BMCkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQ
X09EX01PVVRfRU47CisJCXZhbHVlID0gT0RfTU9VVF9FTl9SRE1BMDsKKwl9IGVsc2UgaWYgKGN1
ciA9PSBERFBfQ09NUE9ORU5UX1VGT0UgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RTSTApIHsK
KwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9VRk9FX01PVVRfRU47CisJCXZhbHVlID0g
VUZPRV9NT1VUX0VOX0RTSTA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwx
ICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19D
T05GSUdfRElTUF9PVkwxX01PVVRfRU47CisJCXZhbHVlID0gT1ZMMV9NT1VUX0VOX0NPTE9SMTsK
Kwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX0dBTU1BICYmIG5leHQgPT0gRERQX0NP
TVBPTkVOVF9SRE1BMSkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0dBTU1BX01P
VVRfRU47CisJCXZhbHVlID0gR0FNTUFfTU9VVF9FTl9SRE1BMTsKKwl9IGVsc2UgaWYgKGN1ciA9
PSBERFBfQ09NUE9ORU5UX1JETUExICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EUEkwKSB7CisJ
CSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfUkRNQTFfTU9VVF9FTjsKKwkJdmFsdWUgPSBS
RE1BMV9NT1VUX0RQSTA7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSAwOworCX0KKworCXJldHVybiB2
YWx1ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBtdGtfZGRwX3NlbF9pbihlbnVtIG10a19k
ZHBfY29tcF9pZCBjdXIsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCwKKwkJCQkg
ICB1bnNpZ25lZCBpbnQgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJaWYgKGN1
ciA9PSBERFBfQ09NUE9ORU5UX09WTDAgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0NPTE9SMCkg
eworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMF9TRUxfSU47CisJCXZhbHVl
ID0gQ09MT1IwX1NFTF9JTl9PVkwwOworCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRf
UkRNQTEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RQSTApIHsKKwkJKmFkZHIgPSBESVNQX1JF
R19DT05GSUdfRFBJX1NFTF9JTjsKKwkJdmFsdWUgPSBEUEkwX1NFTF9JTl9SRE1BMTsKKwl9IGVs
c2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09WTDEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5U
X0NPTE9SMSkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMV9TRUxfSU47
CisJCXZhbHVlID0gQ09MT1IxX1NFTF9JTl9PVkwxOworCX0gZWxzZSB7CisJCXZhbHVlID0gMDsK
Kwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgbXRrX2RkcF9hZGRfY29tcF90b19wYXRo
KHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkgICAgICBlbnVtIG10a19kZHBfY29tcF9p
ZCBjdXIsCisJCQkgICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0KQoreworCXVuc2lnbmVk
IGludCBhZGRyLCB2YWx1ZSwgcmVnOworCisJdmFsdWUgPSBtdGtfZGRwX21vdXRfZW4oY3VyLCBu
ZXh0LCAmYWRkcik7CisJaWYgKHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmln
X3JlZ3MgKyBhZGRyKSB8IHZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdz
ICsgYWRkcik7CisJfQorCisJdmFsdWUgPSBtdGtfZGRwX3NlbF9pbihjdXIsIG5leHQsICZhZGRy
KTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFk
ZHIpIHwgdmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsK
Kwl9Cit9CisKK3ZvaWQgbXRrX2RkcF9yZW1vdmVfY29tcF9mcm9tX3BhdGgodm9pZCBfX2lvbWVt
ICpjb25maWdfcmVncywKKwkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkJICAg
ZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCkKK3sKKwl1bnNpZ25lZCBpbnQgYWRkciwgdmFsdWUs
IHJlZzsKKworCXZhbHVlID0gbXRrX2RkcF9tb3V0X2VuKGN1ciwgbmV4dCwgJmFkZHIpOworCWlm
ICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikgJiB+
dmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKKwl9CisK
Kwl2YWx1ZSA9IG10a19kZHBfc2VsX2luKGN1ciwgbmV4dCwgJmFkZHIpOworCWlmICh2YWx1ZSkg
eworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikgJiB+dmFsdWU7CisJ
CXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKKwl9Cit9CisKK3N0cnVj
dCBtdGtfZGlzcF9tdXRleCAqbXRrX2Rpc3BfbXV0ZXhfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwg
dW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBkZXZfZ2V0X2RydmRh
dGEoZGV2KTsKKworCWlmIChpZCA+PSAxMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJ
aWYgKGRkcC0+bXV0ZXhbaWRdLmNsYWltZWQpCisJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7CisK
KwlkZHAtPm11dGV4W2lkXS5jbGFpbWVkID0gdHJ1ZTsKKworCXJldHVybiAmZGRwLT5tdXRleFtp
ZF07Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcHV0KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAq
bXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3Ry
dWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRw
LT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCW11dGV4LT5jbGFpbWVkID0gZmFsc2U7
Cit9CisKK2ludCBtdGtfZGlzcF9tdXRleF9wcmVwYXJlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAq
bXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3Ry
dWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCXJldHVybiBjbGtfcHJl
cGFyZV9lbmFibGUoZGRwLT5jbGspOworfQorCit2b2lkIG10a19kaXNwX211dGV4X3VucHJlcGFy
ZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAg
PSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRl
eC0+aWRdKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGRwLT5jbGspOworfQorCit2b2lkIG10
a19kaXNwX211dGV4X2FkZF9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkg
ICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGlkKQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBj
b250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+
aWRdKTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+
aWRdICE9IG11dGV4KTsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIEREUF9DT01QT05FTlRfRFNJ
MDoKKwkJcmVnID0gTVVURVhfU09GX0RTSTA7CisJCWJyZWFrOworCWNhc2UgRERQX0NPTVBPTkVO
VF9EU0kxOgorCQlyZWcgPSBNVVRFWF9TT0ZfRFNJMDsKKwkJYnJlYWs7CisJY2FzZSBERFBfQ09N
UE9ORU5UX0RQSTA6CisJCXJlZyA9IE1VVEVYX1NPRl9EUEkwOworCQlicmVhazsKKwlkZWZhdWx0
OgorCQlyZWcgPSByZWFkbF9yZWxheGVkKGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRCht
dXRleC0+aWQpKTsKKwkJcmVnIHw9IG11dGV4X21vZFtpZF07CisJCXdyaXRlbF9yZWxheGVkKHJl
ZywgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOworCQlyZXR1cm47
CisJfQorCisJd3JpdGVsX3JlbGF4ZWQocmVnLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9T
T0YobXV0ZXgtPmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAoc3Ry
dWN0IG10a19kaXNwX211dGV4ICptdXRleCwKKwkJCQllbnVtIG10a19kZHBfY29tcF9pZCBpZCkK
K3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRr
X2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7CisJdW5zaWduZWQgaW50IHJlZzsKKwor
CVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwlzd2l0Y2ggKGlk
KSB7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RTSTA6CisJY2FzZSBERFBfQ09NUE9ORU5UX0RTSTE6
CisJY2FzZSBERFBfQ09NUE9ORU5UX0RQSTA6CisJCXdyaXRlbF9yZWxheGVkKE1VVEVYX1NPRl9T
SU5HTEVfTU9ERSwKKwkJCSAgICAgICBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9TT0YobXV0
ZXgtPmlkKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoZGRw
LT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOworCQlyZWcgJj0gfm11dGV4
X21vZFtpZF07CisJCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVU
RVhfTU9EKG11dGV4LT5pZCkpOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0
ZXhfZW5hYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19k
ZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11
dGV4W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11
dGV4KTsKKworCXdyaXRlbCgxLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9FTihtdXRleC0+
aWQpKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF9kaXNhYmxlKHN0cnVjdCBtdGtfZGlzcF9t
dXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRl
eCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCisJV0FSTl9P
TigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXdyaXRlbCgwLCBkZHAtPnJl
Z3MgKyBESVNQX1JFR19NVVRFWF9FTihtdXRleC0+aWQpKTsKK30KKworc3RhdGljIGludCBtdGtf
ZGRwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmlj
ZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwOworCXN0cnVjdCByZXNv
dXJjZSAqcmVnczsKKwlpbnQgaTsKKworCWRkcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq
ZGRwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZHApCisJCXJldHVybiAtRU5PTUVNOworCisJZm9y
IChpID0gMDsgaSA8IDEwOyBpKyspCisJCWRkcC0+bXV0ZXhbaV0uaWQgPSBpOworCisJZGRwLT5j
bGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRkcC0+Y2xrKSkgewor
CQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VS
UihkZHAtPmNsayk7CisJfQorCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJ
T1JFU09VUkNFX01FTSwgMCk7CisJZGRwLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRl
diwgcmVncyk7CisJaWYgKElTX0VSUihkZHAtPnJlZ3MpKSB7CisJCWRldl9lcnIoZGV2LCAiRmFp
bGVkIHRvIG1hcCBtdXRleCByZWdpc3RlcnNcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkZHAtPnJl
Z3MpOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRkcCk7CisKKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIGludCBtdGtfZGRwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl
ICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj
ZV9pZCBkZHBfZHJpdmVyX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRl
ayxtdDgxNzMtZGlzcC1tdXRleCIgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9m
LCBkZHBfZHJpdmVyX2R0X21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIg
bXRrX2RkcF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10a19kZHBfcHJvYmUsCisJLnJlbW92ZQkJ
PSBtdGtfZGRwX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibWVkaWF0ZWstZGRw
IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IGRkcF9kcml2
ZXJfZHRfbWF0Y2gsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobXRrX2RkcF9k
cml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRw
LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmMxMTc1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAq
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy
c2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K
KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9ERFBfSAor
I2RlZmluZSBNVEtfRFJNX0REUF9ICisKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisK
K3N0cnVjdCByZWdtYXA7CitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IG10a19kaXNwX211dGV4Owor
Cit2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdz
LAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJICAgICAgZW51bSBtdGtf
ZGRwX2NvbXBfaWQgbmV4dCk7Cit2b2lkIG10a19kZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKHZv
aWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3Vy
LAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpOworCitzdHJ1Y3QgbXRrX2Rpc3Bf
bXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGlu
dCBpZCk7CitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXgg
Km11dGV4KTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfYWRkX2NvbXAoc3RydWN0IG10a19kaXNwX211
dGV4ICptdXRleCwKKwkJCSAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpOwordm9pZCBtdGtf
ZGlzcF9tdXRleF9lbmFibGUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10
a19kaXNwX211dGV4X2Rpc2FibGUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cit2b2lk
IG10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgs
CisJCQkJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpOwordm9pZCBtdGtfZGlzcF9tdXRleF91bnBy
ZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4
X3B1dChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KTsKKworI2VuZGlmIC8qIE1US19EUk1f
RERQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rk
cF9jb21wLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOTZmNmIKLS0tIC9kZXYvbnVsbAor
KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jCkBAIC0wLDAg
KzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqIEF1
dGhvcnM6CisgKglZVCBTaGVuIDx5dC5zaGVuQG1lZGlhdGVrLmNvbT4KKyAqCUNLIEh1IDxjay5o
dUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dy
YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9v
Zi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9p
cnEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bs
YXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSAibXRrX2Ry
bV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCisjaW5jbHVkZSAibXRrX2RybV9k
ZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRQkJMHgwMDAwCisj
ZGVmaW5lIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUwkJMHgwMDA0CisjZGVmaW5lIERJU1BfUkVH
X1JETUFfR0xPQkFMX0NPTgkJMHgwMDEwCisjZGVmaW5lIERJU1BfUkVHX1JETUFfU0laRV9DT05f
MAkJMHgwMDE0CisjZGVmaW5lIERJU1BfUkVHX1JETUFfU0laRV9DT05fMQkJMHgwMDE4CisjZGVm
aW5lIERJU1BfUkVHX1JETUFfRklGT19DT04JCQkweDAwNDAKKyNkZWZpbmUgUkRNQV9GSUZPX1VO
REVSRkxPV19FTgkJCQlCSVQoMzEpCisjZGVmaW5lIFJETUFfRklGT19QU0VVRE9fU0laRShieXRl
cykJCQkoKChieXRlcykgLyAxNikgPDwgMTYpCisjZGVmaW5lIFJETUFfT1VUUFVUX1ZBTElEX0ZJ
Rk9fVEhSRVNIT0xEKGJ5dGVzKQkJKChieXRlcykgLyAxNikKKworI2RlZmluZSBESVNQX09EX0VO
CQkJCTB4MDAwMAorI2RlZmluZSBESVNQX09EX0lOVEVOCQkJCTB4MDAwOAorI2RlZmluZSBESVNQ
X09EX0lOVFNUQQkJCQkweDAwMGMKKyNkZWZpbmUgRElTUF9PRF9DRkcJCQkJMHgwMDIwCisjZGVm
aW5lIERJU1BfT0RfU0laRQkJCQkweDAwMzAKKworI2RlZmluZSBESVNQX1JFR19VRk9fU1RBUlQJ
CQkweDAwMDAKKworI2RlZmluZSBESVNQX0NPTE9SX0NGR19NQUlOCQkJMHgwNDAwCisjZGVmaW5l
IERJU1BfQ09MT1JfU1RBUlQJCQkweDBjMDAKKyNkZWZpbmUgRElTUF9DT0xPUl9XSURUSAkJCTB4
MGM1MAorI2RlZmluZSBESVNQX0NPTE9SX0hFSUdIVAkJCTB4MGM1NAorCisjZGVmaW5lCU9EX1JF
TEFZX01PREUJCUJJVCgwKQorCisjZGVmaW5lCVVGT19CWVBBU1MJCUJJVCgyKQorCisjZGVmaW5l
CUNPTE9SX0JZUEFTU19BTEwJQklUKDcpCisjZGVmaW5lCUNPTE9SX1NFUV9TRUwJCUJJVCgxMykK
Kworc3RhdGljIHZvaWQgbXRrX2NvbG9yX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w
LCB1bnNpZ25lZCBpbnQgdywKKwkJCSAgICAgdW5zaWduZWQgaW50IGgsIHVuc2lnbmVkIGludCB2
cmVmcmVzaCkKK3sKKwl3cml0ZWwodywgY29tcC0+cmVncyArIERJU1BfQ09MT1JfV0lEVEgpOwor
CXdyaXRlbChoLCBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9IRUlHSFQpOworfQorCitzdGF0aWMg
dm9pZCBtdGtfY29sb3Jfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0
ZWwoQ09MT1JfQllQQVNTX0FMTCB8IENPTE9SX1NFUV9TRUwsCisJICAgICAgIGNvbXAtPnJlZ3Mg
KyBESVNQX0NPTE9SX0NGR19NQUlOKTsKKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9D
T0xPUl9TVEFSVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vZF9jb25maWcoc3RydWN0IG10a19k
ZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcsCisJCQkgIHVuc2lnbmVkIGludCBoLCB1bnNp
Z25lZCBpbnQgdnJlZnJlc2gpCit7CisJd3JpdGVsKHcgPDwgMTYgfCBoLCBjb21wLT5yZWdzICsg
RElTUF9PRF9TSVpFKTsKK30KKworc3RhdGljIHZvaWQgbXRrX29kX3N0YXJ0KHN0cnVjdCBtdGtf
ZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsKE9EX1JFTEFZX01PREUsIGNvbXAtPnJlZ3MgKyBE
SVNQX09EX0NGRyk7CisJd3JpdGVsKDEsIGNvbXAtPnJlZ3MgKyBESVNQX09EX0VOKTsKK30KKwor
c3RhdGljIHZvaWQgbXRrX3JkbWFfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sK
Kwl1bnNpZ25lZCBpbnQgcmVnOworCisJd3JpdGVsKDB4NCwgY29tcC0+cmVncyArIERJU1BfUkVH
X1JETUFfSU5UX0VOQUJMRSk7CisJcmVnID0gcmVhZGwoY29tcC0+cmVncyArIERJU1BfUkVHX1JE
TUFfR0xPQkFMX0NPTik7CisJcmVnIHw9IDE7CisJd3JpdGVsKHJlZywgY29tcC0+cmVncyArIERJ
U1BfUkVHX1JETUFfR0xPQkFMX0NPTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX2NvbmZp
ZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCB3aWR0aCwKKwkJCSAgICB1bnNp
Z25lZCBoZWlnaHQsIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwl1bnNpZ25lZCBpbnQgdGhy
ZXNob2xkOworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSByZWFkbChjb21wLT5yZWdzICsg
RElTUF9SRUdfUkRNQV9TSVpFX0NPTl8wKTsKKwlyZWcgPSAocmVnICYgfigweGZmZikpIHwgKHdp
ZHRoICYgMHhmZmYpOworCXdyaXRlbChyZWcsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19SRE1BX1NJ
WkVfQ09OXzApOworCisJcmVnID0gcmVhZGwoY29tcC0+cmVncyArIERJU1BfUkVHX1JETUFfU0la
RV9DT05fMSk7CisJcmVnID0gKHJlZyAmIH4oMHhmZmZmZikpIHwgKGhlaWdodCAmIDB4ZmZmZmYp
OworCXdyaXRlbChyZWcsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzEpOwor
CisJLyoKKwkgKiBFbmFibGUgRklGTyB1bmRlcmZsb3cgc2luY2UgRFNJIGFuZCBEUEkgY2FuJ3Qg
YmUgYmxvY2tlZC4KKwkgKiBLZWVwIHRoZSBGSUZPIHBzZXVkbyBzaXplIHJlc2V0IGRlZmF1bHQg
b2YgOCBLaUIuIFNldCB0aGUKKwkgKiBvdXRwdXQgdGhyZXNob2xkIHRvIDYgbWljcm9zZWNvbmRz
IHdpdGggNy82IG92ZXJoZWFkIHRvCisJICogYWNjb3VudCBmb3IgYmxhbmtpbmcsIGFuZCB3aXRo
IGEgcGl4ZWwgZGVwdGggb2YgNCBieXRlczoKKwkgKi8KKwl0aHJlc2hvbGQgPSB3aWR0aCAqIGhl
aWdodCAqIHZyZWZyZXNoICogNCAqIDcgLyAxMDAwMDAwOworCXJlZyA9IFJETUFfRklGT19VTkRF
UkZMT1dfRU4gfAorCSAgICAgIFJETUFfRklGT19QU0VVRE9fU0laRShTWl84SykgfAorCSAgICAg
IFJETUFfT1VUUFVUX1ZBTElEX0ZJRk9fVEhSRVNIT0xEKHRocmVzaG9sZCk7CisJd3JpdGVsKHJl
ZywgY29tcC0+cmVncyArIERJU1BfUkVHX1JETUFfRklGT19DT04pOworfQorCitzdGF0aWMgdm9p
ZCBtdGtfdWZvZV9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRlbChV
Rk9fQllQQVNTLCBjb21wLT5yZWdzICsgRElTUF9SRUdfVUZPX1NUQVJUKTsKK30KKworc3RhdGlj
IGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX2NvbG9yID0geworCS5jb25maWcg
PSBtdGtfY29sb3JfY29uZmlnLAorCS5zdGFydCA9IG10a19jb2xvcl9zdGFydCwKK307CisKK3N0
YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRkcF9vZCA9IHsKKwkuY29uZmln
ID0gbXRrX29kX2NvbmZpZywKKwkuc3RhcnQgPSBtdGtfb2Rfc3RhcnQsCit9OworCitzdGF0aWMg
Y29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBkZHBfcmRtYSA9IHsKKwkuY29uZmlnID0g
bXRrX3JkbWFfY29uZmlnLAorCS5zdGFydCA9IG10a19yZG1hX3N0YXJ0LAorfTsKKworc3RhdGlj
IGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX3Vmb2UgPSB7CisJLnN0YXJ0ID0g
bXRrX3Vmb2Vfc3RhcnQsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10a19kZHBf
Y29tcF9zdGVtW01US19ERFBfQ09NUF9UWVBFX01BWF0gPSB7CisJW01US19ESVNQX09WTF0gPSAi
b3ZsIiwKKwlbTVRLX0RJU1BfUkRNQV0gPSAicmRtYSIsCisJW01US19ESVNQX1dETUFdID0gIndk
bWEiLAorCVtNVEtfRElTUF9DT0xPUl0gPSAiY29sb3IiLAorCVtNVEtfRElTUF9BQUxdID0gImFh
bCIsCisJW01US19ESVNQX0dBTU1BXSA9ICJnYW1tYSIsCisJW01US19ESVNQX1VGT0VdID0gInVm
b2UiLAorCVtNVEtfRFNJXSA9ICJkc2kiLAorCVtNVEtfRFBJXSA9ICJkcGkiLAorCVtNVEtfRElT
UF9QV01dID0gInB3bSIsCisJW01US19ESVNQX01VVEVYXSA9ICJtdXRleCIsCisJW01US19ESVNQ
X09EXSA9ICJvZCIsCit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wX21hdGNoIHsKKwllbnVtIG10
a19kZHBfY29tcF90eXBlIHR5cGU7CisJaW50IGFsaWFzX2lkOworCWNvbnN0IHN0cnVjdCBtdGtf
ZGRwX2NvbXBfZnVuY3MgKmZ1bmNzOworfTsKKworc3RhdGljIHN0cnVjdCBtdGtfZGRwX2NvbXBf
bWF0Y2ggbXRrX2RkcF9tYXRjaGVzW0REUF9DT01QT05FTlRfSURfTUFYXSA9IHsKKwlbRERQX0NP
TVBPTkVOVF9BQUxdCT0geyBNVEtfRElTUF9BQUwsCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVO
VF9DT0xPUjBdCT0geyBNVEtfRElTUF9DT0xPUiwJMCwgJmRkcF9jb2xvciB9LAorCVtERFBfQ09N
UE9ORU5UX0NPTE9SMV0JPSB7IE1US19ESVNQX0NPTE9SLAkxLCAmZGRwX2NvbG9yIH0sCisJW0RE
UF9DT01QT05FTlRfRFBJMF0JPSB7IE1US19EUEksCQkwLCBOVUxMIH0sCisJW0REUF9DT01QT05F
TlRfRFNJMF0JPSB7IE1US19EU0ksCQkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfRFNJMV0J
PSB7IE1US19EU0ksCQkxLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfR0FNTUFdCT0geyBNVEtf
RElTUF9HQU1NQSwJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX09EXQk9IHsgTVRLX0RJU1Bf
T0QsCTAsICZkZHBfb2QgfSwKKwlbRERQX0NPTVBPTkVOVF9PVkwwXQk9IHsgTVRLX0RJU1BfT1ZM
LAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfT1ZMMV0JPSB7IE1US19ESVNQX09WTCwJMSwg
TlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX1BXTTBdCT0geyBNVEtfRElTUF9QV00sCTAsIE5VTEwg
fSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMF0JPSB7IE1US19ESVNQX1JETUEsCTAsICZkZHBfcmRt
YSB9LAorCVtERFBfQ09NUE9ORU5UX1JETUExXQk9IHsgTVRLX0RJU1BfUkRNQSwJMSwgJmRkcF9y
ZG1hIH0sCisJW0REUF9DT01QT05FTlRfUkRNQTJdCT0geyBNVEtfRElTUF9SRE1BLAkyLCAmZGRw
X3JkbWEgfSwKKwlbRERQX0NPTVBPTkVOVF9VRk9FXQk9IHsgTVRLX0RJU1BfVUZPRSwJMCwgJmRk
cF91Zm9lIH0sCisJW0REUF9DT01QT05FTlRfV0RNQTBdCT0geyBNVEtfRElTUF9XRE1BLAkwLCBO
VUxMIH0sCisJW0REUF9DT01QT05FTlRfV0RNQTFdCT0geyBNVEtfRElTUF9XRE1BLAkxLCBOVUxM
IH0sCit9OworCitpbnQgbXRrX2RkcF9jb21wX2dldF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5v
ZGUsCisJCQllbnVtIG10a19kZHBfY29tcF90eXBlIGNvbXBfdHlwZSkKK3sKKwlpbnQgaWQgPSBv
Zl9hbGlhc19nZXRfaWQobm9kZSwgbXRrX2RkcF9jb21wX3N0ZW1bY29tcF90eXBlXSk7CisJaW50
IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZGRwX21hdGNoZXMpOyBpKysp
IHsKKwkJaWYgKGNvbXBfdHlwZSA9PSBtdGtfZGRwX21hdGNoZXNbaV0udHlwZSAmJgorCQkgICAg
KGlkIDwgMCB8fCBpZCA9PSBtdGtfZGRwX21hdGNoZXNbaV0uYWxpYXNfaWQpKQorCQkJcmV0dXJu
IGk7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2ludCBtdGtfZGRwX2NvbXBfaW5pdChz
dHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJICAgICAgc3Ry
dWN0IG10a19kZHBfY29tcCAqY29tcCwgZW51bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCwKKwkJ
ICAgICAgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3MpCit7CisJZW51bSBt
dGtfZGRwX2NvbXBfdHlwZSB0eXBlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbGFyYl9ub2RlOwor
CXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmxhcmJfcGRldjsKKworCWlmIChjb21wX2lkIDwgMCB8
fCBjb21wX2lkID49IEREUF9DT01QT05FTlRfSURfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor
CWNvbXAtPmlkID0gY29tcF9pZDsKKwljb21wLT5mdW5jcyA9IGZ1bmNzID86IG10a19kZHBfbWF0
Y2hlc1tjb21wX2lkXS5mdW5jczsKKworCWlmIChjb21wX2lkID09IEREUF9DT01QT05FTlRfRFBJ
MCB8fAorCSAgICBjb21wX2lkID09IEREUF9DT01QT05FTlRfRFNJMCB8fAorCSAgICBjb21wX2lk
ID09IEREUF9DT01QT05FTlRfUFdNMCkgeworCQljb21wLT5yZWdzID0gTlVMTDsKKwkJY29tcC0+
Y2xrID0gTlVMTDsKKwkJY29tcC0+aXJxID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJY29tcC0+
cmVncyA9IG9mX2lvbWFwKG5vZGUsIDApOworCWNvbXAtPmlycSA9IG9mX2lycV9nZXQobm9kZSwg
MCk7CisJY29tcC0+Y2xrID0gb2ZfY2xrX2dldChub2RlLCAwKTsKKwlpZiAoSVNfRVJSKGNvbXAt
PmNsaykpCisJCWNvbXAtPmNsayA9IE5VTEw7CisKKwl0eXBlID0gbXRrX2RkcF9tYXRjaGVzW2Nv
bXBfaWRdLnR5cGU7CisKKwkvKiBPbmx5IERNQSBjYXBhYmxlIGNvbXBvbmVudHMgbmVlZCB0aGUg
TEFSQiBwcm9wZXJ0eSAqLworCWNvbXAtPmxhcmJfZGV2ID0gTlVMTDsKKwlpZiAodHlwZSAhPSBN
VEtfRElTUF9PVkwgJiYKKwkgICAgdHlwZSAhPSBNVEtfRElTUF9SRE1BICYmCisJICAgIHR5cGUg
IT0gTVRLX0RJU1BfV0RNQSkKKwkJcmV0dXJuIDA7CisKKwlsYXJiX25vZGUgPSBvZl9wYXJzZV9w
aGFuZGxlKG5vZGUsICJtZWRpYXRlayxsYXJiIiwgMCk7CisJaWYgKCFsYXJiX25vZGUpIHsKKwkJ
ZGV2X2VycihkZXYsCisJCQkiTWlzc2luZyBtZWRpYWRlayxsYXJiIHBoYW5kbGUgaW4gJXMgbm9k
ZVxuIiwKKwkJCW5vZGUtPmZ1bGxfbmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxh
cmJfcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobGFyYl9ub2RlKTsKKwlpZiAoIWxhcmJf
cGRldikgeworCQlkZXZfd2FybihkZXYsICJXYWl0aW5nIGZvciBsYXJiIGRldmljZSAlc1xuIiwK
KwkJCSBsYXJiX25vZGUtPmZ1bGxfbmFtZSk7CisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCX0K
KworCWNvbXAtPmxhcmJfZGV2ID0gJmxhcmJfcGRldi0+ZGV2OworCisJcmV0dXJuIDA7Cit9CisK
K2ludCBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0
IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRl
ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKworCWlmIChwcml2YXRlLT5kZHBfY29tcFtjb21wLT5pZF0p
CisJCXJldHVybiAtRUJVU1k7CisKKwlwcml2YXRlLT5kZHBfY29tcFtjb21wLT5pZF0gPSBjb21w
OworCXJldHVybiAwOworfQorCit2b2lkIG10a19kZHBfY29tcF91bnJlZ2lzdGVyKHN0cnVjdCBk
cm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10
a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRybS0+ZGV2X3ByaXZhdGU7CisKKwlwcml2YXRlLT5k
ZHBfY29tcFtjb21wLT5pZF0gPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfZHJtX2RkcF9jb21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQw
YzA2NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2RkcF9jb21wLmgKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUg
TWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRERQX0NPTVBfSAorI2RlZmluZSBNVEtfRFJN
X0REUF9DT01QX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKK3N0cnVjdCBkZXZpY2U7Citz
dHJ1Y3QgZGV2aWNlX25vZGU7CitzdHJ1Y3QgZHJtX2RldmljZTsKK3N0cnVjdCBtdGtfcGxhbmVf
c3RhdGU7CisKK2VudW0gbXRrX2RkcF9jb21wX3R5cGUgeworCU1US19ESVNQX09WTCwKKwlNVEtf
RElTUF9SRE1BLAorCU1US19ESVNQX1dETUEsCisJTVRLX0RJU1BfQ09MT1IsCisJTVRLX0RJU1Bf
QUFMLAorCU1US19ESVNQX0dBTU1BLAorCU1US19ESVNQX1VGT0UsCisJTVRLX0RTSSwKKwlNVEtf
RFBJLAorCU1US19ESVNQX1BXTSwKKwlNVEtfRElTUF9NVVRFWCwKKwlNVEtfRElTUF9PRCwKKwlN
VEtfRERQX0NPTVBfVFlQRV9NQVgsCit9OworCitlbnVtIG10a19kZHBfY29tcF9pZCB7CisJRERQ
X0NPTVBPTkVOVF9BQUwsCisJRERQX0NPTVBPTkVOVF9DT0xPUjAsCisJRERQX0NPTVBPTkVOVF9D
T0xPUjEsCisJRERQX0NPTVBPTkVOVF9EUEkwLAorCUREUF9DT01QT05FTlRfRFNJMCwKKwlERFBf
Q09NUE9ORU5UX0RTSTEsCisJRERQX0NPTVBPTkVOVF9HQU1NQSwKKwlERFBfQ09NUE9ORU5UX09E
LAorCUREUF9DT01QT05FTlRfT1ZMMCwKKwlERFBfQ09NUE9ORU5UX09WTDEsCisJRERQX0NPTVBP
TkVOVF9QV00wLAorCUREUF9DT01QT05FTlRfUFdNMSwKKwlERFBfQ09NUE9ORU5UX1JETUEwLAor
CUREUF9DT01QT05FTlRfUkRNQTEsCisJRERQX0NPTVBPTkVOVF9SRE1BMiwKKwlERFBfQ09NUE9O
RU5UX1VGT0UsCisJRERQX0NPTVBPTkVOVF9XRE1BMCwKKwlERFBfQ09NUE9ORU5UX1dETUExLAor
CUREUF9DT01QT05FTlRfSURfTUFYLAorfTsKKworc3RydWN0IG10a19kZHBfY29tcDsKKworc3Ry
dWN0IG10a19kZHBfY29tcF9mdW5jcyB7CisJdm9pZCAoKmNvbmZpZykoc3RydWN0IG10a19kZHBf
Y29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgaCwgdW5z
aWduZWQgaW50IHZyZWZyZXNoKTsKKwl2b2lkICgqc3RhcnQpKHN0cnVjdCBtdGtfZGRwX2NvbXAg
KmNvbXApOworCXZvaWQgKCpzdG9wKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKTsKKwl2b2lk
ICgqZW5hYmxlX3ZibGFuaykoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7CisJdm9pZCAoKmRp
c2FibGVfdmJsYW5rKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKTsKKwl2b2lkICgqbGF5ZXJf
b24pKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgpOworCXZvaWQg
KCpsYXllcl9vZmYpKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgp
OworCXZvaWQgKCpsYXllcl9jb25maWcpKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2ln
bmVkIGludCBpZHgsCisJCQkgICAgIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlKTsKK307
CisKK3N0cnVjdCBtdGtfZGRwX2NvbXAgeworCXN0cnVjdCBjbGsgKmNsazsKKwl2b2lkIF9faW9t
ZW0gKnJlZ3M7CisJaW50IGlycTsKKwlzdHJ1Y3QgZGV2aWNlICpsYXJiX2RldjsKKwllbnVtIG10
a19kZHBfY29tcF9pZCBpZDsKKwljb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzICpmdW5j
czsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfY29uZmlnKHN0cnVjdCBt
dGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCB3LCB1bnNpZ25lZCBp
bnQgaCwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHZyZWZyZXNoKQoreworCWlmIChjb21wLT5m
dW5jcyAmJiBjb21wLT5mdW5jcy0+Y29uZmlnKQorCQljb21wLT5mdW5jcy0+Y29uZmlnKGNvbXAs
IHcsIGgsIHZyZWZyZXNoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9z
dGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBj
b21wLT5mdW5jcy0+c3RhcnQpCisJCWNvbXAtPmZ1bmNzLT5zdGFydChjb21wKTsKK30KKworc3Rh
dGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNv
bXApCit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5zdG9wKQorCQljb21wLT5m
dW5jcy0+c3RvcChjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9l
bmFibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJaWYgKGNvbXAtPmZ1
bmNzICYmIGNvbXAtPmZ1bmNzLT5lbmFibGVfdmJsYW5rKQorCQljb21wLT5mdW5jcy0+ZW5hYmxl
X3ZibGFuayhjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9kaXNh
YmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5j
cyAmJiBjb21wLT5mdW5jcy0+ZGlzYWJsZV92YmxhbmspCisJCWNvbXAtPmZ1bmNzLT5kaXNhYmxl
X3ZibGFuayhjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9sYXll
cl9vbihzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCQkgdW5zaWduZWQgaW50IGlkeCkK
K3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxheWVyX29uKQorCQljb21wLT5m
dW5jcy0+bGF5ZXJfb24oY29tcCwgaWR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19k
ZHBfY29tcF9sYXllcl9vZmYoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkJICB1bnNp
Z25lZCBpbnQgaWR4KQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+bGF5ZXJf
b2ZmKQorCQljb21wLT5mdW5jcy0+bGF5ZXJfb2ZmKGNvbXAsIGlkeCk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAg
KmNvbXAsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IGlkeCwKKwkJCQkJICAgICBzdHJ1Y3QgbXRr
X3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3Mt
PmxheWVyX2NvbmZpZykKKwkJY29tcC0+ZnVuY3MtPmxheWVyX2NvbmZpZyhjb21wLCBpZHgsIHN0
YXRlKTsKK30KKworaW50IG10a19kZHBfY29tcF9nZXRfaWQoc3RydWN0IGRldmljZV9ub2RlICpu
b2RlLAorCQkJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21wX3R5cGUpOworaW50IG10a19kZHBf
Y29tcF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpjb21wX25v
ZGUsCisJCSAgICAgIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIGVudW0gbXRrX2RkcF9jb21w
X2lkIGNvbXBfaWQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgKmZ1
bmNzKTsKK2ludCBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwg
c3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7Cit2b2lkIG10a19kZHBfY29tcF91bnJlZ2lzdGVy
KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApOworCisj
ZW5kaWYgLyogTVRLX0RSTV9ERFBfQ09NUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZHJtX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYjIyYjQKLS0t
IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwpA
QCAtMCwwICsxLDU3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu
CisgKiBBdXRob3I6IFlUIFNIRU4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJt
L2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1f
YXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNs
dWRlIDxkcm0vZHJtX2dlbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1
ZGUgPGxpbnV4L2lvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1
ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgor
CisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIKKyNp
bmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNp
bmNsdWRlICJtdGtfZHJtX2ZiLmgiCisjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKworI2RlZmlu
ZSBEUklWRVJfTkFNRSAibWVkaWF0ZWsiCisjZGVmaW5lIERSSVZFUl9ERVNDICJNZWRpYXRlayBT
b0MgRFJNIgorI2RlZmluZSBEUklWRVJfREFURSAiMjAxNTA1MTMiCisjZGVmaW5lIERSSVZFUl9N
QUpPUiAxCisjZGVmaW5lIERSSVZFUl9NSU5PUiAwCisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNf
c2NoZWR1bGUoc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSwKKwkJCQlzdHJ1Y3QgZHJt
X2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJcHJpdmF0ZS0+Y29tbWl0LnN0YXRlID0gc3RhdGU7
CisJc2NoZWR1bGVfd29yaygmcHJpdmF0ZS0+Y29tbWl0LndvcmspOworfQorCitzdGF0aWMgdm9p
ZCBtdGtfYXRvbWljX3dhaXRfZm9yX2ZlbmNlcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3Rh
dGUpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0
ZSAqcGxhbmVfc3RhdGU7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wbGFuZV9pbl9zdGF0ZShzdGF0
ZSwgcGxhbmUsIHBsYW5lX3N0YXRlLCBpKQorCQltdGtfZmJfd2FpdChwbGFuZS0+c3RhdGUtPmZi
KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2F0b21pY19jb21wbGV0ZShzdHJ1Y3QgbXRrX2RybV9w
cml2YXRlICpwcml2YXRlLAorCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sK
KwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOworCisJbXRrX2F0b21pY193
YWl0X2Zvcl9mZW5jZXMoc3RhdGUpOworCisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVz
ZXRfZGlzYWJsZXMoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3BsYW5l
cyhkcm0sIHN0YXRlLCBmYWxzZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRf
ZW5hYmxlcyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92Ymxhbmtz
KGRybSwgc3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRybSwgc3Rh
dGUpOworCWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10
a19hdG9taWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG10a19k
cm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJc3RydWN0IG10a19k
cm1fcHJpdmF0ZSwgY29tbWl0LndvcmspOworCisJbXRrX2F0b21pY19jb21wbGV0ZShwcml2YXRl
LCBwcml2YXRlLT5jb21taXQuc3RhdGUpOworfQorCitzdGF0aWMgaW50IG10a19hdG9taWNfY29t
bWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0
YXRlICpzdGF0ZSwKKwkJCSAgICAgYm9vbCBhc3luYykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2
YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJt
X2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZHJtLCBzdGF0ZSk7CisJaWYgKHJldCkKKwkJ
cmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsKKwlmbHVz
aF93b3JrKCZwcml2YXRlLT5jb21taXQud29yayk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9zd2Fw
X3N0YXRlKGRybSwgc3RhdGUpOworCisJaWYgKGFzeW5jKQorCQltdGtfYXRvbWljX3NjaGVkdWxl
KHByaXZhdGUsIHN0YXRlKTsKKwllbHNlCisJCW10a19hdG9taWNfY29tcGxldGUocHJpdmF0ZSwg
c3RhdGUpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5jb21taXQubG9jayk7CisKKwlyZXR1
cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgbXRr
X2RybV9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKKwkuZmJfY3JlYXRlID0gbXRrX2RybV9tb2RlX2Zi
X2NyZWF0ZSwKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCisJLmF0
b21pY19jb21taXQgPSBtdGtfYXRvbWljX2NvbW1pdCwKK307CisKK3N0YXRpYyBjb25zdCBlbnVt
IG10a19kZHBfY29tcF9pZCBtdGtfZGRwX21haW5bXSA9IHsKKwlERFBfQ09NUE9ORU5UX09WTDAs
CisJRERQX0NPTVBPTkVOVF9DT0xPUjAsCisJRERQX0NPTVBPTkVOVF9BQUwsCisJRERQX0NPTVBP
TkVOVF9PRCwKKwlERFBfQ09NUE9ORU5UX1JETUEwLAorCUREUF9DT01QT05FTlRfVUZPRSwKKwlE
RFBfQ09NUE9ORU5UX0RTSTAsCisJRERQX0NPTVBPTkVOVF9QV00wLAorfTsKKworc3RhdGljIGNv
bnN0IGVudW0gbXRrX2RkcF9jb21wX2lkIG10a19kZHBfZXh0W10gPSB7CisJRERQX0NPTVBPTkVO
VF9PVkwxLAorCUREUF9DT01QT05FTlRfQ09MT1IxLAorCUREUF9DT01QT05FTlRfR0FNTUEsCisJ
RERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCit9OworCitzdGF0aWMg
aW50IG10a19kcm1fa21zX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1Y3Qg
bXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcGxh
dGZvcm1fZGV2aWNlICpwZGV2OworCWludCByZXQ7CisKKwlpZiAoIWlvbW11X3ByZXNlbnQoJnBs
YXRmb3JtX2J1c190eXBlKSkKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisKKwlwZGV2ID0gb2Zf
ZmluZF9kZXZpY2VfYnlfbm9kZShwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlpZiAoIXBkZXYpIHsK
KwkJZGV2X2Vycihkcm0tPmRldiwgIldhaXRpbmcgZm9yIGRpc3AtbXV0ZXggZGV2aWNlICVzXG4i
LAorCQkJcHJpdmF0ZS0+bXV0ZXhfbm9kZS0+ZnVsbF9uYW1lKTsKKwkJb2Zfbm9kZV9wdXQocHJp
dmF0ZS0+bXV0ZXhfbm9kZSk7CisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCX0KKwlwcml2YXRl
LT5tdXRleF9kZXYgPSAmcGRldi0+ZGV2OworCisJZHJtX21vZGVfY29uZmlnX2luaXQoZHJtKTsK
KworCWRybS0+bW9kZV9jb25maWcubWluX3dpZHRoID0gNjQ7CisJZHJtLT5tb2RlX2NvbmZpZy5t
aW5faGVpZ2h0ID0gNjQ7CisKKwkvKgorCSAqIHNldCBtYXggd2lkdGggYW5kIGhlaWdodCBhcyBk
ZWZhdWx0IHZhbHVlKDQwOTZ4NDA5NikuCisJICogdGhpcyB2YWx1ZSB3b3VsZCBiZSB1c2VkIHRv
IGNoZWNrIGZyYW1lYnVmZmVyIHNpemUgbGltaXRhdGlvbgorCSAqIGF0IGRybV9tb2RlX2FkZGZi
KCkuCisJICovCisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSA0MDk2OworCWRybS0+bW9k
ZV9jb25maWcubWF4X2hlaWdodCA9IDQwOTY7CisJZHJtLT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZt
dGtfZHJtX21vZGVfY29uZmlnX2Z1bmNzOworCisJcmV0ID0gY29tcG9uZW50X2JpbmRfYWxsKGRy
bS0+ZGV2LCBkcm0pOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ19jbGVhbnVwOworCisJ
LyoKKwkgKiBXZSBjdXJyZW50bHkgc3VwcG9ydCB0d28gZml4ZWQgZGF0YSBzdHJlYW1zLCBlYWNo
IHN0YXRpY2FsbHkKKwkgKiBhc3NpZ25lZCB0byBhIGNydGM6CisJICogT1ZMMCAtPiBDT0xPUjAg
LT4gQUFMIC0+IE9EIC0+IFJETUEwIC0+IFVGT0UgLT4gRFNJMCAuLi4KKwkgKi8KKwlyZXQgPSBt
dGtfZHJtX2NydGNfY3JlYXRlKGRybSwgbXRrX2RkcF9tYWluLCBBUlJBWV9TSVpFKG10a19kZHBf
bWFpbikpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOworCS8q
IC4uLiBhbmQgT1ZMMSAtPiBDT0xPUjEgLT4gR0FNTUEgLT4gUkRNQTEgLT4gRFBJMC4gKi8KKwly
ZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRlKGRybSwgbXRrX2RkcF9leHQsIEFSUkFZX1NJWkUobXRr
X2RkcF9leHQpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfY29tcG9uZW50X3VuYmluZDsK
KworCS8qCisJICogV2UgZG9uJ3QgdXNlIHRoZSBkcm1faXJxX2luc3RhbGwoKSBoZWxwZXJzIHBy
b3ZpZGVkIGJ5IHRoZSBEUk0KKwkgKiBjb3JlLCBzbyB3ZSBuZWVkIHRvIHNldCB0aGlzIG1hbnVh
bGx5IGluIG9yZGVyIHRvIGFsbG93IHRoZQorCSAqIERSTV9JT0NUTF9XQUlUX1ZCTEFOSyB0byBv
cGVyYXRlIGNvcnJlY3RseS4KKwkgKi8KKwlkcm0tPmlycV9lbmFibGVkID0gdHJ1ZTsKKwlyZXQg
PSBkcm1fdmJsYW5rX2luaXQoZHJtLCBNQVhfQ1JUQyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8g
ZXJyX2NvbXBvbmVudF91bmJpbmQ7CisKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoZHJtKTsK
Kwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZHJtKTsKKworCXJldHVybiAwOworCitlcnJfY29tcG9u
ZW50X3VuYmluZDoKKwljb21wb25lbnRfdW5iaW5kX2FsbChkcm0tPmRldiwgZHJtKTsKK2Vycl9j
b25maWdfY2xlYW51cDoKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOworCisJcmV0dXJu
IHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9rbXNfZGVpbml0KHN0cnVjdCBkcm1fZGV2
aWNlICpkcm0pCit7CisJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRybSk7CisKKwlkcm1fdmJs
YW5rX2NsZWFudXAoZHJtKTsKKwljb21wb25lbnRfdW5iaW5kX2FsbChkcm0tPmRldiwgZHJtKTsK
Kwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOworfQorCitzdGF0aWMgaW50IG10a19kcm1f
dW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJbXRrX2RybV9rbXNfZGVpbml0KGRy
bSk7CisJZHJtLT5kZXZfcHJpdmF0ZSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj
IGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtdGtfZHJtX2dlbV92bV9vcHMgPSB7
CisJLm9wZW4gPSBkcm1fZ2VtX3ZtX29wZW4sCisJLmNsb3NlID0gZHJtX2dlbV92bV9jbG9zZSwK
K307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG10a19kcm1fZm9wcyA9
IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGRybV9vcGVuLAorCS5yZWxlYXNl
ID0gZHJtX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAorCS5tbWFwID0g
bXRrX2RybV9nZW1fbW1hcCwKKwkucG9sbCA9IGRybV9wb2xsLAorCS5yZWFkID0gZHJtX3JlYWQs
CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwgPSBkcm1fY29tcGF0X2lvY3Rs
LAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgbXRrX2RybV9kcml2ZXIg
PSB7CisJLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX0dFTSB8IERS
SVZFUl9QUklNRSB8CisJCQkgICBEUklWRVJfQVRPTUlDLAorCS51bmxvYWQgPSBtdGtfZHJtX3Vu
bG9hZCwKKwkuc2V0X2J1c2lkID0gZHJtX3BsYXRmb3JtX3NldF9idXNpZCwKKworCS5nZXRfdmJs
YW5rX2NvdW50ZXIgPSBkcm1fdmJsYW5rX2NvdW50LAorCS5lbmFibGVfdmJsYW5rID0gbXRrX2Ry
bV9jcnRjX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRrX2RybV9jcnRjX2Rp
c2FibGVfdmJsYW5rLAorCisJLmdlbV9mcmVlX29iamVjdCA9IG10a19kcm1fZ2VtX2ZyZWVfb2Jq
ZWN0LAorCS5nZW1fdm1fb3BzID0gJm10a19kcm1fZ2VtX3ZtX29wcywKKwkuZHVtYl9jcmVhdGUg
PSBtdGtfZHJtX2dlbV9kdW1iX2NyZWF0ZSwKKwkuZHVtYl9tYXBfb2Zmc2V0ID0gbXRrX2RybV9n
ZW1fZHVtYl9tYXBfb2Zmc2V0LAorCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1bWJfZGVzdHJv
eSwKKworCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwK
KwkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdl
bV9wcmltZV9leHBvcnQgPSBkcm1fZ2VtX3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9y
dCA9IGRybV9nZW1fcHJpbWVfaW1wb3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gbXRr
X2dlbV9wcmltZV9nZXRfc2dfdGFibGUsCisJLmdlbV9wcmltZV9tbWFwID0gbXRrX2RybV9nZW1f
bW1hcF9idWYsCisJLmZvcHMgPSAmbXRrX2RybV9mb3BzLAorCisJLm5hbWUgPSBEUklWRVJfTkFN
RSwKKwkuZGVzYyA9IERSSVZFUl9ERVNDLAorCS5kYXRlID0gRFJJVkVSX0RBVEUsCisJLm1ham9y
ID0gRFJJVkVSX01BSk9SLAorCS5taW5vciA9IERSSVZFUl9NSU5PUiwKK307CisKK3N0YXRpYyBp
bnQgY29tcGFyZV9vZihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJu
IGRldi0+b2Zfbm9kZSA9PSBkYXRhOworfQorCitzdGF0aWMgaW50IG10a19kcm1fYmluZChzdHJ1
Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRl
dl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJaW50IHJldDsK
KworCWRybSA9IGRybV9kZXZfYWxsb2MoJm10a19kcm1fZHJpdmVyLCBkZXYpOworCWlmICghZHJt
KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRybV9kZXZfc2V0X3VuaXF1ZShkcm0sIGRldl9uYW1l
KGRldikpOworCisJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDApOworCWlmIChyZXQgPCAw
KQorCQlnb3RvIGVycl9mcmVlOworCisJZHJtLT5kZXZfcHJpdmF0ZSA9IHByaXZhdGU7CisJcHJp
dmF0ZS0+ZHJtID0gZHJtOworCisJcmV0ID0gbXRrX2RybV9rbXNfaW5pdChkcm0pOworCWlmIChy
ZXQgPCAwKQorCQlnb3RvIGVycl91bnJlZ2lzdGVyOworCisJcmV0dXJuIDA7CisKK2Vycl91bnJl
Z2lzdGVyOgorCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOworZXJyX2ZyZWU6CisJZHJtX2Rldl91
bnJlZihkcm0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fdW5iaW5k
KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRl
ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkcm1fcHV0X2Rldihwcml2YXRlLT5kcm0pOwor
CXByaXZhdGUtPmRybSA9IE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50
X21hc3Rlcl9vcHMgbXRrX2RybV9vcHMgPSB7CisJLmJpbmQJCT0gbXRrX2RybV9iaW5kLAorCS51
bmJpbmQJCT0gbXRrX2RybV91bmJpbmQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rl
dmljZV9pZCBtdGtfZGRwX2NvbXBfZHRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRp
YXRlayxtdDgxNzMtZGlzcC1vdmwiLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9PVkwgfSwK
Kwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXJkbWEiLCAgLmRhdGEgPSAo
dm9pZCAqKU1US19ESVNQX1JETUEgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3
My1kaXNwLXdkbWEiLCAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX1dETUEgfSwKKwl7IC5jb21w
YXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLWNvbG9yIiwgLmRhdGEgPSAodm9pZCAqKU1U
S19ESVNQX0NPTE9SIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1h
YWwiLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9BQUx9LAorCXsgLmNvbXBhdGlibGUgPSAi
bWVkaWF0ZWssbXQ4MTczLWRpc3AtZ2FtbWEiLCAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfR0FN
TUEsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC11Zm9lIiwgIC5k
YXRhID0gKHZvaWQgKilNVEtfRElTUF9VRk9FIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRl
ayxtdDgxNzMtZHNpIiwgICAgICAgIC5kYXRhID0gKHZvaWQgKilNVEtfRFNJIH0sCisJeyAuY29t
cGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZHBpIiwgICAgICAgIC5kYXRhID0gKHZvaWQgKilN
VEtfRFBJIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1tdXRleCIs
IC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9NVVRFWCB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVk
aWF0ZWssbXQ4MTczLWRpc3AtcHdtIiwgICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfUFdNIH0s
CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1vZCIsICAgIC5kYXRhID0g
KHZvaWQgKilNVEtfRElTUF9PRCB9LAorCXsgfQorfTsKKworc3RhdGljIGludCBtdGtfZHJtX3By
b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2
ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlOworCXN0cnVj
dCByZXNvdXJjZSAqbWVtOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgY29t
cG9uZW50X21hdGNoICptYXRjaCA9IE5VTEw7CisJaW50IHJldDsKKwlpbnQgaTsKKworCXByaXZh
dGUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlp
ZiAoIXByaXZhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmcHJpdmF0ZS0+
Y29tbWl0LmxvY2spOworCUlOSVRfV09SSygmcHJpdmF0ZS0+Y29tbWl0LndvcmssIG10a19hdG9t
aWNfd29yayk7CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJD
RV9NRU0sIDApOworCXByaXZhdGUtPmNvbmZpZ19yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNl
KGRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKHByaXZhdGUtPmNvbmZpZ19yZWdzKSkgeworCQlyZXQg
PSBQVFJfRVJSKHByaXZhdGUtPmNvbmZpZ19yZWdzKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg
dG8gaW9yZW1hcCBtbXN5cy1jb25maWcgcmVzb3VyY2U6ICVkXG4iLAorCQkJcmV0KTsKKwkJcmV0
dXJuIHJldDsKKwl9CisKKwkvKiBJdGVyYXRlIG92ZXIgc2libGluZyBESVNQIGZ1bmN0aW9uIGJs
b2NrcyAqLworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoZGV2LT5vZl9ub2RlLT5wYXJlbnQsIG5v
ZGUpIHsKKwkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7CisJCWVudW0gbXRrX2Rk
cF9jb21wX3R5cGUgY29tcF90eXBlOworCQlpbnQgY29tcF9pZDsKKworCQlvZl9pZCA9IG9mX21h
dGNoX25vZGUobXRrX2RkcF9jb21wX2R0X2lkcywgbm9kZSk7CisJCWlmICghb2ZfaWQpCisJCQlj
b250aW51ZTsKKworCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobm9kZSkpIHsKKwkJCWRl
dl9kYmcoZGV2LCAiU2tpcHBpbmcgZGlzYWJsZWQgY29tcG9uZW50ICVzXG4iLAorCQkJCW5vZGUt
PmZ1bGxfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNvbXBfdHlwZSA9IChlbnVtIG10
a19kZHBfY29tcF90eXBlKW9mX2lkLT5kYXRhOworCisJCWlmIChjb21wX3R5cGUgPT0gTVRLX0RJ
U1BfTVVURVgpIHsKKwkJCXByaXZhdGUtPm11dGV4X25vZGUgPSBvZl9ub2RlX2dldChub2RlKTsK
KwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQobm9k
ZSwgY29tcF90eXBlKTsKKwkJaWYgKGNvbXBfaWQgPCAwKSB7CisJCQlkZXZfd2FybihkZXYsICJT
a2lwcGluZyB1bmtub3duIGNvbXBvbmVudCAlc1xuIiwKKwkJCQkgbm9kZS0+ZnVsbF9uYW1lKTsK
KwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHJpdmF0ZS0+Y29tcF9ub2RlW2NvbXBfaWRdID0gb2Zf
bm9kZV9nZXQobm9kZSk7CisKKwkJLyoKKwkJICogQ3VycmVudGx5IG9ubHkgdGhlIE9WTCwgRFNJ
LCBhbmQgRFBJIGJsb2NrcyBoYXZlIHNlcGFyYXRlCisJCSAqIGNvbXBvbmVudCBwbGF0Zm9ybSBk
cml2ZXJzIGFuZCBpbml0aWFsaXplIHRoZWlyIG93biBERFAKKwkJICogY29tcG9uZW50IHN0cnVj
dHVyZS4gVGhlIG90aGVycyBhcmUgaW5pdGlhbGl6ZWQgaGVyZS4KKwkJICovCisJCWlmIChjb21w
X3R5cGUgPT0gTVRLX0RJU1BfT1ZMIHx8CisJCSAgICBjb21wX3R5cGUgPT0gTVRLX0RTSSB8fAor
CQkgICAgY29tcF90eXBlID09IE1US19EUEkpIHsKKwkJCWRldl9pbmZvKGRldiwgIkFkZGluZyBj
b21wb25lbnQgbWF0Y2ggZm9yICVzXG4iLAorCQkJCSBub2RlLT5mdWxsX25hbWUpOworCQkJY29t
cG9uZW50X21hdGNoX2FkZChkZXYsICZtYXRjaCwgY29tcGFyZV9vZiwgbm9kZSk7CisJCX0gZWxz
ZSB7CisJCQlzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wOworCisJCQljb21wID0gZGV2bV9remFs
bG9jKGRldiwgc2l6ZW9mKCpjb21wKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWNvbXApIHsKKwkJ
CQlyZXQgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJyX25vZGU7CisJCQl9CisKKwkJCXJldCA9IG10
a19kZHBfY29tcF9pbml0KGRldiwgbm9kZSwgY29tcCwgY29tcF9pZCwgTlVMTCk7CisJCQlpZiAo
cmV0KQorCQkJCWdvdG8gZXJyX25vZGU7CisKKwkJCXByaXZhdGUtPmRkcF9jb21wW2NvbXBfaWRd
ID0gY29tcDsKKwkJfQorCX0KKworCWlmICghcHJpdmF0ZS0+bXV0ZXhfbm9kZSkgeworCQlkZXZf
ZXJyKGRldiwgIkZhaWxlZCB0byBmaW5kIGRpc3AtbXV0ZXggbm9kZVxuIik7CisJCXJldCA9IC1F
Tk9ERVY7CisJCWdvdG8gZXJyX25vZGU7CisJfQorCisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsK
KworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXZhdGUpOworCisJcmV0ID0gY29tcG9u
ZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaChkZXYsICZtdGtfZHJtX29wcywgbWF0Y2gpOworCWlm
IChyZXQpCisJCWdvdG8gZXJyX3BtOworCisJcmV0dXJuIDA7CisKK2Vycl9wbToKKwlwbV9ydW50
aW1lX2Rpc2FibGUoZGV2KTsKK2Vycl9ub2RlOgorCW9mX25vZGVfcHV0KHByaXZhdGUtPm11dGV4
X25vZGUpOworCWZvciAoaSA9IDA7IGkgPCBERFBfQ09NUE9ORU5UX0lEX01BWDsgaSsrKQorCQlv
Zl9ub2RlX3B1dChwcml2YXRlLT5jb21wX25vZGVbaV0pOworCXJldHVybiByZXQ7Cit9CisKK3N0
YXRpYyBpbnQgbXRrX2RybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK
KwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEo
cGRldik7CisJaW50IGk7CisKKwljb21wb25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmbXRr
X2RybV9vcHMpOworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwlvZl9ub2RlX3B1
dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlmb3IgKGkgPSAwOyBpIDwgRERQX0NPTVBPTkVOVF9J
RF9NQVg7IGkrKykKKwkJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+Y29tcF9ub2RlW2ldKTsKKworCXJl
dHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IG10a19kcm1f
c3lzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZh
dGUgKnByaXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAq
ZHJtID0gcHJpdmF0ZS0+ZHJtOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOworCisJZHJt
X2ttc19oZWxwZXJfcG9sbF9kaXNhYmxlKGRybSk7CisKKwlkcm1fbW9kZXNldF9sb2NrX2FsbChk
cm0pOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgJmRybS0+bW9kZV9jb25maWcuY29ubmVj
dG9yX2xpc3QsIGhlYWQpIHsKKwkJaW50IG9sZF9kcG1zID0gY29ubi0+ZHBtczsKKworCQlpZiAo
Y29ubi0+ZnVuY3MtPmRwbXMpCisJCQljb25uLT5mdW5jcy0+ZHBtcyhjb25uLCBEUk1fTU9ERV9E
UE1TX09GRik7CisKKwkJLyogU2V0IHRoZSBvbGQgbW9kZSBiYWNrIHRvIHRoZSBjb25uZWN0b3Ig
Zm9yIHJlc3VtZSAqLworCQljb25uLT5kcG1zID0gb2xkX2RwbXM7CisJfQorCWRybV9tb2Rlc2V0
X3VubG9ja19hbGwoZHJtKTsKKworCURSTV9ERUJVR19EUklWRVIoIm10a19kcm1fc3lzX3N1c3Bl
bmRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19kcm1fc3lzX3Jlc3VtZShz
dHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9
IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRl
LT5kcm07CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm47CisKKwlkcm1fbW9kZXNldF9sb2Nr
X2FsbChkcm0pOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgJmRybS0+bW9kZV9jb25maWcu
Y29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaW50IGRlc2lyZWRfbW9kZSA9IGNvbm4tPmRwbXM7
CisKKwkJLyoKKwkJICogYXQgc3VzcGVuZCB0aW1lLCB3ZSBzYXZlIGRwbXMgdG8gY29ubmVjdG9y
LT5kcG1zLAorCQkgKiByZXN0b3JlIHRoZSBvbGRfZHBtcywgYW5kIGF0IGN1cnJlbnQgdGltZSwg
dGhlIGNvbm5lY3RvcgorCQkgKiBkcG1zIHN0YXR1cyBtdXN0IGJlIERSTV9NT0RFX0RQTVNfT0ZG
LgorCQkgKi8KKwkJY29ubi0+ZHBtcyA9IERSTV9NT0RFX0RQTVNfT0ZGOworCisJCS8qCisJCSAq
IElmIHRoZSBjb25uZWN0b3IgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGR1cmluZyBzdXNwZW5kLAor
CQkgKiBkaXNjb25uZWN0IGl0IGZyb20gdGhlIGVuY29kZXIgYW5kIGxlYXZlIGl0IG9mZi4gV2Un
bGwgbm90aWZ5CisJCSAqIHVzZXJzcGFjZSBhdCB0aGUgZW5kLgorCQkgKi8KKwkJaWYgKGNvbm4t
PmZ1bmNzLT5kcG1zKQorCQkJY29ubi0+ZnVuY3MtPmRwbXMoY29ubiwgZGVzaXJlZF9tb2RlKTsK
Kwl9CisJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkcm0pOworCisJZHJtX2ttc19oZWxwZXJfcG9s
bF9lbmFibGUoZHJtKTsKKworCURSTV9ERUJVR19EUklWRVIoIm10a19kcm1fc3lzX3Jlc3VtZVxu
Iik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG10
a19kcm1fcG1fb3BzLCBtdGtfZHJtX3N5c19zdXNwZW5kLAorCQkJIG10a19kcm1fc3lzX3Jlc3Vt
ZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kcm1fb2ZfaWRzW10g
PSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtbW1zeXMiLCB9LAorCXsgfQor
fTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RybV9wbGF0Zm9ybV9kcml2
ZXIgPSB7CisJLnByb2JlCT0gbXRrX2RybV9wcm9iZSwKKwkucmVtb3ZlCT0gbXRrX2RybV9yZW1v
dmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAibWVkaWF0ZWstZHJtIiwKKwkJLm9mX21hdGNo
X3RhYmxlID0gbXRrX2RybV9vZl9pZHMsCisJCS5wbSAgICAgPSAmbXRrX2RybV9wbV9vcHMsCisJ
fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICogY29uc3QgbXRrX2RybV9k
cml2ZXJzW10gPSB7CisJJm10a19kcm1fcGxhdGZvcm1fZHJpdmVyLAorCSZtdGtfZGlzcF9vdmxf
ZHJpdmVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXRrX2RybV9pbml0KHZvaWQpCit7CisJ
aW50IHJldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10a19kcm1f
ZHJpdmVycyk7IGkrKykgeworCQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIobXRrX2Ry
bV9kcml2ZXJzW2ldKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIHJl
Z2lzdGVyICVzIGRyaXZlcjogJWRcbiIsCisJCQkgICAgICAgbXRrX2RybV9kcml2ZXJzW2ldLT5k
cml2ZXIubmFtZSwgcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7CisK
K2VycjoKKwl3aGlsZSAoLS1pID49IDApCisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKG10
a19kcm1fZHJpdmVyc1tpXSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4
aXQgbXRrX2RybV9leGl0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBBUlJBWV9TSVpF
KG10a19kcm1fZHJpdmVycykgLSAxOyBpID49IDA7IGktLSkKKwkJcGxhdGZvcm1fZHJpdmVyX3Vu
cmVnaXN0ZXIobXRrX2RybV9kcml2ZXJzW2ldKTsKK30KKworbW9kdWxlX2luaXQobXRrX2RybV9p
bml0KTsKK21vZHVsZV9leGl0KG10a19kcm1fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIllUIFNI
RU4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYXRl
ayBTb0MgRFJNIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0
IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43NWUxYjdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcm1fZHJ2LmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx
NSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dy
YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9EUlZfSAorI2RlZmluZSBNVEtfRFJNX0RS
Vl9ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAu
aCIKKworI2RlZmluZSBNQVhfQ1JUQwkyCisjZGVmaW5lIE1BWF9DT05ORUNUT1IJMgorCitzdHJ1
Y3QgZGV2aWNlOworc3RydWN0IGRldmljZV9ub2RlOworc3RydWN0IGRybV9jcnRjOworc3RydWN0
IGRybV9kZXZpY2U7CitzdHJ1Y3QgZHJtX2ZiX2hlbHBlcjsKK3N0cnVjdCBkcm1fcHJvcGVydHk7
CitzdHJ1Y3QgcmVnbWFwOworCitzdHJ1Y3QgbXRrX2RybV9wcml2YXRlIHsKKwlzdHJ1Y3QgZHJt
X2RldmljZSAqZHJtOworCisJc3RydWN0IGRybV9jcnRjICpjcnRjW01BWF9DUlRDXTsKKwl1bnNp
Z25lZCBpbnQgbnVtX3BpcGVzOworCisJc3RydWN0IGRldmljZV9ub2RlICptdXRleF9ub2RlOwor
CXN0cnVjdCBkZXZpY2UgKm11dGV4X2RldjsKKwl2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzOwor
CXN0cnVjdCBkZXZpY2Vfbm9kZSAqY29tcF9ub2RlW0REUF9DT01QT05FTlRfSURfTUFYXTsKKwlz
dHJ1Y3QgbXRrX2RkcF9jb21wICpkZHBfY29tcFtERFBfQ09NUE9ORU5UX0lEX01BWF07CisKKwlz
dHJ1Y3QgeworCQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7CisJCXN0cnVjdCB3b3Jr
X3N0cnVjdCB3b3JrOworCQlzdHJ1Y3QgbXV0ZXggbG9jazsKKwl9IGNvbW1pdDsKK307CisKK2V4
dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kaXNwX292bF9kcml2ZXI7CisKKyNlbmRp
ZiAvKiBNVEtfRFJNX0RSVl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RybV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTQxNmNmCi0tLSAvZGV2L251bGwK
KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpAQCAtMCwwICsxLDE2
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxk
cm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxk
cm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8
bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CisKKyNpbmNs
dWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJt
dGtfZHJtX2dlbS5oIgorCisvKgorICogbXRrIHNwZWNpZmljIGZyYW1lYnVmZmVyIHN0cnVjdHVy
ZS4KKyAqCisgKiBAZmI6IGRybSBmcmFtZWJ1ZmZlciBvYmplY3QuCisgKiBAZ2VtX29iajogYXJy
YXkgb2YgZ2VtIG9iamVjdHMuCisgKi8KK3N0cnVjdCBtdGtfZHJtX2ZiIHsKKwlzdHJ1Y3QgZHJt
X2ZyYW1lYnVmZmVyCWJhc2U7CisJLyogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUg
cGxhbmUgKi8KKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QJKmdlbV9vYmo7Cit9OworCisjZGVmaW5l
IHRvX210a19mYih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IG10a19kcm1fZmIsIGJhc2UpCisK
K3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRrX2ZiX2dldF9nZW1fb2JqKHN0cnVjdCBkcm1fZnJh
bWVidWZmZXIgKmZiKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIo
ZmIpOworCisJcmV0dXJuIG10a19mYi0+Z2VtX29iajsKK30KKworc3RhdGljIGludCBtdGtfZHJt
X2ZiX2NyZWF0ZV9oYW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgIHN0
cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmhhbmRsZSkK
K3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCXJldHVy
biBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBtdGtfZmItPmdlbV9vYmosIGhhbmRs
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fZmJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1l
YnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZi
KTsKKworCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKKworCWRybV9nZW1fb2JqZWN0X3Vu
cmVmZXJlbmNlX3VubG9ja2VkKG10a19mYi0+Z2VtX29iaik7CisKKwlrZnJlZShtdGtfZmIpOwor
fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBtdGtfZHJtX2Zi
X2Z1bmNzID0geworCS5jcmVhdGVfaGFuZGxlID0gbXRrX2RybV9mYl9jcmVhdGVfaGFuZGxlLAor
CS5kZXN0cm95ID0gbXRrX2RybV9mYl9kZXN0cm95LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGtf
ZHJtX2ZiICptdGtfZHJtX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK
KwkJCQkJCSAgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlLAorCQkJCQkJICAgc3RydWN0
IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlp
bnQgcmV0OworCisJaWYgKGRybV9mb3JtYXRfbnVtX3BsYW5lcyhtb2RlLT5waXhlbF9mb3JtYXQp
ICE9IDEpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJbXRrX2ZiID0ga3phbGxvYyhz
aXplb2YoKm10a19mYiksIEdGUF9LRVJORUwpOworCWlmICghbXRrX2ZiKQorCQlyZXR1cm4gRVJS
X1BUUigtRU5PTUVNKTsKKworCWRybV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdCgmbXRrX2Zi
LT5iYXNlLCBtb2RlKTsKKworCW10a19mYi0+Z2VtX29iaiA9IG9iajsKKworCXJldCA9IGRybV9m
cmFtZWJ1ZmZlcl9pbml0KGRldiwgJm10a19mYi0+YmFzZSwgJm10a19kcm1fZmJfZnVuY3MpOwor
CWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmcmFtZWJ1ZmZl
clxuIik7CisJCWtmcmVlKG10a19mYik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJ
cmV0dXJuIG10a19mYjsKK30KKworLyoKKyAqIFdhaXQgZm9yIGFueSBleGNsdXNpdmUgZmVuY2Ug
aW4gZmIncyBnZW0gb2JqZWN0J3MgcmVzZXJ2YXRpb24gb2JqZWN0LgorICoKKyAqIFJldHVybnMg
LUVSRVNUQVJUU1lTIGlmIGludGVycnVwdGVkLCBlbHNlIDAuCisgKi8KK2ludCBtdGtfZmJfd2Fp
dChzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg
KmdlbTsKKwlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2OworCWxvbmcgcmV0OworCisJ
aWYgKCFmYikKKwkJcmV0dXJuIDA7CisKKwlnZW0gPSBtdGtfZmJfZ2V0X2dlbV9vYmooZmIpOwor
CWlmICghZ2VtIHx8ICFnZW0tPmRtYV9idWYgfHwgIWdlbS0+ZG1hX2J1Zi0+cmVzdikKKwkJcmV0
dXJuIDA7CisKKwlyZXN2ID0gZ2VtLT5kbWFfYnVmLT5yZXN2OworCXJldCA9IHJlc2VydmF0aW9u
X29iamVjdF93YWl0X3RpbWVvdXRfcmN1KHJlc3YsIGZhbHNlLCB0cnVlLAorCQkJCQkJICBNQVhf
U0NIRURVTEVfVElNRU9VVCk7CisJLyogTUFYX1NDSEVEVUxFX1RJTUVPVVQgb24gc3VjY2Vzcywg
LUVSRVNUQVJUU1lTIGlmIGludGVycnVwdGVkICovCisJaWYgKFdBUk5fT04ocmV0IDwgMCkpCisJ
CXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq
bXRrX2RybV9tb2RlX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAg
ICAgc3RydWN0IGRybV9maWxlICpmaWxlLAorCQkJCQkgICAgICAgc3RydWN0IGRybV9tb2RlX2Zi
X2NtZDIgKmNtZCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiOworCXN0cnVjdCBkcm1f
Z2VtX29iamVjdCAqZ2VtOworCXVuc2lnbmVkIGludCB3aWR0aCA9IGNtZC0+d2lkdGg7CisJdW5z
aWduZWQgaW50IGhlaWdodCA9IGNtZC0+aGVpZ2h0OworCXVuc2lnbmVkIGludCBzaXplLCBicHA7
CisJaW50IHJldDsKKworCWlmIChkcm1fZm9ybWF0X251bV9wbGFuZXMoY21kLT5waXhlbF9mb3Jt
YXQpICE9IDEpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJZ2VtID0gZHJtX2dlbV9v
YmplY3RfbG9va3VwKGRldiwgZmlsZSwgY21kLT5oYW5kbGVzWzBdKTsKKwlpZiAoIWdlbSkKKwkJ
cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CisKKwlicHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChj
bWQtPnBpeGVsX2Zvcm1hdCwgMCk7CisJc2l6ZSA9IChoZWlnaHQgLSAxKSAqIGNtZC0+cGl0Y2hl
c1swXSArIHdpZHRoICogYnBwOworCXNpemUgKz0gY21kLT5vZmZzZXRzWzBdOworCisJaWYgKGdl
bS0+c2l6ZSA8IHNpemUpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byB1bnJlZmVyZW5jZTsK
Kwl9CisKKwltdGtfZmIgPSBtdGtfZHJtX2ZyYW1lYnVmZmVyX2luaXQoZGV2LCBjbWQsIGdlbSk7
CisJaWYgKElTX0VSUihtdGtfZmIpKSB7CisJCXJldCA9IFBUUl9FUlIobXRrX2ZiKTsKKwkJZ290
byB1bnJlZmVyZW5jZTsKKwl9CisKKwlyZXR1cm4gJm10a19mYi0+YmFzZTsKKwordW5yZWZlcmVu
Y2U6CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ2VtKTsKKwlyZXR1cm4g
RVJSX1BUUihyZXQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kcm1fZmIuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5YzdhZgotLS0gL2Rldi9udWxsCisrKyBi
L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmgKQEAgLTAsMCArMSwyOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9n
cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9G
Ql9ICisjZGVmaW5lIE1US19EUk1fRkJfSAorCisjZGVmaW5lIE1BWF9GQl9PQkoJMworCitzdHJ1
Y3QgZHJtX2dlbV9vYmplY3QgKm10a19mYl9nZXRfZ2VtX29iaihzdHJ1Y3QgZHJtX2ZyYW1lYnVm
ZmVyICpmYik7CitpbnQgbXRrX2ZiX3dhaXQoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpOwor
c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqbXRrX2RybV9tb2RlX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJt
X2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlLAorCQkJCQkg
ICAgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKmNtZCk7CisKK3ZvaWQgbXRrX2RybV9tb2Rl
X291dHB1dF9wb2xsX2NoYW5nZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitpbnQgbXRrX2Zi
ZGV2X2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgbXRrX2ZiZGV2X2Rlc3Ry
b3koc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0ZCX0ggKi8K
ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jIGIvZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOTZjYzk4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jCkBAIC0wLDAgKzEsMjI3IEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg
YXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVk
ZSA8ZHJtL2RybV9nZW0uaD4KKworI2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCisKK3N0YXRpYyBz
dHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZHJtX2dlbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNl
ICpkZXYsCisJCQkJCQl1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IG10a19kcm1fZ2Vt
X29iaiAqbXRrX2dlbV9vYmo7CisJaW50IHJldDsKKworCXNpemUgPSByb3VuZF91cChzaXplLCBQ
QUdFX1NJWkUpOworCisJbXRrX2dlbV9vYmogPSBremFsbG9jKHNpemVvZigqbXRrX2dlbV9vYmop
LCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19nZW1fb2JqKQorCQlyZXR1cm4gRVJSX1BUUigtRU5P
TUVNKTsKKworCXJldCA9IGRybV9nZW1fb2JqZWN0X2luaXQoZGV2LCAmbXRrX2dlbV9vYmotPmJh
c2UsIHNpemUpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRp
YWxpemUgZ2VtIG9iamVjdFxuIik7CisJCWtmcmVlKG10a19nZW1fb2JqKTsKKwkJcmV0dXJuIEVS
Ul9QVFIocmV0KTsKKwl9CisKKwlyZXR1cm4gbXRrX2dlbV9vYmo7Cit9CisKK3N0cnVjdCBtdGtf
ZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAor
CQkJCQkgICB1bnNpZ25lZCBsb25nIHNpemUsIGJvb2wgYWxsb2Nfa21hcCkKK3sKKwlzdHJ1Y3Qg
bXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwor
CWludCByZXQ7CisKKwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChkZXYsIHNpemUpOworCWlm
IChJU19FUlIobXRrX2dlbSkpCisJCXJldHVybiBFUlJfQ0FTVChtdGtfZ2VtKTsKKworCW9iaiA9
ICZtdGtfZ2VtLT5iYXNlOworCisJaW5pdF9kbWFfYXR0cnMoJm10a19nZW0tPmRtYV9hdHRycyk7
CisJZG1hX3NldF9hdHRyKERNQV9BVFRSX1dSSVRFX0NPTUJJTkUsICZtdGtfZ2VtLT5kbWFfYXR0
cnMpOworCisJaWYgKCFhbGxvY19rbWFwKQorCQlkbWFfc2V0X2F0dHIoRE1BX0FUVFJfTk9fS0VS
TkVMX01BUFBJTkcsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJbXRrX2dlbS0+Y29va2llID0g
ZG1hX2FsbG9jX2F0dHJzKGRldi0+ZGV2LCBvYmotPnNpemUsCisJCQkJKGRtYV9hZGRyX3QgKikm
bXRrX2dlbS0+ZG1hX2FkZHIsIEdGUF9LRVJORUwsCisJCQkJJm10a19nZW0tPmRtYV9hdHRycyk7
CisJaWYgKCFtdGtfZ2VtLT5jb29raWUpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2Nh
dGUgJXp4IGJ5dGUgZG1hIGJ1ZmZlciIsIG9iai0+c2l6ZSk7CisJCXJldCA9IC1FTk9NRU07CisJ
CWdvdG8gZXJyX2dlbV9mcmVlOworCX0KKworCWlmIChhbGxvY19rbWFwKQorCQltdGtfZ2VtLT5r
dmFkZHIgPSBtdGtfZ2VtLT5jb29raWU7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJjb29raWUgPSAl
cCBkbWFfYWRkciA9ICVwYWRcbiIsCisJCQkgbXRrX2dlbS0+Y29va2llLCAmbXRrX2dlbS0+ZG1h
X2FkZHIpOworCisJcmV0dXJuIG10a19nZW07CisKK2Vycl9nZW1fZnJlZToKKwlkcm1fZ2VtX29i
amVjdF9yZWxlYXNlKG9iaik7CisJa2ZyZWUobXRrX2dlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0
KTsKK30KKwordm9pZCBtdGtfZHJtX2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmpl
Y3QgKm9iaikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtID0gdG9fbXRrX2dl
bV9vYmoob2JqKTsKKworCWRtYV9mcmVlX2F0dHJzKG9iai0+ZGV2LT5kZXYsIG9iai0+c2l6ZSwg
bXRrX2dlbS0+Y29va2llLAorCQkgICAgICAgbXRrX2dlbS0+ZG1hX2FkZHIsICZtdGtfZ2VtLT5k
bWFfYXR0cnMpOworCisJLyogcmVsZWFzZSBmaWxlIHBvaW50ZXIgdG8gZ2VtIG9iamVjdC4gKi8K
Kwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisKKwlrZnJlZShtdGtfZ2VtKTsKK30KKwor
aW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBz
dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVt
YiAqYXJncykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCByZXQ7
CisKKwlhcmdzLT5waXRjaCA9IGFyZ3MtPndpZHRoICogRElWX1JPVU5EX1VQKGFyZ3MtPmJwcCwg
OCk7CisJYXJncy0+c2l6ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0OworCisJbXRrX2dl
bSA9IG10a19kcm1fZ2VtX2NyZWF0ZShkZXYsIGFyZ3MtPnNpemUsIGZhbHNlKTsKKwlpZiAoSVNf
RVJSKG10a19nZW0pKQorCQlyZXR1cm4gUFRSX0VSUihtdGtfZ2VtKTsKKworCS8qCisJICogYWxs
b2NhdGUgYSBpZCBvZiBpZHIgdGFibGUgd2hlcmUgdGhlIG9iaiBpcyByZWdpc3RlcmVkCisJICog
YW5kIGhhbmRsZSBoYXMgdGhlIGlkIHdoYXQgdXNlciBjYW4gc2VlLgorCSAqLworCXJldCA9IGRy
bV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZtdGtfZ2VtLT5iYXNlLCAmYXJncy0+aGFu
ZGxlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9oYW5kbGVfY3JlYXRlOworCisJLyogZHJvcCBy
ZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cuICovCisJZHJtX2dl
bV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm10a19nZW0tPmJhc2UpOworCisJcmV0dXJu
IDA7CisKK2Vycl9oYW5kbGVfY3JlYXRlOgorCW10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KCZtdGtf
Z2VtLT5iYXNlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbXRrX2RybV9nZW1fZHVtYl9tYXBf
b2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCXN0cnVjdCBkcm1fZGV2aWNl
ICpkZXYsIHVpbnQzMl90IGhhbmRsZSwKKwkJCQl1aW50NjRfdCAqb2Zmc2V0KQoreworCXN0cnVj
dCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwlvYmogPSBkcm1fZ2VtX29iamVj
dF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGhhbmRsZSk7CisJaWYgKCFvYmopIHsKKwkJRFJNX0VS
Uk9SKCJmYWlsZWQgdG8gbG9va3VwIGdlbSBvYmplY3QuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7
CisJfQorCisJcmV0ID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwlpZiAocmV0
KQorCQlnb3RvIG91dDsKKworCSpvZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJm9i
ai0+dm1hX25vZGUpOworCURSTV9ERUJVR19LTVMoIm9mZnNldCA9IDB4JWxseFxuIiwgKm9mZnNl
dCk7CisKK291dDoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwor
CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9nZW1fb2JqZWN0X21tYXAoc3Ry
dWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2
bWEpCisKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW0gPSB0
b19tdGtfZ2VtX29iaihvYmopOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBvYmotPmRldjsK
KworCS8qCisJICogZG1hX2FsbG9jX2F0dHJzKCkgYWxsb2NhdGVkIGEgc3RydWN0IHBhZ2UgdGFi
bGUgZm9yIG10a19nZW0sIHNvIGNsZWFyCisJICogVk1fUEZOTUFQIGZsYWcgdGhhdCB3YXMgc2V0
IGJ5IGRybV9nZW1fbW1hcF9vYmooKS9kcm1fZ2VtX21tYXAoKS4KKwkgKi8KKwl2bWEtPnZtX2Zs
YWdzICY9IH5WTV9QRk5NQVA7CisJdm1hLT52bV9wZ29mZiA9IDA7CisKKwlyZXQgPSBkbWFfbW1h
cF9hdHRycyhkcm0tPmRldiwgdm1hLCBtdGtfZ2VtLT5jb29raWUsIG10a19nZW0tPmRtYV9hZGRy
LAorCQkJICAgICBvYmotPnNpemUsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCWlmIChyZXQpCisJ
CWRybV9nZW1fdm1fY2xvc2Uodm1hKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBtdGtfZHJt
X2dlbV9tbWFwX2J1ZihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFf
c3RydWN0ICp2bWEpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2Jq
LCBvYmotPnNpemUsIHZtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBt
dGtfZHJtX2dlbV9vYmplY3RfbW1hcChvYmosIHZtYSk7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9t
bWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlz
dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9t
bWFwKGZpbHAsIHZtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW9iaiA9IHZtYS0+
dm1fcHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIG10a19kcm1fZ2VtX29iamVjdF9tbWFwKG9iaiwg
dm1hKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgc2dfdGFibGUgZm9yIHRoaXMgR0VNIG9iamVj
dC4KKyAqIE5vdGU6IEJvdGggdGhlIHRhYmxlJ3MgY29udGVudHMsIGFuZCB0aGUgc2dfdGFibGUg
aXRzZWxmIG11c3QgYmUgZnJlZWQgYnkKKyAqICAgICAgIHRoZSBjYWxsZXIuCisgKiBSZXR1cm5z
IGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIHNnX3RhYmxlLCBvciBhbiBFUlJfUFRS
KCkgZXJyb3IuCisgKi8KK3N0cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFi
bGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29i
aiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9iaik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRy
bSA9IG9iai0+ZGV2OworCXN0cnVjdCBzZ190YWJsZSAqc2d0OworCWludCByZXQ7CisKKwlzZ3Qg
PSBremFsbG9jKHNpemVvZigqc2d0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZ3QpCisJCXJldHVy
biBFUlJfUFRSKC1FTk9NRU0pOworCisJcmV0ID0gZG1hX2dldF9zZ3RhYmxlX2F0dHJzKGRybS0+
ZGV2LCBzZ3QsIG10a19nZW0tPmNvb2tpZSwKKwkJCQkgICAgbXRrX2dlbS0+ZG1hX2FkZHIsIG9i
ai0+c2l6ZSwKKwkJCQkgICAgJm10a19nZW0tPmRtYV9hdHRycyk7CisJaWYgKHJldCkgeworCQlE
Uk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBzZ3QsICVkXG4iLCByZXQpOworCQlrZnJlZShz
Z3QpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBzZ3Q7Cit9CmRpZmYg
LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uaCBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjliZGVlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX2RybV9nZW0uaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAq
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMg
cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfTVRLX0RSTV9HRU1fSF8KKyNkZWZpbmUgX01U
S19EUk1fR0VNX0hfCisKKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorCisvKgorICogbXRrIGRy
bSBidWZmZXIgc3RydWN0dXJlLgorICoKKyAqIEBiYXNlOiBhIGdlbSBvYmplY3QuCisgKgktIGEg
bmV3IGhhbmRsZSB0byB0aGlzIGdlbSBvYmplY3Qgd291bGQgYmUgY3JlYXRlZAorICoJYnkgZHJt
X2dlbV9oYW5kbGVfY3JlYXRlKCkuCisgKiBAY29va2llOiB0aGUgcmV0dXJuIHZhbHVlIG9mIGRt
YV9hbGxvY19hdHRycygpLCBrZWVwIGl0IGZvciBkbWFfZnJlZV9hdHRycygpCisgKiBAa3ZhZGRy
OiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIG9mIGdlbSBidWZmZXIuCisgKiBAZG1hX2FkZHI6IGRt
YSBhZGRyZXNzIG9mIGdlbSBidWZmZXIuCisgKiBAZG1hX2F0dHJzOiBkbWEgYXR0cmlidXRlcyBv
ZiBnZW0gYnVmZmVyLgorICoKKyAqIFAuUy4gdGhpcyBvYmplY3Qgd291bGQgYmUgdHJhbnNmZXJy
ZWQgdG8gdXNlciBhcyBrbXNfYm8uaGFuZGxlIHNvCisgKgl1c2VyIGNhbiBhY2Nlc3MgdGhlIGJ1
ZmZlciB0aHJvdWdoIGttc19iby5oYW5kbGUuCisgKi8KK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmog
eworCXN0cnVjdCBkcm1fZ2VtX29iamVjdAliYXNlOworCXZvaWQJCQkqY29va2llOworCXZvaWQJ
CQkqa3ZhZGRyOworCWRtYV9hZGRyX3QJCWRtYV9hZGRyOworCXN0cnVjdCBkbWFfYXR0cnMJZG1h
X2F0dHJzOworfTsKKworI2RlZmluZSB0b19tdGtfZ2VtX29iaih4KQljb250YWluZXJfb2YoeCwg
c3RydWN0IG10a19kcm1fZ2VtX29iaiwgYmFzZSkKKwordm9pZCBtdGtfZHJtX2dlbV9mcmVlX29i
amVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSk7CitzdHJ1Y3QgbXRrX2RybV9nZW1fb2Jq
ICptdGtfZHJtX2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJdW5zaWduZWQg
bG9uZyBzaXplLCBib29sIGFsbG9jX2ttYXApOworaW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRl
KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBz
dHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpOworaW50IG10a19kcm1fZ2VtX2R1bWJf
bWFwX29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJc3RydWN0IGRybV9kZXZp
Y2UgKmRldiwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCAqb2Zmc2V0KTsKK2ludCBtdGtfZHJt
X2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7
CitpbnQgbXRrX2RybV9nZW1fbW1hcF9idWYoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJ
CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK3N0cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9w
cmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMgYi9k
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmU5YjZiZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICog
Q29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogQ0sgSHUgPGNrLmh1
QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9h
dG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxk
cm0vZHJtX3BsYW5lX2hlbHBlci5oPgorCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5j
bHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCisjaW5j
bHVkZSAibXRrX2RybV9mYi5oIgorI2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCisjaW5jbHVkZSAi
bXRrX2RybV9wbGFuZS5oIgorCitzdGF0aWMgY29uc3QgdWludDMyX3QgZm9ybWF0c1tdID0gewor
CURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwlEUk1fRk9STUFU
X1JHQjU2NSwKK307CisKK3N0YXRpYyB2b2lkIG10a19wbGFuZV9lbmFibGUoc3RydWN0IG10a19k
cm1fcGxhbmUgKm10a19wbGFuZSwgYm9vbCBlbmFibGUsCisJCQkgICAgIGRtYV9hZGRyX3QgYWRk
ciwgc3RydWN0IGRybV9yZWN0ICpkZXN0KQoreworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0g
Jm10a19wbGFuZS0+YmFzZTsKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHRvX210
a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCXVuc2lnbmVkIGludCBwaXRjaCwgZm9ybWF0
OworCWludCB4LCB5OworCisJaWYgKFdBUk5fT04oIXBsYW5lLT5zdGF0ZSB8fCAoZW5hYmxlICYm
ICFwbGFuZS0+c3RhdGUtPmZiKSkpCisJCXJldHVybjsKKworCWlmIChwbGFuZS0+c3RhdGUtPmZi
KSB7CisJCXBpdGNoID0gcGxhbmUtPnN0YXRlLT5mYi0+cGl0Y2hlc1swXTsKKwkJZm9ybWF0ID0g
cGxhbmUtPnN0YXRlLT5mYi0+cGl4ZWxfZm9ybWF0OworCX0gZWxzZSB7CisJCXBpdGNoID0gMDsK
KwkJZm9ybWF0ID0gRFJNX0ZPUk1BVF9SR0JBODg4ODsKKwl9CisKKwl4ID0gcGxhbmUtPnN0YXRl
LT5jcnRjX3g7CisJeSA9IHBsYW5lLT5zdGF0ZS0+Y3J0Y195OworCisJaWYgKHggPCAwKSB7CisJ
CWFkZHIgLT0geCAqIDQ7CisJCXggPSAwOworCX0KKworCWlmICh5IDwgMCkgeworCQlhZGRyIC09
IHkgKiBwaXRjaDsKKwkJeSA9IDA7CisJfQorCisJc3RhdGUtPnBlbmRpbmcuZW5hYmxlID0gZW5h
YmxlOworCXN0YXRlLT5wZW5kaW5nLnBpdGNoID0gcGl0Y2g7CisJc3RhdGUtPnBlbmRpbmcuZm9y
bWF0ID0gZm9ybWF0OworCXN0YXRlLT5wZW5kaW5nLmFkZHIgPSBhZGRyOworCXN0YXRlLT5wZW5k
aW5nLnggPSB4OworCXN0YXRlLT5wZW5kaW5nLnkgPSB5OworCXN0YXRlLT5wZW5kaW5nLndpZHRo
ID0gZGVzdC0+eDIgLSBkZXN0LT54MTsKKwlzdGF0ZS0+cGVuZGluZy5oZWlnaHQgPSBkZXN0LT55
MiAtIGRlc3QtPnkxOworCXN0YXRlLT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsKK30KKworc3RhdGlj
IHZvaWQgbXRrX3BsYW5lX3Jlc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVj
dCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlOworCisJaWYgKHBsYW5lLT5zdGF0ZSkgeworCQlpZiAo
cGxhbmUtPnN0YXRlLT5mYikKKwkJCWRybV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5jZShwbGFuZS0+
c3RhdGUtPmZiKTsKKworCQlzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUp
OworCQltZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKwl9IGVsc2UgeworCQlzdGF0
ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAoIXN0YXRlKQor
CQkJcmV0dXJuOworCQlwbGFuZS0+c3RhdGUgPSAmc3RhdGUtPmJhc2U7CisJfQorCisJc3RhdGUt
PmJhc2UucGxhbmUgPSBwbGFuZTsKKwlzdGF0ZS0+cGVuZGluZy5mb3JtYXQgPSBEUk1fRk9STUFU
X1JHQjU2NTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm10a19wbGFuZV9k
dXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IG10a19w
bGFuZV9zdGF0ZSAqb2xkX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7
CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6
ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVybiBOVUxMOwor
CisJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUocGxhbmUsICZzdGF0
ZS0+YmFzZSk7CisKKwlXQVJOX09OKHN0YXRlLT5iYXNlLnBsYW5lICE9IHBsYW5lKTsKKworCXN0
YXRlLT5wZW5kaW5nID0gb2xkX3N0YXRlLT5wZW5kaW5nOworCisJcmV0dXJuICZzdGF0ZS0+YmFz
ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9wbGFuZV9kZXN0cm95X3N0YXRlKHN0cnVjdCBk
cm1fcGxhbmUgKnBsYW5lLAorCQkJCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sK
KwlfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUocGxhbmUsIHN0YXRlKTsK
KwlrZnJlZSh0b19tdGtfcGxhbmVfc3RhdGUoc3RhdGUpKTsKK30KKworCitzdGF0aWMgY29uc3Qg
c3RydWN0IGRybV9wbGFuZV9mdW5jcyBtdGtfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFu
ZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKKwkuZGlzYWJsZV9wbGFuZSA9IGRy
bV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCisJLmRlc3Ryb3kgPSBkcm1fcGxhbmVfY2xl
YW51cCwKKwkucmVzZXQgPSBtdGtfcGxhbmVfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3Rh
dGUgPSBtdGtfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9
IG10a19kcm1fcGxhbmVfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBpbnQgbXRrX3BsYW5l
X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgIHN0cnVjdCBkcm1f
cGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3Rh
dGUtPmZiOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwlib29sIHZpc2li
bGU7CisJc3RydWN0IGRybV9yZWN0IGRlc3QgPSB7CisJCS54MSA9IHN0YXRlLT5jcnRjX3gsCisJ
CS55MSA9IHN0YXRlLT5jcnRjX3ksCisJCS54MiA9IHN0YXRlLT5jcnRjX3ggKyBzdGF0ZS0+Y3J0
Y193LAorCQkueTIgPSBzdGF0ZS0+Y3J0Y195ICsgc3RhdGUtPmNydGNfaCwKKwl9OworCXN0cnVj
dCBkcm1fcmVjdCBzcmMgPSB7CisJCS8qIDE2LjE2IGZpeGVkIHBvaW50ICovCisJCS54MSA9IHN0
YXRlLT5zcmNfeCwKKwkJLnkxID0gc3RhdGUtPnNyY195LAorCQkueDIgPSBzdGF0ZS0+c3JjX3gg
KyBzdGF0ZS0+c3JjX3csCisJCS55MiA9IHN0YXRlLT5zcmNfeSArIHN0YXRlLT5zcmNfaCwKKwl9
OworCXN0cnVjdCBkcm1fcmVjdCBjbGlwID0geyAwLCB9OworCisJaWYgKCFmYikKKwkJcmV0dXJu
IDA7CisKKwlpZiAoIW10a19mYl9nZXRfZ2VtX29iaihmYikpIHsKKwkJRFJNX0RFQlVHX0tNUygi
YnVmZmVyIGlzIG51bGxcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpZiAoIXN0YXRl
LT5jcnRjKQorCQlyZXR1cm4gMDsKKworCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRj
X3N0YXRlKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmNydGMpOworCWlmIChJU19FUlIoY3J0Y19zdGF0
ZSkpCisJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOworCisJY2xpcC54MiA9IGNydGNfc3Rh
dGUtPm1vZGUuaGRpc3BsYXk7CisJY2xpcC55MiA9IGNydGNfc3RhdGUtPm1vZGUudmRpc3BsYXk7
CisKKwlyZXR1cm4gZHJtX3BsYW5lX2hlbHBlcl9jaGVja191cGRhdGUocGxhbmUsIHN0YXRlLT5j
cnRjLCBmYiwKKwkJCQkJICAgICZzcmMsICZkZXN0LCAmY2xpcCwKKwkJCQkJICAgIERSTV9QTEFO
RV9IRUxQRVJfTk9fU0NBTElORywKKwkJCQkJICAgIERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElO
RywKKwkJCQkJICAgIHRydWUsIHRydWUsICZ2aXNpYmxlKTsKK30KKworc3RhdGljIHZvaWQgbXRr
X3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgIHN0
cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0
YXRlICpzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCXN0cnVjdCBk
cm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5iYXNlLmNydGM7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0
ICpnZW07CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKKwlzdHJ1Y3QgbXRrX2Ry
bV9wbGFuZSAqbXRrX3BsYW5lID0gdG9fbXRrX3BsYW5lKHBsYW5lKTsKKwlzdHJ1Y3QgZHJtX3Jl
Y3QgZGVzdCA9IHsKKwkJLngxID0gc3RhdGUtPmJhc2UuY3J0Y194LAorCQkueTEgPSBzdGF0ZS0+
YmFzZS5jcnRjX3ksCisJCS54MiA9IHN0YXRlLT5iYXNlLmNydGNfeCArIHN0YXRlLT5iYXNlLmNy
dGNfdywKKwkJLnkyID0gc3RhdGUtPmJhc2UuY3J0Y195ICsgc3RhdGUtPmJhc2UuY3J0Y19oLAor
CX07CisJc3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlpZiAoIWNydGMpCisJCXJl
dHVybjsKKworCWNsaXAueDIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0ZS0+bW9kZS5oZGlzcGxh
eTsKKwljbGlwLnkyID0gc3RhdGUtPmJhc2UuY3J0Yy0+c3RhdGUtPm1vZGUudmRpc3BsYXk7CisJ
ZHJtX3JlY3RfaW50ZXJzZWN0KCZkZXN0LCAmY2xpcCk7CisKKwlnZW0gPSBtdGtfZmJfZ2V0X2dl
bV9vYmooc3RhdGUtPmJhc2UuZmIpOworCW10a19nZW0gPSB0b19tdGtfZ2VtX29iaihnZW0pOwor
CW10a19wbGFuZV9lbmFibGUobXRrX3BsYW5lLCB0cnVlLCBtdGtfZ2VtLT5kbWFfYWRkciwgJmRl
c3QpOworCisJbXRrX2RybV9jcnRjX2NoZWNrX2ZsdXNoKGNydGMpOworfQorCitzdGF0aWMgdm9p
ZCBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJ
ICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IG10a19w
bGFuZV9zdGF0ZSAqc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwor
CXN0YXRlLT5wZW5kaW5nLmVuYWJsZSA9IGZhbHNlOworCXdtYigpOworCXN0YXRlLT5wZW5kaW5n
LmRpcnR5ID0gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVy
X2Z1bmNzIG10a19wbGFuZV9oZWxwZXJfZnVuY3MgPSB7CisJLmF0b21pY19jaGVjayA9IG10a19w
bGFuZV9hdG9taWNfY2hlY2ssCisJLmF0b21pY191cGRhdGUgPSBtdGtfcGxhbmVfYXRvbWljX3Vw
ZGF0ZSwKKwkuYXRvbWljX2Rpc2FibGUgPSBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUsCit9Owor
CitpbnQgbXRrX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19k
cm1fcGxhbmUgKm10a19wbGFuZSwKKwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywg
ZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlLAorCQkgICB1bnNpZ25lZCBpbnQgenBvcykKK3sKKwlp
bnQgZXJyOworCisJZXJyID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRldiwgJm10a19wbGFu
ZS0+YmFzZSwgcG9zc2libGVfY3J0Y3MsCisJCQkmbXRrX3BsYW5lX2Z1bmNzLCBmb3JtYXRzLCBB
UlJBWV9TSVpFKGZvcm1hdHMpLCB0eXBlKTsKKworCWlmIChlcnIpIHsKKwkJRFJNX0VSUk9SKCJm
YWlsZWQgdG8gaW5pdGlhbGl6ZSBwbGFuZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZHJt
X3BsYW5lX2hlbHBlcl9hZGQoJm10a19wbGFuZS0+YmFzZSwgJm10a19wbGFuZV9oZWxwZXJfZnVu
Y3MpOworCW10a19wbGFuZS0+aWR4ID0genBvczsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0
IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCBiL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNzJhN2IzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX3BsYW5lLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENLIEh1IDxjay5odUBtZWRpYXRlay5j
b20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov
CisKKyNpZm5kZWYgX01US19EUk1fUExBTkVfSF8KKyNkZWZpbmUgX01US19EUk1fUExBTkVfSF8K
KworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisK
K3N0cnVjdCBtdGtfZHJtX3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lCQliYXNlOworCXVuc2ln
bmVkIGludAkJCWlkeDsKK307CisKK3N0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0ZSB7CisJ
Ym9vbAkJCQljb25maWc7CisJYm9vbAkJCQllbmFibGU7CisJZG1hX2FkZHJfdAkJCWFkZHI7CisJ
dW5zaWduZWQgaW50CQkJcGl0Y2g7CisJdW5zaWduZWQgaW50CQkJZm9ybWF0OworCXVuc2lnbmVk
IGludAkJCXg7CisJdW5zaWduZWQgaW50CQkJeTsKKwl1bnNpZ25lZCBpbnQJCQl3aWR0aDsKKwl1
bnNpZ25lZCBpbnQJCQloZWlnaHQ7CisJYm9vbAkJCQlkaXJ0eTsKK307CisKK3N0cnVjdCBtdGtf
cGxhbmVfc3RhdGUgeworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUJCWJhc2U7CisJc3RydWN0IG10
a19wbGFuZV9wZW5kaW5nX3N0YXRlCXBlbmRpbmc7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVj
dCBtdGtfZHJtX3BsYW5lICp0b19tdGtfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7
CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwbGFuZSwgc3RydWN0IG10a19kcm1fcGxhbmUsIGJhc2Up
OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKgordG9fbXRrX3Bs
YW5lX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBjb250
YWluZXJfb2Yoc3RhdGUsIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUsIGJhc2UpOworfQorCitpbnQg
bXRrX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19kcm1fcGxh
bmUgKm10a19wbGFuZSwKKwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51bSBk
cm1fcGxhbmVfdHlwZSB0eXBlLAorCQkgICB1bnNpZ25lZCBpbnQgenBvcyk7CisKKyNlbmRpZgot
LSAKMi42LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo
dHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==