From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v7 06/14] drm/mediatek: Add HDMI support
Date: Mon, 30 Nov 2015 22:07:48 +0100
Message-ID: <1448917676-25584-7-git-send-email-p.zabel@pengutronix.de>
References: <1448917676-25584-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: <1448917676-25584-1-git-send-email-p.zabel@pengutronix.de>
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: dri-devel-bounces@lists.freedesktop.org
Sender: "dri-devel"
To: dri-devel@lists.freedesktop.org
Cc: Mark Rutland , devicetree@vger.kernel.org, Paul Bolle , YT Shen , Jitao Shi , Jie Qiu , Pawel Moll , Ian Campbell , Cawa Cheng , Tomasz Figa , Rob Herring , linux-mediatek@lists.infradead.org, Kumar Gala , Matthias Brugger , kernel@pengutronix.de
List-Id: devicetree@vger.kernel.org
RnJvbTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CgpUaGlzIHBhdGNoIGFkZHMgZHJp
dmVycyBmb3IgdGhlIEhETUkgYnJpZGdlIGNvbm5lY3RlZCB0byB0aGUgRFBJMApkaXNwbGF5IHN1
YnN5c3RlbSBmdW5jdGlvbiBibG9jaywgZm9yIHRoZSBIRE1JIEREQyBibG9jaywgYW5kIGZvcgp0
aGUgSERNSSBQSFkgdG8gc3VwcG9ydCBIRE1JIG91dHB1dC4KClNpZ25lZC1vZmYtYnk6IEppZSBR
aXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgpTaWduZWQtb2ZmLWJ5OiBQaGlsaXBwIFphYmVsIDxw
LnphYmVsQHBlbmd1dHJvbml4LmRlPgotLS0KQ2hhbmdlcyBzaW5jZSB2NjoKIC0gUmVtb3ZlZCBt
dGtfaGRtaV9hdWRpb19kYXRhIC8gbXRrLWhkbWktY29kZWMgcGxhdGZvcm0gZGV2aWNlIGNyZWF0
aW9uCiAgIGZvciBub3csIHRoaXMgd2lsbCBiZSByZXdvcmtlZC4KLS0tCiBkcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvS2NvbmZpZyAgICAgICAgICAgICB8ICAgNiArCiBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgICAgICB8ICAgOCArCiBkcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX2NlYy5jICAgICAgICAgICB8IDI0NSArKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfY2VjLmggICAgICAgICAgIHwgIDI1ICsKIGRyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHJtX2Rydi5jICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX2hkbWlfZHJ2LmMgIHwgNjA5ICsrKysrKysrKysrKysrKysrKysrKwogZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMgICAgICAgICAgfCA0ODQgKysrKysrKysr
KysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oICAgICAgICAgIHwg
MTEzICsrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9kZGNfZHJ2LmMgIHwg
MzYyICsrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9ody5j
ICAgICAgIHwgNzU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19oZG1pX2h3LmggICAgICAgfCAgNzYgKysrCiBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2hkbWlfcGh5LmMgICAgICB8IDM0MCArKysrKysrKysrKysKIGRyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9waHkuaCAgICAgIHwgIDIwICsKIGRyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfaGRtaV9waHlfcmVncy5oIHwgMTE4ICsrKysrCiBkcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oICAgICB8IDIyMSArKysrKysrKwogaW5jbHVk
ZS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfYXVkaW8uaCAgICAgICAgfCAxMzcgKysrKysKIDE2IGZp
bGVzIGNoYW5nZWQsIDM1MjIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19kcm1faGRtaV9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfZGRjX2Rydi5jCiBjcmVhdGUgbW9kZSAxMDA2
NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2h3LmMKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcuaAogY3JlYXRlIG1vZGUg
MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9waHkuYwogY3JlYXRlIG1v
ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9waHkuaAogY3JlYXRl
IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9waHlfcmVncy5o
CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3Jl
Z3MuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL21lZGlhdGVrL210a19oZG1pX2F1
ZGlvLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyBiL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCmluZGV4IDUzNDNjZjEuLjg1YWY1MWMgMTAw
NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCisrKyBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9LY29uZmlnCkBAIC0xNCwzICsxNCw5IEBAIGNvbmZpZyBEUk1fTUVE
SUFURUsKIAkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGtlcm5lbCBtb2RlIHNldHRpbmcgYW5kCiAJ
ICBidWZmZXIgbWFuYWdlbWVudCB0byB1c2Vyc3BhY2UuCiAKK2NvbmZpZyBEUk1fTUVESUFURUtf
SERNSQorCXRyaXN0YXRlICJEUk0gSERNSSBTdXBwb3J0IGZvciBNZWRpYXRlayBTb0NzIgorCWRl
cGVuZHMgb24gRFJNX01FRElBVEVLCisJc2VsZWN0IEdFTkVSSUNfUEhZCisJaGVscAorCSAgRFJN
L0tNUyBIRE1JIGRyaXZlciBmb3IgTWVkaWF0ZWsgU29DcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2Vm
aWxlCmluZGV4IGNlZTliMjMuLmQwMmNjMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUK
QEAgLTEyLDMgKzEyLDExIEBAIG1lZGlhdGVrLWRybS15IDo9IG10a19kaXNwX292bC5vIFwKIAog
b2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykgKz0gbWVkaWF0ZWstZHJtLm8KIAorbWVkaWF0ZWst
ZHJtLWhkbWktb2JqcyA6PSBtdGtfZHJtX2hkbWlfZHJ2Lm8gXAorCQkJICBtdGtfY2VjLm8gXAor
CQkJICBtdGtfaGRtaV9kZGNfZHJ2Lm8gXAorCQkJICBtdGtfaGRtaS5vIFwKKwkJCSAgbXRrX2hk
bWlfaHcubyBcCisJCQkgIG10a19oZG1pX3BoeS5vCisKK29iai0kKENPTkZJR19EUk1fTUVESUFU
RUtfSERNSSkgKz0gbWVkaWF0ZWstZHJtLWhkbWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19jZWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2Vj
LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzOWQyZgotLS0gL2Rldi9u
dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmMKQEAgLTAsMCArMSwy
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9y
OiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICog
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz
aW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor
ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNp
bmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8
bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisK
KyNpbmNsdWRlICJtdGtfY2VjLmgiCisKKyNkZWZpbmUgVFJfQ09ORklHCQkweDAwCisjZGVmaW5l
IENMRUFSX0NFQ19JUlEJCQlCSVQoMTUpCisKKyNkZWZpbmUgQ0VDX0NLR0VOCQkweDA0CisjZGVm
aW5lIENFQ18zMktfUEROCQkJQklUKDE5KQorI2RlZmluZSBQRE4JCQkJQklUKDE2KQorCisjZGVm
aW5lIFJYX0VWRU5UCQkweDU0CisjZGVmaW5lIEhETUlfUE9SRAkJCUJJVCgyNSkKKyNkZWZpbmUg
SERNSV9IVFBMRwkJCUJJVCgyNCkKKyNkZWZpbmUgSERNSV9QT1JEX0lOVF9FTgkJQklUKDkpCisj
ZGVmaW5lIEhETUlfSFRQTEdfSU5UX0VOCQlCSVQoOCkKKworI2RlZmluZSBSWF9HRU5fV0QJCTB4
NTgKKyNkZWZpbmUgSERNSV9QT1JEX0lOVF8zMktfU1RBVFVTCUJJVCgyNikKKyNkZWZpbmUgUlhf
UklTQ19JTlRfMzJLX1NUQVRVUwkJQklUKDI1KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktf
U1RBVFVTCUJJVCgyNCkKKyNkZWZpbmUgSERNSV9QT1JEX0lOVF8zMktfQ0xSCQlCSVQoMTgpCisj
ZGVmaW5lIFJYX0lOVF8zMktfQ0xSCQkJQklUKDE3KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8z
MktfQ0xSCQlCSVQoMTYpCisjZGVmaW5lIEhETUlfUE9SRF9JTlRfMzJLX1NUQV9NQVNLCUJJVCgx
MCkKKyNkZWZpbmUgUlhfUklTQ19JTlRfMzJLX1NUQV9NQVNLCUJJVCg5KQorI2RlZmluZSBIRE1J
X0hUUExHX0lOVF8zMktfU1RBX01BU0sJQklUKDgpCisjZGVmaW5lIEhETUlfUE9SRF9JTlRfMzJL
X0VOCQlCSVQoMikKKyNkZWZpbmUgUlhfSU5UXzMyS19FTgkJCUJJVCgxKQorI2RlZmluZSBIRE1J
X0hUUExHX0lOVF8zMktfRU4JCUJJVCgwKQorCisjZGVmaW5lIE5PUk1BTF9JTlRfQ1RSTAkJMHg1
QworI2RlZmluZSBIRE1JX0hUUExHX0lOVF9TVEEJCUJJVCgwKQorI2RlZmluZSBIRE1JX1BPUkRf
SU5UX1NUQQkJQklUKDEpCisjZGVmaW5lIEhETUlfSFRQTEdfSU5UX0NMUgkJQklUKDE2KQorI2Rl
ZmluZSBIRE1JX1BPUkRfSU5UX0NMUgkJQklUKDE3KQorI2RlZmluZSBIRE1JX0ZVTExfSU5UX0NM
UgkJQklUKDIwKQorCitzdHJ1Y3QgbXRrX2NlYyB7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0
cnVjdCBjbGsgKmNsazsKKwlpbnQgaXJxOworCWJvb2wgaHBkOworCXZvaWQgKCpocGRfZXZlbnQp
KGJvb2wgaHBkLCB2b2lkICpkYXRhKTsKKwl2b2lkICpocGRfZXZlbnRfZGF0YTsKK307CisKK3N0
YXRpYyB2b2lkIG10a19jZWNfbWFzayhzdHJ1Y3QgbXRrX2NlYyAqY2VjLCB1bnNpZ25lZCBpbnQg
b2Zmc2V0LAorCQkJIHVuc2lnbmVkIGludCB2YWwsIHVuc2lnbmVkIGludCBtYXNrKQoreworCXUz
MiB0bXAgPSByZWFkbChjZWMtPnJlZ3MgKyBvZmZzZXQpICYgfm1hc2s7CisKKwl0bXAgfD0gdmFs
ICYgbWFzazsKKwl3cml0ZWwodmFsLCBjZWMtPnJlZ3MgKyBvZmZzZXQpOworfQorCit2b2lkIG10
a19jZWNfc2V0X2hwZF9ldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICB2b2lkICgqaHBk
X2V2ZW50KShib29sIGhwZCwgdm9pZCAqZGF0YSksCisJCQkgICB2b2lkICpocGRfZXZlbnRfZGF0
YSkKK3sKKwlzdHJ1Y3QgbXRrX2NlYyAqY2VjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlj
ZWMtPmhwZF9ldmVudF9kYXRhID0gaHBkX2V2ZW50X2RhdGE7CisJY2VjLT5ocGRfZXZlbnQgPSBo
cGRfZXZlbnQ7Cit9CisKK2Jvb2wgbXRrX2NlY19ocGRfaGlnaChzdHJ1Y3QgZGV2aWNlICpkZXYp
Cit7CisJc3RydWN0IG10a19jZWMgKmNlYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2ln
bmVkIGludCBzdGF0dXM7CisKKwlzdGF0dXMgPSByZWFkbChjZWMtPnJlZ3MgKyBSWF9FVkVOVCk7
CisKKwlyZXR1cm4gKHN0YXR1cyAmIChIRE1JX1BPUkQgfCBIRE1JX0hUUExHKSkgPT0gKEhETUlf
UE9SRCB8IEhETUlfSFRQTEcpOworfQorCitpbnQgbXRrX2NlY19pcnEoc3RydWN0IGRldmljZSAq
ZGV2KQoreworCXN0cnVjdCBtdGtfY2VjICpjZWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwor
CXJldHVybiBjZWMtPmlycTsKK30KKworc3RhdGljIHZvaWQgbXRrX2NlY19odHBsZ19pcnFfZW5h
YmxlKHN0cnVjdCBtdGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19tYXNrKGNlYywgQ0VDX0NLR0VO
LCAwLCBQRE4pOworCW10a19jZWNfbWFzayhjZWMsIENFQ19DS0dFTiwgQ0VDXzMyS19QRE4sIENF
Q18zMktfUEROKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIEhETUlfUE9SRF9JTlRf
MzJLX0NMUiwKKwkJICAgICBIRE1JX1BPUkRfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhj
ZWMsIFJYX0dFTl9XRCwgUlhfSU5UXzMyS19DTFIsIFJYX0lOVF8zMktfQ0xSKTsKKwltdGtfY2Vj
X21hc2soY2VjLCBSWF9HRU5fV0QsIEhETUlfSFRQTEdfSU5UXzMyS19DTFIsCisJCSAgICAgSERN
SV9IVFBMR19JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBI
RE1JX1BPUkRfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwg
UlhfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgSERNSV9I
VFBMR19JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBIRE1J
X1BPUkRfSU5UXzMyS19FTik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBSWF9J
TlRfMzJLX0VOKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIDAsIEhETUlfSFRQTEdf
SU5UXzMyS19FTik7CisKKwltdGtfY2VjX21hc2soY2VjLCBSWF9FVkVOVCwgSERNSV9QT1JEX0lO
VF9FTiwgSERNSV9QT1JEX0lOVF9FTik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfRVZFTlQsIEhE
TUlfSFRQTEdfSU5UX0VOLCBIRE1JX0hUUExHX0lOVF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10
a19jZWNfaHRwbGdfaXJxX2Rpc2FibGUoc3RydWN0IG10a19jZWMgKmNlYykKK3sKKwltdGtfY2Vj
X21hc2soY2VjLCBSWF9FVkVOVCwgMCwgSERNSV9QT1JEX0lOVF9FTik7CisJbXRrX2NlY19tYXNr
KGNlYywgUlhfRVZFTlQsIDAsIEhETUlfSFRQTEdfSU5UX0VOKTsKK30KKworc3RhdGljIHZvaWQg
bXRrX2NlY19jbGVhcl9odHBsZ19pcnEoc3RydWN0IG10a19jZWMgKmNlYykKK3sKKwltdGtfY2Vj
X21hc2soY2VjLCBUUl9DT05GSUcsIENMRUFSX0NFQ19JUlEsIENMRUFSX0NFQ19JUlEpOworCW10
a19jZWNfbWFzayhjZWMsIE5PUk1BTF9JTlRfQ1RSTCwgSERNSV9IVFBMR19JTlRfQ0xSLAorCQkg
ICAgIEhETUlfSFRQTEdfSU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgTk9STUFMX0lOVF9D
VFJMLCBIRE1JX1BPUkRfSU5UX0NMUiwKKwkJICAgICBIRE1JX1BPUkRfSU5UX0NMUik7CisJbXRr
X2NlY19tYXNrKGNlYywgTk9STUFMX0lOVF9DVFJMLCBIRE1JX0ZVTExfSU5UX0NMUiwKKwkJICAg
ICBIRE1JX0ZVTExfSU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCBIRE1J
X1BPUkRfSU5UXzMyS19DTFIsCisJCSAgICAgSERNSV9QT1JEX0lOVF8zMktfQ0xSKTsKKwltdGtf
Y2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIFJYX0lOVF8zMktfQ0xSLCBSWF9JTlRfMzJLX0NMUik7
CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCBIRE1JX0hUUExHX0lOVF8zMktfQ0xSLAor
CQkgICAgIEhETUlfSFRQTEdfSU5UXzMyS19DTFIpOworCXVkZWxheSg1KTsKKwltdGtfY2VjX21h
c2soY2VjLCBOT1JNQUxfSU5UX0NUUkwsIDAsIEhETUlfSFRQTEdfSU5UX0NMUik7CisJbXRrX2Nl
Y19tYXNrKGNlYywgTk9STUFMX0lOVF9DVFJMLCAwLCBIRE1JX1BPUkRfSU5UX0NMUik7CisJbXRr
X2NlY19tYXNrKGNlYywgVFJfQ09ORklHLCAwLCBDTEVBUl9DRUNfSVJRKTsKKwltdGtfY2VjX21h
c2soY2VjLCBOT1JNQUxfSU5UX0NUUkwsIDAsIEhETUlfRlVMTF9JTlRfQ0xSKTsKKwltdGtfY2Vj
X21hc2soY2VjLCBSWF9HRU5fV0QsIDAsIEhETUlfUE9SRF9JTlRfMzJLX0NMUik7CisJbXRrX2Nl
Y19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBSWF9JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNr
KGNlYywgUlhfR0VOX1dELCAwLCBIRE1JX0hUUExHX0lOVF8zMktfQ0xSKTsKK30KKworc3RhdGlj
IGlycXJldHVybl90IG10a19jZWNfaHRwbGdfaXNyX3RocmVhZChpbnQgaXJxLCB2b2lkICphcmcp
Cit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gYXJnOworCXN0cnVjdCBtdGtfY2VjICpjZWMgPSBk
ZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlib29sIGhwZDsKKworCW10a19jZWNfY2xlYXJfaHRwbGdf
aXJxKGNlYyk7CisJaHBkID0gbXRrX2NlY19ocGRfaGlnaChkZXYpOworCisJaWYgKGNlYy0+aHBk
ICE9IGhwZCkgeworCQlkZXZfaW5mbyhkZXYsICJob3RwbHVnIGV2ZW50ISxjdXIgaHBkID0gJWQs
IGhwZCA9ICVkXG4iLAorCQkJIGNlYy0+aHBkLCBocGQpOworCQljZWMtPmhwZCA9IGhwZDsKKwkJ
aWYgKGNlYy0+aHBkX2V2ZW50KQorCQkJY2VjLT5ocGRfZXZlbnQoaHBkLCBjZWMtPmhwZF9ldmVu
dF9kYXRhKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG10a19j
ZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNl
ICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfY2VjICpjZWM7CisJc3RydWN0IHJlc291
cmNlICpyZXM7CisJaW50IHJldDsKKworCWNlYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq
Y2VjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZWMpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxh
dGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2VjKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNv
dXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJY2VjLT5yZWdzID0gZGV2bV9pb3JlbWFw
X3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGNlYy0+cmVncykpIHsKKwkJcmV0ID0g
UFRSX0VSUihjZWMtPnJlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFwIGNl
YzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY2VjLT5jbGsgPSBkZXZtX2Ns
a19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGNlYy0+Y2xrKSkgeworCQlyZXQgPSBQVFJf
RVJSKGNlYy0+Y2xrKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNlYyBjbG9jazog
JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY2VjLT5pcnEgPSBwbGF0Zm9ybV9n
ZXRfaXJxKHBkZXYsIDApOworCWlmIChjZWMtPmlycSA8IDApIHsKKwkJZGV2X2VycihkZXYsICJG
YWlsZWQgdG8gZ2V0IGNlYyBpcnE6ICVkXG4iLCBjZWMtPmlycSk7CisJCXJldHVybiBjZWMtPmly
cTsKKwl9CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgY2VjLT5pcnEs
IE5VTEwsCisJCQkJCW10a19jZWNfaHRwbGdfaXNyX3RocmVhZCwKKwkJCQkJSVJRRl9TSEFSRUQg
fCBJUlFGX1RSSUdHRVJfTE9XIHwKKwkJCQkJSVJRRl9PTkVTSE9ULCAiaGRtaSBocGQiLCBkZXYp
OworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2VjIGly
cTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVf
ZW5hYmxlKGNlYy0+Y2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRv
IGVuYWJsZSBjZWMgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCW10
a19jZWNfaHRwbGdfaXJxX2VuYWJsZShjZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp
bnQgbXRrX2NlY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1
Y3QgbXRrX2NlYyAqY2VjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwltdGtfY2Vj
X2h0cGxnX2lycV9kaXNhYmxlKGNlYyk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNlYy0+Y2xr
KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRr
X2NlY19vZl9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1jZWMi
LCB9LAorCXt9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19jZWNfZHJpdmVyID0g
eworCS5wcm9iZSA9IG10a19jZWNfcHJvYmUsCisJLnJlbW92ZSA9IG10a19jZWNfcmVtb3ZlLAor
CS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWNlYyIsCisJCS5vZl9tYXRjaF90YWJs
ZSA9IG10a19jZWNfb2ZfaWRzLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19jZWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwNjQyMAotLS0gL2Rldi9udWxs
CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmgKQEAgLTAsMCArMSwyNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEpp
ZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g
MiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTVRLX0NFQ19ICisjZGVmaW5lIF9N
VEtfQ0VDX0gKKworc3RydWN0IGRldmljZTsKKwordm9pZCBtdGtfY2VjX3NldF9ocGRfZXZlbnQo
c3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgdm9pZCAoKmhvdHBsdWdfZXZlbnQpKGJvb2wgaHBk
LCB2b2lkICpkYXRhKSwKKwkJCSAgIHZvaWQgKmhvdHBsdWdfZXZlbnRfZGF0YSk7Citib29sIG10
a19jZWNfaHBkX2hpZ2goc3RydWN0IGRldmljZSAqZGV2KTsKK2ludCBtdGtfY2VjX2lycShzdHJ1
Y3QgZGV2aWNlICpkZXYpOworCisjZW5kaWYgLyogX01US19DRUNfSCAqLwpkaWZmIC0tZ2l0IGEv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9kcnYuYwppbmRleCA0MzUwNWU4Li4yZDViZDE2IDEwMDY0NAotLS0g
YS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUg
PGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogCisj
aW5jbHVkZSAibXRrX2NlYy5oIgogI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgogI2luY2x1ZGUg
Im10a19kcm1fZGRwLmgiCiAjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgpkaWZmIC0tZ2l0
IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1faGRtaV9kcnYuYyBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2hkbWlfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYmM1MDI3YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHJtX2hkbWlfZHJ2LmMKQEAgLTAsMCArMSw2MDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUu
cWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1f
Y3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0v
ZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxs
aW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9t
ZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxs
aW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9v
Zl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9w
bGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlICJtdGtfY2VjLmgiCisjaW5jbHVkZSAibXRrX2hk
bWkuaCIKKyNpbmNsdWRlICJtdGtfaGRtaV9ody5oIgorI2luY2x1ZGUgIm10a19oZG1pX3BoeS5o
IgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10a19oZG1pX2Nsa19uYW1lc1tNVEtfSERN
SV9DTEtfQ09VTlRdID0geworCVtNVEtfSERNSV9DTEtfSERNSV9QSVhFTF0gPSAicGl4ZWwiLAor
CVtNVEtfSERNSV9DTEtfSERNSV9QTExdID0gInBsbCIsCisJW01US19IRE1JX0NMS19BVURfQkNM
S10gPSAiYmNsayIsCisJW01US19IRE1JX0NMS19BVURfU1BESUZdID0gInNwZGlmIiwKK307CisK
K3N0YXRpYyBjb25zdCBlbnVtIG10a19oZG1pX2Nsa19pZCBtdGtfaGRtaV9lbmFibGVfY2xvY2tz
W10gPSB7CisJTVRLX0hETUlfQ0xLX0FVRF9CQ0xLLAorCU1US19IRE1JX0NMS19BVURfU1BESUYs
Cit9OworCitzdGF0aWMgaW50IG10a19oZG1pX2dldF9hbGxfY2xrKHN0cnVjdCBtdGtfaGRtaSAq
aGRtaSwKKwkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCWludCBpOworCisJZm9yIChp
ID0gMDsgaSA8IEFSUkFZX1NJWkUobXRrX2hkbWlfY2xrX25hbWVzKTsgaSsrKSB7CisJCWhkbWkt
PmNsa1tpXSA9IG9mX2Nsa19nZXRfYnlfbmFtZShucCwKKwkJCQkJCSAgbXRrX2hkbWlfY2xrX25h
bWVzW2ldKTsKKwkJaWYgKElTX0VSUihoZG1pLT5jbGtbaV0pKQorCQkJcmV0dXJuIFBUUl9FUlIo
aGRtaS0+Y2xrW2ldKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlf
Y2xrX2VuYWJsZV9hdWRpbyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJaW50IHJldDsKKwor
CXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0FVRF9CQ0xL
XSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJs
ZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0FVRF9TUERJRl0pOworCWlmIChyZXQpCisJCWdvdG8g
ZXJyOworCisJcmV0dXJuIDA7CitlcnI6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPmNs
a1tNVEtfSERNSV9DTEtfQVVEX0JDTEtdKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9p
ZCBtdGtfaGRtaV9jbGtfZGlzYWJsZV9hdWRpbyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJ
Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfQVVEX0JDTEtdKTsK
KwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19BVURfU1BESUZd
KTsKK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgaGRtaV9jb25uX2RldGVj
dChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubiwKKwkJCQkJCSAgYm9vbCBmb3JjZSkKK3sKKwlz
dHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2Nvbm4oY29ubik7CisKKwlyZXR1
cm4gbXRrX2hkbWlfaHBkX2hpZ2goaGRtaSkgPworCSAgICAgICBjb25uZWN0b3Jfc3RhdHVzX2Nv
bm5lY3RlZCA6IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworfQorCitzdGF0aWMgdm9p
ZCBoZG1pX2Nvbm5fZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubikKK3sKKwlzdHJ1
Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2Nvbm4oY29ubik7CisKKwltdGtfY2Vj
X3NldF9ocGRfZXZlbnQoaGRtaS0+Y2VjX2RldiwgTlVMTCwgTlVMTCk7CisKKwlkcm1fY29ubmVj
dG9yX3VucmVnaXN0ZXIoY29ubik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm4pOworfQor
CitzdGF0aWMgaW50IGhkbWlfY29ubl9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3Ig
KmNvbm4sCisJCQkJICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgdmFs
KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2Nvbm5fZ2V0X21vZGVz
KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9
IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKwlpbnQgcmV0
OworCisJaWYgKCFoZG1pLT5kZGNfYWRwdCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllZGlkID0g
ZHJtX2dldF9lZGlkKGNvbm4sIGhkbWktPmRkY19hZHB0KTsKKwlpZiAoIWVkaWQpCisJCXJldHVy
biAtRU5PREVWOworCisJaGRtaS0+ZHZpX21vZGUgPSAhZHJtX2RldGVjdF9oZG1pX21vbml0b3Io
ZWRpZCk7CisKKwlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubiwg
ZWRpZCk7CisKKwlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubiwgZWRpZCk7CisJa2ZyZWUo
ZWRpZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9jb25uX21vZGVf
dmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4sCisJCQkJICAgIHN0cnVjdCBkcm1fZGlz
cGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zy
b21fY29ubihjb25uKTsKKworCWRldl9pbmZvKGhkbWktPmRldiwgInhyZXM9JWQsIHlyZXM9JWQs
IHJlZnJlc2g9JWQsIGludGw9JWQgY2xvY2s9JWRcbiIsCisJCSBtb2RlLT5oZGlzcGxheSwgbW9k
ZS0+dmRpc3BsYXksIG1vZGUtPnZyZWZyZXNoLAorCQkgISEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9E
RV9GTEFHX0lOVEVSTEFDRSksIG1vZGUtPmNsb2NrICogMTAwMCk7CisKKwlpZiAoaGRtaS0+YnJp
ZGdlLm5leHQpIHsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgYWRqdXN0ZWRfbW9kZTsKKwor
CQlkcm1fbW9kZV9jb3B5KCZhZGp1c3RlZF9tb2RlLCBtb2RlKTsKKwkJaWYgKCFkcm1fYnJpZGdl
X21vZGVfZml4dXAoaGRtaS0+YnJpZGdlLm5leHQsIG1vZGUsCisJCQkJCSAgICZhZGp1c3RlZF9t
b2RlKSkKKwkJCXJldHVybiBNT0RFX0JBRDsKKwl9CisKKwlpZiAobW9kZS0+Y2xvY2sgPj0gMjcw
MDAgJiYKKwkgICAgbW9kZS0+Y2xvY2sgPD0gMjk3MDAwICYmCisJICAgIG1vZGUtPmhkaXNwbGF5
IDw9IDB4MWZmZiAmJgorCSAgICBtb2RlLT52ZGlzcGxheSA8PSAweDFmZmYpCisJCXJldHVybiBN
T0RFX09LOworCisJcmV0dXJuIE1PREVfQkFEOworfQorCitzdGF0aWMgc3RydWN0IGRybV9lbmNv
ZGVyICptdGtfaGRtaV9jb25uX2Jlc3RfZW5jKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uKQor
eworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKwor
CXJldHVybiBoZG1pLT5icmlkZ2UuZW5jb2RlcjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBk
cm1fY29ubmVjdG9yX2Z1bmNzIG10a19oZG1pX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9
IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5kZXRlY3QgPSBoZG1pX2Nvbm5f
ZGV0ZWN0LAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9y
X21vZGVzLAorCS5kZXN0cm95ID0gaGRtaV9jb25uX2Rlc3Ryb3ksCisJLnNldF9wcm9wZXJ0eSA9
IGhkbWlfY29ubl9zZXRfcHJvcGVydHksCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29u
bmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxw
ZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBk
cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBj
b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MKKwkJbXRrX2hkbWlfY29ubmVj
dG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0gbXRrX2hkbWlfY29ubl9nZXRfbW9k
ZXMsCisJLm1vZGVfdmFsaWQgPSBtdGtfaGRtaV9jb25uX21vZGVfdmFsaWQsCisJLmJlc3RfZW5j
b2RlciA9IG10a19oZG1pX2Nvbm5fYmVzdF9lbmMsCit9OworCitzdGF0aWMgdm9pZCBtdGtfaGRt
aV9ocGRfZXZlbnQoYm9vbCBocGQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG10a19oZG1pICpo
ZG1pID0gZGF0YTsKKworCWlmIChoZG1pICYmIGhkbWktPmJyaWRnZS5lbmNvZGVyICYmIGhkbWkt
PmJyaWRnZS5lbmNvZGVyLT5kZXYpCisJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChoZG1pLT5i
cmlkZ2UuZW5jb2Rlci0+ZGV2KTsKK30KKworLyoKKyAqIEJyaWRnZSBjYWxsYmFja3MKKyAqLwor
CitzdGF0aWMgaW50IG10a19oZG1pX2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJy
aWRnZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShi
cmlkZ2UpOworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoYnJpZGdlLT5l
bmNvZGVyLT5kZXYsICZoZG1pLT5jb25uLAorCQkJCSAmbXRrX2hkbWlfY29ubmVjdG9yX2Z1bmNz
LAorCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vy
cihoZG1pLT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb25uZWN0b3I6ICVkXG4iLCByZXQp
OworCQlyZXR1cm4gcmV0OworCX0KKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJmhkbWktPmNv
bm4sICZtdGtfaGRtaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKworCWhkbWktPmNvbm4ucG9s
bGVkID0gRFJNX0NPTk5FQ1RPUl9QT0xMX0hQRDsKKwloZG1pLT5jb25uLmludGVybGFjZV9hbGxv
d2VkID0gdHJ1ZTsKKwloZG1pLT5jb25uLmRvdWJsZXNjYW5fYWxsb3dlZCA9IGZhbHNlOworCisJ
cmV0ID0gZHJtX2Nvbm5lY3Rvcl9yZWdpc3RlcigmaGRtaS0+Y29ubik7CisJaWYgKHJldCkgewor
CQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb25uZWN0b3I6ICVkXG4i
LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGRybV9tb2RlX2Nvbm5lY3Rvcl9h
dHRhY2hfZW5jb2RlcigmaGRtaS0+Y29ubiwKKwkJCQkJCWJyaWRnZS0+ZW5jb2Rlcik7CisJaWYg
KHJldCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwKKwkJCSJGYWlsZWQgdG8gYXR0YWNoIGNvbm5l
Y3RvciB0byBlbmNvZGVyOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAo
YnJpZGdlLT5uZXh0KSB7CisJCWJyaWRnZS0+bmV4dC0+ZW5jb2RlciA9IGJyaWRnZS0+ZW5jb2Rl
cjsKKwkJcmV0ID0gZHJtX2JyaWRnZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLT5kZXYsIGJyaWRn
ZS0+bmV4dCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoaGRtaS0+ZGV2LAorCQkJCSJGYWls
ZWQgdG8gYXR0YWNoIGV4dGVybmFsIGJyaWRnZTogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0
OworCQl9CisJfQorCisJbXRrX2NlY19zZXRfaHBkX2V2ZW50KGhkbWktPmNlY19kZXYsIG10a19o
ZG1pX2hwZF9ldmVudCwgaGRtaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgbXRr
X2hkbWlfYnJpZGdlX21vZGVfZml4dXAoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQlj
b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3Bs
YXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZv
aWQgbXRrX2hkbWlfYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sK
KwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOwor
CisJcGh5X3Bvd2VyX29mZihoZG1pLT5waHkpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1p
LT5jbGtbTVRLX0hETUlfQ0xLX0hETUlfUElYRUxdKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUo
aGRtaS0+Y2xrW01US19IRE1JX0NMS19IRE1JX1BMTF0pOworfQorCitzdGF0aWMgdm9pZCBtdGtf
aGRtaV9icmlkZ2VfcG9zdF9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJ
c3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsKKwor
CW10a19oZG1pX3Bvd2VyX29mZihoZG1pKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfYnJp
ZGdlX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQkgICAgICBzdHJ1Y3Qg
ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl
ICphZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zy
b21fYnJpZGdlKGJyaWRnZSk7CisKKwlkZXZfaW5mbyhoZG1pLT5kZXYsICJjdXIgaW5mbzogbmFt
ZTolcywgaGRpc3BsYXk6JWRcbiIsCisJCSBhZGp1c3RlZF9tb2RlLT5uYW1lLCBhZGp1c3RlZF9t
b2RlLT5oZGlzcGxheSk7CisJZGV2X2luZm8oaGRtaS0+ZGV2LCAiaHN5bmNfc3RhcnQ6JWQsaHN5
bmNfZW5kOiVkLCBodG90YWw6JWQiLAorCQkgYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQsIGFk
anVzdGVkX21vZGUtPmhzeW5jX2VuZCwKKwkJIGFkanVzdGVkX21vZGUtPmh0b3RhbCk7CisJZGV2
X2luZm8oaGRtaS0+ZGV2LCAiaHNrZXc6JWQsIHZkaXNwbGF5OiVkXG4iLAorCQkgYWRqdXN0ZWRf
bW9kZS0+aHNrZXcsIGFkanVzdGVkX21vZGUtPnZkaXNwbGF5KTsKKwlkZXZfaW5mbyhoZG1pLT5k
ZXYsICJ2c3luY19zdGFydDolZCwgdnN5bmNfZW5kOiVkLCB2dG90YWw6JWQiLAorCQkgYWRqdXN0
ZWRfbW9kZS0+dnN5bmNfc3RhcnQsIGFkanVzdGVkX21vZGUtPnZzeW5jX2VuZCwKKwkJIGFkanVz
dGVkX21vZGUtPnZ0b3RhbCk7CisJZGV2X2luZm8oaGRtaS0+ZGV2LCAidnNjYW46JWQsIGZsYWc6
JWRcbiIsCisJCSBhZGp1c3RlZF9tb2RlLT52c2NhbiwgYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MpOwor
CisJZHJtX21vZGVfY29weSgmaGRtaS0+bW9kZSwgYWRqdXN0ZWRfbW9kZSk7Cit9CisKK3N0YXRp
YyB2b2lkIG10a19oZG1pX2JyaWRnZV9wcmVfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk
Z2UpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJp
ZGdlKTsKKworCW10a19oZG1pX3Bvd2VyX29uKGhkbWkpOworfQorCitzdGF0aWMgdm9pZCBtdGtf
aGRtaV9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0
IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsKKworCW10a19o
ZG1pX291dHB1dF9zZXRfZGlzcGxheV9tb2RlKGhkbWksICZoZG1pLT5tb2RlKTsKKwljbGtfcHJl
cGFyZV9lbmFibGUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19IRE1JX1BMTF0pOworCWNsa19wcmVw
YXJlX2VuYWJsZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0hETUlfUElYRUxdKTsKKwlwaHlfcG93
ZXJfb24oaGRtaS0+cGh5KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1
bmNzIG10a19oZG1pX2JyaWRnZV9mdW5jcyA9IHsKKwkuYXR0YWNoID0gbXRrX2hkbWlfYnJpZGdl
X2F0dGFjaCwKKwkubW9kZV9maXh1cCA9IG10a19oZG1pX2JyaWRnZV9tb2RlX2ZpeHVwLAorCS5k
aXNhYmxlID0gbXRrX2hkbWlfYnJpZGdlX2Rpc2FibGUsCisJLnBvc3RfZGlzYWJsZSA9IG10a19o
ZG1pX2JyaWRnZV9wb3N0X2Rpc2FibGUsCisJLm1vZGVfc2V0ID0gbXRrX2hkbWlfYnJpZGdlX21v
ZGVfc2V0LAorCS5wcmVfZW5hYmxlID0gbXRrX2hkbWlfYnJpZGdlX3ByZV9lbmFibGUsCisJLmVu
YWJsZSA9IG10a19oZG1pX2JyaWRnZV9lbmFibGUsCit9OworCitzdGF0aWMgaW50IG10a19oZG1p
X2R0X3BhcnNlX3BkYXRhKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICBzdHJ1Y3QgcGxh
dGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7
CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNl
X25vZGUgKmNlY19ucCwgKnBvcnQsICplcCwgKnJlbW90ZSwgKmkyY19ucDsKKwlzdHJ1Y3QgcGxh
dGZvcm1fZGV2aWNlICpjZWNfcGRldjsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJc3RydWN0
IHJlc291cmNlICptZW07CisJaW50IHJldDsKKworCWhkbWktPmZsdF9uXzV2X2dwaW8gPSBvZl9n
ZXRfbmFtZWRfZ3BpbyhucCwgImZsdF9uXzV2LWdwaW9zIiwgMCk7CisJaWYgKGhkbWktPmZsdF9u
XzV2X2dwaW8gPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBmbHRfbl81diBn
cGlvOiAlZFxuIiwKKwkJCWhkbWktPmZsdF9uXzV2X2dwaW8pOworCQlyZXR1cm4gaGRtaS0+Zmx0
X25fNXZfZ3BpbzsKKwl9CisKKwlyZXQgPSBtdGtfaGRtaV9nZXRfYWxsX2NsayhoZG1pLCBucCk7
CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgY2xvY2tzOiAlZFxu
IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBUaGUgQ0VDIG1vZHVsZSBoYW5kbGVz
IEhETUkgaG90cGx1ZyBkZXRlY3Rpb24gKi8KKwljZWNfbnAgPSBvZl9maW5kX2NvbXBhdGlibGVf
bm9kZShucC0+cGFyZW50LCBOVUxMLAorCQkJCQkgIm1lZGlhdGVrLG10ODE3My1jZWMiKTsKKwlp
ZiAoIWNlY19ucCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBmaW5kIENFQyBub2RlXG4i
KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2VjX3BkZXYgPSBvZl9maW5kX2RldmljZV9i
eV9ub2RlKGNlY19ucCk7CisJaWYgKCFjZWNfcGRldikgeworCQlkZXZfZXJyKGhkbWktPmRldiwg
IldhaXRpbmcgZm9yIENFQyBkZXZpY2UgJXNcbiIsCisJCQljZWNfbnAtPmZ1bGxfbmFtZSk7CisJ
CXJldHVybiAtRVBST0JFX0RFRkVSOworCX0KKwloZG1pLT5jZWNfZGV2ID0gJmNlY19wZGV2LT5k
ZXY7CisKKwkvKgorCSAqIFRoZSBtZWRpYXRlayxzeXNjb24taGRtaSBwcm9wZXJ0eSBjb250YWlu
cyBhIHBoYW5kbGUgbGluayB0byB0aGUKKwkgKiBNTVNZU19DT05GSUcgZGV2aWNlIGFuZCB0aGUg
cmVnaXN0ZXIgb2Zmc2V0IG9mIHRoZSBIRE1JX1NZU19DRkcKKwkgKiByZWdpc3RlcnMgaXQgY29u
dGFpbnMuCisJICovCisJcmVnbWFwID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShu
cCwgIm1lZGlhdGVrLHN5c2Nvbi1oZG1pIik7CisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJf
aW5kZXgobnAsICJtZWRpYXRlayxzeXNjb24taGRtaSIsIDEsCisJCQkJCSAmaGRtaS0+c3lzX29m
ZnNldCk7CisJaWYgKElTX0VSUihyZWdtYXApKQorCQlyZXQgPSBQVFJfRVJSKHJlZ21hcCk7CisJ
aWYgKHJldCkgeworCQlyZXQgPSBQVFJfRVJSKHJlZ21hcCk7CisJCWRldl9lcnIoZGV2LAorCQkJ
IkZhaWxlZCB0byBnZXQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzOiAlZFxuIiwKKwkJ
CXJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWhkbWktPnN5c19yZWdtYXAgPSByZWdtYXA7CisK
KwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwor
CWhkbWktPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19F
UlIoaGRtaS0+cmVncykpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBoZG1p
X3NoZWxsOiAlbGRcbiIsCisJCQlQVFJfRVJSKGhkbWktPnJlZ3MpKTsKKwkJcmV0dXJuIFBUUl9F
UlIoaGRtaS0+cmVncyk7CisJfQorCisJcG9ydCA9IG9mX2dyYXBoX2dldF9wb3J0X2J5X2lkKG5w
LCAxKTsKKwlpZiAoIXBvcnQpIHsKKwkJZGV2X2VycihkZXYsICJNaXNzaW5nIG91dHB1dCBwb3J0
IG5vZGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcCA9IG9mX2dldF9jaGlsZF9i
eV9uYW1lKHBvcnQsICJlbmRwb2ludCIpOworCWlmICghZXApIHsKKwkJZGV2X2VycihkZXYsICJN
aXNzaW5nIGVuZHBvaW50IG5vZGUgaW4gcG9ydCAlc1xuIiwKKwkJCXBvcnQtPmZ1bGxfbmFtZSk7
CisJCW9mX25vZGVfcHV0KHBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJb2Zfbm9kZV9w
dXQocG9ydCk7CisKKwlyZW1vdGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVw
KTsKKwlpZiAoIXJlbW90ZSkgeworCQlkZXZfZXJyKGRldiwgIk1pc3NpbmcgY29ubmVjdG9yL2Jy
aWRnZSBub2RlIGZvciBlbmRwb2ludCAlc1xuIiwKKwkJCWVwLT5mdWxsX25hbWUpOworCQlvZl9u
b2RlX3B1dChlcCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlvZl9ub2RlX3B1dChlcCk7CisK
KwlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHJlbW90ZSwgImhkbWktY29ubmVjdG9yIikp
IHsKKwkJaGRtaS0+YnJpZGdlLm5leHQgPSBvZl9kcm1fZmluZF9icmlkZ2UocmVtb3RlKTsKKwkJ
aWYgKCFoZG1pLT5icmlkZ2UubmV4dCkgeworCQkJZGV2X2VycihkZXYsICJXYWl0aW5nIGZvciBl
eHRlcm5hbCBicmlkZ2VcbiIpOworCQkJb2Zfbm9kZV9wdXQocmVtb3RlKTsKKwkJCXJldHVybiAt
RVBST0JFX0RFRkVSOworCQl9CisJfQorCisJaTJjX25wID0gb2ZfcGFyc2VfcGhhbmRsZShyZW1v
dGUsICJkZGMtaTJjLWJ1cyIsIDApOworCWlmICghaTJjX25wKSB7CisJCWRldl9lcnIoZGV2LCAi
RmFpbGVkIHRvIGZpbmQgZGRjLWkyYy1idXMgbm9kZSBpbiAlc1xuIiwKKwkJCXJlbW90ZS0+ZnVs
bF9uYW1lKTsKKwkJb2Zfbm9kZV9wdXQocmVtb3RlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor
CW9mX25vZGVfcHV0KHJlbW90ZSk7CisKKwloZG1pLT5kZGNfYWRwdCA9IG9mX2ZpbmRfaTJjX2Fk
YXB0ZXJfYnlfbm9kZShpMmNfbnApOworCWlmICghaGRtaS0+ZGRjX2FkcHQpIHsKKwkJZGV2X2Vy
cihkZXYsICJGYWlsZWQgdG8gZ2V0IGRkYyBpMmMgYWRhcHRlciBieSBub2RlXG4iKTsKKwkJcmV0
dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBo
ZG1pX2ZsdF9uXzV2X2lycV90aHJlYWQoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBt
dGtfaGRtaSAqaGRtaSA9IGFyZzsKKworCWRldl9lcnIoaGRtaS0+ZGV2LCAiZGV0ZWN0ZWQgNXYg
cGluIGVycm9yIHN0YXR1c1xuIik7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMg
aW50IG10a19kcm1faGRtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor
CXN0cnVjdCBtdGtfaGRtaSAqaGRtaTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2
OworCWludCByZXQ7CisKKwloZG1pID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpoZG1pKSwg
R0ZQX0tFUk5FTCk7CisJaWYgKCFoZG1pKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhkbWktPmRl
diA9IGRldjsKKworCXJldCA9IG10a19oZG1pX2R0X3BhcnNlX3BkYXRhKGhkbWksIHBkZXYpOwor
CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwloZG1pLT5mbHRfbl81dl9pcnEgPSBncGlvX3Rv
X2lycShoZG1pLT5mbHRfbl81dl9ncGlvKTsKKwlpZiAoaGRtaS0+Zmx0X25fNXZfaXJxIDwgMCkg
eworCQlkZXZfZXJyKGRldiwgImhkbWktPmZsdF9uXzV2X2lycSA9ICVkXG4iLAorCQkJaGRtaS0+
Zmx0X25fNXZfaXJxKTsKKwkJcmV0dXJuIGhkbWktPmZsdF9uXzV2X2lycTsKKwl9CisKKwlyZXQg
PSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgaGRtaS0+Zmx0X25fNXZfaXJxLAorCQkJ
CQlOVUxMLCBoZG1pX2ZsdF9uXzV2X2lycV90aHJlYWQsCisJCQkJCUlSUUZfVFJJR0dFUl9SSVNJ
TkcgfAorCQkJCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfT05FU0hPVCwKKwkJCQkJImhk
bWkgZmx0X25fNXYiLCBoZG1pKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVk
IHRvIHJlZ2lzdGVyIGhkbWkgZmx0X25fNXYgaW50ZXJydXB0XG4iKTsKKwkJcmV0dXJuIHJldDsK
Kwl9CisKKwloZG1pLT5waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCAiaGRtaSIpOworCWlmIChJU19F
UlIoaGRtaS0+cGh5KSkgeworCQlyZXQgPSBQVFJfRVJSKGhkbWktPnBoeSk7CisJCWRldl9lcnIo
ZGV2LCAiRmFpbGVkIHRvIGdldCBIRE1JIFBIWTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7
CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaGRtaSk7CisKKwlyZXQgPSBtdGtf
aGRtaV9vdXRwdXRfaW5pdChoZG1pKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFp
bGVkIHRvIGluaXRpYWxpemUgaGRtaSBvdXRwdXRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwor
CWhkbWktPmJyaWRnZS5mdW5jcyA9ICZtdGtfaGRtaV9icmlkZ2VfZnVuY3M7CisJaGRtaS0+YnJp
ZGdlLm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlyZXQgPSBkcm1fYnJpZGdlX2FkZCgm
aGRtaS0+YnJpZGdlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFk
ZCBicmlkZ2UsIHJldCA9ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9
IG10a19oZG1pX2Nsa19lbmFibGVfYXVkaW8oaGRtaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJy
KGRldiwgIkZhaWxlZCB0byBlbmFibGUgYXVkaW8gY2xvY2tzOiAlZFxuIiwgcmV0KTsKKwkJZ290
byBlcnJfYnJpZGdlX3JlbW92ZTsKKwl9CisKKwlkZXZfaW5mbyhkZXYsICJtZWRpYXRlayBoZG1p
IHByb2JlIHN1Y2Nlc3NcbiIpOworCXJldHVybiAwOworCitlcnJfYnJpZGdlX3JlbW92ZToKKwlk
cm1fYnJpZGdlX3JlbW92ZSgmaGRtaS0+YnJpZGdlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0
aWMgaW50IG10a19kcm1faGRtaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK
K3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsK
KworCWRybV9icmlkZ2VfcmVtb3ZlKCZoZG1pLT5icmlkZ2UpOworCXBsYXRmb3JtX2RldmljZV91
bnJlZ2lzdGVyKGhkbWktPmF1ZGlvX3BkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYs
IE5VTEwpOworCW10a19oZG1pX2Nsa19kaXNhYmxlX2F1ZGlvKGhkbWkpOworCXJldHVybiAwOwor
fQorCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IG10a19oZG1pX3N1c3BlbmQo
c3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGRldl9nZXRf
ZHJ2ZGF0YShkZXYpOworCisJbXRrX2hkbWlfcG93ZXJfb2ZmKGhkbWkpOworCW10a19oZG1pX2Ns
a19kaXNhYmxlX2F1ZGlvKGhkbWkpOworCWRldl9pbmZvKGRldiwgImhkbWkgc3VzcGVuZCBzdWNj
ZXNzIVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcmVzdW1lKHN0
cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBkZXZfZ2V0X2Ry
dmRhdGEoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IG10a19oZG1pX2Nsa19lbmFibGVf
YXVkaW8oaGRtaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImhkbWkgcmVzdW1lIGZh
aWxlZCFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCW10a19oZG1pX3Bvd2VyX29uKGhkbWkp
OworCW10a19oZG1pX291dHB1dF9zZXRfZGlzcGxheV9tb2RlKGhkbWksICZoZG1pLT5tb2RlKTsK
KwlkZXZfaW5mbyhkZXYsICJoZG1pIHJlc3VtZSBzdWNjZXNzIVxuIik7CisJcmV0dXJuIDA7Cit9
CisjZW5kaWYKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhtdGtfaGRtaV9wbV9vcHMsCisJCQkg
bXRrX2hkbWlfc3VzcGVuZCwgbXRrX2hkbWlfcmVzdW1lKTsKKworc3RhdGljIGNvbnN0IHN0cnVj
dCBvZl9kZXZpY2VfaWQgbXRrX2RybV9oZG1pX29mX2lkc1tdID0geworCXsgLmNvbXBhdGlibGUg
PSAibWVkaWF0ZWssbXQ4MTczLWhkbWkiLCB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHBs
YXRmb3JtX2RyaXZlciBtdGtfaGRtaV9kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX2RybV9oZG1p
X3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfZHJtX2hkbWlfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJ
CS5uYW1lID0gIm1lZGlhdGVrLWRybS1oZG1pIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2Ry
bV9oZG1pX29mX2lkcywKKwkJLnBtID0gJm10a19oZG1pX3BtX29wcywKKwl9LAorfTsKKworc3Rh
dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBtdGtfaGRtaV9kcml2ZXJzW10gPSB7
CisJJm10a19oZG1pX3BoeV9kcml2ZXIsCisJJm10a19oZG1pX2RkY19kcml2ZXIsCisJJm10a19j
ZWNfZHJpdmVyLAorCSZtdGtfaGRtaV9kcml2ZXIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBt
dGtfaGRtaXR4X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCWludCBpOworCisJZm9yIChpID0g
MDsgaSA8IEFSUkFZX1NJWkUobXRrX2hkbWlfZHJpdmVycyk7IGkrKykgeworCQlyZXQgPSBwbGF0
Zm9ybV9kcml2ZXJfcmVnaXN0ZXIobXRrX2hkbWlfZHJpdmVyc1tpXSk7CisJCWlmIChyZXQgPCAw
KSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciAlcyBkcml2ZXI6ICVkXG4iLAorCQkJ
ICAgICAgIG10a19oZG1pX2RyaXZlcnNbaV0tPmRyaXZlci5uYW1lLCByZXQpOworCQkJZ290byBl
cnI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJ
cGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIobXRrX2hkbWlfZHJpdmVyc1tpXSk7CisKKwlyZXR1
cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXRrX2hkbWl0eF9leGl0KHZvaWQpCit7
CisJaW50IGk7CisKKwlmb3IgKGkgPSBBUlJBWV9TSVpFKG10a19oZG1pX2RyaXZlcnMpIC0gMTsg
aSA+PSAwOyBpLS0pCisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKG10a19oZG1pX2RyaXZl
cnNbaV0pOworfQorCittb2R1bGVfaW5pdChtdGtfaGRtaXR4X2luaXQpOworbW9kdWxlX2V4aXQo
bXRrX2hkbWl0eF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSmllIFFpdSA8amllLnFpdUBtZWRp
YXRlay5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhVGVrIEhETUkgRHJpdmVyIik7
CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2hkbWkuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5j
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOTU1YTQKLS0tIC9kZXYvbnVs
bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuYwpAQCAtMCwwICsxLDQ4
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6
IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp
b24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgor
I2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVk
ZSA8bGludXgvcGh5L3BoeS5oPgorI2luY2x1ZGUgIm10a19jZWMuaCIKKyNpbmNsdWRlICJtdGtf
aGRtaS5oIgorI2luY2x1ZGUgIm10a19oZG1pX2h3LmgiCisjaW5jbHVkZSAibXRrX2hkbWlfcGh5
LmgiCisKK3N0YXRpYyB1OCBtdGtfaGRtaV9hdWRfZ2V0X2NobmxfY291bnQoZW51bSBoZG1pX2F1
ZF9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKQoreworCXN3aXRjaCAoY2hhbm5lbF90eXBlKSB7
CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMV8wOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF
XzFfMToKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8yXzA6CisJCXJldHVybiAyOworCWNhc2Ug
SERNSV9BVURfQ0hBTl9UWVBFXzJfMToKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8zXzA6CisJ
CXJldHVybiAzOworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzNfMToKKwljYXNlIEhETUlfQVVE
X0NIQU5fVFlQRV80XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfM18wX0xSUzoKKwkJcmV0
dXJuIDQ7CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8xOgorCWNhc2UgSERNSV9BVURfQ0hB
Tl9UWVBFXzVfMDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8zXzFfTFJTOgorCWNhc2UgSERN
SV9BVURfQ0hBTl9UWVBFXzRfMF9DTFJTOgorCQlyZXR1cm4gNTsKKwljYXNlIEhETUlfQVVEX0NI
QU5fVFlQRV81XzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8wOgorCWNhc2UgSERNSV9B
VURfQ0hBTl9UWVBFXzRfMV9DTFJTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMF9DUzoK
KwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZ
UEVfNl8wX09IOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMF9DSFI6CisJCXJldHVybiA2
OworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMToKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQ
RV82XzFfQ1M6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX0NIOgorCWNhc2UgSERNSV9B
VURfQ0hBTl9UWVBFXzZfMV9PSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ0hSOgor
CWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83
XzBfTEhfUkg6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTUl9SU1I6CisJY2FzZSBI
RE1JX0FVRF9DSEFOX1RZUEVfN18wX0xDX1JDOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdf
MF9MV19SVzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfTFNEX1JTRDoKKwljYXNlIEhE
TUlfQVVEX0NIQU5fVFlQRV83XzBfTFNTX1JTUzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83
XzBfTEhTX1JIUzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfQ0g6CisJY2FzZSBI
RE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX09IOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdf
MF9DU19DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NIX09IOgorCWNhc2UgSERN
SV9BVURfQ0hBTl9UWVBFXzdfMF9DSF9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18w
X09IX0NIUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfTFNTX1JTU19MU1JfUlNSOgor
CWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzhfMF9MSF9SSF9DUzoKKwkJcmV0dXJuIDc7CisJY2Fz
ZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9M
SF9SSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFNSX1JTUjoKKwljYXNlIEhETUlf
QVVEX0NIQU5fVFlQRV83XzFfTENfUkM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xX
X1JXOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU0RfUlNEOgorCWNhc2UgSERNSV9B
VURfQ0hBTl9UWVBFXzdfMV9MU1NfUlNTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9M
SFNfUkhTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19DSDoKKwljYXNlIEhETUlf
QVVEX0NIQU5fVFlQRV83XzFfQ1NfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NT
X0NIUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ0hfT0g6CisJY2FzZSBIRE1JX0FV
RF9DSEFOX1RZUEVfN18xX0NIX0NIUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfT0hf
Q0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU1NfUlNTX0xTUl9SU1I6CisJCXJl
dHVybiA4OworCWRlZmF1bHQ6CisJCXJldHVybiAyOworCX0KK30KKworc3RhdGljIGludCBtdGtf
aGRtaV92aWRlb19jaGFuZ2VfdnBsbChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHUzMiBjbG9jaywK
KwkJCQkgICAgICBlbnVtIGhkbWlfZGlzcGxheV9jb2xvcl9kZXB0aCBkZXB0aCkKK3sKKwl1bnNp
Z25lZCBsb25nIHJhdGU7CisJaW50IHJldDsKKworCS8qIFRoZSBEUEkgZHJpdmVyIGFscmVhZHkg
c2hvdWxkIGhhdmUgc2V0IFRWRFBMTCB0byB0aGUgY29ycmVjdCByYXRlICovCisJcmV0ID0gY2xr
X3NldF9yYXRlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfSERNSV9QTExdLCBjbG9jayk7CisJaWYg
KHJldCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBzZXQgUExMIHRvICV1IEh6
OiAlZFxuIiwgY2xvY2ssCisJCQlyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJhdGUgPSBj
bGtfZ2V0X3JhdGUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19IRE1JX1BMTF0pOworCisJaWYgKERJ
Vl9ST1VORF9DTE9TRVNUKHJhdGUsIDEwMDApICE9IERJVl9ST1VORF9DTE9TRVNUKGNsb2NrLCAx
MDAwKSkKKwkJZGV2X3dhcm4oaGRtaS0+ZGV2LCAiV2FudCBQTEwgJXUgSHosIGdvdCAlbHUgSHpc
biIsIGNsb2NrLAorCQkJIHJhdGUpOworCWVsc2UKKwkJZGV2X2RiZyhoZG1pLT5kZXYsICJXYW50
IFBMTCAldSBIeiwgZ290ICVsdSBIelxuIiwgY2xvY2ssIHJhdGUpOworCisJbXRrX2hkbWlfcGh5
X3NldF9wbGwoaGRtaS0+cGh5LCBjbG9jaywgZGVwdGgpOworCW10a19oZG1pX2h3X2NvbmZpZ19z
eXMoaGRtaSk7CisJbXRrX2hkbWlfaHdfc2V0X2RlZXBfY29sb3JfbW9kZShoZG1pLCBkZXB0aCk7
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3ZpZGVvX3NldF9kaXNwbGF5
X21vZGUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5
X21vZGUgKm1vZGUpCit7CisJbXRrX2hkbWlfaHdfcmVzZXQoaGRtaSk7CisJbXRrX2hkbWlfaHdf
ZW5hYmxlX25vdGljZShoZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9od193cml0ZV9pbnRfbWFzayho
ZG1pLCAweGZmKTsKKwltdGtfaGRtaV9od19lbmFibGVfZHZpX21vZGUoaGRtaSwgaGRtaS0+ZHZp
X21vZGUpOworCW10a19oZG1pX2h3X25jdHNfYXV0b193cml0ZV9lbmFibGUoaGRtaSwgdHJ1ZSk7
CisKKwltdGtfaGRtaV9od19tc2ljX3NldHRpbmcoaGRtaSwgbW9kZSk7Cit9CisKK3N0YXRpYyBp
bnQgbXRrX2hkbWlfYXVkX2VuYWJsZV9wYWNrZXQoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29s
IGVuYWJsZSkKK3sKKwltdGtfaGRtaV9od19zZW5kX2F1ZF9wYWNrZXQoaGRtaSwgZW5hYmxlKTsK
KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRfb25fb2ZmX2h3X25jdHMo
c3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIG9uKQoreworCW10a19oZG1pX2h3X25jdHNfZW5h
YmxlKGhkbWksIG9uKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRf
c2V0X2lucHV0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwl1OCBjaGFuX2NvdW50OworCisJ
bXRrX2hkbWlfaHdfYXVkX3NldF9jaGFubmVsX3N3YXAoaGRtaSwgSERNSV9BVURfU1dBUF9MRkVf
Q0MpOworCW10a19oZG1pX2h3X2F1ZF9yYXdfZGF0YV9lbmFibGUoaGRtaSwgdHJ1ZSk7CisKKwlp
ZiAoaGRtaS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF90eXBlID09IEhETUlfQVVEX0lOUFVUX1NQRElG
ICYmCisJICAgIGhkbWktPmF1ZF9wYXJhbS5hdWRfY29kZWMgPT0gSERNSV9BVURJT19DT0RJTkdf
VFlQRV9EU1QpIHsKKwkJbXRrX2hkbWlfaHdfYXVkX3NldF9iaXRfbnVtKGhkbWksCisJCQkJCSAg
ICBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzI0KTsKKwl9IGVsc2UgaWYgKGhkbWktPmF1ZF9wYXJh
bS5hdWRfaTJzX2ZtdCA9PQorCQkJSERNSV9JMlNfTU9ERV9MSlRfMjRCSVQpIHsKKwkJaGRtaS0+
YXVkX3BhcmFtLmF1ZF9pMnNfZm10ID0gSERNSV9JMlNfTU9ERV9MSlRfMTZCSVQ7CisJfQorCisJ
bXRrX2hkbWlfaHdfYXVkX3NldF9pMnNfZm10KGhkbWksCisJCQkJICAgIGhkbWktPmF1ZF9wYXJh
bS5hdWRfaTJzX2ZtdCk7CisJbXRrX2hkbWlfaHdfYXVkX3NldF9iaXRfbnVtKGhkbWksIEhETUlf
QVVESU9fU0FNUExFX1NJWkVfMjQpOworCisJbXRrX2hkbWlfaHdfYXVkX3NldF9oaWdoX2JpdHJh
dGUoaGRtaSwgZmFsc2UpOworCW10a19oZG1pX3BoeV9hdWRfZHN0X25vcm1hbF9kb3VibGVfZW5h
YmxlKGhkbWksIGZhbHNlKTsKKwltdGtfaGRtaV9od19hdWRfZHN0X2VuYWJsZShoZG1pLCBmYWxz
ZSk7CisKKwlpZiAoaGRtaS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF90eXBlID09IEhETUlfQVVEX0lO
UFVUX1NQRElGKSB7CisJCW10a19oZG1pX2h3X2F1ZF9kc2RfZW5hYmxlKGhkbWksIGZhbHNlKTsK
KwkJaWYgKGhkbWktPmF1ZF9wYXJhbS5hdWRfY29kZWMgPT0KKwkJCUhETUlfQVVESU9fQ09ESU5H
X1RZUEVfRFNUKSB7CisJCQltdGtfaGRtaV9waHlfYXVkX2RzdF9ub3JtYWxfZG91YmxlX2VuYWJs
ZShoZG1pLAorCQkJCQkJCQkgIHRydWUpOworCQkJbXRrX2hkbWlfaHdfYXVkX2RzdF9lbmFibGUo
aGRtaSwgdHJ1ZSk7CisJCX0KKworCQljaGFuX2NvdW50ID0gbXRrX2hkbWlfYXVkX2dldF9jaG5s
X2NvdW50CisJCQkJCQkgKEhETUlfQVVEX0NIQU5fVFlQRV8yXzApOworCQltdGtfaGRtaV9od19h
dWRfc2V0X2kyc19jaGFuX251bShoZG1pLAorCQkJCQkJIEhETUlfQVVEX0NIQU5fVFlQRV8yXzAs
CisJCQkJCQkgY2hhbl9jb3VudCk7CisJCW10a19oZG1pX2h3X2F1ZF9zZXRfaW5wdXRfdHlwZSho
ZG1pLAorCQkJCQkgICAgICAgSERNSV9BVURfSU5QVVRfU1BESUYpOworCX0gZWxzZSB7CisJCW10
a19oZG1pX2h3X2F1ZF9kc2RfZW5hYmxlKGhkbWksIGZhbHNlKTsKKwkJY2hhbl9jb3VudCA9CisJ
CQltdGtfaGRtaV9hdWRfZ2V0X2NobmxfY291bnQoCisJCQloZG1pLT5hdWRfcGFyYW0uYXVkX2lu
cHV0X2NoYW5fdHlwZSk7CisJCW10a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2NoYW5fbnVtKAorCQkJ
aGRtaSwKKwkJCWhkbWktPmF1ZF9wYXJhbS5hdWRfaW5wdXRfY2hhbl90eXBlLAorCQkJY2hhbl9j
b3VudCk7CisJCW10a19oZG1pX2h3X2F1ZF9zZXRfaW5wdXRfdHlwZShoZG1pLAorCQkJCQkgICAg
ICAgSERNSV9BVURfSU5QVVRfSTJTKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg
bXRrX2hkbWlfYXVkX3NldF9zcmMoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCXN0cnVjdCBk
cm1fZGlzcGxheV9tb2RlICpkaXNwbGF5X21vZGUpCit7CisJbXRrX2hkbWlfYXVkX29uX29mZl9o
d19uY3RzKGhkbWksIGZhbHNlKTsKKworCWlmIChoZG1pLT5hdWRfcGFyYW0uYXVkX2lucHV0X3R5
cGUgPT0gSERNSV9BVURfSU5QVVRfSTJTKSB7CisJCXN3aXRjaCAoaGRtaS0+YXVkX3BhcmFtLmF1
ZF9oZG1pX2ZzKSB7CisJCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzMyMDAwOgor
CQljYXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV80NDEwMDoKKwkJY2FzZSBIRE1JX0FV
RElPX1NBTVBMRV9GUkVRVUVOQ1lfNDgwMDA6CisJCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJF
UVVFTkNZXzg4MjAwOgorCQljYXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV85NjAwMDoK
KwkJCW10a19oZG1pX2h3X2F1ZF9zcmNfb2ZmKGhkbWkpOworCQkJLyogbXRrX2hkbWlfaHdfYXVk
X3NyY19lbmFibGUoaGRtaSwgZmFsc2UpOyAqLworCQkJbXRrX2hkbWlfaHdfYXVkX3NldF9tY2xr
KAorCQkJaGRtaSwKKwkJCWhkbWktPmF1ZF9wYXJhbS5hdWRfbWNsayk7CisJCQltdGtfaGRtaV9o
d19hdWRfYWNsa19pbnZfZW5hYmxlKGhkbWksIGZhbHNlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0
OgorCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGhkbWktPmF1ZF9wYXJhbS5p
ZWNfZnJhbWVfZnMpIHsKKwkJY2FzZSBIRE1JX0lFQ18zMks6CisJCQloZG1pLT5hdWRfcGFyYW0u
YXVkX2hkbWlfZnMgPQorCQkJICAgIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV8zMjAwMDsK
KwkJCW10a19oZG1pX2h3X2F1ZF9zcmNfb2ZmKGhkbWkpOworCQkJbXRrX2hkbWlfaHdfYXVkX3Nl
dF9tY2xrKGhkbWksCisJCQkJCQkgSERNSV9BVURfTUNMS18xMjhGUyk7CisJCQltdGtfaGRtaV9o
d19hdWRfYWNsa19pbnZfZW5hYmxlKGhkbWksIGZhbHNlKTsKKwkJCWJyZWFrOworCQljYXNlIEhE
TUlfSUVDXzQ4SzoKKwkJCWhkbWktPmF1ZF9wYXJhbS5hdWRfaGRtaV9mcyA9CisJCQkgICAgSERN
SV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ4MDAwOworCQkJbXRrX2hkbWlfaHdfYXVkX3NyY19v
ZmYoaGRtaSk7CisJCQltdGtfaGRtaV9od19hdWRfc2V0X21jbGsoaGRtaSwKKwkJCQkJCSBIRE1J
X0FVRF9NQ0xLXzEyOEZTKTsKKwkJCW10a19oZG1pX2h3X2F1ZF9hY2xrX2ludl9lbmFibGUoaGRt
aSwgZmFsc2UpOworCQkJYnJlYWs7CisJCWNhc2UgSERNSV9JRUNfNDRLOgorCQkJaGRtaS0+YXVk
X3BhcmFtLmF1ZF9oZG1pX2ZzID0KKwkJCSAgICBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lf
NDQxMDA7CisJCQltdGtfaGRtaV9od19hdWRfc3JjX29mZihoZG1pKTsKKwkJCW10a19oZG1pX2h3
X2F1ZF9zZXRfbWNsayhoZG1pLAorCQkJCQkJIEhETUlfQVVEX01DTEtfMTI4RlMpOworCQkJbXRr
X2hkbWlfaHdfYXVkX2FjbGtfaW52X2VuYWJsZShoZG1pLCBmYWxzZSk7CisJCQlicmVhazsKKwkJ
ZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCW10a19oZG1pX2h3X2F1ZF9zZXRfbmN0cyho
ZG1pLCBoZG1pLT5kZXB0aCwgaGRtaS0+YXVkX3BhcmFtLmF1ZF9oZG1pX2ZzLAorCQkJCSBkaXNw
bGF5X21vZGUtPmNsb2NrKTsKKworCW10a19oZG1pX2h3X2F1ZF9zcmNfcmVlbmFibGUoaGRtaSk7
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfYXVkX3NldF9jaG5sX3N0YXR1
cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlfaHdfYXVkX3NldF9jaGFubmVs
X3N0YXR1cygKKwkJaGRtaSwKKwkgICBoZG1pLT5hdWRfcGFyYW0uaGRtaV9sX2NoYW5uZWxfc3Rh
dGUsCisJICAgaGRtaS0+YXVkX3BhcmFtLmhkbWlfcl9jaGFubmVsX3N0YXRlLAorCSAgIGhkbWkt
PmF1ZF9wYXJhbS5hdWRfaGRtaV9mcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRr
X2hkbWlfYXVkX291dHB1dF9jb25maWcoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSAgICAg
IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkaXNwbGF5X21vZGUpCit7CisJbXRrX2hkbWlfaHdf
YXVkX211dGUoaGRtaSwgdHJ1ZSk7CisJbXRrX2hkbWlfYXVkX2VuYWJsZV9wYWNrZXQoaGRtaSwg
ZmFsc2UpOworCisJbXRrX2hkbWlfYXVkX3NldF9pbnB1dChoZG1pKTsKKwltdGtfaGRtaV9hdWRf
c2V0X3NyYyhoZG1pLCBkaXNwbGF5X21vZGUpOworCW10a19oZG1pX2F1ZF9zZXRfY2hubF9zdGF0
dXMoaGRtaSk7CisKKwl1c2xlZXBfcmFuZ2UoNTAsIDEwMCk7CisKKwltdGtfaGRtaV9hdWRfb25f
b2ZmX2h3X25jdHMoaGRtaSwgdHJ1ZSk7CisJbXRrX2hkbWlfYXVkX2VuYWJsZV9wYWNrZXQoaGRt
aSwgdHJ1ZSk7CisJbXRrX2hkbWlfaHdfYXVkX211dGUoaGRtaSwgZmFsc2UpOworCXJldHVybiAw
OworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3NldHVwX2F2X211dGVfcGFja2V0KHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSkKK3sKKwltdGtfaGRtaV9od19zZW5kX2F2X211dGUoaGRtaSk7CisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc2V0dXBfYXZfdW5tdXRlX3BhY2tldChz
dHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlfaHdfc2VuZF9hdl91bm11dGUoaGRt
aSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc2V0dXBfYXZpX2luZm9m
cmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl
ICptb2RlKQoreworCXN0cnVjdCBoZG1pX2F2aV9pbmZvZnJhbWUgZnJhbWU7CisJdTggYnVmZmVy
WzE3XTsKKwlzc2l6ZV90IGVycjsKKworCWVyciA9IGRybV9oZG1pX2F2aV9pbmZvZnJhbWVfZnJv
bV9kaXNwbGF5X21vZGUoJmZyYW1lLCBtb2RlKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJy
KGhkbWktPmRldiwKKwkJCSJGYWlsZWQgdG8gZ2V0IEFWSSBpbmZvZnJhbWUgZnJvbSBtb2RlOiAl
bGRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gaGRtaV9hdmlfaW5mb2Zy
YW1lX3BhY2soJmZyYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlpZiAoZXJyIDwgMCkg
eworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBwYWNrIEFWSSBpbmZvZnJhbWU6ICVs
ZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwltdGtfaGRtaV9od19zZW5kX2luZm9f
ZnJhbWUoaGRtaSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0
YXRpYyBpbnQgbXRrX2hkbWlfc2V0dXBfc3BkX2luZm9mcmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWksCisJCQkJCWNvbnN0IGNoYXIgKnZlbmRvciwKKwkJCQkJY29uc3QgY2hhciAqcHJvZHVjdCkK
K3sKKwlzdHJ1Y3QgaGRtaV9zcGRfaW5mb2ZyYW1lIGZyYW1lOworCXU4IGJ1ZmZlclsyOV07CisJ
c3NpemVfdCBlcnI7CisKKwllcnIgPSBoZG1pX3NwZF9pbmZvZnJhbWVfaW5pdCgmZnJhbWUsIHZl
bmRvciwgcHJvZHVjdCk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJG
YWlsZWQgdG8gaW5pdGlhbGl6ZSBTUEQgaW5mb2ZyYW1lICVsZFxuIiwKKwkJCSAgICAgZXJyKTsK
KwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBoZG1pX3NwZF9pbmZvZnJhbWVfcGFjaygmZnJh
bWUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIo
aGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHBhY2sgU0RQIGluZm9mcmFtZTogJWxkXG4iLCBlcnIpOwor
CQlyZXR1cm4gZXJyOworCX0KKworCW10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShoZG1pLCBi
dWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtf
aGRtaV9zZXR1cF9hdWRpb19pbmZvZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXN0
cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSBmcmFtZTsKKwl1OCBidWZmZXJbMTRdOworCXNzaXpl
X3QgZXJyOworCisJZXJyID0gaGRtaV9hdWRpb19pbmZvZnJhbWVfaW5pdCgmZnJhbWUpOworCWlm
IChlcnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpZWQgdG8gc2V0dXAgYXVkaW8g
aW5mb2ZyYW1lOiAlbGRcbiIsCisJCQllcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWZyYW1l
LmNvZGluZ190eXBlID0gSERNSV9BVURJT19DT0RJTkdfVFlQRV9TVFJFQU07CisJZnJhbWUuc2Ft
cGxlX2ZyZXF1ZW5jeSA9IEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV9TVFJFQU07CisJZnJh
bWUuc2FtcGxlX3NpemUgPSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFX1NUUkVBTTsKKwlmcmFtZS5j
aGFubmVscyA9CisJICAgIG10a19oZG1pX2F1ZF9nZXRfY2hubF9jb3VudCgKKwkgICAgaGRtaS0+
YXVkX3BhcmFtLmF1ZF9pbnB1dF9jaGFuX3R5cGUpOworCisJZXJyID0gaGRtaV9hdWRpb19pbmZv
ZnJhbWVfcGFjaygmZnJhbWUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChlcnIgPCAw
KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHBhY2sgYXVkaW8gaW5mb2ZyYW1l
OiAlbGRcbiIsCisJCQllcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCW10a19oZG1pX2h3X3Nl
bmRfaW5mb19mcmFtZShoZG1pLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlyZXR1cm4gMDsK
K30KKworc3RhdGljIGludCBtdGtfaGRtaV9zZXR1cF92ZW5kb3Jfc3BlY2lmaWNfaW5mb2ZyYW1l
KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt
b2RlKQoreworCXN0cnVjdCBoZG1pX3ZlbmRvcl9pbmZvZnJhbWUgZnJhbWU7CisJdTggYnVmZmVy
WzEwXTsKKwlzc2l6ZV90IGVycjsKKworCWVyciA9IGRybV9oZG1pX3ZlbmRvcl9pbmZvZnJhbWVf
ZnJvbV9kaXNwbGF5X21vZGUoJmZyYW1lLCBtb2RlKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIo
aGRtaS0+ZGV2LAorCQkJIkZhaWxlZCB0byBnZXQgdmVuZG9yIGluZm9mcmFtZSBmcm9tIG1vZGU6
ICVsZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBoZG1pX3ZlbmRvcl9p
bmZvZnJhbWVfcGFjaygmZnJhbWUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChlcnIp
IHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8gcGFjayB2ZW5kb3IgaW5mb2ZyYW1l
OiAlbGRcbiIsCisJCQllcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCW10a19oZG1pX2h3X3Nl
bmRfaW5mb19mcmFtZShoZG1pLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlyZXR1cm4gMDsK
K30KKworaW50IG10a19oZG1pX2hwZF9oaWdoKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwly
ZXR1cm4gaGRtaS0+Y2VjX2RldiA/IG10a19jZWNfaHBkX2hpZ2goaGRtaS0+Y2VjX2RldikgOiBm
YWxzZTsKK30KKworaW50IG10a19oZG1pX291dHB1dF9pbml0KHN0cnVjdCBtdGtfaGRtaSAqaGRt
aSkKK3sKKwlzdHJ1Y3QgaGRtaV9hdWRpb19wYXJhbSAqYXVkX3BhcmFtID0gJmhkbWktPmF1ZF9w
YXJhbTsKKworCWlmIChoZG1pLT5pbml0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhkbWktPmNz
cCA9IEhETUlfQ09MT1JTUEFDRV9SR0I7CisJaGRtaS0+ZGVwdGggPSBIRE1JX0RFRVBfQ09MT1Jf
MjRCSVRTOworCWhkbWktPm91dHB1dCA9IHRydWU7CisJYXVkX3BhcmFtLT5hdWRfY29kZWMgPSBI
RE1JX0FVRElPX0NPRElOR19UWVBFX1BDTTsKKwlhdWRfcGFyYW0tPmF1ZF9oZG1pX2ZzID0gSERN
SV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ4MDAwOworCWF1ZF9wYXJhbS0+YXVkX3NhbXBlX3Np
emUgPSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzE2OworCWF1ZF9wYXJhbS0+YXVkX2lucHV0X3R5
cGUgPSBIRE1JX0FVRF9JTlBVVF9JMlM7CisJYXVkX3BhcmFtLT5hdWRfaTJzX2ZtdCA9IEhETUlf
STJTX01PREVfSTJTXzI0QklUOworCWF1ZF9wYXJhbS0+YXVkX21jbGsgPSBIRE1JX0FVRF9NQ0xL
XzEyOEZTOworCWF1ZF9wYXJhbS0+aWVjX2ZyYW1lX2ZzID0gSERNSV9JRUNfNDhLOworCWF1ZF9w
YXJhbS0+YXVkX2lucHV0X2NoYW5fdHlwZSA9IEhETUlfQVVEX0NIQU5fVFlQRV8yXzA7CisJYXVk
X3BhcmFtLT5oZG1pX2xfY2hhbm5lbF9zdGF0ZVsyXSA9IDI7CisJYXVkX3BhcmFtLT5oZG1pX3Jf
Y2hhbm5lbF9zdGF0ZVsyXSA9IDI7CisJaGRtaS0+aW5pdCA9IHRydWU7CisKKwlyZXR1cm4gMDsK
K30KKwordm9pZCBtdGtfaGRtaV9wb3dlcl9vbihzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJ
bXRrX2hkbWlfaHdfbWFrZV9yZWdfd3JpdGFibGUoaGRtaSwgdHJ1ZSk7CisJbXRrX2hkbWlfaHdf
MXA0X3ZlcnNpb25fZW5hYmxlKGhkbWksIHRydWUpOworfQorCit2b2lkIG10a19oZG1pX3Bvd2Vy
X29mZihzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlfaHdfMXA0X3ZlcnNpb25f
ZW5hYmxlKGhkbWksIHRydWUpOworCW10a19oZG1pX2h3X21ha2VfcmVnX3dyaXRhYmxlKGhkbWks
IGZhbHNlKTsKK30KKworaW50IG10a19oZG1pX291dHB1dF9zZXRfZGlzcGxheV9tb2RlKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl
KQoreworCWludCByZXQ7CisKKwlpZiAoIWhkbWktPmluaXQpIHsKKwkJZGV2X2VycihoZG1pLT5k
ZXYsICJkb2Vzbid0IGluaXQgaGRtaSBjb250cm9sIGNvbnRleHQhXG4iKTsKKwkJcmV0dXJuIC1F
SU5WQUw7CisJfQorCisJbXRrX2hkbWlfaHdfdmlkX2JsYWNrKGhkbWksIHRydWUpOworCW10a19o
ZG1pX2h3X2F1ZF9tdXRlKGhkbWksIHRydWUpOworCW10a19oZG1pX3NldHVwX2F2X211dGVfcGFj
a2V0KGhkbWkpOworCXBoeV9wb3dlcl9vZmYoaGRtaS0+cGh5KTsKKworCXJldCA9IG10a19oZG1p
X3ZpZGVvX2NoYW5nZV92cGxsKGhkbWksCisJCQkJCSBtb2RlLT5jbG9jayAqIDEwMDAsCisJCQkJ
CSBoZG1pLT5kZXB0aCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgInNldCB2
cGxsIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwltdGtfaGRtaV92aWRlb19zZXRf
ZGlzcGxheV9tb2RlKGhkbWksIG1vZGUpOworCisJcGh5X3Bvd2VyX29uKGhkbWktPnBoeSk7CisJ
bXRrX2hkbWlfYXVkX291dHB1dF9jb25maWcoaGRtaSwgbW9kZSk7CisKKwltdGtfaGRtaV9zZXR1
cF9hdWRpb19pbmZvZnJhbWUoaGRtaSk7CisJbXRrX2hkbWlfc2V0dXBfYXZpX2luZm9mcmFtZSho
ZG1pLCBtb2RlKTsKKwltdGtfaGRtaV9zZXR1cF9zcGRfaW5mb2ZyYW1lKGhkbWksICJtZWRpYXRl
ayIsICJjaHJvbWVib29rIik7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR18zRF9N
QVNLKQorCQltdGtfaGRtaV9zZXR1cF92ZW5kb3Jfc3BlY2lmaWNfaW5mb2ZyYW1lKGhkbWksIG1v
ZGUpOworCisJbXRrX2hkbWlfaHdfdmlkX2JsYWNrKGhkbWksIGZhbHNlKTsKKwltdGtfaGRtaV9o
d19hdWRfbXV0ZShoZG1pLCBmYWxzZSk7CisJbXRrX2hkbWlfc2V0dXBfYXZfdW5tdXRlX3BhY2tl
dChoZG1pKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19oZG1pLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjhmZGUxCi0tLSAvZGV2L251bGwK
KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmgKQEAgLTAsMCArMSwxMTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBK
aWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u
IDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoK
KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX01US19IRE1JX0NUUkxfSAorI2Rl
ZmluZSBfTVRLX0hETUlfQ1RSTF9ICisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNs
dWRlIDxkcm0vbWVkaWF0ZWsvbXRrX2hkbWlfYXVkaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9oZG1p
Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNp
bmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgY2xrOworc3RydWN0IGRldmljZTsKK3N0
cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBpMmNfYWRhcHRlcjsKK3N0cnVjdCBwbGF0Zm9ybV9k
ZXZpY2U7CitzdHJ1Y3QgcGh5Oworc3RydWN0IHJlZ21hcDsKKworZW51bSBtdGtfaGRtaV9jbGtf
aWQgeworCU1US19IRE1JX0NMS19IRE1JX1BJWEVMLAorCU1US19IRE1JX0NMS19IRE1JX1BMTCwK
KwlNVEtfSERNSV9DTEtfQVVEX0JDTEssCisJTVRLX0hETUlfQ0xLX0FVRF9TUERJRiwKKwlNVEtf
SERNSV9DTEtfQ09VTlQKK307CisKK2VudW0gaGRtaV9kaXNwbGF5X2NvbG9yX2RlcHRoIHsKKwlI
RE1JX0RFRVBfQ09MT1JfMjRCSVRTLAorCUhETUlfREVFUF9DT0xPUl8zMEJJVFMsCisJSERNSV9E
RUVQX0NPTE9SXzM2QklUUywKKwlIRE1JX0RFRVBfQ09MT1JfNDhCSVRTLAorfTsKKworc3RydWN0
IG10a19oZG1pIHsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7CisJc3RydWN0IGRybV9jb25u
ZWN0b3IgY29ubjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHBoeSAqcGh5OworCXN0
cnVjdCBkZXZpY2UgKmNlY19kZXY7CisJc3RydWN0IGkyY19hZGFwdGVyICpkZGNfYWRwdDsKKwlz
dHJ1Y3QgY2xrICpjbGtbTVRLX0hETUlfQ0xLX0NPVU5UXTsKKyNpZiBkZWZpbmVkKENPTkZJR19E
RUJVR19GUykKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzOworI2VuZGlmCisJc3RydWN0IHBsYXRm
b3JtX2RldmljZSAqYXVkaW9fcGRldjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBtb2RlOwor
CWJvb2wgZHZpX21vZGU7CisJaW50IGZsdF9uXzV2X2dwaW87CisJaW50IGZsdF9uXzV2X2lycTsK
Kwl1MzIgbWluX2Nsb2NrOworCXUzMiBtYXhfY2xvY2s7CisJdTMyIG1heF9oZGlzcGxheTsKKwl1
MzIgbWF4X3ZkaXNwbGF5OworCXUzMiBpYmlhczsKKwl1MzIgaWJpYXNfdXA7CisJc3RydWN0IHJl
Z21hcCAqc3lzX3JlZ21hcDsKKwl1bnNpZ25lZCBpbnQgc3lzX29mZnNldDsKKwl2b2lkIF9faW9t
ZW0gKnJlZ3M7CisJYm9vbCBpbml0OworCWVudW0gaGRtaV9kaXNwbGF5X2NvbG9yX2RlcHRoIGRl
cHRoOworCWVudW0gaGRtaV9jb2xvcnNwYWNlIGNzcDsKKwlib29sIGF1ZGlvX2VuYWJsZTsKKwli
b29sIG91dHB1dDsKKwlzdHJ1Y3QgaGRtaV9hdWRpb19wYXJhbSBhdWRfcGFyYW07Cit9OworCitz
dGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfaGRtaSAqaGRtaV9jdHhfZnJvbV9icmlkZ2Uoc3RydWN0
IGRybV9icmlkZ2UgKmIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgbXRrX2hk
bWksIGJyaWRnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19oZG1pICpoZG1pX2N0
eF9mcm9tX2Nvbm4oc3RydWN0IGRybV9jb25uZWN0b3IgKmMpCit7CisJcmV0dXJuIGNvbnRhaW5l
cl9vZihjLCBzdHJ1Y3QgbXRrX2hkbWksIGNvbm4pOworfQorCitpbnQgbXRrX2hkbWlfb3V0cHV0
X2luaXQoc3RydWN0IG10a19oZG1pICpoZG1pKTsKK2ludCBtdGtfaGRtaV9ocGRfaGlnaChzdHJ1
Y3QgbXRrX2hkbWkgKmhkbWkpOworaW50IG10a19oZG1pX291dHB1dF9zZXRfZGlzcGxheV9tb2Rl
KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl
ICptb2RlKTsKK3ZvaWQgbXRrX2hkbWlfcG93ZXJfb24oc3RydWN0IG10a19oZG1pICpoZG1pKTsK
K3ZvaWQgbXRrX2hkbWlfcG93ZXJfb2ZmKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7CisjaWYgZGVm
aW5lZChDT05GSUdfREVCVUdfRlMpCitpbnQgbXRrX2RybV9oZG1pX2RlYnVnZnNfaW5pdChzdHJ1
Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfZHJtX2hkbWlfZGVidWdmc19leGl0KHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSk7CisjZWxzZQoraW50IG10a19kcm1faGRtaV9kZWJ1Z2ZzX2luaXQo
c3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXJldHVybiAwOworfQorCit2b2lkIG10a19kcm1f
aGRtaV9kZWJ1Z2ZzX2V4aXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworfQorI2VuZGlmIC8q
IENPTkZJR19ERUJVR19GUyAqLworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtf
Y2VjX2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX2RkY19k
cml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9waHlfZHJpdmVy
OworI2VuZGlmIC8qIF9NVEtfSERNSV9DVFJMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfaGRtaV9kZGNfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2hkbWlfZGRjX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjIyZTU0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2hkbWlfZGRjX2Rydi5jCkBAIC0wLDAgKzEsMzYyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5j
b20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov
CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cisj
aW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUg
PGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51
eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxs
aW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW8u
aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJx
Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2RlZmluZSBTSUYxX0NMT0sJ
CSgyODgpCisjZGVmaW5lIEREQ19ERENNQ1RMMAkJKDB4MCkKKyNkZWZpbmUgRERDTV9PRFJBSU4J
CQlCSVQoMzEpCisjZGVmaW5lIEREQ01fQ0xLX0RJVl9PRkZTRVQJCSgxNikKKyNkZWZpbmUgRERD
TV9DTEtfRElWX01BU0sJCSgweGZmZiA8PCAxNikKKyNkZWZpbmUgRERDTV9DU19TVEFUVVMJCQlC
SVQoNCkKKyNkZWZpbmUgRERDTV9TQ0xfU1RBVEUJCQlCSVQoMykKKyNkZWZpbmUgRERDTV9TREFf
U1RBVEUJCQlCSVQoMikKKyNkZWZpbmUgRERDTV9TTTBFTgkJCUJJVCgxKQorI2RlZmluZSBERENN
X1NDTF9TVFJFQ0gJCQlCSVQoMCkKKyNkZWZpbmUgRERDX0REQ01DVEwxCQkoMHg0KQorI2RlZmlu
ZSBERENNX0FDS19PRkZTRVQJCQkoMTYpCisjZGVmaW5lIEREQ01fQUNLX01BU0sJCQkoMHhmZiA8
PCAxNikKKyNkZWZpbmUgRERDTV9QR0xFTl9PRkZTRVQJCSg4KQorI2RlZmluZSBERENNX1BHTEVO
X01BU0sJCQkoMHg3IDw8IDgpCisjZGVmaW5lIEREQ01fU0lGX01PREVfT0ZGU0VUCQkoNCkKKyNk
ZWZpbmUgRERDTV9TSUZfTU9ERV9NQVNLCQkoMHg3IDw8IDQpCisjZGVmaW5lIEREQ01fU1RBUlQJ
CQkoMHgxKQorI2RlZmluZSBERENNX1dSSVRFX0RBVEEJCQkoMHgyKQorI2RlZmluZSBERENNX1NU
T1AJCQkoMHgzKQorI2RlZmluZSBERENNX1JFQURfREFUQV9OT19BQ0sJCSgweDQpCisjZGVmaW5l
IEREQ01fUkVBRF9EQVRBX0FDSwkJKDB4NSkKKyNkZWZpbmUgRERDTV9UUkkJCQlCSVQoMCkKKyNk
ZWZpbmUgRERDX0REQ01EMAkJKDB4OCkKKyNkZWZpbmUgRERDTV9EQVRBMwkJCSgweGZmIDw8IDI0
KQorI2RlZmluZSBERENNX0RBVEEyCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIEREQ01fREFUQTEJ
CQkoMHhmZiA8PCA4KQorI2RlZmluZSBERENNX0RBVEEwCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUg
RERDX0REQ01EMQkJKDB4YykKKyNkZWZpbmUgRERDTV9EQVRBNwkJCSgweGZmIDw8IDI0KQorI2Rl
ZmluZSBERENNX0RBVEE2CQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIEREQ01fREFUQTUJCQkoMHhm
ZiA8PCA4KQorI2RlZmluZSBERENNX0RBVEE0CQkJKDB4ZmYgPDwgMCkKKworc3RydWN0IG10a19o
ZG1pX2kyYyB7CisJc3RydWN0IGkyY19hZGFwdGVyIGFkYXA7CisJc3RydWN0IGNsayAqY2xrOwor
CXZvaWQgX19pb21lbSAqcmVnczsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWZfc2V0X2Jp
dChzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkgICAg
ICAgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl3cml0ZWwocmVhZGwoaTJjLT5yZWdzICsgb2Zmc2V0
KSB8IHZhbCwgaTJjLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNp
Zl9jbHJfYml0KHN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYywgdW5zaWduZWQgaW50IG9mZnNldCwK
KwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsKQoreworCXdyaXRlbChyZWFkbChpMmMtPnJlZ3Mg
KyBvZmZzZXQpICYgfnZhbCwgaTJjLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGlu
ZSBib29sIHNpZl9iaXRfaXNfc2V0KHN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYywgdW5zaWduZWQg
aW50IG9mZnNldCwKKwkJCQkgIHVuc2lnbmVkIGludCB2YWwpCit7CisJcmV0dXJuIChyZWFkbChp
MmMtPnJlZ3MgKyBvZmZzZXQpICYgdmFsKSA9PSB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBzaWZfd3JpdGVfbWFzayhzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIHVuc2lnbmVkIGludCBv
ZmZzZXQsCisJCQkJICB1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0LAorCQkJ
CSAgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJdG1wID0gcmVh
ZGwoaTJjLT5yZWdzICsgb2Zmc2V0KTsKKwl0bXAgJj0gfm1hc2s7CisJdG1wIHw9ICh2YWwgPDwg
c2hpZnQpICYgbWFzazsKKwl3cml0ZWwodG1wLCBpMmMtPnJlZ3MgKyBvZmZzZXQpOworfQorCitz
dGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzaWZfcmVhZF9tYXNrKHN0cnVjdCBtdGtfaGRtaV9p
MmMgKmkyYywKKwkJCQkJIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBtYXNrLAor
CQkJCQkgdW5zaWduZWQgaW50IHNoaWZ0KQoreworCXJldHVybiAocmVhZGwoaTJjLT5yZWdzICsg
b2Zmc2V0KSAmIG1hc2spID4+IHNoaWZ0OworfQorCitzdGF0aWMgdm9pZCBkZGNtX3RyaWdnZXJf
bW9kZShzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIGludCBtb2RlKQoreworCWludCB0aW1lb3V0
ID0gMjAgKiAxMDAwOworCisJc2lmX3dyaXRlX21hc2soaTJjLCBERENfRERDTUNUTDEsIEREQ01f
U0lGX01PREVfTUFTSywKKwkJICAgICAgIEREQ01fU0lGX01PREVfT0ZGU0VULCBtb2RlKTsKKwlz
aWZfc2V0X2JpdChpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9UUkkpOworCXdoaWxlIChzaWZfYml0
X2lzX3NldChpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9UUkkpKSB7CisJCXRpbWVvdXQgLT0gMjsK
KwkJdWRlbGF5KDIpOworCQlpZiAodGltZW91dCA8PSAwKQorCQkJYnJlYWs7CisJfQorfQorCitz
dGF0aWMgaW50IG10a19oZG1pX2kyY19yZWFkX21zZyhzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMs
IHN0cnVjdCBpMmNfbXNnICptc2cpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTJjLT5hZGFw
LmRldi5wYXJlbnQ7CisJdTMyIHJlbWFpbl9jb3VudCwgYWNrX2NvdW50LCBhY2tfZmluYWwsIHJl
YWRfY291bnQsIHRlbXBfY291bnQ7CisJdTMyIGluZGV4ID0gMDsKKwl1MzIgYWNrOworCWludCBp
OworCisJZGRjbV90cmlnZ2VyX21vZGUoaTJjLCBERENNX1NUQVJUKTsKKwlzaWZfd3JpdGVfbWFz
ayhpMmMsIEREQ19ERENNRDAsIDB4ZmYsIDAsIChtc2ctPmFkZHIgPDwgMSkgfCAweDAxKTsKKwlz
aWZfd3JpdGVfbWFzayhpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9QR0xFTl9NQVNLLCBERENNX1BH
TEVOX09GRlNFVCwKKwkJICAgICAgIDB4MDApOworCWRkY21fdHJpZ2dlcl9tb2RlKGkyYywgRERD
TV9XUklURV9EQVRBKTsKKwlhY2sgPSBzaWZfcmVhZF9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBE
RENNX0FDS19NQVNLLCBERENNX0FDS19PRkZTRVQpOworCWRldl9kYmcoZGV2LCAiYWNrID0gMHgl
eFxuIiwgYWNrKTsKKwlpZiAoYWNrICE9IDB4MDEpIHsKKwkJZGV2X2VycihkZXYsICJpMmMgYWNr
IGVyciFcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXJlbWFpbl9jb3VudCA9IG1zZy0+
bGVuOworCWFja19jb3VudCA9IChtc2ctPmxlbiAtIDEpIC8gODsKKwlhY2tfZmluYWwgPSAwOwor
CisJd2hpbGUgKHJlbWFpbl9jb3VudCA+IDApIHsKKwkJaWYgKGFja19jb3VudCA+IDApIHsKKwkJ
CXJlYWRfY291bnQgPSA4OworCQkJYWNrX2ZpbmFsID0gMDsKKwkJCWFja19jb3VudC0tOworCQl9
IGVsc2UgeworCQkJcmVhZF9jb3VudCA9IHJlbWFpbl9jb3VudDsKKwkJCWFja19maW5hbCA9IDE7
CisJCX0KKworCQlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9QR0xFTl9N
QVNLLAorCQkJICAgICAgIEREQ01fUEdMRU5fT0ZGU0VULCByZWFkX2NvdW50IC0gMSk7CisJCWRk
Y21fdHJpZ2dlcl9tb2RlKGkyYywgKGFja19maW5hbCA9PSAxKSA/CisJCQkJICBERENNX1JFQURf
REFUQV9OT19BQ0sgOgorCQkJCSAgRERDTV9SRUFEX0RBVEFfQUNLKTsKKworCQlhY2sgPSBzaWZf
cmVhZF9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX0FDS19NQVNLLAorCQkJCSAgICBERENN
X0FDS19PRkZTRVQpOworCQl0ZW1wX2NvdW50ID0gMDsKKwkJd2hpbGUgKCgoYWNrICYgKDEgPDwg
dGVtcF9jb3VudCkpICE9IDApICYmICh0ZW1wX2NvdW50IDwgOCkpCisJCQl0ZW1wX2NvdW50Kys7
CisJCWlmICgoKGFja19maW5hbCA9PSAxKSAmJiAodGVtcF9jb3VudCAhPSAocmVhZF9jb3VudCAt
IDEpKSkgfHwKKwkJICAgICgoYWNrX2ZpbmFsID09IDApICYmICh0ZW1wX2NvdW50ICE9IHJlYWRf
Y291bnQpKSkgeworCQkJZGV2X2VycihkZXYsICJBZGRyZXNzIE5BQ0shIEFDSygweCV4KVxuIiwg
YWNrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZm9yIChpID0gcmVhZF9jb3VudDsgaSA+PSAxOyBp
LS0pIHsKKwkJCWludCBzaGlmdDsKKwkJCWludCBvZmZzZXQ7CisKKwkJCWlmIChpID4gNCkgewor
CQkJCW9mZnNldCA9IEREQ19ERENNRDE7CisJCQkJc2hpZnQgPSAoaSAtIDUpICogODsKKwkJCX0g
ZWxzZSB7CisJCQkJb2Zmc2V0ID0gRERDX0REQ01EMDsKKwkJCQlzaGlmdCA9IChpIC0gMSkgKiA4
OworCQkJfQorCisJCQltc2ctPmJ1ZltpbmRleCArIGkgLSAxXSA9IHNpZl9yZWFkX21hc2soaTJj
LCBvZmZzZXQsCisJCQkJCQkJCTB4ZmYgPDwgc2hpZnQsCisJCQkJCQkJCXNoaWZ0KTsKKwkJfQor
CisJCXJlbWFpbl9jb3VudCAtPSByZWFkX2NvdW50OworCQlpbmRleCArPSByZWFkX2NvdW50Owor
CX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2kyY193cml0ZV9tc2co
c3RydWN0IG10a19oZG1pX2kyYyAqaTJjLCBzdHJ1Y3QgaTJjX21zZyAqbXNnKQoreworCXN0cnVj
dCBkZXZpY2UgKmRldiA9IGkyYy0+YWRhcC5kZXYucGFyZW50OworCXUzMiBhY2s7CisKKwlkZGNt
X3RyaWdnZXJfbW9kZShpMmMsIEREQ01fU1RBUlQpOworCXNpZl93cml0ZV9tYXNrKGkyYywgRERD
X0REQ01EMCwgRERDTV9EQVRBMCwgMCwgbXNnLT5hZGRyIDw8IDEpOworCXNpZl93cml0ZV9tYXNr
KGkyYywgRERDX0REQ01EMCwgRERDTV9EQVRBMSwgOCwgbXNnLT5idWZbMF0pOworCXNpZl93cml0
ZV9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX1BHTEVOX01BU0ssIEREQ01fUEdMRU5fT0ZG
U0VULAorCQkgICAgICAgMHgxKTsKKwlkZGNtX3RyaWdnZXJfbW9kZShpMmMsIEREQ01fV1JJVEVf
REFUQSk7CisKKwlhY2sgPSBzaWZfcmVhZF9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX0FD
S19NQVNLLCBERENNX0FDS19PRkZTRVQpOworCWRldl9kYmcoZGV2LCAiYWNrID0gJWRcbiIsIGFj
ayk7CisKKwlpZiAoYWNrICE9IDB4MDMpIHsKKwkJZGV2X2VycihkZXYsICJpMmMgYWNrIGVyciFc
biIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBt
dGtfaGRtaV9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgIHN0
cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQoreworCXN0cnVjdCBtdGtfaGRtaV9pMmMgKmky
YyA9IGFkYXB0ZXItPmFsZ29fZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5k
ZXYucGFyZW50OworCWludCByZXQ7CisJaW50IGk7CisKKwlpZiAoIWkyYykgeworCQlkZXZfZXJy
KGRldiwgImludmFsaWQgYXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ
c2lmX3NldF9iaXQoaTJjLCBERENfRERDTUNUTDAsIEREQ01fU0NMX1NUUkVDSCk7CisJc2lmX3Nl
dF9iaXQoaTJjLCBERENfRERDTUNUTDAsIEREQ01fU00wRU4pOworCXNpZl9jbHJfYml0KGkyYywg
RERDX0REQ01DVEwwLCBERENNX09EUkFJTik7CisKKwlpZiAoc2lmX2JpdF9pc19zZXQoaTJjLCBE
RENfRERDTUNUTDEsIEREQ01fVFJJKSkgeworCQlkZXZfZXJyKGRldiwgImRkYyBsaW5lIGlzIGJ1
c3khXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzaWZfd3JpdGVfbWFzayhpMmMsIERE
Q19ERENNQ1RMMCwgRERDTV9DTEtfRElWX01BU0ssCisJCSAgICAgICBERENNX0NMS19ESVZfT0ZG
U0VULCBTSUYxX0NMT0spOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXN0cnVj
dCBpMmNfbXNnICptc2cgPSAmbXNnc1tpXTsKKworCQlkZXZfZGJnKGRldiwgImkyYyBtc2csIGFk
cjoweCV4LCBmbGFnczolZCwgbGVuIDoweCV4XG4iLAorCQkJbXNnLT5hZGRyLCBtc2ctPmZsYWdz
LCBtc2ctPmxlbik7CisKKwkJaWYgKG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkKKwkJCXJldCA9IG10
a19oZG1pX2kyY19yZWFkX21zZyhpMmMsIG1zZyk7CisJCWVsc2UKKwkJCXJldCA9IG10a19oZG1p
X2kyY193cml0ZV9tc2coaTJjLCBtc2cpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8geGZlcl9l
bmQ7CisJfQorCisJZGRjbV90cmlnZ2VyX21vZGUoaTJjLCBERENNX1NUT1ApOworCisJcmV0dXJu
IGk7CisKK3hmZXJfZW5kOgorCWRkY21fdHJpZ2dlcl9tb2RlKGkyYywgRERDTV9TVE9QKTsKKwlk
ZXZfZXJyKGRldiwgImRkYyBmYWlsZWQhXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg
dTMyIG10a19oZG1pX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwly
ZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RhdGljIGNv
bnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIG10a19oZG1pX2kyY19hbGdvcml0aG0gPSB7CisJLm1h
c3Rlcl94ZmVyID0gbXRrX2hkbWlfaTJjX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBtdGtfaGRt
aV9pMmNfZnVuYywKK307CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfaTJjX3Byb2JlKHN0cnVjdCBw
bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRl
djsKKwlzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmM7CisJc3RydWN0IHJlc291cmNlICptZW07CisJ
aW50IHJldDsKKworCWkyYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgbXRrX2hk
bWlfaTJjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpMmMpCisJCXJldHVybiAtRU5PTUVNOworCisJ
aTJjLT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZGRjLWkyYyIpOworCWlmIChJU19FUlIoaTJj
LT5jbGspKSB7CisJCWRldl9lcnIoZGV2LCAiZ2V0IGRkY19jbGsgZmFpbGVkIDogJXAgLFxuIiwg
aTJjLT5jbGspOworCQlyZXR1cm4gUFRSX0VSUihpMmMtPmNsayk7CisJfQorCisJbWVtID0gcGxh
dGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpMmMtPnJlZ3Mg
PSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKGky
Yy0+cmVncykpIHsKKwkJZGV2X2VycihkZXYsICJnZXQgbWVtb3J5IHNvdXJjZSBmYWlsIVxuIik7
CisJCXJldHVybiBQVFJfRVJSKGkyYy0+cmVncyk7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVf
ZW5hYmxlKGkyYy0+Y2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZW5hYmxlIGRk
YyBjbGsgZmFpbGVkIVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJc3RybGNweShpMmMtPmFk
YXAubmFtZSwgIm1lZGlhdGVrLWhkbWktaTJjIiwgc2l6ZW9mKGkyYy0+YWRhcC5uYW1lKSk7CisJ
aTJjLT5hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7CisJaTJjLT5hZGFwLmFsZ28gPSAmbXRrX2hk
bWlfaTJjX2FsZ29yaXRobTsKKwlpMmMtPmFkYXAucmV0cmllcyA9IDM7CisJaTJjLT5hZGFwLmRl
di5vZl9ub2RlID0gZGV2LT5vZl9ub2RlOworCWkyYy0+YWRhcC5hbGdvX2RhdGEgPSBpMmM7CisJ
aTJjLT5hZGFwLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJcmV0ID0gaTJjX2FkZF9hZGFw
dGVyKCZpMmMtPmFkYXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVk
IHRvIGFkZCBidXMgdG8gaTJjIGNvcmVcbiIpOworCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKKwl9
CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpMmMpOworCisJZGV2X2RiZyhkZXYsICJp
MmMtPmFkYXA6ICVwXG4iLCAmaTJjLT5hZGFwKTsKKwlkZXZfZGJnKGRldiwgImkyYy0+Y2xrOiAl
cFxuIiwgaTJjLT5jbGspOworCWRldl9kYmcoZGV2LCAicGh5c2ljYWwgYWRyOiAweCVsbHgsIGVu
ZDogMHglbGx4XG4iLCBtZW0tPnN0YXJ0LAorCQltZW0tPmVuZCk7CisKKwlyZXR1cm4gMDsKKwor
ZXJyX2Nsa19kaXNhYmxlOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShpMmMtPmNsayk7CisJcmV0
dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9pMmNfcmVtb3ZlKHN0cnVjdCBwbGF0
Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19oZG1pX2kyYyAqaTJjID0gcGxhdGZv
cm1fZ2V0X2RydmRhdGEocGRldik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaTJjLT5jbGsp
OworCWkyY19kZWxfYWRhcHRlcigmaTJjLT5hZGFwKTsKKworCXJldHVybiAwOworfQorCitzdGF0
aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfaGRtaV9pMmNfbWF0Y2hbXSA9IHsKKwl7
IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1oZG1pLWRkYyIsIH0sCisJe30sCit9Owor
CitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX2RkY19kcml2ZXIgPSB7CisJLnByb2Jl
ID0gbXRrX2hkbWlfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfaGRtaV9pMmNfcmVtb3ZlLAor
CS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWhkbWktZGRjIiwKKwkJLm9mX21hdGNo
X3RhYmxlID0gbXRrX2hkbWlfaTJjX21hdGNoLAorCX0sCit9OworCitNT0RVTEVfQVVUSE9SKCJK
aWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVk
aWFUZWsgSERNSSBpMmMgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYg
LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcuYyBiL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9ody5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjc2NTIyNjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVk
aWF0ZWsvbXRrX2hkbWlfaHcuYwpAQCAtMCwwICsxLDc1NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0
ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqLworI2luY2x1ZGUgIm10a19oZG1pX2h3LmgiCisjaW5jbHVkZSAibXRrX2hkbWlfcmVncy5o
IgorI2luY2x1ZGUgIm10a19oZG1pLmgiCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNs
dWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2hkbWkuaD4KKyNpbmNsdWRlIDxs
aW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorCitzdGF0aWMgdTMyIG10a19o
ZG1pX3JlYWQoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0KQoreworCXJldHVybiBy
ZWFkbChoZG1pLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfd3Jp
dGUoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKQoreworCXdyaXRl
bCh2YWwsIGhkbWktPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9t
YXNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNldCwgdTMyIHZhbCwgdTMyIG1hc2sp
Cit7CisJdTMyIHRtcCA9IG10a19oZG1pX3JlYWQoaGRtaSwgb2Zmc2V0KSAmIH5tYXNrOworCisJ
dG1wIHw9ICh2YWwgJiBtYXNrKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBvZmZzZXQsIHRtcCk7
Cit9CisKK3N0YXRpYyBjb25zdCB1OCBQUkVESVZbM11bNF0gPSB7CisJezB4MCwgMHgwLCAweDAs
IDB4MH0sCS8qIDI3TWh6ICovCisJezB4MSwgMHgxLCAweDEsIDB4MX0sCS8qIDc0TWh6ICovCisJ
ezB4MSwgMHgxLCAweDEsIDB4MX0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTgg
VFhESVZbM11bNF0gPSB7CisJezB4MywgMHgzLCAweDMsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4
MiwgMHgxLCAweDEsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4MSwgMHgwLCAweDAsIDB4MH0JLyog
MTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggRkJLU0VMWzNdWzRdID0geworCXsweDEs
IDB4MSwgMHgxLCAweDF9LAkvKiAyN01oeiAqLworCXsweDEsIDB4MCwgMHgxLCAweDF9LAkvKiA3
NE1oeiAqLworCXsweDEsIDB4MCwgMHgxLCAweDF9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGlj
IGNvbnN0IHU4IEZCS0RJVlszXVs0XSA9IHsKKwl7MTksIDI0LCAyOSwgMTl9LAkvKiAyN01oeiAq
LworCXsxOSwgMjQsIDE0LCAxOX0sCS8qIDc0TWh6ICovCisJezE5LCAyNCwgMTQsIDE5fQkvKiAx
NDhNaHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBESVZFTlszXVs0XSA9IHsKKwl7MHgyLCAw
eDEsIDB4MSwgMHgyfSwJLyogMjdNaHogKi8KKwl7MHgyLCAweDIsIDB4MiwgMHgyfSwJLyogNzRN
aHogKi8KKwl7MHgyLCAweDIsIDB4MiwgMHgyfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBj
b25zdCB1OCBIVFBMTEJQWzNdWzRdID0geworCXsweGMsIDB4YywgMHg4LCAweGN9LAkvKiAyN01o
eiAqLworCXsweGMsIDB4ZiwgMHhmLCAweGN9LAkvKiA3NE1oeiAqLworCXsweGMsIDB4ZiwgMHhm
LCAweGN9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEhUUExMQkNbM11bNF0g
PSB7CisJezB4MiwgMHgzLCAweDMsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4MiwgMHgzLCAweDMs
IDB4Mn0sCS8qIDc0TWh6ICovCisJezB4MiwgMHgzLCAweDMsIDB4Mn0JLyogMTQ4TWh6ICovCit9
OworCitzdGF0aWMgY29uc3QgdTggSFRQTExCUlszXVs0XSA9IHsKKwl7MHgxLCAweDEsIDB4MCwg
MHgxfSwJLyogMjdNaHogKi8KKwl7MHgxLCAweDIsIDB4MiwgMHgxfSwJLyogNzRNaHogKi8KKwl7
MHgxLCAweDIsIDB4MiwgMHgxfQkvKiAxNDhNaHogKi8KK307CisKKyNkZWZpbmUgTkNUU19CWVRF
UyAgICAgICAgICAweDA3CitzdGF0aWMgY29uc3QgdTggSERNSV9OQ1RTWzddWzldW05DVFNfQllU
RVNdID0geworCXt7MHgwMCwgMHgwMCwgMHg2OSwgMHg3OCwgMHgwMCwgMHgxMCwgMHgwMH0sCisJ
IHsweDAwLCAweDAwLCAweGQyLCAweGYwLCAweDAwLCAweDEwLCAweDAwfSwKKwkgezB4MDAsIDB4
MDMsIDB4MzcsIDB4ZjksIDB4MDAsIDB4MmQsIDB4ODB9LAorCSB7MHgwMCwgMHgwMSwgMHgyMiwg
MHgwYSwgMHgwMCwgMHgxMCwgMHgwMH0sCisJIHsweDAwLCAweDA2LCAweDZmLCAweGYzLCAweDAw
LCAweDJkLCAweDgwfSwKKwkgezB4MDAsIDB4MDIsIDB4NDQsIDB4MTQsIDB4MDAsIDB4MTAsIDB4
MDB9LAorCSB7MHgwMCwgMHgwMSwgMHhBNSwgMHhlMCwgMHgwMCwgMHgxMCwgMHgwMH0sCisJIHsw
eDAwLCAweDA2LCAweDZGLCAweEYzLCAweDAwLCAweDE2LCAweEMwfSwKKwkgezB4MDAsIDB4MDMs
IDB4NjYsIDB4MUUsIDB4MDAsIDB4MEMsIDB4MDB9CisJIH0sCisJe3sweDAwLCAweDAwLCAweDc1
LCAweDMwLCAweDAwLCAweDE4LCAweDgwfSwKKwkgezB4MDAsIDB4MDAsIDB4ZWEsIDB4NjAsIDB4
MDAsIDB4MTgsIDB4ODB9LAorCSB7MHgwMCwgMHgwMywgMHg5MywgMHg4NywgMHgwMCwgMHg0NSwg
MHhhY30sCisJIHsweDAwLCAweDAxLCAweDQyLCAweDQ0LCAweDAwLCAweDE4LCAweDgwfSwKKwkg
ezB4MDAsIDB4MDMsIDB4OTMsIDB4ODcsIDB4MDAsIDB4MjIsIDB4ZDZ9LAorCSB7MHgwMCwgMHgw
MiwgMHg4NCwgMHg4OCwgMHgwMCwgMHgxOCwgMHg4MH0sCisJIHsweDAwLCAweDAxLCAweGQ0LCAw
eGMwLCAweDAwLCAweDE4LCAweDgwfSwKKwkgezB4MDAsIDB4MDMsIDB4OTMsIDB4ODcsIDB4MDAs
IDB4MTEsIDB4NkJ9LAorCSB7MHgwMCwgMHgwMywgMHhDNiwgMHhDQywgMHgwMCwgMHgxMiwgMHg2
MH0KKwkgfSwKKwl7ezB4MDAsIDB4MDAsIDB4NjksIDB4NzgsIDB4MDAsIDB4MTgsIDB4MDB9LAor
CSB7MHgwMCwgMHgwMCwgMHhkMiwgMHhmMCwgMHgwMCwgMHgxOCwgMHgwMH0sCisJIHsweDAwLCAw
eDAyLCAweDI1LCAweDUxLCAweDAwLCAweDJkLCAweDgwfSwKKwkgezB4MDAsIDB4MDEsIDB4MjIs
IDB4MGEsIDB4MDAsIDB4MTgsIDB4MDB9LAorCSB7MHgwMCwgMHgwMiwgMHgyNSwgMHg1MSwgMHgw
MCwgMHgxNiwgMHhjMH0sCisJIHsweDAwLCAweDAyLCAweDQ0LCAweDE0LCAweDAwLCAweDE4LCAw
eDAwfSwKKwkgezB4MDAsIDB4MDEsIDB4QTUsIDB4ZTAsIDB4MDAsIDB4MTgsIDB4MDB9LAorCSB7
MHgwMCwgMHgwNCwgMHg0QSwgMHhBMiwgMHgwMCwgMHgxNiwgMHhDMH0sCisJIHsweDAwLCAweDAz
LCAweEM2LCAweENDLCAweDAwLCAweDE0LCAweDAwfQorCSB9LAorCXt7MHgwMCwgMHgwMCwgMHg3
NSwgMHgzMCwgMHgwMCwgMHgzMSwgMHgwMH0sCisJIHsweDAwLCAweDAwLCAweGVhLCAweDYwLCAw
eDAwLCAweDMxLCAweDAwfSwKKwkgezB4MDAsIDB4MDMsIDB4OTMsIDB4ODcsIDB4MDAsIDB4OGIs
IDB4NTh9LAorCSB7MHgwMCwgMHgwMSwgMHg0MiwgMHg0NCwgMHgwMCwgMHgzMSwgMHgwMH0sCisJ
IHsweDAwLCAweDAzLCAweDkzLCAweDg3LCAweDAwLCAweDQ1LCAweGFjfSwKKwkgezB4MDAsIDB4
MDIsIDB4ODQsIDB4ODgsIDB4MDAsIDB4MzEsIDB4MDB9LAorCSB7MHgwMCwgMHgwMSwgMHhkNCwg
MHhjMCwgMHgwMCwgMHgzMSwgMHgwMH0sCisJIHsweDAwLCAweDAzLCAweDkzLCAweDg3LCAweDAw
LCAweDIyLCAweEQ2fSwKKwkgezB4MDAsIDB4MDMsIDB4QzYsIDB4Q0MsIDB4MDAsIDB4MjQsIDB4
QzB9CisJIH0sCisJe3sweDAwLCAweDAwLCAweDY5LCAweDc4LCAweDAwLCAweDMwLCAweDAwfSwK
KwkgezB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjAsIDB4MDAsIDB4MzAsIDB4MDB9LAorCSB7MHgwMCwg
MHgwMiwgMHgyNSwgMHg1MSwgMHgwMCwgMHg1YiwgMHgwMH0sCisJIHsweDAwLCAweDAxLCAweDIy
LCAweDBhLCAweDAwLCAweDMwLCAweDAwfSwKKwkgezB4MDAsIDB4MDIsIDB4MjUsIDB4NTEsIDB4
MDAsIDB4MmQsIDB4ODB9LAorCSB7MHgwMCwgMHgwMiwgMHg0NCwgMHgxNCwgMHgwMCwgMHgzMCwg
MHgwMH0sCisJIHsweDAwLCAweDAxLCAweEE1LCAweGUwLCAweDAwLCAweDMwLCAweDAwfSwKKwkg
ezB4MDAsIDB4MDQsIDB4NEEsIDB4QTIsIDB4MDAsIDB4MkQsIDB4ODB9LAorCSB7MHgwMCwgMHgw
MywgMHhDNiwgMHhDQywgMHgwMCwgMHgyOCwgMHg4MH0KKwkgfSwKKwl7ezB4MDAsIDB4MDAsIDB4
NzUsIDB4MzAsIDB4MDAsIDB4NjIsIDB4MDB9LAorCSB7MHgwMCwgMHgwMCwgMHhlYSwgMHg2MCwg
MHgwMCwgMHg2MiwgMHgwMH0sCisJIHsweDAwLCAweDAzLCAweDkzLCAweDg3LCAweDAxLCAweDE2
LCAweGIwfSwKKwkgezB4MDAsIDB4MDEsIDB4NDIsIDB4NDQsIDB4MDAsIDB4NjIsIDB4MDB9LAor
CSB7MHgwMCwgMHgwMywgMHg5MywgMHg4NywgMHgwMCwgMHg4YiwgMHg1OH0sCisJIHsweDAwLCAw
eDAyLCAweDg0LCAweDg4LCAweDAwLCAweDYyLCAweDAwfSwKKwkgezB4MDAsIDB4MDEsIDB4ZDQs
IDB4YzAsIDB4MDAsIDB4NjIsIDB4MDB9LAorCSB7MHgwMCwgMHgwMywgMHg5MywgMHg4NywgMHgw
MCwgMHg0NSwgMHhBQ30sCisJIHsweDAwLCAweDAzLCAweEM2LCAweENDLCAweDAwLCAweDQ5LCAw
eDgwfQorCSB9LAorCXt7MHgwMCwgMHgwMCwgMHg2OSwgMHg3OCwgMHgwMCwgMHg2MCwgMHgwMH0s
CisJIHsweDAwLCAweDAwLCAweGQyLCAweGYwLCAweDAwLCAweDYwLCAweDAwfSwKKwkgezB4MDAs
IDB4MDIsIDB4MjUsIDB4NTEsIDB4MDAsIDB4YjYsIDB4MDB9LAorCSB7MHgwMCwgMHgwMSwgMHgy
MiwgMHgwYSwgMHgwMCwgMHg2MCwgMHgwMH0sCisJIHsweDAwLCAweDAyLCAweDI1LCAweDUxLCAw
eDAwLCAweDViLCAweDAwfSwKKwkgezB4MDAsIDB4MDIsIDB4NDQsIDB4MTQsIDB4MDAsIDB4NjAs
IDB4MDB9LAorCSB7MHgwMCwgMHgwMSwgMHhBNSwgMHhlMCwgMHgwMCwgMHg2MCwgMHgwMH0sCisJ
IHsweDAwLCAweDA0LCAweDRBLCAweEEyLCAweDAwLCAweDVCLCAweDAwfSwKKwkgezB4MDAsIDB4
MDMsIDB4QzYsIDB4Q0MsIDB4MDAsIDB4NTAsIDB4MDB9CisJIH0KK307CisKK3ZvaWQgbXRrX2hk
bWlfaHdfdmlkX2JsYWNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCSAgIGJvb2wgYmxhY2sp
Cit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBWSURFT19DRkdfNCwgYmxhY2sgPyBHRU5fUkdCIDog
Tk9STUFMX1BBVEgsCisJCSAgICAgIFZJREVPX1NPVVJDRV9TRUwpOworfQorCit2b2lkIG10a19o
ZG1pX2h3X21ha2VfcmVnX3dyaXRhYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFi
bGUpCit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19v
ZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIEhETUlfUENMS19GUkVFX1JVTiwgZW5hYmxl
ID8gSERNSV9QQ0xLX0ZSRUVfUlVOIDogMCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5
c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcxQywKKwkJCSAgIEhETUlf
T04gfCBBTkxHX09OLCBlbmFibGUgPyAoSERNSV9PTiB8IEFOTEdfT04pIDogMCk7Cit9CisKK3Zv
aWQgbXRrX2hkbWlfaHdfMXA0X3ZlcnNpb25fZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwg
Ym9vbCBlbmFibGUpCit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhk
bWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIEhETUkyUDBfRU4sIGVuYWJs
ZSA/IDAgOiBIRE1JMlAwX0VOKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfbXV0ZShzdHJ1
Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgbXV0ZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdS
TF9BVURJT19DRkcsIG11dGUgPyBBVURJT19aRVJPIDogMCwgQVVESU9fWkVSTyk7Cit9CisKK3Zv
aWQgbXRrX2hkbWlfaHdfcmVzZXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXJlZ21hcF91
cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNf
Q0ZHMUMsCisJCQkgICBIRE1JX1JTVCwgSERNSV9SU1QpOworCXJlZ21hcF91cGRhdGVfYml0cyho
ZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkg
ICBIRE1JX1JTVCwgMCk7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHMywgMCwgQ0ZHM19D
T05UUk9MX1BBQ0tFVF9ERUxBWSk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdt
YXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcxQywKKwkJCSAgIEFOTEdfT04sIEFO
TEdfT04pOworfQorCit2b2lkIG10a19oZG1pX2h3X2VuYWJsZV9ub3RpY2Uoc3RydWN0IG10a19o
ZG1pICpoZG1pLCBib29sIGVuYWJsZV9ub3RpY2UpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBH
UkxfQ0ZHMiwgZW5hYmxlX25vdGljZSA/IENGRzJfTk9USUNFX0VOIDogMCwKKwkJICAgICAgQ0ZH
Ml9OT1RJQ0VfRU4pOworfQorCit2b2lkIG10a19oZG1pX2h3X3dyaXRlX2ludF9tYXNrKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwgdTMyIGludF9tYXNrKQoreworCW10a19oZG1pX3dyaXRlKGhkbWks
IEdSTF9JTlRfTUFTSywgaW50X21hc2spOworfQorCit2b2lkIG10a19oZG1pX2h3X2VuYWJsZV9k
dmlfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCW10a19oZG1p
X21hc2soaGRtaSwgR1JMX0NGRzEsIGVuYWJsZSA/IENGRzFfRFZJIDogMCwgQ0ZHMV9EVkkpOwor
fQorCit2b2lkIG10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWksIHU4ICpidWZmZXIsIHU4IGxlbikKK3sKKwl1MzIgY3RybF9yZWcgPSBHUkxfQ1RSTDsKKwlp
bnQgaTsKKwl1OCAqZnJhbWVfZGF0YTsKKwl1OCBmcmFtZV90eXBlOworCXU4IGZyYW1lX3ZlcjsK
Kwl1OCBmcmFtZV9sZW47CisJdTggY2hlY2tzdW07CisJaW50IGN0cmxfZnJhbWVfZW4gPSAwOwor
CisJZnJhbWVfdHlwZSA9ICpidWZmZXI7CisJYnVmZmVyICs9IDE7CisJZnJhbWVfdmVyID0gKmJ1
ZmZlcjsKKwlidWZmZXIgKz0gMTsKKwlmcmFtZV9sZW4gPSAqYnVmZmVyOworCWJ1ZmZlciArPSAx
OworCWNoZWNrc3VtID0gKmJ1ZmZlcjsKKwlidWZmZXIgKz0gMTsKKwlmcmFtZV9kYXRhID0gYnVm
ZmVyOworCisJZGV2X2luZm8oaGRtaS0+ZGV2LAorCQkgImZyYW1lX3R5cGU6MHgleCxmcmFtZV92
ZXI6MHgleCxmcmFtZV9sZW46MHgleCxjaGVja3N1bToweCV4XG4iLAorCQkgZnJhbWVfdHlwZSwg
ZnJhbWVfdmVyLCBmcmFtZV9sZW4sIGNoZWNrc3VtKTsKKworCXN3aXRjaCAoZnJhbWVfdHlwZSkg
eworCWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9BVkk6CisJCWN0cmxfZnJhbWVfZW4gPSBDVFJM
X0FWSV9FTjsKKwkJY3RybF9yZWcgPSBHUkxfQ1RSTDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0lO
Rk9GUkFNRV9UWVBFX1NQRDoKKwkJY3RybF9mcmFtZV9lbiA9IENUUkxfU1BEX0VOOworCQljdHJs
X3JlZyA9IEdSTF9DVFJMOworCQlicmVhazsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfQVVE
SU86CisJCWN0cmxfZnJhbWVfZW4gPSBDVFJMX0FVRElPX0VOOworCQljdHJsX3JlZyA9IEdSTF9D
VFJMOworCQlicmVhazsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfVkVORE9SOgorCQljdHJs
X2ZyYW1lX2VuID0gVlNfRU47CisJCWN0cmxfcmVnID0gR1JMX0FDUF9JU1JDX0NUUkw7CisJCWJy
ZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV9tYXNrKGhkbWksIGN0cmxf
cmVnLCAwLCBjdHJsX2ZyYW1lX2VuKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSU5GT0ZS
TV9UWVBFLCBmcmFtZV90eXBlKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSU5GT0ZSTV9W
RVIsIGZyYW1lX3Zlcik7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lORk9GUk1fTE5HLCBm
cmFtZV9sZW4pOworCisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lGTV9QT1JULCBjaGVja3N1
bSk7CisJZm9yIChpID0gMDsgaSA8IGZyYW1lX2xlbjsgaSsrKQorCQltdGtfaGRtaV93cml0ZSho
ZG1pLCBHUkxfSUZNX1BPUlQsIGZyYW1lX2RhdGFbaV0pOworCisJbXRrX2hkbWlfbWFzayhoZG1p
LCBjdHJsX3JlZywgY3RybF9mcmFtZV9lbiwgY3RybF9mcmFtZV9lbik7Cit9CisKK3ZvaWQgbXRr
X2hkbWlfaHdfc2VuZF9hdWRfcGFja2V0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFi
bGUpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfU0hJRlRfUjIsIGVuYWJsZSA/IDAgOiBB
VURJT19QQUNLRVRfT0ZGLAorCQkgICAgICBBVURJT19QQUNLRVRfT0ZGKTsKK30KKwordm9pZCBt
dGtfaGRtaV9od19jb25maWdfc3lzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlyZWdtYXBf
dXBkYXRlX2JpdHMoaGRtaS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lT
X0NGRzIwLAorCQkJICAgSERNSV9PVVRfRklGT19FTiB8IE1ITF9NT0RFX09OLCAwKTsKKwltZGVs
YXkoMik7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19v
ZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIEhETUlfT1VUX0ZJRk9fRU4gfCBNSExfTU9E
RV9PTiwgSERNSV9PVVRfRklGT19FTik7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfc2V0X2RlZXBf
Y29sb3JfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgICBlbnVtIGhkbWlfZGlz
cGxheV9jb2xvcl9kZXB0aCBkZXB0aCkKK3sKKwl1MzIgdmFsID0gMDsKKworCXN3aXRjaCAoZGVw
dGgpIHsKKwljYXNlIEhETUlfREVFUF9DT0xPUl8yNEJJVFM6CisJCXZhbCA9IENPTE9SXzhCSVRf
TU9ERTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0RFRVBfQ09MT1JfMzBCSVRTOgorCQl2YWwgPSBD
T0xPUl8xMEJJVF9NT0RFIHwgREVFUF9DT0xPUl9FTjsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0RF
RVBfQ09MT1JfMzZCSVRTOgorCQl2YWwgPSBDT0xPUl8xMkJJVF9NT0RFIHwgREVFUF9DT0xPUl9F
TjsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0RFRVBfQ09MT1JfNDhCSVRTOgorCQl2YWwgPSBDT0xP
Ul8xNkJJVF9NT0RFIHwgREVFUF9DT0xPUl9FTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdmFs
ID0gQ09MT1JfOEJJVF9NT0RFOworCQlicmVhazsKKwl9CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMo
aGRtaS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lTX0NGRzIwLAorCQkJ
ICAgREVFUF9DT0xPUl9NT0RFX01BU0sgfCBERUVQX0NPTE9SX0VOLCB2YWwpOworfQorCit2b2lk
IG10a19oZG1pX2h3X3NlbmRfYXZfbXV0ZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRr
X2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHNCwgMCwgQ1RSTF9BVk1VVEUpOworCW1kZWxheSgyKTsK
KwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkc0LCBDVFJMX0FWTVVURSwgQ1RSTF9BVk1VVEUp
OworfQorCit2b2lkIG10a19oZG1pX2h3X3NlbmRfYXZfdW5tdXRlKHN0cnVjdCBtdGtfaGRtaSAq
aGRtaSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkc0LCBDRkc0X0FWX1VOTVVURV9F
TiwKKwkJICAgICAgQ0ZHNF9BVl9VTk1VVEVfRU4gfCBDRkc0X0FWX1VOTVVURV9TRVQpOworCW1k
ZWxheSgyKTsKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkc0LCBDRkc0X0FWX1VOTVVURV9T
RVQsCisJCSAgICAgIENGRzRfQVZfVU5NVVRFX0VOIHwgQ0ZHNF9BVl9VTk1VVEVfU0VUKTsKK30K
Kwordm9pZCBtdGtfaGRtaV9od19uY3RzX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJv
b2wgb24pCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ1RTX0NUUkwsIG9uID8gMCA6IENU
U19DVFJMX1NPRlQsCisJCSAgICAgIENUU19DVFJMX1NPRlQpOworfQorCit2b2lkIG10a19oZG1p
X2h3X25jdHNfYXV0b193cml0ZV9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVu
YWJsZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DVFNfQ1RSTCwgZW5hYmxlID8gTkNU
U19XUklfQU5ZVElNRSA6IDAsCisJCSAgICAgIE5DVFNfV1JJX0FOWVRJTUUpOworfQorCit2b2lk
IG10a19oZG1pX2h3X21zaWNfc2V0dGluZyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkgICAg
ICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWks
IEdSTF9DRkc0LCAwLCBDRkdfTUhMX01PREUpOworCisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01P
REVfRkxBR19JTlRFUkxBQ0UgJiYKKwkgICAgbW9kZS0+Y2xvY2sgPT0gNzQyNTAgJiYKKwkgICAg
bW9kZS0+dmRpc3BsYXkgPT0gMTA4MCkKKwkJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHMiwg
MCwgTUhMX0RFX1NFTCk7CisJZWxzZQorCQltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkcyLCBN
SExfREVfU0VMLCBNSExfREVfU0VMKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2No
YW5uZWxfc3dhcChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgICAgZW51bSBoZG1pX2F1
ZF9jaGFubmVsX3N3YXBfdHlwZSBzd2FwKQoreworCXU4IHN3YXBfYml0OworCisJc3dpdGNoIChz
d2FwKSB7CisJY2FzZSBIRE1JX0FVRF9TV0FQX0xSOgorCQlzd2FwX2JpdCA9IExSX1NXQVA7CisJ
CWJyZWFrOworCWNhc2UgSERNSV9BVURfU1dBUF9MRkVfQ0M6CisJCXN3YXBfYml0ID0gTEZFX0ND
X1NXQVA7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfU1dBUF9MU1JTOgorCQlzd2FwX2JpdCA9
IExTUlNfU1dBUDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRF9TV0FQX1JMU19SUlM6CisJCXN3
YXBfYml0ID0gUkxTX1JSU19TV0FQOworCQlicmVhazsKKwljYXNlIEhETUlfQVVEX1NXQVBfTFJf
U1RBVFVTOgorCQlzd2FwX2JpdCA9IExSX1NUQVRVU19TV0FQOworCQlicmVhazsKKwlkZWZhdWx0
OgorCQlzd2FwX2JpdCA9IExGRV9DQ19TV0FQOworCQlicmVhazsKKwl9CisJbXRrX2hkbWlfbWFz
ayhoZG1pLCBHUkxfQ0hfU1dBUCwgc3dhcF9iaXQsIDB4ZmYpOworfQorCit2b2lkIG10a19oZG1p
X2h3X2F1ZF9yYXdfZGF0YV9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJs
ZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9NSVhfQ1RSTCwgZW5hYmxlID8gTUlYX0NU
UkxfRkxBVCA6IDAsCisJCSAgICAgIE1JWF9DVFJMX0ZMQVQpOworfQorCit2b2lkIG10a19oZG1p
X2h3X2F1ZF9zZXRfYml0X251bShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJIGVudW0gaGRt
aV9hdWRpb19zYW1wbGVfc2l6ZSBiaXRfbnVtKQoreworCXUzMiB2YWwgPSAwOworCisJaWYgKGJp
dF9udW0gPT0gSERNSV9BVURJT19TQU1QTEVfU0laRV8xNikKKwkJdmFsID0gQU9VVF8xNkJJVDsK
KwllbHNlIGlmIChiaXRfbnVtID09IEhETUlfQVVESU9fU0FNUExFX1NJWkVfMjApCisJCXZhbCA9
IEFPVVRfMjBCSVQ7CisJZWxzZSBpZiAoYml0X251bSA9PSBIRE1JX0FVRElPX1NBTVBMRV9TSVpF
XzI0KQorCQl2YWwgPSBBT1VUXzI0QklUOworCisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQU9V
VF9CTlVNX1NFTCwgdmFsLCAweDAzKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2ky
c19mbXQoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSBlbnVtIGhkbWlfYXVkX2kyc19mbXQg
aTJzX2ZtdCkKK3sKKwl1MzIgdmFsID0gMDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwg
R1JMX0NGRzApOworCXZhbCAmPSB+MHgzMzsKKworCXN3aXRjaCAoaTJzX2ZtdCkgeworCWNhc2Ug
SERNSV9JMlNfTU9ERV9SSlRfMjRCSVQ6CisJCXZhbCB8PSAoQ0ZHMF9JMlNfTU9ERV9SVEogfCBD
RkcwX0kyU19NT0RFXzI0QklUKTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0kyU19NT0RFX1JKVF8x
NkJJVDoKKwkJdmFsIHw9IChDRkcwX0kyU19NT0RFX1JUSiB8IENGRzBfSTJTX01PREVfMTZCSVQp
OworCQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfTEpUXzI0QklUOgorCQl2YWwgfD0gKENG
RzBfSTJTX01PREVfTFRKIHwgQ0ZHMF9JMlNfTU9ERV8yNEJJVCk7CisJCWJyZWFrOworCWNhc2Ug
SERNSV9JMlNfTU9ERV9MSlRfMTZCSVQ6CisJCXZhbCB8PSAoQ0ZHMF9JMlNfTU9ERV9MVEogfCBD
RkcwX0kyU19NT0RFXzE2QklUKTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0kyU19NT0RFX0kyU18y
NEJJVDoKKwkJdmFsIHw9IChDRkcwX0kyU19NT0RFX0kyUyB8IENGRzBfSTJTX01PREVfMjRCSVQp
OworCQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfSTJTXzE2QklUOgorCQl2YWwgfD0gKENG
RzBfSTJTX01PREVfSTJTIHwgQ0ZHMF9JMlNfTU9ERV8xNkJJVCk7CisJCWJyZWFrOworCWRlZmF1
bHQ6CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfQ0ZHMCwgdmFsKTsK
K30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2hpZ2hfYml0cmF0ZShzdHJ1Y3QgbXRrX2hk
bWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0FPVVRf
Qk5VTV9TRUwsCisJCSAgICAgIGVuYWJsZSA/IEhJR0hfQklUX1JBVEVfUEFDS0VUX0FMSUdOIDog
MCwKKwkJICAgICAgSElHSF9CSVRfUkFURV9QQUNLRVRfQUxJR04pOworCW10a19oZG1pX21hc2so
aGRtaSwgR1JMX0FVRElPX0NGRywgZW5hYmxlID8gSElHSF9CSVRfUkFURSA6IDAsCisJCSAgICAg
IEhJR0hfQklUX1JBVEUpOworfQorCit2b2lkIG10a19oZG1pX3BoeV9hdWRfZHN0X25vcm1hbF9k
b3VibGVfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJICAgICAgIGJvb2wgZW5h
YmxlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0FVRElPX0NGRywgZW5hYmxlID8gRFNU
X05PUk1BTF9ET1VCTEUgOiAwLAorCQkgICAgICBEU1RfTk9STUFMX0RPVUJMRSk7Cit9CisKK3Zv
aWQgbXRrX2hkbWlfaHdfYXVkX2RzdF9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29s
IGVuYWJsZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9BVURJT19DRkcsIGVuYWJsZSA/
IFNBQ0RfRFNUIDogMCwgU0FDRF9EU1QpOworfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9kc2Rf
ZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlf
bWFzayhoZG1pLCBHUkxfQVVESU9fQ0ZHLCBlbmFibGUgPyBTQUNEX1NFTCA6IDAsIFNBQ0RfU0VM
KTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2kyc19jaGFuX251bShzdHJ1Y3QgbXRr
X2hkbWkgKmhkbWksCisJCQkJICAgICAgZW51bSBoZG1pX2F1ZF9jaGFubmVsX3R5cGUgY2hhbm5l
bF90eXBlLAorCQkJCSAgICAgIHU4IGNoYW5uZWxfY291bnQpCit7CisJdTggdmFsXzEsIHZhbF8y
LCB2YWxfMywgdmFsXzQ7CisKKwlpZiAoY2hhbm5lbF9jb3VudCA9PSAyKSB7CisJCXZhbF8xID0g
MHgwNDsKKwkJdmFsXzIgPSAweDUwOworCX0gZWxzZSBpZiAoY2hhbm5lbF9jb3VudCA9PSAzIHx8
IGNoYW5uZWxfY291bnQgPT0gNCkgeworCQlpZiAoY2hhbm5lbF9jb3VudCA9PSA0ICYmCisJCSAg
ICAoY2hhbm5lbF90eXBlID09IEhETUlfQVVEX0NIQU5fVFlQRV8zXzBfTFJTIHx8CisJCSAgICBj
aGFubmVsX3R5cGUgPT0gSERNSV9BVURfQ0hBTl9UWVBFXzRfMCkpIHsKKwkJCXZhbF8xID0gMHgx
NDsKKwkJfSBlbHNlIHsKKwkJCXZhbF8xID0gMHgwYzsKKwkJfQorCQl2YWxfMiA9IDB4NTA7CisJ
fSBlbHNlIGlmIChjaGFubmVsX2NvdW50ID09IDYgfHwgY2hhbm5lbF9jb3VudCA9PSA1KSB7CisJ
CWlmIChjaGFubmVsX2NvdW50ID09IDYgJiYKKwkJICAgIGNoYW5uZWxfdHlwZSAhPSBIRE1JX0FV
RF9DSEFOX1RZUEVfNV8xICYmCisJCSAgICBjaGFubmVsX3R5cGUgIT0gSERNSV9BVURfQ0hBTl9U
WVBFXzRfMV9DTFJTKSB7CisJCQl2YWxfMSA9IDB4M2M7CisJCQl2YWxfMiA9IDB4NTA7CisJCX0g
ZWxzZSB7CisJCQl2YWxfMSA9IDB4MWM7CisJCQl2YWxfMiA9IDB4NTA7CisJCX0KKwl9IGVsc2Ug
aWYgKGNoYW5uZWxfY291bnQgPT0gOCB8fCBjaGFubmVsX2NvdW50ID09IDcpIHsKKwkJdmFsXzEg
PSAweDNjOworCQl2YWxfMiA9IDB4NTA7CisJfSBlbHNlIHsKKwkJdmFsXzEgPSAweDA0OworCQl2
YWxfMiA9IDB4NTA7CisJfQorCisJdmFsXzMgPSAweGM2OworCXZhbF80ID0gMHhmYTsKKworCW10
a19oZG1pX3dyaXRlKGhkbWksIEdSTF9DSF9TVzAsIHZhbF8yKTsKKwltdGtfaGRtaV93cml0ZSho
ZG1pLCBHUkxfQ0hfU1cxLCB2YWxfMyk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NIX1NX
MiwgdmFsXzQpOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JMlNfVVYsIHZhbF8xKTsKK30K
Kwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2lucHV0X3R5cGUoc3RydWN0IG10a19oZG1pICpo
ZG1pLAorCQkJCSAgICBlbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgaW5wdXRfdHlwZSkKK3sKKwl1
MzIgdmFsID0gMDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JMX0NGRzEpOworCWlm
IChpbnB1dF90eXBlID09IEhETUlfQVVEX0lOUFVUX0kyUyAmJgorCSAgICAodmFsICYgQ0ZHMV9T
UERJRikgPT0gQ0ZHMV9TUERJRikgeworCQl2YWwgJj0gfkNGRzFfU1BESUY7CisJfSBlbHNlIGlm
IChpbnB1dF90eXBlID09IEhETUlfQVVEX0lOUFVUX1NQRElGICYmCisJCSh2YWwgJiBDRkcxX1NQ
RElGKSA9PSAwKSB7CisJCXZhbCB8PSBDRkcxX1NQRElGOworCX0KKwltdGtfaGRtaV93cml0ZSho
ZG1pLCBHUkxfQ0ZHMSwgdmFsKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2NoYW5u
ZWxfc3RhdHVzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJdTggKmxfY2hhbl9zdGF0dXMs
IHU4ICpyX2NoYW5fc3RhdHVzLAorCQkJCQllbnVtIGhkbWlfYXVkaW9fc2FtcGxlX2ZyZXF1ZW5j
eQorCQkJCQlhdWRfaGRtaV9mcykKK3sKKwl1OCBsX3N0YXR1c1s1XTsKKwl1OCByX3N0YXR1c1s1
XTsKKwl1OCB2YWwgPSAwOworCisJbF9zdGF0dXNbMF0gPSBsX2NoYW5fc3RhdHVzWzBdOworCWxf
c3RhdHVzWzFdID0gbF9jaGFuX3N0YXR1c1sxXTsKKwlsX3N0YXR1c1syXSA9IGxfY2hhbl9zdGF0
dXNbMl07CisJcl9zdGF0dXNbMF0gPSByX2NoYW5fc3RhdHVzWzBdOworCXJfc3RhdHVzWzFdID0g
cl9jaGFuX3N0YXR1c1sxXTsKKwlyX3N0YXR1c1syXSA9IHJfY2hhbl9zdGF0dXNbMl07CisKKwls
X3N0YXR1c1swXSAmPSB+MHgwMjsKKwlyX3N0YXR1c1swXSAmPSB+MHgwMjsKKworCXZhbCA9IGxf
Y2hhbl9zdGF0dXNbM10gJiAweGYwOworCXN3aXRjaCAoYXVkX2hkbWlfZnMpIHsKKwljYXNlIEhE
TUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV8zMjAwMDoKKwkJdmFsIHw9IDB4MDM7CisJCWJyZWFr
OworCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ0MTAwOgorCQlicmVhazsKKwlj
YXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV84ODIwMDoKKwkJdmFsIHw9IDB4MDg7CisJ
CWJyZWFrOworCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzk2MDAwOgorCQl2YWwg
fD0gMHgwYTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfNDgw
MDA6CisJCXZhbCB8PSAweDAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgfD0gMHgwMjsK
KwkJYnJlYWs7CisJfQorCWxfc3RhdHVzWzNdID0gdmFsOworCXJfc3RhdHVzWzNdID0gdmFsOwor
CisJdmFsID0gbF9jaGFuX3N0YXR1c1s0XTsKKwl2YWwgfD0gKCh+KGxfc3RhdHVzWzNdICYgMHgw
ZikpIDw8IDQpOworCWxfc3RhdHVzWzRdID0gdmFsOworCXJfc3RhdHVzWzRdID0gdmFsOworCisJ
dmFsID0gbF9zdGF0dXNbMF07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0kyU19DX1NUQTAs
IHZhbCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0xfU1RBVFVTXzAsIHZhbCk7CisKKwl2
YWwgPSByX3N0YXR1c1swXTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNfMCwg
dmFsKTsKKworCXZhbCA9IGxfc3RhdHVzWzFdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9J
MlNfQ19TVEExLCB2YWwpOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9MX1NUQVRVU18xLCB2
YWwpOworCisJdmFsID0gcl9zdGF0dXNbMV07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX1Jf
U1RBVFVTXzEsIHZhbCk7CisKKwl2YWwgPSBsX3N0YXR1c1syXTsKKwltdGtfaGRtaV93cml0ZSho
ZG1pLCBHUkxfSTJTX0NfU1RBMiwgdmFsKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTF9T
VEFUVVNfMiwgdmFsKTsKKworCXZhbCA9IHJfc3RhdHVzWzJdOworCW10a19oZG1pX3dyaXRlKGhk
bWksIEdSTF9SX1NUQVRVU18yLCB2YWwpOworCisJdmFsID0gbF9zdGF0dXNbM107CisJbXRrX2hk
bWlfd3JpdGUoaGRtaSwgR1JMX0kyU19DX1NUQTMsIHZhbCk7CisJbXRrX2hkbWlfd3JpdGUoaGRt
aSwgR1JMX0xfU1RBVFVTXzMsIHZhbCk7CisKKwl2YWwgPSByX3N0YXR1c1szXTsKKwltdGtfaGRt
aV93cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNfMywgdmFsKTsKKworCXZhbCA9IGxfc3RhdHVzWzRd
OworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JMlNfQ19TVEE0LCB2YWwpOworCW10a19oZG1p
X3dyaXRlKGhkbWksIEdSTF9MX1NUQVRVU180LCB2YWwpOworCisJdmFsID0gcl9zdGF0dXNbNF07
CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX1JfU1RBVFVTXzQsIHZhbCk7CisKKwlmb3IgKHZh
bCA9IDA7IHZhbCA8IDE5OyB2YWwrKykgeworCQltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTF9T
VEFUVVNfNSArIHZhbCAqIDQsIDApOworCQltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfUl9TVEFU
VVNfNSArIHZhbCAqIDQsIDApOworCX0KK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX3Jl
ZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gbXRr
X2hkbWlfcmVhZChoZG1pLCBHUkxfTUlYX0NUUkwpOworCWlmICh2YWwgJiBNSVhfQ1RSTF9TUkNf
RU4pIHsKKwkJdmFsICY9IH5NSVhfQ1RSTF9TUkNfRU47CisJCW10a19oZG1pX3dyaXRlKGhkbWks
IEdSTF9NSVhfQ1RSTCwgdmFsKTsKKwkJdXNsZWVwX3JhbmdlKDI1NSwgNTEyKTsKKwkJdmFsIHw9
IE1JWF9DVFJMX1NSQ19FTjsKKwkJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX01JWF9DVFJMLCB2
YWwpOworCX0KK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX29mZihzdHJ1Y3QgbXRrX2hk
bWkgKmhkbWkpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JM
X01JWF9DVFJMKTsKKwl2YWwgJj0gfk1JWF9DVFJMX1NSQ19FTjsKKwltdGtfaGRtaV93cml0ZSho
ZG1pLCBHUkxfTUlYX0NUUkwsIHZhbCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX1NISUZU
X0wxLCAweDAwKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X21jbGsoc3RydWN0IG10
a19oZG1pICpoZG1pLCBlbnVtIGhkbWlfYXVkX21jbGsgbWNsaykKK3sKKwl1MzIgdmFsOworCisJ
dmFsID0gbXRrX2hkbWlfcmVhZChoZG1pLCBHUkxfQ0ZHNSk7CisJdmFsICY9IENGRzVfQ0RfUkFU
SU9fTUFTSzsKKworCXN3aXRjaCAobWNsaykgeworCWNhc2UgSERNSV9BVURfTUNMS18xMjhGUzoK
KwkJdmFsIHw9IENGRzVfRlMxMjg7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS18yNTZG
UzoKKwkJdmFsIHw9IENGRzVfRlMyNTY7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS18z
ODRGUzoKKwkJdmFsIHw9IENGRzVfRlMzODQ7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNM
S181MTJGUzoKKwkJdmFsIHw9IENGRzVfRlM1MTI7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURf
TUNMS183NjhGUzoKKwkJdmFsIHw9IENGRzVfRlM3Njg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ
CXZhbCB8PSBDRkc1X0ZTMjU2OworCQlicmVhazsKKwl9CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwg
R1JMX0NGRzUsIHZhbCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX2FjbGtfaW52X2VuYWJs
ZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCXUzMiB2YWw7CisKKwl2
YWwgPSBtdGtfaGRtaV9yZWFkKGhkbWksIEdSTF9DRkcyKTsKKwlpZiAoZW5hYmxlKQorCQl2YWwg
fD0gMHg4MDsKKwllbHNlCisJCXZhbCAmPSB+MHg4MDsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBH
UkxfQ0ZHMiwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgZG9faGRtaV9od19hdWRfc2V0X25jdHMo
c3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSAgICBlbnVtIGhkbWlfZGlzcGxheV9jb2xvcl9k
ZXB0aCBkZXB0aCwKKwkJCQkgICAgZW51bSBoZG1pX2F1ZGlvX3NhbXBsZV9mcmVxdWVuY3kgZnJl
cSwKKwkJCQkgICAgaW50IHBpeCkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbFtOQ1RTX0JZVEVTXTsK
Kwl1bnNpZ25lZCBpbnQgdGVtcDsKKwlpbnQgaSA9IDA7CisKKwltdGtfaGRtaV93cml0ZShoZG1p
LCBHUkxfTkNUUywgMCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX05DVFMsIDApOworCW10
a19oZG1pX3dyaXRlKGhkbWksIEdSTF9OQ1RTLCAwKTsKKwltZW1zZXQodmFsLCAwLCBzaXplb2Yo
dmFsKSk7CisKKwlpZiAoZGVwdGggPT0gSERNSV9ERUVQX0NPTE9SXzI0QklUUykgeworCQlmb3Ig
KGkgPSAwOyBpIDwgTkNUU19CWVRFUzsgaSsrKSB7CisJCQlpZiAoKGZyZXEgPCA4KSAmJiAocGl4
IDwgOSkpCisJCQkJdmFsW2ldID0gSERNSV9OQ1RTW2ZyZXEgLSAxXVtwaXhdW2ldOworCQl9CisJ
CXRlbXAgPSAodmFsWzBdIDw8IDI0KSB8ICh2YWxbMV0gPDwgMTYpIHwKKwkJCSh2YWxbMl0gPDwg
OCkgfCAodmFsWzNdKTsJLyogQ1RTICovCisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IE5D
VFNfQllURVM7IGkrKykgeworCQkJaWYgKChmcmVxIDwgNykgJiYgKHBpeCA8IDkpKQorCQkJCXZh
bFtpXSA9IEhETUlfTkNUU1tmcmVxIC0gMV1bcGl4XVtpXTsKKwkJfQorCisJCXRlbXAgPQorCQkg
ICAgKHZhbFswXSA8PCAyNCkgfCAodmFsWzFdIDw8IDE2KSB8ICh2YWxbMl0gPDwgOCkgfCAodmFs
WzNdKTsKKworCQlpZiAoZGVwdGggPT0gSERNSV9ERUVQX0NPTE9SXzMwQklUUykKKwkJCXRlbXAg
PSAodGVtcCA+PiAyKSAqIDU7CisJCWVsc2UgaWYgKGRlcHRoID09IEhETUlfREVFUF9DT0xPUl8z
NkJJVFMpCisJCQl0ZW1wID0gKHRlbXAgPj4gMSkgKiAzOworCQllbHNlIGlmIChkZXB0aCA9PSBI
RE1JX0RFRVBfQ09MT1JfNDhCSVRTKQorCQkJdGVtcCA9ICh0ZW1wIDw8IDEpOworCisJCXZhbFsw
XSA9ICh0ZW1wID4+IDI0KSAmIDB4ZmY7CisJCXZhbFsxXSA9ICh0ZW1wID4+IDE2KSAmIDB4ZmY7
CisJCXZhbFsyXSA9ICh0ZW1wID4+IDgpICYgMHhmZjsKKwkJdmFsWzNdID0gKHRlbXApICYgMHhm
ZjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTkNUU19CWVRFUzsgaSsrKQorCQltdGtfaGRtaV93
cml0ZShoZG1pLCBHUkxfTkNUUywgdmFsW2ldKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRf
c2V0X25jdHMoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJICAgICAgZW51bSBoZG1pX2Rpc3Bs
YXlfY29sb3JfZGVwdGggZGVwdGgsCisJCQkgICAgICBlbnVtIGhkbWlfYXVkaW9fc2FtcGxlX2Zy
ZXF1ZW5jeSBmcmVxLCBpbnQgY2xvY2spCit7CisJaW50IHBpeCA9IDA7CisKKwlzd2l0Y2ggKGNs
b2NrKSB7CisJY2FzZSAyNzAwMDoKKwkJcGl4ID0gMDsKKwkJYnJlYWs7CisJY2FzZSA3NDE3NToK
KwkJcGl4ID0gMjsKKwkJYnJlYWs7CisJY2FzZSA3NDI1MDoKKwkJcGl4ID0gMzsKKwkJYnJlYWs7
CisJY2FzZSAxNDgzNTA6CisJCXBpeCA9IDQ7CisJCWJyZWFrOworCWNhc2UgMTQ4NTAwOgorCQlw
aXggPSA1OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwaXggPSAwOworCQlicmVhazsKKwl9CisK
KwltdGtfaGRtaV9tYXNrKGhkbWksIERVTU1ZXzMwNCwgQVVESU9fSTJTX05DVFNfU0VMXzY0LAor
CQkgICAgICBBVURJT19JMlNfTkNUU19TRUwpOworCWRvX2hkbWlfaHdfYXVkX3NldF9uY3RzKGhk
bWksIGRlcHRoLCBmcmVxLCBwaXgpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19oZG1pX2h3LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlf
aHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2VkODBhCi0tLSAvZGV2
L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2h3LmgKQEAgLTAs
MCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBB
dXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3Jh
bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5
CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTVRLX0hETUlfSFdf
SAorI2RlZmluZSBfTVRLX0hETUlfSFdfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNp
bmNsdWRlIDxsaW51eC9oZG1pLmg+CisjaW5jbHVkZSAibXRrX2hkbWkuaCIKKwordm9pZCBtdGtf
aGRtaV9od192aWRfYmxhY2soc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGJsYWNrKTsKK3Zv
aWQgbXRrX2hkbWlfaHdfYXVkX211dGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIG11dGUp
Owordm9pZCBtdGtfaGRtaV9od19zZW5kX2luZm9fZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1p
LCB1OCAqYnVmZmVyLCB1OCBsZW4pOwordm9pZCBtdGtfaGRtaV9od19zZW5kX2F1ZF9wYWNrZXQo
c3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSk7CitpbnQgbXRrX2hkbWlfaHdfc2V0
X2Nsb2NrKHN0cnVjdCBtdGtfaGRtaSAqaGN0eCwgdTMyIGNsb2NrKTsKK3ZvaWQgbXRrX2hkbWlf
aHdfY29uZmlnX3N5cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfaGRtaV9od19z
ZXRfZGVlcF9jb2xvcl9tb2RlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgIGVudW0g
aGRtaV9kaXNwbGF5X2NvbG9yX2RlcHRoIGRlcHRoKTsKK3ZvaWQgbXRrX2hkbWlfaHdfc2VuZF9h
dl9tdXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X3NlbmRfYXZf
dW5tdXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X25jdHNfZW5h
YmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBvbik7Cit2b2lkIG10a19oZG1pX2h3X2F1
ZF9zZXRfY2hhbm5lbF9zd2FwKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgICBlbnVt
IGhkbWlfYXVkX2NoYW5uZWxfc3dhcF90eXBlIHN3YXApOwordm9pZCBtdGtfaGRtaV9od19hdWRf
cmF3X2RhdGFfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9p
ZCBtdGtfaGRtaV9od19hdWRfc2V0X2JpdF9udW0oc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJ
CSBlbnVtIGhkbWlfYXVkaW9fc2FtcGxlX3NpemUgYml0X251bSk7Cit2b2lkIG10a19oZG1pX2h3
X2F1ZF9zZXRfaGlnaF9iaXRyYXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUp
Owordm9pZCBtdGtfaGRtaV9waHlfYXVkX2RzdF9ub3JtYWxfZG91YmxlX2VuYWJsZShzdHJ1Y3Qg
bXRrX2hkbWkgKmhkbWksCisJCQkJCSAgICAgICBib29sIGVuYWJsZSk7Cit2b2lkIG10a19oZG1p
X2h3X2F1ZF9kc3RfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwor
dm9pZCBtdGtfaGRtaV9od19hdWRfZHNkX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJv
b2wgZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9pMnNfZm10KHN0cnVjdCBtdGtf
aGRtaSAqaGRtaSwKKwkJCQkgZW51bSBoZG1pX2F1ZF9pMnNfZm10IGkyc19mbXQpOwordm9pZCBt
dGtfaGRtaV9od19hdWRfc2V0X2kyc19jaGFuX251bShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJ
CQkJICAgICAgZW51bSBoZG1pX2F1ZF9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJCSAg
ICAgIHU4IGNoYW5uZWxfY291bnQpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2lucHV0X3R5
cGUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSAgICBlbnVtIGhkbWlfYXVkX2lucHV0X3R5
cGUgaW5wdXRfdHlwZSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9zdGF0dXMo
c3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQl1OCAqbF9jaGFuX3N0YXR1cywgdTggKnJfY2hh
bl9zdGF1cywKKwkJCQkJZW51bSBoZG1pX2F1ZGlvX3NhbXBsZV9mcmVxdWVuY3kKKwkJCQkJYXVk
X2hkbWlfZnMpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX2VuYWJsZShzdHJ1Y3QgbXRrX2hk
bWkgKmhkbWksIGJvb2wgZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9tY2xrKHN0
cnVjdCBtdGtfaGRtaSAqaGRtaSwgZW51bSBoZG1pX2F1ZF9tY2xrIG1jbGspOwordm9pZCBtdGtf
aGRtaV9od19hdWRfc3JjX29mZihzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfaGRt
aV9od19hdWRfc3JjX3JlZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19o
ZG1pX2h3X2F1ZF9hY2xrX2ludl9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVu
YWJsZSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfbmN0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWksCisJCQkgICAgICBlbnVtIGhkbWlfZGlzcGxheV9jb2xvcl9kZXB0aCBkZXB0aCwKKwkJCSAg
ICAgIGVudW0gaGRtaV9hdWRpb19zYW1wbGVfZnJlcXVlbmN5IGZyZXEsCisJCQkgICAgICBpbnQg
Y2xvY2spOworYm9vbCBtdGtfaGRtaV9od19pc19ocGRfaGlnaChzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWkpOwordm9pZCBtdGtfaGRtaV9od19tYWtlX3JlZ193cml0YWJsZShzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWksIGJvb2wgZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfcmVzZXQoc3RydWN0IG10a19o
ZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfZW5hYmxlX25vdGljZShzdHJ1Y3QgbXRrX2hk
bWkgKmhkbWksIGJvb2wgZW5hYmxlX25vdGljZSk7Cit2b2lkIG10a19oZG1pX2h3X3dyaXRlX2lu
dF9tYXNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyIGludF9tYXNrKTsKK3ZvaWQgbXRrX2hk
bWlfaHdfZW5hYmxlX2R2aV9tb2RlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUp
Owordm9pZCBtdGtfaGRtaV9od19uY3RzX2F1dG9fd3JpdGVfZW5hYmxlKHN0cnVjdCBtdGtfaGRt
aSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9od19tc2ljX3NldHRpbmcoc3Ry
dWN0IG10a19oZG1pICpoZG1pLAorCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v
ZGUpOwordm9pZCBtdGtfaGRtaV9od18xcDRfdmVyc2lvbl9lbmFibGUoc3RydWN0IG10a19oZG1p
ICpoZG1pLCBib29sIGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX2h3X2h0cGxnX2lycV9lbmFibGUo
c3RydWN0IG10a19oZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfaHRwbGdfaXJxX2Rpc2Fi
bGUoc3RydWN0IG10a19oZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfY2xlYXJfaHRwbGdf
aXJxKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7CisKKyNlbmRpZiAvKiBfTVRLX0hETUlfSFdfSCAq
LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3BoeS5jIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3BoeS5jCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjczYWM5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcGh5LmMKQEAgLTAsMCArMSwzNDAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUu
cWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4
L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lz
Y29uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3Bo
eS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4
L3R5cGVzLmg+CisjaW5jbHVkZSAibXRrX2hkbWkuaCIKKyNpbmNsdWRlICJtdGtfaGRtaV9waHlf
cmVncy5oIgorCitzdHJ1Y3QgbXRrX2hkbWlfcGh5IHsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJ
c3RydWN0IGNsayAqcGxsX3JlZl9jbGs7CisJdTggZHJ2X2ltcF9jbGs7CisJdTggZHJ2X2ltcF9k
MjsKKwl1OCBkcnZfaW1wX2QxOworCXU4IGRydl9pbXBfZDA7CisJdTMyIGliaWFzOworCXUzMiBp
Ymlhc191cDsKK307CisKK3N0YXRpYyBjb25zdCB1OCBQUkVESVZbM11bNF0gPSB7CisJezB4MCwg
MHgwLCAweDAsIDB4MH0sCS8qIDI3TWh6ICovCisJezB4MSwgMHgxLCAweDEsIDB4MX0sCS8qIDc0
TWh6ICovCisJezB4MSwgMHgxLCAweDEsIDB4MX0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMg
Y29uc3QgdTggVFhESVZbM11bNF0gPSB7CisJezB4MywgMHgzLCAweDMsIDB4Mn0sCS8qIDI3TWh6
ICovCisJezB4MiwgMHgxLCAweDEsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4MSwgMHgwLCAweDAs
IDB4MH0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggRkJLU0VMWzNdWzRdID0g
eworCXsweDEsIDB4MSwgMHgxLCAweDF9LAkvKiAyN01oeiAqLworCXsweDEsIDB4MCwgMHgxLCAw
eDF9LAkvKiA3NE1oeiAqLworCXsweDEsIDB4MCwgMHgxLCAweDF9CS8qIDE0OE1oeiAqLworfTsK
Kworc3RhdGljIGNvbnN0IHU4IEZCS0RJVlszXVs0XSA9IHsKKwl7MTksIDI0LCAyOSwgMTl9LAkv
KiAyN01oeiAqLworCXsxOSwgMjQsIDE0LCAxOX0sCS8qIDc0TWh6ICovCisJezE5LCAyNCwgMTQs
IDE5fQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBESVZFTlszXVs0XSA9IHsK
Kwl7MHgyLCAweDEsIDB4MSwgMHgyfSwJLyogMjdNaHogKi8KKwl7MHgyLCAweDIsIDB4MiwgMHgy
fSwJLyogNzRNaHogKi8KKwl7MHgyLCAweDIsIDB4MiwgMHgyfQkvKiAxNDhNaHogKi8KK307CisK
K3N0YXRpYyBjb25zdCB1OCBIVFBMTEJQWzNdWzRdID0geworCXsweGMsIDB4YywgMHg4LCAweGN9
LAkvKiAyN01oeiAqLworCXsweGMsIDB4ZiwgMHhmLCAweGN9LAkvKiA3NE1oeiAqLworCXsweGMs
IDB4ZiwgMHhmLCAweGN9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEhUUExM
QkNbM11bNF0gPSB7CisJezB4MiwgMHgzLCAweDMsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4Miwg
MHgzLCAweDMsIDB4Mn0sCS8qIDc0TWh6ICovCisJezB4MiwgMHgzLCAweDMsIDB4Mn0JLyogMTQ4
TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggSFRQTExCUlszXVs0XSA9IHsKKwl7MHgxLCAw
eDEsIDB4MCwgMHgxfSwJLyogMjdNaHogKi8KKwl7MHgxLCAweDIsIDB4MiwgMHgxfSwJLyogNzRN
aHogKi8KKwl7MHgxLCAweDIsIDB4MiwgMHgxfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyB2
b2lkIG10a19oZG1pX3BoeV9tYXNrKHN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5LCB1MzIg
b2Zmc2V0LAorCQkJICAgICAgdTMyIHZhbCwgdTMyIG1hc2spCit7CisJdTMyIHRtcCA9IHJlYWRs
KGhkbWlfcGh5LT5yZWdzICArIG9mZnNldCkgJiB+bWFzazsKKworCXRtcCB8PSAodmFsICYgbWFz
ayk7CisJd3JpdGVsKHRtcCwgaGRtaV9waHktPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMg
dm9pZCBtdGtfaGRtaV9waHlfZW5hYmxlX3RtZHMoc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9w
aHkpCit7CisJY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWlfcGh5LT5wbGxfcmVmX2Nsayk7CisJbXRr
X2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BMTF9BVVRPS19F
TiwKKwkJCSAgUkdfSERNSVRYX1BMTF9BVVRPS19FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRt
aV9waHksIEhETUlfQ09OMCwgUkdfSERNSVRYX1BMTF9QT1NESVYsCisJCQkgIFJHX0hETUlUWF9Q
TExfUE9TRElWKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04zLCAwLCBS
R19IRE1JVFhfTUhMQ0tfRU4pOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NP
TjEsIFJHX0hETUlUWF9QTExfQklBU19FTiwKKwkJCSAgUkdfSERNSVRYX1BMTF9CSUFTX0VOKTsK
Kwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBI
RE1JX0NPTjAsIFJHX0hETUlUWF9QTExfRU4sCisJCQkgIFJHX0hETUlUWF9QTExfRU4pOworCXVz
bGVlcF9yYW5nZSgxMDAsIDE1MCk7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlf
Q09OMSwgUkdfSERNSVRYX1BMTF9CSUFTX0xQRl9FTiwKKwkJCSAgUkdfSERNSVRYX1BMTF9CSUFT
X0xQRl9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwgUkdfSERN
SVRYX1BMTF9UWERJVl9FTiwKKwkJCSAgUkdfSERNSVRYX1BMTF9UWERJVl9FTik7CisJbXRrX2hk
bWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywgUkdfSERNSVRYX1NFUl9FTiwKKwkJCSAg
UkdfSERNSVRYX1NFUl9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09O
MywgUkdfSERNSVRYX1BSRF9FTiwKKwkJCSAgUkdfSERNSVRYX1BSRF9FTik7CisJbXRrX2hkbWlf
cGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywgUkdfSERNSVRYX0RSVl9FTiwKKwkJCSAgUkdf
SERNSVRYX0RSVl9FTik7CisJdXNsZWVwX3JhbmdlKDEwMCwgMTUwKTsKK30KKworc3RhdGljIHZv
aWQgbXRrX2hkbWlfcGh5X2Rpc2FibGVfdG1kcyhzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3Bo
eSkKK3sKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04zLCAwLCBSR19IRE1J
VFhfRFJWX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04zLCAwLCBS
R19IRE1JVFhfUFJEX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04z
LCAwLCBSR19IRE1JVFhfU0VSX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERN
SV9DT04xLCAwLCBSR19IRE1JVFhfUExMX1RYRElWX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayho
ZG1pX3BoeSwgSERNSV9DT04xLCAwLCBSR19IRE1JVFhfUExMX0JJQVNfTFBGX0VOKTsKKwl1c2xl
ZXBfcmFuZ2UoMTAwLCAxNTApOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NP
TjAsIDAsIFJHX0hETUlUWF9QTExfRU4pOworCXVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7CisJbXRr
X2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwgMCwgUkdfSERNSVRYX1BMTF9CSUFT
X0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCAwLCBSR19IRE1J
VFhfUExMX1BPU0RJVik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwg
MCwgUkdfSERNSVRYX1BMTF9BVVRPS19FTik7CisJdXNsZWVwX3JhbmdlKDEwMCwgMTUwKTsKKwlj
bGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaV9waHktPnBsbF9yZWZfY2xrKTsKK30KKwordm9pZCBt
dGtfaGRtaV9waHlfc2V0X3BsbChzdHJ1Y3QgcGh5ICpwaHksIHUzMiBjbG9jaywKKwkJCSAgZW51
bSBoZG1pX2Rpc3BsYXlfY29sb3JfZGVwdGggZGVwdGgpCit7CisJc3RydWN0IG10a19oZG1pX3Bo
eSAqaGRtaV9waHkgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKwl1bnNpZ25lZCBpbnQgaWJpYXM7
CisJdW5zaWduZWQgaW50IHBpeDsKKworCWlmIChjbG9jayA8PSA3NDAwMDAwMCkKKwkJY2xrX3Nl
dF9yYXRlKGhkbWlfcGh5LT5wbGxfcmVmX2NsaywgY2xvY2spOworCWVsc2UKKwkJY2xrX3NldF9y
YXRlKGhkbWlfcGh5LT5wbGxfcmVmX2NsaywgY2xvY2sgLyAyKTsKKworCWRldl9kYmcoJnBoeS0+
ZGV2LCAiV2FudCBSRUYgJXUgSHosIHBpeGVsIGNsb2NrICVsdSBIelxuIiwKKwkJY2xvY2ssIGNs
a19nZXRfcmF0ZShoZG1pX3BoeS0+cGxsX3JlZl9jbGspKTsKKworCWlmIChjbG9jayA8PSAyNzAw
MDAwMCkKKwkJcGl4ID0gMDsKKwllbHNlIGlmIChjbG9jayA8PSA3NDAwMDAwMCkKKwkJcGl4ID0g
MTsKKwllbHNlCisJCXBpeCA9IDI7CisKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERN
SV9DT04wLAorCQkJICAoKFBSRURJVltwaXhdW2RlcHRoXSkgPDwgUFJFRElWX1NISUZUKSwKKwkJ
CSAgUkdfSERNSVRYX1BMTF9QUkVESVYpOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBI
RE1JX0NPTjAsIFJHX0hETUlUWF9QTExfUE9TRElWLAorCQkJICBSR19IRE1JVFhfUExMX1BPU0RJ
Vik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMCwKKwkJCSAgKDB4MSA8
PCBQTExfSUNfU0hJRlQpIHwgKDB4MSA8PCBQTExfSVJfU0hJRlQpLAorCQkJICBSR19IRE1JVFhf
UExMX0lDIHwgUkdfSERNSVRYX1BMTF9JUik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHks
IEhETUlfQ09OMSwKKwkJCSAgKChUWERJVltwaXhdW2RlcHRoXSkgPDwgUExMX1RYRElWX1NISUZU
KSwKKwkJCSAgUkdfSERNSVRYX1BMTF9UWERJVik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9w
aHksIEhETUlfQ09OMCwKKwkJCSAgKChGQktTRUxbcGl4XVtkZXB0aF0pIDw8IFBMTF9GQktTRUxf
U0hJRlQpIHwKKwkJCSAgKChGQktESVZbcGl4XVtkZXB0aF0pIDw8IFBMTF9GQktESVZfU0hJRlQp
LAorCQkJICBSR19IRE1JVFhfUExMX0ZCS1NFTCB8IFJHX0hETUlUWF9QTExfRkJLRElWKTsKKwlt
dGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLAorCQkJICAoKERJVkVOW3BpeF1b
ZGVwdGhdKSA8PCBQTExfRElWRU5fU0hJRlQpLAorCQkJICBSR19IRE1JVFhfUExMX0RJVkVOKTsK
KwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLAorCQkJICAoKEhUUExMQlBb
cGl4XVtkZXB0aF0pIDw8IFBMTF9CUF9TSElGVCkgfAorCQkJICAoKEhUUExMQkNbcGl4XVtkZXB0
aF0pIDw8IFBMTF9CQ19TSElGVCkgfAorCQkJICAoKEhUUExMQlJbcGl4XVtkZXB0aF0pIDw8IFBM
TF9CUl9TSElGVCksCisJCQkgIFJHX0hETUlUWF9QTExfQlAgfCBSR19IRE1JVFhfUExMX0JDIHwK
KwkJCSAgUkdfSERNSVRYX1BMTF9CUik7CisKKwlpZiAoKHBpeCA9PSAyKSAmJiAoZGVwdGggIT0g
SERNSV9ERUVQX0NPTE9SXzI0QklUUykpIHsKKwkJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHks
IEhETUlfQ09OMywgUkdfSERNSVRYX1BSRF9JTVBfRU4sCisJCQkJICBSR19IRE1JVFhfUFJEX0lN
UF9FTik7CisJCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjQsCisJCQkJICAo
MHg2IDw8IFBSRF9JQklBU19DTEtfU0hJRlQpIHwKKwkJCQkgICgweDYgPDwgUFJEX0lCSUFTX0Qy
X1NISUZUKSB8CisJCQkJICAoMHg2IDw8IFBSRF9JQklBU19EMV9TSElGVCkgfAorCQkJCSAgKDB4
NiA8PCBQUkRfSUJJQVNfRDBfU0hJRlQpLAorCQkJCSAgUkdfSERNSVRYX1BSRF9JQklBU19DTEsg
fAorCQkJCSAgUkdfSERNSVRYX1BSRF9JQklBU19EMiB8CisJCQkJICBSR19IRE1JVFhfUFJEX0lC
SUFTX0QxIHwKKwkJCQkgIFJHX0hETUlUWF9QUkRfSUJJQVNfRDApOworCQltdGtfaGRtaV9waHlf
bWFzayhoZG1pX3BoeSwgSERNSV9DT04zLAorCQkJCSAgMHhmIDw8IERSVl9JTVBfRU5fU0hJRlQs
CisJCQkJICBSR19IRE1JVFhfRFJWX0lNUF9FTik7CisJCWliaWFzID0gaGRtaV9waHktPmliaWFz
X3VwOworCX0gZWxzZSB7CisJCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjMs
IDAsIFJHX0hETUlUWF9QUkRfSU1QX0VOKTsKKwkJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHks
IEhETUlfQ09ONCwKKwkJCQkgICgweDMgPDwgUFJEX0lCSUFTX0NMS19TSElGVCkgfAorCQkJCSAg
KDB4MyA8PCBQUkRfSUJJQVNfRDJfU0hJRlQpIHwKKwkJCQkgICgweDMgPDwgUFJEX0lCSUFTX0Qx
X1NISUZUKSB8CisJCQkJICAoMHgzIDw8IFBSRF9JQklBU19EMF9TSElGVCksCisJCQkJICBSR19I
RE1JVFhfUFJEX0lCSUFTX0NMSyB8CisJCQkJICBSR19IRE1JVFhfUFJEX0lCSUFTX0QyIHwKKwkJ
CQkgIFJHX0hETUlUWF9QUkRfSUJJQVNfRDEgfAorCQkJCSAgUkdfSERNSVRYX1BSRF9JQklBU19E
MCk7CisJCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjMsCisJCQkJICAoMHgw
IDw8IERSVl9JTVBfRU5fU0hJRlQpLAorCQkJCSAgUkdfSERNSVRYX0RSVl9JTVBfRU4pOworCQlp
YmlhcyA9IGhkbWlfcGh5LT5pYmlhczsKKwl9CisKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3Bo
eSwgSERNSV9DT042LAorCQkJICAoaGRtaV9waHktPmRydl9pbXBfY2xrIDw8IERSVl9JTVBfQ0xL
X1NISUZUKSB8CisJCQkgIChoZG1pX3BoeS0+ZHJ2X2ltcF9kMiA8PCBEUlZfSU1QX0QyX1NISUZU
KSB8CisJCQkgIChoZG1pX3BoeS0+ZHJ2X2ltcF9kMSA8PCBEUlZfSU1QX0QxX1NISUZUKSB8CisJ
CQkgIChoZG1pX3BoeS0+ZHJ2X2ltcF9kMCA8PCBEUlZfSU1QX0QwX1NISUZUKSwKKwkJCSAgUkdf
SERNSVRYX0RSVl9JTVBfQ0xLIHwgUkdfSERNSVRYX0RSVl9JTVBfRDIgfAorCQkJICBSR19IRE1J
VFhfRFJWX0lNUF9EMSB8IFJHX0hETUlUWF9EUlZfSU1QX0QwKTsKKwltdGtfaGRtaV9waHlfbWFz
ayhoZG1pX3BoeSwgSERNSV9DT041LAorCQkJICAoaWJpYXMgPDwgRFJWX0lCSUFTX0NMS19TSElG
VCkgfAorCQkJICAoaWJpYXMgPDwgRFJWX0lCSUFTX0QyX1NISUZUKSB8CisJCQkgIChpYmlhcyA8
PCBEUlZfSUJJQVNfRDFfU0hJRlQpIHwKKwkJCSAgKGliaWFzIDw8IERSVl9JQklBU19EMF9TSElG
VCksCisJCQkgIFJHX0hETUlUWF9EUlZfSUJJQVNfQ0xLIHwgUkdfSERNSVRYX0RSVl9JQklBU19E
MiB8CisJCQkgIFJHX0hETUlUWF9EUlZfSUJJQVNfRDEgfCBSR19IRE1JVFhfRFJWX0lCSUFTX0Qw
KTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9waHlfcG93ZXJfb24oc3RydWN0IHBoeSAqcGh5
KQoreworCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gcGh5X2dldF9kcnZkYXRhKHBo
eSk7CisKKwltdGtfaGRtaV9waHlfZW5hYmxlX3RtZHMoaGRtaV9waHkpOworCisJcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3Bvd2VyX29mZihzdHJ1Y3QgcGh5ICpwaHkp
Cit7CisJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSBwaHlfZ2V0X2RydmRhdGEocGh5
KTsKKworCW10a19oZG1pX3BoeV9kaXNhYmxlX3RtZHMoaGRtaV9waHkpOworCisJcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X29wcyBtdGtfaGRtaV9waHlfb3BzID0geworCS5wb3dl
cl9vbiA9IG10a19oZG1pX3BoeV9wb3dlcl9vbiwKKwkucG93ZXJfb2ZmID0gbXRrX2hkbWlfcGh5
X3Bvd2VyX29mZiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgbXRr
X2hkbWlfcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0
IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3Bo
eTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJc3RydWN0IHBo
eV9wcm92aWRlciAqcGh5X3Byb3ZpZGVyOworCWludCByZXQ7CisKKwloZG1pX3BoeSA9IGRldm1f
a3phbGxvYyhkZXYsIHNpemVvZigqaGRtaV9waHkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhkbWlf
cGh5KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShw
ZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaGRtaV9waHktPnJlZ3MgPSBkZXZtX2lvcmVtYXBf
cmVzb3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19FUlIoaGRtaV9waHktPnJlZ3MpKSB7CisJCXJl
dCA9IFBUUl9FUlIoaGRtaV9waHktPnJlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBn
ZXQgbWVtb3J5IHJlc291cmNlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlo
ZG1pX3BoeS0+cGxsX3JlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGxsX3JlZiIpOworCWlm
IChJU19FUlIoaGRtaV9waHktPnBsbF9yZWZfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGhkbWlf
cGh5LT5wbGxfcmVmX2Nsayk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQg
UExMIHJlZmVyZW5jZSBjbG9jazogJWRcbiIsCisJCQlyZXQpOworCQlyZXR1cm4gcmV0OworCX0K
KworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgIm1lZGlhdGVrLGli
aWFzIiwKKwkJCQkgICAmaGRtaV9waHktPmliaWFzKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZf
ZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGliaWFzOiAlZFxuIiwgcmV0KTsKKwkJcmV0
dXJuIHJldDsKKwl9CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUs
ICJtZWRpYXRlayxpYmlhc191cCIsCisJCQkJICAgJmhkbWlfcGh5LT5pYmlhc191cCk7CisJaWYg
KHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBpYmlhcyB1
cDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2X2luZm8oZGV2LCAiVXNp
bmcgZGVmYXVsdCBUWCBEUlYgaW1wZWRhbmNlOiA0LjJrLzM2XG4iKTsKKwloZG1pX3BoeS0+ZHJ2
X2ltcF9jbGsgPSAweDMwOworCWhkbWlfcGh5LT5kcnZfaW1wX2QyID0gMHgzMDsKKwloZG1pX3Bo
eS0+ZHJ2X2ltcF9kMSA9IDB4MzA7CisJaGRtaV9waHktPmRydl9pbXBfZDAgPSAweDMwOworCisJ
cGh5ID0gZGV2bV9waHlfY3JlYXRlKGRldiwgTlVMTCwgJm10a19oZG1pX3BoeV9vcHMpOworCWlm
IChJU19FUlIocGh5KSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgSERNSSBQ
SFlcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwaHkpOworCX0KKwlwaHlfc2V0X2RydmRhdGEocGh5
LCBoZG1pX3BoeSk7CisKKwlwaHlfcHJvdmlkZXIgPSBkZXZtX29mX3BoeV9wcm92aWRlcl9yZWdp
c3RlcihkZXYsIG9mX3BoeV9zaW1wbGVfeGxhdGUpOworCisJcmV0dXJuIFBUUl9FUlJfT1JfWkVS
TyhwaHlfcHJvdmlkZXIpOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3BoeV9yZW1vdmUoc3Ry
dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNv
bnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2hkbWlfcGh5X21hdGNoW10gPSB7CisJeyAuY29t
cGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtaGRtaS1waHkiLCB9LAorCXt9LAorfTsKKworc3Ry
dWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9waHlfZHJpdmVyID0geworCS5wcm9iZSA9IG10
a19oZG1pX3BoeV9wcm9iZSwKKwkucmVtb3ZlID0gbXRrX2hkbWlfcGh5X3JlbW92ZSwKKwkuZHJp
dmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1oZG1pLXBoeSIsCisJCS5vZl9tYXRjaF90YWJs
ZSA9IG10a19oZG1pX3BoeV9tYXRjaCwKKwl9LAorfTsKKworTU9EVUxFX0FVVEhPUigiSmllIFFp
dSA8amllLnFpdUBtZWRpYXRlay5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhVGVr
IE1UODE3MyBIRE1JIFBIWSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlm
ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9waHkuaCBiL2RyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9waHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5mZjNlOTVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19oZG1pX3BoeS5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1l
ZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKi8KKyNpZm5kZWYgX01US19IRE1JX1BIWV9ICisjZGVmaW5lIF9NVEtfSERNSV9QSFlf
SAorCit2b2lkIG10a19oZG1pX3BoeV9zZXRfcGxsKHN0cnVjdCBwaHkgKnBoeSwgdTMyIGNsb2Nr
LAorCQkJICBlbnVtIGhkbWlfZGlzcGxheV9jb2xvcl9kZXB0aCBkZXB0aCk7CisKKyNlbmRpZiAv
KiBfTVRLX0hETUlfUEhZX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfaGRtaV9waHlfcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1p
X3BoeV9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE0YmI5Zgot
LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9waHlf
cmVncy5oCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlh
VGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVm
IF9NVEtfSERNSV9QSFlfUkVHU19ICisjZGVmaW5lIF9NVEtfSERNSV9QSFlfUkVHU19ICisKKyNk
ZWZpbmUgSERNSV9DT04wCQkweDAwCisjZGVmaW5lIFJHX0hETUlUWF9QTExfRU4JCUJJVCgzMSkK
KyNkZWZpbmUgUkdfSERNSVRYX1BMTF9GQktESVYJCSgweDdmIDw8IDI0KQorI2RlZmluZSBQTExf
RkJLRElWX1NISUZUCQkyNAorI2RlZmluZSBSR19IRE1JVFhfUExMX0ZCS1NFTAkJKDB4MyA8PCAy
MikKKyNkZWZpbmUgUExMX0ZCS1NFTF9TSElGVAkJMjIKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9Q
UkVESVYJCSgweDMgPDwgMjApCisjZGVmaW5lIFBSRURJVl9TSElGVAkJCTIwCisjZGVmaW5lIFJH
X0hETUlUWF9QTExfUE9TRElWCQkoMHgzIDw8IDE4KQorI2RlZmluZSBQT1NESVZfU0hJRlQJCQkx
OAorI2RlZmluZSBSR19IRE1JVFhfUExMX1JTVF9ETFkJCSgweDMgPDwgMTYpCisjZGVmaW5lIFJH
X0hETUlUWF9QTExfSVIJCSgweGYgPDwgMTIpCisjZGVmaW5lIFBMTF9JUl9TSElGVAkJCTEyCisj
ZGVmaW5lIFJHX0hETUlUWF9QTExfSUMJCSgweGYgPDwgOCkKKyNkZWZpbmUgUExMX0lDX1NISUZU
CQkJOAorI2RlZmluZSBSR19IRE1JVFhfUExMX0JQCQkoMHhmIDw8IDQpCisjZGVmaW5lIFBMTF9C
UF9TSElGVAkJCTQKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9CUgkJKDB4MyA8PCAyKQorI2RlZmlu
ZSBQTExfQlJfU0hJRlQJCQkyCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQkMJCSgweDMgPDwgMCkK
KyNkZWZpbmUgUExMX0JDX1NISUZUCQkJMAorI2RlZmluZSBIRE1JX0NPTjEJCTB4MDQKKyNkZWZp
bmUgUkdfSERNSVRYX1BMTF9ESVZFTgkJKDB4NyA8PCAyOSkKKyNkZWZpbmUgUExMX0RJVkVOX1NI
SUZUCQkJMjkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19FTgkJQklUKDI4KQorI2RlZmlu
ZSBSR19IRE1JVFhfUExMX0FVVE9LX0tGCQkoMHgzIDw8IDI2KQorI2RlZmluZSBSR19IRE1JVFhf
UExMX0FVVE9LX0tTCQkoMHgzIDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfUExMX0FVVE9LX0xP
QUQJQklUKDIzKQorI2RlZmluZSBSR19IRE1JVFhfUExMX0JBTkQJCSgweDNmIDw8IDE2KQorI2Rl
ZmluZSBSR19IRE1JVFhfUExMX1JFRl9TRUwJCUJJVCgxNSkKKyNkZWZpbmUgUkdfSERNSVRYX1BM
TF9CSUFTX0VOCQlCSVQoMTQpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQklBU19MUEZfRU4JQklU
KDEzKQorI2RlZmluZSBSR19IRE1JVFhfUExMX1RYRElWX0VOCQlCSVQoMTIpCisjZGVmaW5lIFJH
X0hETUlUWF9QTExfVFhESVYJCSgweDMgPDwgMTApCisjZGVmaW5lIFBMTF9UWERJVl9TSElGVAkJ
CTEwCisjZGVmaW5lIFJHX0hETUlUWF9QTExfTFZST0RfRU4JCUJJVCg5KQorI2RlZmluZSBSR19I
RE1JVFhfUExMX01PTlZDX0VOCQlCSVQoOCkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9NT05DS19F
TgkJQklUKDcpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfTU9OUkVGX0VOCQlCSVQoNikKKyNkZWZp
bmUgUkdfSERNSVRYX1BMTF9UU1RfRU4JCUJJVCg1KQorI2RlZmluZSBSR19IRE1JVFhfUExMX1RT
VF9DS19FTgkJQklUKDQpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfVFNUX1NFTAkJKDB4ZiA8PCAw
KQorI2RlZmluZSBIRE1JX0NPTjIJCTB4MDgKKyNkZWZpbmUgUkdTX0hETUlUWF9QTExfQVVUT0tf
QkFORAkoMHg3ZiA8PCA4KQorI2RlZmluZSBSR1NfSERNSVRYX1BMTF9BVVRPS19GQUlMCUJJVCgx
KQorI2RlZmluZSBSR19IRE1JVFhfRU5fVFhfQ0tMRE8JCUJJVCgwKQorI2RlZmluZSBIRE1JX0NP
TjMJCTB4MGMKKyNkZWZpbmUgUkdfSERNSVRYX1NFUl9FTgkJKDB4ZiA8PCAyOCkKKyNkZWZpbmUg
UkdfSERNSVRYX1BSRF9FTgkJKDB4ZiA8PCAyNCkKKyNkZWZpbmUgUkdfSERNSVRYX1BSRF9JTVBf
RU4JCSgweGYgPDwgMjApCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfRU4JCSgweGYgPDwgMTYpCisj
ZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX0VOCQkoMHhmIDw8IDEyKQorI2RlZmluZSBEUlZfSU1Q
X0VOX1NISUZUCQkxMgorI2RlZmluZSBSR19IRE1JVFhfTUhMQ0tfRk9SQ0UJCUJJVCgxMCkKKyNk
ZWZpbmUgUkdfSERNSVRYX01ITENLX1BQSVhfRU4JCUJJVCg5KQorI2RlZmluZSBSR19IRE1JVFhf
TUhMQ0tfRU4JCUJJVCg4KQorI2RlZmluZSBSR19IRE1JVFhfU0VSX0RJTl9TRUwJCSgweGYgPDwg
NCkKKyNkZWZpbmUgUkdfSERNSVRYX1NFUl81VDFfQklTVF9FTglCSVQoMykKKyNkZWZpbmUgUkdf
SERNSVRYX1NFUl9CSVNUX1RPRwkJQklUKDIpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJfRElOX1RP
RwkJQklUKDEpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJfQ0xLRElHX0lOVglCSVQoMCkKKyNkZWZp
bmUgSERNSV9DT040CQkweDEwCisjZGVmaW5lIFJHX0hETUlUWF9QUkRfSUJJQVNfQ0xLCQkoMHhm
IDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfUFJEX0lCSUFTX0QyCQkoMHhmIDw8IDE2KQorI2Rl
ZmluZSBSR19IRE1JVFhfUFJEX0lCSUFTX0QxCQkoMHhmIDw8IDgpCisjZGVmaW5lIFJHX0hETUlU
WF9QUkRfSUJJQVNfRDAJCSgweGYgPDwgMCkKKyNkZWZpbmUgUFJEX0lCSUFTX0NMS19TSElGVAkJ
MjQKKyNkZWZpbmUgUFJEX0lCSUFTX0QyX1NISUZUCQkxNgorI2RlZmluZSBQUkRfSUJJQVNfRDFf
U0hJRlQJCTgKKyNkZWZpbmUgUFJEX0lCSUFTX0QwX1NISUZUCQkwCisjZGVmaW5lIEhETUlfQ09O
NQkJMHgxNAorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lCSUFTX0NMSwkJKDB4M2YgPDwgMjQpCisj
ZGVmaW5lIFJHX0hETUlUWF9EUlZfSUJJQVNfRDIJCSgweDNmIDw8IDE2KQorI2RlZmluZSBSR19I
RE1JVFhfRFJWX0lCSUFTX0QxCQkoMHgzZiA8PCA4KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lC
SUFTX0QwCQkoMHgzZiA8PCAwKQorI2RlZmluZSBEUlZfSUJJQVNfQ0xLX1NISUZUCQkyNAorI2Rl
ZmluZSBEUlZfSUJJQVNfRDJfU0hJRlQJCTE2CisjZGVmaW5lIERSVl9JQklBU19EMV9TSElGVAkJ
OAorI2RlZmluZSBEUlZfSUJJQVNfRDBfU0hJRlQJCTAKKyNkZWZpbmUgSERNSV9DT042CQkweDE4
CisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX0NMSwkJKDB4M2YgPDwgMjQpCisjZGVmaW5lIFJH
X0hETUlUWF9EUlZfSU1QX0QyCQkoMHgzZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9J
TVBfRDEJCSgweDNmIDw8IDgpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX0QwCQkoMHgzZiA8
PCAwKQorI2RlZmluZSBEUlZfSU1QX0NMS19TSElGVAkJMjQKKyNkZWZpbmUgRFJWX0lNUF9EMl9T
SElGVAkJMTYKKyNkZWZpbmUgRFJWX0lNUF9EMV9TSElGVAkJOAorI2RlZmluZSBEUlZfSU1QX0Qw
X1NISUZUCQkwCisjZGVmaW5lIEhETUlfQ09ONwkJMHgxYworI2RlZmluZSBSR19IRE1JVFhfTUhM
Q0tfRFJWX0lCSUFTCSgweDFmIDw8IDI3KQorI2RlZmluZSBSR19IRE1JVFhfU0VSX0RJTgkJKDB4
M2ZmIDw8IDE2KQorI2RlZmluZSBSR19IRE1JVFhfQ0hMRENfVFNUCQkoMHhmIDw8IDEyKQorI2Rl
ZmluZSBSR19IRE1JVFhfQ0hMQ0tfVFNUCQkoMHhmIDw8IDgpCisjZGVmaW5lIFJHX0hETUlUWF9S
RVNFUlZFCQkoMHhmZiA8PCAwKQorI2RlZmluZSBIRE1JX0NPTjgJCTB4MjAKKyNkZWZpbmUgUkdT
X0hETUlUWF8yVDFfTEVWCQkoMHhmIDw8IDE2KQorI2RlZmluZSBSR1NfSERNSVRYXzJUMV9FREcJ
CSgweGYgPDwgMTIpCisjZGVmaW5lIFJHU19IRE1JVFhfNVQxX0xFVgkJKDB4ZiA8PCA4KQorI2Rl
ZmluZSBSR1NfSERNSVRYXzVUMV9FREcJCSgweGYgPDwgNCkKKyNkZWZpbmUgUkdTX0hETUlUWF9Q
TFVHX1RTVAkJQklUKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19oZG1pX3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRt
aV9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU3ZWUyMgotLS0g
L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmgK
QEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5j
LgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlz
IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
IG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX01US19I
RE1JX1JFR1NfSAorI2RlZmluZSBfTVRLX0hETUlfUkVHU19ICisKKyNkZWZpbmUgR1JMX0lOVF9N
QVNLCQkweDE4CisjZGVmaW5lIEdSTF9JRk1fUE9SVAkJMHgxODgKKyNkZWZpbmUgR1JMX0NIX1NX
QVAJCTB4MTk4CisjZGVmaW5lIExSX1NXQVAJCQkJQklUKDApCisjZGVmaW5lIExGRV9DQ19TV0FQ
CQkJQklUKDEpCisjZGVmaW5lIExTUlNfU1dBUAkJCUJJVCgyKQorI2RlZmluZSBSTFNfUlJTX1NX
QVAJCQlCSVQoMykKKyNkZWZpbmUgTFJfU1RBVFVTX1NXQVAJCQlCSVQoNCkKKyNkZWZpbmUgR1JM
X0kyU19DX1NUQTAJCTB4MTQwCisjZGVmaW5lIEdSTF9JMlNfQ19TVEExCQkweDE0NAorI2RlZmlu
ZSBHUkxfSTJTX0NfU1RBMgkJMHgxNDgKKyNkZWZpbmUgR1JMX0kyU19DX1NUQTMJCTB4MTRDCisj
ZGVmaW5lIEdSTF9JMlNfQ19TVEE0CQkweDE1MAorI2RlZmluZSBHUkxfSTJTX1VWCQkweDE1NAor
I2RlZmluZSBHUkxfQUNQX0lTUkNfQ1RSTAkweDE1OAorI2RlZmluZSBWU19FTgkJCQlCSVQoMCkK
KyNkZWZpbmUgQUNQX0VOCQkJCUJJVCgxKQorI2RlZmluZSBJU1JDMV9FTgkJCUJJVCgyKQorI2Rl
ZmluZSBJU1JDMl9FTgkJCUJJVCgzKQorI2RlZmluZSBHQU1VVF9FTgkJCUJJVCg0KQorI2RlZmlu
ZSBHUkxfQ1RTX0NUUkwJCTB4MTYwCisjZGVmaW5lIENUU19DVFJMX1NPRlQJCQlCSVQoMCkKKyNk
ZWZpbmUgR1JMX0lOVAkJCTB4MTQKKyNkZWZpbmUgSU5UX01ESQkJCQlCSVQoMCkKKyNkZWZpbmUg
SU5UX0hEQ1AJCQlCSVQoMSkKKyNkZWZpbmUgSU5UX0ZJRk9fTwkJCUJJVCgyKQorI2RlZmluZSBJ
TlRfRklGT19VCQkJQklUKDMpCisjZGVmaW5lIElOVF9JRk1fRVJSCQkJQklUKDQpCisjZGVmaW5l
IElOVF9JTkZfRE9ORQkJCUJJVCg1KQorI2RlZmluZSBJTlRfTkNUU19ET05FCQkJQklUKDYpCisj
ZGVmaW5lIElOVF9DVFJMX1BLVF9ET05FCQlCSVQoNykKKyNkZWZpbmUgR1JMX0lOVF9NQVNLCQkw
eDE4CisjZGVmaW5lIEdSTF9DVFJMCQkweDFDCisjZGVmaW5lIENUUkxfR0VOX0VOCQkJQklUKDIp
CisjZGVmaW5lIENUUkxfU1BEX0VOCQkJQklUKDMpCisjZGVmaW5lIENUUkxfTVBFR19FTgkJCUJJ
VCg0KQorI2RlZmluZSBDVFJMX0FVRElPX0VOCQkJQklUKDUpCisjZGVmaW5lIENUUkxfQVZJX0VO
CQkJQklUKDYpCisjZGVmaW5lIENUUkxfQVZNVVRFCQkJQklUKDcpCisjZGVmaW5lCUdSTF9TVEFU
VVMJCTB4MjAKKyNkZWZpbmUgU1RBVFVTX0hUUExHCQkJQklUKDApCisjZGVmaW5lIFNUQVRVU19Q
T1JECQkJQklUKDEpCisjZGVmaW5lIEdSTF9ESVZOCQkweDE3MAorI2RlZmluZSBOQ1RTX1dSSV9B
TllUSU1FCQlCSVQoNikKKyNkZWZpbmUgR1JMX0FVRElPX0NGRwkJMHgxN0MKKyNkZWZpbmUgQVVE
SU9fWkVSTwkJCUJJVCgwKQorI2RlZmluZSBISUdIX0JJVF9SQVRFCQkJQklUKDEpCisjZGVmaW5l
IFNBQ0RfRFNUCQkJQklUKDIpCisjZGVmaW5lIERTVF9OT1JNQUxfRE9VQkxFCQlCSVQoMykKKyNk
ZWZpbmUgRFNEX0lOVgkJCQlCSVQoNCkKKyNkZWZpbmUgTFJfSU5WCQkJCUJJVCg1KQorI2RlZmlu
ZSBMUl9NSVgJCQkJQklUKDYpCisjZGVmaW5lIFNBQ0RfU0VMCQkJQklUKDcpCisjZGVmaW5lIEdS
TF9OQ1RTCQkweDE4NAorI2RlZmluZSBHUkxfQ0hfU1cwCQkweDE4QworI2RlZmluZSBHUkxfQ0hf
U1cxCQkweDE5MAorI2RlZmluZSBHUkxfQ0hfU1cyCQkweDE5NAorI2RlZmluZSBHUkxfSU5GT0ZS
TV9WRVIJCTB4MTlDCisjZGVmaW5lIEdSTF9JTkZPRlJNX1RZUEUJMHgxQTAKKyNkZWZpbmUgR1JM
X0lORk9GUk1fTE5HCQkweDFBNAorI2RlZmluZSBHUkxfTUlYX0NUUkwJCTB4MUI0CisjZGVmaW5l
IE1JWF9DVFJMX1NSQ19FTgkJCUJJVCgwKQorI2RlZmluZSBCWVBBU1NfVk9MVU1FCQkJQklUKDEp
CisjZGVmaW5lIE1JWF9DVFJMX0ZMQVQJCQlCSVQoNykKKyNkZWZpbmUgR1JMX0FPVVRfQk5VTV9T
RUwJMHgxQzQKKyNkZWZpbmUgQU9VVF8yNEJJVAkJCTB4MDAKKyNkZWZpbmUgQU9VVF8yMEJJVAkJ
CTB4MDIKKyNkZWZpbmUgQU9VVF8xNkJJVAkJCTB4MDMKKyNkZWZpbmUgSElHSF9CSVRfUkFURV9Q
QUNLRVRfQUxJR04JKDB4MyA8PCA2KQorI2RlZmluZSBHUkxfU0hJRlRfTDEJCTB4MUMwCisjZGVm
aW5lIEdSTF9TSElGVF9SMgkJMHgxQjAKKyNkZWZpbmUgQVVESU9fUEFDS0VUX09GRgkJQklUKDYp
CisjZGVmaW5lIEdSTF9DRkcwCQkweDI0CisjZGVmaW5lIENGRzBfSTJTX01PREVfUlRKCQkweDEK
KyNkZWZpbmUgQ0ZHMF9JMlNfTU9ERV9MVEoJCTB4MAorI2RlZmluZSBDRkcwX0kyU19NT0RFX0ky
UwkJMHgyCisjZGVmaW5lIENGRzBfSTJTX01PREVfMjRCSVQJCTB4MDAKKyNkZWZpbmUgQ0ZHMF9J
MlNfTU9ERV8xNkJJVAkJMHgxMAorI2RlZmluZSBHUkxfQ0ZHMQkJMHgyOAorI2RlZmluZSBDRkcx
X0VER19TRUwJCQlCSVQoMCkKKyNkZWZpbmUgQ0ZHMV9TUERJRgkJCUJJVCgxKQorI2RlZmluZSBD
RkcxX0RWSQkJCUJJVCgyKQorI2RlZmluZSBDRkcxX0hEQ1BfREVCVUcJCQlCSVQoMykKKyNkZWZp
bmUgR1JMX0NGRzIJCTB4MmMKKyNkZWZpbmUgQ0ZHMl9OT1RJQ0VfRU4JCQlCSVQoNikKKyNkZWZp
bmUgTUhMX0RFX1NFTAkJCUJJVCgzKQorI2RlZmluZSBHUkxfQ0ZHMwkJMHgzMAorI2RlZmluZSBD
RkczX0FFU19LRVlfSU5ERVhfTUFTSwkJMHgzZgorI2RlZmluZSBDRkczX0NPTlRST0xfUEFDS0VU
X0RFTEFZCUJJVCg2KQorI2RlZmluZSBDRkczX0tTVl9MT0FEX1NUQVJUCQlCSVQoNykKKyNkZWZp
bmUgR1JMX0NGRzQJCTB4MzQKKyNkZWZpbmUgQ0ZHNF9BRVNfS0VZX0xPQUQJCUJJVCg0KQorI2Rl
ZmluZSBDRkc0X0FWX1VOTVVURV9FTgkJQklUKDUpCisjZGVmaW5lIENGRzRfQVZfVU5NVVRFX1NF
VAkJQklUKDYpCisjZGVmaW5lIENGR19NSExfTU9ERQkJCUJJVCg3KQorI2RlZmluZSBHUkxfQ0ZH
NQkJMHgzOAorI2RlZmluZSBDRkc1X0NEX1JBVElPX01BU0sJMHg4RgorI2RlZmluZSBDRkc1X0ZT
MTI4CQkJKDB4MSA8PCA0KQorI2RlZmluZSBDRkc1X0ZTMjU2CQkJKDB4MiA8PCA0KQorI2RlZmlu
ZSBDRkc1X0ZTMzg0CQkJKDB4MyA8PCA0KQorI2RlZmluZSBDRkc1X0ZTNTEyCQkJKDB4NCA8PCA0
KQorI2RlZmluZSBDRkc1X0ZTNzY4CQkJKDB4NiA8PCA0KQorI2RlZmluZSBEVU1NWV8zMDQJCTB4
MzA0CisjZGVmaW5lIENITU9fU0VMCQkJKDB4Mzw8MikKKyNkZWZpbmUgQ0hNMV9TRUwJCQkoMHgz
PDw0KQorI2RlZmluZSBDSE0yX1NFTAkJCSgweDM8PDYpCisjZGVmaW5lIEFVRElPX0kyU19OQ1RT
X1NFTAkJQklUKDEpCisjZGVmaW5lIEFVRElPX0kyU19OQ1RTX1NFTF82NAkJKDE8PDEpCisjZGVm
aW5lIEFVRElPX0kyU19OQ1RTX1NFTF8xMjgJCSgwPDwxKQorI2RlZmluZSBORVdfR0NQX0NUUkwJ
CQlCSVQoMCkKKyNkZWZpbmUgTkVXX0dDUF9DVFJMX01FUkdFCQlCSVQoMCkKKyNkZWZpbmUgR1JM
X0xfU1RBVFVTXzAJCTB4MjAwCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xCQkweDIwNAorI2RlZmlu
ZSBHUkxfTF9TVEFUVVNfMgkJMHgyMDgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzMJCTB4MjBjCisj
ZGVmaW5lIEdSTF9MX1NUQVRVU180CQkweDIxMAorI2RlZmluZSBHUkxfTF9TVEFUVVNfNQkJMHgy
MTQKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzYJCTB4MjE4CisjZGVmaW5lIEdSTF9MX1NUQVRVU183
CQkweDIxYworI2RlZmluZSBHUkxfTF9TVEFUVVNfOAkJMHgyMjAKKyNkZWZpbmUgR1JMX0xfU1RB
VFVTXzkJCTB4MjI0CisjZGVmaW5lIEdSTF9MX1NUQVRVU18xMAkJMHgyMjgKKyNkZWZpbmUgR1JM
X0xfU1RBVFVTXzExCQkweDIyYworI2RlZmluZSBHUkxfTF9TVEFUVVNfMTIJCTB4MjMwCisjZGVm
aW5lIEdSTF9MX1NUQVRVU18xMwkJMHgyMzQKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzE0CQkweDIz
OAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMTUJCTB4MjNjCisjZGVmaW5lIEdSTF9MX1NUQVRVU18x
NgkJMHgyNDAKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzE3CQkweDI0NAorI2RlZmluZSBHUkxfTF9T
VEFUVVNfMTgJCTB4MjQ4CisjZGVmaW5lIEdSTF9MX1NUQVRVU18xOQkJMHgyNGMKKyNkZWZpbmUg
R1JMX0xfU1RBVFVTXzIwCQkweDI1MAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMjEJCTB4MjU0Cisj
ZGVmaW5lIEdSTF9MX1NUQVRVU18yMgkJMHgyNTgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzIzCQkw
eDI1YworI2RlZmluZSBHUkxfUl9TVEFUVVNfMAkJMHgyNjAKKyNkZWZpbmUgR1JMX1JfU1RBVFVT
XzEJCTB4MjY0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18yCQkweDI2OAorI2RlZmluZSBHUkxfUl9T
VEFUVVNfMwkJMHgyNmMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzQJCTB4MjcwCisjZGVmaW5lIEdS
TF9SX1NUQVRVU181CQkweDI3NAorI2RlZmluZSBHUkxfUl9TVEFUVVNfNgkJMHgyNzgKKyNkZWZp
bmUgR1JMX1JfU1RBVFVTXzcJCTB4MjdjCisjZGVmaW5lIEdSTF9SX1NUQVRVU184CQkweDI4MAor
I2RlZmluZSBHUkxfUl9TVEFUVVNfOQkJMHgyODQKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzEwCQkw
eDI4OAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTEJCTB4MjhjCisjZGVmaW5lIEdSTF9SX1NUQVRV
U18xMgkJMHgyOTAKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzEzCQkweDI5NAorI2RlZmluZSBHUkxf
Ul9TVEFUVVNfMTQJCTB4Mjk4CisjZGVmaW5lIEdSTF9SX1NUQVRVU18xNQkJMHgyOWMKKyNkZWZp
bmUgR1JMX1JfU1RBVFVTXzE2CQkweDJhMAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTcJCTB4MmE0
CisjZGVmaW5lIEdSTF9SX1NUQVRVU18xOAkJMHgyYTgKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzE5
CQkweDJhYworI2RlZmluZSBHUkxfUl9TVEFUVVNfMjAJCTB4MmIwCisjZGVmaW5lIEdSTF9SX1NU
QVRVU18yMQkJMHgyYjQKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzIyCQkweDJiOAorI2RlZmluZSBH
UkxfUl9TVEFUVVNfMjMJCTB4MmJjCisjZGVmaW5lIEdSTF9BQklTVF9DVFJMMAkJMHgyRDQKKyNk
ZWZpbmUgR1JMX0FCSVNUX0NUUkwxCQkweDJEOAorI2RlZmluZSBBQklTVF9FTgkJCUJJVCg3KQor
I2RlZmluZSBBQklTVF9EQVRBX0ZNVAkJCSgweDcgPDwgMCkKKyNkZWZpbmUgVklERU9fQ0ZHXzAJ
CTB4MzgwCisjZGVmaW5lIFZJREVPX0NGR18xCQkweDM4NAorI2RlZmluZSBWSURFT19DRkdfMgkJ
MHgzODgKKyNkZWZpbmUgVklERU9fQ0ZHXzMJCTB4MzhjCisjZGVmaW5lIFZJREVPX0NGR180CQkw
eDM5MAorI2RlZmluZSBWSURFT19TT1VSQ0VfU0VMCQlCSVQoNykKKyNkZWZpbmUgTk9STUFMX1BB
VEgJCQkoMSA8PCA3KQorI2RlZmluZSBHRU5fUkdCCQkJCSgwIDw8IDcpCisKKyNkZWZpbmUgSERN
SV9TWVNfQ0ZHMUMJCTB4MDAwCisjZGVmaW5lIEhETUlfT04JCQkJQklUKDApCisjZGVmaW5lIEhE
TUlfUlNUCQkJQklUKDEpCisjZGVmaW5lIEFOTEdfT04JCQkJQklUKDIpCisjZGVmaW5lIENGRzEw
X0RWSQkJCUJJVCgzKQorI2RlZmluZSBIRE1JX1RTVAkJCUJJVCgzKQorI2RlZmluZSBTWVNfS0VZ
TUFTSzEJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBTWVNfS0VZTUFTSzIJCQkoMHhmZiA8PCAxNikK
KyNkZWZpbmUgQVVEX09VVFNZTkNfRU4JCQlCSVQoMjQpCisjZGVmaW5lIEFVRF9PVVRTWU5DX1BS
RV9FTgkJQklUKDI1KQorI2RlZmluZSBJMkNNX09OCQkJCUJJVCgyNikKKyNkZWZpbmUgRTJQUk9N
X1RZUEVfOEJJVAkJQklUKDI3KQorI2RlZmluZSBNQ01fRTJQUk9NX09OCQkJQklUKDI4KQorI2Rl
ZmluZSBFWFRfRTJQUk9NX09OCQkJQklUKDI5KQorI2RlZmluZSBIVFBMR19QSU5fU0VMX09GRgkJ
QklUKDMwKQorI2RlZmluZSBBRVNfRUZVU0VfRU5BQkxFCQlCSVQoMzEpCisjZGVmaW5lIEhETUlf
U1lTX0NGRzIwCQkweDAwNAorI2RlZmluZSBERUVQX0NPTE9SX01PREVfTUFTSwkJKDMgPDwgMSkK
KyNkZWZpbmUgQ09MT1JfOEJJVF9NT0RFCQkJKDAgPDwgMSkKKyNkZWZpbmUgQ09MT1JfMTBCSVRf
TU9ERQkJKDEgPDwgMSkKKyNkZWZpbmUgQ09MT1JfMTJCSVRfTU9ERQkJKDIgPDwgMSkKKyNkZWZp
bmUgQ09MT1JfMTZCSVRfTU9ERQkJKDMgPDwgMSkKKyNkZWZpbmUgREVFUF9DT0xPUl9FTgkJCUJJ
VCgwKQorI2RlZmluZSBIRE1JX0FVRElPX1RFU1RfU0VMCQlCSVQoOCkKKyNkZWZpbmUgSERNSTJQ
MF9FTgkJCUJJVCgxMSkKKyNkZWZpbmUgSERNSV9PVVRfRklGT19FTgkJQklUKDE2KQorI2RlZmlu
ZSBIRE1JX09VVF9GSUZPX0NMS19JTlYJCUJJVCgxNykKKyNkZWZpbmUgTUhMX01PREVfT04JCQlC
SVQoMjgpCisjZGVmaW5lIE1ITF9QUF9NT0RFCQkJQklUKDI5KQorI2RlZmluZSBNSExfU1lOQ19B
VVRPX0VOCQlCSVQoMzApCisjZGVmaW5lIEhETUlfUENMS19GUkVFX1JVTgkJQklUKDMxKQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL21lZGlhdGVrL210a19oZG1pX2F1ZGlvLmgg
Yi9pbmNsdWRlL2RybS9tZWRpYXRlay9tdGtfaGRtaV9hdWRpby5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmRhM2UxNWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2Ry
bS9tZWRpYXRlay9tdGtfaGRtaV9hdWRpby5oCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFp
dUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dy
YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICovCisjaWZuZGVmIF9NVEtfSERNSV9BVURJT19ICisjZGVmaW5lIF9NVEtfSERN
SV9BVURJT19ICisKKyNpbmNsdWRlIDxsaW51eC9oZG1pLmg+CitlbnVtIGhkbWlfYXVkX2lucHV0
X3R5cGUgeworCUhETUlfQVVEX0lOUFVUX0kyUyA9IDAsCisJSERNSV9BVURfSU5QVVRfU1BESUYs
Cit9OworCitlbnVtIGhkbWlfYXVkX2kyc19mbXQgeworCUhETUlfSTJTX01PREVfUkpUXzI0QklU
ID0gMCwKKwlIRE1JX0kyU19NT0RFX1JKVF8xNkJJVCwKKwlIRE1JX0kyU19NT0RFX0xKVF8yNEJJ
VCwKKwlIRE1JX0kyU19NT0RFX0xKVF8xNkJJVCwKKwlIRE1JX0kyU19NT0RFX0kyU18yNEJJVCwK
KwlIRE1JX0kyU19NT0RFX0kyU18xNkJJVAorfTsKKworZW51bSBoZG1pX2F1ZF9tY2xrIHsKKwlI
RE1JX0FVRF9NQ0xLXzEyOEZTLAorCUhETUlfQVVEX01DTEtfMTkyRlMsCisJSERNSV9BVURfTUNM
S18yNTZGUywKKwlIRE1JX0FVRF9NQ0xLXzM4NEZTLAorCUhETUlfQVVEX01DTEtfNTEyRlMsCisJ
SERNSV9BVURfTUNMS183NjhGUywKKwlIRE1JX0FVRF9NQ0xLXzExNTJGUywKK307CisKK2VudW0g
aGRtaV9hdWRfaWVjX2ZyYW1lX3JhdGUgeworCUhETUlfSUVDXzMySyA9IDAsCisJSERNSV9JRUNf
OTZLLAorCUhETUlfSUVDXzE5MkssCisJSERNSV9JRUNfNzY4SywKKwlIRE1JX0lFQ180NEssCisJ
SERNSV9JRUNfODhLLAorCUhETUlfSUVDXzE3NkssCisJSERNSV9JRUNfNzA1SywKKwlIRE1JX0lF
Q18xNkssCisJSERNSV9JRUNfMjJLLAorCUhETUlfSUVDXzI0SywKKwlIRE1JX0lFQ180OEssCit9
OworCitlbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSB7CisJSERNSV9BVURfQ0hBTl9UWVBFXzFf
MCA9IDAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzFfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfMl8w
LAorCUhETUlfQVVEX0NIQU5fVFlQRV8yXzEsCisJSERNSV9BVURfQ0hBTl9UWVBFXzNfMCwKKwlI
RE1JX0FVRF9DSEFOX1RZUEVfM18xLAorCUhETUlfQVVEX0NIQU5fVFlQRV80XzAsCisJSERNSV9B
VURfQ0hBTl9UWVBFXzRfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNV8wLAorCUhETUlfQVVEX0NI
QU5fVFlQRV81XzEsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMCwKKwlIRE1JX0FVRF9DSEFOX1RZ
UEVfNl8xLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdf
MSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18wX0xSUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18x
X0xSUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNF8wX0NMUlMsCisJSERNSV9BVURfQ0hBTl9UWVBF
XzRfMV9DTFJTLAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ1MsCisJSERNSV9BVURfQ0hBTl9U
WVBFXzZfMV9DSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX09ILAorCUhETUlfQVVEX0NIQU5f
VFlQRV82XzFfQ0hSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfTEhfUkgsCisJSERNSV9BVURf
Q0hBTl9UWVBFXzdfMV9MU1JfUlNSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfTENfUkMsCisJ
SERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MV19SVywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xT
RF9SU0QsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU1NfUlNTLAorCUhETUlfQVVEX0NIQU5f
VFlQRV83XzFfTEhTX1JIUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NTX0NILAorCUhETUlf
QVVEX0NIQU5fVFlQRV83XzFfQ1NfT0gsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19DSFIs
CisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DSF9PSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18x
X0NIX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX09IX0NIUiwKKwlIRE1JX0FVRF9DSEFO
X1RZUEVfN18xX0xTU19SU1NfTFNSX1JTUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NTLAor
CUhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ0gsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMF9PSCwK
KwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xI
X1JILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfTFNSX1JTUiwKKwlIRE1JX0FVRF9DSEFOX1RZ
UEVfN18wX0xDX1JDLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfTFdfUlcsCisJSERNSV9BVURf
Q0hBTl9UWVBFXzdfMF9MU0RfUlNELAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfTFNTX1JTUywK
KwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xIU19SSFMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdf
MF9DU19DSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX09ILAorCUhETUlfQVVEX0NIQU5f
VFlQRV83XzBfQ1NfQ0hSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ0hfT0gsCisJSERNSV9B
VURfQ0hBTl9UWVBFXzdfMF9DSF9DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9PSF9DSFIs
CisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1NfUlNTX0xTUl9SU1IsCisJSERNSV9BVURfQ0hB
Tl9UWVBFXzhfMF9MSF9SSF9DUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfVU5LTk9XTiA9IDB4RkYK
K307CisKK2VudW0gaGRtaV9hdWRfY2hhbm5lbF9zd2FwX3R5cGUgeworCUhETUlfQVVEX1NXQVBf
TFIsCisJSERNSV9BVURfU1dBUF9MRkVfQ0MsCisJSERNSV9BVURfU1dBUF9MU1JTLAorCUhETUlf
QVVEX1NXQVBfUkxTX1JSUywKKwlIRE1JX0FVRF9TV0FQX0xSX1NUQVRVUywKK307CisKK3N0cnVj
dCBoZG1pX2F1ZGlvX3BhcmFtIHsKKwllbnVtIGhkbWlfYXVkaW9fY29kaW5nX3R5cGUgYXVkX2Nv
ZGVjOworCWVudW0gaGRtaV9hdWRpb19zYW1wbGVfZnJlcXVlbmN5IGF1ZF9oZG1pX2ZzOworCWVu
dW0gaGRtaV9hdWRpb19zYW1wbGVfc2l6ZSBhdWRfc2FtcGVfc2l6ZTsKKwllbnVtIGhkbWlfYXVk
X2lucHV0X3R5cGUgYXVkX2lucHV0X3R5cGU7CisJZW51bSBoZG1pX2F1ZF9pMnNfZm10IGF1ZF9p
MnNfZm10OworCWVudW0gaGRtaV9hdWRfbWNsayBhdWRfbWNsazsKKwllbnVtIGhkbWlfYXVkX2ll
Y19mcmFtZV9yYXRlIGllY19mcmFtZV9mczsKKwllbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBh
dWRfaW5wdXRfY2hhbl90eXBlOworCXU4IGhkbWlfbF9jaGFubmVsX3N0YXRlWzZdOworCXU4IGhk
bWlfcl9jaGFubmVsX3N0YXRlWzZdOworfTsKKworI2VuZGlmIC8qIF9NVEtfSERNSV9BVURJT19I
ICovCi0tIAoyLjYuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au
b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2
ZWwK