From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v14 2/6] drm/mediatek: Add HDMI support
Date: Mon, 11 Apr 2016 17:10:12 +0200
Message-ID: <1460387416-31254-3-git-send-email-p.zabel@pengutronix.de>
References: <1460387416-31254-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: <1460387416-31254-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: devicetree@vger.kernel.org
RnJvbTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CgpUaGlzIHBhdGNoIGFkZHMgZHJp
dmVycyBmb3IgdGhlIEhETUkgYnJpZGdlIGNvbm5lY3RlZCB0byB0aGUgRFBJMApkaXNwbGF5IHN1
YnN5c3RlbSBmdW5jdGlvbiBibG9jaywgZm9yIHRoZSBIRE1JIEREQyBibG9jaywgYW5kIGZvcgp0
aGUgSERNSSBQSFkgdG8gc3VwcG9ydCBIRE1JIG91dHB1dC4KClNpZ25lZC1vZmYtYnk6IEppZSBR
aXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgpTaWduZWQtb2ZmLWJ5OiBQaGlsaXBwIFphYmVsIDxw
LnphYmVsQHBlbmd1dHJvbml4LmRlPgotLS0KQ2hhbmdlcyBzaW5jZSB2MTM6CiAtIERvbid0IGRp
c2FibGUgb3V0cHV0IGluIHN1c3BlbmQvcmVzdW1lCiAtIENvbWJpbmUgaGRtaSBicmlkZ2UgZHJp
dmVyIGludG8gbXRrX2hkbWkuYwogLSBSZW1vdmUgbXRrX2NlY19pcnEKIC0gQWRkIFBIWSBzZXQv
Y2xlYXJfYml0IHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMKIC0gUmVuYW1lIGhkbWlfaTJjIHRv
IGhkbWlfZGRjIGZvciBjb25zaXN0ZW5jeQogLSBUcmFjayBicmlkZ2UgZW5hYmxlIHN0YXRlCiAt
IFZhcmlvdXMgY2xlYW51cCBhbmQgZml4ZXMKLS0tCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
S2NvbmZpZyAgICAgICAgICAgICAgIHwgICAgNyArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
TWFrZWZpbGUgICAgICAgICAgICAgIHwgICAgNyArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2NlYy5jICAgICAgICAgICAgIHwgIDI2NSArKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2NlYy5oICAgICAgICAgICAgIHwgICAyNiArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2hkbWkuYyAgICAgICAgICAgIHwgMTc1MCArKysrKysrKysrKysrKysrKysrKysrKysK
IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oICAgICAgICAgICAgfCAgIDIzICsK
IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9kZGMuYyAgICAgICAgfCAgMzU4ICsr
KysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oICAgICAgIHwgIDIz
NyArKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19oZG1pX3BoeS5jIHwg
IDUxNSArKysrKysrCiA5IGZpbGVzIGNoYW5nZWQsIDMxODggaW5zZXJ0aW9ucygrKQogY3JlYXRl
IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmMKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuaAogY3JlYXRlIG1vZGUg
MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9kZGMuYwogY3JlYXRlIG1v
ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmgKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19oZG1pX3Bo
eS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgYi9kcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwppbmRleCAwYzQ5YTk0Li5lMmZmMTU4IDEwMDY0
NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZworKysgYi9kcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpAQCAtMTIsMyArMTIsMTAgQEAgY29uZmlnIERSTV9NRURJ
QVRFSwogCSAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtZWRpYXRlay1kcm0KIAkgIFRoaXMg
ZHJpdmVyIHByb3ZpZGVzIGtlcm5lbCBtb2RlIHNldHRpbmcgYW5kCiAJICBidWZmZXIgbWFuYWdl
bWVudCB0byB1c2Vyc3BhY2UuCisKK2NvbmZpZyBEUk1fTUVESUFURUtfSERNSQorCXRyaXN0YXRl
ICJEUk0gSERNSSBTdXBwb3J0IGZvciBNZWRpYXRlayBTb0NzIgorCWRlcGVuZHMgb24gRFJNX01F
RElBVEVLCisJc2VsZWN0IEdFTkVSSUNfUEhZCisJaGVscAorCSAgRFJNL0tNUyBIRE1JIGRyaXZl
ciBmb3IgTWVkaWF0ZWsgU29DcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCmluZGV4IDVmY2Y1
OGUuLmJmMmU1YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmls
ZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTEyLDMgKzEyLDEw
IEBAIG1lZGlhdGVrLWRybS15IDo9IG10a19kaXNwX292bC5vIFwKIAkJICBtdGtfZHBpLm8KIAog
b2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykgKz0gbWVkaWF0ZWstZHJtLm8KKworbWVkaWF0ZWst
ZHJtLWhkbWktb2JqcyA6PSBtdGtfY2VjLm8gXAorCQkJICBtdGtfaGRtaS5vIFwKKwkJCSAgbXRr
X2hkbWlfZGRjLm8gXAorCQkJICBtdGtfbXQ4MTczX2hkbWlfcGh5Lm8KKworb2JqLSQoQ09ORklH
X0RSTV9NRURJQVRFS19IRE1JKSArPSBtZWRpYXRlay1kcm0taGRtaS5vCmRpZmYgLS1naXQgYS9k
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL210a19jZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTNlYjhj
Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMuYwpA
QCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMu
CisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4
L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4K
KyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k
ZXZpY2UuaD4KKworI2luY2x1ZGUgIm10a19jZWMuaCIKKworI2RlZmluZSBUUl9DT05GSUcJCTB4
MDAKKyNkZWZpbmUgQ0xFQVJfQ0VDX0lSUQkJCUJJVCgxNSkKKworI2RlZmluZSBDRUNfQ0tHRU4J
CTB4MDQKKyNkZWZpbmUgQ0VDXzMyS19QRE4JCQlCSVQoMTkpCisjZGVmaW5lIFBETgkJCQlCSVQo
MTYpCisKKyNkZWZpbmUgUlhfRVZFTlQJCTB4NTQKKyNkZWZpbmUgSERNSV9QT1JECQkJQklUKDI1
KQorI2RlZmluZSBIRE1JX0hUUExHCQkJQklUKDI0KQorI2RlZmluZSBIRE1JX1BPUkRfSU5UX0VO
CQlCSVQoOSkKKyNkZWZpbmUgSERNSV9IVFBMR19JTlRfRU4JCUJJVCg4KQorCisjZGVmaW5lIFJY
X0dFTl9XRAkJMHg1OAorI2RlZmluZSBIRE1JX1BPUkRfSU5UXzMyS19TVEFUVVMJQklUKDI2KQor
I2RlZmluZSBSWF9SSVNDX0lOVF8zMktfU1RBVFVTCQlCSVQoMjUpCisjZGVmaW5lIEhETUlfSFRQ
TEdfSU5UXzMyS19TVEFUVVMJQklUKDI0KQorI2RlZmluZSBIRE1JX1BPUkRfSU5UXzMyS19DTFIJ
CUJJVCgxOCkKKyNkZWZpbmUgUlhfSU5UXzMyS19DTFIJCQlCSVQoMTcpCisjZGVmaW5lIEhETUlf
SFRQTEdfSU5UXzMyS19DTFIJCUJJVCgxNikKKyNkZWZpbmUgSERNSV9QT1JEX0lOVF8zMktfU1RB
X01BU0sJQklUKDEwKQorI2RlZmluZSBSWF9SSVNDX0lOVF8zMktfU1RBX01BU0sJQklUKDkpCisj
ZGVmaW5lIEhETUlfSFRQTEdfSU5UXzMyS19TVEFfTUFTSwlCSVQoOCkKKyNkZWZpbmUgSERNSV9Q
T1JEX0lOVF8zMktfRU4JCUJJVCgyKQorI2RlZmluZSBSWF9JTlRfMzJLX0VOCQkJQklUKDEpCisj
ZGVmaW5lIEhETUlfSFRQTEdfSU5UXzMyS19FTgkJQklUKDApCisKKyNkZWZpbmUgTk9STUFMX0lO
VF9DVFJMCQkweDVDCisjZGVmaW5lIEhETUlfSFRQTEdfSU5UX1NUQQkJQklUKDApCisjZGVmaW5l
IEhETUlfUE9SRF9JTlRfU1RBCQlCSVQoMSkKKyNkZWZpbmUgSERNSV9IVFBMR19JTlRfQ0xSCQlC
SVQoMTYpCisjZGVmaW5lIEhETUlfUE9SRF9JTlRfQ0xSCQlCSVQoMTcpCisjZGVmaW5lIEhETUlf
RlVMTF9JTlRfQ0xSCQlCSVQoMjApCisKK3N0cnVjdCBtdGtfY2VjIHsKKwl2b2lkIF9faW9tZW0g
KnJlZ3M7CisJc3RydWN0IGNsayAqY2xrOworCWludCBpcnE7CisJYm9vbCBocGQ7CisJdm9pZCAo
KmhwZF9ldmVudCkoYm9vbCBocGQsIHN0cnVjdCBkZXZpY2UgKmRldik7CisJc3RydWN0IGRldmlj
ZSAqaGRtaV9kZXY7CisJc3BpbmxvY2tfdCBsb2NrOworfTsKKworc3RhdGljIHZvaWQgbXRrX2Nl
Y19jbGVhcl9iaXRzKHN0cnVjdCBtdGtfY2VjICpjZWMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJ
CQkgICAgICAgdW5zaWduZWQgaW50IGJpdHMpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBjZWMt
PnJlZ3MgKyBvZmZzZXQ7CisJdTMyIHRtcDsKKworCXRtcCA9IHJlYWRsKHJlZyk7CisJdG1wICY9
IH5iaXRzOworCXdyaXRlbCh0bXAsIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNfc2V0
X2JpdHMoc3RydWN0IG10a19jZWMgKmNlYywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgICAg
dW5zaWduZWQgaW50IGJpdHMpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBjZWMtPnJlZ3MgKyBv
ZmZzZXQ7CisJdTMyIHRtcDsKKworCXRtcCA9IHJlYWRsKHJlZyk7CisJdG1wIHw9IGJpdHM7CisJ
d3JpdGVsKHRtcCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2NlY19tYXNrKHN0cnVjdCBt
dGtfY2VjICpjZWMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkgdW5zaWduZWQgaW50IHZhbCwg
dW5zaWduZWQgaW50IG1hc2spCit7CisJdTMyIHRtcCA9IHJlYWRsKGNlYy0+cmVncyArIG9mZnNl
dCkgJiB+bWFzazsKKworCXRtcCB8PSB2YWwgJiBtYXNrOworCXdyaXRlbCh2YWwsIGNlYy0+cmVn
cyArIG9mZnNldCk7Cit9CisKK3ZvaWQgbXRrX2NlY19zZXRfaHBkX2V2ZW50KHN0cnVjdCBkZXZp
Y2UgKmRldiwKKwkJCSAgIHZvaWQgKCpocGRfZXZlbnQpKGJvb2wgaHBkLCBzdHJ1Y3QgZGV2aWNl
ICpkZXYpLAorCQkJICAgc3RydWN0IGRldmljZSAqaGRtaV9kZXYpCit7CisJc3RydWN0IG10a19j
ZWMgKmNlYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisK
KwlzcGluX2xvY2tfaXJxc2F2ZSgmY2VjLT5sb2NrLCBmbGFncyk7CisJY2VjLT5oZG1pX2RldiA9
IGhkbWlfZGV2OworCWNlYy0+aHBkX2V2ZW50ID0gaHBkX2V2ZW50OworCXNwaW5fdW5sb2NrX2ly
cXJlc3RvcmUoJmNlYy0+bG9jaywgZmxhZ3MpOworfQorCitib29sIG10a19jZWNfaHBkX2hpZ2go
c3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfY2VjICpjZWMgPSBkZXZfZ2V0X2Ry
dmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJc3RhdHVzID0gcmVhZGwoY2Vj
LT5yZWdzICsgUlhfRVZFTlQpOworCisJcmV0dXJuIChzdGF0dXMgJiAoSERNSV9QT1JEIHwgSERN
SV9IVFBMRykpID09IChIRE1JX1BPUkQgfCBIRE1JX0hUUExHKTsKK30KKworc3RhdGljIHZvaWQg
bXRrX2NlY19odHBsZ19pcnFfaW5pdChzdHJ1Y3QgbXRrX2NlYyAqY2VjKQoreworCW10a19jZWNf
bWFzayhjZWMsIENFQ19DS0dFTiwgMCB8IENFQ18zMktfUEROLCBQRE4gfCBDRUNfMzJLX1BETik7
CisJbXRrX2NlY19zZXRfYml0cyhjZWMsIFJYX0dFTl9XRCwgSERNSV9QT1JEX0lOVF8zMktfQ0xS
IHwKKwkJCSBSWF9JTlRfMzJLX0NMUiB8IEhETUlfSFRQTEdfSU5UXzMyS19DTFIpOworCW10a19j
ZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgSERNSV9QT1JEX0lOVF8zMktfQ0xSIHwgUlhfSU5U
XzMyS19DTFIgfAorCQkgICAgIEhETUlfSFRQTEdfSU5UXzMyS19DTFIgfCBIRE1JX1BPUkRfSU5U
XzMyS19FTiB8CisJCSAgICAgUlhfSU5UXzMyS19FTiB8IEhETUlfSFRQTEdfSU5UXzMyS19FTik7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNfaHRwbGdfaXJxX2VuYWJsZShzdHJ1Y3QgbXRrX2Nl
YyAqY2VjKQoreworCW10a19jZWNfc2V0X2JpdHMoY2VjLCBSWF9FVkVOVCwgSERNSV9QT1JEX0lO
VF9FTiB8IEhETUlfSFRQTEdfSU5UX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2NlY19odHBs
Z19pcnFfZGlzYWJsZShzdHJ1Y3QgbXRrX2NlYyAqY2VjKQoreworCW10a19jZWNfY2xlYXJfYml0
cyhjZWMsIFJYX0VWRU5ULCBIRE1JX1BPUkRfSU5UX0VOIHwgSERNSV9IVFBMR19JTlRfRU4pOwor
fQorCitzdGF0aWMgdm9pZCBtdGtfY2VjX2NsZWFyX2h0cGxnX2lycShzdHJ1Y3QgbXRrX2NlYyAq
Y2VjKQoreworCW10a19jZWNfc2V0X2JpdHMoY2VjLCBUUl9DT05GSUcsIENMRUFSX0NFQ19JUlEp
OworCW10a19jZWNfc2V0X2JpdHMoY2VjLCBOT1JNQUxfSU5UX0NUUkwsIEhETUlfSFRQTEdfSU5U
X0NMUiB8CisJCQkgSERNSV9QT1JEX0lOVF9DTFIgfCBIRE1JX0ZVTExfSU5UX0NMUik7CisJbXRr
X2NlY19zZXRfYml0cyhjZWMsIFJYX0dFTl9XRCwgSERNSV9QT1JEX0lOVF8zMktfQ0xSIHwKKwkJ
CSBSWF9JTlRfMzJLX0NMUiB8IEhETUlfSFRQTEdfSU5UXzMyS19DTFIpOworCXVzbGVlcF9yYW5n
ZSg1LCAxMCk7CisJbXRrX2NlY19jbGVhcl9iaXRzKGNlYywgTk9STUFMX0lOVF9DVFJMLCBIRE1J
X0hUUExHX0lOVF9DTFIgfAorCQkJICAgSERNSV9QT1JEX0lOVF9DTFIgfCBIRE1JX0ZVTExfSU5U
X0NMUik7CisJbXRrX2NlY19jbGVhcl9iaXRzKGNlYywgVFJfQ09ORklHLCBDTEVBUl9DRUNfSVJR
KTsKKwltdGtfY2VjX2NsZWFyX2JpdHMoY2VjLCBSWF9HRU5fV0QsIEhETUlfUE9SRF9JTlRfMzJL
X0NMUiB8CisJCQkgICBSWF9JTlRfMzJLX0NMUiB8IEhETUlfSFRQTEdfSU5UXzMyS19DTFIpOwor
fQorCitzdGF0aWMgdm9pZCBtdGtfY2VjX2hwZF9ldmVudChzdHJ1Y3QgbXRrX2NlYyAqY2VjLCBi
b29sIGhwZCkKK3sKKwl2b2lkICgqaHBkX2V2ZW50KShib29sIGhwZCwgc3RydWN0IGRldmljZSAq
ZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpoZG1pX2RldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwor
CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNlYy0+bG9jaywgZmxhZ3MpOworCWhwZF9ldmVudCA9IGNl
Yy0+aHBkX2V2ZW50OworCWhkbWlfZGV2ID0gY2VjLT5oZG1pX2RldjsKKwlzcGluX3VubG9ja19p
cnFyZXN0b3JlKCZjZWMtPmxvY2ssIGZsYWdzKTsKKworCWlmIChocGRfZXZlbnQpCisJCWhwZF9l
dmVudChocGQsIGhkbWlfZGV2KTsKK30KKworc3RhdGljIGlycXJldHVybl90IG10a19jZWNfaHRw
bGdfaXNyX3RocmVhZChpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRldmljZSAqZGV2
ID0gYXJnOworCXN0cnVjdCBtdGtfY2VjICpjZWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwli
b29sIGhwZDsKKworCW10a19jZWNfY2xlYXJfaHRwbGdfaXJxKGNlYyk7CisJaHBkID0gbXRrX2Nl
Y19ocGRfaGlnaChkZXYpOworCisJaWYgKGNlYy0+aHBkICE9IGhwZCkgeworCQlkZXZfZGJnKGRl
diwgImhvdHBsdWcgZXZlbnQhIGN1ciBocGQgPSAlZCwgaHBkID0gJWRcbiIsCisJCQljZWMtPmhw
ZCwgaHBkKTsKKwkJY2VjLT5ocGQgPSBocGQ7CisJCW10a19jZWNfaHBkX2V2ZW50KGNlYywgaHBk
KTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG10a19jZWNfcHJv
YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYg
PSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfY2VjICpjZWM7CisJc3RydWN0IHJlc291cmNlICpy
ZXM7CisJaW50IHJldDsKKworCWNlYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY2VjKSwg
R0ZQX0tFUk5FTCk7CisJaWYgKCFjZWMpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1f
c2V0X2RydmRhdGEocGRldiwgY2VjKTsKKwlzcGluX2xvY2tfaW5pdCgmY2VjLT5sb2NrKTsKKwor
CXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJ
Y2VjLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJS
KGNlYy0+cmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihjZWMtPnJlZ3MpOworCQlkZXZfZXJyKGRl
diwgIkZhaWxlZCB0byBpb3JlbWFwIGNlYzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ
fQorCisJY2VjLT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGNl
Yy0+Y2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGNlYy0+Y2xrKTsKKwkJZGV2X2VycihkZXYsICJG
YWlsZWQgdG8gZ2V0IGNlYyBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQor
CisJY2VjLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChjZWMtPmlycSA8
IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNlYyBpcnE6ICVkXG4iLCBjZWMt
PmlycSk7CisJCXJldHVybiBjZWMtPmlycTsKKwl9CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhy
ZWFkZWRfaXJxKGRldiwgY2VjLT5pcnEsIE5VTEwsCisJCQkJCW10a19jZWNfaHRwbGdfaXNyX3Ro
cmVhZCwKKwkJCQkJSVJRRl9TSEFSRUQgfCBJUlFGX1RSSUdHRVJfTE9XIHwKKwkJCQkJSVJRRl9P
TkVTSE9ULCAiaGRtaSBocGQiLCBkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJG
YWlsZWQgdG8gcmVnaXN0ZXIgY2VjIGlycTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ
fQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNlYy0+Y2xrKTsKKwlpZiAocmV0KSB7CisJ
CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBjZWMgY2xvY2s6ICVkXG4iLCByZXQpOwor
CQlyZXR1cm4gcmV0OworCX0KKworCW10a19jZWNfaHRwbGdfaXJxX2luaXQoY2VjKTsKKwltdGtf
Y2VjX2h0cGxnX2lycV9lbmFibGUoY2VjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50
IG10a19jZWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0
IG10a19jZWMgKmNlYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbXRrX2NlY19o
dHBsZ19pcnFfZGlzYWJsZShjZWMpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShjZWMtPmNsayk7
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19j
ZWNfb2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtY2VjIiwg
fSwKKwl7fQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfY2VjX2RyaXZlciA9IHsK
KwkucHJvYmUgPSBtdGtfY2VjX3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfY2VjX3JlbW92ZSwKKwku
ZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1jZWMiLAorCQkub2ZfbWF0Y2hfdGFibGUg
PSBtdGtfY2VjX29mX2lkcywKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfY2VjLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMDU3YjcKLS0tIC9kZXYvbnVsbAor
KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oCkBAIC0wLDAgKzEsMjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUg
UWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg
YXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX01US19DRUNfSAorI2RlZmluZSBfTVRL
X0NFQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgZGV2aWNlOworCit2
b2lkIG10a19jZWNfc2V0X2hwZF9ldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICB2b2lk
ICgqaG90cGx1Z19ldmVudCkoYm9vbCBocGQsIHN0cnVjdCBkZXZpY2UgKmRldiksCisJCQkgICBz
dHJ1Y3QgZGV2aWNlICpoZG1pX2Rldik7Citib29sIG10a19jZWNfaHBkX2hpZ2goc3RydWN0IGRl
dmljZSAqZGV2KTsKKworI2VuZGlmIC8qIF9NVEtfQ0VDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19oZG1pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkNGMwMQot
LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5jCkBA
IC0wLDAgKzEsMTc1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMu
CisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGRybS9k
cm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJt
L2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUg
PGRybS9kcm1fZWRpZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4
L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaGRtaS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5o
PgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5j
bHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+
CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CisjaW5j
bHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisjaW5j
bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+
CisjaW5jbHVkZSAibXRrX2NlYy5oIgorI2luY2x1ZGUgIm10a19oZG1pLmgiCisjaW5jbHVkZSAi
bXRrX2hkbWlfcmVncy5oIgorCisjZGVmaW5lIE5DVFNfQllURVMJNworCitlbnVtIG10a19oZG1p
X2Nsa19pZCB7CisJTVRLX0hETUlfQ0xLX0hETUlfUElYRUwsCisJTVRLX0hETUlfQ0xLX0hETUlf
UExMLAorCU1US19IRE1JX0NMS19BVURfQkNMSywKKwlNVEtfSERNSV9DTEtfQVVEX1NQRElGLAor
CU1US19IRE1JX0NMS19DT1VOVAorfTsKKworZW51bSBoZG1pX2F1ZF9pbnB1dF90eXBlIHsKKwlI
RE1JX0FVRF9JTlBVVF9JMlMgPSAwLAorCUhETUlfQVVEX0lOUFVUX1NQRElGLAorfTsKKworZW51
bSBoZG1pX2F1ZF9pMnNfZm10IHsKKwlIRE1JX0kyU19NT0RFX1JKVF8yNEJJVCA9IDAsCisJSERN
SV9JMlNfTU9ERV9SSlRfMTZCSVQsCisJSERNSV9JMlNfTU9ERV9MSlRfMjRCSVQsCisJSERNSV9J
MlNfTU9ERV9MSlRfMTZCSVQsCisJSERNSV9JMlNfTU9ERV9JMlNfMjRCSVQsCisJSERNSV9JMlNf
TU9ERV9JMlNfMTZCSVQKK307CisKK2VudW0gaGRtaV9hdWRfbWNsayB7CisJSERNSV9BVURfTUNM
S18xMjhGUywKKwlIRE1JX0FVRF9NQ0xLXzE5MkZTLAorCUhETUlfQVVEX01DTEtfMjU2RlMsCisJ
SERNSV9BVURfTUNMS18zODRGUywKKwlIRE1JX0FVRF9NQ0xLXzUxMkZTLAorCUhETUlfQVVEX01D
TEtfNzY4RlMsCisJSERNSV9BVURfTUNMS18xMTUyRlMsCit9OworCitlbnVtIGhkbWlfYXVkX2ll
Y19mcmFtZV9yYXRlIHsKKwlIRE1JX0lFQ18zMksgPSAwLAorCUhETUlfSUVDXzk2SywKKwlIRE1J
X0lFQ18xOTJLLAorCUhETUlfSUVDXzc2OEssCisJSERNSV9JRUNfNDRLLAorCUhETUlfSUVDXzg4
SywKKwlIRE1JX0lFQ18xNzZLLAorCUhETUlfSUVDXzcwNUssCisJSERNSV9JRUNfMTZLLAorCUhE
TUlfSUVDXzIySywKKwlIRE1JX0lFQ18yNEssCisJSERNSV9JRUNfNDhLLAorfTsKKworZW51bSBo
ZG1pX2F1ZF9jaGFubmVsX3R5cGUgeworCUhETUlfQVVEX0NIQU5fVFlQRV8xXzAgPSAwLAorCUhE
TUlfQVVEX0NIQU5fVFlQRV8xXzEsCisJSERNSV9BVURfQ0hBTl9UWVBFXzJfMCwKKwlIRE1JX0FV
RF9DSEFOX1RZUEVfMl8xLAorCUhETUlfQVVEX0NIQU5fVFlQRV8zXzAsCisJSERNSV9BVURfQ0hB
Tl9UWVBFXzNfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNF8wLAorCUhETUlfQVVEX0NIQU5fVFlQ
RV80XzEsCisJSERNSV9BVURfQ0hBTl9UWVBFXzVfMCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNV8x
LAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMSwKKwlI
RE1JX0FVRF9DSEFOX1RZUEVfN18wLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzEsCisJSERNSV9B
VURfQ0hBTl9UWVBFXzNfMF9MUlMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzNfMV9MUlMsCisJSERN
SV9BVURfQ0hBTl9UWVBFXzRfMF9DTFJTLAorCUhETUlfQVVEX0NIQU5fVFlQRV80XzFfQ0xSUywK
KwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX0NTLAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ0gs
CisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9PSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX0NI
UiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIX1JILAorCUhETUlfQVVEX0NIQU5fVFlQRV83
XzFfTFNSX1JTUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xDX1JDLAorCUhETUlfQVVEX0NI
QU5fVFlQRV83XzFfTFdfUlcsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU0RfUlNELAorCUhE
TUlfQVVEX0NIQU5fVFlQRV83XzFfTFNTX1JTUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xI
U19SSFMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19DSCwKKwlIRE1JX0FVRF9DSEFOX1RZ
UEVfN18xX0NTX09ILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfQ0hSLAorCUhETUlfQVVE
X0NIQU5fVFlQRV83XzFfQ0hfT0gsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DSF9DSFIsCisJ
SERNSV9BVURfQ0hBTl9UWVBFXzdfMV9PSF9DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9M
U1NfUlNTX0xTUl9SU1IsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMF9DUywKKwlIRE1JX0FVRF9D
SEFOX1RZUEVfNl8wX0NILAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzBfT0gsCisJSERNSV9BVURf
Q0hBTl9UWVBFXzZfMF9DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSF9SSCwKKwlIRE1J
X0FVRF9DSEFOX1RZUEVfN18wX0xTUl9SU1IsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MQ19S
QywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xXX1JXLAorCUhETUlfQVVEX0NIQU5fVFlQRV83
XzBfTFNEX1JTRCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTU19SU1MsCisJSERNSV9BVURf
Q0hBTl9UWVBFXzdfMF9MSFNfUkhTLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfQ0gsCisJ
SERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DU19PSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NT
X0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NIX09ILAorCUhETUlfQVVEX0NIQU5fVFlQ
RV83XzBfQ0hfQ0hSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfT0hfQ0hSLAorCUhETUlfQVVE
X0NIQU5fVFlQRV83XzBfTFNTX1JTU19MU1JfUlNSLAorCUhETUlfQVVEX0NIQU5fVFlQRV84XzBf
TEhfUkhfQ1MsCisJSERNSV9BVURfQ0hBTl9UWVBFX1VOS05PV04gPSAweEZGCit9OworCitlbnVt
IGhkbWlfYXVkX2NoYW5uZWxfc3dhcF90eXBlIHsKKwlIRE1JX0FVRF9TV0FQX0xSLAorCUhETUlf
QVVEX1NXQVBfTEZFX0NDLAorCUhETUlfQVVEX1NXQVBfTFNSUywKKwlIRE1JX0FVRF9TV0FQX1JM
U19SUlMsCisJSERNSV9BVURfU1dBUF9MUl9TVEFUVVMsCit9OworCitzdHJ1Y3QgaGRtaV9hdWRp
b19wYXJhbSB7CisJZW51bSBoZG1pX2F1ZGlvX2NvZGluZ190eXBlIGF1ZF9jb2RlYzsKKwllbnVt
IGhkbWlfYXVkaW9fc2FtcGxlX2ZyZXF1ZW5jeSBhdWRfaGRtaV9mczsKKwllbnVtIGhkbWlfYXVk
aW9fc2FtcGxlX3NpemUgYXVkX3NhbXBlX3NpemU7CisJZW51bSBoZG1pX2F1ZF9pbnB1dF90eXBl
IGF1ZF9pbnB1dF90eXBlOworCWVudW0gaGRtaV9hdWRfaTJzX2ZtdCBhdWRfaTJzX2ZtdDsKKwll
bnVtIGhkbWlfYXVkX21jbGsgYXVkX21jbGs7CisJZW51bSBoZG1pX2F1ZF9pZWNfZnJhbWVfcmF0
ZSBpZWNfZnJhbWVfZnM7CisJZW51bSBoZG1pX2F1ZF9jaGFubmVsX3R5cGUgYXVkX2lucHV0X2No
YW5fdHlwZTsKKwl1OCBoZG1pX2xfY2hhbm5lbF9zdGF0ZVs2XTsKKwl1OCBoZG1pX3JfY2hhbm5l
bF9zdGF0ZVs2XTsKK307CisKK3N0cnVjdCBtdGtfaGRtaSB7CisJc3RydWN0IGRybV9icmlkZ2Ug
YnJpZGdlOworCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm47CisJc3RydWN0IGRldmljZSAqZGV2
OworCXN0cnVjdCBwaHkgKnBoeTsKKwlzdHJ1Y3QgZGV2aWNlICpjZWNfZGV2OworCXN0cnVjdCBp
MmNfYWRhcHRlciAqZGRjX2FkcHQ7CisJc3RydWN0IGNsayAqY2xrW01US19IRE1JX0NMS19DT1VO
VF07CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbW9kZTsKKwlib29sIGR2aV9tb2RlOworCXUz
MiBtaW5fY2xvY2s7CisJdTMyIG1heF9jbG9jazsKKwl1MzIgbWF4X2hkaXNwbGF5OworCXUzMiBt
YXhfdmRpc3BsYXk7CisJdTMyIGliaWFzOworCXUzMiBpYmlhc191cDsKKwlzdHJ1Y3QgcmVnbWFw
ICpzeXNfcmVnbWFwOworCXVuc2lnbmVkIGludCBzeXNfb2Zmc2V0OworCXZvaWQgX19pb21lbSAq
cmVnczsKKwllbnVtIGhkbWlfY29sb3JzcGFjZSBjc3A7CisJc3RydWN0IGhkbWlfYXVkaW9fcGFy
YW0gYXVkX3BhcmFtOworCWJvb2wgcG93ZXJlZDsKKwlib29sIGVuYWJsZWQ7Cit9OworCitzdGF0
aWMgaW5saW5lIHN0cnVjdCBtdGtfaGRtaSAqaGRtaV9jdHhfZnJvbV9icmlkZ2Uoc3RydWN0IGRy
bV9icmlkZ2UgKmIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgbXRrX2hkbWks
IGJyaWRnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19oZG1pICpoZG1pX2N0eF9m
cm9tX2Nvbm4oc3RydWN0IGRybV9jb25uZWN0b3IgKmMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9v
ZihjLCBzdHJ1Y3QgbXRrX2hkbWksIGNvbm4pOworfQorCitzdGF0aWMgdTMyIG10a19oZG1pX3Jl
YWQoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0KQoreworCXJldHVybiByZWFkbCho
ZG1pLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfd3JpdGUoc3Ry
dWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKQoreworCXdyaXRlbCh2YWws
IGhkbWktPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9jbGVhcl9i
aXRzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNldCwgdTMyIGJpdHMpCit7CisJdm9p
ZCBfX2lvbWVtICpyZWcgPSBoZG1pLT5yZWdzICsgb2Zmc2V0OworCXUzMiB0bXA7CisKKwl0bXAg
PSByZWFkbChyZWcpOworCXRtcCAmPSB+Yml0czsKKwl3cml0ZWwodG1wLCByZWcpOworfQorCitz
dGF0aWMgdm9pZCBtdGtfaGRtaV9zZXRfYml0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHUzMiBv
ZmZzZXQsIHUzMiBiaXRzKQoreworCXZvaWQgX19pb21lbSAqcmVnID0gaGRtaS0+cmVncyArIG9m
ZnNldDsKKwl1MzIgdG1wOworCisJdG1wID0gcmVhZGwocmVnKTsKKwl0bXAgfD0gYml0czsKKwl3
cml0ZWwodG1wLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9tYXNrKHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNldCwgdTMyIHZhbCwgdTMyIG1hc2spCit7CisJdm9pZCBf
X2lvbWVtICpyZWcgPSBoZG1pLT5yZWdzICsgb2Zmc2V0OworCXUzMiB0bXA7CisKKwl0bXAgPSBy
ZWFkbChyZWcpOworCXRtcCA9ICh0bXAgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CisJd3JpdGVs
KHRtcCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfdmlkX2JsYWNrKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBibGFjaykKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIFZJ
REVPX0NGR180LCBibGFjayA/IEdFTl9SR0IgOiBOT1JNQUxfUEFUSCwKKwkJICAgICAgVklERU9f
U09VUkNFX1NFTCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X21ha2VfcmVnX3dyaXRh
YmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJcmVnbWFwX3VwZGF0
ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcy
MCwKKwkJCSAgIEhETUlfUENMS19GUkVFX1JVTiwgZW5hYmxlID8gSERNSV9QQ0xLX0ZSRUVfUlVO
IDogMCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19v
ZmZzZXQgKyBIRE1JX1NZU19DRkcxQywKKwkJCSAgIEhETUlfT04gfCBBTkxHX09OLCBlbmFibGUg
PyAoSERNSV9PTiB8IEFOTEdfT04pIDogMCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3
XzFwNF92ZXJzaW9uX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQor
eworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0
ICsgSERNSV9TWVNfQ0ZHMjAsCisJCQkgICBIRE1JMlAwX0VOLCBlbmFibGUgPyAwIDogSERNSTJQ
MF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2F1ZF9tdXRlKHN0cnVjdCBtdGtf
aGRtaSAqaGRtaSkKK3sKKwltdGtfaGRtaV9zZXRfYml0cyhoZG1pLCBHUkxfQVVESU9fQ0ZHLCBB
VURJT19aRVJPKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfYXVkX3VubXV0ZShzdHJ1
Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlfY2xlYXJfYml0cyhoZG1pLCBHUkxfQVVE
SU9fQ0ZHLCBBVURJT19aRVJPKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfcmVzZXQo
c3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNf
cmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkgICBIRE1JX1JT
VCwgSERNSV9SU1QpOworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1p
LT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkgICBIRE1JX1JTVCwgMCk7CisJbXRr
X2hkbWlfY2xlYXJfYml0cyhoZG1pLCBHUkxfQ0ZHMywgQ0ZHM19DT05UUk9MX1BBQ0tFVF9ERUxB
WSk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZz
ZXQgKyBIRE1JX1NZU19DRkcxQywKKwkJCSAgIEFOTEdfT04sIEFOTEdfT04pOworfQorCitzdGF0
aWMgdm9pZCBtdGtfaGRtaV9od19lbmFibGVfbm90aWNlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwg
Ym9vbCBlbmFibGVfbm90aWNlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzIsIGVu
YWJsZV9ub3RpY2UgPyBDRkcyX05PVElDRV9FTiA6IDAsCisJCSAgICAgIENGRzJfTk9USUNFX0VO
KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfd3JpdGVfaW50X21hc2soc3RydWN0IG10
a19oZG1pICpoZG1pLCB1MzIgaW50X21hc2spCit7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JM
X0lOVF9NQVNLLCBpbnRfbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2VuYWJs
ZV9kdmlfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCW10a19o
ZG1pX21hc2soaGRtaSwgR1JMX0NGRzEsIGVuYWJsZSA/IENGRzFfRFZJIDogMCwgQ0ZHMV9EVkkp
OworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19zZW5kX2luZm9fZnJhbWUoc3RydWN0IG10
a19oZG1pICpoZG1pLCB1OCAqYnVmZmVyLAorCQkJCQl1OCBsZW4pCit7CisJdTMyIGN0cmxfcmVn
ID0gR1JMX0NUUkw7CisJaW50IGk7CisJdTggKmZyYW1lX2RhdGE7CisJZW51bSBoZG1pX2luZm9m
cmFtZV90eXBlIGZyYW1lX3R5cGU7CisJdTggZnJhbWVfdmVyOworCXU4IGZyYW1lX2xlbjsKKwl1
OCBjaGVja3N1bTsKKwlpbnQgY3RybF9mcmFtZV9lbiA9IDA7CisKKwlmcmFtZV90eXBlID0gKmJ1
ZmZlcjsKKwlidWZmZXIgKz0gMTsKKwlmcmFtZV92ZXIgPSAqYnVmZmVyOworCWJ1ZmZlciArPSAx
OworCWZyYW1lX2xlbiA9ICpidWZmZXI7CisJYnVmZmVyICs9IDE7CisJY2hlY2tzdW0gPSAqYnVm
ZmVyOworCWJ1ZmZlciArPSAxOworCWZyYW1lX2RhdGEgPSBidWZmZXI7CisKKwlkZXZfZGJnKGhk
bWktPmRldiwKKwkJImZyYW1lX3R5cGU6MHgleCxmcmFtZV92ZXI6MHgleCxmcmFtZV9sZW46MHgl
eCxjaGVja3N1bToweCV4XG4iLAorCQlmcmFtZV90eXBlLCBmcmFtZV92ZXIsIGZyYW1lX2xlbiwg
Y2hlY2tzdW0pOworCisJc3dpdGNoIChmcmFtZV90eXBlKSB7CisJY2FzZSBIRE1JX0lORk9GUkFN
RV9UWVBFX0FWSToKKwkJY3RybF9mcmFtZV9lbiA9IENUUkxfQVZJX0VOOworCQljdHJsX3JlZyA9
IEdSTF9DVFJMOworCQlicmVhazsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfU1BEOgorCQlj
dHJsX2ZyYW1lX2VuID0gQ1RSTF9TUERfRU47CisJCWN0cmxfcmVnID0gR1JMX0NUUkw7CisJCWJy
ZWFrOworCWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9BVURJTzoKKwkJY3RybF9mcmFtZV9lbiA9
IENUUkxfQVVESU9fRU47CisJCWN0cmxfcmVnID0gR1JMX0NUUkw7CisJCWJyZWFrOworCWNhc2Ug
SERNSV9JTkZPRlJBTUVfVFlQRV9WRU5ET1I6CisJCWN0cmxfZnJhbWVfZW4gPSBWU19FTjsKKwkJ
Y3RybF9yZWcgPSBHUkxfQUNQX0lTUkNfQ1RSTDsKKwkJYnJlYWs7CisJfQorCW10a19oZG1pX2Ns
ZWFyX2JpdHMoaGRtaSwgY3RybF9yZWcsIGN0cmxfZnJhbWVfZW4pOworCW10a19oZG1pX3dyaXRl
KGhkbWksIEdSTF9JTkZPRlJNX1RZUEUsIGZyYW1lX3R5cGUpOworCW10a19oZG1pX3dyaXRlKGhk
bWksIEdSTF9JTkZPRlJNX1ZFUiwgZnJhbWVfdmVyKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBH
UkxfSU5GT0ZSTV9MTkcsIGZyYW1lX2xlbik7CisKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxf
SUZNX1BPUlQsIGNoZWNrc3VtKTsKKwlmb3IgKGkgPSAwOyBpIDwgZnJhbWVfbGVuOyBpKyspCisJ
CW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JRk1fUE9SVCwgZnJhbWVfZGF0YVtpXSk7CisKKwlt
dGtfaGRtaV9zZXRfYml0cyhoZG1pLCBjdHJsX3JlZywgY3RybF9mcmFtZV9lbik7Cit9CisKK3N0
YXRpYyB2b2lkIG10a19oZG1pX2h3X3NlbmRfYXVkX3BhY2tldChzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWksIGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX1NISUZUX1IyLCBl
bmFibGUgPyAwIDogQVVESU9fUEFDS0VUX09GRiwKKwkJICAgICAgQVVESU9fUEFDS0VUX09GRik7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2NvbmZpZ19zeXMoc3RydWN0IG10a19oZG1p
ICpoZG1pKQoreworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5z
eXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMjAsCisJCQkgICBIRE1JX09VVF9GSUZPX0VOIHwgTUhM
X01PREVfT04sIDApOworCXVzbGVlcF9yYW5nZSgyMDAwLCA0MDAwKTsKKwlyZWdtYXBfdXBkYXRl
X2JpdHMoaGRtaS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lTX0NGRzIw
LAorCQkJICAgSERNSV9PVVRfRklGT19FTiB8IE1ITF9NT0RFX09OLCBIRE1JX09VVF9GSUZPX0VO
KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfc2V0X2RlZXBfY29sb3JfbW9kZShzdHJ1
Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdt
YXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIERFRVBfQ09MT1Jf
TU9ERV9NQVNLIHwgREVFUF9DT0xPUl9FTiwKKwkJCSAgIENPTE9SXzhCSVRfTU9ERSk7Cit9CisK
K3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X3NlbmRfYXZfbXV0ZShzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWkpCit7CisJbXRrX2hkbWlfY2xlYXJfYml0cyhoZG1pLCBHUkxfQ0ZHNCwgQ1RSTF9BVk1VVEUp
OworCXVzbGVlcF9yYW5nZSgyMDAwLCA0MDAwKTsKKwltdGtfaGRtaV9zZXRfYml0cyhoZG1pLCBH
UkxfQ0ZHNCwgQ1RSTF9BVk1VVEUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19zZW5k
X2F2X3VubXV0ZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlfbWFzayhoZG1p
LCBHUkxfQ0ZHNCwgQ0ZHNF9BVl9VTk1VVEVfRU4sCisJCSAgICAgIENGRzRfQVZfVU5NVVRFX0VO
IHwgQ0ZHNF9BVl9VTk1VVEVfU0VUKTsKKwl1c2xlZXBfcmFuZ2UoMjAwMCwgNDAwMCk7CisJbXRr
X2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHNCwgQ0ZHNF9BVl9VTk1VVEVfU0VULAorCQkgICAgICBD
Rkc0X0FWX1VOTVVURV9FTiB8IENGRzRfQVZfVU5NVVRFX1NFVCk7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19oZG1pX2h3X25jdHNfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBvbikK
K3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DVFNfQ1RSTCwgb24gPyAwIDogQ1RTX0NUUkxf
U09GVCwKKwkJICAgICAgQ1RTX0NUUkxfU09GVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1p
X2h3X25jdHNfYXV0b193cml0ZV9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQkg
ICAgICAgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ1RTX0NUUkws
IGVuYWJsZSA/IE5DVFNfV1JJX0FOWVRJTUUgOiAwLAorCQkgICAgICBOQ1RTX1dSSV9BTllUSU1F
KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfbXNpY19zZXR0aW5nKHN0cnVjdCBtdGtf
aGRtaSAqaGRtaSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQorewor
CW10a19oZG1pX2NsZWFyX2JpdHMoaGRtaSwgR1JMX0NGRzQsIENGRzRfTUhMX01PREUpOworCisJ
aWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UgJiYKKwkgICAgbW9kZS0+
Y2xvY2sgPT0gNzQyNTAgJiYKKwkgICAgbW9kZS0+dmRpc3BsYXkgPT0gMTA4MCkKKwkJbXRrX2hk
bWlfY2xlYXJfYml0cyhoZG1pLCBHUkxfQ0ZHMiwgQ0ZHMl9NSExfREVfU0VMKTsKKwllbHNlCisJ
CW10a19oZG1pX3NldF9iaXRzKGhkbWksIEdSTF9DRkcyLCBDRkcyX01ITF9ERV9TRUwpOworfQor
CitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2NoYW5uZWxfc3dhcChzdHJ1Y3QgbXRr
X2hkbWkgKmhkbWksCisJCQkJCWVudW0gaGRtaV9hdWRfY2hhbm5lbF9zd2FwX3R5cGUgc3dhcCkK
K3sKKwl1OCBzd2FwX2JpdDsKKworCXN3aXRjaCAoc3dhcCkgeworCWNhc2UgSERNSV9BVURfU1dB
UF9MUjoKKwkJc3dhcF9iaXQgPSBMUl9TV0FQOworCQlicmVhazsKKwljYXNlIEhETUlfQVVEX1NX
QVBfTEZFX0NDOgorCQlzd2FwX2JpdCA9IExGRV9DQ19TV0FQOworCQlicmVhazsKKwljYXNlIEhE
TUlfQVVEX1NXQVBfTFNSUzoKKwkJc3dhcF9iaXQgPSBMU1JTX1NXQVA7CisJCWJyZWFrOworCWNh
c2UgSERNSV9BVURfU1dBUF9STFNfUlJTOgorCQlzd2FwX2JpdCA9IFJMU19SUlNfU1dBUDsKKwkJ
YnJlYWs7CisJY2FzZSBIRE1JX0FVRF9TV0FQX0xSX1NUQVRVUzoKKwkJc3dhcF9iaXQgPSBMUl9T
VEFUVVNfU1dBUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3dhcF9iaXQgPSBMRkVfQ0NfU1dB
UDsKKwkJYnJlYWs7CisJfQorCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NIX1NXQVAsIHN3YXBf
Yml0LCAweGZmKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9iaXRfbnVt
KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJZW51bSBoZG1pX2F1ZGlvX3NhbXBsZV9zaXpl
IGJpdF9udW0pCit7CisJdTMyIHZhbDsKKworCXN3aXRjaCAoYml0X251bSkgeworCWNhc2UgSERN
SV9BVURJT19TQU1QTEVfU0laRV8xNjoKKwkJdmFsID0gQU9VVF8xNkJJVDsKKwkJYnJlYWs7CisJ
Y2FzZSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzIwOgorCQl2YWwgPSBBT1VUXzIwQklUOworCQli
cmVhazsKKwljYXNlIEhETUlfQVVESU9fU0FNUExFX1NJWkVfMjQ6CisJY2FzZSBIRE1JX0FVRElP
X1NBTVBMRV9TSVpFX1NUUkVBTToKKwkJdmFsID0gQU9VVF8yNEJJVDsKKwkJYnJlYWs7CisJfQor
CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQU9VVF9DRkcsIHZhbCwgQU9VVF9CTlVNX1NFTF9N
QVNLKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9pMnNfZm10KHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJZW51bSBoZG1pX2F1ZF9pMnNfZm10IGkyc19mbXQpCit7
CisJdTMyIHZhbDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JMX0NGRzApOworCXZh
bCAmPSB+KENGRzBfV19MRU5HVEhfTUFTSyB8IENGRzBfSTJTX01PREVfTUFTSyk7CisKKwlzd2l0
Y2ggKGkyc19mbXQpIHsKKwljYXNlIEhETUlfSTJTX01PREVfUkpUXzI0QklUOgorCQl2YWwgfD0g
Q0ZHMF9JMlNfTU9ERV9SVEogfCBDRkcwX1dfTEVOR1RIXzI0QklUOworCQlicmVhazsKKwljYXNl
IEhETUlfSTJTX01PREVfUkpUXzE2QklUOgorCQl2YWwgfD0gQ0ZHMF9JMlNfTU9ERV9SVEogfCBD
RkcwX1dfTEVOR1RIXzE2QklUOworCQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfTEpUXzI0
QklUOgorCWRlZmF1bHQ6CisJCXZhbCB8PSBDRkcwX0kyU19NT0RFX0xUSiB8IENGRzBfV19MRU5H
VEhfMjRCSVQ7CisJCWJyZWFrOworCWNhc2UgSERNSV9JMlNfTU9ERV9MSlRfMTZCSVQ6CisJCXZh
bCB8PSBDRkcwX0kyU19NT0RFX0xUSiB8IENGRzBfV19MRU5HVEhfMTZCSVQ7CisJCWJyZWFrOwor
CWNhc2UgSERNSV9JMlNfTU9ERV9JMlNfMjRCSVQ6CisJCXZhbCB8PSBDRkcwX0kyU19NT0RFX0ky
UyB8IENGRzBfV19MRU5HVEhfMjRCSVQ7CisJCWJyZWFrOworCWNhc2UgSERNSV9JMlNfTU9ERV9J
MlNfMTZCSVQ6CisJCXZhbCB8PSBDRkcwX0kyU19NT0RFX0kyUyB8IENGRzBfV19MRU5HVEhfMTZC
SVQ7CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfQ0ZHMCwgdmFsKTsK
K30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfYXVkaW9fY29uZmlnKHN0cnVjdCBtdGtfaGRt
aSAqaGRtaSwgYm9vbCBkc3QpCit7CisJY29uc3QgdTggbWFzayA9IEhJR0hfQklUX1JBVEUgfCBE
U1RfTk9STUFMX0RPVUJMRSB8IFNBQ0RfRFNUIHwgRFNEX1NFTDsKKwl1OCB2YWw7CisKKwkvKiBE
aXNhYmxlIGhpZ2ggYml0cmF0ZSwgc2V0IERTVCBwYWNrZXQgbm9ybWFsL2RvdWJsZSAqLworCW10
a19oZG1pX2NsZWFyX2JpdHMoaGRtaSwgR1JMX0FPVVRfQ0ZHLCBISUdIX0JJVF9SQVRFX1BBQ0tF
VF9BTElHTik7CisKKwlpZiAoZHN0KQorCQl2YWwgPSBEU1RfTk9STUFMX0RPVUJMRSB8IFNBQ0Rf
RFNUOworCWVsc2UKKwkJdmFsID0gMDsKKworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0FVRElP
X0NGRywgdmFsLCBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9p
MnNfY2hhbl9udW0oc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQllbnVtIGhkbWlfYXVkX2No
YW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCisJCQkJCXU4IGNoYW5uZWxfY291bnQpCit7CisJdW5z
aWduZWQgaW50IGNoX3N3aXRjaDsKKwl1OCBpMnNfdXY7CisKKwljaF9zd2l0Y2ggPSBDSF9TV0lU
Q0goNywgNykgfCBDSF9TV0lUQ0goNiwgNikgfAorCQkgICAgQ0hfU1dJVENIKDUsIDUpIHwgQ0hf
U1dJVENIKDQsIDQpIHwKKwkJICAgIENIX1NXSVRDSCgzLCAzKSB8IENIX1NXSVRDSCgxLCAyKSB8
CisJCSAgICBDSF9TV0lUQ0goMiwgMSkgfCBDSF9TV0lUQ0goMCwgMCk7CisKKwlpZiAoY2hhbm5l
bF9jb3VudCA9PSAyKSB7CisJCWkyc191diA9IEkyU19VVl9DSF9FTigwKTsKKwl9IGVsc2UgaWYg
KGNoYW5uZWxfY291bnQgPT0gMyB8fCBjaGFubmVsX2NvdW50ID09IDQpIHsKKwkJaWYgKGNoYW5u
ZWxfY291bnQgPT0gNCAmJgorCQkgICAgKGNoYW5uZWxfdHlwZSA9PSBIRE1JX0FVRF9DSEFOX1RZ
UEVfM18wX0xSUyB8fAorCQkgICAgY2hhbm5lbF90eXBlID09IEhETUlfQVVEX0NIQU5fVFlQRV80
XzApKQorCQkJaTJzX3V2ID0gSTJTX1VWX0NIX0VOKDIpIHwgSTJTX1VWX0NIX0VOKDApOworCQll
bHNlCisJCQlpMnNfdXYgPSBJMlNfVVZfQ0hfRU4oMykgfCBJMlNfVVZfQ0hfRU4oMik7CisJfSBl
bHNlIGlmIChjaGFubmVsX2NvdW50ID09IDYgfHwgY2hhbm5lbF9jb3VudCA9PSA1KSB7CisJCWlm
IChjaGFubmVsX2NvdW50ID09IDYgJiYKKwkJICAgIGNoYW5uZWxfdHlwZSAhPSBIRE1JX0FVRF9D
SEFOX1RZUEVfNV8xICYmCisJCSAgICBjaGFubmVsX3R5cGUgIT0gSERNSV9BVURfQ0hBTl9UWVBF
XzRfMV9DTFJTKSB7CisJCQlpMnNfdXYgPSBJMlNfVVZfQ0hfRU4oMykgfCBJMlNfVVZfQ0hfRU4o
MikgfAorCQkJCSBJMlNfVVZfQ0hfRU4oMSkgfCBJMlNfVVZfQ0hfRU4oMCk7CisJCX0gZWxzZSB7
CisJCQlpMnNfdXYgPSBJMlNfVVZfQ0hfRU4oMikgfCBJMlNfVVZfQ0hfRU4oMSkgfAorCQkJCSBJ
MlNfVVZfQ0hfRU4oMCk7CisJCX0KKwl9IGVsc2UgaWYgKGNoYW5uZWxfY291bnQgPT0gOCB8fCBj
aGFubmVsX2NvdW50ID09IDcpIHsKKwkJaTJzX3V2ID0gSTJTX1VWX0NIX0VOKDMpIHwgSTJTX1VW
X0NIX0VOKDIpIHwKKwkJCSBJMlNfVVZfQ0hfRU4oMSkgfCBJMlNfVVZfQ0hfRU4oMCk7CisJfSBl
bHNlIHsKKwkJaTJzX3V2ID0gSTJTX1VWX0NIX0VOKDApOworCX0KKworCW10a19oZG1pX3dyaXRl
KGhkbWksIEdSTF9DSF9TVzAsIGNoX3N3aXRjaCAmIDB4ZmYpOworCW10a19oZG1pX3dyaXRlKGhk
bWksIEdSTF9DSF9TVzEsIChjaF9zd2l0Y2ggPj4gOCkgJiAweGZmKTsKKwltdGtfaGRtaV93cml0
ZShoZG1pLCBHUkxfQ0hfU1cyLCAoY2hfc3dpdGNoID4+IDE2KSAmIDB4ZmYpOworCW10a19oZG1p
X3dyaXRlKGhkbWksIEdSTF9JMlNfVVYsIGkyc191dik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19o
ZG1pX2h3X2F1ZF9zZXRfaW5wdXRfdHlwZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCSAg
IGVudW0gaGRtaV9hdWRfaW5wdXRfdHlwZSBpbnB1dF90eXBlKQoreworCXUzMiB2YWw7CisKKwl2
YWwgPSBtdGtfaGRtaV9yZWFkKGhkbWksIEdSTF9DRkcxKTsKKwlpZiAoaW5wdXRfdHlwZSA9PSBI
RE1JX0FVRF9JTlBVVF9JMlMgJiYKKwkgICAgKHZhbCAmIENGRzFfU1BESUYpID09IENGRzFfU1BE
SUYpIHsKKwkJdmFsICY9IH5DRkcxX1NQRElGOworCX0gZWxzZSBpZiAoaW5wdXRfdHlwZSA9PSBI
RE1JX0FVRF9JTlBVVF9TUERJRiAmJgorCQkodmFsICYgQ0ZHMV9TUERJRikgPT0gMCkgeworCQl2
YWwgfD0gQ0ZHMV9TUERJRjsKKwl9CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NGRzEsIHZh
bCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9zdGF0dXMo
c3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCXU4ICpsX2NoYW5fc3RhdHVzLCB1OCAqcl9jaGFu
X3N0YXR1cywKKwkJCQllbnVtIGhkbWlfYXVkaW9fc2FtcGxlX2ZyZXF1ZW5jeSBhdWRfaGRtaV9m
cykKK3sKKwl1OCBsX3N0YXR1c1s1XTsKKwl1OCByX3N0YXR1c1s1XTsKKwl1OCB2YWw7CisKKwls
X3N0YXR1c1swXSA9IGxfY2hhbl9zdGF0dXNbMF07CisJbF9zdGF0dXNbMV0gPSBsX2NoYW5fc3Rh
dHVzWzFdOworCWxfc3RhdHVzWzJdID0gbF9jaGFuX3N0YXR1c1syXTsKKwlyX3N0YXR1c1swXSA9
IHJfY2hhbl9zdGF0dXNbMF07CisJcl9zdGF0dXNbMV0gPSByX2NoYW5fc3RhdHVzWzFdOworCXJf
c3RhdHVzWzJdID0gcl9jaGFuX3N0YXR1c1syXTsKKworCWxfc3RhdHVzWzBdICY9IH4weDAyOwor
CXJfc3RhdHVzWzBdICY9IH4weDAyOworCisJdmFsID0gbF9jaGFuX3N0YXR1c1szXSAmIDB4ZjA7
CisJc3dpdGNoIChhdWRfaGRtaV9mcykgeworCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVF
TkNZXzMyMDAwOgorCQl2YWwgfD0gMHgwMzsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRElPX1NB
TVBMRV9GUkVRVUVOQ1lfNDQxMDA6CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURJT19TQU1QTEVf
RlJFUVVFTkNZXzg4MjAwOgorCQl2YWwgfD0gMHgwODsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FV
RElPX1NBTVBMRV9GUkVRVUVOQ1lfOTYwMDA6CisJCXZhbCB8PSAweDBhOworCQlicmVhazsKKwlj
YXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV80ODAwMDoKKwkJdmFsIHw9IDB4MDI7CisJ
CWJyZWFrOworCWRlZmF1bHQ6CisJCXZhbCB8PSAweDAyOworCQlicmVhazsKKwl9CisJbF9zdGF0
dXNbM10gPSB2YWw7CisJcl9zdGF0dXNbM10gPSB2YWw7CisKKwl2YWwgPSBsX2NoYW5fc3RhdHVz
WzRdOworCXZhbCB8PSAoKH4obF9zdGF0dXNbM10gJiAweDBmKSkgPDwgNCk7CisJbF9zdGF0dXNb
NF0gPSB2YWw7CisJcl9zdGF0dXNbNF0gPSB2YWw7CisKKwl2YWwgPSBsX3N0YXR1c1swXTsKKwlt
dGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSTJTX0NfU1RBMCwgdmFsKTsKKwltdGtfaGRtaV93cml0
ZShoZG1pLCBHUkxfTF9TVEFUVVNfMCwgdmFsKTsKKworCXZhbCA9IHJfc3RhdHVzWzBdOworCW10
a19oZG1pX3dyaXRlKGhkbWksIEdSTF9SX1NUQVRVU18wLCB2YWwpOworCisJdmFsID0gbF9zdGF0
dXNbMV07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0kyU19DX1NUQTEsIHZhbCk7CisJbXRr
X2hkbWlfd3JpdGUoaGRtaSwgR1JMX0xfU1RBVFVTXzEsIHZhbCk7CisKKwl2YWwgPSByX3N0YXR1
c1sxXTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNfMSwgdmFsKTsKKworCXZh
bCA9IGxfc3RhdHVzWzJdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JMlNfQ19TVEEyLCB2
YWwpOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9MX1NUQVRVU18yLCB2YWwpOworCisJdmFs
ID0gcl9zdGF0dXNbMl07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX1JfU1RBVFVTXzIsIHZh
bCk7CisKKwl2YWwgPSBsX3N0YXR1c1szXTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSTJT
X0NfU1RBMywgdmFsKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTF9TVEFUVVNfMywgdmFs
KTsKKworCXZhbCA9IHJfc3RhdHVzWzNdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9SX1NU
QVRVU18zLCB2YWwpOworCisJdmFsID0gbF9zdGF0dXNbNF07CisJbXRrX2hkbWlfd3JpdGUoaGRt
aSwgR1JMX0kyU19DX1NUQTQsIHZhbCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0xfU1RB
VFVTXzQsIHZhbCk7CisKKwl2YWwgPSByX3N0YXR1c1s0XTsKKwltdGtfaGRtaV93cml0ZShoZG1p
LCBHUkxfUl9TVEFUVVNfNCwgdmFsKTsKKworCWZvciAodmFsID0gMDsgdmFsIDwgMTk7IHZhbCsr
KSB7CisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9MX1NUQVRVU181ICsgdmFsICogNCwgMCk7
CisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9SX1NUQVRVU181ICsgdmFsICogNCwgMCk7CisJ
fQorfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX3JlZW5hYmxlKHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gbXRrX2hkbWlfcmVhZChoZG1p
LCBHUkxfTUlYX0NUUkwpOworCWlmICh2YWwgJiBNSVhfQ1RSTF9TUkNfRU4pIHsKKwkJdmFsICY9
IH5NSVhfQ1RSTF9TUkNfRU47CisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9NSVhfQ1RSTCwg
dmFsKTsKKwkJdXNsZWVwX3JhbmdlKDI1NSwgNTEyKTsKKwkJdmFsIHw9IE1JWF9DVFJMX1NSQ19F
TjsKKwkJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX01JWF9DVFJMLCB2YWwpOworCX0KK30KKwor
c3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfYXVkX3NyY19kaXNhYmxlKHN0cnVjdCBtdGtfaGRtaSAq
aGRtaSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gbXRrX2hkbWlfcmVhZChoZG1pLCBHUkxfTUlY
X0NUUkwpOworCXZhbCAmPSB+TUlYX0NUUkxfU1JDX0VOOworCW10a19oZG1pX3dyaXRlKGhkbWks
IEdSTF9NSVhfQ1RSTCwgdmFsKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfU0hJRlRfTDEs
IDB4MDApOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X21jbGsoc3RydWN0
IG10a19oZG1pICpoZG1pLAorCQkJCSAgICAgZW51bSBoZG1pX2F1ZF9tY2xrIG1jbGspCit7CisJ
dTMyIHZhbDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JMX0NGRzUpOworCXZhbCAm
PSBDRkc1X0NEX1JBVElPX01BU0s7CisKKwlzd2l0Y2ggKG1jbGspIHsKKwljYXNlIEhETUlfQVVE
X01DTEtfMTI4RlM6CisJCXZhbCB8PSBDRkc1X0ZTMTI4OworCQlicmVhazsKKwljYXNlIEhETUlf
QVVEX01DTEtfMjU2RlM6CisJCXZhbCB8PSBDRkc1X0ZTMjU2OworCQlicmVhazsKKwljYXNlIEhE
TUlfQVVEX01DTEtfMzg0RlM6CisJCXZhbCB8PSBDRkc1X0ZTMzg0OworCQlicmVhazsKKwljYXNl
IEhETUlfQVVEX01DTEtfNTEyRlM6CisJCXZhbCB8PSBDRkc1X0ZTNTEyOworCQlicmVhazsKKwlj
YXNlIEhETUlfQVVEX01DTEtfNzY4RlM6CisJCXZhbCB8PSBDRkc1X0ZTNzY4OworCQlicmVhazsK
KwlkZWZhdWx0OgorCQl2YWwgfD0gQ0ZHNV9GUzI1NjsKKwkJYnJlYWs7CisJfQorCW10a19oZG1p
X3dyaXRlKGhkbWksIEdSTF9DRkc1LCB2YWwpOworfQorCitzdHJ1Y3QgaGRtaV9hY3JfbiB7CisJ
dW5zaWduZWQgaW50IGNsb2NrOworCXVuc2lnbmVkIGludCBuWzNdOworfTsKKworLyogUmVjb21t
ZW5kZWQgTiB2YWx1ZXMgZnJvbSBIRE1JIHNwZWNpZmljYXRpb24sIHRhYmxlcyA3LTEgdG8gNy0z
ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGhkbWlfYWNyX24gaGRtaV9yZWNfbl90YWJsZVtdID0g
eworCS8qIENsb2NrLCBOOiAzMmtIeiA0NC4xa0h6IDQ4a0h6ICovCisJeyAgMjUxNzUsIHsgIDQ1
NzYsICA3MDA3LCAgNjg2NCB9IH0sCisJeyAgNzQxNzYsIHsgMTE2NDgsIDE3ODM2LCAxMTY0OCB9
IH0sCisJeyAxNDgzNTIsIHsgMTE2NDgsICA4OTE4LCAgNTgyNCB9IH0sCisJeyAyOTY3MDMsIHsg
IDU4MjQsICA0NDU5LCAgNTgyNCB9IH0sCisJeyAyOTcwMDAsIHsgIDMwNzIsICA0NzA0LCAgNTEy
MCB9IH0sCisJeyAgICAgIDAsIHsgIDQwOTYsICA2MjcyLCAgNjE0NCB9IH0sIC8qIGFsbCBvdGhl
ciBUTURTIGNsb2NrcyAqLworfTsKKworLyoqCisgKiBoZG1pX3JlY29tbWVuZGVkX24oKSAtIFJl
dHVybiBOIHZhbHVlIHJlY29tbWVuZGVkIGJ5IEhETUkgc3BlY2lmaWNhdGlvbgorICogQGZyZXE6
IGF1ZGlvIHNhbXBsZSByYXRlIGluIEh6CisgKiBAY2xvY2s6IHJvdW5kZWQgVE1EUyBjbG9jayBp
biBrSHoKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBoZG1pX3JlY29tbWVuZGVkX24odW5zaWdu
ZWQgaW50IGZyZXEsIHVuc2lnbmVkIGludCBjbG9jaykKK3sKKwljb25zdCBzdHJ1Y3QgaGRtaV9h
Y3JfbiAqcmVjb21tZW5kZWQ7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwg
QVJSQVlfU0laRShoZG1pX3JlY19uX3RhYmxlKSAtIDE7IGkrKykgeworCQlpZiAoY2xvY2sgPT0g
aGRtaV9yZWNfbl90YWJsZVtpXS5jbG9jaykKKwkJCWJyZWFrOworCX0KKwlyZWNvbW1lbmRlZCA9
IGhkbWlfcmVjX25fdGFibGUgKyBpOworCisJc3dpdGNoIChmcmVxKSB7CisJY2FzZSAzMjAwMDoK
KwkJcmV0dXJuIHJlY29tbWVuZGVkLT5uWzBdOworCWNhc2UgNDQxMDA6CisJCXJldHVybiByZWNv
bW1lbmRlZC0+blsxXTsKKwljYXNlIDQ4MDAwOgorCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5bMl07
CisJY2FzZSA4ODIwMDoKKwkJcmV0dXJuIHJlY29tbWVuZGVkLT5uWzFdICogMjsKKwljYXNlIDk2
MDAwOgorCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5bMl0gKiAyOworCWNhc2UgMTc2NDAwOgorCQly
ZXR1cm4gcmVjb21tZW5kZWQtPm5bMV0gKiA0OworCWNhc2UgMTkyMDAwOgorCQlyZXR1cm4gcmVj
b21tZW5kZWQtPm5bMl0gKiA0OworCWRlZmF1bHQ6CisJCXJldHVybiAoMTI4ICogZnJlcSkgLyAx
MDAwOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCBoZG1pX21vZGVfY2xvY2tfdG9faHoo
dW5zaWduZWQgaW50IGNsb2NrKQoreworCXN3aXRjaCAoY2xvY2spIHsKKwljYXNlIDI1MTc1Ogor
CQlyZXR1cm4gMjUxNzQ4MjU7CS8qIDI1LjIvMS4wMDEgTUh6ICovCisJY2FzZSA3NDE3NjoKKwkJ
cmV0dXJuIDc0MTc1ODI0OwkvKiA3NC4yNS8xLjAwMSBNSHogKi8KKwljYXNlIDE0ODM1MjoKKwkJ
cmV0dXJuIDE0ODM1MTY0ODsJLyogMTQ4LjUvMS4wMDEgTUh6ICovCisJY2FzZSAyOTY3MDM6CisJ
CXJldHVybiAyOTY3MDMyOTc7CS8qIDI5Ny8xLjAwMSBNSHogKi8KKwlkZWZhdWx0OgorCQlyZXR1
cm4gY2xvY2sgKiAxMDAwOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCBoZG1pX2V4cGVj
dGVkX2N0cyh1bnNpZ25lZCBpbnQgYXVkaW9fc2FtcGxlX3JhdGUsCisJCQkJICAgICAgdW5zaWdu
ZWQgaW50IHRtZHNfY2xvY2ssIHVuc2lnbmVkIGludCBuKQoreworCXJldHVybiBESVZfUk9VTkRf
Q0xPU0VTVF9VTEwoKHU2NCloZG1pX21vZGVfY2xvY2tfdG9faHoodG1kc19jbG9jaykgKiBuLAor
CQkJCSAgICAgMTI4ICogYXVkaW9fc2FtcGxlX3JhdGUpOworfQorCitzdGF0aWMgdm9pZCBkb19o
ZG1pX2h3X2F1ZF9zZXRfbmN0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHVuc2lnbmVkIGludCBu
LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY3RzKQoreworCXVuc2lnbmVkIGNoYXIgdmFsW05DVFNf
QllURVNdOworCWludCBpOworCisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX05DVFMsIDApOwor
CW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9OQ1RTLCAwKTsKKwltdGtfaGRtaV93cml0ZShoZG1p
LCBHUkxfTkNUUywgMCk7CisJbWVtc2V0KHZhbCwgMCwgc2l6ZW9mKHZhbCkpOworCisJdmFsWzBd
ID0gKGN0cyA+PiAyNCkgJiAweGZmOworCXZhbFsxXSA9IChjdHMgPj4gMTYpICYgMHhmZjsKKwl2
YWxbMl0gPSAoY3RzID4+IDgpICYgMHhmZjsKKwl2YWxbM10gPSBjdHMgJiAweGZmOworCisJdmFs
WzRdID0gKG4gPj4gMTYpICYgMHhmZjsKKwl2YWxbNV0gPSAobiA+PiA4KSAmIDB4ZmY7CisJdmFs
WzZdID0gbiAmIDB4ZmY7CisKKwlmb3IgKGkgPSAwOyBpIDwgTkNUU19CWVRFUzsgaSsrKQorCQlt
dGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTkNUUywgdmFsW2ldKTsKK30KKworc3RhdGljIHZvaWQg
bXRrX2hkbWlfaHdfYXVkX3NldF9uY3RzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAg
IHVuc2lnbmVkIGludCBzYW1wbGVfcmF0ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBjbG9jaykK
K3sKKwl1bnNpZ25lZCBpbnQgbiwgY3RzOworCisJbiA9IGhkbWlfcmVjb21tZW5kZWRfbihzYW1w
bGVfcmF0ZSwgY2xvY2spOworCWN0cyA9IGhkbWlfZXhwZWN0ZWRfY3RzKHNhbXBsZV9yYXRlLCBj
bG9jaywgbik7CisKKwlkZXZfZGJnKGhkbWktPmRldiwgIiVzOiBzYW1wbGVfcmF0ZT0ldSwgY2xv
Y2s9JWQsIGN0cz0ldSwgbj0ldVxuIiwKKwkJX19mdW5jX18sIHNhbXBsZV9yYXRlLCBjbG9jaywg
biwgY3RzKTsKKworCW10a19oZG1pX21hc2soaGRtaSwgRFVNTVlfMzA0LCBBVURJT19JMlNfTkNU
U19TRUxfNjQsCisJCSAgICAgIEFVRElPX0kyU19OQ1RTX1NFTCk7CisJZG9faGRtaV9od19hdWRf
c2V0X25jdHMoaGRtaSwgbiwgY3RzKTsKK30KKworc3RhdGljIHU4IG10a19oZG1pX2F1ZF9nZXRf
Y2hubF9jb3VudChlbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpCit7CisJ
c3dpdGNoIChjaGFubmVsX3R5cGUpIHsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8xXzA6CisJ
Y2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMV8xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzJf
MDoKKwkJcmV0dXJuIDI7CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8xOgorCWNhc2UgSERN
SV9BVURfQ0hBTl9UWVBFXzNfMDoKKwkJcmV0dXJuIDM7CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZ
UEVfM18xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzRfMDoKKwljYXNlIEhETUlfQVVEX0NI
QU5fVFlQRV8zXzBfTFJTOgorCQlyZXR1cm4gNDsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV80
XzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNV8wOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U
WVBFXzNfMV9MUlM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8wX0NMUlM6CisJCXJldHVy
biA1OworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzVfMToKKwljYXNlIEhETUlfQVVEX0NIQU5f
VFlQRV82XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8xX0NMUlM6CisJY2FzZSBIRE1J
X0FVRF9DSEFOX1RZUEVfNl8wX0NTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMF9DSDoK
KwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZ
UEVfNl8wX0NIUjoKKwkJcmV0dXJuIDY7CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8xOgor
CWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DUzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQ
RV82XzFfQ0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX09IOgorCWNhc2UgSERNSV9B
VURfQ0hBTl9UWVBFXzZfMV9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wOgorCWNh
c2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSF9SSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQ
RV83XzBfTFNSX1JTUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfTENfUkM6CisJY2Fz
ZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xXX1JXOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF
XzdfMF9MU0RfUlNEOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1NfUlNTOgorCWNh
c2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSFNfUkhTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U
WVBFXzdfMF9DU19DSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfT0g6CisJY2Fz
ZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX0NIUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQ
RV83XzBfQ0hfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NIX0NIUjoKKwljYXNl
IEhETUlfQVVEX0NIQU5fVFlQRV83XzBfT0hfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF
XzdfMF9MU1NfUlNTX0xTUl9SU1I6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfOF8wX0xIX1JI
X0NTOgorCQlyZXR1cm4gNzsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzE6CisJY2FzZSBI
RE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIX1JIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdf
MV9MU1JfUlNSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MQ19SQzoKKwljYXNlIEhE
TUlfQVVEX0NIQU5fVFlQRV83XzFfTFdfUlc6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18x
X0xTRF9SU0Q6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTU19SU1M6CisJY2FzZSBI
RE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIU19SSFM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVf
N18xX0NTX0NIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19PSDoKKwljYXNlIEhE
TUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdf
MV9DSF9PSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ0hfQ0hSOgorCWNhc2UgSERN
SV9BVURfQ0hBTl9UWVBFXzdfMV9PSF9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18x
X0xTU19SU1NfTFNSX1JTUjoKKwkJcmV0dXJuIDg7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDI7CisJ
fQorfQorCitzdGF0aWMgaW50IG10a19oZG1pX3ZpZGVvX2NoYW5nZV92cGxsKHN0cnVjdCBtdGtf
aGRtaSAqaGRtaSwgdTMyIGNsb2NrKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwlpbnQgcmV0
OworCisJLyogVGhlIERQSSBkcml2ZXIgYWxyZWFkeSBzaG91bGQgaGF2ZSBzZXQgVFZEUExMIHRv
IHRoZSBjb3JyZWN0IHJhdGUgKi8KKwlyZXQgPSBjbGtfc2V0X3JhdGUoaGRtaS0+Y2xrW01US19I
RE1JX0NMS19IRE1JX1BMTF0sIGNsb2NrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGRtaS0+
ZGV2LCAiRmFpbGVkIHRvIHNldCBQTEwgdG8gJXUgSHo6ICVkXG4iLCBjbG9jaywKKwkJCXJldCk7
CisJCXJldHVybiByZXQ7CisJfQorCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShoZG1pLT5jbGtbTVRL
X0hETUlfQ0xLX0hETUlfUExMXSk7CisKKwlpZiAoRElWX1JPVU5EX0NMT1NFU1QocmF0ZSwgMTAw
MCkgIT0gRElWX1JPVU5EX0NMT1NFU1QoY2xvY2ssIDEwMDApKQorCQlkZXZfd2FybihoZG1pLT5k
ZXYsICJXYW50IFBMTCAldSBIeiwgZ290ICVsdSBIelxuIiwgY2xvY2ssCisJCQkgcmF0ZSk7CisJ
ZWxzZQorCQlkZXZfZGJnKGhkbWktPmRldiwgIldhbnQgUExMICV1IEh6LCBnb3QgJWx1IEh6XG4i
LCBjbG9jaywgcmF0ZSk7CisKKwltdGtfaGRtaV9od19jb25maWdfc3lzKGhkbWkpOworCW10a19o
ZG1pX2h3X3NldF9kZWVwX2NvbG9yX21vZGUoaGRtaSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyB2b2lkIG10a19oZG1pX3ZpZGVvX3NldF9kaXNwbGF5X21vZGUoc3RydWN0IG10a19oZG1pICpo
ZG1pLAorCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJbXRrX2hk
bWlfaHdfcmVzZXQoaGRtaSk7CisJbXRrX2hkbWlfaHdfZW5hYmxlX25vdGljZShoZG1pLCB0cnVl
KTsKKwltdGtfaGRtaV9od193cml0ZV9pbnRfbWFzayhoZG1pLCAweGZmKTsKKwltdGtfaGRtaV9o
d19lbmFibGVfZHZpX21vZGUoaGRtaSwgaGRtaS0+ZHZpX21vZGUpOworCW10a19oZG1pX2h3X25j
dHNfYXV0b193cml0ZV9lbmFibGUoaGRtaSwgdHJ1ZSk7CisKKwltdGtfaGRtaV9od19tc2ljX3Nl
dHRpbmcoaGRtaSwgbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfYXVkX2VuYWJsZV9w
YWNrZXQoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sKKwltdGtfaGRtaV9o
d19zZW5kX2F1ZF9wYWNrZXQoaGRtaSwgZW5hYmxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj
IGludCBtdGtfaGRtaV9hdWRfb25fb2ZmX2h3X25jdHMoc3RydWN0IG10a19oZG1pICpoZG1pLCBi
b29sIG9uKQoreworCW10a19oZG1pX2h3X25jdHNfZW5hYmxlKGhkbWksIG9uKTsKKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRfc2V0X2lucHV0KHN0cnVjdCBtdGtfaGRt
aSAqaGRtaSkKK3sKKwllbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7CisJdTgg
Y2hhbl9jb3VudDsKKwlib29sIGRzdDsKKworCW10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9z
d2FwKGhkbWksIEhETUlfQVVEX1NXQVBfTEZFX0NDKTsKKwltdGtfaGRtaV9zZXRfYml0cyhoZG1p
LCBHUkxfTUlYX0NUUkwsIE1JWF9DVFJMX0ZMQVQpOworCisJaWYgKGhkbWktPmF1ZF9wYXJhbS5h
dWRfaW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBVVF9TUERJRiAmJgorCSAgICBoZG1pLT5hdWRf
cGFyYW0uYXVkX2NvZGVjID09IEhETUlfQVVESU9fQ09ESU5HX1RZUEVfRFNUKSB7CisJCW10a19o
ZG1pX2h3X2F1ZF9zZXRfYml0X251bShoZG1pLCBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzI0KTsK
Kwl9IGVsc2UgaWYgKGhkbWktPmF1ZF9wYXJhbS5hdWRfaTJzX2ZtdCA9PSBIRE1JX0kyU19NT0RF
X0xKVF8yNEJJVCkgeworCQloZG1pLT5hdWRfcGFyYW0uYXVkX2kyc19mbXQgPSBIRE1JX0kyU19N
T0RFX0xKVF8xNkJJVDsKKwl9CisKKwltdGtfaGRtaV9od19hdWRfc2V0X2kyc19mbXQoaGRtaSwg
aGRtaS0+YXVkX3BhcmFtLmF1ZF9pMnNfZm10KTsKKwltdGtfaGRtaV9od19hdWRfc2V0X2JpdF9u
dW0oaGRtaSwgSERNSV9BVURJT19TQU1QTEVfU0laRV8yNCk7CisKKwlkc3QgPSAoKGhkbWktPmF1
ZF9wYXJhbS5hdWRfaW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBVVF9TUERJRikgJiYKKwkgICAg
ICAgKGhkbWktPmF1ZF9wYXJhbS5hdWRfY29kZWMgPT0gSERNSV9BVURJT19DT0RJTkdfVFlQRV9E
U1QpKTsKKwltdGtfaGRtaV9od19hdWRpb19jb25maWcoaGRtaSwgZHN0KTsKKworCWlmIChoZG1p
LT5hdWRfcGFyYW0uYXVkX2lucHV0X3R5cGUgPT0gSERNSV9BVURfSU5QVVRfU1BESUYpCisJCWNo
YW5fdHlwZSA9IEhETUlfQVVEX0NIQU5fVFlQRV8yXzA7CisJZWxzZQorCQljaGFuX3R5cGUgPSBo
ZG1pLT5hdWRfcGFyYW0uYXVkX2lucHV0X2NoYW5fdHlwZTsKKwljaGFuX2NvdW50ID0gbXRrX2hk
bWlfYXVkX2dldF9jaG5sX2NvdW50KGNoYW5fdHlwZSk7CisJbXRrX2hkbWlfaHdfYXVkX3NldF9p
MnNfY2hhbl9udW0oaGRtaSwgY2hhbl90eXBlLCBjaGFuX2NvdW50KTsKKwltdGtfaGRtaV9od19h
dWRfc2V0X2lucHV0X3R5cGUoaGRtaSwgaGRtaS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF90eXBlKTsK
KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1ZF9zZXRfc3JjKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZGlzcGxheV9t
b2RlKQoreworCW10a19oZG1pX2F1ZF9vbl9vZmZfaHdfbmN0cyhoZG1pLCBmYWxzZSk7CisJbXRr
X2hkbWlfaHdfYXVkX3NyY19kaXNhYmxlKGhkbWkpOworCW10a19oZG1pX2NsZWFyX2JpdHMoaGRt
aSwgR1JMX0NGRzIsIENGRzJfQUNMS19JTlYpOworCisJaWYgKGhkbWktPmF1ZF9wYXJhbS5hdWRf
aW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBVVF9JMlMpIHsKKwkJc3dpdGNoIChoZG1pLT5hdWRf
cGFyYW0uYXVkX2hkbWlfZnMpIHsKKwkJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lf
MzIwMDA6CisJCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ0MTAwOgorCQljYXNl
IEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV80ODAwMDoKKwkJY2FzZSBIRE1JX0FVRElPX1NB
TVBMRV9GUkVRVUVOQ1lfODgyMDA6CisJCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZ
Xzk2MDAwOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQor
CQltdGtfaGRtaV9od19hdWRfc2V0X21jbGsoaGRtaSwgaGRtaS0+YXVkX3BhcmFtLmF1ZF9tY2xr
KTsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGhkbWktPmF1ZF9wYXJhbS5pZWNfZnJhbWVfZnMpIHsK
KwkJY2FzZSBIRE1JX0lFQ18zMks6CisJCQloZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMgPQor
CQkJCQlIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfMzIwMDA7CisJCQlicmVhazsKKwkJY2Fz
ZSBIRE1JX0lFQ180OEs6CisJCQloZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMgPQorCQkJCQlI
RE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfNDgwMDA7CisJCQlicmVhazsKKwkJY2FzZSBIRE1J
X0lFQ180NEs6CisJCQloZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMgPQorCQkJCQlIRE1JX0FV
RElPX1NBTVBMRV9GUkVRVUVOQ1lfNDQxMDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJl
dHVybiAtRUlOVkFMOworCQl9CisJCW10a19oZG1pX2h3X2F1ZF9zZXRfbWNsayhoZG1pLCBIRE1J
X0FVRF9NQ0xLXzEyOEZTKTsKKwl9CisJbXRrX2hkbWlfaHdfYXVkX3NldF9uY3RzKGhkbWksIGhk
bWktPmF1ZF9wYXJhbS5hdWRfaGRtaV9mcywKKwkJCQkgZGlzcGxheV9tb2RlLT5jbG9jayk7CisK
KwltdGtfaGRtaV9od19hdWRfc3JjX3JlZW5hYmxlKGhkbWkpOworCXJldHVybiAwOworfQorCitz
dGF0aWMgaW50IG10a19oZG1pX2F1ZF9vdXRwdXRfY29uZmlnKHN0cnVjdCBtdGtfaGRtaSAqaGRt
aSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZGlzcGxheV9tb2RlKQorewor
CW10a19oZG1pX2h3X2F1ZF9tdXRlKGhkbWkpOworCW10a19oZG1pX2F1ZF9lbmFibGVfcGFja2V0
KGhkbWksIGZhbHNlKTsKKworCW10a19oZG1pX2F1ZF9zZXRfaW5wdXQoaGRtaSk7CisJbXRrX2hk
bWlfYXVkX3NldF9zcmMoaGRtaSwgZGlzcGxheV9tb2RlKTsKKwltdGtfaGRtaV9od19hdWRfc2V0
X2NoYW5uZWxfc3RhdHVzKGhkbWksCisJCQkJCSAgIGhkbWktPmF1ZF9wYXJhbS5oZG1pX2xfY2hh
bm5lbF9zdGF0ZSwKKwkJCQkJICAgaGRtaS0+YXVkX3BhcmFtLmhkbWlfcl9jaGFubmVsX3N0YXRl
LAorCQkJCQkgICBoZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMpOworCisJdXNsZWVwX3Jhbmdl
KDUwLCAxMDApOworCisJbXRrX2hkbWlfYXVkX29uX29mZl9od19uY3RzKGhkbWksIHRydWUpOwor
CW10a19oZG1pX2F1ZF9lbmFibGVfcGFja2V0KGhkbWksIHRydWUpOworCW10a19oZG1pX2h3X2F1
ZF91bm11dGUoaGRtaSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc2V0
dXBfYXZpX2luZm9mcmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCXN0cnVjdCBkcm1f
ZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBoZG1pX2F2aV9pbmZvZnJhbWUgZnJhbWU7
CisJdTggYnVmZmVyWzE3XTsKKwlzc2l6ZV90IGVycjsKKworCWVyciA9IGRybV9oZG1pX2F2aV9p
bmZvZnJhbWVfZnJvbV9kaXNwbGF5X21vZGUoJmZyYW1lLCBtb2RlKTsKKwlpZiAoZXJyIDwgMCkg
eworCQlkZXZfZXJyKGhkbWktPmRldiwKKwkJCSJGYWlsZWQgdG8gZ2V0IEFWSSBpbmZvZnJhbWUg
ZnJvbSBtb2RlOiAlemRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gaGRt
aV9hdmlfaW5mb2ZyYW1lX3BhY2soJmZyYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlp
ZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBwYWNrIEFWSSBp
bmZvZnJhbWU6ICV6ZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwltdGtfaGRtaV9o
d19zZW5kX2luZm9fZnJhbWUoaGRtaSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc2V0dXBfc3BkX2luZm9mcmFtZShzdHJ1Y3Qg
bXRrX2hkbWkgKmhkbWksCisJCQkJCWNvbnN0IGNoYXIgKnZlbmRvciwKKwkJCQkJY29uc3QgY2hh
ciAqcHJvZHVjdCkKK3sKKwlzdHJ1Y3QgaGRtaV9zcGRfaW5mb2ZyYW1lIGZyYW1lOworCXU4IGJ1
ZmZlclsyOV07CisJc3NpemVfdCBlcnI7CisKKwllcnIgPSBoZG1pX3NwZF9pbmZvZnJhbWVfaW5p
dCgmZnJhbWUsIHZlbmRvciwgcHJvZHVjdCk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2Vyciho
ZG1pLT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBTUEQgaW5mb2ZyYW1lOiAlemRcbiIsCisJ
CQllcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IGhkbWlfc3BkX2luZm9mcmFtZV9w
YWNrKCZmcmFtZSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJaWYgKGVyciA8IDApIHsKKwkJ
ZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8gcGFjayBTRFAgaW5mb2ZyYW1lOiAlemRcbiIs
IGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJbXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1l
KGhkbWksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCXJldHVybiAwOworfQorCitzdGF0aWMg
aW50IG10a19oZG1pX3NldHVwX2F1ZGlvX2luZm9mcmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkp
Cit7CisJc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lIGZyYW1lOworCXU4IGJ1ZmZlclsxNF07
CisJc3NpemVfdCBlcnI7CisKKwllcnIgPSBoZG1pX2F1ZGlvX2luZm9mcmFtZV9pbml0KCZmcmFt
ZSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8gc2V0
dXAgYXVkaW8gaW5mb2ZyYW1lOiAlemRcbiIsCisJCQllcnIpOworCQlyZXR1cm4gZXJyOworCX0K
KworCWZyYW1lLmNvZGluZ190eXBlID0gSERNSV9BVURJT19DT0RJTkdfVFlQRV9TVFJFQU07CisJ
ZnJhbWUuc2FtcGxlX2ZyZXF1ZW5jeSA9IEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV9TVFJF
QU07CisJZnJhbWUuc2FtcGxlX3NpemUgPSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFX1NUUkVBTTsK
KwlmcmFtZS5jaGFubmVscyA9IG10a19oZG1pX2F1ZF9nZXRfY2hubF9jb3VudCgKKwkJCQkJaGRt
aS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF9jaGFuX3R5cGUpOworCisJZXJyID0gaGRtaV9hdWRpb19p
bmZvZnJhbWVfcGFjaygmZnJhbWUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChlcnIg
PCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHBhY2sgYXVkaW8gaW5mb2Zy
YW1lOiAlemRcbiIsCisJCQllcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCW10a19oZG1pX2h3
X3NlbmRfaW5mb19mcmFtZShoZG1pLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9zZXR1cF92ZW5kb3Jfc3BlY2lmaWNfaW5mb2Zy
YW1lKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl
ICptb2RlKQoreworCXN0cnVjdCBoZG1pX3ZlbmRvcl9pbmZvZnJhbWUgZnJhbWU7CisJdTggYnVm
ZmVyWzEwXTsKKwlzc2l6ZV90IGVycjsKKworCWVyciA9IGRybV9oZG1pX3ZlbmRvcl9pbmZvZnJh
bWVfZnJvbV9kaXNwbGF5X21vZGUoJmZyYW1lLCBtb2RlKTsKKwlpZiAoZXJyKSB7CisJCWRldl9l
cnIoaGRtaS0+ZGV2LAorCQkJIkZhaWxlZCB0byBnZXQgdmVuZG9yIGluZm9mcmFtZSBmcm9tIG1v
ZGU6ICV6ZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBoZG1pX3ZlbmRv
cl9pbmZvZnJhbWVfcGFjaygmZnJhbWUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChl
cnIpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8gcGFjayB2ZW5kb3IgaW5mb2Zy
YW1lOiAlemRcbiIsCisJCQllcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCW10a19oZG1pX2h3
X3NlbmRfaW5mb19mcmFtZShoZG1pLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9vdXRwdXRfaW5pdChzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWkpCit7CisJc3RydWN0IGhkbWlfYXVkaW9fcGFyYW0gKmF1ZF9wYXJhbSA9ICZoZG1pLT5h
dWRfcGFyYW07CisKKwloZG1pLT5jc3AgPSBIRE1JX0NPTE9SU1BBQ0VfUkdCOworCWF1ZF9wYXJh
bS0+YXVkX2NvZGVjID0gSERNSV9BVURJT19DT0RJTkdfVFlQRV9QQ007CisJYXVkX3BhcmFtLT5h
dWRfaGRtaV9mcyA9IEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV80ODAwMDsKKwlhdWRfcGFy
YW0tPmF1ZF9zYW1wZV9zaXplID0gSERNSV9BVURJT19TQU1QTEVfU0laRV8xNjsKKwlhdWRfcGFy
YW0tPmF1ZF9pbnB1dF90eXBlID0gSERNSV9BVURfSU5QVVRfSTJTOworCWF1ZF9wYXJhbS0+YXVk
X2kyc19mbXQgPSBIRE1JX0kyU19NT0RFX0kyU18yNEJJVDsKKwlhdWRfcGFyYW0tPmF1ZF9tY2xr
ID0gSERNSV9BVURfTUNMS18xMjhGUzsKKwlhdWRfcGFyYW0tPmllY19mcmFtZV9mcyA9IEhETUlf
SUVDXzQ4SzsKKwlhdWRfcGFyYW0tPmF1ZF9pbnB1dF9jaGFuX3R5cGUgPSBIRE1JX0FVRF9DSEFO
X1RZUEVfMl8wOworCWF1ZF9wYXJhbS0+aGRtaV9sX2NoYW5uZWxfc3RhdGVbMl0gPSAyOworCWF1
ZF9wYXJhbS0+aGRtaV9yX2NoYW5uZWxfc3RhdGVbMl0gPSAyOworCisJcmV0dXJuIDA7Cit9CisK
K3N0YXRpYyBpbnQgbXRrX2hkbWlfb3V0cHV0X3NldF9kaXNwbGF5X21vZGUoc3RydWN0IG10a19o
ZG1pICpoZG1pLAorCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJ
aW50IHJldDsKKworCW10a19oZG1pX2h3X3ZpZF9ibGFjayhoZG1pLCB0cnVlKTsKKwltdGtfaGRt
aV9od19hdWRfbXV0ZShoZG1pKTsKKwltdGtfaGRtaV9od19zZW5kX2F2X211dGUoaGRtaSk7CisJ
cGh5X3Bvd2VyX29mZihoZG1pLT5waHkpOworCisJcmV0ID0gbXRrX2hkbWlfdmlkZW9fY2hhbmdl
X3ZwbGwoaGRtaSwKKwkJCQkJIG1vZGUtPmNsb2NrICogMTAwMCk7CisJaWYgKHJldCkgeworCQlk
ZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBzZXQgdnBsbDogJWRcbiIsIHJldCk7CisJCXJl
dHVybiByZXQ7CisJfQorCW10a19oZG1pX3ZpZGVvX3NldF9kaXNwbGF5X21vZGUoaGRtaSwgbW9k
ZSk7CisKKwlwaHlfcG93ZXJfb24oaGRtaS0+cGh5KTsKKwltdGtfaGRtaV9hdWRfb3V0cHV0X2Nv
bmZpZyhoZG1pLCBtb2RlKTsKKworCW10a19oZG1pX3NldHVwX2F1ZGlvX2luZm9mcmFtZShoZG1p
KTsKKwltdGtfaGRtaV9zZXR1cF9hdmlfaW5mb2ZyYW1lKGhkbWksIG1vZGUpOworCW10a19oZG1p
X3NldHVwX3NwZF9pbmZvZnJhbWUoaGRtaSwgIm1lZGlhdGVrIiwgIk9uLWNoaXAgSERNSSIpOwor
CWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfM0RfTUFTSykKKwkJbXRrX2hkbWlfc2V0
dXBfdmVuZG9yX3NwZWNpZmljX2luZm9mcmFtZShoZG1pLCBtb2RlKTsKKworCW10a19oZG1pX2h3
X3ZpZF9ibGFjayhoZG1pLCBmYWxzZSk7CisJbXRrX2hkbWlfaHdfYXVkX3VubXV0ZShoZG1pKTsK
KwltdGtfaGRtaV9od19zZW5kX2F2X3VubXV0ZShoZG1pKTsKKworCXJldHVybiAwOworfQorCitz
dGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10a19oZG1pX2Nsa19uYW1lc1tNVEtfSERNSV9DTEtf
Q09VTlRdID0geworCVtNVEtfSERNSV9DTEtfSERNSV9QSVhFTF0gPSAicGl4ZWwiLAorCVtNVEtf
SERNSV9DTEtfSERNSV9QTExdID0gInBsbCIsCisJW01US19IRE1JX0NMS19BVURfQkNMS10gPSAi
YmNsayIsCisJW01US19IRE1JX0NMS19BVURfU1BESUZdID0gInNwZGlmIiwKK307CisKK3N0YXRp
YyBpbnQgbXRrX2hkbWlfZ2V0X2FsbF9jbGsoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCXN0
cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJS
QVlfU0laRShtdGtfaGRtaV9jbGtfbmFtZXMpOyBpKyspIHsKKwkJaGRtaS0+Y2xrW2ldID0gb2Zf
Y2xrX2dldF9ieV9uYW1lKG5wLAorCQkJCQkJICBtdGtfaGRtaV9jbGtfbmFtZXNbaV0pOworCQlp
ZiAoSVNfRVJSKGhkbWktPmNsa1tpXSkpCisJCQlyZXR1cm4gUFRSX0VSUihoZG1pLT5jbGtbaV0p
OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9jbGtfZW5hYmxlX2F1
ZGlvKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gY2xrX3By
ZXBhcmVfZW5hYmxlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfQVVEX0JDTEtdKTsKKwlpZiAocmV0
KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWktPmNsa1tN
VEtfSERNSV9DTEtfQVVEX1NQRElGXSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXR1
cm4gMDsKK2VycjoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX0NM
S19BVURfQkNMS10pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2Ns
a19kaXNhYmxlX2F1ZGlvKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwljbGtfZGlzYWJsZV91
bnByZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19BVURfQkNMS10pOworCWNsa19kaXNhYmxl
X3VucHJlcGFyZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0FVRF9TUERJRl0pOworfQorCitzdGF0
aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBoZG1pX2Nvbm5fZGV0ZWN0KHN0cnVjdCBkcm1f
Y29ubmVjdG9yICpjb25uLAorCQkJCQkJICBib29sIGZvcmNlKQoreworCXN0cnVjdCBtdGtfaGRt
aSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCXJldHVybiBtdGtfY2VjX2hw
ZF9oaWdoKGhkbWktPmNlY19kZXYpID8KKwkgICAgICAgY29ubmVjdG9yX3N0YXR1c19jb25uZWN0
ZWQgOiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHZvaWQgaGRt
aV9jb25uX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4pCit7CisJc3RydWN0IG10
a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9jb25uKGNvbm4pOworCisJbXRrX2NlY19zZXRf
aHBkX2V2ZW50KGhkbWktPmNlY19kZXYsIE5VTEwsIE5VTEwpOworCisJZHJtX2Nvbm5lY3Rvcl91
bnJlZ2lzdGVyKGNvbm4pOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uKTsKK30KKworc3Rh
dGljIGludCBtdGtfaGRtaV9jb25uX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u
bikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2Nvbm4oY29ubik7
CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJaW50IHJldDsKKworCWlmICghaGRtaS0+ZGRjX2FkcHQp
CisJCXJldHVybiAtRU5PREVWOworCisJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uLCBoZG1pLT5k
ZGNfYWRwdCk7CisJaWYgKCFlZGlkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWhkbWktPmR2aV9t
b2RlID0gIWRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKKworCWRybV9tb2RlX2Nvbm5l
Y3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uLCBlZGlkKTsKKworCXJldCA9IGRybV9hZGRf
ZWRpZF9tb2Rlcyhjb25uLCBlZGlkKTsKKwlkcm1fZWRpZF90b19lbGQoY29ubiwgZWRpZCk7CisJ
a2ZyZWUoZWRpZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9jb25u
X21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4sCisJCQkJICAgIHN0cnVjdCBk
cm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlf
Y3R4X2Zyb21fY29ubihjb25uKTsKKworCWRldl9kYmcoaGRtaS0+ZGV2LCAieHJlcz0lZCwgeXJl
cz0lZCwgcmVmcmVzaD0lZCwgaW50bD0lZCBjbG9jaz0lZFxuIiwKKwkJbW9kZS0+aGRpc3BsYXks
IG1vZGUtPnZkaXNwbGF5LCBtb2RlLT52cmVmcmVzaCwKKwkJISEobW9kZS0+ZmxhZ3MgJiBEUk1f
TU9ERV9GTEFHX0lOVEVSTEFDRSksIG1vZGUtPmNsb2NrICogMTAwMCk7CisKKwlpZiAoaGRtaS0+
YnJpZGdlLm5leHQpIHsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgYWRqdXN0ZWRfbW9kZTsK
KworCQlkcm1fbW9kZV9jb3B5KCZhZGp1c3RlZF9tb2RlLCBtb2RlKTsKKwkJaWYgKCFkcm1fYnJp
ZGdlX21vZGVfZml4dXAoaGRtaS0+YnJpZGdlLm5leHQsIG1vZGUsCisJCQkJCSAgICZhZGp1c3Rl
ZF9tb2RlKSkKKwkJCXJldHVybiBNT0RFX0JBRDsKKwl9CisKKwlpZiAobW9kZS0+Y2xvY2sgPCAy
NzAwMCkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfTE9XOworCWlmIChtb2RlLT5jbG9jayA+IDI5NzAw
MCkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKworCXJldHVybiBkcm1fbW9kZV92YWxpZGF0
ZV9zaXplKG1vZGUsIDB4MWZmZiwgMHgxZmZmKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5j
b2RlciAqbXRrX2hkbWlfY29ubl9iZXN0X2VuYyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubikK
K3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2Nvbm4oY29ubik7CisK
KwlyZXR1cm4gaGRtaS0+YnJpZGdlLmVuY29kZXI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg
ZHJtX2Nvbm5lY3Rvcl9mdW5jcyBtdGtfaGRtaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMg
PSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gaGRtaV9jb25u
X2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rv
cl9tb2RlcywKKwkuZGVzdHJveSA9IGhkbWlfY29ubl9kZXN0cm95LAorCS5yZXNldCA9IGRybV9h
dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9
IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19k
ZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUs
Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzCisJ
CW10a19oZG1pX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IG10a19o
ZG1pX2Nvbm5fZ2V0X21vZGVzLAorCS5tb2RlX3ZhbGlkID0gbXRrX2hkbWlfY29ubl9tb2RlX3Zh
bGlkLAorCS5iZXN0X2VuY29kZXIgPSBtdGtfaGRtaV9jb25uX2Jlc3RfZW5jLAorfTsKKworc3Rh
dGljIHZvaWQgbXRrX2hkbWlfaHBkX2V2ZW50KGJvb2wgaHBkLCBzdHJ1Y3QgZGV2aWNlICpkZXYp
Cit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlp
ZiAoaGRtaSAmJiBoZG1pLT5icmlkZ2UuZW5jb2RlciAmJiBoZG1pLT5icmlkZ2UuZW5jb2Rlci0+
ZGV2KQorCQlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoaGRtaS0+YnJpZGdlLmVuY29kZXItPmRl
dik7Cit9CisKKy8qCisgKiBCcmlkZ2UgY2FsbGJhY2tzCisgKi8KKworc3RhdGljIGludCBtdGtf
aGRtaV9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0
IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsKKwlpbnQgcmV0
OworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGJyaWRnZS0+ZW5jb2Rlci0+ZGV2LCAmaGRt
aS0+Y29ubiwKKwkJCQkgJm10a19oZG1pX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCQkgRFJNX01PREVf
Q09OTkVDVE9SX0hETUlBKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFp
bGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9yOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsK
Kwl9CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZoZG1pLT5jb25uLCAmbXRrX2hkbWlfY29u
bmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwloZG1pLT5jb25uLnBvbGxlZCA9IERSTV9DT05ORUNU
T1JfUE9MTF9IUEQ7CisJaGRtaS0+Y29ubi5pbnRlcmxhY2VfYWxsb3dlZCA9IHRydWU7CisJaGRt
aS0+Y29ubi5kb3VibGVzY2FuX2FsbG93ZWQgPSBmYWxzZTsKKworCXJldCA9IGRybV9jb25uZWN0
b3JfcmVnaXN0ZXIoJmhkbWktPmNvbm4pOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihoZG1pLT5k
ZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29ubmVjdG9yOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJu
IHJldDsKKwl9CisKKwlyZXQgPSBkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJmhk
bWktPmNvbm4sCisJCQkJCQlicmlkZ2UtPmVuY29kZXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vy
cihoZG1pLT5kZXYsCisJCQkiRmFpbGVkIHRvIGF0dGFjaCBjb25uZWN0b3IgdG8gZW5jb2Rlcjog
JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGJyaWRnZS0+bmV4dCkgewor
CQlicmlkZ2UtPm5leHQtPmVuY29kZXIgPSBicmlkZ2UtPmVuY29kZXI7CisJCXJldCA9IGRybV9i
cmlkZ2VfYXR0YWNoKGJyaWRnZS0+ZW5jb2Rlci0+ZGV2LCBicmlkZ2UtPm5leHQpOworCQlpZiAo
cmV0KSB7CisJCQlkZXZfZXJyKGhkbWktPmRldiwKKwkJCQkiRmFpbGVkIHRvIGF0dGFjaCBleHRl
cm5hbCBicmlkZ2U6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCW10
a19jZWNfc2V0X2hwZF9ldmVudChoZG1pLT5jZWNfZGV2LCBtdGtfaGRtaV9ocGRfZXZlbnQsIGhk
bWktPmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgbXRrX2hkbWlfYnJpZGdl
X21vZGVfZml4dXAoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkgICAgICAgY29uc3Qg
c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fZGlz
cGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMg
dm9pZCBtdGtfaGRtaV9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQor
eworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7
CisKKwlpZiAoIWhkbWktPmVuYWJsZWQpCisJCXJldHVybjsKKworCXBoeV9wb3dlcl9vZmYoaGRt
aS0+cGh5KTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19I
RE1JX1BJWEVMXSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPmNsa1tNVEtfSERNSV9D
TEtfSERNSV9QTExdKTsKKworCWhkbWktPmVuYWJsZWQgPSBmYWxzZTsKK30KKworc3RhdGljIHZv
aWQgbXRrX2hkbWlfYnJpZGdlX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl
KQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRn
ZSk7CisKKwlpZiAoIWhkbWktPnBvd2VyZWQpCisJCXJldHVybjsKKworCW10a19oZG1pX2h3XzFw
NF92ZXJzaW9uX2VuYWJsZShoZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9od19tYWtlX3JlZ193cml0
YWJsZShoZG1pLCBmYWxzZSk7CisKKwloZG1pLT5wb3dlcmVkID0gZmFsc2U7Cit9CisKK3N0YXRp
YyB2b2lkIG10a19oZG1pX2JyaWRnZV9tb2RlX3NldChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl
LAorCQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICBzdHJ1
Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOworCisJZGV2X2RiZyhoZG1pLT5k
ZXYsICJjdXIgaW5mbzogbmFtZTolcywgaGRpc3BsYXk6JWRcbiIsCisJCWFkanVzdGVkX21vZGUt
Pm5hbWUsIGFkanVzdGVkX21vZGUtPmhkaXNwbGF5KTsKKwlkZXZfZGJnKGhkbWktPmRldiwgImhz
eW5jX3N0YXJ0OiVkLGhzeW5jX2VuZDolZCwgaHRvdGFsOiVkIiwKKwkJYWRqdXN0ZWRfbW9kZS0+
aHN5bmNfc3RhcnQsIGFkanVzdGVkX21vZGUtPmhzeW5jX2VuZCwKKwkJYWRqdXN0ZWRfbW9kZS0+
aHRvdGFsKTsKKwlkZXZfZGJnKGhkbWktPmRldiwgImhza2V3OiVkLCB2ZGlzcGxheTolZFxuIiwK
KwkJYWRqdXN0ZWRfbW9kZS0+aHNrZXcsIGFkanVzdGVkX21vZGUtPnZkaXNwbGF5KTsKKwlkZXZf
ZGJnKGhkbWktPmRldiwgInZzeW5jX3N0YXJ0OiVkLCB2c3luY19lbmQ6JWQsIHZ0b3RhbDolZCIs
CisJCWFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0LCBhZGp1c3RlZF9tb2RlLT52c3luY19lbmQs
CisJCWFkanVzdGVkX21vZGUtPnZ0b3RhbCk7CisJZGV2X2RiZyhoZG1pLT5kZXYsICJ2c2Nhbjol
ZCwgZmxhZzolZFxuIiwKKwkJYWRqdXN0ZWRfbW9kZS0+dnNjYW4sIGFkanVzdGVkX21vZGUtPmZs
YWdzKTsKKworCWRybV9tb2RlX2NvcHkoJmhkbWktPm1vZGUsIGFkanVzdGVkX21vZGUpOworfQor
CitzdGF0aWMgdm9pZCBtdGtfaGRtaV9icmlkZ2VfcHJlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRn
ZSAqYnJpZGdlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJp
ZGdlKGJyaWRnZSk7CisKKwltdGtfaGRtaV9od19tYWtlX3JlZ193cml0YWJsZShoZG1pLCB0cnVl
KTsKKwltdGtfaGRtaV9od18xcDRfdmVyc2lvbl9lbmFibGUoaGRtaSwgdHJ1ZSk7CisKKwloZG1p
LT5wb3dlcmVkID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfYnJpZGdlX2VuYWJs
ZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9
IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7CisKKwltdGtfaGRtaV9vdXRwdXRfc2V0X2Rp
c3BsYXlfbW9kZShoZG1pLCAmaGRtaS0+bW9kZSk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWkt
PmNsa1tNVEtfSERNSV9DTEtfSERNSV9QTExdKTsKKwljbGtfcHJlcGFyZV9lbmFibGUoaGRtaS0+
Y2xrW01US19IRE1JX0NMS19IRE1JX1BJWEVMXSk7CisJcGh5X3Bvd2VyX29uKGhkbWktPnBoeSk7
CisKKwloZG1pLT5lbmFibGVkID0gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f
YnJpZGdlX2Z1bmNzIG10a19oZG1pX2JyaWRnZV9mdW5jcyA9IHsKKwkuYXR0YWNoID0gbXRrX2hk
bWlfYnJpZGdlX2F0dGFjaCwKKwkubW9kZV9maXh1cCA9IG10a19oZG1pX2JyaWRnZV9tb2RlX2Zp
eHVwLAorCS5kaXNhYmxlID0gbXRrX2hkbWlfYnJpZGdlX2Rpc2FibGUsCisJLnBvc3RfZGlzYWJs
ZSA9IG10a19oZG1pX2JyaWRnZV9wb3N0X2Rpc2FibGUsCisJLm1vZGVfc2V0ID0gbXRrX2hkbWlf
YnJpZGdlX21vZGVfc2V0LAorCS5wcmVfZW5hYmxlID0gbXRrX2hkbWlfYnJpZGdlX3ByZV9lbmFi
bGUsCisJLmVuYWJsZSA9IG10a19oZG1pX2JyaWRnZV9lbmFibGUsCit9OworCitzdGF0aWMgaW50
IG10a19oZG1pX2R0X3BhcnNlX3BkYXRhKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICBz
dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZw
ZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1
Y3QgZGV2aWNlX25vZGUgKmNlY19ucCwgKnBvcnQsICplcCwgKnJlbW90ZSwgKmkyY19ucDsKKwlz
dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjZWNfcGRldjsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7
CisJc3RydWN0IHJlc291cmNlICptZW07CisJaW50IHJldDsKKworCXJldCA9IG10a19oZG1pX2dl
dF9hbGxfY2xrKGhkbWksIG5wKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVk
IHRvIGdldCBjbG9ja3M6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFRo
ZSBDRUMgbW9kdWxlIGhhbmRsZXMgSERNSSBob3RwbHVnIGRldGVjdGlvbiAqLworCWNlY19ucCA9
IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKG5wLT5wYXJlbnQsIE5VTEwsCisJCQkJCSAibWVkaWF0
ZWssbXQ4MTczLWNlYyIpOworCWlmICghY2VjX25wKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVk
IHRvIGZpbmQgQ0VDIG5vZGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljZWNfcGRl
diA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoY2VjX25wKTsKKwlpZiAoIWNlY19wZGV2KSB7CisJ
CWRldl9lcnIoaGRtaS0+ZGV2LCAiV2FpdGluZyBmb3IgQ0VDIGRldmljZSAlc1xuIiwKKwkJCWNl
Y19ucC0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCWhkbWktPmNl
Y19kZXYgPSAmY2VjX3BkZXYtPmRldjsKKworCS8qCisJICogVGhlIG1lZGlhdGVrLHN5c2Nvbi1o
ZG1pIHByb3BlcnR5IGNvbnRhaW5zIGEgcGhhbmRsZSBsaW5rIHRvIHRoZQorCSAqIE1NU1lTX0NP
TkZJRyBkZXZpY2UgYW5kIHRoZSByZWdpc3RlciBvZmZzZXQgb2YgdGhlIEhETUlfU1lTX0NGRwor
CSAqIHJlZ2lzdGVycyBpdCBjb250YWlucy4KKwkgKi8KKwlyZWdtYXAgPSBzeXNjb25fcmVnbWFw
X2xvb2t1cF9ieV9waGFuZGxlKG5wLCAibWVkaWF0ZWssc3lzY29uLWhkbWkiKTsKKwlyZXQgPSBv
Zl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgIm1lZGlhdGVrLHN5c2Nvbi1oZG1pIiwgMSwK
KwkJCQkJICZoZG1pLT5zeXNfb2Zmc2V0KTsKKwlpZiAoSVNfRVJSKHJlZ21hcCkpCisJCXJldCA9
IFBUUl9FUlIocmVnbWFwKTsKKwlpZiAocmV0KSB7CisJCXJldCA9IFBUUl9FUlIocmVnbWFwKTsK
KwkJZGV2X2VycihkZXYsCisJCQkiRmFpbGVkIHRvIGdldCBzeXN0ZW0gY29uZmlndXJhdGlvbiBy
ZWdpc3RlcnM6ICVkXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaGRtaS0+c3lz
X3JlZ21hcCA9IHJlZ21hcDsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJ
T1JFU09VUkNFX01FTSwgMCk7CisJaGRtaS0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShk
ZXYsIG1lbSk7CisJaWYgKElTX0VSUihoZG1pLT5yZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIoaGRt
aS0+cmVncyk7CisKKwlwb3J0ID0gb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQobnAsIDEpOworCWlm
ICghcG9ydCkgeworCQlkZXZfZXJyKGRldiwgIk1pc3Npbmcgb3V0cHV0IHBvcnQgbm9kZVxuIik7
CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVwID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUocG9y
dCwgImVuZHBvaW50Iik7CisJaWYgKCFlcCkgeworCQlkZXZfZXJyKGRldiwgIk1pc3NpbmcgZW5k
cG9pbnQgbm9kZSBpbiBwb3J0ICVzXG4iLAorCQkJcG9ydC0+ZnVsbF9uYW1lKTsKKwkJb2Zfbm9k
ZV9wdXQocG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlvZl9ub2RlX3B1dChwb3J0KTsK
KworCXJlbW90ZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZXApOworCWlmICgh
cmVtb3RlKSB7CisJCWRldl9lcnIoZGV2LCAiTWlzc2luZyBjb25uZWN0b3IvYnJpZGdlIG5vZGUg
Zm9yIGVuZHBvaW50ICVzXG4iLAorCQkJZXAtPmZ1bGxfbmFtZSk7CisJCW9mX25vZGVfcHV0KGVw
KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW9mX25vZGVfcHV0KGVwKTsKKworCWlmICghb2Zf
ZGV2aWNlX2lzX2NvbXBhdGlibGUocmVtb3RlLCAiaGRtaS1jb25uZWN0b3IiKSkgeworCQloZG1p
LT5icmlkZ2UubmV4dCA9IG9mX2RybV9maW5kX2JyaWRnZShyZW1vdGUpOworCQlpZiAoIWhkbWkt
PmJyaWRnZS5uZXh0KSB7CisJCQlkZXZfZXJyKGRldiwgIldhaXRpbmcgZm9yIGV4dGVybmFsIGJy
aWRnZVxuIik7CisJCQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQkJcmV0dXJuIC1FUFJPQkVfREVG
RVI7CisJCX0KKwl9CisKKwlpMmNfbnAgPSBvZl9wYXJzZV9waGFuZGxlKHJlbW90ZSwgImRkYy1p
MmMtYnVzIiwgMCk7CisJaWYgKCFpMmNfbnApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g
ZmluZCBkZGMtaTJjLWJ1cyBub2RlIGluICVzXG4iLAorCQkJcmVtb3RlLT5mdWxsX25hbWUpOwor
CQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJb2Zfbm9kZV9w
dXQocmVtb3RlKTsKKworCWhkbWktPmRkY19hZHB0ID0gb2ZfZmluZF9pMmNfYWRhcHRlcl9ieV9u
b2RlKGkyY19ucCk7CisJaWYgKCFoZG1pLT5kZGNfYWRwdCkgeworCQlkZXZfZXJyKGRldiwgIkZh
aWxlZCB0byBnZXQgZGRjIGkyYyBhZGFwdGVyIGJ5IG5vZGVcbiIpOworCQlyZXR1cm4gLUVJTlZB
TDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZHJtX2hkbWlfcHJvYmUo
c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWk7
CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlpbnQgcmV0OworCisJaGRtaSA9
IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaGRtaSksIEdGUF9LRVJORUwpOworCWlmICghaGRt
aSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZG1pLT5kZXYgPSBkZXY7CisKKwlyZXQgPSBtdGtf
aGRtaV9kdF9wYXJzZV9wZGF0YShoZG1pLCBwZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0
OworCisJaGRtaS0+cGh5ID0gZGV2bV9waHlfZ2V0KGRldiwgImhkbWkiKTsKKwlpZiAoSVNfRVJS
KGhkbWktPnBoeSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoZG1pLT5waHkpOworCQlkZXZfZXJyKGRl
diwgIkZhaWxlZCB0byBnZXQgSERNSSBQSFk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor
CX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhkbWkpOworCisJcmV0ID0gbXRrX2hk
bWlfb3V0cHV0X2luaXQoaGRtaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxl
ZCB0byBpbml0aWFsaXplIGhkbWkgb3V0cHV0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlo
ZG1pLT5icmlkZ2UuZnVuY3MgPSAmbXRrX2hkbWlfYnJpZGdlX2Z1bmNzOworCWhkbWktPmJyaWRn
ZS5vZl9ub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7CisJcmV0ID0gZHJtX2JyaWRnZV9hZGQoJmhk
bWktPmJyaWRnZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZGQg
YnJpZGdlLCByZXQgPSAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBt
dGtfaGRtaV9jbGtfZW5hYmxlX2F1ZGlvKGhkbWkpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihk
ZXYsICJGYWlsZWQgdG8gZW5hYmxlIGF1ZGlvIGNsb2NrczogJWRcbiIsIHJldCk7CisJCWdvdG8g
ZXJyX2JyaWRnZV9yZW1vdmU7CisJfQorCisJZGV2X2RiZyhkZXYsICJtZWRpYXRlayBoZG1pIHBy
b2JlIHN1Y2Nlc3NcbiIpOworCXJldHVybiAwOworCitlcnJfYnJpZGdlX3JlbW92ZToKKwlkcm1f
YnJpZGdlX3JlbW92ZSgmaGRtaS0+YnJpZGdlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg
aW50IG10a19kcm1faGRtaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK
KwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwor
CWRybV9icmlkZ2VfcmVtb3ZlKCZoZG1pLT5icmlkZ2UpOworCW10a19oZG1pX2Nsa19kaXNhYmxl
X2F1ZGlvKGhkbWkpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitz
dGF0aWMgaW50IG10a19oZG1pX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVj
dCBtdGtfaGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJbXRrX2hkbWlfY2xr
X2Rpc2FibGVfYXVkaW8oaGRtaSk7CisJZGV2X2RiZyhkZXYsICJoZG1pIHN1c3BlbmQgc3VjY2Vz
cyFcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3Jlc3VtZShzdHJ1
Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZk
YXRhKGRldik7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBtdGtfaGRtaV9jbGtfZW5hYmxlX2F1
ZGlvKGhkbWkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJoZG1pIHJlc3VtZSBmYWls
ZWQhXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXZfZGJnKGRldiwgImhkbWkgcmVzdW1l
IHN1Y2Nlc3MhXG4iKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorc3RhdGljIFNJTVBMRV9ERVZf
UE1fT1BTKG10a19oZG1pX3BtX29wcywKKwkJCSBtdGtfaGRtaV9zdXNwZW5kLCBtdGtfaGRtaV9y
ZXN1bWUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZHJtX2hkbWlf
b2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtaGRtaSIsIH0s
CisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX2RyaXZl
ciA9IHsKKwkucHJvYmUgPSBtdGtfZHJtX2hkbWlfcHJvYmUsCisJLnJlbW92ZSA9IG10a19kcm1f
aGRtaV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibWVkaWF0ZWstZHJtLWhkbWki
LAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZHJtX2hkbWlfb2ZfaWRzLAorCQkucG0gPSAmbXRr
X2hkbWlfcG1fb3BzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAq
IGNvbnN0IG10a19oZG1pX2RyaXZlcnNbXSA9IHsKKwkmbXRrX2hkbWlfcGh5X2RyaXZlciwKKwkm
bXRrX2hkbWlfZGRjX2RyaXZlciwKKwkmbXRrX2NlY19kcml2ZXIsCisJJm10a19oZG1pX2RyaXZl
ciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10a19oZG1pdHhfaW5pdCh2b2lkKQoreworCWlu
dCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfaGRtaV9k
cml2ZXJzKTsgaSsrKSB7CisJCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihtdGtfaGRt
aV9kcml2ZXJzW2ldKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIHJl
Z2lzdGVyICVzIGRyaXZlcjogJWRcbiIsCisJCQkgICAgICAgbXRrX2hkbWlfZHJpdmVyc1tpXS0+
ZHJpdmVyLm5hbWUsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOwor
CitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlciht
dGtfaGRtaV9kcml2ZXJzW2ldKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9f
ZXhpdCBtdGtfaGRtaXR4X2V4aXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IEFSUkFZ
X1NJWkUobXRrX2hkbWlfZHJpdmVycykgLSAxOyBpID49IDA7IGktLSkKKwkJcGxhdGZvcm1fZHJp
dmVyX3VucmVnaXN0ZXIobXRrX2hkbWlfZHJpdmVyc1tpXSk7Cit9CisKK21vZHVsZV9pbml0KG10
a19oZG1pdHhfaW5pdCk7Cittb2R1bGVfZXhpdChtdGtfaGRtaXR4X2V4aXQpOworCitNT0RVTEVf
QVVUSE9SKCJKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQ
VElPTigiTWVkaWFUZWsgSERNSSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsK
ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oIGIvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNjM3MWIzZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfaGRtaS5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNv
bT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8K
KyNpZm5kZWYgX01US19IRE1JX0NUUkxfSAorI2RlZmluZSBfTVRLX0hETUlfQ1RSTF9ICisKK3N0
cnVjdCBwbGF0Zm9ybV9kcml2ZXI7CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10
a19jZWNfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2hkbWlfZGRj
X2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX3BoeV9kcml2
ZXI7CisKKyNlbmRpZiAvKiBfTVRLX0hETUlfQ1RSTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfZGRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2hkbWlfZGRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3
ZGQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRt
aV9kZGMuYwpAQCAtMCwwICsxLDM1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRp
YVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoK
KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1
ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg
PGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9k
ZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+
CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xr
Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5j
bHVkZSA8bGludXgvaW9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2lu
Y2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisK
KyNkZWZpbmUgU0lGMV9DTE9LCQkoMjg4KQorI2RlZmluZSBERENfRERDTUNUTDAJCSgweDApCisj
ZGVmaW5lIEREQ01fT0RSQUlOCQkJQklUKDMxKQorI2RlZmluZSBERENNX0NMS19ESVZfT0ZGU0VU
CQkoMTYpCisjZGVmaW5lIEREQ01fQ0xLX0RJVl9NQVNLCQkoMHhmZmYgPDwgMTYpCisjZGVmaW5l
IEREQ01fQ1NfU1RBVFVTCQkJQklUKDQpCisjZGVmaW5lIEREQ01fU0NMX1NUQVRFCQkJQklUKDMp
CisjZGVmaW5lIEREQ01fU0RBX1NUQVRFCQkJQklUKDIpCisjZGVmaW5lIEREQ01fU00wRU4JCQlC
SVQoMSkKKyNkZWZpbmUgRERDTV9TQ0xfU1RSRUNICQkJQklUKDApCisjZGVmaW5lIEREQ19ERENN
Q1RMMQkJKDB4NCkKKyNkZWZpbmUgRERDTV9BQ0tfT0ZGU0VUCQkJKDE2KQorI2RlZmluZSBERENN
X0FDS19NQVNLCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIEREQ01fUEdMRU5fT0ZGU0VUCQkoOCkK
KyNkZWZpbmUgRERDTV9QR0xFTl9NQVNLCQkJKDB4NyA8PCA4KQorI2RlZmluZSBERENNX1NJRl9N
T0RFX09GRlNFVAkJKDQpCisjZGVmaW5lIEREQ01fU0lGX01PREVfTUFTSwkJKDB4NyA8PCA0KQor
I2RlZmluZSBERENNX1NUQVJUCQkJKDB4MSkKKyNkZWZpbmUgRERDTV9XUklURV9EQVRBCQkJKDB4
MikKKyNkZWZpbmUgRERDTV9TVE9QCQkJKDB4MykKKyNkZWZpbmUgRERDTV9SRUFEX0RBVEFfTk9f
QUNLCQkoMHg0KQorI2RlZmluZSBERENNX1JFQURfREFUQV9BQ0sJCSgweDUpCisjZGVmaW5lIERE
Q01fVFJJCQkJQklUKDApCisjZGVmaW5lIEREQ19ERENNRDAJCSgweDgpCisjZGVmaW5lIEREQ01f
REFUQTMJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUgRERDTV9EQVRBMgkJCSgweGZmIDw8IDE2KQor
I2RlZmluZSBERENNX0RBVEExCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgRERDTV9EQVRBMAkJCSgw
eGZmIDw8IDApCisjZGVmaW5lIEREQ19ERENNRDEJCSgweGMpCisjZGVmaW5lIEREQ01fREFUQTcJ
CQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUgRERDTV9EQVRBNgkJCSgweGZmIDw8IDE2KQorI2RlZmlu
ZSBERENNX0RBVEE1CQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgRERDTV9EQVRBNAkJCSgweGZmIDw8
IDApCisKK3N0cnVjdCBtdGtfaGRtaV9kZGMgeworCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwOwor
CXN0cnVjdCBjbGsgKmNsazsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7Cit9OworCitzdGF0aWMgaW5s
aW5lIHZvaWQgc2lmX3NldF9iaXQoc3RydWN0IG10a19oZG1pX2RkYyAqZGRjLCB1bnNpZ25lZCBp
bnQgb2Zmc2V0LAorCQkJICAgICAgIHVuc2lnbmVkIGludCB2YWwpCit7CisJd3JpdGVsKHJlYWRs
KGRkYy0+cmVncyArIG9mZnNldCkgfCB2YWwsIGRkYy0+cmVncyArIG9mZnNldCk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBzaWZfY2xyX2JpdChzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMsIHVu
c2lnbmVkIGludCBvZmZzZXQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl3cml0
ZWwocmVhZGwoZGRjLT5yZWdzICsgb2Zmc2V0KSAmIH52YWwsIGRkYy0+cmVncyArIG9mZnNldCk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaWZfYml0X2lzX3NldChzdHJ1Y3QgbXRrX2hkbWlf
ZGRjICpkZGMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJICB1bnNpZ25lZCBpbnQgdmFsKQor
eworCXJldHVybiAocmVhZGwoZGRjLT5yZWdzICsgb2Zmc2V0KSAmIHZhbCkgPT0gdmFsOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgc2lmX3dyaXRlX21hc2soc3RydWN0IG10a19oZG1pX2RkYyAq
ZGRjLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJCSAgdW5zaWduZWQgaW50IG1hc2ssIHVuc2ln
bmVkIGludCBzaGlmdCwKKwkJCQkgIHVuc2lnbmVkIGludCB2YWwpCit7CisJdW5zaWduZWQgaW50
IHRtcDsKKworCXRtcCA9IHJlYWRsKGRkYy0+cmVncyArIG9mZnNldCk7CisJdG1wICY9IH5tYXNr
OworCXRtcCB8PSAodmFsIDw8IHNoaWZ0KSAmIG1hc2s7CisJd3JpdGVsKHRtcCwgZGRjLT5yZWdz
ICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2lmX3JlYWRfbWFz
ayhzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMsCisJCQkJCSB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1
bnNpZ25lZCBpbnQgbWFzaywKKwkJCQkJIHVuc2lnbmVkIGludCBzaGlmdCkKK3sKKwlyZXR1cm4g
KHJlYWRsKGRkYy0+cmVncyArIG9mZnNldCkgJiBtYXNrKSA+PiBzaGlmdDsKK30KKworc3RhdGlj
IHZvaWQgZGRjbV90cmlnZ2VyX21vZGUoc3RydWN0IG10a19oZG1pX2RkYyAqZGRjLCBpbnQgbW9k
ZSkKK3sKKwl1MzIgdmFsOworCisJc2lmX3dyaXRlX21hc2soZGRjLCBERENfRERDTUNUTDEsIERE
Q01fU0lGX01PREVfTUFTSywKKwkJICAgICAgIEREQ01fU0lGX01PREVfT0ZGU0VULCBtb2RlKTsK
KwlzaWZfc2V0X2JpdChkZGMsIEREQ19ERENNQ1RMMSwgRERDTV9UUkkpOworCXJlYWRsX3BvbGxf
dGltZW91dChkZGMtPnJlZ3MgKyBERENfRERDTUNUTDEsIHZhbCwgdmFsICYgRERDTV9UUkksIDQs
CisJCQkgICAyMDAwMCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfZGRjX3JlYWRfbXNnKHN0
cnVjdCBtdGtfaGRtaV9kZGMgKmRkYywgc3RydWN0IGkyY19tc2cgKm1zZykKK3sKKwlzdHJ1Y3Qg
ZGV2aWNlICpkZXYgPSBkZGMtPmFkYXAuZGV2LnBhcmVudDsKKwl1MzIgcmVtYWluX2NvdW50LCBh
Y2tfY291bnQsIGFja19maW5hbCwgcmVhZF9jb3VudCwgdGVtcF9jb3VudDsKKwl1MzIgaW5kZXgg
PSAwOworCXUzMiBhY2s7CisJaW50IGk7CisKKwlkZGNtX3RyaWdnZXJfbW9kZShkZGMsIEREQ01f
U1RBUlQpOworCXNpZl93cml0ZV9tYXNrKGRkYywgRERDX0REQ01EMCwgMHhmZiwgMCwgKG1zZy0+
YWRkciA8PCAxKSB8IDB4MDEpOworCXNpZl93cml0ZV9tYXNrKGRkYywgRERDX0REQ01DVEwxLCBE
RENNX1BHTEVOX01BU0ssIEREQ01fUEdMRU5fT0ZGU0VULAorCQkgICAgICAgMHgwMCk7CisJZGRj
bV90cmlnZ2VyX21vZGUoZGRjLCBERENNX1dSSVRFX0RBVEEpOworCWFjayA9IHNpZl9yZWFkX21h
c2soZGRjLCBERENfRERDTUNUTDEsIEREQ01fQUNLX01BU0ssIEREQ01fQUNLX09GRlNFVCk7CisJ
ZGV2X2RiZyhkZXYsICJhY2sgPSAweCV4XG4iLCBhY2spOworCWlmIChhY2sgIT0gMHgwMSkgewor
CQlkZXZfZXJyKGRldiwgImkyYyBhY2sgZXJyIVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQor
CisJcmVtYWluX2NvdW50ID0gbXNnLT5sZW47CisJYWNrX2NvdW50ID0gKG1zZy0+bGVuIC0gMSkg
LyA4OworCWFja19maW5hbCA9IDA7CisKKwl3aGlsZSAocmVtYWluX2NvdW50ID4gMCkgeworCQlp
ZiAoYWNrX2NvdW50ID4gMCkgeworCQkJcmVhZF9jb3VudCA9IDg7CisJCQlhY2tfZmluYWwgPSAw
OworCQkJYWNrX2NvdW50LS07CisJCX0gZWxzZSB7CisJCQlyZWFkX2NvdW50ID0gcmVtYWluX2Nv
dW50OworCQkJYWNrX2ZpbmFsID0gMTsKKwkJfQorCisJCXNpZl93cml0ZV9tYXNrKGRkYywgRERD
X0REQ01DVEwxLCBERENNX1BHTEVOX01BU0ssCisJCQkgICAgICAgRERDTV9QR0xFTl9PRkZTRVQs
IHJlYWRfY291bnQgLSAxKTsKKwkJZGRjbV90cmlnZ2VyX21vZGUoZGRjLCAoYWNrX2ZpbmFsID09
IDEpID8KKwkJCQkgIEREQ01fUkVBRF9EQVRBX05PX0FDSyA6CisJCQkJICBERENNX1JFQURfREFU
QV9BQ0spOworCisJCWFjayA9IHNpZl9yZWFkX21hc2soZGRjLCBERENfRERDTUNUTDEsIEREQ01f
QUNLX01BU0ssCisJCQkJICAgIEREQ01fQUNLX09GRlNFVCk7CisJCXRlbXBfY291bnQgPSAwOwor
CQl3aGlsZSAoKChhY2sgJiAoMSA8PCB0ZW1wX2NvdW50KSkgIT0gMCkgJiYgKHRlbXBfY291bnQg
PCA4KSkKKwkJCXRlbXBfY291bnQrKzsKKwkJaWYgKCgoYWNrX2ZpbmFsID09IDEpICYmICh0ZW1w
X2NvdW50ICE9IChyZWFkX2NvdW50IC0gMSkpKSB8fAorCQkgICAgKChhY2tfZmluYWwgPT0gMCkg
JiYgKHRlbXBfY291bnQgIT0gcmVhZF9jb3VudCkpKSB7CisJCQlkZXZfZXJyKGRldiwgIkFkZHJl
c3MgTkFDSyEgQUNLKDB4JXgpXG4iLCBhY2spOworCQkJYnJlYWs7CisJCX0KKworCQlmb3IgKGkg
PSByZWFkX2NvdW50OyBpID49IDE7IGktLSkgeworCQkJaW50IHNoaWZ0OworCQkJaW50IG9mZnNl
dDsKKworCQkJaWYgKGkgPiA0KSB7CisJCQkJb2Zmc2V0ID0gRERDX0REQ01EMTsKKwkJCQlzaGlm
dCA9IChpIC0gNSkgKiA4OworCQkJfSBlbHNlIHsKKwkJCQlvZmZzZXQgPSBERENfRERDTUQwOwor
CQkJCXNoaWZ0ID0gKGkgLSAxKSAqIDg7CisJCQl9CisKKwkJCW1zZy0+YnVmW2luZGV4ICsgaSAt
IDFdID0gc2lmX3JlYWRfbWFzayhkZGMsIG9mZnNldCwKKwkJCQkJCQkJMHhmZiA8PCBzaGlmdCwK
KwkJCQkJCQkJc2hpZnQpOworCQl9CisKKwkJcmVtYWluX2NvdW50IC09IHJlYWRfY291bnQ7CisJ
CWluZGV4ICs9IHJlYWRfY291bnQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg
bXRrX2hkbWlfZGRjX3dyaXRlX21zZyhzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMsIHN0cnVjdCBp
MmNfbXNnICptc2cpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGRjLT5hZGFwLmRldi5wYXJl
bnQ7CisJdTMyIGFjazsKKworCWRkY21fdHJpZ2dlcl9tb2RlKGRkYywgRERDTV9TVEFSVCk7CisJ
c2lmX3dyaXRlX21hc2soZGRjLCBERENfRERDTUQwLCBERENNX0RBVEEwLCAwLCBtc2ctPmFkZHIg
PDwgMSk7CisJc2lmX3dyaXRlX21hc2soZGRjLCBERENfRERDTUQwLCBERENNX0RBVEExLCA4LCBt
c2ctPmJ1ZlswXSk7CisJc2lmX3dyaXRlX21hc2soZGRjLCBERENfRERDTUNUTDEsIEREQ01fUEdM
RU5fTUFTSywgRERDTV9QR0xFTl9PRkZTRVQsCisJCSAgICAgICAweDEpOworCWRkY21fdHJpZ2dl
cl9tb2RlKGRkYywgRERDTV9XUklURV9EQVRBKTsKKworCWFjayA9IHNpZl9yZWFkX21hc2soZGRj
LCBERENfRERDTUNUTDEsIEREQ01fQUNLX01BU0ssIEREQ01fQUNLX09GRlNFVCk7CisJZGV2X2Ri
ZyhkZXYsICJhY2sgPSAlZFxuIiwgYWNrKTsKKworCWlmIChhY2sgIT0gMHgwMykgeworCQlkZXZf
ZXJyKGRldiwgImkyYyBhY2sgZXJyIVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVy
biAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2RkY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRl
ciAqYWRhcHRlciwKKwkJCSAgICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCit7CisJ
c3RydWN0IG10a19oZG1pX2RkYyAqZGRjID0gYWRhcHRlci0+YWxnb19kYXRhOworCXN0cnVjdCBk
ZXZpY2UgKmRldiA9IGFkYXB0ZXItPmRldi5wYXJlbnQ7CisJaW50IHJldDsKKwlpbnQgaTsKKwor
CWlmICghZGRjKSB7CisJCWRldl9lcnIoZGV2LCAiaW52YWxpZCBhcmd1bWVudHNcbiIpOworCQly
ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzaWZfc2V0X2JpdChkZGMsIEREQ19ERENNQ1RMMCwgRERD
TV9TQ0xfU1RSRUNIKTsKKwlzaWZfc2V0X2JpdChkZGMsIEREQ19ERENNQ1RMMCwgRERDTV9TTTBF
Tik7CisJc2lmX2Nscl9iaXQoZGRjLCBERENfRERDTUNUTDAsIEREQ01fT0RSQUlOKTsKKworCWlm
IChzaWZfYml0X2lzX3NldChkZGMsIEREQ19ERENNQ1RMMSwgRERDTV9UUkkpKSB7CisJCWRldl9l
cnIoZGV2LCAiZGRjIGxpbmUgaXMgYnVzeSFcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwor
CXNpZl93cml0ZV9tYXNrKGRkYywgRERDX0REQ01DVEwwLCBERENNX0NMS19ESVZfTUFTSywKKwkJ
ICAgICAgIEREQ01fQ0xLX0RJVl9PRkZTRVQsIFNJRjFfQ0xPSyk7CisKKwlmb3IgKGkgPSAwOyBp
IDwgbnVtOyBpKyspIHsKKwkJc3RydWN0IGkyY19tc2cgKm1zZyA9ICZtc2dzW2ldOworCisJCWRl
dl9kYmcoZGV2LCAiaTJjIG1zZywgYWRyOjB4JXgsIGZsYWdzOiVkLCBsZW4gOjB4JXhcbiIsCisJ
CQltc2ctPmFkZHIsIG1zZy0+ZmxhZ3MsIG1zZy0+bGVuKTsKKworCQlpZiAobXNnLT5mbGFncyAm
IEkyQ19NX1JEKQorCQkJcmV0ID0gbXRrX2hkbWlfZGRjX3JlYWRfbXNnKGRkYywgbXNnKTsKKwkJ
ZWxzZQorCQkJcmV0ID0gbXRrX2hkbWlfZGRjX3dyaXRlX21zZyhkZGMsIG1zZyk7CisJCWlmIChy
ZXQgPCAwKQorCQkJZ290byB4ZmVyX2VuZDsKKwl9CisKKwlkZGNtX3RyaWdnZXJfbW9kZShkZGMs
IEREQ01fU1RPUCk7CisKKwlyZXR1cm4gaTsKKworeGZlcl9lbmQ6CisJZGRjbV90cmlnZ2VyX21v
ZGUoZGRjLCBERENNX1NUT1ApOworCWRldl9lcnIoZGV2LCAiZGRjIGZhaWxlZCFcbiIpOworCXJl
dHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgbXRrX2hkbWlfZGRjX2Z1bmMoc3RydWN0IGkyY19h
ZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJV
U19FTVVMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gbXRrX2hkbWlf
ZGRjX2FsZ29yaXRobSA9IHsKKwkubWFzdGVyX3hmZXIgPSBtdGtfaGRtaV9kZGNfeGZlciwKKwku
ZnVuY3Rpb25hbGl0eSA9IG10a19oZG1pX2RkY19mdW5jLAorfTsKKworc3RhdGljIGludCBtdGtf
aGRtaV9kZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qg
ZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfaGRtaV9kZGMgKmRkYzsKKwlz
dHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlpbnQgcmV0OworCisJZGRjID0gZGV2bV9remFsbG9jKGRl
diwgc2l6ZW9mKHN0cnVjdCBtdGtfaGRtaV9kZGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRkYykK
KwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZGMtPmNsayA9IGRldm1fY2xrX2dldChkZXYsICJkZGMt
aTJjIik7CisJaWYgKElTX0VSUihkZGMtPmNsaykpIHsKKwkJZGV2X2VycihkZXYsICJnZXQgZGRj
X2NsayBmYWlsZWQ6ICVwICxcbiIsIGRkYy0+Y2xrKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGRjLT5j
bGspOworCX0KKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNF
X01FTSwgMCk7CisJZGRjLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYs
IG1lbSk7CisJaWYgKElTX0VSUihkZGMtPnJlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihkZGMtPnJl
Z3MpOworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRkYy0+Y2xrKTsKKwlpZiAocmV0KSB7
CisJCWRldl9lcnIoZGV2LCAiZW5hYmxlIGRkYyBjbGsgZmFpbGVkIVxuIik7CisJCXJldHVybiBy
ZXQ7CisJfQorCisJc3RybGNweShkZGMtPmFkYXAubmFtZSwgIm1lZGlhdGVrLWhkbWktZGRjIiwg
c2l6ZW9mKGRkYy0+YWRhcC5uYW1lKSk7CisJZGRjLT5hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7
CisJZGRjLT5hZGFwLmNsYXNzID0gSTJDX0NMQVNTX0REQzsKKwlkZGMtPmFkYXAuYWxnbyA9ICZt
dGtfaGRtaV9kZGNfYWxnb3JpdGhtOworCWRkYy0+YWRhcC5yZXRyaWVzID0gMzsKKwlkZGMtPmFk
YXAuZGV2Lm9mX25vZGUgPSBkZXYtPm9mX25vZGU7CisJZGRjLT5hZGFwLmFsZ29fZGF0YSA9IGRk
YzsKKwlkZGMtPmFkYXAuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisKKwlyZXQgPSBpMmNfYWRk
X2FkYXB0ZXIoJmRkYy0+YWRhcCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJm
YWlsZWQgdG8gYWRkIGJ1cyB0byBpMmMgY29yZVxuIik7CisJCWdvdG8gZXJyX2Nsa19kaXNhYmxl
OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRkYyk7CisKKwlkZXZfZGJnKGRl
diwgImRkYy0+YWRhcDogJXBcbiIsICZkZGMtPmFkYXApOworCWRldl9kYmcoZGV2LCAiZGRjLT5j
bGs6ICVwXG4iLCBkZGMtPmNsayk7CisJZGV2X2RiZyhkZXYsICJwaHlzaWNhbCBhZHI6IDB4JWxs
eCwgZW5kOiAweCVsbHhcbiIsIG1lbS0+c3RhcnQsCisJCW1lbS0+ZW5kKTsKKworCXJldHVybiAw
OworCitlcnJfY2xrX2Rpc2FibGU6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRkYy0+Y2xrKTsK
KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2RkY19yZW1vdmUoc3RydWN0
IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMgPSBw
bGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWkyY19kZWxfYWRhcHRlcigmZGRjLT5hZGFw
KTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGRjLT5jbGspOworCisJcmV0dXJuIDA7Cit9CisK
K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19oZG1pX2RkY19tYXRjaFtdID0g
eworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWhkbWktZGRjIiwgfSwKKwl7fSwK
K307CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2hkbWlfZGRjX2RyaXZlciA9IHsKKwku
cHJvYmUgPSBtdGtfaGRtaV9kZGNfcHJvYmUsCisJLnJlbW92ZSA9IG10a19oZG1pX2RkY19yZW1v
dmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibWVkaWF0ZWstaGRtaS1kZGMiLAorCQkub2Zf
bWF0Y2hfdGFibGUgPSBtdGtfaGRtaV9kZGNfbWF0Y2gsCisJfSwKK307CisKK01PRFVMRV9BVVRI
T1IoIkppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9O
KCJNZWRpYVRlayBIRE1JIEREQyBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsK
ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmggYi9k
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjIwOWZiZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICog
Q29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amll
LnFpdUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHBy
b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9NVEtfSERNSV9SRUdTX0gKKyNkZWZpbmUgX01US19I
RE1JX1JFR1NfSAorCisjZGVmaW5lIEdSTF9JTlRfTUFTSwkJMHgxOAorI2RlZmluZSBHUkxfSUZN
X1BPUlQJCTB4MTg4CisjZGVmaW5lIEdSTF9DSF9TV0FQCQkweDE5OAorI2RlZmluZSBMUl9TV0FQ
CQkJCUJJVCgwKQorI2RlZmluZSBMRkVfQ0NfU1dBUAkJCUJJVCgxKQorI2RlZmluZSBMU1JTX1NX
QVAJCQlCSVQoMikKKyNkZWZpbmUgUkxTX1JSU19TV0FQCQkJQklUKDMpCisjZGVmaW5lIExSX1NU
QVRVU19TV0FQCQkJQklUKDQpCisjZGVmaW5lIEdSTF9JMlNfQ19TVEEwCQkweDE0MAorI2RlZmlu
ZSBHUkxfSTJTX0NfU1RBMQkJMHgxNDQKKyNkZWZpbmUgR1JMX0kyU19DX1NUQTIJCTB4MTQ4Cisj
ZGVmaW5lIEdSTF9JMlNfQ19TVEEzCQkweDE0QworI2RlZmluZSBHUkxfSTJTX0NfU1RBNAkJMHgx
NTAKKyNkZWZpbmUgR1JMX0kyU19VVgkJMHgxNTQKKyNkZWZpbmUgSTJTX1VWX1YJCQlCSVQoMCkK
KyNkZWZpbmUgSTJTX1VWX1UJCQlCSVQoMSkKKyNkZWZpbmUgSTJTX1VWX0NIX0VOX01BU0sJCTB4
M2MKKyNkZWZpbmUgSTJTX1VWX0NIX0VOKHgpCQkJQklUKCh4KSArIDIpCisjZGVmaW5lIEkyU19V
Vl9UTURTX0RFQlVHCQlCSVQoNikKKyNkZWZpbmUgSTJTX1VWX05PUk1BTF9JTkZPX0lOVgkJQklU
KDcpCisjZGVmaW5lIEdSTF9BQ1BfSVNSQ19DVFJMCTB4MTU4CisjZGVmaW5lIFZTX0VOCQkJCUJJ
VCgwKQorI2RlZmluZSBBQ1BfRU4JCQkJQklUKDEpCisjZGVmaW5lIElTUkMxX0VOCQkJQklUKDIp
CisjZGVmaW5lIElTUkMyX0VOCQkJQklUKDMpCisjZGVmaW5lIEdBTVVUX0VOCQkJQklUKDQpCisj
ZGVmaW5lIEdSTF9DVFNfQ1RSTAkJMHgxNjAKKyNkZWZpbmUgQ1RTX0NUUkxfU09GVAkJCUJJVCgw
KQorI2RlZmluZSBHUkxfSU5UCQkJMHgxNAorI2RlZmluZSBJTlRfTURJCQkJCUJJVCgwKQorI2Rl
ZmluZSBJTlRfSERDUAkJCUJJVCgxKQorI2RlZmluZSBJTlRfRklGT19PCQkJQklUKDIpCisjZGVm
aW5lIElOVF9GSUZPX1UJCQlCSVQoMykKKyNkZWZpbmUgSU5UX0lGTV9FUlIJCQlCSVQoNCkKKyNk
ZWZpbmUgSU5UX0lORl9ET05FCQkJQklUKDUpCisjZGVmaW5lIElOVF9OQ1RTX0RPTkUJCQlCSVQo
NikKKyNkZWZpbmUgSU5UX0NUUkxfUEtUX0RPTkUJCUJJVCg3KQorI2RlZmluZSBHUkxfSU5UX01B
U0sJCTB4MTgKKyNkZWZpbmUgR1JMX0NUUkwJCTB4MUMKKyNkZWZpbmUgQ1RSTF9HRU5fRU4JCQlC
SVQoMikKKyNkZWZpbmUgQ1RSTF9TUERfRU4JCQlCSVQoMykKKyNkZWZpbmUgQ1RSTF9NUEVHX0VO
CQkJQklUKDQpCisjZGVmaW5lIENUUkxfQVVESU9fRU4JCQlCSVQoNSkKKyNkZWZpbmUgQ1RSTF9B
VklfRU4JCQlCSVQoNikKKyNkZWZpbmUgQ1RSTF9BVk1VVEUJCQlCSVQoNykKKyNkZWZpbmUJR1JM
X1NUQVRVUwkJMHgyMAorI2RlZmluZSBTVEFUVVNfSFRQTEcJCQlCSVQoMCkKKyNkZWZpbmUgU1RB
VFVTX1BPUkQJCQlCSVQoMSkKKyNkZWZpbmUgR1JMX0RJVk4JCTB4MTcwCisjZGVmaW5lIE5DVFNf
V1JJX0FOWVRJTUUJCUJJVCg2KQorI2RlZmluZSBHUkxfQVVESU9fQ0ZHCQkweDE3QworI2RlZmlu
ZSBBVURJT19aRVJPCQkJQklUKDApCisjZGVmaW5lIEhJR0hfQklUX1JBVEUJCQlCSVQoMSkKKyNk
ZWZpbmUgU0FDRF9EU1QJCQlCSVQoMikKKyNkZWZpbmUgRFNUX05PUk1BTF9ET1VCTEUJCUJJVCgz
KQorI2RlZmluZSBEU0RfSU5WCQkJCUJJVCg0KQorI2RlZmluZSBMUl9JTlYJCQkJQklUKDUpCisj
ZGVmaW5lIExSX01JWAkJCQlCSVQoNikKKyNkZWZpbmUgRFNEX1NFTAkJCQlCSVQoNykKKyNkZWZp
bmUgR1JMX05DVFMJCTB4MTg0CisjZGVmaW5lIEdSTF9DSF9TVzAJCTB4MThDCisjZGVmaW5lIEdS
TF9DSF9TVzEJCTB4MTkwCisjZGVmaW5lIEdSTF9DSF9TVzIJCTB4MTk0CisjZGVmaW5lIENIX1NX
SVRDSChmcm9tLCB0bykJCSgoZnJvbSkgPDwgKCh0bykgKiAzKSkKKyNkZWZpbmUgR1JMX0lORk9G
Uk1fVkVSCQkweDE5QworI2RlZmluZSBHUkxfSU5GT0ZSTV9UWVBFCTB4MUEwCisjZGVmaW5lIEdS
TF9JTkZPRlJNX0xORwkJMHgxQTQKKyNkZWZpbmUgR1JMX01JWF9DVFJMCQkweDFCNAorI2RlZmlu
ZSBNSVhfQ1RSTF9TUkNfRU4JCQlCSVQoMCkKKyNkZWZpbmUgQllQQVNTX1ZPTFVNRQkJCUJJVCgx
KQorI2RlZmluZSBNSVhfQ1RSTF9GTEFUCQkJQklUKDcpCisjZGVmaW5lIEdSTF9BT1VUX0NGRwkJ
MHgxQzQKKyNkZWZpbmUgQU9VVF9CTlVNX1NFTF9NQVNLCQkweDAzCisjZGVmaW5lIEFPVVRfMjRC
SVQJCQkweDAwCisjZGVmaW5lIEFPVVRfMjBCSVQJCQkweDAyCisjZGVmaW5lIEFPVVRfMTZCSVQJ
CQkweDAzCisjZGVmaW5lIEFPVVRfRklGT19BREFQX0NUUkwJCUJJVCg2KQorI2RlZmluZSBBT1VU
X0JVUlNUX1BSRUFNQkxFX0VOCQlCSVQoNykKKyNkZWZpbmUgSElHSF9CSVRfUkFURV9QQUNLRVRf
QUxJR04JKEFPVVRfQlVSU1RfUFJFQU1CTEVfRU4gfCBcCisJCQkJCSBBT1VUX0ZJRk9fQURBUF9D
VFJMKQorI2RlZmluZSBHUkxfU0hJRlRfTDEJCTB4MUMwCisjZGVmaW5lIEdSTF9TSElGVF9SMgkJ
MHgxQjAKKyNkZWZpbmUgQVVESU9fUEFDS0VUX09GRgkJQklUKDYpCisjZGVmaW5lIEdSTF9DRkcw
CQkweDI0CisjZGVmaW5lIENGRzBfSTJTX01PREVfTUFTSwkJMHgzCisjZGVmaW5lIENGRzBfSTJT
X01PREVfUlRKCQkweDEKKyNkZWZpbmUgQ0ZHMF9JMlNfTU9ERV9MVEoJCTB4MAorI2RlZmluZSBD
RkcwX0kyU19NT0RFX0kyUwkJMHgyCisjZGVmaW5lIENGRzBfV19MRU5HVEhfTUFTSwkJMHgzMAor
I2RlZmluZSBDRkcwX1dfTEVOR1RIXzI0QklUCQkweDAwCisjZGVmaW5lIENGRzBfV19MRU5HVEhf
MTZCSVQJCTB4MTAKKyNkZWZpbmUgR1JMX0NGRzEJCTB4MjgKKyNkZWZpbmUgQ0ZHMV9FREdfU0VM
CQkJQklUKDApCisjZGVmaW5lIENGRzFfU1BESUYJCQlCSVQoMSkKKyNkZWZpbmUgQ0ZHMV9EVkkJ
CQlCSVQoMikKKyNkZWZpbmUgQ0ZHMV9IRENQX0RFQlVHCQkJQklUKDMpCisjZGVmaW5lIEdSTF9D
RkcyCQkweDJjCisjZGVmaW5lIENGRzJfTUhMX0RFX1NFTAkJCUJJVCgzKQorI2RlZmluZSBDRkcy
X01ITF9GQUtFX0RFX1NFTAkJQklUKDQpCisjZGVmaW5lIENGRzJfTUhMX0RBVEFfUkVNQVAJCUJJ
VCg1KQorI2RlZmluZSBDRkcyX05PVElDRV9FTgkJCUJJVCg2KQorI2RlZmluZSBDRkcyX0FDTEtf
SU5WCQkJQklUKDcpCisjZGVmaW5lIEdSTF9DRkczCQkweDMwCisjZGVmaW5lIENGRzNfQUVTX0tF
WV9JTkRFWF9NQVNLCQkweDNmCisjZGVmaW5lIENGRzNfQ09OVFJPTF9QQUNLRVRfREVMQVkJQklU
KDYpCisjZGVmaW5lIENGRzNfS1NWX0xPQURfU1RBUlQJCUJJVCg3KQorI2RlZmluZSBHUkxfQ0ZH
NAkJMHgzNAorI2RlZmluZSBDRkc0X0FFU19LRVlfTE9BRAkJQklUKDQpCisjZGVmaW5lIENGRzRf
QVZfVU5NVVRFX0VOCQlCSVQoNSkKKyNkZWZpbmUgQ0ZHNF9BVl9VTk1VVEVfU0VUCQlCSVQoNikK
KyNkZWZpbmUgQ0ZHNF9NSExfTU9ERQkJCUJJVCg3KQorI2RlZmluZSBHUkxfQ0ZHNQkJMHgzOAor
I2RlZmluZSBDRkc1X0NEX1JBVElPX01BU0sJMHg4RgorI2RlZmluZSBDRkc1X0ZTMTI4CQkJKDB4
MSA8PCA0KQorI2RlZmluZSBDRkc1X0ZTMjU2CQkJKDB4MiA8PCA0KQorI2RlZmluZSBDRkc1X0ZT
Mzg0CQkJKDB4MyA8PCA0KQorI2RlZmluZSBDRkc1X0ZTNTEyCQkJKDB4NCA8PCA0KQorI2RlZmlu
ZSBDRkc1X0ZTNzY4CQkJKDB4NiA8PCA0KQorI2RlZmluZSBEVU1NWV8zMDQJCTB4MzA0CisjZGVm
aW5lIENITU9fU0VMCQkJKDB4MyA8PCAyKQorI2RlZmluZSBDSE0xX1NFTAkJCSgweDMgPDwgNCkK
KyNkZWZpbmUgQ0hNMl9TRUwJCQkoMHgzIDw8IDYpCisjZGVmaW5lIEFVRElPX0kyU19OQ1RTX1NF
TAkJQklUKDEpCisjZGVmaW5lIEFVRElPX0kyU19OQ1RTX1NFTF82NAkJKDEgPDwgMSkKKyNkZWZp
bmUgQVVESU9fSTJTX05DVFNfU0VMXzEyOAkJKDAgPDwgMSkKKyNkZWZpbmUgTkVXX0dDUF9DVFJM
CQkJQklUKDApCisjZGVmaW5lIE5FV19HQ1BfQ1RSTF9NRVJHRQkJQklUKDApCisjZGVmaW5lIEdS
TF9MX1NUQVRVU18wCQkweDIwMAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMQkJMHgyMDQKKyNkZWZp
bmUgR1JMX0xfU1RBVFVTXzIJCTB4MjA4CisjZGVmaW5lIEdSTF9MX1NUQVRVU18zCQkweDIwYwor
I2RlZmluZSBHUkxfTF9TVEFUVVNfNAkJMHgyMTAKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzUJCTB4
MjE0CisjZGVmaW5lIEdSTF9MX1NUQVRVU182CQkweDIxOAorI2RlZmluZSBHUkxfTF9TVEFUVVNf
NwkJMHgyMWMKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzgJCTB4MjIwCisjZGVmaW5lIEdSTF9MX1NU
QVRVU185CQkweDIyNAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMTAJCTB4MjI4CisjZGVmaW5lIEdS
TF9MX1NUQVRVU18xMQkJMHgyMmMKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzEyCQkweDIzMAorI2Rl
ZmluZSBHUkxfTF9TVEFUVVNfMTMJCTB4MjM0CisjZGVmaW5lIEdSTF9MX1NUQVRVU18xNAkJMHgy
MzgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzE1CQkweDIzYworI2RlZmluZSBHUkxfTF9TVEFUVVNf
MTYJCTB4MjQwCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xNwkJMHgyNDQKKyNkZWZpbmUgR1JMX0xf
U1RBVFVTXzE4CQkweDI0OAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMTkJCTB4MjRjCisjZGVmaW5l
IEdSTF9MX1NUQVRVU18yMAkJMHgyNTAKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzIxCQkweDI1NAor
I2RlZmluZSBHUkxfTF9TVEFUVVNfMjIJCTB4MjU4CisjZGVmaW5lIEdSTF9MX1NUQVRVU18yMwkJ
MHgyNWMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzAJCTB4MjYwCisjZGVmaW5lIEdSTF9SX1NUQVRV
U18xCQkweDI2NAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMgkJMHgyNjgKKyNkZWZpbmUgR1JMX1Jf
U1RBVFVTXzMJCTB4MjZjCisjZGVmaW5lIEdSTF9SX1NUQVRVU180CQkweDI3MAorI2RlZmluZSBH
UkxfUl9TVEFUVVNfNQkJMHgyNzQKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzYJCTB4Mjc4CisjZGVm
aW5lIEdSTF9SX1NUQVRVU183CQkweDI3YworI2RlZmluZSBHUkxfUl9TVEFUVVNfOAkJMHgyODAK
KyNkZWZpbmUgR1JMX1JfU1RBVFVTXzkJCTB4Mjg0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18xMAkJ
MHgyODgKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzExCQkweDI4YworI2RlZmluZSBHUkxfUl9TVEFU
VVNfMTIJCTB4MjkwCisjZGVmaW5lIEdSTF9SX1NUQVRVU18xMwkJMHgyOTQKKyNkZWZpbmUgR1JM
X1JfU1RBVFVTXzE0CQkweDI5OAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTUJCTB4MjljCisjZGVm
aW5lIEdSTF9SX1NUQVRVU18xNgkJMHgyYTAKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzE3CQkweDJh
NAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTgJCTB4MmE4CisjZGVmaW5lIEdSTF9SX1NUQVRVU18x
OQkJMHgyYWMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzIwCQkweDJiMAorI2RlZmluZSBHUkxfUl9T
VEFUVVNfMjEJCTB4MmI0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18yMgkJMHgyYjgKKyNkZWZpbmUg
R1JMX1JfU1RBVFVTXzIzCQkweDJiYworI2RlZmluZSBHUkxfQUJJU1RfQ1RSTDAJCTB4MkQ0Cisj
ZGVmaW5lIEdSTF9BQklTVF9DVFJMMQkJMHgyRDgKKyNkZWZpbmUgQUJJU1RfRU4JCQlCSVQoNykK
KyNkZWZpbmUgQUJJU1RfREFUQV9GTVQJCQkoMHg3IDw8IDApCisjZGVmaW5lIFZJREVPX0NGR18w
CQkweDM4MAorI2RlZmluZSBWSURFT19DRkdfMQkJMHgzODQKKyNkZWZpbmUgVklERU9fQ0ZHXzIJ
CTB4Mzg4CisjZGVmaW5lIFZJREVPX0NGR18zCQkweDM4YworI2RlZmluZSBWSURFT19DRkdfNAkJ
MHgzOTAKKyNkZWZpbmUgVklERU9fU09VUkNFX1NFTAkJQklUKDcpCisjZGVmaW5lIE5PUk1BTF9Q
QVRICQkJKDEgPDwgNykKKyNkZWZpbmUgR0VOX1JHQgkJCQkoMCA8PCA3KQorCisjZGVmaW5lIEhE
TUlfU1lTX0NGRzFDCQkweDAwMAorI2RlZmluZSBIRE1JX09OCQkJCUJJVCgwKQorI2RlZmluZSBI
RE1JX1JTVAkJCUJJVCgxKQorI2RlZmluZSBBTkxHX09OCQkJCUJJVCgyKQorI2RlZmluZSBDRkcx
MF9EVkkJCQlCSVQoMykKKyNkZWZpbmUgSERNSV9UU1QJCQlCSVQoMykKKyNkZWZpbmUgU1lTX0tF
WU1BU0sxCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgU1lTX0tFWU1BU0syCQkJKDB4ZmYgPDwgMTYp
CisjZGVmaW5lIEFVRF9PVVRTWU5DX0VOCQkJQklUKDI0KQorI2RlZmluZSBBVURfT1VUU1lOQ19Q
UkVfRU4JCUJJVCgyNSkKKyNkZWZpbmUgSTJDTV9PTgkJCQlCSVQoMjYpCisjZGVmaW5lIEUyUFJP
TV9UWVBFXzhCSVQJCUJJVCgyNykKKyNkZWZpbmUgTUNNX0UyUFJPTV9PTgkJCUJJVCgyOCkKKyNk
ZWZpbmUgRVhUX0UyUFJPTV9PTgkJCUJJVCgyOSkKKyNkZWZpbmUgSFRQTEdfUElOX1NFTF9PRkYJ
CUJJVCgzMCkKKyNkZWZpbmUgQUVTX0VGVVNFX0VOQUJMRQkJQklUKDMxKQorI2RlZmluZSBIRE1J
X1NZU19DRkcyMAkJMHgwMDQKKyNkZWZpbmUgREVFUF9DT0xPUl9NT0RFX01BU0sJCSgzIDw8IDEp
CisjZGVmaW5lIENPTE9SXzhCSVRfTU9ERQkJCSgwIDw8IDEpCisjZGVmaW5lIENPTE9SXzEwQklU
X01PREUJCSgxIDw8IDEpCisjZGVmaW5lIENPTE9SXzEyQklUX01PREUJCSgyIDw8IDEpCisjZGVm
aW5lIENPTE9SXzE2QklUX01PREUJCSgzIDw8IDEpCisjZGVmaW5lIERFRVBfQ09MT1JfRU4JCQlC
SVQoMCkKKyNkZWZpbmUgSERNSV9BVURJT19URVNUX1NFTAkJQklUKDgpCisjZGVmaW5lIEhETUky
UDBfRU4JCQlCSVQoMTEpCisjZGVmaW5lIEhETUlfT1VUX0ZJRk9fRU4JCUJJVCgxNikKKyNkZWZp
bmUgSERNSV9PVVRfRklGT19DTEtfSU5WCQlCSVQoMTcpCisjZGVmaW5lIE1ITF9NT0RFX09OCQkJ
QklUKDI4KQorI2RlZmluZSBNSExfUFBfTU9ERQkJCUJJVCgyOSkKKyNkZWZpbmUgTUhMX1NZTkNf
QVVUT19FTgkJQklUKDMwKQorI2RlZmluZSBIRE1JX1BDTEtfRlJFRV9SVU4JCUJJVCgzMSkKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19o
ZG1pX3BoeS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19tdDgxNzNfaGRtaV9waHku
YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTI0NzU0Ci0tLSAvZGV2L251
bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19tdDgxNzNfaGRtaV9waHkuYwpA
QCAtMCwwICsxLDUxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMu
CisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGlu
dXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGlu
dXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9z
eXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkv
cGh5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu
dXgvdHlwZXMuaD4KKworI2RlZmluZSBIRE1JX0NPTjAJCTB4MDAKKyNkZWZpbmUgUkdfSERNSVRY
X1BMTF9FTgkJQklUKDMxKQorI2RlZmluZSBSR19IRE1JVFhfUExMX0ZCS0RJVgkJKDB4N2YgPDwg
MjQpCisjZGVmaW5lIFBMTF9GQktESVZfU0hJRlQJCTI0CisjZGVmaW5lIFJHX0hETUlUWF9QTExf
RkJLU0VMCQkoMHgzIDw8IDIyKQorI2RlZmluZSBQTExfRkJLU0VMX1NISUZUCQkyMgorI2RlZmlu
ZSBSR19IRE1JVFhfUExMX1BSRURJVgkJKDB4MyA8PCAyMCkKKyNkZWZpbmUgUFJFRElWX1NISUZU
CQkJMjAKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9QT1NESVYJCSgweDMgPDwgMTgpCisjZGVmaW5l
IFBPU0RJVl9TSElGVAkJCTE4CisjZGVmaW5lIFJHX0hETUlUWF9QTExfUlNUX0RMWQkJKDB4MyA8
PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9JUgkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUExM
X0lSX1NISUZUCQkJMTIKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9JQwkJKDB4ZiA8PCA4KQorI2Rl
ZmluZSBQTExfSUNfU0hJRlQJCQk4CisjZGVmaW5lIFJHX0hETUlUWF9QTExfQlAJCSgweGYgPDwg
NCkKKyNkZWZpbmUgUExMX0JQX1NISUZUCQkJNAorI2RlZmluZSBSR19IRE1JVFhfUExMX0JSCQko
MHgzIDw8IDIpCisjZGVmaW5lIFBMTF9CUl9TSElGVAkJCTIKKyNkZWZpbmUgUkdfSERNSVRYX1BM
TF9CQwkJKDB4MyA8PCAwKQorI2RlZmluZSBQTExfQkNfU0hJRlQJCQkwCisjZGVmaW5lIEhETUlf
Q09OMQkJMHgwNAorI2RlZmluZSBSR19IRE1JVFhfUExMX0RJVkVOCQkoMHg3IDw8IDI5KQorI2Rl
ZmluZSBQTExfRElWRU5fU0hJRlQJCQkyOQorI2RlZmluZSBSR19IRE1JVFhfUExMX0FVVE9LX0VO
CQlCSVQoMjgpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQVVUT0tfS0YJCSgweDMgPDwgMjYpCisj
ZGVmaW5lIFJHX0hETUlUWF9QTExfQVVUT0tfS1MJCSgweDMgPDwgMjQpCisjZGVmaW5lIFJHX0hE
TUlUWF9QTExfQVVUT0tfTE9BRAlCSVQoMjMpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQkFORAkJ
KDB4M2YgPDwgMTYpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfUkVGX1NFTAkJQklUKDE1KQorI2Rl
ZmluZSBSR19IRE1JVFhfUExMX0JJQVNfRU4JCUJJVCgxNCkKKyNkZWZpbmUgUkdfSERNSVRYX1BM
TF9CSUFTX0xQRl9FTglCSVQoMTMpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfVFhESVZfRU4JCUJJ
VCgxMikKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9UWERJVgkJKDB4MyA8PCAxMCkKKyNkZWZpbmUg
UExMX1RYRElWX1NISUZUCQkJMTAKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9MVlJPRF9FTgkJQklU
KDkpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfTU9OVkNfRU4JCUJJVCg4KQorI2RlZmluZSBSR19I
RE1JVFhfUExMX01PTkNLX0VOCQlCSVQoNykKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9NT05SRUZf
RU4JCUJJVCg2KQorI2RlZmluZSBSR19IRE1JVFhfUExMX1RTVF9FTgkJQklUKDUpCisjZGVmaW5l
IFJHX0hETUlUWF9QTExfVFNUX0NLX0VOCQlCSVQoNCkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9U
U1RfU0VMCQkoMHhmIDw8IDApCisjZGVmaW5lIEhETUlfQ09OMgkJMHgwOAorI2RlZmluZSBSR1Nf
SERNSVRYX1BMTF9BVVRPS19CQU5ECSgweDdmIDw8IDgpCisjZGVmaW5lIFJHU19IRE1JVFhfUExM
X0FVVE9LX0ZBSUwJQklUKDEpCisjZGVmaW5lIFJHX0hETUlUWF9FTl9UWF9DS0xETwkJQklUKDAp
CisjZGVmaW5lIEhETUlfQ09OMwkJMHgwYworI2RlZmluZSBSR19IRE1JVFhfU0VSX0VOCQkoMHhm
IDw8IDI4KQorI2RlZmluZSBSR19IRE1JVFhfUFJEX0VOCQkoMHhmIDw8IDI0KQorI2RlZmluZSBS
R19IRE1JVFhfUFJEX0lNUF9FTgkJKDB4ZiA8PCAyMCkKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9F
TgkJKDB4ZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JTVBfRU4JCSgweGYgPDwgMTIp
CisjZGVmaW5lIERSVl9JTVBfRU5fU0hJRlQJCTEyCisjZGVmaW5lIFJHX0hETUlUWF9NSExDS19G
T1JDRQkJQklUKDEwKQorI2RlZmluZSBSR19IRE1JVFhfTUhMQ0tfUFBJWF9FTgkJQklUKDkpCisj
ZGVmaW5lIFJHX0hETUlUWF9NSExDS19FTgkJQklUKDgpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJf
RElOX1NFTAkJKDB4ZiA8PCA0KQorI2RlZmluZSBSR19IRE1JVFhfU0VSXzVUMV9CSVNUX0VOCUJJ
VCgzKQorI2RlZmluZSBSR19IRE1JVFhfU0VSX0JJU1RfVE9HCQlCSVQoMikKKyNkZWZpbmUgUkdf
SERNSVRYX1NFUl9ESU5fVE9HCQlCSVQoMSkKKyNkZWZpbmUgUkdfSERNSVRYX1NFUl9DTEtESUdf
SU5WCUJJVCgwKQorI2RlZmluZSBIRE1JX0NPTjQJCTB4MTAKKyNkZWZpbmUgUkdfSERNSVRYX1BS
RF9JQklBU19DTEsJCSgweGYgPDwgMjQpCisjZGVmaW5lIFJHX0hETUlUWF9QUkRfSUJJQVNfRDIJ
CSgweGYgPDwgMTYpCisjZGVmaW5lIFJHX0hETUlUWF9QUkRfSUJJQVNfRDEJCSgweGYgPDwgOCkK
KyNkZWZpbmUgUkdfSERNSVRYX1BSRF9JQklBU19EMAkJKDB4ZiA8PCAwKQorI2RlZmluZSBQUkRf
SUJJQVNfQ0xLX1NISUZUCQkyNAorI2RlZmluZSBQUkRfSUJJQVNfRDJfU0hJRlQJCTE2CisjZGVm
aW5lIFBSRF9JQklBU19EMV9TSElGVAkJOAorI2RlZmluZSBQUkRfSUJJQVNfRDBfU0hJRlQJCTAK
KyNkZWZpbmUgSERNSV9DT041CQkweDE0CisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSUJJQVNfQ0xL
CQkoMHgzZiA8PCAyNCkKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JQklBU19EMgkJKDB4M2YgPDwg
MTYpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSUJJQVNfRDEJCSgweDNmIDw8IDgpCisjZGVmaW5l
IFJHX0hETUlUWF9EUlZfSUJJQVNfRDAJCSgweDNmIDw8IDApCisjZGVmaW5lIERSVl9JQklBU19D
TEtfU0hJRlQJCTI0CisjZGVmaW5lIERSVl9JQklBU19EMl9TSElGVAkJMTYKKyNkZWZpbmUgRFJW
X0lCSUFTX0QxX1NISUZUCQk4CisjZGVmaW5lIERSVl9JQklBU19EMF9TSElGVAkJMAorI2RlZmlu
ZSBIRE1JX0NPTjYJCTB4MTgKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JTVBfQ0xLCQkoMHgzZiA8
PCAyNCkKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JTVBfRDIJCSgweDNmIDw8IDE2KQorI2RlZmlu
ZSBSR19IRE1JVFhfRFJWX0lNUF9EMQkJKDB4M2YgPDwgOCkKKyNkZWZpbmUgUkdfSERNSVRYX0RS
Vl9JTVBfRDAJCSgweDNmIDw8IDApCisjZGVmaW5lIERSVl9JTVBfQ0xLX1NISUZUCQkyNAorI2Rl
ZmluZSBEUlZfSU1QX0QyX1NISUZUCQkxNgorI2RlZmluZSBEUlZfSU1QX0QxX1NISUZUCQk4Cisj
ZGVmaW5lIERSVl9JTVBfRDBfU0hJRlQJCTAKKyNkZWZpbmUgSERNSV9DT043CQkweDFjCisjZGVm
aW5lIFJHX0hETUlUWF9NSExDS19EUlZfSUJJQVMJKDB4MWYgPDwgMjcpCisjZGVmaW5lIFJHX0hE
TUlUWF9TRVJfRElOCQkoMHgzZmYgPDwgMTYpCisjZGVmaW5lIFJHX0hETUlUWF9DSExEQ19UU1QJ
CSgweGYgPDwgMTIpCisjZGVmaW5lIFJHX0hETUlUWF9DSExDS19UU1QJCSgweGYgPDwgOCkKKyNk
ZWZpbmUgUkdfSERNSVRYX1JFU0VSVkUJCSgweGZmIDw8IDApCisjZGVmaW5lIEhETUlfQ09OOAkJ
MHgyMAorI2RlZmluZSBSR1NfSERNSVRYXzJUMV9MRVYJCSgweGYgPDwgMTYpCisjZGVmaW5lIFJH
U19IRE1JVFhfMlQxX0VERwkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUkdTX0hETUlUWF81VDFfTEVW
CQkoMHhmIDw8IDgpCisjZGVmaW5lIFJHU19IRE1JVFhfNVQxX0VERwkJKDB4ZiA8PCA0KQorI2Rl
ZmluZSBSR1NfSERNSVRYX1BMVUdfVFNUCQlCSVQoMCkKKworc3RydWN0IG10a19oZG1pX3BoeSB7
CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY2xr
ICpwbGw7CisJc3RydWN0IGNsa19odyBwbGxfaHc7CisJdW5zaWduZWQgbG9uZyBwbGxfcmF0ZTsK
Kwl1OCBkcnZfaW1wX2NsazsKKwl1OCBkcnZfaW1wX2QyOworCXU4IGRydl9pbXBfZDE7CisJdTgg
ZHJ2X2ltcF9kMDsKKwl1MzIgaWJpYXM7CisJdTMyIGliaWFzX3VwOworfTsKKworc3RhdGljIGNv
bnN0IHU4IFBSRURJVlszXVs0XSA9IHsKKwl7MHgwLCAweDAsIDB4MCwgMHgwfSwJLyogMjdNaHog
Ki8KKwl7MHgxLCAweDEsIDB4MSwgMHgxfSwJLyogNzRNaHogKi8KKwl7MHgxLCAweDEsIDB4MSwg
MHgxfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBUWERJVlszXVs0XSA9IHsK
Kwl7MHgzLCAweDMsIDB4MywgMHgyfSwJLyogMjdNaHogKi8KKwl7MHgyLCAweDEsIDB4MSwgMHgx
fSwJLyogNzRNaHogKi8KKwl7MHgxLCAweDAsIDB4MCwgMHgwfQkvKiAxNDhNaHogKi8KK307CisK
K3N0YXRpYyBjb25zdCB1OCBGQktTRUxbM11bNF0gPSB7CisJezB4MSwgMHgxLCAweDEsIDB4MX0s
CS8qIDI3TWh6ICovCisJezB4MSwgMHgwLCAweDEsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4MSwg
MHgwLCAweDEsIDB4MX0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggRkJLRElW
WzNdWzRdID0geworCXsxOSwgMjQsIDI5LCAxOX0sCS8qIDI3TWh6ICovCisJezE5LCAyNCwgMTQs
IDE5fSwJLyogNzRNaHogKi8KKwl7MTksIDI0LCAxNCwgMTl9CS8qIDE0OE1oeiAqLworfTsKKwor
c3RhdGljIGNvbnN0IHU4IERJVkVOWzNdWzRdID0geworCXsweDIsIDB4MSwgMHgxLCAweDJ9LAkv
KiAyN01oeiAqLworCXsweDIsIDB4MiwgMHgyLCAweDJ9LAkvKiA3NE1oeiAqLworCXsweDIsIDB4
MiwgMHgyLCAweDJ9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEhUUExMQlBb
M11bNF0gPSB7CisJezB4YywgMHhjLCAweDgsIDB4Y30sCS8qIDI3TWh6ICovCisJezB4YywgMHhm
LCAweGYsIDB4Y30sCS8qIDc0TWh6ICovCisJezB4YywgMHhmLCAweGYsIDB4Y30JLyogMTQ4TWh6
ICovCit9OworCitzdGF0aWMgY29uc3QgdTggSFRQTExCQ1szXVs0XSA9IHsKKwl7MHgyLCAweDMs
IDB4MywgMHgyfSwJLyogMjdNaHogKi8KKwl7MHgyLCAweDMsIDB4MywgMHgyfSwJLyogNzRNaHog
Ki8KKwl7MHgyLCAweDMsIDB4MywgMHgyfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25z
dCB1OCBIVFBMTEJSWzNdWzRdID0geworCXsweDEsIDB4MSwgMHgwLCAweDF9LAkvKiAyN01oeiAq
LworCXsweDEsIDB4MiwgMHgyLCAweDF9LAkvKiA3NE1oeiAqLworCXsweDEsIDB4MiwgMHgyLCAw
eDF9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGh5X2NsZWFyX2Jp
dHMoc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHksIHUzMiBvZmZzZXQsCisJCQkJICAgIHUz
MiBiaXRzKQoreworCXZvaWQgX19pb21lbSAqcmVnID0gaGRtaV9waHktPnJlZ3MgKyBvZmZzZXQ7
CisJdTMyIHRtcDsKKworCXRtcCA9IHJlYWRsKHJlZyk7CisJdG1wICY9IH5iaXRzOworCXdyaXRl
bCh0bXAsIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3BoeV9zZXRfYml0cyhzdHJ1
Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSwgdTMyIG9mZnNldCwKKwkJCQkgIHUzMiBiaXRzKQor
eworCXZvaWQgX19pb21lbSAqcmVnID0gaGRtaV9waHktPnJlZ3MgKyBvZmZzZXQ7CisJdTMyIHRt
cDsKKworCXRtcCA9IHJlYWRsKHJlZyk7CisJdG1wIHw9IGJpdHM7CisJd3JpdGVsKHRtcCwgcmVn
KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGh5X21hc2soc3RydWN0IG10a19oZG1pX3Bo
eSAqaGRtaV9waHksIHUzMiBvZmZzZXQsCisJCQkgICAgICB1MzIgdmFsLCB1MzIgbWFzaykKK3sK
Kwl2b2lkIF9faW9tZW0gKnJlZyA9IGhkbWlfcGh5LT5yZWdzICsgb2Zmc2V0OworCXUzMiB0bXA7
CisKKwl0bXAgPSByZWFkbChyZWcpOworCXRtcCA9ICh0bXAgJiB+bWFzaykgfCAodmFsICYgbWFz
ayk7CisJd3JpdGVsKHRtcCwgcmVnKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2hk
bWlfcGh5ICp0b19tdGtfaGRtaV9waHkoc3RydWN0IGNsa19odyAqaHcpCit7CisJcmV0dXJuIGNv
bnRhaW5lcl9vZihodywgc3RydWN0IG10a19oZG1pX3BoeSwgcGxsX2h3KTsKK30KKworc3RhdGlj
IGludCBtdGtfaGRtaV9wbGxfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3Qg
bXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3BoeShodyk7CisKKwlkZXZfZGJn
KGhkbWlfcGh5LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJbXRrX2hkbWlfcGh5X3NldF9i
aXRzKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlUWF9QTExfQVVUT0tfRU4pOworCW10a19o
ZG1pX3BoeV9zZXRfYml0cyhoZG1pX3BoeSwgSERNSV9DT04wLCBSR19IRE1JVFhfUExMX1BPU0RJ
Vik7CisJbXRrX2hkbWlfcGh5X2NsZWFyX2JpdHMoaGRtaV9waHksIEhETUlfQ09OMywgUkdfSERN
SVRYX01ITENLX0VOKTsKKwltdGtfaGRtaV9waHlfc2V0X2JpdHMoaGRtaV9waHksIEhETUlfQ09O
MSwgUkdfSERNSVRYX1BMTF9CSUFTX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworCW10
a19oZG1pX3BoeV9zZXRfYml0cyhoZG1pX3BoeSwgSERNSV9DT04wLCBSR19IRE1JVFhfUExMX0VO
KTsKKwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworCW10a19oZG1pX3BoeV9zZXRfYml0cyhoZG1p
X3BoeSwgSERNSV9DT04xLCBSR19IRE1JVFhfUExMX0JJQVNfTFBGX0VOKTsKKwltdGtfaGRtaV9w
aHlfc2V0X2JpdHMoaGRtaV9waHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BMTF9UWERJVl9FTik7
CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGxsX3VucHJlcGFyZShz
dHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRv
X210a19oZG1pX3BoeShodyk7CisKKwlkZXZfZGJnKGhkbWlfcGh5LT5kZXYsICIlc1xuIiwgX19m
dW5jX18pOworCisJbXRrX2hkbWlfcGh5X2NsZWFyX2JpdHMoaGRtaV9waHksIEhETUlfQ09OMSwg
UkdfSERNSVRYX1BMTF9UWERJVl9FTik7CisJbXRrX2hkbWlfcGh5X2NsZWFyX2JpdHMoaGRtaV9w
aHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BMTF9CSUFTX0xQRl9FTik7CisJdXNsZWVwX3Jhbmdl
KDEwMCwgMTUwKTsKKwltdGtfaGRtaV9waHlfY2xlYXJfYml0cyhoZG1pX3BoeSwgSERNSV9DT04w
LCBSR19IRE1JVFhfUExMX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworCW10a19oZG1p
X3BoeV9jbGVhcl9iaXRzKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlUWF9QTExfQklBU19F
Tik7CisJbXRrX2hkbWlfcGh5X2NsZWFyX2JpdHMoaGRtaV9waHksIEhETUlfQ09OMCwgUkdfSERN
SVRYX1BMTF9QT1NESVYpOworCW10a19oZG1pX3BoeV9jbGVhcl9iaXRzKGhkbWlfcGh5LCBIRE1J
X0NPTjEsIFJHX0hETUlUWF9QTExfQVVUT0tfRU4pOworCXVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7
Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGxsX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3
LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7
CisJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSB0b19tdGtfaGRtaV9waHkoaHcpOwor
CXVuc2lnbmVkIGludCBwcmVfZGl2OworCXVuc2lnbmVkIGludCBkaXY7CisKKwlkZXZfZGJnKGhk
bWlfcGh5LT5kZXYsICIlczogJWx1IEh6LCBwYXJlbnQ6ICVsdSBIelxuIiwgX19mdW5jX18sCisJ
CXJhdGUsIHBhcmVudF9yYXRlKTsKKworCWlmIChyYXRlIDw9IDI3MDAwMDAwKSB7CisJCXByZV9k
aXYgPSAwOworCQlkaXYgPSAzOworCX0gZWxzZSBpZiAocmF0ZSA8PSA3NDI1MDAwMCkgeworCQlw
cmVfZGl2ID0gMTsKKwkJZGl2ID0gMjsKKwl9IGVsc2UgeworCQlwcmVfZGl2ID0gMTsKKwkJZGl2
ID0gMTsKKwl9CisKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLAorCQkJ
ICAocHJlX2RpdiA8PCBQUkVESVZfU0hJRlQpLCBSR19IRE1JVFhfUExMX1BSRURJVik7CisJbXRr
X2hkbWlfcGh5X3NldF9iaXRzKGhkbWlfcGh5LCBIRE1JX0NPTjAsIFJHX0hETUlUWF9QTExfUE9T
RElWKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLAorCQkJICAoMHgx
IDw8IFBMTF9JQ19TSElGVCkgfCAoMHgxIDw8IFBMTF9JUl9TSElGVCksCisJCQkgIFJHX0hETUlU
WF9QTExfSUMgfCBSR19IRE1JVFhfUExMX0lSKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3Bo
eSwgSERNSV9DT04xLAorCQkJICAoZGl2IDw8IFBMTF9UWERJVl9TSElGVCksIFJHX0hETUlUWF9Q
TExfVFhESVYpOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsCisJCQkg
ICgweDEgPDwgUExMX0ZCS1NFTF9TSElGVCkgfCAoMTkgPDwgUExMX0ZCS0RJVl9TSElGVCksCisJ
CQkgIFJHX0hETUlUWF9QTExfRkJLU0VMIHwgUkdfSERNSVRYX1BMTF9GQktESVYpOworCW10a19o
ZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsCisJCQkgICgweDIgPDwgUExMX0RJVkVO
X1NISUZUKSwgUkdfSERNSVRYX1BMTF9ESVZFTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9w
aHksIEhETUlfQ09OMCwKKwkJCSAgKDB4YyA8PCBQTExfQlBfU0hJRlQpIHwgKDB4MiA8PCBQTExf
QkNfU0hJRlQpIHwKKwkJCSAgKDB4MSA8PCBQTExfQlJfU0hJRlQpLAorCQkJICBSR19IRE1JVFhf
UExMX0JQIHwgUkdfSERNSVRYX1BMTF9CQyB8CisJCQkgIFJHX0hETUlUWF9QTExfQlIpOworCW10
a19oZG1pX3BoeV9jbGVhcl9iaXRzKGhkbWlfcGh5LCBIRE1JX0NPTjMsIFJHX0hETUlUWF9QUkRf
SU1QX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT040LAorCQkJICAo
MHgzIDw8IFBSRF9JQklBU19DTEtfU0hJRlQpIHwKKwkJCSAgKDB4MyA8PCBQUkRfSUJJQVNfRDJf
U0hJRlQpIHwKKwkJCSAgKDB4MyA8PCBQUkRfSUJJQVNfRDFfU0hJRlQpIHwKKwkJCSAgKDB4MyA8
PCBQUkRfSUJJQVNfRDBfU0hJRlQpLAorCQkJICBSR19IRE1JVFhfUFJEX0lCSUFTX0NMSyB8CisJ
CQkgIFJHX0hETUlUWF9QUkRfSUJJQVNfRDIgfAorCQkJICBSR19IRE1JVFhfUFJEX0lCSUFTX0Qx
IHwKKwkJCSAgUkdfSERNSVRYX1BSRF9JQklBU19EMCk7CisJbXRrX2hkbWlfcGh5X21hc2soaGRt
aV9waHksIEhETUlfQ09OMywKKwkJCSAgKDB4MCA8PCBEUlZfSU1QX0VOX1NISUZUKSwgUkdfSERN
SVRYX0RSVl9JTVBfRU4pOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjYs
CisJCQkgIChoZG1pX3BoeS0+ZHJ2X2ltcF9jbGsgPDwgRFJWX0lNUF9DTEtfU0hJRlQpIHwKKwkJ
CSAgKGhkbWlfcGh5LT5kcnZfaW1wX2QyIDw8IERSVl9JTVBfRDJfU0hJRlQpIHwKKwkJCSAgKGhk
bWlfcGh5LT5kcnZfaW1wX2QxIDw8IERSVl9JTVBfRDFfU0hJRlQpIHwKKwkJCSAgKGhkbWlfcGh5
LT5kcnZfaW1wX2QwIDw8IERSVl9JTVBfRDBfU0hJRlQpLAorCQkJICBSR19IRE1JVFhfRFJWX0lN
UF9DTEsgfCBSR19IRE1JVFhfRFJWX0lNUF9EMiB8CisJCQkgIFJHX0hETUlUWF9EUlZfSU1QX0Qx
IHwgUkdfSERNSVRYX0RSVl9JTVBfRDApOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBI
RE1JX0NPTjUsCisJCQkgIChoZG1pX3BoeS0+aWJpYXMgPDwgRFJWX0lCSUFTX0NMS19TSElGVCkg
fAorCQkJICAoaGRtaV9waHktPmliaWFzIDw8IERSVl9JQklBU19EMl9TSElGVCkgfAorCQkJICAo
aGRtaV9waHktPmliaWFzIDw8IERSVl9JQklBU19EMV9TSElGVCkgfAorCQkJICAoaGRtaV9waHkt
PmliaWFzIDw8IERSVl9JQklBU19EMF9TSElGVCksCisJCQkgIFJHX0hETUlUWF9EUlZfSUJJQVNf
Q0xLIHwgUkdfSERNSVRYX0RSVl9JQklBU19EMiB8CisJCQkgIFJHX0hETUlUWF9EUlZfSUJJQVNf
RDEgfCBSR19IRE1JVFhfRFJWX0lCSUFTX0QwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxv
bmcgbXRrX2hkbWlfcGxsX3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxv
bmcgcmF0ZSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyAqcGFyZW50X3JhdGUpCit7CisJc3RydWN0
IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSB0b19tdGtfaGRtaV9waHkoaHcpOworCisJaGRtaV9w
aHktPnBsbF9yYXRlID0gcmF0ZTsKKwlpZiAocmF0ZSA8PSA3NDI1MDAwMCkKKwkJKnBhcmVudF9y
YXRlID0gcmF0ZTsKKwllbHNlCisJCSpwYXJlbnRfcmF0ZSA9IHJhdGUgLyAyOworCisJcmV0dXJu
IHJhdGU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG10a19oZG1pX3BsbF9yZWNhbGNfcmF0
ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0
ZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3BoeSho
dyk7CisKKwlyZXR1cm4gaGRtaV9waHktPnBsbF9yYXRlOworfQorCitzdGF0aWMgY29uc3Qgc3Ry
dWN0IGNsa19vcHMgbXRrX2hkbWlfcGxsX29wcyA9IHsKKwkucHJlcGFyZSA9IG10a19oZG1pX3Bs
bF9wcmVwYXJlLAorCS51bnByZXBhcmUgPSBtdGtfaGRtaV9wbGxfdW5wcmVwYXJlLAorCS5zZXRf
cmF0ZSA9IG10a19oZG1pX3BsbF9zZXRfcmF0ZSwKKwkucm91bmRfcmF0ZSA9IG10a19oZG1pX3Bs
bF9yb3VuZF9yYXRlLAorCS5yZWNhbGNfcmF0ZSA9IG10a19oZG1pX3BsbF9yZWNhbGNfcmF0ZSwK
K307CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3BoeV9lbmFibGVfdG1kcyhzdHJ1Y3QgbXRrX2hk
bWlfcGh5ICpoZG1pX3BoeSkKK3sKKwltdGtfaGRtaV9waHlfc2V0X2JpdHMoaGRtaV9waHksIEhE
TUlfQ09OMywKKwkJCSAgICAgIFJHX0hETUlUWF9TRVJfRU4gfCBSR19IRE1JVFhfUFJEX0VOIHwK
KwkJCSAgICAgIFJHX0hETUlUWF9EUlZfRU4pOworCXVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7Cit9
CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3BoeV9kaXNhYmxlX3RtZHMoc3RydWN0IG10a19oZG1p
X3BoeSAqaGRtaV9waHkpCit7CisJbXRrX2hkbWlfcGh5X2NsZWFyX2JpdHMoaGRtaV9waHksIEhE
TUlfQ09OMywKKwkJCQlSR19IRE1JVFhfRFJWX0VOIHwgUkdfSERNSVRYX1BSRF9FTiB8CisJCQkJ
UkdfSERNSVRYX1NFUl9FTik7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3Bvd2VyX29u
KHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHBo
eV9nZXRfZHJ2ZGF0YShwaHkpOworCWludCByZXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFi
bGUoaGRtaV9waHktPnBsbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwltdGtf
aGRtaV9waHlfZW5hYmxlX3RtZHMoaGRtaV9waHkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyBpbnQgbXRrX2hkbWlfcGh5X3Bvd2VyX29mZihzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0
IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKworCW10a19o
ZG1pX3BoeV9kaXNhYmxlX3RtZHMoaGRtaV9waHkpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZSho
ZG1pX3BoeS0+cGxsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBo
eV9vcHMgbXRrX2hkbWlfcGh5X29wcyA9IHsKKwkucG93ZXJfb24gPSBtdGtfaGRtaV9waHlfcG93
ZXJfb24sCisJLnBvd2VyX29mZiA9IG10a19oZG1pX3BoeV9wb3dlcl9vZmYsCisJLm93bmVyID0g
VEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IG10a19oZG1pX3BoeV9wcm9iZShzdHJ1Y3Qg
cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5k
ZXY7CisJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHk7CisJc3RydWN0IHJlc291cmNlICpt
ZW07CisJc3RydWN0IGNsayAqcmVmX2NsazsKKwljb25zdCBjaGFyICpyZWZfY2xrX25hbWU7CisJ
c3RydWN0IGNsa19pbml0X2RhdGEgY2xrX2luaXQgPSB7CisJCS5vcHMgPSAmbXRrX2hkbWlfcGxs
X29wcywKKwkJLm51bV9wYXJlbnRzID0gMSwKKwkJLnBhcmVudF9uYW1lcyA9IChjb25zdCBjaGFy
ICogY29uc3QgKikmcmVmX2Nsa19uYW1lLAorCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5U
IHwgQ0xLX1NFVF9SQVRFX0dBVEUsCisJfTsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJc3RydWN0IHBo
eV9wcm92aWRlciAqcGh5X3Byb3ZpZGVyOworCWludCByZXQ7CisKKwloZG1pX3BoeSA9IGRldm1f
a3phbGxvYyhkZXYsIHNpemVvZigqaGRtaV9waHkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhkbWlf
cGh5KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShw
ZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaGRtaV9waHktPnJlZ3MgPSBkZXZtX2lvcmVtYXBf
cmVzb3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19FUlIoaGRtaV9waHktPnJlZ3MpKSB7CisJCXJl
dCA9IFBUUl9FUlIoaGRtaV9waHktPnJlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBn
ZXQgbWVtb3J5IHJlc291cmNlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwly
ZWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBsbF9yZWYiKTsKKwlpZiAoSVNfRVJSKHJlZl9j
bGspKSB7CisJCXJldCA9IFBUUl9FUlIocmVmX2Nsayk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwg
IkZhaWxlZCB0byBnZXQgUExMIHJlZmVyZW5jZSBjbG9jazogJWRcbiIsCisJCQlyZXQpOworCQly
ZXR1cm4gcmV0OworCX0KKwlyZWZfY2xrX25hbWUgPSBfX2Nsa19nZXRfbmFtZShyZWZfY2xrKTsK
KworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldi0+b2Zfbm9kZSwgImNsb2NrLW91
dHB1dC1uYW1lcyIsCisJCQkJICAgICAgJmNsa19pbml0Lm5hbWUpOworCWlmIChyZXQgPCAwKSB7
CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgY2xvY2stb3V0cHV0LW5hbWVzOiAlZFxu
IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwloZG1pX3BoeS0+cGxsX2h3LmluaXQgPSAm
Y2xrX2luaXQ7CisJaGRtaV9waHktPnBsbCA9IGRldm1fY2xrX3JlZ2lzdGVyKGRldiwgJmhkbWlf
cGh5LT5wbGxfaHcpOworCWlmIChJU19FUlIoaGRtaV9waHktPnBsbCkpIHsKKwkJcmV0ID0gUFRS
X0VSUihoZG1pX3BoeS0+cGxsKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIg
UExMOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBvZl9wcm9wZXJ0
eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJtZWRpYXRlayxpYmlhcyIsCisJCQkJICAgJmhkbWlf
cGh5LT5pYmlhcyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFp
bGVkIHRvIGdldCBpYmlhczogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0
ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LT5vZl9ub2RlLCAibWVkaWF0ZWssaWJpYXNfdXAi
LAorCQkJCSAgICZoZG1pX3BoeS0+aWJpYXNfdXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9l
cnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgaWJpYXMgdXA6ICVkXG4iLCByZXQpOworCQly
ZXR1cm4gcmV0OworCX0KKworCWRldl9pbmZvKGRldiwgIlVzaW5nIGRlZmF1bHQgVFggRFJWIGlt
cGVkYW5jZTogNC4yay8zNlxuIik7CisJaGRtaV9waHktPmRydl9pbXBfY2xrID0gMHgzMDsKKwlo
ZG1pX3BoeS0+ZHJ2X2ltcF9kMiA9IDB4MzA7CisJaGRtaV9waHktPmRydl9pbXBfZDEgPSAweDMw
OworCWhkbWlfcGh5LT5kcnZfaW1wX2QwID0gMHgzMDsKKworCXBoeSA9IGRldm1fcGh5X2NyZWF0
ZShkZXYsIE5VTEwsICZtdGtfaGRtaV9waHlfb3BzKTsKKwlpZiAoSVNfRVJSKHBoeSkpIHsKKwkJ
ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gY3JlYXRlIEhETUkgUEhZXG4iKTsKKwkJcmV0dXJuIFBU
Ul9FUlIocGh5KTsKKwl9CisJcGh5X3NldF9kcnZkYXRhKHBoeSwgaGRtaV9waHkpOworCisJcGh5
X3Byb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoZGV2LCBvZl9waHlfc2lt
cGxlX3hsYXRlKTsKKwlpZiAoSVNfRVJSKHBoeV9wcm92aWRlcikpCisJCXJldHVybiBQVFJfRVJS
KHBoeV9wcm92aWRlcik7CisKKwloZG1pX3BoeS0+ZGV2ID0gZGV2OworCXJldHVybiBvZl9jbGtf
YWRkX3Byb3ZpZGVyKGRldi0+b2Zfbm9kZSwgb2ZfY2xrX3NyY19zaW1wbGVfZ2V0LAorCQkJCSAg
IGhkbWlfcGh5LT5wbGwpOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3BoeV9yZW1vdmUoc3Ry
dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNv
bnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2hkbWlfcGh5X21hdGNoW10gPSB7CisJeyAuY29t
cGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtaGRtaS1waHkiLCB9LAorCXt9LAorfTsKKworc3Ry
dWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9waHlfZHJpdmVyID0geworCS5wcm9iZSA9IG10
a19oZG1pX3BoeV9wcm9iZSwKKwkucmVtb3ZlID0gbXRrX2hkbWlfcGh5X3JlbW92ZSwKKwkuZHJp
dmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1oZG1pLXBoeSIsCisJCS5vZl9tYXRjaF90YWJs
ZSA9IG10a19oZG1pX3BoeV9tYXRjaCwKKwl9LAorfTsKKworTU9EVUxFX0FVVEhPUigiSmllIFFp
dSA8amllLnFpdUBtZWRpYXRlay5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhVGVr
IE1UODE3MyBIRE1JIFBIWSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLS0g
CjIuNy4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk
cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0
cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK