From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v12 06/14] drm/mediatek: Add HDMI support
Date: Tue, 1 Mar 2016 16:20:22 +0100
Message-ID: <1456845630-2786-7-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 , 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
RnJvbTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CgpUaGlzIHBhdGNoIGFkZHMgZHJp
dmVycyBmb3IgdGhlIEhETUkgYnJpZGdlIGNvbm5lY3RlZCB0byB0aGUgRFBJMApkaXNwbGF5IHN1
YnN5c3RlbSBmdW5jdGlvbiBibG9jaywgZm9yIHRoZSBIRE1JIEREQyBibG9jaywgYW5kIGZvcgp0
aGUgSERNSSBQSFkgdG8gc3VwcG9ydCBIRE1JIG91dHB1dC4KClNpZ25lZC1vZmYtYnk6IEppZSBR
aXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgpTaWduZWQtb2ZmLWJ5OiBQaGlsaXBwIFphYmVsIDxw
LnphYmVsQHBlbmd1dHJvbml4LmRlPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29u
ZmlnICAgICAgICAgICAgICAgfCAgIDcgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2Vm
aWxlICAgICAgICAgICAgICB8ICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Nl
Yy5jICAgICAgICAgICAgIHwgMjQ1ICsrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfY2VjLmggICAgICAgICAgICAgfCAgMjUgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcm1fZHJ2LmMgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9oZG1pX2Rydi5jICAgIHwgNTc5ICsrKysrKysrKysrKysrKysrKysrKysKIGRyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5jICAgICAgICAgICAgfCA0NzkgKysrKysrKysr
KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuaCAgICAgICAgICAg
IHwgMjIxICsrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2RkY19k
cnYuYyAgICB8IDM2MiArKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19oZG1pX2h3LmMgICAgICAgICB8IDY1MiArKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcuaCAgICAgICAgIHwgIDczICsrKwogZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3JlZ3MuaCAgICAgICB8IDIyMSArKysrKysr
KysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMgfCA1MDUg
KysrKysrKysrKysrKysrKysrKwogMTMgZmlsZXMgY2hhbmdlZCwgMzM3OSBpbnNlcnRpb25zKCsp
CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMuYwog
Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9oZG1pX2Ry
di5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1p
LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWku
aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9k
ZGNfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2hkbWlfaHcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfaGRtaV9ody5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19oZG1pX3JlZ3MuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCmluZGV4
IDBjNDlhOTQuLmUyZmYxNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9L
Y29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCkBAIC0xMiwzICsx
MiwxMCBAQCBjb25maWcgRFJNX01FRElBVEVLCiAJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVk
IG1lZGlhdGVrLWRybQogCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMga2VybmVsIG1vZGUgc2V0dGlu
ZyBhbmQKIAkgIGJ1ZmZlciBtYW5hZ2VtZW50IHRvIHVzZXJzcGFjZS4KKworY29uZmlnIERSTV9N
RURJQVRFS19IRE1JCisJdHJpc3RhdGUgIkRSTSBIRE1JIFN1cHBvcnQgZm9yIE1lZGlhdGVrIFNv
Q3MiCisJZGVwZW5kcyBvbiBEUk1fTUVESUFURUsKKwlzZWxlY3QgR0VORVJJQ19QSFkKKwloZWxw
CisJICBEUk0vS01TIEhETUkgZHJpdmVyIGZvciBNZWRpYXRlayBTb0NzCmRpZmYgLS1naXQgYS9k
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvTWFrZWZpbGUKaW5kZXggNWZjZjU4ZS4uNmQ1M2JlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9N
YWtlZmlsZQpAQCAtMTIsMyArMTIsMTIgQEAgbWVkaWF0ZWstZHJtLXkgOj0gbXRrX2Rpc3Bfb3Zs
Lm8gXAogCQkgIG10a19kcGkubwogCiBvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRp
YXRlay1kcm0ubworCittZWRpYXRlay1kcm0taGRtaS1vYmpzIDo9IG10a19jZWMubyBcCisJCQkg
IG10a19kcm1faGRtaV9kcnYubyBcCisJCQkgIG10a19oZG1pLm8gXAorCQkJICBtdGtfaGRtaV9k
ZGNfZHJ2Lm8gXAorCQkJICBtdGtfaGRtaV9ody5vIFwKKwkJCSAgbXRrX210ODE3M19oZG1pX3Bo
eS5vCisKK29iai0kKENPTkZJR19EUk1fTUVESUFURUtfSERNSSkgKz0gbWVkaWF0ZWstZHJtLWhk
bWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMuYyBiL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uY2JhMzY0NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfY2VjLmMKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVr
LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
Ki8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2lu
Y2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVk
ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJtdGtfY2VjLmgiCisKKyNk
ZWZpbmUgVFJfQ09ORklHCQkweDAwCisjZGVmaW5lIENMRUFSX0NFQ19JUlEJCQlCSVQoMTUpCisK
KyNkZWZpbmUgQ0VDX0NLR0VOCQkweDA0CisjZGVmaW5lIENFQ18zMktfUEROCQkJQklUKDE5KQor
I2RlZmluZSBQRE4JCQkJQklUKDE2KQorCisjZGVmaW5lIFJYX0VWRU5UCQkweDU0CisjZGVmaW5l
IEhETUlfUE9SRAkJCUJJVCgyNSkKKyNkZWZpbmUgSERNSV9IVFBMRwkJCUJJVCgyNCkKKyNkZWZp
bmUgSERNSV9QT1JEX0lOVF9FTgkJQklUKDkpCisjZGVmaW5lIEhETUlfSFRQTEdfSU5UX0VOCQlC
SVQoOCkKKworI2RlZmluZSBSWF9HRU5fV0QJCTB4NTgKKyNkZWZpbmUgSERNSV9QT1JEX0lOVF8z
MktfU1RBVFVTCUJJVCgyNikKKyNkZWZpbmUgUlhfUklTQ19JTlRfMzJLX1NUQVRVUwkJQklUKDI1
KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfU1RBVFVTCUJJVCgyNCkKKyNkZWZpbmUgSERN
SV9QT1JEX0lOVF8zMktfQ0xSCQlCSVQoMTgpCisjZGVmaW5lIFJYX0lOVF8zMktfQ0xSCQkJQklU
KDE3KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfQ0xSCQlCSVQoMTYpCisjZGVmaW5lIEhE
TUlfUE9SRF9JTlRfMzJLX1NUQV9NQVNLCUJJVCgxMCkKKyNkZWZpbmUgUlhfUklTQ19JTlRfMzJL
X1NUQV9NQVNLCUJJVCg5KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfU1RBX01BU0sJQklU
KDgpCisjZGVmaW5lIEhETUlfUE9SRF9JTlRfMzJLX0VOCQlCSVQoMikKKyNkZWZpbmUgUlhfSU5U
XzMyS19FTgkJCUJJVCgxKQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfRU4JCUJJVCgwKQor
CisjZGVmaW5lIE5PUk1BTF9JTlRfQ1RSTAkJMHg1QworI2RlZmluZSBIRE1JX0hUUExHX0lOVF9T
VEEJCUJJVCgwKQorI2RlZmluZSBIRE1JX1BPUkRfSU5UX1NUQQkJQklUKDEpCisjZGVmaW5lIEhE
TUlfSFRQTEdfSU5UX0NMUgkJQklUKDE2KQorI2RlZmluZSBIRE1JX1BPUkRfSU5UX0NMUgkJQklU
KDE3KQorI2RlZmluZSBIRE1JX0ZVTExfSU5UX0NMUgkJQklUKDIwKQorCitzdHJ1Y3QgbXRrX2Nl
YyB7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBjbGsgKmNsazsKKwlpbnQgaXJxOwor
CWJvb2wgaHBkOworCXZvaWQgKCpocGRfZXZlbnQpKGJvb2wgaHBkLCBzdHJ1Y3QgZGV2aWNlICpk
ZXYpOworCXN0cnVjdCBkZXZpY2UgKmhkbWlfZGV2OworfTsKKworc3RhdGljIHZvaWQgbXRrX2Nl
Y19tYXNrKHN0cnVjdCBtdGtfY2VjICpjZWMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkgdW5z
aWduZWQgaW50IHZhbCwgdW5zaWduZWQgaW50IG1hc2spCit7CisJdTMyIHRtcCA9IHJlYWRsKGNl
Yy0+cmVncyArIG9mZnNldCkgJiB+bWFzazsKKworCXRtcCB8PSB2YWwgJiBtYXNrOworCXdyaXRl
bCh2YWwsIGNlYy0+cmVncyArIG9mZnNldCk7Cit9CisKK3ZvaWQgbXRrX2NlY19zZXRfaHBkX2V2
ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHZvaWQgKCpocGRfZXZlbnQpKGJvb2wgaHBk
LCBzdHJ1Y3QgZGV2aWNlICpkZXYpLAorCQkJICAgc3RydWN0IGRldmljZSAqaGRtaV9kZXYpCit7
CisJc3RydWN0IG10a19jZWMgKmNlYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJY2VjLT5o
ZG1pX2RldiA9IGhkbWlfZGV2OworCWNlYy0+aHBkX2V2ZW50ID0gaHBkX2V2ZW50OworfQorCiti
b29sIG10a19jZWNfaHBkX2hpZ2goc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtf
Y2VjICpjZWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOwor
CisJc3RhdHVzID0gcmVhZGwoY2VjLT5yZWdzICsgUlhfRVZFTlQpOworCisJcmV0dXJuIChzdGF0
dXMgJiAoSERNSV9QT1JEIHwgSERNSV9IVFBMRykpID09IChIRE1JX1BPUkQgfCBIRE1JX0hUUExH
KTsKK30KKworaW50IG10a19jZWNfaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qg
bXRrX2NlYyAqY2VjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gY2VjLT5pcnE7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNfaHRwbGdfaXJxX2VuYWJsZShzdHJ1Y3QgbXRrX2Nl
YyAqY2VjKQoreworCW10a19jZWNfbWFzayhjZWMsIENFQ19DS0dFTiwgMCwgUEROKTsKKwltdGtf
Y2VjX21hc2soY2VjLCBDRUNfQ0tHRU4sIENFQ18zMktfUEROLCBDRUNfMzJLX1BETik7CisJbXRr
X2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCBIRE1JX1BPUkRfSU5UXzMyS19DTFIsCisJCSAgICAg
SERNSV9QT1JEX0lOVF8zMktfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIFJY
X0lOVF8zMktfQ0xSLCBSWF9JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VO
X1dELCBIRE1JX0hUUExHX0lOVF8zMktfQ0xSLAorCQkgICAgIEhETUlfSFRQTEdfSU5UXzMyS19D
TFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgSERNSV9QT1JEX0lOVF8zMktf
Q0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIDAsIFJYX0lOVF8zMktfQ0xSKTsK
KwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIDAsIEhETUlfSFRQTEdfSU5UXzMyS19DTFIp
OworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgSERNSV9QT1JEX0lOVF8zMktfRU4p
OworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgUlhfSU5UXzMyS19FTik7CisJbXRr
X2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBIRE1JX0hUUExHX0lOVF8zMktfRU4pOworCisJ
bXRrX2NlY19tYXNrKGNlYywgUlhfRVZFTlQsIEhETUlfUE9SRF9JTlRfRU4sIEhETUlfUE9SRF9J
TlRfRU4pOworCW10a19jZWNfbWFzayhjZWMsIFJYX0VWRU5ULCBIRE1JX0hUUExHX0lOVF9FTiwg
SERNSV9IVFBMR19JTlRfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfY2VjX2h0cGxnX2lycV9k
aXNhYmxlKHN0cnVjdCBtdGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfRVZF
TlQsIDAsIEhETUlfUE9SRF9JTlRfRU4pOworCW10a19jZWNfbWFzayhjZWMsIFJYX0VWRU5ULCAw
LCBIRE1JX0hUUExHX0lOVF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNfY2xlYXJfaHRw
bGdfaXJxKHN0cnVjdCBtdGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19tYXNrKGNlYywgVFJfQ09O
RklHLCBDTEVBUl9DRUNfSVJRLCBDTEVBUl9DRUNfSVJRKTsKKwltdGtfY2VjX21hc2soY2VjLCBO
T1JNQUxfSU5UX0NUUkwsIEhETUlfSFRQTEdfSU5UX0NMUiwKKwkJICAgICBIRE1JX0hUUExHX0lO
VF9DTFIpOworCW10a19jZWNfbWFzayhjZWMsIE5PUk1BTF9JTlRfQ1RSTCwgSERNSV9QT1JEX0lO
VF9DTFIsCisJCSAgICAgSERNSV9QT1JEX0lOVF9DTFIpOworCW10a19jZWNfbWFzayhjZWMsIE5P
Uk1BTF9JTlRfQ1RSTCwgSERNSV9GVUxMX0lOVF9DTFIsCisJCSAgICAgSERNSV9GVUxMX0lOVF9D
TFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgSERNSV9QT1JEX0lOVF8zMktfQ0xS
LAorCQkgICAgIEhETUlfUE9SRF9JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhf
R0VOX1dELCBSWF9JTlRfMzJLX0NMUiwgUlhfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhj
ZWMsIFJYX0dFTl9XRCwgSERNSV9IVFBMR19JTlRfMzJLX0NMUiwKKwkJICAgICBIRE1JX0hUUExH
X0lOVF8zMktfQ0xSKTsKKwl1ZGVsYXkoNSk7CisJbXRrX2NlY19tYXNrKGNlYywgTk9STUFMX0lO
VF9DVFJMLCAwLCBIRE1JX0hUUExHX0lOVF9DTFIpOworCW10a19jZWNfbWFzayhjZWMsIE5PUk1B
TF9JTlRfQ1RSTCwgMCwgSERNSV9QT1JEX0lOVF9DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFRS
X0NPTkZJRywgMCwgQ0xFQVJfQ0VDX0lSUSk7CisJbXRrX2NlY19tYXNrKGNlYywgTk9STUFMX0lO
VF9DVFJMLCAwLCBIRE1JX0ZVTExfSU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VO
X1dELCAwLCBIRE1JX1BPUkRfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dF
Tl9XRCwgMCwgUlhfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwg
MCwgSERNSV9IVFBMR19JTlRfMzJLX0NMUik7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtf
Y2VjX2h0cGxnX2lzcl90aHJlYWQoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBkZXZp
Y2UgKmRldiA9IGFyZzsKKwlzdHJ1Y3QgbXRrX2NlYyAqY2VjID0gZGV2X2dldF9kcnZkYXRhKGRl
dik7CisJYm9vbCBocGQ7CisKKwltdGtfY2VjX2NsZWFyX2h0cGxnX2lycShjZWMpOworCWhwZCA9
IG10a19jZWNfaHBkX2hpZ2goZGV2KTsKKworCWlmIChjZWMtPmhwZCAhPSBocGQpIHsKKwkJZGV2
X2luZm8oZGV2LCAiaG90cGx1ZyBldmVudCEsY3VyIGhwZCA9ICVkLCBocGQgPSAlZFxuIiwKKwkJ
CSBjZWMtPmhwZCwgaHBkKTsKKwkJY2VjLT5ocGQgPSBocGQ7CisJCWlmIChjZWMtPmhwZF9ldmVu
dCkKKwkJCWNlYy0+aHBkX2V2ZW50KGhwZCwgY2VjLT5oZG1pX2Rldik7CisJfQorCXJldHVybiBJ
UlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBtdGtfY2VjX3Byb2JlKHN0cnVjdCBwbGF0Zm9y
bV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlz
dHJ1Y3QgbXRrX2NlYyAqY2VjOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisK
KwljZWMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmNlYyksIEdGUF9LRVJORUwpOworCWlm
ICghY2VjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYs
IGNlYyk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9N
RU0sIDApOworCWNlYy0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJ
aWYgKElTX0VSUihjZWMtPnJlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIoY2VjLT5yZWdzKTsKKwkJ
ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBjZWM6ICVkXG4iLCByZXQpOworCQlyZXR1
cm4gcmV0OworCX0KKworCWNlYy0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7CisJaWYg
KElTX0VSUihjZWMtPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihjZWMtPmNsayk7CisJCWRldl9l
cnIoZGV2LCAiRmFpbGVkIHRvIGdldCBjZWMgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4g
cmV0OworCX0KKworCWNlYy0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAo
Y2VjLT5pcnEgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBjZWMgaXJxOiAl
ZFxuIiwgY2VjLT5pcnEpOworCQlyZXR1cm4gY2VjLT5pcnE7CisJfQorCisJcmV0ID0gZGV2bV9y
ZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGNlYy0+aXJxLCBOVUxMLAorCQkJCQltdGtfY2VjX2h0
cGxnX2lzcl90aHJlYWQsCisJCQkJCUlSUUZfU0hBUkVEIHwgSVJRRl9UUklHR0VSX0xPVyB8CisJ
CQkJCUlSUUZfT05FU0hPVCwgImhkbWkgaHBkIiwgZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9l
cnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNlYyBpcnE6ICVkXG4iLCByZXQpOworCQlyZXR1
cm4gcmV0OworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShjZWMtPmNsayk7CisJaWYg
KHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgY2VjIGNsb2NrOiAlZFxu
IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltdGtfY2VjX2h0cGxnX2lycV9lbmFibGUo
Y2VjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19jZWNfcmVtb3ZlKHN0cnVj
dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19jZWMgKmNlYyA9IHBsYXRm
b3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbXRrX2NlY19odHBsZ19pcnFfZGlzYWJsZShjZWMp
OworCWNsa19kaXNhYmxlX3VucHJlcGFyZShjZWMtPmNsayk7CisJcmV0dXJuIDA7Cit9CisKK3N0
YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19jZWNfb2ZfaWRzW10gPSB7CisJeyAu
Y29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtY2VjIiwgfSwKKwl7fQorfTsKKworc3RydWN0
IHBsYXRmb3JtX2RyaXZlciBtdGtfY2VjX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtfY2VjX3By
b2JlLAorCS5yZW1vdmUgPSBtdGtfY2VjX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9
ICJtZWRpYXRlay1jZWMiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfY2VjX29mX2lkcywKKwl9
LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmggYi9k
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmZlNmU4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2NlYy5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVr
LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
Ki8KKyNpZm5kZWYgX01US19DRUNfSAorI2RlZmluZSBfTVRLX0NFQ19ICisKK3N0cnVjdCBkZXZp
Y2U7CisKK3ZvaWQgbXRrX2NlY19zZXRfaHBkX2V2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJ
CSAgIHZvaWQgKCpob3RwbHVnX2V2ZW50KShib29sIGhwZCwgc3RydWN0IGRldmljZSAqZGV2KSwK
KwkJCSAgIHN0cnVjdCBkZXZpY2UgKmhkbWlfZGV2KTsKK2Jvb2wgbXRrX2NlY19ocGRfaGlnaChz
dHJ1Y3QgZGV2aWNlICpkZXYpOworaW50IG10a19jZWNfaXJxKHN0cnVjdCBkZXZpY2UgKmRldik7
CisKKyNlbmRpZiAvKiBfTVRLX0NFQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2Rydi5jCmluZGV4IDhiYzlmNDguLmUyMTIwNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfZHJtX2Rydi5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZv
cm0uaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKKyNpbmNsdWRlICJtdGtfY2Vj
LmgiCiAjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCiAjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIK
ICNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2RybV9oZG1pX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcm1faGRtaV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m
ZjY2MWUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k
cm1faGRtaV9kcnYuYwpAQCAtMCwwICsxLDU3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx
NCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29t
PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLwor
I2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+
CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBl
ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgor
I2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1
ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgor
I2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1
ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgorI2luY2x1
ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgIm10a19jZWMuaCIKKyNpbmNs
dWRlICJtdGtfaGRtaS5oIgorI2luY2x1ZGUgIm10a19oZG1pX2h3LmgiCisKK3N0YXRpYyBjb25z
dCBjaGFyICogY29uc3QgbXRrX2hkbWlfY2xrX25hbWVzW01US19IRE1JX0NMS19DT1VOVF0gPSB7
CisJW01US19IRE1JX0NMS19IRE1JX1BJWEVMXSA9ICJwaXhlbCIsCisJW01US19IRE1JX0NMS19I
RE1JX1BMTF0gPSAicGxsIiwKKwlbTVRLX0hETUlfQ0xLX0FVRF9CQ0xLXSA9ICJiY2xrIiwKKwlb
TVRLX0hETUlfQ0xLX0FVRF9TUERJRl0gPSAic3BkaWYiLAorfTsKKworc3RhdGljIGNvbnN0IGVu
dW0gbXRrX2hkbWlfY2xrX2lkIG10a19oZG1pX2VuYWJsZV9jbG9ja3NbXSA9IHsKKwlNVEtfSERN
SV9DTEtfQVVEX0JDTEssCisJTVRLX0hETUlfQ0xLX0FVRF9TUERJRiwKK307CisKK3N0YXRpYyBp
bnQgbXRrX2hkbWlfZ2V0X2FsbF9jbGsoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCXN0cnVj
dCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf
U0laRShtdGtfaGRtaV9jbGtfbmFtZXMpOyBpKyspIHsKKwkJaGRtaS0+Y2xrW2ldID0gb2ZfY2xr
X2dldF9ieV9uYW1lKG5wLAorCQkJCQkJICBtdGtfaGRtaV9jbGtfbmFtZXNbaV0pOworCQlpZiAo
SVNfRVJSKGhkbWktPmNsa1tpXSkpCisJCQlyZXR1cm4gUFRSX0VSUihoZG1pLT5jbGtbaV0pOwor
CX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9jbGtfZW5hYmxlX2F1ZGlv
KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gY2xrX3ByZXBh
cmVfZW5hYmxlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfQVVEX0JDTEtdKTsKKwlpZiAocmV0KQor
CQlyZXR1cm4gcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWktPmNsa1tNVEtf
SERNSV9DTEtfQVVEX1NQRElGXSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4g
MDsKK2VycjoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19B
VURfQkNMS10pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2Nsa19k
aXNhYmxlX2F1ZGlvKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwljbGtfZGlzYWJsZV91bnBy
ZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19BVURfQkNMS10pOworCWNsa19kaXNhYmxlX3Vu
cHJlcGFyZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0FVRF9TUERJRl0pOworfQorCitzdGF0aWMg
ZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBoZG1pX2Nvbm5fZGV0ZWN0KHN0cnVjdCBkcm1fY29u
bmVjdG9yICpjb25uLAorCQkJCQkJICBib29sIGZvcmNlKQoreworCXN0cnVjdCBtdGtfaGRtaSAq
aGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCXJldHVybiBtdGtfaGRtaV9ocGRf
aGlnaChoZG1pKSA/CisJICAgICAgIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIDogY29ubmVj
dG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGhkbWlfY29ubl9kZXN0
cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRt
aSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCW10a19jZWNfc2V0X2hwZF9ldmVudCho
ZG1pLT5jZWNfZGV2LCBOVUxMLCBOVUxMKTsKKworCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihj
b25uKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubik7Cit9CisKK3N0YXRpYyBpbnQgaGRt
aV9jb25uX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubiwKKwkJCQkgIHN0
cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRfdCB2YWwpCit7CisJcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfY29ubl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25u
ZWN0b3IgKmNvbm4pCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9j
b25uKGNvbm4pOworCXN0cnVjdCBlZGlkICplZGlkOworCWludCByZXQ7CisKKwlpZiAoIWhkbWkt
PmRkY19hZHB0KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVkaWQgPSBkcm1fZ2V0X2VkaWQoY29u
biwgaGRtaS0+ZGRjX2FkcHQpOworCWlmICghZWRpZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlo
ZG1pLT5kdmlfbW9kZSA9ICFkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8oZWRpZCk7CisKKwlkcm1f
bW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubiwgZWRpZCk7CisKKwlyZXQg
PSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubiwgZWRpZCk7CisJZHJtX2VkaWRfdG9fZWxkKGNvbm4s
IGVkaWQpOworCWtmcmVlKGVkaWQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRr
X2hkbWlfY29ubl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uLAorCQkJCSAg
ICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWkgPSBoZG1pX2N0eF9mcm9tX2Nvbm4oY29ubik7CisKKwlkZXZfZGJnKGhkbWktPmRldiwgInhy
ZXM9JWQsIHlyZXM9JWQsIHJlZnJlc2g9JWQsIGludGw9JWQgY2xvY2s9JWRcbiIsCisJCW1vZGUt
PmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwgbW9kZS0+dnJlZnJlc2gsCisJCSEhKG1vZGUtPmZs
YWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpLCBtb2RlLT5jbG9jayAqIDEwMDApOworCisJ
aWYgKGhkbWktPmJyaWRnZS5uZXh0KSB7CisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGFkanVz
dGVkX21vZGU7CisKKwkJZHJtX21vZGVfY29weSgmYWRqdXN0ZWRfbW9kZSwgbW9kZSk7CisJCWlm
ICghZHJtX2JyaWRnZV9tb2RlX2ZpeHVwKGhkbWktPmJyaWRnZS5uZXh0LCBtb2RlLAorCQkJCQkg
ICAmYWRqdXN0ZWRfbW9kZSkpCisJCQlyZXR1cm4gTU9ERV9CQUQ7CisJfQorCisJaWYgKG1vZGUt
PmNsb2NrIDwgMjcwMDApCisJCXJldHVybiBNT0RFX0NMT0NLX0xPVzsKKwlpZiAobW9kZS0+Y2xv
Y2sgPiAyOTcwMDApCisJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisKKwlyZXR1cm4gZHJtX21v
ZGVfdmFsaWRhdGVfc2l6ZShtb2RlLCAweDFmZmYsIDB4MWZmZik7Cit9CisKK3N0YXRpYyBzdHJ1
Y3QgZHJtX2VuY29kZXIgKm10a19oZG1pX2Nvbm5fYmVzdF9lbmMoc3RydWN0IGRybV9jb25uZWN0
b3IgKmNvbm4pCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9jb25u
KGNvbm4pOworCisJcmV0dXJuIGhkbWktPmJyaWRnZS5lbmNvZGVyOworfQorCitzdGF0aWMgY29u
c3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgbXRrX2hkbWlfY29ubmVjdG9yX2Z1bmNzID0g
eworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmRldGVjdCA9
IGhkbWlfY29ubl9kZXRlY3QsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3Npbmds
ZV9jb25uZWN0b3JfbW9kZXMsCisJLmRlc3Ryb3kgPSBoZG1pX2Nvbm5fZGVzdHJveSwKKwkuc2V0
X3Byb3BlcnR5ID0gaGRtaV9jb25uX3NldF9wcm9wZXJ0eSwKKwkucmVzZXQgPSBkcm1fYXRvbWlj
X2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1f
YXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJv
eV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAorfTsK
Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcworCQltdGtf
aGRtaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSBtdGtfaGRtaV9j
b25uX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IG10a19oZG1pX2Nvbm5fbW9kZV92YWxpZCwK
KwkuYmVzdF9lbmNvZGVyID0gbXRrX2hkbWlfY29ubl9iZXN0X2VuYywKK307CisKK3N0YXRpYyB2
b2lkIG10a19oZG1pX2hwZF9ldmVudChib29sIGhwZCwgc3RydWN0IGRldmljZSAqZGV2KQorewor
CXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGhk
bWkgJiYgaGRtaS0+YnJpZGdlLmVuY29kZXIgJiYgaGRtaS0+YnJpZGdlLmVuY29kZXItPmRldikK
KwkJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGhkbWktPmJyaWRnZS5lbmNvZGVyLT5kZXYpOwor
fQorCisvKgorICogQnJpZGdlIGNhbGxiYWNrcworICovCisKK3N0YXRpYyBpbnQgbXRrX2hkbWlf
YnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBtdGtf
aGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7CisJaW50IHJldDsKKwor
CXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChicmlkZ2UtPmVuY29kZXItPmRldiwgJmhkbWktPmNv
bm4sCisJCQkJICZtdGtfaGRtaV9jb25uZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5F
Q1RPUl9IRE1JQSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0
byBpbml0aWFsaXplIGNvbm5lY3RvcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQor
CWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmaGRtaS0+Y29ubiwgJm10a19oZG1pX2Nvbm5lY3Rv
cl9oZWxwZXJfZnVuY3MpOworCisJaGRtaS0+Y29ubi5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BP
TExfSFBEOworCWhkbWktPmNvbm4uaW50ZXJsYWNlX2FsbG93ZWQgPSB0cnVlOworCWhkbWktPmNv
bm4uZG91Ymxlc2Nhbl9hbGxvd2VkID0gZmFsc2U7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX3Jl
Z2lzdGVyKCZoZG1pLT5jb25uKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAi
RmFpbGVkIHRvIHJlZ2lzdGVyIGNvbm5lY3RvcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7
CisJfQorCisJcmV0ID0gZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZoZG1pLT5j
b25uLAorCQkJCQkJYnJpZGdlLT5lbmNvZGVyKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGRt
aS0+ZGV2LAorCQkJIkZhaWxlZCB0byBhdHRhY2ggY29ubmVjdG9yIHRvIGVuY29kZXI6ICVkXG4i
LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChicmlkZ2UtPm5leHQpIHsKKwkJYnJp
ZGdlLT5uZXh0LT5lbmNvZGVyID0gYnJpZGdlLT5lbmNvZGVyOworCQlyZXQgPSBkcm1fYnJpZGdl
X2F0dGFjaChicmlkZ2UtPmVuY29kZXItPmRldiwgYnJpZGdlLT5uZXh0KTsKKwkJaWYgKHJldCkg
eworCQkJZGV2X2VycihoZG1pLT5kZXYsCisJCQkJIkZhaWxlZCB0byBhdHRhY2ggZXh0ZXJuYWwg
YnJpZGdlOiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwltdGtfY2Vj
X3NldF9ocGRfZXZlbnQoaGRtaS0+Y2VjX2RldiwgbXRrX2hkbWlfaHBkX2V2ZW50LCBoZG1pLT5k
ZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIG10a19oZG1pX2JyaWRnZV9tb2Rl
X2ZpeHVwKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQkJICAgICAgIGNvbnN0IHN0cnVj
dCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlf
bW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQg
bXRrX2hkbWlfYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlz
dHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOworCisJ
cGh5X3Bvd2VyX29mZihoZG1pLT5waHkpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT5j
bGtbTVRLX0hETUlfQ0xLX0hETUlfUElYRUxdKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRt
aS0+Y2xrW01US19IRE1JX0NMS19IRE1JX1BMTF0pOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRt
aV9icmlkZ2VfcG9zdF9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3Ry
dWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsKKworCW10
a19oZG1pX3Bvd2VyX29mZihoZG1pKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfYnJpZGdl
X21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQkJICAgICBzdHJ1Y3QgZHJt
X2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICph
ZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21f
YnJpZGdlKGJyaWRnZSk7CisKKwlkZXZfZGJnKGhkbWktPmRldiwgImN1ciBpbmZvOiBuYW1lOiVz
LCBoZGlzcGxheTolZFxuIiwKKwkJYWRqdXN0ZWRfbW9kZS0+bmFtZSwgYWRqdXN0ZWRfbW9kZS0+
aGRpc3BsYXkpOworCWRldl9kYmcoaGRtaS0+ZGV2LCAiaHN5bmNfc3RhcnQ6JWQsaHN5bmNfZW5k
OiVkLCBodG90YWw6JWQiLAorCQlhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydCwgYWRqdXN0ZWRf
bW9kZS0+aHN5bmNfZW5kLAorCQlhZGp1c3RlZF9tb2RlLT5odG90YWwpOworCWRldl9kYmcoaGRt
aS0+ZGV2LCAiaHNrZXc6JWQsIHZkaXNwbGF5OiVkXG4iLAorCQlhZGp1c3RlZF9tb2RlLT5oc2tl
dywgYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkpOworCWRldl9kYmcoaGRtaS0+ZGV2LCAidnN5bmNf
c3RhcnQ6JWQsIHZzeW5jX2VuZDolZCwgdnRvdGFsOiVkIiwKKwkJYWRqdXN0ZWRfbW9kZS0+dnN5
bmNfc3RhcnQsIGFkanVzdGVkX21vZGUtPnZzeW5jX2VuZCwKKwkJYWRqdXN0ZWRfbW9kZS0+dnRv
dGFsKTsKKwlkZXZfZGJnKGhkbWktPmRldiwgInZzY2FuOiVkLCBmbGFnOiVkXG4iLAorCQlhZGp1
c3RlZF9tb2RlLT52c2NhbiwgYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MpOworCisJZHJtX21vZGVfY29w
eSgmaGRtaS0+bW9kZSwgYWRqdXN0ZWRfbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1p
X2JyaWRnZV9wcmVfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0
IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsKKworCW10a19o
ZG1pX3Bvd2VyX29uKGhkbWkpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9icmlkZ2VfZW5h
YmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1p
ID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsKKworCW10a19oZG1pX291dHB1dF9zZXRf
ZGlzcGxheV9tb2RlKGhkbWksICZoZG1pLT5tb2RlKTsKKwljbGtfcHJlcGFyZV9lbmFibGUoaGRt
aS0+Y2xrW01US19IRE1JX0NMS19IRE1JX1BMTF0pOworCWNsa19wcmVwYXJlX2VuYWJsZShoZG1p
LT5jbGtbTVRLX0hETUlfQ0xLX0hETUlfUElYRUxdKTsKKwlwaHlfcG93ZXJfb24oaGRtaS0+cGh5
KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIG10a19oZG1pX2Jy
aWRnZV9mdW5jcyA9IHsKKwkuYXR0YWNoID0gbXRrX2hkbWlfYnJpZGdlX2F0dGFjaCwKKwkubW9k
ZV9maXh1cCA9IG10a19oZG1pX2JyaWRnZV9tb2RlX2ZpeHVwLAorCS5kaXNhYmxlID0gbXRrX2hk
bWlfYnJpZGdlX2Rpc2FibGUsCisJLnBvc3RfZGlzYWJsZSA9IG10a19oZG1pX2JyaWRnZV9wb3N0
X2Rpc2FibGUsCisJLm1vZGVfc2V0ID0gbXRrX2hkbWlfYnJpZGdlX21vZGVfc2V0LAorCS5wcmVf
ZW5hYmxlID0gbXRrX2hkbWlfYnJpZGdlX3ByZV9lbmFibGUsCisJLmVuYWJsZSA9IG10a19oZG1p
X2JyaWRnZV9lbmFibGUsCit9OworCitzdGF0aWMgaW50IG10a19oZG1pX2R0X3BhcnNlX3BkYXRh
KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw
ZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmlj
ZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNlY19ucCwg
KnBvcnQsICplcCwgKnJlbW90ZSwgKmkyY19ucDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpj
ZWNfcGRldjsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJc3RydWN0IHJlc291cmNlICptZW07
CisJaW50IHJldDsKKworCXJldCA9IG10a19oZG1pX2dldF9hbGxfY2xrKGhkbWksIG5wKTsKKwlp
ZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBjbG9ja3M6ICVkXG4iLCBy
ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFRoZSBDRUMgbW9kdWxlIGhhbmRsZXMgSERN
SSBob3RwbHVnIGRldGVjdGlvbiAqLworCWNlY19ucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2Rl
KG5wLT5wYXJlbnQsIE5VTEwsCisJCQkJCSAibWVkaWF0ZWssbXQ4MTczLWNlYyIpOworCWlmICgh
Y2VjX25wKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGZpbmQgQ0VDIG5vZGVcbiIpOwor
CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljZWNfcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25v
ZGUoY2VjX25wKTsKKwlpZiAoIWNlY19wZGV2KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiV2Fp
dGluZyBmb3IgQ0VDIGRldmljZSAlc1xuIiwKKwkJCWNlY19ucC0+ZnVsbF9uYW1lKTsKKwkJcmV0
dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCWhkbWktPmNlY19kZXYgPSAmY2VjX3BkZXYtPmRldjsK
KworCS8qCisJICogVGhlIG1lZGlhdGVrLHN5c2Nvbi1oZG1pIHByb3BlcnR5IGNvbnRhaW5zIGEg
cGhhbmRsZSBsaW5rIHRvIHRoZQorCSAqIE1NU1lTX0NPTkZJRyBkZXZpY2UgYW5kIHRoZSByZWdp
c3RlciBvZmZzZXQgb2YgdGhlIEhETUlfU1lTX0NGRworCSAqIHJlZ2lzdGVycyBpdCBjb250YWlu
cy4KKwkgKi8KKwlyZWdtYXAgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAi
bWVkaWF0ZWssc3lzY29uLWhkbWkiKTsKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRl
eChucCwgIm1lZGlhdGVrLHN5c2Nvbi1oZG1pIiwgMSwKKwkJCQkJICZoZG1pLT5zeXNfb2Zmc2V0
KTsKKwlpZiAoSVNfRVJSKHJlZ21hcCkpCisJCXJldCA9IFBUUl9FUlIocmVnbWFwKTsKKwlpZiAo
cmV0KSB7CisJCXJldCA9IFBUUl9FUlIocmVnbWFwKTsKKwkJZGV2X2VycihkZXYsCisJCQkiRmFp
bGVkIHRvIGdldCBzeXN0ZW0gY29uZmlndXJhdGlvbiByZWdpc3RlcnM6ICVkXG4iLAorCQkJcmV0
KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaGRtaS0+c3lzX3JlZ21hcCA9IHJlZ21hcDsKKworCW1l
bSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaGRt
aS0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUiho
ZG1pLT5yZWdzKSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFwIGhkbWlfc2hl
bGw6ICVsZFxuIiwKKwkJCVBUUl9FUlIoaGRtaS0+cmVncykpOworCQlyZXR1cm4gUFRSX0VSUiho
ZG1pLT5yZWdzKTsKKwl9CisKKwlwb3J0ID0gb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQobnAsIDEp
OworCWlmICghcG9ydCkgeworCQlkZXZfZXJyKGRldiwgIk1pc3Npbmcgb3V0cHV0IHBvcnQgbm9k
ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVwID0gb2ZfZ2V0X2NoaWxkX2J5X25h
bWUocG9ydCwgImVuZHBvaW50Iik7CisJaWYgKCFlcCkgeworCQlkZXZfZXJyKGRldiwgIk1pc3Np
bmcgZW5kcG9pbnQgbm9kZSBpbiBwb3J0ICVzXG4iLAorCQkJcG9ydC0+ZnVsbF9uYW1lKTsKKwkJ
b2Zfbm9kZV9wdXQocG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlvZl9ub2RlX3B1dChw
b3J0KTsKKworCXJlbW90ZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZXApOwor
CWlmICghcmVtb3RlKSB7CisJCWRldl9lcnIoZGV2LCAiTWlzc2luZyBjb25uZWN0b3IvYnJpZGdl
IG5vZGUgZm9yIGVuZHBvaW50ICVzXG4iLAorCQkJZXAtPmZ1bGxfbmFtZSk7CisJCW9mX25vZGVf
cHV0KGVwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW9mX25vZGVfcHV0KGVwKTsKKworCWlm
ICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocmVtb3RlLCAiaGRtaS1jb25uZWN0b3IiKSkgewor
CQloZG1pLT5icmlkZ2UubmV4dCA9IG9mX2RybV9maW5kX2JyaWRnZShyZW1vdGUpOworCQlpZiAo
IWhkbWktPmJyaWRnZS5uZXh0KSB7CisJCQlkZXZfZXJyKGRldiwgIldhaXRpbmcgZm9yIGV4dGVy
bmFsIGJyaWRnZVxuIik7CisJCQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQkJcmV0dXJuIC1FUFJP
QkVfREVGRVI7CisJCX0KKwl9CisKKwlpMmNfbnAgPSBvZl9wYXJzZV9waGFuZGxlKHJlbW90ZSwg
ImRkYy1pMmMtYnVzIiwgMCk7CisJaWYgKCFpMmNfbnApIHsKKwkJZGV2X2VycihkZXYsICJGYWls
ZWQgdG8gZmluZCBkZGMtaTJjLWJ1cyBub2RlIGluICVzXG4iLAorCQkJcmVtb3RlLT5mdWxsX25h
bWUpOworCQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJb2Zf
bm9kZV9wdXQocmVtb3RlKTsKKworCWhkbWktPmRkY19hZHB0ID0gb2ZfZmluZF9pMmNfYWRhcHRl
cl9ieV9ub2RlKGkyY19ucCk7CisJaWYgKCFoZG1pLT5kZGNfYWRwdCkgeworCQlkZXZfZXJyKGRl
diwgIkZhaWxlZCB0byBnZXQgZGRjIGkyYyBhZGFwdGVyIGJ5IG5vZGVcbiIpOworCQlyZXR1cm4g
LUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZHJtX2hkbWlf
cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlpbnQgcmV0OworCisJ
aGRtaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaGRtaSksIEdGUF9LRVJORUwpOworCWlm
ICghaGRtaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZG1pLT5kZXYgPSBkZXY7CisKKwlyZXQg
PSBtdGtfaGRtaV9kdF9wYXJzZV9wZGF0YShoZG1pLCBwZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1
cm4gcmV0OworCisJaGRtaS0+cGh5ID0gZGV2bV9waHlfZ2V0KGRldiwgImhkbWkiKTsKKwlpZiAo
SVNfRVJSKGhkbWktPnBoeSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoZG1pLT5waHkpOworCQlkZXZf
ZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgSERNSSBQSFk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4g
cmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhkbWkpOworCisJcmV0ID0g
bXRrX2hkbWlfb3V0cHV0X2luaXQoaGRtaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwg
IkZhaWxlZCB0byBpbml0aWFsaXplIGhkbWkgb3V0cHV0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9
CisKKwloZG1pLT5icmlkZ2UuZnVuY3MgPSAmbXRrX2hkbWlfYnJpZGdlX2Z1bmNzOworCWhkbWkt
PmJyaWRnZS5vZl9ub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7CisJcmV0ID0gZHJtX2JyaWRnZV9h
ZGQoJmhkbWktPmJyaWRnZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0
byBhZGQgYnJpZGdlLCByZXQgPSAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwly
ZXQgPSBtdGtfaGRtaV9jbGtfZW5hYmxlX2F1ZGlvKGhkbWkpOworCWlmIChyZXQpIHsKKwkJZGV2
X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIGF1ZGlvIGNsb2NrczogJWRcbiIsIHJldCk7CisJ
CWdvdG8gZXJyX2JyaWRnZV9yZW1vdmU7CisJfQorCisJZGV2X2RiZyhkZXYsICJtZWRpYXRlayBo
ZG1pIHByb2JlIHN1Y2Nlc3NcbiIpOworCXJldHVybiAwOworCitlcnJfYnJpZGdlX3JlbW92ZToK
Kwlkcm1fYnJpZGdlX3JlbW92ZSgmaGRtaS0+YnJpZGdlKTsKKwlyZXR1cm4gcmV0OworfQorCitz
dGF0aWMgaW50IG10a19kcm1faGRtaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl
dikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2
KTsKKworCWRybV9icmlkZ2VfcmVtb3ZlKCZoZG1pLT5icmlkZ2UpOworCXBsYXRmb3JtX2Rldmlj
ZV91bnJlZ2lzdGVyKGhkbWktPmF1ZGlvX3BkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBk
ZXYsIE5VTEwpOworCW10a19oZG1pX2Nsa19kaXNhYmxlX2F1ZGlvKGhkbWkpOworCXJldHVybiAw
OworfQorCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IG10a19oZG1pX3N1c3Bl
bmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGRldl9n
ZXRfZHJ2ZGF0YShkZXYpOworCisJbXRrX2hkbWlfcG93ZXJfb2ZmKGhkbWkpOworCW10a19oZG1p
X2Nsa19kaXNhYmxlX2F1ZGlvKGhkbWkpOworCXBoeV9wb3dlcl9vZmYoaGRtaS0+cGh5KTsKKwlk
ZXZfZGJnKGRldiwgImhkbWkgc3VzcGVuZCBzdWNjZXNzIVxuIik7CisJcmV0dXJuIDA7Cit9CisK
K3N0YXRpYyBpbnQgbXRrX2hkbWlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1
Y3QgbXRrX2hkbWkgKmhkbWkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0ID0gMDsK
KworCXJldCA9IG10a19oZG1pX2Nsa19lbmFibGVfYXVkaW8oaGRtaSk7CisJaWYgKHJldCkgewor
CQlkZXZfZXJyKGRldiwgImhkbWkgcmVzdW1lIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gcmV0Owor
CX0KKworCW10a19oZG1pX3Bvd2VyX29uKGhkbWkpOworCW10a19oZG1pX291dHB1dF9zZXRfZGlz
cGxheV9tb2RlKGhkbWksICZoZG1pLT5tb2RlKTsKKwlwaHlfcG93ZXJfb24oaGRtaS0+cGh5KTsK
KwlkZXZfZGJnKGRldiwgImhkbWkgcmVzdW1lIHN1Y2Nlc3MhXG4iKTsKKwlyZXR1cm4gMDsKK30K
KyNlbmRpZgorc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG10a19oZG1pX3BtX29wcywKKwkJCSBt
dGtfaGRtaV9zdXNwZW5kLCBtdGtfaGRtaV9yZXN1bWUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0
IG9mX2RldmljZV9pZCBtdGtfZHJtX2hkbWlfb2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9
ICJtZWRpYXRlayxtdDgxNzMtaGRtaSIsIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxh
dGZvcm1fZHJpdmVyIG10a19oZG1pX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtfZHJtX2hkbWlf
cHJvYmUsCisJLnJlbW92ZSA9IG10a19kcm1faGRtaV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJ
Lm5hbWUgPSAibWVkaWF0ZWstZHJtLWhkbWkiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZHJt
X2hkbWlfb2ZfaWRzLAorCQkucG0gPSAmbXRrX2hkbWlfcG1fb3BzLAorCX0sCit9OworCitzdGF0
aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqIGNvbnN0IG10a19oZG1pX2RyaXZlcnNbXSA9IHsK
KwkmbXRrX2hkbWlfcGh5X2RyaXZlciwKKwkmbXRrX2hkbWlfZGRjX2RyaXZlciwKKwkmbXRrX2Nl
Y19kcml2ZXIsCisJJm10a19oZG1pX2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10
a19oZG1pdHhfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAw
OyBpIDwgQVJSQVlfU0laRShtdGtfaGRtaV9kcml2ZXJzKTsgaSsrKSB7CisJCXJldCA9IHBsYXRm
b3JtX2RyaXZlcl9yZWdpc3RlcihtdGtfaGRtaV9kcml2ZXJzW2ldKTsKKwkJaWYgKHJldCA8IDAp
IHsKKwkJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyICVzIGRyaXZlcjogJWRcbiIsCisJCQkg
ICAgICAgbXRrX2hkbWlfZHJpdmVyc1tpXS0+ZHJpdmVyLm5hbWUsIHJldCk7CisJCQlnb3RvIGVy
cjsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlw
bGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfaGRtaV9kcml2ZXJzW2ldKTsKKworCXJldHVy
biByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdGtfaGRtaXR4X2V4aXQodm9pZCkKK3sK
KwlpbnQgaTsKKworCWZvciAoaSA9IEFSUkFZX1NJWkUobXRrX2hkbWlfZHJpdmVycykgLSAxOyBp
ID49IDA7IGktLSkKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIobXRrX2hkbWlfZHJpdmVy
c1tpXSk7Cit9CisKK21vZHVsZV9pbml0KG10a19oZG1pdHhfaW5pdCk7Cittb2R1bGVfZXhpdCht
dGtfaGRtaXR4X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKaWUgUWl1IDxqaWUucWl1QG1lZGlh
dGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWFUZWsgSERNSSBEcml2ZXIiKTsK
K01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBlYzdiNQotLS0gL2Rldi9udWxs
CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5jCkBAIC0wLDAgKzEsNDc5
IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjog
SmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv
biAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAq
CisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+Cisj
aW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRl
IDxsaW51eC9waHkvcGh5Lmg+CisjaW5jbHVkZSAibXRrX2NlYy5oIgorI2luY2x1ZGUgIm10a19o
ZG1pLmgiCisjaW5jbHVkZSAibXRrX2hkbWlfaHcuaCIKKworc3RhdGljIHU4IG10a19oZG1pX2F1
ZF9nZXRfY2hubF9jb3VudChlbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUp
Cit7CisJc3dpdGNoIChjaGFubmVsX3R5cGUpIHsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8x
XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMV8xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U
WVBFXzJfMDoKKwkJcmV0dXJuIDI7CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8xOgorCWNh
c2UgSERNSV9BVURfQ0hBTl9UWVBFXzNfMDoKKwkJcmV0dXJuIDM7CisJY2FzZSBIRE1JX0FVRF9D
SEFOX1RZUEVfM18xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzRfMDoKKwljYXNlIEhETUlf
QVVEX0NIQU5fVFlQRV8zXzBfTFJTOgorCQlyZXR1cm4gNDsKKwljYXNlIEhETUlfQVVEX0NIQU5f
VFlQRV80XzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNV8wOgorCWNhc2UgSERNSV9BVURf
Q0hBTl9UWVBFXzNfMV9MUlM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8wX0NMUlM6CisJ
CXJldHVybiA1OworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzVfMToKKwljYXNlIEhETUlfQVVE
X0NIQU5fVFlQRV82XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8xX0NMUlM6CisJY2Fz
ZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZf
MF9DSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfT0g6CisJY2FzZSBIRE1JX0FVRF9D
SEFOX1RZUEVfNl8wX0NIUjoKKwkJcmV0dXJuIDY7CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVf
Nl8xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DUzoKKwljYXNlIEhETUlfQVVEX0NI
QU5fVFlQRV82XzFfQ0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX09IOgorCWNhc2Ug
SERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18w
OgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSF9SSDoKKwljYXNlIEhETUlfQVVEX0NI
QU5fVFlQRV83XzBfTFNSX1JTUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfTENfUkM6
CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xXX1JXOgorCWNhc2UgSERNSV9BVURfQ0hB
Tl9UWVBFXzdfMF9MU0RfUlNEOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1NfUlNT
OgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSFNfUkhTOgorCWNhc2UgSERNSV9BVURf
Q0hBTl9UWVBFXzdfMF9DU19DSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfT0g6
CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX0NIUjoKKwljYXNlIEhETUlfQVVEX0NI
QU5fVFlQRV83XzBfQ0hfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NIX0NIUjoK
KwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfT0hfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hB
Tl9UWVBFXzdfMF9MU1NfUlNTX0xTUl9SU1I6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfOF8w
X0xIX1JIX0NTOgorCQlyZXR1cm4gNzsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzE6CisJ
Y2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIX1JIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U
WVBFXzdfMV9MU1JfUlNSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MQ19SQzoKKwlj
YXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFdfUlc6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZ
UEVfN18xX0xTRF9SU0Q6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTU19SU1M6CisJ
Y2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIU19SSFM6CisJY2FzZSBIRE1JX0FVRF9DSEFO
X1RZUEVfN18xX0NTX0NIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19PSDoKKwlj
YXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U
WVBFXzdfMV9DSF9PSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ0hfQ0hSOgorCWNh
c2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9PSF9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZ
UEVfN18xX0xTU19SU1NfTFNSX1JTUjoKKwkJcmV0dXJuIDg7CisJZGVmYXVsdDoKKwkJcmV0dXJu
IDI7CisJfQorfQorCitzdGF0aWMgaW50IG10a19oZG1pX3ZpZGVvX2NoYW5nZV92cGxsKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwgdTMyIGNsb2NrKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwlp
bnQgcmV0OworCisJLyogVGhlIERQSSBkcml2ZXIgYWxyZWFkeSBzaG91bGQgaGF2ZSBzZXQgVFZE
UExMIHRvIHRoZSBjb3JyZWN0IHJhdGUgKi8KKwlyZXQgPSBjbGtfc2V0X3JhdGUoaGRtaS0+Y2xr
W01US19IRE1JX0NMS19IRE1JX1BMTF0sIGNsb2NrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo
aGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHNldCBQTEwgdG8gJXUgSHo6ICVkXG4iLCBjbG9jaywKKwkJ
CXJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShoZG1pLT5j
bGtbTVRLX0hETUlfQ0xLX0hETUlfUExMXSk7CisKKwlpZiAoRElWX1JPVU5EX0NMT1NFU1QocmF0
ZSwgMTAwMCkgIT0gRElWX1JPVU5EX0NMT1NFU1QoY2xvY2ssIDEwMDApKQorCQlkZXZfd2Fybiho
ZG1pLT5kZXYsICJXYW50IFBMTCAldSBIeiwgZ290ICVsdSBIelxuIiwgY2xvY2ssCisJCQkgcmF0
ZSk7CisJZWxzZQorCQlkZXZfZGJnKGhkbWktPmRldiwgIldhbnQgUExMICV1IEh6LCBnb3QgJWx1
IEh6XG4iLCBjbG9jaywgcmF0ZSk7CisKKwltdGtfaGRtaV9od19jb25maWdfc3lzKGhkbWkpOwor
CW10a19oZG1pX2h3X3NldF9kZWVwX2NvbG9yX21vZGUoaGRtaSk7CisJcmV0dXJuIDA7Cit9CisK
K3N0YXRpYyB2b2lkIG10a19oZG1pX3ZpZGVvX3NldF9kaXNwbGF5X21vZGUoc3RydWN0IG10a19o
ZG1pICpoZG1pLAorCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJ
bXRrX2hkbWlfaHdfcmVzZXQoaGRtaSk7CisJbXRrX2hkbWlfaHdfZW5hYmxlX25vdGljZShoZG1p
LCB0cnVlKTsKKwltdGtfaGRtaV9od193cml0ZV9pbnRfbWFzayhoZG1pLCAweGZmKTsKKwltdGtf
aGRtaV9od19lbmFibGVfZHZpX21vZGUoaGRtaSwgaGRtaS0+ZHZpX21vZGUpOworCW10a19oZG1p
X2h3X25jdHNfYXV0b193cml0ZV9lbmFibGUoaGRtaSwgdHJ1ZSk7CisKKwltdGtfaGRtaV9od19t
c2ljX3NldHRpbmcoaGRtaSwgbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfYXVkX2Vu
YWJsZV9wYWNrZXQoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sKKwltdGtf
aGRtaV9od19zZW5kX2F1ZF9wYWNrZXQoaGRtaSwgZW5hYmxlKTsKKwlyZXR1cm4gMDsKK30KKwor
c3RhdGljIGludCBtdGtfaGRtaV9hdWRfb25fb2ZmX2h3X25jdHMoc3RydWN0IG10a19oZG1pICpo
ZG1pLCBib29sIG9uKQoreworCW10a19oZG1pX2h3X25jdHNfZW5hYmxlKGhkbWksIG9uKTsKKwly
ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRfc2V0X2lucHV0KHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSkKK3sKKwl1OCBjaGFuX2NvdW50OworCisJbXRrX2hkbWlfaHdfYXVkX3Nl
dF9jaGFubmVsX3N3YXAoaGRtaSwgSERNSV9BVURfU1dBUF9MRkVfQ0MpOworCW10a19oZG1pX2h3
X2F1ZF9yYXdfZGF0YV9lbmFibGUoaGRtaSwgdHJ1ZSk7CisKKwlpZiAoaGRtaS0+YXVkX3BhcmFt
LmF1ZF9pbnB1dF90eXBlID09IEhETUlfQVVEX0lOUFVUX1NQRElGICYmCisJICAgIGhkbWktPmF1
ZF9wYXJhbS5hdWRfY29kZWMgPT0gSERNSV9BVURJT19DT0RJTkdfVFlQRV9EU1QpIHsKKwkJbXRr
X2hkbWlfaHdfYXVkX3NldF9iaXRfbnVtKGhkbWksCisJCQkJCSAgICBIRE1JX0FVRElPX1NBTVBM
RV9TSVpFXzI0KTsKKwl9IGVsc2UgaWYgKGhkbWktPmF1ZF9wYXJhbS5hdWRfaTJzX2ZtdCA9PQor
CQkJSERNSV9JMlNfTU9ERV9MSlRfMjRCSVQpIHsKKwkJaGRtaS0+YXVkX3BhcmFtLmF1ZF9pMnNf
Zm10ID0gSERNSV9JMlNfTU9ERV9MSlRfMTZCSVQ7CisJfQorCisJbXRrX2hkbWlfaHdfYXVkX3Nl
dF9pMnNfZm10KGhkbWksCisJCQkJICAgIGhkbWktPmF1ZF9wYXJhbS5hdWRfaTJzX2ZtdCk7CisJ
bXRrX2hkbWlfaHdfYXVkX3NldF9iaXRfbnVtKGhkbWksIEhETUlfQVVESU9fU0FNUExFX1NJWkVf
MjQpOworCisJbXRrX2hkbWlfaHdfYXVkX3NldF9oaWdoX2JpdHJhdGUoaGRtaSwgZmFsc2UpOwor
CW10a19oZG1pX3BoeV9hdWRfZHN0X25vcm1hbF9kb3VibGVfZW5hYmxlKGhkbWksIGZhbHNlKTsK
KwltdGtfaGRtaV9od19hdWRfZHN0X2VuYWJsZShoZG1pLCBmYWxzZSk7CisKKwlpZiAoaGRtaS0+
YXVkX3BhcmFtLmF1ZF9pbnB1dF90eXBlID09IEhETUlfQVVEX0lOUFVUX1NQRElGKSB7CisJCW10
a19oZG1pX2h3X2F1ZF9kc2RfZW5hYmxlKGhkbWksIGZhbHNlKTsKKwkJaWYgKGhkbWktPmF1ZF9w
YXJhbS5hdWRfY29kZWMgPT0KKwkJCUhETUlfQVVESU9fQ09ESU5HX1RZUEVfRFNUKSB7CisJCQlt
dGtfaGRtaV9waHlfYXVkX2RzdF9ub3JtYWxfZG91YmxlX2VuYWJsZShoZG1pLAorCQkJCQkJCQkg
IHRydWUpOworCQkJbXRrX2hkbWlfaHdfYXVkX2RzdF9lbmFibGUoaGRtaSwgdHJ1ZSk7CisJCX0K
KworCQljaGFuX2NvdW50ID0gbXRrX2hkbWlfYXVkX2dldF9jaG5sX2NvdW50CisJCQkJCQkgKEhE
TUlfQVVEX0NIQU5fVFlQRV8yXzApOworCQltdGtfaGRtaV9od19hdWRfc2V0X2kyc19jaGFuX251
bShoZG1pLAorCQkJCQkJIEhETUlfQVVEX0NIQU5fVFlQRV8yXzAsCisJCQkJCQkgY2hhbl9jb3Vu
dCk7CisJCW10a19oZG1pX2h3X2F1ZF9zZXRfaW5wdXRfdHlwZShoZG1pLAorCQkJCQkgICAgICAg
SERNSV9BVURfSU5QVVRfU1BESUYpOworCX0gZWxzZSB7CisJCW10a19oZG1pX2h3X2F1ZF9kc2Rf
ZW5hYmxlKGhkbWksIGZhbHNlKTsKKwkJY2hhbl9jb3VudCA9CisJCQltdGtfaGRtaV9hdWRfZ2V0
X2NobmxfY291bnQoCisJCQloZG1pLT5hdWRfcGFyYW0uYXVkX2lucHV0X2NoYW5fdHlwZSk7CisJ
CW10a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2NoYW5fbnVtKAorCQkJaGRtaSwKKwkJCWhkbWktPmF1
ZF9wYXJhbS5hdWRfaW5wdXRfY2hhbl90eXBlLAorCQkJY2hhbl9jb3VudCk7CisJCW10a19oZG1p
X2h3X2F1ZF9zZXRfaW5wdXRfdHlwZShoZG1pLAorCQkJCQkgICAgICAgSERNSV9BVURfSU5QVVRf
STJTKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfYXVkX3NldF9z
cmMoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpk
aXNwbGF5X21vZGUpCit7CisJbXRrX2hkbWlfYXVkX29uX29mZl9od19uY3RzKGhkbWksIGZhbHNl
KTsKKworCWlmIChoZG1pLT5hdWRfcGFyYW0uYXVkX2lucHV0X3R5cGUgPT0gSERNSV9BVURfSU5Q
VVRfSTJTKSB7CisJCXN3aXRjaCAoaGRtaS0+YXVkX3BhcmFtLmF1ZF9oZG1pX2ZzKSB7CisJCWNh
c2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzMyMDAwOgorCQljYXNlIEhETUlfQVVESU9f
U0FNUExFX0ZSRVFVRU5DWV80NDEwMDoKKwkJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVO
Q1lfNDgwMDA6CisJCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzg4MjAwOgorCQlj
YXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV85NjAwMDoKKwkJCW10a19oZG1pX2h3X2F1
ZF9zcmNfb2ZmKGhkbWkpOworCQkJLyogbXRrX2hkbWlfaHdfYXVkX3NyY19lbmFibGUoaGRtaSwg
ZmFsc2UpOyAqLworCQkJbXRrX2hkbWlfaHdfYXVkX3NldF9tY2xrKAorCQkJaGRtaSwKKwkJCWhk
bWktPmF1ZF9wYXJhbS5hdWRfbWNsayk7CisJCQltdGtfaGRtaV9od19hdWRfYWNsa19pbnZfZW5h
YmxlKGhkbWksIGZhbHNlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0K
Kwl9IGVsc2UgeworCQlzd2l0Y2ggKGhkbWktPmF1ZF9wYXJhbS5pZWNfZnJhbWVfZnMpIHsKKwkJ
Y2FzZSBIRE1JX0lFQ18zMks6CisJCQloZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMgPQorCQkJ
ICAgIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV8zMjAwMDsKKwkJCW10a19oZG1pX2h3X2F1
ZF9zcmNfb2ZmKGhkbWkpOworCQkJbXRrX2hkbWlfaHdfYXVkX3NldF9tY2xrKGhkbWksCisJCQkJ
CQkgSERNSV9BVURfTUNMS18xMjhGUyk7CisJCQltdGtfaGRtaV9od19hdWRfYWNsa19pbnZfZW5h
YmxlKGhkbWksIGZhbHNlKTsKKwkJCWJyZWFrOworCQljYXNlIEhETUlfSUVDXzQ4SzoKKwkJCWhk
bWktPmF1ZF9wYXJhbS5hdWRfaGRtaV9mcyA9CisJCQkgICAgSERNSV9BVURJT19TQU1QTEVfRlJF
UVVFTkNZXzQ4MDAwOworCQkJbXRrX2hkbWlfaHdfYXVkX3NyY19vZmYoaGRtaSk7CisJCQltdGtf
aGRtaV9od19hdWRfc2V0X21jbGsoaGRtaSwKKwkJCQkJCSBIRE1JX0FVRF9NQ0xLXzEyOEZTKTsK
KwkJCW10a19oZG1pX2h3X2F1ZF9hY2xrX2ludl9lbmFibGUoaGRtaSwgZmFsc2UpOworCQkJYnJl
YWs7CisJCWNhc2UgSERNSV9JRUNfNDRLOgorCQkJaGRtaS0+YXVkX3BhcmFtLmF1ZF9oZG1pX2Zz
ID0KKwkJCSAgICBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfNDQxMDA7CisJCQltdGtfaGRt
aV9od19hdWRfc3JjX29mZihoZG1pKTsKKwkJCW10a19oZG1pX2h3X2F1ZF9zZXRfbWNsayhoZG1p
LAorCQkJCQkJIEhETUlfQVVEX01DTEtfMTI4RlMpOworCQkJbXRrX2hkbWlfaHdfYXVkX2FjbGtf
aW52X2VuYWJsZShoZG1pLCBmYWxzZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFr
OworCQl9CisJfQorCW10a19oZG1pX2h3X2F1ZF9zZXRfbmN0cyhoZG1pLCBoZG1pLT5hdWRfcGFy
YW0uYXVkX2hkbWlfZnMsCisJCQkJIGRpc3BsYXlfbW9kZS0+Y2xvY2spOworCisJbXRrX2hkbWlf
aHdfYXVkX3NyY19yZWVuYWJsZShoZG1pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBt
dGtfaGRtaV9hdWRfc2V0X2Nobmxfc3RhdHVzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlt
dGtfaGRtaV9od19hdWRfc2V0X2NoYW5uZWxfc3RhdHVzKAorCQloZG1pLAorCSAgIGhkbWktPmF1
ZF9wYXJhbS5oZG1pX2xfY2hhbm5lbF9zdGF0ZSwKKwkgICBoZG1pLT5hdWRfcGFyYW0uaGRtaV9y
X2NoYW5uZWxfc3RhdGUsCisJICAgaGRtaS0+YXVkX3BhcmFtLmF1ZF9oZG1pX2ZzKTsKKwlyZXR1
cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRfb3V0cHV0X2NvbmZpZyhzdHJ1Y3Qg
bXRrX2hkbWkgKmhkbWksCisJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRpc3Bs
YXlfbW9kZSkKK3sKKwltdGtfaGRtaV9od19hdWRfbXV0ZShoZG1pLCB0cnVlKTsKKwltdGtfaGRt
aV9hdWRfZW5hYmxlX3BhY2tldChoZG1pLCBmYWxzZSk7CisKKwltdGtfaGRtaV9hdWRfc2V0X2lu
cHV0KGhkbWkpOworCW10a19oZG1pX2F1ZF9zZXRfc3JjKGhkbWksIGRpc3BsYXlfbW9kZSk7CisJ
bXRrX2hkbWlfYXVkX3NldF9jaG5sX3N0YXR1cyhoZG1pKTsKKworCXVzbGVlcF9yYW5nZSg1MCwg
MTAwKTsKKworCW10a19oZG1pX2F1ZF9vbl9vZmZfaHdfbmN0cyhoZG1pLCB0cnVlKTsKKwltdGtf
aGRtaV9hdWRfZW5hYmxlX3BhY2tldChoZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9od19hdWRfbXV0
ZShoZG1pLCBmYWxzZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc2V0
dXBfYXZfbXV0ZV9wYWNrZXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCW10a19oZG1pX2h3
X3NlbmRfYXZfbXV0ZShoZG1pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRt
aV9zZXR1cF9hdl91bm11dGVfcGFja2V0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwltdGtf
aGRtaV9od19zZW5kX2F2X3VubXV0ZShoZG1pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu
dCBtdGtfaGRtaV9zZXR1cF9hdmlfaW5mb2ZyYW1lKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJ
CQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGhkbWlfYXZpX2lu
Zm9mcmFtZSBmcmFtZTsKKwl1OCBidWZmZXJbMTddOworCXNzaXplX3QgZXJyOworCisJZXJyID0g
ZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9kZSgmZnJhbWUsIG1vZGUpOwor
CWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LAorCQkJIkZhaWxlZCB0byBnZXQg
QVZJIGluZm9mcmFtZSBmcm9tIG1vZGU6ICV6ZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9
CisKKwllcnIgPSBoZG1pX2F2aV9pbmZvZnJhbWVfcGFjaygmZnJhbWUsIGJ1ZmZlciwgc2l6ZW9m
KGJ1ZmZlcikpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVk
IHRvIHBhY2sgQVZJIGluZm9mcmFtZTogJXpkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0K
KworCW10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShoZG1pLCBidWZmZXIsIHNpemVvZihidWZm
ZXIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9zZXR1cF9zcGRfaW5m
b2ZyYW1lKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJY29uc3QgY2hhciAqdmVuZG9yLAor
CQkJCQljb25zdCBjaGFyICpwcm9kdWN0KQoreworCXN0cnVjdCBoZG1pX3NwZF9pbmZvZnJhbWUg
ZnJhbWU7CisJdTggYnVmZmVyWzI5XTsKKwlzc2l6ZV90IGVycjsKKworCWVyciA9IGhkbWlfc3Bk
X2luZm9mcmFtZV9pbml0KCZmcmFtZSwgdmVuZG9yLCBwcm9kdWN0KTsKKwlpZiAoZXJyIDwgMCkg
eworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIFNQRCBpbmZvZnJh
bWU6ICV6ZFxuIiwKKwkJCWVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gaGRtaV9z
cGRfaW5mb2ZyYW1lX3BhY2soJmZyYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlpZiAo
ZXJyIDwgMCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBwYWNrIFNEUCBpbmZv
ZnJhbWU6ICV6ZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwltdGtfaGRtaV9od19z
ZW5kX2luZm9fZnJhbWUoaGRtaSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc2V0dXBfYXVkaW9faW5mb2ZyYW1lKHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSkKK3sKKwlzdHJ1Y3QgaGRtaV9hdWRpb19pbmZvZnJhbWUgZnJhbWU7CisJ
dTggYnVmZmVyWzE0XTsKKwlzc2l6ZV90IGVycjsKKworCWVyciA9IGhkbWlfYXVkaW9faW5mb2Zy
YW1lX2luaXQoJmZyYW1lKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwg
IkZhaWxlZCB0byBzZXR1cCBhdWRpbyBpbmZvZnJhbWU6ICV6ZFxuIiwKKwkJCWVycik7CisJCXJl
dHVybiBlcnI7CisJfQorCisJZnJhbWUuY29kaW5nX3R5cGUgPSBIRE1JX0FVRElPX0NPRElOR19U
WVBFX1NUUkVBTTsKKwlmcmFtZS5zYW1wbGVfZnJlcXVlbmN5ID0gSERNSV9BVURJT19TQU1QTEVf
RlJFUVVFTkNZX1NUUkVBTTsKKwlmcmFtZS5zYW1wbGVfc2l6ZSA9IEhETUlfQVVESU9fU0FNUExF
X1NJWkVfU1RSRUFNOworCWZyYW1lLmNoYW5uZWxzID0KKwkgICAgbXRrX2hkbWlfYXVkX2dldF9j
aG5sX2NvdW50KAorCSAgICBoZG1pLT5hdWRfcGFyYW0uYXVkX2lucHV0X2NoYW5fdHlwZSk7CisK
KwllcnIgPSBoZG1pX2F1ZGlvX2luZm9mcmFtZV9wYWNrKCZmcmFtZSwgYnVmZmVyLCBzaXplb2Yo
YnVmZmVyKSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQg
dG8gcGFjayBhdWRpbyBpbmZvZnJhbWU6ICV6ZFxuIiwKKwkJCWVycik7CisJCXJldHVybiBlcnI7
CisJfQorCisJbXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKGhkbWksIGJ1ZmZlciwgc2l6ZW9m
KGJ1ZmZlcikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3NldHVwX3Zl
bmRvcl9zcGVjaWZpY19pbmZvZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQkJc3Ry
dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGhkbWlfdmVuZG9yX2luZm9m
cmFtZSBmcmFtZTsKKwl1OCBidWZmZXJbMTBdOworCXNzaXplX3QgZXJyOworCisJZXJyID0gZHJt
X2hkbWlfdmVuZG9yX2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9kZSgmZnJhbWUsIG1vZGUpOwor
CWlmIChlcnIpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsCisJCQkiRmFpbGVkIHRvIGdldCB2ZW5k
b3IgaW5mb2ZyYW1lIGZyb20gbW9kZTogJXpkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0K
KworCWVyciA9IGhkbWlfdmVuZG9yX2luZm9mcmFtZV9wYWNrKCZmcmFtZSwgYnVmZmVyLCBzaXpl
b2YoYnVmZmVyKSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0
byBwYWNrIHZlbmRvciBpbmZvZnJhbWU6ICV6ZFxuIiwKKwkJCWVycik7CisJCXJldHVybiBlcnI7
CisJfQorCisJbXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKGhkbWksIGJ1ZmZlciwgc2l6ZW9m
KGJ1ZmZlcikpOworCXJldHVybiAwOworfQorCitpbnQgbXRrX2hkbWlfaHBkX2hpZ2goc3RydWN0
IG10a19oZG1pICpoZG1pKQoreworCXJldHVybiBoZG1pLT5jZWNfZGV2ID8gbXRrX2NlY19ocGRf
aGlnaChoZG1pLT5jZWNfZGV2KSA6IGZhbHNlOworfQorCitpbnQgbXRrX2hkbWlfb3V0cHV0X2lu
aXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXN0cnVjdCBoZG1pX2F1ZGlvX3BhcmFtICph
dWRfcGFyYW0gPSAmaGRtaS0+YXVkX3BhcmFtOworCisJaWYgKGhkbWktPmluaXQpCisJCXJldHVy
biAtRUlOVkFMOworCisJaGRtaS0+Y3NwID0gSERNSV9DT0xPUlNQQUNFX1JHQjsKKwloZG1pLT5v
dXRwdXQgPSB0cnVlOworCWF1ZF9wYXJhbS0+YXVkX2NvZGVjID0gSERNSV9BVURJT19DT0RJTkdf
VFlQRV9QQ007CisJYXVkX3BhcmFtLT5hdWRfaGRtaV9mcyA9IEhETUlfQVVESU9fU0FNUExFX0ZS
RVFVRU5DWV80ODAwMDsKKwlhdWRfcGFyYW0tPmF1ZF9zYW1wZV9zaXplID0gSERNSV9BVURJT19T
QU1QTEVfU0laRV8xNjsKKwlhdWRfcGFyYW0tPmF1ZF9pbnB1dF90eXBlID0gSERNSV9BVURfSU5Q
VVRfSTJTOworCWF1ZF9wYXJhbS0+YXVkX2kyc19mbXQgPSBIRE1JX0kyU19NT0RFX0kyU18yNEJJ
VDsKKwlhdWRfcGFyYW0tPmF1ZF9tY2xrID0gSERNSV9BVURfTUNMS18xMjhGUzsKKwlhdWRfcGFy
YW0tPmllY19mcmFtZV9mcyA9IEhETUlfSUVDXzQ4SzsKKwlhdWRfcGFyYW0tPmF1ZF9pbnB1dF9j
aGFuX3R5cGUgPSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8wOworCWF1ZF9wYXJhbS0+aGRtaV9sX2No
YW5uZWxfc3RhdGVbMl0gPSAyOworCWF1ZF9wYXJhbS0+aGRtaV9yX2NoYW5uZWxfc3RhdGVbMl0g
PSAyOworCWhkbWktPmluaXQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXRrX2hk
bWlfcG93ZXJfb24oc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCW10a19oZG1pX2h3X21ha2Vf
cmVnX3dyaXRhYmxlKGhkbWksIHRydWUpOworCW10a19oZG1pX2h3XzFwNF92ZXJzaW9uX2VuYWJs
ZShoZG1pLCB0cnVlKTsKK30KKwordm9pZCBtdGtfaGRtaV9wb3dlcl9vZmYoc3RydWN0IG10a19o
ZG1pICpoZG1pKQoreworCW10a19oZG1pX2h3XzFwNF92ZXJzaW9uX2VuYWJsZShoZG1pLCB0cnVl
KTsKKwltdGtfaGRtaV9od19tYWtlX3JlZ193cml0YWJsZShoZG1pLCBmYWxzZSk7Cit9CisKK2lu
dCBtdGtfaGRtaV9vdXRwdXRfc2V0X2Rpc3BsYXlfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWks
CisJCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlpbnQgcmV0Owor
CisJaWYgKCFoZG1pLT5pbml0KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiZG9lc24ndCBpbml0
IGhkbWkgY29udHJvbCBjb250ZXh0IVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW10
a19oZG1pX2h3X3ZpZF9ibGFjayhoZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9od19hdWRfbXV0ZSho
ZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9zZXR1cF9hdl9tdXRlX3BhY2tldChoZG1pKTsKKwlwaHlf
cG93ZXJfb2ZmKGhkbWktPnBoeSk7CisKKwlyZXQgPSBtdGtfaGRtaV92aWRlb19jaGFuZ2VfdnBs
bChoZG1pLAorCQkJCQkgbW9kZS0+Y2xvY2sgKiAxMDAwKTsKKwlpZiAocmV0KSB7CisJCWRldl9l
cnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHNldCB2cGxsOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJu
IHJldDsKKwl9CisJbXRrX2hkbWlfdmlkZW9fc2V0X2Rpc3BsYXlfbW9kZShoZG1pLCBtb2RlKTsK
KworCXBoeV9wb3dlcl9vbihoZG1pLT5waHkpOworCW10a19oZG1pX2F1ZF9vdXRwdXRfY29uZmln
KGhkbWksIG1vZGUpOworCisJbXRrX2hkbWlfc2V0dXBfYXVkaW9faW5mb2ZyYW1lKGhkbWkpOwor
CW10a19oZG1pX3NldHVwX2F2aV9pbmZvZnJhbWUoaGRtaSwgbW9kZSk7CisJbXRrX2hkbWlfc2V0
dXBfc3BkX2luZm9mcmFtZShoZG1pLCAibWVkaWF0ZWsiLCAiY2hyb21lYm9vayIpOworCWlmICht
b2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfM0RfTUFTSykKKwkJbXRrX2hkbWlfc2V0dXBfdmVu
ZG9yX3NwZWNpZmljX2luZm9mcmFtZShoZG1pLCBtb2RlKTsKKworCW10a19oZG1pX2h3X3ZpZF9i
bGFjayhoZG1pLCBmYWxzZSk7CisJbXRrX2hkbWlfaHdfYXVkX211dGUoaGRtaSwgZmFsc2UpOwor
CW10a19oZG1pX3NldHVwX2F2X3VubXV0ZV9wYWNrZXQoaGRtaSk7CisKKwlyZXR1cm4gMDsKK30K
ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oIGIvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOTQwMzkxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfaGRtaS5oCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5j
b20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov
CisjaWZuZGVmIF9NVEtfSERNSV9DVFJMX0gKKyNkZWZpbmUgX01US19IRE1JX0NUUkxfSAorCisj
aW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8bGludXgvaGRtaS5oPgorI2luY2x1
ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGlu
dXgvdHlwZXMuaD4KKworc3RydWN0IGNsazsKK3N0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgZGV2aWNl
X25vZGU7CitzdHJ1Y3QgaTJjX2FkYXB0ZXI7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOworc3Ry
dWN0IHBoeTsKK3N0cnVjdCByZWdtYXA7CisKK2VudW0gbXRrX2hkbWlfY2xrX2lkIHsKKwlNVEtf
SERNSV9DTEtfSERNSV9QSVhFTCwKKwlNVEtfSERNSV9DTEtfSERNSV9QTEwsCisJTVRLX0hETUlf
Q0xLX0FVRF9CQ0xLLAorCU1US19IRE1JX0NMS19BVURfU1BESUYsCisJTVRLX0hETUlfQ0xLX0NP
VU5UCit9OworCitlbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgeworCUhETUlfQVVEX0lOUFVUX0ky
UyA9IDAsCisJSERNSV9BVURfSU5QVVRfU1BESUYsCit9OworCitlbnVtIGhkbWlfYXVkX2kyc19m
bXQgeworCUhETUlfSTJTX01PREVfUkpUXzI0QklUID0gMCwKKwlIRE1JX0kyU19NT0RFX1JKVF8x
NkJJVCwKKwlIRE1JX0kyU19NT0RFX0xKVF8yNEJJVCwKKwlIRE1JX0kyU19NT0RFX0xKVF8xNkJJ
VCwKKwlIRE1JX0kyU19NT0RFX0kyU18yNEJJVCwKKwlIRE1JX0kyU19NT0RFX0kyU18xNkJJVAor
fTsKKworZW51bSBoZG1pX2F1ZF9tY2xrIHsKKwlIRE1JX0FVRF9NQ0xLXzEyOEZTLAorCUhETUlf
QVVEX01DTEtfMTkyRlMsCisJSERNSV9BVURfTUNMS18yNTZGUywKKwlIRE1JX0FVRF9NQ0xLXzM4
NEZTLAorCUhETUlfQVVEX01DTEtfNTEyRlMsCisJSERNSV9BVURfTUNMS183NjhGUywKKwlIRE1J
X0FVRF9NQ0xLXzExNTJGUywKK307CisKK2VudW0gaGRtaV9hdWRfaWVjX2ZyYW1lX3JhdGUgewor
CUhETUlfSUVDXzMySyA9IDAsCisJSERNSV9JRUNfOTZLLAorCUhETUlfSUVDXzE5MkssCisJSERN
SV9JRUNfNzY4SywKKwlIRE1JX0lFQ180NEssCisJSERNSV9JRUNfODhLLAorCUhETUlfSUVDXzE3
NkssCisJSERNSV9JRUNfNzA1SywKKwlIRE1JX0lFQ18xNkssCisJSERNSV9JRUNfMjJLLAorCUhE
TUlfSUVDXzI0SywKKwlIRE1JX0lFQ180OEssCit9OworCitlbnVtIGhkbWlfYXVkX2NoYW5uZWxf
dHlwZSB7CisJSERNSV9BVURfQ0hBTl9UWVBFXzFfMCA9IDAsCisJSERNSV9BVURfQ0hBTl9UWVBF
XzFfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfMl8wLAorCUhETUlfQVVEX0NIQU5fVFlQRV8yXzEs
CisJSERNSV9BVURfQ0hBTl9UWVBFXzNfMCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18xLAorCUhE
TUlfQVVEX0NIQU5fVFlQRV80XzAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzRfMSwKKwlIRE1JX0FV
RF9DSEFOX1RZUEVfNV8wLAorCUhETUlfQVVEX0NIQU5fVFlQRV81XzEsCisJSERNSV9BVURfQ0hB
Tl9UWVBFXzZfMCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xLAorCUhETUlfQVVEX0NIQU5fVFlQ
RV83XzAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18w
X0xSUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18xX0xSUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVf
NF8wX0NMUlMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzRfMV9DTFJTLAorCUhETUlfQVVEX0NIQU5f
VFlQRV82XzFfQ1MsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DSCwKKwlIRE1JX0FVRF9DSEFO
X1RZUEVfNl8xX09ILAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ0hSLAorCUhETUlfQVVEX0NI
QU5fVFlQRV83XzFfTEhfUkgsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU1JfUlNSLAorCUhE
TUlfQVVEX0NIQU5fVFlQRV83XzFfTENfUkMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MV19S
VywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTRF9SU0QsCisJSERNSV9BVURfQ0hBTl9UWVBF
XzdfMV9MU1NfUlNTLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfTEhTX1JIUywKKwlIRE1JX0FV
RF9DSEFOX1RZUEVfN18xX0NTX0NILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfT0gsCisJ
SERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9D
SF9PSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NIX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZ
UEVfN18xX09IX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTU19SU1NfTFNSX1JTUiwK
KwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NTLAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ0gs
CisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMF9PSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NI
UiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xIX1JILAorCUhETUlfQVVEX0NIQU5fVFlQRV83
XzBfTFNSX1JTUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xDX1JDLAorCUhETUlfQVVEX0NI
QU5fVFlQRV83XzBfTFdfUlcsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU0RfUlNELAorCUhE
TUlfQVVEX0NIQU5fVFlQRV83XzBfTFNTX1JTUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xI
U19SSFMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DU19DSCwKKwlIRE1JX0FVRF9DSEFOX1RZ
UEVfN18wX0NTX09ILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfQ0hSLAorCUhETUlfQVVE
X0NIQU5fVFlQRV83XzBfQ0hfT0gsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DSF9DSFIsCisJ
SERNSV9BVURfQ0hBTl9UWVBFXzdfMF9PSF9DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9M
U1NfUlNTX0xTUl9SU1IsCisJSERNSV9BVURfQ0hBTl9UWVBFXzhfMF9MSF9SSF9DUywKKwlIRE1J
X0FVRF9DSEFOX1RZUEVfVU5LTk9XTiA9IDB4RkYKK307CisKK2VudW0gaGRtaV9hdWRfY2hhbm5l
bF9zd2FwX3R5cGUgeworCUhETUlfQVVEX1NXQVBfTFIsCisJSERNSV9BVURfU1dBUF9MRkVfQ0Ms
CisJSERNSV9BVURfU1dBUF9MU1JTLAorCUhETUlfQVVEX1NXQVBfUkxTX1JSUywKKwlIRE1JX0FV
RF9TV0FQX0xSX1NUQVRVUywKK307CisKK3N0cnVjdCBoZG1pX2F1ZGlvX3BhcmFtIHsKKwllbnVt
IGhkbWlfYXVkaW9fY29kaW5nX3R5cGUgYXVkX2NvZGVjOworCWVudW0gaGRtaV9hdWRpb19zYW1w
bGVfZnJlcXVlbmN5IGF1ZF9oZG1pX2ZzOworCWVudW0gaGRtaV9hdWRpb19zYW1wbGVfc2l6ZSBh
dWRfc2FtcGVfc2l6ZTsKKwllbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgYXVkX2lucHV0X3R5cGU7
CisJZW51bSBoZG1pX2F1ZF9pMnNfZm10IGF1ZF9pMnNfZm10OworCWVudW0gaGRtaV9hdWRfbWNs
ayBhdWRfbWNsazsKKwllbnVtIGhkbWlfYXVkX2llY19mcmFtZV9yYXRlIGllY19mcmFtZV9mczsK
KwllbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBhdWRfaW5wdXRfY2hhbl90eXBlOworCXU4IGhk
bWlfbF9jaGFubmVsX3N0YXRlWzZdOworCXU4IGhkbWlfcl9jaGFubmVsX3N0YXRlWzZdOworfTsK
Kworc3RydWN0IG10a19oZG1pIHsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7CisJc3RydWN0
IGRybV9jb25uZWN0b3IgY29ubjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHBoeSAq
cGh5OworCXN0cnVjdCBkZXZpY2UgKmNlY19kZXY7CisJc3RydWN0IGkyY19hZGFwdGVyICpkZGNf
YWRwdDsKKwlzdHJ1Y3QgY2xrICpjbGtbTVRLX0hETUlfQ0xLX0NPVU5UXTsKKyNpZiBkZWZpbmVk
KENPTkZJR19ERUJVR19GUykKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzOworI2VuZGlmCisJc3Ry
dWN0IHBsYXRmb3JtX2RldmljZSAqYXVkaW9fcGRldjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k
ZSBtb2RlOworCWJvb2wgZHZpX21vZGU7CisJdTMyIG1pbl9jbG9jazsKKwl1MzIgbWF4X2Nsb2Nr
OworCXUzMiBtYXhfaGRpc3BsYXk7CisJdTMyIG1heF92ZGlzcGxheTsKKwl1MzIgaWJpYXM7CisJ
dTMyIGliaWFzX3VwOworCXN0cnVjdCByZWdtYXAgKnN5c19yZWdtYXA7CisJdW5zaWduZWQgaW50
IHN5c19vZmZzZXQ7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCWJvb2wgaW5pdDsKKwllbnVtIGhk
bWlfY29sb3JzcGFjZSBjc3A7CisJYm9vbCBhdWRpb19lbmFibGU7CisJYm9vbCBvdXRwdXQ7CisJ
c3RydWN0IGhkbWlfYXVkaW9fcGFyYW0gYXVkX3BhcmFtOworfTsKKworc3RhdGljIGlubGluZSBz
dHJ1Y3QgbXRrX2hkbWkgKmhkbWlfY3R4X2Zyb21fYnJpZGdlKHN0cnVjdCBkcm1fYnJpZGdlICpi
KQoreworCXJldHVybiBjb250YWluZXJfb2YoYiwgc3RydWN0IG10a19oZG1pLCBicmlkZ2UpOwor
fQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfaGRtaSAqaGRtaV9jdHhfZnJvbV9jb25uKHN0
cnVjdCBkcm1fY29ubmVjdG9yICpjKQoreworCXJldHVybiBjb250YWluZXJfb2YoYywgc3RydWN0
IG10a19oZG1pLCBjb25uKTsKK30KKworaW50IG10a19oZG1pX291dHB1dF9pbml0KHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSk7CitpbnQgbXRrX2hkbWlfaHBkX2hpZ2goc3RydWN0IG10a19oZG1pICpo
ZG1pKTsKK2ludCBtdGtfaGRtaV9vdXRwdXRfc2V0X2Rpc3BsYXlfbW9kZShzdHJ1Y3QgbXRrX2hk
bWkgKmhkbWksCisJCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7Cit2b2lk
IG10a19oZG1pX3Bvd2VyX29uKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1p
X3Bvd2VyX29mZihzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOworI2lmIGRlZmluZWQoQ09ORklHX0RF
QlVHX0ZTKQoraW50IG10a19kcm1faGRtaV9kZWJ1Z2ZzX2luaXQoc3RydWN0IG10a19oZG1pICpo
ZG1pKTsKK3ZvaWQgbXRrX2RybV9oZG1pX2RlYnVnZnNfZXhpdChzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWkpOworI2Vsc2UKK2ludCBtdGtfZHJtX2hkbWlfZGVidWdmc19pbml0KHN0cnVjdCBtdGtfaGRt
aSAqaGRtaSkKK3sKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtdGtfZHJtX2hkbWlfZGVidWdmc19l
eGl0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfREVCVUdf
RlMgKi8KKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2NlY19kcml2ZXI7Citl
eHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9kZGNfZHJpdmVyOworZXh0ZXJu
IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2hkbWlfcGh5X2RyaXZlcjsKKyNlbmRpZiAvKiBf
TVRLX0hETUlfQ1RSTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2hkbWlfZGRjX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2Rk
Y19kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmU1NDg3Ci0tLSAv
ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2RkY19kcnYu
YwpAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJ
bmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRo
aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxp
bnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4
L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5o
PgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5j
bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+Cisj
aW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8
bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUg
PGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNkZWZpbmUgU0lGMV9DTE9LCQkoMjg4KQorI2RlZmlu
ZSBERENfRERDTUNUTDAJCSgweDApCisjZGVmaW5lIEREQ01fT0RSQUlOCQkJQklUKDMxKQorI2Rl
ZmluZSBERENNX0NMS19ESVZfT0ZGU0VUCQkoMTYpCisjZGVmaW5lIEREQ01fQ0xLX0RJVl9NQVNL
CQkoMHhmZmYgPDwgMTYpCisjZGVmaW5lIEREQ01fQ1NfU1RBVFVTCQkJQklUKDQpCisjZGVmaW5l
IEREQ01fU0NMX1NUQVRFCQkJQklUKDMpCisjZGVmaW5lIEREQ01fU0RBX1NUQVRFCQkJQklUKDIp
CisjZGVmaW5lIEREQ01fU00wRU4JCQlCSVQoMSkKKyNkZWZpbmUgRERDTV9TQ0xfU1RSRUNICQkJ
QklUKDApCisjZGVmaW5lIEREQ19ERENNQ1RMMQkJKDB4NCkKKyNkZWZpbmUgRERDTV9BQ0tfT0ZG
U0VUCQkJKDE2KQorI2RlZmluZSBERENNX0FDS19NQVNLCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5l
IEREQ01fUEdMRU5fT0ZGU0VUCQkoOCkKKyNkZWZpbmUgRERDTV9QR0xFTl9NQVNLCQkJKDB4NyA8
PCA4KQorI2RlZmluZSBERENNX1NJRl9NT0RFX09GRlNFVAkJKDQpCisjZGVmaW5lIEREQ01fU0lG
X01PREVfTUFTSwkJKDB4NyA8PCA0KQorI2RlZmluZSBERENNX1NUQVJUCQkJKDB4MSkKKyNkZWZp
bmUgRERDTV9XUklURV9EQVRBCQkJKDB4MikKKyNkZWZpbmUgRERDTV9TVE9QCQkJKDB4MykKKyNk
ZWZpbmUgRERDTV9SRUFEX0RBVEFfTk9fQUNLCQkoMHg0KQorI2RlZmluZSBERENNX1JFQURfREFU
QV9BQ0sJCSgweDUpCisjZGVmaW5lIEREQ01fVFJJCQkJQklUKDApCisjZGVmaW5lIEREQ19ERENN
RDAJCSgweDgpCisjZGVmaW5lIEREQ01fREFUQTMJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUgRERD
TV9EQVRBMgkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBERENNX0RBVEExCQkJKDB4ZmYgPDwgOCkK
KyNkZWZpbmUgRERDTV9EQVRBMAkJCSgweGZmIDw8IDApCisjZGVmaW5lIEREQ19ERENNRDEJCSgw
eGMpCisjZGVmaW5lIEREQ01fREFUQTcJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUgRERDTV9EQVRB
NgkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBERENNX0RBVEE1CQkJKDB4ZmYgPDwgOCkKKyNkZWZp
bmUgRERDTV9EQVRBNAkJCSgweGZmIDw8IDApCisKK3N0cnVjdCBtdGtfaGRtaV9pMmMgeworCXN0
cnVjdCBpMmNfYWRhcHRlciBhZGFwOworCXN0cnVjdCBjbGsgKmNsazsKKwl2b2lkIF9faW9tZW0g
KnJlZ3M7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgc2lmX3NldF9iaXQoc3RydWN0IG10a19o
ZG1pX2kyYyAqaTJjLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJICAgICAgIHVuc2lnbmVkIGlu
dCB2YWwpCit7CisJd3JpdGVsKHJlYWRsKGkyYy0+cmVncyArIG9mZnNldCkgfCB2YWwsIGkyYy0+
cmVncyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWZfY2xyX2JpdChzdHJ1
Y3QgbXRrX2hkbWlfaTJjICppMmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkgICAgICAgdW5z
aWduZWQgaW50IHZhbCkKK3sKKwl3cml0ZWwocmVhZGwoaTJjLT5yZWdzICsgb2Zmc2V0KSAmIH52
YWwsIGkyYy0+cmVncyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaWZfYml0
X2lzX3NldChzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJ
CQkJICB1bnNpZ25lZCBpbnQgdmFsKQoreworCXJldHVybiAocmVhZGwoaTJjLT5yZWdzICsgb2Zm
c2V0KSAmIHZhbCkgPT0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2lmX3dyaXRlX21h
c2soc3RydWN0IG10a19oZG1pX2kyYyAqaTJjLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJCSAg
dW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCBzaGlmdCwKKwkJCQkgIHVuc2lnbmVkIGlu
dCB2YWwpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCXRtcCA9IHJlYWRsKGkyYy0+cmVncyAr
IG9mZnNldCk7CisJdG1wICY9IH5tYXNrOworCXRtcCB8PSAodmFsIDw8IHNoaWZ0KSAmIG1hc2s7
CisJd3JpdGVsKHRtcCwgaTJjLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1
bnNpZ25lZCBpbnQgc2lmX3JlYWRfbWFzayhzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsCisJCQkJ
CSB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbWFzaywKKwkJCQkJIHVuc2lnbmVk
IGludCBzaGlmdCkKK3sKKwlyZXR1cm4gKHJlYWRsKGkyYy0+cmVncyArIG9mZnNldCkgJiBtYXNr
KSA+PiBzaGlmdDsKK30KKworc3RhdGljIHZvaWQgZGRjbV90cmlnZ2VyX21vZGUoc3RydWN0IG10
a19oZG1pX2kyYyAqaTJjLCBpbnQgbW9kZSkKK3sKKwlpbnQgdGltZW91dCA9IDIwICogMTAwMDsK
KworCXNpZl93cml0ZV9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX1NJRl9NT0RFX01BU0ss
CisJCSAgICAgICBERENNX1NJRl9NT0RFX09GRlNFVCwgbW9kZSk7CisJc2lmX3NldF9iaXQoaTJj
LCBERENfRERDTUNUTDEsIEREQ01fVFJJKTsKKwl3aGlsZSAoc2lmX2JpdF9pc19zZXQoaTJjLCBE
RENfRERDTUNUTDEsIEREQ01fVFJJKSkgeworCQl0aW1lb3V0IC09IDI7CisJCXVkZWxheSgyKTsK
KwkJaWYgKHRpbWVvdXQgPD0gMCkKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBtdGtf
aGRtaV9pMmNfcmVhZF9tc2coc3RydWN0IG10a19oZG1pX2kyYyAqaTJjLCBzdHJ1Y3QgaTJjX21z
ZyAqbXNnKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyYy0+YWRhcC5kZXYucGFyZW50Owor
CXUzMiByZW1haW5fY291bnQsIGFja19jb3VudCwgYWNrX2ZpbmFsLCByZWFkX2NvdW50LCB0ZW1w
X2NvdW50OworCXUzMiBpbmRleCA9IDA7CisJdTMyIGFjazsKKwlpbnQgaTsKKworCWRkY21fdHJp
Z2dlcl9tb2RlKGkyYywgRERDTV9TVEFSVCk7CisJc2lmX3dyaXRlX21hc2soaTJjLCBERENfRERD
TUQwLCAweGZmLCAwLCAobXNnLT5hZGRyIDw8IDEpIHwgMHgwMSk7CisJc2lmX3dyaXRlX21hc2so
aTJjLCBERENfRERDTUNUTDEsIEREQ01fUEdMRU5fTUFTSywgRERDTV9QR0xFTl9PRkZTRVQsCisJ
CSAgICAgICAweDAwKTsKKwlkZGNtX3RyaWdnZXJfbW9kZShpMmMsIEREQ01fV1JJVEVfREFUQSk7
CisJYWNrID0gc2lmX3JlYWRfbWFzayhpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9BQ0tfTUFTSywg
RERDTV9BQ0tfT0ZGU0VUKTsKKwlkZXZfZGJnKGRldiwgImFjayA9IDB4JXhcbiIsIGFjayk7CisJ
aWYgKGFjayAhPSAweDAxKSB7CisJCWRldl9lcnIoZGV2LCAiaTJjIGFjayBlcnIhXG4iKTsKKwkJ
cmV0dXJuIC1FTlhJTzsKKwl9CisKKwlyZW1haW5fY291bnQgPSBtc2ctPmxlbjsKKwlhY2tfY291
bnQgPSAobXNnLT5sZW4gLSAxKSAvIDg7CisJYWNrX2ZpbmFsID0gMDsKKworCXdoaWxlIChyZW1h
aW5fY291bnQgPiAwKSB7CisJCWlmIChhY2tfY291bnQgPiAwKSB7CisJCQlyZWFkX2NvdW50ID0g
ODsKKwkJCWFja19maW5hbCA9IDA7CisJCQlhY2tfY291bnQtLTsKKwkJfSBlbHNlIHsKKwkJCXJl
YWRfY291bnQgPSByZW1haW5fY291bnQ7CisJCQlhY2tfZmluYWwgPSAxOworCQl9CisKKwkJc2lm
X3dyaXRlX21hc2soaTJjLCBERENfRERDTUNUTDEsIEREQ01fUEdMRU5fTUFTSywKKwkJCSAgICAg
ICBERENNX1BHTEVOX09GRlNFVCwgcmVhZF9jb3VudCAtIDEpOworCQlkZGNtX3RyaWdnZXJfbW9k
ZShpMmMsIChhY2tfZmluYWwgPT0gMSkgPworCQkJCSAgRERDTV9SRUFEX0RBVEFfTk9fQUNLIDoK
KwkJCQkgIEREQ01fUkVBRF9EQVRBX0FDSyk7CisKKwkJYWNrID0gc2lmX3JlYWRfbWFzayhpMmMs
IEREQ19ERENNQ1RMMSwgRERDTV9BQ0tfTUFTSywKKwkJCQkgICAgRERDTV9BQ0tfT0ZGU0VUKTsK
KwkJdGVtcF9jb3VudCA9IDA7CisJCXdoaWxlICgoKGFjayAmICgxIDw8IHRlbXBfY291bnQpKSAh
PSAwKSAmJiAodGVtcF9jb3VudCA8IDgpKQorCQkJdGVtcF9jb3VudCsrOworCQlpZiAoKChhY2tf
ZmluYWwgPT0gMSkgJiYgKHRlbXBfY291bnQgIT0gKHJlYWRfY291bnQgLSAxKSkpIHx8CisJCSAg
ICAoKGFja19maW5hbCA9PSAwKSAmJiAodGVtcF9jb3VudCAhPSByZWFkX2NvdW50KSkpIHsKKwkJ
CWRldl9lcnIoZGV2LCAiQWRkcmVzcyBOQUNLISBBQ0soMHgleClcbiIsIGFjayk7CisJCQlicmVh
azsKKwkJfQorCisJCWZvciAoaSA9IHJlYWRfY291bnQ7IGkgPj0gMTsgaS0tKSB7CisJCQlpbnQg
c2hpZnQ7CisJCQlpbnQgb2Zmc2V0OworCisJCQlpZiAoaSA+IDQpIHsKKwkJCQlvZmZzZXQgPSBE
RENfRERDTUQxOworCQkJCXNoaWZ0ID0gKGkgLSA1KSAqIDg7CisJCQl9IGVsc2UgeworCQkJCW9m
ZnNldCA9IEREQ19ERENNRDA7CisJCQkJc2hpZnQgPSAoaSAtIDEpICogODsKKwkJCX0KKworCQkJ
bXNnLT5idWZbaW5kZXggKyBpIC0gMV0gPSBzaWZfcmVhZF9tYXNrKGkyYywgb2Zmc2V0LAorCQkJ
CQkJCQkweGZmIDw8IHNoaWZ0LAorCQkJCQkJCQlzaGlmdCk7CisJCX0KKworCQlyZW1haW5fY291
bnQgLT0gcmVhZF9jb3VudDsKKwkJaW5kZXggKz0gcmVhZF9jb3VudDsKKwl9CisKKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9pMmNfd3JpdGVfbXNnKHN0cnVjdCBtdGtfaGRt
aV9pMmMgKmkyYywgc3RydWN0IGkyY19tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYg
PSBpMmMtPmFkYXAuZGV2LnBhcmVudDsKKwl1MzIgYWNrOworCisJZGRjbV90cmlnZ2VyX21vZGUo
aTJjLCBERENNX1NUQVJUKTsKKwlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19ERENNRDAsIEREQ01f
REFUQTAsIDAsIG1zZy0+YWRkciA8PCAxKTsKKwlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19ERENN
RDAsIEREQ01fREFUQTEsIDgsIG1zZy0+YnVmWzBdKTsKKwlzaWZfd3JpdGVfbWFzayhpMmMsIERE
Q19ERENNQ1RMMSwgRERDTV9QR0xFTl9NQVNLLCBERENNX1BHTEVOX09GRlNFVCwKKwkJICAgICAg
IDB4MSk7CisJZGRjbV90cmlnZ2VyX21vZGUoaTJjLCBERENNX1dSSVRFX0RBVEEpOworCisJYWNr
ID0gc2lmX3JlYWRfbWFzayhpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9BQ0tfTUFTSywgRERDTV9B
Q0tfT0ZGU0VUKTsKKwlkZXZfZGJnKGRldiwgImFjayA9ICVkXG4iLCBhY2spOworCisJaWYgKGFj
ayAhPSAweDAzKSB7CisJCWRldl9lcnIoZGV2LCAiaTJjIGFjayBlcnIhXG4iKTsKKwkJcmV0dXJu
IC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfaTJjX3hm
ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICBzdHJ1Y3QgaTJjX21zZyAq
bXNncywgaW50IG51bSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMgPSBhZGFwdGVyLT5h
bGdvX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gYWRhcHRlci0+ZGV2LnBhcmVudDsKKwlp
bnQgcmV0OworCWludCBpOworCisJaWYgKCFpMmMpIHsKKwkJZGV2X2VycihkZXYsICJpbnZhbGlk
IGFyZ3VtZW50c1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNpZl9zZXRfYml0KGky
YywgRERDX0REQ01DVEwwLCBERENNX1NDTF9TVFJFQ0gpOworCXNpZl9zZXRfYml0KGkyYywgRERD
X0REQ01DVEwwLCBERENNX1NNMEVOKTsKKwlzaWZfY2xyX2JpdChpMmMsIEREQ19ERENNQ1RMMCwg
RERDTV9PRFJBSU4pOworCisJaWYgKHNpZl9iaXRfaXNfc2V0KGkyYywgRERDX0REQ01DVEwxLCBE
RENNX1RSSSkpIHsKKwkJZGV2X2VycihkZXYsICJkZGMgbGluZSBpcyBidXN5IVxuIik7CisJCXJl
dHVybiAtRUJVU1k7CisJfQorCisJc2lmX3dyaXRlX21hc2soaTJjLCBERENfRERDTUNUTDAsIERE
Q01fQ0xLX0RJVl9NQVNLLAorCQkgICAgICAgRERDTV9DTEtfRElWX09GRlNFVCwgU0lGMV9DTE9L
KTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlzdHJ1Y3QgaTJjX21zZyAqbXNn
ID0gJm1zZ3NbaV07CisKKwkJZGV2X2RiZyhkZXYsICJpMmMgbXNnLCBhZHI6MHgleCwgZmxhZ3M6
JWQsIGxlbiA6MHgleFxuIiwKKwkJCW1zZy0+YWRkciwgbXNnLT5mbGFncywgbXNnLT5sZW4pOwor
CisJCWlmIChtc2ctPmZsYWdzICYgSTJDX01fUkQpCisJCQlyZXQgPSBtdGtfaGRtaV9pMmNfcmVh
ZF9tc2coaTJjLCBtc2cpOworCQllbHNlCisJCQlyZXQgPSBtdGtfaGRtaV9pMmNfd3JpdGVfbXNn
KGkyYywgbXNnKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIHhmZXJfZW5kOworCX0KKworCWRk
Y21fdHJpZ2dlcl9tb2RlKGkyYywgRERDTV9TVE9QKTsKKworCXJldHVybiBpOworCit4ZmVyX2Vu
ZDoKKwlkZGNtX3RyaWdnZXJfbW9kZShpMmMsIEREQ01fU1RPUCk7CisJZGV2X2VycihkZXYsICJk
ZGMgZmFpbGVkIVxuIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiBtdGtfaGRtaV9p
MmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5D
X0kyQyB8IEkyQ19GVU5DX1NNQlVTX0VNVUw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJj
X2FsZ29yaXRobSBtdGtfaGRtaV9pMmNfYWxnb3JpdGhtID0geworCS5tYXN0ZXJfeGZlciA9IG10
a19oZG1pX2kyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gbXRrX2hkbWlfaTJjX2Z1bmMsCit9
OworCitzdGF0aWMgaW50IG10a19oZG1pX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl
ICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10
a19oZG1pX2kyYyAqaTJjOworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCWludCByZXQ7CisKKwlp
MmMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IG10a19oZG1pX2kyYyksIEdGUF9L
RVJORUwpOworCWlmICghaTJjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyYy0+Y2xrID0gZGV2
bV9jbGtfZ2V0KGRldiwgImRkYy1pMmMiKTsKKwlpZiAoSVNfRVJSKGkyYy0+Y2xrKSkgeworCQlk
ZXZfZXJyKGRldiwgImdldCBkZGNfY2xrIGZhaWxlZCA6ICVwICxcbiIsIGkyYy0+Y2xrKTsKKwkJ
cmV0dXJuIFBUUl9FUlIoaTJjLT5jbGspOworCX0KKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNv
dXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaTJjLT5yZWdzID0gZGV2bV9pb3JlbWFw
X3Jlc291cmNlKCZwZGV2LT5kZXYsIG1lbSk7CisJaWYgKElTX0VSUihpMmMtPnJlZ3MpKSB7CisJ
CWRldl9lcnIoZGV2LCAiZ2V0IG1lbW9yeSBzb3VyY2UgZmFpbCFcbiIpOworCQlyZXR1cm4gUFRS
X0VSUihpMmMtPnJlZ3MpOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpMmMtPmNs
ayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImVuYWJsZSBkZGMgY2xrIGZhaWxlZCFc
biIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXN0cmxjcHkoaTJjLT5hZGFwLm5hbWUsICJtZWRp
YXRlay1oZG1pLWkyYyIsIHNpemVvZihpMmMtPmFkYXAubmFtZSkpOworCWkyYy0+YWRhcC5vd25l
ciA9IFRISVNfTU9EVUxFOworCWkyYy0+YWRhcC5hbGdvID0gJm10a19oZG1pX2kyY19hbGdvcml0
aG07CisJaTJjLT5hZGFwLnJldHJpZXMgPSAzOworCWkyYy0+YWRhcC5kZXYub2Zfbm9kZSA9IGRl
di0+b2Zfbm9kZTsKKwlpMmMtPmFkYXAuYWxnb19kYXRhID0gaTJjOworCWkyYy0+YWRhcC5kZXYu
cGFyZW50ID0gJnBkZXYtPmRldjsKKworCXJldCA9IGkyY19hZGRfYWRhcHRlcigmaTJjLT5hZGFw
KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZGQgYnVzIHRv
IGkyYyBjb3JlXG4iKTsKKwkJZ290byBlcnJfY2xrX2Rpc2FibGU7CisJfQorCisJcGxhdGZvcm1f
c2V0X2RydmRhdGEocGRldiwgaTJjKTsKKworCWRldl9kYmcoZGV2LCAiaTJjLT5hZGFwOiAlcFxu
IiwgJmkyYy0+YWRhcCk7CisJZGV2X2RiZyhkZXYsICJpMmMtPmNsazogJXBcbiIsIGkyYy0+Y2xr
KTsKKwlkZXZfZGJnKGRldiwgInBoeXNpY2FsIGFkcjogMHglbGx4LCBlbmQ6IDB4JWxseFxuIiwg
bWVtLT5zdGFydCwKKwkJbWVtLT5lbmQpOworCisJcmV0dXJuIDA7CisKK2Vycl9jbGtfZGlzYWJs
ZToKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaTJjLT5jbGspOworCXJldHVybiByZXQ7Cit9CisK
K3N0YXRpYyBpbnQgbXRrX2hkbWlfaTJjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw
ZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRh
KHBkZXYpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGkyYy0+Y2xrKTsKKwlpMmNfZGVsX2Fk
YXB0ZXIoJmkyYy0+YWRhcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj
dCBvZl9kZXZpY2VfaWQgbXRrX2hkbWlfaTJjX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9
ICJtZWRpYXRlayxtdDgxNzMtaGRtaS1kZGMiLCB9LAorCXt9LAorfTsKKworc3RydWN0IHBsYXRm
b3JtX2RyaXZlciBtdGtfaGRtaV9kZGNfZHJpdmVyID0geworCS5wcm9iZSA9IG10a19oZG1pX2ky
Y19wcm9iZSwKKwkucmVtb3ZlID0gbXRrX2hkbWlfaTJjX3JlbW92ZSwKKwkuZHJpdmVyID0gewor
CQkubmFtZSA9ICJtZWRpYXRlay1oZG1pLWRkYyIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19o
ZG1pX2kyY19tYXRjaCwKKwl9LAorfTsKKworTU9EVUxFX0FVVEhPUigiSmllIFFpdSA8amllLnFp
dUBtZWRpYXRlay5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhVGVrIEhETUkgaTJj
IERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2h3LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2hkbWlfaHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWM3
ZmZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1p
X2h3LmMKQEAgLTAsMCArMSw2NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFU
ZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisg
KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRl
ICJtdGtfaGRtaV9ody5oIgorI2luY2x1ZGUgIm10a19oZG1pX3JlZ3MuaCIKKyNpbmNsdWRlICJt
dGtfaGRtaS5oIgorCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVs
YXkuaD4KKyNpbmNsdWRlIDxsaW51eC9oZG1pLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNp
bmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworc3RhdGljIHUzMiBtdGtfaGRtaV9yZWFkKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGwoaGRtaS0+cmVn
cyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3dyaXRlKHN0cnVjdCBtdGtf
aGRtaSAqaGRtaSwgdTMyIG9mZnNldCwgdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBoZG1pLT5y
ZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfbWFzayhzdHJ1Y3QgbXRr
X2hkbWkgKmhkbWksIHUzMiBvZmZzZXQsIHUzMiB2YWwsIHUzMiBtYXNrKQoreworCXUzMiB0bXAg
PSBtdGtfaGRtaV9yZWFkKGhkbWksIG9mZnNldCkgJiB+bWFzazsKKworCXRtcCB8PSAodmFsICYg
bWFzayk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgb2Zmc2V0LCB0bXApOworfQorCisjZGVmaW5l
IE5DVFNfQllURVMgICAgICAgICAgMHgwNworCit2b2lkIG10a19oZG1pX2h3X3ZpZF9ibGFjayhz
dHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkgICBib29sIGJsYWNrKQoreworCW10a19oZG1pX21h
c2soaGRtaSwgVklERU9fQ0ZHXzQsIGJsYWNrID8gR0VOX1JHQiA6IE5PUk1BTF9QQVRILAorCQkg
ICAgICBWSURFT19TT1VSQ0VfU0VMKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19tYWtlX3JlZ193
cml0YWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCXJlZ21hcF91
cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNf
Q0ZHMjAsCisJCQkgICBIRE1JX1BDTEtfRlJFRV9SVU4sIGVuYWJsZSA/IEhETUlfUENMS19GUkVF
X1JVTiA6IDApOworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5z
eXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkgICBIRE1JX09OIHwgQU5MR19PTiwgZW5h
YmxlID8gKEhETUlfT04gfCBBTkxHX09OKSA6IDApOworfQorCit2b2lkIG10a19oZG1pX2h3XzFw
NF92ZXJzaW9uX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQorewor
CXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsg
SERNSV9TWVNfQ0ZHMjAsCisJCQkgICBIRE1JMlAwX0VOLCBlbmFibGUgPyAwIDogSERNSTJQMF9F
Tik7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX211dGUoc3RydWN0IG10a19oZG1pICpoZG1p
LCBib29sIG11dGUpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQVVESU9fQ0ZHLCBtdXRl
ID8gQVVESU9fWkVSTyA6IDAsIEFVRElPX1pFUk8pOworfQorCit2b2lkIG10a19oZG1pX2h3X3Jl
c2V0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+
c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lTX0NGRzFDLAorCQkJICAgSERN
SV9SU1QsIEhETUlfUlNUKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+c3lzX3JlZ21hcCwg
aGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lTX0NGRzFDLAorCQkJICAgSERNSV9SU1QsIDApOwor
CW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzMsIDAsIENGRzNfQ09OVFJPTF9QQUNLRVRfREVM
QVkpOworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zm
c2V0ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkgICBBTkxHX09OLCBBTkxHX09OKTsKK30KKwordm9p
ZCBtdGtfaGRtaV9od19lbmFibGVfbm90aWNlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBl
bmFibGVfbm90aWNlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzIsIGVuYWJsZV9u
b3RpY2UgPyBDRkcyX05PVElDRV9FTiA6IDAsCisJCSAgICAgIENGRzJfTk9USUNFX0VOKTsKK30K
Kwordm9pZCBtdGtfaGRtaV9od193cml0ZV9pbnRfbWFzayhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWks
IHUzMiBpbnRfbWFzaykKK3sKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSU5UX01BU0ssIGlu
dF9tYXNrKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19lbmFibGVfZHZpX21vZGUoc3RydWN0IG10
a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9D
RkcxLCBlbmFibGUgPyBDRkcxX0RWSSA6IDAsIENGRzFfRFZJKTsKK30KKwordm9pZCBtdGtfaGRt
aV9od19zZW5kX2luZm9fZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pLCB1OCAqYnVmZmVyLCB1
OCBsZW4pCit7CisJdTMyIGN0cmxfcmVnID0gR1JMX0NUUkw7CisJaW50IGk7CisJdTggKmZyYW1l
X2RhdGE7CisJdTggZnJhbWVfdHlwZTsKKwl1OCBmcmFtZV92ZXI7CisJdTggZnJhbWVfbGVuOwor
CXU4IGNoZWNrc3VtOworCWludCBjdHJsX2ZyYW1lX2VuID0gMDsKKworCWZyYW1lX3R5cGUgPSAq
YnVmZmVyOworCWJ1ZmZlciArPSAxOworCWZyYW1lX3ZlciA9ICpidWZmZXI7CisJYnVmZmVyICs9
IDE7CisJZnJhbWVfbGVuID0gKmJ1ZmZlcjsKKwlidWZmZXIgKz0gMTsKKwljaGVja3N1bSA9ICpi
dWZmZXI7CisJYnVmZmVyICs9IDE7CisJZnJhbWVfZGF0YSA9IGJ1ZmZlcjsKKworCWRldl9kYmco
aGRtaS0+ZGV2LAorCQkiZnJhbWVfdHlwZToweCV4LGZyYW1lX3ZlcjoweCV4LGZyYW1lX2xlbjow
eCV4LGNoZWNrc3VtOjB4JXhcbiIsCisJCWZyYW1lX3R5cGUsIGZyYW1lX3ZlciwgZnJhbWVfbGVu
LCBjaGVja3N1bSk7CisKKwlzd2l0Y2ggKGZyYW1lX3R5cGUpIHsKKwljYXNlIEhETUlfSU5GT0ZS
QU1FX1RZUEVfQVZJOgorCQljdHJsX2ZyYW1lX2VuID0gQ1RSTF9BVklfRU47CisJCWN0cmxfcmVn
ID0gR1JMX0NUUkw7CisJCWJyZWFrOworCWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9TUEQ6CisJ
CWN0cmxfZnJhbWVfZW4gPSBDVFJMX1NQRF9FTjsKKwkJY3RybF9yZWcgPSBHUkxfQ1RSTDsKKwkJ
YnJlYWs7CisJY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX0FVRElPOgorCQljdHJsX2ZyYW1lX2Vu
ID0gQ1RSTF9BVURJT19FTjsKKwkJY3RybF9yZWcgPSBHUkxfQ1RSTDsKKwkJYnJlYWs7CisJY2Fz
ZSBIRE1JX0lORk9GUkFNRV9UWVBFX1ZFTkRPUjoKKwkJY3RybF9mcmFtZV9lbiA9IFZTX0VOOwor
CQljdHJsX3JlZyA9IEdSTF9BQ1BfSVNSQ19DVFJMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQli
cmVhazsKKwl9CisJbXRrX2hkbWlfbWFzayhoZG1pLCBjdHJsX3JlZywgMCwgY3RybF9mcmFtZV9l
bik7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lORk9GUk1fVFlQRSwgZnJhbWVfdHlwZSk7
CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lORk9GUk1fVkVSLCBmcmFtZV92ZXIpOworCW10
a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JTkZPRlJNX0xORywgZnJhbWVfbGVuKTsKKworCW10a19o
ZG1pX3dyaXRlKGhkbWksIEdSTF9JRk1fUE9SVCwgY2hlY2tzdW0pOworCWZvciAoaSA9IDA7IGkg
PCBmcmFtZV9sZW47IGkrKykKKwkJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lGTV9QT1JULCBm
cmFtZV9kYXRhW2ldKTsKKworCW10a19oZG1pX21hc2soaGRtaSwgY3RybF9yZWcsIGN0cmxfZnJh
bWVfZW4sIGN0cmxfZnJhbWVfZW4pOworfQorCit2b2lkIG10a19oZG1pX2h3X3NlbmRfYXVkX3Bh
Y2tldChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX21h
c2soaGRtaSwgR1JMX1NISUZUX1IyLCBlbmFibGUgPyAwIDogQVVESU9fUEFDS0VUX09GRiwKKwkJ
ICAgICAgQVVESU9fUEFDS0VUX09GRik7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfY29uZmlnX3N5
cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5
c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIEhETUlf
T1VUX0ZJRk9fRU4gfCBNSExfTU9ERV9PTiwgMCk7CisJbWRlbGF5KDIpOworCXJlZ21hcF91cGRh
dGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZH
MjAsCisJCQkgICBIRE1JX09VVF9GSUZPX0VOIHwgTUhMX01PREVfT04sIEhETUlfT1VUX0ZJRk9f
RU4pOworfQorCit2b2lkIG10a19oZG1pX2h3X3NldF9kZWVwX2NvbG9yX21vZGUoc3RydWN0IG10
a19oZG1pICpoZG1pKQoreworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBo
ZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMjAsCisJCQkgICBERUVQX0NPTE9SX01PREVf
TUFTSyB8IERFRVBfQ09MT1JfRU4sIENPTE9SXzhCSVRfTU9ERSk7Cit9CisKK3ZvaWQgbXRrX2hk
bWlfaHdfc2VuZF9hdl9tdXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwltdGtfaGRtaV9t
YXNrKGhkbWksIEdSTF9DRkc0LCAwLCBDVFJMX0FWTVVURSk7CisJbWRlbGF5KDIpOworCW10a19o
ZG1pX21hc2soaGRtaSwgR1JMX0NGRzQsIENUUkxfQVZNVVRFLCBDVFJMX0FWTVVURSk7Cit9CisK
K3ZvaWQgbXRrX2hkbWlfaHdfc2VuZF9hdl91bm11dGUoc3RydWN0IG10a19oZG1pICpoZG1pKQor
eworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzQsIENGRzRfQVZfVU5NVVRFX0VOLAorCQkg
ICAgICBDRkc0X0FWX1VOTVVURV9FTiB8IENGRzRfQVZfVU5NVVRFX1NFVCk7CisJbWRlbGF5KDIp
OworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzQsIENGRzRfQVZfVU5NVVRFX1NFVCwKKwkJ
ICAgICAgQ0ZHNF9BVl9VTk1VVEVfRU4gfCBDRkc0X0FWX1VOTVVURV9TRVQpOworfQorCit2b2lk
IG10a19oZG1pX2h3X25jdHNfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBvbikK
K3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DVFNfQ1RSTCwgb24gPyAwIDogQ1RTX0NUUkxf
U09GVCwKKwkJICAgICAgQ1RTX0NUUkxfU09GVCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfbmN0
c19hdXRvX3dyaXRlX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQor
eworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NUU19DVFJMLCBlbmFibGUgPyBOQ1RTX1dSSV9B
TllUSU1FIDogMCwKKwkJICAgICAgTkNUU19XUklfQU5ZVElNRSk7Cit9CisKK3ZvaWQgbXRrX2hk
bWlfaHdfbXNpY19zZXR0aW5nKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCSAgICAgIHN0cnVj
dCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NG
RzQsIDAsIENGR19NSExfTU9ERSk7CisKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFH
X0lOVEVSTEFDRSAmJgorCSAgICBtb2RlLT5jbG9jayA9PSA3NDI1MCAmJgorCSAgICBtb2RlLT52
ZGlzcGxheSA9PSAxMDgwKQorCQltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkcyLCAwLCBNSExf
REVfU0VMKTsKKwllbHNlCisJCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzIsIE1ITF9ERV9T
RUwsIE1ITF9ERV9TRUwpOworfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9z
d2FwKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgICBlbnVtIGhkbWlfYXVkX2NoYW5u
ZWxfc3dhcF90eXBlIHN3YXApCit7CisJdTggc3dhcF9iaXQ7CisKKwlzd2l0Y2ggKHN3YXApIHsK
KwljYXNlIEhETUlfQVVEX1NXQVBfTFI6CisJCXN3YXBfYml0ID0gTFJfU1dBUDsKKwkJYnJlYWs7
CisJY2FzZSBIRE1JX0FVRF9TV0FQX0xGRV9DQzoKKwkJc3dhcF9iaXQgPSBMRkVfQ0NfU1dBUDsK
KwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRF9TV0FQX0xTUlM6CisJCXN3YXBfYml0ID0gTFNSU19T
V0FQOworCQlicmVhazsKKwljYXNlIEhETUlfQVVEX1NXQVBfUkxTX1JSUzoKKwkJc3dhcF9iaXQg
PSBSTFNfUlJTX1NXQVA7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfU1dBUF9MUl9TVEFUVVM6
CisJCXN3YXBfYml0ID0gTFJfU1RBVFVTX1NXQVA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN3
YXBfYml0ID0gTEZFX0NDX1NXQVA7CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV9tYXNrKGhkbWks
IEdSTF9DSF9TV0FQLCBzd2FwX2JpdCwgMHhmZik7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVk
X3Jhd19kYXRhX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQorewor
CW10a19oZG1pX21hc2soaGRtaSwgR1JMX01JWF9DVFJMLCBlbmFibGUgPyBNSVhfQ1RSTF9GTEFU
IDogMCwKKwkJICAgICAgTUlYX0NUUkxfRkxBVCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVk
X3NldF9iaXRfbnVtKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgZW51bSBoZG1pX2F1ZGlv
X3NhbXBsZV9zaXplIGJpdF9udW0pCit7CisJdTMyIHZhbCA9IDA7CisKKwlpZiAoYml0X251bSA9
PSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzE2KQorCQl2YWwgPSBBT1VUXzE2QklUOworCWVsc2Ug
aWYgKGJpdF9udW0gPT0gSERNSV9BVURJT19TQU1QTEVfU0laRV8yMCkKKwkJdmFsID0gQU9VVF8y
MEJJVDsKKwllbHNlIGlmIChiaXRfbnVtID09IEhETUlfQVVESU9fU0FNUExFX1NJWkVfMjQpCisJ
CXZhbCA9IEFPVVRfMjRCSVQ7CisKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9BT1VUX0JOVU1f
U0VMLCB2YWwsIDB4MDMpOworfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2ZtdChz
dHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJIGVudW0gaGRtaV9hdWRfaTJzX2ZtdCBpMnNfZm10
KQoreworCXUzMiB2YWwgPSAwOworCisJdmFsID0gbXRrX2hkbWlfcmVhZChoZG1pLCBHUkxfQ0ZH
MCk7CisJdmFsICY9IH4weDMzOworCisJc3dpdGNoIChpMnNfZm10KSB7CisJY2FzZSBIRE1JX0ky
U19NT0RFX1JKVF8yNEJJVDoKKwkJdmFsIHw9IChDRkcwX0kyU19NT0RFX1JUSiB8IENGRzBfSTJT
X01PREVfMjRCSVQpOworCQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfUkpUXzE2QklUOgor
CQl2YWwgfD0gKENGRzBfSTJTX01PREVfUlRKIHwgQ0ZHMF9JMlNfTU9ERV8xNkJJVCk7CisJCWJy
ZWFrOworCWNhc2UgSERNSV9JMlNfTU9ERV9MSlRfMjRCSVQ6CisJCXZhbCB8PSAoQ0ZHMF9JMlNf
TU9ERV9MVEogfCBDRkcwX0kyU19NT0RFXzI0QklUKTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0ky
U19NT0RFX0xKVF8xNkJJVDoKKwkJdmFsIHw9IChDRkcwX0kyU19NT0RFX0xUSiB8IENGRzBfSTJT
X01PREVfMTZCSVQpOworCQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfSTJTXzI0QklUOgor
CQl2YWwgfD0gKENGRzBfSTJTX01PREVfSTJTIHwgQ0ZHMF9JMlNfTU9ERV8yNEJJVCk7CisJCWJy
ZWFrOworCWNhc2UgSERNSV9JMlNfTU9ERV9JMlNfMTZCSVQ6CisJCXZhbCB8PSAoQ0ZHMF9JMlNf
TU9ERV9JMlMgfCBDRkcwX0kyU19NT0RFXzE2QklUKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ
YnJlYWs7CisJfQorCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9DRkcwLCB2YWwpOworfQorCit2
b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfaGlnaF9iaXRyYXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRt
aSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQU9VVF9CTlVNX1NF
TCwKKwkJICAgICAgZW5hYmxlID8gSElHSF9CSVRfUkFURV9QQUNLRVRfQUxJR04gOiAwLAorCQkg
ICAgICBISUdIX0JJVF9SQVRFX1BBQ0tFVF9BTElHTik7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBH
UkxfQVVESU9fQ0ZHLCBlbmFibGUgPyBISUdIX0JJVF9SQVRFIDogMCwKKwkJICAgICAgSElHSF9C
SVRfUkFURSk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfcGh5X2F1ZF9kc3Rfbm9ybWFsX2RvdWJsZV9l
bmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQkgICAgICAgYm9vbCBlbmFibGUpCit7
CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQVVESU9fQ0ZHLCBlbmFibGUgPyBEU1RfTk9STUFM
X0RPVUJMRSA6IDAsCisJCSAgICAgIERTVF9OT1JNQUxfRE9VQkxFKTsKK30KKwordm9pZCBtdGtf
aGRtaV9od19hdWRfZHN0X2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxl
KQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0FVRElPX0NGRywgZW5hYmxlID8gU0FDRF9E
U1QgOiAwLCBTQUNEX0RTVCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX2RzZF9lbmFibGUo
c3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhk
bWksIEdSTF9BVURJT19DRkcsIGVuYWJsZSA/IFNBQ0RfU0VMIDogMCwgU0FDRF9TRUwpOworfQor
Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2NoYW5fbnVtKHN0cnVjdCBtdGtfaGRtaSAq
aGRtaSwKKwkJCQkgICAgICBlbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUs
CisJCQkJICAgICAgdTggY2hhbm5lbF9jb3VudCkKK3sKKwl1OCB2YWxfMSwgdmFsXzIsIHZhbF8z
LCB2YWxfNDsKKworCWlmIChjaGFubmVsX2NvdW50ID09IDIpIHsKKwkJdmFsXzEgPSAweDA0Owor
CQl2YWxfMiA9IDB4NTA7CisJfSBlbHNlIGlmIChjaGFubmVsX2NvdW50ID09IDMgfHwgY2hhbm5l
bF9jb3VudCA9PSA0KSB7CisJCWlmIChjaGFubmVsX2NvdW50ID09IDQgJiYKKwkJICAgIChjaGFu
bmVsX3R5cGUgPT0gSERNSV9BVURfQ0hBTl9UWVBFXzNfMF9MUlMgfHwKKwkJICAgIGNoYW5uZWxf
dHlwZSA9PSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8wKSkgeworCQkJdmFsXzEgPSAweDE0OworCQl9
IGVsc2UgeworCQkJdmFsXzEgPSAweDBjOworCQl9CisJCXZhbF8yID0gMHg1MDsKKwl9IGVsc2Ug
aWYgKGNoYW5uZWxfY291bnQgPT0gNiB8fCBjaGFubmVsX2NvdW50ID09IDUpIHsKKwkJaWYgKGNo
YW5uZWxfY291bnQgPT0gNiAmJgorCQkgICAgY2hhbm5lbF90eXBlICE9IEhETUlfQVVEX0NIQU5f
VFlQRV81XzEgJiYKKwkJICAgIGNoYW5uZWxfdHlwZSAhPSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8x
X0NMUlMpIHsKKwkJCXZhbF8xID0gMHgzYzsKKwkJCXZhbF8yID0gMHg1MDsKKwkJfSBlbHNlIHsK
KwkJCXZhbF8xID0gMHgxYzsKKwkJCXZhbF8yID0gMHg1MDsKKwkJfQorCX0gZWxzZSBpZiAoY2hh
bm5lbF9jb3VudCA9PSA4IHx8IGNoYW5uZWxfY291bnQgPT0gNykgeworCQl2YWxfMSA9IDB4M2M7
CisJCXZhbF8yID0gMHg1MDsKKwl9IGVsc2UgeworCQl2YWxfMSA9IDB4MDQ7CisJCXZhbF8yID0g
MHg1MDsKKwl9CisKKwl2YWxfMyA9IDB4YzY7CisJdmFsXzQgPSAweGZhOworCisJbXRrX2hkbWlf
d3JpdGUoaGRtaSwgR1JMX0NIX1NXMCwgdmFsXzIpOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdS
TF9DSF9TVzEsIHZhbF8zKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfQ0hfU1cyLCB2YWxf
NCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0kyU19VViwgdmFsXzEpOworfQorCit2b2lk
IG10a19oZG1pX2h3X2F1ZF9zZXRfaW5wdXRfdHlwZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJ
CQkJICAgIGVudW0gaGRtaV9hdWRfaW5wdXRfdHlwZSBpbnB1dF90eXBlKQoreworCXUzMiB2YWwg
PSAwOworCisJdmFsID0gbXRrX2hkbWlfcmVhZChoZG1pLCBHUkxfQ0ZHMSk7CisJaWYgKGlucHV0
X3R5cGUgPT0gSERNSV9BVURfSU5QVVRfSTJTICYmCisJICAgICh2YWwgJiBDRkcxX1NQRElGKSA9
PSBDRkcxX1NQRElGKSB7CisJCXZhbCAmPSB+Q0ZHMV9TUERJRjsKKwl9IGVsc2UgaWYgKGlucHV0
X3R5cGUgPT0gSERNSV9BVURfSU5QVVRfU1BESUYgJiYKKwkJKHZhbCAmIENGRzFfU1BESUYpID09
IDApIHsKKwkJdmFsIHw9IENGRzFfU1BESUY7CisJfQorCW10a19oZG1pX3dyaXRlKGhkbWksIEdS
TF9DRkcxLCB2YWwpOworfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9zdGF0
dXMoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQl1OCAqbF9jaGFuX3N0YXR1cywgdTggKnJf
Y2hhbl9zdGF0dXMsCisJCQkJCWVudW0gaGRtaV9hdWRpb19zYW1wbGVfZnJlcXVlbmN5CisJCQkJ
CWF1ZF9oZG1pX2ZzKQoreworCXU4IGxfc3RhdHVzWzVdOworCXU4IHJfc3RhdHVzWzVdOworCXU4
IHZhbCA9IDA7CisKKwlsX3N0YXR1c1swXSA9IGxfY2hhbl9zdGF0dXNbMF07CisJbF9zdGF0dXNb
MV0gPSBsX2NoYW5fc3RhdHVzWzFdOworCWxfc3RhdHVzWzJdID0gbF9jaGFuX3N0YXR1c1syXTsK
KwlyX3N0YXR1c1swXSA9IHJfY2hhbl9zdGF0dXNbMF07CisJcl9zdGF0dXNbMV0gPSByX2NoYW5f
c3RhdHVzWzFdOworCXJfc3RhdHVzWzJdID0gcl9jaGFuX3N0YXR1c1syXTsKKworCWxfc3RhdHVz
WzBdICY9IH4weDAyOworCXJfc3RhdHVzWzBdICY9IH4weDAyOworCisJdmFsID0gbF9jaGFuX3N0
YXR1c1szXSAmIDB4ZjA7CisJc3dpdGNoIChhdWRfaGRtaV9mcykgeworCWNhc2UgSERNSV9BVURJ
T19TQU1QTEVfRlJFUVVFTkNZXzMyMDAwOgorCQl2YWwgfD0gMHgwMzsKKwkJYnJlYWs7CisJY2Fz
ZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfNDQxMDA6CisJCWJyZWFrOworCWNhc2UgSERN
SV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzg4MjAwOgorCQl2YWwgfD0gMHgwODsKKwkJYnJlYWs7
CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfOTYwMDA6CisJCXZhbCB8PSAweDBh
OworCQlicmVhazsKKwljYXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV80ODAwMDoKKwkJ
dmFsIHw9IDB4MDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZhbCB8PSAweDAyOworCQlicmVh
azsKKwl9CisJbF9zdGF0dXNbM10gPSB2YWw7CisJcl9zdGF0dXNbM10gPSB2YWw7CisKKwl2YWwg
PSBsX2NoYW5fc3RhdHVzWzRdOworCXZhbCB8PSAoKH4obF9zdGF0dXNbM10gJiAweDBmKSkgPDwg
NCk7CisJbF9zdGF0dXNbNF0gPSB2YWw7CisJcl9zdGF0dXNbNF0gPSB2YWw7CisKKwl2YWwgPSBs
X3N0YXR1c1swXTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSTJTX0NfU1RBMCwgdmFsKTsK
KwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTF9TVEFUVVNfMCwgdmFsKTsKKworCXZhbCA9IHJf
c3RhdHVzWzBdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9SX1NUQVRVU18wLCB2YWwpOwor
CisJdmFsID0gbF9zdGF0dXNbMV07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0kyU19DX1NU
QTEsIHZhbCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0xfU1RBVFVTXzEsIHZhbCk7CisK
Kwl2YWwgPSByX3N0YXR1c1sxXTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNf
MSwgdmFsKTsKKworCXZhbCA9IGxfc3RhdHVzWzJdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdS
TF9JMlNfQ19TVEEyLCB2YWwpOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9MX1NUQVRVU18y
LCB2YWwpOworCisJdmFsID0gcl9zdGF0dXNbMl07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JM
X1JfU1RBVFVTXzIsIHZhbCk7CisKKwl2YWwgPSBsX3N0YXR1c1szXTsKKwltdGtfaGRtaV93cml0
ZShoZG1pLCBHUkxfSTJTX0NfU1RBMywgdmFsKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxf
TF9TVEFUVVNfMywgdmFsKTsKKworCXZhbCA9IHJfc3RhdHVzWzNdOworCW10a19oZG1pX3dyaXRl
KGhkbWksIEdSTF9SX1NUQVRVU18zLCB2YWwpOworCisJdmFsID0gbF9zdGF0dXNbNF07CisJbXRr
X2hkbWlfd3JpdGUoaGRtaSwgR1JMX0kyU19DX1NUQTQsIHZhbCk7CisJbXRrX2hkbWlfd3JpdGUo
aGRtaSwgR1JMX0xfU1RBVFVTXzQsIHZhbCk7CisKKwl2YWwgPSByX3N0YXR1c1s0XTsKKwltdGtf
aGRtaV93cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNfNCwgdmFsKTsKKworCWZvciAodmFsID0gMDsg
dmFsIDwgMTk7IHZhbCsrKSB7CisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9MX1NUQVRVU181
ICsgdmFsICogNCwgMCk7CisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9SX1NUQVRVU181ICsg
dmFsICogNCwgMCk7CisJfQorfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9zcmNfcmVlbmFibGUo
c3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSBtdGtfaGRtaV9y
ZWFkKGhkbWksIEdSTF9NSVhfQ1RSTCk7CisJaWYgKHZhbCAmIE1JWF9DVFJMX1NSQ19FTikgewor
CQl2YWwgJj0gfk1JWF9DVFJMX1NSQ19FTjsKKwkJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX01J
WF9DVFJMLCB2YWwpOworCQl1c2xlZXBfcmFuZ2UoMjU1LCA1MTIpOworCQl2YWwgfD0gTUlYX0NU
UkxfU1JDX0VOOworCQltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTUlYX0NUUkwsIHZhbCk7CisJ
fQorfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9zcmNfb2ZmKHN0cnVjdCBtdGtfaGRtaSAqaGRt
aSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gbXRrX2hkbWlfcmVhZChoZG1pLCBHUkxfTUlYX0NU
UkwpOworCXZhbCAmPSB+TUlYX0NUUkxfU1JDX0VOOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdS
TF9NSVhfQ1RSTCwgdmFsKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfU0hJRlRfTDEsIDB4
MDApOworfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfbWNsayhzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWksIGVudW0gaGRtaV9hdWRfbWNsayBtY2xrKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSBt
dGtfaGRtaV9yZWFkKGhkbWksIEdSTF9DRkc1KTsKKwl2YWwgJj0gQ0ZHNV9DRF9SQVRJT19NQVNL
OworCisJc3dpdGNoIChtY2xrKSB7CisJY2FzZSBIRE1JX0FVRF9NQ0xLXzEyOEZTOgorCQl2YWwg
fD0gQ0ZHNV9GUzEyODsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRF9NQ0xLXzI1NkZTOgorCQl2
YWwgfD0gQ0ZHNV9GUzI1NjsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRF9NQ0xLXzM4NEZTOgor
CQl2YWwgfD0gQ0ZHNV9GUzM4NDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRF9NQ0xLXzUxMkZT
OgorCQl2YWwgfD0gQ0ZHNV9GUzUxMjsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRF9NQ0xLXzc2
OEZTOgorCQl2YWwgfD0gQ0ZHNV9GUzc2ODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdmFsIHw9
IENGRzVfRlMyNTY7CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfQ0ZH
NSwgdmFsKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfYWNsa19pbnZfZW5hYmxlKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IG10
a19oZG1pX3JlYWQoaGRtaSwgR1JMX0NGRzIpOworCWlmIChlbmFibGUpCisJCXZhbCB8PSAweDgw
OworCWVsc2UKKwkJdmFsICY9IH4weDgwOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9DRkcy
LCB2YWwpOworfQorCitzdHJ1Y3QgaGRtaV9hY3JfbiB7CisJdW5zaWduZWQgaW50IGNsb2NrOwor
CXVuc2lnbmVkIGludCBuWzNdOworfTsKKworLyogUmVjb21tZW5kZWQgTiB2YWx1ZXMgZnJvbSBI
RE1JIHNwZWNpZmljYXRpb24sIHRhYmxlcyA3LTEgdG8gNy0zICovCitzdGF0aWMgY29uc3Qgc3Ry
dWN0IGhkbWlfYWNyX24gaGRtaV9yZWNfbl90YWJsZVtdID0geworCS8qIENsb2NrLCBOOiAzMmtI
eiA0NC4xa0h6IDQ4a0h6ICovCisJeyAgMjUxNzUsIHsgIDQ1NzYsICA3MDA3LCAgNjg2NCB9IH0s
CisJeyAgNzQxNzYsIHsgMTE2NDgsIDE3ODM2LCAxMTY0OCB9IH0sCisJeyAxNDgzNTIsIHsgMTE2
NDgsICA4OTE4LCAgNTgyNCB9IH0sCisJeyAyOTY3MDMsIHsgIDU4MjQsICA0NDU5LCAgNTgyNCB9
IH0sCisJeyAyOTcwMDAsIHsgIDMwNzIsICA0NzA0LCAgNTEyMCB9IH0sCisJeyAgICAgIDAsIHsg
IDQwOTYsICA2MjcyLCAgNjE0NCB9IH0sIC8qIGFsbCBvdGhlciBUTURTIGNsb2NrcyAqLworfTsK
KworLyoqCisgKiBoZG1pX3JlY29tbWVuZGVkX24oKSAtIFJldHVybiBOIHZhbHVlIHJlY29tbWVu
ZGVkIGJ5IEhETUkgc3BlY2lmaWNhdGlvbgorICogQGZyZXE6IGF1ZGlvIHNhbXBsZSByYXRlIGlu
IEh6CisgKiBAY2xvY2s6IHJvdW5kZWQgVE1EUyBjbG9jayBpbiBrSHoKKyAqLworc3RhdGljIHVu
c2lnbmVkIGludCBoZG1pX3JlY29tbWVuZGVkX24odW5zaWduZWQgaW50IGZyZXEsIHVuc2lnbmVk
IGludCBjbG9jaykKK3sKKwljb25zdCBzdHJ1Y3QgaGRtaV9hY3JfbiAqcmVjb21tZW5kZWQ7CisJ
dW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoZG1pX3JlY19u
X3RhYmxlKSAtIDE7IGkrKykgeworCQlpZiAoY2xvY2sgPT0gaGRtaV9yZWNfbl90YWJsZVtpXS5j
bG9jaykKKwkJCWJyZWFrOworCX0KKwlyZWNvbW1lbmRlZCA9IGhkbWlfcmVjX25fdGFibGUgKyBp
OworCisJc3dpdGNoIChmcmVxKSB7CisJY2FzZSAzMjAwMDoKKwkJcmV0dXJuIHJlY29tbWVuZGVk
LT5uWzBdOworCWNhc2UgNDQxMDA6CisJCXJldHVybiByZWNvbW1lbmRlZC0+blsxXTsKKwljYXNl
IDQ4MDAwOgorCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5bMl07CisJY2FzZSA4ODIwMDoKKwkJcmV0
dXJuIHJlY29tbWVuZGVkLT5uWzFdICogMjsKKwljYXNlIDk2MDAwOgorCQlyZXR1cm4gcmVjb21t
ZW5kZWQtPm5bMl0gKiAyOworCWNhc2UgMTc2NDAwOgorCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5b
MV0gKiA0OworCWNhc2UgMTkyMDAwOgorCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5bMl0gKiA0Owor
CWRlZmF1bHQ6CisJCXJldHVybiAoMTI4ICogZnJlcSkgLyAxMDAwOworCX0KK30KKworc3RhdGlj
IHVuc2lnbmVkIGludCBoZG1pX21vZGVfY2xvY2tfdG9faHoodW5zaWduZWQgaW50IGNsb2NrKQor
eworCXN3aXRjaCAoY2xvY2spIHsKKwljYXNlIDI1MTc1OgorCQlyZXR1cm4gMjUxNzQ4MjU7CS8q
IDI1LjIvMS4wMDEgTUh6ICovCisJY2FzZSA3NDE3NjoKKwkJcmV0dXJuIDc0MTc1ODI0OwkvKiA3
NC4yNS8xLjAwMSBNSHogKi8KKwljYXNlIDE0ODM1MjoKKwkJcmV0dXJuIDE0ODM1MTY0ODsJLyog
MTQ4LjUvMS4wMDEgTUh6ICovCisJY2FzZSAyOTY3MDM6CisJCXJldHVybiAyOTY3MDMyOTc7CS8q
IDI5Ny8xLjAwMSBNSHogKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gY2xvY2sgKiAxMDAwOworCX0K
K30KKworc3RhdGljIHVuc2lnbmVkIGludCBoZG1pX2V4cGVjdGVkX2N0cyh1bnNpZ25lZCBpbnQg
YXVkaW9fc2FtcGxlX3JhdGUsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHRtZHNfY2xvY2ssIHVu
c2lnbmVkIGludCBuKQoreworCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVF9VTEwoKHU2NCloZG1p
X21vZGVfY2xvY2tfdG9faHoodG1kc19jbG9jaykgKiBuLAorCQkJCSAgICAgMTI4ICogYXVkaW9f
c2FtcGxlX3JhdGUpOworfQorCitzdGF0aWMgdm9pZCBkb19oZG1pX2h3X2F1ZF9zZXRfbmN0cyhz
dHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHVuc2lnbmVkIGludCBuLAorCQkJCSAgICB1bnNpZ25lZCBp
bnQgY3RzKQoreworCXVuc2lnbmVkIGNoYXIgdmFsW05DVFNfQllURVNdOworCWludCBpOworCisJ
bXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX05DVFMsIDApOworCW10a19oZG1pX3dyaXRlKGhkbWks
IEdSTF9OQ1RTLCAwKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTkNUUywgMCk7CisJbWVt
c2V0KHZhbCwgMCwgc2l6ZW9mKHZhbCkpOworCisJdmFsWzBdID0gKGN0cyA+PiAyNCkgJiAweGZm
OworCXZhbFsxXSA9IChjdHMgPj4gMTYpICYgMHhmZjsKKwl2YWxbMl0gPSAoY3RzID4+IDgpICYg
MHhmZjsKKwl2YWxbM10gPSBjdHMgJiAweGZmOworCisJdmFsWzRdID0gKG4gPj4gMTYpICYgMHhm
ZjsKKwl2YWxbNV0gPSAobiA+PiA4KSAmIDB4ZmY7CisJdmFsWzZdID0gbiAmIDB4ZmY7CisKKwlm
b3IgKGkgPSAwOyBpIDwgTkNUU19CWVRFUzsgaSsrKQorCQltdGtfaGRtaV93cml0ZShoZG1pLCBH
UkxfTkNUUywgdmFsW2ldKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X25jdHMoc3Ry
dWN0IG10a19oZG1pICpoZG1pLCB1bnNpZ25lZCBpbnQgc2FtcGxlX3JhdGUsCisJCQkgICAgICB1
bnNpZ25lZCBpbnQgY2xvY2spCit7CisJdW5zaWduZWQgaW50IG4sIGN0czsKKworCW4gPSBoZG1p
X3JlY29tbWVuZGVkX24oc2FtcGxlX3JhdGUsIGNsb2NrKTsKKwljdHMgPSBoZG1pX2V4cGVjdGVk
X2N0cyhzYW1wbGVfcmF0ZSwgY2xvY2ssIG4pOworCisJZGV2X2RiZyhoZG1pLT5kZXYsICIlczog
c2FtcGxlX3JhdGU9JXUsIGNsb2NrPSVkLCBjdHM9JXUsIG49JXVcbiIsCisJCV9fZnVuY19fLCBz
YW1wbGVfcmF0ZSwgY2xvY2ssIG4sIGN0cyk7CisKKwltdGtfaGRtaV9tYXNrKGhkbWksIERVTU1Z
XzMwNCwgQVVESU9fSTJTX05DVFNfU0VMXzY0LAorCQkgICAgICBBVURJT19JMlNfTkNUU19TRUwp
OworCWRvX2hkbWlfaHdfYXVkX3NldF9uY3RzKGhkbWksIG4sIGN0cyk7Cit9CmRpZmYgLS1naXQg
YS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcuaCBiL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfaGRtaV9ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjkwMTMyMTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2hkbWlfaHcuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0
IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisj
aWZuZGVmIF9NVEtfSERNSV9IV19ICisjZGVmaW5lIF9NVEtfSERNSV9IV19ICisKKyNpbmNsdWRl
IDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2hkbWkuaD4KKyNpbmNsdWRlICJtdGtf
aGRtaS5oIgorCit2b2lkIG10a19oZG1pX2h3X3ZpZF9ibGFjayhzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWksIGJvb2wgYmxhY2spOwordm9pZCBtdGtfaGRtaV9od19hdWRfbXV0ZShzdHJ1Y3QgbXRrX2hk
bWkgKmhkbWksIGJvb2wgbXV0ZSk7Cit2b2lkIG10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShz
dHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHU4ICpidWZmZXIsIHU4IGxlbik7Cit2b2lkIG10a19oZG1p
X2h3X3NlbmRfYXVkX3BhY2tldChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKTsK
K2ludCBtdGtfaGRtaV9od19zZXRfY2xvY2soc3RydWN0IG10a19oZG1pICpoY3R4LCB1MzIgY2xv
Y2spOwordm9pZCBtdGtfaGRtaV9od19jb25maWdfc3lzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7
Cit2b2lkIG10a19oZG1pX2h3X3NldF9kZWVwX2NvbG9yX21vZGUoc3RydWN0IG10a19oZG1pICpo
ZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfc2VuZF9hdl9tdXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRt
aSk7Cit2b2lkIG10a19oZG1pX2h3X3NlbmRfYXZfdW5tdXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRt
aSk7Cit2b2lkIG10a19oZG1pX2h3X25jdHNfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwg
Ym9vbCBvbik7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9zd2FwKHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgICBlbnVtIGhkbWlfYXVkX2NoYW5uZWxfc3dhcF90eXBl
IHN3YXApOwordm9pZCBtdGtfaGRtaV9od19hdWRfcmF3X2RhdGFfZW5hYmxlKHN0cnVjdCBtdGtf
aGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2JpdF9u
dW0oc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSBlbnVtIGhkbWlfYXVkaW9fc2FtcGxlX3Np
emUgYml0X251bSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfaGlnaF9iaXRyYXRlKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9waHlfYXVkX2Rz
dF9ub3JtYWxfZG91YmxlX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCSAgICAg
ICBib29sIGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9kc3RfZW5hYmxlKHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9od19hdWRfZHNkX2Vu
YWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlf
aHdfYXVkX3NldF9pMnNfZm10KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgZW51bSBoZG1p
X2F1ZF9pMnNfZm10IGkyc19mbXQpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2kyc19jaGFu
X251bShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgICAgZW51bSBoZG1pX2F1ZF9jaGFu
bmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJCSAgICAgIHU4IGNoYW5uZWxfY291bnQpOwordm9p
ZCBtdGtfaGRtaV9od19hdWRfc2V0X2lucHV0X3R5cGUoc3RydWN0IG10a19oZG1pICpoZG1pLAor
CQkJCSAgICBlbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgaW5wdXRfdHlwZSk7Cit2b2lkIG10a19o
ZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9zdGF0dXMoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJ
CQl1OCAqbF9jaGFuX3N0YXR1cywgdTggKnJfY2hhbl9zdGF1cywKKwkJCQkJZW51bSBoZG1pX2F1
ZGlvX3NhbXBsZV9mcmVxdWVuY3kKKwkJCQkJYXVkX2hkbWlfZnMpOwordm9pZCBtdGtfaGRtaV9o
d19hdWRfc3JjX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKTsKK3Zv
aWQgbXRrX2hkbWlfaHdfYXVkX3NldF9tY2xrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgZW51bSBo
ZG1pX2F1ZF9tY2xrIG1jbGspOwordm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX29mZihzdHJ1Y3Qg
bXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX3JlZW5hYmxlKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9hY2xrX2ludl9lbmFibGUo
c3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX2h3X2F1
ZF9zZXRfbmN0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHVuc2lnbmVkIGludCBzYW1wbGVfcmF0
ZSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjbG9jayk7Citib29sIG10a19oZG1pX2h3X2lzX2hw
ZF9oaWdoKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X21ha2VfcmVn
X3dyaXRhYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtf
aGRtaV9od19yZXNldChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfaGRtaV9od19l
bmFibGVfbm90aWNlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGVfbm90aWNlKTsK
K3ZvaWQgbXRrX2hkbWlfaHdfd3JpdGVfaW50X21hc2soc3RydWN0IG10a19oZG1pICpoZG1pLCB1
MzIgaW50X21hc2spOwordm9pZCBtdGtfaGRtaV9od19lbmFibGVfZHZpX21vZGUoc3RydWN0IG10
a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX2h3X25jdHNfYXV0b193
cml0ZV9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSk7Cit2b2lkIG10
a19oZG1pX2h3X21zaWNfc2V0dGluZyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkgICAgICBz
dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7Cit2b2lkIG10a19oZG1pX2h3XzFwNF92ZXJz
aW9uX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKTsKK3ZvaWQgbXRr
X2hkbWlfaHdfaHRwbGdfaXJxX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBt
dGtfaGRtaV9od19odHBsZ19pcnFfZGlzYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9p
ZCBtdGtfaGRtaV9od19jbGVhcl9odHBsZ19pcnEoc3RydWN0IG10a19oZG1pICpoZG1pKTsKKwor
I2VuZGlmIC8qIF9NVEtfSERNSV9IV19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19o
ZG1pX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzFkMzE4Ci0t
LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3JlZ3Mu
aApAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJ
bmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRo
aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTVRL
X0hETUlfUkVHU19ICisjZGVmaW5lIF9NVEtfSERNSV9SRUdTX0gKKworI2RlZmluZSBHUkxfSU5U
X01BU0sJCTB4MTgKKyNkZWZpbmUgR1JMX0lGTV9QT1JUCQkweDE4OAorI2RlZmluZSBHUkxfQ0hf
U1dBUAkJMHgxOTgKKyNkZWZpbmUgTFJfU1dBUAkJCQlCSVQoMCkKKyNkZWZpbmUgTEZFX0NDX1NX
QVAJCQlCSVQoMSkKKyNkZWZpbmUgTFNSU19TV0FQCQkJQklUKDIpCisjZGVmaW5lIFJMU19SUlNf
U1dBUAkJCUJJVCgzKQorI2RlZmluZSBMUl9TVEFUVVNfU1dBUAkJCUJJVCg0KQorI2RlZmluZSBH
UkxfSTJTX0NfU1RBMAkJMHgxNDAKKyNkZWZpbmUgR1JMX0kyU19DX1NUQTEJCTB4MTQ0CisjZGVm
aW5lIEdSTF9JMlNfQ19TVEEyCQkweDE0OAorI2RlZmluZSBHUkxfSTJTX0NfU1RBMwkJMHgxNEMK
KyNkZWZpbmUgR1JMX0kyU19DX1NUQTQJCTB4MTUwCisjZGVmaW5lIEdSTF9JMlNfVVYJCTB4MTU0
CisjZGVmaW5lIEdSTF9BQ1BfSVNSQ19DVFJMCTB4MTU4CisjZGVmaW5lIFZTX0VOCQkJCUJJVCgw
KQorI2RlZmluZSBBQ1BfRU4JCQkJQklUKDEpCisjZGVmaW5lIElTUkMxX0VOCQkJQklUKDIpCisj
ZGVmaW5lIElTUkMyX0VOCQkJQklUKDMpCisjZGVmaW5lIEdBTVVUX0VOCQkJQklUKDQpCisjZGVm
aW5lIEdSTF9DVFNfQ1RSTAkJMHgxNjAKKyNkZWZpbmUgQ1RTX0NUUkxfU09GVAkJCUJJVCgwKQor
I2RlZmluZSBHUkxfSU5UCQkJMHgxNAorI2RlZmluZSBJTlRfTURJCQkJCUJJVCgwKQorI2RlZmlu
ZSBJTlRfSERDUAkJCUJJVCgxKQorI2RlZmluZSBJTlRfRklGT19PCQkJQklUKDIpCisjZGVmaW5l
IElOVF9GSUZPX1UJCQlCSVQoMykKKyNkZWZpbmUgSU5UX0lGTV9FUlIJCQlCSVQoNCkKKyNkZWZp
bmUgSU5UX0lORl9ET05FCQkJQklUKDUpCisjZGVmaW5lIElOVF9OQ1RTX0RPTkUJCQlCSVQoNikK
KyNkZWZpbmUgSU5UX0NUUkxfUEtUX0RPTkUJCUJJVCg3KQorI2RlZmluZSBHUkxfSU5UX01BU0sJ
CTB4MTgKKyNkZWZpbmUgR1JMX0NUUkwJCTB4MUMKKyNkZWZpbmUgQ1RSTF9HRU5fRU4JCQlCSVQo
MikKKyNkZWZpbmUgQ1RSTF9TUERfRU4JCQlCSVQoMykKKyNkZWZpbmUgQ1RSTF9NUEVHX0VOCQkJ
QklUKDQpCisjZGVmaW5lIENUUkxfQVVESU9fRU4JCQlCSVQoNSkKKyNkZWZpbmUgQ1RSTF9BVklf
RU4JCQlCSVQoNikKKyNkZWZpbmUgQ1RSTF9BVk1VVEUJCQlCSVQoNykKKyNkZWZpbmUJR1JMX1NU
QVRVUwkJMHgyMAorI2RlZmluZSBTVEFUVVNfSFRQTEcJCQlCSVQoMCkKKyNkZWZpbmUgU1RBVFVT
X1BPUkQJCQlCSVQoMSkKKyNkZWZpbmUgR1JMX0RJVk4JCTB4MTcwCisjZGVmaW5lIE5DVFNfV1JJ
X0FOWVRJTUUJCUJJVCg2KQorI2RlZmluZSBHUkxfQVVESU9fQ0ZHCQkweDE3QworI2RlZmluZSBB
VURJT19aRVJPCQkJQklUKDApCisjZGVmaW5lIEhJR0hfQklUX1JBVEUJCQlCSVQoMSkKKyNkZWZp
bmUgU0FDRF9EU1QJCQlCSVQoMikKKyNkZWZpbmUgRFNUX05PUk1BTF9ET1VCTEUJCUJJVCgzKQor
I2RlZmluZSBEU0RfSU5WCQkJCUJJVCg0KQorI2RlZmluZSBMUl9JTlYJCQkJQklUKDUpCisjZGVm
aW5lIExSX01JWAkJCQlCSVQoNikKKyNkZWZpbmUgU0FDRF9TRUwJCQlCSVQoNykKKyNkZWZpbmUg
R1JMX05DVFMJCTB4MTg0CisjZGVmaW5lIEdSTF9DSF9TVzAJCTB4MThDCisjZGVmaW5lIEdSTF9D
SF9TVzEJCTB4MTkwCisjZGVmaW5lIEdSTF9DSF9TVzIJCTB4MTk0CisjZGVmaW5lIEdSTF9JTkZP
RlJNX1ZFUgkJMHgxOUMKKyNkZWZpbmUgR1JMX0lORk9GUk1fVFlQRQkweDFBMAorI2RlZmluZSBH
UkxfSU5GT0ZSTV9MTkcJCTB4MUE0CisjZGVmaW5lIEdSTF9NSVhfQ1RSTAkJMHgxQjQKKyNkZWZp
bmUgTUlYX0NUUkxfU1JDX0VOCQkJQklUKDApCisjZGVmaW5lIEJZUEFTU19WT0xVTUUJCQlCSVQo
MSkKKyNkZWZpbmUgTUlYX0NUUkxfRkxBVAkJCUJJVCg3KQorI2RlZmluZSBHUkxfQU9VVF9CTlVN
X1NFTAkweDFDNAorI2RlZmluZSBBT1VUXzI0QklUCQkJMHgwMAorI2RlZmluZSBBT1VUXzIwQklU
CQkJMHgwMgorI2RlZmluZSBBT1VUXzE2QklUCQkJMHgwMworI2RlZmluZSBISUdIX0JJVF9SQVRF
X1BBQ0tFVF9BTElHTgkoMHgzIDw8IDYpCisjZGVmaW5lIEdSTF9TSElGVF9MMQkJMHgxQzAKKyNk
ZWZpbmUgR1JMX1NISUZUX1IyCQkweDFCMAorI2RlZmluZSBBVURJT19QQUNLRVRfT0ZGCQlCSVQo
NikKKyNkZWZpbmUgR1JMX0NGRzAJCTB4MjQKKyNkZWZpbmUgQ0ZHMF9JMlNfTU9ERV9SVEoJCTB4
MQorI2RlZmluZSBDRkcwX0kyU19NT0RFX0xUSgkJMHgwCisjZGVmaW5lIENGRzBfSTJTX01PREVf
STJTCQkweDIKKyNkZWZpbmUgQ0ZHMF9JMlNfTU9ERV8yNEJJVAkJMHgwMAorI2RlZmluZSBDRkcw
X0kyU19NT0RFXzE2QklUCQkweDEwCisjZGVmaW5lIEdSTF9DRkcxCQkweDI4CisjZGVmaW5lIENG
RzFfRURHX1NFTAkJCUJJVCgwKQorI2RlZmluZSBDRkcxX1NQRElGCQkJQklUKDEpCisjZGVmaW5l
IENGRzFfRFZJCQkJQklUKDIpCisjZGVmaW5lIENGRzFfSERDUF9ERUJVRwkJCUJJVCgzKQorI2Rl
ZmluZSBHUkxfQ0ZHMgkJMHgyYworI2RlZmluZSBDRkcyX05PVElDRV9FTgkJCUJJVCg2KQorI2Rl
ZmluZSBNSExfREVfU0VMCQkJQklUKDMpCisjZGVmaW5lIEdSTF9DRkczCQkweDMwCisjZGVmaW5l
IENGRzNfQUVTX0tFWV9JTkRFWF9NQVNLCQkweDNmCisjZGVmaW5lIENGRzNfQ09OVFJPTF9QQUNL
RVRfREVMQVkJQklUKDYpCisjZGVmaW5lIENGRzNfS1NWX0xPQURfU1RBUlQJCUJJVCg3KQorI2Rl
ZmluZSBHUkxfQ0ZHNAkJMHgzNAorI2RlZmluZSBDRkc0X0FFU19LRVlfTE9BRAkJQklUKDQpCisj
ZGVmaW5lIENGRzRfQVZfVU5NVVRFX0VOCQlCSVQoNSkKKyNkZWZpbmUgQ0ZHNF9BVl9VTk1VVEVf
U0VUCQlCSVQoNikKKyNkZWZpbmUgQ0ZHX01ITF9NT0RFCQkJQklUKDcpCisjZGVmaW5lIEdSTF9D
Rkc1CQkweDM4CisjZGVmaW5lIENGRzVfQ0RfUkFUSU9fTUFTSwkweDhGCisjZGVmaW5lIENGRzVf
RlMxMjgJCQkoMHgxIDw8IDQpCisjZGVmaW5lIENGRzVfRlMyNTYJCQkoMHgyIDw8IDQpCisjZGVm
aW5lIENGRzVfRlMzODQJCQkoMHgzIDw8IDQpCisjZGVmaW5lIENGRzVfRlM1MTIJCQkoMHg0IDw8
IDQpCisjZGVmaW5lIENGRzVfRlM3NjgJCQkoMHg2IDw8IDQpCisjZGVmaW5lIERVTU1ZXzMwNAkJ
MHgzMDQKKyNkZWZpbmUgQ0hNT19TRUwJCQkoMHgzIDw8IDIpCisjZGVmaW5lIENITTFfU0VMCQkJ
KDB4MyA8PCA0KQorI2RlZmluZSBDSE0yX1NFTAkJCSgweDMgPDwgNikKKyNkZWZpbmUgQVVESU9f
STJTX05DVFNfU0VMCQlCSVQoMSkKKyNkZWZpbmUgQVVESU9fSTJTX05DVFNfU0VMXzY0CQkoMSA8
PCAxKQorI2RlZmluZSBBVURJT19JMlNfTkNUU19TRUxfMTI4CQkoMCA8PCAxKQorI2RlZmluZSBO
RVdfR0NQX0NUUkwJCQlCSVQoMCkKKyNkZWZpbmUgTkVXX0dDUF9DVFJMX01FUkdFCQlCSVQoMCkK
KyNkZWZpbmUgR1JMX0xfU1RBVFVTXzAJCTB4MjAwCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xCQkw
eDIwNAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMgkJMHgyMDgKKyNkZWZpbmUgR1JMX0xfU1RBVFVT
XzMJCTB4MjBjCisjZGVmaW5lIEdSTF9MX1NUQVRVU180CQkweDIxMAorI2RlZmluZSBHUkxfTF9T
VEFUVVNfNQkJMHgyMTQKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzYJCTB4MjE4CisjZGVmaW5lIEdS
TF9MX1NUQVRVU183CQkweDIxYworI2RlZmluZSBHUkxfTF9TVEFUVVNfOAkJMHgyMjAKKyNkZWZp
bmUgR1JMX0xfU1RBVFVTXzkJCTB4MjI0CisjZGVmaW5lIEdSTF9MX1NUQVRVU18xMAkJMHgyMjgK
KyNkZWZpbmUgR1JMX0xfU1RBVFVTXzExCQkweDIyYworI2RlZmluZSBHUkxfTF9TVEFUVVNfMTIJ
CTB4MjMwCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xMwkJMHgyMzQKKyNkZWZpbmUgR1JMX0xfU1RB
VFVTXzE0CQkweDIzOAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMTUJCTB4MjNjCisjZGVmaW5lIEdS
TF9MX1NUQVRVU18xNgkJMHgyNDAKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzE3CQkweDI0NAorI2Rl
ZmluZSBHUkxfTF9TVEFUVVNfMTgJCTB4MjQ4CisjZGVmaW5lIEdSTF9MX1NUQVRVU18xOQkJMHgy
NGMKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzIwCQkweDI1MAorI2RlZmluZSBHUkxfTF9TVEFUVVNf
MjEJCTB4MjU0CisjZGVmaW5lIEdSTF9MX1NUQVRVU18yMgkJMHgyNTgKKyNkZWZpbmUgR1JMX0xf
U1RBVFVTXzIzCQkweDI1YworI2RlZmluZSBHUkxfUl9TVEFUVVNfMAkJMHgyNjAKKyNkZWZpbmUg
R1JMX1JfU1RBVFVTXzEJCTB4MjY0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18yCQkweDI2OAorI2Rl
ZmluZSBHUkxfUl9TVEFUVVNfMwkJMHgyNmMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzQJCTB4Mjcw
CisjZGVmaW5lIEdSTF9SX1NUQVRVU181CQkweDI3NAorI2RlZmluZSBHUkxfUl9TVEFUVVNfNgkJ
MHgyNzgKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzcJCTB4MjdjCisjZGVmaW5lIEdSTF9SX1NUQVRV
U184CQkweDI4MAorI2RlZmluZSBHUkxfUl9TVEFUVVNfOQkJMHgyODQKKyNkZWZpbmUgR1JMX1Jf
U1RBVFVTXzEwCQkweDI4OAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTEJCTB4MjhjCisjZGVmaW5l
IEdSTF9SX1NUQVRVU18xMgkJMHgyOTAKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzEzCQkweDI5NAor
I2RlZmluZSBHUkxfUl9TVEFUVVNfMTQJCTB4Mjk4CisjZGVmaW5lIEdSTF9SX1NUQVRVU18xNQkJ
MHgyOWMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzE2CQkweDJhMAorI2RlZmluZSBHUkxfUl9TVEFU
VVNfMTcJCTB4MmE0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18xOAkJMHgyYTgKKyNkZWZpbmUgR1JM
X1JfU1RBVFVTXzE5CQkweDJhYworI2RlZmluZSBHUkxfUl9TVEFUVVNfMjAJCTB4MmIwCisjZGVm
aW5lIEdSTF9SX1NUQVRVU18yMQkJMHgyYjQKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzIyCQkweDJi
OAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMjMJCTB4MmJjCisjZGVmaW5lIEdSTF9BQklTVF9DVFJM
MAkJMHgyRDQKKyNkZWZpbmUgR1JMX0FCSVNUX0NUUkwxCQkweDJEOAorI2RlZmluZSBBQklTVF9F
TgkJCUJJVCg3KQorI2RlZmluZSBBQklTVF9EQVRBX0ZNVAkJCSgweDcgPDwgMCkKKyNkZWZpbmUg
VklERU9fQ0ZHXzAJCTB4MzgwCisjZGVmaW5lIFZJREVPX0NGR18xCQkweDM4NAorI2RlZmluZSBW
SURFT19DRkdfMgkJMHgzODgKKyNkZWZpbmUgVklERU9fQ0ZHXzMJCTB4MzhjCisjZGVmaW5lIFZJ
REVPX0NGR180CQkweDM5MAorI2RlZmluZSBWSURFT19TT1VSQ0VfU0VMCQlCSVQoNykKKyNkZWZp
bmUgTk9STUFMX1BBVEgJCQkoMSA8PCA3KQorI2RlZmluZSBHRU5fUkdCCQkJCSgwIDw8IDcpCisK
KyNkZWZpbmUgSERNSV9TWVNfQ0ZHMUMJCTB4MDAwCisjZGVmaW5lIEhETUlfT04JCQkJQklUKDAp
CisjZGVmaW5lIEhETUlfUlNUCQkJQklUKDEpCisjZGVmaW5lIEFOTEdfT04JCQkJQklUKDIpCisj
ZGVmaW5lIENGRzEwX0RWSQkJCUJJVCgzKQorI2RlZmluZSBIRE1JX1RTVAkJCUJJVCgzKQorI2Rl
ZmluZSBTWVNfS0VZTUFTSzEJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBTWVNfS0VZTUFTSzIJCQko
MHhmZiA8PCAxNikKKyNkZWZpbmUgQVVEX09VVFNZTkNfRU4JCQlCSVQoMjQpCisjZGVmaW5lIEFV
RF9PVVRTWU5DX1BSRV9FTgkJQklUKDI1KQorI2RlZmluZSBJMkNNX09OCQkJCUJJVCgyNikKKyNk
ZWZpbmUgRTJQUk9NX1RZUEVfOEJJVAkJQklUKDI3KQorI2RlZmluZSBNQ01fRTJQUk9NX09OCQkJ
QklUKDI4KQorI2RlZmluZSBFWFRfRTJQUk9NX09OCQkJQklUKDI5KQorI2RlZmluZSBIVFBMR19Q
SU5fU0VMX09GRgkJQklUKDMwKQorI2RlZmluZSBBRVNfRUZVU0VfRU5BQkxFCQlCSVQoMzEpCisj
ZGVmaW5lIEhETUlfU1lTX0NGRzIwCQkweDAwNAorI2RlZmluZSBERUVQX0NPTE9SX01PREVfTUFT
SwkJKDMgPDwgMSkKKyNkZWZpbmUgQ09MT1JfOEJJVF9NT0RFCQkJKDAgPDwgMSkKKyNkZWZpbmUg
Q09MT1JfMTBCSVRfTU9ERQkJKDEgPDwgMSkKKyNkZWZpbmUgQ09MT1JfMTJCSVRfTU9ERQkJKDIg
PDwgMSkKKyNkZWZpbmUgQ09MT1JfMTZCSVRfTU9ERQkJKDMgPDwgMSkKKyNkZWZpbmUgREVFUF9D
T0xPUl9FTgkJCUJJVCgwKQorI2RlZmluZSBIRE1JX0FVRElPX1RFU1RfU0VMCQlCSVQoOCkKKyNk
ZWZpbmUgSERNSTJQMF9FTgkJCUJJVCgxMSkKKyNkZWZpbmUgSERNSV9PVVRfRklGT19FTgkJQklU
KDE2KQorI2RlZmluZSBIRE1JX09VVF9GSUZPX0NMS19JTlYJCUJJVCgxNykKKyNkZWZpbmUgTUhM
X01PREVfT04JCQlCSVQoMjgpCisjZGVmaW5lIE1ITF9QUF9NT0RFCQkJQklUKDI5KQorI2RlZmlu
ZSBNSExfU1lOQ19BVVRPX0VOCQlCSVQoMzApCisjZGVmaW5lIEhETUlfUENMS19GUkVFX1JVTgkJ
QklUKDMxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfbXQ4MTczX2hkbWlfcGh5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3
M19oZG1pX3BoeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOWYwN2YK
LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19o
ZG1pX3BoeS5jCkBAIC0wLDAgKzEsNTA1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1l
ZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+Cisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg
KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNp
bmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKyNp
bmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8
bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg
PGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNp
bmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEhETUlfQ09OMAkJMHgwMAorI2RlZmlu
ZSBSR19IRE1JVFhfUExMX0VOCQlCSVQoMzEpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfRkJLRElW
CQkoMHg3ZiA8PCAyNCkKKyNkZWZpbmUgUExMX0ZCS0RJVl9TSElGVAkJMjQKKyNkZWZpbmUgUkdf
SERNSVRYX1BMTF9GQktTRUwJCSgweDMgPDwgMjIpCisjZGVmaW5lIFBMTF9GQktTRUxfU0hJRlQJ
CTIyCisjZGVmaW5lIFJHX0hETUlUWF9QTExfUFJFRElWCQkoMHgzIDw8IDIwKQorI2RlZmluZSBQ
UkVESVZfU0hJRlQJCQkyMAorI2RlZmluZSBSR19IRE1JVFhfUExMX1BPU0RJVgkJKDB4MyA8PCAx
OCkKKyNkZWZpbmUgUE9TRElWX1NISUZUCQkJMTgKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9SU1Rf
RExZCQkoMHgzIDw8IDE2KQorI2RlZmluZSBSR19IRE1JVFhfUExMX0lSCQkoMHhmIDw8IDEyKQor
I2RlZmluZSBQTExfSVJfU0hJRlQJCQkxMgorI2RlZmluZSBSR19IRE1JVFhfUExMX0lDCQkoMHhm
IDw8IDgpCisjZGVmaW5lIFBMTF9JQ19TSElGVAkJCTgKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9C
UAkJKDB4ZiA8PCA0KQorI2RlZmluZSBQTExfQlBfU0hJRlQJCQk0CisjZGVmaW5lIFJHX0hETUlU
WF9QTExfQlIJCSgweDMgPDwgMikKKyNkZWZpbmUgUExMX0JSX1NISUZUCQkJMgorI2RlZmluZSBS
R19IRE1JVFhfUExMX0JDCQkoMHgzIDw8IDApCisjZGVmaW5lIFBMTF9CQ19TSElGVAkJCTAKKyNk
ZWZpbmUgSERNSV9DT04xCQkweDA0CisjZGVmaW5lIFJHX0hETUlUWF9QTExfRElWRU4JCSgweDcg
PDwgMjkpCisjZGVmaW5lIFBMTF9ESVZFTl9TSElGVAkJCTI5CisjZGVmaW5lIFJHX0hETUlUWF9Q
TExfQVVUT0tfRU4JCUJJVCgyOCkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19LRgkJKDB4
MyA8PCAyNikKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19LUwkJKDB4MyA8PCAyNCkKKyNk
ZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19MT0FECUJJVCgyMykKKyNkZWZpbmUgUkdfSERNSVRY
X1BMTF9CQU5ECQkoMHgzZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9SRUZfU0VMCQlC
SVQoMTUpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQklBU19FTgkJQklUKDE0KQorI2RlZmluZSBS
R19IRE1JVFhfUExMX0JJQVNfTFBGX0VOCUJJVCgxMykKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9U
WERJVl9FTgkJQklUKDEyKQorI2RlZmluZSBSR19IRE1JVFhfUExMX1RYRElWCQkoMHgzIDw8IDEw
KQorI2RlZmluZSBQTExfVFhESVZfU0hJRlQJCQkxMAorI2RlZmluZSBSR19IRE1JVFhfUExMX0xW
Uk9EX0VOCQlCSVQoOSkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9NT05WQ19FTgkJQklUKDgpCisj
ZGVmaW5lIFJHX0hETUlUWF9QTExfTU9OQ0tfRU4JCUJJVCg3KQorI2RlZmluZSBSR19IRE1JVFhf
UExMX01PTlJFRl9FTgkJQklUKDYpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfVFNUX0VOCQlCSVQo
NSkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9UU1RfQ0tfRU4JCUJJVCg0KQorI2RlZmluZSBSR19I
RE1JVFhfUExMX1RTVF9TRUwJCSgweGYgPDwgMCkKKyNkZWZpbmUgSERNSV9DT04yCQkweDA4Cisj
ZGVmaW5lIFJHU19IRE1JVFhfUExMX0FVVE9LX0JBTkQJKDB4N2YgPDwgOCkKKyNkZWZpbmUgUkdT
X0hETUlUWF9QTExfQVVUT0tfRkFJTAlCSVQoMSkKKyNkZWZpbmUgUkdfSERNSVRYX0VOX1RYX0NL
TERPCQlCSVQoMCkKKyNkZWZpbmUgSERNSV9DT04zCQkweDBjCisjZGVmaW5lIFJHX0hETUlUWF9T
RVJfRU4JCSgweGYgPDwgMjgpCisjZGVmaW5lIFJHX0hETUlUWF9QUkRfRU4JCSgweGYgPDwgMjQp
CisjZGVmaW5lIFJHX0hETUlUWF9QUkRfSU1QX0VOCQkoMHhmIDw8IDIwKQorI2RlZmluZSBSR19I
RE1JVFhfRFJWX0VOCQkoMHhmIDw8IDE2KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lNUF9FTgkJ
KDB4ZiA8PCAxMikKKyNkZWZpbmUgRFJWX0lNUF9FTl9TSElGVAkJMTIKKyNkZWZpbmUgUkdfSERN
SVRYX01ITENLX0ZPUkNFCQlCSVQoMTApCisjZGVmaW5lIFJHX0hETUlUWF9NSExDS19QUElYX0VO
CQlCSVQoOSkKKyNkZWZpbmUgUkdfSERNSVRYX01ITENLX0VOCQlCSVQoOCkKKyNkZWZpbmUgUkdf
SERNSVRYX1NFUl9ESU5fU0VMCQkoMHhmIDw8IDQpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJfNVQx
X0JJU1RfRU4JQklUKDMpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJfQklTVF9UT0cJCUJJVCgyKQor
I2RlZmluZSBSR19IRE1JVFhfU0VSX0RJTl9UT0cJCUJJVCgxKQorI2RlZmluZSBSR19IRE1JVFhf
U0VSX0NMS0RJR19JTlYJQklUKDApCisjZGVmaW5lIEhETUlfQ09ONAkJMHgxMAorI2RlZmluZSBS
R19IRE1JVFhfUFJEX0lCSUFTX0NMSwkJKDB4ZiA8PCAyNCkKKyNkZWZpbmUgUkdfSERNSVRYX1BS
RF9JQklBU19EMgkJKDB4ZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX1BSRF9JQklBU19EMQkJ
KDB4ZiA8PCA4KQorI2RlZmluZSBSR19IRE1JVFhfUFJEX0lCSUFTX0QwCQkoMHhmIDw8IDApCisj
ZGVmaW5lIFBSRF9JQklBU19DTEtfU0hJRlQJCTI0CisjZGVmaW5lIFBSRF9JQklBU19EMl9TSElG
VAkJMTYKKyNkZWZpbmUgUFJEX0lCSUFTX0QxX1NISUZUCQk4CisjZGVmaW5lIFBSRF9JQklBU19E
MF9TSElGVAkJMAorI2RlZmluZSBIRE1JX0NPTjUJCTB4MTQKKyNkZWZpbmUgUkdfSERNSVRYX0RS
Vl9JQklBU19DTEsJCSgweDNmIDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lCSUFTX0Qy
CQkoMHgzZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JQklBU19EMQkJKDB4M2YgPDwg
OCkKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JQklBU19EMAkJKDB4M2YgPDwgMCkKKyNkZWZpbmUg
RFJWX0lCSUFTX0NMS19TSElGVAkJMjQKKyNkZWZpbmUgRFJWX0lCSUFTX0QyX1NISUZUCQkxNgor
I2RlZmluZSBEUlZfSUJJQVNfRDFfU0hJRlQJCTgKKyNkZWZpbmUgRFJWX0lCSUFTX0QwX1NISUZU
CQkwCisjZGVmaW5lIEhETUlfQ09ONgkJMHgxOAorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lNUF9D
TEsJCSgweDNmIDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lNUF9EMgkJKDB4M2YgPDwg
MTYpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX0QxCQkoMHgzZiA8PCA4KQorI2RlZmluZSBS
R19IRE1JVFhfRFJWX0lNUF9EMAkJKDB4M2YgPDwgMCkKKyNkZWZpbmUgRFJWX0lNUF9DTEtfU0hJ
RlQJCTI0CisjZGVmaW5lIERSVl9JTVBfRDJfU0hJRlQJCTE2CisjZGVmaW5lIERSVl9JTVBfRDFf
U0hJRlQJCTgKKyNkZWZpbmUgRFJWX0lNUF9EMF9TSElGVAkJMAorI2RlZmluZSBIRE1JX0NPTjcJ
CTB4MWMKKyNkZWZpbmUgUkdfSERNSVRYX01ITENLX0RSVl9JQklBUwkoMHgxZiA8PCAyNykKKyNk
ZWZpbmUgUkdfSERNSVRYX1NFUl9ESU4JCSgweDNmZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRY
X0NITERDX1RTVAkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUkdfSERNSVRYX0NITENLX1RTVAkJKDB4
ZiA8PCA4KQorI2RlZmluZSBSR19IRE1JVFhfUkVTRVJWRQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUg
SERNSV9DT044CQkweDIwCisjZGVmaW5lIFJHU19IRE1JVFhfMlQxX0xFVgkJKDB4ZiA8PCAxNikK
KyNkZWZpbmUgUkdTX0hETUlUWF8yVDFfRURHCQkoMHhmIDw8IDEyKQorI2RlZmluZSBSR1NfSERN
SVRYXzVUMV9MRVYJCSgweGYgPDwgOCkKKyNkZWZpbmUgUkdTX0hETUlUWF81VDFfRURHCQkoMHhm
IDw8IDQpCisjZGVmaW5lIFJHU19IRE1JVFhfUExVR19UU1QJCUJJVCgwKQorCitzdHJ1Y3QgbXRr
X2hkbWlfcGh5IHsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IGRldmljZSAqZGV2Owor
CXN0cnVjdCBjbGsgKnBsbDsKKwlzdHJ1Y3QgY2xrX2h3IHBsbF9odzsKKwl1bnNpZ25lZCBsb25n
IHBsbF9yYXRlOworCXU4IGRydl9pbXBfY2xrOworCXU4IGRydl9pbXBfZDI7CisJdTggZHJ2X2lt
cF9kMTsKKwl1OCBkcnZfaW1wX2QwOworCXUzMiBpYmlhczsKKwl1MzIgaWJpYXNfdXA7Cit9Owor
CitzdGF0aWMgY29uc3QgdTggUFJFRElWWzNdWzRdID0geworCXsweDAsIDB4MCwgMHgwLCAweDB9
LAkvKiAyN01oeiAqLworCXsweDEsIDB4MSwgMHgxLCAweDF9LAkvKiA3NE1oeiAqLworCXsweDEs
IDB4MSwgMHgxLCAweDF9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IFRYRElW
WzNdWzRdID0geworCXsweDMsIDB4MywgMHgzLCAweDJ9LAkvKiAyN01oeiAqLworCXsweDIsIDB4
MSwgMHgxLCAweDF9LAkvKiA3NE1oeiAqLworCXsweDEsIDB4MCwgMHgwLCAweDB9CS8qIDE0OE1o
eiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEZCS1NFTFszXVs0XSA9IHsKKwl7MHgxLCAweDEs
IDB4MSwgMHgxfSwJLyogMjdNaHogKi8KKwl7MHgxLCAweDAsIDB4MSwgMHgxfSwJLyogNzRNaHog
Ki8KKwl7MHgxLCAweDAsIDB4MSwgMHgxfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25z
dCB1OCBGQktESVZbM11bNF0gPSB7CisJezE5LCAyNCwgMjksIDE5fSwJLyogMjdNaHogKi8KKwl7
MTksIDI0LCAxNCwgMTl9LAkvKiA3NE1oeiAqLworCXsxOSwgMjQsIDE0LCAxOX0JLyogMTQ4TWh6
ICovCit9OworCitzdGF0aWMgY29uc3QgdTggRElWRU5bM11bNF0gPSB7CisJezB4MiwgMHgxLCAw
eDEsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4MiwgMHgyLCAweDIsIDB4Mn0sCS8qIDc0TWh6ICov
CisJezB4MiwgMHgyLCAweDIsIDB4Mn0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3Qg
dTggSFRQTExCUFszXVs0XSA9IHsKKwl7MHhjLCAweGMsIDB4OCwgMHhjfSwJLyogMjdNaHogKi8K
Kwl7MHhjLCAweGYsIDB4ZiwgMHhjfSwJLyogNzRNaHogKi8KKwl7MHhjLCAweGYsIDB4ZiwgMHhj
fQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBIVFBMTEJDWzNdWzRdID0gewor
CXsweDIsIDB4MywgMHgzLCAweDJ9LAkvKiAyN01oeiAqLworCXsweDIsIDB4MywgMHgzLCAweDJ9
LAkvKiA3NE1oeiAqLworCXsweDIsIDB4MywgMHgzLCAweDJ9CS8qIDE0OE1oeiAqLworfTsKKwor
c3RhdGljIGNvbnN0IHU4IEhUUExMQlJbM11bNF0gPSB7CisJezB4MSwgMHgxLCAweDAsIDB4MX0s
CS8qIDI3TWh6ICovCisJezB4MSwgMHgyLCAweDIsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4MSwg
MHgyLCAweDIsIDB4MX0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9w
aHlfbWFzayhzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSwgdTMyIG9mZnNldCwKKwkJCSAg
ICAgIHUzMiB2YWwsIHUzMiBtYXNrKQoreworCXUzMiB0bXAgPSByZWFkbChoZG1pX3BoeS0+cmVn
cyAgKyBvZmZzZXQpICYgfm1hc2s7CisKKwl0bXAgfD0gKHZhbCAmIG1hc2spOworCXdyaXRlbCh0
bXAsIGhkbWlfcGh5LT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qg
bXRrX2hkbWlfcGh5ICp0b19tdGtfaGRtaV9waHkoc3RydWN0IGNsa19odyAqaHcpCit7CisJcmV0
dXJuIGNvbnRhaW5lcl9vZihodywgc3RydWN0IG10a19oZG1pX3BoeSwgcGxsX2h3KTsKK30KKwor
c3RhdGljIGludCBtdGtfaGRtaV9wbGxfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlz
dHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3BoeShodyk7CisKKwlk
ZXZfZGJnKGhkbWlfcGh5LT5kZXYsICJwcmVwYXJlXG4iKTsKKworCW10a19oZG1pX3BoeV9tYXNr
KGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlUWF9QTExfQVVUT0tfRU4sCisJCQkgIFJHX0hE
TUlUWF9QTExfQVVUT0tfRU4pOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NP
TjAsIFJHX0hETUlUWF9QTExfUE9TRElWLAorCQkJICBSR19IRE1JVFhfUExMX1BPU0RJVik7CisJ
bXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywgMCwgUkdfSERNSVRYX01ITENL
X0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLCBSR19IRE1JVFhf
UExMX0JJQVNfRU4sCisJCQkgIFJHX0hETUlUWF9QTExfQklBU19FTik7CisJdXNsZWVwX3Jhbmdl
KDEwMCwgMTUwKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCBSR19I
RE1JVFhfUExMX0VOLAorCQkJICBSR19IRE1JVFhfUExMX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMTAw
LCAxNTApOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlU
WF9QTExfQklBU19MUEZfRU4sCisJCQkgIFJHX0hETUlUWF9QTExfQklBU19MUEZfRU4pOworCW10
a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlUWF9QTExfVFhESVZf
RU4sCisJCQkgIFJHX0hETUlUWF9QTExfVFhESVZfRU4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0
YXRpYyB2b2lkIG10a19oZG1pX3BsbF91bnByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpCit7CisJ
c3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSB0b19tdGtfaGRtaV9waHkoaHcpOworCisJ
ZGV2X2RiZyhoZG1pX3BoeS0+ZGV2LCAicHJlcGFyZVxuIik7CisKKwltdGtfaGRtaV9waHlfbWFz
ayhoZG1pX3BoeSwgSERNSV9DT04xLCAwLCBSR19IRE1JVFhfUExMX1RYRElWX0VOKTsKKwltdGtf
aGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLCAwLCBSR19IRE1JVFhfUExMX0JJQVNf
TFBGX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworCW10a19oZG1pX3BoeV9tYXNrKGhk
bWlfcGh5LCBIRE1JX0NPTjAsIDAsIFJHX0hETUlUWF9QTExfRU4pOworCXVzbGVlcF9yYW5nZSgx
MDAsIDE1MCk7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwgMCwgUkdf
SERNSVRYX1BMTF9CSUFTX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9D
T04wLCAwLCBSR19IRE1JVFhfUExMX1BPU0RJVik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9w
aHksIEhETUlfQ09OMSwgMCwgUkdfSERNSVRYX1BMTF9BVVRPS19FTik7CisJdXNsZWVwX3Jhbmdl
KDEwMCwgMTUwKTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9wbGxfc2V0X3JhdGUoc3RydWN0
IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBwYXJl
bnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1p
X3BoeShodyk7CisJdW5zaWduZWQgaW50IHByZV9kaXY7CisJdW5zaWduZWQgaW50IGRpdjsKKwor
CWRldl9kYmcoaGRtaV9waHktPmRldiwgInNldCByYXRlIDogJWx1LCBwYXJlbnQ6ICVsdVxuIiwg
cmF0ZSwKKwkJcGFyZW50X3JhdGUpOworCisJaWYgKHJhdGUgPD0gMjcwMDAwMDApIHsKKwkJcHJl
X2RpdiA9IDA7CisJCWRpdiA9IDM7CisJfSBlbHNlIGlmIChyYXRlIDw9IDc0MjUwMDAwKSB7CisJ
CXByZV9kaXYgPSAxOworCQlkaXYgPSAyOworCX0gZWxzZSB7CisJCXByZV9kaXYgPSAxOworCQlk
aXYgPSAxOworCX0KKworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsCisJ
CQkgIChwcmVfZGl2IDw8IFBSRURJVl9TSElGVCksCisJCQkgIFJHX0hETUlUWF9QTExfUFJFRElW
KTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCBSR19IRE1JVFhfUExM
X1BPU0RJViwKKwkJCSAgUkdfSERNSVRYX1BMTF9QT1NESVYpOworCW10a19oZG1pX3BoeV9tYXNr
KGhkbWlfcGh5LCBIRE1JX0NPTjAsCisJCQkgICgweDEgPDwgUExMX0lDX1NISUZUKSB8ICgweDEg
PDwgUExMX0lSX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX1BMTF9JQyB8IFJHX0hETUlUWF9QTExf
SVIpOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsCisJCQkgIChkaXYg
PDwgUExMX1RYRElWX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX1BMTF9UWERJVik7CisJbXRrX2hk
bWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMCwKKwkJCSAgKDB4MSA8PCBQTExfRkJLU0VM
X1NISUZUKSB8ICgxOSA8PCBQTExfRkJLRElWX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX1BMTF9G
QktTRUwgfCBSR19IRE1JVFhfUExMX0ZCS0RJVik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9w
aHksIEhETUlfQ09OMSwKKwkJCSAgKDB4MiA8PCBQTExfRElWRU5fU0hJRlQpLAorCQkJICBSR19I
RE1JVFhfUExMX0RJVkVOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04w
LAorCQkJICAoMHhjIDw8IFBMTF9CUF9TSElGVCkgfCAoMHgyIDw8IFBMTF9CQ19TSElGVCkgfAor
CQkJICAoMHgxIDw8IFBMTF9CUl9TSElGVCksCisJCQkgIFJHX0hETUlUWF9QTExfQlAgfCBSR19I
RE1JVFhfUExMX0JDIHwKKwkJCSAgUkdfSERNSVRYX1BMTF9CUik7CisJbXRrX2hkbWlfcGh5X21h
c2soaGRtaV9waHksIEhETUlfQ09OMywgMCwgUkdfSERNSVRYX1BSRF9JTVBfRU4pOworCW10a19o
ZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjQsCisJCQkgICgweDMgPDwgUFJEX0lCSUFT
X0NMS19TSElGVCkgfAorCQkJICAoMHgzIDw8IFBSRF9JQklBU19EMl9TSElGVCkgfAorCQkJICAo
MHgzIDw8IFBSRF9JQklBU19EMV9TSElGVCkgfAorCQkJICAoMHgzIDw8IFBSRF9JQklBU19EMF9T
SElGVCksCisJCQkgIFJHX0hETUlUWF9QUkRfSUJJQVNfQ0xLIHwKKwkJCSAgUkdfSERNSVRYX1BS
RF9JQklBU19EMiB8CisJCQkgIFJHX0hETUlUWF9QUkRfSUJJQVNfRDEgfAorCQkJICBSR19IRE1J
VFhfUFJEX0lCSUFTX0QwKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04z
LAorCQkJICAoMHgwIDw8IERSVl9JTVBfRU5fU0hJRlQpLAorCQkJICBSR19IRE1JVFhfRFJWX0lN
UF9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09ONiwKKwkJCSAgKGhk
bWlfcGh5LT5kcnZfaW1wX2NsayA8PCBEUlZfSU1QX0NMS19TSElGVCkgfAorCQkJICAoaGRtaV9w
aHktPmRydl9pbXBfZDIgPDwgRFJWX0lNUF9EMl9TSElGVCkgfAorCQkJICAoaGRtaV9waHktPmRy
dl9pbXBfZDEgPDwgRFJWX0lNUF9EMV9TSElGVCkgfAorCQkJICAoaGRtaV9waHktPmRydl9pbXBf
ZDAgPDwgRFJWX0lNUF9EMF9TSElGVCksCisJCQkgIFJHX0hETUlUWF9EUlZfSU1QX0NMSyB8IFJH
X0hETUlUWF9EUlZfSU1QX0QyIHwKKwkJCSAgUkdfSERNSVRYX0RSVl9JTVBfRDEgfCBSR19IRE1J
VFhfRFJWX0lNUF9EMCk7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09ONSwK
KwkJCSAgKGhkbWlfcGh5LT5pYmlhcyA8PCBEUlZfSUJJQVNfQ0xLX1NISUZUKSB8CisJCQkgICho
ZG1pX3BoeS0+aWJpYXMgPDwgRFJWX0lCSUFTX0QyX1NISUZUKSB8CisJCQkgIChoZG1pX3BoeS0+
aWJpYXMgPDwgRFJWX0lCSUFTX0QxX1NISUZUKSB8CisJCQkgIChoZG1pX3BoeS0+aWJpYXMgPDwg
RFJWX0lCSUFTX0QwX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX0RSVl9JQklBU19DTEsgfCBSR19I
RE1JVFhfRFJWX0lCSUFTX0QyIHwKKwkJCSAgUkdfSERNSVRYX0RSVl9JQklBU19EMSB8IFJHX0hE
TUlUWF9EUlZfSUJJQVNfRDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyBtdGtfaGRt
aV9wbGxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAor
CQkJCSAgICB1bnNpZ25lZCBsb25nICpwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlf
cGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3BoeShodyk7CisKKwloZG1pX3BoeS0+cGxsX3Jh
dGUgPSByYXRlOworCWlmIChyYXRlIDw9IDc0MjUwMDAwKQorCQkqcGFyZW50X3JhdGUgPSByYXRl
OworCWVsc2UKKwkJKnBhcmVudF9yYXRlID0gcmF0ZSAvIDI7CisKKwlyZXR1cm4gcmF0ZTsKK30K
Kworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXRrX2hkbWlfcGxsX3JlY2FsY19yYXRlKHN0cnVjdCBj
bGtfaHcgKmh3LAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0
cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRrX2hkbWlfcGh5KGh3KTsKKworCXJl
dHVybiBoZG1pX3BoeS0+cGxsX3JhdGU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29w
cyBtdGtfaGRtaV9wbGxfb3BzID0geworCS5wcmVwYXJlID0gbXRrX2hkbWlfcGxsX3ByZXBhcmUs
CisJLnVucHJlcGFyZSA9IG10a19oZG1pX3BsbF91bnByZXBhcmUsCisJLnNldF9yYXRlID0gbXRr
X2hkbWlfcGxsX3NldF9yYXRlLAorCS5yb3VuZF9yYXRlID0gbXRrX2hkbWlfcGxsX3JvdW5kX3Jh
dGUsCisJLnJlY2FsY19yYXRlID0gbXRrX2hkbWlfcGxsX3JlY2FsY19yYXRlLAorfTsKKworc3Rh
dGljIHZvaWQgbXRrX2hkbWlfcGh5X2VuYWJsZV90bWRzKHN0cnVjdCBtdGtfaGRtaV9waHkgKmhk
bWlfcGh5KQoreworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjMsIFJHX0hE
TUlUWF9TRVJfRU4sCisJCQkgIFJHX0hETUlUWF9TRVJfRU4pOworCW10a19oZG1pX3BoeV9tYXNr
KGhkbWlfcGh5LCBIRE1JX0NPTjMsIFJHX0hETUlUWF9QUkRfRU4sCisJCQkgIFJHX0hETUlUWF9Q
UkRfRU4pOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjMsIFJHX0hETUlU
WF9EUlZfRU4sCisJCQkgIFJHX0hETUlUWF9EUlZfRU4pOworCXVzbGVlcF9yYW5nZSgxMDAsIDE1
MCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3BoeV9kaXNhYmxlX3RtZHMoc3RydWN0IG10
a19oZG1pX3BoeSAqaGRtaV9waHkpCit7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhE
TUlfQ09OMywgMCwgUkdfSERNSVRYX0RSVl9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9w
aHksIEhETUlfQ09OMywgMCwgUkdfSERNSVRYX1BSRF9FTik7CisJbXRrX2hkbWlfcGh5X21hc2so
aGRtaV9waHksIEhETUlfQ09OMywgMCwgUkdfSERNSVRYX1NFUl9FTik7Cit9CisKK3N0YXRpYyBp
bnQgbXRrX2hkbWlfcGh5X3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRr
X2hkbWlfcGh5ICpoZG1pX3BoeSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCWludCByZXQ7CisK
KwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaGRtaV9waHktPnBsbCk7CisJaWYgKHJldCA8IDAp
CisJCXJldHVybiByZXQ7CisKKwltdGtfaGRtaV9waHlfZW5hYmxlX3RtZHMoaGRtaV9waHkpOwor
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3Bvd2VyX29mZihzdHJ1
Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSBwaHlfZ2V0
X2RydmRhdGEocGh5KTsKKworCW10a19oZG1pX3BoeV9kaXNhYmxlX3RtZHMoaGRtaV9waHkpOwor
CWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pX3BoeS0+cGxsKTsKKworCXJldHVybiAwOworfQor
CitzdGF0aWMgc3RydWN0IHBoeV9vcHMgbXRrX2hkbWlfcGh5X29wcyA9IHsKKwkucG93ZXJfb24g
PSBtdGtfaGRtaV9waHlfcG93ZXJfb24sCisJLnBvd2VyX29mZiA9IG10a19oZG1pX3BoeV9wb3dl
cl9vZmYsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IG10a19oZG1p
X3BoeV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZp
Y2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHk7CisJ
c3RydWN0IHJlc291cmNlICptZW07CisJc3RydWN0IGNsayAqcmVmX2NsazsKKwljb25zdCBjaGFy
ICpyZWZfY2xrX25hbWU7CisJc3RydWN0IGNsa19pbml0X2RhdGEgY2xrX2luaXQgPSB7CisJCS5v
cHMgPSAmbXRrX2hkbWlfcGxsX29wcywKKwkJLm51bV9wYXJlbnRzID0gMSwKKwkJLnBhcmVudF9u
YW1lcyA9IChjb25zdCBjaGFyICogY29uc3QgKikmcmVmX2Nsa19uYW1lLAorCQkuZmxhZ3MgPSBD
TEtfU0VUX1JBVEVfUEFSRU5UIHwgQ0xLX1NFVF9SQVRFX0dBVEUsCisJfTsKKwlzdHJ1Y3QgcGh5
ICpwaHk7CisJc3RydWN0IHBoeV9wcm92aWRlciAqcGh5X3Byb3ZpZGVyOworCWludCByZXQ7CisK
KwloZG1pX3BoeSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaGRtaV9waHkpLCBHRlBfS0VS
TkVMKTsKKwlpZiAoIWhkbWlfcGh5KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbSA9IHBsYXRm
b3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaGRtaV9waHktPnJl
Z3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19FUlIoaGRtaV9w
aHktPnJlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIoaGRtaV9waHktPnJlZ3MpOworCQlkZXZfZXJy
KGRldiwgIkZhaWxlZCB0byBnZXQgbWVtb3J5IHJlc291cmNlOiAlZFxuIiwgcmV0KTsKKwkJcmV0
dXJuIHJldDsKKwl9CisKKwlyZWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBsbF9yZWYiKTsK
KwlpZiAoSVNfRVJSKHJlZl9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIocmVmX2Nsayk7CisJCWRl
dl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgUExMIHJlZmVyZW5jZSBjbG9jazogJWRc
biIsCisJCQlyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZWZfY2xrX25hbWUgPSBfX2Nsa19n
ZXRfbmFtZShyZWZfY2xrKTsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldi0+
b2Zfbm9kZSwgImNsb2NrLW91dHB1dC1uYW1lcyIsCisJCQkJICAgICAgJmNsa19pbml0Lm5hbWUp
OworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgY2xvY2st
b3V0cHV0LW5hbWVzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwloZG1pX3Bo
eS0+cGxsX2h3LmluaXQgPSAmY2xrX2luaXQ7CisJaGRtaV9waHktPnBsbCA9IGRldm1fY2xrX3Jl
Z2lzdGVyKGRldiwgJmhkbWlfcGh5LT5wbGxfaHcpOworCWlmIChJU19FUlIoaGRtaV9waHktPnBs
bCkpIHsKKwkJcmV0ID0gUFRSX0VSUihoZG1pX3BoeS0+cGxsKTsKKwkJZGV2X2VycihkZXYsICJG
YWlsZWQgdG8gcmVnaXN0ZXIgUExMOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK
KwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJtZWRpYXRlayxpYmlh
cyIsCisJCQkJICAgJmhkbWlfcGh5LT5pYmlhcyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vy
cigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBpYmlhczogJWRcbiIsIHJldCk7CisJCXJldHVy
biByZXQ7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LT5vZl9ub2RlLCAi
bWVkaWF0ZWssaWJpYXNfdXAiLAorCQkJCSAgICZoZG1pX3BoeS0+aWJpYXNfdXApOworCWlmIChy
ZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgaWJpYXMgdXA6
ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9pbmZvKGRldiwgIlVzaW5n
IGRlZmF1bHQgVFggRFJWIGltcGVkYW5jZTogNC4yay8zNlxuIik7CisJaGRtaV9waHktPmRydl9p
bXBfY2xrID0gMHgzMDsKKwloZG1pX3BoeS0+ZHJ2X2ltcF9kMiA9IDB4MzA7CisJaGRtaV9waHkt
PmRydl9pbXBfZDEgPSAweDMwOworCWhkbWlfcGh5LT5kcnZfaW1wX2QwID0gMHgzMDsKKworCXBo
eSA9IGRldm1fcGh5X2NyZWF0ZShkZXYsIE5VTEwsICZtdGtfaGRtaV9waHlfb3BzKTsKKwlpZiAo
SVNfRVJSKHBoeSkpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gY3JlYXRlIEhETUkgUEhZ
XG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGh5KTsKKwl9CisJcGh5X3NldF9kcnZkYXRhKHBoeSwg
aGRtaV9waHkpOworCisJcGh5X3Byb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0
ZXIoZGV2LCBvZl9waHlfc2ltcGxlX3hsYXRlKTsKKwlpZiAoSVNfRVJSKHBoeV9wcm92aWRlcikp
CisJCXJldHVybiBQVFJfRVJSKHBoeV9wcm92aWRlcik7CisKKwloZG1pX3BoeS0+ZGV2ID0gZGV2
OworCXJldHVybiBvZl9jbGtfYWRkX3Byb3ZpZGVyKGRldi0+b2Zfbm9kZSwgb2ZfY2xrX3NyY19z
aW1wbGVfZ2V0LAorCQkJCSAgIGhkbWlfcGh5LT5wbGwpOworfQorCitzdGF0aWMgaW50IG10a19o
ZG1pX3BoeV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2hkbWlfcGh5X21h
dGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtaGRtaS1waHkiLCB9
LAorCXt9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9waHlfZHJpdmVy
ID0geworCS5wcm9iZSA9IG10a19oZG1pX3BoeV9wcm9iZSwKKwkucmVtb3ZlID0gbXRrX2hkbWlf
cGh5X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1oZG1pLXBoeSIs
CisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19oZG1pX3BoeV9tYXRjaCwKKwl9LAorfTsKKworTU9E
VUxFX0FVVEhPUigiSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+Iik7CitNT0RVTEVfREVT
Q1JJUFRJT04oIk1lZGlhVGVrIE1UODE3MyBIRE1JIFBIWSBEcml2ZXIiKTsKK01PRFVMRV9MSUNF
TlNFKCJHUEwgdjIiKTsKLS0gCjIuNy4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m
cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0
aW5mby9kcmktZGV2ZWwK