From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v10 06/13] drm/mediatek: Add HDMI support
Date: Wed, 3 Feb 2016 20:25:55 +0100
Message-ID: <1454527562-28154-7-git-send-email-p.zabel@pengutronix.de>
References: <1454527562-28154-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: <1454527562-28154-1-git-send-email-p.zabel@pengutronix.de>
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: dri-devel-bounces@lists.freedesktop.org
Sender: "dri-devel"
To: dri-devel@lists.freedesktop.org
Cc: Mark Rutland , Michael Turquette , Jie Qiu , Cawa Cheng , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Stephen Boyd , Tomasz Figa , Kumar Gala
List-Id: linux-mediatek@lists.infradead.org
RnJvbTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CgpUaGlzIHBhdGNoIGFkZHMgZHJp
dmVycyBmb3IgdGhlIEhETUkgYnJpZGdlIGNvbm5lY3RlZCB0byB0aGUgRFBJMApkaXNwbGF5IHN1
YnN5c3RlbSBmdW5jdGlvbiBibG9jaywgZm9yIHRoZSBIRE1JIEREQyBibG9jaywgYW5kIGZvcgp0
aGUgSERNSSBQSFkgdG8gc3VwcG9ydCBIRE1JIG91dHB1dC4KClNpZ25lZC1vZmYtYnk6IEppZSBR
aXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgpTaWduZWQtb2ZmLWJ5OiBQaGlsaXBwIFphYmVsIDxw
LnphYmVsQHBlbmd1dHJvbml4LmRlPgotLS0KQ2hhbmdlcyBzaW5jZSB2OToKIC0gZml4IG5vIHNp
Z25hbCBhZnRlciBzdXNwZW5kL3Jlc3VtZSBpc3N1ZQogLSBmaXggbm8gYXVkaW8gb3V0cHV0IGZy
b20gZXh0ZXJuYWwgZGlzcGxheSBpc3N1ZQogLSByZW1vdmUgZmx0X25fNXYgZ3BpbyBhbmQgaXJx
Ci0tLQogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgICAgICAgICAgICAgICB8ICAg
NyArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICA5
ICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmMgICAgICAgICAgICAgfCAyNDUg
KysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMuaCAgICAgICAgICAg
ICB8ICAyNSArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyAgICAgICAg
IHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2hkbWlfZHJ2LmMgICAg
fCA1NzkgKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210
a19oZG1pLmMgICAgICAgICAgICB8IDQ3OSArKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oICAgICAgICAgICAgfCAyMjEgKysrKysrKysrCiBkcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfZGRjX2Rydi5jICAgIHwgMzYyICsrKysrKysr
KysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcuYyAgICAgICAgIHwg
NjUyICsrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfaGRtaV9ody5oICAgICAgICAgfCAgNzMgKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2hkbWlfcmVncy5oICAgICAgIHwgMjIxICsrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19tdDgxNzNfaGRtaV9waHkuYyB8IDUwNSArKysrKysrKysrKysrKysrKysrCiAx
MyBmaWxlcyBjaGFuZ2VkLCAzMzc5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2hkbWlfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0
IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2RkY19kcnYuYwogY3JlYXRlIG1vZGUg
MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9ody5jCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2h3LmgKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oCiBjcmVh
dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19tdDgxNzNfaGRtaV9w
aHkuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnIGIvZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKaW5kZXggYjdlMDQwNC4uODI5YWI2NiAxMDA2
NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKKysrIGIvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL0tjb25maWcKQEAgLTEzLDMgKzEzLDEwIEBAIGNvbmZpZyBEUk1fTUVE
SUFURUsKIAkgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWVkaWF0ZWstZHJtCiAJICBUaGlz
IGRyaXZlciBwcm92aWRlcyBrZXJuZWwgbW9kZSBzZXR0aW5nIGFuZAogCSAgYnVmZmVyIG1hbmFn
ZW1lbnQgdG8gdXNlcnNwYWNlLgorCitjb25maWcgRFJNX01FRElBVEVLX0hETUkKKwl0cmlzdGF0
ZSAiRFJNIEhETUkgU3VwcG9ydCBmb3IgTWVkaWF0ZWsgU29DcyIKKwlkZXBlbmRzIG9uIERSTV9N
RURJQVRFSworCXNlbGVjdCBHRU5FUklDX1BIWQorCWhlbHAKKwkgIERSTS9LTVMgSERNSSBkcml2
ZXIgZm9yIE1lZGlhdGVrIFNvQ3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQppbmRleCA1ZmNm
NThlLi42ZDUzYmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZp
bGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCkBAIC0xMiwzICsxMiwx
MiBAQCBtZWRpYXRlay1kcm0teSA6PSBtdGtfZGlzcF9vdmwubyBcCiAJCSAgbXRrX2RwaS5vCiAK
IG9iai0kKENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVrLWRybS5vCisKK21lZGlhdGVr
LWRybS1oZG1pLW9ianMgOj0gbXRrX2NlYy5vIFwKKwkJCSAgbXRrX2RybV9oZG1pX2Rydi5vIFwK
KwkJCSAgbXRrX2hkbWkubyBcCisJCQkgIG10a19oZG1pX2RkY19kcnYubyBcCisJCQkgIG10a19o
ZG1pX2h3Lm8gXAorCQkJICBtdGtfbXQ4MTczX2hkbWlfcGh5Lm8KKworb2JqLSQoQ09ORklHX0RS
TV9NRURJQVRFS19IRE1JKSArPSBtZWRpYXRlay1kcm0taGRtaS5vCmRpZmYgLS1naXQgYS9kcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19jZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmEzNjQ3Ci0t
LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMuYwpAQCAt
MCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisg
KiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Ns
ay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNp
bmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp
Y2UuaD4KKworI2luY2x1ZGUgIm10a19jZWMuaCIKKworI2RlZmluZSBUUl9DT05GSUcJCTB4MDAK
KyNkZWZpbmUgQ0xFQVJfQ0VDX0lSUQkJCUJJVCgxNSkKKworI2RlZmluZSBDRUNfQ0tHRU4JCTB4
MDQKKyNkZWZpbmUgQ0VDXzMyS19QRE4JCQlCSVQoMTkpCisjZGVmaW5lIFBETgkJCQlCSVQoMTYp
CisKKyNkZWZpbmUgUlhfRVZFTlQJCTB4NTQKKyNkZWZpbmUgSERNSV9QT1JECQkJQklUKDI1KQor
I2RlZmluZSBIRE1JX0hUUExHCQkJQklUKDI0KQorI2RlZmluZSBIRE1JX1BPUkRfSU5UX0VOCQlC
SVQoOSkKKyNkZWZpbmUgSERNSV9IVFBMR19JTlRfRU4JCUJJVCg4KQorCisjZGVmaW5lIFJYX0dF
Tl9XRAkJMHg1OAorI2RlZmluZSBIRE1JX1BPUkRfSU5UXzMyS19TVEFUVVMJQklUKDI2KQorI2Rl
ZmluZSBSWF9SSVNDX0lOVF8zMktfU1RBVFVTCQlCSVQoMjUpCisjZGVmaW5lIEhETUlfSFRQTEdf
SU5UXzMyS19TVEFUVVMJQklUKDI0KQorI2RlZmluZSBIRE1JX1BPUkRfSU5UXzMyS19DTFIJCUJJ
VCgxOCkKKyNkZWZpbmUgUlhfSU5UXzMyS19DTFIJCQlCSVQoMTcpCisjZGVmaW5lIEhETUlfSFRQ
TEdfSU5UXzMyS19DTFIJCUJJVCgxNikKKyNkZWZpbmUgSERNSV9QT1JEX0lOVF8zMktfU1RBX01B
U0sJQklUKDEwKQorI2RlZmluZSBSWF9SSVNDX0lOVF8zMktfU1RBX01BU0sJQklUKDkpCisjZGVm
aW5lIEhETUlfSFRQTEdfSU5UXzMyS19TVEFfTUFTSwlCSVQoOCkKKyNkZWZpbmUgSERNSV9QT1JE
X0lOVF8zMktfRU4JCUJJVCgyKQorI2RlZmluZSBSWF9JTlRfMzJLX0VOCQkJQklUKDEpCisjZGVm
aW5lIEhETUlfSFRQTEdfSU5UXzMyS19FTgkJQklUKDApCisKKyNkZWZpbmUgTk9STUFMX0lOVF9D
VFJMCQkweDVDCisjZGVmaW5lIEhETUlfSFRQTEdfSU5UX1NUQQkJQklUKDApCisjZGVmaW5lIEhE
TUlfUE9SRF9JTlRfU1RBCQlCSVQoMSkKKyNkZWZpbmUgSERNSV9IVFBMR19JTlRfQ0xSCQlCSVQo
MTYpCisjZGVmaW5lIEhETUlfUE9SRF9JTlRfQ0xSCQlCSVQoMTcpCisjZGVmaW5lIEhETUlfRlVM
TF9JTlRfQ0xSCQlCSVQoMjApCisKK3N0cnVjdCBtdGtfY2VjIHsKKwl2b2lkIF9faW9tZW0gKnJl
Z3M7CisJc3RydWN0IGNsayAqY2xrOworCWludCBpcnE7CisJYm9vbCBocGQ7CisJdm9pZCAoKmhw
ZF9ldmVudCkoYm9vbCBocGQsIHN0cnVjdCBkZXZpY2UgKmRldik7CisJc3RydWN0IGRldmljZSAq
aGRtaV9kZXY7Cit9OworCitzdGF0aWMgdm9pZCBtdGtfY2VjX21hc2soc3RydWN0IG10a19jZWMg
KmNlYywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSB1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25l
ZCBpbnQgbWFzaykKK3sKKwl1MzIgdG1wID0gcmVhZGwoY2VjLT5yZWdzICsgb2Zmc2V0KSAmIH5t
YXNrOworCisJdG1wIHw9IHZhbCAmIG1hc2s7CisJd3JpdGVsKHZhbCwgY2VjLT5yZWdzICsgb2Zm
c2V0KTsKK30KKwordm9pZCBtdGtfY2VjX3NldF9ocGRfZXZlbnQoc3RydWN0IGRldmljZSAqZGV2
LAorCQkJICAgdm9pZCAoKmhwZF9ldmVudCkoYm9vbCBocGQsIHN0cnVjdCBkZXZpY2UgKmRldiks
CisJCQkgICBzdHJ1Y3QgZGV2aWNlICpoZG1pX2RldikKK3sKKwlzdHJ1Y3QgbXRrX2NlYyAqY2Vj
ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwljZWMtPmhkbWlfZGV2ID0gaGRtaV9kZXY7CisJ
Y2VjLT5ocGRfZXZlbnQgPSBocGRfZXZlbnQ7Cit9CisKK2Jvb2wgbXRrX2NlY19ocGRfaGlnaChz
dHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19jZWMgKmNlYyA9IGRldl9nZXRfZHJ2
ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlzdGF0dXMgPSByZWFkbChjZWMt
PnJlZ3MgKyBSWF9FVkVOVCk7CisKKwlyZXR1cm4gKHN0YXR1cyAmIChIRE1JX1BPUkQgfCBIRE1J
X0hUUExHKSkgPT0gKEhETUlfUE9SRCB8IEhETUlfSFRQTEcpOworfQorCitpbnQgbXRrX2NlY19p
cnEoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfY2VjICpjZWMgPSBkZXZfZ2V0
X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBjZWMtPmlycTsKK30KKworc3RhdGljIHZvaWQgbXRr
X2NlY19odHBsZ19pcnFfZW5hYmxlKHN0cnVjdCBtdGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19t
YXNrKGNlYywgQ0VDX0NLR0VOLCAwLCBQRE4pOworCW10a19jZWNfbWFzayhjZWMsIENFQ19DS0dF
TiwgQ0VDXzMyS19QRE4sIENFQ18zMktfUEROKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5f
V0QsIEhETUlfUE9SRF9JTlRfMzJLX0NMUiwKKwkJICAgICBIRE1JX1BPUkRfSU5UXzMyS19DTFIp
OworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgUlhfSU5UXzMyS19DTFIsIFJYX0lOVF8z
MktfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIEhETUlfSFRQTEdfSU5UXzMy
S19DTFIsCisJCSAgICAgSERNSV9IVFBMR19JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNl
YywgUlhfR0VOX1dELCAwLCBIRE1JX1BPUkRfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhj
ZWMsIFJYX0dFTl9XRCwgMCwgUlhfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJY
X0dFTl9XRCwgMCwgSERNSV9IVFBMR19JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywg
UlhfR0VOX1dELCAwLCBIRE1JX1BPUkRfSU5UXzMyS19FTik7CisJbXRrX2NlY19tYXNrKGNlYywg
UlhfR0VOX1dELCAwLCBSWF9JTlRfMzJLX0VOKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5f
V0QsIDAsIEhETUlfSFRQTEdfSU5UXzMyS19FTik7CisKKwltdGtfY2VjX21hc2soY2VjLCBSWF9F
VkVOVCwgSERNSV9QT1JEX0lOVF9FTiwgSERNSV9QT1JEX0lOVF9FTik7CisJbXRrX2NlY19tYXNr
KGNlYywgUlhfRVZFTlQsIEhETUlfSFRQTEdfSU5UX0VOLCBIRE1JX0hUUExHX0lOVF9FTik7Cit9
CisKK3N0YXRpYyB2b2lkIG10a19jZWNfaHRwbGdfaXJxX2Rpc2FibGUoc3RydWN0IG10a19jZWMg
KmNlYykKK3sKKwltdGtfY2VjX21hc2soY2VjLCBSWF9FVkVOVCwgMCwgSERNSV9QT1JEX0lOVF9F
Tik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfRVZFTlQsIDAsIEhETUlfSFRQTEdfSU5UX0VOKTsK
K30KKworc3RhdGljIHZvaWQgbXRrX2NlY19jbGVhcl9odHBsZ19pcnEoc3RydWN0IG10a19jZWMg
KmNlYykKK3sKKwltdGtfY2VjX21hc2soY2VjLCBUUl9DT05GSUcsIENMRUFSX0NFQ19JUlEsIENM
RUFSX0NFQ19JUlEpOworCW10a19jZWNfbWFzayhjZWMsIE5PUk1BTF9JTlRfQ1RSTCwgSERNSV9I
VFBMR19JTlRfQ0xSLAorCQkgICAgIEhETUlfSFRQTEdfSU5UX0NMUik7CisJbXRrX2NlY19tYXNr
KGNlYywgTk9STUFMX0lOVF9DVFJMLCBIRE1JX1BPUkRfSU5UX0NMUiwKKwkJICAgICBIRE1JX1BP
UkRfSU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgTk9STUFMX0lOVF9DVFJMLCBIRE1JX0ZV
TExfSU5UX0NMUiwKKwkJICAgICBIRE1JX0ZVTExfSU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNl
YywgUlhfR0VOX1dELCBIRE1JX1BPUkRfSU5UXzMyS19DTFIsCisJCSAgICAgSERNSV9QT1JEX0lO
VF8zMktfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIFJYX0lOVF8zMktfQ0xS
LCBSWF9JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCBIRE1JX0hU
UExHX0lOVF8zMktfQ0xSLAorCQkgICAgIEhETUlfSFRQTEdfSU5UXzMyS19DTFIpOworCXVkZWxh
eSg1KTsKKwltdGtfY2VjX21hc2soY2VjLCBOT1JNQUxfSU5UX0NUUkwsIDAsIEhETUlfSFRQTEdf
SU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgTk9STUFMX0lOVF9DVFJMLCAwLCBIRE1JX1BP
UkRfSU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgVFJfQ09ORklHLCAwLCBDTEVBUl9DRUNf
SVJRKTsKKwltdGtfY2VjX21hc2soY2VjLCBOT1JNQUxfSU5UX0NUUkwsIDAsIEhETUlfRlVMTF9J
TlRfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIDAsIEhETUlfUE9SRF9JTlRf
MzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBSWF9JTlRfMzJLX0NM
Uik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBIRE1JX0hUUExHX0lOVF8zMktf
Q0xSKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG10a19jZWNfaHRwbGdfaXNyX3RocmVhZChp
bnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gYXJnOworCXN0cnVj
dCBtdGtfY2VjICpjZWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlib29sIGhwZDsKKworCW10
a19jZWNfY2xlYXJfaHRwbGdfaXJxKGNlYyk7CisJaHBkID0gbXRrX2NlY19ocGRfaGlnaChkZXYp
OworCisJaWYgKGNlYy0+aHBkICE9IGhwZCkgeworCQlkZXZfaW5mbyhkZXYsICJob3RwbHVnIGV2
ZW50ISxjdXIgaHBkID0gJWQsIGhwZCA9ICVkXG4iLAorCQkJIGNlYy0+aHBkLCBocGQpOworCQlj
ZWMtPmhwZCA9IGhwZDsKKwkJaWYgKGNlYy0+aHBkX2V2ZW50KQorCQkJY2VjLT5ocGRfZXZlbnQo
aHBkLCBjZWMtPmhkbWlfZGV2KTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0
aWMgaW50IG10a19jZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlz
dHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfY2VjICpjZWM7CisJ
c3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldDsKKworCWNlYyA9IGRldm1fa3phbGxvYyhk
ZXYsIHNpemVvZigqY2VjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZWMpCisJCXJldHVybiAtRU5P
TUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2VjKTsKKworCXJlcyA9IHBsYXRm
b3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJY2VjLT5yZWdzID0g
ZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGNlYy0+cmVncykp
IHsKKwkJcmV0ID0gUFRSX0VSUihjZWMtPnJlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0
byBpb3JlbWFwIGNlYzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY2VjLT5j
bGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGNlYy0+Y2xrKSkgewor
CQlyZXQgPSBQVFJfRVJSKGNlYy0+Y2xrKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0
IGNlYyBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY2VjLT5pcnEg
PSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChjZWMtPmlycSA8IDApIHsKKwkJZGV2
X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNlYyBpcnE6ICVkXG4iLCBjZWMtPmlycSk7CisJCXJl
dHVybiBjZWMtPmlycTsKKwl9CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRl
diwgY2VjLT5pcnEsIE5VTEwsCisJCQkJCW10a19jZWNfaHRwbGdfaXNyX3RocmVhZCwKKwkJCQkJ
SVJRRl9TSEFSRUQgfCBJUlFGX1RSSUdHRVJfTE9XIHwKKwkJCQkJSVJRRl9PTkVTSE9ULCAiaGRt
aSBocGQiLCBkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVn
aXN0ZXIgY2VjIGlycTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0g
Y2xrX3ByZXBhcmVfZW5hYmxlKGNlYy0+Y2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2
LCAiRmFpbGVkIHRvIGVuYWJsZSBjZWMgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0
OworCX0KKworCW10a19jZWNfaHRwbGdfaXJxX2VuYWJsZShjZWMpOworCisJcmV0dXJuIDA7Cit9
CisKK3N0YXRpYyBpbnQgbXRrX2NlY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl
dikKK3sKKwlzdHJ1Y3QgbXRrX2NlYyAqY2VjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7
CisKKwltdGtfY2VjX2h0cGxnX2lycV9kaXNhYmxlKGNlYyk7CisJY2xrX2Rpc2FibGVfdW5wcmVw
YXJlKGNlYy0+Y2xrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k
ZXZpY2VfaWQgbXRrX2NlY19vZl9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVr
LG10ODE3My1jZWMiLCB9LAorCXt9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19j
ZWNfZHJpdmVyID0geworCS5wcm9iZSA9IG10a19jZWNfcHJvYmUsCisJLnJlbW92ZSA9IG10a19j
ZWNfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWNlYyIsCisJCS5v
Zl9tYXRjaF90YWJsZSA9IG10a19jZWNfb2ZfaWRzLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfY2VjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2ZThmZAot
LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmgKQEAg
LTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisg
KiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTVRLX0NFQ19I
CisjZGVmaW5lIF9NVEtfQ0VDX0gKKworc3RydWN0IGRldmljZTsKKwordm9pZCBtdGtfY2VjX3Nl
dF9ocGRfZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgdm9pZCAoKmhvdHBsdWdfZXZl
bnQpKGJvb2wgaHBkLCBzdHJ1Y3QgZGV2aWNlICpkZXYpLAorCQkJICAgc3RydWN0IGRldmljZSAq
aGRtaV9kZXYpOworYm9vbCBtdGtfY2VjX2hwZF9oaWdoKHN0cnVjdCBkZXZpY2UgKmRldik7Citp
bnQgbXRrX2NlY19pcnEoc3RydWN0IGRldmljZSAqZGV2KTsKKworI2VuZGlmIC8qIF9NVEtfQ0VD
X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5j
IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKaW5kZXggYTA4MTIxYi4u
MzZmNDQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2
LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMKQEAgLTIzLDYg
KzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4
L3BtX3J1bnRpbWUuaD4KIAorI2luY2x1ZGUgIm10a19jZWMuaCIKICNpbmNsdWRlICJtdGtfZHJt
X2NydGMuaCIKICNpbmNsdWRlICJtdGtfZHJtX2RkcC5oIgogI2luY2x1ZGUgIm10a19kcm1fZGRw
X2NvbXAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2hk
bWlfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9oZG1pX2Rydi5jCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNjYxZTAKLS0tIC9kZXYvbnVsbAor
KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9oZG1pX2Rydi5jCkBAIC0wLDAg
KzEsNTc5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1
dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFt
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK
KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
dmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4K
KyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Ny
dGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2Ry
bV9lZGlkLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+
CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5o
PgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4K
KyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4K
KyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2
aWNlLmg+CisjaW5jbHVkZSAibXRrX2NlYy5oIgorI2luY2x1ZGUgIm10a19oZG1pLmgiCisjaW5j
bHVkZSAibXRrX2hkbWlfaHcuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtdGtfaGRt
aV9jbGtfbmFtZXNbTVRLX0hETUlfQ0xLX0NPVU5UXSA9IHsKKwlbTVRLX0hETUlfQ0xLX0hETUlf
UElYRUxdID0gInBpeGVsIiwKKwlbTVRLX0hETUlfQ0xLX0hETUlfUExMXSA9ICJwbGwiLAorCVtN
VEtfSERNSV9DTEtfQVVEX0JDTEtdID0gImJjbGsiLAorCVtNVEtfSERNSV9DTEtfQVVEX1NQRElG
XSA9ICJzcGRpZiIsCit9OworCitzdGF0aWMgY29uc3QgZW51bSBtdGtfaGRtaV9jbGtfaWQgbXRr
X2hkbWlfZW5hYmxlX2Nsb2Nrc1tdID0geworCU1US19IRE1JX0NMS19BVURfQkNMSywKKwlNVEtf
SERNSV9DTEtfQVVEX1NQRElGLAorfTsKKworc3RhdGljIGludCBtdGtfaGRtaV9nZXRfYWxsX2Ns
ayhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sK
KwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10a19oZG1pX2Nsa19uYW1l
cyk7IGkrKykgeworCQloZG1pLT5jbGtbaV0gPSBvZl9jbGtfZ2V0X2J5X25hbWUobnAsCisJCQkJ
CQkgIG10a19oZG1pX2Nsa19uYW1lc1tpXSk7CisJCWlmIChJU19FUlIoaGRtaS0+Y2xrW2ldKSkK
KwkJCXJldHVybiBQVFJfRVJSKGhkbWktPmNsa1tpXSk7CisJfQorCXJldHVybiAwOworfQorCitz
dGF0aWMgaW50IG10a19oZG1pX2Nsa19lbmFibGVfYXVkaW8oc3RydWN0IG10a19oZG1pICpoZG1p
KQoreworCWludCByZXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaGRtaS0+Y2xrW01U
S19IRE1JX0NMS19BVURfQkNMS10pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQg
PSBjbGtfcHJlcGFyZV9lbmFibGUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19BVURfU1BESUZdKTsK
KwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldHVybiAwOworZXJyOgorCWNsa19kaXNhYmxl
X3VucHJlcGFyZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0FVRF9CQ0xLXSk7CisJcmV0dXJuIHJl
dDsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfY2xrX2Rpc2FibGVfYXVkaW8oc3RydWN0IG10
a19oZG1pICpoZG1pKQoreworCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT5jbGtbTVRLX0hE
TUlfQ0xLX0FVRF9CQ0xLXSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPmNsa1tNVEtf
SERNSV9DTEtfQVVEX1NQRElGXSk7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3Rh
dHVzIGhkbWlfY29ubl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4sCisJCQkJCQkg
IGJvb2wgZm9yY2UpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9j
b25uKGNvbm4pOworCisJcmV0dXJuIG10a19oZG1pX2hwZF9oaWdoKGhkbWkpID8KKwkgICAgICAg
Y29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgOiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3Rl
ZDsKK30KKworc3RhdGljIHZvaWQgaGRtaV9jb25uX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0
b3IgKmNvbm4pCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9jb25u
KGNvbm4pOworCisJbXRrX2NlY19zZXRfaHBkX2V2ZW50KGhkbWktPmNlY19kZXYsIE5VTEwsIE5V
TEwpOworCisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm4pOworCWRybV9jb25uZWN0b3Jf
Y2xlYW51cChjb25uKTsKK30KKworc3RhdGljIGludCBoZG1pX2Nvbm5fc2V0X3Byb3BlcnR5KHN0
cnVjdCBkcm1fY29ubmVjdG9yICpjb25uLAorCQkJCSAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJv
cGVydHksIHVpbnQ2NF90IHZhbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtf
aGRtaV9jb25uX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubikKK3sKKwlzdHJ1
Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2Nvbm4oY29ubik7CisJc3RydWN0IGVk
aWQgKmVkaWQ7CisJaW50IHJldDsKKworCWlmICghaGRtaS0+ZGRjX2FkcHQpCisJCXJldHVybiAt
RU5PREVWOworCisJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uLCBoZG1pLT5kZGNfYWRwdCk7CisJ
aWYgKCFlZGlkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWhkbWktPmR2aV9tb2RlID0gIWRybV9k
ZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKKworCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVf
ZWRpZF9wcm9wZXJ0eShjb25uLCBlZGlkKTsKKworCXJldCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhj
b25uLCBlZGlkKTsKKwlkcm1fZWRpZF90b19lbGQoY29ubiwgZWRpZCk7CisJa2ZyZWUoZWRpZCk7
CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9jb25uX21vZGVfdmFsaWQo
c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4sCisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9t
b2RlICptb2RlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29u
bihjb25uKTsKKworCWRldl9kYmcoaGRtaS0+ZGV2LCAieHJlcz0lZCwgeXJlcz0lZCwgcmVmcmVz
aD0lZCwgaW50bD0lZCBjbG9jaz0lZFxuIiwKKwkJbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNw
bGF5LCBtb2RlLT52cmVmcmVzaCwKKwkJISEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lO
VEVSTEFDRSksIG1vZGUtPmNsb2NrICogMTAwMCk7CisKKwlpZiAoaGRtaS0+YnJpZGdlLm5leHQp
IHsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgYWRqdXN0ZWRfbW9kZTsKKworCQlkcm1fbW9k
ZV9jb3B5KCZhZGp1c3RlZF9tb2RlLCBtb2RlKTsKKwkJaWYgKCFkcm1fYnJpZGdlX21vZGVfZml4
dXAoaGRtaS0+YnJpZGdlLm5leHQsIG1vZGUsCisJCQkJCSAgICZhZGp1c3RlZF9tb2RlKSkKKwkJ
CXJldHVybiBNT0RFX0JBRDsKKwl9CisKKwlpZiAobW9kZS0+Y2xvY2sgPCAyNzAwMCkKKwkJcmV0
dXJuIE1PREVfQ0xPQ0tfTE9XOworCWlmIChtb2RlLT5jbG9jayA+IDI5NzAwMCkKKwkJcmV0dXJu
IE1PREVfQ0xPQ0tfSElHSDsKKworCXJldHVybiBkcm1fbW9kZV92YWxpZGF0ZV9zaXplKG1vZGUs
IDB4MWZmZiwgMHgxZmZmKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqbXRrX2hk
bWlfY29ubl9iZXN0X2VuYyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubikKK3sKKwlzdHJ1Y3Qg
bXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2Nvbm4oY29ubik7CisKKwlyZXR1cm4gaGRt
aS0+YnJpZGdlLmVuY29kZXI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv
cl9mdW5jcyBtdGtfaGRtaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1fYXRvbWlj
X2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gaGRtaV9jb25uX2RldGVjdCwKKwku
ZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwku
ZGVzdHJveSA9IGhkbWlfY29ubl9kZXN0cm95LAorCS5zZXRfcHJvcGVydHkgPSBoZG1pX2Nvbm5f
c2V0X3Byb3BlcnR5LAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNl
dCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rv
cl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19o
ZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0
IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzCisJCW10a19oZG1pX2Nvbm5lY3Rvcl9oZWxwZXJf
ZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IG10a19oZG1pX2Nvbm5fZ2V0X21vZGVzLAorCS5tb2Rl
X3ZhbGlkID0gbXRrX2hkbWlfY29ubl9tb2RlX3ZhbGlkLAorCS5iZXN0X2VuY29kZXIgPSBtdGtf
aGRtaV9jb25uX2Jlc3RfZW5jLAorfTsKKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHBkX2V2ZW50
KGJvb2wgaHBkLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1p
ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoaGRtaSAmJiBoZG1pLT5icmlkZ2UuZW5j
b2RlciAmJiBoZG1pLT5icmlkZ2UuZW5jb2Rlci0+ZGV2KQorCQlkcm1faGVscGVyX2hwZF9pcnFf
ZXZlbnQoaGRtaS0+YnJpZGdlLmVuY29kZXItPmRldik7Cit9CisKKy8qCisgKiBCcmlkZ2UgY2Fs
bGJhY2tzCisgKi8KKworc3RhdGljIGludCBtdGtfaGRtaV9icmlkZ2VfYXR0YWNoKHN0cnVjdCBk
cm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhf
ZnJvbV9icmlkZ2UoYnJpZGdlKTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9p
bml0KGJyaWRnZS0+ZW5jb2Rlci0+ZGV2LCAmaGRtaS0+Y29ubiwKKwkJCQkgJm10a19oZG1pX2Nv
bm5lY3Rvcl9mdW5jcywKKwkJCQkgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBKTsKKwlpZiAocmV0
KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9y
OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJf
YWRkKCZoZG1pLT5jb25uLCAmbXRrX2hkbWlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwlo
ZG1pLT5jb25uLnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7CisJaGRtaS0+Y29ubi5p
bnRlcmxhY2VfYWxsb3dlZCA9IHRydWU7CisJaGRtaS0+Y29ubi5kb3VibGVzY2FuX2FsbG93ZWQg
PSBmYWxzZTsKKworCXJldCA9IGRybV9jb25uZWN0b3JfcmVnaXN0ZXIoJmhkbWktPmNvbm4pOwor
CWlmIChyZXQpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29u
bmVjdG9yOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkcm1fbW9k
ZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJmhkbWktPmNvbm4sCisJCQkJCQlicmlkZ2UtPmVu
Y29kZXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsCisJCQkiRmFpbGVkIHRv
IGF0dGFjaCBjb25uZWN0b3IgdG8gZW5jb2RlcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7
CisJfQorCisJaWYgKGJyaWRnZS0+bmV4dCkgeworCQlicmlkZ2UtPm5leHQtPmVuY29kZXIgPSBi
cmlkZ2UtPmVuY29kZXI7CisJCXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGJyaWRnZS0+ZW5jb2Rl
ci0+ZGV2LCBicmlkZ2UtPm5leHQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGhkbWktPmRl
diwKKwkJCQkiRmFpbGVkIHRvIGF0dGFjaCBleHRlcm5hbCBicmlkZ2U6ICVkXG4iLCByZXQpOwor
CQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCW10a19jZWNfc2V0X2hwZF9ldmVudChoZG1pLT5j
ZWNfZGV2LCBtdGtfaGRtaV9ocGRfZXZlbnQsIGhkbWktPmRldik7CisKKwlyZXR1cm4gMDsKK30K
Kworc3RhdGljIGJvb2wgbXRrX2hkbWlfYnJpZGdlX21vZGVfZml4dXAoc3RydWN0IGRybV9icmlk
Z2UgKmJyaWRnZSwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v
ZGUsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQor
eworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9icmlkZ2VfZGlzYWJs
ZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9
IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7CisKKwlwaHlfcG93ZXJfb2ZmKGhkbWktPnBo
eSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfSERNSV9Q
SVhFTF0pOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0hE
TUlfUExMXSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2JyaWRnZV9wb3N0X2Rpc2FibGUo
c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBo
ZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOworCisJbXRrX2hkbWlfcG93ZXJfb2ZmKGhkbWkp
OworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9icmlkZ2VfbW9kZV9zZXQoc3RydWN0IGRybV9i
cmlkZ2UgKmJyaWRnZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAor
CQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJc3Ry
dWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsKKworCWRl
dl9kYmcoaGRtaS0+ZGV2LCAiY3VyIGluZm86IG5hbWU6JXMsIGhkaXNwbGF5OiVkXG4iLAorCQlh
ZGp1c3RlZF9tb2RlLT5uYW1lLCBhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSk7CisJZGV2X2RiZyho
ZG1pLT5kZXYsICJoc3luY19zdGFydDolZCxoc3luY19lbmQ6JWQsIGh0b3RhbDolZCIsCisJCWFk
anVzdGVkX21vZGUtPmhzeW5jX3N0YXJ0LCBhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQsCisJCWFk
anVzdGVkX21vZGUtPmh0b3RhbCk7CisJZGV2X2RiZyhoZG1pLT5kZXYsICJoc2tldzolZCwgdmRp
c3BsYXk6JWRcbiIsCisJCWFkanVzdGVkX21vZGUtPmhza2V3LCBhZGp1c3RlZF9tb2RlLT52ZGlz
cGxheSk7CisJZGV2X2RiZyhoZG1pLT5kZXYsICJ2c3luY19zdGFydDolZCwgdnN5bmNfZW5kOiVk
LCB2dG90YWw6JWQiLAorCQlhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydCwgYWRqdXN0ZWRfbW9k
ZS0+dnN5bmNfZW5kLAorCQlhZGp1c3RlZF9tb2RlLT52dG90YWwpOworCWRldl9kYmcoaGRtaS0+
ZGV2LCAidnNjYW46JWQsIGZsYWc6JWRcbiIsCisJCWFkanVzdGVkX21vZGUtPnZzY2FuLCBhZGp1
c3RlZF9tb2RlLT5mbGFncyk7CisKKwlkcm1fbW9kZV9jb3B5KCZoZG1pLT5tb2RlLCBhZGp1c3Rl
ZF9tb2RlKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfYnJpZGdlX3ByZV9lbmFibGUoc3Ry
dWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1p
X2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOworCisJbXRrX2hkbWlfcG93ZXJfb24oaGRtaSk7Cit9
CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2Ug
KmJyaWRnZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRn
ZShicmlkZ2UpOworCisJbXRrX2hkbWlfb3V0cHV0X3NldF9kaXNwbGF5X21vZGUoaGRtaSwgJmhk
bWktPm1vZGUpOworCWNsa19wcmVwYXJlX2VuYWJsZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0hE
TUlfUExMXSk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfSERN
SV9QSVhFTF0pOworCXBoeV9wb3dlcl9vbihoZG1pLT5waHkpOworfQorCitzdGF0aWMgY29uc3Qg
c3RydWN0IGRybV9icmlkZ2VfZnVuY3MgbXRrX2hkbWlfYnJpZGdlX2Z1bmNzID0geworCS5hdHRh
Y2ggPSBtdGtfaGRtaV9icmlkZ2VfYXR0YWNoLAorCS5tb2RlX2ZpeHVwID0gbXRrX2hkbWlfYnJp
ZGdlX21vZGVfZml4dXAsCisJLmRpc2FibGUgPSBtdGtfaGRtaV9icmlkZ2VfZGlzYWJsZSwKKwku
cG9zdF9kaXNhYmxlID0gbXRrX2hkbWlfYnJpZGdlX3Bvc3RfZGlzYWJsZSwKKwkubW9kZV9zZXQg
PSBtdGtfaGRtaV9icmlkZ2VfbW9kZV9zZXQsCisJLnByZV9lbmFibGUgPSBtdGtfaGRtaV9icmlk
Z2VfcHJlX2VuYWJsZSwKKwkuZW5hYmxlID0gbXRrX2hkbWlfYnJpZGdlX2VuYWJsZSwKK307CisK
K3N0YXRpYyBpbnQgbXRrX2hkbWlfZHRfcGFyc2VfcGRhdGEoc3RydWN0IG10a19oZG1pICpoZG1p
LAorCQkJCSAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmlj
ZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9u
b2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2VjX25wLCAqcG9ydCwgKmVwLCAqcmVtb3RlLCAq
aTJjX25wOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNlY19wZGV2OworCXN0cnVjdCByZWdt
YXAgKnJlZ21hcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlpbnQgcmV0OworCisJcmV0ID0g
bXRrX2hkbWlfZ2V0X2FsbF9jbGsoaGRtaSwgbnApOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihk
ZXYsICJGYWlsZWQgdG8gZ2V0IGNsb2NrczogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ
fQorCisJLyogVGhlIENFQyBtb2R1bGUgaGFuZGxlcyBIRE1JIGhvdHBsdWcgZGV0ZWN0aW9uICov
CisJY2VjX25wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAtPnBhcmVudCwgTlVMTCwKKwkJ
CQkJICJtZWRpYXRlayxtdDgxNzMtY2VjIik7CisJaWYgKCFjZWNfbnApIHsKKwkJZGV2X2Vycihk
ZXYsICJGYWlsZWQgdG8gZmluZCBDRUMgbm9kZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0K
KworCWNlY19wZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShjZWNfbnApOworCWlmICghY2Vj
X3BkZXYpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJXYWl0aW5nIGZvciBDRUMgZGV2aWNlICVz
XG4iLAorCQkJY2VjX25wLT5mdWxsX25hbWUpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9
CisJaGRtaS0+Y2VjX2RldiA9ICZjZWNfcGRldi0+ZGV2OworCisJLyoKKwkgKiBUaGUgbWVkaWF0
ZWssc3lzY29uLWhkbWkgcHJvcGVydHkgY29udGFpbnMgYSBwaGFuZGxlIGxpbmsgdG8gdGhlCisJ
ICogTU1TWVNfQ09ORklHIGRldmljZSBhbmQgdGhlIHJlZ2lzdGVyIG9mZnNldCBvZiB0aGUgSERN
SV9TWVNfQ0ZHCisJICogcmVnaXN0ZXJzIGl0IGNvbnRhaW5zLgorCSAqLworCXJlZ21hcCA9IHN5
c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUobnAsICJtZWRpYXRlayxzeXNjb24taGRtaSIp
OworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KG5wLCAibWVkaWF0ZWssc3lzY29u
LWhkbWkiLCAxLAorCQkJCQkgJmhkbWktPnN5c19vZmZzZXQpOworCWlmIChJU19FUlIocmVnbWFw
KSkKKwkJcmV0ID0gUFRSX0VSUihyZWdtYXApOworCWlmIChyZXQpIHsKKwkJcmV0ID0gUFRSX0VS
UihyZWdtYXApOworCQlkZXZfZXJyKGRldiwKKwkJCSJGYWlsZWQgdG8gZ2V0IHN5c3RlbSBjb25m
aWd1cmF0aW9uIHJlZ2lzdGVyczogJWRcbiIsCisJCQlyZXQpOworCQlyZXR1cm4gcmV0OworCX0K
KwloZG1pLT5zeXNfcmVnbWFwID0gcmVnbWFwOworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291
cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwloZG1pLT5yZWdzID0gZGV2bV9pb3JlbWFw
X3Jlc291cmNlKGRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKGhkbWktPnJlZ3MpKSB7CisJCWRldl9l
cnIoZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAgaGRtaV9zaGVsbDogJWxkXG4iLAorCQkJUFRSX0VS
UihoZG1pLT5yZWdzKSk7CisJCXJldHVybiBQVFJfRVJSKGhkbWktPnJlZ3MpOworCX0KKworCXBv
cnQgPSBvZl9ncmFwaF9nZXRfcG9ydF9ieV9pZChucCwgMSk7CisJaWYgKCFwb3J0KSB7CisJCWRl
dl9lcnIoZGV2LCAiTWlzc2luZyBvdXRwdXQgcG9ydCBub2RlXG4iKTsKKwkJcmV0dXJuIC1FSU5W
QUw7CisJfQorCisJZXAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwb3J0LCAiZW5kcG9pbnQiKTsK
KwlpZiAoIWVwKSB7CisJCWRldl9lcnIoZGV2LCAiTWlzc2luZyBlbmRwb2ludCBub2RlIGluIHBv
cnQgJXNcbiIsCisJCQlwb3J0LT5mdWxsX25hbWUpOworCQlvZl9ub2RlX3B1dChwb3J0KTsKKwkJ
cmV0dXJuIC1FSU5WQUw7CisJfQorCW9mX25vZGVfcHV0KHBvcnQpOworCisJcmVtb3RlID0gb2Zf
Z3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlcCk7CisJaWYgKCFyZW1vdGUpIHsKKwkJZGV2
X2VycihkZXYsICJNaXNzaW5nIGNvbm5lY3Rvci9icmlkZ2Ugbm9kZSBmb3IgZW5kcG9pbnQgJXNc
biIsCisJCQllcC0+ZnVsbF9uYW1lKTsKKwkJb2Zfbm9kZV9wdXQoZXApOworCQlyZXR1cm4gLUVJ
TlZBTDsKKwl9CisJb2Zfbm9kZV9wdXQoZXApOworCisJaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0
aWJsZShyZW1vdGUsICJoZG1pLWNvbm5lY3RvciIpKSB7CisJCWhkbWktPmJyaWRnZS5uZXh0ID0g
b2ZfZHJtX2ZpbmRfYnJpZGdlKHJlbW90ZSk7CisJCWlmICghaGRtaS0+YnJpZGdlLm5leHQpIHsK
KwkJCWRldl9lcnIoZGV2LCAiV2FpdGluZyBmb3IgZXh0ZXJuYWwgYnJpZGdlXG4iKTsKKwkJCW9m
X25vZGVfcHV0KHJlbW90ZSk7CisJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwkJfQorCX0KKwor
CWkyY19ucCA9IG9mX3BhcnNlX3BoYW5kbGUocmVtb3RlLCAiZGRjLWkyYy1idXMiLCAwKTsKKwlp
ZiAoIWkyY19ucCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBmaW5kIGRkYy1pMmMtYnVz
IG5vZGUgaW4gJXNcbiIsCisJCQlyZW1vdGUtPmZ1bGxfbmFtZSk7CisJCW9mX25vZGVfcHV0KHJl
bW90ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlvZl9ub2RlX3B1dChyZW1vdGUpOworCisJ
aGRtaS0+ZGRjX2FkcHQgPSBvZl9maW5kX2kyY19hZGFwdGVyX2J5X25vZGUoaTJjX25wKTsKKwlp
ZiAoIWhkbWktPmRkY19hZHB0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBkZGMg
aTJjIGFkYXB0ZXIgYnkgbm9kZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVy
biAwOworfQorCitzdGF0aWMgaW50IG10a19kcm1faGRtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f
ZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaTsKKwlzdHJ1Y3QgZGV2aWNl
ICpkZXYgPSAmcGRldi0+ZGV2OworCWludCByZXQ7CisKKwloZG1pID0gZGV2bV9remFsbG9jKGRl
diwgc2l6ZW9mKCpoZG1pKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoZG1pKQorCQlyZXR1cm4gLUVO
T01FTTsKKworCWhkbWktPmRldiA9IGRldjsKKworCXJldCA9IG10a19oZG1pX2R0X3BhcnNlX3Bk
YXRhKGhkbWksIHBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwloZG1pLT5waHkg
PSBkZXZtX3BoeV9nZXQoZGV2LCAiaGRtaSIpOworCWlmIChJU19FUlIoaGRtaS0+cGh5KSkgewor
CQlyZXQgPSBQVFJfRVJSKGhkbWktPnBoeSk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdl
dCBIRE1JIFBIWTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcGxhdGZvcm1f
c2V0X2RydmRhdGEocGRldiwgaGRtaSk7CisKKwlyZXQgPSBtdGtfaGRtaV9vdXRwdXRfaW5pdCho
ZG1pKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUg
aGRtaSBvdXRwdXRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWhkbWktPmJyaWRnZS5mdW5j
cyA9ICZtdGtfaGRtaV9icmlkZ2VfZnVuY3M7CisJaGRtaS0+YnJpZGdlLm9mX25vZGUgPSBwZGV2
LT5kZXYub2Zfbm9kZTsKKwlyZXQgPSBkcm1fYnJpZGdlX2FkZCgmaGRtaS0+YnJpZGdlKTsKKwlp
ZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBicmlkZ2UsIHJldCA9ICVk
XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG10a19oZG1pX2Nsa19lbmFi
bGVfYXVkaW8oaGRtaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBl
bmFibGUgYXVkaW8gY2xvY2tzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfYnJpZGdlX3JlbW92
ZTsKKwl9CisKKwlkZXZfZGJnKGRldiwgIm1lZGlhdGVrIGhkbWkgcHJvYmUgc3VjY2Vzc1xuIik7
CisJcmV0dXJuIDA7CisKK2Vycl9icmlkZ2VfcmVtb3ZlOgorCWRybV9icmlkZ2VfcmVtb3ZlKCZo
ZG1pLT5icmlkZ2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9oZG1p
X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfaGRt
aSAqaGRtaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZHJtX2JyaWRnZV9yZW1v
dmUoJmhkbWktPmJyaWRnZSk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoaGRtaS0+YXVk
aW9fcGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJbXRrX2hkbWlf
Y2xrX2Rpc2FibGVfYXVkaW8oaGRtaSk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdf
UE1fU0xFRVAKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYp
Cit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlt
dGtfaGRtaV9wb3dlcl9vZmYoaGRtaSk7CisJbXRrX2hkbWlfY2xrX2Rpc2FibGVfYXVkaW8oaGRt
aSk7CisJcGh5X3Bvd2VyX29mZihoZG1pLT5waHkpOworCWRldl9kYmcoZGV2LCAiaGRtaSBzdXNw
ZW5kIHN1Y2Nlc3MhXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9y
ZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGRl
dl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQgPSAwOworCisJcmV0ID0gbXRrX2hkbWlfY2xr
X2VuYWJsZV9hdWRpbyhoZG1pKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiaGRtaSBy
ZXN1bWUgZmFpbGVkIVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJbXRrX2hkbWlfcG93ZXJf
b24oaGRtaSk7CisJbXRrX2hkbWlfb3V0cHV0X3NldF9kaXNwbGF5X21vZGUoaGRtaSwgJmhkbWkt
Pm1vZGUpOworCXBoeV9wb3dlcl9vbihoZG1pLT5waHkpOworCWRldl9kYmcoZGV2LCAiaGRtaSBy
ZXN1bWUgc3VjY2VzcyFcbiIpOworCXJldHVybiAwOworfQorI2VuZGlmCitzdGF0aWMgU0lNUExF
X0RFVl9QTV9PUFMobXRrX2hkbWlfcG1fb3BzLAorCQkJIG10a19oZG1pX3N1c3BlbmQsIG10a19o
ZG1pX3Jlc3VtZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kcm1f
aGRtaV9vZl9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1oZG1p
IiwgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2hkbWlf
ZHJpdmVyID0geworCS5wcm9iZSA9IG10a19kcm1faGRtaV9wcm9iZSwKKwkucmVtb3ZlID0gbXRr
X2RybV9oZG1pX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1kcm0t
aGRtaSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kcm1faGRtaV9vZl9pZHMsCisJCS5wbSA9
ICZtdGtfaGRtaV9wbV9vcHMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJp
dmVyICogY29uc3QgbXRrX2hkbWlfZHJpdmVyc1tdID0geworCSZtdGtfaGRtaV9waHlfZHJpdmVy
LAorCSZtdGtfaGRtaV9kZGNfZHJpdmVyLAorCSZtdGtfY2VjX2RyaXZlciwKKwkmbXRrX2hkbWlf
ZHJpdmVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXRrX2hkbWl0eF9pbml0KHZvaWQpCit7
CisJaW50IHJldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10a19o
ZG1pX2RyaXZlcnMpOyBpKyspIHsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKG10
a19oZG1pX2RyaXZlcnNbaV0pOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJfZXJyKCJGYWlsZWQg
dG8gcmVnaXN0ZXIgJXMgZHJpdmVyOiAlZFxuIiwKKwkJCSAgICAgICBtdGtfaGRtaV9kcml2ZXJz
W2ldLT5kcml2ZXIubmFtZSwgcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJcmV0dXJu
IDA7CisKK2VycjoKKwl3aGlsZSAoLS1pID49IDApCisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lz
dGVyKG10a19oZG1pX2RyaXZlcnNbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZv
aWQgX19leGl0IG10a19oZG1pdHhfZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0g
QVJSQVlfU0laRShtdGtfaGRtaV9kcml2ZXJzKSAtIDE7IGkgPj0gMDsgaS0tKQorCQlwbGF0Zm9y
bV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfaGRtaV9kcml2ZXJzW2ldKTsKK30KKworbW9kdWxlX2lu
aXQobXRrX2hkbWl0eF9pbml0KTsKK21vZHVsZV9leGl0KG10a19oZG1pdHhfZXhpdCk7CisKK01P
RFVMRV9BVVRIT1IoIkppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPiIpOworTU9EVUxFX0RF
U0NSSVBUSU9OKCJNZWRpYVRlayBIRE1JIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2
MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMgYi9k
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zMGVjN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt
L21lZGlhdGVrL210a19oZG1pLmMKQEAgLTAsMCArMSw0NzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlh
dGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKi8KKyNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4K
KyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNp
bmNsdWRlICJtdGtfY2VjLmgiCisjaW5jbHVkZSAibXRrX2hkbWkuaCIKKyNpbmNsdWRlICJtdGtf
aGRtaV9ody5oIgorCitzdGF0aWMgdTggbXRrX2hkbWlfYXVkX2dldF9jaG5sX2NvdW50KGVudW0g
aGRtaV9hdWRfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSkKK3sKKwlzd2l0Y2ggKGNoYW5uZWxf
dHlwZSkgeworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzFfMDoKKwljYXNlIEhETUlfQVVEX0NI
QU5fVFlQRV8xXzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8wOgorCQlyZXR1cm4gMjsK
KwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8yXzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVf
M18wOgorCQlyZXR1cm4gMzsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8zXzE6CisJY2FzZSBI
RE1JX0FVRF9DSEFOX1RZUEVfNF8wOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzNfMF9MUlM6
CisJCXJldHVybiA0OworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzRfMToKKwljYXNlIEhETUlf
QVVEX0NIQU5fVFlQRV81XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfM18xX0xSUzoKKwlj
YXNlIEhETUlfQVVEX0NIQU5fVFlQRV80XzBfQ0xSUzoKKwkJcmV0dXJuIDU7CisJY2FzZSBIRE1J
X0FVRF9DSEFOX1RZUEVfNV8xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMDoKKwljYXNl
IEhETUlfQVVEX0NIQU5fVFlQRV80XzFfQ0xSUzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82
XzBfQ1M6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NIOgorCWNhc2UgSERNSV9BVURf
Q0hBTl9UWVBFXzZfMF9PSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ0hSOgorCQly
ZXR1cm4gNjsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzE6CisJY2FzZSBIRE1JX0FVRF9D
SEFOX1RZUEVfNl8xX0NTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DSDoKKwljYXNl
IEhETUlfQVVEX0NIQU5fVFlQRV82XzFfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8x
X0NIUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFO
X1RZUEVfN18wX0xIX1JIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1JfUlNSOgor
CWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MQ19SQzoKKwljYXNlIEhETUlfQVVEX0NIQU5f
VFlQRV83XzBfTFdfUlc6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTRF9SU0Q6CisJ
Y2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTU19SU1M6CisJY2FzZSBIRE1JX0FVRF9DSEFO
X1RZUEVfN18wX0xIU19SSFM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX0NIOgor
CWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DU19PSDoKKwljYXNlIEhETUlfQVVEX0NIQU5f
VFlQRV83XzBfQ1NfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DSF9PSDoKKwlj
YXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ0hfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U
WVBFXzdfMF9PSF9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTU19SU1NfTFNS
X1JTUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV84XzBfTEhfUkhfQ1M6CisJCXJldHVybiA3
OworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMToKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQ
RV83XzFfTEhfUkg6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTUl9SU1I6CisJY2Fz
ZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xDX1JDOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF
XzdfMV9MV19SVzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFNEX1JTRDoKKwljYXNl
IEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFNTX1JTUzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQ
RV83XzFfTEhTX1JIUzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfQ0g6CisJY2Fz
ZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NTX09IOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF
XzdfMV9DU19DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NIX09IOgorCWNhc2Ug
SERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DSF9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVf
N18xX09IX0NIUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFNTX1JTU19MU1JfUlNS
OgorCQlyZXR1cm4gODsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMjsKKwl9Cit9CisKK3N0YXRpYyBp
bnQgbXRrX2hkbWlfdmlkZW9fY2hhbmdlX3ZwbGwoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIg
Y2xvY2spCit7CisJdW5zaWduZWQgbG9uZyByYXRlOworCWludCByZXQ7CisKKwkvKiBUaGUgRFBJ
IGRyaXZlciBhbHJlYWR5IHNob3VsZCBoYXZlIHNldCBUVkRQTEwgdG8gdGhlIGNvcnJlY3QgcmF0
ZSAqLworCXJldCA9IGNsa19zZXRfcmF0ZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0hETUlfUExM
XSwgY2xvY2spOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8g
c2V0IFBMTCB0byAldSBIejogJWRcbiIsIGNsb2NrLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsK
Kwl9CisKKwlyYXRlID0gY2xrX2dldF9yYXRlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfSERNSV9Q
TExdKTsKKworCWlmIChESVZfUk9VTkRfQ0xPU0VTVChyYXRlLCAxMDAwKSAhPSBESVZfUk9VTkRf
Q0xPU0VTVChjbG9jaywgMTAwMCkpCisJCWRldl93YXJuKGhkbWktPmRldiwgIldhbnQgUExMICV1
IEh6LCBnb3QgJWx1IEh6XG4iLCBjbG9jaywKKwkJCSByYXRlKTsKKwllbHNlCisJCWRldl9kYmco
aGRtaS0+ZGV2LCAiV2FudCBQTEwgJXUgSHosIGdvdCAlbHUgSHpcbiIsIGNsb2NrLCByYXRlKTsK
KworCW10a19oZG1pX2h3X2NvbmZpZ19zeXMoaGRtaSk7CisJbXRrX2hkbWlfaHdfc2V0X2RlZXBf
Y29sb3JfbW9kZShoZG1pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlf
dmlkZW9fc2V0X2Rpc3BsYXlfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCSAgICBz
dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwltdGtfaGRtaV9od19yZXNldChoZG1p
KTsKKwltdGtfaGRtaV9od19lbmFibGVfbm90aWNlKGhkbWksIHRydWUpOworCW10a19oZG1pX2h3
X3dyaXRlX2ludF9tYXNrKGhkbWksIDB4ZmYpOworCW10a19oZG1pX2h3X2VuYWJsZV9kdmlfbW9k
ZShoZG1pLCBoZG1pLT5kdmlfbW9kZSk7CisJbXRrX2hkbWlfaHdfbmN0c19hdXRvX3dyaXRlX2Vu
YWJsZShoZG1pLCB0cnVlKTsKKworCW10a19oZG1pX2h3X21zaWNfc2V0dGluZyhoZG1pLCBtb2Rl
KTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRfZW5hYmxlX3BhY2tldChzdHJ1Y3QgbXRr
X2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX2h3X3NlbmRfYXVkX3BhY2tl
dChoZG1pLCBlbmFibGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1
ZF9vbl9vZmZfaHdfbmN0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgb24pCit7CisJbXRr
X2hkbWlfaHdfbmN0c19lbmFibGUoaGRtaSwgb24pOworCXJldHVybiAwOworfQorCitzdGF0aWMg
aW50IG10a19oZG1pX2F1ZF9zZXRfaW5wdXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXU4
IGNoYW5fY291bnQ7CisKKwltdGtfaGRtaV9od19hdWRfc2V0X2NoYW5uZWxfc3dhcChoZG1pLCBI
RE1JX0FVRF9TV0FQX0xGRV9DQyk7CisJbXRrX2hkbWlfaHdfYXVkX3Jhd19kYXRhX2VuYWJsZSho
ZG1pLCB0cnVlKTsKKworCWlmIChoZG1pLT5hdWRfcGFyYW0uYXVkX2lucHV0X3R5cGUgPT0gSERN
SV9BVURfSU5QVVRfU1BESUYgJiYKKwkgICAgaGRtaS0+YXVkX3BhcmFtLmF1ZF9jb2RlYyA9PSBI
RE1JX0FVRElPX0NPRElOR19UWVBFX0RTVCkgeworCQltdGtfaGRtaV9od19hdWRfc2V0X2JpdF9u
dW0oaGRtaSwKKwkJCQkJICAgIEhETUlfQVVESU9fU0FNUExFX1NJWkVfMjQpOworCX0gZWxzZSBp
ZiAoaGRtaS0+YXVkX3BhcmFtLmF1ZF9pMnNfZm10ID09CisJCQlIRE1JX0kyU19NT0RFX0xKVF8y
NEJJVCkgeworCQloZG1pLT5hdWRfcGFyYW0uYXVkX2kyc19mbXQgPSBIRE1JX0kyU19NT0RFX0xK
VF8xNkJJVDsKKwl9CisKKwltdGtfaGRtaV9od19hdWRfc2V0X2kyc19mbXQoaGRtaSwKKwkJCQkg
ICAgaGRtaS0+YXVkX3BhcmFtLmF1ZF9pMnNfZm10KTsKKwltdGtfaGRtaV9od19hdWRfc2V0X2Jp
dF9udW0oaGRtaSwgSERNSV9BVURJT19TQU1QTEVfU0laRV8yNCk7CisKKwltdGtfaGRtaV9od19h
dWRfc2V0X2hpZ2hfYml0cmF0ZShoZG1pLCBmYWxzZSk7CisJbXRrX2hkbWlfcGh5X2F1ZF9kc3Rf
bm9ybWFsX2RvdWJsZV9lbmFibGUoaGRtaSwgZmFsc2UpOworCW10a19oZG1pX2h3X2F1ZF9kc3Rf
ZW5hYmxlKGhkbWksIGZhbHNlKTsKKworCWlmIChoZG1pLT5hdWRfcGFyYW0uYXVkX2lucHV0X3R5
cGUgPT0gSERNSV9BVURfSU5QVVRfU1BESUYpIHsKKwkJbXRrX2hkbWlfaHdfYXVkX2RzZF9lbmFi
bGUoaGRtaSwgZmFsc2UpOworCQlpZiAoaGRtaS0+YXVkX3BhcmFtLmF1ZF9jb2RlYyA9PQorCQkJ
SERNSV9BVURJT19DT0RJTkdfVFlQRV9EU1QpIHsKKwkJCW10a19oZG1pX3BoeV9hdWRfZHN0X25v
cm1hbF9kb3VibGVfZW5hYmxlKGhkbWksCisJCQkJCQkJCSAgdHJ1ZSk7CisJCQltdGtfaGRtaV9o
d19hdWRfZHN0X2VuYWJsZShoZG1pLCB0cnVlKTsKKwkJfQorCisJCWNoYW5fY291bnQgPSBtdGtf
aGRtaV9hdWRfZ2V0X2NobmxfY291bnQKKwkJCQkJCSAoSERNSV9BVURfQ0hBTl9UWVBFXzJfMCk7
CisJCW10a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2NoYW5fbnVtKGhkbWksCisJCQkJCQkgSERNSV9B
VURfQ0hBTl9UWVBFXzJfMCwKKwkJCQkJCSBjaGFuX2NvdW50KTsKKwkJbXRrX2hkbWlfaHdfYXVk
X3NldF9pbnB1dF90eXBlKGhkbWksCisJCQkJCSAgICAgICBIRE1JX0FVRF9JTlBVVF9TUERJRik7
CisJfSBlbHNlIHsKKwkJbXRrX2hkbWlfaHdfYXVkX2RzZF9lbmFibGUoaGRtaSwgZmFsc2UpOwor
CQljaGFuX2NvdW50ID0KKwkJCW10a19oZG1pX2F1ZF9nZXRfY2hubF9jb3VudCgKKwkJCWhkbWkt
PmF1ZF9wYXJhbS5hdWRfaW5wdXRfY2hhbl90eXBlKTsKKwkJbXRrX2hkbWlfaHdfYXVkX3NldF9p
MnNfY2hhbl9udW0oCisJCQloZG1pLAorCQkJaGRtaS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF9jaGFu
X3R5cGUsCisJCQljaGFuX2NvdW50KTsKKwkJbXRrX2hkbWlfaHdfYXVkX3NldF9pbnB1dF90eXBl
KGhkbWksCisJCQkJCSAgICAgICBIRE1JX0FVRF9JTlBVVF9JMlMpOworCX0KKwlyZXR1cm4gMDsK
K30KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRfc2V0X3NyYyhzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWksCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRpc3BsYXlfbW9kZSkKK3sKKwltdGtf
aGRtaV9hdWRfb25fb2ZmX2h3X25jdHMoaGRtaSwgZmFsc2UpOworCisJaWYgKGhkbWktPmF1ZF9w
YXJhbS5hdWRfaW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBVVF9JMlMpIHsKKwkJc3dpdGNoICho
ZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMpIHsKKwkJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9G
UkVRVUVOQ1lfMzIwMDA6CisJCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ0MTAw
OgorCQljYXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV80ODAwMDoKKwkJY2FzZSBIRE1J
X0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfODgyMDA6CisJCWNhc2UgSERNSV9BVURJT19TQU1QTEVf
RlJFUVVFTkNZXzk2MDAwOgorCQkJbXRrX2hkbWlfaHdfYXVkX3NyY19vZmYoaGRtaSk7CisJCQkv
KiBtdGtfaGRtaV9od19hdWRfc3JjX2VuYWJsZShoZG1pLCBmYWxzZSk7ICovCisJCQltdGtfaGRt
aV9od19hdWRfc2V0X21jbGsoCisJCQloZG1pLAorCQkJaGRtaS0+YXVkX3BhcmFtLmF1ZF9tY2xr
KTsKKwkJCW10a19oZG1pX2h3X2F1ZF9hY2xrX2ludl9lbmFibGUoaGRtaSwgZmFsc2UpOworCQkJ
YnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAo
aGRtaS0+YXVkX3BhcmFtLmllY19mcmFtZV9mcykgeworCQljYXNlIEhETUlfSUVDXzMySzoKKwkJ
CWhkbWktPmF1ZF9wYXJhbS5hdWRfaGRtaV9mcyA9CisJCQkgICAgSERNSV9BVURJT19TQU1QTEVf
RlJFUVVFTkNZXzMyMDAwOworCQkJbXRrX2hkbWlfaHdfYXVkX3NyY19vZmYoaGRtaSk7CisJCQlt
dGtfaGRtaV9od19hdWRfc2V0X21jbGsoaGRtaSwKKwkJCQkJCSBIRE1JX0FVRF9NQ0xLXzEyOEZT
KTsKKwkJCW10a19oZG1pX2h3X2F1ZF9hY2xrX2ludl9lbmFibGUoaGRtaSwgZmFsc2UpOworCQkJ
YnJlYWs7CisJCWNhc2UgSERNSV9JRUNfNDhLOgorCQkJaGRtaS0+YXVkX3BhcmFtLmF1ZF9oZG1p
X2ZzID0KKwkJCSAgICBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfNDgwMDA7CisJCQltdGtf
aGRtaV9od19hdWRfc3JjX29mZihoZG1pKTsKKwkJCW10a19oZG1pX2h3X2F1ZF9zZXRfbWNsayho
ZG1pLAorCQkJCQkJIEhETUlfQVVEX01DTEtfMTI4RlMpOworCQkJbXRrX2hkbWlfaHdfYXVkX2Fj
bGtfaW52X2VuYWJsZShoZG1pLCBmYWxzZSk7CisJCQlicmVhazsKKwkJY2FzZSBIRE1JX0lFQ180
NEs6CisJCQloZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMgPQorCQkJICAgIEhETUlfQVVESU9f
U0FNUExFX0ZSRVFVRU5DWV80NDEwMDsKKwkJCW10a19oZG1pX2h3X2F1ZF9zcmNfb2ZmKGhkbWkp
OworCQkJbXRrX2hkbWlfaHdfYXVkX3NldF9tY2xrKGhkbWksCisJCQkJCQkgSERNSV9BVURfTUNM
S18xMjhGUyk7CisJCQltdGtfaGRtaV9od19hdWRfYWNsa19pbnZfZW5hYmxlKGhkbWksIGZhbHNl
KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisJbXRrX2hkbWlf
aHdfYXVkX3NldF9uY3RzKGhkbWksIGhkbWktPmF1ZF9wYXJhbS5hdWRfaGRtaV9mcywKKwkJCQkg
ZGlzcGxheV9tb2RlLT5jbG9jayk7CisKKwltdGtfaGRtaV9od19hdWRfc3JjX3JlZW5hYmxlKGhk
bWkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1ZF9zZXRfY2hubF9z
dGF0dXMoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCW10a19oZG1pX2h3X2F1ZF9zZXRfY2hh
bm5lbF9zdGF0dXMoCisJCWhkbWksCisJICAgaGRtaS0+YXVkX3BhcmFtLmhkbWlfbF9jaGFubmVs
X3N0YXRlLAorCSAgIGhkbWktPmF1ZF9wYXJhbS5oZG1pX3JfY2hhbm5lbF9zdGF0ZSwKKwkgICBo
ZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50
IG10a19oZG1pX2F1ZF9vdXRwdXRfY29uZmlnKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkg
ICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZGlzcGxheV9tb2RlKQoreworCW10a19oZG1p
X2h3X2F1ZF9tdXRlKGhkbWksIHRydWUpOworCW10a19oZG1pX2F1ZF9lbmFibGVfcGFja2V0KGhk
bWksIGZhbHNlKTsKKworCW10a19oZG1pX2F1ZF9zZXRfaW5wdXQoaGRtaSk7CisJbXRrX2hkbWlf
YXVkX3NldF9zcmMoaGRtaSwgZGlzcGxheV9tb2RlKTsKKwltdGtfaGRtaV9hdWRfc2V0X2Nobmxf
c3RhdHVzKGhkbWkpOworCisJdXNsZWVwX3JhbmdlKDUwLCAxMDApOworCisJbXRrX2hkbWlfYXVk
X29uX29mZl9od19uY3RzKGhkbWksIHRydWUpOworCW10a19oZG1pX2F1ZF9lbmFibGVfcGFja2V0
KGhkbWksIHRydWUpOworCW10a19oZG1pX2h3X2F1ZF9tdXRlKGhkbWksIGZhbHNlKTsKKwlyZXR1
cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9zZXR1cF9hdl9tdXRlX3BhY2tldChzdHJ1
Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlfaHdfc2VuZF9hdl9tdXRlKGhkbWkpOwor
CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3NldHVwX2F2X3VubXV0ZV9wYWNr
ZXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCW10a19oZG1pX2h3X3NlbmRfYXZfdW5tdXRl
KGhkbWkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3NldHVwX2F2aV9p
bmZvZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlf
bW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgaGRtaV9hdmlfaW5mb2ZyYW1lIGZyYW1lOworCXU4IGJ1
ZmZlclsxN107CisJc3NpemVfdCBlcnI7CisKKwllcnIgPSBkcm1faGRtaV9hdmlfaW5mb2ZyYW1l
X2Zyb21fZGlzcGxheV9tb2RlKCZmcmFtZSwgbW9kZSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2
X2VycihoZG1pLT5kZXYsCisJCQkiRmFpbGVkIHRvIGdldCBBVkkgaW5mb2ZyYW1lIGZyb20gbW9k
ZTogJXpkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IGhkbWlfYXZpX2lu
Zm9mcmFtZV9wYWNrKCZmcmFtZSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJaWYgKGVyciA8
IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8gcGFjayBBVkkgaW5mb2ZyYW1l
OiAlemRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJbXRrX2hkbWlfaHdfc2VuZF9p
bmZvX2ZyYW1lKGhkbWksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCXJldHVybiAwOworfQor
CitzdGF0aWMgaW50IG10a19oZG1pX3NldHVwX3NwZF9pbmZvZnJhbWUoc3RydWN0IG10a19oZG1p
ICpoZG1pLAorCQkJCQljb25zdCBjaGFyICp2ZW5kb3IsCisJCQkJCWNvbnN0IGNoYXIgKnByb2R1
Y3QpCit7CisJc3RydWN0IGhkbWlfc3BkX2luZm9mcmFtZSBmcmFtZTsKKwl1OCBidWZmZXJbMjld
OworCXNzaXplX3QgZXJyOworCisJZXJyID0gaGRtaV9zcGRfaW5mb2ZyYW1lX2luaXQoJmZyYW1l
LCB2ZW5kb3IsIHByb2R1Y3QpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2
LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgU1BEIGluZm9mcmFtZTogJXpkXG4iLAorCQkJZXJyKTsK
KwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBoZG1pX3NwZF9pbmZvZnJhbWVfcGFjaygmZnJh
bWUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIo
aGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHBhY2sgU0RQIGluZm9mcmFtZTogJXpkXG4iLCBlcnIpOwor
CQlyZXR1cm4gZXJyOworCX0KKworCW10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShoZG1pLCBi
dWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtf
aGRtaV9zZXR1cF9hdWRpb19pbmZvZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXN0
cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSBmcmFtZTsKKwl1OCBidWZmZXJbMTRdOworCXNzaXpl
X3QgZXJyOworCisJZXJyID0gaGRtaV9hdWRpb19pbmZvZnJhbWVfaW5pdCgmZnJhbWUpOworCWlm
IChlcnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHNldHVwIGF1ZGlv
IGluZm9mcmFtZTogJXpkXG4iLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlmcmFt
ZS5jb2RpbmdfdHlwZSA9IEhETUlfQVVESU9fQ09ESU5HX1RZUEVfU1RSRUFNOworCWZyYW1lLnNh
bXBsZV9mcmVxdWVuY3kgPSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfU1RSRUFNOworCWZy
YW1lLnNhbXBsZV9zaXplID0gSERNSV9BVURJT19TQU1QTEVfU0laRV9TVFJFQU07CisJZnJhbWUu
Y2hhbm5lbHMgPQorCSAgICBtdGtfaGRtaV9hdWRfZ2V0X2NobmxfY291bnQoCisJICAgIGhkbWkt
PmF1ZF9wYXJhbS5hdWRfaW5wdXRfY2hhbl90eXBlKTsKKworCWVyciA9IGhkbWlfYXVkaW9faW5m
b2ZyYW1lX3BhY2soJmZyYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlpZiAoZXJyIDwg
MCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBwYWNrIGF1ZGlvIGluZm9mcmFt
ZTogJXpkXG4iLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwltdGtfaGRtaV9od19z
ZW5kX2luZm9fZnJhbWUoaGRtaSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc2V0dXBfdmVuZG9yX3NwZWNpZmljX2luZm9mcmFt
ZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq
bW9kZSkKK3sKKwlzdHJ1Y3QgaGRtaV92ZW5kb3JfaW5mb2ZyYW1lIGZyYW1lOworCXU4IGJ1ZmZl
clsxMF07CisJc3NpemVfdCBlcnI7CisKKwllcnIgPSBkcm1faGRtaV92ZW5kb3JfaW5mb2ZyYW1l
X2Zyb21fZGlzcGxheV9tb2RlKCZmcmFtZSwgbW9kZSk7CisJaWYgKGVycikgeworCQlkZXZfZXJy
KGhkbWktPmRldiwKKwkJCSJGYWlsZWQgdG8gZ2V0IHZlbmRvciBpbmZvZnJhbWUgZnJvbSBtb2Rl
OiAlemRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gaGRtaV92ZW5kb3Jf
aW5mb2ZyYW1lX3BhY2soJmZyYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlpZiAoZXJy
KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHBhY2sgdmVuZG9yIGluZm9mcmFt
ZTogJXpkXG4iLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwltdGtfaGRtaV9od19z
ZW5kX2luZm9fZnJhbWUoaGRtaSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJcmV0dXJuIDA7
Cit9CisKK2ludCBtdGtfaGRtaV9ocGRfaGlnaChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJ
cmV0dXJuIGhkbWktPmNlY19kZXYgPyBtdGtfY2VjX2hwZF9oaWdoKGhkbWktPmNlY19kZXYpIDog
ZmFsc2U7Cit9CisKK2ludCBtdGtfaGRtaV9vdXRwdXRfaW5pdChzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWkpCit7CisJc3RydWN0IGhkbWlfYXVkaW9fcGFyYW0gKmF1ZF9wYXJhbSA9ICZoZG1pLT5hdWRf
cGFyYW07CisKKwlpZiAoaGRtaS0+aW5pdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloZG1pLT5j
c3AgPSBIRE1JX0NPTE9SU1BBQ0VfUkdCOworCWhkbWktPm91dHB1dCA9IHRydWU7CisJYXVkX3Bh
cmFtLT5hdWRfY29kZWMgPSBIRE1JX0FVRElPX0NPRElOR19UWVBFX1BDTTsKKwlhdWRfcGFyYW0t
PmF1ZF9oZG1pX2ZzID0gSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ4MDAwOworCWF1ZF9w
YXJhbS0+YXVkX3NhbXBlX3NpemUgPSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzE2OworCWF1ZF9w
YXJhbS0+YXVkX2lucHV0X3R5cGUgPSBIRE1JX0FVRF9JTlBVVF9JMlM7CisJYXVkX3BhcmFtLT5h
dWRfaTJzX2ZtdCA9IEhETUlfSTJTX01PREVfSTJTXzI0QklUOworCWF1ZF9wYXJhbS0+YXVkX21j
bGsgPSBIRE1JX0FVRF9NQ0xLXzEyOEZTOworCWF1ZF9wYXJhbS0+aWVjX2ZyYW1lX2ZzID0gSERN
SV9JRUNfNDhLOworCWF1ZF9wYXJhbS0+YXVkX2lucHV0X2NoYW5fdHlwZSA9IEhETUlfQVVEX0NI
QU5fVFlQRV8yXzA7CisJYXVkX3BhcmFtLT5oZG1pX2xfY2hhbm5lbF9zdGF0ZVsyXSA9IDI7CisJ
YXVkX3BhcmFtLT5oZG1pX3JfY2hhbm5lbF9zdGF0ZVsyXSA9IDI7CisJaGRtaS0+aW5pdCA9IHRy
dWU7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtdGtfaGRtaV9wb3dlcl9vbihzdHJ1Y3QgbXRr
X2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlfaHdfbWFrZV9yZWdfd3JpdGFibGUoaGRtaSwgdHJ1
ZSk7CisJbXRrX2hkbWlfaHdfMXA0X3ZlcnNpb25fZW5hYmxlKGhkbWksIHRydWUpOworfQorCit2
b2lkIG10a19oZG1pX3Bvd2VyX29mZihzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hk
bWlfaHdfMXA0X3ZlcnNpb25fZW5hYmxlKGhkbWksIHRydWUpOworCW10a19oZG1pX2h3X21ha2Vf
cmVnX3dyaXRhYmxlKGhkbWksIGZhbHNlKTsKK30KKworaW50IG10a19oZG1pX291dHB1dF9zZXRf
ZGlzcGxheV9tb2RlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgIHN0cnVjdCBkcm1f
ZGlzcGxheV9tb2RlICptb2RlKQoreworCWludCByZXQ7CisKKwlpZiAoIWhkbWktPmluaXQpIHsK
KwkJZGV2X2VycihoZG1pLT5kZXYsICJkb2Vzbid0IGluaXQgaGRtaSBjb250cm9sIGNvbnRleHQh
XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXRrX2hkbWlfaHdfdmlkX2JsYWNrKGhk
bWksIHRydWUpOworCW10a19oZG1pX2h3X2F1ZF9tdXRlKGhkbWksIHRydWUpOworCW10a19oZG1p
X3NldHVwX2F2X211dGVfcGFja2V0KGhkbWkpOworCXBoeV9wb3dlcl9vZmYoaGRtaS0+cGh5KTsK
KworCXJldCA9IG10a19oZG1pX3ZpZGVvX2NoYW5nZV92cGxsKGhkbWksCisJCQkJCSBtb2RlLT5j
bG9jayAqIDEwMDApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQg
dG8gc2V0IHZwbGw6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwltdGtfaGRtaV92
aWRlb19zZXRfZGlzcGxheV9tb2RlKGhkbWksIG1vZGUpOworCisJcGh5X3Bvd2VyX29uKGhkbWkt
PnBoeSk7CisJbXRrX2hkbWlfYXVkX291dHB1dF9jb25maWcoaGRtaSwgbW9kZSk7CisKKwltdGtf
aGRtaV9zZXR1cF9hdWRpb19pbmZvZnJhbWUoaGRtaSk7CisJbXRrX2hkbWlfc2V0dXBfYXZpX2lu
Zm9mcmFtZShoZG1pLCBtb2RlKTsKKwltdGtfaGRtaV9zZXR1cF9zcGRfaW5mb2ZyYW1lKGhkbWks
ICJtZWRpYXRlayIsICJjaHJvbWVib29rIik7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVf
RkxBR18zRF9NQVNLKQorCQltdGtfaGRtaV9zZXR1cF92ZW5kb3Jfc3BlY2lmaWNfaW5mb2ZyYW1l
KGhkbWksIG1vZGUpOworCisJbXRrX2hkbWlfaHdfdmlkX2JsYWNrKGhkbWksIGZhbHNlKTsKKwlt
dGtfaGRtaV9od19hdWRfbXV0ZShoZG1pLCBmYWxzZSk7CisJbXRrX2hkbWlfc2V0dXBfYXZfdW5t
dXRlX3BhY2tldChoZG1pKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19oZG1pLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2hkbWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDAzOTE1Ci0tLSAv
ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmgKQEAgLTAs
MCArMSwyMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICog
QXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dy
YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm
eQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX01US19IRE1JX0NU
UkxfSAorI2RlZmluZSBfTVRLX0hETUlfQ1RSTF9ICisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMu
aD4KKyNpbmNsdWRlIDxsaW51eC9oZG1pLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNs
dWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3Qg
Y2xrOworc3RydWN0IGRldmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBpMmNfYWRh
cHRlcjsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7CitzdHJ1Y3QgcGh5Oworc3RydWN0IHJlZ21h
cDsKKworZW51bSBtdGtfaGRtaV9jbGtfaWQgeworCU1US19IRE1JX0NMS19IRE1JX1BJWEVMLAor
CU1US19IRE1JX0NMS19IRE1JX1BMTCwKKwlNVEtfSERNSV9DTEtfQVVEX0JDTEssCisJTVRLX0hE
TUlfQ0xLX0FVRF9TUERJRiwKKwlNVEtfSERNSV9DTEtfQ09VTlQKK307CisKK2VudW0gaGRtaV9h
dWRfaW5wdXRfdHlwZSB7CisJSERNSV9BVURfSU5QVVRfSTJTID0gMCwKKwlIRE1JX0FVRF9JTlBV
VF9TUERJRiwKK307CisKK2VudW0gaGRtaV9hdWRfaTJzX2ZtdCB7CisJSERNSV9JMlNfTU9ERV9S
SlRfMjRCSVQgPSAwLAorCUhETUlfSTJTX01PREVfUkpUXzE2QklULAorCUhETUlfSTJTX01PREVf
TEpUXzI0QklULAorCUhETUlfSTJTX01PREVfTEpUXzE2QklULAorCUhETUlfSTJTX01PREVfSTJT
XzI0QklULAorCUhETUlfSTJTX01PREVfSTJTXzE2QklUCit9OworCitlbnVtIGhkbWlfYXVkX21j
bGsgeworCUhETUlfQVVEX01DTEtfMTI4RlMsCisJSERNSV9BVURfTUNMS18xOTJGUywKKwlIRE1J
X0FVRF9NQ0xLXzI1NkZTLAorCUhETUlfQVVEX01DTEtfMzg0RlMsCisJSERNSV9BVURfTUNMS181
MTJGUywKKwlIRE1JX0FVRF9NQ0xLXzc2OEZTLAorCUhETUlfQVVEX01DTEtfMTE1MkZTLAorfTsK
KworZW51bSBoZG1pX2F1ZF9pZWNfZnJhbWVfcmF0ZSB7CisJSERNSV9JRUNfMzJLID0gMCwKKwlI
RE1JX0lFQ185NkssCisJSERNSV9JRUNfMTkySywKKwlIRE1JX0lFQ183NjhLLAorCUhETUlfSUVD
XzQ0SywKKwlIRE1JX0lFQ184OEssCisJSERNSV9JRUNfMTc2SywKKwlIRE1JX0lFQ183MDVLLAor
CUhETUlfSUVDXzE2SywKKwlIRE1JX0lFQ18yMkssCisJSERNSV9JRUNfMjRLLAorCUhETUlfSUVD
XzQ4SywKK307CisKK2VudW0gaGRtaV9hdWRfY2hhbm5lbF90eXBlIHsKKwlIRE1JX0FVRF9DSEFO
X1RZUEVfMV8wID0gMCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfMV8xLAorCUhETUlfQVVEX0NIQU5f
VFlQRV8yXzAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzJfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVf
M18wLAorCUhETUlfQVVEX0NIQU5fVFlQRV8zXzEsCisJSERNSV9BVURfQ0hBTl9UWVBFXzRfMCwK
KwlIRE1JX0FVRF9DSEFOX1RZUEVfNF8xLAorCUhETUlfQVVEX0NIQU5fVFlQRV81XzAsCisJSERN
SV9BVURfQ0hBTl9UWVBFXzVfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8wLAorCUhETUlfQVVE
X0NIQU5fVFlQRV82XzEsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMCwKKwlIRE1JX0FVRF9DSEFO
X1RZUEVfN18xLAorCUhETUlfQVVEX0NIQU5fVFlQRV8zXzBfTFJTLAorCUhETUlfQVVEX0NIQU5f
VFlQRV8zXzFfTFJTLAorCUhETUlfQVVEX0NIQU5fVFlQRV80XzBfQ0xSUywKKwlIRE1JX0FVRF9D
SEFOX1RZUEVfNF8xX0NMUlMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DUywKKwlIRE1JX0FV
RF9DSEFOX1RZUEVfNl8xX0NILAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfT0gsCisJSERNSV9B
VURfQ0hBTl9UWVBFXzZfMV9DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MSF9SSCwKKwlI
RE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTUl9SU1IsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9M
Q19SQywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xXX1JXLAorCUhETUlfQVVEX0NIQU5fVFlQ
RV83XzFfTFNEX1JTRCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTU19SU1MsCisJSERNSV9B
VURfQ0hBTl9UWVBFXzdfMV9MSFNfUkhTLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfQ0gs
CisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19PSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18x
X0NTX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NIX09ILAorCUhETUlfQVVEX0NIQU5f
VFlQRV83XzFfQ0hfQ0hSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfT0hfQ0hSLAorCUhETUlf
QVVEX0NIQU5fVFlQRV83XzFfTFNTX1JTU19MU1JfUlNSLAorCUhETUlfQVVEX0NIQU5fVFlQRV82
XzBfQ1MsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMF9DSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVf
Nl8wX09ILAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ0hSLAorCUhETUlfQVVEX0NIQU5fVFlQ
RV83XzBfTEhfUkgsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1JfUlNSLAorCUhETUlfQVVE
X0NIQU5fVFlQRV83XzBfTENfUkMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MV19SVywKKwlI
RE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTRF9SU0QsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9M
U1NfUlNTLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfTEhTX1JIUywKKwlIRE1JX0FVRF9DSEFO
X1RZUEVfN18wX0NTX0NILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfT0gsCisJSERNSV9B
VURfQ0hBTl9UWVBFXzdfMF9DU19DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DSF9PSCwK
KwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NIX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18w
X09IX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTU19SU1NfTFNSX1JTUiwKKwlIRE1J
X0FVRF9DSEFOX1RZUEVfOF8wX0xIX1JIX0NTLAorCUhETUlfQVVEX0NIQU5fVFlQRV9VTktOT1dO
ID0gMHhGRgorfTsKKworZW51bSBoZG1pX2F1ZF9jaGFubmVsX3N3YXBfdHlwZSB7CisJSERNSV9B
VURfU1dBUF9MUiwKKwlIRE1JX0FVRF9TV0FQX0xGRV9DQywKKwlIRE1JX0FVRF9TV0FQX0xTUlMs
CisJSERNSV9BVURfU1dBUF9STFNfUlJTLAorCUhETUlfQVVEX1NXQVBfTFJfU1RBVFVTLAorfTsK
Kworc3RydWN0IGhkbWlfYXVkaW9fcGFyYW0geworCWVudW0gaGRtaV9hdWRpb19jb2RpbmdfdHlw
ZSBhdWRfY29kZWM7CisJZW51bSBoZG1pX2F1ZGlvX3NhbXBsZV9mcmVxdWVuY3kgYXVkX2hkbWlf
ZnM7CisJZW51bSBoZG1pX2F1ZGlvX3NhbXBsZV9zaXplIGF1ZF9zYW1wZV9zaXplOworCWVudW0g
aGRtaV9hdWRfaW5wdXRfdHlwZSBhdWRfaW5wdXRfdHlwZTsKKwllbnVtIGhkbWlfYXVkX2kyc19m
bXQgYXVkX2kyc19mbXQ7CisJZW51bSBoZG1pX2F1ZF9tY2xrIGF1ZF9tY2xrOworCWVudW0gaGRt
aV9hdWRfaWVjX2ZyYW1lX3JhdGUgaWVjX2ZyYW1lX2ZzOworCWVudW0gaGRtaV9hdWRfY2hhbm5l
bF90eXBlIGF1ZF9pbnB1dF9jaGFuX3R5cGU7CisJdTggaGRtaV9sX2NoYW5uZWxfc3RhdGVbNl07
CisJdTggaGRtaV9yX2NoYW5uZWxfc3RhdGVbNl07Cit9OworCitzdHJ1Y3QgbXRrX2hkbWkgewor
CXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uOwor
CXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJc3RydWN0IGRldmljZSAq
Y2VjX2RldjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRkY19hZHB0OworCXN0cnVjdCBjbGsgKmNs
a1tNVEtfSERNSV9DTEtfQ09VTlRdOworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCXN0
cnVjdCBkZW50cnkgKmRlYnVnZnM7CisjZW5kaWYKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICph
dWRpb19wZGV2OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG1vZGU7CisJYm9vbCBkdmlfbW9k
ZTsKKwl1MzIgbWluX2Nsb2NrOworCXUzMiBtYXhfY2xvY2s7CisJdTMyIG1heF9oZGlzcGxheTsK
Kwl1MzIgbWF4X3ZkaXNwbGF5OworCXUzMiBpYmlhczsKKwl1MzIgaWJpYXNfdXA7CisJc3RydWN0
IHJlZ21hcCAqc3lzX3JlZ21hcDsKKwl1bnNpZ25lZCBpbnQgc3lzX29mZnNldDsKKwl2b2lkIF9f
aW9tZW0gKnJlZ3M7CisJYm9vbCBpbml0OworCWVudW0gaGRtaV9jb2xvcnNwYWNlIGNzcDsKKwli
b29sIGF1ZGlvX2VuYWJsZTsKKwlib29sIG91dHB1dDsKKwlzdHJ1Y3QgaGRtaV9hdWRpb19wYXJh
bSBhdWRfcGFyYW07Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfaGRtaSAqaGRtaV9j
dHhfZnJvbV9icmlkZ2Uoc3RydWN0IGRybV9icmlkZ2UgKmIpCit7CisJcmV0dXJuIGNvbnRhaW5l
cl9vZihiLCBzdHJ1Y3QgbXRrX2hkbWksIGJyaWRnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3Ry
dWN0IG10a19oZG1pICpoZG1pX2N0eF9mcm9tX2Nvbm4oc3RydWN0IGRybV9jb25uZWN0b3IgKmMp
Cit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgbXRrX2hkbWksIGNvbm4pOworfQor
CitpbnQgbXRrX2hkbWlfb3V0cHV0X2luaXQoc3RydWN0IG10a19oZG1pICpoZG1pKTsKK2ludCBt
dGtfaGRtaV9ocGRfaGlnaChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOworaW50IG10a19oZG1pX291
dHB1dF9zZXRfZGlzcGxheV9tb2RlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgIHN0
cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKK3ZvaWQgbXRrX2hkbWlfcG93ZXJfb24oc3Ry
dWN0IG10a19oZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfcG93ZXJfb2ZmKHN0cnVjdCBtdGtf
aGRtaSAqaGRtaSk7CisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCitpbnQgbXRrX2RybV9o
ZG1pX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfZHJtX2hk
bWlfZGVidWdmc19leGl0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7CisjZWxzZQoraW50IG10a19k
cm1faGRtaV9kZWJ1Z2ZzX2luaXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXJldHVybiAw
OworfQorCit2b2lkIG10a19kcm1faGRtaV9kZWJ1Z2ZzX2V4aXQoc3RydWN0IG10a19oZG1pICpo
ZG1pKQoreworfQorI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLworCitleHRlcm4gc3RydWN0
IHBsYXRmb3JtX2RyaXZlciBtdGtfY2VjX2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1f
ZHJpdmVyIG10a19oZG1pX2RkY19kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZl
ciBtdGtfaGRtaV9waHlfZHJpdmVyOworI2VuZGlmIC8qIF9NVEtfSERNSV9DVFJMX0ggKi8KZGlm
ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9kZGNfZHJ2LmMgYi9k
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfZGRjX2Rydi5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZTU0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfZGRjX2Rydi5jCkBAIC0wLDAgKzEsMzYyIEBACisv
KgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFp
dSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz
CisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVk
ZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGlu
dXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJy
bm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k
ZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+
CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+Cisj
aW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4K
KworI2RlZmluZSBTSUYxX0NMT0sJCSgyODgpCisjZGVmaW5lIEREQ19ERENNQ1RMMAkJKDB4MCkK
KyNkZWZpbmUgRERDTV9PRFJBSU4JCQlCSVQoMzEpCisjZGVmaW5lIEREQ01fQ0xLX0RJVl9PRkZT
RVQJCSgxNikKKyNkZWZpbmUgRERDTV9DTEtfRElWX01BU0sJCSgweGZmZiA8PCAxNikKKyNkZWZp
bmUgRERDTV9DU19TVEFUVVMJCQlCSVQoNCkKKyNkZWZpbmUgRERDTV9TQ0xfU1RBVEUJCQlCSVQo
MykKKyNkZWZpbmUgRERDTV9TREFfU1RBVEUJCQlCSVQoMikKKyNkZWZpbmUgRERDTV9TTTBFTgkJ
CUJJVCgxKQorI2RlZmluZSBERENNX1NDTF9TVFJFQ0gJCQlCSVQoMCkKKyNkZWZpbmUgRERDX0RE
Q01DVEwxCQkoMHg0KQorI2RlZmluZSBERENNX0FDS19PRkZTRVQJCQkoMTYpCisjZGVmaW5lIERE
Q01fQUNLX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgRERDTV9QR0xFTl9PRkZTRVQJCSg4
KQorI2RlZmluZSBERENNX1BHTEVOX01BU0sJCQkoMHg3IDw8IDgpCisjZGVmaW5lIEREQ01fU0lG
X01PREVfT0ZGU0VUCQkoNCkKKyNkZWZpbmUgRERDTV9TSUZfTU9ERV9NQVNLCQkoMHg3IDw8IDQp
CisjZGVmaW5lIEREQ01fU1RBUlQJCQkoMHgxKQorI2RlZmluZSBERENNX1dSSVRFX0RBVEEJCQko
MHgyKQorI2RlZmluZSBERENNX1NUT1AJCQkoMHgzKQorI2RlZmluZSBERENNX1JFQURfREFUQV9O
T19BQ0sJCSgweDQpCisjZGVmaW5lIEREQ01fUkVBRF9EQVRBX0FDSwkJKDB4NSkKKyNkZWZpbmUg
RERDTV9UUkkJCQlCSVQoMCkKKyNkZWZpbmUgRERDX0REQ01EMAkJKDB4OCkKKyNkZWZpbmUgRERD
TV9EQVRBMwkJCSgweGZmIDw8IDI0KQorI2RlZmluZSBERENNX0RBVEEyCQkJKDB4ZmYgPDwgMTYp
CisjZGVmaW5lIEREQ01fREFUQTEJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBERENNX0RBVEEwCQkJ
KDB4ZmYgPDwgMCkKKyNkZWZpbmUgRERDX0REQ01EMQkJKDB4YykKKyNkZWZpbmUgRERDTV9EQVRB
NwkJCSgweGZmIDw8IDI0KQorI2RlZmluZSBERENNX0RBVEE2CQkJKDB4ZmYgPDwgMTYpCisjZGVm
aW5lIEREQ01fREFUQTUJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBERENNX0RBVEE0CQkJKDB4ZmYg
PDwgMCkKKworc3RydWN0IG10a19oZG1pX2kyYyB7CisJc3RydWN0IGkyY19hZGFwdGVyIGFkYXA7
CisJc3RydWN0IGNsayAqY2xrOworCXZvaWQgX19pb21lbSAqcmVnczsKK307CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBzaWZfc2V0X2JpdChzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIHVuc2lnbmVk
IGludCBvZmZzZXQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl3cml0ZWwocmVh
ZGwoaTJjLT5yZWdzICsgb2Zmc2V0KSB8IHZhbCwgaTJjLT5yZWdzICsgb2Zmc2V0KTsKK30KKwor
c3RhdGljIGlubGluZSB2b2lkIHNpZl9jbHJfYml0KHN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYywg
dW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsKQoreworCXdy
aXRlbChyZWFkbChpMmMtPnJlZ3MgKyBvZmZzZXQpICYgfnZhbCwgaTJjLT5yZWdzICsgb2Zmc2V0
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNpZl9iaXRfaXNfc2V0KHN0cnVjdCBtdGtfaGRt
aV9pMmMgKmkyYywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCQkgIHVuc2lnbmVkIGludCB2YWwp
Cit7CisJcmV0dXJuIChyZWFkbChpMmMtPnJlZ3MgKyBvZmZzZXQpICYgdmFsKSA9PSB2YWw7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWZfd3JpdGVfbWFzayhzdHJ1Y3QgbXRrX2hkbWlfaTJj
ICppMmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJICB1bnNpZ25lZCBpbnQgbWFzaywgdW5z
aWduZWQgaW50IHNoaWZ0LAorCQkJCSAgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl1bnNpZ25lZCBp
bnQgdG1wOworCisJdG1wID0gcmVhZGwoaTJjLT5yZWdzICsgb2Zmc2V0KTsKKwl0bXAgJj0gfm1h
c2s7CisJdG1wIHw9ICh2YWwgPDwgc2hpZnQpICYgbWFzazsKKwl3cml0ZWwodG1wLCBpMmMtPnJl
Z3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzaWZfcmVhZF9t
YXNrKHN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYywKKwkJCQkJIHVuc2lnbmVkIGludCBvZmZzZXQs
IHVuc2lnbmVkIGludCBtYXNrLAorCQkJCQkgdW5zaWduZWQgaW50IHNoaWZ0KQoreworCXJldHVy
biAocmVhZGwoaTJjLT5yZWdzICsgb2Zmc2V0KSAmIG1hc2spID4+IHNoaWZ0OworfQorCitzdGF0
aWMgdm9pZCBkZGNtX3RyaWdnZXJfbW9kZShzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIGludCBt
b2RlKQoreworCWludCB0aW1lb3V0ID0gMjAgKiAxMDAwOworCisJc2lmX3dyaXRlX21hc2soaTJj
LCBERENfRERDTUNUTDEsIEREQ01fU0lGX01PREVfTUFTSywKKwkJICAgICAgIEREQ01fU0lGX01P
REVfT0ZGU0VULCBtb2RlKTsKKwlzaWZfc2V0X2JpdChpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9U
UkkpOworCXdoaWxlIChzaWZfYml0X2lzX3NldChpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9UUkkp
KSB7CisJCXRpbWVvdXQgLT0gMjsKKwkJdWRlbGF5KDIpOworCQlpZiAodGltZW91dCA8PSAwKQor
CQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IG10a19oZG1pX2kyY19yZWFkX21zZyhzdHJ1
Y3QgbXRrX2hkbWlfaTJjICppMmMsIHN0cnVjdCBpMmNfbXNnICptc2cpCit7CisJc3RydWN0IGRl
dmljZSAqZGV2ID0gaTJjLT5hZGFwLmRldi5wYXJlbnQ7CisJdTMyIHJlbWFpbl9jb3VudCwgYWNr
X2NvdW50LCBhY2tfZmluYWwsIHJlYWRfY291bnQsIHRlbXBfY291bnQ7CisJdTMyIGluZGV4ID0g
MDsKKwl1MzIgYWNrOworCWludCBpOworCisJZGRjbV90cmlnZ2VyX21vZGUoaTJjLCBERENNX1NU
QVJUKTsKKwlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19ERENNRDAsIDB4ZmYsIDAsIChtc2ctPmFk
ZHIgPDwgMSkgfCAweDAxKTsKKwlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19ERENNQ1RMMSwgRERD
TV9QR0xFTl9NQVNLLCBERENNX1BHTEVOX09GRlNFVCwKKwkJICAgICAgIDB4MDApOworCWRkY21f
dHJpZ2dlcl9tb2RlKGkyYywgRERDTV9XUklURV9EQVRBKTsKKwlhY2sgPSBzaWZfcmVhZF9tYXNr
KGkyYywgRERDX0REQ01DVEwxLCBERENNX0FDS19NQVNLLCBERENNX0FDS19PRkZTRVQpOworCWRl
dl9kYmcoZGV2LCAiYWNrID0gMHgleFxuIiwgYWNrKTsKKwlpZiAoYWNrICE9IDB4MDEpIHsKKwkJ
ZGV2X2VycihkZXYsICJpMmMgYWNrIGVyciFcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwor
CXJlbWFpbl9jb3VudCA9IG1zZy0+bGVuOworCWFja19jb3VudCA9IChtc2ctPmxlbiAtIDEpIC8g
ODsKKwlhY2tfZmluYWwgPSAwOworCisJd2hpbGUgKHJlbWFpbl9jb3VudCA+IDApIHsKKwkJaWYg
KGFja19jb3VudCA+IDApIHsKKwkJCXJlYWRfY291bnQgPSA4OworCQkJYWNrX2ZpbmFsID0gMDsK
KwkJCWFja19jb3VudC0tOworCQl9IGVsc2UgeworCQkJcmVhZF9jb3VudCA9IHJlbWFpbl9jb3Vu
dDsKKwkJCWFja19maW5hbCA9IDE7CisJCX0KKworCQlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19E
RENNQ1RMMSwgRERDTV9QR0xFTl9NQVNLLAorCQkJICAgICAgIEREQ01fUEdMRU5fT0ZGU0VULCBy
ZWFkX2NvdW50IC0gMSk7CisJCWRkY21fdHJpZ2dlcl9tb2RlKGkyYywgKGFja19maW5hbCA9PSAx
KSA/CisJCQkJICBERENNX1JFQURfREFUQV9OT19BQ0sgOgorCQkJCSAgRERDTV9SRUFEX0RBVEFf
QUNLKTsKKworCQlhY2sgPSBzaWZfcmVhZF9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX0FD
S19NQVNLLAorCQkJCSAgICBERENNX0FDS19PRkZTRVQpOworCQl0ZW1wX2NvdW50ID0gMDsKKwkJ
d2hpbGUgKCgoYWNrICYgKDEgPDwgdGVtcF9jb3VudCkpICE9IDApICYmICh0ZW1wX2NvdW50IDwg
OCkpCisJCQl0ZW1wX2NvdW50Kys7CisJCWlmICgoKGFja19maW5hbCA9PSAxKSAmJiAodGVtcF9j
b3VudCAhPSAocmVhZF9jb3VudCAtIDEpKSkgfHwKKwkJICAgICgoYWNrX2ZpbmFsID09IDApICYm
ICh0ZW1wX2NvdW50ICE9IHJlYWRfY291bnQpKSkgeworCQkJZGV2X2VycihkZXYsICJBZGRyZXNz
IE5BQ0shIEFDSygweCV4KVxuIiwgYWNrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZm9yIChpID0g
cmVhZF9jb3VudDsgaSA+PSAxOyBpLS0pIHsKKwkJCWludCBzaGlmdDsKKwkJCWludCBvZmZzZXQ7
CisKKwkJCWlmIChpID4gNCkgeworCQkJCW9mZnNldCA9IEREQ19ERENNRDE7CisJCQkJc2hpZnQg
PSAoaSAtIDUpICogODsKKwkJCX0gZWxzZSB7CisJCQkJb2Zmc2V0ID0gRERDX0REQ01EMDsKKwkJ
CQlzaGlmdCA9IChpIC0gMSkgKiA4OworCQkJfQorCisJCQltc2ctPmJ1ZltpbmRleCArIGkgLSAx
XSA9IHNpZl9yZWFkX21hc2soaTJjLCBvZmZzZXQsCisJCQkJCQkJCTB4ZmYgPDwgc2hpZnQsCisJ
CQkJCQkJCXNoaWZ0KTsKKwkJfQorCisJCXJlbWFpbl9jb3VudCAtPSByZWFkX2NvdW50OworCQlp
bmRleCArPSByZWFkX2NvdW50OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10
a19oZG1pX2kyY193cml0ZV9tc2coc3RydWN0IG10a19oZG1pX2kyYyAqaTJjLCBzdHJ1Y3QgaTJj
X21zZyAqbXNnKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyYy0+YWRhcC5kZXYucGFyZW50
OworCXUzMiBhY2s7CisKKwlkZGNtX3RyaWdnZXJfbW9kZShpMmMsIEREQ01fU1RBUlQpOworCXNp
Zl93cml0ZV9tYXNrKGkyYywgRERDX0REQ01EMCwgRERDTV9EQVRBMCwgMCwgbXNnLT5hZGRyIDw8
IDEpOworCXNpZl93cml0ZV9tYXNrKGkyYywgRERDX0REQ01EMCwgRERDTV9EQVRBMSwgOCwgbXNn
LT5idWZbMF0pOworCXNpZl93cml0ZV9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX1BHTEVO
X01BU0ssIEREQ01fUEdMRU5fT0ZGU0VULAorCQkgICAgICAgMHgxKTsKKwlkZGNtX3RyaWdnZXJf
bW9kZShpMmMsIEREQ01fV1JJVEVfREFUQSk7CisKKwlhY2sgPSBzaWZfcmVhZF9tYXNrKGkyYywg
RERDX0REQ01DVEwxLCBERENNX0FDS19NQVNLLCBERENNX0FDS19PRkZTRVQpOworCWRldl9kYmco
ZGV2LCAiYWNrID0gJWRcbiIsIGFjayk7CisKKwlpZiAoYWNrICE9IDB4MDMpIHsKKwkJZGV2X2Vy
cihkZXYsICJpMmMgYWNrIGVyciFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIg
KmFkYXB0ZXIsCisJCQkgICAgIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQoreworCXN0
cnVjdCBtdGtfaGRtaV9pMmMgKmkyYyA9IGFkYXB0ZXItPmFsZ29fZGF0YTsKKwlzdHJ1Y3QgZGV2
aWNlICpkZXYgPSBhZGFwdGVyLT5kZXYucGFyZW50OworCWludCByZXQ7CisJaW50IGk7CisKKwlp
ZiAoIWkyYykgeworCQlkZXZfZXJyKGRldiwgImludmFsaWQgYXJndW1lbnRzXG4iKTsKKwkJcmV0
dXJuIC1FSU5WQUw7CisJfQorCisJc2lmX3NldF9iaXQoaTJjLCBERENfRERDTUNUTDAsIEREQ01f
U0NMX1NUUkVDSCk7CisJc2lmX3NldF9iaXQoaTJjLCBERENfRERDTUNUTDAsIEREQ01fU00wRU4p
OworCXNpZl9jbHJfYml0KGkyYywgRERDX0REQ01DVEwwLCBERENNX09EUkFJTik7CisKKwlpZiAo
c2lmX2JpdF9pc19zZXQoaTJjLCBERENfRERDTUNUTDEsIEREQ01fVFJJKSkgeworCQlkZXZfZXJy
KGRldiwgImRkYyBsaW5lIGlzIGJ1c3khXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlz
aWZfd3JpdGVfbWFzayhpMmMsIEREQ19ERENNQ1RMMCwgRERDTV9DTEtfRElWX01BU0ssCisJCSAg
ICAgICBERENNX0NMS19ESVZfT0ZGU0VULCBTSUYxX0NMT0spOworCisJZm9yIChpID0gMDsgaSA8
IG51bTsgaSsrKSB7CisJCXN0cnVjdCBpMmNfbXNnICptc2cgPSAmbXNnc1tpXTsKKworCQlkZXZf
ZGJnKGRldiwgImkyYyBtc2csIGFkcjoweCV4LCBmbGFnczolZCwgbGVuIDoweCV4XG4iLAorCQkJ
bXNnLT5hZGRyLCBtc2ctPmZsYWdzLCBtc2ctPmxlbik7CisKKwkJaWYgKG1zZy0+ZmxhZ3MgJiBJ
MkNfTV9SRCkKKwkJCXJldCA9IG10a19oZG1pX2kyY19yZWFkX21zZyhpMmMsIG1zZyk7CisJCWVs
c2UKKwkJCXJldCA9IG10a19oZG1pX2kyY193cml0ZV9tc2coaTJjLCBtc2cpOworCQlpZiAocmV0
IDwgMCkKKwkJCWdvdG8geGZlcl9lbmQ7CisJfQorCisJZGRjbV90cmlnZ2VyX21vZGUoaTJjLCBE
RENNX1NUT1ApOworCisJcmV0dXJuIGk7CisKK3hmZXJfZW5kOgorCWRkY21fdHJpZ2dlcl9tb2Rl
KGkyYywgRERDTV9TVE9QKTsKKwlkZXZfZXJyKGRldiwgImRkYyBmYWlsZWQhXG4iKTsKKwlyZXR1
cm4gcmV0OworfQorCitzdGF0aWMgdTMyIG10a19oZG1pX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRh
cHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNf
RU1VTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIG10a19oZG1pX2ky
Y19hbGdvcml0aG0gPSB7CisJLm1hc3Rlcl94ZmVyID0gbXRrX2hkbWlfaTJjX3hmZXIsCisJLmZ1
bmN0aW9uYWxpdHkgPSBtdGtfaGRtaV9pMmNfZnVuYywKK307CisKK3N0YXRpYyBpbnQgbXRrX2hk
bWlfaTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRl
dmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmM7CisJc3Ry
dWN0IHJlc291cmNlICptZW07CisJaW50IHJldDsKKworCWkyYyA9IGRldm1fa3phbGxvYyhkZXYs
IHNpemVvZihzdHJ1Y3QgbXRrX2hkbWlfaTJjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpMmMpCisJ
CXJldHVybiAtRU5PTUVNOworCisJaTJjLT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZGRjLWky
YyIpOworCWlmIChJU19FUlIoaTJjLT5jbGspKSB7CisJCWRldl9lcnIoZGV2LCAiZ2V0IGRkY19j
bGsgZmFpbGVkIDogJXAgLFxuIiwgaTJjLT5jbGspOworCQlyZXR1cm4gUFRSX0VSUihpMmMtPmNs
ayk7CisJfQorCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0Vf
TUVNLCAwKTsKKwlpMmMtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwg
bWVtKTsKKwlpZiAoSVNfRVJSKGkyYy0+cmVncykpIHsKKwkJZGV2X2VycihkZXYsICJnZXQgbWVt
b3J5IHNvdXJjZSBmYWlsIVxuIik7CisJCXJldHVybiBQVFJfRVJSKGkyYy0+cmVncyk7CisJfQor
CisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGkyYy0+Y2xrKTsKKwlpZiAocmV0KSB7CisJCWRl
dl9lcnIoZGV2LCAiZW5hYmxlIGRkYyBjbGsgZmFpbGVkIVxuIik7CisJCXJldHVybiByZXQ7CisJ
fQorCisJc3RybGNweShpMmMtPmFkYXAubmFtZSwgIm1lZGlhdGVrLWhkbWktaTJjIiwgc2l6ZW9m
KGkyYy0+YWRhcC5uYW1lKSk7CisJaTJjLT5hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7CisJaTJj
LT5hZGFwLmFsZ28gPSAmbXRrX2hkbWlfaTJjX2FsZ29yaXRobTsKKwlpMmMtPmFkYXAucmV0cmll
cyA9IDM7CisJaTJjLT5hZGFwLmRldi5vZl9ub2RlID0gZGV2LT5vZl9ub2RlOworCWkyYy0+YWRh
cC5hbGdvX2RhdGEgPSBpMmM7CisJaTJjLT5hZGFwLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2Owor
CisJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZpMmMtPmFkYXApOworCWlmIChyZXQgPCAwKSB7CisJ
CWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBidXMgdG8gaTJjIGNvcmVcbiIpOworCQlnb3Rv
IGVycl9jbGtfZGlzYWJsZTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpMmMp
OworCisJZGV2X2RiZyhkZXYsICJpMmMtPmFkYXA6ICVwXG4iLCAmaTJjLT5hZGFwKTsKKwlkZXZf
ZGJnKGRldiwgImkyYy0+Y2xrOiAlcFxuIiwgaTJjLT5jbGspOworCWRldl9kYmcoZGV2LCAicGh5
c2ljYWwgYWRyOiAweCVsbHgsIGVuZDogMHglbGx4XG4iLCBtZW0tPnN0YXJ0LAorCQltZW0tPmVu
ZCk7CisKKwlyZXR1cm4gMDsKKworZXJyX2Nsa19kaXNhYmxlOgorCWNsa19kaXNhYmxlX3VucHJl
cGFyZShpMmMtPmNsayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9p
MmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19o
ZG1pX2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwljbGtfZGlzYWJs
ZV91bnByZXBhcmUoaTJjLT5jbGspOworCWkyY19kZWxfYWRhcHRlcigmaTJjLT5hZGFwKTsKKwor
CXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfaGRt
aV9pMmNfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1oZG1p
LWRkYyIsIH0sCisJe30sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX2Rk
Y19kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX2hkbWlfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSBt
dGtfaGRtaV9pMmNfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWhk
bWktZGRjIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2hkbWlfaTJjX21hdGNoLAorCX0sCit9
OworCitNT0RVTEVfQVVUSE9SKCJKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4iKTsKK01P
RFVMRV9ERVNDUklQVElPTigiTWVkaWFUZWsgSERNSSBpMmMgRHJpdmVyIik7CitNT0RVTEVfTElD
RU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2hkbWlfaHcuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9ody5jCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YzdmZmMKLS0tIC9kZXYvbnVsbAorKysg
Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcuYwpAQCAtMCwwICsxLDY1MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEpp
ZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g
MiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgIm10a19oZG1pX2h3LmgiCisjaW5j
bHVkZSAibXRrX2hkbWlfcmVncy5oIgorI2luY2x1ZGUgIm10a19oZG1pLmgiCisKKyNpbmNsdWRl
IDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4
L2hkbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5o
PgorCitzdGF0aWMgdTMyIG10a19oZG1pX3JlYWQoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIg
b2Zmc2V0KQoreworCXJldHVybiByZWFkbChoZG1pLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3Rh
dGljIHZvaWQgbXRrX2hkbWlfd3JpdGUoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0
LCB1MzIgdmFsKQoreworCXdyaXRlbCh2YWwsIGhkbWktPnJlZ3MgKyBvZmZzZXQpOworfQorCitz
dGF0aWMgdm9pZCBtdGtfaGRtaV9tYXNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNl
dCwgdTMyIHZhbCwgdTMyIG1hc2spCit7CisJdTMyIHRtcCA9IG10a19oZG1pX3JlYWQoaGRtaSwg
b2Zmc2V0KSAmIH5tYXNrOworCisJdG1wIHw9ICh2YWwgJiBtYXNrKTsKKwltdGtfaGRtaV93cml0
ZShoZG1pLCBvZmZzZXQsIHRtcCk7Cit9CisKKyNkZWZpbmUgTkNUU19CWVRFUyAgICAgICAgICAw
eDA3CisKK3ZvaWQgbXRrX2hkbWlfaHdfdmlkX2JsYWNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwK
KwkJCSAgIGJvb2wgYmxhY2spCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBWSURFT19DRkdfNCwg
YmxhY2sgPyBHRU5fUkdCIDogTk9STUFMX1BBVEgsCisJCSAgICAgIFZJREVPX1NPVVJDRV9TRUwp
OworfQorCit2b2lkIG10a19oZG1pX2h3X21ha2VfcmVnX3dyaXRhYmxlKHN0cnVjdCBtdGtfaGRt
aSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19y
ZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIEhETUlfUENM
S19GUkVFX1JVTiwgZW5hYmxlID8gSERNSV9QQ0xLX0ZSRUVfUlVOIDogMCk7CisJcmVnbWFwX3Vw
ZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19D
RkcxQywKKwkJCSAgIEhETUlfT04gfCBBTkxHX09OLCBlbmFibGUgPyAoSERNSV9PTiB8IEFOTEdf
T04pIDogMCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfMXA0X3ZlcnNpb25fZW5hYmxlKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhk
bWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAg
IEhETUkyUDBfRU4sIGVuYWJsZSA/IDAgOiBIRE1JMlAwX0VOKTsKK30KKwordm9pZCBtdGtfaGRt
aV9od19hdWRfbXV0ZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgbXV0ZSkKK3sKKwltdGtf
aGRtaV9tYXNrKGhkbWksIEdSTF9BVURJT19DRkcsIG11dGUgPyBBVURJT19aRVJPIDogMCwgQVVE
SU9fWkVSTyk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfcmVzZXQoc3RydWN0IG10a19oZG1pICpo
ZG1pKQoreworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNf
b2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkgICBIRE1JX1JTVCwgSERNSV9SU1QpOworCXJl
Z21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERN
SV9TWVNfQ0ZHMUMsCisJCQkgICBIRE1JX1JTVCwgMCk7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBH
UkxfQ0ZHMywgMCwgQ0ZHM19DT05UUk9MX1BBQ0tFVF9ERUxBWSk7CisJcmVnbWFwX3VwZGF0ZV9i
aXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcxQywK
KwkJCSAgIEFOTEdfT04sIEFOTEdfT04pOworfQorCit2b2lkIG10a19oZG1pX2h3X2VuYWJsZV9u
b3RpY2Uoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZV9ub3RpY2UpCit7CisJbXRr
X2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHMiwgZW5hYmxlX25vdGljZSA/IENGRzJfTk9USUNFX0VO
IDogMCwKKwkJICAgICAgQ0ZHMl9OT1RJQ0VfRU4pOworfQorCit2b2lkIG10a19oZG1pX2h3X3dy
aXRlX2ludF9tYXNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyIGludF9tYXNrKQoreworCW10
a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JTlRfTUFTSywgaW50X21hc2spOworfQorCit2b2lkIG10
a19oZG1pX2h3X2VuYWJsZV9kdmlfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5h
YmxlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzEsIGVuYWJsZSA/IENGRzFfRFZJ
IDogMCwgQ0ZHMV9EVkkpOworfQorCit2b2lkIG10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShz
dHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHU4ICpidWZmZXIsIHU4IGxlbikKK3sKKwl1MzIgY3RybF9y
ZWcgPSBHUkxfQ1RSTDsKKwlpbnQgaTsKKwl1OCAqZnJhbWVfZGF0YTsKKwl1OCBmcmFtZV90eXBl
OworCXU4IGZyYW1lX3ZlcjsKKwl1OCBmcmFtZV9sZW47CisJdTggY2hlY2tzdW07CisJaW50IGN0
cmxfZnJhbWVfZW4gPSAwOworCisJZnJhbWVfdHlwZSA9ICpidWZmZXI7CisJYnVmZmVyICs9IDE7
CisJZnJhbWVfdmVyID0gKmJ1ZmZlcjsKKwlidWZmZXIgKz0gMTsKKwlmcmFtZV9sZW4gPSAqYnVm
ZmVyOworCWJ1ZmZlciArPSAxOworCWNoZWNrc3VtID0gKmJ1ZmZlcjsKKwlidWZmZXIgKz0gMTsK
KwlmcmFtZV9kYXRhID0gYnVmZmVyOworCisJZGV2X2RiZyhoZG1pLT5kZXYsCisJCSJmcmFtZV90
eXBlOjB4JXgsZnJhbWVfdmVyOjB4JXgsZnJhbWVfbGVuOjB4JXgsY2hlY2tzdW06MHgleFxuIiwK
KwkJZnJhbWVfdHlwZSwgZnJhbWVfdmVyLCBmcmFtZV9sZW4sIGNoZWNrc3VtKTsKKworCXN3aXRj
aCAoZnJhbWVfdHlwZSkgeworCWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9BVkk6CisJCWN0cmxf
ZnJhbWVfZW4gPSBDVFJMX0FWSV9FTjsKKwkJY3RybF9yZWcgPSBHUkxfQ1RSTDsKKwkJYnJlYWs7
CisJY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX1NQRDoKKwkJY3RybF9mcmFtZV9lbiA9IENUUkxf
U1BEX0VOOworCQljdHJsX3JlZyA9IEdSTF9DVFJMOworCQlicmVhazsKKwljYXNlIEhETUlfSU5G
T0ZSQU1FX1RZUEVfQVVESU86CisJCWN0cmxfZnJhbWVfZW4gPSBDVFJMX0FVRElPX0VOOworCQlj
dHJsX3JlZyA9IEdSTF9DVFJMOworCQlicmVhazsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVf
VkVORE9SOgorCQljdHJsX2ZyYW1lX2VuID0gVlNfRU47CisJCWN0cmxfcmVnID0gR1JMX0FDUF9J
U1JDX0NUUkw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV9t
YXNrKGhkbWksIGN0cmxfcmVnLCAwLCBjdHJsX2ZyYW1lX2VuKTsKKwltdGtfaGRtaV93cml0ZSho
ZG1pLCBHUkxfSU5GT0ZSTV9UWVBFLCBmcmFtZV90eXBlKTsKKwltdGtfaGRtaV93cml0ZShoZG1p
LCBHUkxfSU5GT0ZSTV9WRVIsIGZyYW1lX3Zlcik7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JM
X0lORk9GUk1fTE5HLCBmcmFtZV9sZW4pOworCisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lG
TV9QT1JULCBjaGVja3N1bSk7CisJZm9yIChpID0gMDsgaSA8IGZyYW1lX2xlbjsgaSsrKQorCQlt
dGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSUZNX1BPUlQsIGZyYW1lX2RhdGFbaV0pOworCisJbXRr
X2hkbWlfbWFzayhoZG1pLCBjdHJsX3JlZywgY3RybF9mcmFtZV9lbiwgY3RybF9mcmFtZV9lbik7
Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfc2VuZF9hdWRfcGFja2V0KHN0cnVjdCBtdGtfaGRtaSAq
aGRtaSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfU0hJRlRfUjIs
IGVuYWJsZSA/IDAgOiBBVURJT19QQUNLRVRfT0ZGLAorCQkgICAgICBBVURJT19QQUNLRVRfT0ZG
KTsKK30KKwordm9pZCBtdGtfaGRtaV9od19jb25maWdfc3lzKHN0cnVjdCBtdGtfaGRtaSAqaGRt
aSkKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29m
ZnNldCArIEhETUlfU1lTX0NGRzIwLAorCQkJICAgSERNSV9PVVRfRklGT19FTiB8IE1ITF9NT0RF
X09OLCAwKTsKKwltZGVsYXkoMik7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdt
YXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIEhETUlfT1VUX0ZJ
Rk9fRU4gfCBNSExfTU9ERV9PTiwgSERNSV9PVVRfRklGT19FTik7Cit9CisKK3ZvaWQgbXRrX2hk
bWlfaHdfc2V0X2RlZXBfY29sb3JfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJcmVn
bWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1J
X1NZU19DRkcyMCwKKwkJCSAgIERFRVBfQ09MT1JfTU9ERV9NQVNLIHwgREVFUF9DT0xPUl9FTiwg
Q09MT1JfOEJJVF9NT0RFKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19zZW5kX2F2X211dGUoc3Ry
dWN0IG10a19oZG1pICpoZG1pKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzQsIDAs
IENUUkxfQVZNVVRFKTsKKwltZGVsYXkoMik7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZH
NCwgQ1RSTF9BVk1VVEUsIENUUkxfQVZNVVRFKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19zZW5k
X2F2X3VubXV0ZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlfbWFzayhoZG1p
LCBHUkxfQ0ZHNCwgQ0ZHNF9BVl9VTk1VVEVfRU4sCisJCSAgICAgIENGRzRfQVZfVU5NVVRFX0VO
IHwgQ0ZHNF9BVl9VTk1VVEVfU0VUKTsKKwltZGVsYXkoMik7CisJbXRrX2hkbWlfbWFzayhoZG1p
LCBHUkxfQ0ZHNCwgQ0ZHNF9BVl9VTk1VVEVfU0VULAorCQkgICAgICBDRkc0X0FWX1VOTVVURV9F
TiB8IENGRzRfQVZfVU5NVVRFX1NFVCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfbmN0c19lbmFi
bGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIG9uKQoreworCW10a19oZG1pX21hc2soaGRt
aSwgR1JMX0NUU19DVFJMLCBvbiA/IDAgOiBDVFNfQ1RSTF9TT0ZULAorCQkgICAgICBDVFNfQ1RS
TF9TT0ZUKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19uY3RzX2F1dG9fd3JpdGVfZW5hYmxlKHN0
cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlfbWFzayhoZG1p
LCBHUkxfQ1RTX0NUUkwsIGVuYWJsZSA/IE5DVFNfV1JJX0FOWVRJTUUgOiAwLAorCQkgICAgICBO
Q1RTX1dSSV9BTllUSU1FKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19tc2ljX3NldHRpbmcoc3Ry
dWN0IG10a19oZG1pICpoZG1pLAorCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v
ZGUpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHNCwgMCwgQ0ZHX01ITF9NT0RFKTsK
KworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFICYmCisJICAgIG1v
ZGUtPmNsb2NrID09IDc0MjUwICYmCisJICAgIG1vZGUtPnZkaXNwbGF5ID09IDEwODApCisJCW10
a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzIsIDAsIE1ITF9ERV9TRUwpOworCWVsc2UKKwkJbXRr
X2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHMiwgTUhMX0RFX1NFTCwgTUhMX0RFX1NFTCk7Cit9CisK
K3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9jaGFubmVsX3N3YXAoc3RydWN0IG10a19oZG1pICpo
ZG1pLAorCQkJCSAgICAgIGVudW0gaGRtaV9hdWRfY2hhbm5lbF9zd2FwX3R5cGUgc3dhcCkKK3sK
Kwl1OCBzd2FwX2JpdDsKKworCXN3aXRjaCAoc3dhcCkgeworCWNhc2UgSERNSV9BVURfU1dBUF9M
UjoKKwkJc3dhcF9iaXQgPSBMUl9TV0FQOworCQlicmVhazsKKwljYXNlIEhETUlfQVVEX1NXQVBf
TEZFX0NDOgorCQlzd2FwX2JpdCA9IExGRV9DQ19TV0FQOworCQlicmVhazsKKwljYXNlIEhETUlf
QVVEX1NXQVBfTFNSUzoKKwkJc3dhcF9iaXQgPSBMU1JTX1NXQVA7CisJCWJyZWFrOworCWNhc2Ug
SERNSV9BVURfU1dBUF9STFNfUlJTOgorCQlzd2FwX2JpdCA9IFJMU19SUlNfU1dBUDsKKwkJYnJl
YWs7CisJY2FzZSBIRE1JX0FVRF9TV0FQX0xSX1NUQVRVUzoKKwkJc3dhcF9iaXQgPSBMUl9TVEFU
VVNfU1dBUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3dhcF9iaXQgPSBMRkVfQ0NfU1dBUDsK
KwkJYnJlYWs7CisJfQorCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NIX1NXQVAsIHN3YXBfYml0
LCAweGZmKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfcmF3X2RhdGFfZW5hYmxlKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBH
UkxfTUlYX0NUUkwsIGVuYWJsZSA/IE1JWF9DVFJMX0ZMQVQgOiAwLAorCQkgICAgICBNSVhfQ1RS
TF9GTEFUKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2JpdF9udW0oc3RydWN0IG10
a19oZG1pICpoZG1pLAorCQkJCSBlbnVtIGhkbWlfYXVkaW9fc2FtcGxlX3NpemUgYml0X251bSkK
K3sKKwl1MzIgdmFsID0gMDsKKworCWlmIChiaXRfbnVtID09IEhETUlfQVVESU9fU0FNUExFX1NJ
WkVfMTYpCisJCXZhbCA9IEFPVVRfMTZCSVQ7CisJZWxzZSBpZiAoYml0X251bSA9PSBIRE1JX0FV
RElPX1NBTVBMRV9TSVpFXzIwKQorCQl2YWwgPSBBT1VUXzIwQklUOworCWVsc2UgaWYgKGJpdF9u
dW0gPT0gSERNSV9BVURJT19TQU1QTEVfU0laRV8yNCkKKwkJdmFsID0gQU9VVF8yNEJJVDsKKwor
CW10a19oZG1pX21hc2soaGRtaSwgR1JMX0FPVVRfQk5VTV9TRUwsIHZhbCwgMHgwMyk7Cit9CisK
K3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9pMnNfZm10KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwK
KwkJCQkgZW51bSBoZG1pX2F1ZF9pMnNfZm10IGkyc19mbXQpCit7CisJdTMyIHZhbCA9IDA7CisK
Kwl2YWwgPSBtdGtfaGRtaV9yZWFkKGhkbWksIEdSTF9DRkcwKTsKKwl2YWwgJj0gfjB4MzM7CisK
Kwlzd2l0Y2ggKGkyc19mbXQpIHsKKwljYXNlIEhETUlfSTJTX01PREVfUkpUXzI0QklUOgorCQl2
YWwgfD0gKENGRzBfSTJTX01PREVfUlRKIHwgQ0ZHMF9JMlNfTU9ERV8yNEJJVCk7CisJCWJyZWFr
OworCWNhc2UgSERNSV9JMlNfTU9ERV9SSlRfMTZCSVQ6CisJCXZhbCB8PSAoQ0ZHMF9JMlNfTU9E
RV9SVEogfCBDRkcwX0kyU19NT0RFXzE2QklUKTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0kyU19N
T0RFX0xKVF8yNEJJVDoKKwkJdmFsIHw9IChDRkcwX0kyU19NT0RFX0xUSiB8IENGRzBfSTJTX01P
REVfMjRCSVQpOworCQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfTEpUXzE2QklUOgorCQl2
YWwgfD0gKENGRzBfSTJTX01PREVfTFRKIHwgQ0ZHMF9JMlNfTU9ERV8xNkJJVCk7CisJCWJyZWFr
OworCWNhc2UgSERNSV9JMlNfTU9ERV9JMlNfMjRCSVQ6CisJCXZhbCB8PSAoQ0ZHMF9JMlNfTU9E
RV9JMlMgfCBDRkcwX0kyU19NT0RFXzI0QklUKTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0kyU19N
T0RFX0kyU18xNkJJVDoKKwkJdmFsIHw9IChDRkcwX0kyU19NT0RFX0kyUyB8IENGRzBfSTJTX01P
REVfMTZCSVQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJbXRrX2hkbWlf
d3JpdGUoaGRtaSwgR1JMX0NGRzAsIHZhbCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3Nl
dF9oaWdoX2JpdHJhdGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sKKwlt
dGtfaGRtaV9tYXNrKGhkbWksIEdSTF9BT1VUX0JOVU1fU0VMLAorCQkgICAgICBlbmFibGUgPyBI
SUdIX0JJVF9SQVRFX1BBQ0tFVF9BTElHTiA6IDAsCisJCSAgICAgIEhJR0hfQklUX1JBVEVfUEFD
S0VUX0FMSUdOKTsKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9BVURJT19DRkcsIGVuYWJsZSA/
IEhJR0hfQklUX1JBVEUgOiAwLAorCQkgICAgICBISUdIX0JJVF9SQVRFKTsKK30KKwordm9pZCBt
dGtfaGRtaV9waHlfYXVkX2RzdF9ub3JtYWxfZG91YmxlX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWksCisJCQkJCSAgICAgICBib29sIGVuYWJsZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWks
IEdSTF9BVURJT19DRkcsIGVuYWJsZSA/IERTVF9OT1JNQUxfRE9VQkxFIDogMCwKKwkJICAgICAg
RFNUX05PUk1BTF9ET1VCTEUpOworfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9kc3RfZW5hYmxl
KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlfbWFzayho
ZG1pLCBHUkxfQVVESU9fQ0ZHLCBlbmFibGUgPyBTQUNEX0RTVCA6IDAsIFNBQ0RfRFNUKTsKK30K
Kwordm9pZCBtdGtfaGRtaV9od19hdWRfZHNkX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWks
IGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0FVRElPX0NGRywgZW5h
YmxlID8gU0FDRF9TRUwgOiAwLCBTQUNEX1NFTCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVk
X3NldF9pMnNfY2hhbl9udW0oc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSAgICAgIGVudW0g
aGRtaV9hdWRfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCQkgICAgICB1OCBjaGFubmVs
X2NvdW50KQoreworCXU4IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHZhbF80OworCisJaWYgKGNoYW5u
ZWxfY291bnQgPT0gMikgeworCQl2YWxfMSA9IDB4MDQ7CisJCXZhbF8yID0gMHg1MDsKKwl9IGVs
c2UgaWYgKGNoYW5uZWxfY291bnQgPT0gMyB8fCBjaGFubmVsX2NvdW50ID09IDQpIHsKKwkJaWYg
KGNoYW5uZWxfY291bnQgPT0gNCAmJgorCQkgICAgKGNoYW5uZWxfdHlwZSA9PSBIRE1JX0FVRF9D
SEFOX1RZUEVfM18wX0xSUyB8fAorCQkgICAgY2hhbm5lbF90eXBlID09IEhETUlfQVVEX0NIQU5f
VFlQRV80XzApKSB7CisJCQl2YWxfMSA9IDB4MTQ7CisJCX0gZWxzZSB7CisJCQl2YWxfMSA9IDB4
MGM7CisJCX0KKwkJdmFsXzIgPSAweDUwOworCX0gZWxzZSBpZiAoY2hhbm5lbF9jb3VudCA9PSA2
IHx8IGNoYW5uZWxfY291bnQgPT0gNSkgeworCQlpZiAoY2hhbm5lbF9jb3VudCA9PSA2ICYmCisJ
CSAgICBjaGFubmVsX3R5cGUgIT0gSERNSV9BVURfQ0hBTl9UWVBFXzVfMSAmJgorCQkgICAgY2hh
bm5lbF90eXBlICE9IEhETUlfQVVEX0NIQU5fVFlQRV80XzFfQ0xSUykgeworCQkJdmFsXzEgPSAw
eDNjOworCQkJdmFsXzIgPSAweDUwOworCQl9IGVsc2UgeworCQkJdmFsXzEgPSAweDFjOworCQkJ
dmFsXzIgPSAweDUwOworCQl9CisJfSBlbHNlIGlmIChjaGFubmVsX2NvdW50ID09IDggfHwgY2hh
bm5lbF9jb3VudCA9PSA3KSB7CisJCXZhbF8xID0gMHgzYzsKKwkJdmFsXzIgPSAweDUwOworCX0g
ZWxzZSB7CisJCXZhbF8xID0gMHgwNDsKKwkJdmFsXzIgPSAweDUwOworCX0KKworCXZhbF8zID0g
MHhjNjsKKwl2YWxfNCA9IDB4ZmE7CisKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfQ0hfU1cw
LCB2YWxfMik7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NIX1NXMSwgdmFsXzMpOworCW10
a19oZG1pX3dyaXRlKGhkbWksIEdSTF9DSF9TVzIsIHZhbF80KTsKKwltdGtfaGRtaV93cml0ZSho
ZG1pLCBHUkxfSTJTX1VWLCB2YWxfMSk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9p
bnB1dF90eXBlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgZW51bSBoZG1pX2F1ZF9p
bnB1dF90eXBlIGlucHV0X3R5cGUpCit7CisJdTMyIHZhbCA9IDA7CisKKwl2YWwgPSBtdGtfaGRt
aV9yZWFkKGhkbWksIEdSTF9DRkcxKTsKKwlpZiAoaW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBV
VF9JMlMgJiYKKwkgICAgKHZhbCAmIENGRzFfU1BESUYpID09IENGRzFfU1BESUYpIHsKKwkJdmFs
ICY9IH5DRkcxX1NQRElGOworCX0gZWxzZSBpZiAoaW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBV
VF9TUERJRiAmJgorCQkodmFsICYgQ0ZHMV9TUERJRikgPT0gMCkgeworCQl2YWwgfD0gQ0ZHMV9T
UERJRjsKKwl9CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NGRzEsIHZhbCk7Cit9CisKK3Zv
aWQgbXRrX2hkbWlfaHdfYXVkX3NldF9jaGFubmVsX3N0YXR1cyhzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWksCisJCQkJCXU4ICpsX2NoYW5fc3RhdHVzLCB1OCAqcl9jaGFuX3N0YXR1cywKKwkJCQkJZW51
bSBoZG1pX2F1ZGlvX3NhbXBsZV9mcmVxdWVuY3kKKwkJCQkJYXVkX2hkbWlfZnMpCit7CisJdTgg
bF9zdGF0dXNbNV07CisJdTggcl9zdGF0dXNbNV07CisJdTggdmFsID0gMDsKKworCWxfc3RhdHVz
WzBdID0gbF9jaGFuX3N0YXR1c1swXTsKKwlsX3N0YXR1c1sxXSA9IGxfY2hhbl9zdGF0dXNbMV07
CisJbF9zdGF0dXNbMl0gPSBsX2NoYW5fc3RhdHVzWzJdOworCXJfc3RhdHVzWzBdID0gcl9jaGFu
X3N0YXR1c1swXTsKKwlyX3N0YXR1c1sxXSA9IHJfY2hhbl9zdGF0dXNbMV07CisJcl9zdGF0dXNb
Ml0gPSByX2NoYW5fc3RhdHVzWzJdOworCisJbF9zdGF0dXNbMF0gJj0gfjB4MDI7CisJcl9zdGF0
dXNbMF0gJj0gfjB4MDI7CisKKwl2YWwgPSBsX2NoYW5fc3RhdHVzWzNdICYgMHhmMDsKKwlzd2l0
Y2ggKGF1ZF9oZG1pX2ZzKSB7CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfMzIw
MDA6CisJCXZhbCB8PSAweDAzOworCQlicmVhazsKKwljYXNlIEhETUlfQVVESU9fU0FNUExFX0ZS
RVFVRU5DWV80NDEwMDoKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVO
Q1lfODgyMDA6CisJCXZhbCB8PSAweDA4OworCQlicmVhazsKKwljYXNlIEhETUlfQVVESU9fU0FN
UExFX0ZSRVFVRU5DWV85NjAwMDoKKwkJdmFsIHw9IDB4MGE7CisJCWJyZWFrOworCWNhc2UgSERN
SV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ4MDAwOgorCQl2YWwgfD0gMHgwMjsKKwkJYnJlYWs7
CisJZGVmYXVsdDoKKwkJdmFsIHw9IDB4MDI7CisJCWJyZWFrOworCX0KKwlsX3N0YXR1c1szXSA9
IHZhbDsKKwlyX3N0YXR1c1szXSA9IHZhbDsKKworCXZhbCA9IGxfY2hhbl9zdGF0dXNbNF07CisJ
dmFsIHw9ICgofihsX3N0YXR1c1szXSAmIDB4MGYpKSA8PCA0KTsKKwlsX3N0YXR1c1s0XSA9IHZh
bDsKKwlyX3N0YXR1c1s0XSA9IHZhbDsKKworCXZhbCA9IGxfc3RhdHVzWzBdOworCW10a19oZG1p
X3dyaXRlKGhkbWksIEdSTF9JMlNfQ19TVEEwLCB2YWwpOworCW10a19oZG1pX3dyaXRlKGhkbWks
IEdSTF9MX1NUQVRVU18wLCB2YWwpOworCisJdmFsID0gcl9zdGF0dXNbMF07CisJbXRrX2hkbWlf
d3JpdGUoaGRtaSwgR1JMX1JfU1RBVFVTXzAsIHZhbCk7CisKKwl2YWwgPSBsX3N0YXR1c1sxXTsK
KwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSTJTX0NfU1RBMSwgdmFsKTsKKwltdGtfaGRtaV93
cml0ZShoZG1pLCBHUkxfTF9TVEFUVVNfMSwgdmFsKTsKKworCXZhbCA9IHJfc3RhdHVzWzFdOwor
CW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9SX1NUQVRVU18xLCB2YWwpOworCisJdmFsID0gbF9z
dGF0dXNbMl07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0kyU19DX1NUQTIsIHZhbCk7CisJ
bXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0xfU1RBVFVTXzIsIHZhbCk7CisKKwl2YWwgPSByX3N0
YXR1c1syXTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNfMiwgdmFsKTsKKwor
CXZhbCA9IGxfc3RhdHVzWzNdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JMlNfQ19TVEEz
LCB2YWwpOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9MX1NUQVRVU18zLCB2YWwpOworCisJ
dmFsID0gcl9zdGF0dXNbM107CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX1JfU1RBVFVTXzMs
IHZhbCk7CisKKwl2YWwgPSBsX3N0YXR1c1s0XTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxf
STJTX0NfU1RBNCwgdmFsKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTF9TVEFUVVNfNCwg
dmFsKTsKKworCXZhbCA9IHJfc3RhdHVzWzRdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9S
X1NUQVRVU180LCB2YWwpOworCisJZm9yICh2YWwgPSAwOyB2YWwgPCAxOTsgdmFsKyspIHsKKwkJ
bXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0xfU1RBVFVTXzUgKyB2YWwgKiA0LCAwKTsKKwkJbXRr
X2hkbWlfd3JpdGUoaGRtaSwgR1JMX1JfU1RBVFVTXzUgKyB2YWwgKiA0LCAwKTsKKwl9Cit9CisK
K3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NyY19yZWVuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkp
Cit7CisJdTMyIHZhbDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JMX01JWF9DVFJM
KTsKKwlpZiAodmFsICYgTUlYX0NUUkxfU1JDX0VOKSB7CisJCXZhbCAmPSB+TUlYX0NUUkxfU1JD
X0VOOworCQltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTUlYX0NUUkwsIHZhbCk7CisJCXVzbGVl
cF9yYW5nZSgyNTUsIDUxMik7CisJCXZhbCB8PSBNSVhfQ1RSTF9TUkNfRU47CisJCW10a19oZG1p
X3dyaXRlKGhkbWksIEdSTF9NSVhfQ1RSTCwgdmFsKTsKKwl9Cit9CisKK3ZvaWQgbXRrX2hkbWlf
aHdfYXVkX3NyY19vZmYoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXUzMiB2YWw7CisKKwl2
YWwgPSBtdGtfaGRtaV9yZWFkKGhkbWksIEdSTF9NSVhfQ1RSTCk7CisJdmFsICY9IH5NSVhfQ1RS
TF9TUkNfRU47CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX01JWF9DVFJMLCB2YWwpOworCW10
a19oZG1pX3dyaXRlKGhkbWksIEdSTF9TSElGVF9MMSwgMHgwMCk7Cit9CisKK3ZvaWQgbXRrX2hk
bWlfaHdfYXVkX3NldF9tY2xrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgZW51bSBoZG1pX2F1ZF9t
Y2xrIG1jbGspCit7CisJdTMyIHZhbDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JM
X0NGRzUpOworCXZhbCAmPSBDRkc1X0NEX1JBVElPX01BU0s7CisKKwlzd2l0Y2ggKG1jbGspIHsK
KwljYXNlIEhETUlfQVVEX01DTEtfMTI4RlM6CisJCXZhbCB8PSBDRkc1X0ZTMTI4OworCQlicmVh
azsKKwljYXNlIEhETUlfQVVEX01DTEtfMjU2RlM6CisJCXZhbCB8PSBDRkc1X0ZTMjU2OworCQli
cmVhazsKKwljYXNlIEhETUlfQVVEX01DTEtfMzg0RlM6CisJCXZhbCB8PSBDRkc1X0ZTMzg0Owor
CQlicmVhazsKKwljYXNlIEhETUlfQVVEX01DTEtfNTEyRlM6CisJCXZhbCB8PSBDRkc1X0ZTNTEy
OworCQlicmVhazsKKwljYXNlIEhETUlfQVVEX01DTEtfNzY4RlM6CisJCXZhbCB8PSBDRkc1X0ZT
NzY4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgfD0gQ0ZHNV9GUzI1NjsKKwkJYnJlYWs7
CisJfQorCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9DRkc1LCB2YWwpOworfQorCit2b2lkIG10
a19oZG1pX2h3X2F1ZF9hY2xrX2ludl9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29s
IGVuYWJsZSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gbXRrX2hkbWlfcmVhZChoZG1pLCBHUkxf
Q0ZHMik7CisJaWYgKGVuYWJsZSkKKwkJdmFsIHw9IDB4ODA7CisJZWxzZQorCQl2YWwgJj0gfjB4
ODA7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NGRzIsIHZhbCk7Cit9CisKK3N0cnVjdCBo
ZG1pX2Fjcl9uIHsKKwl1bnNpZ25lZCBpbnQgY2xvY2s7CisJdW5zaWduZWQgaW50IG5bM107Cit9
OworCisvKiBSZWNvbW1lbmRlZCBOIHZhbHVlcyBmcm9tIEhETUkgc3BlY2lmaWNhdGlvbiwgdGFi
bGVzIDctMSB0byA3LTMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRtaV9hY3JfbiBoZG1pX3Jl
Y19uX3RhYmxlW10gPSB7CisJLyogQ2xvY2ssIE46IDMya0h6IDQ0LjFrSHogNDhrSHogKi8KKwl7
ICAyNTE3NSwgeyAgNDU3NiwgIDcwMDcsICA2ODY0IH0gfSwKKwl7ICA3NDE3NiwgeyAxMTY0OCwg
MTc4MzYsIDExNjQ4IH0gfSwKKwl7IDE0ODM1MiwgeyAxMTY0OCwgIDg5MTgsICA1ODI0IH0gfSwK
Kwl7IDI5NjcwMywgeyAgNTgyNCwgIDQ0NTksICA1ODI0IH0gfSwKKwl7IDI5NzAwMCwgeyAgMzA3
MiwgIDQ3MDQsICA1MTIwIH0gfSwKKwl7ICAgICAgMCwgeyAgNDA5NiwgIDYyNzIsICA2MTQ0IH0g
fSwgLyogYWxsIG90aGVyIFRNRFMgY2xvY2tzICovCit9OworCisvKioKKyAqIGhkbWlfcmVjb21t
ZW5kZWRfbigpIC0gUmV0dXJuIE4gdmFsdWUgcmVjb21tZW5kZWQgYnkgSERNSSBzcGVjaWZpY2F0
aW9uCisgKiBAZnJlcTogYXVkaW8gc2FtcGxlIHJhdGUgaW4gSHoKKyAqIEBjbG9jazogcm91bmRl
ZCBUTURTIGNsb2NrIGluIGtIegorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGhkbWlfcmVjb21t
ZW5kZWRfbih1bnNpZ25lZCBpbnQgZnJlcSwgdW5zaWduZWQgaW50IGNsb2NrKQoreworCWNvbnN0
IHN0cnVjdCBoZG1pX2Fjcl9uICpyZWNvbW1lbmRlZDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZv
ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhkbWlfcmVjX25fdGFibGUpIC0gMTsgaSsrKSB7CisJ
CWlmIChjbG9jayA9PSBoZG1pX3JlY19uX3RhYmxlW2ldLmNsb2NrKQorCQkJYnJlYWs7CisJfQor
CXJlY29tbWVuZGVkID0gaGRtaV9yZWNfbl90YWJsZSArIGk7CisKKwlzd2l0Y2ggKGZyZXEpIHsK
KwljYXNlIDMyMDAwOgorCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5bMF07CisJY2FzZSA0NDEwMDoK
KwkJcmV0dXJuIHJlY29tbWVuZGVkLT5uWzFdOworCWNhc2UgNDgwMDA6CisJCXJldHVybiByZWNv
bW1lbmRlZC0+blsyXTsKKwljYXNlIDg4MjAwOgorCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5bMV0g
KiAyOworCWNhc2UgOTYwMDA6CisJCXJldHVybiByZWNvbW1lbmRlZC0+blsyXSAqIDI7CisJY2Fz
ZSAxNzY0MDA6CisJCXJldHVybiByZWNvbW1lbmRlZC0+blsxXSAqIDQ7CisJY2FzZSAxOTIwMDA6
CisJCXJldHVybiByZWNvbW1lbmRlZC0+blsyXSAqIDQ7CisJZGVmYXVsdDoKKwkJcmV0dXJuICgx
MjggKiBmcmVxKSAvIDEwMDA7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGhkbWlfbW9k
ZV9jbG9ja190b19oeih1bnNpZ25lZCBpbnQgY2xvY2spCit7CisJc3dpdGNoIChjbG9jaykgewor
CWNhc2UgMjUxNzU6CisJCXJldHVybiAyNTE3NDgyNTsJLyogMjUuMi8xLjAwMSBNSHogKi8KKwlj
YXNlIDc0MTc2OgorCQlyZXR1cm4gNzQxNzU4MjQ7CS8qIDc0LjI1LzEuMDAxIE1IeiAqLworCWNh
c2UgMTQ4MzUyOgorCQlyZXR1cm4gMTQ4MzUxNjQ4OwkvKiAxNDguNS8xLjAwMSBNSHogKi8KKwlj
YXNlIDI5NjcwMzoKKwkJcmV0dXJuIDI5NjcwMzI5NzsJLyogMjk3LzEuMDAxIE1IeiAqLworCWRl
ZmF1bHQ6CisJCXJldHVybiBjbG9jayAqIDEwMDA7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQg
aW50IGhkbWlfZXhwZWN0ZWRfY3RzKHVuc2lnbmVkIGludCBhdWRpb19zYW1wbGVfcmF0ZSwKKwkJ
CQkgICAgICB1bnNpZ25lZCBpbnQgdG1kc19jbG9jaywgdW5zaWduZWQgaW50IG4pCit7CisJcmV0
dXJuIERJVl9ST1VORF9DTE9TRVNUX1VMTCgodTY0KWhkbWlfbW9kZV9jbG9ja190b19oeih0bWRz
X2Nsb2NrKSAqIG4sCisJCQkJICAgICAxMjggKiBhdWRpb19zYW1wbGVfcmF0ZSk7Cit9CisKK3N0
YXRpYyB2b2lkIGRvX2hkbWlfaHdfYXVkX3NldF9uY3RzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwg
dW5zaWduZWQgaW50IG4sCisJCQkJICAgIHVuc2lnbmVkIGludCBjdHMpCit7CisJdW5zaWduZWQg
Y2hhciB2YWxbTkNUU19CWVRFU107CisJaW50IGk7CisKKwltdGtfaGRtaV93cml0ZShoZG1pLCBH
UkxfTkNUUywgMCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX05DVFMsIDApOworCW10a19o
ZG1pX3dyaXRlKGhkbWksIEdSTF9OQ1RTLCAwKTsKKwltZW1zZXQodmFsLCAwLCBzaXplb2YodmFs
KSk7CisKKwl2YWxbMF0gPSAoY3RzID4+IDI0KSAmIDB4ZmY7CisJdmFsWzFdID0gKGN0cyA+PiAx
NikgJiAweGZmOworCXZhbFsyXSA9IChjdHMgPj4gOCkgJiAweGZmOworCXZhbFszXSA9IGN0cyAm
IDB4ZmY7CisKKwl2YWxbNF0gPSAobiA+PiAxNikgJiAweGZmOworCXZhbFs1XSA9IChuID4+IDgp
ICYgMHhmZjsKKwl2YWxbNl0gPSBuICYgMHhmZjsKKworCWZvciAoaSA9IDA7IGkgPCBOQ1RTX0JZ
VEVTOyBpKyspCisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9OQ1RTLCB2YWxbaV0pOworfQor
Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfbmN0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHVu
c2lnbmVkIGludCBzYW1wbGVfcmF0ZSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjbG9jaykKK3sK
Kwl1bnNpZ25lZCBpbnQgbiwgY3RzOworCisJbiA9IGhkbWlfcmVjb21tZW5kZWRfbihzYW1wbGVf
cmF0ZSwgY2xvY2spOworCWN0cyA9IGhkbWlfZXhwZWN0ZWRfY3RzKHNhbXBsZV9yYXRlLCBjbG9j
aywgbik7CisKKwlkZXZfZGJnKGhkbWktPmRldiwgIiVzOiBzYW1wbGVfcmF0ZT0ldSwgY2xvY2s9
JWQsIGN0cz0ldSwgbj0ldVxuIiwKKwkJX19mdW5jX18sIHNhbXBsZV9yYXRlLCBjbG9jaywgbiwg
Y3RzKTsKKworCW10a19oZG1pX21hc2soaGRtaSwgRFVNTVlfMzA0LCBBVURJT19JMlNfTkNUU19T
RUxfNjQsCisJCSAgICAgIEFVRElPX0kyU19OQ1RTX1NFTCk7CisJZG9faGRtaV9od19hdWRfc2V0
X25jdHMoaGRtaSwgbiwgY3RzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfaGRtaV9ody5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2h3
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAxMzIxOQotLS0gL2Rldi9u
dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9ody5oCkBAIC0wLDAg
KzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0
aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0g
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor
ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2
ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX01US19IRE1JX0hXX0gK
KyNkZWZpbmUgX01US19IRE1JX0hXX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5j
bHVkZSA8bGludXgvaGRtaS5oPgorI2luY2x1ZGUgIm10a19oZG1pLmgiCisKK3ZvaWQgbXRrX2hk
bWlfaHdfdmlkX2JsYWNrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBibGFjayk7Cit2b2lk
IG10a19oZG1pX2h3X2F1ZF9tdXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBtdXRlKTsK
K3ZvaWQgbXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwg
dTggKmJ1ZmZlciwgdTggbGVuKTsKK3ZvaWQgbXRrX2hkbWlfaHdfc2VuZF9hdWRfcGFja2V0KHN0
cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOworaW50IG10a19oZG1pX2h3X3NldF9j
bG9jayhzdHJ1Y3QgbXRrX2hkbWkgKmhjdHgsIHUzMiBjbG9jayk7Cit2b2lkIG10a19oZG1pX2h3
X2NvbmZpZ19zeXMoc3RydWN0IG10a19oZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfc2V0
X2RlZXBfY29sb3JfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfaGRtaV9o
d19zZW5kX2F2X211dGUoc3RydWN0IG10a19oZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdf
c2VuZF9hdl91bm11dGUoc3RydWN0IG10a19oZG1pICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdf
bmN0c19lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIG9uKTsKK3ZvaWQgbXRrX2hk
bWlfaHdfYXVkX3NldF9jaGFubmVsX3N3YXAoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSAg
ICAgIGVudW0gaGRtaV9hdWRfY2hhbm5lbF9zd2FwX3R5cGUgc3dhcCk7Cit2b2lkIG10a19oZG1p
X2h3X2F1ZF9yYXdfZGF0YV9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJs
ZSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfYml0X251bShzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWksCisJCQkJIGVudW0gaGRtaV9hdWRpb19zYW1wbGVfc2l6ZSBiaXRfbnVtKTsKK3ZvaWQgbXRr
X2hkbWlfaHdfYXVkX3NldF9oaWdoX2JpdHJhdGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29s
IGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX3BoeV9hdWRfZHN0X25vcm1hbF9kb3VibGVfZW5hYmxl
KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJICAgICAgIGJvb2wgZW5hYmxlKTsKK3ZvaWQg
bXRrX2hkbWlfaHdfYXVkX2RzdF9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVu
YWJsZSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9kc2RfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAq
aGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2kyc19mbXQoc3Ry
dWN0IG10a19oZG1pICpoZG1pLAorCQkJCSBlbnVtIGhkbWlfYXVkX2kyc19mbXQgaTJzX2ZtdCk7
Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2NoYW5fbnVtKHN0cnVjdCBtdGtfaGRtaSAq
aGRtaSwKKwkJCQkgICAgICBlbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUs
CisJCQkJICAgICAgdTggY2hhbm5lbF9jb3VudCk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRf
aW5wdXRfdHlwZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgIGVudW0gaGRtaV9hdWRf
aW5wdXRfdHlwZSBpbnB1dF90eXBlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9jaGFubmVs
X3N0YXR1cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCXU4ICpsX2NoYW5fc3RhdHVzLCB1
OCAqcl9jaGFuX3N0YXVzLAorCQkJCQllbnVtIGhkbWlfYXVkaW9fc2FtcGxlX2ZyZXF1ZW5jeQor
CQkJCQlhdWRfaGRtaV9mcyk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zcmNfZW5hYmxlKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0
X21jbGsoc3RydWN0IG10a19oZG1pICpoZG1pLCBlbnVtIGhkbWlfYXVkX21jbGsgbWNsayk7Cit2
b2lkIG10a19oZG1pX2h3X2F1ZF9zcmNfb2ZmKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lk
IG10a19oZG1pX2h3X2F1ZF9zcmNfcmVlbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pKTsKK3Zv
aWQgbXRrX2hkbWlfaHdfYXVkX2FjbGtfaW52X2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWks
IGJvb2wgZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9uY3RzKHN0cnVjdCBtdGtf
aGRtaSAqaGRtaSwgdW5zaWduZWQgaW50IHNhbXBsZV9yYXRlLAorCQkJICAgICAgdW5zaWduZWQg
aW50IGNsb2NrKTsKK2Jvb2wgbXRrX2hkbWlfaHdfaXNfaHBkX2hpZ2goc3RydWN0IG10a19oZG1p
ICpoZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfbWFrZV9yZWdfd3JpdGFibGUoc3RydWN0IG10a19o
ZG1pICpoZG1pLCBib29sIGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX2h3X3Jlc2V0KHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X2VuYWJsZV9ub3RpY2Uoc3RydWN0IG10
a19oZG1pICpoZG1pLCBib29sIGVuYWJsZV9ub3RpY2UpOwordm9pZCBtdGtfaGRtaV9od193cml0
ZV9pbnRfbWFzayhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHUzMiBpbnRfbWFzayk7Cit2b2lkIG10
a19oZG1pX2h3X2VuYWJsZV9kdmlfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5h
YmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfbmN0c19hdXRvX3dyaXRlX2VuYWJsZShzdHJ1Y3QgbXRr
X2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfbXNpY19zZXR0aW5n
KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl
ICptb2RlKTsKK3ZvaWQgbXRrX2hkbWlfaHdfMXA0X3ZlcnNpb25fZW5hYmxlKHN0cnVjdCBtdGtf
aGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9od19odHBsZ19pcnFfZW5h
YmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X2h0cGxnX2lycV9k
aXNhYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X2NsZWFyX2h0
cGxnX2lycShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOworCisjZW5kaWYgLyogX01US19IRE1JX0hX
X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdz
LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMWQzMTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oCkBAIC0wLDAgKzEsMjIxIEBACisv
KgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFp
dSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz
CisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9NVEtfSERNSV9SRUdTX0gKKyNkZWZpbmUg
X01US19IRE1JX1JFR1NfSAorCisjZGVmaW5lIEdSTF9JTlRfTUFTSwkJMHgxOAorI2RlZmluZSBH
UkxfSUZNX1BPUlQJCTB4MTg4CisjZGVmaW5lIEdSTF9DSF9TV0FQCQkweDE5OAorI2RlZmluZSBM
Ul9TV0FQCQkJCUJJVCgwKQorI2RlZmluZSBMRkVfQ0NfU1dBUAkJCUJJVCgxKQorI2RlZmluZSBM
U1JTX1NXQVAJCQlCSVQoMikKKyNkZWZpbmUgUkxTX1JSU19TV0FQCQkJQklUKDMpCisjZGVmaW5l
IExSX1NUQVRVU19TV0FQCQkJQklUKDQpCisjZGVmaW5lIEdSTF9JMlNfQ19TVEEwCQkweDE0MAor
I2RlZmluZSBHUkxfSTJTX0NfU1RBMQkJMHgxNDQKKyNkZWZpbmUgR1JMX0kyU19DX1NUQTIJCTB4
MTQ4CisjZGVmaW5lIEdSTF9JMlNfQ19TVEEzCQkweDE0QworI2RlZmluZSBHUkxfSTJTX0NfU1RB
NAkJMHgxNTAKKyNkZWZpbmUgR1JMX0kyU19VVgkJMHgxNTQKKyNkZWZpbmUgR1JMX0FDUF9JU1JD
X0NUUkwJMHgxNTgKKyNkZWZpbmUgVlNfRU4JCQkJQklUKDApCisjZGVmaW5lIEFDUF9FTgkJCQlC
SVQoMSkKKyNkZWZpbmUgSVNSQzFfRU4JCQlCSVQoMikKKyNkZWZpbmUgSVNSQzJfRU4JCQlCSVQo
MykKKyNkZWZpbmUgR0FNVVRfRU4JCQlCSVQoNCkKKyNkZWZpbmUgR1JMX0NUU19DVFJMCQkweDE2
MAorI2RlZmluZSBDVFNfQ1RSTF9TT0ZUCQkJQklUKDApCisjZGVmaW5lIEdSTF9JTlQJCQkweDE0
CisjZGVmaW5lIElOVF9NREkJCQkJQklUKDApCisjZGVmaW5lIElOVF9IRENQCQkJQklUKDEpCisj
ZGVmaW5lIElOVF9GSUZPX08JCQlCSVQoMikKKyNkZWZpbmUgSU5UX0ZJRk9fVQkJCUJJVCgzKQor
I2RlZmluZSBJTlRfSUZNX0VSUgkJCUJJVCg0KQorI2RlZmluZSBJTlRfSU5GX0RPTkUJCQlCSVQo
NSkKKyNkZWZpbmUgSU5UX05DVFNfRE9ORQkJCUJJVCg2KQorI2RlZmluZSBJTlRfQ1RSTF9QS1Rf
RE9ORQkJQklUKDcpCisjZGVmaW5lIEdSTF9JTlRfTUFTSwkJMHgxOAorI2RlZmluZSBHUkxfQ1RS
TAkJMHgxQworI2RlZmluZSBDVFJMX0dFTl9FTgkJCUJJVCgyKQorI2RlZmluZSBDVFJMX1NQRF9F
TgkJCUJJVCgzKQorI2RlZmluZSBDVFJMX01QRUdfRU4JCQlCSVQoNCkKKyNkZWZpbmUgQ1RSTF9B
VURJT19FTgkJCUJJVCg1KQorI2RlZmluZSBDVFJMX0FWSV9FTgkJCUJJVCg2KQorI2RlZmluZSBD
VFJMX0FWTVVURQkJCUJJVCg3KQorI2RlZmluZQlHUkxfU1RBVFVTCQkweDIwCisjZGVmaW5lIFNU
QVRVU19IVFBMRwkJCUJJVCgwKQorI2RlZmluZSBTVEFUVVNfUE9SRAkJCUJJVCgxKQorI2RlZmlu
ZSBHUkxfRElWTgkJMHgxNzAKKyNkZWZpbmUgTkNUU19XUklfQU5ZVElNRQkJQklUKDYpCisjZGVm
aW5lIEdSTF9BVURJT19DRkcJCTB4MTdDCisjZGVmaW5lIEFVRElPX1pFUk8JCQlCSVQoMCkKKyNk
ZWZpbmUgSElHSF9CSVRfUkFURQkJCUJJVCgxKQorI2RlZmluZSBTQUNEX0RTVAkJCUJJVCgyKQor
I2RlZmluZSBEU1RfTk9STUFMX0RPVUJMRQkJQklUKDMpCisjZGVmaW5lIERTRF9JTlYJCQkJQklU
KDQpCisjZGVmaW5lIExSX0lOVgkJCQlCSVQoNSkKKyNkZWZpbmUgTFJfTUlYCQkJCUJJVCg2KQor
I2RlZmluZSBTQUNEX1NFTAkJCUJJVCg3KQorI2RlZmluZSBHUkxfTkNUUwkJMHgxODQKKyNkZWZp
bmUgR1JMX0NIX1NXMAkJMHgxOEMKKyNkZWZpbmUgR1JMX0NIX1NXMQkJMHgxOTAKKyNkZWZpbmUg
R1JMX0NIX1NXMgkJMHgxOTQKKyNkZWZpbmUgR1JMX0lORk9GUk1fVkVSCQkweDE5QworI2RlZmlu
ZSBHUkxfSU5GT0ZSTV9UWVBFCTB4MUEwCisjZGVmaW5lIEdSTF9JTkZPRlJNX0xORwkJMHgxQTQK
KyNkZWZpbmUgR1JMX01JWF9DVFJMCQkweDFCNAorI2RlZmluZSBNSVhfQ1RSTF9TUkNfRU4JCQlC
SVQoMCkKKyNkZWZpbmUgQllQQVNTX1ZPTFVNRQkJCUJJVCgxKQorI2RlZmluZSBNSVhfQ1RSTF9G
TEFUCQkJQklUKDcpCisjZGVmaW5lIEdSTF9BT1VUX0JOVU1fU0VMCTB4MUM0CisjZGVmaW5lIEFP
VVRfMjRCSVQJCQkweDAwCisjZGVmaW5lIEFPVVRfMjBCSVQJCQkweDAyCisjZGVmaW5lIEFPVVRf
MTZCSVQJCQkweDAzCisjZGVmaW5lIEhJR0hfQklUX1JBVEVfUEFDS0VUX0FMSUdOCSgweDMgPDwg
NikKKyNkZWZpbmUgR1JMX1NISUZUX0wxCQkweDFDMAorI2RlZmluZSBHUkxfU0hJRlRfUjIJCTB4
MUIwCisjZGVmaW5lIEFVRElPX1BBQ0tFVF9PRkYJCUJJVCg2KQorI2RlZmluZSBHUkxfQ0ZHMAkJ
MHgyNAorI2RlZmluZSBDRkcwX0kyU19NT0RFX1JUSgkJMHgxCisjZGVmaW5lIENGRzBfSTJTX01P
REVfTFRKCQkweDAKKyNkZWZpbmUgQ0ZHMF9JMlNfTU9ERV9JMlMJCTB4MgorI2RlZmluZSBDRkcw
X0kyU19NT0RFXzI0QklUCQkweDAwCisjZGVmaW5lIENGRzBfSTJTX01PREVfMTZCSVQJCTB4MTAK
KyNkZWZpbmUgR1JMX0NGRzEJCTB4MjgKKyNkZWZpbmUgQ0ZHMV9FREdfU0VMCQkJQklUKDApCisj
ZGVmaW5lIENGRzFfU1BESUYJCQlCSVQoMSkKKyNkZWZpbmUgQ0ZHMV9EVkkJCQlCSVQoMikKKyNk
ZWZpbmUgQ0ZHMV9IRENQX0RFQlVHCQkJQklUKDMpCisjZGVmaW5lIEdSTF9DRkcyCQkweDJjCisj
ZGVmaW5lIENGRzJfTk9USUNFX0VOCQkJQklUKDYpCisjZGVmaW5lIE1ITF9ERV9TRUwJCQlCSVQo
MykKKyNkZWZpbmUgR1JMX0NGRzMJCTB4MzAKKyNkZWZpbmUgQ0ZHM19BRVNfS0VZX0lOREVYX01B
U0sJCTB4M2YKKyNkZWZpbmUgQ0ZHM19DT05UUk9MX1BBQ0tFVF9ERUxBWQlCSVQoNikKKyNkZWZp
bmUgQ0ZHM19LU1ZfTE9BRF9TVEFSVAkJQklUKDcpCisjZGVmaW5lIEdSTF9DRkc0CQkweDM0Cisj
ZGVmaW5lIENGRzRfQUVTX0tFWV9MT0FECQlCSVQoNCkKKyNkZWZpbmUgQ0ZHNF9BVl9VTk1VVEVf
RU4JCUJJVCg1KQorI2RlZmluZSBDRkc0X0FWX1VOTVVURV9TRVQJCUJJVCg2KQorI2RlZmluZSBD
RkdfTUhMX01PREUJCQlCSVQoNykKKyNkZWZpbmUgR1JMX0NGRzUJCTB4MzgKKyNkZWZpbmUgQ0ZH
NV9DRF9SQVRJT19NQVNLCTB4OEYKKyNkZWZpbmUgQ0ZHNV9GUzEyOAkJCSgweDEgPDwgNCkKKyNk
ZWZpbmUgQ0ZHNV9GUzI1NgkJCSgweDIgPDwgNCkKKyNkZWZpbmUgQ0ZHNV9GUzM4NAkJCSgweDMg
PDwgNCkKKyNkZWZpbmUgQ0ZHNV9GUzUxMgkJCSgweDQgPDwgNCkKKyNkZWZpbmUgQ0ZHNV9GUzc2
OAkJCSgweDYgPDwgNCkKKyNkZWZpbmUgRFVNTVlfMzA0CQkweDMwNAorI2RlZmluZSBDSE1PX1NF
TAkJCSgweDMgPDwgMikKKyNkZWZpbmUgQ0hNMV9TRUwJCQkoMHgzIDw8IDQpCisjZGVmaW5lIENI
TTJfU0VMCQkJKDB4MyA8PCA2KQorI2RlZmluZSBBVURJT19JMlNfTkNUU19TRUwJCUJJVCgxKQor
I2RlZmluZSBBVURJT19JMlNfTkNUU19TRUxfNjQJCSgxIDw8IDEpCisjZGVmaW5lIEFVRElPX0ky
U19OQ1RTX1NFTF8xMjgJCSgwIDw8IDEpCisjZGVmaW5lIE5FV19HQ1BfQ1RSTAkJCUJJVCgwKQor
I2RlZmluZSBORVdfR0NQX0NUUkxfTUVSR0UJCUJJVCgwKQorI2RlZmluZSBHUkxfTF9TVEFUVVNf
MAkJMHgyMDAKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzEJCTB4MjA0CisjZGVmaW5lIEdSTF9MX1NU
QVRVU18yCQkweDIwOAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMwkJMHgyMGMKKyNkZWZpbmUgR1JM
X0xfU1RBVFVTXzQJCTB4MjEwCisjZGVmaW5lIEdSTF9MX1NUQVRVU181CQkweDIxNAorI2RlZmlu
ZSBHUkxfTF9TVEFUVVNfNgkJMHgyMTgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzcJCTB4MjFjCisj
ZGVmaW5lIEdSTF9MX1NUQVRVU184CQkweDIyMAorI2RlZmluZSBHUkxfTF9TVEFUVVNfOQkJMHgy
MjQKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzEwCQkweDIyOAorI2RlZmluZSBHUkxfTF9TVEFUVVNf
MTEJCTB4MjJjCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xMgkJMHgyMzAKKyNkZWZpbmUgR1JMX0xf
U1RBVFVTXzEzCQkweDIzNAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMTQJCTB4MjM4CisjZGVmaW5l
IEdSTF9MX1NUQVRVU18xNQkJMHgyM2MKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzE2CQkweDI0MAor
I2RlZmluZSBHUkxfTF9TVEFUVVNfMTcJCTB4MjQ0CisjZGVmaW5lIEdSTF9MX1NUQVRVU18xOAkJ
MHgyNDgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzE5CQkweDI0YworI2RlZmluZSBHUkxfTF9TVEFU
VVNfMjAJCTB4MjUwCisjZGVmaW5lIEdSTF9MX1NUQVRVU18yMQkJMHgyNTQKKyNkZWZpbmUgR1JM
X0xfU1RBVFVTXzIyCQkweDI1OAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMjMJCTB4MjVjCisjZGVm
aW5lIEdSTF9SX1NUQVRVU18wCQkweDI2MAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMQkJMHgyNjQK
KyNkZWZpbmUgR1JMX1JfU1RBVFVTXzIJCTB4MjY4CisjZGVmaW5lIEdSTF9SX1NUQVRVU18zCQkw
eDI2YworI2RlZmluZSBHUkxfUl9TVEFUVVNfNAkJMHgyNzAKKyNkZWZpbmUgR1JMX1JfU1RBVFVT
XzUJCTB4Mjc0CisjZGVmaW5lIEdSTF9SX1NUQVRVU182CQkweDI3OAorI2RlZmluZSBHUkxfUl9T
VEFUVVNfNwkJMHgyN2MKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzgJCTB4MjgwCisjZGVmaW5lIEdS
TF9SX1NUQVRVU185CQkweDI4NAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTAJCTB4Mjg4CisjZGVm
aW5lIEdSTF9SX1NUQVRVU18xMQkJMHgyOGMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzEyCQkweDI5
MAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTMJCTB4Mjk0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18x
NAkJMHgyOTgKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzE1CQkweDI5YworI2RlZmluZSBHUkxfUl9T
VEFUVVNfMTYJCTB4MmEwCisjZGVmaW5lIEdSTF9SX1NUQVRVU18xNwkJMHgyYTQKKyNkZWZpbmUg
R1JMX1JfU1RBVFVTXzE4CQkweDJhOAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTkJCTB4MmFjCisj
ZGVmaW5lIEdSTF9SX1NUQVRVU18yMAkJMHgyYjAKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzIxCQkw
eDJiNAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMjIJCTB4MmI4CisjZGVmaW5lIEdSTF9SX1NUQVRV
U18yMwkJMHgyYmMKKyNkZWZpbmUgR1JMX0FCSVNUX0NUUkwwCQkweDJENAorI2RlZmluZSBHUkxf
QUJJU1RfQ1RSTDEJCTB4MkQ4CisjZGVmaW5lIEFCSVNUX0VOCQkJQklUKDcpCisjZGVmaW5lIEFC
SVNUX0RBVEFfRk1UCQkJKDB4NyA8PCAwKQorI2RlZmluZSBWSURFT19DRkdfMAkJMHgzODAKKyNk
ZWZpbmUgVklERU9fQ0ZHXzEJCTB4Mzg0CisjZGVmaW5lIFZJREVPX0NGR18yCQkweDM4OAorI2Rl
ZmluZSBWSURFT19DRkdfMwkJMHgzOGMKKyNkZWZpbmUgVklERU9fQ0ZHXzQJCTB4MzkwCisjZGVm
aW5lIFZJREVPX1NPVVJDRV9TRUwJCUJJVCg3KQorI2RlZmluZSBOT1JNQUxfUEFUSAkJCSgxIDw8
IDcpCisjZGVmaW5lIEdFTl9SR0IJCQkJKDAgPDwgNykKKworI2RlZmluZSBIRE1JX1NZU19DRkcx
QwkJMHgwMDAKKyNkZWZpbmUgSERNSV9PTgkJCQlCSVQoMCkKKyNkZWZpbmUgSERNSV9SU1QJCQlC
SVQoMSkKKyNkZWZpbmUgQU5MR19PTgkJCQlCSVQoMikKKyNkZWZpbmUgQ0ZHMTBfRFZJCQkJQklU
KDMpCisjZGVmaW5lIEhETUlfVFNUCQkJQklUKDMpCisjZGVmaW5lIFNZU19LRVlNQVNLMQkJCSgw
eGZmIDw8IDgpCisjZGVmaW5lIFNZU19LRVlNQVNLMgkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBB
VURfT1VUU1lOQ19FTgkJCUJJVCgyNCkKKyNkZWZpbmUgQVVEX09VVFNZTkNfUFJFX0VOCQlCSVQo
MjUpCisjZGVmaW5lIEkyQ01fT04JCQkJQklUKDI2KQorI2RlZmluZSBFMlBST01fVFlQRV84QklU
CQlCSVQoMjcpCisjZGVmaW5lIE1DTV9FMlBST01fT04JCQlCSVQoMjgpCisjZGVmaW5lIEVYVF9F
MlBST01fT04JCQlCSVQoMjkpCisjZGVmaW5lIEhUUExHX1BJTl9TRUxfT0ZGCQlCSVQoMzApCisj
ZGVmaW5lIEFFU19FRlVTRV9FTkFCTEUJCUJJVCgzMSkKKyNkZWZpbmUgSERNSV9TWVNfQ0ZHMjAJ
CTB4MDA0CisjZGVmaW5lIERFRVBfQ09MT1JfTU9ERV9NQVNLCQkoMyA8PCAxKQorI2RlZmluZSBD
T0xPUl84QklUX01PREUJCQkoMCA8PCAxKQorI2RlZmluZSBDT0xPUl8xMEJJVF9NT0RFCQkoMSA8
PCAxKQorI2RlZmluZSBDT0xPUl8xMkJJVF9NT0RFCQkoMiA8PCAxKQorI2RlZmluZSBDT0xPUl8x
NkJJVF9NT0RFCQkoMyA8PCAxKQorI2RlZmluZSBERUVQX0NPTE9SX0VOCQkJQklUKDApCisjZGVm
aW5lIEhETUlfQVVESU9fVEVTVF9TRUwJCUJJVCg4KQorI2RlZmluZSBIRE1JMlAwX0VOCQkJQklU
KDExKQorI2RlZmluZSBIRE1JX09VVF9GSUZPX0VOCQlCSVQoMTYpCisjZGVmaW5lIEhETUlfT1VU
X0ZJRk9fQ0xLX0lOVgkJQklUKDE3KQorI2RlZmluZSBNSExfTU9ERV9PTgkJCUJJVCgyOCkKKyNk
ZWZpbmUgTUhMX1BQX01PREUJCQlCSVQoMjkpCisjZGVmaW5lIE1ITF9TWU5DX0FVVE9fRU4JCUJJ
VCgzMCkKKyNkZWZpbmUgSERNSV9QQ0xLX0ZSRUVfUlVOCQlCSVQoMzEpCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19tdDgxNzNfaGRtaV9waHkuYyBi
L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5ZjA3ZgotLS0gL2Rldi9udWxsCisrKyBiL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMKQEAgLTAsMCArMSw1
MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9y
OiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICog
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz
aW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor
ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgor
I2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+
CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+Cisj
aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgorI2lu
Y2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+
CisKKyNkZWZpbmUgSERNSV9DT04wCQkweDAwCisjZGVmaW5lIFJHX0hETUlUWF9QTExfRU4JCUJJ
VCgzMSkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9GQktESVYJCSgweDdmIDw8IDI0KQorI2RlZmlu
ZSBQTExfRkJLRElWX1NISUZUCQkyNAorI2RlZmluZSBSR19IRE1JVFhfUExMX0ZCS1NFTAkJKDB4
MyA8PCAyMikKKyNkZWZpbmUgUExMX0ZCS1NFTF9TSElGVAkJMjIKKyNkZWZpbmUgUkdfSERNSVRY
X1BMTF9QUkVESVYJCSgweDMgPDwgMjApCisjZGVmaW5lIFBSRURJVl9TSElGVAkJCTIwCisjZGVm
aW5lIFJHX0hETUlUWF9QTExfUE9TRElWCQkoMHgzIDw8IDE4KQorI2RlZmluZSBQT1NESVZfU0hJ
RlQJCQkxOAorI2RlZmluZSBSR19IRE1JVFhfUExMX1JTVF9ETFkJCSgweDMgPDwgMTYpCisjZGVm
aW5lIFJHX0hETUlUWF9QTExfSVIJCSgweGYgPDwgMTIpCisjZGVmaW5lIFBMTF9JUl9TSElGVAkJ
CTEyCisjZGVmaW5lIFJHX0hETUlUWF9QTExfSUMJCSgweGYgPDwgOCkKKyNkZWZpbmUgUExMX0lD
X1NISUZUCQkJOAorI2RlZmluZSBSR19IRE1JVFhfUExMX0JQCQkoMHhmIDw8IDQpCisjZGVmaW5l
IFBMTF9CUF9TSElGVAkJCTQKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9CUgkJKDB4MyA8PCAyKQor
I2RlZmluZSBQTExfQlJfU0hJRlQJCQkyCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQkMJCSgweDMg
PDwgMCkKKyNkZWZpbmUgUExMX0JDX1NISUZUCQkJMAorI2RlZmluZSBIRE1JX0NPTjEJCTB4MDQK
KyNkZWZpbmUgUkdfSERNSVRYX1BMTF9ESVZFTgkJKDB4NyA8PCAyOSkKKyNkZWZpbmUgUExMX0RJ
VkVOX1NISUZUCQkJMjkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19FTgkJQklUKDI4KQor
I2RlZmluZSBSR19IRE1JVFhfUExMX0FVVE9LX0tGCQkoMHgzIDw8IDI2KQorI2RlZmluZSBSR19I
RE1JVFhfUExMX0FVVE9LX0tTCQkoMHgzIDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfUExMX0FV
VE9LX0xPQUQJQklUKDIzKQorI2RlZmluZSBSR19IRE1JVFhfUExMX0JBTkQJCSgweDNmIDw8IDE2
KQorI2RlZmluZSBSR19IRE1JVFhfUExMX1JFRl9TRUwJCUJJVCgxNSkKKyNkZWZpbmUgUkdfSERN
SVRYX1BMTF9CSUFTX0VOCQlCSVQoMTQpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQklBU19MUEZf
RU4JQklUKDEzKQorI2RlZmluZSBSR19IRE1JVFhfUExMX1RYRElWX0VOCQlCSVQoMTIpCisjZGVm
aW5lIFJHX0hETUlUWF9QTExfVFhESVYJCSgweDMgPDwgMTApCisjZGVmaW5lIFBMTF9UWERJVl9T
SElGVAkJCTEwCisjZGVmaW5lIFJHX0hETUlUWF9QTExfTFZST0RfRU4JCUJJVCg5KQorI2RlZmlu
ZSBSR19IRE1JVFhfUExMX01PTlZDX0VOCQlCSVQoOCkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9N
T05DS19FTgkJQklUKDcpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfTU9OUkVGX0VOCQlCSVQoNikK
KyNkZWZpbmUgUkdfSERNSVRYX1BMTF9UU1RfRU4JCUJJVCg1KQorI2RlZmluZSBSR19IRE1JVFhf
UExMX1RTVF9DS19FTgkJQklUKDQpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfVFNUX1NFTAkJKDB4
ZiA8PCAwKQorI2RlZmluZSBIRE1JX0NPTjIJCTB4MDgKKyNkZWZpbmUgUkdTX0hETUlUWF9QTExf
QVVUT0tfQkFORAkoMHg3ZiA8PCA4KQorI2RlZmluZSBSR1NfSERNSVRYX1BMTF9BVVRPS19GQUlM
CUJJVCgxKQorI2RlZmluZSBSR19IRE1JVFhfRU5fVFhfQ0tMRE8JCUJJVCgwKQorI2RlZmluZSBI
RE1JX0NPTjMJCTB4MGMKKyNkZWZpbmUgUkdfSERNSVRYX1NFUl9FTgkJKDB4ZiA8PCAyOCkKKyNk
ZWZpbmUgUkdfSERNSVRYX1BSRF9FTgkJKDB4ZiA8PCAyNCkKKyNkZWZpbmUgUkdfSERNSVRYX1BS
RF9JTVBfRU4JCSgweGYgPDwgMjApCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfRU4JCSgweGYgPDwg
MTYpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX0VOCQkoMHhmIDw8IDEyKQorI2RlZmluZSBE
UlZfSU1QX0VOX1NISUZUCQkxMgorI2RlZmluZSBSR19IRE1JVFhfTUhMQ0tfRk9SQ0UJCUJJVCgx
MCkKKyNkZWZpbmUgUkdfSERNSVRYX01ITENLX1BQSVhfRU4JCUJJVCg5KQorI2RlZmluZSBSR19I
RE1JVFhfTUhMQ0tfRU4JCUJJVCg4KQorI2RlZmluZSBSR19IRE1JVFhfU0VSX0RJTl9TRUwJCSgw
eGYgPDwgNCkKKyNkZWZpbmUgUkdfSERNSVRYX1NFUl81VDFfQklTVF9FTglCSVQoMykKKyNkZWZp
bmUgUkdfSERNSVRYX1NFUl9CSVNUX1RPRwkJQklUKDIpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJf
RElOX1RPRwkJQklUKDEpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJfQ0xLRElHX0lOVglCSVQoMCkK
KyNkZWZpbmUgSERNSV9DT040CQkweDEwCisjZGVmaW5lIFJHX0hETUlUWF9QUkRfSUJJQVNfQ0xL
CQkoMHhmIDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfUFJEX0lCSUFTX0QyCQkoMHhmIDw8IDE2
KQorI2RlZmluZSBSR19IRE1JVFhfUFJEX0lCSUFTX0QxCQkoMHhmIDw8IDgpCisjZGVmaW5lIFJH
X0hETUlUWF9QUkRfSUJJQVNfRDAJCSgweGYgPDwgMCkKKyNkZWZpbmUgUFJEX0lCSUFTX0NMS19T
SElGVAkJMjQKKyNkZWZpbmUgUFJEX0lCSUFTX0QyX1NISUZUCQkxNgorI2RlZmluZSBQUkRfSUJJ
QVNfRDFfU0hJRlQJCTgKKyNkZWZpbmUgUFJEX0lCSUFTX0QwX1NISUZUCQkwCisjZGVmaW5lIEhE
TUlfQ09ONQkJMHgxNAorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lCSUFTX0NMSwkJKDB4M2YgPDwg
MjQpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSUJJQVNfRDIJCSgweDNmIDw8IDE2KQorI2RlZmlu
ZSBSR19IRE1JVFhfRFJWX0lCSUFTX0QxCQkoMHgzZiA8PCA4KQorI2RlZmluZSBSR19IRE1JVFhf
RFJWX0lCSUFTX0QwCQkoMHgzZiA8PCAwKQorI2RlZmluZSBEUlZfSUJJQVNfQ0xLX1NISUZUCQky
NAorI2RlZmluZSBEUlZfSUJJQVNfRDJfU0hJRlQJCTE2CisjZGVmaW5lIERSVl9JQklBU19EMV9T
SElGVAkJOAorI2RlZmluZSBEUlZfSUJJQVNfRDBfU0hJRlQJCTAKKyNkZWZpbmUgSERNSV9DT042
CQkweDE4CisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX0NMSwkJKDB4M2YgPDwgMjQpCisjZGVm
aW5lIFJHX0hETUlUWF9EUlZfSU1QX0QyCQkoMHgzZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRY
X0RSVl9JTVBfRDEJCSgweDNmIDw8IDgpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX0QwCQko
MHgzZiA8PCAwKQorI2RlZmluZSBEUlZfSU1QX0NMS19TSElGVAkJMjQKKyNkZWZpbmUgRFJWX0lN
UF9EMl9TSElGVAkJMTYKKyNkZWZpbmUgRFJWX0lNUF9EMV9TSElGVAkJOAorI2RlZmluZSBEUlZf
SU1QX0QwX1NISUZUCQkwCisjZGVmaW5lIEhETUlfQ09ONwkJMHgxYworI2RlZmluZSBSR19IRE1J
VFhfTUhMQ0tfRFJWX0lCSUFTCSgweDFmIDw8IDI3KQorI2RlZmluZSBSR19IRE1JVFhfU0VSX0RJ
TgkJKDB4M2ZmIDw8IDE2KQorI2RlZmluZSBSR19IRE1JVFhfQ0hMRENfVFNUCQkoMHhmIDw8IDEy
KQorI2RlZmluZSBSR19IRE1JVFhfQ0hMQ0tfVFNUCQkoMHhmIDw8IDgpCisjZGVmaW5lIFJHX0hE
TUlUWF9SRVNFUlZFCQkoMHhmZiA8PCAwKQorI2RlZmluZSBIRE1JX0NPTjgJCTB4MjAKKyNkZWZp
bmUgUkdTX0hETUlUWF8yVDFfTEVWCQkoMHhmIDw8IDE2KQorI2RlZmluZSBSR1NfSERNSVRYXzJU
MV9FREcJCSgweGYgPDwgMTIpCisjZGVmaW5lIFJHU19IRE1JVFhfNVQxX0xFVgkJKDB4ZiA8PCA4
KQorI2RlZmluZSBSR1NfSERNSVRYXzVUMV9FREcJCSgweGYgPDwgNCkKKyNkZWZpbmUgUkdTX0hE
TUlUWF9QTFVHX1RTVAkJQklUKDApCisKK3N0cnVjdCBtdGtfaGRtaV9waHkgeworCXZvaWQgX19p
b21lbSAqcmVnczsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGNsayAqcGxsOworCXN0
cnVjdCBjbGtfaHcgcGxsX2h3OworCXVuc2lnbmVkIGxvbmcgcGxsX3JhdGU7CisJdTggZHJ2X2lt
cF9jbGs7CisJdTggZHJ2X2ltcF9kMjsKKwl1OCBkcnZfaW1wX2QxOworCXU4IGRydl9pbXBfZDA7
CisJdTMyIGliaWFzOworCXUzMiBpYmlhc191cDsKK307CisKK3N0YXRpYyBjb25zdCB1OCBQUkVE
SVZbM11bNF0gPSB7CisJezB4MCwgMHgwLCAweDAsIDB4MH0sCS8qIDI3TWh6ICovCisJezB4MSwg
MHgxLCAweDEsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4MSwgMHgxLCAweDEsIDB4MX0JLyogMTQ4
TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggVFhESVZbM11bNF0gPSB7CisJezB4MywgMHgz
LCAweDMsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4MiwgMHgxLCAweDEsIDB4MX0sCS8qIDc0TWh6
ICovCisJezB4MSwgMHgwLCAweDAsIDB4MH0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29u
c3QgdTggRkJLU0VMWzNdWzRdID0geworCXsweDEsIDB4MSwgMHgxLCAweDF9LAkvKiAyN01oeiAq
LworCXsweDEsIDB4MCwgMHgxLCAweDF9LAkvKiA3NE1oeiAqLworCXsweDEsIDB4MCwgMHgxLCAw
eDF9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEZCS0RJVlszXVs0XSA9IHsK
Kwl7MTksIDI0LCAyOSwgMTl9LAkvKiAyN01oeiAqLworCXsxOSwgMjQsIDE0LCAxOX0sCS8qIDc0
TWh6ICovCisJezE5LCAyNCwgMTQsIDE5fQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25z
dCB1OCBESVZFTlszXVs0XSA9IHsKKwl7MHgyLCAweDEsIDB4MSwgMHgyfSwJLyogMjdNaHogKi8K
Kwl7MHgyLCAweDIsIDB4MiwgMHgyfSwJLyogNzRNaHogKi8KKwl7MHgyLCAweDIsIDB4MiwgMHgy
fQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBIVFBMTEJQWzNdWzRdID0gewor
CXsweGMsIDB4YywgMHg4LCAweGN9LAkvKiAyN01oeiAqLworCXsweGMsIDB4ZiwgMHhmLCAweGN9
LAkvKiA3NE1oeiAqLworCXsweGMsIDB4ZiwgMHhmLCAweGN9CS8qIDE0OE1oeiAqLworfTsKKwor
c3RhdGljIGNvbnN0IHU4IEhUUExMQkNbM11bNF0gPSB7CisJezB4MiwgMHgzLCAweDMsIDB4Mn0s
CS8qIDI3TWh6ICovCisJezB4MiwgMHgzLCAweDMsIDB4Mn0sCS8qIDc0TWh6ICovCisJezB4Miwg
MHgzLCAweDMsIDB4Mn0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggSFRQTExC
UlszXVs0XSA9IHsKKwl7MHgxLCAweDEsIDB4MCwgMHgxfSwJLyogMjdNaHogKi8KKwl7MHgxLCAw
eDIsIDB4MiwgMHgxfSwJLyogNzRNaHogKi8KKwl7MHgxLCAweDIsIDB4MiwgMHgxfQkvKiAxNDhN
aHogKi8KK307CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3BoeV9tYXNrKHN0cnVjdCBtdGtfaGRt
aV9waHkgKmhkbWlfcGh5LCB1MzIgb2Zmc2V0LAorCQkJICAgICAgdTMyIHZhbCwgdTMyIG1hc2sp
Cit7CisJdTMyIHRtcCA9IHJlYWRsKGhkbWlfcGh5LT5yZWdzICArIG9mZnNldCkgJiB+bWFzazsK
KworCXRtcCB8PSAodmFsICYgbWFzayk7CisJd3JpdGVsKHRtcCwgaGRtaV9waHktPnJlZ3MgKyBv
ZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfaGRtaV9waHkgKnRvX210a19o
ZG1pX3BoeShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGh3LCBz
dHJ1Y3QgbXRrX2hkbWlfcGh5LCBwbGxfaHcpOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3Bs
bF9wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhk
bWlfcGh5ID0gdG9fbXRrX2hkbWlfcGh5KGh3KTsKKworCWRldl9kYmcoaGRtaV9waHktPmRldiwg
InByZXBhcmVcbiIpOworCisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwg
UkdfSERNSVRYX1BMTF9BVVRPS19FTiwKKwkJCSAgUkdfSERNSVRYX1BMTF9BVVRPS19FTik7CisJ
bXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMCwgUkdfSERNSVRYX1BMTF9QT1NE
SVYsCisJCQkgIFJHX0hETUlUWF9QTExfUE9TRElWKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1p
X3BoeSwgSERNSV9DT04zLCAwLCBSR19IRE1JVFhfTUhMQ0tfRU4pOworCW10a19oZG1pX3BoeV9t
YXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlUWF9QTExfQklBU19FTiwKKwkJCSAgUkdf
SERNSVRYX1BMTF9CSUFTX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworCW10a19oZG1p
X3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsIFJHX0hETUlUWF9QTExfRU4sCisJCQkgIFJH
X0hETUlUWF9QTExfRU4pOworCXVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7CisJbXRrX2hkbWlfcGh5
X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BMTF9CSUFTX0xQRl9FTiwKKwkJ
CSAgUkdfSERNSVRYX1BMTF9CSUFTX0xQRl9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9w
aHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BMTF9UWERJVl9FTiwKKwkJCSAgUkdfSERNSVRYX1BM
TF9UWERJVl9FTik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGxs
X3VucHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpo
ZG1pX3BoeSA9IHRvX210a19oZG1pX3BoeShodyk7CisKKwlkZXZfZGJnKGhkbWlfcGh5LT5kZXYs
ICJwcmVwYXJlXG4iKTsKKworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEs
IDAsIFJHX0hETUlUWF9QTExfVFhESVZfRU4pOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5
LCBIRE1JX0NPTjEsIDAsIFJHX0hETUlUWF9QTExfQklBU19MUEZfRU4pOworCXVzbGVlcF9yYW5n
ZSgxMDAsIDE1MCk7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMCwgMCwg
UkdfSERNSVRYX1BMTF9FTik7CisJdXNsZWVwX3JhbmdlKDEwMCwgMTUwKTsKKwltdGtfaGRtaV9w
aHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLCAwLCBSR19IRE1JVFhfUExMX0JJQVNfRU4pOwor
CW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsIDAsIFJHX0hETUlUWF9QTExf
UE9TRElWKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLCAwLCBSR19I
RE1JVFhfUExMX0FVVE9LX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworfQorCitzdGF0
aWMgaW50IG10a19oZG1pX3BsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQg
bG9uZyByYXRlLAorCQkJCSB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBt
dGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRrX2hkbWlfcGh5KGh3KTsKKwl1bnNpZ25lZCBp
bnQgcHJlX2RpdjsKKwl1bnNpZ25lZCBpbnQgZGl2OworCisJZGV2X2RiZyhoZG1pX3BoeS0+ZGV2
LCAic2V0IHJhdGUgOiAlbHUsIHBhcmVudDogJWx1XG4iLCByYXRlLAorCQlwYXJlbnRfcmF0ZSk7
CisKKwlpZiAocmF0ZSA8PSAyNzAwMDAwMCkgeworCQlwcmVfZGl2ID0gMDsKKwkJZGl2ID0gMzsK
Kwl9IGVsc2UgaWYgKHJhdGUgPD0gNzQyNTAwMDApIHsKKwkJcHJlX2RpdiA9IDE7CisJCWRpdiA9
IDI7CisJfSBlbHNlIHsKKwkJcHJlX2RpdiA9IDE7CisJCWRpdiA9IDE7CisJfQorCisJbXRrX2hk
bWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMCwKKwkJCSAgKHByZV9kaXYgPDwgUFJFRElW
X1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX1BMTF9QUkVESVYpOworCW10a19oZG1pX3BoeV9tYXNr
KGhkbWlfcGh5LCBIRE1JX0NPTjAsIFJHX0hETUlUWF9QTExfUE9TRElWLAorCQkJICBSR19IRE1J
VFhfUExMX1BPU0RJVik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMCwK
KwkJCSAgKDB4MSA8PCBQTExfSUNfU0hJRlQpIHwgKDB4MSA8PCBQTExfSVJfU0hJRlQpLAorCQkJ
ICBSR19IRE1JVFhfUExMX0lDIHwgUkdfSERNSVRYX1BMTF9JUik7CisJbXRrX2hkbWlfcGh5X21h
c2soaGRtaV9waHksIEhETUlfQ09OMSwKKwkJCSAgKGRpdiA8PCBQTExfVFhESVZfU0hJRlQpLAor
CQkJICBSR19IRE1JVFhfUExMX1RYRElWKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwg
SERNSV9DT04wLAorCQkJICAoMHgxIDw8IFBMTF9GQktTRUxfU0hJRlQpIHwgKDE5IDw8IFBMTF9G
QktESVZfU0hJRlQpLAorCQkJICBSR19IRE1JVFhfUExMX0ZCS1NFTCB8IFJHX0hETUlUWF9QTExf
RkJLRElWKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLAorCQkJICAo
MHgyIDw8IFBMTF9ESVZFTl9TSElGVCksCisJCQkgIFJHX0hETUlUWF9QTExfRElWRU4pOworCW10
a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsCisJCQkgICgweGMgPDwgUExMX0JQ
X1NISUZUKSB8ICgweDIgPDwgUExMX0JDX1NISUZUKSB8CisJCQkgICgweDEgPDwgUExMX0JSX1NI
SUZUKSwKKwkJCSAgUkdfSERNSVRYX1BMTF9CUCB8IFJHX0hETUlUWF9QTExfQkMgfAorCQkJICBS
R19IRE1JVFhfUExMX0JSKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04z
LCAwLCBSR19IRE1JVFhfUFJEX0lNUF9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHks
IEhETUlfQ09ONCwKKwkJCSAgKDB4MyA8PCBQUkRfSUJJQVNfQ0xLX1NISUZUKSB8CisJCQkgICgw
eDMgPDwgUFJEX0lCSUFTX0QyX1NISUZUKSB8CisJCQkgICgweDMgPDwgUFJEX0lCSUFTX0QxX1NI
SUZUKSB8CisJCQkgICgweDMgPDwgUFJEX0lCSUFTX0QwX1NISUZUKSwKKwkJCSAgUkdfSERNSVRY
X1BSRF9JQklBU19DTEsgfAorCQkJICBSR19IRE1JVFhfUFJEX0lCSUFTX0QyIHwKKwkJCSAgUkdf
SERNSVRYX1BSRF9JQklBU19EMSB8CisJCQkgIFJHX0hETUlUWF9QUkRfSUJJQVNfRDApOworCW10
a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjMsCisJCQkgICgweDAgPDwgRFJWX0lN
UF9FTl9TSElGVCksCisJCQkgIFJHX0hETUlUWF9EUlZfSU1QX0VOKTsKKwltdGtfaGRtaV9waHlf
bWFzayhoZG1pX3BoeSwgSERNSV9DT042LAorCQkJICAoaGRtaV9waHktPmRydl9pbXBfY2xrIDw8
IERSVl9JTVBfQ0xLX1NISUZUKSB8CisJCQkgIChoZG1pX3BoeS0+ZHJ2X2ltcF9kMiA8PCBEUlZf
SU1QX0QyX1NISUZUKSB8CisJCQkgIChoZG1pX3BoeS0+ZHJ2X2ltcF9kMSA8PCBEUlZfSU1QX0Qx
X1NISUZUKSB8CisJCQkgIChoZG1pX3BoeS0+ZHJ2X2ltcF9kMCA8PCBEUlZfSU1QX0QwX1NISUZU
KSwKKwkJCSAgUkdfSERNSVRYX0RSVl9JTVBfQ0xLIHwgUkdfSERNSVRYX0RSVl9JTVBfRDIgfAor
CQkJICBSR19IRE1JVFhfRFJWX0lNUF9EMSB8IFJHX0hETUlUWF9EUlZfSU1QX0QwKTsKKwltdGtf
aGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT041LAorCQkJICAoaGRtaV9waHktPmliaWFz
IDw8IERSVl9JQklBU19DTEtfU0hJRlQpIHwKKwkJCSAgKGhkbWlfcGh5LT5pYmlhcyA8PCBEUlZf
SUJJQVNfRDJfU0hJRlQpIHwKKwkJCSAgKGhkbWlfcGh5LT5pYmlhcyA8PCBEUlZfSUJJQVNfRDFf
U0hJRlQpIHwKKwkJCSAgKGhkbWlfcGh5LT5pYmlhcyA8PCBEUlZfSUJJQVNfRDBfU0hJRlQpLAor
CQkJICBSR19IRE1JVFhfRFJWX0lCSUFTX0NMSyB8IFJHX0hETUlUWF9EUlZfSUJJQVNfRDIgfAor
CQkJICBSR19IRE1JVFhfRFJWX0lCSUFTX0QxIHwgUkdfSERNSVRYX0RSVl9JQklBU19EMCk7CisJ
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIG10a19oZG1pX3BsbF9yb3VuZF9yYXRlKHN0cnVj
dCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcg
KnBhcmVudF9yYXRlKQoreworCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRr
X2hkbWlfcGh5KGh3KTsKKworCWhkbWlfcGh5LT5wbGxfcmF0ZSA9IHJhdGU7CisJaWYgKHJhdGUg
PD0gNzQyNTAwMDApCisJCSpwYXJlbnRfcmF0ZSA9IHJhdGU7CisJZWxzZQorCQkqcGFyZW50X3Jh
dGUgPSByYXRlIC8gMjsKKworCXJldHVybiByYXRlOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9u
ZyBtdGtfaGRtaV9wbGxfcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCisJCQkJCSAgICAg
IHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IG10a19oZG1pX3BoeSAqaGRt
aV9waHkgPSB0b19tdGtfaGRtaV9waHkoaHcpOworCisJcmV0dXJuIGhkbWlfcGh5LT5wbGxfcmF0
ZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIG10a19oZG1pX3BsbF9vcHMgPSB7
CisJLnByZXBhcmUgPSBtdGtfaGRtaV9wbGxfcHJlcGFyZSwKKwkudW5wcmVwYXJlID0gbXRrX2hk
bWlfcGxsX3VucHJlcGFyZSwKKwkuc2V0X3JhdGUgPSBtdGtfaGRtaV9wbGxfc2V0X3JhdGUsCisJ
LnJvdW5kX3JhdGUgPSBtdGtfaGRtaV9wbGxfcm91bmRfcmF0ZSwKKwkucmVjYWxjX3JhdGUgPSBt
dGtfaGRtaV9wbGxfcmVjYWxjX3JhdGUsCit9OworCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9waHlf
ZW5hYmxlX3RtZHMoc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkpCit7CisJbXRrX2hkbWlf
cGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywgUkdfSERNSVRYX1NFUl9FTiwKKwkJCSAgUkdf
SERNSVRYX1NFUl9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywg
UkdfSERNSVRYX1BSRF9FTiwKKwkJCSAgUkdfSERNSVRYX1BSRF9FTik7CisJbXRrX2hkbWlfcGh5
X21hc2soaGRtaV9waHksIEhETUlfQ09OMywgUkdfSERNSVRYX0RSVl9FTiwKKwkJCSAgUkdfSERN
SVRYX0RSVl9FTik7CisJdXNsZWVwX3JhbmdlKDEwMCwgMTUwKTsKK30KKworc3RhdGljIHZvaWQg
bXRrX2hkbWlfcGh5X2Rpc2FibGVfdG1kcyhzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSkK
K3sKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04zLCAwLCBSR19IRE1JVFhf
RFJWX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04zLCAwLCBSR19I
RE1JVFhfUFJEX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04zLCAw
LCBSR19IRE1JVFhfU0VSX0VOKTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9waHlfcG93ZXJf
b24oc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0g
cGh5X2dldF9kcnZkYXRhKHBoeSk7CisJaW50IHJldDsKKworCXJldCA9IGNsa19wcmVwYXJlX2Vu
YWJsZShoZG1pX3BoeS0+cGxsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW10
a19oZG1pX3BoeV9lbmFibGVfdG1kcyhoZG1pX3BoeSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh
dGljIGludCBtdGtfaGRtaV9waHlfcG93ZXJfb2ZmKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1
Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCisJbXRr
X2hkbWlfcGh5X2Rpc2FibGVfdG1kcyhoZG1pX3BoeSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJl
KGhkbWlfcGh5LT5wbGwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X29w
cyBtdGtfaGRtaV9waHlfb3BzID0geworCS5wb3dlcl9vbiA9IG10a19oZG1pX3BoeV9wb3dlcl9v
biwKKwkucG93ZXJfb2ZmID0gbXRrX2hkbWlfcGh5X3Bvd2VyX29mZiwKKwkub3duZXIgPSBUSElT
X01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3Byb2JlKHN0cnVjdCBwbGF0
Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsK
KwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsK
KwlzdHJ1Y3QgY2xrICpyZWZfY2xrOworCWNvbnN0IGNoYXIgKnJlZl9jbGtfbmFtZTsKKwlzdHJ1
Y3QgY2xrX2luaXRfZGF0YSBjbGtfaW5pdCA9IHsKKwkJLm9wcyA9ICZtdGtfaGRtaV9wbGxfb3Bz
LAorCQkubnVtX3BhcmVudHMgPSAxLAorCQkucGFyZW50X25hbWVzID0gKGNvbnN0IGNoYXIgKiBj
b25zdCAqKSZyZWZfY2xrX25hbWUsCisJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQgfCBD
TEtfU0VUX1JBVEVfR0FURSwKKwl9OworCXN0cnVjdCBwaHkgKnBoeTsKKwlzdHJ1Y3QgcGh5X3By
b3ZpZGVyICpwaHlfcHJvdmlkZXI7CisJaW50IHJldDsKKworCWhkbWlfcGh5ID0gZGV2bV9remFs
bG9jKGRldiwgc2l6ZW9mKCpoZG1pX3BoeSksIEdGUF9LRVJORUwpOworCWlmICghaGRtaV9waHkp
CisJCXJldHVybiAtRU5PTUVNOworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYs
IElPUkVTT1VSQ0VfTUVNLCAwKTsKKwloZG1pX3BoeS0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNv
dXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUihoZG1pX3BoeS0+cmVncykpIHsKKwkJcmV0ID0g
UFRSX0VSUihoZG1pX3BoeS0+cmVncyk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBt
ZW1vcnkgcmVzb3VyY2U6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlZl9j
bGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGxsX3JlZiIpOworCWlmIChJU19FUlIocmVmX2Nsaykp
IHsKKwkJcmV0ID0gUFRSX0VSUihyZWZfY2xrKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFp
bGVkIHRvIGdldCBQTEwgcmVmZXJlbmNlIGNsb2NrOiAlZFxuIiwKKwkJCXJldCk7CisJCXJldHVy
biByZXQ7CisJfQorCXJlZl9jbGtfbmFtZSA9IF9fY2xrX2dldF9uYW1lKHJlZl9jbGspOworCisJ
cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LT5vZl9ub2RlLCAiY2xvY2stb3V0cHV0
LW5hbWVzIiwKKwkJCQkgICAgICAmY2xrX2luaXQubmFtZSk7CisJaWYgKHJldCA8IDApIHsKKwkJ
ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBjbG9jay1vdXRwdXQtbmFtZXM6ICVkXG4iLCBy
ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWhkbWlfcGh5LT5wbGxfaHcuaW5pdCA9ICZjbGtf
aW5pdDsKKwloZG1pX3BoeS0+cGxsID0gZGV2bV9jbGtfcmVnaXN0ZXIoZGV2LCAmaGRtaV9waHkt
PnBsbF9odyk7CisJaWYgKElTX0VSUihoZG1pX3BoeS0+cGxsKSkgeworCQlyZXQgPSBQVFJfRVJS
KGhkbWlfcGh5LT5wbGwpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBQTEw6
ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG9mX3Byb3BlcnR5X3Jl
YWRfdTMyKGRldi0+b2Zfbm9kZSwgIm1lZGlhdGVrLGliaWFzIiwKKwkJCQkgICAmaGRtaV9waHkt
PmliaWFzKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQg
dG8gZ2V0IGliaWFzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBv
Zl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJtZWRpYXRlayxpYmlhc191cCIsCisJ
CQkJICAgJmhkbWlfcGh5LT5pYmlhc191cCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycigm
cGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBpYmlhcyB1cDogJWRcbiIsIHJldCk7CisJCXJldHVy
biByZXQ7CisJfQorCisJZGV2X2luZm8oZGV2LCAiVXNpbmcgZGVmYXVsdCBUWCBEUlYgaW1wZWRh
bmNlOiA0LjJrLzM2XG4iKTsKKwloZG1pX3BoeS0+ZHJ2X2ltcF9jbGsgPSAweDMwOworCWhkbWlf
cGh5LT5kcnZfaW1wX2QyID0gMHgzMDsKKwloZG1pX3BoeS0+ZHJ2X2ltcF9kMSA9IDB4MzA7CisJ
aGRtaV9waHktPmRydl9pbXBfZDAgPSAweDMwOworCisJcGh5ID0gZGV2bV9waHlfY3JlYXRlKGRl
diwgTlVMTCwgJm10a19oZG1pX3BoeV9vcHMpOworCWlmIChJU19FUlIocGh5KSkgeworCQlkZXZf
ZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgSERNSSBQSFlcbiIpOworCQlyZXR1cm4gUFRSX0VS
UihwaHkpOworCX0KKwlwaHlfc2V0X2RydmRhdGEocGh5LCBoZG1pX3BoeSk7CisKKwlwaHlfcHJv
dmlkZXIgPSBkZXZtX29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVf
eGxhdGUpOworCWlmIChJU19FUlIocGh5X3Byb3ZpZGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIocGh5
X3Byb3ZpZGVyKTsKKworCWhkbWlfcGh5LT5kZXYgPSBkZXY7CisJcmV0dXJuIG9mX2Nsa19hZGRf
cHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsCisJCQkJICAgaGRt
aV9waHktPnBsbCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3JlbW92ZShzdHJ1Y3Qg
cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qg
c3RydWN0IG9mX2RldmljZV9pZCBtdGtfaGRtaV9waHlfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRp
YmxlID0gIm1lZGlhdGVrLG10ODE3My1oZG1pLXBoeSIsIH0sCisJe30sCit9OworCitzdHJ1Y3Qg
cGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX3BoeV9kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX2hk
bWlfcGh5X3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfaGRtaV9waHlfcmVtb3ZlLAorCS5kcml2ZXIg
PSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWhkbWktcGh5IiwKKwkJLm9mX21hdGNoX3RhYmxlID0g
bXRrX2hkbWlfcGh5X21hdGNoLAorCX0sCit9OworCitNT0RVTEVfQVVUSE9SKCJKaWUgUWl1IDxq
aWUucWl1QG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWFUZWsgTVQ4
MTczIEhETUkgUEhZIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotLSAKMi43
LjAucmMzCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk
cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0
cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=