From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v12 02/14] drm/mediatek: Add DRM Driver for Mediatek SoC
MT8173.
Date: Tue, 1 Mar 2016 16:20:18 +0100
Message-ID: <1456845630-2786-3-git-send-email-p.zabel@pengutronix.de>
References: <1456845630-2786-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: <1456845630-2786-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 , Stephen Boyd , Michael Turquette , Jie Qiu , Cawa Cheng , Mao Huang , 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 , Emil Velikov , Tomasz Figa , Kumar Gala
List-Id: linux-mediatek@lists.infradead.org
RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0
aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUApzdWJzeXN0ZW0uIEl0
IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0cmVhbXMgZnJvbSB0aGUKT1ZM
MC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywgcmVzcGVjdGl2ZWx5LgoKU2ln
bmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWVQg
U2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IERhbmllbCBLdXJ0eiA8
ZGprdXJ0ekBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IEJpYmJ5IEhzaWVoIDxiaWJieS5o
c2llaEBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IE1hbyBIdWFuZyA8bGl0dGxlY3ZyQGNo
cm9taXVtLm9yZz4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRy
b25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjExOgogLSBJbnN0ZWFkIG9mIGRpc2FibGluZyBh
bGwgcGxhbmVzIGluaXRhbGx5LCBjb25maWd1cmUgdGhlbSBhY2NvcmRpbmcgdG8KICAgdGhlaXIg
c3RhdGUuIFRoaXMgd2F5IHRoZSBwbGFuZSBkb2Vzbid0IHN0YXkgZGlzYWJsZWQgdW50aWwgdGhl
IGZpcnN0CiAgIGZsaXAgKHdoaWNoIG1heSBuZXZlciBoYXBwZW4pLgogLSBEaXNhYmxlIHRoZSBw
aXBlIGluc3RlYWQgb2YgY3Jhc2hpbmcgaWYgYW55IG9mIGl0cyBjb21wb25lbnRzIGFyZQogICBk
aXNhYmxlZCBvciBtaXNzaW5nIGluIHRoZSBkZXZpY2UgdHJlZS4KIC0gQ29ycmVjdCBwYXJhbWV0
ZXIgdHlwZSBpbiB0aGUgbXRrX2RybV9nZW1fY3JlYXRlKCkgZGVjbGFyYXRpb24KLS0tCiBkcml2
ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMv
Z3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL0tjb25maWcgICAgICAgICAgICB8ICAxMiArCiBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgICAgIHwgIDExICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZGlzcF9vdmwuYyAgICAgfCAzMDIgKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jICAgIHwgMjQwICsrKysrKysrKysrKwogZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jICAgICB8IDU4MiArKysrKysrKysr
KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRj
LmggICAgIHwgIDMyICsrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYyAg
ICAgIHwgMzU1ICsrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RybV9kZHAuaCAgICAgIHwgIDQxICsrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9kZHBfY29tcC5jIHwgMjI1ICsrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9kZHBfY29tcC5oIHwgMTUwICsrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX2Rydi5jICAgICAgfCA1NzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBk
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCAgICAgIHwgIDUzICsrKwogZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYyAgICAgICB8IDE2NSArKysrKysrKwog
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuaCAgICAgICB8ICAyMyArKwogZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmMgICAgICB8IDI2NiArKysrKysrKysr
KysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uaCAgICAgIHwgIDU5ICsr
KwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYyAgICB8IDI0MCArKysr
KysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmggICAgfCAg
NTkgKysrCiAyMCBmaWxlcyBjaGFuZ2VkLCAzMzk3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAw
NjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0
IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYwogY3JlYXRlIG1vZGUgMTAw
NjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9yZG1hLmMKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmgKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCiBj
cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2Nv
bXAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2RkcF9jb21wLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL210a19kcm1fZmIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX2ZiLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX2RybV9nZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHJtX2dlbS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19kcm1fcGxhbmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k
cm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IDhhZTdhYjYuLmY3YjBk
NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1
L2RybS9LY29uZmlnCkBAIC0yNjksMyArMjY5LDUgQEAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0v
aW14L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZyIKIAogc291
cmNlICJkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01h
a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDYxNzY2ZGUuLjdiMGQxYWIg
MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9k
cm0vTWFrZWZpbGUKQEAgLTY5LDYgKzY5LDcgQEAgb2JqLSQoQ09ORklHX0RSTV9NU00pICs9IG1z
bS8KIG9iai0kKENPTkZJR19EUk1fVEVHUkEpICs9IHRlZ3JhLwogb2JqLSQoQ09ORklHX0RSTV9T
VEkpICs9IHN0aS8KIG9iai0kKENPTkZJR19EUk1fSU1YKSArPSBpbXgvCitvYmotJChDT05GSUdf
RFJNX01FRElBVEVLKSArPSBtZWRpYXRlay8KIG9iai15CQkJKz0gaTJjLwogb2JqLXkJCQkrPSBw
YW5lbC8KIG9iai15CQkJKz0gYnJpZGdlLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGFkODkyCi0tLSAvZGV2L251bGwKKysrIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKQEAgLTAsMCArMSwxMiBAQAorY29uZmln
IERSTV9NRURJQVRFSworCXRyaXN0YXRlICJEUk0gU3VwcG9ydCBmb3IgTWVkaWF0ZWsgU29DcyIK
KwlkZXBlbmRzIG9uIERSTQorCWRlcGVuZHMgb24gQVJDSF9NRURJQVRFSyB8fCAoQVJNICYmIENP
TVBJTEVfVEVTVCkKKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgSU9NTVVfRE1BCisJ
c2VsZWN0IE1US19TTUkKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUg
YSBNZWRpYXRlayBTb0NzLgorCSAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtZWRpYXRlay1k
cm0KKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGtlcm5lbCBtb2RlIHNldHRpbmcgYW5kCisJICBi
dWZmZXIgbWFuYWdlbWVudCB0byB1c2Vyc3BhY2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRiZGU3YwotLS0gL2Rldi9udWxs
CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQpAQCAtMCwwICsxLDExIEBA
CittZWRpYXRlay1kcm0teSA6PSBtdGtfZGlzcF9vdmwubyBcCisJCSAgbXRrX2Rpc3BfcmRtYS5v
IFwKKwkJICBtdGtfZHJtX2NydGMubyBcCisJCSAgbXRrX2RybV9kZHAubyBcCisJCSAgbXRrX2Ry
bV9kZHBfY29tcC5vIFwKKwkJICBtdGtfZHJtX2Rydi5vIFwKKwkJICBtdGtfZHJtX2ZiLm8gXAor
CQkgIG10a19kcm1fZ2VtLm8gXAorCQkgIG10a19kcm1fcGxhbmUubworCitvYmotJChDT05GSUdf
RFJNX01FRElBVEVLKSArPSBtZWRpYXRlay1kcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kaXNwX292bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNjI2NzFm
Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292
bC5jCkBAIC0wLDAgKzEsMzAyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVr
IEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
Ki8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5j
bHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cisj
aW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNl
Lmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9j
b21wLmgiCisKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0lOVEVOCQkJMHgwMDA0CisjZGVmaW5lIE9W
TF9GTUVfQ1BMX0lOVAkJCQkJQklUKDEpCisjZGVmaW5lIERJU1BfUkVHX09WTF9JTlRTVEEJCQkw
eDAwMDgKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0VOCQkJCTB4MDAwYworI2RlZmluZSBESVNQX1JF
R19PVkxfUlNUCQkJMHgwMDE0CisjZGVmaW5lIERJU1BfUkVHX09WTF9ST0lfU0laRQkJCTB4MDAy
MAorI2RlZmluZSBESVNQX1JFR19PVkxfUk9JX0JHQ0xSCQkJMHgwMDI4CisjZGVmaW5lIERJU1Bf
UkVHX09WTF9TUkNfQ09OCQkJMHgwMDJjCisjZGVmaW5lIERJU1BfUkVHX09WTF9DT04obikJCQko
MHgwMDMwICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1NSQ19TSVpFKG4pCQko
MHgwMDM4ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX09GRlNFVChuKQkJCSgw
eDAwM2MgKyAweDIwICogKG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfUElUQ0gobikJCQkoMHgw
MDQ0ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JETUFfQ1RSTChuKQkJKDB4
MDBjMCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9SRE1BX0dNQyhuKQkJKDB4
MDBjOCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9BRERSKG4pCQkJKDB4MGY0
MCArIDB4MjAgKiAobikpCisKKyNkZWZpbmUJT1ZMX1JETUFfTUVNX0dNQwkweDQwNDAyMDIwCisK
KyNkZWZpbmUgT1ZMX0NPTl9CWVRFX1NXQVAJQklUKDI0KQorI2RlZmluZSBPVkxfQ09OX0NMUkZN
VF9SR0I1NjUJKDAgPDwgMTIpCisjZGVmaW5lIE9WTF9DT05fQ0xSRk1UX1JHQjg4OAkoMSA8PCAx
MikKKyNkZWZpbmUgT1ZMX0NPTl9DTFJGTVRfUkdCQTg4ODgJKDIgPDwgMTIpCisjZGVmaW5lIE9W
TF9DT05fQ0xSRk1UX0FSR0I4ODg4CSgzIDw8IDEyKQorI2RlZmluZQlPVkxfQ09OX0FFTgkJQklU
KDgpCisjZGVmaW5lCU9WTF9DT05fQUxQSEEJCTB4ZmYKKworLyoqCisgKiBzdHJ1Y3QgbXRrX2Rp
c3Bfb3ZsIC0gRElTUF9PVkwgZHJpdmVyIHN0cnVjdHVyZQorICogQGRkcF9jb21wIC0gc3RydWN0
dXJlIGNvbnRhaW5pbmcgdHlwZSBlbnVtIGFuZCBoYXJkd2FyZSByZXNvdXJjZXMKKyAqIEBjcnRj
IC0gYXNzb2NpYXRlZCBjcnRjIHRvIHJlcG9ydCB2YmxhbmsgZXZlbnRzIHRvCisgKi8KK3N0cnVj
dCBtdGtfZGlzcF9vdmwgeworCXN0cnVjdCBtdGtfZGRwX2NvbXAJCWRkcF9jb21wOworCXN0cnVj
dCBkcm1fY3J0YwkJCSpjcnRjOworfTsKKworc3RhdGljIGlycXJldHVybl90IG10a19kaXNwX292
bF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG10a19kaXNw
X292bCAqcHJpdiA9IGRldl9pZDsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSAmcHJpdi0+
ZGRwX2NvbXA7CisKKwkvKiBDbGVhciBmcmFtZSBjb21wbGV0aW9uIGludGVycnVwdCAqLworCXdy
aXRlbCgweDAsIG92bC0+cmVncyArIERJU1BfUkVHX09WTF9JTlRTVEEpOworCisJaWYgKCFwcml2
LT5jcnRjKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwltdGtfY3J0Y19kZHBfaXJxKHByaXYtPmNy
dGMsIG92bCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19v
dmxfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCSAgc3RydWN0
IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBjb250YWlu
ZXJfb2YoY29tcCwgc3RydWN0IG10a19kaXNwX292bCwKKwkJCQkJCSBkZHBfY29tcCk7CisKKwlw
cml2LT5jcnRjID0gY3J0YzsKKwl3cml0ZWxfcmVsYXhlZChPVkxfRk1FX0NQTF9JTlQsIGNvbXAt
PnJlZ3MgKyBESVNQX1JFR19PVkxfSU5URU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2Rp
c2FibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10a19k
aXNwX292bCAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsLAor
CQkJCQkJIGRkcF9jb21wKTsKKworCXByaXYtPmNydGMgPSBOVUxMOworCXdyaXRlbF9yZWxheGVk
KDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9JTlRFTik7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19vdmxfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWxfcmVs
YXhlZCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfRU4pOworfQorCitzdGF0aWMgdm9p
ZCBtdGtfb3ZsX3N0b3Aoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWxfcmVs
YXhlZCgweDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfRU4pOworfQorCitzdGF0aWMgdm9p
ZCBtdGtfb3ZsX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQg
dywKKwkJCSAgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCit7CisJaWYg
KHcgIT0gMCAmJiBoICE9IDApCisJCXdyaXRlbF9yZWxheGVkKGggPDwgMTYgfCB3LCBjb21wLT5y
ZWdzICsgRElTUF9SRUdfT1ZMX1JPSV9TSVpFKTsKKwl3cml0ZWxfcmVsYXhlZCgweDAsIGNvbXAt
PnJlZ3MgKyBESVNQX1JFR19PVkxfUk9JX0JHQ0xSKTsKKworCXdyaXRlbCgweDEsIGNvbXAtPnJl
Z3MgKyBESVNQX1JFR19PVkxfUlNUKTsKKwl3cml0ZWwoMHgwLCBjb21wLT5yZWdzICsgRElTUF9S
RUdfT1ZMX1JTVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfbGF5ZXJfb24oc3RydWN0IG10
a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVn
OworCisJd3JpdGVsKDB4MSwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9SRE1BX0NUUkwoaWR4
KSk7CisJd3JpdGVsKE9WTF9SRE1BX01FTV9HTUMsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxf
UkRNQV9HTUMoaWR4KSk7CisKKwlyZWcgPSByZWFkbChjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZM
X1NSQ19DT04pOworCXJlZyA9IHJlZyB8IEJJVChpZHgpOworCXdyaXRlbChyZWcsIGNvbXAtPnJl
Z3MgKyBESVNQX1JFR19PVkxfU1JDX0NPTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfbGF5
ZXJfb2ZmKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgpCit7CisJ
dW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJlYWRsKGNvbXAtPnJlZ3MgKyBESVNQX1JFR19P
VkxfU1JDX0NPTik7CisJcmVnID0gcmVnICYgfkJJVChpZHgpOworCXdyaXRlbChyZWcsIGNvbXAt
PnJlZ3MgKyBESVNQX1JFR19PVkxfU1JDX0NPTik7CisKKwl3cml0ZWwoMHgwLCBjb21wLT5yZWdz
ICsgRElTUF9SRUdfT1ZMX1JETUFfQ1RSTChpZHgpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGlu
dCBvdmxfZm10X2NvbnZlcnQodW5zaWduZWQgaW50IGZtdCkKK3sKKwlzd2l0Y2ggKGZtdCkgewor
CWRlZmF1bHQ6CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwkJcmV0dXJuIE9WTF9DT05fQ0xS
Rk1UX1JHQjU2NTsKKwljYXNlIERSTV9GT1JNQVRfQkdSNTY1OgorCQlyZXR1cm4gT1ZMX0NPTl9D
TFJGTVRfUkdCNTY1IHwgT1ZMX0NPTl9CWVRFX1NXQVA7CisJY2FzZSBEUk1fRk9STUFUX1JHQjg4
ODoKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQjg4ODsKKwljYXNlIERSTV9GT1JNQVRfQkdS
ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdCODg4IHwgT1ZMX0NPTl9CWVRFX1NXQVA7
CisJY2FzZSBEUk1fRk9STUFUX1JHQlg4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoK
KwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX0FSR0I4ODg4OworCWNhc2UgRFJNX0ZPUk1BVF9CR1JY
ODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6CisJCXJldHVybiBPVkxfQ09OX0NMUkZN
VF9BUkdCODg4OCB8IE9WTF9DT05fQllURV9TV0FQOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4
ODoKKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9S
R0JBODg4ODsKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FC
R1I4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdCQTg4ODggfCBPVkxfQ09OX0JZVEVf
U1dBUDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfbGF5ZXJfY29uZmlnKHN0cnVjdCBt
dGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgsCisJCQkJIHN0cnVjdCBtdGtfcGxh
bmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0ZSAqcGVu
ZGluZyA9ICZzdGF0ZS0+cGVuZGluZzsKKwl1bnNpZ25lZCBpbnQgYWRkciA9IHBlbmRpbmctPmFk
ZHI7CisJdW5zaWduZWQgaW50IHBpdGNoID0gcGVuZGluZy0+cGl0Y2ggJiAweGZmZmY7CisJdW5z
aWduZWQgaW50IGZtdCA9IHBlbmRpbmctPmZvcm1hdDsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0g
KHBlbmRpbmctPnkgPDwgMTYpIHwgcGVuZGluZy0+eDsKKwl1bnNpZ25lZCBpbnQgc3JjX3NpemUg
PSAocGVuZGluZy0+aGVpZ2h0IDw8IDE2KSB8IHBlbmRpbmctPndpZHRoOworCXVuc2lnbmVkIGlu
dCBjb247CisKKwlpZiAoIXBlbmRpbmctPmVuYWJsZSkKKwkJbXRrX292bF9sYXllcl9vZmYoY29t
cCwgaWR4KTsKKworCWNvbiA9IG92bF9mbXRfY29udmVydChmbXQpOworCWlmIChpZHggIT0gMCkK
KwkJY29uIHw9IE9WTF9DT05fQUVOIHwgT1ZMX0NPTl9BTFBIQTsKKworCXdyaXRlbF9yZWxheGVk
KGNvbiwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9DT04oaWR4KSk7CisJd3JpdGVsX3JlbGF4
ZWQocGl0Y2gsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUElUQ0goaWR4KSk7CisJd3JpdGVs
X3JlbGF4ZWQoc3JjX3NpemUsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfU1JDX1NJWkUoaWR4
KSk7CisJd3JpdGVsX3JlbGF4ZWQob2Zmc2V0LCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX09G
RlNFVChpZHgpKTsKKwl3cml0ZWxfcmVsYXhlZChhZGRyLCBjb21wLT5yZWdzICsgRElTUF9SRUdf
T1ZMX0FERFIoaWR4KSk7CisKKwlpZiAocGVuZGluZy0+ZW5hYmxlKQorCQltdGtfb3ZsX2xheWVy
X29uKGNvbXAsIGlkeCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1
bmNzIG10a19kaXNwX292bF9mdW5jcyA9IHsKKwkuY29uZmlnID0gbXRrX292bF9jb25maWcsCisJ
LnN0YXJ0ID0gbXRrX292bF9zdGFydCwKKwkuc3RvcCA9IG10a19vdmxfc3RvcCwKKwkuZW5hYmxl
X3ZibGFuayA9IG10a19vdmxfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSBtdGtf
b3ZsX2Rpc2FibGVfdmJsYW5rLAorCS5sYXllcl9vbiA9IG10a19vdmxfbGF5ZXJfb24sCisJLmxh
eWVyX29mZiA9IG10a19vdmxfbGF5ZXJfb2ZmLAorCS5sYXllcl9jb25maWcgPSBtdGtfb3ZsX2xh
eWVyX2NvbmZpZywKK307CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX2JpbmQoc3RydWN0IGRl
dmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICAgIHZvaWQgKmRhdGEpCit7
CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0
cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gbXRr
X2RkcF9jb21wX3JlZ2lzdGVyKGRybV9kZXYsICZwcml2LT5kZHBfY29tcCk7CisJaWYgKHJldCA8
IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29tcG9uZW50ICVzOiAl
ZFxuIiwKKwkJCWRldi0+b2Zfbm9kZS0+ZnVsbF9uYW1lLCByZXQpOworCQlyZXR1cm4gcmV0Owor
CX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfZGlzcF9vdmxfdW5iaW5kKHN0
cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJCXZvaWQgKmRhdGEp
Cit7CisJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwor
CXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKKworCW10a19kZHBfY29tcF91bnJl
Z2lzdGVyKGRybV9kZXYsICZwcml2LT5kZHBfY29tcCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1
Y3QgY29tcG9uZW50X29wcyBtdGtfZGlzcF9vdmxfY29tcG9uZW50X29wcyA9IHsKKwkuYmluZAk9
IG10a19kaXNwX292bF9iaW5kLAorCS51bmJpbmQgPSBtdGtfZGlzcF9vdmxfdW5iaW5kLAorfTsK
Kworc3RhdGljIGludCBtdGtfZGlzcF9vdmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq
cGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtf
ZGlzcF9vdmwgKnByaXY7CisJaW50IGNvbXBfaWQ7CisJaW50IGlycTsKKwlpbnQgcmV0OworCisJ
cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlm
ICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBk
ZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gaXJxOworCisJcmV0ID0gZGV2bV9yZXF1
ZXN0X2lycShkZXYsIGlycSwgbXRrX2Rpc3Bfb3ZsX2lycV9oYW5kbGVyLAorCQkJICAgICAgIElS
UUZfVFJJR0dFUl9OT05FLCBkZXZfbmFtZShkZXYpLCBwcml2KTsKKwlpZiAocmV0IDwgMCkgewor
CQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGlycSAlZDogJWRcbiIsIGlycSwgcmV0
KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChk
ZXYtPm9mX25vZGUsIE1US19ESVNQX09WTCk7CisJaWYgKGNvbXBfaWQgPCAwKSB7CisJCWRldl9l
cnIoZGV2LCAiRmFpbGVkIHRvIGlkZW50aWZ5IGJ5IGFsaWFzOiAlZFxuIiwgY29tcF9pZCk7CisJ
CXJldHVybiBjb21wX2lkOworCX0KKworCXJldCA9IG10a19kZHBfY29tcF9pbml0KGRldiwgZGV2
LT5vZl9ub2RlLCAmcHJpdi0+ZGRwX2NvbXAsIGNvbXBfaWQsCisJCQkJJm10a19kaXNwX292bF9m
dW5jcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXpl
IGNvbXBvbmVudDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcGxhdGZvcm1f
c2V0X2RydmRhdGEocGRldiwgcHJpdik7CisKKwlyZXQgPSBjb21wb25lbnRfYWRkKGRldiwgJm10
a19kaXNwX292bF9jb21wb25lbnRfb3BzKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRldiwgIkZh
aWxlZCB0byBhZGQgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisK
K3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw
ZGV2KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJm10a19kaXNwX292bF9jb21wb25l
bnRfb3BzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj
ZV9pZCBtdGtfZGlzcF9vdmxfZHJpdmVyX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9
ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1vdmwiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0Vf
VEFCTEUob2YsIG10a19kaXNwX292bF9kcml2ZXJfZHRfbWF0Y2gpOworCitzdHJ1Y3QgcGxhdGZv
cm1fZHJpdmVyIG10a19kaXNwX292bF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10a19kaXNwX292
bF9wcm9iZSwKKwkucmVtb3ZlCQk9IG10a19kaXNwX292bF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7
CisJCS5uYW1lCT0gIm1lZGlhdGVrLWRpc3Atb3ZsIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUs
CisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kaXNwX292bF9kcml2ZXJfZHRfbWF0Y2gsCisJfSwK
K307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5j
IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjhhZTg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYwpAQCAtMCwwICsxLDI0MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFt
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK
KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
dmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5o
PgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgor
I2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgor
I2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAibXRrX2RybV9j
cnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1BfUkVH
X1JETUFfSU5UX0VOQUJMRQkJMHgwMDAwCisjZGVmaW5lIERJU1BfUkVHX1JETUFfSU5UX1NUQVRV
UwkJMHgwMDA0CisjZGVmaW5lIFJETUFfVEFSR0VUX0xJTkVfSU5UCQkJCUJJVCg1KQorI2RlZmlu
ZSBSRE1BX0ZJRk9fVU5ERVJGTE9XX0lOVAkJCQlCSVQoNCkKKyNkZWZpbmUgUkRNQV9FT0ZfQUJO
T1JNQUxfSU5UCQkJCUJJVCgzKQorI2RlZmluZSBSRE1BX0ZSQU1FX0VORF9JTlQJCQkJQklUKDIp
CisjZGVmaW5lIFJETUFfRlJBTUVfU1RBUlRfSU5UCQkJCUJJVCgxKQorI2RlZmluZSBSRE1BX1JF
R19VUERBVEVfSU5UCQkJCUJJVCgwKQorI2RlZmluZSBESVNQX1JFR19SRE1BX0dMT0JBTF9DT04J
CTB4MDAxMAorI2RlZmluZSBSRE1BX0VOR0lORV9FTgkJCQkJQklUKDApCisjZGVmaW5lIERJU1Bf
UkVHX1JETUFfU0laRV9DT05fMAkJMHgwMDE0CisjZGVmaW5lIERJU1BfUkVHX1JETUFfU0laRV9D
T05fMQkJMHgwMDE4CisjZGVmaW5lIERJU1BfUkVHX1JETUFfVEFSR0VUX0xJTkUJCTB4MDAxYwor
I2RlZmluZSBESVNQX1JFR19SRE1BX0ZJRk9fQ09OCQkJMHgwMDQwCisjZGVmaW5lIFJETUFfRklG
T19VTkRFUkZMT1dfRU4JCQkJQklUKDMxKQorI2RlZmluZSBSRE1BX0ZJRk9fUFNFVURPX1NJWkUo
Ynl0ZXMpCQkJKCgoYnl0ZXMpIC8gMTYpIDw8IDE2KQorI2RlZmluZSBSRE1BX09VVFBVVF9WQUxJ
RF9GSUZPX1RIUkVTSE9MRChieXRlcykJCSgoYnl0ZXMpIC8gMTYpCisKKy8qKgorICogc3RydWN0
IG10a19kaXNwX3JkbWEgLSBESVNQX1JETUEgZHJpdmVyIHN0cnVjdHVyZQorICogQGRkcF9jb21w
IC0gc3RydWN0dXJlIGNvbnRhaW5pbmcgdHlwZSBlbnVtIGFuZCBoYXJkd2FyZSByZXNvdXJjZXMK
KyAqIEBjcnRjIC0gYXNzb2NpYXRlZCBjcnRjIHRvIHJlcG9ydCBpcnEgZXZlbnRzIHRvCisgKi8K
K3N0cnVjdCBtdGtfZGlzcF9yZG1hIHsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wCQlkZHBfY29tcDsK
KwlzdHJ1Y3QgZHJtX2NydGMJCQkqY3J0YzsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtf
ZGlzcF9yZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qg
bXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGRldl9pZDsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpyZG1h
ID0gJnByaXYtPmRkcF9jb21wOworCisJLyogQ2xlYXIgZnJhbWUgY29tcGxldGlvbiBpbnRlcnJ1
cHQgKi8KKwl3cml0ZWwoMHgwLCByZG1hLT5yZWdzICsgRElTUF9SRUdfUkRNQV9JTlRfU1RBVFVT
KTsKKworCWlmICghcHJpdi0+Y3J0YykKKwkJcmV0dXJuIElSUV9OT05FOworCisJbXRrX2NydGNf
ZGRwX2lycShwcml2LT5jcnRjLCByZG1hKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwor
c3RhdGljIHZvaWQgcmRtYV91cGRhdGVfYml0cyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1
bnNpZ25lZCBpbnQgcmVnLAorCQkJICAgICB1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50
IHZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wID0gcmVhZGwoY29tcC0+cmVncyArIHJlZyk7CisK
Kwl0bXAgPSAodG1wICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOworCXdyaXRlbCh0bXAsIGNvbXAt
PnJlZ3MgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBtdGtfcmRtYV9lbmFibGVfdmJsYW5rKHN0
cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJICAgc3RydWN0IGRybV9jcnRjICpjcnRjKQor
eworCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVj
dCBtdGtfZGlzcF9yZG1hLAorCQkJCQkJICBkZHBfY29tcCk7CisKKwlwcml2LT5jcnRjID0gY3J0
YzsKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRSwgUkRN
QV9GUkFNRV9FTkRfSU5ULAorCQkJIFJETUFfRlJBTUVfRU5EX0lOVCk7Cit9CisKK3N0YXRpYyB2
b2lkIG10a19yZG1hX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7
CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXYgPSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0
IG10a19kaXNwX3JkbWEsCisJCQkJCQkgIGRkcF9jb21wKTsKKworCXByaXYtPmNydGMgPSBOVUxM
OworCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9JTlRfRU5BQkxFLCBSRE1B
X0ZSQU1FX0VORF9JTlQsIDApOworfQorCitzdGF0aWMgdm9pZCBtdGtfcmRtYV9zdGFydChzdHJ1
Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9S
RUdfUkRNQV9HTE9CQUxfQ09OLCBSRE1BX0VOR0lORV9FTiwKKwkJCSBSRE1BX0VOR0lORV9FTik7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19yZG1hX3N0b3Aoc3RydWN0IG10a19kZHBfY29tcCAqY29t
cCkKK3sKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfR0xPQkFMX0NPTiwg
UkRNQV9FTkdJTkVfRU4sIDApOworfQorCitzdGF0aWMgdm9pZCBtdGtfcmRtYV9jb25maWcoc3Ry
dWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgd2lkdGgsCisJCQkgICAgdW5zaWduZWQg
aGVpZ2h0LCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCit7CisJdW5zaWduZWQgaW50IHRocmVzaG9s
ZDsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JF
R19SRE1BX1NJWkVfQ09OXzAsIDB4ZmZmLCB3aWR0aCk7CisJcmRtYV91cGRhdGVfYml0cyhjb21w
LCBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzEsIDB4ZmZmZmYsIGhlaWdodCk7CisKKwkvKgorCSAq
IEVuYWJsZSBGSUZPIHVuZGVyZmxvdyBzaW5jZSBEU0kgYW5kIERQSSBjYW4ndCBiZSBibG9ja2Vk
LgorCSAqIEtlZXAgdGhlIEZJRk8gcHNldWRvIHNpemUgcmVzZXQgZGVmYXVsdCBvZiA4IEtpQi4g
U2V0IHRoZQorCSAqIG91dHB1dCB0aHJlc2hvbGQgdG8gNiBtaWNyb3NlY29uZHMgd2l0aCA3LzYg
b3ZlcmhlYWQgdG8KKwkgKiBhY2NvdW50IGZvciBibGFua2luZywgYW5kIHdpdGggYSBwaXhlbCBk
ZXB0aCBvZiA0IGJ5dGVzOgorCSAqLworCXRocmVzaG9sZCA9IHdpZHRoICogaGVpZ2h0ICogdnJl
ZnJlc2ggKiA0ICogNyAvIDEwMDAwMDA7CisJcmVnID0gUkRNQV9GSUZPX1VOREVSRkxPV19FTiB8
CisJICAgICAgUkRNQV9GSUZPX1BTRVVET19TSVpFKFNaXzhLKSB8CisJICAgICAgUkRNQV9PVVRQ
VVRfVkFMSURfRklGT19USFJFU0hPTEQodGhyZXNob2xkKTsKKwl3cml0ZWwocmVnLCBjb21wLT5y
ZWdzICsgRElTUF9SRUdfUkRNQV9GSUZPX0NPTik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg
bXRrX2RkcF9jb21wX2Z1bmNzIG10a19kaXNwX3JkbWFfZnVuY3MgPSB7CisJLmNvbmZpZyA9IG10
a19yZG1hX2NvbmZpZywKKwkuc3RhcnQgPSBtdGtfcmRtYV9zdGFydCwKKwkuc3RvcCA9IG10a19y
ZG1hX3N0b3AsCisJLmVuYWJsZV92YmxhbmsgPSBtdGtfcmRtYV9lbmFibGVfdmJsYW5rLAorCS5k
aXNhYmxlX3ZibGFuayA9IG10a19yZG1hX2Rpc2FibGVfdmJsYW5rLAorfTsKKworc3RhdGljIGlu
dCBtdGtfZGlzcF9yZG1hX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpt
YXN0ZXIsCisJCQkgICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpw
cml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYg
PSBkYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtX2Rl
diwgJnByaXYtPmRkcF9jb21wKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZh
aWxlZCB0byByZWdpc3RlciBjb21wb25lbnQgJXM6ICVkXG4iLAorCQkJZGV2LT5vZl9ub2RlLT5m
dWxsX25hbWUsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7CisKK30KKwor
c3RhdGljIHZvaWQgbXRrX2Rpc3BfcmRtYV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1
Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkJIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19kaXNw
X3JkbWEgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAq
ZHJtX2RldiA9IGRhdGE7CisKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm1fZGV2LCAmcHJp
di0+ZGRwX2NvbXApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgbXRr
X2Rpc3BfcmRtYV9jb21wb25lbnRfb3BzID0geworCS5iaW5kCT0gbXRrX2Rpc3BfcmRtYV9iaW5k
LAorCS51bmJpbmQgPSBtdGtfZGlzcF9yZG1hX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQgbXRr
X2Rpc3BfcmRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVj
dCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19kaXNwX3JkbWEgKnByaXY7
CisJaW50IGNvbXBfaWQ7CisJaW50IGlycTsKKwlpbnQgcmV0OworCisJcHJpdiA9IGRldm1fa3ph
bGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0
dXJuIC1FTk9NRU07CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChp
cnEgPCAwKQorCQlyZXR1cm4gaXJxOworCisJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQo
ZGV2LT5vZl9ub2RlLCBNVEtfRElTUF9SRE1BKTsKKwlpZiAoY29tcF9pZCA8IDApIHsKKwkJZGV2
X2VycihkZXYsICJGYWlsZWQgdG8gaWRlbnRpZnkgYnkgYWxpYXM6ICVkXG4iLCBjb21wX2lkKTsK
KwkJcmV0dXJuIGNvbXBfaWQ7CisJfQorCisJcmV0ID0gbXRrX2RkcF9jb21wX2luaXQoZGV2LCBk
ZXYtPm9mX25vZGUsICZwcml2LT5kZHBfY29tcCwgY29tcF9pZCwKKwkJCQkmbXRrX2Rpc3BfcmRt
YV9mdW5jcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFs
aXplIGNvbXBvbmVudDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogRGlz
YWJsZSBhbmQgY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJd3JpdGVsKDB4MCwgcHJpdi0+
ZGRwX2NvbXAucmVncyArIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRSk7CisJd3JpdGVsKDB4MCwg
cHJpdi0+ZGRwX2NvbXAucmVncyArIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUyk7CisKKwlyZXQg
PSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBtdGtfZGlzcF9yZG1hX2lycV9oYW5kbGVyLAor
CQkJICAgICAgIElSUUZfVFJJR0dFUl9OT05FLCBkZXZfbmFtZShkZXYpLCBwcml2KTsKKwlpZiAo
cmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGlycSAlZDogJWRc
biIsIGlycSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0
YShwZGV2LCBwcml2KTsKKworCXJldCA9IGNvbXBvbmVudF9hZGQoZGV2LCAmbXRrX2Rpc3BfcmRt
YV9jb21wb25lbnRfb3BzKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBh
ZGQgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBp
bnQgbXRrX2Rpc3BfcmRtYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK
Kwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZtdGtfZGlzcF9yZG1hX2NvbXBvbmVudF9vcHMp
OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10
a19kaXNwX3JkbWFfZHJpdmVyX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRp
YXRlayxtdDgxNzMtZGlzcC1yZG1hIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxF
KG9mLCBtdGtfZGlzcF9yZG1hX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0cnVjdCBwbGF0Zm9ybV9k
cml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10a19kaXNwX3JkbWFf
cHJvYmUsCisJLnJlbW92ZQkJPSBtdGtfZGlzcF9yZG1hX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsK
KwkJLm5hbWUJPSAibWVkaWF0ZWstZGlzcC1yZG1hIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUs
CisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kaXNwX3JkbWFfZHJpdmVyX2R0X21hdGNoLAorCX0s
Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5j
IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlM2VmYTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMKQEAgLTAsMCArMSw1ODIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg
KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl
cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YXNtL2JhcnJpZXIu
aD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBl
ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJt
X3BsYW5lX2hlbHBlci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4
L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxzb2MvbWVkaWF0ZWsvc21pLmg+CisKKyNpbmNsdWRl
ICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgIm10
a19kcm1fZGRwLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorI2luY2x1ZGUgIm10
a19kcm1fZ2VtLmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCisvKioKKyAqIHN0cnVj
dCBtdGtfZHJtX2NydGMgLSBNZWRpYVRlayBzcGVjaWZpYyBjcnRjIHN0cnVjdHVyZS4KKyAqIEBi
YXNlOiBjcnRjIG9iamVjdC4KKyAqIEBlbmFibGVkOiByZWNvcmRzIHdoZXRoZXIgY3J0Y19lbmFi
bGUgc3VjY2VlZGVkCisgKiBAcGxhbmVzOiBhcnJheSBvZiA0IG10a19kcm1fcGxhbmUgc3RydWN0
dXJlcywgb25lIGZvciBlYWNoIG92ZXJsYXkgcGxhbmUKKyAqIEBwZW5kaW5nX3BsYW5lczogd2hl
dGhlciBhbnkgcGxhbmUgaGFzIHBlbmRpbmcgY2hhbmdlcyB0byBiZSBhcHBsaWVkCisgKiBAY29u
ZmlnX3JlZ3M6IG1lbW9yeSBtYXBwZWQgbW1zeXMgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGFj
ZQorICogQG11dGV4OiBoYW5kbGUgdG8gb25lIG9mIHRoZSB0ZW4gZGlzcF9tdXRleCBzdHJlYW1z
CisgKiBAZGRwX2NvbXBfbnI6IG51bWJlciBvZiBjb21wb25lbnRzIGluIGRkcF9jb21wCisgKiBA
ZGRwX2NvbXA6IGFycmF5IG9mIHBvaW50ZXJzIHRoZSBtdGtfZGRwX2NvbXAgc3RydWN0dXJlcyB1
c2VkIGJ5IHRoaXMgY3J0YworICovCitzdHJ1Y3QgbXRrX2RybV9jcnRjIHsKKwlzdHJ1Y3QgZHJt
X2NydGMJCQliYXNlOworCWJvb2wJCQkJZW5hYmxlZDsKKworCWJvb2wJCQkJcGVuZGluZ19uZWVk
c192Ymxhbms7CisJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudAkqZXZlbnQ7CisKKwlz
dHJ1Y3QgbXRrX2RybV9wbGFuZQkJcGxhbmVzW09WTF9MQVlFUl9OUl07CisJYm9vbAkJCQlwZW5k
aW5nX3BsYW5lczsKKworCXZvaWQgX19pb21lbQkJCSpjb25maWdfcmVnczsKKwlzdHJ1Y3QgbXRr
X2Rpc3BfbXV0ZXgJCSptdXRleDsKKwl1bnNpZ25lZCBpbnQJCQlkZHBfY29tcF9ucjsKKwlzdHJ1
Y3QgbXRrX2RkcF9jb21wCQkqKmRkcF9jb21wOworfTsKKworc3RydWN0IG10a19jcnRjX3N0YXRl
IHsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUJCWJhc2U7CisKKwlib29sCQkJCXBlbmRpbmdfY29u
ZmlnOworCXVuc2lnbmVkIGludAkJCXBlbmRpbmdfd2lkdGg7CisJdW5zaWduZWQgaW50CQkJcGVu
ZGluZ19oZWlnaHQ7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ192cmVmcmVzaDsKK307CisKK3N0
YXRpYyBpbmxpbmUgc3RydWN0IG10a19kcm1fY3J0YyAqdG9fbXRrX2NydGMoc3RydWN0IGRybV9j
cnRjICpjKQoreworCXJldHVybiBjb250YWluZXJfb2YoYywgc3RydWN0IG10a19kcm1fY3J0Yywg
YmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19jcnRjX3N0YXRlICp0b19tdGtf
Y3J0Y19zdGF0ZShzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnMpCit7CisJcmV0dXJuIGNvbnRhaW5l
cl9vZihzLCBzdHJ1Y3QgbXRrX2NydGNfc3RhdGUsIGJhc2UpOworfQorCitzdGF0aWMgdm9pZCBt
dGtfZHJtX2NydGNfZmluaXNoX3BhZ2VfZmxpcChzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0
YykKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmbXRrX2NydGMtPmJhc2U7CisJdW5zaWdu
ZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjcnRjLT5kZXYtPmV2ZW50X2xv
Y2ssIGZsYWdzKTsKKwlkcm1fc2VuZF92YmxhbmtfZXZlbnQoY3J0Yy0+ZGV2LCBtdGtfY3J0Yy0+
ZXZlbnQtPnBpcGUsIG10a19jcnRjLT5ldmVudCk7CisJZHJtX2NydGNfdmJsYW5rX3B1dChjcnRj
KTsKKwltdGtfY3J0Yy0+ZXZlbnQgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNy
dGMtPmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2Zp
bmlzaF9wYWdlX2ZsaXAoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJZHJtX2Ny
dGNfaGFuZGxlX3ZibGFuaygmbXRrX2NydGMtPmJhc2UpOworCWlmIChtdGtfY3J0Yy0+cGVuZGlu
Z19uZWVkc192YmxhbmspIHsKKwkJbXRrX2RybV9jcnRjX2ZpbmlzaF9wYWdlX2ZsaXAobXRrX2Ny
dGMpOworCQltdGtfY3J0Yy0+cGVuZGluZ19uZWVkc192YmxhbmsgPSBmYWxzZTsKKwl9Cit9CisK
K3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK
K3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOwor
CWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQor
CQljbGtfdW5wcmVwYXJlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKKworCW10a19kaXNw
X211dGV4X3B1dChtdGtfY3J0Yy0+bXV0ZXgpOworCisJZHJtX2NydGNfY2xlYW51cChjcnRjKTsK
K30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0
YykKK3sKKwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlOworCisJaWYgKGNydGMtPnN0YXRl
KSB7CisJCWlmIChjcnRjLT5zdGF0ZS0+bW9kZV9ibG9iKQorCQkJZHJtX3Byb3BlcnR5X3VucmVm
ZXJlbmNlX2Jsb2IoY3J0Yy0+c3RhdGUtPm1vZGVfYmxvYik7CisKKwkJc3RhdGUgPSB0b19tdGtf
Y3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CisJCW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKCpzdGF0
ZSkpOworCX0gZWxzZSB7CisJCXN0YXRlID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tF
Uk5FTCk7CisJCWlmICghc3RhdGUpCisJCQlyZXR1cm47CisJCWNydGMtPnN0YXRlID0gJnN0YXRl
LT5iYXNlOworCX0KKworCXN0YXRlLT5iYXNlLmNydGMgPSBjcnRjOworfQorCitzdGF0aWMgc3Ry
dWN0IGRybV9jcnRjX3N0YXRlICptdGtfZHJtX2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBk
cm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlOworCisJc3Rh
dGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQor
CQlyZXR1cm4gTlVMTDsKKworCV9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3Rh
dGUoY3J0YywgJnN0YXRlLT5iYXNlKTsKKworCVdBUk5fT04oc3RhdGUtPmJhc2UuY3J0YyAhPSBj
cnRjKTsKKwlzdGF0ZS0+YmFzZS5jcnRjID0gY3J0YzsKKworCXJldHVybiAmc3RhdGUtPmJhc2U7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1f
Y3J0YyAqY3J0YywKKwkJCQkgICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKK3sK
KwlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZShjcnRjLCBzdGF0ZSk7CisJ
a2ZyZWUodG9fbXRrX2NydGNfc3RhdGUoc3RhdGUpKTsKK30KKworc3RhdGljIGJvb2wgbXRrX2Ry
bV9jcnRjX21vZGVfZml4dXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICBjb25zdCBz
dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5
X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJLyogTm90aGluZyB0byBkbyBoZXJlLCBidXQgdGhp
cyBjYWxsYmFjayBpcyBtYW5kYXRvcnkuICovCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2
b2lkIG10a19kcm1fY3J0Y19tb2RlX3NldF9ub2ZiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sK
KwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUoY3J0Yy0+
c3RhdGUpOworCisJc3RhdGUtPnBlbmRpbmdfd2lkdGggPSBjcnRjLT5tb2RlLmhkaXNwbGF5Owor
CXN0YXRlLT5wZW5kaW5nX2hlaWdodCA9IGNydGMtPm1vZGUudmRpc3BsYXk7CisJc3RhdGUtPnBl
bmRpbmdfdnJlZnJlc2ggPSBjcnRjLT5tb2RlLnZyZWZyZXNoOworCXdtYigpOwkvKiBNYWtlIHN1
cmUgdGhlIGFib3ZlIHBhcmFtZXRlcnMgYXJlIHNldCBiZWZvcmUgdXBkYXRlICovCisJc3RhdGUt
PnBlbmRpbmdfY29uZmlnID0gdHJ1ZTsKK30KKworaW50IG10a19kcm1fY3J0Y19lbmFibGVfdmJs
YW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKQoreworCXN0cnVj
dCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBtdGtf
ZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMocHJpdi0+Y3J0Y1twaXBlXSk7CisJc3Ry
dWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9jb21wWzBdOworCisJbXRrX2Rk
cF9jb21wX2VuYWJsZV92Ymxhbmsob3ZsLCAmbXRrX2NydGMtPmJhc2UpOworCisJcmV0dXJuIDA7
Cit9CisKK3ZvaWQgbXRrX2RybV9jcnRjX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNl
ICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnBy
aXYgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0g
dG9fbXRrX2NydGMocHJpdi0+Y3J0Y1twaXBlXSk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3Zs
ID0gbXRrX2NydGMtPmRkcF9jb21wWzBdOworCisJbXRrX2RkcF9jb21wX2Rpc2FibGVfdmJsYW5r
KG92bCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2NydGNfZGRwX2Nsa19lbmFibGUoc3RydWN0IG10
a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKworCURSTV9ERUJV
R19EUklWRVIoIiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5k
ZHBfY29tcF9ucjsgaSsrKSB7CisJCXJldCA9IGNsa19lbmFibGUobXRrX2NydGMtPmRkcF9jb21w
W2ldLT5jbGspOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmFibGUg
Y2xvY2sgJWQ6ICVkXG4iLCBpLCByZXQpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlyZXR1
cm4gMDsKK2VycjoKKwl3aGlsZSAoLS1pID49IDApCisJCWNsa19kaXNhYmxlKG10a19jcnRjLT5k
ZHBfY29tcFtpXS0+Y2xrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfY3J0
Y19kZHBfY2xrX2Rpc2FibGUoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJaW50
IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOworCWZvciAoaSA9IDA7
IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJY2xrX2Rpc2FibGUobXRrX2NydGMt
PmRkcF9jb21wW2ldLT5jbGspOworfQorCitzdGF0aWMgaW50IG10a19jcnRjX2RkcF9od19pbml0
KHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0
YyA9ICZtdGtfY3J0Yy0+YmFzZTsKKwl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodCwgdnJlZnJl
c2g7CisJaW50IHJldDsKKwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1
bmNfXyk7CisJaWYgKFdBUk5fT04oIWNydGMtPnN0YXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisK
Kwl3aWR0aCA9IGNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlLmhkaXNwbGF5OworCWhlaWdodCA9
IGNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlLnZkaXNwbGF5OworCXZyZWZyZXNoID0gY3J0Yy0+
c3RhdGUtPmFkanVzdGVkX21vZGUudnJlZnJlc2g7CisKKwlyZXQgPSBwbV9ydW50aW1lX2dldF9z
eW5jKGNydGMtPmRldi0+ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxl
ZCB0byBlbmFibGUgcG93ZXIgZG9tYWluOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9
CisKKwlyZXQgPSBtdGtfZGlzcF9tdXRleF9wcmVwYXJlKG10a19jcnRjLT5tdXRleCk7CisJaWYg
KHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIG11dGV4IGNsb2NrOiAl
ZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcG1fcnVudGltZV9wdXQ7CisJfQorCisJcmV0ID0gbXRr
X2NydGNfZGRwX2Nsa19lbmFibGUobXRrX2NydGMpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9F
UlJPUigiRmFpbGVkIHRvIGVuYWJsZSBjb21wb25lbnQgY2xvY2tzOiAlZFxuIiwgcmV0KTsKKwkJ
Z290byBlcnJfbXV0ZXhfdW5wcmVwYXJlOworCX0KKworCURSTV9ERUJVR19EUklWRVIoIm1lZGlh
dGVrX2RkcF9kZHBfcGF0aF9zZXR1cFxuIik7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5k
ZHBfY29tcF9uciAtIDE7IGkrKykgeworCQltdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgobXRrX2Ny
dGMtPmNvbmZpZ19yZWdzLAorCQkJCQkgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCwKKwkJCQkJ
IG10a19jcnRjLT5kZHBfY29tcFtpICsgMV0tPmlkKTsKKwkJbXRrX2Rpc3BfbXV0ZXhfYWRkX2Nv
bXAobXRrX2NydGMtPm11dGV4LAorCQkJCQltdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKKwl9
CisJbXRrX2Rpc3BfbXV0ZXhfYWRkX2NvbXAobXRrX2NydGMtPm11dGV4LCBtdGtfY3J0Yy0+ZGRw
X2NvbXBbaV0tPmlkKTsKKwltdGtfZGlzcF9tdXRleF9lbmFibGUobXRrX2NydGMtPm11dGV4KTsK
KworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykgeworCQlzdHJ1
Y3QgbXRrX2RkcF9jb21wICpjb21wID0gbXRrX2NydGMtPmRkcF9jb21wW2ldOworCisJCW10a19k
ZHBfY29tcF9jb25maWcoY29tcCwgd2lkdGgsIGhlaWdodCwgdnJlZnJlc2gpOworCQltdGtfZGRw
X2NvbXBfc3RhcnQoY29tcCk7CisJfQorCisJLyogSW5pdGlhbGx5IGNvbmZpZ3VyZSBhbGwgcGxh
bmVzICovCisJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7CisJCXN0cnVjdCBk
cm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10
a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxh
bmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwkJbXRrX2RkcF9jb21wX2xheWVyX2NvbmZpZyhtdGtf
Y3J0Yy0+ZGRwX2NvbXBbMF0sIGksCisJCQkJCSAgcGxhbmVfc3RhdGUpOworCX0KKworCXJldHVy
biAwOworCitlcnJfbXV0ZXhfdW5wcmVwYXJlOgorCW10a19kaXNwX211dGV4X3VucHJlcGFyZSht
dGtfY3J0Yy0+bXV0ZXgpOworZXJyX3BtX3J1bnRpbWVfcHV0OgorCXBtX3J1bnRpbWVfcHV0KGNy
dGMtPmRldi0+ZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfY3J0Y19k
ZHBfaHdfZmluaShzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlzdHJ1Y3QgZHJt
X2RldmljZSAqZHJtID0gbXRrX2NydGMtPmJhc2UuZGV2OworCWludCBpOworCisJRFJNX0RFQlVH
X0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRk
cF9jb21wX25yOyBpKyspCisJCW10a19kZHBfY29tcF9zdG9wKG10a19jcnRjLT5kZHBfY29tcFtp
XSk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQltdGtf
ZGlzcF9tdXRleF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgsCisJCQkJCSAgIG10a19jcnRj
LT5kZHBfY29tcFtpXS0+aWQpOworCW10a19kaXNwX211dGV4X2Rpc2FibGUobXRrX2NydGMtPm11
dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yIC0gMTsgaSsrKSB7
CisJCW10a19kZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKG10a19jcnRjLT5jb25maWdfcmVncywK
KwkJCQkJICAgICAgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCwKKwkJCQkJICAgICAgbXRrX2Ny
dGMtPmRkcF9jb21wW2kgKyAxXS0+aWQpOworCQltdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcCht
dGtfY3J0Yy0+bXV0ZXgsCisJCQkJCSAgIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCX0K
KwltdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgsIG10a19jcnRjLT5k
ZHBfY29tcFtpXS0+aWQpOworCW10a19jcnRjX2RkcF9jbGtfZGlzYWJsZShtdGtfY3J0Yyk7CisJ
bXRrX2Rpc3BfbXV0ZXhfdW5wcmVwYXJlKG10a19jcnRjLT5tdXRleCk7CisKKwlwbV9ydW50aW1l
X3B1dChkcm0tPmRldik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19lbmFibGUoc3Ry
dWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0g
dG9fbXRrX2NydGMoY3J0Yyk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMt
PmRkcF9jb21wWzBdOworCWludCByZXQ7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyAlZFxuIiwg
X19mdW5jX18sIGNydGMtPmJhc2UuaWQpOworCisJcmV0ID0gbXRrX3NtaV9sYXJiX2dldChvdmwt
PmxhcmJfZGV2KTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBsYXJi
OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IG10a19jcnRjX2RkcF9od19p
bml0KG10a19jcnRjKTsKKwlpZiAocmV0KSB7CisJCW10a19zbWlfbGFyYl9wdXQob3ZsLT5sYXJi
X2Rldik7CisJCXJldHVybjsKKwl9CisKKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7CisJbXRr
X2NydGMtPmVuYWJsZWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZGlz
YWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRr
X2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBt
dGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlcyAl
ZFxuIiwgX19mdW5jX18sIGNydGMtPmJhc2UuaWQpOworCWlmIChXQVJOX09OKCFtdGtfY3J0Yy0+
ZW5hYmxlZCkpCisJCXJldHVybjsKKworCS8qIFNldCBhbGwgcGVuZGluZyBwbGFuZSBzdGF0ZSB0
byBkaXNhYmxlZCAqLworCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCQlz
dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJCXN0
cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRlID0gdG9f
bXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmVu
YWJsZSA9IGZhbHNlOworCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSB0cnVlOworCX0K
KwltdGtfY3J0Yy0+cGVuZGluZ19wbGFuZXMgPSB0cnVlOworCisJLyogV2FpdCBmb3IgcGxhbmVz
IHRvIGJlIGRpc2FibGVkICovCisJZHJtX2NydGNfd2FpdF9vbmVfdmJsYW5rKGNydGMpOworCisJ
ZHJtX2NydGNfdmJsYW5rX29mZihjcnRjKTsKKwltdGtfY3J0Y19kZHBfaHdfZmluaShtdGtfY3J0
Yyk7CisJbXRrX3NtaV9sYXJiX3B1dChvdmwtPmxhcmJfZGV2KTsKKworCW10a19jcnRjLT5lbmFi
bGVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fY3J0Y19hdG9taWNfYmVnaW4o
c3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq
b2xkX2NydGNfc3RhdGUpCit7CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210
a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0
YyA9IHRvX210a19jcnRjKGNydGMpOworCisJaWYgKG10a19jcnRjLT5ldmVudCAmJiBzdGF0ZS0+
YmFzZS5ldmVudCkKKwkJRFJNX0VSUk9SKCJuZXcgZXZlbnQgd2hpbGUgdGhlcmUgaXMgc3RpbGwg
YSBwZW5kaW5nIGV2ZW50XG4iKTsKKworCWlmIChzdGF0ZS0+YmFzZS5ldmVudCkgeworCQlzdGF0
ZS0+YmFzZS5ldmVudC0+cGlwZSA9IGRybV9jcnRjX2luZGV4KGNydGMpOworCQlXQVJOX09OKGRy
bV9jcnRjX3ZibGFua19nZXQoY3J0YykgIT0gMCk7CisJCW10a19jcnRjLT5ldmVudCA9IHN0YXRl
LT5iYXNlLmV2ZW50OworCQlzdGF0ZS0+YmFzZS5ldmVudCA9IE5VTEw7CisJfQorfQorCitzdGF0
aWMgdm9pZCBtdGtfZHJtX2NydGNfYXRvbWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK
KwkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQoreworCXN0
cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7CisJdW5zaWdu
ZWQgaW50IHBlbmRpbmdfcGxhbmVzID0gMDsKKwlpbnQgaTsKKworCWlmIChtdGtfY3J0Yy0+ZXZl
bnQpCisJCW10a19jcnRjLT5wZW5kaW5nX25lZWRzX3ZibGFuayA9IHRydWU7CisJZm9yIChpID0g
MDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0g
Jm10a19jcnRjLT5wbGFuZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqcGxh
bmVfc3RhdGU7CisKKwkJcGxhbmVfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0
YXRlKTsKKwkJaWYgKHBsYW5lX3N0YXRlLT5wZW5kaW5nLmRpcnR5KSB7CisJCQlwbGFuZV9zdGF0
ZS0+cGVuZGluZy5jb25maWcgPSB0cnVlOworCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuZGlydHkg
PSBmYWxzZTsKKwkJCXBlbmRpbmdfcGxhbmVzIHw9IEJJVChpKTsKKwkJfQorCX0KKwlpZiAocGVu
ZGluZ19wbGFuZXMpCisJCW10a19jcnRjLT5wZW5kaW5nX3BsYW5lcyA9IHRydWU7Cit9CisKK3N0
YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgbXRrX2NydGNfZnVuY3MgPSB7CisJLnNl
dF9jb25maWcJCT0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKKwkucGFnZV9mbGlwCQk9
IGRybV9hdG9taWNfaGVscGVyX3BhZ2VfZmxpcCwKKwkuZGVzdHJveQkJPSBtdGtfZHJtX2NydGNf
ZGVzdHJveSwKKwkucmVzZXQJCQk9IG10a19kcm1fY3J0Y19yZXNldCwKKwkuYXRvbWljX2R1cGxp
Y2F0ZV9zdGF0ZQk9IG10a19kcm1fY3J0Y19kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0
cm95X3N0YXRlCT0gbXRrX2RybV9jcnRjX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29u
c3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBtdGtfY3J0Y19oZWxwZXJfZnVuY3MgPSB7
CisJLm1vZGVfZml4dXAJPSBtdGtfZHJtX2NydGNfbW9kZV9maXh1cCwKKwkubW9kZV9zZXRfbm9m
Ygk9IG10a19kcm1fY3J0Y19tb2RlX3NldF9ub2ZiLAorCS5lbmFibGUJCT0gbXRrX2RybV9jcnRj
X2VuYWJsZSwKKwkuZGlzYWJsZQk9IG10a19kcm1fY3J0Y19kaXNhYmxlLAorCS5hdG9taWNfYmVn
aW4JPSBtdGtfZHJtX2NydGNfYXRvbWljX2JlZ2luLAorCS5hdG9taWNfZmx1c2gJPSBtdGtfZHJt
X2NydGNfYXRvbWljX2ZsdXNoLAorfTsKKworc3RhdGljIGludCBtdGtfZHJtX2NydGNfaW5pdChz
dHJ1Y3QgZHJtX2RldmljZSAqZHJtLAorCQkJICAgICBzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtf
Y3J0YywKKwkJCSAgICAgc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwKKwkJCSAgICAgc3RydWN0
IGRybV9wbGFuZSAqY3Vyc29yLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlpbnQgcmV0OworCisJ
cmV0ID0gZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhkcm0sICZtdGtfY3J0Yy0+YmFzZSwgcHJp
bWFyeSwgY3Vyc29yLAorCQkJCQkmbXRrX2NydGNfZnVuY3MsIE5VTEwpOworCWlmIChyZXQpCisJ
CWdvdG8gZXJyX2NsZWFudXBfY3J0YzsKKworCWRybV9jcnRjX2hlbHBlcl9hZGQoJm10a19jcnRj
LT5iYXNlLCAmbXRrX2NydGNfaGVscGVyX2Z1bmNzKTsKKworCXJldHVybiAwOworCitlcnJfY2xl
YW51cF9jcnRjOgorCWRybV9jcnRjX2NsZWFudXAoJm10a19jcnRjLT5iYXNlKTsKKwlyZXR1cm4g
cmV0OworfQorCit2b2lkIG10a19jcnRjX2RkcF9pcnEoc3RydWN0IGRybV9jcnRjICpjcnRjLCBz
dHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwpCit7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2Ny
dGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlID0g
dG9fbXRrX2NydGNfc3RhdGUobXRrX2NydGMtPmJhc2Uuc3RhdGUpOworCXVuc2lnbmVkIGludCBp
OworCisJLyoKKwkgKiBUT0RPOiBpbnN0ZWFkIG9mIHVwZGF0aW5nIHRoZSByZWdpc3RlcnMgaGVy
ZSwgd2Ugc2hvdWxkIHByZXBhcmUKKwkgKiB3b3JraW5nIHJlZ2lzdGVycyBpbiBhdG9taWNfY29t
bWl0IGFuZCBsZXQgdGhlIGhhcmR3YXJlIGNvbW1hbmQKKwkgKiBxdWV1ZSB1cGRhdGUgbW9kdWxl
IHJlZ2lzdGVycyBvbiB2YmxhbmsuCisJICovCisJaWYgKHN0YXRlLT5wZW5kaW5nX2NvbmZpZykg
eworCQltdGtfZGRwX2NvbXBfY29uZmlnKG92bCwgc3RhdGUtPnBlbmRpbmdfd2lkdGgsCisJCQkJ
ICAgIHN0YXRlLT5wZW5kaW5nX2hlaWdodCwKKwkJCQkgICAgc3RhdGUtPnBlbmRpbmdfdnJlZnJl
c2gpOworCisJCXN0YXRlLT5wZW5kaW5nX2NvbmZpZyA9IGZhbHNlOworCX0KKworCWlmIChtdGtf
Y3J0Yy0+cGVuZGluZ19wbGFuZXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsg
aSsrKSB7CisJCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ld
LmJhc2U7CisJCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCQkJcGxh
bmVfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKworCQkJaWYgKHBs
YW5lX3N0YXRlLT5wZW5kaW5nLmNvbmZpZykgeworCQkJCW10a19kZHBfY29tcF9sYXllcl9jb25m
aWcob3ZsLCBpLCBwbGFuZV9zdGF0ZSk7CisJCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmln
ID0gZmFsc2U7CisJCQl9CisJCX0KKwkJbXRrX2NydGMtPnBlbmRpbmdfcGxhbmVzID0gZmFsc2U7
CisJfQorCisJbXRrX2RybV9maW5pc2hfcGFnZV9mbGlwKG10a19jcnRjKTsKK30KKworaW50IG10
a19kcm1fY3J0Y19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsCisJCQljb25zdCBl
bnVtIG10a19kZHBfY29tcF9pZCAqcGF0aCwgdW5zaWduZWQgaW50IHBhdGhfbGVuKQoreworCXN0
cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm1fZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1
Y3QgZGV2aWNlICpkZXYgPSBkcm1fZGV2LT5kZXY7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRr
X2NydGM7CisJZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlOworCXVuc2lnbmVkIGludCB6cG9zOwor
CWludCBwaXBlID0gcHJpdi0+bnVtX3BpcGVzOworCWludCByZXQ7CisJaW50IGk7CisKKwlmb3Ig
KGkgPSAwOyBpIDwgcGF0aF9sZW47IGkrKykgeworCQllbnVtIG10a19kZHBfY29tcF9pZCBjb21w
X2lkID0gcGF0aFtpXTsKKwkJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCisJCW5vZGUgPSBw
cml2LT5jb21wX25vZGVbY29tcF9pZF07CisJCWlmICghbm9kZSkgeworCQkJZGV2X2luZm8oZGV2
LAorCQkJCSAiTm90IGNyZWF0aW5nIGNydGMgJWQgYmVjYXVzZSBjb21wb25lbnQgJWQgaXMgZGlz
YWJsZWQgb3IgbWlzc2luZ1xuIiwKKwkJCQkgcGlwZSwgY29tcF9pZCk7CisJCQlyZXR1cm4gMDsK
KwkJfQorCX0KKworCW10a19jcnRjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptdGtfY3J0
YyksIEdGUF9LRVJORUwpOworCWlmICghbXRrX2NydGMpCisJCXJldHVybiAtRU5PTUVNOworCisJ
bXRrX2NydGMtPmNvbmZpZ19yZWdzID0gcHJpdi0+Y29uZmlnX3JlZ3M7CisJbXRrX2NydGMtPmRk
cF9jb21wX25yID0gcGF0aF9sZW47CisJbXRrX2NydGMtPmRkcF9jb21wID0gZGV2bV9rbWFsbG9j
X2FycmF5KGRldiwgbXRrX2NydGMtPmRkcF9jb21wX25yLAorCQkJCQkJc2l6ZW9mKCptdGtfY3J0
Yy0+ZGRwX2NvbXApLAorCQkJCQkJR0ZQX0tFUk5FTCk7CisKKwltdGtfY3J0Yy0+bXV0ZXggPSBt
dGtfZGlzcF9tdXRleF9nZXQocHJpdi0+bXV0ZXhfZGV2LCBwaXBlKTsKKwlpZiAoSVNfRVJSKG10
a19jcnRjLT5tdXRleCkpIHsKKwkJcmV0ID0gUFRSX0VSUihtdGtfY3J0Yy0+bXV0ZXgpOworCQlk
ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgbXV0ZXg6ICVkXG4iLCByZXQpOworCQlyZXR1cm4g
cmV0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykg
eworCQllbnVtIG10a19kZHBfY29tcF9pZCBjb21wX2lkID0gcGF0aFtpXTsKKwkJc3RydWN0IG10
a19kZHBfY29tcCAqY29tcDsKKwkJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCisJCW5vZGUg
PSBwcml2LT5jb21wX25vZGVbY29tcF9pZF07CisJCWNvbXAgPSBwcml2LT5kZHBfY29tcFtjb21w
X2lkXTsKKwkJaWYgKCFjb21wKSB7CisJCQlkZXZfZXJyKGRldiwgIkNvbXBvbmVudCAlcyBub3Qg
aW5pdGlhbGl6ZWRcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCXJldCA9IC1FTk9ERVY7
CisJCQlnb3RvIHVucHJlcGFyZTsKKwkJfQorCisJCXJldCA9IGNsa19wcmVwYXJlKGNvbXAtPmNs
ayk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LAorCQkJCSJGYWlsZWQgdG8gcHJlcGFy
ZSBjbG9jayBmb3IgY29tcG9uZW50ICVzOiAlZFxuIiwKKwkJCQlub2RlLT5mdWxsX25hbWUsIHJl
dCk7CisJCQlnb3RvIHVucHJlcGFyZTsKKwkJfQorCisJCW10a19jcnRjLT5kZHBfY29tcFtpXSA9
IGNvbXA7CisJfQorCisJZm9yICh6cG9zID0gMDsgenBvcyA8IE9WTF9MQVlFUl9OUjsgenBvcysr
KSB7CisJCXR5cGUgPSAoenBvcyA9PSAwKSA/IERSTV9QTEFORV9UWVBFX1BSSU1BUlkgOgorCQkJ
CSh6cG9zID09IDEpID8gRFJNX1BMQU5FX1RZUEVfQ1VSU09SIDoKKwkJCQkJCURSTV9QTEFORV9U
WVBFX09WRVJMQVk7CisJCXJldCA9IG10a19wbGFuZV9pbml0KGRybV9kZXYsICZtdGtfY3J0Yy0+
cGxhbmVzW3pwb3NdLAorCQkJCSAgICAgQklUKHBpcGUpLCB0eXBlLCB6cG9zKTsKKwkJaWYgKHJl
dCkKKwkJCWdvdG8gdW5wcmVwYXJlOworCX0KKworCXJldCA9IG10a19kcm1fY3J0Y19pbml0KGRy
bV9kZXYsIG10a19jcnRjLCAmbXRrX2NydGMtPnBsYW5lc1swXS5iYXNlLAorCQkJCSZtdGtfY3J0
Yy0+cGxhbmVzWzFdLmJhc2UsIHBpcGUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHVucHJlcGFy
ZTsKKworCXByaXYtPmNydGNbcGlwZV0gPSAmbXRrX2NydGMtPmJhc2U7CisJcHJpdi0+bnVtX3Bp
cGVzKys7CisKKwlyZXR1cm4gMDsKKwordW5wcmVwYXJlOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJ
Y2xrX3VucHJlcGFyZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7CisKKwlyZXR1cm4gcmV0
OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5o
IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZTU1NjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAq
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy
c2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K
KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9DUlRDX0gK
KyNkZWZpbmUgTVRLX0RSTV9DUlRDX0gKKworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2lu
Y2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCisK
KyNkZWZpbmUgT1ZMX0xBWUVSX05SCTQKKworaW50IG10a19kcm1fY3J0Y19lbmFibGVfdmJsYW5r
KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKTsKK3ZvaWQgbXRrX2Ry
bV9jcnRjX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGlu
dCBwaXBlKTsKK3ZvaWQgbXRrX2RybV9jcnRjX2NoZWNrX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAq
Y3J0Yyk7Cit2b2lkIG10a19kcm1fY3J0Y19jb21taXQoc3RydWN0IGRybV9jcnRjICpjcnRjKTsK
K3ZvaWQgbXRrX2NydGNfZGRwX2lycShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBtdGtf
ZGRwX2NvbXAgKm92bCk7CitpbnQgbXRrX2RybV9jcnRjX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rldmlj
ZSAqZHJtX2RldiwKKwkJCWNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkICpwYXRoLAorCQkJdW5z
aWduZWQgaW50IHBhdGhfbGVuKTsKKworI2VuZGlmIC8qIE1US19EUk1fQ1JUQ19IICovCmRpZmYg
LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYyBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjE2NTg0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX2RybV9kZHAuYwpAQCAtMCwwICsxLDM1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisg
KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlz
IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxs
aW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxs
aW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworI2lu
Y2x1ZGUgIm10a19kcm1fZGRwLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisj
ZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX09WTDBfTU9VVF9FTgkweDA0MAorI2RlZmluZSBE
SVNQX1JFR19DT05GSUdfRElTUF9PVkwxX01PVVRfRU4JMHgwNDQKKyNkZWZpbmUgRElTUF9SRUdf
Q09ORklHX0RJU1BfT0RfTU9VVF9FTgkJMHgwNDgKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJ
U1BfR0FNTUFfTU9VVF9FTgkweDA0YworI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9VRk9F
X01PVVRfRU4JMHgwNTAKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IwX1NFTF9J
TgkweDA4NAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjFfU0VMX0lOCTB4MDg4
CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19EUElfU0VMX0lOCQkweDBhYworI2RlZmluZSBESVNQ
X1JFR19DT05GSUdfRElTUF9SRE1BMV9NT1VUX0VOCTB4MGM4CisjZGVmaW5lIERJU1BfUkVHX0NP
TkZJR19NTVNZU19DR19DT04wCQkweDEwMAorCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX0VOKG4p
CSgweDIwICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfTVVURVhfUlNUKG4pCSgweDI4
ICsgMHgyMCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfTVVURVhfTU9EKG4pCSgweDJjICsgMHgy
MCAqIChuKSkKKyNkZWZpbmUgRElTUF9SRUdfTVVURVhfU09GKG4pCSgweDMwICsgMHgyMCAqIChu
KSkKKworI2RlZmluZSBNVVRFWF9NT0RfRElTUF9PVkwwCQlCSVQoMTEpCisjZGVmaW5lIE1VVEVY
X01PRF9ESVNQX09WTDEJCUJJVCgxMikKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUkRNQTAJCUJJ
VCgxMykKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUkRNQTEJCUJJVCgxNCkKKyNkZWZpbmUgTVVU
RVhfTU9EX0RJU1BfUkRNQTIJCUJJVCgxNSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfV0RNQTAJ
CUJJVCgxNikKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfV0RNQTEJCUJJVCgxNykKKyNkZWZpbmUg
TVVURVhfTU9EX0RJU1BfQ09MT1IwCQlCSVQoMTgpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX0NP
TE9SMQkJQklUKDE5KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9BQUwJCUJJVCgyMCkKKyNkZWZp
bmUgTVVURVhfTU9EX0RJU1BfR0FNTUEJCUJJVCgyMSkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1Bf
VUZPRQkJQklUKDIyKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9QV00wCQlCSVQoMjMpCisjZGVm
aW5lIE1VVEVYX01PRF9ESVNQX1BXTTEJCUJJVCgyNCkKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1Bf
T0QJCUJJVCgyNSkKKworI2RlZmluZSBNVVRFWF9TT0ZfU0lOR0xFX01PREUJCTAKKyNkZWZpbmUg
TVVURVhfU09GX0RTSTAJCQkxCisjZGVmaW5lIE1VVEVYX1NPRl9EU0kxCQkJMgorI2RlZmluZSBN
VVRFWF9TT0ZfRFBJMAkJCTMKKworI2RlZmluZSBPVkwwX01PVVRfRU5fQ09MT1IwCQkweDEKKyNk
ZWZpbmUgT0RfTU9VVF9FTl9SRE1BMAkJMHgxCisjZGVmaW5lIFVGT0VfTU9VVF9FTl9EU0kwCQkw
eDEKKyNkZWZpbmUgQ09MT1IwX1NFTF9JTl9PVkwwCQkweDEKKyNkZWZpbmUgT1ZMMV9NT1VUX0VO
X0NPTE9SMQkJMHgxCisjZGVmaW5lIEdBTU1BX01PVVRfRU5fUkRNQTEJCTB4MQorI2RlZmluZSBS
RE1BMV9NT1VUX0RQSTAJCQkweDIKKyNkZWZpbmUgRFBJMF9TRUxfSU5fUkRNQTEJCTB4MQorI2Rl
ZmluZSBDT0xPUjFfU0VMX0lOX09WTDEJCTB4MQorCitzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggewor
CWludCBpZDsKKwlib29sIGNsYWltZWQ7Cit9OworCitzdHJ1Y3QgbXRrX2RkcCB7CisJc3RydWN0
IGRldmljZQkJCSpkZXY7CisJc3RydWN0IGNsawkJCSpjbGs7CisJdm9pZCBfX2lvbWVtCQkJKnJl
Z3M7CisJc3RydWN0IG10a19kaXNwX211dGV4CQltdXRleFsxMF07Cit9OworCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgaW50IG11dGV4X21vZFtERFBfQ09NUE9ORU5UX0lEX01BWF0gPSB7CisJW0RE
UF9DT01QT05FTlRfQUFMXSA9IE1VVEVYX01PRF9ESVNQX0FBTCwKKwlbRERQX0NPTVBPTkVOVF9D
T0xPUjBdID0gTVVURVhfTU9EX0RJU1BfQ09MT1IwLAorCVtERFBfQ09NUE9ORU5UX0NPTE9SMV0g
PSBNVVRFWF9NT0RfRElTUF9DT0xPUjEsCisJW0REUF9DT01QT05FTlRfR0FNTUFdID0gTVVURVhf
TU9EX0RJU1BfR0FNTUEsCisJW0REUF9DT01QT05FTlRfT0RdID0gTVVURVhfTU9EX0RJU1BfT0Qs
CisJW0REUF9DT01QT05FTlRfT1ZMMF0gPSBNVVRFWF9NT0RfRElTUF9PVkwwLAorCVtERFBfQ09N
UE9ORU5UX09WTDFdID0gTVVURVhfTU9EX0RJU1BfT1ZMMSwKKwlbRERQX0NPTVBPTkVOVF9QV00w
XSA9IE1VVEVYX01PRF9ESVNQX1BXTTAsCisJW0REUF9DT01QT05FTlRfUFdNMV0gPSBNVVRFWF9N
T0RfRElTUF9QV00xLAorCVtERFBfQ09NUE9ORU5UX1JETUEwXSA9IE1VVEVYX01PRF9ESVNQX1JE
TUEwLAorCVtERFBfQ09NUE9ORU5UX1JETUExXSA9IE1VVEVYX01PRF9ESVNQX1JETUExLAorCVtE
RFBfQ09NUE9ORU5UX1JETUEyXSA9IE1VVEVYX01PRF9ESVNQX1JETUEyLAorCVtERFBfQ09NUE9O
RU5UX1VGT0VdID0gTVVURVhfTU9EX0RJU1BfVUZPRSwKKwlbRERQX0NPTVBPTkVOVF9XRE1BMF0g
PSBNVVRFWF9NT0RfRElTUF9XRE1BMCwKKwlbRERQX0NPTVBPTkVOVF9XRE1BMV0gPSBNVVRFWF9N
T0RfRElTUF9XRE1BMSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXRrX2RkcF9tb3V0X2Vu
KGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKKwkJCQkgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQg
bmV4dCwKKwkJCQkgICAgdW5zaWduZWQgaW50ICphZGRyKQoreworCXVuc2lnbmVkIGludCB2YWx1
ZTsKKworCWlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwwICYmIG5leHQgPT0gRERQX0NPTVBP
TkVOVF9DT0xPUjApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwwX01PVVRf
RU47CisJCXZhbHVlID0gT1ZMMF9NT1VUX0VOX0NPTE9SMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBE
RFBfQ09NUE9ORU5UX09EICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9SRE1BMCkgeworCQkqYWRk
ciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX09EX01PVVRfRU47CisJCXZhbHVlID0gT0RfTU9VVF9F
Tl9SRE1BMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX1VGT0UgJiYgbmV4dCA9
PSBERFBfQ09NUE9ORU5UX0RTSTApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9V
Rk9FX01PVVRfRU47CisJCXZhbHVlID0gVUZPRV9NT1VUX0VOX0RTSTA7CisJfSBlbHNlIGlmIChj
dXIgPT0gRERQX0NPTVBPTkVOVF9PVkwxICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjEp
IHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwxX01PVVRfRU47CisJCXZhbHVl
ID0gT1ZMMV9NT1VUX0VOX0NPTE9SMTsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5U
X0dBTU1BICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9SRE1BMSkgeworCQkqYWRkciA9IERJU1Bf
UkVHX0NPTkZJR19ESVNQX0dBTU1BX01PVVRfRU47CisJCXZhbHVlID0gR0FNTUFfTU9VVF9FTl9S
RE1BMTsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX1JETUExICYmIG5leHQgPT0g
RERQX0NPTVBPTkVOVF9EUEkwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfUkRN
QTFfTU9VVF9FTjsKKwkJdmFsdWUgPSBSRE1BMV9NT1VUX0RQSTA7CisJfSBlbHNlIHsKKwkJdmFs
dWUgPSAwOworCX0KKworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBt
dGtfZGRwX3NlbF9pbihlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkJICAgZW51bSBtdGtf
ZGRwX2NvbXBfaWQgbmV4dCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgKmFkZHIpCit7CisJdW5zaWdu
ZWQgaW50IHZhbHVlOworCisJaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09WTDAgJiYgbmV4dCA9
PSBERFBfQ09NUE9ORU5UX0NPTE9SMCkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQ
X0NPTE9SMF9TRUxfSU47CisJCXZhbHVlID0gQ09MT1IwX1NFTF9JTl9PVkwwOworCX0gZWxzZSBp
ZiAoY3VyID09IEREUF9DT01QT05FTlRfUkRNQTEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RQ
STApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRFBJX1NFTF9JTjsKKwkJdmFsdWUgPSBE
UEkwX1NFTF9JTl9SRE1BMTsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09WTDEg
JiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0NPTE9SMSkgeworCQkqYWRkciA9IERJU1BfUkVHX0NP
TkZJR19ESVNQX0NPTE9SMV9TRUxfSU47CisJCXZhbHVlID0gQ09MT1IxX1NFTF9JTl9PVkwxOwor
CX0gZWxzZSB7CisJCXZhbHVlID0gMDsKKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQg
bXRrX2RkcF9hZGRfY29tcF90b19wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkg
ICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkgICAgICBlbnVtIG10a19kZHBfY29t
cF9pZCBuZXh0KQoreworCXVuc2lnbmVkIGludCBhZGRyLCB2YWx1ZSwgcmVnOworCisJdmFsdWUg
PSBtdGtfZGRwX21vdXRfZW4oY3VyLCBuZXh0LCAmYWRkcik7CisJaWYgKHZhbHVlKSB7CisJCXJl
ZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmlnX3JlZ3MgKyBhZGRyKSB8IHZhbHVlOworCQl3cml0ZWxf
cmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorCisJdmFsdWUgPSBtdGtfZGRw
X3NlbF9pbihjdXIsIG5leHQsICZhZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxf
cmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpIHwgdmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJl
ZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKKwl9Cit9CisKK3ZvaWQgbXRrX2RkcF9yZW1vdmVfY29t
cF9mcm9tX3BhdGgodm9pZCBfX2lvbWVtICpjb25maWdfcmVncywKKwkJCQkgICBlbnVtIG10a19k
ZHBfY29tcF9pZCBjdXIsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCkKK3sKKwl1
bnNpZ25lZCBpbnQgYWRkciwgdmFsdWUsIHJlZzsKKworCXZhbHVlID0gbXRrX2RkcF9tb3V0X2Vu
KGN1ciwgbmV4dCwgJmFkZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVk
KGNvbmZpZ19yZWdzICsgYWRkcikgJiB+dmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29u
ZmlnX3JlZ3MgKyBhZGRyKTsKKwl9CisKKwl2YWx1ZSA9IG10a19kZHBfc2VsX2luKGN1ciwgbmV4
dCwgJmFkZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19y
ZWdzICsgYWRkcikgJiB+dmFsdWU7CisJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3Mg
KyBhZGRyKTsKKwl9Cit9CisKK3N0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXRrX2Rpc3BfbXV0ZXhf
Z2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBtdGtf
ZGRwICpkZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChpZCA+PSAxMCkKKwkJcmV0
dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJaWYgKGRkcC0+bXV0ZXhbaWRdLmNsYWltZWQpCisJCXJl
dHVybiBFUlJfUFRSKC1FQlVTWSk7CisKKwlkZHAtPm11dGV4W2lkXS5jbGFpbWVkID0gdHJ1ZTsK
KworCXJldHVybiAmZGRwLT5tdXRleFtpZF07Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcHV0
KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9
IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4
LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKwor
CW11dGV4LT5jbGFpbWVkID0gZmFsc2U7Cit9CisKK2ludCBtdGtfZGlzcF9tdXRleF9wcmVwYXJl
KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9
IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4
LT5pZF0pOworCXJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUoZGRwLT5jbGspOworfQorCit2b2lk
IG10a19kaXNwX211dGV4X3VucHJlcGFyZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQor
eworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtf
ZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUo
ZGRwLT5jbGspOworfQorCit2b2lkIG10a19kaXNwX211dGV4X2FkZF9jb21wKHN0cnVjdCBtdGtf
ZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGlkKQorewor
CXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRw
LAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJV0FS
Tl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXN3aXRjaCAoaWQpIHsK
KwljYXNlIEREUF9DT01QT05FTlRfRFNJMDoKKwkJcmVnID0gTVVURVhfU09GX0RTSTA7CisJCWJy
ZWFrOworCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kxOgorCQlyZWcgPSBNVVRFWF9TT0ZfRFNJMDsK
KwkJYnJlYWs7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RQSTA6CisJCXJlZyA9IE1VVEVYX1NPRl9E
UEkwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWcgPSByZWFkbF9yZWxheGVkKGRkcC0+cmVn
cyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJcmVnIHw9IG11dGV4X21vZFtp
ZF07CisJCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9E
KG11dGV4LT5pZCkpOworCQlyZXR1cm47CisJfQorCisJd3JpdGVsX3JlbGF4ZWQocmVnLCBkZHAt
PnJlZ3MgKyBESVNQX1JFR19NVVRFWF9TT0YobXV0ZXgtPmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rp
c3BfbXV0ZXhfcmVtb3ZlX2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCwKKwkJCQll
bnVtIG10a19kZHBfY29tcF9pZCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFp
bmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7
CisJdW5zaWduZWQgaW50IHJlZzsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAh
PSBtdXRleCk7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RTSTA6CisJ
Y2FzZSBERFBfQ09NUE9ORU5UX0RTSTE6CisJY2FzZSBERFBfQ09NUE9ORU5UX0RQSTA6CisJCXdy
aXRlbF9yZWxheGVkKE1VVEVYX1NPRl9TSU5HTEVfTU9ERSwKKwkJCSAgICAgICBkZHAtPnJlZ3Mg
KyBESVNQX1JFR19NVVRFWF9TT0YobXV0ZXgtPmlkKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ
CXJlZyA9IHJlYWRsX3JlbGF4ZWQoZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4
LT5pZCkpOworCQlyZWcgJj0gfm11dGV4X21vZFtpZF07CisJCXdyaXRlbF9yZWxheGVkKHJlZywg
ZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOworCQlicmVhazsKKwl9
Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAq
bXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3Ry
dWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRw
LT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXdyaXRlbCgxLCBkZHAtPnJlZ3MgKyBE
SVNQX1JFR19NVVRFWF9FTihtdXRleC0+aWQpKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF9k
aXNhYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAg
KmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4
W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4
KTsKKworCXdyaXRlbCgwLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9FTihtdXRleC0+aWQp
KTsKK30KKworc3RhdGljIGludCBtdGtfZGRwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug
KnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRr
X2RkcCAqZGRwOworCXN0cnVjdCByZXNvdXJjZSAqcmVnczsKKwlpbnQgaTsKKworCWRkcCA9IGRl
dm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGRwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZHApCisJ
CXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCWRkcC0+bXV0
ZXhbaV0uaWQgPSBpOworCisJZGRwLT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlp
ZiAoSVNfRVJSKGRkcC0+Y2xrKSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgY2xv
Y2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkZHAtPmNsayk7CisJfQorCisJcmVncyA9IHBsYXRm
b3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJZGRwLT5yZWdzID0g
ZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVncyk7CisJaWYgKElTX0VSUihkZHAtPnJlZ3Mp
KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIG1hcCBtdXRleCByZWdpc3RlcnNcbiIpOwor
CQlyZXR1cm4gUFRSX0VSUihkZHAtPnJlZ3MpOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRh
KHBkZXYsIGRkcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZGRwX3JlbW92
ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0
aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkZHBfZHJpdmVyX2R0X21hdGNoW10gPSB7CisJ
eyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1tdXRleCIgfSwKKwl7fSwKK307
CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkZHBfZHJpdmVyX2R0X21hdGNoKTsKKworc3RhdGlj
IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RkcF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10
a19kZHBfcHJvYmUsCisJLnJlbW92ZQkJPSBtdGtfZGRwX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsK
KwkJLm5hbWUJPSAibWVkaWF0ZWstZGRwIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5v
Zl9tYXRjaF90YWJsZSA9IGRkcF9kcml2ZXJfZHRfbWF0Y2gsCisJfSwKK307CisKK21vZHVsZV9w
bGF0Zm9ybV9kcml2ZXIobXRrX2RkcF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RybV9kZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmMxMTc1Ci0t
LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgK
QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK
KyNpZm5kZWYgTVRLX0RSTV9ERFBfSAorI2RlZmluZSBNVEtfRFJNX0REUF9ICisKKyNpbmNsdWRl
ICJtdGtfZHJtX2RkcF9jb21wLmgiCisKK3N0cnVjdCByZWdtYXA7CitzdHJ1Y3QgZGV2aWNlOwor
c3RydWN0IG10a19kaXNwX211dGV4OworCit2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2
b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQg
Y3VyLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCk7Cit2b2lkIG10a19kZHBf
cmVtb3ZlX2NvbXBfZnJvbV9wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkJICAg
ZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5l
eHQpOworCitzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3Qg
ZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCk7CitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFy
ZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfYWRk
X2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCwKKwkJCSAgICAgZW51bSBtdGtfZGRw
X2NvbXBfaWQgaWQpOwordm9pZCBtdGtfZGlzcF9tdXRleF9lbmFibGUoc3RydWN0IG10a19kaXNw
X211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X2Rpc2FibGUoc3RydWN0IG10a19k
aXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKHN0cnVj
dCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpOwor
dm9pZCBtdGtfZGlzcF9tdXRleF91bnByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRl
eCk7Cit2b2lkIG10a19kaXNwX211dGV4X3B1dChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4
KTsKKworI2VuZGlmIC8qIE1US19EUk1fRERQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RybV9kZHBfY29tcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjM5NzBmY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RybV9kZHBfY29tcC5jCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDE1IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcnM6CisgKglZVCBTaGVuIDx5dC5zaGVuQG1lZGlh
dGVrLmNvbT4KKyAqCUNLIEh1IDxjay5odUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9n
cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9j
bGsuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3Mu
aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9y
bS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGRybS9k
cm1QLmg+CisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5l
LmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1BfT0RfRU4J
CQkJMHgwMDAwCisjZGVmaW5lIERJU1BfT0RfSU5URU4JCQkJMHgwMDA4CisjZGVmaW5lIERJU1Bf
T0RfSU5UU1RBCQkJCTB4MDAwYworI2RlZmluZSBESVNQX09EX0NGRwkJCQkweDAwMjAKKyNkZWZp
bmUgRElTUF9PRF9TSVpFCQkJCTB4MDAzMAorCisjZGVmaW5lIERJU1BfUkVHX1VGT19TVEFSVAkJ
CTB4MDAwMAorCisjZGVmaW5lIERJU1BfQ09MT1JfQ0ZHX01BSU4JCQkweDA0MDAKKyNkZWZpbmUg
RElTUF9DT0xPUl9TVEFSVAkJCTB4MGMwMAorI2RlZmluZSBESVNQX0NPTE9SX1dJRFRICQkJMHgw
YzUwCisjZGVmaW5lIERJU1BfQ09MT1JfSEVJR0hUCQkJMHgwYzU0CisKKyNkZWZpbmUJT0RfUkVM
QVlfTU9ERQkJQklUKDApCisKKyNkZWZpbmUJVUZPX0JZUEFTUwkJQklUKDIpCisKKyNkZWZpbmUJ
Q09MT1JfQllQQVNTX0FMTAlCSVQoNykKKyNkZWZpbmUJQ09MT1JfU0VRX1NFTAkJQklUKDEzKQor
CitzdGF0aWMgdm9pZCBtdGtfY29sb3JfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs
IHVuc2lnbmVkIGludCB3LAorCQkJICAgICB1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQgaW50IHZy
ZWZyZXNoKQoreworCXdyaXRlbCh3LCBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9XSURUSCk7CisJ
d3JpdGVsKGgsIGNvbXAtPnJlZ3MgKyBESVNQX0NPTE9SX0hFSUdIVCk7Cit9CisKK3N0YXRpYyB2
b2lkIG10a19jb2xvcl9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXdyaXRl
bChDT0xPUl9CWVBBU1NfQUxMIHwgQ09MT1JfU0VRX1NFTCwKKwkgICAgICAgY29tcC0+cmVncyAr
IERJU1BfQ09MT1JfQ0ZHX01BSU4pOworCXdyaXRlbCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX0NP
TE9SX1NUQVJUKTsKK30KKworc3RhdGljIHZvaWQgbXRrX29kX2NvbmZpZyhzdHJ1Y3QgbXRrX2Rk
cF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgdywKKwkJCSAgdW5zaWduZWQgaW50IGgsIHVuc2ln
bmVkIGludCB2cmVmcmVzaCkKK3sKKwl3cml0ZWwodyA8PCAxNiB8IGgsIGNvbXAtPnJlZ3MgKyBE
SVNQX09EX1NJWkUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfb2Rfc3RhcnQoc3RydWN0IG10a19k
ZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWwoT0RfUkVMQVlfTU9ERSwgY29tcC0+cmVncyArIERJ
U1BfT0RfQ0ZHKTsKKwl3cml0ZWwoMSwgY29tcC0+cmVncyArIERJU1BfT0RfRU4pOworfQorCitz
dGF0aWMgdm9pZCBtdGtfdWZvZV9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQorewor
CXdyaXRlbChVRk9fQllQQVNTLCBjb21wLT5yZWdzICsgRElTUF9SRUdfVUZPX1NUQVJUKTsKK30K
Kworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX2NvbG9yID0gewor
CS5jb25maWcgPSBtdGtfY29sb3JfY29uZmlnLAorCS5zdGFydCA9IG10a19jb2xvcl9zdGFydCwK
K307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRkcF9vZCA9IHsK
KwkuY29uZmlnID0gbXRrX29kX2NvbmZpZywKKwkuc3RhcnQgPSBtdGtfb2Rfc3RhcnQsCit9Owor
CitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBkZHBfdWZvZSA9IHsKKwku
c3RhcnQgPSBtdGtfdWZvZV9zdGFydCwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qg
bXRrX2RkcF9jb21wX3N0ZW1bTVRLX0REUF9DT01QX1RZUEVfTUFYXSA9IHsKKwlbTVRLX0RJU1Bf
T1ZMXSA9ICJvdmwiLAorCVtNVEtfRElTUF9SRE1BXSA9ICJyZG1hIiwKKwlbTVRLX0RJU1BfV0RN
QV0gPSAid2RtYSIsCisJW01US19ESVNQX0NPTE9SXSA9ICJjb2xvciIsCisJW01US19ESVNQX0FB
TF0gPSAiYWFsIiwKKwlbTVRLX0RJU1BfR0FNTUFdID0gImdhbW1hIiwKKwlbTVRLX0RJU1BfVUZP
RV0gPSAidWZvZSIsCisJW01US19EU0ldID0gImRzaSIsCisJW01US19EUEldID0gImRwaSIsCisJ
W01US19ESVNQX1BXTV0gPSAicHdtIiwKKwlbTVRLX0RJU1BfTVVURVhdID0gIm11dGV4IiwKKwlb
TVRLX0RJU1BfT0RdID0gIm9kIiwKK307CisKK3N0cnVjdCBtdGtfZGRwX2NvbXBfbWF0Y2ggewor
CWVudW0gbXRrX2RkcF9jb21wX3R5cGUgdHlwZTsKKwlpbnQgYWxpYXNfaWQ7CisJY29uc3Qgc3Ry
dWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3M7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0
IG10a19kZHBfY29tcF9tYXRjaCBtdGtfZGRwX21hdGNoZXNbRERQX0NPTVBPTkVOVF9JRF9NQVhd
ID0geworCVtERFBfQ09NUE9ORU5UX0FBTF0JPSB7IE1US19ESVNQX0FBTCwJMCwgTlVMTCB9LAor
CVtERFBfQ09NUE9ORU5UX0NPTE9SMF0JPSB7IE1US19ESVNQX0NPTE9SLAkwLCAmZGRwX2NvbG9y
IH0sCisJW0REUF9DT01QT05FTlRfQ09MT1IxXQk9IHsgTVRLX0RJU1BfQ09MT1IsCTEsICZkZHBf
Y29sb3IgfSwKKwlbRERQX0NPTVBPTkVOVF9EUEkwXQk9IHsgTVRLX0RQSSwJCTAsIE5VTEwgfSwK
KwlbRERQX0NPTVBPTkVOVF9EU0kwXQk9IHsgTVRLX0RTSSwJCTAsIE5VTEwgfSwKKwlbRERQX0NP
TVBPTkVOVF9EU0kxXQk9IHsgTVRLX0RTSSwJCTEsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9H
QU1NQV0JPSB7IE1US19ESVNQX0dBTU1BLAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfT0Rd
CT0geyBNVEtfRElTUF9PRCwJMCwgJmRkcF9vZCB9LAorCVtERFBfQ09NUE9ORU5UX09WTDBdCT0g
eyBNVEtfRElTUF9PVkwsCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVOVF9PVkwxXQk9IHsgTVRL
X0RJU1BfT1ZMLAkxLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfUFdNMF0JPSB7IE1US19ESVNQ
X1BXTSwJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX1JETUEwXQk9IHsgTVRLX0RJU1BfUkRN
QSwJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX1JETUExXQk9IHsgTVRLX0RJU1BfUkRNQSwJ
MSwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX1JETUEyXQk9IHsgTVRLX0RJU1BfUkRNQSwJMiwg
TlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX1VGT0VdCT0geyBNVEtfRElTUF9VRk9FLAkwLCAmZGRw
X3Vmb2UgfSwKKwlbRERQX0NPTVBPTkVOVF9XRE1BMF0JPSB7IE1US19ESVNQX1dETUEsCTAsIE5V
TEwgfSwKKwlbRERQX0NPTVBPTkVOVF9XRE1BMV0JPSB7IE1US19ESVNQX1dETUEsCTEsIE5VTEwg
fSwKK307CisKK2ludCBtdGtfZGRwX2NvbXBfZ2V0X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9k
ZSwKKwkJCWVudW0gbXRrX2RkcF9jb21wX3R5cGUgY29tcF90eXBlKQoreworCWludCBpZCA9IG9m
X2FsaWFzX2dldF9pZChub2RlLCBtdGtfZGRwX2NvbXBfc3RlbVtjb21wX3R5cGVdKTsKKwlpbnQg
aTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10a19kZHBfbWF0Y2hlcyk7IGkrKykg
eworCQlpZiAoY29tcF90eXBlID09IG10a19kZHBfbWF0Y2hlc1tpXS50eXBlICYmCisJCSAgICAo
aWQgPCAwIHx8IGlkID09IG10a19kZHBfbWF0Y2hlc1tpXS5hbGlhc19pZCkpCisJCQlyZXR1cm4g
aTsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworaW50IG10a19kZHBfY29tcF9pbml0KHN0
cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkgICAgICBzdHJ1
Y3QgbXRrX2RkcF9jb21wICpjb21wLCBlbnVtIG10a19kZHBfY29tcF9pZCBjb21wX2lkLAorCQkg
ICAgICBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzICpmdW5jcykKK3sKKwllbnVtIG10
a19kZHBfY29tcF90eXBlIHR5cGU7CisJc3RydWN0IGRldmljZV9ub2RlICpsYXJiX25vZGU7CisJ
c3RydWN0IHBsYXRmb3JtX2RldmljZSAqbGFyYl9wZGV2OworCisJaWYgKGNvbXBfaWQgPCAwIHx8
IGNvbXBfaWQgPj0gRERQX0NPTVBPTkVOVF9JRF9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJ
Y29tcC0+aWQgPSBjb21wX2lkOworCWNvbXAtPmZ1bmNzID0gZnVuY3MgPzogbXRrX2RkcF9tYXRj
aGVzW2NvbXBfaWRdLmZ1bmNzOworCisJaWYgKGNvbXBfaWQgPT0gRERQX0NPTVBPTkVOVF9EUEkw
IHx8CisJICAgIGNvbXBfaWQgPT0gRERQX0NPTVBPTkVOVF9EU0kwIHx8CisJICAgIGNvbXBfaWQg
PT0gRERQX0NPTVBPTkVOVF9QV00wKSB7CisJCWNvbXAtPnJlZ3MgPSBOVUxMOworCQljb21wLT5j
bGsgPSBOVUxMOworCQljb21wLT5pcnEgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwljb21wLT5y
ZWdzID0gb2ZfaW9tYXAobm9kZSwgMCk7CisJY29tcC0+aXJxID0gb2ZfaXJxX2dldChub2RlLCAw
KTsKKwljb21wLT5jbGsgPSBvZl9jbGtfZ2V0KG5vZGUsIDApOworCWlmIChJU19FUlIoY29tcC0+
Y2xrKSkKKwkJY29tcC0+Y2xrID0gTlVMTDsKKworCXR5cGUgPSBtdGtfZGRwX21hdGNoZXNbY29t
cF9pZF0udHlwZTsKKworCS8qIE9ubHkgRE1BIGNhcGFibGUgY29tcG9uZW50cyBuZWVkIHRoZSBM
QVJCIHByb3BlcnR5ICovCisJY29tcC0+bGFyYl9kZXYgPSBOVUxMOworCWlmICh0eXBlICE9IE1U
S19ESVNQX09WTCAmJgorCSAgICB0eXBlICE9IE1US19ESVNQX1JETUEgJiYKKwkgICAgdHlwZSAh
PSBNVEtfRElTUF9XRE1BKQorCQlyZXR1cm4gMDsKKworCWxhcmJfbm9kZSA9IG9mX3BhcnNlX3Bo
YW5kbGUobm9kZSwgIm1lZGlhdGVrLGxhcmIiLCAwKTsKKwlpZiAoIWxhcmJfbm9kZSkgeworCQlk
ZXZfZXJyKGRldiwKKwkJCSJNaXNzaW5nIG1lZGlhZGVrLGxhcmIgcGhhbmRsZSBpbiAlcyBub2Rl
XG4iLAorCQkJbm9kZS0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbGFy
Yl9wZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShsYXJiX25vZGUpOworCWlmICghbGFyYl9w
ZGV2KSB7CisJCWRldl93YXJuKGRldiwgIldhaXRpbmcgZm9yIGxhcmIgZGV2aWNlICVzXG4iLAor
CQkJIGxhcmJfbm9kZS0+ZnVsbF9uYW1lKTsKKwkJb2Zfbm9kZV9wdXQobGFyYl9ub2RlKTsKKwkJ
cmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCW9mX25vZGVfcHV0KGxhcmJfbm9kZSk7CisKKwlj
b21wLT5sYXJiX2RldiA9ICZsYXJiX3BkZXYtPmRldjsKKworCXJldHVybiAwOworfQorCitpbnQg
bXRrX2RkcF9jb21wX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtf
ZGRwX2NvbXAgKmNvbXApCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRy
bS0+ZGV2X3ByaXZhdGU7CisKKwlpZiAocHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdKQorCQly
ZXR1cm4gLUVCVVNZOworCisJcHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdID0gY29tcDsKKwly
ZXR1cm4gMDsKK30KKwordm9pZCBtdGtfZGRwX2NvbXBfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2Rl
dmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZHJt
X3ByaXZhdGUgKnByaXZhdGUgPSBkcm0tPmRldl9wcml2YXRlOworCisJcHJpdmF0ZS0+ZGRwX2Nv
bXBbY29tcC0+aWRdID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX2RkcF9jb21wLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9kZHBfY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMTNiYTkK
LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBf
Y29tcC5oCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlh
VGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKi8KKworI2lmbmRlZiBNVEtfRFJNX0REUF9DT01QX0gKKyNkZWZpbmUgTVRLX0RSTV9ERFBf
Q09NUF9ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0
IGRldmljZV9ub2RlOworc3RydWN0IGRybV9jcnRjOworc3RydWN0IGRybV9kZXZpY2U7CitzdHJ1
Y3QgbXRrX3BsYW5lX3N0YXRlOworCitlbnVtIG10a19kZHBfY29tcF90eXBlIHsKKwlNVEtfRElT
UF9PVkwsCisJTVRLX0RJU1BfUkRNQSwKKwlNVEtfRElTUF9XRE1BLAorCU1US19ESVNQX0NPTE9S
LAorCU1US19ESVNQX0FBTCwKKwlNVEtfRElTUF9HQU1NQSwKKwlNVEtfRElTUF9VRk9FLAorCU1U
S19EU0ksCisJTVRLX0RQSSwKKwlNVEtfRElTUF9QV00sCisJTVRLX0RJU1BfTVVURVgsCisJTVRL
X0RJU1BfT0QsCisJTVRLX0REUF9DT01QX1RZUEVfTUFYLAorfTsKKworZW51bSBtdGtfZGRwX2Nv
bXBfaWQgeworCUREUF9DT01QT05FTlRfQUFMLAorCUREUF9DT01QT05FTlRfQ09MT1IwLAorCURE
UF9DT01QT05FTlRfQ09MT1IxLAorCUREUF9DT01QT05FTlRfRFBJMCwKKwlERFBfQ09NUE9ORU5U
X0RTSTAsCisJRERQX0NPTVBPTkVOVF9EU0kxLAorCUREUF9DT01QT05FTlRfR0FNTUEsCisJRERQ
X0NPTVBPTkVOVF9PRCwKKwlERFBfQ09NUE9ORU5UX09WTDAsCisJRERQX0NPTVBPTkVOVF9PVkwx
LAorCUREUF9DT01QT05FTlRfUFdNMCwKKwlERFBfQ09NUE9ORU5UX1BXTTEsCisJRERQX0NPTVBP
TkVOVF9SRE1BMCwKKwlERFBfQ09NUE9ORU5UX1JETUExLAorCUREUF9DT01QT05FTlRfUkRNQTIs
CisJRERQX0NPTVBPTkVOVF9VRk9FLAorCUREUF9DT01QT05FTlRfV0RNQTAsCisJRERQX0NPTVBP
TkVOVF9XRE1BMSwKKwlERFBfQ09NUE9ORU5UX0lEX01BWCwKK307CisKK3N0cnVjdCBtdGtfZGRw
X2NvbXA7CisKK3N0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgeworCXZvaWQgKCpjb25maWcpKHN0
cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCB3LAorCQkgICAgICAgdW5zaWdu
ZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVmcmVzaCk7CisJdm9pZCAoKnN0YXJ0KShzdHJ1Y3Qg
bXRrX2RkcF9jb21wICpjb21wKTsKKwl2b2lkICgqc3RvcCkoc3RydWN0IG10a19kZHBfY29tcCAq
Y29tcCk7CisJdm9pZCAoKmVuYWJsZV92YmxhbmspKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAs
IHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CisJdm9pZCAoKmRpc2FibGVfdmJsYW5rKShzdHJ1Y3Qg
bXRrX2RkcF9jb21wICpjb21wKTsKKwl2b2lkICgqbGF5ZXJfb24pKHN0cnVjdCBtdGtfZGRwX2Nv
bXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgpOworCXZvaWQgKCpsYXllcl9vZmYpKHN0cnVjdCBt
dGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgpOworCXZvaWQgKCpsYXllcl9jb25m
aWcpKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgsCisJCQkgICAg
IHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlKTsKK307CisKK3N0cnVjdCBtdGtfZGRwX2Nv
bXAgeworCXN0cnVjdCBjbGsgKmNsazsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJaW50IGlycTsK
KwlzdHJ1Y3QgZGV2aWNlICpsYXJiX2RldjsKKwllbnVtIG10a19kZHBfY29tcF9pZCBpZDsKKwlj
b25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzICpmdW5jczsKK307CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBtdGtfZGRwX2NvbXBfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJ
CQkJICAgICAgIHVuc2lnbmVkIGludCB3LCB1bnNpZ25lZCBpbnQgaCwKKwkJCQkgICAgICAgdW5z
aWduZWQgaW50IHZyZWZyZXNoKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+
Y29uZmlnKQorCQljb21wLT5mdW5jcy0+Y29uZmlnKGNvbXAsIHcsIGgsIHZyZWZyZXNoKTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9j
b21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+c3RhcnQpCisJ
CWNvbXAtPmZ1bmNzLT5zdGFydChjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19k
ZHBfY29tcF9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJaWYgKGNvbXAtPmZ1
bmNzICYmIGNvbXAtPmZ1bmNzLT5zdG9wKQorCQljb21wLT5mdW5jcy0+c3RvcChjb21wKTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9lbmFibGVfdmJsYW5rKHN0cnVjdCBt
dGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sK
KwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmVuYWJsZV92YmxhbmspCisJCWNvbXAt
PmZ1bmNzLT5lbmFibGVfdmJsYW5rKGNvbXAsIGNydGMpOworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgbXRrX2RkcF9jb21wX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAp
Cit7CisJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5kaXNhYmxlX3ZibGFuaykKKwkJ
Y29tcC0+ZnVuY3MtPmRpc2FibGVfdmJsYW5rKGNvbXApOworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgbXRrX2RkcF9jb21wX2xheWVyX29uKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJCQkJ
CSB1bnNpZ25lZCBpbnQgaWR4KQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+
bGF5ZXJfb24pCisJCWNvbXAtPmZ1bmNzLT5sYXllcl9vbihjb21wLCBpZHgpOworfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2xheWVyX29mZihzdHJ1Y3QgbXRrX2RkcF9jb21w
ICpjb21wLAorCQkJCQkgIHVuc2lnbmVkIGludCBpZHgpCit7CisJaWYgKGNvbXAtPmZ1bmNzICYm
IGNvbXAtPmZ1bmNzLT5sYXllcl9vZmYpCisJCWNvbXAtPmZ1bmNzLT5sYXllcl9vZmYoY29tcCwg
aWR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29tcF9sYXllcl9jb25maWco
c3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgaWR4LAor
CQkJCQkgICAgIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCWlmIChjb21wLT5m
dW5jcyAmJiBjb21wLT5mdW5jcy0+bGF5ZXJfY29uZmlnKQorCQljb21wLT5mdW5jcy0+bGF5ZXJf
Y29uZmlnKGNvbXAsIGlkeCwgc3RhdGUpOworfQorCitpbnQgbXRrX2RkcF9jb21wX2dldF9pZChz
dHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQllbnVtIG10a19kZHBfY29tcF90eXBlIGNvbXBf
dHlwZSk7CitpbnQgbXRrX2RkcF9jb21wX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qg
ZGV2aWNlX25vZGUgKmNvbXBfbm9kZSwKKwkJICAgICAgc3RydWN0IG10a19kZHBfY29tcCAqY29t
cCwgZW51bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCwKKwkJICAgICAgY29uc3Qgc3RydWN0IG10
a19kZHBfY29tcF9mdW5jcyAqZnVuY3MpOworaW50IG10a19kZHBfY29tcF9yZWdpc3RlcihzdHJ1
Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKTsKK3ZvaWQgbXRr
X2RkcF9jb21wX3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19k
ZHBfY29tcCAqY29tcCk7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0REUF9DT01QX0ggKi8KZGlmZiAt
LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jIGIvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZmNhYmZhZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX2Rydi5jCkBAIC0wLDAgKzEsNTc5IEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogWVQgU0hFTiA8eXQuc2hlbkBtZWRpYXRl
ay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+
CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9j
cnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8bGludXgv
Y29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvaW9tbXUuaD4KKyNpbmNsdWRlIDxsaW51eC9v
Zl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxs
aW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRl
ICJtdGtfZHJtX2RkcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKyNpbmNsdWRl
ICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtf
ZHJtX2dlbS5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJtZWRpYXRlayIKKyNkZWZpbmUgRFJJ
VkVSX0RFU0MgIk1lZGlhdGVrIFNvQyBEUk0iCisjZGVmaW5lIERSSVZFUl9EQVRFICIyMDE1MDUx
MyIKKyNkZWZpbmUgRFJJVkVSX01BSk9SIDEKKyNkZWZpbmUgRFJJVkVSX01JTk9SIDAKKworc3Rh
dGljIHZvaWQgbXRrX2F0b21pY19zY2hlZHVsZShzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2
YXRlLAorCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlwcml2YXRlLT5j
b21taXQuc3RhdGUgPSBzdGF0ZTsKKwlzY2hlZHVsZV93b3JrKCZwcml2YXRlLT5jb21taXQud29y
ayk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19hdG9taWNfd2FpdF9mb3JfZmVuY2VzKHN0cnVjdCBk
cm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKKwlz
dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKwlpbnQgaTsKKworCWZvcl9lYWNo
X3BsYW5lX2luX3N0YXRlKHN0YXRlLCBwbGFuZSwgcGxhbmVfc3RhdGUsIGkpCisJCW10a19mYl93
YWl0KHBsYW5lLT5zdGF0ZS0+ZmIpOworfQorCitzdGF0aWMgdm9pZCBtdGtfYXRvbWljX2NvbXBs
ZXRlKHN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUsCisJCQkJc3RydWN0IGRybV9hdG9t
aWNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5k
cm07CisKKwltdGtfYXRvbWljX3dhaXRfZm9yX2ZlbmNlcyhzdGF0ZSk7CisKKwlkcm1fYXRvbWlj
X2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRvbWlj
X2hlbHBlcl9jb21taXRfcGxhbmVzKGRybSwgc3RhdGUsIGZhbHNlKTsKKwlkcm1fYXRvbWljX2hl
bHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzKGRybSwgc3RhdGUpOworCWRybV9hdG9taWNfaGVs
cGVyX3dhaXRfZm9yX3ZibGFua3MoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY2xl
YW51cF9wbGFuZXMoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21pY19zdGF0ZV9mcmVlKHN0YXRlKTsK
K30KKworc3RhdGljIHZvaWQgbXRrX2F0b21pY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29y
aykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gY29udGFpbmVyX29mKHdv
cmssCisJCQlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlLCBjb21taXQud29yayk7CisKKwltdGtfYXRv
bWljX2NvbXBsZXRlKHByaXZhdGUsIHByaXZhdGUtPmNvbW1pdC5zdGF0ZSk7Cit9CisKK3N0YXRp
YyBpbnQgbXRrX2F0b21pY19jb21taXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKKwkJCSAgICAg
c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJICAgICBib29sIGFzeW5jKQorewor
CXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkcm0tPmRldl9wcml2YXRlOworCWlu
dCByZXQ7CisKKwlyZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9wcmVwYXJlX3BsYW5lcyhkcm0sIHN0
YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmcHJpdmF0ZS0+
Y29tbWl0LmxvY2spOworCWZsdXNoX3dvcmsoJnByaXZhdGUtPmNvbW1pdC53b3JrKTsKKworCWRy
bV9hdG9taWNfaGVscGVyX3N3YXBfc3RhdGUoZHJtLCBzdGF0ZSk7CisKKwlpZiAoYXN5bmMpCisJ
CW10a19hdG9taWNfc2NoZWR1bGUocHJpdmF0ZSwgc3RhdGUpOworCWVsc2UKKwkJbXRrX2F0b21p
Y19jb21wbGV0ZShwcml2YXRlLCBzdGF0ZSk7CisKKwltdXRleF91bmxvY2soJnByaXZhdGUtPmNv
bW1pdC5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9t
b2RlX2NvbmZpZ19mdW5jcyBtdGtfZHJtX21vZGVfY29uZmlnX2Z1bmNzID0geworCS5mYl9jcmVh
dGUgPSBtdGtfZHJtX21vZGVfZmJfY3JlYXRlLAorCS5hdG9taWNfY2hlY2sgPSBkcm1fYXRvbWlj
X2hlbHBlcl9jaGVjaywKKwkuYXRvbWljX2NvbW1pdCA9IG10a19hdG9taWNfY29tbWl0LAorfTsK
Kworc3RhdGljIGNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkIG10a19kZHBfbWFpbltdID0gewor
CUREUF9DT01QT05FTlRfT1ZMMCwKKwlERFBfQ09NUE9ORU5UX0NPTE9SMCwKKwlERFBfQ09NUE9O
RU5UX0FBTCwKKwlERFBfQ09NUE9ORU5UX09ELAorCUREUF9DT01QT05FTlRfUkRNQTAsCisJRERQ
X0NPTVBPTkVOVF9VRk9FLAorCUREUF9DT01QT05FTlRfRFNJMCwKKwlERFBfQ09NUE9ORU5UX1BX
TTAsCit9OworCitzdGF0aWMgY29uc3QgZW51bSBtdGtfZGRwX2NvbXBfaWQgbXRrX2RkcF9leHRb
XSA9IHsKKwlERFBfQ09NUE9ORU5UX09WTDEsCisJRERQX0NPTVBPTkVOVF9DT0xPUjEsCisJRERQ
X0NPTVBPTkVOVF9HQU1NQSwKKwlERFBfQ09NUE9ORU5UX1JETUExLAorCUREUF9DT01QT05FTlRf
RFBJMCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RybV9rbXNfaW5pdChzdHJ1Y3QgZHJtX2Rldmlj
ZSAqZHJtKQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkcm0tPmRldl9w
cml2YXRlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJaW50IHJldDsKKworCWlm
ICghaW9tbXVfcHJlc2VudCgmcGxhdGZvcm1fYnVzX3R5cGUpKQorCQlyZXR1cm4gLUVQUk9CRV9E
RUZFUjsKKworCXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHByaXZhdGUtPm11dGV4X25v
ZGUpOworCWlmICghcGRldikgeworCQlkZXZfZXJyKGRybS0+ZGV2LCAiV2FpdGluZyBmb3IgZGlz
cC1tdXRleCBkZXZpY2UgJXNcbiIsCisJCQlwcml2YXRlLT5tdXRleF9ub2RlLT5mdWxsX25hbWUp
OworCQlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwkJcmV0dXJuIC1FUFJPQkVf
REVGRVI7CisJfQorCXByaXZhdGUtPm11dGV4X2RldiA9ICZwZGV2LT5kZXY7CisKKwlkcm1fbW9k
ZV9jb25maWdfaW5pdChkcm0pOworCisJZHJtLT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSA2NDsK
Kwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSA2NDsKKworCS8qCisJICogc2V0IG1heCB3
aWR0aCBhbmQgaGVpZ2h0IGFzIGRlZmF1bHQgdmFsdWUoNDA5Nng0MDk2KS4KKwkgKiB0aGlzIHZh
bHVlIHdvdWxkIGJlIHVzZWQgdG8gY2hlY2sgZnJhbWVidWZmZXIgc2l6ZSBsaW1pdGF0aW9uCisJ
ICogYXQgZHJtX21vZGVfYWRkZmIoKS4KKwkgKi8KKwlkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0
aCA9IDQwOTY7CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gNDA5NjsKKwlkcm0tPm1v
ZGVfY29uZmlnLmZ1bmNzID0gJm10a19kcm1fbW9kZV9jb25maWdfZnVuY3M7CisKKwlyZXQgPSBj
b21wb25lbnRfYmluZF9hbGwoZHJtLT5kZXYsIGRybSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJf
Y29uZmlnX2NsZWFudXA7CisKKwkvKgorCSAqIFdlIGN1cnJlbnRseSBzdXBwb3J0IHR3byBmaXhl
ZCBkYXRhIHN0cmVhbXMsIGVhY2ggb3B0aW9uYWwsCisJICogYW5kIGVhY2ggc3RhdGljYWxseSBh
c3NpZ25lZCB0byBhIGNydGM6CisJICogT1ZMMCAtPiBDT0xPUjAgLT4gQUFMIC0+IE9EIC0+IFJE
TUEwIC0+IFVGT0UgLT4gRFNJMCAuLi4KKwkgKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRl
KGRybSwgbXRrX2RkcF9tYWluLCBBUlJBWV9TSVpFKG10a19kZHBfbWFpbikpOworCWlmIChyZXQg
PCAwKQorCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOworCS8qIC4uLiBhbmQgT1ZMMSAtPiBD
T0xPUjEgLT4gR0FNTUEgLT4gUkRNQTEgLT4gRFBJMC4gKi8KKwlyZXQgPSBtdGtfZHJtX2NydGNf
Y3JlYXRlKGRybSwgbXRrX2RkcF9leHQsIEFSUkFZX1NJWkUobXRrX2RkcF9leHQpKTsKKwlpZiAo
cmV0IDwgMCkKKwkJZ290byBlcnJfY29tcG9uZW50X3VuYmluZDsKKworCS8qCisJICogV2UgZG9u
J3QgdXNlIHRoZSBkcm1faXJxX2luc3RhbGwoKSBoZWxwZXJzIHByb3ZpZGVkIGJ5IHRoZSBEUk0K
KwkgKiBjb3JlLCBzbyB3ZSBuZWVkIHRvIHNldCB0aGlzIG1hbnVhbGx5IGluIG9yZGVyIHRvIGFs
bG93IHRoZQorCSAqIERSTV9JT0NUTF9XQUlUX1ZCTEFOSyB0byBvcGVyYXRlIGNvcnJlY3RseS4K
KwkgKi8KKwlkcm0tPmlycV9lbmFibGVkID0gdHJ1ZTsKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQo
ZHJtLCBNQVhfQ1JUQyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2NvbXBvbmVudF91bmJp
bmQ7CisKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoZHJtKTsKKwlkcm1fbW9kZV9jb25maWdf
cmVzZXQoZHJtKTsKKworCXJldHVybiAwOworCitlcnJfY29tcG9uZW50X3VuYmluZDoKKwljb21w
b25lbnRfdW5iaW5kX2FsbChkcm0tPmRldiwgZHJtKTsKK2Vycl9jb25maWdfY2xlYW51cDoKKwlk
cm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj
IHZvaWQgbXRrX2RybV9rbXNfZGVpbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJZHJt
X2ttc19oZWxwZXJfcG9sbF9maW5pKGRybSk7CisKKwlkcm1fdmJsYW5rX2NsZWFudXAoZHJtKTsK
Kwljb21wb25lbnRfdW5iaW5kX2FsbChkcm0tPmRldiwgZHJtKTsKKwlkcm1fbW9kZV9jb25maWdf
Y2xlYW51cChkcm0pOworfQorCitzdGF0aWMgaW50IG10a19kcm1fdW5sb2FkKHN0cnVjdCBkcm1f
ZGV2aWNlICpkcm0pCit7CisJbXRrX2RybV9rbXNfZGVpbml0KGRybSk7CisJZHJtLT5kZXZfcHJp
dmF0ZSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9v
cGVyYXRpb25zX3N0cnVjdCBtdGtfZHJtX2dlbV92bV9vcHMgPSB7CisJLm9wZW4gPSBkcm1fZ2Vt
X3ZtX29wZW4sCisJLmNsb3NlID0gZHJtX2dlbV92bV9jbG9zZSwKK307CisKK3N0YXRpYyBjb25z
dCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG10a19kcm1fZm9wcyA9IHsKKwkub3duZXIgPSBUSElT
X01PRFVMRSwKKwkub3BlbiA9IGRybV9vcGVuLAorCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJ
LnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAorCS5tbWFwID0gbXRrX2RybV9nZW1fbW1hcCwK
KwkucG9sbCA9IGRybV9wb2xsLAorCS5yZWFkID0gZHJtX3JlYWQsCisjaWZkZWYgQ09ORklHX0NP
TVBBVAorCS5jb21wYXRfaW9jdGwgPSBkcm1fY29tcGF0X2lvY3RsLAorI2VuZGlmCit9OworCitz
dGF0aWMgc3RydWN0IGRybV9kcml2ZXIgbXRrX2RybV9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0
dXJlcyA9IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX0dFTSB8IERSSVZFUl9QUklNRSB8CisJCQkg
ICBEUklWRVJfQVRPTUlDLAorCS51bmxvYWQgPSBtdGtfZHJtX3VubG9hZCwKKworCS5nZXRfdmJs
YW5rX2NvdW50ZXIgPSBkcm1fdmJsYW5rX2NvdW50LAorCS5lbmFibGVfdmJsYW5rID0gbXRrX2Ry
bV9jcnRjX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRrX2RybV9jcnRjX2Rp
c2FibGVfdmJsYW5rLAorCisJLmdlbV9mcmVlX29iamVjdCA9IG10a19kcm1fZ2VtX2ZyZWVfb2Jq
ZWN0LAorCS5nZW1fdm1fb3BzID0gJm10a19kcm1fZ2VtX3ZtX29wcywKKwkuZHVtYl9jcmVhdGUg
PSBtdGtfZHJtX2dlbV9kdW1iX2NyZWF0ZSwKKwkuZHVtYl9tYXBfb2Zmc2V0ID0gbXRrX2RybV9n
ZW1fZHVtYl9tYXBfb2Zmc2V0LAorCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1bWJfZGVzdHJv
eSwKKworCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwK
KwkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdl
bV9wcmltZV9leHBvcnQgPSBkcm1fZ2VtX3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9y
dCA9IGRybV9nZW1fcHJpbWVfaW1wb3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gbXRr
X2dlbV9wcmltZV9nZXRfc2dfdGFibGUsCisJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBt
dGtfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSwKKwkuZ2VtX3ByaW1lX21tYXAgPSBtdGtfZHJt
X2dlbV9tbWFwX2J1ZiwKKwkuZm9wcyA9ICZtdGtfZHJtX2ZvcHMsCisKKwkubmFtZSA9IERSSVZF
Ul9OQU1FLAorCS5kZXNjID0gRFJJVkVSX0RFU0MsCisJLmRhdGUgPSBEUklWRVJfREFURSwKKwku
bWFqb3IgPSBEUklWRVJfTUFKT1IsCisJLm1pbm9yID0gRFJJVkVSX01JTk9SLAorfTsKKworc3Rh
dGljIGludCBjb21wYXJlX29mKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwly
ZXR1cm4gZGV2LT5vZl9ub2RlID09IGRhdGE7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9iaW5k
KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRl
ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKwlpbnQg
cmV0OworCisJZHJtID0gZHJtX2Rldl9hbGxvYygmbXRrX2RybV9kcml2ZXIsIGRldik7CisJaWYg
KCFkcm0pCisJCXJldHVybiAtRU5PTUVNOworCisJZHJtX2Rldl9zZXRfdW5pcXVlKGRybSwgZGV2
X25hbWUoZGV2KSk7CisKKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7CisJaWYgKHJl
dCA8IDApCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlkcm0tPmRldl9wcml2YXRlID0gcHJpdmF0ZTsK
Kwlwcml2YXRlLT5kcm0gPSBkcm07CisKKwlyZXQgPSBtdGtfZHJtX2ttc19pbml0KGRybSk7CisJ
aWYgKHJldCA8IDApCisJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CisKKwlyZXR1cm4gMDsKKworZXJy
X3VucmVnaXN0ZXI6CisJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7CitlcnJfZnJlZToKKwlkcm1f
ZGV2X3VucmVmKGRybSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV91
bmJpbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnBy
aXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRybV9wdXRfZGV2KHByaXZhdGUtPmRy
bSk7CisJcHJpdmF0ZS0+ZHJtID0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21w
b25lbnRfbWFzdGVyX29wcyBtdGtfZHJtX29wcyA9IHsKKwkuYmluZAkJPSBtdGtfZHJtX2JpbmQs
CisJLnVuYmluZAkJPSBtdGtfZHJtX3VuYmluZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg
b2ZfZGV2aWNlX2lkIG10a19kZHBfY29tcF9kdF9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0g
Im1lZGlhdGVrLG10ODE3My1kaXNwLW92bCIsICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX09W
TCB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtcmRtYSIsICAuZGF0
YSA9ICh2b2lkICopTVRLX0RJU1BfUkRNQSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWss
bXQ4MTczLWRpc3Atd2RtYSIsICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfV0RNQSB9LAorCXsg
LmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtY29sb3IiLCAuZGF0YSA9ICh2b2lk
ICopTVRLX0RJU1BfQ09MT1IgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1k
aXNwLWFhbCIsICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX0FBTH0sCisJeyAuY29tcGF0aWJs
ZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1nYW1tYSIsIC5kYXRhID0gKHZvaWQgKilNVEtfRElT
UF9HQU1NQSwgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXVmb2Ui
LCAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX1VGT0UgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1l
ZGlhdGVrLG10ODE3My1kc2kiLCAgICAgICAgLmRhdGEgPSAodm9pZCAqKU1US19EU0kgfSwKKwl7
IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kcGkiLCAgICAgICAgLmRhdGEgPSAodm9p
ZCAqKU1US19EUEkgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW11
dGV4IiwgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX01VVEVYIH0sCisJeyAuY29tcGF0aWJsZSA9
ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1wd20iLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9Q
V00gfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW9kIiwgICAgLmRh
dGEgPSAodm9pZCAqKU1US19ESVNQX09EIH0sCisJeyB9Cit9OworCitzdGF0aWMgaW50IG10a19k
cm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNl
ICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGU7CisJ
c3RydWN0IHJlc291cmNlICptZW07CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCXN0cnVj
dCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKKwlpbnQgcmV0OworCWludCBpOworCisJ
cHJpdmF0ZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdmF0ZSksIEdGUF9LRVJORUwp
OworCWlmICghcHJpdmF0ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9pbml0KCZwcml2
YXRlLT5jb21taXQubG9jayk7CisJSU5JVF9XT1JLKCZwcml2YXRlLT5jb21taXQud29yaywgbXRr
X2F0b21pY193b3JrKTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JF
U09VUkNFX01FTSwgMCk7CisJcHJpdmF0ZS0+Y29uZmlnX3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVz
b3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19FUlIocHJpdmF0ZS0+Y29uZmlnX3JlZ3MpKSB7CisJ
CXJldCA9IFBUUl9FUlIocHJpdmF0ZS0+Y29uZmlnX3JlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZh
aWxlZCB0byBpb3JlbWFwIG1tc3lzLWNvbmZpZyByZXNvdXJjZTogJWRcbiIsCisJCQlyZXQpOwor
CQlyZXR1cm4gcmV0OworCX0KKworCS8qIEl0ZXJhdGUgb3ZlciBzaWJsaW5nIERJU1AgZnVuY3Rp
b24gYmxvY2tzICovCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShkZXYtPm9mX25vZGUtPnBhcmVu
dCwgbm9kZSkgeworCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKKwkJZW51bSBt
dGtfZGRwX2NvbXBfdHlwZSBjb21wX3R5cGU7CisJCWludCBjb21wX2lkOworCisJCW9mX2lkID0g
b2ZfbWF0Y2hfbm9kZShtdGtfZGRwX2NvbXBfZHRfaWRzLCBub2RlKTsKKwkJaWYgKCFvZl9pZCkK
KwkJCWNvbnRpbnVlOworCisJCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSkgewor
CQkJZGV2X2RiZyhkZXYsICJTa2lwcGluZyBkaXNhYmxlZCBjb21wb25lbnQgJXNcbiIsCisJCQkJ
bm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29tcF90eXBlID0gKGVu
dW0gbXRrX2RkcF9jb21wX3R5cGUpb2ZfaWQtPmRhdGE7CisKKwkJaWYgKGNvbXBfdHlwZSA9PSBN
VEtfRElTUF9NVVRFWCkgeworCQkJcHJpdmF0ZS0+bXV0ZXhfbm9kZSA9IG9mX25vZGVfZ2V0KG5v
ZGUpOworCQkJY29udGludWU7CisJCX0KKworCQljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9p
ZChub2RlLCBjb21wX3R5cGUpOworCQlpZiAoY29tcF9pZCA8IDApIHsKKwkJCWRldl93YXJuKGRl
diwgIlNraXBwaW5nIHVua25vd24gY29tcG9uZW50ICVzXG4iLAorCQkJCSBub2RlLT5mdWxsX25h
bWUpOworCQkJY29udGludWU7CisJCX0KKworCQlwcml2YXRlLT5jb21wX25vZGVbY29tcF9pZF0g
PSBvZl9ub2RlX2dldChub2RlKTsKKworCQkvKgorCQkgKiBDdXJyZW50bHkgb25seSB0aGUgT1ZM
LCBSRE1BLCBEU0ksIGFuZCBEUEkgYmxvY2tzIGhhdmUKKwkJICogc2VwYXJhdGUgY29tcG9uZW50
IHBsYXRmb3JtIGRyaXZlcnMgYW5kIGluaXRpYWxpemUgdGhlaXIgb3duCisJCSAqIEREUCBjb21w
b25lbnQgc3RydWN0dXJlLiBUaGUgb3RoZXJzIGFyZSBpbml0aWFsaXplZCBoZXJlLgorCQkgKi8K
KwkJaWYgKGNvbXBfdHlwZSA9PSBNVEtfRElTUF9PVkwgfHwKKwkJICAgIGNvbXBfdHlwZSA9PSBN
VEtfRElTUF9SRE1BIHx8CisJCSAgICBjb21wX3R5cGUgPT0gTVRLX0RTSSB8fAorCQkgICAgY29t
cF90eXBlID09IE1US19EUEkpIHsKKwkJCWRldl9pbmZvKGRldiwgIkFkZGluZyBjb21wb25lbnQg
bWF0Y2ggZm9yICVzXG4iLAorCQkJCSBub2RlLT5mdWxsX25hbWUpOworCQkJY29tcG9uZW50X21h
dGNoX2FkZChkZXYsICZtYXRjaCwgY29tcGFyZV9vZiwgbm9kZSk7CisJCX0gZWxzZSB7CisJCQlz
dHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wOworCisJCQljb21wID0gZGV2bV9remFsbG9jKGRldiwg
c2l6ZW9mKCpjb21wKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWNvbXApIHsKKwkJCQlyZXQgPSAt
RU5PTUVNOworCQkJCWdvdG8gZXJyX25vZGU7CisJCQl9CisKKwkJCXJldCA9IG10a19kZHBfY29t
cF9pbml0KGRldiwgbm9kZSwgY29tcCwgY29tcF9pZCwgTlVMTCk7CisJCQlpZiAocmV0KQorCQkJ
CWdvdG8gZXJyX25vZGU7CisKKwkJCXByaXZhdGUtPmRkcF9jb21wW2NvbXBfaWRdID0gY29tcDsK
KwkJfQorCX0KKworCWlmICghcHJpdmF0ZS0+bXV0ZXhfbm9kZSkgeworCQlkZXZfZXJyKGRldiwg
IkZhaWxlZCB0byBmaW5kIGRpc3AtbXV0ZXggbm9kZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJ
CWdvdG8gZXJyX25vZGU7CisJfQorCisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKworCXBsYXRm
b3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXZhdGUpOworCisJcmV0ID0gY29tcG9uZW50X21hc3Rl
cl9hZGRfd2l0aF9tYXRjaChkZXYsICZtdGtfZHJtX29wcywgbWF0Y2gpOworCWlmIChyZXQpCisJ
CWdvdG8gZXJyX3BtOworCisJcmV0dXJuIDA7CisKK2Vycl9wbToKKwlwbV9ydW50aW1lX2Rpc2Fi
bGUoZGV2KTsKK2Vycl9ub2RlOgorCW9mX25vZGVfcHV0KHByaXZhdGUtPm11dGV4X25vZGUpOwor
CWZvciAoaSA9IDA7IGkgPCBERFBfQ09NUE9ORU5UX0lEX01BWDsgaSsrKQorCQlvZl9ub2RlX3B1
dChwcml2YXRlLT5jb21wX25vZGVbaV0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQg
bXRrX2RybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qg
bXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJ
aW50IGk7CisKKwljb21wb25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmbXRrX2RybV9vcHMp
OworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwlvZl9ub2RlX3B1dChwcml2YXRl
LT5tdXRleF9ub2RlKTsKKwlmb3IgKGkgPSAwOyBpIDwgRERQX0NPTVBPTkVOVF9JRF9NQVg7IGkr
KykKKwkJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+Y29tcF9ub2RlW2ldKTsKKworCXJldHVybiAwOwor
fQorCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IG10a19kcm1fc3lzX3N1c3Bl
bmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZh
dGUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJp
dmF0ZS0+ZHJtOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOworCisJZHJtX2ttc19oZWxw
ZXJfcG9sbF9kaXNhYmxlKGRybSk7CisKKwlkcm1fbW9kZXNldF9sb2NrX2FsbChkcm0pOworCWxp
c3RfZm9yX2VhY2hfZW50cnkoY29ubiwgJmRybS0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3Qs
IGhlYWQpIHsKKwkJaW50IG9sZF9kcG1zID0gY29ubi0+ZHBtczsKKworCQlpZiAoY29ubi0+ZnVu
Y3MtPmRwbXMpCisJCQljb25uLT5mdW5jcy0+ZHBtcyhjb25uLCBEUk1fTU9ERV9EUE1TX09GRik7
CisKKwkJLyogU2V0IHRoZSBvbGQgbW9kZSBiYWNrIHRvIHRoZSBjb25uZWN0b3IgZm9yIHJlc3Vt
ZSAqLworCQljb25uLT5kcG1zID0gb2xkX2RwbXM7CisJfQorCWRybV9tb2Rlc2V0X3VubG9ja19h
bGwoZHJtKTsKKworCURSTV9ERUJVR19EUklWRVIoIm10a19kcm1fc3lzX3N1c3BlbmRcbiIpOwor
CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19kcm1fc3lzX3Jlc3VtZShzdHJ1Y3QgZGV2
aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGRldl9nZXRf
ZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwcml2YXRlLT5kcm07CisJ
c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm47CisKKwlkcm1fbW9kZXNldF9sb2NrX2FsbChkcm0p
OworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgJmRybS0+bW9kZV9jb25maWcuY29ubmVjdG9y
X2xpc3QsIGhlYWQpIHsKKwkJaW50IGRlc2lyZWRfbW9kZSA9IGNvbm4tPmRwbXM7CisKKwkJLyoK
KwkJICogYXQgc3VzcGVuZCB0aW1lLCB3ZSBzYXZlIGRwbXMgdG8gY29ubmVjdG9yLT5kcG1zLAor
CQkgKiByZXN0b3JlIHRoZSBvbGRfZHBtcywgYW5kIGF0IGN1cnJlbnQgdGltZSwgdGhlIGNvbm5l
Y3RvcgorCQkgKiBkcG1zIHN0YXR1cyBtdXN0IGJlIERSTV9NT0RFX0RQTVNfT0ZGLgorCQkgKi8K
KwkJY29ubi0+ZHBtcyA9IERSTV9NT0RFX0RQTVNfT0ZGOworCisJCS8qCisJCSAqIElmIHRoZSBj
b25uZWN0b3IgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGR1cmluZyBzdXNwZW5kLAorCQkgKiBkaXNj
b25uZWN0IGl0IGZyb20gdGhlIGVuY29kZXIgYW5kIGxlYXZlIGl0IG9mZi4gV2UnbGwgbm90aWZ5
CisJCSAqIHVzZXJzcGFjZSBhdCB0aGUgZW5kLgorCQkgKi8KKwkJaWYgKGNvbm4tPmZ1bmNzLT5k
cG1zKQorCQkJY29ubi0+ZnVuY3MtPmRwbXMoY29ubiwgZGVzaXJlZF9tb2RlKTsKKwl9CisJZHJt
X21vZGVzZXRfdW5sb2NrX2FsbChkcm0pOworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9lbmFibGUo
ZHJtKTsKKworCURSTV9ERUJVR19EUklWRVIoIm10a19kcm1fc3lzX3Jlc3VtZVxuIik7CisJcmV0
dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG10a19kcm1fcG1f
b3BzLCBtdGtfZHJtX3N5c19zdXNwZW5kLAorCQkJIG10a19kcm1fc3lzX3Jlc3VtZSk7CisKK3N0
YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kcm1fb2ZfaWRzW10gPSB7CisJeyAu
Y29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtbW1zeXMiLCB9LAorCXsgfQorfTsKKworc3Rh
dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RybV9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJ
LnByb2JlCT0gbXRrX2RybV9wcm9iZSwKKwkucmVtb3ZlCT0gbXRrX2RybV9yZW1vdmUsCisJLmRy
aXZlcgk9IHsKKwkJLm5hbWUJPSAibWVkaWF0ZWstZHJtIiwKKwkJLm9mX21hdGNoX3RhYmxlID0g
bXRrX2RybV9vZl9pZHMsCisJCS5wbSAgICAgPSAmbXRrX2RybV9wbV9vcHMsCisJfSwKK307CisK
K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICogY29uc3QgbXRrX2RybV9kcml2ZXJzW10g
PSB7CisJJm10a19kcm1fcGxhdGZvcm1fZHJpdmVyLAorCSZtdGtfZGlzcF9vdmxfZHJpdmVyLAor
CSZtdGtfZGlzcF9yZG1hX2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10a19kcm1f
aW5pdCh2b2lkKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJS
QVlfU0laRShtdGtfZHJtX2RyaXZlcnMpOyBpKyspIHsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVy
X3JlZ2lzdGVyKG10a19kcm1fZHJpdmVyc1tpXSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl9l
cnIoIkZhaWxlZCB0byByZWdpc3RlciAlcyBkcml2ZXI6ICVkXG4iLAorCQkJICAgICAgIG10a19k
cm1fZHJpdmVyc1tpXS0+ZHJpdmVyLm5hbWUsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0K
KworCXJldHVybiAwOworCitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlwbGF0Zm9ybV9kcml2
ZXJfdW5yZWdpc3RlcihtdGtfZHJtX2RyaXZlcnNbaV0pOworCisJcmV0dXJuIHJldDsKK30KKwor
c3RhdGljIHZvaWQgX19leGl0IG10a19kcm1fZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9y
IChpID0gQVJSQVlfU0laRShtdGtfZHJtX2RyaXZlcnMpIC0gMTsgaSA+PSAwOyBpLS0pCisJCXBs
YXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKG10a19kcm1fZHJpdmVyc1tpXSk7Cit9CisKK21vZHVs
ZV9pbml0KG10a19kcm1faW5pdCk7Cittb2R1bGVfZXhpdChtdGtfZHJtX2V4aXQpOworCitNT0RV
TEVfQVVUSE9SKCJZVCBTSEVOIDx5dC5zaGVuQG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVND
UklQVElPTigiTWVkaWF0ZWsgU29DIERSTSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwg
djIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5o
IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1Y2IxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp
b24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRFJWX0gKKyNk
ZWZpbmUgTVRLX0RSTV9EUlZfSAorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlICJt
dGtfZHJtX2RkcF9jb21wLmgiCisKKyNkZWZpbmUgTUFYX0NSVEMJMgorI2RlZmluZSBNQVhfQ09O
TkVDVE9SCTIKKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBk
cm1fY3J0YzsKK3N0cnVjdCBkcm1fZGV2aWNlOworc3RydWN0IGRybV9mYl9oZWxwZXI7CitzdHJ1
Y3QgZHJtX3Byb3BlcnR5Oworc3RydWN0IHJlZ21hcDsKKworc3RydWN0IG10a19kcm1fcHJpdmF0
ZSB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKKworCXN0cnVjdCBkcm1fY3J0YyAqY3J0Y1tN
QVhfQ1JUQ107CisJdW5zaWduZWQgaW50IG51bV9waXBlczsKKworCXN0cnVjdCBkZXZpY2Vfbm9k
ZSAqbXV0ZXhfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICptdXRleF9kZXY7CisJdm9pZCBfX2lvbWVt
ICpjb25maWdfcmVnczsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbXBfbm9kZVtERFBfQ09NUE9O
RU5UX0lEX01BWF07CisJc3RydWN0IG10a19kZHBfY29tcCAqZGRwX2NvbXBbRERQX0NPTVBPTkVO
VF9JRF9NQVhdOworCisJc3RydWN0IHsKKwkJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl
OworCQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwkJc3RydWN0IG11dGV4IGxvY2s7CisJfSBj
b21taXQ7Cit9OworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxf
ZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2
ZXI7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0RSVl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19kcm1fZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2QzMGMxCi0t
LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpA
QCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK
KyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4K
KyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+
CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9u
Lmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIK
KyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorCisvKgorICogbXRrIHNwZWNpZmljIGZyYW1lYnVm
ZmVyIHN0cnVjdHVyZS4KKyAqCisgKiBAZmI6IGRybSBmcmFtZWJ1ZmZlciBvYmplY3QuCisgKiBA
Z2VtX29iajogYXJyYXkgb2YgZ2VtIG9iamVjdHMuCisgKi8KK3N0cnVjdCBtdGtfZHJtX2ZiIHsK
KwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyCWJhc2U7CisJLyogRm9yIG5vdyB3ZSBvbmx5IHN1cHBv
cnQgYSBzaW5nbGUgcGxhbmUgKi8KKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QJKmdlbV9vYmo7Cit9
OworCisjZGVmaW5lIHRvX210a19mYih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IG10a19kcm1f
ZmIsIGJhc2UpCisKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRrX2ZiX2dldF9nZW1fb2JqKHN0
cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmIg
PSB0b19tdGtfZmIoZmIpOworCisJcmV0dXJuIG10a19mYi0+Z2VtX29iajsKK30KKworc3RhdGlj
IGludCBtdGtfZHJtX2ZiX2NyZWF0ZV9oYW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs
CisJCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgICB1bnNpZ25lZCBp
bnQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZi
KTsKKworCXJldHVybiBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBtdGtfZmItPmdl
bV9vYmosIGhhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fZmJfZGVzdHJveShzdHJ1
Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0g
dG9fbXRrX2ZiKGZiKTsKKworCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKKworCWRybV9n
ZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG10a19mYi0+Z2VtX29iaik7CisKKwlrZnJl
ZShtdGtfZmIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5j
cyBtdGtfZHJtX2ZiX2Z1bmNzID0geworCS5jcmVhdGVfaGFuZGxlID0gbXRrX2RybV9mYl9jcmVh
dGVfaGFuZGxlLAorCS5kZXN0cm95ID0gbXRrX2RybV9mYl9kZXN0cm95LAorfTsKKworc3RhdGlj
IHN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZHJtX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9k
ZXZpY2UgKmRldiwKKwkJCQkJY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGUsCisJ
CQkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICpt
dGtfZmI7CisJaW50IHJldDsKKworCWlmIChkcm1fZm9ybWF0X251bV9wbGFuZXMobW9kZS0+cGl4
ZWxfZm9ybWF0KSAhPSAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCW10a19mYiA9
IGt6YWxsb2Moc2l6ZW9mKCptdGtfZmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19mYikKKwkJ
cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1
Y3QoJm10a19mYi0+YmFzZSwgbW9kZSk7CisKKwltdGtfZmItPmdlbV9vYmogPSBvYmo7CisKKwly
ZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChkZXYsICZtdGtfZmItPmJhc2UsICZtdGtfZHJtX2Zi
X2Z1bmNzKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUg
ZnJhbWVidWZmZXJcbiIpOworCQlrZnJlZShtdGtfZmIpOworCQlyZXR1cm4gRVJSX1BUUihyZXQp
OworCX0KKworCXJldHVybiBtdGtfZmI7Cit9CisKKy8qCisgKiBXYWl0IGZvciBhbnkgZXhjbHVz
aXZlIGZlbmNlIGluIGZiJ3MgZ2VtIG9iamVjdCdzIHJlc2VydmF0aW9uIG9iamVjdC4KKyAqCisg
KiBSZXR1cm5zIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCwgZWxzZSAwLgorICovCitpbnQg
bXRrX2ZiX3dhaXQoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IGRybV9n
ZW1fb2JqZWN0ICpnZW07CisJc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKKwlsb25n
IHJldDsKKworCWlmICghZmIpCisJCXJldHVybiAwOworCisJZ2VtID0gbXRrX2ZiX2dldF9nZW1f
b2JqKGZiKTsKKwlpZiAoIWdlbSB8fCAhZ2VtLT5kbWFfYnVmIHx8ICFnZW0tPmRtYV9idWYtPnJl
c3YpCisJCXJldHVybiAwOworCisJcmVzdiA9IGdlbS0+ZG1hX2J1Zi0+cmVzdjsKKwlyZXQgPSBy
ZXNlcnZhdGlvbl9vYmplY3Rfd2FpdF90aW1lb3V0X3JjdShyZXN2LCBmYWxzZSwgdHJ1ZSwKKwkJ
CQkJCSAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCS8qIE1BWF9TQ0hFRFVMRV9USU1FT1VUIG9u
IHN1Y2Nlc3MsIC1FUkVTVEFSVFNZUyBpZiBpbnRlcnJ1cHRlZCAqLworCWlmIChXQVJOX09OKHJl
dCA8IDApKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkcm1fZnJh
bWVidWZmZXIgKm10a19kcm1fbW9kZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK
KwkJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0
cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpjbWQpCit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19m
YjsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbTsKKwl1bnNpZ25lZCBpbnQgd2lkdGggPSBj
bWQtPndpZHRoOworCXVuc2lnbmVkIGludCBoZWlnaHQgPSBjbWQtPmhlaWdodDsKKwl1bnNpZ25l
ZCBpbnQgc2l6ZSwgYnBwOworCWludCByZXQ7CisKKwlpZiAoZHJtX2Zvcm1hdF9udW1fcGxhbmVz
KGNtZC0+cGl4ZWxfZm9ybWF0KSAhPSAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwor
CWdlbSA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGUsIGNtZC0+aGFuZGxlc1swXSk7
CisJaWYgKCFnZW0pCisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCisJYnBwID0gZHJtX2Zv
cm1hdF9wbGFuZV9jcHAoY21kLT5waXhlbF9mb3JtYXQsIDApOworCXNpemUgPSAoaGVpZ2h0IC0g
MSkgKiBjbWQtPnBpdGNoZXNbMF0gKyB3aWR0aCAqIGJwcDsKKwlzaXplICs9IGNtZC0+b2Zmc2V0
c1swXTsKKworCWlmIChnZW0tPnNpemUgPCBzaXplKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdv
dG8gdW5yZWZlcmVuY2U7CisJfQorCisJbXRrX2ZiID0gbXRrX2RybV9mcmFtZWJ1ZmZlcl9pbml0
KGRldiwgY21kLCBnZW0pOworCWlmIChJU19FUlIobXRrX2ZiKSkgeworCQlyZXQgPSBQVFJfRVJS
KG10a19mYik7CisJCWdvdG8gdW5yZWZlcmVuY2U7CisJfQorCisJcmV0dXJuICZtdGtfZmItPmJh
c2U7CisKK3VucmVmZXJlbmNlOgorCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2Vk
KGdlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RybV9mYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmFlMzQKLS0t
IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCkBA
IC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgor
ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor
ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisj
aWZuZGVmIE1US19EUk1fRkJfSAorI2RlZmluZSBNVEtfRFJNX0ZCX0gKKworc3RydWN0IGRybV9n
ZW1fb2JqZWN0ICptdGtfZmJfZ2V0X2dlbV9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIp
OworaW50IG10a19mYl93YWl0KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKK3N0cnVjdCBk
cm1fZnJhbWVidWZmZXIgKm10a19kcm1fbW9kZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2Ug
KmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNv
bnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpjbWQpOworCisjZW5kaWYgLyogTVRLX0RSTV9G
Ql9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0u
YyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYzQ5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYwpAQCAtMCwwICsxLDI2NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAq
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy
c2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K
KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgor
I2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorCisj
aW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2dlbV9vYmog
Km10a19kcm1fZ2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCXVuc2lnbmVk
IGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtX29iajsKKwlp
bnQgcmV0OworCisJc2l6ZSA9IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSk7CisKKwltdGtfZ2Vt
X29iaiA9IGt6YWxsb2Moc2l6ZW9mKCptdGtfZ2VtX29iaiksIEdGUF9LRVJORUwpOworCWlmICgh
bXRrX2dlbV9vYmopCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcmV0ID0gZHJtX2dl
bV9vYmplY3RfaW5pdChkZXYsICZtdGtfZ2VtX29iai0+YmFzZSwgc2l6ZSk7CisJaWYgKHJldCA8
IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBnZW0gb2JqZWN0XG4iKTsK
KwkJa2ZyZWUobXRrX2dlbV9vYmopOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJl
dHVybiBtdGtfZ2VtX29iajsKK30KKworc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2RybV9n
ZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSAgIHNpemVfdCBzaXplLCBi
b29sIGFsbG9jX2ttYXApCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKKwlz
dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJbXRrX2dlbSA9IG10a19k
cm1fZ2VtX2luaXQoZGV2LCBzaXplKTsKKwlpZiAoSVNfRVJSKG10a19nZW0pKQorCQlyZXR1cm4g
RVJSX0NBU1QobXRrX2dlbSk7CisKKwlvYmogPSAmbXRrX2dlbS0+YmFzZTsKKworCWluaXRfZG1h
X2F0dHJzKCZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCWRtYV9zZXRfYXR0cihETUFfQVRUUl9XUklU
RV9DT01CSU5FLCAmbXRrX2dlbS0+ZG1hX2F0dHJzKTsKKworCWlmICghYWxsb2Nfa21hcCkKKwkJ
ZG1hX3NldF9hdHRyKERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HLCAmbXRrX2dlbS0+ZG1hX2F0
dHJzKTsKKworCW10a19nZW0tPmNvb2tpZSA9IGRtYV9hbGxvY19hdHRycyhkZXYtPmRldiwgb2Jq
LT5zaXplLAorCQkJCQkgICZtdGtfZ2VtLT5kbWFfYWRkciwgR0ZQX0tFUk5FTCwKKwkJCQkJICAm
bXRrX2dlbS0+ZG1hX2F0dHJzKTsKKwlpZiAoIW10a19nZW0tPmNvb2tpZSkgeworCQlEUk1fRVJS
T1IoImZhaWxlZCB0byBhbGxvY2F0ZSAlenggYnl0ZSBkbWEgYnVmZmVyIiwgb2JqLT5zaXplKTsK
KwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZ2VtX2ZyZWU7CisJfQorCisJaWYgKGFsbG9j
X2ttYXApCisJCW10a19nZW0tPmt2YWRkciA9IG10a19nZW0tPmNvb2tpZTsKKworCURSTV9ERUJV
R19EUklWRVIoImNvb2tpZSA9ICVwIGRtYV9hZGRyID0gJXBhZCBzaXplID0gJXp1XG4iLAorCQkJ
IG10a19nZW0tPmNvb2tpZSwgJm10a19nZW0tPmRtYV9hZGRyLAorCQkJIHNpemUpOworCisJcmV0
dXJuIG10a19nZW07CisKK2Vycl9nZW1fZnJlZToKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9i
aik7CisJa2ZyZWUobXRrX2dlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKwordm9pZCBt
dGtfZHJtX2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlz
dHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtID0gdG9fbXRrX2dlbV9vYmoob2JqKTsKKwor
CWlmIChtdGtfZ2VtLT5zZykKKwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9iaiwgbXRrX2dlbS0+
c2cpOworCWVsc2UKKwkJZG1hX2ZyZWVfYXR0cnMob2JqLT5kZXYtPmRldiwgb2JqLT5zaXplLCBt
dGtfZ2VtLT5jb29raWUsCisJCQkgICAgICAgbXRrX2dlbS0+ZG1hX2FkZHIsICZtdGtfZ2VtLT5k
bWFfYXR0cnMpOworCisJLyogcmVsZWFzZSBmaWxlIHBvaW50ZXIgdG8gZ2VtIG9iamVjdC4gKi8K
Kwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisKKwlrZnJlZShtdGtfZ2VtKTsKK30KKwor
aW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCBz
dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVt
YiAqYXJncykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCByZXQ7
CisKKwlhcmdzLT5waXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3MtPmJwcCwg
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
Z3QpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBzZ3Q7Cit9CisKK3N0
cnVjdCBkcm1fZ2VtX29iamVjdCAqbXRrX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0
IGRybV9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwg
c3RydWN0IHNnX3RhYmxlICpzZykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2Vt
OworCWludCByZXQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOworCXVuc2lnbmVkIGludCBpOwor
CWRtYV9hZGRyX3QgZXhwZWN0ZWQ7CisKKwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChkZXYs
IGF0dGFjaC0+ZG1hYnVmLT5zaXplKTsKKworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJldHVy
biBFUlJfUFRSKFBUUl9FUlIobXRrX2dlbSkpOworCisJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVz
cyhzZy0+c2dsKTsKKwlmb3JfZWFjaF9zZyhzZy0+c2dsLCBzLCBzZy0+bmVudHMsIGkpIHsKKwkJ
aWYgKHNnX2RtYV9hZGRyZXNzKHMpICE9IGV4cGVjdGVkKSB7CisJCQlEUk1fRVJST1IoInNnX3Rh
YmxlIGlzIG5vdCBjb250aWd1b3VzIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnJf
Z2VtX2ZyZWU7CisJCX0KKwkJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzKSArIHNnX2RtYV9s
ZW4ocyk7CisJfQorCisJbXRrX2dlbS0+ZG1hX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZy0+c2ds
KTsKKwltdGtfZ2VtLT5zZyA9IHNnOworCisJcmV0dXJuICZtdGtfZ2VtLT5iYXNlOworCitlcnJf
Z2VtX2ZyZWU6CisJa2ZyZWUobXRrX2dlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KZGlm
ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oIGIvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uM2EyYTU2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHJtX2dlbS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwor
ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhp
cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9NVEtfRFJNX0dFTV9IXworI2RlZmluZSBf
TVRLX0RSTV9HRU1fSF8KKworI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisKKy8qCisgKiBtdGsg
ZHJtIGJ1ZmZlciBzdHJ1Y3R1cmUuCisgKgorICogQGJhc2U6IGEgZ2VtIG9iamVjdC4KKyAqCS0g
YSBuZXcgaGFuZGxlIHRvIHRoaXMgZ2VtIG9iamVjdCB3b3VsZCBiZSBjcmVhdGVkCisgKglieSBk
cm1fZ2VtX2hhbmRsZV9jcmVhdGUoKS4KKyAqIEBjb29raWU6IHRoZSByZXR1cm4gdmFsdWUgb2Yg
ZG1hX2FsbG9jX2F0dHJzKCksIGtlZXAgaXQgZm9yIGRtYV9mcmVlX2F0dHJzKCkKKyAqIEBrdmFk
ZHI6IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYWRkcjog
ZG1hIGFkZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYXR0cnM6IGRtYSBhdHRyaWJ1dGVz
IG9mIGdlbSBidWZmZXIuCisgKgorICogUC5TLiB0aGlzIG9iamVjdCB3b3VsZCBiZSB0cmFuc2Zl
cnJlZCB0byB1c2VyIGFzIGttc19iby5oYW5kbGUgc28KKyAqCXVzZXIgY2FuIGFjY2VzcyB0aGUg
YnVmZmVyIHRocm91Z2gga21zX2JvLmhhbmRsZS4KKyAqLworc3RydWN0IG10a19kcm1fZ2VtX29i
aiB7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0CWJhc2U7CisJdm9pZAkJCSpjb29raWU7CisJdm9p
ZAkJCSprdmFkZHI7CisJZG1hX2FkZHJfdAkJZG1hX2FkZHI7CisJc3RydWN0IGRtYV9hdHRycwlk
bWFfYXR0cnM7CisJc3RydWN0IHNnX3RhYmxlCQkqc2c7Cit9OworCisjZGVmaW5lIHRvX210a19n
ZW1fb2JqKHgpCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqLCBiYXNlKQor
Cit2b2lkIG10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2Vt
KTsKK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJt
X2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgYm9vbCBhbGxvY19rbWFwKTsKK2lu
dCBtdGtfZHJtX2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3Ry
dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIg
KmFyZ3MpOworaW50IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUg
KmZpbGVfcHJpdiwKKwkJCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBoYW5kbGUs
CisJCQkJdWludDY0X3QgKm9mZnNldCk7CitpbnQgbXRrX2RybV9nZW1fbW1hcChzdHJ1Y3QgZmls
ZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworaW50IG10a19kcm1fZ2VtX21t
YXBfYnVmKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJIHN0cnVjdCB2bV9hcmVhX3N0
cnVjdCAqdm1hKTsKK3N0cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUo
c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtf
Z2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJc3Ry
dWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNnKTsKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFu
ZS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODk4Nzg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwpAQCAtMCwwICsxLDI0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENLIEh1
IDxjay5odUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisg
KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlz
IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRy
bS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5j
bHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5o
IgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5o
IgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorI2lu
Y2x1ZGUgIm10a19kcm1fcGxhbmUuaCIKKworc3RhdGljIGNvbnN0IHUzMiBmb3JtYXRzW10gPSB7
CisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JN
QVRfUkdCNTY1LAorfTsKKworc3RhdGljIHZvaWQgbXRrX3BsYW5lX2VuYWJsZShzdHJ1Y3QgbXRr
X2RybV9wbGFuZSAqbXRrX3BsYW5lLCBib29sIGVuYWJsZSwKKwkJCSAgICAgZG1hX2FkZHJfdCBh
ZGRyLCBzdHJ1Y3QgZHJtX3JlY3QgKmRlc3QpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUg
PSAmbXRrX3BsYW5lLT5iYXNlOworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlID0gdG9f
bXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJdW5zaWduZWQgaW50IHBpdGNoLCBmb3Jt
YXQ7CisJaW50IHgsIHk7CisKKwlpZiAoV0FSTl9PTighcGxhbmUtPnN0YXRlIHx8IChlbmFibGUg
JiYgIXBsYW5lLT5zdGF0ZS0+ZmIpKSkKKwkJcmV0dXJuOworCisJaWYgKHBsYW5lLT5zdGF0ZS0+
ZmIpIHsKKwkJcGl0Y2ggPSBwbGFuZS0+c3RhdGUtPmZiLT5waXRjaGVzWzBdOworCQlmb3JtYXQg
PSBwbGFuZS0+c3RhdGUtPmZiLT5waXhlbF9mb3JtYXQ7CisJfSBlbHNlIHsKKwkJcGl0Y2ggPSAw
OworCQlmb3JtYXQgPSBEUk1fRk9STUFUX1JHQkE4ODg4OworCX0KKworCXggPSBwbGFuZS0+c3Rh
dGUtPmNydGNfeDsKKwl5ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3k7CisKKwlpZiAoeCA8IDApIHsK
KwkJYWRkciAtPSB4ICogNDsKKwkJeCA9IDA7CisJfQorCisJaWYgKHkgPCAwKSB7CisJCWFkZHIg
LT0geSAqIHBpdGNoOworCQl5ID0gMDsKKwl9CisKKwlzdGF0ZS0+cGVuZGluZy5lbmFibGUgPSBl
bmFibGU7CisJc3RhdGUtPnBlbmRpbmcucGl0Y2ggPSBwaXRjaDsKKwlzdGF0ZS0+cGVuZGluZy5m
b3JtYXQgPSBmb3JtYXQ7CisJc3RhdGUtPnBlbmRpbmcuYWRkciA9IGFkZHI7CisJc3RhdGUtPnBl
bmRpbmcueCA9IHg7CisJc3RhdGUtPnBlbmRpbmcueSA9IHk7CisJc3RhdGUtPnBlbmRpbmcud2lk
dGggPSBkZXN0LT54MiAtIGRlc3QtPngxOworCXN0YXRlLT5wZW5kaW5nLmhlaWdodCA9IGRlc3Qt
PnkyIC0gZGVzdC0+eTE7CisJd21iKCk7IC8qIE1ha2Ugc3VyZSB0aGUgYWJvdmUgcGFyYW1ldGVy
cyBhcmUgc2V0IGJlZm9yZSB1cGRhdGUgKi8KKwlzdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IHRydWU7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu
ZSkKK3sKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZTsKKworCWlmIChwbGFuZS0+c3Rh
dGUpIHsKKwkJaWYgKHBsYW5lLT5zdGF0ZS0+ZmIpCisJCQlkcm1fZnJhbWVidWZmZXJfdW5yZWZl
cmVuY2UocGxhbmUtPnN0YXRlLT5mYik7CisKKwkJc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUo
cGxhbmUtPnN0YXRlKTsKKwkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7CisJfSBl
bHNlIHsKKwkJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwkJ
aWYgKCFzdGF0ZSkKKwkJCXJldHVybjsKKwkJcGxhbmUtPnN0YXRlID0gJnN0YXRlLT5iYXNlOwor
CX0KKworCXN0YXRlLT5iYXNlLnBsYW5lID0gcGxhbmU7CisJc3RhdGUtPnBlbmRpbmcuZm9ybWF0
ID0gRFJNX0ZPUk1BVF9SR0I1NjU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl
ICptdGtfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQorewor
CXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShw
bGFuZS0+c3RhdGUpOworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlOworCisJc3RhdGUg
PSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQorCQly
ZXR1cm4gTlVMTDsKKworCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRl
KHBsYW5lLCAmc3RhdGUtPmJhc2UpOworCisJV0FSTl9PTihzdGF0ZS0+YmFzZS5wbGFuZSAhPSBw
bGFuZSk7CisKKwlzdGF0ZS0+cGVuZGluZyA9IG9sZF9zdGF0ZS0+cGVuZGluZzsKKworCXJldHVy
biAmc3RhdGUtPmJhc2U7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fcGxhbmVfZGVzdHJveV9z
dGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkJc3RydWN0IGRybV9wbGFuZV9zdGF0
ZSAqc3RhdGUpCit7CisJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlKHBs
YW5lLCBzdGF0ZSk7CisJa2ZyZWUodG9fbXRrX3BsYW5lX3N0YXRlKHN0YXRlKSk7Cit9CisKK3N0
YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIG10a19wbGFuZV9mdW5jcyA9IHsKKwku
dXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNhYmxl
X3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveSA9IGRy
bV9wbGFuZV9jbGVhbnVwLAorCS5yZXNldCA9IG10a19wbGFuZV9yZXNldCwKKwkuYXRvbWljX2R1
cGxpY2F0ZV9zdGF0ZSA9IG10a19wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0
cm95X3N0YXRlID0gbXRrX2RybV9wbGFuZV9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGlu
dCBtdGtfcGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAg
c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZl
ciAqZmIgPSBzdGF0ZS0+ZmI7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwor
CWJvb2wgdmlzaWJsZTsKKwlzdHJ1Y3QgZHJtX3JlY3QgZGVzdCA9IHsKKwkJLngxID0gc3RhdGUt
PmNydGNfeCwKKwkJLnkxID0gc3RhdGUtPmNydGNfeSwKKwkJLngyID0gc3RhdGUtPmNydGNfeCAr
IHN0YXRlLT5jcnRjX3csCisJCS55MiA9IHN0YXRlLT5jcnRjX3kgKyBzdGF0ZS0+Y3J0Y19oLAor
CX07CisJc3RydWN0IGRybV9yZWN0IHNyYyA9IHsKKwkJLyogMTYuMTYgZml4ZWQgcG9pbnQgKi8K
KwkJLngxID0gc3RhdGUtPnNyY194LAorCQkueTEgPSBzdGF0ZS0+c3JjX3ksCisJCS54MiA9IHN0
YXRlLT5zcmNfeCArIHN0YXRlLT5zcmNfdywKKwkJLnkyID0gc3RhdGUtPnNyY195ICsgc3RhdGUt
PnNyY19oLAorCX07CisJc3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlpZiAoIWZi
KQorCQlyZXR1cm4gMDsKKworCWlmICghbXRrX2ZiX2dldF9nZW1fb2JqKGZiKSkgeworCQlEUk1f
REVCVUdfS01TKCJidWZmZXIgaXMgbnVsbFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwor
CWlmICghc3RhdGUtPmNydGMpCisJCXJldHVybiAwOworCisJY3J0Y19zdGF0ZSA9IGRybV9hdG9t
aWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+Y3J0Yyk7CisJaWYgKElTX0VS
UihjcnRjX3N0YXRlKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisKKwljbGlwLngy
ID0gY3J0Y19zdGF0ZS0+bW9kZS5oZGlzcGxheTsKKwljbGlwLnkyID0gY3J0Y19zdGF0ZS0+bW9k
ZS52ZGlzcGxheTsKKworCXJldHVybiBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3VwZGF0ZShwbGFu
ZSwgc3RhdGUtPmNydGMsIGZiLAorCQkJCQkgICAgICZzcmMsICZkZXN0LCAmY2xpcCwKKwkJCQkJ
ICAgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCisJCQkJCSAgICAgRFJNX1BMQU5FX0hF
TFBFUl9OT19TQ0FMSU5HLAorCQkJCQkgICAgIHRydWUsIHRydWUsICZ2aXNpYmxlKTsKK30KKwor
c3RhdGljIHZvaWQgbXRrX3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxh
bmUsCisJCQkJICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1
Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3Rh
dGUpOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5iYXNlLmNydGM7CisJc3RydWN0
IGRybV9nZW1fb2JqZWN0ICpnZW07CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsK
KwlzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lID0gdG9fbXRrX3BsYW5lKHBsYW5lKTsK
KwlzdHJ1Y3QgZHJtX3JlY3QgZGVzdCA9IHsKKwkJLngxID0gc3RhdGUtPmJhc2UuY3J0Y194LAor
CQkueTEgPSBzdGF0ZS0+YmFzZS5jcnRjX3ksCisJCS54MiA9IHN0YXRlLT5iYXNlLmNydGNfeCAr
IHN0YXRlLT5iYXNlLmNydGNfdywKKwkJLnkyID0gc3RhdGUtPmJhc2UuY3J0Y195ICsgc3RhdGUt
PmJhc2UuY3J0Y19oLAorCX07CisJc3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlp
ZiAoIWNydGMpCisJCXJldHVybjsKKworCWNsaXAueDIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0
ZS0+bW9kZS5oZGlzcGxheTsKKwljbGlwLnkyID0gc3RhdGUtPmJhc2UuY3J0Yy0+c3RhdGUtPm1v
ZGUudmRpc3BsYXk7CisJZHJtX3JlY3RfaW50ZXJzZWN0KCZkZXN0LCAmY2xpcCk7CisKKwlnZW0g
PSBtdGtfZmJfZ2V0X2dlbV9vYmooc3RhdGUtPmJhc2UuZmIpOworCW10a19nZW0gPSB0b19tdGtf
Z2VtX29iaihnZW0pOworCW10a19wbGFuZV9lbmFibGUobXRrX3BsYW5lLCB0cnVlLCBtdGtfZ2Vt
LT5kbWFfYWRkciwgJmRlc3QpOworfQorCitzdGF0aWMgdm9pZCBtdGtfcGxhbmVfYXRvbWljX2Rp
c2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5l
X3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUgPSB0
b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKworCXN0YXRlLT5wZW5kaW5nLmVuYWJs
ZSA9IGZhbHNlOworCXdtYigpOyAvKiBNYWtlIHN1cmUgdGhlIGFib3ZlIHBhcmFtZXRlciBpcyBz
ZXQgYmVmb3JlIHVwZGF0ZSAqLworCXN0YXRlLT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsKK30KKwor
c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIG10a19wbGFuZV9oZWxw
ZXJfZnVuY3MgPSB7CisJLmF0b21pY19jaGVjayA9IG10a19wbGFuZV9hdG9taWNfY2hlY2ssCisJ
LmF0b21pY191cGRhdGUgPSBtdGtfcGxhbmVfYXRvbWljX3VwZGF0ZSwKKwkuYXRvbWljX2Rpc2Fi
bGUgPSBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUsCit9OworCitpbnQgbXRrX3BsYW5lX2luaXQo
c3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSwK
KwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlwZSB0
eXBlLAorCQkgICB1bnNpZ25lZCBpbnQgenBvcykKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZHJt
X3VuaXZlcnNhbF9wbGFuZV9pbml0KGRldiwgJm10a19wbGFuZS0+YmFzZSwgcG9zc2libGVfY3J0
Y3MsCisJCQkJICAgICAgICZtdGtfcGxhbmVfZnVuY3MsIGZvcm1hdHMsCisJCQkJICAgICAgIEFS
UkFZX1NJWkUoZm9ybWF0cyksIHR5cGUsIE5VTEwpOworCWlmIChlcnIpIHsKKwkJRFJNX0VSUk9S
KCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBwbGFuZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJ
ZHJtX3BsYW5lX2hlbHBlcl9hZGQoJm10a19wbGFuZS0+YmFzZSwgJm10a19wbGFuZV9oZWxwZXJf
ZnVuY3MpOworCW10a19wbGFuZS0+aWR4ID0genBvczsKKworCXJldHVybiAwOworfQpkaWZmIC0t
Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNzJhN2IzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENLIEh1IDxjay5odUBtZWRpYXRl
ay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICovCisKKyNpZm5kZWYgX01US19EUk1fUExBTkVfSF8KKyNkZWZpbmUgX01US19EUk1fUExBTkVf
SF8KKworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+
CisKK3N0cnVjdCBtdGtfZHJtX3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lCQliYXNlOworCXVu
c2lnbmVkIGludAkJCWlkeDsKK307CisKK3N0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0ZSB7
CisJYm9vbAkJCQljb25maWc7CisJYm9vbAkJCQllbmFibGU7CisJZG1hX2FkZHJfdAkJCWFkZHI7
CisJdW5zaWduZWQgaW50CQkJcGl0Y2g7CisJdW5zaWduZWQgaW50CQkJZm9ybWF0OworCXVuc2ln
bmVkIGludAkJCXg7CisJdW5zaWduZWQgaW50CQkJeTsKKwl1bnNpZ25lZCBpbnQJCQl3aWR0aDsK
Kwl1bnNpZ25lZCBpbnQJCQloZWlnaHQ7CisJYm9vbAkJCQlkaXJ0eTsKK307CisKK3N0cnVjdCBt
dGtfcGxhbmVfc3RhdGUgeworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUJCWJhc2U7CisJc3RydWN0
IG10a19wbGFuZV9wZW5kaW5nX3N0YXRlCXBlbmRpbmc7Cit9OworCitzdGF0aWMgaW5saW5lIHN0
cnVjdCBtdGtfZHJtX3BsYW5lICp0b19tdGtfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUp
Cit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwbGFuZSwgc3RydWN0IG10a19kcm1fcGxhbmUsIGJh
c2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKgordG9fbXRr
X3BsYW5lX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBj
b250YWluZXJfb2Yoc3RhdGUsIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUsIGJhc2UpOworfQorCitp
bnQgbXRrX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19kcm1f
cGxhbmUgKm10a19wbGFuZSwKKwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51
bSBkcm1fcGxhbmVfdHlwZSB0eXBlLAorCQkgICB1bnNpZ25lZCBpbnQgenBvcyk7CisKKyNlbmRp
ZgotLSAKMi43LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y
ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl
bAo=