Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 1 Mar 2016 15:29:57 +0100
From:      Marcin Mazurek <mma@semihalf.com>
To:        freebsd-ppc@freebsd.org, freebsd-current@freebsd.org,  freebsd-sparc64@freebsd.org
Subject:   Testing an importing OF PCI implementations patch
Message-ID:  <CAF-BqKqfUzuvJRaQH9nhYwFLAnrp-7Xjym7F_fpViBF3PzjZAw@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--047d7bd76bea87df0b052cfd99e4
Content-Type: text/plain; charset=UTF-8

Hello,

I am looking for a testers for a patch to import portions of the PowerPC
and Sparc64 OF PCI implementations. This extracts common code from
PPC's and Sparc64's ofw_pci and moves that to general dev/ofw_pci files.

It is currently building successfully on every architecture. I tested it on
my
arm machine and checked it worked. Unfortunately I do not have any powerpc
and sparc hardware to test it on. I tried to use it inside qemu, however I
could
not run the FBSD on Sparc64 and PPC (I used a "qemu recipes" from the
freebsd
wiki page).

I would like it if this could be tested on these platforms using this code
to
check if it does not break them. This is very essential patch for me,
because
it is blocking my other pending commits and I would be very grateful for
testing it.

Review of this code is here: https://reviews.freebsd.org/D4879

Any comments and feedback are welcome.

Thanks,
Marcin

