Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 14 Dec 2018 19:23:11 +0530
From:      Pratyush Yadav <pratyush@freebsd.org>
To:        FreeBSD-Xen <freebsd-xen@freebsd.org>
Cc:        =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= <royger@freebsd.org>
Subject:   Testing request: Grant table handlers integrated with the bus_dma(9) API
Message-ID:  <CA%2BX=3TLubvptwxOhE_shKP5GiTieb-e1wvG-0iEfF6ic0vmWag@mail.gmail.com>

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

Hi freebsd-xen@

I participated in Google Summer of Code this summer. My project was to
Import the Xen grant-table bus_dma(9) handlers from OpenBSD [0]. The
code is up for review, and will be merged soon hopefully. But, I have
only tested it on my system with my configurations. Even though I have
tried to be thorough, I might have missed something that does not
manifest itself on my setup. So, if any of you are able to, I would
like you to test the patch and give me feedback/bug reports before it
gets committed.

The code does not add any new features or remove anything. So, you
should not have to change anything at all to make it work. The system
should keep working exactly like before. If you find any deviance from
previous behaviour, please report it.

The patch changes the kernel, so apply it and re-build the kernel. You
shouldn't have to re-build the world AFAICT.

You can find the reviews for the patches here [1][2][3][4]. It is
split into 4 patches, so for your convenience I have attached a
combined patch with this email. If you have any suggestions about the
code, please let me know in the review.



[0] https://wiki.freebsd.org/SummerOfCode2018Projects/ImportXenbus_dmaFromOpenBSD
[1] https://reviews.freebsd.org/D18550
[2] https://reviews.freebsd.org/D18551
[3] https://reviews.freebsd.org/D18552
[4] https://reviews.freebsd.org/D18553

-- 
Regards,
Pratyush Yadav

--000000000000a402a0057cfbc278
Content-Type: text/x-patch; charset="US-ASCII"; name="busdma.diff"
Content-Disposition: attachment; filename="busdma.diff"
Content-Transfer-Encoding: base64
Content-ID: <f_jpo2yj6p0>
X-Attachment-Id: f_jpo2yj6p0

ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzLmFtZDY0IGIvc3lzL2NvbmYvZmlsZXMuYW1kNjQK
aW5kZXggODcyMmNkZWI0Yi4uODAyMjNjNDZkZSAxMDA2NDQKLS0tIGEvc3lzL2NvbmYvZmlsZXMu
YW1kNjQKKysrIGIvc3lzL2NvbmYvZmlsZXMuYW1kNjQKQEAgLTc1Miw2ICs3NTIsNyBAQCB4ODYv
eDg2L3N0YWNrX21hY2hkZXAuYwkJb3B0aW9uYWwJZGRiIHwgc3RhY2sKIHg4Ni94ODYvdHNjLmMJ
CQlzdGFuZGFyZAogeDg2L3g4Ni91Y29kZS5jCQkJc3RhbmRhcmQKIHg4Ni94ODYvZGVsYXkuYwkJ
CXN0YW5kYXJkCit4ODYveGVuL2J1c2RtYV94ZW4uYwkJb3B0aW9uYWwJeGVuaHZtCiB4ODYveGVu
L2h2bS5jCQkJb3B0aW9uYWwJeGVuaHZtCiB4ODYveGVuL3hlbl9pbnRyLmMJCW9wdGlvbmFsCXhl
bmh2bQogeDg2L3hlbi9wdi5jCQkJb3B0aW9uYWwJeGVuaHZtCmRpZmYgLS1naXQgYS9zeXMvY29u
Zi9maWxlcy5pMzg2IGIvc3lzL2NvbmYvZmlsZXMuaTM4NgppbmRleCAwOGQ5ODc1ODZhLi5hYWEx
MGJlZWJjIDEwMDY0NAotLS0gYS9zeXMvY29uZi9maWxlcy5pMzg2CisrKyBiL3N5cy9jb25mL2Zp
bGVzLmkzODYKQEAgLTYyMiw2ICs2MjIsNyBAQCB4ODYveDg2L3RzYy5jCQkJc3RhbmRhcmQKIHg4
Ni94ODYvdWNvZGUuYwkJCXN0YW5kYXJkCiB4ODYveDg2L3B2Y2xvY2suYwkJc3RhbmRhcmQKIHg4
Ni94ODYvZGVsYXkuYwkJCXN0YW5kYXJkCit4ODYveGVuL2J1c2RtYV94ZW4uYwkJb3B0aW9uYWwg
eGVuaHZtCiB4ODYveGVuL2h2bS5jCQkJb3B0aW9uYWwgeGVuaHZtCiB4ODYveGVuL3hlbl9pbnRy
LmMJCW9wdGlvbmFsIHhlbmh2bQogeDg2L3hlbi94ZW5fYXBpYy5jCQlvcHRpb25hbCB4ZW5odm0K
ZGlmZiAtLWdpdCBhL3N5cy9kZXYveGVuL2Jsa2Zyb250L2Jsa2Zyb250LmMgYi9zeXMvZGV2L3hl
bi9ibGtmcm9udC9ibGtmcm9udC5jCmluZGV4IDI2ZjkzNTE5OWIuLjhlN2EwN2ZiYjYgMTAwNjQ0
Ci0tLSBhL3N5cy9kZXYveGVuL2Jsa2Zyb250L2Jsa2Zyb250LmMKKysrIGIvc3lzL2Rldi94ZW4v
YmxrZnJvbnQvYmxrZnJvbnQuYwpAQCAtNTcsNiArNTcsNyBAQCBfX0ZCU0RJRCgiJEZyZWVCU0Qk
Iik7CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9ncmFudF90YWJsZS5oPgogI2luY2x1ZGUgPHhl
bi9pbnRlcmZhY2UvaW8vcHJvdG9jb2xzLmg+CiAjaW5jbHVkZSA8eGVuL3hlbmJ1cy94ZW5idXN2
YXIuaD4KKyNpbmNsdWRlIDx4ZW4vYnVzZG1hX3hlbi5oPgogCiAjaW5jbHVkZSA8bWFjaGluZS9f
aW50dHlwZXMuaD4KIApAQCAtMTU5LDE0ICsxNjAsMTIgQEAgeGJkX2ZyZWVfY29tbWFuZChzdHJ1
Y3QgeGJkX2NvbW1hbmQgKmNtKQogfQogCiBzdGF0aWMgdm9pZAoteGJkX21rc2VnYXJyYXkoYnVz
X2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2VncywKLSAgICBncmFudF9yZWZfdCAqIGdyZWZf
aGVhZCwgaW50IG90aGVyZW5kX2lkLCBpbnQgcmVhZG9ubHksCi0gICAgZ3JhbnRfcmVmX3QgKiBz
Z19yZWYsIHN0cnVjdCBibGtpZl9yZXF1ZXN0X3NlZ21lbnQgKnNnKQoreGJkX21rc2VnYXJyYXko
YnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2VncywgZ3JhbnRfcmVmX3QgKiBzZ19yZWYs
CisgICAgc3RydWN0IGJsa2lmX3JlcXVlc3Rfc2VnbWVudCAqc2cpCiB7CiAJc3RydWN0IGJsa2lm
X3JlcXVlc3Rfc2VnbWVudCAqbGFzdF9ibG9ja19zZyA9IHNnICsgbnNlZ3M7CiAJdm1fcGFkZHJf
dCBidWZmZXJfbWE7CiAJdWludDY0X3QgZnNlY3QsIGxzZWN0OwotCWludCByZWY7CiAKIAl3aGls
ZSAoc2cgPCBsYXN0X2Jsb2NrX3NnKSB7CiAJCUtBU1NFUlQoc2Vncy0+ZHNfYWRkciAlICgxIDw8
IFhCRF9TRUNUT1JfU0hGVCkgPT0gMCwKQEAgLTE4MCwyNiArMTc5LDE1IEBAIHhiZF9ta3NlZ2Fy
cmF5KGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLCBpbnQgbnNlZ3MsCiAKIAkJS0FTU0VSVChsc2Vj
dCA8PSA3LCAoIlhFTiBkaXNrIGRyaXZlciBkYXRhIGNhbm5vdCAiCiAJCSAgICAiY3Jvc3MgYSBw
YWdlIGJvdW5kYXJ5IikpOwotCi0JCS8qIGluc3RhbGwgYSBncmFudCByZWZlcmVuY2UuICovCi0J
CXJlZiA9IGdudHRhYl9jbGFpbV9ncmFudF9yZWZlcmVuY2UoZ3JlZl9oZWFkKTsKLQogCQkvKgog
CQkgKiBHTlRUQUJfTElTVF9FTkQgPT0gMHhmZmZmZmZmZiwgYnV0IGl0IGlzIHByaXZhdGUKIAkJ
ICogdG8gZ250dGFiLmMuCiAJCSAqLwotCQlLQVNTRVJUKHJlZiAhPSB+MCwgKCJncmFudF9yZWZl
cmVuY2UgZmFpbGVkIikpOworCQlLQVNTRVJUKCpzZ19yZWYgIT0gfjAsICgiZ3JhbnRfcmVmZXJl
bmNlIGZhaWxlZCIpKTsKIAotCQlnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3NfcmVmKAotCQkg
ICAgcmVmLAotCQkgICAgb3RoZXJlbmRfaWQsCi0JCSAgICBidWZmZXJfbWEgPj4gUEFHRV9TSElG
VCwKLQkJICAgIHJlYWRvbmx5KTsKLQotCQkqc2dfcmVmID0gcmVmOwogCQkqc2cgPSAoc3RydWN0
IGJsa2lmX3JlcXVlc3Rfc2VnbWVudCkgewotCQkJLmdyZWYgICAgICAgPSByZWYsCi0JCQkuZmly
c3Rfc2VjdCA9IGZzZWN0LCAKKwkJCS5ncmVmICAgICAgID0gKnNnX3JlZiwKKwkJCS5maXJzdF9z
ZWN0ID0gZnNlY3QsCiAJCQkubGFzdF9zZWN0ICA9IGxzZWN0CiAJCX07CiAJCXNnKys7CkBAIC0y
NDEsMTAgKzIyOSw4IEBAIHhiZF9xdWV1ZV9jYih2b2lkICphcmcsIGJ1c19kbWFfc2VnbWVudF90
ICpzZWdzLCBpbnQgbnNlZ3MsIGludCBlcnJvcikKIAkJcmluZ19yZXEtPmhhbmRsZSA9IChibGtp
Zl92ZGV2X3QpKHVpbnRwdHJfdClzYy0+eGJkX2Rpc2s7CiAJCXJpbmdfcmVxLT5ucl9zZWdtZW50
cyA9IG5zZWdzOwogCQljbS0+Y21fbnNlZyA9IG5zZWdzOwotCQl4YmRfbWtzZWdhcnJheShzZWdz
LCBuc2VncywgJmNtLT5jbV9ncmVmX2hlYWQsCi0JCSAgICB4ZW5idXNfZ2V0X290aGVyZW5kX2lk
KHNjLT54YmRfZGV2KSwKLQkJICAgIGNtLT5jbV9vcGVyYXRpb24gPT0gQkxLSUZfT1BfV1JJVEUs
Ci0JCSAgICBjbS0+Y21fc2dfcmVmcywgcmluZ19yZXEtPnNlZyk7CisJCWNtLT5jbV9zZ19yZWZz
ID0geGVuX2RtYW1hcF9nZXRfZ3JlZnMoY20tPmNtX21hcCk7CisJCXhiZF9ta3NlZ2FycmF5KHNl
Z3MsIG5zZWdzLCBjbS0+Y21fc2dfcmVmcywgcmluZ19yZXEtPnNlZyk7CiAJfSBlbHNlIHsKIAkJ
YmxraWZfcmVxdWVzdF9pbmRpcmVjdF90ICpyaW5nX3JlcTsKIApAQCAtMjU5LDExICsyNDUsMTAg
QEAgeGJkX3F1ZXVlX2NiKHZvaWQgKmFyZywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBu
c2VncywgaW50IGVycm9yKQogCQlyaW5nX3JlcS0+aGFuZGxlID0gKGJsa2lmX3ZkZXZfdCkodWlu
dHB0cl90KXNjLT54YmRfZGlzazsKIAkJcmluZ19yZXEtPm5yX3NlZ21lbnRzID0gbnNlZ3M7CiAJ
CWNtLT5jbV9uc2VnID0gbnNlZ3M7Ci0JCXhiZF9ta3NlZ2FycmF5KHNlZ3MsIG5zZWdzLCAmY20t
PmNtX2dyZWZfaGVhZCwKLQkJICAgIHhlbmJ1c19nZXRfb3RoZXJlbmRfaWQoc2MtPnhiZF9kZXYp
LAotCQkgICAgY20tPmNtX29wZXJhdGlvbiA9PSBCTEtJRl9PUF9XUklURSwKLQkJICAgIGNtLT5j
bV9zZ19yZWZzLCBjbS0+Y21faW5kaXJlY3Rpb25wYWdlcyk7Ci0JCW1lbWNweShyaW5nX3JlcS0+
aW5kaXJlY3RfZ3JlZnMsICZjbS0+Y21faW5kaXJlY3Rpb25yZWZzLAorCQljbS0+Y21fc2dfcmVm
cyA9IHhlbl9kbWFtYXBfZ2V0X2dyZWZzKGNtLT5jbV9tYXApOworCQl4YmRfbWtzZWdhcnJheShz
ZWdzLCBuc2VncywgY20tPmNtX3NnX3JlZnMsCisJCSAgICBjbS0+Y21faW5kaXJlY3Rpb25wYWdl
cyk7CisJCW1lbWNweShyaW5nX3JlcS0+aW5kaXJlY3RfZ3JlZnMsIGNtLT5jbV9pbmRpcmVjdGlv
bnJlZnMsCiAJCSAgICBzaXplb2YoZ3JhbnRfcmVmX3QpICogc2MtPnhiZF9tYXhfcmVxdWVzdF9p
bmRpcmVjdHBhZ2VzKTsKIAl9CiAKQEAgLTI3NSw4ICsyNjAsNiBAQCB4YmRfcXVldWVfY2Iodm9p
ZCAqYXJnLCBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50IG5zZWdzLCBpbnQgZXJyb3IpCiAJ
CW9wID0gMDsKIAlidXNfZG1hbWFwX3N5bmMoc2MtPnhiZF9pb19kbWF0LCBjbS0+Y21fbWFwLCBv
cCk7CiAKLQlnbnR0YWJfZnJlZV9ncmFudF9yZWZlcmVuY2VzKGNtLT5jbV9ncmVmX2hlYWQpOwot
CiAJeGJkX2VucXVldWVfY20oY20sIFhCRF9RX0JVU1kpOwogCiAJLyoKQEAgLTI5OSwxMCArMjgy
LDEyIEBAIHhiZF9xdWV1ZV9yZXF1ZXN0KHN0cnVjdCB4YmRfc29mdGMgKnNjLCBzdHJ1Y3QgeGJk
X2NvbW1hbmQgKmNtKQogCiAJaWYgKGNtLT5jbV9icCAhPSBOVUxMKQogCQllcnJvciA9IGJ1c19k
bWFtYXBfbG9hZF9iaW8oc2MtPnhiZF9pb19kbWF0LCBjbS0+Y21fbWFwLAotCQkgICAgY20tPmNt
X2JwLCB4YmRfcXVldWVfY2IsIGNtLCAwKTsKKwkJICAgIGNtLT5jbV9icCwgeGJkX3F1ZXVlX2Ni
LCBjbSwKKwkJICAgIChjbS0+Y21fb3BlcmF0aW9uID09IEJMS0lGX09QX1dSSVRFKSA/IEJVU19E
TUFfWEVOX1JPIDogMCk7CiAJZWxzZQogCQllcnJvciA9IGJ1c19kbWFtYXBfbG9hZChzYy0+eGJk
X2lvX2RtYXQsIGNtLT5jbV9tYXAsCi0JCSAgICBjbS0+Y21fZGF0YSwgY20tPmNtX2RhdGFsZW4s
IHhiZF9xdWV1ZV9jYiwgY20sIDApOworCQkgICAgY20tPmNtX2RhdGEsIGNtLT5jbV9kYXRhbGVu
LCB4YmRfcXVldWVfY2IsIGNtLAorCQkgICAgKGNtLT5jbV9vcGVyYXRpb24gPT0gQkxLSUZfT1Bf
V1JJVEUpID8gQlVTX0RNQV9YRU5fUk8gOiAwKTsKIAlpZiAoZXJyb3IgPT0gRUlOUFJPR1JFU1Mp
IHsKIAkJLyoKIAkJICogTWFpbnRhaW4gcXVldWluZyBvcmRlciBieSBmcmVlemluZyB0aGUgcXVl
dWUuICBUaGUgbmV4dApAQCAtMzE3LDIwICszMDIsNiBAQCB4YmRfcXVldWVfcmVxdWVzdChzdHJ1
Y3QgeGJkX3NvZnRjICpzYywgc3RydWN0IHhiZF9jb21tYW5kICpjbSkKIAlyZXR1cm4gKGVycm9y
KTsKIH0KIAotc3RhdGljIHZvaWQKLXhiZF9yZXN0YXJ0X3F1ZXVlX2NhbGxiYWNrKHZvaWQgKmFy
ZykKLXsKLQlzdHJ1Y3QgeGJkX3NvZnRjICpzYyA9IGFyZzsKLQotCW10eF9sb2NrKCZzYy0+eGJk
X2lvX2xvY2spOwotCi0JeGJkX3RoYXcoc2MsIFhCREZfR05UX1NIT1JUQUdFKTsKLQotCXhiZF9z
dGFydGlvKHNjKTsKLQotCW10eF91bmxvY2soJnNjLT54YmRfaW9fbG9jayk7Ci19Ci0KIHN0YXRp
YyBzdHJ1Y3QgeGJkX2NvbW1hbmQgKgogeGJkX2Jpb19jb21tYW5kKHN0cnVjdCB4YmRfc29mdGMg
KnNjKQogewpAQCAtMzUwLDE3ICszMjEsNiBAQCB4YmRfYmlvX2NvbW1hbmQoc3RydWN0IHhiZF9z
b2Z0YyAqc2MpCiAJCXJldHVybiAoTlVMTCk7CiAJfQogCi0JaWYgKGdudHRhYl9hbGxvY19ncmFu
dF9yZWZlcmVuY2VzKHNjLT54YmRfbWF4X3JlcXVlc3Rfc2VnbWVudHMsCi0JICAgICZjbS0+Y21f
Z3JlZl9oZWFkKSAhPSAwKSB7Ci0JCWdudHRhYl9yZXF1ZXN0X2ZyZWVfY2FsbGJhY2soJnNjLT54
YmRfY2FsbGJhY2ssCi0JCSAgICB4YmRfcmVzdGFydF9xdWV1ZV9jYWxsYmFjaywgc2MsCi0JCSAg
ICBzYy0+eGJkX21heF9yZXF1ZXN0X3NlZ21lbnRzKTsKLQkJeGJkX2ZyZWV6ZShzYywgWEJERl9H
TlRfU0hPUlRBR0UpOwotCQl4YmRfcmVxdWV1ZV9iaW8oc2MsIGJwKTsKLQkJeGJkX2VucXVldWVf
Y20oY20sIFhCRF9RX0ZSRUUpOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQogCWNtLT5jbV9icCA9
IGJwOwogCWNtLT5jbV9zZWN0b3JfbnVtYmVyID0gKGJsa2lmX3NlY3Rvcl90KWJwLT5iaW9fcGJs
a25vOwogCkBAIC01MDIsOCArNDYyLDYgQEAgeGJkX2ludCh2b2lkICp4c2MpCiAJCWNtICAgPSAm
c2MtPnhiZF9zaGFkb3dbYnJldC0+aWRdOwogCiAJCXhiZF9yZW1vdmVfY20oY20sIFhCRF9RX0JV
U1kpOwotCQlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZmVyZW5jZXMoY20tPmNtX25zZWcs
Ci0JCSAgICBjbS0+Y21fc2dfcmVmcyk7CiAJCWkrKzsKIAogCQlpZiAoY20tPmNtX29wZXJhdGlv
biA9PSBCTEtJRl9PUF9SRUFEKQpAQCAtNTE1LDYgKzQ3Myw3IEBAIHhiZF9pbnQodm9pZCAqeHNj
KQogCQkJb3AgPSAwOwogCQlidXNfZG1hbWFwX3N5bmMoc2MtPnhiZF9pb19kbWF0LCBjbS0+Y21f
bWFwLCBvcCk7CiAJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT54YmRfaW9fZG1hdCwgY20tPmNtX21h
cCk7CisJCWNtLT5jbV9zZ19yZWZzID0gTlVMTDsKIAogCQkvKgogCQkgKiBSZWxlYXNlIGFueSBo
b2xkIHRoaXMgY29tbWFuZCBoYXMgb24gZnV0dXJlIGNvbW1hbmQKQEAgLTYyMiwxNCArNTgxLDYg
QEAgeGJkX2R1bXAodm9pZCAqYXJnLCB2b2lkICp2aXJ0dWFsLCB2bV9vZmZzZXRfdCBwaHlzaWNh
bCwgb2ZmX3Qgb2Zmc2V0LAogCQkJcmV0dXJuIChFQlVTWSk7CiAJCX0KIAotCQlpZiAoZ250dGFi
X2FsbG9jX2dyYW50X3JlZmVyZW5jZXMoc2MtPnhiZF9tYXhfcmVxdWVzdF9zZWdtZW50cywKLQkJ
ICAgICZjbS0+Y21fZ3JlZl9oZWFkKSAhPSAwKSB7Ci0JCQl4YmRfZnJlZV9jb21tYW5kKGNtKTsK
LQkJCW10eF91bmxvY2soJnNjLT54YmRfaW9fbG9jayk7Ci0JCQlkZXZpY2VfcHJpbnRmKHNjLT54
YmRfZGV2LCAibm8gbW9yZSBncmFudCBhbGxvY3M/XG4iKTsKLQkJCXJldHVybiAoRUJVU1kpOwot
CQl9Ci0KIAkJY2h1bmsgPSBsZW5ndGggPiBzYy0+eGJkX21heF9yZXF1ZXN0X3NpemUgPwogCQkg
ICAgc2MtPnhiZF9tYXhfcmVxdWVzdF9zaXplIDogbGVuZ3RoOwogCQljbS0+Y21fZGF0YSA9IHZp
cnR1YWw7CkBAIC0xMDYyLDE4ICsxMDEzLDIxIEBAIHhiZF9mcmVlKHN0cnVjdCB4YmRfc29mdGMg
KnNjKQogCiAJCQljbSA9ICZzYy0+eGJkX3NoYWRvd1tpXTsKIAkJCWlmIChjbS0+Y21fc2dfcmVm
cyAhPSBOVUxMKSB7Ci0JCQkJZnJlZShjbS0+Y21fc2dfcmVmcywgTV9YRU5CTE9DS0ZST05UKTsK
KwkJCQlidXNfZG1hbWFwX3VubG9hZChzYy0+eGJkX2lvX2RtYXQsIGNtLT5jbV9tYXApOwogCQkJ
CWNtLT5jbV9zZ19yZWZzID0gTlVMTDsKIAkJCX0KIAogCQkJaWYgKGNtLT5jbV9pbmRpcmVjdGlv
bnBhZ2VzICE9IE5VTEwpIHsKLQkJCQlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZmVyZW5j
ZXMoCi0JCQkJICAgIHNjLT54YmRfbWF4X3JlcXVlc3RfaW5kaXJlY3RwYWdlcywKLQkJCQkgICAg
JmNtLT5jbV9pbmRpcmVjdGlvbnJlZnNbMF0pOworCQkJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT54
YmRfaW9fZG1hdCwKKwkJCQkgICAgY20tPmNtX2luZGlyZWN0aW9ubWFwKTsKKwkJCQlidXNfZG1h
bWFwX2Rlc3Ryb3koc2MtPnhiZF9pb19kbWF0LAorCQkJCSAgICBjbS0+Y21faW5kaXJlY3Rpb25t
YXApOwogCQkJCWNvbnRpZ2ZyZWUoY20tPmNtX2luZGlyZWN0aW9ucGFnZXMsIFBBR0VfU0laRSAq
CiAJCQkJICAgIHNjLT54YmRfbWF4X3JlcXVlc3RfaW5kaXJlY3RwYWdlcywKIAkJCQkgICAgTV9Y
RU5CTE9DS0ZST05UKTsKIAkJCQljbS0+Y21faW5kaXJlY3Rpb25wYWdlcyA9IE5VTEw7CisJCQkJ
Y20tPmNtX2luZGlyZWN0aW9ucmVmcyA9IE5VTEw7CisJCQkJY20tPmNtX2luZGlyZWN0aW9ubWFw
ID0gTlVMTDsKIAkJCX0KIAogCQkJYnVzX2RtYW1hcF9kZXN0cm95KHNjLT54YmRfaW9fZG1hdCwg
Y20tPmNtX21hcCk7CkBAIC0xMjE0LDcgKzExNjgsMzYgQEAgeGJkX2luaXRpYWxpemUoc3RydWN0
IHhiZF9zb2Z0YyAqc2MpCiAJeGVuYnVzX3NldF9zdGF0ZShzYy0+eGJkX2RldiwgWGVuYnVzU3Rh
dGVJbml0aWFsaXNlZCk7CiB9CiAKLS8qIAorCisvKgorICogQ2FsbGJhY2sgcmVjZWl2ZWQgZnJv
bSB0aGUgZG1hIGxvYWQgd2hlbiB4YmRfY29ubmVjdCgpIGxvYWRzIHRoZSBpbmRpcmVjdGlvbgor
ICogcGFnZXMuCisgKi8KK3N0YXRpYyB2b2lkCit4YmRfaW5kaXJlY3RwYWdlX2NiKHZvaWQgKmNh
bGxiYWNrX2FyZywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2VnLAorICAgICAgICBp
bnQgZXJyb3IpCit7CisJc3RydWN0IHhiZF9jb21tYW5kICpjbTsKKworCWNtID0gY2FsbGJhY2tf
YXJnOworCisJaWYgKGVycm9yKSB7CisJCS8qIERpc2FibGUgaW5kaXJlY3Rpb24gcGFnZXMgYW5k
IGNvbnRpbnVlLiAqLworCQljbS0+Y21fc2MtPnhiZF9tYXhfcmVxdWVzdF9zZWdtZW50cyA9IDA7
CisJCWNtLT5jbV9pbmRpcmVjdGlvbnBhZ2VzID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCUtB
U1NFUlQoKG5zZWcgPT0gY20tPmNtX3NjLT54YmRfbWF4X3JlcXVlc3RfaW5kaXJlY3RwYWdlcyks
CisJICAgICgiJXM6IG51bWJlciBvZiBkbWEgc2VnbWVudHMgbm90IGVxdWFsIHRvIHRoZSBleHBl
Y3RlZCBudW1iZXIuICIKKwkgICAgIm5zZWcgPSAlZCwgeGJkX21heF9yZXF1ZXN0X3NlZ21lbnRz
ID0gJWQuIFZlcmlmeSB0aGF0IHRoZSAiCisJICAgICJjb25zdHJhaW50cyBwYXNzZWQgd2hlbiBj
cmVhdGluZyB0aGUgdGFnIGFyZSBjb3JyZWN0LiIsIF9fZnVuY19fLAorCSAgICBuc2VnLCBjbS0+
Y21fc2MtPnhiZF9tYXhfcmVxdWVzdF9zZWdtZW50cykpOworCisJY20tPmNtX2luZGlyZWN0aW9u
cmVmcyA9IHhlbl9kbWFtYXBfZ2V0X2dyZWZzKGNtLT5jbV9pbmRpcmVjdGlvbm1hcCk7Cit9CisK
Ky8qCiAgKiBJbnZva2VkIHdoZW4gdGhlIGJhY2tlbmQgaXMgZmluYWxseSAncmVhZHknIChhbmQg
aGFzIHB1Ymxpc2hlZAogICogdGhlIGRldGFpbHMgYWJvdXQgdGhlIHBoeXNpY2FsIGRldmljZSAt
ICNzZWN0b3JzLCBzaXplLCBldGMpLiAKICAqLwpAQCAtMTIyNSw3ICsxMjA4LDcgQEAgeGJkX2Nv
bm5lY3Qoc3RydWN0IHhiZF9zb2Z0YyAqc2MpCiAJdW5zaWduZWQgbG9uZyBzZWN0b3JzLCBzZWN0
b3Jfc2l6ZSwgcGh5c19zZWN0b3Jfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgYmluZm87CiAJaW50IGVy
ciwgZmVhdHVyZV9iYXJyaWVyLCBmZWF0dXJlX2ZsdXNoOwotCWludCBpLCBqOworCWludCBpLCBm
bGFnczsKIAogCWlmIChzYy0+eGJkX3N0YXRlID09IFhCRF9TVEFURV9DT05ORUNURUQgfHwgCiAJ
ICAgIHNjLT54YmRfc3RhdGUgPT0gWEJEX1NUQVRFX1NVU1BFTkRFRCkKQEAgLTEyODUsNiArMTI2
OCw5IEBAIHhiZF9jb25uZWN0KHN0cnVjdCB4YmRfc29mdGMgKnNjKQogCXNjLT54YmRfbWF4X3Jl
cXVlc3Rfc2l6ZSA9CiAJICAgIFhCRF9TRUdTX1RPX1NJWkUoc2MtPnhiZF9tYXhfcmVxdWVzdF9z
ZWdtZW50cyk7CiAKKwlmbGFncyA9IEJVU19ETUFfQUxMT0NOT1cgfAorCSAgICAoeGVuYnVzX2dl
dF9vdGhlcmVuZF9pZChzYy0+eGJkX2RldikgPDwgQlVTX0RNQV9YRU5fRE9NSURfU0hJRlQpOwor
CiAJLyogQWxsb2NhdGUgZGF0YXN0cnVjdHVyZXMgYmFzZWQgb24gbmVnb3RpYXRlZCB2YWx1ZXMu
ICovCiAJZXJyID0gYnVzX2RtYV90YWdfY3JlYXRlKAogCSAgICBidXNfZ2V0X2RtYV90YWcoc2Mt
PnhiZF9kZXYpLAkvKiBwYXJlbnQgKi8KQEAgLTEyOTUsNyArMTI4MSw3IEBAIHhiZF9jb25uZWN0
KHN0cnVjdCB4YmRfc29mdGMgKnNjKQogCSAgICBzYy0+eGJkX21heF9yZXF1ZXN0X3NpemUsCiAJ
ICAgIHNjLT54YmRfbWF4X3JlcXVlc3Rfc2VnbWVudHMsCiAJICAgIFBBR0VfU0laRSwJCQkJLyog
bWF4c2Vnc2l6ZSAqLwotCSAgICBCVVNfRE1BX0FMTE9DTk9XLAkJCS8qIGZsYWdzICovCisJICAg
IGZsYWdzLAkJCQkvKiBmbGFncyAqLwogCSAgICBidXNkbWFfbG9ja19tdXRleCwJCQkvKiBsb2Nr
ZnVuYyAqLwogCSAgICAmc2MtPnhiZF9pb19sb2NrLAkJCS8qIGxvY2thcmcgKi8KIAkgICAgJnNj
LT54YmRfaW9fZG1hdCk7CkBAIC0xMzE4LDEzICsxMzA0LDkgQEAgeGJkX2Nvbm5lY3Qoc3RydWN0
IHhiZF9zb2Z0YyAqc2MpCiAJZm9yIChpID0gMDsgaSA8IHNjLT54YmRfbWF4X3JlcXVlc3RzOyBp
KyspIHsKIAkJc3RydWN0IHhiZF9jb21tYW5kICpjbTsKIAkJdm9pZCAqIGluZGlyZWN0cGFnZXM7
CisJCWludCBpbmRpcmVjdGZsYWdzOwogCiAJCWNtID0gJnNjLT54YmRfc2hhZG93W2ldOwotCQlj
bS0+Y21fc2dfcmVmcyA9IG1hbGxvYygKLQkJICAgIHNpemVvZihncmFudF9yZWZfdCkgKiBzYy0+
eGJkX21heF9yZXF1ZXN0X3NlZ21lbnRzLAotCQkgICAgTV9YRU5CTE9DS0ZST05ULCBNX05PV0FJ
VCk7Ci0JCWlmIChjbS0+Y21fc2dfcmVmcyA9PSBOVUxMKQotCQkJYnJlYWs7CiAJCWNtLT5jbV9p
ZCA9IGk7CiAJCWNtLT5jbV9mbGFncyA9IFhCRENGX0lOSVRJQUxJWkVSOwogCQljbS0+Y21fc2Mg
PSBzYzsKQEAgLTEzMzksMjEgKzEzMjEsMjkgQEAgeGJkX2Nvbm5lY3Qoc3RydWN0IHhiZF9zb2Z0
YyAqc2MpCiAJCQkJc2MtPnhiZF9tYXhfcmVxdWVzdF9pbmRpcmVjdHBhZ2VzID0gMDsKIAkJfSBl
bHNlIHsKIAkJCWluZGlyZWN0cGFnZXMgPSBOVUxMOworCQkJY20tPmNtX2luZGlyZWN0aW9ucGFn
ZXMgPSBpbmRpcmVjdHBhZ2VzOworCQkJeGJkX2ZyZWVfY29tbWFuZChjbSk7CisJCQljb250aW51
ZTsKIAkJfQotCQlmb3IgKGogPSAwOyBqIDwgc2MtPnhiZF9tYXhfcmVxdWVzdF9pbmRpcmVjdHBh
Z2VzOyBqKyspIHsKLQkJCWlmIChnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3MoCi0JCQkgICAg
eGVuYnVzX2dldF9vdGhlcmVuZF9pZChzYy0+eGJkX2RldiksCi0JCQkgICAgKHZ0b3BoeXMoaW5k
aXJlY3RwYWdlcykgPj4gUEFHRV9TSElGVCkgKyBqLAotCQkJICAgIDEgLyogZ3JhbnQgcmVhZC1v
bmx5IGFjY2VzcyAqLywKLQkJCSAgICAmY20tPmNtX2luZGlyZWN0aW9ucmVmc1tqXSkpCi0JCQkJ
YnJlYWs7CisKKwkJaWYgKGJ1c19kbWFtYXBfY3JlYXRlKHNjLT54YmRfaW9fZG1hdCwgMCwKKwkJ
ICAgICZjbS0+Y21faW5kaXJlY3Rpb25tYXApKSB7CisJCQljb250aWdmcmVlKGluZGlyZWN0cGFn
ZXMsIFBBR0VfU0laRSAqCisJCQkgICAgc2MtPnhiZF9tYXhfcmVxdWVzdF9pbmRpcmVjdHBhZ2Vz
LCBNX1hFTkJMT0NLRlJPTlQpOworCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGogPCBzYy0+eGJkX21h
eF9yZXF1ZXN0X2luZGlyZWN0cGFnZXMpIHsKLQkJCWNvbnRpZ2ZyZWUoaW5kaXJlY3RwYWdlcywK
LQkJCSAgICBQQUdFX1NJWkUgKiBzYy0+eGJkX21heF9yZXF1ZXN0X2luZGlyZWN0cGFnZXMsCi0J
CQkgICAgTV9YRU5CTE9DS0ZST05UKTsKKworCQkvKiBHcmFudCByZWFkLW9ubHkgYWNjZXNzICov
CisJCWluZGlyZWN0ZmxhZ3MgPSBCVVNfRE1BX05PV0FJVCB8IEJVU19ETUFfWEVOX1JPOworCQlp
ZiAoYnVzX2RtYW1hcF9sb2FkKHNjLT54YmRfaW9fZG1hdCwgY20tPmNtX2luZGlyZWN0aW9ubWFw
LAorCQkgICAgaW5kaXJlY3RwYWdlcywgUEFHRV9TSVpFICogc2MtPnhiZF9tYXhfcmVxdWVzdF9p
bmRpcmVjdHBhZ2VzLAorCQkgICAgeGJkX2luZGlyZWN0cGFnZV9jYiwgY20sIGluZGlyZWN0Zmxh
Z3MpKSB7CisKKwkJCWNvbnRpZ2ZyZWUoaW5kaXJlY3RwYWdlcywgUEFHRV9TSVpFICoKKwkJCSAg
ICBzYy0+eGJkX21heF9yZXF1ZXN0X2luZGlyZWN0cGFnZXMsIE1fWEVOQkxPQ0tGUk9OVCk7CiAJ
CQlicmVhazsKIAkJfQorCiAJCWNtLT5jbV9pbmRpcmVjdGlvbnBhZ2VzID0gaW5kaXJlY3RwYWdl
czsKIAkJeGJkX2ZyZWVfY29tbWFuZChjbSk7CiAJfQpkaWZmIC0tZ2l0IGEvc3lzL2Rldi94ZW4v
YmxrZnJvbnQvYmxvY2suaCBiL3N5cy9kZXYveGVuL2Jsa2Zyb250L2Jsb2NrLmgKaW5kZXggYjQ4
MTM5NjU5Yi4uNTc4N2YzMzc3NSAxMDA2NDQKLS0tIGEvc3lzL2Rldi94ZW4vYmxrZnJvbnQvYmxv
Y2suaAorKysgYi9zeXMvZGV2L3hlbi9ibGtmcm9udC9ibG9jay5oCkBAIC0xMTcsNyArMTE3LDYg
QEAgc3RydWN0IHhiZF9jb21tYW5kIHsKIAl1aW50NjRfdAkJIGNtX2lkOwogCWdyYW50X3JlZl90
CQkqY21fc2dfcmVmczsKIAlzdHJ1Y3QgYmlvCQkqY21fYnA7Ci0JZ3JhbnRfcmVmX3QJCSBjbV9n
cmVmX2hlYWQ7CiAJdm9pZAkJCSpjbV9kYXRhOwogCXNpemVfdAkJCSBjbV9kYXRhbGVuOwogCXVf
aW50CQkJIGNtX25zZWc7CkBAIC0xMjYsNyArMTI1LDggQEAgc3RydWN0IHhiZF9jb21tYW5kIHsK
IAlpbnQJCQkgY21fc3RhdHVzOwogCXhiZF9jYmNmX3QJCSpjbV9jb21wbGV0ZTsKIAl2b2lkCQkJ
KmNtX2luZGlyZWN0aW9ucGFnZXM7Ci0JZ3JhbnRfcmVmX3QJCSBjbV9pbmRpcmVjdGlvbnJlZnNb
QkxLSUZfTUFYX0lORElSRUNUX1BBR0VTX1BFUl9SRVFVRVNUXTsKKwlncmFudF9yZWZfdAkJKmNt
X2luZGlyZWN0aW9ucmVmczsKKwlidXNfZG1hbWFwX3QJCSBjbV9pbmRpcmVjdGlvbm1hcDsKIH07
CiAKIHR5cGVkZWYgZW51bSB7CmRpZmYgLS1naXQgYS9zeXMvZGV2L3hlbi9uZXRmcm9udC9uZXRm
cm9udC5jIGIvc3lzL2Rldi94ZW4vbmV0ZnJvbnQvbmV0ZnJvbnQuYwppbmRleCAzOGMzYjVhNmZm
Li40NTZjYTk4ZDkwIDEwMDY0NAotLS0gYS9zeXMvZGV2L3hlbi9uZXRmcm9udC9uZXRmcm9udC5j
CisrKyBiL3N5cy9kZXYveGVuL25ldGZyb250L25ldGZyb250LmMKQEAgLTYzLDYgKzYzLDggQEAg
X19GQlNESUQoIiRGcmVlQlNEJCIpOwogCiAjaW5jbHVkZSA8c3lzL2J1cy5oPgogCisjaW5jbHVk
ZSA8bWFjaGluZS9idXMuaD4KKwogI2luY2x1ZGUgPHhlbi94ZW4tb3MuaD4KICNpbmNsdWRlIDx4
ZW4vaHlwZXJ2aXNvci5oPgogI2luY2x1ZGUgPHhlbi94ZW5faW50ci5oPgpAQCAtNzAsNiArNzIs
NyBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9tZW1v
cnkuaD4KICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2lvL25ldGlmLmg+CiAjaW5jbHVkZSA8eGVu
L3hlbmJ1cy94ZW5idXN2YXIuaD4KKyNpbmNsdWRlIDx4ZW4vYnVzZG1hX3hlbi5oPgogCiAjaW5j
bHVkZSAieGVuYnVzX2lmLmgiCiAKQEAgLTE2OSw5ICsxNzIsMTMgQEAgc3RydWN0IG5ldGZyb250
X3J4cSB7CiAJbmV0aWZfcnhfZnJvbnRfcmluZ190IAlyaW5nOwogCXhlbl9pbnRyX2hhbmRsZV90
CXhlbl9pbnRyX2hhbmRsZTsKIAotCWdyYW50X3JlZl90IAkJZ3JlZl9oZWFkOwogCWdyYW50X3Jl
Zl90IAkJZ3JhbnRfcmVmW05FVF9SWF9SSU5HX1NJWkUgKyAxXTsKIAorCWJ1c19kbWFfdGFnX3QJ
CWRtYXQ7CisJYnVzX2RtYW1hcF90CQltYXBfcG9vbFtORVRfUlhfUklOR19TSVpFICsgMV07CisJ
dW5zaWduZWQgaW50CQlwb29sX2lkeDsKKwlidXNfZG1hbWFwX3QgCQltYXBzW05FVF9SWF9SSU5H
X1NJWkUgKyAxXTsKKwogCXN0cnVjdCBtYnVmCQkqbWJ1ZnNbTkVUX1JYX1JJTkdfU0laRSArIDFd
OwogCiAJc3RydWN0IGxyb19jdHJsCQlscm87CkBAIC0xODksOSArMTk2LDEzIEBAIHN0cnVjdCBu
ZXRmcm9udF90eHEgewogCW5ldGlmX3R4X2Zyb250X3JpbmdfdAlyaW5nOwogCXhlbl9pbnRyX2hh
bmRsZV90IAl4ZW5faW50cl9oYW5kbGU7CiAKLQlncmFudF9yZWZfdAkJZ3JlZl9oZWFkOwogCWdy
YW50X3JlZl90CQlncmFudF9yZWZbTkVUX1RYX1JJTkdfU0laRSArIDFdOwogCisJYnVzX2RtYV90
YWdfdAkJZG1hdDsKKwlidXNfZG1hbWFwX3QJCW1hcF9wb29sW05FVF9UWF9SSU5HX1NJWkUgKyAx
XTsKKwl1bnNpZ25lZCBpbnQJCXBvb2xfaWR4OworCWJ1c19kbWFtYXBfdCAJCW1hcHNbTkVUX1RY
X1JJTkdfU0laRSArIDFdOworCiAJc3RydWN0IG1idWYJCSptYnVmc1tORVRfVFhfUklOR19TSVpF
ICsgMV07CiAJaW50CQkJbWJ1ZnNfY250OwogCXN0cnVjdCBidWZfcmluZwkJKmJyOwpAQCAtMzAx
LDYgKzMxMiw5MCBAQCB4bl9nZXRfcnhfcmVmKHN0cnVjdCBuZXRmcm9udF9yeHEgKnJ4cSwgUklO
R19JRFggcmkpCiAJcmV0dXJuIChyZWYpOwogfQogCitzdGF0aWMgaW5saW5lIGJ1c19kbWFtYXBf
dAoreG5fZ2V0X3J4X21hcChzdHJ1Y3QgbmV0ZnJvbnRfcnhxICpyeHEsIFJJTkdfSURYIHJpKQor
eworCWludCBpOworCWJ1c19kbWFtYXBfdCBtYXA7CisKKwlpID0geG5fcnhpZHgocmkpOworCW1h
cCA9IHJ4cS0+bWFwc1tpXTsKKworCUtBU1NFUlQobWFwICE9IE5VTEwsICgiSW52YWxpZCBkbWEg
bWFwIikpOworCXJ4cS0+bWFwc1tpXSA9IE5VTEw7CisJcmV0dXJuKG1hcCk7Cit9CisKKy8qIFhY
WCBTdWdnZXN0IGEgYmV0dGVyIGZ1bmN0aW9uIG5hbWU/ICovCitzdGF0aWMgaW5saW5lIGJ1c19k
bWFtYXBfdAoreG5fdW5wb29sX3J4X21hcChzdHJ1Y3QgbmV0ZnJvbnRfcnhxICpyeHEpCit7CisJ
LyogWFhYIFNob3VsZCBJIGNvbnZlcnQgdGhpcyB0byBhIEtBU1NFUlQ/ICovCisJaWYgKHJ4cS0+
cG9vbF9pZHggPCAwKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJcmV0dXJuIChyeHEtPm1h
cF9wb29sW3J4cS0+cG9vbF9pZHgtLV0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3huX3Jl
cG9vbF9yeF9tYXAoc3RydWN0IG5ldGZyb250X3J4cSAqcnhxLCBidXNfZG1hbWFwX3QgbWFwKQor
eworCUtBU1NFUlQocnhxLT5wb29sX2lkeCA8PSBORVRfUlhfUklOR19TSVpFLAorCSAgICAoIlRv
byBtYW55IHJ4IG1hcHMiKSk7CisKKwlyeHEtPm1hcF9wb29sWysrcnhxLT5wb29sX2lkeF0gPSBt
YXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYnVzX2RtYW1hcF90Cit4bl91bnBvb2xfdHhfbWFwKHN0
cnVjdCBuZXRmcm9udF90eHEgKnR4cSkKK3sKKwlpZiAodHhxLT5wb29sX2lkeCA8IDApIHsKKwkJ
cmV0dXJuIChOVUxMKTsKKwl9CisKKwlyZXR1cm4gKHR4cS0+bWFwX3Bvb2xbdHhxLT5wb29sX2lk
eC0tXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoreG5fcmVwb29sX3R4X21hcChzdHJ1Y3Qg
bmV0ZnJvbnRfdHhxICp0eHEsIGJ1c19kbWFtYXBfdCBtYXApCit7CisJS0FTU0VSVCh0eHEtPnBv
b2xfaWR4IDw9IE5FVF9UWF9SSU5HX1NJWkUsCisJICAgICgiVG9vIG1hbnkgdHggbWFwcyIpKTsK
KwlLQVNTRVJUKG1hcCAhPSBOVUxMLCAoIk5VTEwgbWFwIGJlaW5nIHB1dCBpbiB0aGUgdHggcG9v
bCIpKTsKKworCXR4cS0+bWFwX3Bvb2xbKyt0eHEtPnBvb2xfaWR4XSA9IG1hcDsKK30KKworc3Rh
dGljIGlubGluZSBncmFudF9yZWZfdAoreG5fZ2V0X21hcF9ncmVmKGJ1c19kbWFtYXBfdCBtYXAp
Cit7CisJZ3JhbnRfcmVmX3QgKnJlZnM7CisKKwkvKgorCSAqIFdlIGFzc3VtZSB0aGF0IHRoZXJl
IGlzIG9ubHkgb25lIGdyYW50IHJlZmVyZW5jZS4gSXQgaXMgdGhlCisJICogcmVzcG9uc2liaWxp
dHkgb2YgdGhlIGZ1bmN0aW9uIGNhbGxpbmcgdGhlIGxvYWQgdG8gbWFrZSBzdXJlIHRoaXMKKwkg
KiBhc3N1bXB0aW9uIGhvbGRzIHRydWUuCisJICovCisJcmVmcyA9IHhlbl9kbWFtYXBfZ2V0X2dy
ZWZzKG1hcCk7CisKKwlyZXR1cm4gKnJlZnM7Cit9CisKKy8qCisgKiBDYWxsYmFjayByZWNlaXZl
ZCB3aGVuIHRoZSBkbWEgbG9hZCBpcyBjb21wbGV0ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlz
IGEgZ2VuZXJpYyBvbmUgdXNlZCBieSByeCBhbmQgdHggZnVuY3Rpb25zLiBJZiB5b3Ugd2FudCB0
bworICogYWRkIGZ1bmN0aW9uLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIGRvbid0IGRvIGl0IGhl
cmUuIENyZWF0ZSBhIG5ldyBvbmUuCisgKi8KK3N0YXRpYyB2b2lkCit4bl9kbWFfY2Iodm9pZCAq
YXJnLCBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50IG5zZWcsIGludCBlcnJvcikKK3sKKwlL
QVNTRVJUKGVycm9yID09IDAsICgiJXM6IExvYWQgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZCIs
IF9fZnVuY19fLAorCSAgICBlcnJvcikpOworCUtBU1NFUlQobnNlZyA9PSAxLCAoIiVzOiBNb3Jl
IGRtYSBzZWdtZW50cyB0aGFuIGV4cGVjdGVkIiwgX19mdW5jX18pKTsKK30KKwogI2RlZmluZSBJ
UFJJTlRLKGZtdCwgYXJncy4uLikgXAogICAgIHByaW50ZigiW1hFTl0gIiBmbXQsICMjYXJncykK
ICNpZmRlZiBJTlZBUklBTlRTCkBAIC02NjYsOSArNzYxLDI2IEBAIHhuX3R4cV90cV9kZWZlcnJl
ZCh2b2lkICp4dHhxLCBpbnQgcGVuZGluZykKIHN0YXRpYyB2b2lkCiBkaXNjb25uZWN0X3J4cShz
dHJ1Y3QgbmV0ZnJvbnRfcnhxICpyeHEpCiB7CisJaW50IGksIGVycm9yOwogCiAJeG5fcmVsZWFz
ZV9yeF9idWZzKHJ4cSk7Ci0JZ250dGFiX2ZyZWVfZ3JhbnRfcmVmZXJlbmNlcyhyeHEtPmdyZWZf
aGVhZCk7CisJaWYgKHJ4cS0+cG9vbF9pZHggIT0gTkVUX1JYX1JJTkdfU0laRSkgeworCQlwcmlu
dGYoIiVzOiBTb21lIG1hcHMgYXJlIHN0aWxsIGluLXVzZVxuIiwgX19mdW5jX18pOworCX0KKwor
CWZvciAoaSA9IDA7IGkgPD0gTkVUX1JYX1JJTkdfU0laRTsgaSsrKSB7CisJCWVycm9yID0gYnVz
X2RtYW1hcF9kZXN0cm95KHJ4cS0+ZG1hdCwKKwkJICAgIHJ4cS0+bWFwX3Bvb2xbaV0pOworCQlL
QVNTRVJUKGVycm9yID09IDAsICgiJXM6IGRlc3RydWN0aW9uIG9mIG1hcCBwb29sIGZhaWxlZCIs
CisJCSAgICBfX2Z1bmNfXykpOworCX0KKworCXJ4cS0+cG9vbF9pZHggPSAtMTsKKworCWVycm9y
ID0gYnVzX2RtYV90YWdfZGVzdHJveShyeHEtPmRtYXQpOworCUtBU1NFUlQoZXJyb3IgPT0gMCwg
KCIlczogZGVzdHJ1Y3Rpb24gb2YgcnhxIGRtYSB0YWcgZmFpbGVkIiwKKwkgICAgIF9fZnVuY19f
KSk7CisKIAlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzKHJ4cS0+cmluZ19yZWYsIE5VTEwpOwog
CS8qCiAJICogTm8gc3BsaXQgZXZlbnQgY2hhbm5lbCBzdXBwb3J0IGF0IHRoZSBtb21lbnQsIGhh
bmRsZSB3aWxsCkBAIC03MDMsMTMgKzgxNSwxNiBAQCBzZXR1cF9yeHFzKGRldmljZV90IGRldiwg
c3RydWN0IG5ldGZyb250X2luZm8gKmluZm8sCiAJICAgdW5zaWduZWQgbG9uZyBudW1fcXVldWVz
KQogewogCWludCBxLCBpOwotCWludCBlcnJvcjsKKwlpbnQgZXJyb3IsIGZsYWdzOwogCW5ldGlm
X3J4X3NyaW5nX3QgKnJ4czsKIAlzdHJ1Y3QgbmV0ZnJvbnRfcnhxICpyeHE7CiAKIAlpbmZvLT5y
eHEgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRmcm9udF9yeHEpICogbnVtX3F1ZXVlcywKIAkg
ICAgTV9ERVZCVUYsIE1fV0FJVE9LfE1fWkVSTyk7CiAKKwkvKiBGbGFncyB0byBiZSBwYXNzZWQg
dG8gYnVzX2RtYV90YWdfY3JlYXRlKCkuICovCisJZmxhZ3MgPSB4ZW5idXNfZ2V0X290aGVyZW5k
X2lkKGRldikgPDwgQlVTX0RNQV9YRU5fRE9NSURfU0hJRlQ7CisKIAlmb3IgKHEgPSAwOyBxIDwg
bnVtX3F1ZXVlczsgcSsrKSB7CiAJCXJ4cSA9ICZpbmZvLT5yeHFbcV07CiAKQEAgLTcxNywyMiAr
ODMyLDQ1IEBAIHNldHVwX3J4cXMoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgbmV0ZnJvbnRfaW5mbyAq
aW5mbywKIAkJcnhxLT5pbmZvID0gaW5mbzsKIAkJcnhxLT5yaW5nX3JlZiA9IEdSQU5UX1JFRl9J
TlZBTElEOwogCQlyeHEtPnJpbmcuc3JpbmcgPSBOVUxMOworCQlyeHEtPnBvb2xfaWR4ID0gLTE7
CiAJCXNucHJpbnRmKHJ4cS0+bmFtZSwgWE5fUVVFVUVfTkFNRV9MRU4sICJ4bnJ4XyV1IiwgcSk7
CiAJCW10eF9pbml0KCZyeHEtPmxvY2ssIHJ4cS0+bmFtZSwgIm5ldGZyb250IHJlY2VpdmUgbG9j
ayIsCiAJCSAgICBNVFhfREVGKTsKIAorCQllcnJvciA9IGJ1c19kbWFfdGFnX2NyZWF0ZSgKKwkJ
ICAgIGJ1c19nZXRfZG1hX3RhZyhkZXYpLAkvKiBwYXJlbnQgKi8KKwkJICAgIDEsIFBBR0VfU0la
RSwJCS8qIGFsaWdubWVudCwgYm91bmRhcnkgKi8KKwkJICAgIEJVU19TUEFDRV9NQVhBRERSLAkJ
LyogbG93YWRkciAqLworCQkgICAgQlVTX1NQQUNFX01BWEFERFIsCQkvKiBoaWdoYWRkciAqLwor
CQkgICAgTlVMTCwgTlVMTCwJCQkvKiBmaWx0ZXIsIGZpbHRlcmFyZyAqLworCQkgICAgUEFHRV9T
SVpFLAkJCS8qIG1heHNpemUgKi8KKwkJICAgIDEsCQkJCS8qIG5zZWdtZW50cyAqLworCQkgICAg
UEFHRV9TSVpFLAkJCS8qIG1heHNlZ3NpemUgKi8KKwkJICAgIGZsYWdzLAkJCS8qIGZsYWdzICov
CisJCSAgICBOVUxMLAkJCS8qIGxvY2tmdW5jICovCisJCSAgICBOVUxMLAkJCS8qIGxvY2thcmcg
Ki8KKwkJICAgICZyeHEtPmRtYXQpOworCisJCWlmIChlcnJvcikgeworCQkJZGV2aWNlX3ByaW50
ZihkZXYsICJDcmVhdGluZyB0eCB0YWcgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQor
CiAJCWZvciAoaSA9IDA7IGkgPD0gTkVUX1JYX1JJTkdfU0laRTsgaSsrKSB7CiAJCQlyeHEtPm1i
dWZzW2ldID0gTlVMTDsKLQkJCXJ4cS0+Z3JhbnRfcmVmW2ldID0gR1JBTlRfUkVGX0lOVkFMSUQ7
CisJCQlyeHEtPm1hcHNbaV0gPSBOVUxMOwogCQl9CiAKIAkJLyogU3RhcnQgcmVzb3VyY2VzIGFs
bG9jYXRpb24gKi8KIAotCQlpZiAoZ250dGFiX2FsbG9jX2dyYW50X3JlZmVyZW5jZXMoTkVUX1JY
X1JJTkdfU0laRSwKLQkJICAgICZyeHEtPmdyZWZfaGVhZCkgIT0gMCkgewotCQkJZGV2aWNlX3By
aW50ZihkZXYsICJhbGxvY2F0aW5nIHJ4IGdyZWYiKTsKLQkJCWVycm9yID0gRU5PTUVNOwotCQkJ
Z290byBmYWlsOworCQlmb3IgKGkgPSAwOyBpIDw9IE5FVF9SWF9SSU5HX1NJWkU7IGkrKykgewor
CQkJZXJyb3IgPSBidXNfZG1hbWFwX2NyZWF0ZShyeHEtPmRtYXQsCisJCQkgICAgQlVTX0RNQV9Y
RU5fUFJFQUxMT0NfUkVGUywgJnJ4cS0+bWFwX3Bvb2xbaV0pOworCQkJaWYgKGVycm9yKSB7CisJ
CQkJZGV2aWNlX3ByaW50ZihkZXYsICJjcmVhdGluZyByeCBtYXAgZmFpbGVkIik7CisJCQkJZ290
byBmYWlsX2RtYV9tYXA7CisJCQl9CisJCQlyeHEtPnBvb2xfaWR4Kys7CiAJCX0KIAogCQlyeHMg
PSAobmV0aWZfcnhfc3JpbmdfdCAqKW1hbGxvYyhQQUdFX1NJWkUsIE1fREVWQlVGLApAQCAtNzUz
LDkgKzg5MSwyNCBAQCBzZXR1cF9yeHFzKGRldmljZV90IGRldiwgc3RydWN0IG5ldGZyb250X2lu
Zm8gKmluZm8sCiAJcmV0dXJuICgwKTsKIAogZmFpbF9ncmFudF9yaW5nOgotCWdudHRhYl9mcmVl
X2dyYW50X3JlZmVyZW5jZXMocnhxLT5ncmVmX2hlYWQpOwogCWZyZWUocnhxLT5yaW5nLnNyaW5n
LCBNX0RFVkJVRik7CitmYWlsX2RtYV9tYXA6CisJLyoKKwkgKiBDbGVhbiB1cCBmb3IgdGhlIGN1
cnJlbnQgcXVldWUsIHRoZW4gY2FsbCByeHFfZGlzY29ubmVjdCgpIGZvciB0aGUKKwkgKiByZXN0
LgorCSAqCisJICogWFhYIEFkZGluZyBhbm90aGVyIGxvb3AgYWZ0ZXIgdGhlIG1hcCBjcmVhdGlv
biBsb29wIHRoYXQgdXNlcyBpCisJICogd2lsbCBicmVhayB0aGlzLgorCSAqLworCWZvciAoaS0t
OyBpID49IDA7IGktLSkgeworCQllcnJvciA9IGJ1c19kbWFtYXBfZGVzdHJveShyeHEtPmRtYXQs
IHJ4cS0+bWFwX3Bvb2xbaV0pOworCQlLQVNTRVJUKGVycm9yID09IDAsICgiJXM6IGRlc3RydWN0
aW9uIG9mIG1hcCBwb29sIGZhaWxlZCIsCisJCSAgICBfX2Z1bmNfXykpOworCX0KKwllcnJvciA9
IGJ1c19kbWFfdGFnX2Rlc3Ryb3kocnhxLT5kbWF0KTsKKwlLQVNTRVJUKGVycm9yID09IDAsICgi
JXM6IGRlc3RydWN0aW9uIG9mIGRtYSB0YWcgZmFpbGVkIiwgX19mdW5jX18pKTsKIGZhaWw6CisJ
cS0tOwogCWZvciAoOyBxID49IDA7IHEtLSkgewogCQlkaXNjb25uZWN0X3J4cSgmaW5mby0+cnhx
W3FdKTsKIAkJZGVzdHJveV9yeHEoJmluZm8tPnJ4cVtxXSk7CkBAIC03NjgsOSArOTIxLDI1IEBA
IHNldHVwX3J4cXMoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgbmV0ZnJvbnRfaW5mbyAqaW5mbywKIHN0
YXRpYyB2b2lkCiBkaXNjb25uZWN0X3R4cShzdHJ1Y3QgbmV0ZnJvbnRfdHhxICp0eHEpCiB7Ci0K
KwlpbnQgaSwgZXJyb3I7CiAJeG5fcmVsZWFzZV90eF9idWZzKHR4cSk7Ci0JZ250dGFiX2ZyZWVf
Z3JhbnRfcmVmZXJlbmNlcyh0eHEtPmdyZWZfaGVhZCk7CisJaWYgKHR4cS0+cG9vbF9pZHggIT0g
TkVUX1RYX1JJTkdfU0laRSkgeworCQlwcmludGYoIiVzOiBTb21lIG1hcHMgYXJlIHN0aWxsIGlu
LXVzZVxuIiwgX19mdW5jX18pOworCX0KKworCWZvciAoaSA9IDA7IGkgPD0gTkVUX1RYX1JJTkdf
U0laRTsgaSsrKSB7CisJCWVycm9yID0gYnVzX2RtYW1hcF9kZXN0cm95KHR4cS0+ZG1hdCwKKwkJ
ICAgIHR4cS0+bWFwX3Bvb2xbaV0pOworCQlLQVNTRVJUKGVycm9yID09IDAsICgiJXM6IGRlc3Ry
dWN0aW9uIG9mIG1hcCBwb29sIGZhaWxlZCIsCisJCSAgICBfX2Z1bmNfXykpOworCX0KKworCXR4
cS0+cG9vbF9pZHggPSAtMTsKKworCWVycm9yID0gYnVzX2RtYV90YWdfZGVzdHJveSh0eHEtPmRt
YXQpOworCUtBU1NFUlQoZXJyb3IgPT0gMCwgKCIlczogZGVzdHJ1Y3Rpb24gb2YgdHhxIGRtYSB0
YWcgZmFpbGVkIiwKKwkgICAgIF9fZnVuY19fKSk7CisKIAlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNj
ZXNzKHR4cS0+cmluZ19yZWYsIE5VTEwpOwogCXhlbl9pbnRyX3VuYmluZCgmdHhxLT54ZW5faW50
cl9oYW5kbGUpOwogfQpAQCAtODAyLDE5ICs5NzEsMjQgQEAgc2V0dXBfdHhxcyhkZXZpY2VfdCBk
ZXYsIHN0cnVjdCBuZXRmcm9udF9pbmZvICppbmZvLAogCSAgIHVuc2lnbmVkIGxvbmcgbnVtX3F1
ZXVlcykKIHsKIAlpbnQgcSwgaTsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yLCBmbGFnczsKIAlu
ZXRpZl90eF9zcmluZ190ICp0eHM7CiAJc3RydWN0IG5ldGZyb250X3R4cSAqdHhxOwogCiAJaW5m
by0+dHhxID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmV0ZnJvbnRfdHhxKSAqIG51bV9xdWV1ZXMs
CiAJICAgIE1fREVWQlVGLCBNX1dBSVRPS3xNX1pFUk8pOwogCisJLyogRmxhZ3MgdG8gYmUgcGFz
c2VkIHRvIGJ1c19kbWFfdGFnX2NyZWF0ZSgpLiAqLworCWZsYWdzID0geGVuYnVzX2dldF9vdGhl
cmVuZF9pZChkZXYpIDw8IEJVU19ETUFfWEVOX0RPTUlEX1NISUZUOworCiAJZm9yIChxID0gMDsg
cSA8IG51bV9xdWV1ZXM7IHErKykgewogCQl0eHEgPSAmaW5mby0+dHhxW3FdOwogCiAJCXR4cS0+
aWQgPSBxOwogCQl0eHEtPmluZm8gPSBpbmZvOwogCisJCXR4cS0+cG9vbF9pZHggPSAtMTsKKwog
CQl0eHEtPnJpbmdfcmVmID0gR1JBTlRfUkVGX0lOVkFMSUQ7CiAJCXR4cS0+cmluZy5zcmluZyA9
IE5VTEw7CiAKQEAgLTgyMywxOSArOTk3LDQxIEBAIHNldHVwX3R4cXMoZGV2aWNlX3QgZGV2LCBz
dHJ1Y3QgbmV0ZnJvbnRfaW5mbyAqaW5mbywKIAkJbXR4X2luaXQoJnR4cS0+bG9jaywgdHhxLT5u
YW1lLCAibmV0ZnJvbnQgdHJhbnNtaXQgbG9jayIsCiAJCSAgICBNVFhfREVGKTsKIAorCQllcnJv
ciA9IGJ1c19kbWFfdGFnX2NyZWF0ZSgKKwkJICAgIGJ1c19nZXRfZG1hX3RhZyhkZXYpLAkvKiBw
YXJlbnQgKi8KKwkJICAgIDEsIFBBR0VfU0laRSwJCS8qIGFsaWdubWVudCwgYm91bmRhcnkgKi8K
KwkJICAgIEJVU19TUEFDRV9NQVhBRERSLAkJLyogbG93YWRkciAqLworCQkgICAgQlVTX1NQQUNF
X01BWEFERFIsCQkvKiBoaWdoYWRkciAqLworCQkgICAgTlVMTCwgTlVMTCwJCQkvKiBmaWx0ZXIs
IGZpbHRlcmFyZyAqLworCQkgICAgUEFHRV9TSVpFLAkJCS8qIG1heHNpemUgKi8KKwkJICAgIDEs
CQkJCS8qIG5zZWdtZW50cyAqLworCQkgICAgUEFHRV9TSVpFLAkJCS8qIG1heHNlZ3NpemUgKi8K
KwkJICAgIGZsYWdzLAkJCS8qIGZsYWdzICovCisJCSAgICBOVUxMLAkJCS8qIGxvY2tmdW5jICov
CisJCSAgICBOVUxMLAkJCS8qIGxvY2thcmcgKi8KKwkJICAgICZ0eHEtPmRtYXQpOworCQlpZiAo
ZXJyb3IpIHsKKwkJCWRldmljZV9wcmludGYoZGV2LCAiQ3JlYXRpbmcgdHggdGFnIGZhaWxlZFxu
Iik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwogCQlmb3IgKGkgPSAwOyBpIDw9IE5FVF9UWF9SSU5H
X1NJWkU7IGkrKykgewogCQkJdHhxLT5tYnVmc1tpXSA9ICh2b2lkICopICgodV9sb25nKSBpKzEp
OwogCQkJdHhxLT5ncmFudF9yZWZbaV0gPSBHUkFOVF9SRUZfSU5WQUxJRDsKKwkJCXR4cS0+bWFw
c1tpXSA9IE5VTEw7CiAJCX0KIAkJdHhxLT5tYnVmc1tORVRfVFhfUklOR19TSVpFXSA9ICh2b2lk
ICopMDsKIAogCQkvKiBTdGFydCByZXNvdXJjZXMgYWxsb2NhdGlvbi4gKi8KIAotCQlpZiAoZ250
dGFiX2FsbG9jX2dyYW50X3JlZmVyZW5jZXMoTkVUX1RYX1JJTkdfU0laRSwKLQkJICAgICZ0eHEt
PmdyZWZfaGVhZCkgIT0gMCkgewotCQkJZGV2aWNlX3ByaW50ZihkZXYsICJmYWlsZWQgdG8gYWxs
b2NhdGUgdHggZ3JhbnQgcmVmc1xuIik7Ci0JCQllcnJvciA9IEVOT01FTTsKLQkJCWdvdG8gZmFp
bDsKKwkJZm9yIChpID0gMDsgaSA8PSBORVRfVFhfUklOR19TSVpFOyBpKyspIHsKKwkJCWVycm9y
ID0gYnVzX2RtYW1hcF9jcmVhdGUodHhxLT5kbWF0LAorCQkJICAgIEJVU19ETUFfWEVOX1BSRUFM
TE9DX1JFRlMsICZ0eHEtPm1hcF9wb29sW2ldKTsKKwkJCWlmIChlcnJvcikgeworCQkJCWRldmlj
ZV9wcmludGYoZGV2LCAiQ3JlYXRpbmcgdHggbWFwIGZhaWxlZFxuIik7CisJCQkJZ290byBmYWls
X2RtYV9tYXA7CisJCQl9CisJCQl0eHEtPnBvb2xfaWR4Kys7CiAJCX0KIAogCQl0eHMgPSAobmV0
aWZfdHhfc3JpbmdfdCAqKW1hbGxvYyhQQUdFX1NJWkUsIE1fREVWQlVGLApAQCAtODg1LDkgKzEw
ODEsMjQgQEAgc2V0dXBfdHhxcyhkZXZpY2VfdCBkZXYsIHN0cnVjdCBuZXRmcm9udF9pbmZvICpp
bmZvLAogCXRhc2txdWV1ZV9mcmVlKHR4cS0+dHEpOwogCWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nl
c3ModHhxLT5yaW5nX3JlZiwgTlVMTCk7CiBmYWlsX2dyYW50X3Jpbmc6Ci0JZ250dGFiX2ZyZWVf
Z3JhbnRfcmVmZXJlbmNlcyh0eHEtPmdyZWZfaGVhZCk7CiAJZnJlZSh0eHEtPnJpbmcuc3Jpbmcs
IE1fREVWQlVGKTsKK2ZhaWxfZG1hX21hcDoKKwkvKgorCSAqIENsZWFuIHVwIGZvciB0aGUgY3Vy
cmVudCBxdWV1ZSwgdGhlbiBjYWxsIHR4cV9kaXNjb25uZWN0KCkgZm9yIHRoZQorCSAqIHJlc3Qu
CisJICoKKwkgKiBYWFggQWRkaW5nIGFub3RoZXIgbG9vcCBhZnRlciB0aGUgbWFwIGNyZWF0aW9u
IGxvb3AgdGhhdCB1c2VzIGkKKwkgKiB3aWxsIGJyZWFrIHRoaXMuCisJICovCisJZm9yIChpLS07
IGkgPj0gMDsgaS0tKSB7CisJCWVycm9yID0gYnVzX2RtYW1hcF9kZXN0cm95KHR4cS0+ZG1hdCwg
dHhxLT5tYXBfcG9vbFtpXSk7CisJCUtBU1NFUlQoZXJyb3IgPT0gMCwgKCIlczogZGVzdHJ1Y3Rp
b24gb2YgbWFwIHBvb2wgZmFpbGVkIiwKKwkJICAgIF9fZnVuY19fKSk7CisJfQorCWVycm9yID0g
YnVzX2RtYV90YWdfZGVzdHJveSh0eHEtPmRtYXQpOworCUtBU1NFUlQoZXJyb3IgPT0gMCwgKCIl
czogZGVzdHJ1Y3Rpb24gb2YgZG1hIHRhZyBmYWlsZWQiLCBfX2Z1bmNfXykpOwogZmFpbDoKKwlx
LS07CiAJZm9yICg7IHEgPj0gMDsgcS0tKSB7CiAJCWRpc2Nvbm5lY3RfdHhxKCZpbmZvLT50eHFb
cV0pOwogCQlkZXN0cm95X3R4cSgmaW5mby0+dHhxW3FdKTsKQEAgLTEwMzIsMTAgKzEyNDMsMTUg
QEAgeG5fcmVsZWFzZV90eF9idWZzKHN0cnVjdCBuZXRmcm9udF90eHEgKnR4cSkKIAkJICovCiAJ
CWlmICgoKHVpbnRwdHJfdCltKSA8PSBORVRfVFhfUklOR19TSVpFKQogCQkJY29udGludWU7Ci0J
CWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3NfcmVmKHR4cS0+Z3JhbnRfcmVmW2ldKTsKLQkJZ250
dGFiX3JlbGVhc2VfZ3JhbnRfcmVmZXJlbmNlKCZ0eHEtPmdyZWZfaGVhZCwKLQkJICAgIHR4cS0+
Z3JhbnRfcmVmW2ldKTsKKworCQlidXNfZG1hbWFwX3VubG9hZCh0eHEtPmRtYXQsIHR4cS0+bWFw
c1tpXSk7CisKKwkJLyogUHV0IHRoZSBtYXAgYmFjayBpbiB0aGUgbWFwIHBvb2wuICovCisJCXhu
X3JlcG9vbF90eF9tYXAodHhxLCB0eHEtPm1hcHNbaV0pOworCiAJCXR4cS0+Z3JhbnRfcmVmW2ld
ID0gR1JBTlRfUkVGX0lOVkFMSUQ7CisJCXR4cS0+bWFwc1tpXSA9IE5VTEw7CisKIAkJYWRkX2lk
X3RvX2ZyZWVsaXN0KHR4cS0+bWJ1ZnMsIGkpOwogCQl0eHEtPm1idWZzX2NudC0tOwogCQlpZiAo
dHhxLT5tYnVmc19jbnQgPCAwKSB7CkBAIC0xMDYyLDcgKzEyNzgsNyBAQCBzdGF0aWMgdm9pZAog
eG5fYWxsb2NfcnhfYnVmZmVycyhzdHJ1Y3QgbmV0ZnJvbnRfcnhxICpyeHEpCiB7CiAJUklOR19J
RFggcmVxX3Byb2Q7Ci0JaW50IG5vdGlmeTsKKwlpbnQgbm90aWZ5LCBlcnJvcjsKIAogCVhOX1JY
X0xPQ0tfQVNTRVJUKHJ4cSk7CiAKQEAgLTEwNzYsNyArMTI5Miw3IEBAIHhuX2FsbG9jX3J4X2J1
ZmZlcnMoc3RydWN0IG5ldGZyb250X3J4cSAqcnhxKQogCQl1bnNpZ25lZCBzaG9ydCBpZDsKIAkJ
Z3JhbnRfcmVmX3QgcmVmOwogCQlzdHJ1Y3QgbmV0aWZfcnhfcmVxdWVzdCAqcmVxOwotCQl1bnNp
Z25lZCBsb25nIHBmbjsKKwkJYnVzX2RtYW1hcF90IG1hcDsKIAogCQltID0geG5fYWxsb2Nfb25l
X3J4X2J1ZmZlcihyeHEpOwogCQlpZiAobSA9PSBOVUxMKQpAQCAtMTA4NywxNiArMTMwMywxOSBA
QCB4bl9hbGxvY19yeF9idWZmZXJzKHN0cnVjdCBuZXRmcm9udF9yeHEgKnJ4cSkKIAkJS0FTU0VS
VChyeHEtPm1idWZzW2lkXSA9PSBOVUxMLCAoIm5vbi1OVUxMIHhuX3J4X2NoYWluIikpOwogCQly
eHEtPm1idWZzW2lkXSA9IG07CiAKLQkJcmVmID0gZ250dGFiX2NsYWltX2dyYW50X3JlZmVyZW5j
ZSgmcnhxLT5ncmVmX2hlYWQpOwotCQlLQVNTRVJUKHJlZiAhPSBHTlRUQUJfTElTVF9FTkQsCi0J
CSAgICAoInJlc2VydmVkIGdyYW50IHJlZmVyZW5jZXMgZXhodWFzdGVkIikpOwotCQlyeHEtPmdy
YW50X3JlZltpZF0gPSByZWY7CisJCS8qIFRha2UgYSBtYXAgZnJvbSB0aGUgcG9vbC4gKi8KKwkJ
bWFwID0geG5fdW5wb29sX3J4X21hcChyeHEpOworCQlLQVNTRVJUKG1hcCAhPSBOVUxMLCAoIlJl
c2VydmVkIGRtYSBtYXAgcG9vbCBleGhhdXN0ZWQiKSk7CisJCXJ4cS0+bWFwc1tpZF0gPSBtYXA7
CisKKwkJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWQocnhxLT5kbWF0LCBtYXAsIG0tPm1fZGF0YSwK
KwkJICAgIG0tPm1fbGVuLCB4bl9kbWFfY2IsIHJ4cSwgQlVTX0RNQV9OT1dBSVQpOworCQlLQVNT
RVJUKGVycm9yID09IDAsICgiJXM6IG1hcCBsb2FkIGZhaWxlZCIsIF9fZnVuY19fKSk7CisKKwkJ
cmVmID0gcnhxLT5ncmFudF9yZWZbaWRdID0geG5fZ2V0X21hcF9ncmVmKG1hcCk7CiAKLQkJcGZu
ID0gYXRvcCh2dG9waHlzKG10b2QobSwgdm1fb2Zmc2V0X3QpKSk7CiAJCXJlcSA9IFJJTkdfR0VU
X1JFUVVFU1QoJnJ4cS0+cmluZywgcmVxX3Byb2QpOwogCi0JCWdudHRhYl9ncmFudF9mb3JlaWdu
X2FjY2Vzc19yZWYocmVmLAotCQkgICAgeGVuYnVzX2dldF9vdGhlcmVuZF9pZChyeHEtPmluZm8t
PnhiZGV2KSwgcGZuLCAwKTsKIAkJcmVxLT5pZCA9IGlkOwogCQlyZXEtPmdyZWYgPSByZWY7CiAJ
fQpAQCAtMTEzMCw4ICsxMzQ5LDkgQEAgc3RhdGljIHZvaWQgeG5fYWxsb2NfcnhfYnVmZmVyc19j
YWxsb3V0KHZvaWQgKmFyZykKIHN0YXRpYyB2b2lkCiB4bl9yZWxlYXNlX3J4X2J1ZnMoc3RydWN0
IG5ldGZyb250X3J4cSAqcnhxKQogewotCWludCBpLCAgcmVmOworCWludCBpOwogCXN0cnVjdCBt
YnVmICptOworCWJ1c19kbWFtYXBfdCBtYXA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTkVUX1JYX1JJ
TkdfU0laRTsgaSsrKSB7CiAJCW0gPSByeHEtPm1idWZzW2ldOwpAQCAtMTEzOSwxNCArMTM1OSwx
NiBAQCB4bl9yZWxlYXNlX3J4X2J1ZnMoc3RydWN0IG5ldGZyb250X3J4cSAqcnhxKQogCQlpZiAo
bSA9PSBOVUxMKQogCQkJY29udGludWU7CiAKLQkJcmVmID0gcnhxLT5ncmFudF9yZWZbaV07Ci0J
CWlmIChyZWYgPT0gR1JBTlRfUkVGX0lOVkFMSUQpCi0JCQljb250aW51ZTsKKwkJbWFwID0gcnhx
LT5tYXBzW2ldOworCisJCWJ1c19kbWFtYXBfdW5sb2FkKHJ4cS0+ZG1hdCwgbWFwKTsKKworCQkv
KiBQdXQgdGhlIG1hcCBiYWNrIGluIHRoZSBtYXAgcG9vbC4gKi8KKwkJeG5fcmVwb29sX3J4X21h
cChyeHEsIG1hcCk7CiAKLQkJZ250dGFiX2VuZF9mb3JlaWduX2FjY2Vzc19yZWYocmVmKTsKLQkJ
Z250dGFiX3JlbGVhc2VfZ3JhbnRfcmVmZXJlbmNlKCZyeHEtPmdyZWZfaGVhZCwgcmVmKTsKIAkJ
cnhxLT5tYnVmc1tpXSA9IE5VTEw7CiAJCXJ4cS0+Z3JhbnRfcmVmW2ldID0gR1JBTlRfUkVGX0lO
VkFMSUQ7CisJCXJ4cS0+bWFwc1tpXSA9IE5VTEw7CiAJCW1fZnJlZW0obSk7CiAJfQogfQpAQCAt
MTMwMywxMCArMTUyNSwxMiBAQCB4bl90eGVvZihzdHJ1Y3QgbmV0ZnJvbnRfdHhxICp0eHEpCiAJ
CQkJcGFuaWMoIiVzOiBncmFudCBpZCAldSBzdGlsbCBpbiB1c2UgYnkgdGhlICIKIAkJCQkgICAg
ImJhY2tlbmQiLCBfX2Z1bmNfXywgaWQpOwogCQkJfQotCQkJZ250dGFiX2VuZF9mb3JlaWduX2Fj
Y2Vzc19yZWYodHhxLT5ncmFudF9yZWZbaWRdKTsKLQkJCWdudHRhYl9yZWxlYXNlX2dyYW50X3Jl
ZmVyZW5jZSgKLQkJCQkmdHhxLT5ncmVmX2hlYWQsIHR4cS0+Z3JhbnRfcmVmW2lkXSk7CisKKwkJ
CWJ1c19kbWFtYXBfdW5sb2FkKHR4cS0+ZG1hdCwgdHhxLT5tYXBzW2lkXSk7CisJCQl4bl9yZXBv
b2xfdHhfbWFwKHR4cSwgdHhxLT5tYXBzW2lkXSk7CisKIAkJCXR4cS0+Z3JhbnRfcmVmW2lkXSA9
IEdSQU5UX1JFRl9JTlZBTElEOworCQkJdHhxLT5tYXBzW2lkXSA9IE5VTEw7CiAKIAkJCXR4cS0+
bWJ1ZnNbaWRdID0gTlVMTDsKIAkJCWFkZF9pZF90b19mcmVlbGlzdCh0eHEtPm1idWZzLCBpZCk7
CkBAIC0xMzUzLDEzICsxNTc3LDE1IEBAIHhuX2ludHIodm9pZCAqeHNjKQogCiBzdGF0aWMgdm9p
ZAogeG5fbW92ZV9yeF9zbG90KHN0cnVjdCBuZXRmcm9udF9yeHEgKnJ4cSwgc3RydWN0IG1idWYg
Km0sCi0gICAgZ3JhbnRfcmVmX3QgcmVmKQorICAgIGdyYW50X3JlZl90IHJlZiwgYnVzX2RtYW1h
cF90IG1hcCkKIHsKIAlpbnQgbmV3ID0geG5fcnhpZHgocnhxLT5yaW5nLnJlcV9wcm9kX3B2dCk7
CiAKIAlLQVNTRVJUKHJ4cS0+bWJ1ZnNbbmV3XSA9PSBOVUxMLCAoIm1idWZzICE9IE5VTEwiKSk7
CisJS0FTU0VSVChyeHEtPm1hcHNbbmV3XSA9PSBOVUxMLCAoIm1hcHMgIT0gTlVMTCIpKTsKIAly
eHEtPm1idWZzW25ld10gPSBtOwogCXJ4cS0+Z3JhbnRfcmVmW25ld10gPSByZWY7CisJcnhxLT5t
YXBzW25ld10gPSBtYXA7CiAJUklOR19HRVRfUkVRVUVTVCgmcnhxLT5yaW5nLCByeHEtPnJpbmcu
cmVxX3Byb2RfcHZ0KS0+aWQgPSBuZXc7CiAJUklOR19HRVRfUkVRVUVTVCgmcnhxLT5yaW5nLCBy
eHEtPnJpbmcucmVxX3Byb2RfcHZ0KS0+Z3JlZiA9IHJlZjsKIAlyeHEtPnJpbmcucmVxX3Byb2Rf
cHZ0Kys7CkBAIC0xMzc2LDYgKzE2MDIsNyBAQCB4bl9nZXRfZXh0cmFzKHN0cnVjdCBuZXRmcm9u
dF9yeHEgKnJ4cSwKIAlkbyB7CiAJCXN0cnVjdCBtYnVmICptOwogCQlncmFudF9yZWZfdCByZWY7
CisJCWJ1c19kbWFtYXBfdCBtYXA7CiAKIAkJaWYgKF9fcHJlZGljdF9mYWxzZSgqY29ucyArIDEg
PT0gcnApKSB7CiAJCQllcnIgPSBFSU5WQUw7CkBAIC0xMzk0LDcgKzE2MjEsOCBAQCB4bl9nZXRf
ZXh0cmFzKHN0cnVjdCBuZXRmcm9udF9yeHEgKnJ4cSwKIAogCQltID0geG5fZ2V0X3J4X21idWYo
cnhxLCAqY29ucyk7CiAJCXJlZiA9IHhuX2dldF9yeF9yZWYocnhxLCAgKmNvbnMpOwotCQl4bl9t
b3ZlX3J4X3Nsb3QocnhxLCBtLCByZWYpOworCQltYXAgPSB4bl9nZXRfcnhfbWFwKHJ4cSwgKmNv
bnMpOworCQl4bl9tb3ZlX3J4X3Nsb3QocnhxLCBtLCByZWYsIG1hcCk7CiAJfSB3aGlsZSAoZXh0
cmEtPmZsYWdzICYgWEVOX05FVElGX0VYVFJBX0ZMQUdfTU9SRSk7CiAKIAlyZXR1cm4gZXJyOwpA
QCAtMTQxMiw5ICsxNjQwLDEwIEBAIHhuX2dldF9yZXNwb25zZXMoc3RydWN0IG5ldGZyb250X3J4
cSAqcnhxLAogCVJJTkdfSURYIHJlZl9jb25zID0gKmNvbnM7CiAJaW50IGZyYWdzID0gMTsKIAlp
bnQgZXJyID0gMDsKLQl1X2xvbmcgcmV0OworCWJ1c19kbWFtYXBfdCBtYXA7CiAKIAltMCA9IG0g
PSBtX3ByZXYgPSB4bl9nZXRfcnhfbWJ1ZihyeHEsICpjb25zKTsKKwltYXAgPSB4bl9nZXRfcnhf
bWFwKHJ4cSwgKmNvbnMpOwogCiAJaWYgKHJ4LT5mbGFncyAmIE5FVFJYRl9leHRyYV9pbmZvKSB7
CiAJCWVyciA9IHhuX2dldF9leHRyYXMocnhxLCBleHRyYXMsIHJwLCBjb25zKTsKQEAgLTE0MzMs
MTAgKzE2NjIsMTEgQEAgeG5fZ2V0X3Jlc3BvbnNlcyhzdHJ1Y3QgbmV0ZnJvbnRfcnhxICpyeHEs
CiAJCWlmIChfX3ByZWRpY3RfZmFsc2UocngtPnN0YXR1cyA8IDAgfHwKIAkJCXJ4LT5vZmZzZXQg
KyByeC0+c3RhdHVzID4gUEFHRV9TSVpFKSkgewogCi0JCQl4bl9tb3ZlX3J4X3Nsb3QocnhxLCBt
LCByZWYpOworCQkJeG5fbW92ZV9yeF9zbG90KHJ4cSwgbSwgcmVmLCBtYXApOwogCQkJaWYgKG0w
ID09IG0pCiAJCQkJbTAgPSBOVUxMOwogCQkJbSA9IE5VTEw7CisJCQltYXAgPSBOVUxMOwogCQkJ
ZXJyID0gRUlOVkFMOwogCQkJZ290byBuZXh0X3NraXBfcXVldWU7CiAJCX0KQEAgLTE0NTIsMTAg
KzE2ODIsMTAgQEAgeG5fZ2V0X3Jlc3BvbnNlcyhzdHJ1Y3QgbmV0ZnJvbnRfcnhxICpyeHEsCiAJ
CQlnb3RvIG5leHQ7CiAJCX0KIAotCQlyZXQgPSBnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3Jl
ZihyZWYpOwotCQlLQVNTRVJUKHJldCwgKCJVbmFibGUgdG8gZW5kIGFjY2VzcyB0byBncmFudCBy
ZWZlcmVuY2VzIikpOwotCi0JCWdudHRhYl9yZWxlYXNlX2dyYW50X3JlZmVyZW5jZSgmcnhxLT5n
cmVmX2hlYWQsIHJlZik7CisJCUtBU1NFUlQobWFwICE9IE5VTEwsCisJCSAgICAoIkJhZCBtYXAg
Y29ycmVzcG9uZGluZyB0byBhIHZhbGlkIGdyYW50IHJlZiIpKTsKKwkJYnVzX2RtYW1hcF91bmxv
YWQocnhxLT5kbWF0LCBtYXApOworCQl4bl9yZXBvb2xfcnhfbWFwKHJ4cSwgbWFwKTsKIAogbmV4
dDoKIAkJaWYgKG0gPT0gTlVMTCkKQEAgLTE1MDEsNiArMTczMSw3IEBAIHhuX2dldF9yZXNwb25z
ZXMoc3RydWN0IG5ldGZyb250X3J4cSAqcnhxLAogCQkJbTAgPSBtOwogCQltLT5tX25leHQgPSBO
VUxMOwogCQlyZWYgPSB4bl9nZXRfcnhfcmVmKHJ4cSwgKmNvbnMgKyBmcmFncyk7CisJCW1hcCA9
IHhuX2dldF9yeF9tYXAocnhxLCAqY29ucyArIGZyYWdzKTsKIAkJcmVmX2NvbnMgPSAqY29ucyAr
IGZyYWdzOwogCQlmcmFncysrOwogCX0KQEAgLTE1MzcsNyArMTc2OCw3IEBAIHhuX2Fzc2VtYmxl
X3R4X3JlcXVlc3Qoc3RydWN0IG5ldGZyb250X3R4cSAqdHhxLCBzdHJ1Y3QgbWJ1ZiAqbV9oZWFk
KQogCXN0cnVjdCBuZXRmcm9udF9pbmZvICpucCA9IHR4cS0+aW5mbzsKIAlzdHJ1Y3QgaWZuZXQg
KmlmcCA9IG5wLT54bl9pZnA7CiAJdV9pbnQgbmZyYWdzOwotCWludCBvdGhlcmVuZF9pZDsKKwlp
bnQgZXJyb3I7CiAKIAkvKioKIAkgKiBEZWZyYWdtZW50IHRoZSBtYnVmIGlmIG5lY2Vzc2FyeS4K
QEAgLTE2MDgsMTIgKzE4MzksMTEgQEAgeG5fYXNzZW1ibGVfdHhfcmVxdWVzdChzdHJ1Y3QgbmV0
ZnJvbnRfdHhxICp0eHEsIHN0cnVjdCBtYnVmICptX2hlYWQpCiAJICogb2YgZnJhZ21lbnRzIG9y
IGhpdCB0aGUgZW5kIG9mIHRoZSBtYnVmIGNoYWluLgogCSAqLwogCW0gPSBtX2hlYWQ7Ci0Jb3Ro
ZXJlbmRfaWQgPSB4ZW5idXNfZ2V0X290aGVyZW5kX2lkKG5wLT54YmRldik7CiAJZm9yIChtID0g
bV9oZWFkOyBtOyBtID0gbS0+bV9uZXh0KSB7CiAJCW5ldGlmX3R4X3JlcXVlc3RfdCAqdHg7CiAJ
CXVpbnRwdHJfdCBpZDsKIAkJZ3JhbnRfcmVmX3QgcmVmOwotCQl1X2xvbmcgbWZuOyAvKiBYWFgg
V3JvbmcgdHlwZT8gKi8KKwkJYnVzX2RtYW1hcF90IG1hcDsKIAogCQl0eCA9IFJJTkdfR0VUX1JF
UVVFU1QoJnR4cS0+cmluZywgdHhxLT5yaW5nLnJlcV9wcm9kX3B2dCk7CiAJCWlkID0gZ2V0X2lk
X2Zyb21fZnJlZWxpc3QodHhxLT5tYnVmcyk7CkBAIC0xNjI2LDEyICsxODU2LDIxIEBAIHhuX2Fz
c2VtYmxlX3R4X3JlcXVlc3Qoc3RydWN0IG5ldGZyb250X3R4cSAqdHhxLCBzdHJ1Y3QgbWJ1ZiAq
bV9oZWFkKQogCQkJICAgIF9fZnVuY19fKTsKIAkJdHhxLT5tYnVmc1tpZF0gPSBtOwogCQl0eC0+
aWQgPSBpZDsKLQkJcmVmID0gZ250dGFiX2NsYWltX2dyYW50X3JlZmVyZW5jZSgmdHhxLT5ncmVm
X2hlYWQpOwotCQlLQVNTRVJUKChzaG9ydClyZWYgPj0gMCwgKCJOZWdhdGl2ZSByZWYiKSk7Ci0J
CW1mbiA9IHZpcnRfdG9fbWZuKG10b2QobSwgdm1fb2Zmc2V0X3QpKTsKLQkJZ250dGFiX2dyYW50
X2ZvcmVpZ25fYWNjZXNzX3JlZihyZWYsIG90aGVyZW5kX2lkLAotCQkgICAgbWZuLCBHTlRNQVBf
cmVhZG9ubHkpOwotCQl0eC0+Z3JlZiA9IHR4cS0+Z3JhbnRfcmVmW2lkXSA9IHJlZjsKKworCQkv
KiBUYWtlIGEgbWFwIGZyb20gdGhlIHBvb2wuICovCisJCW1hcCA9IHhuX3VucG9vbF90eF9tYXAo
dHhxKTsKKwkJS0FTU0VSVChtYXAgIT0gTlVMTCwgKCIlczogUmVzZXJ2ZWQgZG1hIG1hcCBwb29s
IGV4aGF1c3RlZCIsCisJCSAgICBfX2Z1bmNfXykpOworCQl0eHEtPm1hcHNbaWRdID0gbWFwOwor
CisJCWVycm9yID0gYnVzX2RtYW1hcF9sb2FkKHR4cS0+ZG1hdCwgbWFwLCBtLT5tX2RhdGEsCisJ
CSAgICBtLT5tX2xlbiwgeG5fZG1hX2NiLCB0eHEsIEJVU19ETUFfWEVOX1JPIHwKKwkJICAgIEJV
U19ETUFfTk9XQUlUKTsKKwkJS0FTU0VSVChlcnJvciA9PSAwLCAoIiVzOiBtYXAgbG9hZCBmYWls
ZWQiLCBfX2Z1bmNfXykpOworCisJCXJlZiA9IHR4cS0+Z3JhbnRfcmVmW2lkXSA9IHhuX2dldF9t
YXBfZ3JlZihtYXApOworCisJCXR4LT5ncmVmID0gcmVmOwogCQl0eC0+b2Zmc2V0ID0gbXRvZCht
LCB2bV9vZmZzZXRfdCkgJiAoUEFHRV9TSVpFIC0gMSk7CiAJCXR4LT5mbGFncyA9IDA7CiAJCWlm
IChtID09IG1faGVhZCkgewpAQCAtMTg4OCwyOSArMjEyNywzMSBAQCB4bl9zdG9wKHN0cnVjdCBu
ZXRmcm9udF9pbmZvICpzYykKIAlpZl9saW5rX3N0YXRlX2NoYW5nZShpZnAsIExJTktfU1RBVEVf
RE9XTik7CiB9CiAKKy8qIFhYWCBJJ20gbm90IHN1cmUgdGhpcyBpcyBjb3JyZWN0LiAqLwogc3Rh
dGljIHZvaWQKIHhuX3JlYnVpbGRfcnhfYnVmcyhzdHJ1Y3QgbmV0ZnJvbnRfcnhxICpyeHEpCiB7
Ci0JaW50IHJlcXVldWVfaWR4LCBpOworCWludCByZXF1ZXVlX2lkeCwgaSwgZXJyb3I7CiAJZ3Jh
bnRfcmVmX3QgcmVmOwogCW5ldGlmX3J4X3JlcXVlc3RfdCAqcmVxOworCWJ1c19kbWFtYXBfdCBt
YXA7CiAKIAlmb3IgKHJlcXVldWVfaWR4ID0gMCwgaSA9IDA7IGkgPCBORVRfUlhfUklOR19TSVpF
OyBpKyspIHsKIAkJc3RydWN0IG1idWYgKm07Ci0JCXVfbG9uZyBwZm47CiAKIAkJaWYgKHJ4cS0+
bWJ1ZnNbaV0gPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCiAJCW0gPSByeHEtPm1idWZzW3JlcXVl
dWVfaWR4XSA9IHhuX2dldF9yeF9tYnVmKHJ4cSwgaSk7Ci0JCXJlZiA9IHJ4cS0+Z3JhbnRfcmVm
W3JlcXVldWVfaWR4XSA9IHhuX2dldF9yeF9yZWYocnhxLCBpKTsKKwkJbWFwID0gcnhxLT5tYXBz
W3JlcXVldWVfaWR4XSA9IHhuX2dldF9yeF9tYXAocnhxLCBpKTsKIAogCQlyZXEgPSBSSU5HX0dF
VF9SRVFVRVNUKCZyeHEtPnJpbmcsIHJlcXVldWVfaWR4KTsKLQkJcGZuID0gdnRvcGh5cyhtdG9k
KG0sIHZtX29mZnNldF90KSkgPj4gUEFHRV9TSElGVDsKIAotCQlnbnR0YWJfZ3JhbnRfZm9yZWln
bl9hY2Nlc3NfcmVmKHJlZiwKLQkJICAgIHhlbmJ1c19nZXRfb3RoZXJlbmRfaWQocnhxLT5pbmZv
LT54YmRldiksCi0JCSAgICBwZm4sIDApOworCQllcnJvciA9IGJ1c19kbWFtYXBfbG9hZChyeHEt
PmRtYXQsIG1hcCwgbS0+bV9kYXRhLAorCQkgICAgbS0+bV9sZW4sIHhuX2RtYV9jYiwgcnhxLCBC
VVNfRE1BX05PV0FJVCk7CisJCUtBU1NFUlQoZXJyb3IgPT0gMCwgKCIlczogbWFwIGxvYWQgZmFp
bGVkIiwgX19mdW5jX18pKTsKKworCQlyZWYgPSByeHEtPmdyYW50X3JlZltyZXF1ZXVlX2lkeF0g
PSB4bl9nZXRfbWFwX2dyZWYobWFwKTsKIAogCQlyZXEtPmdyZWYgPSByZWY7CiAJCXJlcS0+aWQg
ICA9IHJlcXVldWVfaWR4OwpkaWZmIC0tZ2l0IGEvc3lzL3g4Ni94ZW4vYnVzZG1hX3hlbi5jIGIv
c3lzL3g4Ni94ZW4vYnVzZG1hX3hlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAuLmNkODVkZTk3OTEKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMveDg2L3hlbi9idXNkbWFf
eGVuLmMKQEAgLTAsMCArMSw4ODIgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6
IEJTRC0yLUNsYXVzZS1GcmVlQlNECisgKgorICogQ29weXJpZ2h0IChjKSAyMDE4IFByYXR5dXNo
IFlhZGF2IDxwcmF0eXVzaEBGcmVlQlNELm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVm
cy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Cisj
aW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRl
IDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5l
L2J1cy5oPgorCisjaW5jbHVkZSA8eDg2L2luY2x1ZGUvYnVzZG1hX2ltcGwuaD4KKworI2luY2x1
ZGUgPHhlbi9nbnR0YWIuaD4KKyNpbmNsdWRlIDx4ZW4vYnVzZG1hX3hlbi5oPgorCitNQUxMT0Nf
REVGSU5FKE1fQlVTRE1BX1hFTiwgImJ1c2RtYV94ZW5fYnVmIiwgIlhlbi1zcGVjaWZpYyBidXNf
ZG1hKDkpIGJ1ZmZlciIpOworCisvKgorICogQlVTX0RNQV9CVVMxIGlzIHJlc2VydmVkIGZvciBi
dXMgZnVuY3Rpb25zIHRvIHVzZSBhcyB0aGV5IHdpc2guIEhlcmUsIGl0IGlzCisgKiB1c2VkIGJ5
IHhlbl9nZXRfZG1hX3RhZygpIHRvIHRlbGwgeGVuX2J1c19kbWFfdGFnX2NyZWF0ZSgpIHRoYXQg
dGhlCisgKiBYZW4tc3BlY2lmaWMgdGFnIGhhcyB0byBiZSAiYm9vdHN0cmFwcGVkIi4geGVuX2dl
dF9kbWFfdGFnKCkgcGFzc2VzIHRoZQorICogbWFjaGluZS1zcGVjaWZpYyB0YWcgbm90IHRoZSBY
ZW4gdGFnICh3aGljaCB0YWdfY3JlYXRlKCkgZXhwZWN0cyBpbiB0aGUKKyAqIHVzdWFsIGNhc2Up
LCBzbyBpdCBoYXMgdG8gYmUgaGFuZGxlZCBkaWZmZXJlbnRseS4gVGhpcyBpcyB3aGF0CisgKiAi
Ym9vdHN0cmFwcGluZyIgbWVhbnMuCisgKi8KKyNkZWZpbmUgQlVTRE1BX1hFTl9UQUdfSU5JVCBC
VVNfRE1BX0JVUzEKKworc3RydWN0IGJ1c19kbWFfdGFnX3hlbiB7CisJc3RydWN0IGJ1c19kbWFf
dGFnX2NvbW1vbgljb21tb247CisJYnVzX2RtYV90YWdfdAkJCXBhcmVudDsKKwl1bnNpZ25lZCBp
bnQJCQltYXhfc2VnbWVudHM7CisJZG9taWRfdAkJCQlkb21pZDsKK307CisKK3N0cnVjdCBidXNf
ZG1hbWFwX3hlbiB7CisJc3RydWN0IGJ1c19kbWFfdGFnX3hlbgkJKnRhZzsKKwlidXNfZG1hbWFw
X3QJCQkgbWFwOworCWdyYW50X3JlZl90CQkJKnJlZnM7CisJdW5zaWduZWQgaW50CQkJIG5yZWZz
OworCisJYnVzX2RtYW1hcF9jYWxsYmFja190CQkqY2FsbGJhY2s7CisJdm9pZAkJCQkqY2FsbGJh
Y2tfYXJnOworCisJc3RydWN0IGdudHRhYl9mcmVlX2NhbGxiYWNrCSBnbnR0YWJfY2FsbGJhY2s7
CisJYnVzX2RtYV9zZWdtZW50X3QJCSp0ZW1wX3NlZ3M7CisKKwkvKiBGbGFncy4gKi8KKwlib29s
CQkJCSBzbGVlcGFibGU7CisJYm9vbAkJCQkgZ3JlZnNfcHJlYWxsb2NhdGVkOworCXVuc2lnbmVk
IGludAkJCSBnbnR0YWJfZmxhZ3M7Cit9OworCitzdHJ1Y3QgbG9hZF9vcCB7CisJZW51bSB4ZW5f
bG9hZF90eXBlIHsKKwkJTE9BRF9NQSwKKwkJTE9BRF9QSFlTLAorCQlMT0FEX0JVRkZFUiwKKwl9
IHR5cGU7CisJYnVzX3NpemVfdCBzaXplOworCWludCBmbGFnczsKKwlidXNfZG1hX3NlZ21lbnRf
dCAqc2VnczsKKwlpbnQgKnNlZ3A7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJc3RydWN0IHZt
X3BhZ2UgKiptYTsKKwkJCXVuc2lnbmVkIGludCBtYV9vZmZzOworCQl9IG1hOworCQlzdHJ1Y3Qg
eworCQkJdm1fcGFkZHJfdCBidWY7CisJCX0gcGh5czsKKwkJc3RydWN0IHsKKwkJCXZvaWQgKmJ1
ZjsKKwkJCXN0cnVjdCBwbWFwICpwbWFwOworCQl9IGJ1ZmZlcjsKKwl9OworfTsKKworc3RhdGlj
IHN0cnVjdCBidXNfZG1hX2ltcGwgYnVzX2RtYV94ZW5faW1wbDsKKworc3RhdGljIGludAoreGVu
X2J1c19kbWFfdGFnX2NyZWF0ZShidXNfZG1hX3RhZ190IHBhcmVudCwgYnVzX3NpemVfdCBhbGln
bm1lbnQsCisgICAgYnVzX2FkZHJfdCBib3VuZGFyeSwgYnVzX2FkZHJfdCBsb3dhZGRyLCBidXNf
YWRkcl90IGhpZ2hhZGRyLAorICAgIGJ1c19kbWFfZmlsdGVyX3QgKmZpbHRmdW5jLCB2b2lkICpm
aWx0ZnVuY2FyZywgYnVzX3NpemVfdCBtYXhzaXplLAorICAgIGludCBuc2VnbWVudHMsIGJ1c19z
aXplX3QgbWF4c2Vnc3osIGludCBmbGFncywKKyAgICBidXNfZG1hX2xvY2tfdCAqbG9ja2Z1bmMs
IHZvaWQgKmxvY2tmdW5jYXJnLCBidXNfZG1hX3RhZ190ICpkbWF0KQoreworCWRvbWlkX3QgZG9t
aWQ7CisJc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqbmV3dGFnOworCWJ1c19kbWFfdGFnX3QgbmV3
cGFyZW50LCBvbGRwYXJlbnQ7CisJaW50IGVycm9yOworCisJaWYgKG1heHNlZ3N6ID4gUEFHRV9T
SVpFKSB7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisKKwlkb21pZCA9IGZsYWdzID4+IEJVU19E
TUFfWEVOX0RPTUlEX1NISUZUOworCWZsYWdzICY9IDB4ZmZmZjsKKworCWlmIChmbGFncyAmIEJV
U0RNQV9YRU5fVEFHX0lOSVQpIHsKKwkJb2xkcGFyZW50ID0gcGFyZW50OworCQkvKgorCQkgKiBU
aGUgY29kZSBiZWxvdyB0cmVhdHMgcGFyZW50IGFzIGEgeGVuLXNwZWNpZmljIERNQSB0YWcuCisJ
CSAqIFRoaXMgcGFyZW50IGNhbiBub3QgYmUgdXNlZCB0aGVyZS4KKwkJICovCisJCXBhcmVudCA9
IE5VTEw7CisJfSBlbHNlIHsKKwkJb2xkcGFyZW50ID0gKChzdHJ1Y3QgYnVzX2RtYV90YWdfeGVu
ICopcGFyZW50KS0+cGFyZW50OworCX0KKworCSpkbWF0ID0gTlVMTDsKKworCS8qCisJICogV2Ug
Y3JlYXRlIHR3byB0YWdzIGhlcmUuIFRoZSBmaXJzdCB0YWcgaXMgdGhlIGNvbW1vbiB0YWcuIEl0
IHdpbGwKKwkgKiBiZSB1c2VkIHRvIGhvbGQgdGhlIHhlbi1zcGVjaWZpYyBidXNfZG1hX2ltcGwu
IEJ1dCwgaW4gdGhlIG1hcCBjcmVhdGUKKwkgKiBhbmQgbG9hZCBvcGVyYXRpb25zLCB3ZSBuZWVk
IHRvIHVzZSB0aGUgc3RhbmRhcmQgZG1hIHRhZyB0byBsb2FkIHRoZQorCSAqIGRtYSBtYXBzIGFu
ZCBleHRyYWN0IHRoZSBwaHlzaWNhbCBhZGRyZXNzZXMuIFNvIGZvciB0aG9zZSBvcGVyYXRpb25z
LAorCSAqIHdlIGNyZWF0ZSBhbm90aGVyIHRhZyBmcm9tIHRoZSBwYXJlbnQgYW5kIHVzZSBpdCBp
biB0aG9zZSBvcGVyYXRpb25zLgorCSAqLworCWVycm9yID0gY29tbW9uX2J1c19kbWFfdGFnX2Ny
ZWF0ZShwYXJlbnQgIT0gTlVMTCA/CisJICAgICYoKHN0cnVjdCBidXNfZG1hX3RhZ194ZW4gKilw
YXJlbnQpLT5jb21tb24gOiBOVUxMLCBhbGlnbm1lbnQsCisJICAgIGJvdW5kYXJ5LCBsb3dhZGRy
LCBoaWdoYWRkciwgZmlsdGZ1bmMsIGZpbHRmdW5jYXJnLCBtYXhzaXplLAorCSAgICBuc2VnbWVu
dHMsIG1heHNlZ3N6LCBmbGFncywgbG9ja2Z1bmMsIGxvY2tmdW5jYXJnLAorCSAgICBzaXplb2Yo
c3RydWN0IGJ1c19kbWFfdGFnX3hlbiksICh2b2lkICoqKSZuZXd0YWcpOworCWlmIChlcnJvcikg
eworCQlyZXR1cm4gKGVycm9yKTsKKwl9CisKKwllcnJvciA9IGJ1c19kbWFfdGFnX2NyZWF0ZShv
bGRwYXJlbnQsIGFsaWdubWVudCwgYm91bmRhcnksIGxvd2FkZHIsCisJICAgIGhpZ2hhZGRyLCBm
aWx0ZnVuYywgZmlsdGZ1bmNhcmcsIG1heHNpemUsIG5zZWdtZW50cywgbWF4c2Vnc3osCisJICAg
IGZsYWdzLCBsb2NrZnVuYywgbG9ja2Z1bmNhcmcsICZuZXdwYXJlbnQpOworCWlmIChlcnJvcikg
eworCQlidXNfZG1hX3RhZ19kZXN0cm95KChidXNfZG1hX3RhZ190KW5ld3RhZyk7CisJCXJldHVy
biAoZXJyb3IpOworCX0KKworCW5ld3RhZy0+Y29tbW9uLmltcGwgPSAmYnVzX2RtYV94ZW5faW1w
bDsKKwluZXd0YWctPnBhcmVudCA9IG5ld3BhcmVudDsKKwluZXd0YWctPm1heF9zZWdtZW50cyA9
IG5zZWdtZW50czsKKwluZXd0YWctPmRvbWlkID0gZG9taWQ7CisKKwkqZG1hdCA9IChidXNfZG1h
X3RhZ190KW5ld3RhZzsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3hlbl9idXNf
ZG1hX3RhZ19kZXN0cm95KGJ1c19kbWFfdGFnX3QgZG1hdCkKK3sKKwlzdHJ1Y3QgYnVzX2RtYV90
YWdfeGVuICp4ZW50YWcsICp4ZW5wYXJlbnQ7CisJaW50IGVycm9yOworCisJeGVudGFnID0gKHN0
cnVjdCBidXNfZG1hX3RhZ194ZW4gKilkbWF0OworCisJZXJyb3IgPSBidXNfZG1hX3RhZ19kZXN0
cm95KHhlbnRhZy0+cGFyZW50KTsKKwlpZiAoZXJyb3IpIHsKKwkJcmV0dXJuIChlcnJvcik7CisJ
fQorCisJd2hpbGUgKHhlbnRhZyAhPSBOVUxMKSB7CisJCXhlbnBhcmVudCA9IChzdHJ1Y3QgYnVz
X2RtYV90YWdfeGVuICopeGVudGFnLT5jb21tb24ucGFyZW50OworCQlpZiAoYXRvbWljX2ZldGNo
YWRkX2ludCgmeGVudGFnLT5jb21tb24ucmVmX2NvdW50LCAtMSkgPT0gMSkgeworCQkJZnJlZSh4
ZW50YWcsIE1fREVWQlVGKTsKKwkJCS8qCisJCQkgKiBMYXN0IHJlZmVyZW5jZSBjb3VudCwgc28g
cmVsZWFzZSBvdXIgcmVmZXJlbmNlIGNvdW50CisJCQkgKiBvbiBvdXIgcGFyZW50LgorCQkJICov
CisJCQl4ZW50YWcgPSB4ZW5wYXJlbnQ7CisJCX0gZWxzZSB7CisJCQl4ZW50YWcgPSBOVUxMOwor
CQl9CisJfQorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAoreGVuX2J1c19kbWFfdGFn
X3NldF9kb21haW4oYnVzX2RtYV90YWdfdCBkbWF0KQoreworCXN0cnVjdCBidXNfZG1hX3RhZ194
ZW4gKnhlbnRhZzsKKwlzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uICpwYXJlbnQ7CisKKwl4ZW50
YWcgPSAoc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqKWRtYXQ7CisJcGFyZW50ID0gKHN0cnVjdCBi
dXNfZG1hX3RhZ19jb21tb24gKil4ZW50YWctPnBhcmVudDsKKworCXJldHVybiAocGFyZW50LT5p
bXBsLT50YWdfc2V0X2RvbWFpbigoYnVzX2RtYV90YWdfdClwYXJlbnQpKTsKK30KKworc3RhdGlj
IGludAoreGVuX2J1c19kbWFtYXBfY3JlYXRlKGJ1c19kbWFfdGFnX3QgZG1hdCwgaW50IGZsYWdz
LCBidXNfZG1hbWFwX3QgKm1hcHApCit7CisJc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqeGVudGFn
OworCXN0cnVjdCBidXNfZG1hbWFwX3hlbiAqeGVubWFwOworCWdyYW50X3JlZl90IGdyZWZfaGVh
ZDsKKwlpbnQgZXJyb3I7CisJdW5zaWduZWQgaW50IGksIG5yZWZzOworCisJeGVudGFnID0gKHN0
cnVjdCBidXNfZG1hX3RhZ194ZW4gKilkbWF0OworCisJLyogbWFwcCBzaG91bGQgYmUgTlVMTCBp
biBjYXNlIG9mIGFuIGVycm9yLiAqLworCSptYXBwID0gTlVMTDsKKworCXhlbm1hcCA9IG1hbGxv
YyhzaXplb2Yoc3RydWN0IGJ1c19kbWFtYXBfeGVuKSwgTV9CVVNETUFfWEVOLAorCSAgICBNX05P
V0FJVCB8IE1fWkVSTyk7CisJaWYgKHhlbm1hcCA9PSBOVUxMKSB7CisJCXJldHVybiAoRU5PTUVN
KTsKKwl9CisKKwllcnJvciA9IGJ1c19kbWFtYXBfY3JlYXRlKHhlbnRhZy0+cGFyZW50LCBmbGFn
cywgJnhlbm1hcC0+bWFwKTsKKwlpZiAoZXJyb3IpIHsKKwkJZnJlZSh4ZW5tYXAsIE1fQlVTRE1B
X1hFTik7CisJCXJldHVybiAoZXJyb3IpOworCX0KKworCXhlbm1hcC0+dGFnID0geGVudGFnOwor
CisJLyogQ2hlY2sgaWYgd2UgbmVlZCB0byBwcmUtYWxsb2NhdGUgZ3JhbnQgcmVmcy4gKi8KKwlp
ZiAoZmxhZ3MgJiBCVVNfRE1BX1hFTl9QUkVBTExPQ19SRUZTKSB7CisJCW5yZWZzID0geGVudGFn
LT5tYXhfc2VnbWVudHM7CisJCXhlbm1hcC0+cmVmcyA9IG1hbGxvYyhucmVmcyAqIHNpemVvZihn
cmFudF9yZWZfdCksCisJCSAgICBNX0JVU0RNQV9YRU4sIE1fTk9XQUlUKTsKKwkJaWYgKHhlbm1h
cC0+cmVmcyA9PSBOVUxMKSB7CisJCQlidXNfZG1hbWFwX2Rlc3Ryb3koZG1hdCwgKGJ1c19kbWFt
YXBfdCl4ZW5tYXApOworCQkJcmV0dXJuIChFTk9NRU0pOworCQl9CisKKwkJZXJyb3IgPSBnbnR0
YWJfYWxsb2NfZ3JhbnRfcmVmZXJlbmNlcyhucmVmcywKKwkJICAgICZncmVmX2hlYWQpOworCQlp
ZiAoZXJyb3IpIHsKKwkJCWZyZWUoeGVubWFwLT5yZWZzLCBNX0JVU0RNQV9YRU4pOworCQkJeGVu
bWFwLT5yZWZzID0gTlVMTDsKKwkJCWJ1c19kbWFtYXBfZGVzdHJveShkbWF0LCAoYnVzX2RtYW1h
cF90KXhlbm1hcCk7CisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkg
PCBucmVmczsgaSsrKSB7CisJCQl4ZW5tYXAtPnJlZnNbaV0gPQorCQkJICAgIGdudHRhYl9jbGFp
bV9ncmFudF9yZWZlcmVuY2UoJmdyZWZfaGVhZCk7CisJCX0KKworCQl4ZW5tYXAtPmdyZWZzX3By
ZWFsbG9jYXRlZCA9IHRydWU7CisJfQorCisJKm1hcHAgPSAoYnVzX2RtYW1hcF90KXhlbm1hcDsK
KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50Cit4ZW5fYnVzX2RtYW1hcF9kZXN0cm95KGJ1
c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCkKK3sKKwlzdHJ1Y3QgYnVzX2RtYV90
YWdfeGVuICp4ZW50YWc7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5tYXA7CisJaW50IGVy
cm9yOworCisJeGVudGFnID0gKHN0cnVjdCBidXNfZG1hX3RhZ194ZW4gKilkbWF0OworCXhlbm1h
cCA9IChzdHJ1Y3QgYnVzX2RtYW1hcF94ZW4gKiltYXA7CisKKwlpZiAobWFwID09IE5VTEwpIHsK
KwkJcmV0dXJuICgwKTsKKwl9CisKKwllcnJvciA9IGJ1c19kbWFtYXBfZGVzdHJveSh4ZW50YWct
PnBhcmVudCwgeGVubWFwLT5tYXApOworCWlmIChlcnJvcikgeworCQlyZXR1cm4gKGVycm9yKTsK
Kwl9CisKKwkvKgorCSAqIElmIHRoZSBncmFudCByZWZlcmVuY2VzIHdlcmUgcHJlLWFsbG9jYXRl
ZCBvbiBtYXAgY3JlYXRpb24sIHdlIG5lZWQKKwkgKiB0byBjbGVhbiB0aGVtIHVwIGhlcmUuIElm
IG5vdCwgdW5sb2FkIGhhcyBjbGVhbmVkIHRoZW0gdXAgYWxyZWFkeS4KKwkgKi8KKwlpZiAoeGVu
bWFwLT5ncmVmc19wcmVhbGxvY2F0ZWQpIHsKKwkJZ250dGFiX2VuZF9mb3JlaWduX2FjY2Vzc19y
ZWZlcmVuY2VzKHhlbnRhZy0+bWF4X3NlZ21lbnRzLAorCQkgICAgeGVubWFwLT5yZWZzKTsKKwor
CQlmcmVlKHhlbm1hcC0+cmVmcywgTV9CVVNETUFfWEVOKTsKKwkJeGVubWFwLT5yZWZzID0gTlVM
TDsKKwl9CisKKwlLQVNTRVJUKHhlbm1hcC0+cmVmcyA9PSBOVUxMLAorCSAgICAoImJ1c2RtYV94
ZW46IHhlbm1hcC0+cmVmcyBub3QgTlVMTC4gQ2hlY2sgaWYgdW5sb2FkIHdhcyBjYWxsZWQiKSk7
CisKKwlmcmVlKHhlbm1hcCwgTV9CVVNETUFfWEVOKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0
aWMgaW50Cit4ZW5fYnVzX2RtYW1lbV9hbGxvYyhidXNfZG1hX3RhZ190IGRtYXQsIHZvaWQqKiB2
YWRkciwgaW50IGZsYWdzLAorICAgIGJ1c19kbWFtYXBfdCAqbWFwcCkKK3sKKwlzdHJ1Y3QgYnVz
X2RtYV90YWdfeGVuICp4ZW50YWc7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5tYXA7CisJ
aW50IGVycm9yOworCisJeGVudGFnID0gKHN0cnVjdCBidXNfZG1hX3RhZ194ZW4gKilkbWF0Owor
CisJLyogbWFwcCBzaG91bGQgYmUgTlVMTCBpbiBjYXNlIG9mIGFuIGVycm9yLiAqLworCSptYXBw
ID0gTlVMTDsKKworCXhlbm1hcCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGJ1c19kbWFtYXBfeGVu
KSwgTV9CVVNETUFfWEVOLAorCSAgICBNX05PV0FJVCB8IE1fWkVSTyk7CisJaWYgKHhlbm1hcCA9
PSBOVUxMKSB7CisJCXJldHVybiAoRU5PTUVNKTsKKwl9CisKKwllcnJvciA9IGJ1c19kbWFtZW1f
YWxsb2MoeGVudGFnLT5wYXJlbnQsIHZhZGRyLCBmbGFncywgJnhlbm1hcC0+bWFwKTsKKwlpZiAo
ZXJyb3IpIHsKKwkJZnJlZSh4ZW5tYXAsIE1fQlVTRE1BX1hFTik7CisJCXJldHVybiAoZXJyb3Ip
OworCX0KKworCSptYXBwID0gKGJ1c19kbWFtYXBfdCl4ZW5tYXA7CisJcmV0dXJuICgwKTsKK30K
Kworc3RhdGljIHZvaWQKK3hlbl9idXNfZG1hbWVtX2ZyZWUoYnVzX2RtYV90YWdfdCBkbWF0LCB2
b2lkICp2YWRkciwgYnVzX2RtYW1hcF90IG1hcCkKK3sKKwlzdHJ1Y3QgYnVzX2RtYV90YWdfeGVu
ICp4ZW50YWc7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5tYXA7CisKKwl4ZW50YWcgPSAo
c3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqKWRtYXQ7CisJeGVubWFwID0gKHN0cnVjdCBidXNfZG1h
bWFwX3hlbiAqKW1hcDsKKworCWJ1c19kbWFtZW1fZnJlZSh4ZW50YWctPnBhcmVudCwgdmFkZHIs
IHhlbm1hcC0+bWFwKTsKKworCUtBU1NFUlQoeGVubWFwLT5yZWZzID09IE5VTEwsCisJICAgICgi
YnVzZG1hX3hlbjogeGVubWFwLT5yZWZzIG5vdCBOVUxMLiBDaGVjayBpZiB1bmxvYWQgd2FzIGNh
bGxlZCIpKTsKKworCWZyZWUoeGVubWFwLCBNX0JVU0RNQV9YRU4pOworfQorCisvKgorICogWFhY
IFRoaXMgd2lsbCBicmVhayB3aGVuIG11bHRpcGxlIGxvYWRzIGFyZSBjYWxsZWQgb24gdGhlIHNh
bWUgbWFwIGFuZCBvbmUgb2YKKyAqIHRoZSBsb2FkcyAod2hpY2ggaXMgbm90IHRoZSBsYXN0KSBm
YWlscyBiZWNhdXNlIG9mIGEgc2hvcnRhZ2Ugb2YgZ3JhbnQgcmVmcy4KKyAqIFRoZSByZWFzb24g
aXMgdGhhdCB0aGVyZSBpcyBubyBjbGVhbiB3YXkgdG8gY29udGludWUgd2hlcmUgd2UgbGVmdCBv
ZmYuIE1heWJlCisgKiBjYWxsaW5nIGJ1c19kbWFtYXBfbG9hZF9tZW0oKSBjYW4gd29yayBpZiB3
ZSB0cmFjayBhbGwgdGhlIG1lbW9yeSBzZWdtZW50cworICogYWxyZWFkeSBhbGxvY2F0ZWQgYnkg
b3VyIG1hcC4KKyAqCisgKiBNb3JlIHNwZWNpZmljYWxseSwgX2J1c19kbWFtYXBfbG9hZF92bGlz
dCgpLCBfYnVzX2RtYW1hcF9sb2FkX3BsaXN0KCkgd2lsbAorICogYnJlYWsgaWYgYSBzaG9ydGFn
ZSBvZiBncmFudCByZWZlcmVuY2VzIG9jY3Vycy4KKyAqLworc3RhdGljIHZvaWQKK3hlbl9nbnR0
YWJfZnJlZV9jYWxsYmFjayh2b2lkICphcmcpCit7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4
ZW5tYXA7CisJc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqeGVudGFnOworCWdyYW50X3JlZl90IGdy
ZWZfaGVhZDsKKwlidXNfZG1hX3NlZ21lbnRfdCAqc2VnczsKKwlidXNfZG1hbWFwX2NhbGxiYWNr
X3QgKmNhbGxiYWNrOworCWludCBlcnJvcjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXhlbm1hcCA9
IGFyZzsKKwl4ZW50YWcgPSB4ZW5tYXAtPnRhZzsKKwljYWxsYmFjayA9IHhlbm1hcC0+Y2FsbGJh
Y2s7CisKKwllcnJvciA9IGdudHRhYl9hbGxvY19ncmFudF9yZWZlcmVuY2VzKHhlbm1hcC0+bnJl
ZnMsICZncmVmX2hlYWQpOworCUtBU1NFUlQoZXJyb3IgPT0gMCwgKCJidXNkbWFfeGVuOiBhbGxv
Y2F0aW9uIG9mIGdyYW50IHJlZnMgaW4gdGhlICIKKwkgICAgImdyYW50IHRhYmxlIGZyZWUgY2Fs
bGJhY2sgZmFpbGVkLiIpKTsKKworCXNlZ3MgPSB4ZW5tYXAtPnRlbXBfc2VnczsKKwlLQVNTRVJU
KHNlZ3MgIT0gTlVMTCwKKwkgICAgKCJidXNkbWFfeGVuOiAlczogeGVubWFwLT50ZW1wX3NlZ3Mg
PSBOVUxMIiAsIF9fZnVuY19fKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgeGVubWFwLT5ucmVmczsg
aSsrKSB7CisJCXhlbm1hcC0+cmVmc1tpXSA9IGdudHRhYl9jbGFpbV9ncmFudF9yZWZlcmVuY2Uo
JmdyZWZfaGVhZCk7CisJCWdudHRhYl9ncmFudF9mb3JlaWduX2FjY2Vzc19yZWYoeGVubWFwLT5y
ZWZzW2ldLCB4ZW50YWctPmRvbWlkLAorCQkgICAgYXRvcChzZWdzW2ldLmRzX2FkZHIpLCB4ZW5t
YXAtPmdudHRhYl9mbGFncyk7CisJfQorCisJeGVudGFnLT5jb21tb24ubG9ja2Z1bmMoeGVudGFn
LT5jb21tb24ubG9ja2Z1bmNhcmcsIEJVU19ETUFfTE9DSyk7CisJKCpjYWxsYmFjaykoeGVubWFw
LT5jYWxsYmFja19hcmcsIHNlZ3MsIHhlbm1hcC0+bnJlZnMsIDApOworCXhlbnRhZy0+Y29tbW9u
LmxvY2tmdW5jKHhlbnRhZy0+Y29tbW9uLmxvY2tmdW5jYXJnLAorCSAgICBCVVNfRE1BX1VOTE9D
Syk7CisKKwkvKiBXZSBkb24ndCBuZWVkIHRoZSB0ZW1wX3NlZ3MgYXJyYXkgYW55bW9yZS4gKi8K
KwlmcmVlKHhlbm1hcC0+dGVtcF9zZWdzLCBNX0JVU0RNQV9YRU4pOworCXhlbm1hcC0+dGVtcF9z
ZWdzID0gTlVMTDsKKworCXJldHVybjsKK30KKworLyoKKyAqIFRoaXMgZGFuY2Ugd2l0aCB0ZW1w
X3NlZ3Mgd2FycmFudHMgYSBkZXRhaWxlZCBleHBsYW5hdGlvbi4gVGhlIHNlZ3MgcmV0dXJuZWQK
KyAqIGJ5IG1hcF9jb21wbGV0ZSgpIGFycmF5IHdvdWxkIGdldCBvdmVyLXdyaXR0ZW4gd2hlbiBh
bm90aGVyIGxvYWQgb24gdGhlIHNhbWUKKyAqIHRhZyBpcyBjYWxsZWQuIFRoZSBzY29wZSBvZiB0
aGUgc2VncyBhcnJheSBpcyBsaW1pdGVkIHRvIHRoZSBjYWxsYmFjaworICogcHJvdmlkZWQgdG8g
dGhlIGxvYWQgb2YgdGhlIHBhcmVudCAoeGVuX2RtYW1hcF9jYWxsYmFjayBpbiB0aGlzIGNhc2Up
LiBBZnRlcgorICogdGhhdCwgaXQgY2FuIGJlIG92ZXItd3JpdHRlbi4gU28sIHdlIG5lZWQgdG8g
bWFrZSBhIGJhY2t1cCBvZiBpdCBiZWZvcmUgd2UKKyAqIHdhaXQgZm9yIGdyYW50IHJlZmVyZW5j
ZXMsIGJlY2F1c2UgaXQgaXMgcG9zc2libGUgdGhhdCBieSB0aGUgdGltZSB0aGUgZ3JhbnQKKyAq
IHRhYmxlIGNhbGxiYWNrIGlzIHJlY2VpdmVkLCB0aGUgc2VncyBhcnJheSBoYXMgYWxyZWFkeSBi
ZWVuIG92ZXItd3JpdHRlbi4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3hlbl9kbWFtYXBfc2V0
dXBfdGVtcF9zZWdzKHN0cnVjdCBidXNfZG1hbWFwX3hlbiAqeGVubWFwLAorICAgIGJ1c19kbWFf
c2VnbWVudF90ICpzZWdzKQoreworCXVuc2lnbmVkIGludCBpOworCisJS0FTU0VSVCh4ZW5tYXAt
PnRlbXBfc2VncyA9PSBOVUxMLCAoIiVzOiB0ZW1wX3NlZ3MgYWxyZWFkeSBzZXQtdXAiLAorCSAg
ICBfX2Z1bmNfXykpOworCisJeGVubWFwLT50ZW1wX3NlZ3MgPSBtYWxsb2MoeGVubWFwLT5ucmVm
cyAqIHNpemVvZihidXNfZG1hX3NlZ21lbnRfdCksCisJICAgIE1fQlVTRE1BX1hFTiwgTV9OT1dB
SVQpOworCWlmICh4ZW5tYXAtPnRlbXBfc2VncyA9PSBOVUxMKSB7CisJCXJldHVybiAoRU5PTUVN
KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgeGVubWFwLT5ucmVmczsgaSsrKSB7CisJCXhlbm1h
cC0+dGVtcF9zZWdzW2ldID0gc2Vnc1tpXTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0
aWMgaW50Cit4ZW5fZG1hbWFwX2FsbG9jX3JlZnMoc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5t
YXAsIHVuc2lnbmVkIGludCBucmVmcykKK3sKKwlpbnQgZXJyb3I7CisJdW5zaWduZWQgaW50IGk7
CisJLyogVGhlIGhlYWQgb2YgdGhlIGdyYW50IHJlZiBsaXN0IHVzZWQgZm9yIGJhdGNoIGFsbG9j
YXRpbmcgdGhlIHJlZnMuICovCisJZ3JhbnRfcmVmX3QgZ3JlZl9oZWFkOworCWJ1c19kbWFfc2Vn
bWVudF90ICpzZWdzOworCXN0cnVjdCBidXNfZG1hX3RhZ194ZW4gKnhlbnRhZzsKKworCXhlbnRh
ZyA9IHhlbm1hcC0+dGFnOworCisJaWYgKHhlbm1hcC0+cmVmcyA9PSBOVUxMKSB7CisJCXhlbm1h
cC0+cmVmcyA9IG1hbGxvYyh4ZW50YWctPm1heF9zZWdtZW50cyAqCisJCSAgICBzaXplb2YoZ3Jh
bnRfcmVmX3QpLCBNX0JVU0RNQV9YRU4sIE1fTk9XQUlUKTsKKwkJaWYgKHhlbm1hcC0+cmVmcyA9
PSBOVUxMKSB7CisJCQlyZXR1cm4gKEVOT01FTSk7CisJCX0KKwl9CisKKwllcnJvciA9IGdudHRh
Yl9hbGxvY19ncmFudF9yZWZlcmVuY2VzKG5yZWZzLCAmZ3JlZl9oZWFkKTsKKwlpZiAoZXJyb3Ip
IHsKKwkJaWYgKCF4ZW5tYXAtPnNsZWVwYWJsZSkgeworCQkJZ250dGFiX2VuZF9mb3JlaWduX2Fj
Y2Vzc19yZWZlcmVuY2VzKHhlbm1hcC0+bnJlZnMsCisJCQkgICAgeGVubWFwLT5yZWZzKTsKKwkJ
CWZyZWUoeGVubWFwLT5yZWZzLCBNX0JVU0RNQV9YRU4pOworCQkJeGVubWFwLT5yZWZzID0gTlVM
TDsKKwkJCXJldHVybiAoZXJyb3IpOworCQl9CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byB1cGRh
dGUgdGhlIHZhbHVlIG9mIG5yZWZzIGJlZm9yZSB3YWl0aW5nLCBiZWNhdXNlCisJCSAqIHhlbl9n
bnR0YWJfZnJlZV9jYWxsYmFjaygpIGV4cGVjdHMgdGhlIHVwZGF0ZWQgdmFsdWUuCisJCSAqLwor
CQl4ZW5tYXAtPm5yZWZzICs9IG5yZWZzOworCisJCS8qCisJCSAqIFRoZSByZWFzb24gZm9yIHRo
ZSBOVUxMIGNoZWNrIGlzIHRoYXQgd2UgY2FuIGdldCBoZXJlIGZyb20KKwkJICogdHdvIHBsYWNl
czogeGVuX2RtYW1hcF9jYWxsYmFjaygpIG9yIG9uZSBvZiB0aGUgbG9hZHMuIFdoZW4KKwkJICog
d2UgYXJlIGNvbWluZyBmcm9tIHRoZSB4ZW5fZG1hbWFwX2NhbGxiYWNrKCksIGl0IG1lYW5zIHRo
ZQorCQkgKiBsb2FkIHdhcyBkZWZlcnJlZCwgYW5kIHRoZW4gdGhlIGNhbGxiYWNrIHdhcyBjYWxs
ZWQuCisJCSAqIHhlbl9kbWFtYXBfY2FsbGJhY2soKSBzZXRzIHVwIHRlbXBfc2VncyBiZWZvcmUg
Y2FsbGluZyB0aGlzCisJCSAqIGZ1bmN0aW9uLCBzbyBubyBuZWVkIHRvIGNvcHkgdGhlIHNlZ3Mg
YXJyYXksIGl0IGhhcyBhbHJlYWR5CisJCSAqIGJlZW4gZG9uZS4gVGhlIHJlYXNvbiB3ZSBkb24n
dCBzaW1wbHkgY2FsbCBtYXBfY29tcGxldGUoKQorCQkgKiBpbiBib3RoIGNhc2VzIGlzIGJlY2F1
c2UgbWFwX2NvbXBsZXRlKCkgZm9yIHRoZSBtYXAgd2FzCisJCSAqIGFscmVhZHkgY2FsbGVkIGJl
Zm9yZSB4ZW5fZG1hbWFwX2NhbGxiYWNrKCkgd2FzIGNhbGxlZC4gV2UKKwkJICogc2hvdWxkIG5v
dCBjYWxsIG1hcF9jb21wbGV0ZSgpIHR3aWNlLiBJdCB3b3VsZG4ndCBiZSBhCisJCSAqIHByb2Js
ZW0gZm9yIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGJ1c2RtYV9ib3VuY2UsCisJCSAq
IGJ1dCBpdCBpcyBub3QgYSBnb29kIHRoaW5nIHRvIGFzc3VtZSB0aGluZ3MgYWJvdXQgdGhlCisJ
CSAqIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYW4gaW50ZXJmYWNlLgorCQkgKi8KKwkJaWYg
KHhlbm1hcC0+dGVtcF9zZWdzID09IE5VTEwpIHsKKwkJCS8qCisJCQkgKiBDb21wbGV0ZSB0aGUg
cGFyZW50J3MgbG9hZCBjeWNsZSBieSBjYWxsaW5nCisJCQkgKiBtYXBfY29tcGxldGUuCisJCQkg
Ki8KKwkJCXNlZ3MgPSBfYnVzX2RtYW1hcF9jb21wbGV0ZSh4ZW50YWctPnBhcmVudCwgeGVubWFw
LT5tYXAsCisJCQkgICAgTlVMTCwgeGVubWFwLT5ucmVmcywgMCk7CisKKwkJCS8qIFNhdmUgYSBj
b3B5IG9mIHRoZSBzZWdzIGFycmF5LCB3ZSBuZWVkIGl0IGxhdGVyLiAqLworCQkJZXJyb3IgPSB4
ZW5fZG1hbWFwX3NldHVwX3RlbXBfc2Vncyh4ZW5tYXAsIHNlZ3MpOworCQkJaWYgKGVycm9yKSB7
CisJCQkJcmV0dXJuIChlcnJvcik7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBSZXF1ZXN0IGEg
ZnJlZSBjYWxsYmFjayBzbyB3ZSB3aWxsIGJlIG5vdGlmaWVkIHdoZW4gdGhlCisJCSAqIGdyYW50
IHJlZnMgYXJlIGF2YWlsYWJsZS4KKwkJICovCisJCWdudHRhYl9yZXF1ZXN0X2ZyZWVfY2FsbGJh
Y2soJnhlbm1hcC0+Z250dGFiX2NhbGxiYWNrLAorCQkgICAgeGVuX2dudHRhYl9mcmVlX2NhbGxi
YWNrLCB4ZW5tYXAsCisJCSAgICB4ZW5tYXAtPm5yZWZzKTsKKworCQlyZXR1cm4gKEVJTlBST0dS
RVNTKTsKKwl9CisKKwkvKiBDbGFpbSB0aGUgZ3JhbnQgcmVmZXJlbmNlcyBhbGxvY2F0ZWQgYW5k
IHN0b3JlIGluIHRoZSByZWZzIGFycmF5LiAqLworCWZvciAoaSA9IHhlbm1hcC0+bnJlZnM7IGkg
PCB4ZW5tYXAtPm5yZWZzICsgbnJlZnM7IGkrKykgeworCQl4ZW5tYXAtPnJlZnNbaV0gPSBnbnR0
YWJfY2xhaW1fZ3JhbnRfcmVmZXJlbmNlKCZncmVmX2hlYWQpOworCX0KKworCXJldHVybiAoMCk7
Cit9CisKKy8qIEFuIGludGVybmFsIGZ1bmN0aW9uIHRoYXQgaXMgYSBoZWxwZXIgZm9yIHRoZSB0
aHJlZSBsb2FkIHZhcmlhbnRzLiAqLworc3RhdGljIGludAoreGVuX2xvYWRfaGVscGVyKHN0cnVj
dCBidXNfZG1hX3RhZ194ZW4gKnhlbnRhZywgc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5tYXAs
CisgICAgc3RydWN0IGxvYWRfb3Agb3ApCit7CisJaW50IGVycm9yLCBzZWdjb3VudDsKKworCUtB
U1NFUlQoeGVubWFwICE9IE5VTEwsICgiJXM6IExvYWQgY2FsbGVkIG9uIGEgTlVMTCBtYXAiLCBf
X2Z1bmNfXykpOworCisJeGVubWFwLT5nbnR0YWJfZmxhZ3MgPSBvcC5mbGFncyA+PiBCVVNfRE1B
X1hFTl9HTlRUQUJfRkxBR1NfU0hJRlQ7CisJb3AuZmxhZ3MgJj0gMHhGRkZGOworCisJLyoKKwkg
KiBzZWdwIGNvbnRhaW5zIHRoZSBzdGFydGluZyBzZWdtZW50IG9uIGVudHJhY2UsIGFuZCB0aGUg
ZW5kaW5nIHNlZ21lbnQKKwkgKiBvbiBleGl0LiBXZSBjYW4gdXNlIGl0IHRvIGNhbGN1bGF0ZSBo
b3cgbWFueSBzZWdtZW50cyB0aGUgbWFwIHVzZXMuCisJICovCisJc2VnY291bnQgPSAqb3Auc2Vn
cDsKKworCXN3aXRjaCAob3AudHlwZSkgeworCWNhc2UgTE9BRF9NQToKKwkJZXJyb3IgPSBfYnVz
X2RtYW1hcF9sb2FkX21hKHhlbnRhZy0+cGFyZW50LCB4ZW5tYXAtPm1hcCwKKwkJICAgIG9wLm1h
Lm1hLCBvcC5zaXplLCBvcC5tYS5tYV9vZmZzLCBvcC5mbGFncywgb3Auc2VncywKKwkJICAgIG9w
LnNlZ3ApOworCQlicmVhazsKKwljYXNlIExPQURfUEhZUzoKKwkJZXJyb3IgPSBfYnVzX2RtYW1h
cF9sb2FkX3BoeXMoeGVudGFnLT5wYXJlbnQsIHhlbm1hcC0+bWFwLAorCQkgICAgb3AucGh5cy5i
dWYsIG9wLnNpemUsIG9wLmZsYWdzLCBvcC5zZWdzLCBvcC5zZWdwKTsKKwkJYnJlYWs7CisJY2Fz
ZSBMT0FEX0JVRkZFUjoKKwkJZXJyb3IgPSBfYnVzX2RtYW1hcF9sb2FkX2J1ZmZlcih4ZW50YWct
PnBhcmVudCwgeGVubWFwLT5tYXAsCisJCSAgICBvcC5idWZmZXIuYnVmLCBvcC5zaXplLCBvcC5i
dWZmZXIucG1hcCwgb3AuZmxhZ3MsIG9wLnNlZ3MsCisJCSAgICBvcC5zZWdwKTsKKwkJYnJlYWs7
CisJfQorCisJaWYgKGVycm9yID09IEVJTlBST0dSRVNTKSB7CisJCXJldHVybiAoZXJyb3IpOwor
CX0KKwlpZiAoZXJyb3IgIT0gMCkgeworCQlnb3RvIGVycjsKKwl9CisKKwlzZWdjb3VudCA9ICpv
cC5zZWdwIC0gc2VnY291bnQ7CisJS0FTU0VSVCh4ZW5tYXAtPm5yZWZzICsgc2VnY291bnQgPD0g
eGVudGFnLT5tYXhfc2VnbWVudHMsICgiYnVzZG1hX3hlbjoiCisJICAgICIgc2VnY291bnQgdG9v
IGxhcmdlOiBzZWdjb3VudCA9ICVkLCB4ZW50YWctPm1heF9zZWdtZW50cyA9ICVkIiwKKwkgICAg
c2VnY291bnQsIHhlbnRhZy0+bWF4X3NlZ21lbnRzKSk7CisKKwkvKiBUaGUgZ3JhbnQgcmVmcyB3
ZXJlIGFsbG9jYXRlZCBvbiBtYXAgY3JlYXRpb24uICovCisJaWYgKHhlbm1hcC0+Z3JlZnNfcHJl
YWxsb2NhdGVkKSB7CisJCXhlbm1hcC0+bnJlZnMgKz0gc2VnY291bnQ7CisJCXJldHVybiAoMCk7
CisJfQorCisJZXJyb3IgPSB4ZW5fZG1hbWFwX2FsbG9jX3JlZnMoeGVubWFwLCBzZWdjb3VudCk7
CisJaWYgKGVycm9yID09IEVJTlBST0dSRVNTKSB7CisJCXJldHVybiAoRUlOUFJPR1JFU1MpOwor
CX0KKwlpZiAoZXJyb3IgIT0gMCkgeworCQlnb3RvIGVycjsKKwl9CisKKwl4ZW5tYXAtPm5yZWZz
ICs9IHNlZ2NvdW50OworCisJcmV0dXJuICgwKTsKKworZXJyOgorCUtBU1NFUlQoZXJyb3IgIT0g
MCwKKwkgICAgKCJidXNkbWFfeGVuOiAlczogSW4gZXJyb3IgaGFuZGxpbmcgc2VjdGlvbiBidXQg
ZXJyb3IgaXMgMCIsCisJICAgIF9fZnVuY19fKSk7CisJLyogVW5sb2FkIHRoZSBtYXAgYmVmb3Jl
IHJldHVybmluZy4gKi8KKwlidXNfZG1hbWFwX3VubG9hZCh4ZW50YWctPnBhcmVudCwgeGVubWFw
LT5tYXApOworCXJldHVybiAoZXJyb3IpOworfQorCitzdGF0aWMgaW50Cit4ZW5fYnVzX2RtYW1h
cF9sb2FkX21hKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKyAgICBzdHJ1
Y3Qgdm1fcGFnZSAqKm1hLCBidXNfc2l6ZV90IHRsZW4sIGludCBtYV9vZmZzLCBpbnQgZmxhZ3Ms
CisgICAgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCAqc2VncCkKK3sKKwlzdHJ1Y3QgYnVz
X2RtYV90YWdfeGVuICp4ZW50YWc7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5tYXA7CisJ
c3RydWN0IGxvYWRfb3Agb3A7CisKKwl4ZW50YWcgPSAoc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAq
KWRtYXQ7CisJeGVubWFwID0gKHN0cnVjdCBidXNfZG1hbWFwX3hlbiAqKW1hcDsKKworCW9wLnR5
cGUgPSBMT0FEX01BOworCW9wLnNpemUgPSB0bGVuOworCW9wLmZsYWdzID0gZmxhZ3M7CisJb3Au
c2VncyA9IHNlZ3M7CisJb3Auc2VncCA9IHNlZ3A7CisJb3AubWEubWEgPSBtYTsKKwlvcC5tYS5t
YV9vZmZzID0gbWFfb2ZmczsKKworCXJldHVybiAoeGVuX2xvYWRfaGVscGVyKHhlbnRhZywgeGVu
bWFwLCBvcCkpOworfQorCitzdGF0aWMgaW50Cit4ZW5fYnVzX2RtYW1hcF9sb2FkX3BoeXMoYnVz
X2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLAorICAgIHZtX3BhZGRyX3QgYnVmLCBi
dXNfc2l6ZV90IGJ1ZmxlbiwgaW50IGZsYWdzLAorICAgIGJ1c19kbWFfc2VnbWVudF90ICpzZWdz
LCBpbnQgKnNlZ3ApCit7CisJc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqeGVudGFnOworCXN0cnVj
dCBidXNfZG1hbWFwX3hlbiAqeGVubWFwOworCXN0cnVjdCBsb2FkX29wIG9wOworCisJeGVudGFn
ID0gKHN0cnVjdCBidXNfZG1hX3RhZ194ZW4gKilkbWF0OworCXhlbm1hcCA9IChzdHJ1Y3QgYnVz
X2RtYW1hcF94ZW4gKiltYXA7CisKKwlvcC50eXBlID0gTE9BRF9QSFlTOworCW9wLnNpemUgPSBi
dWZsZW47CisJb3AuZmxhZ3MgPSBmbGFnczsKKwlvcC5zZWdzID0gc2VnczsKKwlvcC5zZWdwID0g
c2VncDsKKwlvcC5waHlzLmJ1ZiA9IGJ1ZjsKKworCXJldHVybiAoeGVuX2xvYWRfaGVscGVyKHhl
bnRhZywgeGVubWFwLCBvcCkpOworfQorCitzdGF0aWMgaW50Cit4ZW5fYnVzX2RtYW1hcF9sb2Fk
X2J1ZmZlcihidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsCisgICAgdm9pZCAq
YnVmLCBidXNfc2l6ZV90IGJ1Zmxlbiwgc3RydWN0IHBtYXAgKnBtYXAsIGludCBmbGFncywKKyAg
ICBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50ICpzZWdwKQoreworCXN0cnVjdCBidXNfZG1h
X3RhZ194ZW4gKnhlbnRhZzsKKwlzdHJ1Y3QgYnVzX2RtYW1hcF94ZW4gKnhlbm1hcDsKKwlzdHJ1
Y3QgbG9hZF9vcCBvcDsKKworCXhlbnRhZyA9IChzdHJ1Y3QgYnVzX2RtYV90YWdfeGVuICopZG1h
dDsKKwl4ZW5tYXAgPSAoc3RydWN0IGJ1c19kbWFtYXBfeGVuICopbWFwOworCisJb3AudHlwZSA9
IExPQURfQlVGRkVSOworCW9wLnNpemUgPSBidWZsZW47CisJb3AuZmxhZ3MgPSBmbGFnczsKKwlv
cC5zZWdzID0gc2VnczsKKwlvcC5zZWdwID0gc2VncDsKKwlvcC5idWZmZXIuYnVmID0gYnVmOwor
CW9wLmJ1ZmZlci5wbWFwID0gcG1hcDsKKworCXJldHVybiAoeGVuX2xvYWRfaGVscGVyKHhlbnRh
ZywgeGVubWFwLCBvcCkpOworfQorCisvKgorICogSWYgdGhlIGxvYWQgaXMgY2FsbGVkIHdpdGgg
dGhlIGZsYWcgQlVTX0RNQV9XQUlUT0ssIGFuZCB0aGUgYWxsb2NhdGlvbiBpcworICogZGVmZXJy
ZWQsIHRoZSBncmFudCByZWZlcmVuY2VzIG5lZWQgdG8gYmUgYWxsb2NhdGVkIGJlZm9yZSBjYWxs
aW5nIHRoZQorICogY2xpZW50J3MgY2FsbGJhY2suCisgKi8KK3N0YXRpYyB2b2lkCit4ZW5fZG1h
bWFwX2NhbGxiYWNrKHZvaWQgKmNhbGxiYWNrX2FyZywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3Ms
IGludCBuc2VnLAorICAgIGludCBlcnJvcikKK3sKKwlzdHJ1Y3QgYnVzX2RtYV90YWdfeGVuICp4
ZW50YWc7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5tYXA7CisJYnVzX2RtYW1hcF9jYWxs
YmFja190ICpjYWxsYmFjazsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXhlbm1hcCA9IGNhbGxiYWNr
X2FyZzsKKwl4ZW50YWcgPSB4ZW5tYXAtPnRhZzsKKwljYWxsYmFjayA9IHhlbm1hcC0+Y2FsbGJh
Y2s7CisKKwl4ZW5tYXAtPm5yZWZzID0gbnNlZzsKKworCWlmIChlcnJvcikgeworCQlnb3RvIGVy
cjsKKwl9CisKKwllcnJvciA9IHhlbl9kbWFtYXBfc2V0dXBfdGVtcF9zZWdzKHhlbm1hcCwgc2Vn
cyk7CisJaWYgKGVycm9yKSB7CisJCWdvdG8gZXJyOworCX0KKworCWVycm9yID0geGVuX2RtYW1h
cF9hbGxvY19yZWZzKHhlbm1hcCwgeGVubWFwLT5ucmVmcyk7CisJaWYgKGVycm9yID09IEVJTlBS
T0dSRVNTKSB7CisJCXJldHVybjsKKwl9CisJaWYgKGVycm9yICE9IDApeworCQlmcmVlKHhlbm1h
cC0+dGVtcF9zZWdzLCBNX0JVU0RNQV9YRU4pOworCQl4ZW5tYXAtPnRlbXBfc2VncyA9IE5VTEw7
CisJCWdvdG8gZXJyOworCX0KKworCS8qIFdlIGRvbid0IG5lZWQgdGVtcF9zZWdzIGFueSBtb3Jl
LiAqLworCWZyZWUoeGVubWFwLT50ZW1wX3NlZ3MsIE1fQlVTRE1BX1hFTik7CisJeGVubWFwLT50
ZW1wX3NlZ3MgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IHhlbm1hcC0+bnJlZnM7IGkrKykg
eworCQlnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3NfcmVmKHhlbm1hcC0+cmVmc1tpXSwgeGVu
dGFnLT5kb21pZCwKKwkJICAgIGF0b3Aoc2Vnc1tpXS5kc19hZGRyKSwgeGVubWFwLT5nbnR0YWJf
ZmxhZ3MpOworCX0KKworCSgqY2FsbGJhY2spKHhlbm1hcC0+Y2FsbGJhY2tfYXJnLCBzZWdzLCBu
c2VnLCAwKTsKKwlyZXR1cm47CisKK2VycjoKKwlLQVNTRVJUKGVycm9yICE9IDAsICgiJXM6IElu
IGVycm9yIGhhbmRsaW5nIHNlY3Rpb24sIGJ1dCBlcnJvciBpcyAwIiwKKwkgICAgX19mdW5jX18p
KTsKKwkoKmNhbGxiYWNrKSh4ZW5tYXAtPmNhbGxiYWNrX2FyZywgc2VncywgbnNlZywgZXJyb3Ip
OworfQorCitzdGF0aWMgdm9pZAoreGVuX2J1c19kbWFtYXBfd2FpdG9rKGJ1c19kbWFfdGFnX3Qg
ZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKyAgICBzdHJ1Y3QgbWVtZGVzYyAqbWVtLCBidXNfZG1h
bWFwX2NhbGxiYWNrX3QgKmNhbGxiYWNrLAorICAgIHZvaWQgKmNhbGxiYWNrX2FyZykKK3sKKwlz
dHJ1Y3QgYnVzX2RtYV90YWdfeGVuICp4ZW50YWc7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4
ZW5tYXA7CisKKwl4ZW50YWcgPSAoc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqKWRtYXQ7CisJeGVu
bWFwID0gKHN0cnVjdCBidXNfZG1hbWFwX3hlbiAqKW1hcDsKKworCXhlbm1hcC0+Y2FsbGJhY2sg
PSBjYWxsYmFjazsKKwl4ZW5tYXAtPmNhbGxiYWNrX2FyZyA9IGNhbGxiYWNrX2FyZzsKKwl4ZW5t
YXAtPnNsZWVwYWJsZSA9IHRydWU7CisKKwkvKgorCSAqIFNvbWUgZXh0cmEgd29yayBoYXMgdG8g
YmUgZG9uZSBiZWZvcmUgY2FsbGluZyB0aGUgY2xpZW50IGNhbGxiYWNrCisJICogZnJvbSBhIGRl
ZmVycmVkIGNvbnRleHQuIFdoZW4gdGhlIGxvYWQgZ2V0cyBkZWZlcnJlZCwgdGhlIGdyYW50CisJ
ICogcmVmZXJlbmNlcyBhcmUgbm90IGFsbG9jYXRlZC4geGVuX2RtYW1hcF9jYWxsYmFjayBhbGxv
Y2F0ZXMgdGhlCisJICogZ3JhbnQgcmVmcyBiZWZvcmUgY2FsbGluZyB0aGUgY2xpZW50J3MgY2Fs
bGJhY2suCisJICovCisJX2J1c19kbWFtYXBfd2FpdG9rKHhlbnRhZy0+cGFyZW50LCB4ZW5tYXAt
Pm1hcCwgbWVtLAorCSAgICB4ZW5fZG1hbWFwX2NhbGxiYWNrLCB4ZW5tYXApOworfQorCitzdGF0
aWMgYnVzX2RtYV9zZWdtZW50X3QgKgoreGVuX2J1c19kbWFtYXBfY29tcGxldGUoYnVzX2RtYV90
YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLAorICAgIGJ1c19kbWFfc2VnbWVudF90ICpzZWdz
LCBpbnQgbnNlZ3MsIGludCBlcnJvcikKK3sKKwlzdHJ1Y3QgYnVzX2RtYV90YWdfeGVuICp4ZW50
YWc7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5tYXA7CisJdW5zaWduZWQgaW50IGk7CisK
Kwl4ZW50YWcgPSAoc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqKWRtYXQ7CisJeGVubWFwID0gKHN0
cnVjdCBidXNfZG1hbWFwX3hlbiAqKW1hcDsKKworCXNlZ3MgPSBfYnVzX2RtYW1hcF9jb21wbGV0
ZSh4ZW50YWctPnBhcmVudCwgeGVubWFwLT5tYXAsIHNlZ3MsIG5zZWdzLAorCSAgICBlcnJvcik7
CisKKwkvKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3IsIGRvIG5vdCBtYXAgdGhlIGdyYW50IHJlZmVy
ZW5jZXMuICovCisJaWYgKGVycm9yKSB7CisJCXJldHVybiAoc2Vncyk7CisJfQorCisJZm9yIChp
ID0gMDsgaSA8IHhlbm1hcC0+bnJlZnM7IGkrKykgeworCQlnbnR0YWJfZ3JhbnRfZm9yZWlnbl9h
Y2Nlc3NfcmVmKHhlbm1hcC0+cmVmc1tpXSwgeGVudGFnLT5kb21pZCwKKwkJICAgIGF0b3Aoc2Vn
c1tpXS5kc19hZGRyKSwgeGVubWFwLT5nbnR0YWJfZmxhZ3MpOworCX0KKworCXJldHVybiAoc2Vn
cyk7Cit9CisKKy8qCisgKiBYWFggSWYgdGhlIG1hcCBpcyB1bmxvYWRlZCB3aGVuIHRoZSBsb2Fk
IGhhcyBub3QgY29tcGxldGVkLCBhbmQgYWxsb2NhdGlvbiBvZgorICogZ3JhbnQgcmVmZXJlbmNl
cyBoYXMgYmVlbiBkZWZlcmVkLCB0aGlzIG1pZ2h0IGNhdXNlIGEgc2VnbWVudGF0aW9uIGZhdWx0
IGJ5CisgKiBhY2Nlc3NpbmcgeGVubWFwLT5yZWZzLiBUaGlzIHdpbGwgYWxzbyBsZWFrIGdyYW50
IHJlZnMuCisgKi8KK3N0YXRpYyB2b2lkCit4ZW5fYnVzX2RtYW1hcF91bmxvYWQoYnVzX2RtYV90
YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwKQoreworCXN0cnVjdCBidXNfZG1hX3RhZ194ZW4g
KnhlbnRhZzsKKwlzdHJ1Y3QgYnVzX2RtYW1hcF94ZW4gKnhlbm1hcDsKKwl1bnNpZ25lZCBpbnQg
aTsKKworCXhlbnRhZyA9IChzdHJ1Y3QgYnVzX2RtYV90YWdfeGVuICopZG1hdDsKKwl4ZW5tYXAg
PSAoc3RydWN0IGJ1c19kbWFtYXBfeGVuICopbWFwOworCisJLyoKKwkgKiBJZiB0aGUgZ3JhbnQg
cmVmZXJlbmNlcyB3ZXJlIHByZS1hbGxvY2F0ZWQgb24gbWFwIGNyZWF0aW9uLAorCSAqIHhlbl9i
dXNfZG1hbWFwX2Rlc3Ryb3koKSB3aWxsIGNsZWFuIHRoZW0gdXAsIGRvbid0IGRvIGl0IGhlcmUu
IEp1c3QKKwkgKiBlbmQgZm9yZWlnbiBhY2Nlc3MuCisJICovCisJaWYgKHhlbm1hcC0+Z3JlZnNf
cHJlYWxsb2NhdGVkKSB7CisJCWZvciAoaSA9IDA7IGkgPCB4ZW5tYXAtPm5yZWZzOyBpKyspIHsK
KwkJCWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3NfcmVmKHhlbm1hcC0+cmVmc1tpXSk7CisJCX0K
Kwl9IGVsc2UgeworCQlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZmVyZW5jZXMoeGVubWFw
LT5ucmVmcywKKwkJICAgIHhlbm1hcC0+cmVmcyk7CisKKwkJZnJlZSh4ZW5tYXAtPnJlZnMsIE1f
QlVTRE1BX1hFTik7CisJCXhlbm1hcC0+cmVmcyA9IE5VTEw7CisJfQorCisJeGVubWFwLT5ucmVm
cyA9IDA7CisKKwkvKiBSZXNldCB0aGUgZmxhZ3MuICovCisJeGVubWFwLT5zbGVlcGFibGUgPSBm
YWxzZTsKKworCUtBU1NFUlQoeGVubWFwLT50ZW1wX3NlZ3MgPT0gTlVMTCwKKwkgICAgKCJidXNk
bWFfeGVuOiAlczogeGVubWFwLT50ZW1wX3NlZ3Mgbm90IE5VTEwuIiwgX19mdW5jX18pKTsKKwor
CWJ1c19kbWFtYXBfdW5sb2FkKHhlbnRhZy0+cGFyZW50LCB4ZW5tYXAtPm1hcCk7Cit9CisKK3N0
YXRpYyB2b2lkCit4ZW5fYnVzX2RtYW1hcF9zeW5jKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2Rt
YW1hcF90IG1hcCwgYnVzX2RtYXN5bmNfb3BfdCBvcCkKK3sKKwlzdHJ1Y3QgYnVzX2RtYV90YWdf
eGVuICp4ZW50YWc7CisJc3RydWN0IGJ1c19kbWFtYXBfeGVuICp4ZW5tYXA7CisKKwl4ZW50YWcg
PSAoc3RydWN0IGJ1c19kbWFfdGFnX3hlbiAqKWRtYXQ7CisJeGVubWFwID0gKHN0cnVjdCBidXNf
ZG1hbWFwX3hlbiAqKW1hcDsKKworCWJ1c19kbWFtYXBfc3luYyh4ZW50YWctPnBhcmVudCwgeGVu
bWFwLT5tYXAsIG9wKTsKK30KKworYnVzX2RtYV90YWdfdAoreGVuX2dldF9kbWFfdGFnKGJ1c19k
bWFfdGFnX3QgcGFyZW50KQoreworCWJ1c19kbWFfdGFnX3QgbmV3dGFnOworCWJ1c19hZGRyX3Qg
bWF4YWRkcjsKKwlpbnQgZXJyb3I7CisKKwltYXhhZGRyID0gQlVTX1NQQUNFX01BWEFERFI7CisK
KwllcnJvciA9IHhlbl9idXNfZG1hX3RhZ19jcmVhdGUocGFyZW50LAorCSAgICBQQUdFX1NJWkUs
IFBBR0VfU0laRSwJCS8qIGFsaWdubWVudCwgYm91bmRhcnkgKi8KKwkgICAgbWF4YWRkciwJCQkJ
LyogbG93YWRkciAqLworCSAgICBtYXhhZGRyLAkJCQkvKiBoaWdoYWRkciAqLworCSAgICBOVUxM
LCBOVUxMLAkJCQkvKiBmaWx0ZnVuYywgZmlsdGZ1bmNhcmcgKi8KKwkgICAgbWF4YWRkciwJCQkJ
LyogbWF4c2l6ZSAqLworCSAgICBCVVNfU1BBQ0VfVU5SRVNUUklDVEVELAkJLyogbnNlZ21lbnRz
ICovCisJICAgIFBBR0VfU0laRSwJCQkJLyogbWF4c2Vnc3ogKi8KKwkgICAgQlVTRE1BX1hFTl9U
QUdfSU5JVCwJCS8qIGZsYWdzICovCisJICAgIE5VTEwsIE5VTEwsCQkJCS8qIGxvY2tmdW5jLCBs
b2NrZnVuY2FyZyAqLworCSAgICAmbmV3dGFnKTsKKworCXJldHVybiAobmV3dGFnKTsKK30KKwor
Z3JhbnRfcmVmX3QgKgoreGVuX2RtYW1hcF9nZXRfZ3JlZnMoYnVzX2RtYW1hcF90IG1hcCkKK3sK
KwlzdHJ1Y3QgYnVzX2RtYW1hcF94ZW4gKnhlbm1hcDsKKworCXhlbm1hcCA9IChzdHJ1Y3QgYnVz
X2RtYW1hcF94ZW4gKiltYXA7CisKKwlyZXR1cm4gKHhlbm1hcC0+cmVmcyk7Cit9CisKK3N0YXRp
YyBzdHJ1Y3QgYnVzX2RtYV9pbXBsIGJ1c19kbWFfeGVuX2ltcGwgPSB7CisJLnRhZ19jcmVhdGUg
PSB4ZW5fYnVzX2RtYV90YWdfY3JlYXRlLAorCS50YWdfZGVzdHJveSA9IHhlbl9idXNfZG1hX3Rh
Z19kZXN0cm95LAorCS50YWdfc2V0X2RvbWFpbiA9IHhlbl9idXNfZG1hX3RhZ19zZXRfZG9tYWlu
LAorCS5tYXBfY3JlYXRlID0geGVuX2J1c19kbWFtYXBfY3JlYXRlLAorCS5tYXBfZGVzdHJveSA9
IHhlbl9idXNfZG1hbWFwX2Rlc3Ryb3ksCisJLm1lbV9hbGxvYyA9IHhlbl9idXNfZG1hbWVtX2Fs
bG9jLAorCS5tZW1fZnJlZSA9IHhlbl9idXNfZG1hbWVtX2ZyZWUsCisJLmxvYWRfcGh5cyA9IHhl
bl9idXNfZG1hbWFwX2xvYWRfcGh5cywKKwkubG9hZF9idWZmZXIgPSB4ZW5fYnVzX2RtYW1hcF9s
b2FkX2J1ZmZlciwKKwkubG9hZF9tYSA9IHhlbl9idXNfZG1hbWFwX2xvYWRfbWEsCisJLm1hcF93
YWl0b2sgPSB4ZW5fYnVzX2RtYW1hcF93YWl0b2ssCisJLm1hcF9jb21wbGV0ZSA9IHhlbl9idXNf
ZG1hbWFwX2NvbXBsZXRlLAorCS5tYXBfdW5sb2FkID0geGVuX2J1c19kbWFtYXBfdW5sb2FkLAor
CS5tYXBfc3luYyA9IHhlbl9idXNfZG1hbWFwX3N5bmMsCit9OwpkaWZmIC0tZ2l0IGEvc3lzL3g4
Ni94ZW4veGVucHYuYyBiL3N5cy94ODYveGVuL3hlbnB2LmMKaW5kZXggNTg3Y2VkOTEzZS4uMmMx
OTkwN2FiOSAxMDA2NDQKLS0tIGEvc3lzL3g4Ni94ZW4veGVucHYuYworKysgYi9zeXMveDg2L3hl
bi94ZW5wdi5jCkBAIC00NSw2ICs0NSw3IEBAIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKIAogI2lu
Y2x1ZGUgPHhlbi94ZW4tb3MuaD4KICNpbmNsdWRlIDx4ZW4vZ250dGFiLmg+CisjaW5jbHVkZSA8
eGVuL2J1c2RtYV94ZW4uaD4KIAogI2luY2x1ZGUgInhlbm1lbV9pZi5oIgogCkBAIC0xNDUsNiAr
MTQ2LDE5IEBAIHhlbnB2X2ZyZWVfcGh5c21lbShkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxk
LCBpbnQgcmVzX2lkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlCiAJcmV0dXJuIChidXNfcmVsZWFzZV9y
ZXNvdXJjZShjaGlsZCwgU1lTX1JFU19NRU1PUlksIHJlc19pZCwgcmVzKSk7CiB9CiAKK3N0YXRp
YyBidXNfZG1hX3RhZ190Cit4ZW5wdl9nZXRfZG1hX3RhZyhkZXZpY2VfdCBidXMsIGRldmljZV90
IGNoaWxkKQoreworCWJ1c19kbWFfdGFnX3QgcGFyZW50LCBuZXd0YWc7CisKKwlwYXJlbnQgPSBi
dXNfZ2V0X2RtYV90YWcoYnVzKTsKKworCW5ld3RhZyA9IHhlbl9nZXRfZG1hX3RhZyhwYXJlbnQp
OworCUtBU1NFUlQobmV3dGFnICE9IE5VTEwsICgiJXM6IEZhaWxlZCB0byBjcmVhdGUgWGVuIERN
QSB0YWciLCBfX2Z1bmNfXykpOworCisJcmV0dXJuIChuZXd0YWcpOworfQorCiBzdGF0aWMgZGV2
aWNlX21ldGhvZF90IHhlbnB2X21ldGhvZHNbXSA9IHsKIAkvKiBEZXZpY2UgaW50ZXJmYWNlICov
CiAJREVWTUVUSE9EKGRldmljZV9pZGVudGlmeSwJCXhlbnB2X2lkZW50aWZ5KSwKQEAgLTE1OSw2
ICsxNzMsNyBAQCBzdGF0aWMgZGV2aWNlX21ldGhvZF90IHhlbnB2X21ldGhvZHNbXSA9IHsKIAlE
RVZNRVRIT0QoYnVzX3JlbGVhc2VfcmVzb3VyY2UsCQlidXNfZ2VuZXJpY19yZWxlYXNlX3Jlc291
cmNlKSwKIAlERVZNRVRIT0QoYnVzX2FjdGl2YXRlX3Jlc291cmNlLAlidXNfZ2VuZXJpY19hY3Rp
dmF0ZV9yZXNvdXJjZSksCiAJREVWTUVUSE9EKGJ1c19kZWFjdGl2YXRlX3Jlc291cmNlLAlidXNf
Z2VuZXJpY19kZWFjdGl2YXRlX3Jlc291cmNlKSwKKwlERVZNRVRIT0QoYnVzX2dldF9kbWFfdGFn
LAkJeGVucHZfZ2V0X2RtYV90YWcpLAogCiAJLyogSW50ZXJmYWNlIHRvIGFsbG9jYXRlIG1lbW9y
eSBmb3IgZm9yZWlnbiBtYXBwaW5ncyAqLwogCURFVk1FVEhPRCh4ZW5tZW1fYWxsb2MsCQkJeGVu
cHZfYWxsb2NfcGh5c21lbSksCmRpZmYgLS1naXQgYS9zeXMveGVuL2J1c2RtYV94ZW4uaCBiL3N5
cy94ZW4vYnVzZG1hX3hlbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu
LjAwOGFhODA5NDUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMveGVuL2J1c2RtYV94ZW4uaApAQCAt
MCwwICsxLDExNyBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh
dXNlLUZyZWVCU0QKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTggUHJhdHl1c2ggWWFkYXYgPHBy
YXR5dXNoQEZyZWVCU0Qub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICog
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK
KyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICoKKyAqICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKKyAqIFRoaXMgaXMgdGhlIGludGVyZmFjZSBvZiB0aGUgWGVuLXNwZWNpZmljIGJ1c19k
bWEoOSkgaW1wbGVtZW50YXRpb24uIFRoaXMKKyAqIGludGVyZmFjZSBzaG91bGQgYmUgdXNlZCBi
eSBYZW4gZGV2aWNlIGRyaXZlcnMgdGhhdCBuZWVkIHRvIGFsbG9jYXRlIGFuZCBtYXAKKyAqIGdy
YW50IHJlZmVyZW5jZXMuIFRoZSBkbWEgaW1wbGVtZW50YXRpb24gdGFrZXMgY2FyZSBvZiBhbGwg
dGhlIGJvb2trZWVwaW5nCisgKiBuZWVkZWQsIGxpa2UgZXh0cmFjdGluZyBwaHlzaWNhbCBhZGRy
ZXNzZXMgZnJvbSB2aXJ0dWFsIHBhZ2VzLCBhbGxvY2F0aW5nCisgKiB0aGUgZ3JhbnQgcmVmZXJl
bmNlcywgbWFwcGluZyB0aGVtLCB3YWl0aW5nIHdoZW4gdGhlcmUgaXMgYSBzaG9ydGFnZSBvZgor
ICogcmVmZXJlbmNlcywgZXRjLgorICoKKyAqIFVzaW5nIHRoZSBpbXBsZW1lbnRhdGlvbjoKKyAq
CisgKiBBbGwgdGhlIGRldmljZXMgaGFuZ2luZyBvZmYgdGhlIHhlbnB2IGJ1cyBoYXZlIHhlbi1z
cGVjaWZpYyBkbWEgdGFncy4gVG8gdXNlCisgKiB0aGUgaW1wbGVtZW50YXRpb24sIGNyZWF0ZSBh
IGRtYSB0YWcgKHJlYWQgdGhlIGJ1c19kbWEoOSkgbWFuIHBhZ2UgZm9yCisgKiBkZXRhaWxzKS4g
V2hlbiBjcmVhdGluZyB0aGUgdGFnLCB0aGUgZG9taWQgb2YgdGhlIG90aGVyIGVuZCBoYXMgdG8g
YmUgT1InZAorICogd2l0aCB0aGUgZmxhZ3MgYXJndW1lbnQsIGxlZnQgc2hpZnRlZCBieSBCVVNf
RE1BX1hFTl9ET01JRF9TSElGVC4gU2VlIHRoZQorICogI2RlZmluZSBiZWxvdyBmb3IgbW9yZSBp
bmZvLgorICoKKyAqIE9uY2UgeW91IGhhdmUgdGhlIHRhZywgdXNlIGJ1c19kbWFtYXBfbG9hZCgp
IHRvIGFsbG9jYXRlIGEgZ3JhbnQgcmVmZXJlbmNlCisgKiBhbmQgZ3JhbnQgZm9yZWlnbiBhY2Nl
c3MgdG8gdGhlIHBhZ2Uocykgc3BlY2lmaWVkIGluIG1hcF9sb2FkKCkncyBidWYKKyAqIGFyZ3Vt
ZW50LiBUaGUgYWNjZXNzIGlzIGdyYW50ZWQgdG8gdGhlIGRvbWlkIHNwZWNpZmllZCB3aGVuIGNy
ZWF0aW5nIHRoZSB0YWcuCisgKgorICogU29tZSBmbGFncyBjYW4gYmUgcGFzc2VkIHRvIGNoYW5n
ZSB0aGUgYmVoYXZpb3I7IHNlZSB0aGUgZGVmaW5lcyBiZWxvdyBmb3IKKyAqIG1vcmUgaW5mby4g
SWYgQlVTX0RNQV9OT1dBSVQgaXMgbm90IHBhc3NlZCB3aGVuIGxvYWRpbmcsIHRoZSBsb2FkIG1p
Z2h0IGJlCisgKiBkZWZlcnJlZCBpbiBjYXNlIHRoZXJlIGlzIGEgc2hvcnRhZ2Ugb2YgZ3JhbnQg
cmVmZXJlbmNlcy4gVGhlIHNlbWFudGljcyBvZgorICogZGVmZXJyZWQgbG9hZHMgaW4gdGhlIGJ1
c19kbWEoOSkgaW50ZXJmYWNlIGFyZSB1c2VkIGluIHRoaXMgY2FzZS4KKyAqCisgKiBUbyBmcmVl
IHRoZSByZWZlcmVuY2UsIGFuZCB0byBlbmQgZm9yZWlnbiBhY2Nlc3MsIGNhbGwgYnVzX2RtYW1h
cF91bmxvYWQoKS4KKyAqCisgKiBGb3IgZXhhbXBsZSB1c2FnZSwgY2hlY2sgc3lzL2Rldi94ZW4v
bmV0ZnJvbnQvbmV0ZnJvbnQuYworICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5k
ZWYgX19YRU5fQlVTRE1BX0gKKyNkZWZpbmUgX19YRU5fQlVTRE1BX0gKKworLyoKKyAqIEFtb3Vu
dCBvZiBzaGlmdCBuZWVkZWQgdG8gZW5jb2RlL2RlY29kZSBncmFudCB0YWJsZSBmbGFncyBpbiBk
bWEgbG9hZCBmbGFncy4KKyAqIEl0IGlzIHVzZWQgYnkgdGhlIGJ1c2RtYSBpbXBsZW1lbnRhdGlv
biBmdW5jdGlvbnMgeGVuX2J1c19kbWFtYXBfbG9hZF9tYSgpLAorICogeGVuX2J1c19kbWFtYXBf
bG9hZF9waHlzKCksIHhlbl9idXNfZG1hbWFwX2xvYWRfYnVmZmVyKCkgdG8gZGVjb2RlIHRoZQor
ICogZmxhZ3MgdGhhdCBzaG91bGQgYmUgcGFzc2VkIHdoZW4gZG9pbmcgZ3JhbnQgdGFibGUgb3Bl
cmF0aW9ucy4gVGhlIGRyaXZlcnMKKyAqIHNob3VsZCBub3QgZGlyZWN0bHkgdXNlIHRoaXMgdmFs
dWUsIGFuZCBpbnN0ZWFkIHVzZSBCVVNfRE1BX1hFTl9STy4KKyAqLworI2RlZmluZSBCVVNfRE1B
X1hFTl9HTlRUQUJfRkxBR1NfU0hJRlQgMTYKKworLyoKKyAqIFRoaXMgZmxhZyBjYW4gYmUgdXNl
ZCBieSBkcml2ZXJzIHRvIGluZGljYXRlIHRoYXQgcmVhZC1vbmx5IGFjY2VzcyBzaG91bGQgYmUK
KyAqIGdyYW50ZWQgdG8gdGhlIHBhZ2VzLiBUaGV5IHNob3VsZCBkbyBzb21ldGhpbmcgbGlrZToK
KyAqCisgKiBmbGFncyA9IHlvdXJfYnVzZG1hX2ZsYWdzIHwgQlVTX0RNQV9YRU5fUk87CisgKi8K
KyNkZWZpbmUgQlVTX0RNQV9YRU5fUk8gKDF1IDw8IEJVU19ETUFfWEVOX0dOVFRBQl9GTEFHU19T
SElGVCkKKworLyoKKyAqIEFtb3VudCBvZiBzaGlmdCBuZWVkZWQgdG8gZW5jb2RlL2RlY29kZSBk
b21pbiBJRCBpbiBkbWEgdGFnIGNyZWF0ZSBmbGFncy4KKyAqIFVzZWQgYnkgeGVuX2J1c19kbWFf
dGFnX2NyZWF0ZSgpIHRvIGRlY29kZSB0aGUgZG9taWQgZnJvbSB0aGUgZmxhZ3MgcGFzc2VkLgor
ICogVGhlIGNsaWVudCBkcml2ZXJzIHNob3VsZCB1c2UgdGhpcyB0byBlbmNvZGUgdGhlIGRvbWlk
IGluIHRoZSBmbGFncyBwYXJhbWV0ZXIKKyAqIHBhc3NlZCB0byBidXNfZG1hX3RhZ19jcmVhdGUo
KSBieSBkb2luZyBzb21ldGhpbmcgbGlrZToKKyAqCisgKiBmbGFncyA9IHlvdXJfYnVzZG1hX2Zs
YWdzIHwgKG90aGVyZW5kX2lkIDw8IEJVU19ETUFfWEVOX0RPTUlEX1NISUZUKTsKKyAqLworI2Rl
ZmluZSBCVVNfRE1BX1hFTl9ET01JRF9TSElGVCAxNgorCisvKgorICogVGhlIGRyaXZlcnMgY2Fu
IHBhc3MgaXQgdG8gbWFwX2NyZWF0ZSgpJ3MgZmxhZ3MgdG8gcHJlLWFsbG9jYXRlIGdyYW50IHJl
ZnMgc28KKyAqIHRoZXkgZG9uJ3QgaGF2ZSB0byBkZWFsIHdpdGggZmFpbGVkIGdyYW50IHJlZmVy
ZW5jZSBhbGxvY2F0aW9uIHdoZW4gbG9hZGluZy4KKyAqIFRoZSBudW1iZXIgb2YgZ3JhbnQgcmVm
ZXJlbmNlcyBhbGxvY2F0ZWQgaXMgZXF1YWwgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mCisgKiBz
ZWdtZW50cyBwYXNzZWQgdXBvbiB0YWcgY3JlYXRpb24uCisgKgorICogQlVTX0RNQV9CVVMyIGlz
IHJlc2VydmVkIGZvciB0aGUgYnVzZG1hIGltcGxlbWVudGF0aW9ucyB0byB1c2UgYXMgdGhleSB3
aXNoLgorICoKKyAqIE5vdGU6IEdyYW50IHJlZmVyZW5jZXMgYXJlIGEgc2NhcmNlIHJlc291cmNl
LiBUcnkgdG8gbm90IHByZS1hbGxvY2F0ZSB0b28KKyAqIG1hbnkgZ3JhbnQgcmVmZXJlbmNlcywg
b3IgaXQgbWlnaHQgZW5kIHVwIGhpbmRlcmluZyBvdGhlciBkcml2ZXJzLgorICovCisjZGVmaW5l
IEJVU19ETUFfWEVOX1BSRUFMTE9DX1JFRlMgQlVTX0RNQV9CVVMyCisKK2J1c19kbWFfdGFnX3Qg
eGVuX2dldF9kbWFfdGFnKGJ1c19kbWFfdGFnX3QgcGFyZW50KTsKKworLyoKKyAqIEdldCB0aGUg
Z3JhbnQgcmVmZXJlbmNlcyBjb3JyZXNwb25kaW5nIHRvIE1BUC4KKyAqCisgKiBUaGUgbnVtYmVy
IG9mIGdyYW50IHJlZmVyZW5jZXMgaXMgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBzZWdtZW50cywg
d2hpY2ggaXMKKyAqIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgc3BlY2lmaWVkIHdoZW4gbG9hZGlu
ZyB0aGUgbWFwLgorICoKKyAqIE5vdGU6IERvIG5vdCBtb2RpZnkgdGhlIGdyYW50IHJlZmVyZW5j
ZSBhcnJheSByZXR1cm5lZCBpbiBhbnkgd2F5LiBJdCBpcworICogYWxsb2NhdGVkIGFuZCBmcmVl
ZCBieSB0aGUgZG1hbWFwLCBhbmQgaXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcmVhZC1vbmx5IGJ5
CisgKiB0aGUgY2xpZW50IGRyaXZlcnMuCisgKi8KK2dyYW50X3JlZl90ICp4ZW5fZG1hbWFwX2dl
dF9ncmVmcyhidXNfZG1hbWFwX3QgbWFwKTsKKworI2VuZGlmIC8qIF9fWEVOX0JVU0RNQV9IICov
Cg==
--000000000000a402a0057cfbc278--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CA%2BX=3TLubvptwxOhE_shKP5GiTieb-e1wvG-0iEfF6ic0vmWag>