--047d7bd76bea87df0b052cfd99e4
Content-Type: text/plain; charset=US-ASCII; name="ofw_extract_code.diff"
Content-Disposition: attachment; filename="ofw_extract_code.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_il9i6ngp0

ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzLmFybSBiL3N5cy9jb25mL2ZpbGVzLmFybQppbmRl
eCAyNDA3NjE2Li4wNzcwMjYxIDEwMDY0NAotLS0gYS9zeXMvY29uZi9maWxlcy5hcm0KKysrIGIv
c3lzL2NvbmYvZmlsZXMuYXJtCkBAIC0xMDMsNiArMTAzLDcgQEAgZGV2L2h3cG1jL2h3cG1jX2Fy
bS5jCQlvcHRpb25hbAlod3BtYwogZGV2L2h3cG1jL2h3cG1jX2FybXY3LmMJCW9wdGlvbmFsCWh3
cG1jIGFybXY2CiBkZXYvaWljYnVzL3R3c2kvdHdzaS5jCQlvcHRpb25hbAl0d3NpCiBkZXYvb2Z3
L29md19jcHUuYwkJb3B0aW9uYWwJZmR0CitkZXYvb2Z3L29md19wY2kuYwkJb3B0aW9uYWwgCXBj
aSBmZHQKIGRldi9wc2NpL3BzY2kuYwkJCW9wdGlvbmFsCXBzY2kKIGRldi9wc2NpL3BzY2lfYXJt
LlMJCW9wdGlvbmFsCXBzY2kKIGRldi9zeXNjb25zL3NjZ2Zicm5kci5jCQlvcHRpb25hbAlzYwpk
aWZmIC0tZ2l0IGEvc3lzL2NvbmYvZmlsZXMuYXJtNjQgYi9zeXMvY29uZi9maWxlcy5hcm02NApp
bmRleCA4ZjVmMTBhLi5hMzJmNjA5IDEwMDY0NAotLS0gYS9zeXMvY29uZi9maWxlcy5hcm02NAor
KysgYi9zeXMvY29uZi9maWxlcy5hcm02NApAQCAtNjYsNiArNjYsNyBAQCBkZXYvaHdwbWMvaHdw
bWNfYXJtNjRfbWQuYwlvcHRpb25hbAlod3BtYwogZGV2L21tYy9ob3N0L2R3bW1jLmMJCW9wdGlv
bmFsCWR3bW1jCiBkZXYvbW1jL2hvc3QvZHdtbWNfaGlzaS5jCW9wdGlvbmFsCWR3bW1jIHNvY19o
aXNpX2hpNjIyMAogZGV2L29mdy9vZndfY3B1LmMJCW9wdGlvbmFsCWZkdAorZGV2L29mdy9vZndf
cGNpLmMJCW9wdGlvbmFsCXBjaSBmZHQKIGRldi9wY2kvcGNpX2hvc3RfZ2VuZXJpYy5jCW9wdGlv
bmFsCXBjaSBmZHQKIGRldi9wc2NpL3BzY2kuYwkJCW9wdGlvbmFsCXBzY2kKIGRldi9wc2NpL3Bz
Y2lfYXJtNjQuUwkJb3B0aW9uYWwJcHNjaQpkaWZmIC0tZ2l0IGEvc3lzL2NvbmYvZmlsZXMuaTM4
NiBiL3N5cy9jb25mL2ZpbGVzLmkzODYKaW5kZXggYjA2NTE2NS4uNTdiYmY1NyAxMDA2NDQKLS0t
IGEvc3lzL2NvbmYvZmlsZXMuaTM4NgorKysgYi9zeXMvY29uZi9maWxlcy5pMzg2CkBAIC0yODUs
NiArMjg1LDcgQEAgZGV2L252bWUvbnZtZV9zeXNjdGwuYwkJb3B0aW9uYWwgbnZtZQogZGV2L252
bWUvbnZtZV90ZXN0LmMJCW9wdGlvbmFsIG52bWUKIGRldi9udm1lL252bWVfdXRpbC5jCQlvcHRp
b25hbCBudm1lCiBkZXYvbnZyYW0vbnZyYW0uYwkJb3B0aW9uYWwgbnZyYW0gaXNhCitkZXYvb2Z3
L29md19wY2kuYwkJb3B0aW9uYWwgcGNpIGZkdAogZGV2L3BjZi9wY2ZfaXNhLmMJCW9wdGlvbmFs
IHBjZgogZGV2L3JhbmRvbS9pdnkuYwkJb3B0aW9uYWwgcmRyYW5kX3JuZwogZGV2L3JhbmRvbS9u
ZWhlbWlhaC5jCQlvcHRpb25hbCBwYWRsb2NrX3JuZwpkaWZmIC0tZ2l0IGEvc3lzL2NvbmYvZmls
ZXMubWlwcyBiL3N5cy9jb25mL2ZpbGVzLm1pcHMKaW5kZXggOTFkNTNhYS4uNjczMzA4MCAxMDA2
NDQKLS0tIGEvc3lzL2NvbmYvZmlsZXMubWlwcworKysgYi9zeXMvY29uZi9maWxlcy5taXBzCkBA
IC05MiwzICs5Miw2IEBAIGRldi9udnJhbTJlbnYvbnZyYW0yZW52LmMJCW9wdGlvbmFsCW52cmFt
MmVudgogZGV2L2h3cG1jL2h3cG1jX21pcHMuYwkJCW9wdGlvbmFsCWh3cG1jCiBkZXYvaHdwbWMv
aHdwbWNfbWlwczI0ay5jCQlvcHRpb25hbAlod3BtY19taXBzMjRrCiBkZXYvaHdwbWMvaHdwbWNf
bWlwczc0ay5jCQlvcHRpb25hbAlod3BtY19taXBzNzRrCisKKyMgb2Z3IHN1cHBvcnQKK2Rldi9v
Zncvb2Z3X3BjaS5jCQkJb3B0aW9uYWwgCXBjaSBmZHQKZGlmZiAtLWdpdCBhL3N5cy9jb25mL2Zp
bGVzLnBvd2VycGMgYi9zeXMvY29uZi9maWxlcy5wb3dlcnBjCmluZGV4IDBhMWU3YzEuLmJkZTQ4
YTMgMTAwNjQ0Ci0tLSBhL3N5cy9jb25mL2ZpbGVzLnBvd2VycGMKKysrIGIvc3lzL2NvbmYvZmls
ZXMucG93ZXJwYwpAQCAtNTcsNiArNTcsNyBAQCBkZXYvb2Z3L29md19jb25zb2xlLmMJCW9wdGlv
bmFsCWFpbQogZGV2L29mdy9vZndfZGlzay5jCQlvcHRpb25hbAlvZndkIGFpbQogZGV2L29mdy9v
ZndfaWljYnVzLmMJCW9wdGlvbmFsCWlpY2J1cyBhaW0KIGRldi9vZncvb2Z3YnVzLmMJCW9wdGlv
bmFsCWFpbSB8IGZkdAorZGV2L29mdy9vZndfcGNpLmMJCW9wdGlvbmFsIAlwY2kgZmR0CiBkZXYv
b2Z3L29md19zdGFuZGFyZC5jCQlvcHRpb25hbAlhaW0gcG93ZXJwYwogZGV2L29mdy9vZndfc3Vi
ci5jCQlvcHRpb25hbAlhaW0gcG93ZXJwYwogZGV2L3Bvd2VybWFjX252cmFtL3Bvd2VybWFjX252
cmFtLmMgb3B0aW9uYWwJcG93ZXJtYWNfbnZyYW0gcG93ZXJtYWMKQEAgLTE0NSw3ICsxNDYsNiBA
QCBwb3dlcnBjL21wYzg1eHgvcGNpX21wYzg1eHguYwlvcHRpb25hbAlwY2kgbXBjODV4eCB8IHBj
aSBxb3JpcV9kcGFhCiBwb3dlcnBjL21wYzg1eHgvcGNpX21wYzg1eHhfcGNpYi5jCW9wdGlvbmFs
CXBjaSBtcGM4NXh4IHwgcGNpIHFvcmlxX2RwYWEKIHBvd2VycGMvbXBjODV4eC9xb3JpcV9ncGlv
LmMJb3B0aW9uYWwJbXBjODV4eCBncGlvIHwgcW9yaXFfZHBhYSBncGlvCiBwb3dlcnBjL29mdy9v
ZndfbWFjaGRlcC5jCXN0YW5kYXJkCi1wb3dlcnBjL29mdy9vZndfcGNpLmMJCW9wdGlvbmFsCXBj
aQogcG93ZXJwYy9vZncvb2Z3X3BjaWJ1cy5jCW9wdGlvbmFsCXBjaQogcG93ZXJwYy9vZncvb2Z3
X3BjaWJfcGNpLmMJb3B0aW9uYWwJcGNpCiBwb3dlcnBjL29mdy9vZndfcmVhbC5jCQlvcHRpb25h
bAlhaW0KZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzLnNwYXJjNjQgYi9zeXMvY29uZi9maWxl
cy5zcGFyYzY0CmluZGV4IDg0ZjIzZmYuLmM3YzEzOGEgMTAwNjQ0Ci0tLSBhL3N5cy9jb25mL2Zp
bGVzLnNwYXJjNjQKKysrIGIvc3lzL2NvbmYvZmlsZXMuc3BhcmM2NApAQCAtNDcsNiArNDcsNyBA
QCBkZXYvb2Z3L29md19idXNfaWYubQkJc3RhbmRhcmQKIGRldi9vZncvb2Z3X2J1c19zdWJyLmMJ
CXN0YW5kYXJkCiBkZXYvb2Z3L29md19jb25zb2xlLmMJCW9wdGlvbmFsCW9md19jb25zb2xlCiBk
ZXYvb2Z3L29md19pZi5tCQlzdGFuZGFyZAorZGV2L29mdy9vZndfcGNpLmMJCW9wdGlvbmFsCXBj
aQogZGV2L29mdy9vZndfc3RhbmRhcmQuYwkJc3RhbmRhcmQKIGRldi9vZncvb3BlbmZpcm0uYwkJ
c3RhbmRhcmQKIGRldi9vZncvb3BlbmZpcm1pby5jCQlzdGFuZGFyZApAQCAtODIsNyArODMsNyBA
QCBzcGFyYzY0L2lzYS9pc2FfZG1hLmMJCW9wdGlvbmFsCWlzYQogc3BhcmM2NC9pc2Evb2Z3X2lz
YS5jCQlvcHRpb25hbAllYnVzIHwgaXNhCiBzcGFyYzY0L3BjaS9hcGIuYwkJb3B0aW9uYWwJcGNp
CiBzcGFyYzY0L3BjaS9maXJlLmMJCW9wdGlvbmFsCXBjaQotc3BhcmM2NC9wY2kvb2Z3X3BjaS5j
CQlvcHRpb25hbAlwY2kKK3NwYXJjNjQvcGNpL3NwYXJjNjRfb2Z3X3BjaS5jCW9wdGlvbmFsCXBj
aQogc3BhcmM2NC9wY2kvb2Z3X3BjaWIuYwkJb3B0aW9uYWwJcGNpCiBzcGFyYzY0L3BjaS9vZndf
cGNpYl9zdWJyLmMJb3B0aW9uYWwJcGNpCiBzcGFyYzY0L3BjaS9vZndfcGNpYnVzLmMJb3B0aW9u
YWwJcGNpCmRpZmYgLS1naXQgYS9zeXMvZGV2L29mdy9vZndfcGNpLmMgYi9zeXMvZGV2L29mdy9v
ZndfcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg1MmNkNwotLS0g
L2Rldi9udWxsCisrKyBiL3N5cy9kZXYvb2Z3L29md19wY2kuYwpAQCAtMCwwICsxLDYzNSBAQAor
LyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgTmF0aGFuIFdoaXRlaG9ybgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVC
U0QkIik7CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+Cisj
aW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxz
eXMvY29uZi5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvcm1hbi5o
PgorCisjaW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3
X2J1cy5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJyLmg+CisjaW5jbHVkZSA8ZGV2
L29mdy9vZndfcGNpLmg+CisKKyNpbmNsdWRlIDxkZXYvcGNpL3BjaXZhci5oPgorI2luY2x1ZGUg
PGRldi9wY2kvcGNpcmVnLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1ZGUg
PG1hY2hpbmUvbWRfdmFyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9yZXNvdXJjZS5oPgorCisjaW5j
bHVkZSA8dm0vdm0uaD4KKyNpbmNsdWRlIDx2bS9wbWFwLmg+CisKKyNpbmNsdWRlICJwY2liX2lm
LmgiCisKKy8qCisgKiBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gc2V0IGFub3RoZXIgdmFsdWUgb2Yg
dGhpcyBmb3IKKyAqIHNvbWUgcGxhdGZvcm1zIGl0IHNob3VsZCBiZSBzZXQgYXQgZmR0LmggZmls
ZQorICovCisjaWZuZGVmIFBDSV9NQVBfSU5UUgorI2RlZmluZQlQQ0lfTUFQX0lOVFIJNAorI2Vu
ZGlmCisKKyNkZWZpbmUJUENJX0lOVFJfUElOUwk0CisKKy8qCisgKiBidXMgaW50ZXJmYWNlLgor
ICovCitzdGF0aWMgaW50IG9md19wY2lfYWN0aXZhdGVfcmVzb3VyY2UoZGV2aWNlX3QsIGRldmlj
ZV90LCBpbnQsIGludCwKKyAgICBzdHJ1Y3QgcmVzb3VyY2UgKik7CitzdGF0aWMgaW50IG9md19w
Y2lfcmVsZWFzZV9yZXNvdXJjZShkZXZpY2VfdCwgZGV2aWNlX3QsIGludCwgaW50LAorICAgIHN0
cnVjdCByZXNvdXJjZSAqKTsKK3N0YXRpYyBpbnQgb2Z3X3BjaV9kZWFjdGl2YXRlX3Jlc291cmNl
KGRldmljZV90LCBkZXZpY2VfdCwgaW50LCBpbnQsCisgICAgc3RydWN0IHJlc291cmNlICopOwor
CisjaWZkZWYgX19wb3dlcnBjX18KK3N0YXRpYyBidXNfc3BhY2VfdGFnX3Qgb2Z3X3BjaV9idXNf
Z2V0X2J1c190YWcoZGV2aWNlX3QsIGRldmljZV90KTsKKyNlbmRpZgorCisvKgorICogcGNpYiBp
bnRlcmZhY2UKKyAqLworc3RhdGljIGludCBvZndfcGNpX21heHNsb3RzKGRldmljZV90KTsKKwor
LyoKKyAqIERyaXZlciBtZXRob2RzLgorICovCitzdGF0aWMgZGV2aWNlX21ldGhvZF90CW9md19w
Y2lfbWV0aG9kc1tdID0geworCisJLyogRGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChk
ZXZpY2VfYXR0YWNoLAlvZndfcGNpX2F0dGFjaCksCisKKwkvKiBCdXMgaW50ZXJmYWNlICovCisJ
REVWTUVUSE9EKGJ1c19wcmludF9jaGlsZCwJYnVzX2dlbmVyaWNfcHJpbnRfY2hpbGQpLAorCURF
Vk1FVEhPRChidXNfcmVhZF9pdmFyLAlvZndfcGNpX3JlYWRfaXZhciksCisJREVWTUVUSE9EKGJ1
c193cml0ZV9pdmFyLAlvZndfcGNpX3dyaXRlX2l2YXIpLAorCURFVk1FVEhPRChidXNfc2V0dXBf
aW50ciwJYnVzX2dlbmVyaWNfc2V0dXBfaW50ciksCisJREVWTUVUSE9EKGJ1c190ZWFyZG93bl9p
bnRyLAlidXNfZ2VuZXJpY190ZWFyZG93bl9pbnRyKSwKKwlERVZNRVRIT0QoYnVzX2FsbG9jX3Jl
c291cmNlLAlvZndfcGNpX2FsbG9jX3Jlc291cmNlKSwKKwlERVZNRVRIT0QoYnVzX3JlbGVhc2Vf
cmVzb3VyY2UsCW9md19wY2lfcmVsZWFzZV9yZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1c19hY3Rp
dmF0ZV9yZXNvdXJjZSwJb2Z3X3BjaV9hY3RpdmF0ZV9yZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1
c19kZWFjdGl2YXRlX3Jlc291cmNlLAlvZndfcGNpX2RlYWN0aXZhdGVfcmVzb3VyY2UpLAorCURF
Vk1FVEhPRChidXNfYWRqdXN0X3Jlc291cmNlLAlvZndfcGNpX2FkanVzdF9yZXNvdXJjZSksCisj
aWZkZWYgX19wb3dlcnBjX18KKwlERVZNRVRIT0QoYnVzX2dldF9idXNfdGFnLAlvZndfcGNpX2J1
c19nZXRfYnVzX3RhZyksCisjZW5kaWYKKworCS8qIHBjaWIgaW50ZXJmYWNlICovCisJREVWTUVU
SE9EKHBjaWJfbWF4c2xvdHMsCW9md19wY2lfbWF4c2xvdHMpLAorCURFVk1FVEhPRChwY2liX3Jv
dXRlX2ludGVycnVwdCwJb2Z3X3BjaV9yb3V0ZV9pbnRlcnJ1cHQpLAorCisJLyogb2Z3X2J1cyBp
bnRlcmZhY2UgKi8KKwlERVZNRVRIT0Qob2Z3X2J1c19nZXRfbm9kZSwJb2Z3X3BjaV9nZXRfbm9k
ZSksCisKKwlERVZNRVRIT0RfRU5ECit9OworCitERUZJTkVfQ0xBU1NfMChvZndfcGNpLCBvZndf
cGNpX2RyaXZlciwgb2Z3X3BjaV9tZXRob2RzLCBzaXplb2Yoc3RydWN0IG9md19wY2lfc29mdGMp
KTsKKworaW50CitvZndfcGNpX2luaXQoZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBvZndfcGNp
X3NvZnRjICpzYzsKKwlwaGFuZGxlX3Qgbm9kZTsKKwl1X2ludDMyX3QgYnVzcmFuZ2VbMl07CisJ
c3RydWN0IG9md19wY2lfcmFuZ2UgKnJwOworCWludCBlcnJvcjsKKwlzdHJ1Y3Qgb2Z3X3BjaV9j
ZWxsX2luZm8gKmNlbGxfaW5mbzsKKworCW5vZGUgPSBvZndfYnVzX2dldF9ub2RlKGRldik7CisJ
c2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc2MtPnNjX2luaXRpYWxpemVkID0gMTsKKwlz
Yy0+c2NfcmFuZ2UgPSBOVUxMOworCisJY2VsbF9pbmZvID0gKHN0cnVjdCBvZndfcGNpX2NlbGxf
aW5mbyAqKW1hbGxvYyhzaXplb2YoKmNlbGxfaW5mbyksCisJICAgIE1fREVWQlVGLCBNX1dBSVRP
SyB8IE1fWkVSTyk7CisKKwlzYy0+c2NfY2VsbF9pbmZvID0gY2VsbF9pbmZvOworCisJaWYgKE9G
X2dldGVuY3Byb3Aobm9kZSwgImJ1cy1yYW5nZSIsIGJ1c3JhbmdlLCBzaXplb2YoYnVzcmFuZ2Up
KSAhPSA4KQorCQlidXNyYW5nZVswXSA9IDA7CisKKwlzYy0+c2NfZGV2ID0gZGV2OworCXNjLT5z
Y19ub2RlID0gbm9kZTsKKwlzYy0+c2NfYnVzID0gYnVzcmFuZ2VbMF07CisKKwlpZiAoc2MtPnNj
X3F1aXJrcyAmIE9GV19QQ0lfUVVJUktfUkFOR0VTX09OX0NISUxEUkVOKSB7CisJCXBoYW5kbGVf
dCBjOworCQlpbnQgbiwgaTsKKworCQlzYy0+c2NfbnJhbmdlID0gMDsKKwkJZm9yIChjID0gT0Zf
Y2hpbGQobm9kZSk7IGMgIT0gMDsgYyA9IE9GX3BlZXIoYykpIHsKKwkJCW4gPSBvZndfcGNpX25y
YW5nZXMoYywgY2VsbF9pbmZvKTsKKwkJCWlmIChuID4gMCkKKwkJCQlzYy0+c2NfbnJhbmdlICs9
IG47CisJCX0KKwkJaWYgKHNjLT5zY19ucmFuZ2UgPT0gMCkgeworCQkJZXJyb3IgPSBFTlhJTzsK
KwkJCWdvdG8gb3V0OworCQl9CisJCXNjLT5zY19yYW5nZSA9IG1hbGxvYyhzYy0+c2NfbnJhbmdl
ICogc2l6ZW9mKHNjLT5zY19yYW5nZVswXSksCisJCSAgICBNX0RFVkJVRiwgTV9XQUlUT0spOwor
CQlpID0gMDsKKwkJZm9yIChjID0gT0ZfY2hpbGQobm9kZSk7IGMgIT0gMDsgYyA9IE9GX3BlZXIo
YykpIHsKKwkJCW4gPSBvZndfcGNpX2ZpbGxfcmFuZ2VzKGMsICZzYy0+c2NfcmFuZ2VbaV0pOwor
CQkJaWYgKG4gPiAwKQorCQkJCWkgKz0gbjsKKwkJfQorCQlLQVNTRVJUKGkgPT0gc2MtPnNjX25y
YW5nZSwgKCJyYW5nZSBjb3VudCBtaXNtYXRjaCIpKTsKKwl9IGVsc2UgeworCQlzYy0+c2NfbnJh
bmdlID0gb2Z3X3BjaV9ucmFuZ2VzKG5vZGUsIGNlbGxfaW5mbyk7CisJCWlmIChzYy0+c2NfbnJh
bmdlIDw9IDApIHsKKwkJCWRldmljZV9wcmludGYoZGV2LCAiY291bGQgbm90IGdldHJhbmdlc1xu
Iik7CisJCQllcnJvciA9IEVOWElPOworCQkJZ290byBvdXQ7CisJCX0KKwkJc2MtPnNjX3Jhbmdl
ID0gbWFsbG9jKHNjLT5zY19ucmFuZ2UgKiBzaXplb2Yoc2MtPnNjX3JhbmdlWzBdKSwKKwkJICAg
IE1fREVWQlVGLCBNX1dBSVRPSyk7CisJCW9md19wY2lfZmlsbF9yYW5nZXMobm9kZSwgc2MtPnNj
X3JhbmdlKTsKKwl9CisKKwlzYy0+c2NfaW9fcm1hbi5ybV90eXBlID0gUk1BTl9BUlJBWTsKKwlz
Yy0+c2NfaW9fcm1hbi5ybV9kZXNjciA9ICJQQ0kgSS9PIFBvcnRzIjsKKwllcnJvciA9IHJtYW5f
aW5pdCgmc2MtPnNjX2lvX3JtYW4pOworCWlmIChlcnJvcikgeworCQlkZXZpY2VfcHJpbnRmKGRl
diwgInJtYW5faW5pdCgpIGZhaWxlZC4gZXJyb3IgPSAlZFxuIiwgZXJyb3IpOworCQlnb3RvIG91
dDsKKwl9CisKKwlzYy0+c2NfbWVtX3JtYW4ucm1fdHlwZSA9IFJNQU5fQVJSQVk7CisJc2MtPnNj
X21lbV9ybWFuLnJtX2Rlc2NyID0gIlBDSSBNZW1vcnkiOworCWVycm9yID0gcm1hbl9pbml0KCZz
Yy0+c2NfbWVtX3JtYW4pOworCWlmIChlcnJvcikgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgInJt
YW5faW5pdCgpIGZhaWxlZC4gZXJyb3IgPSAlZFxuIiwgZXJyb3IpOworCQlnb3RvIG91dDsKKwl9
CisKKwlmb3IgKHJwID0gc2MtPnNjX3JhbmdlOyBycCA8IHNjLT5zY19yYW5nZSArIHNjLT5zY19u
cmFuZ2UgJiYKKwkgICAgcnAtPnBjaV9oaSAhPSAwOyBycCsrKSB7CisJCWVycm9yID0gMDsKKwor
CQlzd2l0Y2ggKHJwLT5wY2lfaGkgJiBPRldfUENJX1BIWVNfSElfU1BBQ0VNQVNLKSB7CisJCWNh
c2UgT0ZXX1BDSV9QSFlTX0hJX1NQQUNFX0NPTkZJRzoKKwkJCWJyZWFrOworCQljYXNlIE9GV19Q
Q0lfUEhZU19ISV9TUEFDRV9JTzoKKwkJCWVycm9yID0gcm1hbl9tYW5hZ2VfcmVnaW9uKCZzYy0+
c2NfaW9fcm1hbiwgcnAtPnBjaSwKKwkJCSAgICBycC0+cGNpICsgcnAtPnNpemUgLSAxKTsKKwkJ
CWJyZWFrOworCQljYXNlIE9GV19QQ0lfUEhZU19ISV9TUEFDRV9NRU0zMjoKKwkJY2FzZSBPRldf
UENJX1BIWVNfSElfU1BBQ0VfTUVNNjQ6CisJCQllcnJvciA9IHJtYW5fbWFuYWdlX3JlZ2lvbigm
c2MtPnNjX21lbV9ybWFuLCBycC0+cGNpLAorCQkJICAgIHJwLT5wY2kgKyBycC0+c2l6ZSAtIDEp
OworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZXJyb3IpIHsKKwkJCWRldmljZV9wcmludGYoZGV2
LAorCQkJICAgICJybWFuX21hbmFnZV9yZWdpb24oJXgsICUjangsICUjangpIGZhaWxlZC4gIgor
CQkJICAgICJlcnJvciA9ICVkXG4iLCBycC0+cGNpX2hpICYKKwkJCSAgICBPRldfUENJX1BIWVNf
SElfU1BBQ0VNQVNLLCBycC0+cGNpLAorCQkJICAgIHJwLT5wY2kgKyBycC0+c2l6ZSAtIDEsIGVy
cm9yKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJb2Z3X2J1c19zZXR1cF9paW5mbyhub2Rl
LCAmc2MtPnNjX3BjaV9paW5mbywgc2l6ZW9mKGNlbGxfdCkpOworCitvdXQ6CisJZnJlZShjZWxs
X2luZm8sIE1fREVWQlVGKTsKKwlmcmVlKHNjLT5zY19yYW5nZSwgTV9ERVZCVUYpOworCXJtYW5f
ZmluaSgmc2MtPnNjX2lvX3JtYW4pOworCXJtYW5fZmluaSgmc2MtPnNjX21lbV9ybWFuKTsKKwor
CXJldHVybiAoZXJyb3IpOworfQorCitpbnQKK29md19wY2lfYXR0YWNoKGRldmljZV90IGRldikK
K3sKKwlzdHJ1Y3Qgb2Z3X3BjaV9zb2Z0YyAqc2M7CisJaW50IGVycm9yOworCisJc2MgPSBkZXZp
Y2VfZ2V0X3NvZnRjKGRldik7CisJaWYgKCFzYy0+c2NfaW5pdGlhbGl6ZWQpIHsKKwkJZXJyb3Ig
PSBvZndfcGNpX2luaXQoZGV2KTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIChlcnJvcik7CisJ
fQorCisJZGV2aWNlX2FkZF9jaGlsZChkZXYsICJwY2kiLCAtMSk7CisJcmV0dXJuIChidXNfZ2Vu
ZXJpY19hdHRhY2goZGV2KSk7Cit9CisKK3N0YXRpYyBpbnQKK29md19wY2lfbWF4c2xvdHMoZGV2
aWNlX3QgZGV2KQoreworCisJcmV0dXJuIChQQ0lfU0xPVE1BWCk7Cit9CisKK2ludAorb2Z3X3Bj
aV9yb3V0ZV9pbnRlcnJ1cHQoZGV2aWNlX3QgYnVzLCBkZXZpY2VfdCBkZXYsIGludCBwaW4pCit7
CisJc3RydWN0IG9md19wY2lfc29mdGMgKnNjOworCXN0cnVjdCBvZndfcGNpX3JlZ2lzdGVyIHJl
ZzsKKwl1aW50MzJfdCBwaW50ciwgbWludHJbUENJX01BUF9JTlRSXTsKKwlpbnQgaW50cmNlbGxz
OworCXBoYW5kbGVfdCBpcGFyZW50OworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGJ1cyk7CisJ
cGludHIgPSBwaW47CisKKwkvKiBGYWJyaWNhdGUgaW1hcCBpbmZvcm1hdGlvbiBpbiBjYXNlIHRo
aXMgaXNuJ3QgYW4gT0ZXIGRldmljZSAqLworCWJ6ZXJvKCZyZWcsIHNpemVvZihyZWcpKTsKKwly
ZWcucGh5c19oaSA9IChwY2lfZ2V0X2J1cyhkZXYpIDw8IE9GV19QQ0lfUEhZU19ISV9CVVNTSElG
VCkgfAorCSAgICAocGNpX2dldF9zbG90KGRldikgPDwgT0ZXX1BDSV9QSFlTX0hJX0RFVklDRVNI
SUZUKSB8CisJICAgIChwY2lfZ2V0X2Z1bmN0aW9uKGRldikgPDwgT0ZXX1BDSV9QSFlTX0hJX0ZV
TkNUSU9OU0hJRlQpOworCisJaW50cmNlbGxzID0gb2Z3X2J1c19sb29rdXBfaW1hcChvZndfYnVz
X2dldF9ub2RlKGRldiksCisJICAgICZzYy0+c2NfcGNpX2lpbmZvLCAmcmVnLCBzaXplb2YocmVn
KSwgJnBpbnRyLCBzaXplb2YocGludHIpLAorCSAgICBtaW50ciwgc2l6ZW9mKG1pbnRyKSwgJmlw
YXJlbnQpOworCWlmIChpbnRyY2VsbHMgIT0gMCkgeworCQlwaW50ciA9IG9md19idXNfbWFwX2lu
dHIoZGV2LCBpcGFyZW50LCBpbnRyY2VsbHMsIG1pbnRyKTsKKwkJcmV0dXJuIChwaW50cik7CisJ
fQorCisJLyoKKwkgKiBNYXliZSBpdCdzIGEgcmVhbCBpbnRlcnJ1cHQsIG5vdCBhbiBpbnRwaW4K
KwkgKi8KKwlpZiAocGluID4gUENJX0lOVFJfUElOUykKKwkJcmV0dXJuIChwaW4pOworCisJZGV2
aWNlX3ByaW50ZihidXMsICJjb3VsZCBub3Qgcm91dGUgcGluICVkIGZvciBkZXZpY2UgJWQuJWRc
biIsCisJICAgIHBpbiwgcGNpX2dldF9zbG90KGRldiksIHBjaV9nZXRfZnVuY3Rpb24oZGV2KSk7
CisJcmV0dXJuIChQQ0lfSU5WQUxJRF9JUlEpOworfQorCitpbnQKK29md19wY2lfcmVhZF9pdmFy
KGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCB3aGljaCwgdWludHB0cl90ICpyZXN1
bHQpCit7CisJc3RydWN0IG9md19wY2lfc29mdGMgKnNjOworCisJc2MgPSBkZXZpY2VfZ2V0X3Nv
ZnRjKGRldik7CisKKwlzd2l0Y2ggKHdoaWNoKSB7CisJY2FzZSBQQ0lCX0lWQVJfRE9NQUlOOgor
CQkqcmVzdWx0ID0gZGV2aWNlX2dldF91bml0KGRldik7CisJCXJldHVybiAoMCk7CisJY2FzZSBQ
Q0lCX0lWQVJfQlVTOgorCQkqcmVzdWx0ID0gc2MtPnNjX2J1czsKKwkJcmV0dXJuICgwKTsKKwlk
ZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gKEVOT0VOVCk7Cit9CisKK2ludAorb2Z3
X3BjaV93cml0ZV9pdmFyKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCB3aGljaCwg
dWludHB0cl90IHZhbHVlKQoreworCXN0cnVjdCBvZndfcGNpX3NvZnRjICpzYzsKKworCXNjID0g
ZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisJc3dpdGNoICh3aGljaCkgeworCWNhc2UgUENJQl9J
VkFSX0JVUzoKKwkJc2MtPnNjX2J1cyA9IHZhbHVlOworCQlyZXR1cm4gKDApOworCWRlZmF1bHQ6
CisJCWJyZWFrOworCX0KKworCXJldHVybiAoRU5PRU5UKTsKK30KKworaW50CitvZndfcGNpX25y
YW5nZXMocGhhbmRsZV90IG5vZGUsIHN0cnVjdCBvZndfcGNpX2NlbGxfaW5mbyAqaW5mbykKK3sK
Kwlzc2l6ZV90IG5iYXNlX3JhbmdlczsKKworCWlmIChpbmZvID09IE5VTEwpCisJCXJldHVybiAo
LTEpOworCisJaW5mby0+aG9zdF9hZGRyZXNzX2NlbGxzID0gMTsKKwlpbmZvLT5zaXplX2NlbGxz
ID0gMjsKKwlpbmZvLT5wY2lfYWRkcmVzc19jZWxsID0gMzsKKworCU9GX2dldGVuY3Byb3AoT0Zf
cGFyZW50KG5vZGUpLCAiI2FkZHJlc3MtY2VsbHMiLAorCSAgICAmKGluZm8tPmhvc3RfYWRkcmVz
c19jZWxscyksIHNpemVvZihpbmZvLT5ob3N0X2FkZHJlc3NfY2VsbHMpKTsKKwlPRl9nZXRlbmNw
cm9wKG5vZGUsICIjYWRkcmVzcy1jZWxscyIsCisJICAgICYoaW5mby0+cGNpX2FkZHJlc3NfY2Vs
bCksIHNpemVvZihpbmZvLT5wY2lfYWRkcmVzc19jZWxsKSk7CisJT0ZfZ2V0ZW5jcHJvcChub2Rl
LCAiI3NpemUtY2VsbHMiLCAmKGluZm8tPnNpemVfY2VsbHMpLAorCSAgICBzaXplb2YoaW5mby0+
c2l6ZV9jZWxscykpOworCisJbmJhc2VfcmFuZ2VzID0gT0ZfZ2V0cHJvcGxlbihub2RlLCAicmFu
Z2VzIik7CisJaWYgKG5iYXNlX3JhbmdlcyA8PSAwKQorCQlyZXR1cm4gKC0xKTsKKworCXJldHVy
biAobmJhc2VfcmFuZ2VzIC8gc2l6ZW9mKGNlbGxfdCkgLworCSAgICAoaW5mby0+cGNpX2FkZHJl
c3NfY2VsbCArIGluZm8tPmhvc3RfYWRkcmVzc19jZWxscyArCisJICAgIGluZm8tPnNpemVfY2Vs
bHMpKTsKK30KKworc3RydWN0IHJlc291cmNlICoKK29md19wY2lfYWxsb2NfcmVzb3VyY2UoZGV2
aWNlX3QgYnVzLCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCAqcmlkLAorICAgIHJtYW5f
cmVzX3Qgc3RhcnQsIHJtYW5fcmVzX3QgZW5kLCBybWFuX3Jlc190IGNvdW50LCB1X2ludCBmbGFn
cykKK3sKKwlzdHJ1Y3Qgb2Z3X3BjaV9zb2Z0YyAqc2M7CisJc3RydWN0IHJlc291cmNlICpydjsK
KwlzdHJ1Y3Qgcm1hbiAqcm07CisJaW50IG5lZWRhY3RpdmF0ZTsKKworCW5lZWRhY3RpdmF0ZSA9
IGZsYWdzICYgUkZfQUNUSVZFOworCWZsYWdzICY9IH5SRl9BQ1RJVkU7CisKKwlzYyA9IGRldmlj
ZV9nZXRfc29mdGMoYnVzKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgU1lTX1JFU19NRU1P
Ulk6CisJCXJtID0gJnNjLT5zY19tZW1fcm1hbjsKKwkJYnJlYWs7CisKKwljYXNlIFNZU19SRVNf
SU9QT1JUOgorCQlybSA9ICZzYy0+c2NfaW9fcm1hbjsKKwkJYnJlYWs7CisKKwljYXNlIFNZU19S
RVNfSVJROgorCisjaWZkZWYgX19zcGFyYzY0X18KKwkJaWYgKHN0YXJ0ICE9IGVuZCkKKwkJCXBh
bmljKCIlczogWFhYOiBpbnRlcnJ1cHQgcmFuZ2UiLCBfX2Z1bmNfXyk7CisJCXJldHVybiAoYnVz
X2dlbmVyaWNfYWxsb2NfcmVzb3VyY2UoYnVzLCBjaGlsZCwgdHlwZSwgcmlkLCBzdGFydCwKKwkJ
ICAgIGVuZCwgY291bnQsIGZsYWdzKSk7CisjZWxzZQorCQlyZXR1cm4gKGJ1c19hbGxvY19yZXNv
dXJjZShidXMsIHR5cGUsIHJpZCwgc3RhcnQsIGVuZCwgY291bnQsCisJCSAgICBmbGFncykpOwor
I2VuZGlmCisKKwlkZWZhdWx0OgorCQlkZXZpY2VfcHJpbnRmKGJ1cywgInVua25vd24gcmVzb3Vy
Y2UgcmVxdWVzdCBmcm9tICVzXG4iLAorCQkgICAgZGV2aWNlX2dldF9uYW1ldW5pdChjaGlsZCkp
OworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCXJ2ID0gcm1hbl9yZXNlcnZlX3Jlc291cmNlKHJt
LCBzdGFydCwgZW5kLCBjb3VudCwgZmxhZ3MsIGNoaWxkKTsKKwlpZiAocnYgPT0gTlVMTCkgewor
CQlkZXZpY2VfcHJpbnRmKGJ1cywgImZhaWxlZCB0byByZXNlcnZlIHJlc291cmNlIGZvciAlc1xu
IiwKKwkJICAgIGRldmljZV9nZXRfbmFtZXVuaXQoY2hpbGQpKTsKKwkJcmV0dXJuIChOVUxMKTsK
Kwl9CisKKwlybWFuX3NldF9yaWQocnYsICpyaWQpOworCisJaWYgKG5lZWRhY3RpdmF0ZSkgewor
CQlpZiAoYnVzX2FjdGl2YXRlX3Jlc291cmNlKGNoaWxkLCB0eXBlLCAqcmlkLCBydikgIT0gMCkg
eworCQkJZGV2aWNlX3ByaW50ZihidXMsCisJCQkgICAgImZhaWxlZCB0byBhY3RpdmF0ZSByZXNv
dXJjZSBmb3IgJXNcbiIsCisJCQkgICAgZGV2aWNlX2dldF9uYW1ldW5pdChjaGlsZCkpOworCQkJ
cm1hbl9yZWxlYXNlX3Jlc291cmNlKHJ2KTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwl9CisK
KwlyZXR1cm4gKHJ2KTsKK30KKworc3RhdGljIGludAorb2Z3X3BjaV9yZWxlYXNlX3Jlc291cmNl
KGRldmljZV90IGJ1cywgZGV2aWNlX3QgY2hpbGQsIGludCB0eXBlLCBpbnQgcmlkLAorICAgIHN0
cnVjdCByZXNvdXJjZSAqcmVzKQoreworCisJaWYgKHJtYW5fZ2V0X2ZsYWdzKHJlcykgJiBSRl9B
Q1RJVkUpIHsKKwkJaW50IGVycm9yID0gYnVzX2RlYWN0aXZhdGVfcmVzb3VyY2UoY2hpbGQsIHR5
cGUsIHJpZCwgcmVzKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCX0KKworCXJl
dHVybiAocm1hbl9yZWxlYXNlX3Jlc291cmNlKHJlcykpOworfQorCitzdGF0aWMgaW50CitvZndf
cGNpX2FjdGl2YXRlX3Jlc291cmNlKGRldmljZV90IGJ1cywgZGV2aWNlX3QgY2hpbGQsIGludCB0
eXBlLCBpbnQgcmlkLAorICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworCXN0cnVjdCBvZndf
cGNpX3NvZnRjICpzYzsKKwlidXNfc3BhY2VfaGFuZGxlX3QgaGFuZGxlOworCWJ1c19zcGFjZV90
YWdfdCB0YWc7CisJaW50IHJ2OworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGJ1cyk7CisKKwlp
ZiAodHlwZSA9PSBTWVNfUkVTX0lSUSkgeworCQlyZXR1cm4gKGJ1c19hY3RpdmF0ZV9yZXNvdXJj
ZShidXMsIHR5cGUsIHJpZCwgcmVzKSk7CisJfQorCWlmICh0eXBlID09IFNZU19SRVNfTUVNT1JZ
IHx8IHR5cGUgPT0gU1lTX1JFU19JT1BPUlQpIHsKKwkJc3RydWN0IG9md19wY2lfcmFuZ2UgKnJw
OworCQl2bV9vZmZzZXRfdCBzdGFydDsKKwkJaW50IHNwYWNlOworCisJCXN0YXJ0ID0gKHZtX29m
ZnNldF90KXJtYW5fZ2V0X3N0YXJ0KHJlcyk7CisKKwkJLyoKKwkJICogTWFwIHRoaXMgdGhyb3Vn
aCB0aGUgcmFuZ2VzIGxpc3QKKwkJICovCisJCWZvciAocnAgPSBzYy0+c2NfcmFuZ2U7IHJwIDwg
c2MtPnNjX3JhbmdlICsgc2MtPnNjX25yYW5nZSAmJgorCQkgICAgcnAtPnBjaV9oaSAhPSAwOyBy
cCsrKSB7CisJCQlpZiAoc3RhcnQgPCBycC0+cGNpIHx8IHN0YXJ0ID49IHJwLT5wY2kgKyBycC0+
c2l6ZSkKKwkJCQljb250aW51ZTsKKworCQkJc3dpdGNoIChycC0+cGNpX2hpICYgT0ZXX1BDSV9Q
SFlTX0hJX1NQQUNFTUFTSykgeworCQkJY2FzZSBPRldfUENJX1BIWVNfSElfU1BBQ0VfSU86CisJ
CQkJc3BhY2UgPSBTWVNfUkVTX0lPUE9SVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgT0ZXX1BDSV9Q
SFlTX0hJX1NQQUNFX01FTTMyOgorCQkJY2FzZSBPRldfUENJX1BIWVNfSElfU1BBQ0VfTUVNNjQ6
CisJCQkJc3BhY2UgPSBTWVNfUkVTX01FTU9SWTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJ
CQkJc3BhY2UgPSAtMTsKKwkJCX0KKworCQkJaWYgKHR5cGUgPT0gc3BhY2UpIHsKKwkJCQlzdGFy
dCArPSAocnAtPmhvc3QgLSBycC0+cGNpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlm
IChib290dmVyYm9zZSkKKwkJCXByaW50Zigib2Z3X3BjaSBtYXBkZXY6IHN0YXJ0ICV6eCwgbGVu
ICVsZFxuIiwgc3RhcnQsCisJCQkgICAgcm1hbl9nZXRfc2l6ZShyZXMpKTsKKworCQl0YWcgPSBC
VVNfR0VUX0JVU19UQUcoY2hpbGQsIGNoaWxkKTsKKwkJaWYgKHRhZyA9PSBOVUxMKQorCQkJcmV0
dXJuIChFTk9NRU0pOworCisJCXJtYW5fc2V0X2J1c3RhZyhyZXMsIHRhZyk7CisJCXJ2ID0gYnVz
X3NwYWNlX21hcCh0YWcsIHN0YXJ0LAorCQkgICAgcm1hbl9nZXRfc2l6ZShyZXMpLCAwLCAmaGFu
ZGxlKTsKKwkJaWYgKHJ2ICE9IDApCisJCQlyZXR1cm4gKEVOT01FTSk7CisKKwkJcm1hbl9zZXRf
YnVzaGFuZGxlKHJlcywgaGFuZGxlKTsKKwkJcm1hbl9zZXRfdmlydHVhbChyZXMsICh2b2lkICop
aGFuZGxlKTsgLyogWFhYICBmb3IgcG93ZXJwYyBvbmx5ID8gKi8KKwl9CisKKwlyZXR1cm4gKHJt
YW5fYWN0aXZhdGVfcmVzb3VyY2UocmVzKSk7Cit9CisKKyNpZmRlZiBfX3Bvd2VycGNfXworc3Rh
dGljIGJ1c19zcGFjZV90YWdfdAorb2Z3X3BjaV9idXNfZ2V0X2J1c190YWcoZGV2aWNlX3QgYnVz
LCBkZXZpY2VfdCBjaGlsZCkKK3sKKworCXJldHVybiAoJmJzX2xlX3RhZyk7Cit9CisjZW5kaWYK
Kworc3RhdGljIGludAorb2Z3X3BjaV9kZWFjdGl2YXRlX3Jlc291cmNlKGRldmljZV90IGJ1cywg
ZGV2aWNlX3QgY2hpbGQsIGludCB0eXBlLCBpbnQgcmlkLAorICAgIHN0cnVjdCByZXNvdXJjZSAq
cmVzKQoreworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgbWVtb3J5IHJlc291cmNlLCB1bm1hcCBp
dC4KKwkgKi8KKwlpZiAoKHR5cGUgPT0gU1lTX1JFU19NRU1PUlkpIHx8ICh0eXBlID09IFNZU19S
RVNfSU9QT1JUKSkgeworCQl1X2ludDMyX3QgcHNpemU7CisKKwkJcHNpemUgPSBybWFuX2dldF9z
aXplKHJlcyk7CisKKwkJLyoKKwkJICogWFhYOiBUaGUgaW1wbGVtZW50YXRpb24gaXMgbWFjaGlu
ZS1kZXBlbmRlbnQgYW5kCisJCSAqIHNwYXJjNjQgdXNlcyBhIGRpZmZlcmVudCBmdW5jdGlvbiBz
aWduYXR1cmUgYXMgd2VsbC4KKwkJICovCisjaWZuZGVmIF9fc3BhcmM2NF9fCisJCXBtYXBfdW5t
YXBkZXYoKHZtX29mZnNldF90KXJtYW5fZ2V0X3ZpcnR1YWwocmVzKSwgcHNpemUpOworI2VuZGlm
CisJfQorCisJcmV0dXJuIChybWFuX2RlYWN0aXZhdGVfcmVzb3VyY2UocmVzKSk7Cit9CisKK2lu
dAorb2Z3X3BjaV9hZGp1c3RfcmVzb3VyY2UoZGV2aWNlX3QgYnVzLCBkZXZpY2VfdCBjaGlsZCwg
aW50IHR5cGUsCisgICAgc3RydWN0IHJlc291cmNlICpyZXMsIHJtYW5fcmVzX3Qgc3RhcnQsIHJt
YW5fcmVzX3QgZW5kKQoreworCXN0cnVjdCBybWFuICpybSA9IE5VTEw7CisJc3RydWN0IG9md19w
Y2lfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhidXMpOworCisJS0FTU0VSVCghKHJtYW5f
Z2V0X2ZsYWdzKHJlcykgJiBSRl9BQ1RJVkUpLAorCSAgICAoImFjdGl2ZSByZXNvdXJjZXMgY2Fu
bm90IGJlIGFkanVzdGVkIikpOworCWlmIChybWFuX2dldF9mbGFncyhyZXMpICYgUkZfQUNUSVZF
KQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNZU19SRVNf
TUVNT1JZOgorCQlybSA9ICZzYy0+c2NfbWVtX3JtYW47CisJCWJyZWFrOworCWNhc2UgU1lTX1JF
U19JT1BPUlQ6CisJCXJtID0gJnNjLT5zY19pb19ybWFuOworCQlicmVhazsKKwljYXNlIFNZU19S
RVNfSVJROgorCQlyZXR1cm4gKGJ1c19nZW5lcmljX2FkanVzdF9yZXNvdXJjZShidXMsIGNoaWxk
LCB0eXBlLCByZXMsCisJCSAgICBzdGFydCwgZW5kKSk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIChF
TlhJTyk7CisJfQorCisJaWYgKCFybWFuX2lzX3JlZ2lvbl9tYW5hZ2VyKHJlcywgcm0pKQorCQly
ZXR1cm4gKEVJTlZBTCk7CisKKwlyZXR1cm4gKHJtYW5fYWRqdXN0X3Jlc291cmNlKHJlcywgc3Rh
cnQsIGVuZCkpOworfQorCitwaGFuZGxlX3QKK29md19wY2lfZ2V0X25vZGUoZGV2aWNlX3QgYnVz
LCBkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IG9md19wY2lfc29mdGMgKnNjOworCisJc2MgPSBk
ZXZpY2VfZ2V0X3NvZnRjKGJ1cyk7CisJLyogV2Ugb25seSBoYXZlIG9uZSBjaGlsZCwgdGhlIFBD
SSBidXMsIHdoaWNoIG5lZWRzIG91ciBvd24gbm9kZS4gKi8KKworCXJldHVybiAoc2MtPnNjX25v
ZGUpOworfQorCitidXNfZG1hX3RhZ190CitvZndfcGNpX2dldF9kbWFfdGFnKGRldmljZV90IGJ1
cywgZGV2aWNlX3QgY2hpbGQgX191bnVzZWQpCit7CisJc3RydWN0IG9md19wY2lfc29mdGMgKnNj
OworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGJ1cyk7CisJcmV0dXJuIChzYy0+c2NfZG1hdCk7
Cit9CisKK2ludAorb2Z3X3BjaV9maWxsX3JhbmdlcyhwaGFuZGxlX3Qgbm9kZSwgc3RydWN0IG9m
d19wY2lfcmFuZ2UgKnJhbmdlcykKK3sKKwlzdHJ1Y3Qgb2Z3X3BjaV9jZWxsX2luZm8gKmNlbGxf
aW5mbzsKKwlwY2VsbF90ICpiYXNlX3JhbmdlczsKKwlzc2l6ZV90IG5iYXNlX3JhbmdlczsKKwlp
bnQgbnJhbmdlczsKKwlpbnQgaSwgaiwgazsKKworCWNlbGxfaW5mbyA9IChzdHJ1Y3Qgb2Z3X3Bj
aV9jZWxsX2luZm8gKiltYWxsb2Moc2l6ZW9mKCpjZWxsX2luZm8pLAorCSAgICBNX0RFVkJVRiwg
TV9XQUlUT0sgfCBNX1pFUk8pOworCisJbnJhbmdlcyA9IG9md19wY2lfbnJhbmdlcyhub2RlLCBj
ZWxsX2luZm8pOworCisJbmJhc2VfcmFuZ2VzID0gT0ZfZ2V0cHJvcGxlbihub2RlLCAicmFuZ2Vz
Iik7CisJaWYgKG5iYXNlX3JhbmdlcyA8PSAwKQorCQlyZXR1cm4gKC0xKTsKKwliYXNlX3Jhbmdl
cyA9IG1hbGxvYyhuYmFzZV9yYW5nZXMsIE1fREVWQlVGLCBNX1dBSVRPSyk7CisJT0ZfZ2V0ZW5j
cHJvcChub2RlLCAicmFuZ2VzIiwgYmFzZV9yYW5nZXMsIG5iYXNlX3Jhbmdlcyk7CisKKwlmb3Ig
KGkgPSAwLCBqID0gMDsgaSA8IG5yYW5nZXM7IGkrKykgeworCQlyYW5nZXNbaV0ucGNpX2hpID0g
YmFzZV9yYW5nZXNbaisrXTsKKwkJcmFuZ2VzW2ldLnBjaSA9IDA7CisJCWZvciAoayA9IDA7IGsg
PCBjZWxsX2luZm8tPnBjaV9hZGRyZXNzX2NlbGwgLSAxOyBrKyspIHsKKwkJCXJhbmdlc1tpXS5w
Y2kgPDw9IDMyOworCQkJcmFuZ2VzW2ldLnBjaSB8PSBiYXNlX3Jhbmdlc1tqKytdOworCQl9CisJ
CXJhbmdlc1tpXS5ob3N0ID0gMDsKKwkJZm9yIChrID0gMDsgayA8IGNlbGxfaW5mby0+aG9zdF9h
ZGRyZXNzX2NlbGxzOyBrKyspIHsKKwkJCXJhbmdlc1tpXS5ob3N0IDw8PSAzMjsKKwkJCXJhbmdl
c1tpXS5ob3N0IHw9IGJhc2VfcmFuZ2VzW2orK107CisJCX0KKwkJcmFuZ2VzW2ldLnNpemUgPSAw
OworCQlmb3IgKGsgPSAwOyBrIDwgY2VsbF9pbmZvLT5zaXplX2NlbGxzOyBrKyspIHsKKwkJCXJh
bmdlc1tpXS5zaXplIDw8PSAzMjsKKwkJCXJhbmdlc1tpXS5zaXplIHw9IGJhc2VfcmFuZ2VzW2or
K107CisJCX0KKwl9CisKKwlmcmVlKGJhc2VfcmFuZ2VzLCBNX0RFVkJVRik7CisJcmV0dXJuIChu
cmFuZ2VzKTsKK30KZGlmZiAtLWdpdCBhL3N5cy9kZXYvb2Z3L29md19wY2kuaCBiL3N5cy9kZXYv
b2Z3L29md19wY2kuaAppbmRleCBlYjYwYzViLi43NDM1NWQyIDEwMDY0NAotLS0gYS9zeXMvZGV2
L29mdy9vZndfcGNpLmgKKysrIGIvc3lzL2Rldi9vZncvb2Z3X3BjaS5oCkBAIC04OSw2ICs4OSw0
NyBAQAogI2RlZmluZSBPRldfUENJX1BIWVNfSElfRlVOQ1RJT04oaGkpIFwKIAkoKChoaSkgJiBP
RldfUENJX1BIWVNfSElfRlVOQ1RJT05NQVNLKSA+PiBPRldfUENJX1BIWVNfSElfRlVOQ1RJT05T
SElGVCkKIAorI2RlZmluZQlPRldfUENJX1NQQUNFX05VTQkJNAorCisvKgorICogRXhwb3J0IGNs
YXNzIGRlZmluaXRpb24gZm9yIGluaGVyaXRhbmNlIHB1cnBvc2VzCisgKi8KK0RFQ0xBUkVfQ0xB
U1Mob2Z3X3BjaV9kcml2ZXIpOworCit0eXBlZGVmIHVpbnQzMl90IG9md19wY2lfaW50cl90Owor
CisvKiBPRlcgZGV2aWNlIHR5cGVzICovCisjZGVmaW5lCU9GV19UWVBFX1BDSQkJInBjaSIKKyNk
ZWZpbmUJT0ZXX1RZUEVfUENJRQkJInBjaWV4IgorCitzdHJ1Y3Qgb2Z3X3BjaV9tc2lfYWRkcl9y
YW5nZXMgeworCXVpbnQzMl90CWFkZHIzMl9oaTsKKwl1aW50MzJfdAlhZGRyMzJfbG87CisJdWlu
dDMyX3QJYWRkcjMyX3N6OworCXVpbnQzMl90CWFkZHI2NF9oaTsKKwl1aW50MzJfdAlhZGRyNjRf
bG87CisJdWludDMyX3QJYWRkcjY0X3N6OworfTsKKworI2RlZmluZQlPRldfUENJX01TSV9BRERS
X1JBTkdFXzMyKHIpIFwKKwkoKCh1aW50NjRfdCkociktPmFkZHIzMl9oaSA8PCAzMikgfCAodWlu
dDY0X3QpKHIpLT5hZGRyMzJfbG8pCisjZGVmaW5lCU9GV19QQ0lfTVNJX0FERFJfUkFOR0VfNjQo
cikgXAorCSgoKHVpbnQ2NF90KShyKS0+YWRkcjY0X2hpIDw8IDMyKSB8ICh1aW50NjRfdCkocikt
PmFkZHI2NF9sbykKKworc3RydWN0IG9md19wY2lfbXNpX2VxX3RvX2RldmlubyB7CisJdWludDMy
X3QJZXFfZmlyc3Q7CisJdWludDMyX3QJZXFfY291bnQ7CisJdWludDMyX3QJZGV2aW5vX2ZpcnN0
OworfTsKKworc3RydWN0IG9md19wY2lfbXNpX3JhbmdlcyB7CisJdWludDMyX3QJZmlyc3Q7CisJ
dWludDMyX3QJY291bnQ7Cit9OworCisvKiBkZWZhdWx0IHZhbHVlcyAqLworI2RlZmluZQlPRldf
UENJX0xBVEVOQ1kJNjQKKwogLyoKICAqIFRoaXMgaGFzIHRoZSAzIDMyYml0IGNlbGwgdmFsdWVz
LCBwbHVzIDIgbW9yZSB0byBtYWtlIHVwIGEgNjQtYml0IHNpemUuCiAgKi8KQEAgLTEwMCw0ICsx
NDEsODcgQEAgc3RydWN0IG9md19wY2lfcmVnaXN0ZXIgewogCXVfaW50MzJfdAlzaXplX2xvOwog
fTsKIAorc3RydWN0IG9md19wY2lfY2VsbF9pbmZvIHsKKwlwY2VsbF90IGhvc3RfYWRkcmVzc19j
ZWxsczsKKwlwY2VsbF90IHBjaV9hZGRyZXNzX2NlbGw7CisJcGNlbGxfdCBzaXplX2NlbGxzOwor
IH07CisKK3N0cnVjdCBvZndfcGNpX3JhbmdlIHsKKwl1aW50MzJfdAlwY2lfaGk7CisJdWludDY0
X3QJcGNpOworCXVpbnQ2NF90CWhvc3Q7CisJdWludDY0X3QJc2l6ZTsKK307CisKKy8qCisgKiBR
dWlya3MgZm9yIHNvbWUgYWRhcHRlcnMKKyAqLworZW51bSB7CisJT0ZXX1BDSV9RVUlSS19SQU5H
RVNfT05fQ0hJTERSRU4gPSAxLAorfTsKKworLyoKKyAqIEluZGV4IGludG8gdGhlIHNjX2JoW10g
YXJyYXksIGl0IGlzCisgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBQQ0kgc3BhY2UgcmFuZ2VzIHR5
cGUKKyAqLworZW51bSBvZndfcGNpX3Jhbmdlc190eXBlIHsKKwlPRldfUENJX0NPTkZJRyA9IDAs
CisJT0ZXX1BDSV9JTywKKwlPRldfUENJX01FTTMyLAorCU9GV19QQ0lfTUVNNjQKK307CisKK3N0
cnVjdCBvZndfcGNpX3NvZnRjIHsKKwlkZXZpY2VfdAlzY19kZXY7CisJcGhhbmRsZV90CXNjX25v
ZGU7CisJaW50CQlzY19idXM7CisJaW50CQlzY19pbml0aWFsaXplZDsKKwlpbnQJCXNjX3F1aXJr
czsKKwl1aW50OF90CQlzY19zZWNidXM7CisJdWludDhfdAkJc2Nfc3ViYnVzOworCisJc3RydWN0
IG9md19wY2lfcmFuZ2UJCSpzY19yYW5nZTsKKwlpbnQJCQkJc2NfbnJhbmdlOworCXN0cnVjdCBv
ZndfcGNpX2NlbGxfaW5mbwkqc2NfY2VsbF9pbmZvOworCisJc3RydWN0IHJtYW4JCQlzY19pb19y
bWFuOworCXN0cnVjdCBybWFuCQkJc2NfbWVtX3JtYW47CisJYnVzX3NwYWNlX3RhZ190CQkJc2Nf
bWVtdDsKKwlidXNfc3BhY2VfdGFnX3QJCQlzY19jZmd0OworCWJ1c19zcGFjZV90YWdfdAkJCXNj
X2lvdDsKKwlidXNfZG1hX3RhZ190CQkJc2NfZG1hdDsKKwlidXNfc3BhY2VfaGFuZGxlX3QJCXNj
X2JoW09GV19QQ0lfU1BBQ0VfTlVNXTsKKworCXN0cnVjdCBvZndfYnVzX2lpbmZvCQlzY19wY2lf
aWluZm87Cit9OworCitpbnQgb2Z3X3BjaV9pbml0KGRldmljZV90KTsKK2ludCBvZndfcGNpX2F0
dGFjaChkZXZpY2VfdCk7CitpbnQgb2Z3X3BjaV9yZWFkX2l2YXIoZGV2aWNlX3QsIGRldmljZV90
LCBpbnQsIHVpbnRwdHJfdCAqKTsKK2ludCBvZndfcGNpX3dyaXRlX2l2YXIoZGV2aWNlX3QsIGRl
dmljZV90LCBpbnQsIHVpbnRwdHJfdCk7CitpbnQgb2Z3X3BjaV9yb3V0ZV9pbnRlcnJ1cHQoZGV2
aWNlX3QsIGRldmljZV90LCBpbnQpOworaW50IG9md19wY2lfbnJhbmdlcyhwaGFuZGxlX3QsIHN0
cnVjdCBvZndfcGNpX2NlbGxfaW5mbyAqKTsKK2ludCBvZndfcGNpX2ZpbGxfcmFuZ2VzKHBoYW5k
bGVfdCwgc3RydWN0IG9md19wY2lfcmFuZ2UgKik7CisKK2ludCBvZndfcGNpX2FkanVzdF9yZXNv
dXJjZShkZXZpY2VfdCwgZGV2aWNlX3QsIGludCwKKyAgICBzdHJ1Y3QgcmVzb3VyY2UgKiwgdV9s
b25nLCB1X2xvbmcpOworc3RydWN0IHJlc291cmNlICogb2Z3X3BjaV9hbGxvY19yZXNvdXJjZShk
ZXZpY2VfdCwgZGV2aWNlX3QsCisgICAgaW50LCBpbnQgKiwgdV9sb25nLCB1X2xvbmcsIHVfbG9u
ZywgdV9pbnQpOworaW50IHNwYXJjNjRfb2Z3X3BjaV9hY3RpdmF0ZV9yZXNvdXJjZShkZXZpY2Vf
dCwgZGV2aWNlX3QsIGludCwgaW50LAorICAgIHN0cnVjdCByZXNvdXJjZSAqKTsKK2ludCBzcGFy
YzY0X29md19wY2lfZGVhY3RpdmF0ZV9yZXNvdXJjZShkZXZpY2VfdCwgZGV2aWNlX3QsIGludCwg
aW50LAorICAgIHN0cnVjdCByZXNvdXJjZSAqKTsKKworaW50IG9md19wY2lfYXR0YWNoX2NvbW1v
bihkZXZpY2VfdCwgYnVzX2RtYV90YWdfdCwgdV9sb25nLCB1X2xvbmcpOwordWludDMyX3Qgb2Z3
X3BjaV9yZWFkX2NvbmZpZ19jb21tb24oZGV2aWNlX3QsIHVfaW50LCB1X2xvbmcsIHVfaW50LCB1
X2ludCwKKyAgICB1X2ludCwgdV9pbnQsIGludCk7Cit2b2lkIG9md19wY2lfd3JpdGVfY29uZmln
X2NvbW1vbihkZXZpY2VfdCwgdV9pbnQsIHVfbG9uZywgdV9pbnQsIHVfaW50LAorICAgIHVfaW50
LCB1X2ludCwgdWludDMyX3QsIGludCk7CitvZndfcGNpX2ludHJfdCBvZndfcGNpX3JvdXRlX2lu
dGVycnVwdF9jb21tb24oZGV2aWNlX3QsIGRldmljZV90LCBpbnQpOwordm9pZCBvZndfcGNpX2Rt
YW1hcF9zeW5jX3N0c3Rfb3JkZXJfY29tbW9uKHZvaWQpOworCitvZndfYnVzX2dldF9ub2RlX3Qg
b2Z3X3BjaV9nZXRfbm9kZTsKK2J1c19nZXRfZG1hX3RhZ190IG9md19wY2lfZ2V0X2RtYV90YWc7
CisKICNlbmRpZiAvKiBfREVWX09GV19PRldfUENJX0hfICovCmRpZmYgLS1naXQgYS9zeXMvZGV2
L29mdy9vZndfc3Vici5jIGIvc3lzL2Rldi9vZncvb2Z3X3N1YnIuYwppbmRleCA0ZDE0ZGI3Li5l
OWI2NmMyIDEwMDY0NAotLS0gYS9zeXMvZGV2L29mdy9vZndfc3Vici5jCisrKyBiL3N5cy9kZXYv
b2Z3L29md19zdWJyLmMKQEAgLTM5LDggKzM5LDkgQEAgX19GQlNESUQoIiRGcmVlQlNEJCIpOwog
I2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CiAKICNpbmNsdWRlIDxkZXYvb2Z3L29wZW5maXJtLmg+
Ci0jaW5jbHVkZSA8ZGV2L29mdy9vZndfcGNpLmg+CiAjaW5jbHVkZSA8ZGV2L29mdy9vZndfc3Vi
ci5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJyLmg+CisjaW5jbHVkZSA8ZGV2L29m
dy9vZndfcGNpLmg+CiAKIHN0YXRpYyB2b2lkCiBnZXRfYWRkcl9wcm9wcyhwaGFuZGxlX3Qgbm9k
ZSwgdWludDMyX3QgKmFkZHJwLCB1aW50MzJfdCAqc2l6ZXAsIGludCAqcGNpcCkKZGlmZiAtLWdp
dCBhL3N5cy9kZXYvdnQvaHcvb2Z3ZmIvb2Z3ZmIuYyBiL3N5cy9kZXYvdnQvaHcvb2Z3ZmIvb2Z3
ZmIuYwppbmRleCAwNzc2YThlLi5mZjQ2N2ZhIDEwMDY0NAotLS0gYS9zeXMvZGV2L3Z0L2h3L29m
d2ZiL29md2ZiLmMKKysrIGIvc3lzL2Rldi92dC9ody9vZndmYi9vZndmYi5jCkBAIC0zMSw2ICsz
MSw3IEBAIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKICNpbmNsdWRlIDxzeXMva2VybmVsLmg+CiAj
aW5jbHVkZSA8c3lzL3N5c3RtLmg+CiAjaW5jbHVkZSA8c3lzL2ZiaW8uaD4KKyNpbmNsdWRlIDxz
eXMvcm1hbi5oPgogCiAjaW5jbHVkZSA8ZGV2L3Z0L3Z0Lmg+CiAjaW5jbHVkZSA8ZGV2L3Z0L2h3
L2ZiL3Z0X2ZiLmg+CkBAIC00Niw2ICs0Nyw3IEBAIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKIAog
I2luY2x1ZGUgPGRldi9vZncvb3BlbmZpcm0uaD4KICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXMu
aD4KKyNpbmNsdWRlIDxkZXYvb2Z3L29md19idXNfc3Vici5oPgogI2luY2x1ZGUgPGRldi9vZncv
b2Z3X3BjaS5oPgogCiBzdHJ1Y3Qgb2Z3ZmJfc29mdGMgewpkaWZmIC0tZ2l0IGEvc3lzL3Bvd2Vy
cGMvbXBjODV4eC9wY2lfbXBjODV4eC5jIGIvc3lzL3Bvd2VycGMvbXBjODV4eC9wY2lfbXBjODV4
eC5jCmluZGV4IDQzOTdhYzAuLmRlNTVhZmMgMTAwNjQ0Ci0tLSBhL3N5cy9wb3dlcnBjL21wYzg1
eHgvcGNpX21wYzg1eHguYworKysgYi9zeXMvcG93ZXJwYy9tcGM4NXh4L3BjaV9tcGM4NXh4LmMK
QEAgLTU1LDE1ICs1NSwxMyBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAjaW5jbHVkZSA8dm0v
dm0uaD4KICNpbmNsdWRlIDx2bS9wbWFwLmg+CiAKLSNpbmNsdWRlIDxkZXYvb2Z3L29md19wY2ku
aD4KICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXMuaD4KICNpbmNsdWRlIDxkZXYvb2Z3L29md19i
dXNfc3Vici5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X3BjaS5oPgogI2luY2x1ZGUgPGRldi9w
Y2kvcGNpdmFyLmg+CiAjaW5jbHVkZSA8ZGV2L3BjaS9wY2lyZWcuaD4KICNpbmNsdWRlIDxkZXYv
cGNpL3BjaWJfcHJpdmF0ZS5oPgogCi0jaW5jbHVkZSA8cG93ZXJwYy9vZncvb2Z3X3BjaS5oPgot
CiAjaW5jbHVkZSAib2Z3X2J1c19pZi5oIgogI2luY2x1ZGUgInBjaWJfaWYuaCIKIApkaWZmIC0t
Z2l0IGEvc3lzL3Bvd2VycGMvb2Z3L29md19tYWNoZGVwLmMgYi9zeXMvcG93ZXJwYy9vZncvb2Z3
X21hY2hkZXAuYwppbmRleCAzMDUxZWIzLi40MDkyMjg4IDEwMDY0NAotLS0gYS9zeXMvcG93ZXJw
Yy9vZncvb2Z3X21hY2hkZXAuYworKysgYi9zeXMvcG93ZXJwYy9vZncvb2Z3X21hY2hkZXAuYwpA
QCAtNTAsNiArNTAsNyBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAKICNpbmNsdWRlIDxkZXYv
ZmR0L2ZkdF9jb21tb24uaD4KICNpbmNsdWRlIDxkZXYvb2Z3L29wZW5maXJtLmg+CisjaW5jbHVk
ZSA8ZGV2L29mdy9vZndfYnVzX3N1YnIuaD4KICNpbmNsdWRlIDxkZXYvb2Z3L29md19wY2kuaD4K
ICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXMuaD4KICNpbmNsdWRlIDxkZXYvb2Z3L29md19zdWJy
Lmg+CmRpZmYgLS1naXQgYS9zeXMvcG93ZXJwYy9vZncvb2Z3X3BjaS5jIGIvc3lzL3Bvd2VycGMv
b2Z3L29md19wY2kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNhNWJjMC4uMDAw
MDAwMAotLS0gYS9zeXMvcG93ZXJwYy9vZncvb2Z3X3BjaS5jCisrKyAvZGV2L251bGwKQEAgLTEs
NTU4ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDExIE5hdGhhbiBXaGl0ZWhvcm4K
LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAot
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK
LSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
Ci0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19G
QlNESUQoIiRGcmVlQlNEJCIpOwotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5
cy9zeXN0bS5oPgotI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KLSNpbmNsdWRlIDxzeXMvYnVzLmg+
Ci0jaW5jbHVkZSA8c3lzL2NvbmYuaD4KLSNpbmNsdWRlIDxzeXMva2VybmVsLmg+Ci0KLSNpbmNs
dWRlIDxkZXYvb2Z3L29wZW5maXJtLmg+Ci0jaW5jbHVkZSA8ZGV2L29mdy9vZndfcGNpLmg+Ci0j
aW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzLmg+Ci0jaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzX3N1
YnIuaD4KLQotI2luY2x1ZGUgPGRldi9wY2kvcGNpdmFyLmg+Ci0jaW5jbHVkZSA8ZGV2L3BjaS9w
Y2lyZWcuaD4KLQotI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9p
bnRyX21hY2hkZXAuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL21kX3Zhci5oPgotI2luY2x1ZGUgPG1h
Y2hpbmUvcGlvLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9yZXNvdXJjZS5oPgotCi0jaW5jbHVkZSA8
c3lzL3JtYW4uaD4KLQotI2luY2x1ZGUgPHZtL3ZtLmg+Ci0jaW5jbHVkZSA8dm0vcG1hcC5oPgot
Ci0jaW5jbHVkZSA8cG93ZXJwYy9vZncvb2Z3X3BjaS5oPgotCi0jaW5jbHVkZSAicGNpYl9pZi5o
IgotCi0vKgotICogQnVzIGludGVyZmFjZS4KLSAqLwotc3RhdGljIGludAkJb2Z3X3BjaV9yZWFk
X2l2YXIoZGV2aWNlX3QsIGRldmljZV90LCBpbnQsCi0JCQkgICAgdWludHB0cl90ICopOwotc3Rh
dGljIHN0cnVjdAkJcmVzb3VyY2UgKiBvZndfcGNpX2FsbG9jX3Jlc291cmNlKGRldmljZV90IGJ1
cywKLQkJCSAgICBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCAqcmlkLCBybWFuX3Jlc190
IHN0YXJ0LAotCQkJICAgIHJtYW5fcmVzX3QgZW5kLCBybWFuX3Jlc190IGNvdW50LCB1X2ludCBm
bGFncyk7Ci1zdGF0aWMgaW50CQlvZndfcGNpX3JlbGVhc2VfcmVzb3VyY2UoZGV2aWNlX3QgYnVz
LCBkZXZpY2VfdCBjaGlsZCwKLSAgICAJCQkgICAgaW50IHR5cGUsIGludCByaWQsIHN0cnVjdCBy
ZXNvdXJjZSAqcmVzKTsKLXN0YXRpYyBpbnQJCW9md19wY2lfYWN0aXZhdGVfcmVzb3VyY2UoZGV2
aWNlX3QgYnVzLCBkZXZpY2VfdCBjaGlsZCwKLQkJCSAgICBpbnQgdHlwZSwgaW50IHJpZCwgc3Ry
dWN0IHJlc291cmNlICpyZXMpOwotc3RhdGljIGludAkJb2Z3X3BjaV9kZWFjdGl2YXRlX3Jlc291
cmNlKGRldmljZV90IGJ1cywKLSAgICAJCQkgICAgZGV2aWNlX3QgY2hpbGQsIGludCB0eXBlLCBp
bnQgcmlkLAotICAgIAkJCSAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7Ci1zdGF0aWMgaW50CQlv
ZndfcGNpX2FkanVzdF9yZXNvdXJjZShkZXZpY2VfdCBidXMsIGRldmljZV90IGNoaWxkLAotCQkJ
ICAgIGludCB0eXBlLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgcm1hbl9yZXNfdCBzdGFydCwKLQkJ
CSAgICBybWFuX3Jlc190IGVuZCk7Ci0KLS8qCi0gKiBwY2liIGludGVyZmFjZS4KLSAqLwotc3Rh
dGljIGludAkJb2Z3X3BjaV9tYXhzbG90cyhkZXZpY2VfdCk7Ci1zdGF0aWMgaW50CQlvZndfcGNp
X3JvdXRlX2ludGVycnVwdChkZXZpY2VfdCwgZGV2aWNlX3QsIGludCk7Ci0KLS8qCi0gKiBvZndf
YnVzIGludGVyZmFjZQotICovCi1zdGF0aWMgcGhhbmRsZV90IG9md19wY2lfZ2V0X25vZGUoZGV2
aWNlX3QgYnVzLCBkZXZpY2VfdCBkZXYpOwotCi0vKgotICogbG9jYWwgbWV0aG9kcwotICovCi0K
LXN0YXRpYyBpbnQgb2Z3X3BjaV9ucmFuZ2VzKHBoYW5kbGVfdCBub2RlKTsKLXN0YXRpYyBpbnQg
b2Z3X3BjaV9maWxsX3JhbmdlcyhwaGFuZGxlX3Qgbm9kZSwgc3RydWN0IG9md19wY2lfcmFuZ2Ug
KnJhbmdlcyk7Ci0KLS8qCi0gKiBEcml2ZXIgbWV0aG9kcy4KLSAqLwotc3RhdGljIGRldmljZV9t
ZXRob2RfdAlvZndfcGNpX21ldGhvZHNbXSA9IHsKLQkvKiBEZXZpY2UgaW50ZXJmYWNlICovCi0J
REVWTUVUSE9EKGRldmljZV9hdHRhY2gsCW9md19wY2lfYXR0YWNoKSwKLQotCS8qIEJ1cyBpbnRl
cmZhY2UgKi8KLQlERVZNRVRIT0QoYnVzX3ByaW50X2NoaWxkLAlidXNfZ2VuZXJpY19wcmludF9j
aGlsZCksCi0JREVWTUVUSE9EKGJ1c19yZWFkX2l2YXIsCW9md19wY2lfcmVhZF9pdmFyKSwKLQlE
RVZNRVRIT0QoYnVzX3NldHVwX2ludHIsCWJ1c19nZW5lcmljX3NldHVwX2ludHIpLAotCURFVk1F
VEhPRChidXNfdGVhcmRvd25faW50ciwJYnVzX2dlbmVyaWNfdGVhcmRvd25faW50ciksCi0JREVW
TUVUSE9EKGJ1c19hbGxvY19yZXNvdXJjZSwJb2Z3X3BjaV9hbGxvY19yZXNvdXJjZSksCi0JREVW
TUVUSE9EKGJ1c19yZWxlYXNlX3Jlc291cmNlLAlvZndfcGNpX3JlbGVhc2VfcmVzb3VyY2UpLAot
CURFVk1FVEhPRChidXNfYWN0aXZhdGVfcmVzb3VyY2UsCW9md19wY2lfYWN0aXZhdGVfcmVzb3Vy
Y2UpLAotCURFVk1FVEhPRChidXNfZGVhY3RpdmF0ZV9yZXNvdXJjZSwJb2Z3X3BjaV9kZWFjdGl2
YXRlX3Jlc291cmNlKSwKLQlERVZNRVRIT0QoYnVzX2FkanVzdF9yZXNvdXJjZSwJb2Z3X3BjaV9h
ZGp1c3RfcmVzb3VyY2UpLAotCi0JLyogcGNpYiBpbnRlcmZhY2UgKi8KLQlERVZNRVRIT0QocGNp
Yl9tYXhzbG90cywJb2Z3X3BjaV9tYXhzbG90cyksCi0JREVWTUVUSE9EKHBjaWJfcm91dGVfaW50
ZXJydXB0LAlvZndfcGNpX3JvdXRlX2ludGVycnVwdCksCi0KLQkvKiBvZndfYnVzIGludGVyZmFj
ZSAqLwotCURFVk1FVEhPRChvZndfYnVzX2dldF9ub2RlLCAgICAgb2Z3X3BjaV9nZXRfbm9kZSks
Ci0KLQlERVZNRVRIT0RfRU5ECi19OwotCi1ERUZJTkVfQ0xBU1NfMChvZndfcGNpLCBvZndfcGNp
X2RyaXZlciwgb2Z3X3BjaV9tZXRob2RzLCAwKTsKLQotaW50Ci1vZndfcGNpX2luaXQoZGV2aWNl
X3QgZGV2KQotewotCXN0cnVjdAkJb2Z3X3BjaV9zb2Z0YyAqc2M7Ci0JcGhhbmRsZV90CW5vZGU7
Ci0JdV9pbnQzMl90CWJ1c3JhbmdlWzJdOwotCXN0cnVjdAkJb2Z3X3BjaV9yYW5nZSAqcnA7Ci0J
aW50CQllcnJvcjsKLQotCW5vZGUgPSBvZndfYnVzX2dldF9ub2RlKGRldik7Ci0Jc2MgPSBkZXZp
Y2VfZ2V0X3NvZnRjKGRldik7Ci0Jc2MtPnNjX2luaXRpYWxpemVkID0gMTsKLQotCWlmIChPRl9n
ZXRlbmNwcm9wKG5vZGUsICJidXMtcmFuZ2UiLCBidXNyYW5nZSwgc2l6ZW9mKGJ1c3JhbmdlKSkg
IT0gOCkKLQkJYnVzcmFuZ2VbMF0gPSAwOwotCi0Jc2MtPnNjX2RldiA9IGRldjsKLQlzYy0+c2Nf
bm9kZSA9IG5vZGU7Ci0Jc2MtPnNjX2J1cyA9IGJ1c3JhbmdlWzBdOwotCi0JaWYgKHNjLT5zY19x
dWlya3MgJiBPRldfUENJX1FVSVJLX1JBTkdFU19PTl9DSElMRFJFTikgewotCQlwaGFuZGxlX3Qg
YzsKLQkJaW50IG4sIGk7Ci0JCQotCQlzYy0+c2NfbnJhbmdlID0gMDsKLQkJZm9yIChjID0gT0Zf
Y2hpbGQobm9kZSk7IGMgIT0gMDsgYyA9IE9GX3BlZXIoYykpIHsKLQkJCW4gPSBvZndfcGNpX25y
YW5nZXMoYyk7Ci0JCQlpZiAobiA+IDApCi0JCQkJc2MtPnNjX25yYW5nZSArPSBuOwotCQl9Ci0J
CWlmIChzYy0+c2NfbnJhbmdlID09IDApCi0JCQlyZXR1cm4gKEVOWElPKTsKLQkJc2MtPnNjX3Jh
bmdlID0gbWFsbG9jKHNjLT5zY19ucmFuZ2UgKiBzaXplb2Yoc2MtPnNjX3JhbmdlWzBdKSwKLQkJ
ICAgIE1fREVWQlVGLCBNX1dBSVRPSyk7Ci0JCWkgPSAwOwotCQlmb3IgKGMgPSBPRl9jaGlsZChu
b2RlKTsgYyAhPSAwOyBjID0gT0ZfcGVlcihjKSkgewotCQkJbiA9IG9md19wY2lfZmlsbF9yYW5n
ZXMoYywgJnNjLT5zY19yYW5nZVtpXSk7Ci0JCQlpZiAobiA+IDApCi0JCQkJaSArPSBuOwotCQl9
Ci0JCUtBU1NFUlQoaSA9PSBzYy0+c2NfbnJhbmdlLCAoInJhbmdlIGNvdW50IG1pc21hdGNoIikp
OwotCX0gZWxzZSB7Ci0JCXNjLT5zY19ucmFuZ2UgPSBvZndfcGNpX25yYW5nZXMobm9kZSk7Ci0J
CWlmIChzYy0+c2NfbnJhbmdlIDw9IDApIHsKLQkJCWRldmljZV9wcmludGYoZGV2LCAiY291bGQg
bm90IGdldCByYW5nZXNcbiIpOwotCQkJcmV0dXJuIChFTlhJTyk7Ci0JCX0KLQkJc2MtPnNjX3Jh
bmdlID0gbWFsbG9jKHNjLT5zY19ucmFuZ2UgKiBzaXplb2Yoc2MtPnNjX3JhbmdlWzBdKSwKLQkJ
ICAgIE1fREVWQlVGLCBNX1dBSVRPSyk7Ci0JCW9md19wY2lfZmlsbF9yYW5nZXMobm9kZSwgc2Mt
PnNjX3JhbmdlKTsKLQl9Ci0JCQotCXNjLT5zY19pb19ybWFuLnJtX3R5cGUgPSBSTUFOX0FSUkFZ
OwotCXNjLT5zY19pb19ybWFuLnJtX2Rlc2NyID0gIlBDSSBJL08gUG9ydHMiOwotCWVycm9yID0g
cm1hbl9pbml0KCZzYy0+c2NfaW9fcm1hbik7Ci0JaWYgKGVycm9yKSB7Ci0JCWRldmljZV9wcmlu
dGYoZGV2LCAicm1hbl9pbml0KCkgZmFpbGVkLiBlcnJvciA9ICVkXG4iLCBlcnJvcik7Ci0JCXJl
dHVybiAoZXJyb3IpOwotCX0KLQotCXNjLT5zY19tZW1fcm1hbi5ybV90eXBlID0gUk1BTl9BUlJB
WTsKLQlzYy0+c2NfbWVtX3JtYW4ucm1fZGVzY3IgPSAiUENJIE1lbW9yeSI7Ci0JZXJyb3IgPSBy
bWFuX2luaXQoJnNjLT5zY19tZW1fcm1hbik7Ci0JaWYgKGVycm9yKSB7Ci0JCWRldmljZV9wcmlu
dGYoZGV2LCAicm1hbl9pbml0KCkgZmFpbGVkLiBlcnJvciA9ICVkXG4iLCBlcnJvcik7Ci0JCXJl
dHVybiAoZXJyb3IpOwotCX0KLQotCWZvciAocnAgPSBzYy0+c2NfcmFuZ2U7IHJwIDwgc2MtPnNj
X3JhbmdlICsgc2MtPnNjX25yYW5nZSAmJgotCSAgICAgICBycC0+cGNpX2hpICE9IDA7IHJwKysp
IHsKLQkJZXJyb3IgPSAwOwotCi0JCXN3aXRjaCAocnAtPnBjaV9oaSAmIE9GV19QQ0lfUEhZU19I
SV9TUEFDRU1BU0spIHsKLQkJY2FzZSBPRldfUENJX1BIWVNfSElfU1BBQ0VfQ09ORklHOgotCQkJ
YnJlYWs7Ci0JCWNhc2UgT0ZXX1BDSV9QSFlTX0hJX1NQQUNFX0lPOgotCQkJZXJyb3IgPSBybWFu
X21hbmFnZV9yZWdpb24oJnNjLT5zY19pb19ybWFuLCBycC0+cGNpLAotCQkJICAgIHJwLT5wY2kg
KyBycC0+c2l6ZSAtIDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT0ZXX1BDSV9QSFlTX0hJX1NQQUNF
X01FTTMyOgotCQljYXNlIE9GV19QQ0lfUEhZU19ISV9TUEFDRV9NRU02NDoKLQkJCWVycm9yID0g
cm1hbl9tYW5hZ2VfcmVnaW9uKCZzYy0+c2NfbWVtX3JtYW4sIHJwLT5wY2ksCi0JCQkgICAgcnAt
PnBjaSArIHJwLT5zaXplIC0gMSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChlcnJvcikgewot
CQkJZGV2aWNlX3ByaW50ZihkZXYsIAotCQkJICAgICJybWFuX21hbmFnZV9yZWdpb24oJXgsICUj
angsICUjangpIGZhaWxlZC4gIgotCQkJICAgICJlcnJvciA9ICVkXG4iLCBycC0+cGNpX2hpICYK
LQkJCSAgICBPRldfUENJX1BIWVNfSElfU1BBQ0VNQVNLLCBycC0+cGNpLAotCQkJICAgIHJwLT5w
Y2kgKyBycC0+c2l6ZSAtIDEsIGVycm9yKTsKLQkJCXJldHVybiAoZXJyb3IpOwotCQl9Ci0JfQot
Ci0Jb2Z3X2J1c19zZXR1cF9paW5mbyhub2RlLCAmc2MtPnNjX3BjaV9paW5mbywgc2l6ZW9mKGNl
bGxfdCkpOwotCi0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLWludAotb2Z3X3BjaV9hdHRhY2goZGV2
aWNlX3QgZGV2KQotewotCXN0cnVjdCBvZndfcGNpX3NvZnRjICpzYzsKLQlpbnQgZXJyb3I7Ci0K
LQlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKLQlpZiAoIXNjLT5zY19pbml0aWFsaXplZCkg
ewotCQllcnJvciA9IG9md19wY2lfaW5pdChkZXYpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4g
KGVycm9yKTsKLQl9Ci0KLQlkZXZpY2VfYWRkX2NoaWxkKGRldiwgInBjaSIsIC0xKTsKLQlyZXR1
cm4gKGJ1c19nZW5lcmljX2F0dGFjaChkZXYpKTsKLX0KLQotc3RhdGljIGludAotb2Z3X3BjaV9t
YXhzbG90cyhkZXZpY2VfdCBkZXYpCi17Ci0KLQlyZXR1cm4gKFBDSV9TTE9UTUFYKTsKLX0KLQot
c3RhdGljIGludAotb2Z3X3BjaV9yb3V0ZV9pbnRlcnJ1cHQoZGV2aWNlX3QgYnVzLCBkZXZpY2Vf
dCBkZXYsIGludCBwaW4pCi17Ci0Jc3RydWN0IG9md19wY2lfc29mdGMgKnNjOwotCXN0cnVjdCBv
ZndfcGNpX3JlZ2lzdGVyIHJlZzsKLQl1aW50MzJfdCBwaW50ciwgbWludHJbMl07Ci0JaW50IGlu
dHJjZWxsczsKLQlwaGFuZGxlX3QgaXBhcmVudDsKLQotCXNjID0gZGV2aWNlX2dldF9zb2Z0Yyhi
dXMpOwotCXBpbnRyID0gcGluOwotCi0JLyogRmFicmljYXRlIGltYXAgaW5mb3JtYXRpb24gaW4g
Y2FzZSB0aGlzIGlzbid0IGFuIE9GVyBkZXZpY2UgKi8KLQliemVybygmcmVnLCBzaXplb2YocmVn
KSk7Ci0JcmVnLnBoeXNfaGkgPSAocGNpX2dldF9idXMoZGV2KSA8PCBPRldfUENJX1BIWVNfSElf
QlVTU0hJRlQpIHwKLQkgICAgKHBjaV9nZXRfc2xvdChkZXYpIDw8IE9GV19QQ0lfUEhZU19ISV9E
RVZJQ0VTSElGVCkgfAotCSAgICAocGNpX2dldF9mdW5jdGlvbihkZXYpIDw8IE9GV19QQ0lfUEhZ
U19ISV9GVU5DVElPTlNISUZUKTsKLQotCWludHJjZWxscyA9IG9md19idXNfbG9va3VwX2ltYXAo
b2Z3X2J1c19nZXRfbm9kZShkZXYpLAotCSAgICAmc2MtPnNjX3BjaV9paW5mbywgJnJlZywgc2l6
ZW9mKHJlZyksICZwaW50ciwgc2l6ZW9mKHBpbnRyKSwKLQkgICAgbWludHIsIHNpemVvZihtaW50
ciksICZpcGFyZW50KTsKLQlpZiAoaW50cmNlbGxzKSB7Ci0JCXBpbnRyID0gb2Z3X2J1c19tYXBf
aW50cihkZXYsIGlwYXJlbnQsIGludHJjZWxscywgbWludHIpOwotCQlyZXR1cm4gKHBpbnRyKTsK
LQl9Ci0KLQkvKiBNYXliZSBpdCdzIGEgcmVhbCBpbnRlcnJ1cHQsIG5vdCBhbiBpbnRwaW4gKi8K
LQlpZiAocGluID4gNCkKLQkJcmV0dXJuIChwaW4pOwotCi0JZGV2aWNlX3ByaW50ZihidXMsICJj
b3VsZCBub3Qgcm91dGUgcGluICVkIGZvciBkZXZpY2UgJWQuJWRcbiIsCi0JICAgIHBpbiwgcGNp
X2dldF9zbG90KGRldiksIHBjaV9nZXRfZnVuY3Rpb24oZGV2KSk7Ci0JcmV0dXJuIChQQ0lfSU5W
QUxJRF9JUlEpOwotfQotCi1zdGF0aWMgaW50Ci1vZndfcGNpX3JlYWRfaXZhcihkZXZpY2VfdCBk
ZXYsIGRldmljZV90IGNoaWxkLCBpbnQgd2hpY2gsIHVpbnRwdHJfdCAqcmVzdWx0KQotewotCXN0
cnVjdAlvZndfcGNpX3NvZnRjICpzYzsKLQotCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwot
Ci0Jc3dpdGNoICh3aGljaCkgewotCWNhc2UgUENJQl9JVkFSX0RPTUFJTjoKLQkJKnJlc3VsdCA9
IGRldmljZV9nZXRfdW5pdChkZXYpOwotCQlyZXR1cm4gKDApOwotCWNhc2UgUENJQl9JVkFSX0JV
UzoKLQkJKnJlc3VsdCA9IHNjLT5zY19idXM7Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0JcmV0dXJu
IChFTk9FTlQpOwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlICoKLW9md19wY2lfYWxsb2Nf
cmVzb3VyY2UoZGV2aWNlX3QgYnVzLCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCAqcmlk
LAotICAgIHJtYW5fcmVzX3Qgc3RhcnQsIHJtYW5fcmVzX3QgZW5kLCBybWFuX3Jlc190IGNvdW50
LCB1X2ludCBmbGFncykKLXsKLQlzdHJ1Y3QJCQlvZndfcGNpX3NvZnRjICpzYzsKLQlzdHJ1Y3QJ
CQlyZXNvdXJjZSAqcnY7Ci0Jc3RydWN0CQkJcm1hbiAqcm07Ci0JaW50CQkJbmVlZGFjdGl2YXRl
OwotCi0JbmVlZGFjdGl2YXRlID0gZmxhZ3MgJiBSRl9BQ1RJVkU7Ci0JZmxhZ3MgJj0gflJGX0FD
VElWRTsKLQotCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhidXMpOwotCi0Jc3dpdGNoICh0eXBlKSB7
Ci0JY2FzZSBTWVNfUkVTX01FTU9SWToKLQkJcm0gPSAmc2MtPnNjX21lbV9ybWFuOwotCQlicmVh
azsKLQotCWNhc2UgU1lTX1JFU19JT1BPUlQ6Ci0JCXJtID0gJnNjLT5zY19pb19ybWFuOwotCQli
cmVhazsKLQotCWNhc2UgU1lTX1JFU19JUlE6Ci0JCXJldHVybiAoYnVzX2FsbG9jX3Jlc291cmNl
KGJ1cywgdHlwZSwgcmlkLCBzdGFydCwgZW5kLCBjb3VudCwKLQkJICAgIGZsYWdzKSk7Ci0KLQlk
ZWZhdWx0OgotCQlkZXZpY2VfcHJpbnRmKGJ1cywgInVua25vd24gcmVzb3VyY2UgcmVxdWVzdCBm
cm9tICVzXG4iLAotCQkgICAgZGV2aWNlX2dldF9uYW1ldW5pdChjaGlsZCkpOwotCQlyZXR1cm4g
KE5VTEwpOwotCX0KLQotCXJ2ID0gcm1hbl9yZXNlcnZlX3Jlc291cmNlKHJtLCBzdGFydCwgZW5k
LCBjb3VudCwgZmxhZ3MsIGNoaWxkKTsKLQlpZiAocnYgPT0gTlVMTCkgewotCQlkZXZpY2VfcHJp
bnRmKGJ1cywgImZhaWxlZCB0byByZXNlcnZlIHJlc291cmNlIGZvciAlc1xuIiwKLQkJICAgIGRl
dmljZV9nZXRfbmFtZXVuaXQoY2hpbGQpKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQlybWFu
X3NldF9yaWQocnYsICpyaWQpOwotCi0JaWYgKG5lZWRhY3RpdmF0ZSkgewotCQlpZiAoYnVzX2Fj
dGl2YXRlX3Jlc291cmNlKGNoaWxkLCB0eXBlLCAqcmlkLCBydikgIT0gMCkgewotCQkJZGV2aWNl
X3ByaW50ZihidXMsCi0JCQkgICAgImZhaWxlZCB0byBhY3RpdmF0ZSByZXNvdXJjZSBmb3IgJXNc
biIsCi0JCQkgICAgZGV2aWNlX2dldF9uYW1ldW5pdChjaGlsZCkpOwotCQkJcm1hbl9yZWxlYXNl
X3Jlc291cmNlKHJ2KTsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gKHJ2
KTsKLX0KLQotc3RhdGljIGludAotb2Z3X3BjaV9yZWxlYXNlX3Jlc291cmNlKGRldmljZV90IGJ1
cywgZGV2aWNlX3QgY2hpbGQsIGludCB0eXBlLCBpbnQgcmlkLAotICAgIHN0cnVjdCByZXNvdXJj
ZSAqcmVzKQotewotCWlmIChybWFuX2dldF9mbGFncyhyZXMpICYgUkZfQUNUSVZFKSB7Ci0JCWlu
dCBlcnJvciA9IGJ1c19kZWFjdGl2YXRlX3Jlc291cmNlKGNoaWxkLCB0eXBlLCByaWQsIHJlcyk7
Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQl9Ci0KLQlyZXR1cm4gKHJtYW5fcmVs
ZWFzZV9yZXNvdXJjZShyZXMpKTsKLX0KLQotc3RhdGljIGludAotb2Z3X3BjaV9hY3RpdmF0ZV9y
ZXNvdXJjZShkZXZpY2VfdCBidXMsIGRldmljZV90IGNoaWxkLCBpbnQgdHlwZSwgaW50IHJpZCwK
LSAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKLXsKLQlzdHJ1Y3Qgb2Z3X3BjaV9zb2Z0YyAqc2M7
Ci0Jdm9pZAkqcDsKLQotCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhidXMpOwotCi0JaWYgKHR5cGUg
PT0gU1lTX1JFU19JUlEpIHsKLQkJcmV0dXJuIChidXNfYWN0aXZhdGVfcmVzb3VyY2UoYnVzLCB0
eXBlLCByaWQsIHJlcykpOwotCX0KLQlpZiAodHlwZSA9PSBTWVNfUkVTX01FTU9SWSB8fCB0eXBl
ID09IFNZU19SRVNfSU9QT1JUKSB7Ci0JCXN0cnVjdCBvZndfcGNpX3JhbmdlICpycDsKLQkJdm1f
b2Zmc2V0X3Qgc3RhcnQ7Ci0JCWludCBzcGFjZTsKLQotCQlzdGFydCA9ICh2bV9vZmZzZXRfdCly
bWFuX2dldF9zdGFydChyZXMpOwotCi0JCS8qCi0JCSAqIE1hcCB0aGlzIHRocm91Z2ggdGhlIHJh
bmdlcyBsaXN0Ci0JCSAqLwotCQlmb3IgKHJwID0gc2MtPnNjX3JhbmdlOyBycCA8IHNjLT5zY19y
YW5nZSArIHNjLT5zY19ucmFuZ2UgJiYKLQkJICAgICAgIHJwLT5wY2lfaGkgIT0gMDsgcnArKykg
ewotCQkJaWYgKHN0YXJ0IDwgcnAtPnBjaSB8fCBzdGFydCA+PSBycC0+cGNpICsgcnAtPnNpemUp
Ci0JCQkJY29udGludWU7Ci0KLQkJCXN3aXRjaCAocnAtPnBjaV9oaSAmIE9GV19QQ0lfUEhZU19I
SV9TUEFDRU1BU0spIHsKLQkJCWNhc2UgT0ZXX1BDSV9QSFlTX0hJX1NQQUNFX0lPOgotCQkJCXNw
YWNlID0gU1lTX1JFU19JT1BPUlQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE9GV19QQ0lfUEhZU19I
SV9TUEFDRV9NRU0zMjoKLQkJCWNhc2UgT0ZXX1BDSV9QSFlTX0hJX1NQQUNFX01FTTY0OgotCQkJ
CXNwYWNlID0gU1lTX1JFU19NRU1PUlk7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXNw
YWNlID0gLTE7Ci0JCQl9Ci0KLQkJCWlmICh0eXBlID09IHNwYWNlKSB7Ci0JCQkJc3RhcnQgKz0g
KHJwLT5ob3N0IC0gcnAtPnBjaSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoYm9v
dHZlcmJvc2UpCi0JCQlwcmludGYoIm9md19wY2kgbWFwZGV2OiBzdGFydCAlengsIGxlbiAlbGRc
biIsIHN0YXJ0LAotCQkJICAgIHJtYW5fZ2V0X3NpemUocmVzKSk7Ci0KLQkJcCA9IHBtYXBfbWFw
ZGV2KHN0YXJ0LCAodm1fc2l6ZV90KXJtYW5fZ2V0X3NpemUocmVzKSk7Ci0JCWlmIChwID09IE5V
TEwpCi0JCQlyZXR1cm4gKEVOT01FTSk7Ci0KLQkJcm1hbl9zZXRfdmlydHVhbChyZXMsIHApOwot
CQlybWFuX3NldF9idXN0YWcocmVzLCAmYnNfbGVfdGFnKTsKLQkJcm1hbl9zZXRfYnVzaGFuZGxl
KHJlcywgKHVfbG9uZylwKTsKLQl9Ci0KLQlyZXR1cm4gKHJtYW5fYWN0aXZhdGVfcmVzb3VyY2Uo
cmVzKSk7Ci19Ci0KLXN0YXRpYyBpbnQKLW9md19wY2lfZGVhY3RpdmF0ZV9yZXNvdXJjZShkZXZp
Y2VfdCBidXMsIGRldmljZV90IGNoaWxkLCBpbnQgdHlwZSwgaW50IHJpZCwKLSAgICBzdHJ1Y3Qg
cmVzb3VyY2UgKnJlcykKLXsKLQkvKgotCSAqIElmIHRoaXMgaXMgYSBtZW1vcnkgcmVzb3VyY2Us
IHVubWFwIGl0LgotCSAqLwotCWlmICgodHlwZSA9PSBTWVNfUkVTX01FTU9SWSkgfHwgKHR5cGUg
PT0gU1lTX1JFU19JT1BPUlQpKSB7Ci0JCXVfaW50MzJfdCBwc2l6ZTsKLQotCQlwc2l6ZSA9IHJt
YW5fZ2V0X3NpemUocmVzKTsKLQkJcG1hcF91bm1hcGRldigodm1fb2Zmc2V0X3Qpcm1hbl9nZXRf
dmlydHVhbChyZXMpLCBwc2l6ZSk7Ci0JfQotCi0JcmV0dXJuIChybWFuX2RlYWN0aXZhdGVfcmVz
b3VyY2UocmVzKSk7Ci19Ci0KLXN0YXRpYyBpbnQKLW9md19wY2lfYWRqdXN0X3Jlc291cmNlKGRl
dmljZV90IGJ1cywgZGV2aWNlX3QgY2hpbGQsIGludCB0eXBlLAotICAgIHN0cnVjdCByZXNvdXJj
ZSAqcmVzLCBybWFuX3Jlc190IHN0YXJ0LCBybWFuX3Jlc190IGVuZCkKLXsKLQlzdHJ1Y3Qgcm1h
biAqcm0gPSBOVUxMOwotCXN0cnVjdCBvZndfcGNpX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29m
dGMoYnVzKTsKLQotCUtBU1NFUlQoIShybWFuX2dldF9mbGFncyhyZXMpICYgUkZfQUNUSVZFKSwK
LQkgICAgKCJhY3RpdmUgcmVzb3VyY2VzIGNhbm5vdCBiZSBhZGp1c3RlZCIpKTsKLQlpZiAocm1h
bl9nZXRfZmxhZ3MocmVzKSAmIFJGX0FDVElWRSkKLQkJcmV0dXJuIChFSU5WQUwpOwotCi0Jc3dp
dGNoICh0eXBlKSB7Ci0JY2FzZSBTWVNfUkVTX01FTU9SWToKLQkJcm0gPSAmc2MtPnNjX21lbV9y
bWFuOwotCQlicmVhazsKLQljYXNlIFNZU19SRVNfSU9QT1JUOgotCQlybSA9ICZzYy0+c2NfaW9f
cm1hbjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIChFTlhJTyk7Ci0JfQotCi0JaWYg
KCFybWFuX2lzX3JlZ2lvbl9tYW5hZ2VyKHJlcywgcm0pKQotCQlyZXR1cm4gKEVJTlZBTCk7Ci0K
LQlyZXR1cm4gKHJtYW5fYWRqdXN0X3Jlc291cmNlKHJlcywgc3RhcnQsIGVuZCkpOwotfQotCQot
Ci1zdGF0aWMgcGhhbmRsZV90Ci1vZndfcGNpX2dldF9ub2RlKGRldmljZV90IGJ1cywgZGV2aWNl
X3QgZGV2KQotewotCXN0cnVjdCBvZndfcGNpX3NvZnRjICpzYzsKLQotCXNjID0gZGV2aWNlX2dl
dF9zb2Z0YyhidXMpOwotCS8qIFdlIG9ubHkgaGF2ZSBvbmUgY2hpbGQsIHRoZSBQQ0kgYnVzLCB3
aGljaCBuZWVkcyBvdXIgb3duIG5vZGUuICovCi0KLQlyZXR1cm4gKHNjLT5zY19ub2RlKTsKLX0K
LQotc3RhdGljIGludAotb2Z3X3BjaV9ucmFuZ2VzKHBoYW5kbGVfdCBub2RlKQotewotCWludCBo
b3N0X2FkZHJlc3NfY2VsbHMgPSAxLCBwY2lfYWRkcmVzc19jZWxscyA9IDMsIHNpemVfY2VsbHMg
PSAyOwotCXNzaXplX3QgbmJhc2VfcmFuZ2VzOwotCi0JT0ZfZ2V0ZW5jcHJvcChPRl9wYXJlbnQo
bm9kZSksICIjYWRkcmVzcy1jZWxscyIsICZob3N0X2FkZHJlc3NfY2VsbHMsCi0JICAgIHNpemVv
Zihob3N0X2FkZHJlc3NfY2VsbHMpKTsKLQlPRl9nZXRlbmNwcm9wKG5vZGUsICIjYWRkcmVzcy1j
ZWxscyIsICZwY2lfYWRkcmVzc19jZWxscywKLQkgICAgc2l6ZW9mKHBjaV9hZGRyZXNzX2NlbGxz
KSk7Ci0JT0ZfZ2V0ZW5jcHJvcChub2RlLCAiI3NpemUtY2VsbHMiLCAmc2l6ZV9jZWxscywgc2l6
ZW9mKHNpemVfY2VsbHMpKTsKLQotCW5iYXNlX3JhbmdlcyA9IE9GX2dldHByb3BsZW4obm9kZSwg
InJhbmdlcyIpOwotCWlmIChuYmFzZV9yYW5nZXMgPD0gMCkKLQkJcmV0dXJuICgtMSk7Ci0KLQly
ZXR1cm4gKG5iYXNlX3JhbmdlcyAvIHNpemVvZihjZWxsX3QpIC8KLQkgICAgKHBjaV9hZGRyZXNz
X2NlbGxzICsgaG9zdF9hZGRyZXNzX2NlbGxzICsgc2l6ZV9jZWxscykpOwotfQotCi1zdGF0aWMg
aW50Ci1vZndfcGNpX2ZpbGxfcmFuZ2VzKHBoYW5kbGVfdCBub2RlLCBzdHJ1Y3Qgb2Z3X3BjaV9y
YW5nZSAqcmFuZ2VzKQotewotCWludCBob3N0X2FkZHJlc3NfY2VsbHMgPSAxLCBwY2lfYWRkcmVz
c19jZWxscyA9IDMsIHNpemVfY2VsbHMgPSAyOwotCWNlbGxfdCAqYmFzZV9yYW5nZXM7Ci0Jc3Np
emVfdCBuYmFzZV9yYW5nZXM7Ci0JaW50IG5yYW5nZXM7Ci0JaW50IGksIGosIGs7Ci0KLQlPRl9n
ZXRlbmNwcm9wKE9GX3BhcmVudChub2RlKSwgIiNhZGRyZXNzLWNlbGxzIiwgJmhvc3RfYWRkcmVz
c19jZWxscywKLQkgICAgc2l6ZW9mKGhvc3RfYWRkcmVzc19jZWxscykpOwotCU9GX2dldGVuY3By
b3Aobm9kZSwgIiNhZGRyZXNzLWNlbGxzIiwgJnBjaV9hZGRyZXNzX2NlbGxzLAotCSAgICBzaXpl
b2YocGNpX2FkZHJlc3NfY2VsbHMpKTsKLQlPRl9nZXRlbmNwcm9wKG5vZGUsICIjc2l6ZS1jZWxs
cyIsICZzaXplX2NlbGxzLCBzaXplb2Yoc2l6ZV9jZWxscykpOwotCi0JbmJhc2VfcmFuZ2VzID0g
T0ZfZ2V0cHJvcGxlbihub2RlLCAicmFuZ2VzIik7Ci0JaWYgKG5iYXNlX3JhbmdlcyA8PSAwKQot
CQlyZXR1cm4gKC0xKTsKLQlucmFuZ2VzID0gbmJhc2VfcmFuZ2VzIC8gc2l6ZW9mKGNlbGxfdCkg
LwotCSAgICAocGNpX2FkZHJlc3NfY2VsbHMgKyBob3N0X2FkZHJlc3NfY2VsbHMgKyBzaXplX2Nl
bGxzKTsKLQotCWJhc2VfcmFuZ2VzID0gbWFsbG9jKG5iYXNlX3JhbmdlcywgTV9ERVZCVUYsIE1f
V0FJVE9LKTsKLQlPRl9nZXRlbmNwcm9wKG5vZGUsICJyYW5nZXMiLCBiYXNlX3JhbmdlcywgbmJh
c2VfcmFuZ2VzKTsKLQotCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbnJhbmdlczsgaSsrKSB7Ci0J
CXJhbmdlc1tpXS5wY2lfaGkgPSBiYXNlX3Jhbmdlc1tqKytdOwotCQlyYW5nZXNbaV0ucGNpID0g
MDsKLQkJZm9yIChrID0gMDsgayA8IHBjaV9hZGRyZXNzX2NlbGxzIC0gMTsgaysrKSB7Ci0JCQly
YW5nZXNbaV0ucGNpIDw8PSAzMjsKLQkJCXJhbmdlc1tpXS5wY2kgfD0gYmFzZV9yYW5nZXNbaisr
XTsKLQkJfQotCQlyYW5nZXNbaV0uaG9zdCA9IDA7Ci0JCWZvciAoayA9IDA7IGsgPCBob3N0X2Fk
ZHJlc3NfY2VsbHM7IGsrKykgewotCQkJcmFuZ2VzW2ldLmhvc3QgPDw9IDMyOwotCQkJcmFuZ2Vz
W2ldLmhvc3QgfD0gYmFzZV9yYW5nZXNbaisrXTsKLQkJfQotCQlyYW5nZXNbaV0uc2l6ZSA9IDA7
Ci0JCWZvciAoayA9IDA7IGsgPCBzaXplX2NlbGxzOyBrKyspIHsKLQkJCXJhbmdlc1tpXS5zaXpl
IDw8PSAzMjsKLQkJCXJhbmdlc1tpXS5zaXplIHw9IGJhc2VfcmFuZ2VzW2orK107Ci0JCX0KLQl9
Ci0KLQlmcmVlKGJhc2VfcmFuZ2VzLCBNX0RFVkJVRik7Ci0JcmV0dXJuIChucmFuZ2VzKTsKLX0K
LQpkaWZmIC0tZ2l0IGEvc3lzL3Bvd2VycGMvb2Z3L29md19wY2kuaCBiL3N5cy9wb3dlcnBjL29m
dy9vZndfcGNpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiODgzZDQuLjAwMDAw
MDAKLS0tIGEvc3lzL3Bvd2VycGMvb2Z3L29md19wY2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDc0
ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDExIE5hdGhhbiBXaGl0ZWhvcm4KLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0g
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0QkCi0gKi8KLQotI2lmbmRlZiBQT1dF
UlBDX09GV19PRldfUENJX0gKLSNkZWZpbmUgUE9XRVJQQ19PRldfT0ZXX1BDSV9ICi0KLS8qCi0g
KiBFeHBvcnQgY2xhc3MgZGVmaW5pdGlvbiBmb3IgaW5oZXJpdGFuY2UgcHVycG9zZXMKLSAqLwot
REVDTEFSRV9DTEFTUyhvZndfcGNpX2RyaXZlcik7Ci0KLXN0cnVjdCBvZndfcGNpX3JhbmdlIHsK
LQl1aW50MzJfdAlwY2lfaGk7Ci0JdWludDY0X3QJcGNpOwotCXVpbnQ2NF90CWhvc3Q7Ci0JdWlu
dDY0X3QJc2l6ZTsKLX07Ci0KLS8qCi0gKiBRdWlya3MgZm9yIHNvbWUgYWRhcHRlcnMKLSAqLwot
ZW51bSB7Ci0JT0ZXX1BDSV9RVUlSS19SQU5HRVNfT05fQ0hJTERSRU4gPSAxLAotfTsKLQotc3Ry
dWN0IG9md19wY2lfc29mdGMgewotCWRldmljZV90CQlzY19kZXY7Ci0JcGhhbmRsZV90CQlzY19u
b2RlOwotCWludAkJCXNjX2J1czsKLQlpbnQJCQlzY19pbml0aWFsaXplZDsKLQotCWludAkJCXNj
X3F1aXJrczsKLQotCXN0cnVjdCBvZndfcGNpX3JhbmdlCSpzY19yYW5nZTsKLQlpbnQJCQlzY19u
cmFuZ2U7Ci0KLQlzdHJ1Y3Qgcm1hbgkJc2NfaW9fcm1hbjsKLQlzdHJ1Y3Qgcm1hbgkJc2NfbWVt
X3JtYW47Ci0JYnVzX3NwYWNlX3RhZ190CQlzY19tZW10OwotCWJ1c19kbWFfdGFnX3QJCXNjX2Rt
YXQ7Ci0KLQlzdHJ1Y3Qgb2Z3X2J1c19paW5mbyAgICBzY19wY2lfaWluZm87Ci19OwotCi1pbnQg
b2Z3X3BjaV9pbml0KGRldmljZV90IGRldik7Ci1pbnQgb2Z3X3BjaV9hdHRhY2goZGV2aWNlX3Qg
ZGV2KTsKLQotI2VuZGlmIC8vIFBPV0VSUENfT0ZXX09GV19QQ0lfSAotCmRpZmYgLS1naXQgYS9z
eXMvcG93ZXJwYy9vZncvb2Z3X3BjaWJfcGNpLmMgYi9zeXMvcG93ZXJwYy9vZncvb2Z3X3BjaWJf
cGNpLmMKaW5kZXggODIzZjdjOS4uMWMxMDVmYiAxMDA2NDQKLS0tIGEvc3lzL3Bvd2VycGMvb2Z3
L29md19wY2liX3BjaS5jCisrKyBiL3N5cy9wb3dlcnBjL29mdy9vZndfcGNpYl9wY2kuYwpAQCAt
MzYsOSArMzYsOSBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAjaW5jbHVkZSA8c3lzL2tlcm5l
bC5oPgogCiAjaW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgotI2luY2x1ZGUgPGRldi9vZncv
b2Z3X3BjaS5oPgogI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1cy5oPgogI2luY2x1ZGUgPGRldi9v
Zncvb2Z3X2J1c19zdWJyLmg+CisjaW5jbHVkZSA8ZGV2L29mdy9vZndfcGNpLmg+CiAKICNpbmNs
dWRlIDxkZXYvcGNpL3BjaXZhci5oPgogI2luY2x1ZGUgPGRldi9wY2kvcGNpcmVnLmg+CmRpZmYg
LS1naXQgYS9zeXMvcG93ZXJwYy9vZncvb2Z3X3BjaWJ1cy5jIGIvc3lzL3Bvd2VycGMvb2Z3L29m
d19wY2lidXMuYwppbmRleCBjZGUzYzc0Li4xMmFhMjI0IDEwMDY0NAotLS0gYS9zeXMvcG93ZXJw
Yy9vZncvb2Z3X3BjaWJ1cy5jCisrKyBiL3N5cy9wb3dlcnBjL29mdy9vZndfcGNpYnVzLmMKQEAg
LTU0LDggKzU0LDYgQEAgX19GQlNESUQoIiRGcmVlQlNEJCIpOwogI2luY2x1ZGUgInBjaWJfaWYu
aCIKICNpbmNsdWRlICJwY2lfaWYuaCIKIAotdHlwZWRlZiB1aW50MzJfdCBvZndfcGNpX2ludHJf
dDsKLQogLyogTWV0aG9kcyAqLwogc3RhdGljIGRldmljZV9wcm9iZV90IG9md19wY2lidXNfcHJv
YmU7CiBzdGF0aWMgZGV2aWNlX2F0dGFjaF90IG9md19wY2lidXNfYXR0YWNoOwpkaWZmIC0tZ2l0
IGEvc3lzL3Bvd2VycGMvb2Z3L29md19wY2lidXMuaCBiL3N5cy9wb3dlcnBjL29mdy9vZndfcGNp
YnVzLmgKaW5kZXggYzdiODJkNy4uZmFkNGQ2NiAxMDA2NDQKLS0tIGEvc3lzL3Bvd2VycGMvb2Z3
L29md19wY2lidXMuaAorKysgYi9zeXMvcG93ZXJwYy9vZncvb2Z3X3BjaWJ1cy5oCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSA8c3lzL3BjaWlvLmg+CiAKICNpbmNsdWRlIDxkZXYvb2Z3L29m
d19idXMuaD4KKyNpbmNsdWRlIDxkZXYvb2Z3L29md19idXNfc3Vici5oPgogI2luY2x1ZGUgPGRl
di9vZncvb2Z3X3BjaS5oPgogI2luY2x1ZGUgPGRldi9wY2kvcGNpdmFyLmg+CiAKZGlmZiAtLWdp
dCBhL3N5cy9wb3dlcnBjL29mdy9vZndfc3lzY29ucy5jIGIvc3lzL3Bvd2VycGMvb2Z3L29md19z
eXNjb25zLmMKaW5kZXggYjc2NjQ4NS4uYjQyZjE0MiAxMDA2NDQKLS0tIGEvc3lzL3Bvd2VycGMv
b2Z3L29md19zeXNjb25zLmMKKysrIGIvc3lzL3Bvd2VycGMvb2Z3L29md19zeXNjb25zLmMKQEAg
LTUzLDYgKzUzLDcgQEAgX19GQlNESUQoIiRGcmVlQlNEJCIpOwogCiAjaW5jbHVkZSA8ZGV2L29m
dy9vcGVuZmlybS5oPgogI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1cy5oPgorI2luY2x1ZGUgPGRl
di9vZncvb2Z3X2J1c19zdWJyLmg+CiAjaW5jbHVkZSA8ZGV2L29mdy9vZndfcGNpLmg+CiAjaW5j
bHVkZSA8cG93ZXJwYy9vZncvb2Z3X3N5c2NvbnMuaD4KIApkaWZmIC0tZ2l0IGEvc3lzL3Bvd2Vy
cGMvcG93ZXJtYWMvY3BjaHQuYyBiL3N5cy9wb3dlcnBjL3Bvd2VybWFjL2NwY2h0LmMKaW5kZXgg
NzY1ZDk0Ni4uNzM3ZTg3MiAxMDA2NDQKLS0tIGEvc3lzL3Bvd2VycGMvcG93ZXJtYWMvY3BjaHQu
YworKysgYi9zeXMvcG93ZXJwYy9wb3dlcm1hYy9jcGNodC5jCkBAIC0zNiw3ICszNiw2IEBAIF9f
RkJTRElEKCIkRnJlZUJTRCQiKTsKICNpbmNsdWRlIDxzeXMvcm1hbi5oPgogCiAjaW5jbHVkZSA8
ZGV2L29mdy9vcGVuZmlybS5oPgotI2luY2x1ZGUgPGRldi9vZncvb2Z3X3BjaS5oPgogCiAjaW5j
bHVkZSA8ZGV2L3BjaS9wY2l2YXIuaD4KICNpbmNsdWRlIDxkZXYvcGNpL3BjaXJlZy5oPgpAQCAt
NTEsNyArNTAsNyBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAKICNpbmNsdWRlIDxkZXYvb2Z3
L29md19idXMuaD4KICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXNfc3Vici5oPgotI2luY2x1ZGUg
PHBvd2VycGMvb2Z3L29md19wY2kuaD4KKyNpbmNsdWRlIDxkZXYvb2Z3L29md19wY2kuaD4KIAog
I2luY2x1ZGUgPHZtL3ZtLmg+CiAjaW5jbHVkZSA8dm0vcG1hcC5oPgpkaWZmIC0tZ2l0IGEvc3lz
L3Bvd2VycGMvcG93ZXJtYWMvZ3JhY2tsZS5jIGIvc3lzL3Bvd2VycGMvcG93ZXJtYWMvZ3JhY2ts
ZS5jCmluZGV4IDk1ZDU5YTEuLmYwOTI4ZjMgMTAwNjQ0Ci0tLSBhL3N5cy9wb3dlcnBjL3Bvd2Vy
bWFjL2dyYWNrbGUuYworKysgYi9zeXMvcG93ZXJwYy9wb3dlcm1hYy9ncmFja2xlLmMKQEAgLTM3
LDkgKzM3LDkgQEAgX19GQlNESUQoIiRGcmVlQlNEJCIpOwogI2luY2x1ZGUgPHN5cy9wcm9jLmg+
CiAKICNpbmNsdWRlIDxkZXYvb2Z3L29wZW5maXJtLmg+Ci0jaW5jbHVkZSA8ZGV2L29mdy9vZndf
cGNpLmg+CiAjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzLmg+CiAjaW5jbHVkZSA8ZGV2L29mdy9v
ZndfYnVzX3N1YnIuaD4KKyNpbmNsdWRlIDxkZXYvb2Z3L29md19wY2kuaD4KIAogI2luY2x1ZGUg
PGRldi9wY2kvcGNpdmFyLmg+CiAjaW5jbHVkZSA8ZGV2L3BjaS9wY2lyZWcuaD4KQEAgLTUyLDcg
KzUyLDYgQEAgX19GQlNESUQoIiRGcmVlQlNEJCIpOwogCiAjaW5jbHVkZSA8c3lzL3JtYW4uaD4K
IAotI2luY2x1ZGUgPHBvd2VycGMvb2Z3L29md19wY2kuaD4KICNpbmNsdWRlIDxwb3dlcnBjL3Bv
d2VybWFjL2dyYWNrbGV2YXIuaD4KIAogI2luY2x1ZGUgPHZtL3ZtLmg+CmRpZmYgLS1naXQgYS9z
eXMvcG93ZXJwYy9wb3dlcm1hYy91bmlub3J0aC5jIGIvc3lzL3Bvd2VycGMvcG93ZXJtYWMvdW5p
bm9ydGguYwppbmRleCBlMzRjOWQ4Li4zNTc5MjRhIDEwMDY0NAotLS0gYS9zeXMvcG93ZXJwYy9w
b3dlcm1hYy91bmlub3J0aC5jCisrKyBiL3N5cy9wb3dlcnBjL3Bvd2VybWFjL3VuaW5vcnRoLmMK
QEAgLTMzLDkgKzMzLDkgQEAKICNpbmNsdWRlIDxzeXMva2VybmVsLmg+CiAKICNpbmNsdWRlIDxk
ZXYvb2Z3L29wZW5maXJtLmg+Ci0jaW5jbHVkZSA8ZGV2L29mdy9vZndfcGNpLmg+CiAjaW5jbHVk
ZSA8ZGV2L29mdy9vZndfYnVzLmg+CiAjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzX3N1YnIuaD4K
KyNpbmNsdWRlIDxkZXYvb2Z3L29md19wY2kuaD4KIAogI2luY2x1ZGUgPGRldi9wY2kvcGNpdmFy
Lmg+CiAjaW5jbHVkZSA8ZGV2L3BjaS9wY2lyZWcuaD4KZGlmZiAtLWdpdCBhL3N5cy9wb3dlcnBj
L3Bvd2VybWFjL3VuaW5vcnRocGNpLmMgYi9zeXMvcG93ZXJwYy9wb3dlcm1hYy91bmlub3J0aHBj
aS5jCmluZGV4IDlkYTA2ZmYuLjVjYjIxYzEgMTAwNjQ0Ci0tLSBhL3N5cy9wb3dlcnBjL3Bvd2Vy
bWFjL3VuaW5vcnRocGNpLmMKKysrIGIvc3lzL3Bvd2VycGMvcG93ZXJtYWMvdW5pbm9ydGhwY2ku
YwpAQCAtMzQsOSArMzQsOSBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAjaW5jbHVkZSA8c3lz
L2tlcm5lbC5oPgogCiAjaW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgotI2luY2x1ZGUgPGRl
di9vZncvb2Z3X3BjaS5oPgogI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1cy5oPgogI2luY2x1ZGUg
PGRldi9vZncvb2Z3X2J1c19zdWJyLmg+CisjaW5jbHVkZSA8ZGV2L29mdy9vZndfcGNpLmg+CiAK
ICNpbmNsdWRlIDxkZXYvcGNpL3BjaXZhci5oPgogI2luY2x1ZGUgPGRldi9wY2kvcGNpcmVnLmg+
CkBAIC00OSw3ICs0OSw2IEBAIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKIAogI2luY2x1ZGUgPHN5
cy9ybWFuLmg+CiAKLSNpbmNsdWRlIDxwb3dlcnBjL29mdy9vZndfcGNpLmg+CiAjaW5jbHVkZSA8
cG93ZXJwYy9wb3dlcm1hYy91bmlub3J0aHZhci5oPgogCiAjaW5jbHVkZSA8dm0vdm0uaD4KZGlm
ZiAtLWdpdCBhL3N5cy9wb3dlcnBjL3Bvd2VybWFjL3VuaW5vcnRodmFyLmggYi9zeXMvcG93ZXJw
Yy9wb3dlcm1hYy91bmlub3J0aHZhci5oCmluZGV4IGUwODQ3OGQuLmVmZTE2OWMgMTAwNjQ0Ci0t
LSBhL3N5cy9wb3dlcnBjL3Bvd2VybWFjL3VuaW5vcnRodmFyLmgKKysrIGIvc3lzL3Bvd2VycGMv
cG93ZXJtYWMvdW5pbm9ydGh2YXIuaApAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSA8ZGV2
L29mdy9vZndfYnVzX3N1YnIuaD4KICNpbmNsdWRlIDxkZXYvb2Z3L29md19wY2kuaD4KLSNpbmNs
dWRlIDxwb3dlcnBjL29mdy9vZndfcGNpLmg+CiAKIHN0cnVjdCB1bmlub3J0aF9zb2Z0YyB7CiAJ
c3RydWN0IG9md19wY2lfc29mdGMJcGNpX3NjOwpkaWZmIC0tZ2l0IGEvc3lzL3Bvd2VycGMvcHNl
cmllcy9ydGFzX3BjaS5jIGIvc3lzL3Bvd2VycGMvcHNlcmllcy9ydGFzX3BjaS5jCmluZGV4IGJi
NzJiNzEuLjEzNDhmYzggMTAwNjQ0Ci0tLSBhL3N5cy9wb3dlcnBjL3BzZXJpZXMvcnRhc19wY2ku
YworKysgYi9zeXMvcG93ZXJwYy9wc2VyaWVzL3J0YXNfcGNpLmMKQEAgLTM0LDkgKzM0LDkgQEAg
X19GQlNESUQoIiRGcmVlQlNEJCIpOwogI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KIAogI2luY2x1
ZGUgPGRldi9vZncvb3BlbmZpcm0uaD4KLSNpbmNsdWRlIDxkZXYvb2Z3L29md19wY2kuaD4KICNp
bmNsdWRlIDxkZXYvb2Z3L29md19idXMuaD4KICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXNfc3Vi
ci5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X3BjaS5oPgogCiAjaW5jbHVkZSA8ZGV2L3BjaS9w
Y2l2YXIuaD4KICNpbmNsdWRlIDxkZXYvcGNpL3BjaXJlZy5oPgpAQCAtNTMsNyArNTMsNiBAQCBf
X0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAjaW5jbHVkZSA8dm0vdm0uaD4KICNpbmNsdWRlIDx2bS9w
bWFwLmg+CiAKLSNpbmNsdWRlIDxwb3dlcnBjL29mdy9vZndfcGNpLmg+CiAjaW5jbHVkZSA8cG93
ZXJwYy9wc2VyaWVzL3BscGFyX2lvbW11Lmg+CiAKICNpbmNsdWRlICJwY2liX2lmLmgiCmRpZmYg
LS1naXQgYS9zeXMvc3BhcmM2NC9lYnVzL2VidXMuYyBiL3N5cy9zcGFyYzY0L2VidXMvZWJ1cy5j
CmluZGV4IGE1M2IyMGIuLjZmNzA1YWQgMTAwNjQ0Ci0tLSBhL3N5cy9zcGFyYzY0L2VidXMvZWJ1
cy5jCisrKyBiL3N5cy9zcGFyYzY0L2VidXMvZWJ1cy5jCkBAIC03NCw2ICs3NCw3IEBAIF9fRkJT
RElEKCIkRnJlZUJTRCQiKTsKICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXMuaD4KICNpbmNsdWRl
IDxkZXYvb2Z3L29md19idXNfc3Vici5oPgogI2luY2x1ZGUgPGRldi9vZncvb3BlbmZpcm0uaD4K
KyNpbmNsdWRlIDxkZXYvb2Z3L29md19wY2kuaD4KIAogI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+
CiAjaWZuZGVmIFNVTjRWCkBAIC04NSw4ICs4Niw2IEBAIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsK
ICNpbmNsdWRlIDxkZXYvcGNpL3BjaXJlZy5oPgogI2luY2x1ZGUgPGRldi9wY2kvcGNpdmFyLmg+
CiAKLSNpbmNsdWRlIDxzcGFyYzY0L3BjaS9vZndfcGNpLmg+Ci0KIC8qCiAgKiBUaGUgcmVnaXN0
ZXIsIGludGVycnVwdCBtYXAgYW5kIGZvciB0aGUgUENJIHZhcmlhbnQgYWxzbyB0aGUgcmFuZ2Vz
CiAgKiBwcm9wZXJ0aWVzIGFyZSBpZGVudGljYWwgdG8gdGhlIElTQSBvbmVzLgpkaWZmIC0tZ2l0
IGEvc3lzL3NwYXJjNjQvaXNhL2lzYS5jIGIvc3lzL3NwYXJjNjQvaXNhL2lzYS5jCmluZGV4IDc0
NjI3YzUuLmNlY2NiOGEgMTAwNjQ0Ci0tLSBhL3N5cy9zcGFyYzY0L2lzYS9pc2EuYworKysgYi9z
eXMvc3BhcmM2NC9pc2EvaXNhLmMKQEAgLTQ0LDEzICs0NCwxNCBAQCBfX0ZCU0RJRCgiJEZyZWVC
U0QkIik7CiAKICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXMuaD4KICNpbmNsdWRlIDxkZXYvb2Z3
L29wZW5maXJtLmg+CisjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzX3N1YnIuaD4KKyNpbmNsdWRl
IDxkZXYvb2Z3L29md19wY2kuaD4KIAogI2luY2x1ZGUgPG1hY2hpbmUvcmVzb3VyY2UuaD4KIAog
I2luY2x1ZGUgPGRldi9wY2kvcGNpcmVnLmg+CiAjaW5jbHVkZSA8ZGV2L3BjaS9wY2l2YXIuaD4K
IAotI2luY2x1ZGUgPHNwYXJjNjQvcGNpL29md19wY2kuaD4KICNpbmNsdWRlIDxzcGFyYzY0L2lz
YS9vZndfaXNhLmg+CiAKIC8qIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSBJU0EgYnVzLCBzbyBpdCBp
cyBzYWZlIHRvIHVzZSBnbG9iYWxzLiAqLwpkaWZmIC0tZ2l0IGEvc3lzL3NwYXJjNjQvaXNhL29m
d19pc2EuYyBiL3N5cy9zcGFyYzY0L2lzYS9vZndfaXNhLmMKaW5kZXggZGJlNWQ4YS4uMmJlODk0
ZCAxMDA2NDQKLS0tIGEvc3lzL3NwYXJjNjQvaXNhL29md19pc2EuYworKysgYi9zeXMvc3BhcmM2
NC9pc2Evb2Z3X2lzYS5jCkBAIC02NSwxNCArNjUsMTUgQEAgX19GQlNESUQoIiRGcmVlQlNEJCIp
OwogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgogI2luY2x1
ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgogCiAjaW5jbHVkZSA8ZGV2L29m
dy9vZndfYnVzX3N1YnIuaD4KICNpbmNsdWRlIDxkZXYvb2Z3L29wZW5maXJtLmg+CisjaW5jbHVk
ZSA8ZGV2L29mdy9vZndfcGNpLmg+CiAKICNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgogI2luY2x1
ZGUgPG1hY2hpbmUvcmVzb3VyY2UuaD4KIAotI2luY2x1ZGUgPHNwYXJjNjQvcGNpL29md19wY2ku
aD4KICNpbmNsdWRlIDxzcGFyYzY0L2lzYS9vZndfaXNhLmg+CiAKICNpbmNsdWRlICJwY2liX2lm
LmgiCkBAIC04Myw5ICs4NCw5IEBAIG9md19pc2FfcmFuZ2VfcmVzdHlwZShzdHJ1Y3QgaXNhX3Jh
bmdlcyAqcmFuZ2UpCiAJaW50IHBzID0gSVNBX1JBTkdFX1BTKHJhbmdlKTsKIAogCXN3aXRjaCAo
cHMpIHsKLQljYXNlIE9GV19QQ0lfQ1NfSU86CisJY2FzZSBPRldfUENJX0lPOgogCQlyZXR1cm4g
KFNZU19SRVNfSU9QT1JUKTsKLQljYXNlIE9GV19QQ0lfQ1NfTUVNMzI6CisJY2FzZSBPRldfUENJ
X01FTTMyOgogCQlyZXR1cm4gKFNZU19SRVNfTUVNT1JZKTsKIAlkZWZhdWx0OgogCQlwYW5pYygi
b2Z3X2lzYV9yYW5nZV9yZXN0eXBlOiBpbGxlZ2FsIHNwYWNlICV4IiwgcHMpOwpkaWZmIC0tZ2l0
IGEvc3lzL3NwYXJjNjQvcGNpL2FwYi5jIGIvc3lzL3NwYXJjNjQvcGNpL2FwYi5jCmluZGV4IGJh
MzY0M2MuLmY3MDllOWEgMTAwNjQ0Ci0tLSBhL3N5cy9zcGFyYzY0L3BjaS9hcGIuYworKysgYi9z
eXMvc3BhcmM2NC9wY2kvYXBiLmMKQEAgLTUzLDYgKzUzLDggQEAgX19GQlNESUQoIiRGcmVlQlNE
JCIpOwogCiAjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzLmg+CiAjaW5jbHVkZSA8ZGV2L29mdy9v
cGVuZmlybS5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJyLmg+CisjaW5jbHVkZSA8
ZGV2L29mdy9vZndfcGNpLmg+CiAKICNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgogI2luY2x1ZGUg
PG1hY2hpbmUvcmVzb3VyY2UuaD4KQEAgLTYzLDcgKzY1LDYgQEAgX19GQlNESUQoIiRGcmVlQlNE
JCIpOwogCiAjaW5jbHVkZSAicGNpYl9pZi5oIgogCi0jaW5jbHVkZSA8c3BhcmM2NC9wY2kvb2Z3
X3BjaS5oPgogI2luY2x1ZGUgPHNwYXJjNjQvcGNpL29md19wY2liX3N1YnIuaD4KIAogLyoKZGlm
ZiAtLWdpdCBhL3N5cy9zcGFyYzY0L3BjaS9maXJlLmMgYi9zeXMvc3BhcmM2NC9wY2kvZmlyZS5j
CmluZGV4IGUwNmFkNTAuLmJkNzk1ZDIgMTAwNjQ0Ci0tLSBhL3N5cy9zcGFyYzY0L3BjaS9maXJl
LmMKKysrIGIvc3lzL3NwYXJjNjQvcGNpL2ZpcmUuYwpAQCAtNjAsNiArNjAsOCBAQCBfX0ZCU0RJ
RCgiJEZyZWVCU0QkIik7CiAKICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXMuaD4KICNpbmNsdWRl
IDxkZXYvb2Z3L29wZW5maXJtLmg+CisjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzX3N1YnIuaD4K
KyNpbmNsdWRlIDxkZXYvb2Z3L29md19wY2kuaD4KIAogI2luY2x1ZGUgPHZtL3ZtLmg+CiAjaW5j
bHVkZSA8dm0vcG1hcC5oPgpAQCAtNzQsNyArNzYsNiBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7
CiAjaW5jbHVkZSA8ZGV2L3BjaS9wY2lyZWcuaD4KICNpbmNsdWRlIDxkZXYvcGNpL3BjaXZhci5o
PgogCi0jaW5jbHVkZSA8c3BhcmM2NC9wY2kvb2Z3X3BjaS5oPgogI2luY2x1ZGUgPHNwYXJjNjQv
cGNpL2ZpcmVyZWcuaD4KICNpbmNsdWRlIDxzcGFyYzY0L3BjaS9maXJldmFyLmg+CiAKQEAgLTEz
Niw4ICsxMzcsOCBAQCBzdGF0aWMgZGV2aWNlX21ldGhvZF90IGZpcmVfbWV0aG9kc1tdID0gewog
CURFVk1FVEhPRChidXNfc2V0dXBfaW50ciwJZmlyZV9zZXR1cF9pbnRyKSwKIAlERVZNRVRIT0Qo
YnVzX3RlYXJkb3duX2ludHIsCWZpcmVfdGVhcmRvd25faW50ciksCiAJREVWTUVUSE9EKGJ1c19h
bGxvY19yZXNvdXJjZSwJZmlyZV9hbGxvY19yZXNvdXJjZSksCi0JREVWTUVUSE9EKGJ1c19hY3Rp
dmF0ZV9yZXNvdXJjZSwgb2Z3X3BjaV9hY3RpdmF0ZV9yZXNvdXJjZSksCi0JREVWTUVUSE9EKGJ1
c19kZWFjdGl2YXRlX3Jlc291cmNlLCBidXNfZ2VuZXJpY19kZWFjdGl2YXRlX3Jlc291cmNlKSwK
KwlERVZNRVRIT0QoYnVzX2FjdGl2YXRlX3Jlc291cmNlLCAgIHNwYXJjNjRfb2Z3X3BjaV9hY3Rp
dmF0ZV9yZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1c19kZWFjdGl2YXRlX3Jlc291cmNlLCBzcGFy
YzY0X29md19wY2lfZGVhY3RpdmF0ZV9yZXNvdXJjZSksCiAJREVWTUVUSE9EKGJ1c19hZGp1c3Rf
cmVzb3VyY2UsCW9md19wY2lfYWRqdXN0X3Jlc291cmNlKSwKIAlERVZNRVRIT0QoYnVzX3JlbGVh
c2VfcmVzb3VyY2UsCWJ1c19nZW5lcmljX3JlbGVhc2VfcmVzb3VyY2UpLAogCURFVk1FVEhPRChi
dXNfZ2V0X2RtYV90YWcsCW9md19wY2lfZ2V0X2RtYV90YWcpLApkaWZmIC0tZ2l0IGEvc3lzL3Nw
YXJjNjQvcGNpL29md19wY2kuYyBiL3N5cy9zcGFyYzY0L3BjaS9vZndfcGNpLmMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYWJkNDkuLjAwMDAwMDAKLS0tIGEvc3lzL3NwYXJjNjQv
cGNpL29md19wY2kuYworKysgL2Rldi9udWxsCkBAIC0xLDQwNiArMCwwIEBACi0vKi0KLSAqIENv
cHlyaWdodCAoYykgMTk5OSwgMjAwMCBNYXR0aGV3IFIuIEdyZWVuCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMDEgLSAyMDAzIGJ5IFRob21hcyBNb2VzdGwgPHRtbUBGcmVlQlNELm9yZz4KLSAqIENvcHly
aWdodCAoYykgMjAwNSAtIDIwMTUgYnkgTWFyaXVzIFN0cm9ibCA8bWFyaXVzQEZyZWVCU0Qub3Jn
PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIFRoZSBuYW1lIG9mIHRo
ZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwot
ICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglmcm9tOiBOZXRCU0Q6IHBzeWNo
by5jLHYgMS4zNSAyMDAxLzA5LzEwIDE2OjE3OjA2IGVlaCBFeHAKLSAqLwotCi0jaW5jbHVkZSA8
c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlICJvcHRfb2Z3
X3BjaS5oIgotCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3N5c3RtLmg+
Ci0jaW5jbHVkZSA8c3lzL2J1cy5oPgotI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KLSNpbmNsdWRl
IDxzeXMvcm1hbi5oPgotCi0jaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzLmg+Ci0jaW5jbHVkZSA8
ZGV2L29mdy9vZndfcGNpLmg+Ci0jaW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgotCi0jaW5j
bHVkZSA8ZGV2L3BjaS9wY2lyZWcuaD4KLSNpbmNsdWRlIDxkZXYvcGNpL3BjaXZhci5oPgotCi0j
aW5jbHVkZSA8bWFjaGluZS9hc2kuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgotI2luY2x1
ZGUgPG1hY2hpbmUvYnVzX3ByaXZhdGUuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2NwdWZ1bmMuaD4K
LSNpbmNsdWRlIDxtYWNoaW5lL2Zzci5oPgotI2luY2x1ZGUgPG1hY2hpbmUvcmVzb3VyY2UuaD4K
LQotI2luY2x1ZGUgPHNwYXJjNjQvcGNpL29md19wY2kuaD4KLQotaW50Ci1vZndfcGNpX2F0dGFj
aF9jb21tb24oZGV2aWNlX3QgZGV2LCBidXNfZG1hX3RhZ190IGRtYXQsIHVfbG9uZyBpb3NpemUs
Ci0gICAgdV9sb25nIG1lbXNpemUpCi17Ci0Jc3RydWN0IG9md19wY2lfc29mdGMgKnNjOwotCXN0
cnVjdCBvZndfcGNpX3JhbmdlcyAqcmFuZ2U7Ci0JcGhhbmRsZV90IG5vZGU7Ci0JdWludDMyX3Qg
cHJvcF9hcnJheVsyXTsKLQl1X2ludCBpLCBqLCBucmFuZ2U7Ci0KLQlzYyA9IGRldmljZV9nZXRf
c29mdGMoZGV2KTsKLQlub2RlID0gb2Z3X2J1c19nZXRfbm9kZShkZXYpOwotCXNjLT5zY19ub2Rl
ID0gbm9kZTsKLQlzYy0+c2NfcGNpX2RtYXQgPSBkbWF0OwotCi0JLyogSW5pdGlhbGl6ZSBtZW1v
cnkgYW5kIEkvTyBybWFucy4gKi8KLQlzYy0+c2NfcGNpX2lvX3JtYW4ucm1fdHlwZSA9IFJNQU5f
QVJSQVk7Ci0Jc2MtPnNjX3BjaV9pb19ybWFuLnJtX2Rlc2NyID0gIlBDSSBJL08gUG9ydHMiOwot
CWlmIChybWFuX2luaXQoJnNjLT5zY19wY2lfaW9fcm1hbikgIT0gMCB8fAotCSAgICBybWFuX21h
bmFnZV9yZWdpb24oJnNjLT5zY19wY2lfaW9fcm1hbiwgMCwgaW9zaXplKSAhPSAwKSB7Ci0JCWRl
dmljZV9wcmludGYoZGV2LCAiZmFpbGVkIHRvIHNldCB1cCBJL08gcm1hblxuIik7Ci0JCXJldHVy
biAoRU5YSU8pOwotCX0KLQlzYy0+c2NfcGNpX21lbV9ybWFuLnJtX3R5cGUgPSBSTUFOX0FSUkFZ
OwotCXNjLT5zY19wY2lfbWVtX3JtYW4ucm1fZGVzY3IgPSAiUENJIE1lbW9yeSI7Ci0JaWYgKHJt
YW5faW5pdCgmc2MtPnNjX3BjaV9tZW1fcm1hbikgIT0gMCB8fAotCSAgICBybWFuX21hbmFnZV9y
ZWdpb24oJnNjLT5zY19wY2lfbWVtX3JtYW4sIDAsIG1lbXNpemUpICE9IDApIHsKLQkJZGV2aWNl
X3ByaW50ZihkZXYsICJmYWlsZWQgdG8gc2V0IHVwIG1lbW9yeSBybWFuXG4iKTsKLQkJcmV0dXJu
IChFTlhJTyk7Ci0JfQotCi0JLyoKLQkgKiBGaW5kIHRoZSBhZGRyZXNzZXMgb2YgdGhlIHZhcmlv
dXMgYnVzIHNwYWNlcy4gIFRoZSBwaHlzaWNhbAotCSAqIHN0YXJ0IGFkZHJlc3NlcyBvZiB0aGUg
cmFuZ2VzIGFyZSB0aGUgY29uZmlndXJhdGlvbiwgSS9PIGFuZAotCSAqIG1lbW9yeSBoYW5kbGVz
LiAgVGhlcmUgc2hvdWxkIG5vdCBiZSBtdWx0aXBsZSBvbmVzIG9mIG9uZSBraW5kLgotCSAqLwot
CW5yYW5nZSA9IE9GX2dldHByb3BfYWxsb2Mobm9kZSwgInJhbmdlcyIsIHNpemVvZigqcmFuZ2Up
LAotCSAgICAodm9pZCAqKikmcmFuZ2UpOwotCWZvciAoaSA9IDA7IGkgPCBucmFuZ2U7IGkrKykg
ewotCQlqID0gT0ZXX1BDSV9SQU5HRV9DUygmcmFuZ2VbaV0pOwotCQlpZiAoc2MtPnNjX3BjaV9i
aFtqXSAhPSAwKSB7Ci0JCQlkZXZpY2VfcHJpbnRmKGRldiwgImR1cGxpY2F0ZSByYW5nZSBmb3Ig
c3BhY2UgJWRcbiIsCi0JCQkgICAgaik7Ci0JCQlmcmVlKHJhbmdlLCBNX09GV1BST1ApOwotCQkJ
cmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JCXNjLT5zY19wY2lfYmhbal0gPSBPRldfUENJX1JBTkdF
X1BIWVMoJnJhbmdlW2ldKTsKLQl9Ci0JZnJlZShyYW5nZSwgTV9PRldQUk9QKTsKLQotCS8qCi0J
ICogTWFrZSBzdXJlIHRoYXQgdGhlIGV4cGVjdGVkIHJhbmdlcyBhcmUgYWN0dWFsbHkgcHJlc2Vu
dC4KLQkgKiBUaGUgT0ZXX1BDSV9DU19NRU02NCBvbmUgaXMgbm90IGN1cnJlbnRseSB1c2VkLgot
CSAqLwotCWlmIChzYy0+c2NfcGNpX2JoW09GV19QQ0lfQ1NfQ09ORklHXSA9PSAwKSB7Ci0JCWRl
dmljZV9wcmludGYoZGV2LCAibWlzc2luZyBDT05GSUcgcmFuZ2VcbiIpOwotCQlyZXR1cm4gKEVO
WElPKTsKLQl9Ci0JaWYgKHNjLT5zY19wY2lfYmhbT0ZXX1BDSV9DU19JT10gPT0gMCkgewotCQlk
ZXZpY2VfcHJpbnRmKGRldiwgIm1pc3NpbmcgSU8gcmFuZ2VcbiIpOwotCQlyZXR1cm4gKEVOWElP
KTsKLQl9Ci0JaWYgKHNjLT5zY19wY2lfYmhbT0ZXX1BDSV9DU19NRU0zMl0gPT0gMCkgewotCQlk
ZXZpY2VfcHJpbnRmKGRldiwgIm1pc3NpbmcgTUVNMzIgcmFuZ2VcbiIpOwotCQlyZXR1cm4gKEVO
WElPKTsKLQl9Ci0KLQkvKiBBbGxvY2F0ZSBvdXIgdGFncy4gKi8KLQlzYy0+c2NfcGNpX2lvdCA9
IHNwYXJjNjRfYWxsb2NfYnVzX3RhZyhOVUxMLCBQQ0lfSU9fQlVTX1NQQUNFKTsKLQlpZiAoc2Mt
PnNjX3BjaV9pb3QgPT0gTlVMTCkgewotCQlkZXZpY2VfcHJpbnRmKGRldiwgImNvdWxkIG5vdCBh
bGxvY2F0ZSBQQ0kgSS9PIHRhZ1xuIik7Ci0JCXJldHVybiAoRU5YSU8pOwotCX0KLQlzYy0+c2Nf
cGNpX2NmZ3QgPSBzcGFyYzY0X2FsbG9jX2J1c190YWcoTlVMTCwgUENJX0NPTkZJR19CVVNfU1BB
Q0UpOwotCWlmIChzYy0+c2NfcGNpX2NmZ3QgPT0gTlVMTCkgewotCQlkZXZpY2VfcHJpbnRmKGRl
diwKLQkJICAgICJjb3VsZCBub3QgYWxsb2NhdGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgdGFn
XG4iKTsKLQkJcmV0dXJuIChFTlhJTyk7Ci0JfQotCi0JLyoKLQkgKiBHZXQgdGhlIGJ1cyByYW5n
ZSBmcm9tIHRoZSBmaXJtd2FyZS4KLQkgKi8KLQlpID0gT0ZfZ2V0cHJvcChub2RlLCAiYnVzLXJh
bmdlIiwgKHZvaWQgKilwcm9wX2FycmF5LAotCSAgICBzaXplb2YocHJvcF9hcnJheSkpOwotCWlm
IChpID09IC0xKSB7Ci0JCWRldmljZV9wcmludGYoZGV2LCAiY291bGQgbm90IGdldCBidXMtcmFu
Z2VcbiIpOwotCQlyZXR1cm4gKEVOWElPKTsKLQl9Ci0JaWYgKGkgIT0gc2l6ZW9mKHByb3BfYXJy
YXkpKSB7Ci0JCWRldmljZV9wcmludGYoZGV2LCAiYnJva2VuIGJ1cy1yYW5nZSAoJWQpIiwgaSk7
Ci0JCXJldHVybiAoRUlOVkFMKTsKLQl9Ci0Jc2MtPnNjX3BjaV9zZWNidXMgPSBwcm9wX2FycmF5
WzBdOwotCXNjLT5zY19wY2lfc3ViYnVzID0gcHJvcF9hcnJheVsxXTsKLQlpZiAoYm9vdHZlcmJv
c2UgIT0gMCkKLQkJZGV2aWNlX3ByaW50ZihkZXYsICJidXMgcmFuZ2UgJXUgdG8gJXU7IFBDSSBi
dXMgJWRcbiIsCi0JCSAgICBzYy0+c2NfcGNpX3NlY2J1cywgc2MtPnNjX3BjaV9zdWJidXMsIHNj
LT5zY19wY2lfc2VjYnVzKTsKLQotCW9md19idXNfc2V0dXBfaWluZm8obm9kZSwgJnNjLT5zY19w
Y2lfaWluZm8sIHNpemVvZihvZndfcGNpX2ludHJfdCkpOwotCi0JcmV0dXJuICgwKTsKLX0KLQot
dWludDMyX3QKLW9md19wY2lfcmVhZF9jb25maWdfY29tbW9uKGRldmljZV90IGRldiwgdV9pbnQg
cmVnbWF4LCB1X2xvbmcgb2Zmc2V0LAotICAgIHVfaW50IGJ1cywgdV9pbnQgc2xvdCwgdV9pbnQg
ZnVuYywgdV9pbnQgcmVnLCBpbnQgd2lkdGgpCi17Ci0Jc3RydWN0IG9md19wY2lfc29mdGMgKnNj
OwotCWJ1c19zcGFjZV9oYW5kbGVfdCBiaDsKLQl1aW50MzJfdCByLCB3cmQ7Ci0JaW50IGk7Ci0J
dWludDE2X3Qgc2hydDsKLQl1aW50OF90IGJ5dGU7Ci0KLQlzYyA9IGRldmljZV9nZXRfc29mdGMo
ZGV2KTsKLQlpZiAoYnVzIDwgc2MtPnNjX3BjaV9zZWNidXMgfHwgYnVzID4gc2MtPnNjX3BjaV9z
dWJidXMgfHwKLQkgICAgc2xvdCA+IFBDSV9TTE9UTUFYIHx8IGZ1bmMgPiBQQ0lfRlVOQ01BWCB8
fCByZWcgPiByZWdtYXgpCi0JCXJldHVybiAoLTEpOwotCi0JYmggPSBzYy0+c2NfcGNpX2JoW09G
V19QQ0lfQ1NfQ09ORklHXTsKLQlzd2l0Y2ggKHdpZHRoKSB7Ci0JY2FzZSAxOgotCQlpID0gYnVz
X3NwYWNlX3BlZWtfMShzYy0+c2NfcGNpX2NmZ3QsIGJoLCBvZmZzZXQsICZieXRlKTsKLQkJciA9
IGJ5dGU7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJaSA9IGJ1c19zcGFjZV9wZWVrXzIoc2MtPnNj
X3BjaV9jZmd0LCBiaCwgb2Zmc2V0LCAmc2hydCk7Ci0JCXIgPSBzaHJ0OwotCQlicmVhazsKLQlj
YXNlIDQ6Ci0JCWkgPSBidXNfc3BhY2VfcGVla180KHNjLT5zY19wY2lfY2ZndCwgYmgsIG9mZnNl
dCwgJndyZCk7Ci0JCXIgPSB3cmQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXBhbmljKCIlczog
YmFkIHdpZHRoICVkIiwgX19mdW5jX18sIHdpZHRoKTsKLQkJLyogTk9UUkVBQ0hFRCAqLwotCX0K
LQotCWlmIChpKSB7Ci0jaWZkZWYgT0ZXX1BDSV9ERUJVRwotCQlwcmludGYoIiVzOiByZWFkIGRh
dGEgZXJyb3IgcmVhZGluZzogJWQuJWQuJWQ6IDB4JXhcbiIsCi0JCSAgICBfX2Z1bmNfXywgYnVz
LCBzbG90LCBmdW5jLCByZWcpOwotI2VuZGlmCi0JCXIgPSAtMTsKLQl9Ci0JcmV0dXJuIChyKTsK
LX0KLQotdm9pZAotb2Z3X3BjaV93cml0ZV9jb25maWdfY29tbW9uKGRldmljZV90IGRldiwgdV9p
bnQgcmVnbWF4LCB1X2xvbmcgb2Zmc2V0LAotICAgIHVfaW50IGJ1cywgdV9pbnQgc2xvdCwgdV9p
bnQgZnVuYywgdV9pbnQgcmVnLCB1aW50MzJfdCB2YWwsIGludCB3aWR0aCkKLXsKLQlzdHJ1Y3Qg
b2Z3X3BjaV9zb2Z0YyAqc2M7Ci0JYnVzX3NwYWNlX2hhbmRsZV90IGJoOwotCi0Jc2MgPSBkZXZp
Y2VfZ2V0X3NvZnRjKGRldik7Ci0JaWYgKGJ1cyA8IHNjLT5zY19wY2lfc2VjYnVzIHx8IGJ1cyA+
IHNjLT5zY19wY2lfc3ViYnVzIHx8Ci0JICAgIHNsb3QgPiBQQ0lfU0xPVE1BWCB8fCBmdW5jID4g
UENJX0ZVTkNNQVggfHwgcmVnID4gcmVnbWF4KQotCQlyZXR1cm47Ci0KLQliaCA9IHNjLT5zY19w
Y2lfYmhbT0ZXX1BDSV9DU19DT05GSUddOwotCXN3aXRjaCAod2lkdGgpIHsKLQljYXNlIDE6Ci0J
CWJ1c19zcGFjZV93cml0ZV8xKHNjLT5zY19wY2lfY2ZndCwgYmgsIG9mZnNldCwgdmFsKTsKLQkJ
YnJlYWs7Ci0JY2FzZSAyOgotCQlidXNfc3BhY2Vfd3JpdGVfMihzYy0+c2NfcGNpX2NmZ3QsIGJo
LCBvZmZzZXQsIHZhbCk7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJYnVzX3NwYWNlX3dyaXRlXzQo
c2MtPnNjX3BjaV9jZmd0LCBiaCwgb2Zmc2V0LCB2YWwpOwotCQlicmVhazsKLQlkZWZhdWx0Ogot
CQlwYW5pYygiJXM6IGJhZCB3aWR0aCAlZCIsIF9fZnVuY19fLCB3aWR0aCk7Ci0JCS8qIE5PVFJF
QUNIRUQgKi8KLQl9Ci19Ci0KLW9md19wY2lfaW50cl90Ci1vZndfcGNpX3JvdXRlX2ludGVycnVw
dF9jb21tb24oZGV2aWNlX3QgYnJpZGdlLCBkZXZpY2VfdCBkZXYsIGludCBwaW4pCi17Ci0Jc3Ry
dWN0IG9md19wY2lfc29mdGMgKnNjOwotCXN0cnVjdCBvZndfcGNpX3JlZ2lzdGVyIHJlZzsKLQlv
ZndfcGNpX2ludHJfdCBwaW50ciwgbWludHI7Ci0KLQlzYyA9IGRldmljZV9nZXRfc29mdGMoYnJp
ZGdlKTsKLQlwaW50ciA9IHBpbjsKLQlpZiAob2Z3X2J1c19sb29rdXBfaW1hcChvZndfYnVzX2dl
dF9ub2RlKGRldiksICZzYy0+c2NfcGNpX2lpbmZvLAotCSAgICAmcmVnLCBzaXplb2YocmVnKSwg
JnBpbnRyLCBzaXplb2YocGludHIpLCAmbWludHIsIHNpemVvZihtaW50ciksCi0JICAgIE5VTEwp
ICE9IDApCi0JCXJldHVybiAobWludHIpOwotCXJldHVybiAoUENJX0lOVkFMSURfSVJRKTsKLX0K
LQotdm9pZAotb2Z3X3BjaV9kbWFtYXBfc3luY19zdHN0X29yZGVyX2NvbW1vbih2b2lkKQotewot
CXN0YXRpYyB1X2NoYXIgYnVmW1ZJU19CTE9DS1NJWkVdIF9fYWxpZ25lZChWSVNfQkxPQ0tTSVpF
KTsKLQlyZWdpc3Rlcl90IHJlZywgczsKLQotCXMgPSBpbnRyX2Rpc2FibGUoKTsKLQlyZWcgPSBy
ZChmcHJzKTsKLQl3cihmcHJzLCByZWcgfCBGUFJTX0ZFRiwgMCk7Ci0JX19hc20gX192b2xhdGls
ZSgic3RkYSAlJWYwLCBbJTBdICUxIgotCSAgICA6IDogInIiIChidWYpLCAibiIgKEFTSV9CTEtf
Q09NTUlUX1MpKTsKLQltZW1iYXIoU3luYyk7Ci0Jd3IoZnBycywgcmVnLCAwKTsKLQlpbnRyX3Jl
c3RvcmUocyk7Ci19Ci0KLWludAotb2Z3X3BjaV9yZWFkX2l2YXIoZGV2aWNlX3QgZGV2LCBkZXZp
Y2VfdCBjaGlsZCBfX3VudXNlZCwgaW50IHdoaWNoLAotICAgIHVpbnRwdHJfdCAqcmVzdWx0KQot
ewotCXN0cnVjdCBvZndfcGNpX3NvZnRjICpzYzsKLQotCXN3aXRjaCAod2hpY2gpIHsKLQljYXNl
IFBDSUJfSVZBUl9ET01BSU46Ci0JCSpyZXN1bHQgPSBkZXZpY2VfZ2V0X3VuaXQoZGV2KTsKLQkJ
cmV0dXJuICgwKTsKLQljYXNlIFBDSUJfSVZBUl9CVVM6Ci0JCXNjID0gZGV2aWNlX2dldF9zb2Z0
YyhkZXYpOwotCQkqcmVzdWx0ID0gc2MtPnNjX3BjaV9zZWNidXM7Ci0JCXJldHVybiAoMCk7Ci0J
fQotCXJldHVybiAoRU5PRU5UKTsKLX0KLQotc3RydWN0IHJlc291cmNlICoKLW9md19wY2lfYWxs
b2NfcmVzb3VyY2UoZGV2aWNlX3QgYnVzLCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCAq
cmlkLAotICAgIHJtYW5fcmVzX3Qgc3RhcnQsIHJtYW5fcmVzX3QgZW5kLCBybWFuX3Jlc190IGNv
dW50LCB1X2ludCBmbGFncykKLXsKLQlzdHJ1Y3Qgb2Z3X3BjaV9zb2Z0YyAqc2M7Ci0Jc3RydWN0
IHJlc291cmNlICpydjsKLQlzdHJ1Y3Qgcm1hbiAqcm07Ci0KLQlzYyA9IGRldmljZV9nZXRfc29m
dGMoYnVzKTsKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIFNZU19SRVNfSVJROgotCQkvKgotCQkg
KiBYWFg6IERvbid0IGFjY2VwdCBibGFuayByYW5nZXMgZm9yIG5vdywgb25seSBzaW5nbGUKLQkJ
ICogaW50ZXJydXB0cy4gIFRoZSBvdGhlciBjYXNlIHNob3VsZCBub3QgaGFwcGVuIHdpdGgKLQkJ
ICogdGhlIE1JIFBDSSBjb2RlIC4uLgotCQkgKiBYWFg6IFRoaXMgbWF5IHJldHVybiBhIHJlc291
cmNlIHRoYXQgaXMgb3V0IG9mIHRoZQotCQkgKiByYW5nZSB0aGF0IHdhcyBzcGVjaWZpZWQuICBJ
cyB0aGlzIGNvcnJlY3QgLi4uPwotCQkgKi8KLQkJaWYgKHN0YXJ0ICE9IGVuZCkKLQkJCXBhbmlj
KCIlczogWFhYOiBpbnRlcnJ1cHQgcmFuZ2UiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAoYnVzX2dl
bmVyaWNfYWxsb2NfcmVzb3VyY2UoYnVzLCBjaGlsZCwgdHlwZSwgcmlkLAotCQkgICAgc3RhcnQs
IGVuZCwgY291bnQsIGZsYWdzKSk7Ci0JY2FzZSBTWVNfUkVTX01FTU9SWToKLQkJcm0gPSAmc2Mt
PnNjX3BjaV9tZW1fcm1hbjsKLQkJYnJlYWs7Ci0JY2FzZSBTWVNfUkVTX0lPUE9SVDoKLQkJcm0g
PSAmc2MtPnNjX3BjaV9pb19ybWFuOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gKE5V
TEwpOwotCX0KLQotCXJ2ID0gcm1hbl9yZXNlcnZlX3Jlc291cmNlKHJtLCBzdGFydCwgZW5kLCBj
b3VudCwgZmxhZ3MgJiB+UkZfQUNUSVZFLAotCSAgICBjaGlsZCk7Ci0JaWYgKHJ2ID09IE5VTEwp
Ci0JCXJldHVybiAoTlVMTCk7Ci0Jcm1hbl9zZXRfcmlkKHJ2LCAqcmlkKTsKLQotCWlmICgoZmxh
Z3MgJiBSRl9BQ1RJVkUpICE9IDAgJiYgYnVzX2FjdGl2YXRlX3Jlc291cmNlKGNoaWxkLCB0eXBl
LAotCSAgICAqcmlkLCBydikgIT0gMCkgewotCQlybWFuX3JlbGVhc2VfcmVzb3VyY2UocnYpOwot
CQlyZXR1cm4gKE5VTEwpOwotCX0KLQlyZXR1cm4gKHJ2KTsKLX0KLQotaW50Ci1vZndfcGNpX2Fj
dGl2YXRlX3Jlc291cmNlKGRldmljZV90IGJ1cywgZGV2aWNlX3QgY2hpbGQsIGludCB0eXBlLCBp
bnQgcmlkLAotICAgIHN0cnVjdCByZXNvdXJjZSAqcikKLXsKLQlzdHJ1Y3Qgb2Z3X3BjaV9zb2Z0
YyAqc2M7Ci0Jc3RydWN0IGJ1c19zcGFjZV90YWcgKnRhZzsKLQotCXNjID0gZGV2aWNlX2dldF9z
b2Z0YyhidXMpOwotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgU1lTX1JFU19JUlE6Ci0JCXJldHVy
biAoYnVzX2dlbmVyaWNfYWN0aXZhdGVfcmVzb3VyY2UoYnVzLCBjaGlsZCwgdHlwZSwgcmlkLAot
CQkgICAgcikpOwotCWNhc2UgU1lTX1JFU19NRU1PUlk6Ci0JCXRhZyA9IHNwYXJjNjRfYWxsb2Nf
YnVzX3RhZyhyLCBQQ0lfTUVNT1JZX0JVU19TUEFDRSk7Ci0JCWlmICh0YWcgPT0gTlVMTCkKLQkJ
CXJldHVybiAoRU5PTUVNKTsKLQkJcm1hbl9zZXRfYnVzdGFnKHIsIHRhZyk7Ci0JCXJtYW5fc2V0
X2J1c2hhbmRsZShyLCBzYy0+c2NfcGNpX2JoW09GV19QQ0lfQ1NfTUVNMzJdICsKLQkJICAgIHJt
YW5fZ2V0X3N0YXJ0KHIpKTsKLQkJYnJlYWs7Ci0JY2FzZSBTWVNfUkVTX0lPUE9SVDoKLQkJcm1h
bl9zZXRfYnVzdGFnKHIsIHNjLT5zY19wY2lfaW90KTsKLQkJcm1hbl9zZXRfYnVzaGFuZGxlKHIs
IHNjLT5zY19wY2lfYmhbT0ZXX1BDSV9DU19JT10gKwotCQkgICAgcm1hbl9nZXRfc3RhcnQocikp
OwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIChybWFuX2FjdGl2YXRlX3Jlc291cmNlKHIpKTsKLX0K
LQotaW50Ci1vZndfcGNpX2FkanVzdF9yZXNvdXJjZShkZXZpY2VfdCBidXMsIGRldmljZV90IGNo
aWxkLCBpbnQgdHlwZSwKLSAgICBzdHJ1Y3QgcmVzb3VyY2UgKnIsIHJtYW5fcmVzX3Qgc3RhcnQs
IHJtYW5fcmVzX3QgZW5kKQotewotCXN0cnVjdCBvZndfcGNpX3NvZnRjICpzYzsKLQlzdHJ1Y3Qg
cm1hbiAqcm07Ci0KLQlzYyA9IGRldmljZV9nZXRfc29mdGMoYnVzKTsKLQlzd2l0Y2ggKHR5cGUp
IHsKLQljYXNlIFNZU19SRVNfSVJROgotCQlyZXR1cm4gKGJ1c19nZW5lcmljX2FkanVzdF9yZXNv
dXJjZShidXMsIGNoaWxkLCB0eXBlLCByLAotCQkgICAgc3RhcnQsIGVuZCkpOwotCWNhc2UgU1lT
X1JFU19NRU1PUlk6Ci0JCXJtID0gJnNjLT5zY19wY2lfbWVtX3JtYW47Ci0JCWJyZWFrOwotCWNh
c2UgU1lTX1JFU19JT1BPUlQ6Ci0JCXJtID0gJnNjLT5zY19wY2lfaW9fcm1hbjsKLQkJYnJlYWs7
Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIChFSU5WQUwpOwotCX0KLQlpZiAocm1hbl9pc19yZWdpb25f
bWFuYWdlcihyLCBybSkgPT0gMCkKLQkJcmV0dXJuIChFSU5WQUwpOwotCXJldHVybiAocm1hbl9h
ZGp1c3RfcmVzb3VyY2Uociwgc3RhcnQsIGVuZCkpOwotfQotCi1idXNfZG1hX3RhZ190Ci1vZndf
cGNpX2dldF9kbWFfdGFnKGRldmljZV90IGJ1cywgZGV2aWNlX3QgY2hpbGQgX191bnVzZWQpCi17
Ci0Jc3RydWN0IG9md19wY2lfc29mdGMgKnNjOwotCi0Jc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGJ1
cyk7Ci0JcmV0dXJuIChzYy0+c2NfcGNpX2RtYXQpOwotfQotCi1waGFuZGxlX3QKLW9md19wY2lf
Z2V0X25vZGUoZGV2aWNlX3QgYnVzLCBkZXZpY2VfdCBjaGlsZCBfX3VudXNlZCkKLXsKLQlzdHJ1
Y3Qgb2Z3X3BjaV9zb2Z0YyAqc2M7Ci0KLQlzYyA9IGRldmljZV9nZXRfc29mdGMoYnVzKTsKLQkv
KiBXZSBvbmx5IGhhdmUgb25lIGNoaWxkLCB0aGUgUENJIGJ1cywgd2hpY2ggbmVlZHMgb3VyIG93
biBub2RlLiAqLwotCXJldHVybiAoc2MtPnNjX25vZGUpOwotfQpkaWZmIC0tZ2l0IGEvc3lzL3Nw
YXJjNjQvcGNpL29md19wY2kuaCBiL3N5cy9zcGFyYzY0L3BjaS9vZndfcGNpLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMWU1ZDkuLjAwMDAwMDAKLS0tIGEvc3lzL3NwYXJjNjQv
cGNpL29md19wY2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0vKi0KLSAqIENv
cHlyaWdodCAoYykgMTk5OSwgMjAwMCBNYXR0aGV3IFIuIEdyZWVuCi0gKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICBkZXJpdmVkIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycn
IEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNV
Q0ggREFNQUdFLgotICovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5IEVkdWFy
ZG8gRS4gSG9ydmF0aAotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAzIGJ5IFRob21hcyBNb2Vz
dGwgPHRtbUBGcmVlQlNELm9yZz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMKLSAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICog
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICoJ
ZnJvbTogTmV0QlNEOiBwc3ljaG9yZWcuaCx2IDEuMTQgMjAwOC8wNS8zMCAwMjoyOTozNyBtcmcg
RXhwCi0gKgotICogJEZyZWVCU0QkCi0gKi8KLQotI2lmbmRlZiBfU1BBUkM2NF9QQ0lfT0ZXX1BD
SV9IXwotI2RlZmluZQlfU1BBUkM2NF9QQ0lfT0ZXX1BDSV9IXwotCi0jaW5jbHVkZSA8c3lzL3Jt
YW4uaD4KLQotI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJyLmg+Ci0KLSNpbmNsdWRlICJv
ZndfcGNpX2lmLmgiCi0KLXR5cGVkZWYgdWludDMyX3Qgb2Z3X3BjaV9pbnRyX3Q7Ci0KLS8qIFBD
SSByYW5nZSBjaGlsZCBzcGFjZXMuIFhYWDogYXJlIHRoZXNlIE1JPyAqLwotI2RlZmluZQlPRldf
UENJX0NTX0NPTkZJRwkweDAwCi0jZGVmaW5lCU9GV19QQ0lfQ1NfSU8JCTB4MDEKLSNkZWZpbmUJ
T0ZXX1BDSV9DU19NRU0zMgkweDAyCi0jZGVmaW5lCU9GV19QQ0lfQ1NfTUVNNjQJMHgwMwotI2Rl
ZmluZQlPRldfUENJX05VTV9DUwkJNAotCi0vKiBPRlcgZGV2aWNlIHR5cGVzICovCi0jZGVmaW5l
CU9GV19UWVBFX1BDSQkJInBjaSIKLSNkZWZpbmUJT0ZXX1RZUEVfUENJRQkJInBjaWV4IgotCi1z
dHJ1Y3Qgb2Z3X3BjaV9tc2lfYWRkcl9yYW5nZXMgewotCXVpbnQzMl90CWFkZHIzMl9oaTsKLQl1
aW50MzJfdAlhZGRyMzJfbG87Ci0JdWludDMyX3QJYWRkcjMyX3N6OwotCXVpbnQzMl90CWFkZHI2
NF9oaTsKLQl1aW50MzJfdAlhZGRyNjRfbG87Ci0JdWludDMyX3QJYWRkcjY0X3N6OwotfTsKLQot
I2RlZmluZQlPRldfUENJX01TSV9BRERSX1JBTkdFXzMyKHIpIFwKLQkoKCh1aW50NjRfdCkocikt
PmFkZHIzMl9oaSA8PCAzMikgfCAodWludDY0X3QpKHIpLT5hZGRyMzJfbG8pCi0jZGVmaW5lCU9G
V19QQ0lfTVNJX0FERFJfUkFOR0VfNjQocikgXAotCSgoKHVpbnQ2NF90KShyKS0+YWRkcjY0X2hp
IDw8IDMyKSB8ICh1aW50NjRfdCkociktPmFkZHI2NF9sbykKLQotc3RydWN0IG9md19wY2lfbXNp
X2VxX3RvX2RldmlubyB7Ci0JdWludDMyX3QJZXFfZmlyc3Q7Ci0JdWludDMyX3QJZXFfY291bnQ7
Ci0JdWludDMyX3QJZGV2aW5vX2ZpcnN0OwotfTsKLQotc3RydWN0IG9md19wY2lfbXNpX3Jhbmdl
cyB7Ci0JdWludDMyX3QJZmlyc3Q7Ci0JdWludDMyX3QJY291bnQ7Ci19OwotCi1zdHJ1Y3Qgb2Z3
X3BjaV9yYW5nZXMgewotCXVpbnQzMl90CWNzcGFjZTsKLQl1aW50MzJfdAljaGlsZF9oaTsKLQl1
aW50MzJfdAljaGlsZF9sbzsKLQl1aW50MzJfdAlwaHlzX2hpOwotCXVpbnQzMl90CXBoeXNfbG87
Ci0JdWludDMyX3QJc2l6ZV9oaTsKLQl1aW50MzJfdAlzaXplX2xvOwotfTsKLQotI2RlZmluZQlP
RldfUENJX1JBTkdFX0NISUxEKHIpIFwKLQkoKCh1aW50NjRfdCkociktPmNoaWxkX2hpIDw8IDMy
KSB8ICh1aW50NjRfdCkociktPmNoaWxkX2xvKQotI2RlZmluZQlPRldfUENJX1JBTkdFX1BIWVMo
cikgXAotCSgoKHVpbnQ2NF90KShyKS0+cGh5c19oaSA8PCAzMikgfCAodWludDY0X3QpKHIpLT5w
aHlzX2xvKQotI2RlZmluZQlPRldfUENJX1JBTkdFX1NJWkUocikgXAotCSgoKHVpbnQ2NF90KShy
KS0+c2l6ZV9oaSA8PCAzMikgfCAodWludDY0X3QpKHIpLT5zaXplX2xvKQotI2RlZmluZQlPRldf
UENJX1JBTkdFX0NTKHIpCSgoKHIpLT5jc3BhY2UgPj4gMjQpICYgMHgwMykKLQotLyogZGVmYXVs
dCB2YWx1ZXMgKi8KLSNkZWZpbmUJT0ZXX1BDSV9MQVRFTkNZCTY0Ci0KLS8qCi0gKiBDb21tb24g
YW5kIGdlbmVyaWMgcGFydHMgb2YgaG9zdC1QQ0ktYnJpZGdlIHN1cHBvcnQKLSAqLwotCi1zdHJ1
Y3Qgb2Z3X3BjaV9zb2Z0YyB7Ci0Jc3RydWN0IHJtYW4JCXNjX3BjaV9tZW1fcm1hbjsKLQlzdHJ1
Y3Qgcm1hbgkJc2NfcGNpX2lvX3JtYW47Ci0KLQlidXNfc3BhY2VfaGFuZGxlX3QJc2NfcGNpX2Jo
W09GV19QQ0lfTlVNX0NTXTsKLQlidXNfc3BhY2VfdGFnX3QJCXNjX3BjaV9jZmd0OwotCWJ1c19z
cGFjZV90YWdfdAkJc2NfcGNpX2lvdDsKLQlidXNfZG1hX3RhZ190CQlzY19wY2lfZG1hdDsKLQot
CXN0cnVjdCBvZndfYnVzX2lpbmZvCXNjX3BjaV9paW5mbzsKLQotCXBoYW5kbGVfdAkJc2Nfbm9k
ZTsKLQotCXVpbnQ4X3QJCQlzY19wY2lfc2VjYnVzOwotCXVpbnQ4X3QJCQlzY19wY2lfc3ViYnVz
OwotfTsKLQotaW50IG9md19wY2lfYXR0YWNoX2NvbW1vbihkZXZpY2VfdCBkZXYsIGJ1c19kbWFf
dGFnX3QgZG1hdCwgdV9sb25nIGlvc2l6ZSwKLSAgICB1X2xvbmcgbWVtc2l6ZSk7Ci11aW50MzJf
dCBvZndfcGNpX3JlYWRfY29uZmlnX2NvbW1vbihkZXZpY2VfdCBkZXYsIHVfaW50IHJlZ21heCwg
dV9sb25nIG9mZnNldCwKLSAgICB1X2ludCBidXMsIHVfaW50IHNsb3QsIHVfaW50IGZ1bmMsIHVf
aW50IHJlZywgaW50IHdpZHRoKTsKLXZvaWQgb2Z3X3BjaV93cml0ZV9jb25maWdfY29tbW9uKGRl
dmljZV90IGRldiwgdV9pbnQgcmVnbWF4LCB1X2xvbmcgb2Zmc2V0LAotICAgIHVfaW50IGJ1cywg
dV9pbnQgc2xvdCwgdV9pbnQgZnVuYywgdV9pbnQgcmVnLCB1aW50MzJfdCB2YWwsIGludCB3aWR0
aCk7Ci1vZndfcGNpX2ludHJfdCBvZndfcGNpX3JvdXRlX2ludGVycnVwdF9jb21tb24oZGV2aWNl
X3QgYnJpZGdlLCBkZXZpY2VfdCBkZXYsCi0gICAgaW50IHBpbik7Ci0KLXZvaWQgb2Z3X3BjaV9k
bWFtYXBfc3luY19zdHN0X29yZGVyX2NvbW1vbih2b2lkKTsKLQotYnVzX2FjdGl2YXRlX3Jlc291
cmNlX3Qgb2Z3X3BjaV9hY3RpdmF0ZV9yZXNvdXJjZTsKLWJ1c19hZGp1c3RfcmVzb3VyY2VfdCBv
ZndfcGNpX2FkanVzdF9yZXNvdXJjZTsKLWJ1c19hbGxvY19yZXNvdXJjZV90IG9md19wY2lfYWxs
b2NfcmVzb3VyY2U7Ci1idXNfZ2V0X2RtYV90YWdfdCBvZndfcGNpX2dldF9kbWFfdGFnOwotYnVz
X3JlYWRfaXZhcl90IG9md19wY2lfcmVhZF9pdmFyOwotCi1vZndfYnVzX2dldF9ub2RlX3Qgb2Z3
X3BjaV9nZXRfbm9kZTsKLQotI2VuZGlmIC8qICEgX1NQQVJDNjRfUENJX09GV19QQ0lfSF8gKi8K
ZGlmZiAtLWdpdCBhL3N5cy9zcGFyYzY0L3BjaS9vZndfcGNpYi5jIGIvc3lzL3NwYXJjNjQvcGNp
L29md19wY2liLmMKaW5kZXggNzk0NDIzNy4uNmI0MjkwYiAxMDA2NDQKLS0tIGEvc3lzL3NwYXJj
NjQvcGNpL29md19wY2liLmMKKysrIGIvc3lzL3NwYXJjNjQvcGNpL29md19wY2liLmMKQEAgLTQ2
LDE0ICs0NiwxNiBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAKICNpbmNsdWRlIDxkZXYvb2Z3
L29md19idXMuaD4KICNpbmNsdWRlIDxkZXYvb2Z3L29wZW5maXJtLmg+CisjaW5jbHVkZSA8ZGV2
L29mdy9vZndfYnVzX3N1YnIuaD4KKyNpbmNsdWRlIDxkZXYvb2Z3L29md19wY2kuaD4KIAogI2lu
Y2x1ZGUgPGRldi9wY2kvcGNpcmVnLmg+CiAjaW5jbHVkZSA8ZGV2L3BjaS9wY2l2YXIuaD4KICNp
bmNsdWRlIDxkZXYvcGNpL3BjaWJfcHJpdmF0ZS5oPgogCiAjaW5jbHVkZSAicGNpYl9pZi5oIgor
I2luY2x1ZGUgIm9md19wY2lfaWYuaCIKIAotI2luY2x1ZGUgPHNwYXJjNjQvcGNpL29md19wY2ku
aD4KICNpbmNsdWRlIDxzcGFyYzY0L3BjaS9vZndfcGNpYl9zdWJyLmg+CiAKICNkZWZpbmUJUENJ
X0RFVklEX0FMSV9NNTI0OQkweDUyNDkxMGI5CmRpZmYgLS1naXQgYS9zeXMvc3BhcmM2NC9wY2kv
b2Z3X3BjaWJfc3Vici5jIGIvc3lzL3NwYXJjNjQvcGNpL29md19wY2liX3N1YnIuYwppbmRleCAx
NGZhNzJiLi40YzJiMTEzIDEwMDY0NAotLS0gYS9zeXMvc3BhcmM2NC9wY2kvb2Z3X3BjaWJfc3Vi
ci5jCisrKyBiL3N5cy9zcGFyYzY0L3BjaS9vZndfcGNpYl9zdWJyLmMKQEAgLTM0LDggKzM0LDkg
QEAgX19GQlNESUQoIiRGcmVlQlNEJCIpOwogI2luY2x1ZGUgPHN5cy9ybWFuLmg+CiAKICNpbmNs
dWRlIDxkZXYvb2Z3L29md19idXMuaD4KLSNpbmNsdWRlIDxkZXYvb2Z3L29md19wY2kuaD4KICNp
bmNsdWRlIDxkZXYvb2Z3L29wZW5maXJtLmg+CisjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzX3N1
YnIuaD4KKyNpbmNsdWRlIDxkZXYvb2Z3L29md19wY2kuaD4KIAogI2luY2x1ZGUgPG1hY2hpbmUv
YnVzLmg+CiAKQEAgLTQ1LDcgKzQ2LDYgQEAgX19GQlNESUQoIiRGcmVlQlNEJCIpOwogCiAjaW5j
bHVkZSAicGNpYl9pZi5oIgogCi0jaW5jbHVkZSA8c3BhcmM2NC9wY2kvb2Z3X3BjaS5oPgogI2lu
Y2x1ZGUgPHNwYXJjNjQvcGNpL29md19wY2liX3N1YnIuaD4KIAogdm9pZApkaWZmIC0tZ2l0IGEv
c3lzL3NwYXJjNjQvcGNpL29md19wY2lidXMuYyBiL3N5cy9zcGFyYzY0L3BjaS9vZndfcGNpYnVz
LmMKaW5kZXggOTJiOWY3Ni4uMTc4NjA2YiAxMDA2NDQKLS0tIGEvc3lzL3NwYXJjNjQvcGNpL29m
d19wY2lidXMuYworKysgYi9zeXMvc3BhcmM2NC9wY2kvb2Z3X3BjaWJ1cy5jCkBAIC0zOSwxMCAr
MzksMTIgQEAgX19GQlNESUQoIiRGcmVlQlNEJCIpOwogI2luY2x1ZGUgPHN5cy9saWJrZXJuLmg+
CiAjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgogI2luY2x1ZGUgPHN5cy9wY2lpby5oPgorI2luY2x1
ZGUgPHN5cy9ybWFuLmg+CiAKICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXMuaD4KLSNpbmNsdWRl
IDxkZXYvb2Z3L29md19wY2kuaD4KICNpbmNsdWRlIDxkZXYvb2Z3L29wZW5maXJtLmg+CisjaW5j
bHVkZSA8ZGV2L29mdy9vZndfYnVzX3N1YnIuaD4KKyNpbmNsdWRlIDxkZXYvb2Z3L29md19wY2ku
aD4KIAogI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CiAjaWZuZGVmIFNVTjRWCkBAIC01NSwxMCAr
NTcsOSBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAjaW5jbHVkZSA8ZGV2L3BjaS9wY2l2YXIu
aD4KICNpbmNsdWRlIDxkZXYvcGNpL3BjaV9wcml2YXRlLmg+CiAKLSNpbmNsdWRlIDxzcGFyYzY0
L3BjaS9vZndfcGNpLmg+Ci0KICNpbmNsdWRlICJwY2liX2lmLmgiCiAjaW5jbHVkZSAicGNpX2lm
LmgiCisjaW5jbHVkZSAib2Z3X3BjaV9pZi5oIgogCiAvKiBIZWxwZXIgZnVuY3Rpb25zICovCiBz
dGF0aWMgdm9pZCBvZndfcGNpYnVzX3NldHVwX2RldmljZShkZXZpY2VfdCBicmlkZ2UsIHVpbnQz
Ml90IGNsb2NrLApkaWZmIC0tZ2l0IGEvc3lzL3NwYXJjNjQvcGNpL3BzeWNoby5jIGIvc3lzL3Nw
YXJjNjQvcGNpL3BzeWNoby5jCmluZGV4IDQ5NmRmOTYuLjM0NDFkMDggMTAwNjQ0Ci0tLSBhL3N5
cy9zcGFyYzY0L3BjaS9wc3ljaG8uYworKysgYi9zeXMvc3BhcmM2NC9wY2kvcHN5Y2hvLmMKQEAg
LTU4LDYgKzU4LDggQEAgX19GQlNESUQoIiRGcmVlQlNEJCIpOwogCiAjaW5jbHVkZSA8ZGV2L29m
dy9vZndfYnVzLmg+CiAjaW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgorI2luY2x1ZGUgPGRl
di9vZncvb2Z3X2J1c19zdWJyLmg+CisjaW5jbHVkZSA8ZGV2L29mdy9vZndfcGNpLmg+CiAKICNp
bmNsdWRlIDxtYWNoaW5lL2J1cy5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYnVzX2NvbW1vbi5oPgpA
QCAtNzAsMTEgKzcyLDExIEBAIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKICNpbmNsdWRlIDxkZXYv
cGNpL3BjaXJlZy5oPgogI2luY2x1ZGUgPGRldi9wY2kvcGNpdmFyLmg+CiAKLSNpbmNsdWRlIDxz
cGFyYzY0L3BjaS9vZndfcGNpLmg+CiAjaW5jbHVkZSA8c3BhcmM2NC9wY2kvcHN5Y2hvcmVnLmg+
CiAjaW5jbHVkZSA8c3BhcmM2NC9wY2kvcHN5Y2hvdmFyLmg+CiAKICNpbmNsdWRlICJwY2liX2lm
LmgiCisjaW5jbHVkZSAib2Z3X3BjaV9pZi5oIgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBzeWNo
b19kZXNjICpwc3ljaG9fZmluZF9kZXNjKGNvbnN0IHN0cnVjdCBwc3ljaG9fZGVzYyAqLAogICAg
IGNvbnN0IGNoYXIgKik7CkBAIC0xMzAsOCArMTMyLDggQEAgc3RhdGljIGRldmljZV9tZXRob2Rf
dCBwc3ljaG9fbWV0aG9kc1tdID0gewogCURFVk1FVEhPRChidXNfc2V0dXBfaW50ciwJcHN5Y2hv
X3NldHVwX2ludHIpLAogCURFVk1FVEhPRChidXNfdGVhcmRvd25faW50ciwJYnVzX2dlbmVyaWNf
dGVhcmRvd25faW50ciksCiAJREVWTUVUSE9EKGJ1c19hbGxvY19yZXNvdXJjZSwJcHN5Y2hvX2Fs
bG9jX3Jlc291cmNlKSwKLQlERVZNRVRIT0QoYnVzX2FjdGl2YXRlX3Jlc291cmNlLCBvZndfcGNp
X2FjdGl2YXRlX3Jlc291cmNlKSwKLQlERVZNRVRIT0QoYnVzX2RlYWN0aXZhdGVfcmVzb3VyY2Us
IGJ1c19nZW5lcmljX2RlYWN0aXZhdGVfcmVzb3VyY2UpLAorCURFVk1FVEhPRChidXNfYWN0aXZh
dGVfcmVzb3VyY2UsICAgc3BhcmM2NF9vZndfcGNpX2FjdGl2YXRlX3Jlc291cmNlKSwKKwlERVZN
RVRIT0QoYnVzX2RlYWN0aXZhdGVfcmVzb3VyY2UsIHNwYXJjNjRfb2Z3X3BjaV9kZWFjdGl2YXRl
X3Jlc291cmNlKSwKIAlERVZNRVRIT0QoYnVzX2FkanVzdF9yZXNvdXJjZSwJb2Z3X3BjaV9hZGp1
c3RfcmVzb3VyY2UpLAogCURFVk1FVEhPRChidXNfcmVsZWFzZV9yZXNvdXJjZSwJYnVzX2dlbmVy
aWNfcmVsZWFzZV9yZXNvdXJjZSksCiAJREVWTUVUSE9EKGJ1c19nZXRfZG1hX3RhZywJb2Z3X3Bj
aV9nZXRfZG1hX3RhZyksCkBAIC01NDEsOCArNTQzLDggQEAgcHN5Y2hvX2F0dGFjaChkZXZpY2Vf
dCBkZXYpCiAJCXBhbmljKCIlczogb2Z3X3BjaV9hdHRhY2hfY29tbW9uKCkgZmFpbGVkIiwgX19m
dW5jX18pOwogCiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgUENJIGVycm9yIGJpdHMuICovCi0JUENJ
Ql9XUklURV9DT05GSUcoZGV2LCBzYy0+c2Nfb3BzLnNjX3BjaV9zZWNidXMsIFBDU19ERVZJQ0Us
IFBDU19GVU5DLAotCSAgICBQQ0lSX1NUQVRVUywgUENJQl9SRUFEX0NPTkZJRyhkZXYsIHNjLT5z
Y19vcHMuc2NfcGNpX3NlY2J1cywKKwlQQ0lCX1dSSVRFX0NPTkZJRyhkZXYsIHNjLT5zY19vcHMu
c2Nfc2VjYnVzLCBQQ1NfREVWSUNFLCBQQ1NfRlVOQywKKwkgICAgUENJUl9TVEFUVVMsIFBDSUJf
UkVBRF9DT05GSUcoZGV2LCBzYy0+c2Nfb3BzLnNjX3NlY2J1cywKIAkgICAgUENTX0RFVklDRSwg
UENTX0ZVTkMsIFBDSVJfU1RBVFVTLCAyKSwgMik7CiAJUENJQ1RMX1dSSVRFOChzYywgUENSX0NT
LCBQQ0lDVExfUkVBRDgoc2MsIFBDUl9DUykpOwogCVBDSUNUTF9XUklURTgoc2MsIFBDUl9BRlMs
IFBDSUNUTF9SRUFEOChzYywgUENSX0FGUykpOwpAQCAtNjA1LDE5ICs2MDcsMTkgQEAgcHN5Y2hv
X2F0dGFjaChkZXZpY2VfdCBkZXYpCiAJICogU2V0IHRoZSBsYXRlbmN5IHRpbWVyIHJlZ2lzdGVy
IGFzIHRoaXMgaXNuJ3QgYWx3YXlzIGRvbmUgYnkgdGhlCiAJICogZmlybXdhcmUuCiAJICovCi0J
UENJQl9XUklURV9DT05GSUcoZGV2LCBzYy0+c2Nfb3BzLnNjX3BjaV9zZWNidXMsIFBDU19ERVZJ
Q0UsIFBDU19GVU5DLAorCVBDSUJfV1JJVEVfQ09ORklHKGRldiwgc2MtPnNjX29wcy5zY19zZWNi
dXMsIFBDU19ERVZJQ0UsIFBDU19GVU5DLAogCSAgICBQQ0lSX0xBVFRJTUVSLCBPRldfUENJX0xB
VEVOQ1ksIDEpOwogCiAJZm9yIChpID0gUENJUl9WRU5ET1I7IGkgPCBQQ0lSX1NUQVRVUzsgaSAr
PSBzaXplb2YodWludDE2X3QpKQogCQlsZTE2ZW5jKCZzYy0+c2NfcGNpX2hwYmNmZ1tpXSwKLQkJ
ICAgIGJ1c19zcGFjZV9yZWFkXzIoc2MtPnNjX29wcy5zY19wY2lfY2ZndCwKLQkJICAgIHNjLT5z
Y19vcHMuc2NfcGNpX2JoW09GV19QQ0lfQ1NfQ09ORklHXSwKLQkJICAgIFBTWUNIT19DT05GX09G
RihzYy0+c2Nfb3BzLnNjX3BjaV9zZWNidXMsIFBDU19ERVZJQ0UsCisJCSAgICBidXNfc3BhY2Vf
cmVhZF8yKHNjLT5zY19vcHMuc2NfY2ZndCwKKwkJICAgIHNjLT5zY19vcHMuc2NfYmhbT0ZXX1BD
SV9DT05GSUddLAorCQkgICAgUFNZQ0hPX0NPTkZfT0ZGKHNjLT5zY19vcHMuc2Nfc2VjYnVzLCBQ
Q1NfREVWSUNFLAogCQkgICAgUENTX0ZVTkMsIGkpKSk7CiAJZm9yIChpID0gUENJUl9SRVZJRDsg
aSA8PSBQQ0lSX0JJU1Q7IGkgKz0gc2l6ZW9mKHVpbnQ4X3QpKQotCQlzYy0+c2NfcGNpX2hwYmNm
Z1tpXSA9IGJ1c19zcGFjZV9yZWFkXzEoc2MtPnNjX29wcy5zY19wY2lfY2ZndCwKLQkJICAgIHNj
LT5zY19vcHMuc2NfcGNpX2JoW09GV19QQ0lfQ1NfQ09ORklHXSwgUFNZQ0hPX0NPTkZfT0ZGKAot
CQkgICAgc2MtPnNjX29wcy5zY19wY2lfc2VjYnVzLCBQQ1NfREVWSUNFLCBQQ1NfRlVOQywgaSkp
OworCQlzYy0+c2NfcGNpX2hwYmNmZ1tpXSA9IGJ1c19zcGFjZV9yZWFkXzEoc2MtPnNjX29wcy5z
Y19jZmd0LAorCQkgICAgc2MtPnNjX29wcy5zY19iaFtPRldfUENJX0NPTkZJR10sIFBTWUNIT19D
T05GX09GRigKKwkJICAgIHNjLT5zY19vcHMuc2Nfc2VjYnVzLCBQQ1NfREVWSUNFLCBQQ1NfRlVO
QywgaSkpOwogCiAJLyoKIAkgKiBPbiBFMjUwIHRoZSBpbnRlcnJ1cHQgbWFwIGVudHJ5IGZvciB0
aGUgRUJ1cyBicmlkZ2UgaXMgd3JvbmcsCkBAIC04ODIsNyArODg0LDcgQEAgcHN5Y2hvX3JlYWRf
Y29uZmlnKGRldmljZV90IGRldiwgdV9pbnQgYnVzLCB1X2ludCBzbG90LCB1X2ludCBmdW5jLCB1
X2ludCByZWcsCiAJICogVGhlIFBzeWNobyBicmlkZ2VzIGNvbnRhaW4gYSBkdXBlIG9mIHRoZWly
IGhlYWRlciBhdCAweDgwCiAJICogd2hpY2ggd2UgbnVsbGlmeSB0aGF0IHdheSBhbHNvLgogCSAq
LwotCWlmIChidXMgPT0gc2MtPnNjX29wcy5zY19wY2lfc2VjYnVzICYmIHNsb3QgPT0gUENTX0RF
VklDRSAmJgorCWlmIChidXMgPT0gc2MtPnNjX29wcy5zY19zZWNidXMgJiYgc2xvdCA9PSBQQ1Nf
REVWSUNFICYmCiAJICAgIGZ1bmMgPT0gUENTX0ZVTkMpIHsKIAkJaWYgKHJlZyAlIHdpZHRoICE9
IDApCiAJCQlyZXR1cm4gKC0xKTsKQEAgLTg5Myw5ICs4OTUsOSBAQCBwc3ljaG9fcmVhZF9jb25m
aWcoZGV2aWNlX3QgZGV2LCB1X2ludCBidXMsIHVfaW50IHNsb3QsIHVfaW50IGZ1bmMsIHVfaW50
IHJlZywKIAkJaWYgKChyZWcgPCBQQ0lSX1NUQVRVUyAmJiByZWcgKyB3aWR0aCA+IFBDSVJfU1RB
VFVTKSB8fAogCQkgICAgcmVnID09IFBDSVJfU1RBVFVTIHx8IHJlZyA9PSBQQ0lSX1NUQVRVUyAr
IDEpCiAJCQlsZTE2ZW5jKCZzYy0+c2NfcGNpX2hwYmNmZ1tQQ0lSX1NUQVRVU10sCi0JCQkgICAg
YnVzX3NwYWNlX3JlYWRfMihzYy0+c2Nfb3BzLnNjX3BjaV9jZmd0LAotCQkJICAgIHNjLT5zY19v
cHMuc2NfcGNpX2JoW09GV19QQ0lfQ1NfQ09ORklHXSwKLQkJCSAgICBQU1lDSE9fQ09ORl9PRkYo
c2MtPnNjX29wcy5zY19wY2lfc2VjYnVzLAorCQkJICAgIGJ1c19zcGFjZV9yZWFkXzIoc2MtPnNj
X29wcy5zY19jZmd0LAorCQkJICAgIHNjLT5zY19vcHMuc2NfYmhbT0ZXX1BDSV9DT05GSUddLAor
CQkJICAgIFBTWUNIT19DT05GX09GRihzYy0+c2Nfb3BzLnNjX3NlY2J1cywKIAkJCSAgICBQQ1Nf
REVWSUNFLCBQQ1NfRlVOQywgUENJUl9TVEFUVVMpKSk7CiAKIAkJc3dpdGNoICh3aWR0aCkgewpk
aWZmIC0tZ2l0IGEvc3lzL3NwYXJjNjQvcGNpL3NjaGl6by5jIGIvc3lzL3NwYXJjNjQvcGNpL3Nj
aGl6by5jCmluZGV4IGE5NjE1NWIuLjhlNDRhNWEgMTAwNjQ0Ci0tLSBhL3N5cy9zcGFyYzY0L3Bj
aS9zY2hpem8uYworKysgYi9zeXMvc3BhcmM2NC9wY2kvc2NoaXpvLmMKQEAgLTU4LDYgKzU4LDgg
QEAgX19GQlNESUQoIiRGcmVlQlNEJCIpOwogCiAjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzLmg+
CiAjaW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1
c19zdWJyLmg+CisjaW5jbHVkZSA8ZGV2L29mdy9vZndfcGNpLmg+CiAKICNpbmNsdWRlIDxtYWNo
aW5lL2J1cy5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYnVzX2NvbW1vbi5oPgpAQCAtNjksMTEgKzcx
LDExIEBAIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKICNpbmNsdWRlIDxkZXYvcGNpL3BjaXJlZy5o
PgogI2luY2x1ZGUgPGRldi9wY2kvcGNpdmFyLmg+CiAKLSNpbmNsdWRlIDxzcGFyYzY0L3BjaS9v
ZndfcGNpLmg+CiAjaW5jbHVkZSA8c3BhcmM2NC9wY2kvc2NoaXpvcmVnLmg+CiAjaW5jbHVkZSA8
c3BhcmM2NC9wY2kvc2NoaXpvdmFyLmg+CiAKICNpbmNsdWRlICJwY2liX2lmLmgiCisjaW5jbHVk
ZSAib2Z3X3BjaV9pZi5oIgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNjaGl6b19kZXNjICpzY2hp
em9fZ2V0X2Rlc2MoZGV2aWNlX3QpOwogc3RhdGljIHZvaWQgc2NoaXpvX3NldF9pbnRyKHN0cnVj
dCBzY2hpem9fc29mdGMgKiwgdV9pbnQsIHVfaW50LApAQCAtMTI3LDggKzEyOSw4IEBAIHN0YXRp
YyBkZXZpY2VfbWV0aG9kX3Qgc2NoaXpvX21ldGhvZHNbXSA9IHsKIAlERVZNRVRIT0QoYnVzX3Nl
dHVwX2ludHIsCXNjaGl6b19zZXR1cF9pbnRyKSwKIAlERVZNRVRIT0QoYnVzX3RlYXJkb3duX2lu
dHIsCWJ1c19nZW5lcmljX3RlYXJkb3duX2ludHIpLAogCURFVk1FVEhPRChidXNfYWxsb2NfcmVz
b3VyY2UsCXNjaGl6b19hbGxvY19yZXNvdXJjZSksCi0JREVWTUVUSE9EKGJ1c19hY3RpdmF0ZV9y
ZXNvdXJjZSwgb2Z3X3BjaV9hY3RpdmF0ZV9yZXNvdXJjZSksCi0JREVWTUVUSE9EKGJ1c19kZWFj
dGl2YXRlX3Jlc291cmNlLCBidXNfZ2VuZXJpY19kZWFjdGl2YXRlX3Jlc291cmNlKSwKKwlERVZN
RVRIT0QoYnVzX2FjdGl2YXRlX3Jlc291cmNlLCAgIHNwYXJjNjRfb2Z3X3BjaV9hY3RpdmF0ZV9y
ZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1c19kZWFjdGl2YXRlX3Jlc291cmNlLCBzcGFyYzY0X29m
d19wY2lfZGVhY3RpdmF0ZV9yZXNvdXJjZSksCiAJREVWTUVUSE9EKGJ1c19hZGp1c3RfcmVzb3Vy
Y2UsCW9md19wY2lfYWRqdXN0X3Jlc291cmNlKSwKIAlERVZNRVRIT0QoYnVzX3JlbGVhc2VfcmVz
b3VyY2UsCWJ1c19nZW5lcmljX3JlbGVhc2VfcmVzb3VyY2UpLAogCURFVk1FVEhPRChidXNfZ2V0
X2RtYV90YWcsCW9md19wY2lfZ2V0X2RtYV90YWcpLApAQCAtNTQ4LDkgKzU1MCw5IEBAIHNjaGl6
b19hdHRhY2goZGV2aWNlX3QgZGV2KQogCQlwYW5pYygiJXM6IG9md19wY2lfYXR0YWNoX2NvbW1v
bigpIGZhaWxlZCIsIF9fZnVuY19fKTsKIAogCS8qIENsZWFyIGFueSBwZW5kaW5nIFBDSSBlcnJv
ciBiaXRzLiAqLwotCVBDSUJfV1JJVEVfQ09ORklHKGRldiwgc2MtPnNjX29wcy5zY19wY2lfc2Vj
YnVzLCBTVFhfQ1NfREVWSUNFLAorCVBDSUJfV1JJVEVfQ09ORklHKGRldiwgc2MtPnNjX29wcy5z
Y19zZWNidXMsIFNUWF9DU19ERVZJQ0UsCiAJICAgIFNUWF9DU19GVU5DLCBQQ0lSX1NUQVRVUywg
UENJQl9SRUFEX0NPTkZJRyhkZXYsCi0JICAgIHNjLT5zY19vcHMuc2NfcGNpX3NlY2J1cywgU1RY
X0NTX0RFVklDRSwgU1RYX0NTX0ZVTkMsIFBDSVJfU1RBVFVTLAorCSAgICBzYy0+c2Nfb3BzLnNj
X3NlY2J1cywgU1RYX0NTX0RFVklDRSwgU1RYX0NTX0ZVTkMsIFBDSVJfU1RBVFVTLAogCSAgICAy
KSwgMik7CiAJU0NISVpPX1BDSV9TRVQoc2MsIFNUWF9QQ0lfQ1RSTCwgU0NISVpPX1BDSV9SRUFE
Xzgoc2MsIFNUWF9QQ0lfQ1RSTCkpOwogCVNDSElaT19QQ0lfU0VUKHNjLCBTVFhfUENJX0FGU1Is
IFNDSElaT19QQ0lfUkVBRF84KHNjLCBTVFhfUENJX0FGU1IpKTsKQEAgLTY3OSw3ICs2ODEsNyBA
QCBzY2hpem9fYXR0YWNoKGRldmljZV90IGRldikKIAkgKiBTZXQgdGhlIGxhdGVuY3kgdGltZXIg
cmVnaXN0ZXIgYXMgdGhpcyBpc24ndCBhbHdheXMgZG9uZSBieSB0aGUKIAkgKiBmaXJtd2FyZS4K
IAkgKi8KLQlQQ0lCX1dSSVRFX0NPTkZJRyhkZXYsIHNjLT5zY19vcHMuc2NfcGNpX3NlY2J1cywg
U1RYX0NTX0RFVklDRSwKKwlQQ0lCX1dSSVRFX0NPTkZJRyhkZXYsIHNjLT5zY19vcHMuc2Nfc2Vj
YnVzLCBTVFhfQ1NfREVWSUNFLAogCSAgICBTVFhfQ1NfRlVOQywgUENJUl9MQVRUSU1FUiwgT0ZX
X1BDSV9MQVRFTkNZLCAxKTsKIAogI2RlZmluZQlTQ0hJWk9fU1lTQ1RMX0FERF9VSU5UKG5hbWUs
IGFyZywgZGVzYykJCQkJXApAQCAtODA0LDcgKzgwNiw3IEBAIHNjaGl6b19wY2lfYnVzKHZvaWQg
KmFyZykKIAkJeHN0YXQgPSBTQ0hJWk9fUENJX1JFQURfOChzYywgWE1TX1BDSV9YX0VSUl9TVEFU
KTsKIAllbHNlCiAJCXhzdGF0ID0gMDsKLQlzdGF0dXMgPSBQQ0lCX1JFQURfQ09ORklHKHNjLT5z
Y19kZXYsIHNjLT5zY19vcHMuc2NfcGNpX3NlY2J1cywKKwlzdGF0dXMgPSBQQ0lCX1JFQURfQ09O
RklHKHNjLT5zY19kZXYsIHNjLT5zY19vcHMuc2Nfc2VjYnVzLAogCSAgICBTVFhfQ1NfREVWSUNF
LCBTVFhfQ1NfRlVOQywgUENJUl9TVEFUVVMsIDIpOwogCiAJLyoKQEAgLTg0NSw3ICs4NDcsNyBA
QCBzY2hpem9fcGNpX2J1cyh2b2lkICphcmcpCiAJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW9t
bXUsICh1bnNpZ25lZCBsb25nIGxvbmcpeHN0YXQsIHN0YXR1cyk7CiAKIAkvKiBDbGVhciB0aGUg
ZXJyb3IgYml0cyB0aGF0IHdlIGNhdWdodC4gKi8KLQlQQ0lCX1dSSVRFX0NPTkZJRyhzYy0+c2Nf
ZGV2LCBzYy0+c2Nfb3BzLnNjX3BjaV9zZWNidXMsIFNUWF9DU19ERVZJQ0UsCisJUENJQl9XUklU
RV9DT05GSUcoc2MtPnNjX2Rldiwgc2MtPnNjX29wcy5zY19zZWNidXMsIFNUWF9DU19ERVZJQ0Us
CiAJICAgIFNUWF9DU19GVU5DLCBQQ0lSX1NUQVRVUywgc3RhdHVzLCAyKTsKIAlTQ0hJWk9fUENJ
X1dSSVRFXzgoc2MsIFNUWF9QQ0lfQ1RSTCwgY3NyKTsKIAlTQ0hJWk9fUENJX1dSSVRFXzgoc2Ms
IFNUWF9QQ0lfQUZTUiwgYWZzcik7CkBAIC05NzIsNyArOTc0LDcgQEAgc2NoaXpvX3JlYWRfY29u
ZmlnKGRldmljZV90IGRldiwgdV9pbnQgYnVzLCB1X2ludCBzbG90LCB1X2ludCBmdW5jLCB1X2lu
dCByZWcsCiAJICogVGhlIFNjaGl6byBicmlkZ2VzIGNvbnRhaW4gYSBkdXBlIG9mIHRoZWlyIGhl
YWRlciBhdCAweDgwLgogCSAqLwogCWlmIChzYy0+c2NfbW9kZSA9PSBTQ0hJWk9fTU9ERV9TQ1og
JiYKLQkgICAgYnVzID09IHNjLT5zY19vcHMuc2NfcGNpX3NlY2J1cyAmJiBzbG90ID09IFNUWF9D
U19ERVZJQ0UgJiYKKwkgICAgYnVzID09IHNjLT5zY19vcHMuc2Nfc2VjYnVzICYmIHNsb3QgPT0g
U1RYX0NTX0RFVklDRSAmJgogCSAgICBmdW5jID09IFNUWF9DU19GVU5DICYmIHJlZyArIHdpZHRo
ID4gMHg4MCkKIAkJcmV0dXJuICgwKTsKIApkaWZmIC0tZ2l0IGEvc3lzL3NwYXJjNjQvcGNpL3Nw
YXJjNjRfb2Z3X3BjaS5jIGIvc3lzL3NwYXJjNjQvcGNpL3NwYXJjNjRfb2Z3X3BjaS5jCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOGQ1OTIKLS0tIC9kZXYvbnVsbAorKysg
Yi9zeXMvc3BhcmM2NC9wY2kvc3BhcmM2NF9vZndfcGNpLmMKQEAgLTAsMCArMSwzMTcgQEAKKy8q
LQorICogQ29weXJpZ2h0IChjKSAxOTk5LCAyMDAwIE1hdHRoZXcgUi4gR3JlZW4KKyAqIENvcHly
aWdodCAoYykgMjAwMSAtIDIwMDMgYnkgVGhvbWFzIE1vZXN0bCA8dG1tQEZyZWVCU0Qub3JnPgor
ICogQ29weXJpZ2h0IChjKSAyMDA1IC0gMjAxNSBieSBNYXJpdXMgU3Ryb2JsIDxtYXJpdXNARnJl
ZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5h
bWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzCisgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
VVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
CisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCWZyb206IE5ldEJT
RDogcHN5Y2hvLmMsdiAxLjM1IDIwMDEvMDkvMTAgMTY6MTc6MDYgZWVoIEV4cAorICovCisKKyNp
bmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUg
Im9wdF9vZndfcGNpLmgiCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMv
c3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgor
I2luY2x1ZGUgPHN5cy9ybWFuLmg+CisKKyNpbmNsdWRlIDxkZXYvb2Z3L29wZW5maXJtLmg+Cisj
aW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzLmg+CisjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzX3N1
YnIuaD4KKyNpbmNsdWRlIDxkZXYvb2Z3L29md19wY2kuaD4KKworI2luY2x1ZGUgPGRldi9wY2kv
cGNpcmVnLmg+CisjaW5jbHVkZSA8ZGV2L3BjaS9wY2l2YXIuaD4KKworI2luY2x1ZGUgPG1hY2hp
bmUvYXNpLmg+CisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2J1
c19wcml2YXRlLmg+CisjaW5jbHVkZSA8bWFjaGluZS9jcHVmdW5jLmg+CisjaW5jbHVkZSA8bWFj
aGluZS9mc3IuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3Jlc291cmNlLmg+CisKKyNpbmNsdWRlICJv
ZndfcGNpX2lmLmgiCisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QJc3BhcmM2NF9vZndfcGNpX21l
dGhvZHNbXSA9IHsKKworCURFVk1FVEhPRChidXNfYWN0aXZhdGVfcmVzb3VyY2UsCXNwYXJjNjRf
b2Z3X3BjaV9hY3RpdmF0ZV9yZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1c19kZWFjdGl2YXRlX3Jl
c291cmNlLAlzcGFyYzY0X29md19wY2lfZGVhY3RpdmF0ZV9yZXNvdXJjZSksCisKKwlERVZNRVRI
T0RfRU5ECit9OworCitERUZJTkVfQ0xBU1NfMShvZndfcGNpLCBzcGFyYzY0X29md19wY2lfZHJp
dmVyLCBzcGFyYzY0X29md19wY2lfbWV0aG9kcywKKyAgICBzaXplb2Yoc3RydWN0IG9md19wY2lf
c29mdGMpLCBvZndfcGNpX2RyaXZlcik7CisKK2ludAorb2Z3X3BjaV9hdHRhY2hfY29tbW9uKGRl
dmljZV90IGRldiwgYnVzX2RtYV90YWdfdCBkbWF0LCB1X2xvbmcgaW9zaXplLAorICAgIHVfbG9u
ZyBtZW1zaXplKQoreworCXN0cnVjdCBvZndfcGNpX3NvZnRjICpzYzsKKwlzdHJ1Y3Qgb2Z3X3Bj
aV9yYW5nZSAqcmFuZ2VzOworCXBoYW5kbGVfdCBub2RlOworCXVpbnQzMl90IHByb3BfYXJyYXlb
Ml07CisJdV9pbnQgaSwgaiwgbnJhbmdlOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7
CisJbm9kZSA9IG9md19idXNfZ2V0X25vZGUoZGV2KTsKKwlzYy0+c2Nfbm9kZSA9IG5vZGU7CisJ
c2MtPnNjX2RtYXQgPSBkbWF0OworCisJLyogSW5pdGlhbGl6ZSBtZW1vcnkgYW5kIEkvTyBybWFu
cy4gKi8KKwlzYy0+c2NfaW9fcm1hbi5ybV90eXBlID0gUk1BTl9BUlJBWTsKKwlzYy0+c2NfaW9f
cm1hbi5ybV9kZXNjciA9ICJQQ0kgSS9PIFBvcnRzIjsKKwlpZiAocm1hbl9pbml0KCZzYy0+c2Nf
aW9fcm1hbikgIT0gMCB8fAorCSAgICBybWFuX21hbmFnZV9yZWdpb24oJnNjLT5zY19pb19ybWFu
LCAwLCBpb3NpemUpICE9IDApIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJmYWlsZWQgdG8gc2V0
IHVwIEkvTyBybWFuXG4iKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCXNjLT5zY19tZW1fcm1h
bi5ybV90eXBlID0gUk1BTl9BUlJBWTsKKwlzYy0+c2NfbWVtX3JtYW4ucm1fZGVzY3IgPSAiUENJ
IE1lbW9yeSI7CisJaWYgKHJtYW5faW5pdCgmc2MtPnNjX21lbV9ybWFuKSAhPSAwIHx8CisJICAg
IHJtYW5fbWFuYWdlX3JlZ2lvbigmc2MtPnNjX21lbV9ybWFuLCAwLCBtZW1zaXplKSAhPSAwKSB7
CisJCWRldmljZV9wcmludGYoZGV2LCAiZmFpbGVkIHRvIHNldCB1cCBtZW1vcnkgcm1hblxuIik7
CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCS8qCisJICogRmluZCB0aGUgYWRkcmVzc2VzIG9m
IHRoZSB2YXJpb3VzIGJ1cyBzcGFjZXMuICBUaGUgcGh5c2ljYWwKKwkgKiBzdGFydCBhZGRyZXNz
ZXMgb2YgdGhlIHJhbmdlcyBhcmUgdGhlIGNvbmZpZ3VyYXRpb24sIEkvTyBhbmQKKwkgKiBtZW1v
cnkgaGFuZGxlcy4gIFRoZXJlIHNob3VsZCBub3QgYmUgbXVsdGlwbGUgb25lcyBvZiBvbmUga2lu
ZC4KKwkgKi8KKwlucmFuZ2UgPSBPRl9nZXRlbmNwcm9wX2FsbG9jKG5vZGUsICJyYW5nZXMiLCBz
aXplb2YoKnJhbmdlcyksCisJICAgICh2b2lkICoqKSZyYW5nZXMpOworCWZvciAoaSA9IDA7IGkg
PCBucmFuZ2U7IGkrKykgeworCQlqID0gcmFuZ2VzW2ldLnBjaV9oaSAmIE9GV19QQ0lfUEhZU19I
SV9TUEFDRU1BU0s7CisJCWlmIChzYy0+c2NfYmhbal0gIT0gMCkgeworCQkJZGV2aWNlX3ByaW50
ZihkZXYsICJkdXBsaWNhdGUgcmFuZ2UgZm9yIHNwYWNlICVkXG4iLAorCQkJICAgIGopOworCQkJ
ZnJlZShyYW5nZXMsIE1fT0ZXUFJPUCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKwkJc2Mt
PnNjX2JoW2pdID0gcmFuZ2VzW2ldLmhvc3Q7CisJfQorCWZyZWUocmFuZ2VzLCBNX09GV1BST1Ap
OworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgZXhwZWN0ZWQgcmFuZ2VzIGFyZSBhY3R1
YWxseSBwcmVzZW50LgorCSAqIFRoZSBPRldfUENJX01FTTY0IG9uZSBpcyBub3QgY3VycmVudGx5
IHVzZWQuCisJICovCisJaWYgKHNjLT5zY19iaFtPRldfUENJX0NPTkZJR10gPT0gMCkgeworCQlk
ZXZpY2VfcHJpbnRmKGRldiwgIm1pc3NpbmcgQ09ORklHIHJhbmdlXG4iKTsKKwkJcmV0dXJuIChF
TlhJTyk7CisJfQorCWlmIChzYy0+c2NfYmhbT0ZXX1BDSV9JT10gPT0gMCkgeworCQlkZXZpY2Vf
cHJpbnRmKGRldiwgIm1pc3NpbmcgSU8gcmFuZ2VcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9
CisJaWYgKHNjLT5zY19iaFtPRldfUENJX01FTTMyXSA9PSAwKSB7CisJCWRldmljZV9wcmludGYo
ZGV2LCAibWlzc2luZyBNRU0zMiByYW5nZVxuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKwor
CS8qIEFsbG9jYXRlIG91ciB0YWdzLiAqLworCXNjLT5zY19pb3QgPSBzcGFyYzY0X2FsbG9jX2J1
c190YWcoTlVMTCwgUENJX0lPX0JVU19TUEFDRSk7CisJaWYgKHNjLT5zY19pb3QgPT0gTlVMTCkg
eworCQlkZXZpY2VfcHJpbnRmKGRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBQQ0kgSS9PIHRhZ1xu
Iik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKwlzYy0+c2NfY2ZndCA9IHNwYXJjNjRfYWxsb2Nf
YnVzX3RhZyhOVUxMLCBQQ0lfQ09ORklHX0JVU19TUEFDRSk7CisJaWYgKHNjLT5zY19jZmd0ID09
IE5VTEwpIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsCisJCSAgICAiY291bGQgbm90IGFsbG9jYXRl
IFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIHRhZ1xuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0K
KworCS8qCisJICogR2V0IHRoZSBidXMgcmFuZ2UgZnJvbSB0aGUgZmlybXdhcmUuCisJICovCisJ
aSA9IE9GX2dldHByb3Aobm9kZSwgImJ1cy1yYW5nZSIsICh2b2lkICopcHJvcF9hcnJheSwKKwkg
ICAgc2l6ZW9mKHByb3BfYXJyYXkpKTsKKwlpZiAoaSA9PSAtMSkgeworCQlkZXZpY2VfcHJpbnRm
KGRldiwgImNvdWxkIG5vdCBnZXQgYnVzLXJhbmdlXG4iKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJ
fQorCWlmIChpICE9IHNpemVvZihwcm9wX2FycmF5KSkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwg
ImJyb2tlbiBidXMtcmFuZ2UgKCVkKSIsIGkpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCXNj
LT5zY19zZWNidXMgPSBwcm9wX2FycmF5WzBdOworCXNjLT5zY19zdWJidXMgPSBwcm9wX2FycmF5
WzFdOworCWlmIChib290dmVyYm9zZSAhPSAwKQorCQlkZXZpY2VfcHJpbnRmKGRldiwgImJ1cyBy
YW5nZSAldSB0byAldTsgUENJIGJ1cyAlZFxuIiwKKwkJICAgIHNjLT5zY19zZWNidXMsIHNjLT5z
Y19zdWJidXMsIHNjLT5zY19zZWNidXMpOworCisJb2Z3X2J1c19zZXR1cF9paW5mbyhub2RlLCAm
c2MtPnNjX3BjaV9paW5mbywgc2l6ZW9mKG9md19wY2lfaW50cl90KSk7CisKKwlyZXR1cm4gKDAp
OworfQorCit1aW50MzJfdAorb2Z3X3BjaV9yZWFkX2NvbmZpZ19jb21tb24oZGV2aWNlX3QgZGV2
LCB1X2ludCByZWdtYXgsIHVfbG9uZyBvZmZzZXQsCisgICAgdV9pbnQgYnVzLCB1X2ludCBzbG90
LCB1X2ludCBmdW5jLCB1X2ludCByZWcsIGludCB3aWR0aCkKK3sKKwlzdHJ1Y3Qgb2Z3X3BjaV9z
b2Z0YyAqc2M7CisJYnVzX3NwYWNlX2hhbmRsZV90IGJoOworCXVpbnQzMl90IHIsIHdyZDsKKwlp
bnQgaTsKKwl1aW50MTZfdCBzaHJ0OworCXVpbnQ4X3QgYnl0ZTsKKworCXNjID0gZGV2aWNlX2dl
dF9zb2Z0YyhkZXYpOworCWlmIChidXMgPCBzYy0+c2Nfc2VjYnVzIHx8IGJ1cyA+IHNjLT5zY19z
dWJidXMgfHwKKwkgICAgc2xvdCA+IFBDSV9TTE9UTUFYIHx8IGZ1bmMgPiBQQ0lfRlVOQ01BWCB8
fCByZWcgPiByZWdtYXgpCisJCXJldHVybiAoLTEpOworCisJYmggPSBzYy0+c2NfYmhbT0ZXX1BD
SV9DT05GSUddOworCXN3aXRjaCAod2lkdGgpIHsKKwljYXNlIDE6CisJCWkgPSBidXNfc3BhY2Vf
cGVla18xKHNjLT5zY19jZmd0LCBiaCwgb2Zmc2V0LCAmYnl0ZSk7CisJCXIgPSBieXRlOworCQli
cmVhazsKKwljYXNlIDI6CisJCWkgPSBidXNfc3BhY2VfcGVla18yKHNjLT5zY19jZmd0LCBiaCwg
b2Zmc2V0LCAmc2hydCk7CisJCXIgPSBzaHJ0OworCQlicmVhazsKKwljYXNlIDQ6CisJCWkgPSBi
dXNfc3BhY2VfcGVla180KHNjLT5zY19jZmd0LCBiaCwgb2Zmc2V0LCAmd3JkKTsKKwkJciA9IHdy
ZDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGFuaWMoIiVzOiBiYWQgd2lkdGggJWQiLCBfX2Z1
bmNfXywgd2lkdGgpOworCQkvKiBOT1RSRUFDSEVEICovCisJfQorCisJaWYgKGkpIHsKKyNpZmRl
ZiBPRldfUENJX0RFQlVHCisJCXByaW50ZigiJXM6IHJlYWQgZGF0YSBlcnJvciByZWFkaW5nOiAl
ZC4lZC4lZDogMHgleFxuIiwKKwkJICAgIF9fZnVuY19fLCBidXMsIHNsb3QsIGZ1bmMsIHJlZyk7
CisjZW5kaWYKKwkJciA9IC0xOworCX0KKwlyZXR1cm4gKHIpOworfQorCit2b2lkCitvZndfcGNp
X3dyaXRlX2NvbmZpZ19jb21tb24oZGV2aWNlX3QgZGV2LCB1X2ludCByZWdtYXgsIHVfbG9uZyBv
ZmZzZXQsCisgICAgdV9pbnQgYnVzLCB1X2ludCBzbG90LCB1X2ludCBmdW5jLCB1X2ludCByZWcs
IHVpbnQzMl90IHZhbCwgaW50IHdpZHRoKQoreworCXN0cnVjdCBvZndfcGNpX3NvZnRjICpzYzsK
KwlidXNfc3BhY2VfaGFuZGxlX3QgYmg7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK
KwlpZiAoYnVzIDwgc2MtPnNjX3NlY2J1cyB8fCBidXMgPiBzYy0+c2Nfc3ViYnVzIHx8CisJICAg
IHNsb3QgPiBQQ0lfU0xPVE1BWCB8fCBmdW5jID4gUENJX0ZVTkNNQVggfHwgcmVnID4gcmVnbWF4
KQorCQlyZXR1cm47CisKKwliaCA9IHNjLT5zY19iaFtPRldfUENJX0NPTkZJR107CisJc3dpdGNo
ICh3aWR0aCkgeworCWNhc2UgMToKKwkJYnVzX3NwYWNlX3dyaXRlXzEoc2MtPnNjX2NmZ3QsIGJo
LCBvZmZzZXQsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYnVzX3NwYWNlX3dyaXRlXzIo
c2MtPnNjX2NmZ3QsIGJoLCBvZmZzZXQsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJYnVz
X3NwYWNlX3dyaXRlXzQoc2MtPnNjX2NmZ3QsIGJoLCBvZmZzZXQsIHZhbCk7CisJCWJyZWFrOwor
CWRlZmF1bHQ6CisJCXBhbmljKCIlczogYmFkIHdpZHRoICVkIiwgX19mdW5jX18sIHdpZHRoKTsK
KwkJLyogTk9UUkVBQ0hFRCAqLworCX0KK30KKworb2Z3X3BjaV9pbnRyX3QKK29md19wY2lfcm91
dGVfaW50ZXJydXB0X2NvbW1vbihkZXZpY2VfdCBicmlkZ2UsIGRldmljZV90IGRldiwgaW50IHBp
bikKK3sKKwlzdHJ1Y3Qgb2Z3X3BjaV9zb2Z0YyAqc2M7CisJc3RydWN0IG9md19wY2lfcmVnaXN0
ZXIgcmVnOworCW9md19wY2lfaW50cl90IHBpbnRyLCBtaW50cjsKKworCXNjID0gZGV2aWNlX2dl
dF9zb2Z0YyhicmlkZ2UpOworCXBpbnRyID0gcGluOworCWlmIChvZndfYnVzX2xvb2t1cF9pbWFw
KG9md19idXNfZ2V0X25vZGUoZGV2KSwgJnNjLT5zY19wY2lfaWluZm8sCisJICAgICZyZWcsIHNp
emVvZihyZWcpLCAmcGludHIsIHNpemVvZihwaW50ciksICZtaW50ciwgc2l6ZW9mKG1pbnRyKSwK
KwkgICAgTlVMTCkgIT0gMCkKKwkJcmV0dXJuIChtaW50cik7CisJcmV0dXJuIChQQ0lfSU5WQUxJ
RF9JUlEpOworfQorCit2b2lkCitvZndfcGNpX2RtYW1hcF9zeW5jX3N0c3Rfb3JkZXJfY29tbW9u
KHZvaWQpCit7CisJc3RhdGljIHVfY2hhciBidWZbVklTX0JMT0NLU0laRV0gX19hbGlnbmVkKFZJ
U19CTE9DS1NJWkUpOworCXJlZ2lzdGVyX3QgcmVnLCBzOworCisJcyA9IGludHJfZGlzYWJsZSgp
OworCXJlZyA9IHJkKGZwcnMpOworCXdyKGZwcnMsIHJlZyB8IEZQUlNfRkVGLCAwKTsKKwlfX2Fz
bSBfX3ZvbGF0aWxlKCJzdGRhICUlZjAsIFslMF0gJTEiCisJICAgIDogOiAiciIgKGJ1ZiksICJu
IiAoQVNJX0JMS19DT01NSVRfUykpOworCW1lbWJhcihTeW5jKTsKKwl3cihmcHJzLCByZWcsIDAp
OworCWludHJfcmVzdG9yZShzKTsKK30KKworaW50CitzcGFyYzY0X29md19wY2lfYWN0aXZhdGVf
cmVzb3VyY2UoZGV2aWNlX3QgYnVzLCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCByaWQs
CisgICAgc3RydWN0IHJlc291cmNlICpyKQoreworCXN0cnVjdCBvZndfcGNpX3NvZnRjICpzYzsK
KwlzdHJ1Y3QgYnVzX3NwYWNlX3RhZyAqdGFnOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGJ1
cyk7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBTWVNfUkVTX0lSUToKKwkJcmV0dXJuIChidXNf
Z2VuZXJpY19hY3RpdmF0ZV9yZXNvdXJjZShidXMsIGNoaWxkLCB0eXBlLCByaWQsCisJCSAgICBy
KSk7CisJY2FzZSBTWVNfUkVTX01FTU9SWToKKwkJdGFnID0gc3BhcmM2NF9hbGxvY19idXNfdGFn
KHIsIFBDSV9NRU1PUllfQlVTX1NQQUNFKTsKKwkJaWYgKHRhZyA9PSBOVUxMKQorCQkJcmV0dXJu
IChFTk9NRU0pOworCQlybWFuX3NldF9idXN0YWcociwgdGFnKTsKKwkJcm1hbl9zZXRfYnVzaGFu
ZGxlKHIsIHNjLT5zY19iaFtPRldfUENJX01FTTMyXSArCisJCSAgICBybWFuX2dldF9zdGFydChy
KSk7CisJCWJyZWFrOworCWNhc2UgU1lTX1JFU19JT1BPUlQ6CisJCXJtYW5fc2V0X2J1c3RhZyhy
LCBzYy0+c2NfaW90KTsKKwkJcm1hbl9zZXRfYnVzaGFuZGxlKHIsIHNjLT5zY19iaFtPRldfUENJ
X0lPXSArCisJCSAgICBybWFuX2dldF9zdGFydChyKSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4g
KHJtYW5fYWN0aXZhdGVfcmVzb3VyY2UocikpOworfQorCitpbnQKK3NwYXJjNjRfb2Z3X3BjaV9k
ZWFjdGl2YXRlX3Jlc291cmNlKGRldmljZV90IGJ1cywgZGV2aWNlX3QgY2hpbGQsCisgICAgaW50
IHR5cGUsIGludCByaWQsIHN0cnVjdCByZXNvdXJjZSAqcikKK3sKKworICAgICAgICByZXR1cm4g
KGJ1c19nZW5lcmljX2RlYWN0aXZhdGVfcmVzb3VyY2UoYnVzLCBjaGlsZCwgdHlwZSwgcmlkLCBy
KSk7Cit9CmRpZmYgLS1naXQgYS9zeXMvc3BhcmM2NC9zcGFyYzY0L2pidXNwcG0uYyBiL3N5cy9z
cGFyYzY0L3NwYXJjNjQvamJ1c3BwbS5jCmluZGV4IDEyZjlmMGYuLjBiNDEwNTQgMTAwNjQ0Ci0t
LSBhL3N5cy9zcGFyYzY0L3NwYXJjNjQvamJ1c3BwbS5jCisrKyBiL3N5cy9zcGFyYzY0L3NwYXJj
NjQvamJ1c3BwbS5jCkBAIC0zNSwxMyArMzUsMTQgQEAgX19GQlNESUQoIiRGcmVlQlNEJCIpOwog
I2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgogI2luY2x1ZGUgPHN5cy9ybWFuLmg+CiAKKyNpbmNs
dWRlIDxkZXYvb2Z3L29md19idXNfc3Vici5oPgogI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1cy5o
PgogCiAjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KICNpbmNsdWRlIDxtYWNoaW5lL3Jlc291cmNl
Lmg+CiAKICNpZiAxCi0jaW5jbHVkZSA8c3BhcmM2NC9wY2kvb2Z3X3BjaS5oPgorI2luY2x1ZGUg
PGRldi9vZncvb2Z3X3BjaS5oPgogI2VuZGlmCiAKICNkZWZpbmUJSkJVU1BQTV9OUkVHCTIKZGlm
ZiAtLWdpdCBhL3N5cy9zcGFyYzY0L3NwYXJjNjQvb2Z3X21hY2hkZXAuYyBiL3N5cy9zcGFyYzY0
L3NwYXJjNjQvb2Z3X21hY2hkZXAuYwppbmRleCA3ZmNmNWM4Li5hOWI0MGY4IDEwMDY0NAotLS0g
YS9zeXMvc3BhcmM2NC9zcGFyYzY0L29md19tYWNoZGVwLmMKKysrIGIvc3lzL3NwYXJjNjQvc3Bh
cmM2NC9vZndfbWFjaGRlcC5jCkBAIC0zNCwxMiArMzQsMTQgQEAgX19GQlNESUQoIiRGcmVlQlNE
JCIpOwogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1ZGUgPHN5cy9idXMuaD4KICNpbmNs
dWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgogCiAjaW5jbHVkZSA8bmV0
L2V0aGVybmV0Lmg+CiAKKyNpbmNsdWRlIDxkZXYvb2Z3L29wZW5maXJtLmg+CiAjaW5jbHVkZSA8
ZGV2L29mdy9vZndfYnVzLmg+CisjaW5jbHVkZSA8ZGV2L29mdy9vZndfYnVzX3N1YnIuaD4KICNp
bmNsdWRlIDxkZXYvb2Z3L29md19wY2kuaD4KLSNpbmNsdWRlIDxkZXYvb2Z3L29wZW5maXJtLmg+
CiAKICNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgogI2luY2x1ZGUgPG1hY2hpbmUvaWRwcm9tLmg+
Cg==
--047d7bd76bea87df0b052cfd99e4--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAF-BqKqfUzuvJRaQH9nhYwFLAnrp-7Xjym7F_fpViBF3PzjZAw>