Re: [WIP] Effective storage of duplicates in B-tree index.

Peter Geoghegan <[email protected]> Tue, 14 Jan 2020 18:08:57 -0800
Newsgroups gmane.comp.db.postgresql.devel.general
Message-ID <CAH2-Wz=Tr6mxMsKRmv_=9-05_O9QWqOzQ8GweRV2DXS6+Y38QQ@mail.gmail.com>
--000000000000f3369d059c2431aa
Content-Type: text/plain; charset="UTF-8"

On Fri, Jan 10, 2020 at 1:36 PM Peter Geoghegan <[email protected]> wrote:
> Still, v29 doesn't resolve the following points you've raised, where I
> haven't reached a final opinion on what to do myself. These items are
> as follows (I'm quoting your modified patch file sent on January 8th
> here):

Still no progress on these items, but I am now posting v30. A new
version seems warranted, because I now want to revive a patch from a
couple of years back as part of the deduplication project -- it would
be good to get feedback on that sooner rather than later. This is a
patch that you [Heikki] are already familiar with -- the patch to
speed up compactify_tuples() [1]. Sokolov Yura is CC'd here, since he
is the original author.

The deduplication patch is much faster with this in place. For
example, with v30:

pg@regression:5432 [25216]=# create unlogged table foo(bar int4);
CREATE TABLE
pg@regression:5432 [25216]=# create index unlogged_foo_idx on foo(bar);
CREATE INDEX
pg@regression:5432 [25216]=# insert into foo select g from
generate_series(1, 1000000) g, generate_series(1,10) i;
INSERT 0 10000000
Time: 17842.455 ms (00:17.842)

If I revert the "Bucket sort for compactify_tuples" commit locally,
then the same insert statement takes 31.614 seconds! In other words,
the insert statement is made ~77% faster by that commit alone. The
improvement is stable and reproducible.

Clearly there is a big compactify_tuples() bottleneck that comes from
PageIndexMultiDelete(). The hot spot is quite visible with "perf top
-e branch-misses".

The compactify_tuples() patch stalled because it wasn't clear if it
was worth the trouble at the time. It was originally written to
address a much smaller PageRepairFragmentation() bottleneck in heap
pruning. ISTM that deduplication alone is a good enough reason to
commit this patch. I haven't really changed anything about the
2017/2018 patch -- I need to do more review of that. We probably don't
need to qsort() inlining stuff (the bucket sort thing is the real
win), but I included it in v30 all the same.

Other changes in v30:

* We now avoid extra _bt_compare() calls within _bt_check_unique() --
no need to call _bt_compare() once per TID (once per equal tuple is
quite enough).

This is a noticeable performance win, even though the change was
originally intended to make the logic in _bt_check_unique() clearer.

* Reduced the limit on the size of a posting list tuple to 1/6 of a
page -- down from 1/3.

This seems like a good idea on the grounds that it keeps our options
open if we split a page full of duplicates due to UPDATEs rather than
INSERTs (i.e. we split a page full of duplicates that isn't also the
rightmost page among pages that store only those duplicates). A lower
limit is more conservative, and yet doesn't cost us that much space.

* Refined nbtsort.c/CREATE INDEX to work sensibly with non-standard
fillfactor settings.

This last item is a minor bugfix, really.

[1] https://commitfest.postgresql.org/14/1138/
-- 
Peter Geoghegan

--000000000000f3369d059c2431aa
Content-Type: application/octet-stream; 
	name="v30-0005-DEBUG-Show-index-values-in-pageinspect.patch"
Content-Disposition: attachment; 
	filename="v30-0005-DEBUG-Show-index-values-in-pageinspect.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_k5en9nku4>
X-Attachment-Id: f_k5en9nku4

RnJvbSA1MmM2MmNlMmRiZTY1YTc0OThjZDgxMjhjYzE2MmE0ZDU4MzEyYTk1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IE1v
biwgMTggTm92IDIwMTkgMTk6MzU6MzAgLTA4MDAKU3ViamVjdDogW1BBVENIIHYzMCA1LzVdIERF
QlVHOiBTaG93IGluZGV4IHZhbHVlcyBpbiBwYWdlaW5zcGVjdAoKVGhpcyBpcyBub3QgaW50ZW5k
ZWQgZm9yIGNvbW1pdC4gIEl0IGlzIGluY2x1ZGVkIGFzIGEgY29udmVuaWVuY2UgZm9yCnJldmll
d2Vycy4KLS0tCiBjb250cmliL3BhZ2VpbnNwZWN0L2J0cmVlZnVuY3MuYyAgICAgICB8IDY1ICsr
KysrKysrKysrKysrKysrKy0tLS0tLS0tCiBjb250cmliL3BhZ2VpbnNwZWN0L2V4cGVjdGVkL2J0
cmVlLm91dCB8ICAyICstCiAyIGZpbGVzIGNoYW5nZWQsIDQ3IGluc2VydGlvbnMoKyksIDIwIGRl
bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGFnZWluc3BlY3QvYnRyZWVmdW5jcy5j
IGIvY29udHJpYi9wYWdlaW5zcGVjdC9idHJlZWZ1bmNzLmMKaW5kZXggMWIyZWExNDEyMi4uZmMx
MjUyNDU1ZCAxMDA2NDQKLS0tIGEvY29udHJpYi9wYWdlaW5zcGVjdC9idHJlZWZ1bmNzLmMKKysr
IGIvY29udHJpYi9wYWdlaW5zcGVjdC9idHJlZWZ1bmNzLmMKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKICNpbmNs
dWRlICJhY2Nlc3MvbmJ0cmVlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgiCiAjaW5j
bHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKQEAgLTI0NSw2ICsyNDYsNyBAQCBidF9wYWdlX3N0
YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAgKi8KIHN0cnVjdCB1c2VyX2FyZ3MKIHsKKwlSZWxhdGlv
bglyZWw7CiAJUGFnZQkJcGFnZTsKIAlPZmZzZXROdW1iZXIgb2Zmc2V0OwogCWJvb2wJCWxlYWZw
YWdlOwpAQCAtMjYxLDYgKzI2Myw3IEBAIHN0cnVjdCB1c2VyX2FyZ3MKIHN0YXRpYyBEYXR1bQog
YnRfcGFnZV9wcmludF90dXBsZXMoRnVuY0NhbGxDb250ZXh0ICpmY3R4LCBzdHJ1Y3QgdXNlcl9h
cmdzICp1YXJncykKIHsKKwlSZWxhdGlvbglyZWwgPSB1YXJncy0+cmVsOwogCVBhZ2UJCXBhZ2Ug
PSB1YXJncy0+cGFnZTsKIAlPZmZzZXROdW1iZXIgb2Zmc2V0ID0gdWFyZ3MtPm9mZnNldDsKIAli
b29sCQlsZWFmcGFnZSA9IHVhcmdzLT5sZWFmcGFnZTsKQEAgLTI5NSwyNiArMjk4LDQ4IEBAIGJ0
X3BhZ2VfcHJpbnRfdHVwbGVzKEZ1bmNDYWxsQ29udGV4dCAqZmN0eCwgc3RydWN0IHVzZXJfYXJn
cyAqdWFyZ3MpCiAJdmFsdWVzW2orK10gPSBCb29sR2V0RGF0dW0oSW5kZXhUdXBsZUhhc1Zhcndp
ZHRocyhpdHVwKSk7CiAKIAlwdHIgPSAoY2hhciAqKSBpdHVwICsgSW5kZXhJbmZvRmluZERhdGFP
ZmZzZXQoaXR1cC0+dF9pbmZvKTsKLQlkbGVuID0gSW5kZXhUdXBsZVNpemUoaXR1cCkgLSBJbmRl
eEluZm9GaW5kRGF0YU9mZnNldChpdHVwLT50X2luZm8pOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUg
dGhhdCAiZGF0YSIgY29sdW1uIGRvZXMgbm90IGluY2x1ZGUgcG9zdGluZyBsaXN0IG9yIHBpdm90
Ci0JICogdHVwbGUgcmVwcmVzZW50YXRpb24gb2YgaGVhcCBUSUQKLQkgKi8KLQlpZiAoQlRyZWVU
dXBsZUlzUG9zdGluZyhpdHVwKSkKLQkJZGxlbiAtPSBJbmRleFR1cGxlU2l6ZShpdHVwKSAtIEJU
cmVlVHVwbGVHZXRQb3N0aW5nT2Zmc2V0KGl0dXApOwotCWVsc2UgaWYgKEJUcmVlVHVwbGVJc1Bp
dm90KGl0dXApICYmIEJUcmVlVHVwbGVHZXRIZWFwVElEKGl0dXApICE9IE5VTEwpCi0JCWRsZW4g
LT0gTUFYQUxJR04oc2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSkpOwotCi0JZHVtcCA9IHBhbGxvYzAo
ZGxlbiAqIDMgKyAxKTsKLQlkYXRhY3N0cmluZyA9IGR1bXA7Ci0JZm9yIChvZmYgPSAwOyBvZmYg
PCBkbGVuOyBvZmYrKykKKwlpZiAocmVsKQogCXsKLQkJaWYgKG9mZiA+IDApCi0JCQkqZHVtcCsr
ID0gJyAnOwotCQlzcHJpbnRmKGR1bXAsICIlMDJ4IiwgKihwdHIgKyBvZmYpICYgMHhmZik7Ci0J
CWR1bXAgKz0gMjsKKwkJVHVwbGVEZXNjCWl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwp
OworCQlEYXR1bQkJZGF0dmFsdWVzW0lOREVYX01BWF9LRVlTXTsKKwkJYm9vbAkJaXNudWxsW0lO
REVYX01BWF9LRVlTXTsKKwkJaW50CQkJbmF0dHM7CisJCWludAkJCWluZG5rZXlhdHRzID0gcmVs
LT5yZF9pbmRleC0+aW5kbmtleWF0dHM7CisKKwkJbmF0dHMgPSBCVHJlZVR1cGxlR2V0TkF0dHMo
aXR1cCwgcmVsKTsKKworCQlpdHVwZGVzYy0+bmF0dHMgPSBNaW4oaW5kbmtleWF0dHMsIG5hdHRz
KTsKKwkJbWVtc2V0KCZpc251bGwsIDB4RkYsIHNpemVvZihpc251bGwpKTsKKwkJaW5kZXhfZGVm
b3JtX3R1cGxlKGl0dXAsIGl0dXBkZXNjLCBkYXR2YWx1ZXMsIGlzbnVsbCk7CisJCXJlbC0+cmRf
aW5kZXgtPmluZG5rZXlhdHRzID0gbmF0dHM7CisJCWRhdGFjc3RyaW5nID0gQnVpbGRJbmRleFZh
bHVlRGVzY3JpcHRpb24ocmVsLCBkYXR2YWx1ZXMsIGlzbnVsbCk7CisJCWl0dXBkZXNjLT5uYXR0
cyA9IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZkF0dHJpYnV0ZXMocmVsKTsKKwkJcmVsLT5yZF9p
bmRleC0+aW5kbmtleWF0dHMgPSBpbmRua2V5YXR0czsKIAl9CisJZWxzZQorCXsKKwkJZGxlbiA9
IEluZGV4VHVwbGVTaXplKGl0dXApIC0gSW5kZXhJbmZvRmluZERhdGFPZmZzZXQoaXR1cC0+dF9p
bmZvKTsKKworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhhdCAiZGF0YSIgY29sdW1uIGRvZXMgbm90
IGluY2x1ZGUgcG9zdGluZyBsaXN0IG9yIHBpdm90CisJCSAqIHR1cGxlIHJlcHJlc2VudGF0aW9u
IG9mIGhlYXAgVElECisJCSAqLworCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkKKwkJ
CWRsZW4gLT0gSW5kZXhUdXBsZVNpemUoaXR1cCkgLSBCVHJlZVR1cGxlR2V0UG9zdGluZ09mZnNl
dChpdHVwKTsKKwkJZWxzZSBpZiAoQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkgJiYgQlRyZWVUdXBs
ZUdldEhlYXBUSUQoaXR1cCkgIT0gTlVMTCkKKwkJCWRsZW4gLT0gTUFYQUxJR04oc2l6ZW9mKEl0
ZW1Qb2ludGVyRGF0YSkpOworCisJCWR1bXAgPSBwYWxsb2MwKGRsZW4gKiAzICsgMSk7CisJCWRh
dGFjc3RyaW5nID0gZHVtcDsKKwkJZm9yIChvZmYgPSAwOyBvZmYgPCBkbGVuOyBvZmYrKykKKwkJ
eworCQkJaWYgKG9mZiA+IDApCisJCQkJKmR1bXArKyA9ICcgJzsKKwkJCXNwcmludGYoZHVtcCwg
IiUwMngiLCAqKHB0ciArIG9mZikgJiAweGZmKTsKKwkJCWR1bXAgKz0gMjsKKwkJfQorCX0KKwog
CXZhbHVlc1tqKytdID0gQ1N0cmluZ0dldFRleHREYXR1bShkYXRhY3N0cmluZyk7CiAJcGZyZWUo
ZGF0YWNzdHJpbmcpOwogCkBAIC00MzcsMTEgKzQ2MiwxMSBAQCBidF9wYWdlX2l0ZW1zKFBHX0ZV
TkNUSU9OX0FSR1MpCiAKIAkJdWFyZ3MgPSBwYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2VyX2FyZ3Mp
KTsKIAorCQl1YXJncy0+cmVsID0gcmVsOwogCQl1YXJncy0+cGFnZSA9IHBhbGxvYyhCTENLU1op
OwogCQltZW1jcHkodWFyZ3MtPnBhZ2UsIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSwgQkxDS1NaKTsK
IAogCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7Ci0JCXJlbGF0aW9uX2Nsb3NlKHJlbCwg
QWNjZXNzU2hhcmVMb2NrKTsKIAogCQl1YXJncy0+b2Zmc2V0ID0gRmlyc3RPZmZzZXROdW1iZXI7
CiAKQEAgLTQ3NSw2ICs1MDAsNyBAQCBidF9wYWdlX2l0ZW1zKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ
fQogCWVsc2UKIAl7CisJCXJlbGF0aW9uX2Nsb3NlKHVhcmdzLT5yZWwsIEFjY2Vzc1NoYXJlTG9j
ayk7CiAJCXBmcmVlKHVhcmdzLT5wYWdlKTsKIAkJcGZyZWUodWFyZ3MpOwogCQlTUkZfUkVUVVJO
X0RPTkUoZmN0eCk7CkBAIC01MjIsNiArNTQ4LDcgQEAgYnRfcGFnZV9pdGVtc19ieXRlYShQR19G
VU5DVElPTl9BUkdTKQogCiAJCXVhcmdzID0gcGFsbG9jKHNpemVvZihzdHJ1Y3QgdXNlcl9hcmdz
KSk7CiAKKwkJdWFyZ3MtPnJlbCA9IE5VTEw7CiAJCXVhcmdzLT5wYWdlID0gVkFSREFUQShyYXdf
cGFnZSk7CiAKIAkJdWFyZ3MtPm9mZnNldCA9IEZpcnN0T2Zmc2V0TnVtYmVyOwpkaWZmIC0tZ2l0
IGEvY29udHJpYi9wYWdlaW5zcGVjdC9leHBlY3RlZC9idHJlZS5vdXQgYi9jb250cmliL3BhZ2Vp
bnNwZWN0L2V4cGVjdGVkL2J0cmVlLm91dAppbmRleCA5MmQ1YzU5NjU0Li5mYzY3OTRlZjY1IDEw
MDY0NAotLS0gYS9jb250cmliL3BhZ2VpbnNwZWN0L2V4cGVjdGVkL2J0cmVlLm91dAorKysgYi9j
b250cmliL3BhZ2VpbnNwZWN0L2V4cGVjdGVkL2J0cmVlLm91dApAQCAtNDEsNyArNDEsNyBAQCBj
dGlkICAgICAgIHwgKDAsMSkKIGl0ZW1sZW4gICAgfCAxNgogbnVsbHMgICAgICB8IGYKIHZhcnMg
ICAgICAgfCBmCi1kYXRhICAgICAgIHwgMDEgMDAgMDAgMDAgMDAgMDAgMDAgMDEKK2RhdGEgICAg
ICAgfCAoYSk9KDcyMDU3NTk0MDM3OTI3OTM3KQogZGVhZCAgICAgICB8IGYKIGh0aWQgICAgICAg
fCAoMCwxKQogdGlkcyAgICAgICB8IAotLSAKMi4xNy4xCgo=
--000000000000f3369d059c2431aa
Content-Type: application/octet-stream; 
	name="v30-0004-Teach-pageinspect-about-nbtree-posting-lists.patch"
Content-Disposition: attachment; 
	filename="v30-0004-Teach-pageinspect-about-nbtree-posting-lists.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_k5en9nkt3>
X-Attachment-Id: f_k5en9nkt3

RnJvbSBiMzY5Y2Y1ZTJhOTFlZjAxYjJlN2I2MzI1MzUwYTZjMTEzYmY1ZTcxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IE1v
biwgMTAgU2VwIDIwMTggMTk6NTM6NTEgLTA3MDAKU3ViamVjdDogW1BBVENIIHYzMCA0LzVdIFRl
YWNoIHBhZ2VpbnNwZWN0IGFib3V0IG5idHJlZSBwb3N0aW5nIGxpc3RzLgoKQWRkIGEgY29sdW1u
IGZvciBwb3N0aW5nIGxpc3QgVElEcyB0byBidF9wYWdlX2l0ZW1zKCkuICBBbHNvIGFkZCBhCmNv
bHVtbiB0aGF0IGRpc3BsYXlzIGEgc2luZ2xlIGhlYXAgVElEIHZhbHVlIGZvciBlYWNoIHR1cGxl
LCByZWdhcmRsZXNzCm9mIHdoZXRoZXIgb3Igbm90ICJjdGlkIiBpcyB1c2VkIGZvciBoZWFwIFRJ
RC4gIEluIHRoZSBjYXNlIG9mIHBvc3RpbmcKbGlzdCB0dXBsZXMsIHRoZSB2YWx1ZSBpcyB0aGUg
bG93ZXN0IGhlYXAgVElEIGluIHRoZSBwb3N0aW5nIGxpc3QuCkFyZ3VhYmx5IEkgc2hvdWxkIGhh
dmUgZG9uZSB0aGlzIHdoZW4gY29tbWl0IGRkMjk5ZGY4IHdlbnQgaW4sIHNpbmNlCnRoYXQgYWRk
ZWQgYSBwaXZvdCB0dXBsZSByZXByZXNlbnRhdGlvbiB0aGF0IGNvdWxkIGhhdmUgYSBoZWFwIFRJ
RCBidXQKZGlkbid0IHVzZSBjdGlkIGZvciB0aGF0IHB1cnBvc2UuCgpBbHNvIGFkZCBhIGJvb2xl
YW4gY29sdW1uIHRoYXQgZGlzcGxheXMgdGhlIExQX0RFQUQgYml0IHZhbHVlIGZvciBlYWNoCm5v
bi1waXZvdCB0dXBsZS4KCk5vIHZlcnNpb24gYnVtcCBmb3IgdGhlIHBhZ2VpbnNwZWN0IGV4dGVu
c2lvbiwgc2luY2UgdGhlcmUgaGFzbid0IGJlZW4gYQpzdGFibGUgcmVsZWFzZSBzaW5jZSB0aGUg
bGFzdCB2ZXJzaW9uIGJ1bXAgKHNlZSBjb21taXQgNThiNGNiMzApLgotLS0KIGNvbnRyaWIvcGFn
ZWluc3BlY3QvYnRyZWVmdW5jcy5jICAgICAgICAgICAgICB8IDExOCArKysrKysrKysrKysrKyst
LS0KIGNvbnRyaWIvcGFnZWluc3BlY3QvZXhwZWN0ZWQvYnRyZWUub3V0ICAgICAgICB8ICAgNyAr
KwogY29udHJpYi9wYWdlaW5zcGVjdC9wYWdlaW5zcGVjdC0tMS43LS0xLjguc3FsIHwgIDUzICsr
KysrKysrCiBkb2Mvc3JjL3NnbWwvcGFnZWluc3BlY3Quc2dtbCAgICAgICAgICAgICAgICAgfCAg
ODMgKysrKysrLS0tLS0tCiA0IGZpbGVzIGNoYW5nZWQsIDIwNiBpbnNlcnRpb25zKCspLCA1NSBk
ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BhZ2VpbnNwZWN0L2J0cmVlZnVuY3Mu
YyBiL2NvbnRyaWIvcGFnZWluc3BlY3QvYnRyZWVmdW5jcy5jCmluZGV4IDc4Y2RjNjllYzcuLjFi
MmVhMTQxMjIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGFnZWluc3BlY3QvYnRyZWVmdW5jcy5jCisr
KyBiL2NvbnRyaWIvcGFnZWluc3BlY3QvYnRyZWVmdW5jcy5jCkBAIC0zMSw5ICszMSwxMSBAQAog
I2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNl
LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlw
ZS5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs
dWRlICJwYWdlaW5zcGVjdC5oIgorI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCiAjaW5jbHVkZSAi
dXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGls
cy92YXJsZW5hLmgiCkBAIC00NSw2ICs0Nyw4IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoYnRfcGFn
ZV9zdGF0cyk7CiAKICNkZWZpbmUgSVNfSU5ERVgocikgKChyKS0+cmRfcmVsLT5yZWxraW5kID09
IFJFTEtJTkRfSU5ERVgpCiAjZGVmaW5lIElTX0JUUkVFKHIpICgociktPnJkX3JlbC0+cmVsYW0g
PT0gQlRSRUVfQU1fT0lEKQorI2RlZmluZSBEYXR1bUdldEl0ZW1Qb2ludGVyKFgpCSAoKEl0ZW1Q
b2ludGVyKSBEYXR1bUdldFBvaW50ZXIoWCkpCisjZGVmaW5lIEl0ZW1Qb2ludGVyR2V0RGF0dW0o
WCkJIFBvaW50ZXJHZXREYXR1bShYKQogCiAvKiBub3RlOiBCbG9ja051bWJlciBpcyB1bnNpZ25l
ZCwgaGVuY2UgY2FuJ3QgYmUgbmVnYXRpdmUgKi8KICNkZWZpbmUgQ0hFQ0tfUkVMQVRJT05fQkxP
Q0tfUkFOR0UocmVsLCBibGtubykgeyBcCkBAIC0yNDMsNiArMjQ3LDkgQEAgc3RydWN0IHVzZXJf
YXJncwogewogCVBhZ2UJCXBhZ2U7CiAJT2Zmc2V0TnVtYmVyIG9mZnNldDsKKwlib29sCQlsZWFm
cGFnZTsKKwlib29sCQlyaWdodG1vc3Q7CisJVHVwbGVEZXNjCXR1cGQ7CiB9OwogCiAvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI1
MiwxNyArMjU5LDI1IEBAIHN0cnVjdCB1c2VyX2FyZ3MKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0aWMgRGF0dW0KLWJ0
X3BhZ2VfcHJpbnRfdHVwbGVzKEZ1bmNDYWxsQ29udGV4dCAqZmN0eCwgUGFnZSBwYWdlLCBPZmZz
ZXROdW1iZXIgb2Zmc2V0KQorYnRfcGFnZV9wcmludF90dXBsZXMoRnVuY0NhbGxDb250ZXh0ICpm
Y3R4LCBzdHJ1Y3QgdXNlcl9hcmdzICp1YXJncykKIHsKLQljaGFyCSAgICp2YWx1ZXNbNl07CisJ
UGFnZQkJcGFnZSA9IHVhcmdzLT5wYWdlOworCU9mZnNldE51bWJlciBvZmZzZXQgPSB1YXJncy0+
b2Zmc2V0OworCWJvb2wJCWxlYWZwYWdlID0gdWFyZ3MtPmxlYWZwYWdlOworCWJvb2wJCXJpZ2h0
bW9zdCA9IHVhcmdzLT5yaWdodG1vc3Q7CisJYm9vbAkJcGl2b3RvZmZzZXQ7CisJRGF0dW0JCXZh
bHVlc1s5XTsKKwlib29sCQludWxsc1s5XTsKIAlIZWFwVHVwbGUJdHVwbGU7CiAJSXRlbUlkCQlp
ZDsKIAlJbmRleFR1cGxlCWl0dXA7CiAJaW50CQkJajsKIAlpbnQJCQlvZmY7CiAJaW50CQkJZGxl
bjsKLQljaGFyCSAgICpkdW1wOworCWNoYXIJICAgKmR1bXAsCisJCQkgICAqZGF0YWNzdHJpbmc7
CiAJY2hhcgkgICAqcHRyOworCUl0ZW1Qb2ludGVyIGh0aWQ7CiAKIAlpZCA9IFBhZ2VHZXRJdGVt
SWQocGFnZSwgb2Zmc2V0KTsKIApAQCAtMjcyLDE4ICsyODcsMjcgQEAgYnRfcGFnZV9wcmludF90
dXBsZXMoRnVuY0NhbGxDb250ZXh0ICpmY3R4LCBQYWdlIHBhZ2UsIE9mZnNldE51bWJlciBvZmZz
ZXQpCiAJaXR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpZCk7CiAKIAlqID0g
MDsKLQl2YWx1ZXNbaisrXSA9IHBzcHJpbnRmKCIlZCIsIG9mZnNldCk7Ci0JdmFsdWVzW2orK10g
PSBwc3ByaW50ZigiKCV1LCV1KSIsCi0JCQkJCQkgICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVy
Tm9DaGVjaygmaXR1cC0+dF90aWQpLAotCQkJCQkJICAgSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1i
ZXJOb0NoZWNrKCZpdHVwLT50X3RpZCkpOwotCXZhbHVlc1tqKytdID0gcHNwcmludGYoIiVkIiwg
KGludCkgSW5kZXhUdXBsZVNpemUoaXR1cCkpOwotCXZhbHVlc1tqKytdID0gcHNwcmludGYoIiVj
IiwgSW5kZXhUdXBsZUhhc051bGxzKGl0dXApID8gJ3QnIDogJ2YnKTsKLQl2YWx1ZXNbaisrXSA9
IHBzcHJpbnRmKCIlYyIsIEluZGV4VHVwbGVIYXNWYXJ3aWR0aHMoaXR1cCkgPyAndCcgOiAnZicp
OworCW1lbXNldChudWxscywgMCwgc2l6ZW9mKG51bGxzKSk7CisJdmFsdWVzW2orK10gPSBEYXR1
bUdldEludDE2KG9mZnNldCk7CisJdmFsdWVzW2orK10gPSBJdGVtUG9pbnRlckdldERhdHVtKCZp
dHVwLT50X3RpZCk7CisJdmFsdWVzW2orK10gPSBJbnQzMkdldERhdHVtKChpbnQpIEluZGV4VHVw
bGVTaXplKGl0dXApKTsKKwl2YWx1ZXNbaisrXSA9IEJvb2xHZXREYXR1bShJbmRleFR1cGxlSGFz
TnVsbHMoaXR1cCkpOworCXZhbHVlc1tqKytdID0gQm9vbEdldERhdHVtKEluZGV4VHVwbGVIYXNW
YXJ3aWR0aHMoaXR1cCkpOwogCiAJcHRyID0gKGNoYXIgKikgaXR1cCArIEluZGV4SW5mb0ZpbmRE
YXRhT2Zmc2V0KGl0dXAtPnRfaW5mbyk7CiAJZGxlbiA9IEluZGV4VHVwbGVTaXplKGl0dXApIC0g
SW5kZXhJbmZvRmluZERhdGFPZmZzZXQoaXR1cC0+dF9pbmZvKTsKKworCS8qCisJICogTWFrZSBz
dXJlIHRoYXQgImRhdGEiIGNvbHVtbiBkb2VzIG5vdCBpbmNsdWRlIHBvc3RpbmcgbGlzdCBvciBw
aXZvdAorCSAqIHR1cGxlIHJlcHJlc2VudGF0aW9uIG9mIGhlYXAgVElECisJICovCisJaWYgKEJU
cmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpCisJCWRsZW4gLT0gSW5kZXhUdXBsZVNpemUoaXR1cCkg
LSBCVHJlZVR1cGxlR2V0UG9zdGluZ09mZnNldChpdHVwKTsKKwllbHNlIGlmIChCVHJlZVR1cGxl
SXNQaXZvdChpdHVwKSAmJiBCVHJlZVR1cGxlR2V0SGVhcFRJRChpdHVwKSAhPSBOVUxMKQorCQlk
bGVuIC09IE1BWEFMSUdOKHNpemVvZihJdGVtUG9pbnRlckRhdGEpKTsKKwogCWR1bXAgPSBwYWxs
b2MwKGRsZW4gKiAzICsgMSk7Ci0JdmFsdWVzW2pdID0gZHVtcDsKKwlkYXRhY3N0cmluZyA9IGR1
bXA7CiAJZm9yIChvZmYgPSAwOyBvZmYgPCBkbGVuOyBvZmYrKykKIAl7CiAJCWlmIChvZmYgPiAw
KQpAQCAtMjkxLDggKzMxNSw1NyBAQCBidF9wYWdlX3ByaW50X3R1cGxlcyhGdW5jQ2FsbENvbnRl
eHQgKmZjdHgsIFBhZ2UgcGFnZSwgT2Zmc2V0TnVtYmVyIG9mZnNldCkKIAkJc3ByaW50ZihkdW1w
LCAiJTAyeCIsICoocHRyICsgb2ZmKSAmIDB4ZmYpOwogCQlkdW1wICs9IDI7CiAJfQorCXZhbHVl
c1tqKytdID0gQ1N0cmluZ0dldFRleHREYXR1bShkYXRhY3N0cmluZyk7CisJcGZyZWUoZGF0YWNz
dHJpbmcpOwogCi0JdHVwbGUgPSBCdWlsZFR1cGxlRnJvbUNTdHJpbmdzKGZjdHgtPmF0dGlubWV0
YSwgdmFsdWVzKTsKKwkvKgorCSAqIEF2b2lkIGluZGljYXRpbmcgdGhhdCBwaXZvdCB0dXBsZSBm
cm9tICFoZWFwa2V5c3BhY2UgaW5kZXggKHdoaWNoIHdvbid0CisJICogaGF2ZSB2NCsgc3RhdHVz
IGJpdCBzZXQpIGlzIGRlYWQgb3IgaGFzIGEgaGVhcCBUSUQgLS0gdGhhdCBjYW4gb25seQorCSAq
IGhhcHBlbiB3aXRoIG5vbi1waXZvdCB0dXBsZXMuICAoTW9zdCBiYWNrZW5kIGNvZGUgY2FuIHVz
ZSB0aGUKKwkgKiBoZWFwa2V5c3BhY2UgZmllbGQgZnJvbSB0aGUgbWV0YXBhZ2UgdG8gZmlndXJl
IG91dCB3aGljaCByZXByZXNlbnRhdGlvbgorCSAqIHRvIGV4cGVjdCwgYnV0IHdlIGhhdmUgdG8g
YmUgYSBiaXQgY3JlYXRpdmUgaGVyZS4pCisJICovCisJcGl2b3RvZmZzZXQgPSAoIWxlYWZwYWdl
IHx8ICghcmlnaHRtb3N0ICYmIG9mZnNldCA9PSBQX0hJS0VZKSk7CisKKwkvKiBMUF9ERUFEIHN0
YXR1cyBiaXQgKi8KKwlpZiAoIXBpdm90b2Zmc2V0KQorCQl2YWx1ZXNbaisrXSA9IEJvb2xHZXRE
YXR1bShJdGVtSWRJc0RlYWQoaWQpKTsKKwllbHNlCisJCW51bGxzW2orK10gPSB0cnVlOworCisJ
aHRpZCA9IEJUcmVlVHVwbGVHZXRIZWFwVElEKGl0dXApOworCWlmIChwaXZvdG9mZnNldCAmJiAh
QlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkpCisJCWh0aWQgPSBOVUxMOworCisJaWYgKGh0aWQpCisJ
CXZhbHVlc1tqKytdID0gSXRlbVBvaW50ZXJHZXREYXR1bShodGlkKTsKKwllbHNlCisJCW51bGxz
W2orK10gPSB0cnVlOworCisJaWYgKEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpCisJeworCQkv
KiBidWlsZCBhbiBhcnJheSBvZiBpdGVtIHBvaW50ZXJzICovCisJCUl0ZW1Qb2ludGVyIHRpZHM7
CisJCURhdHVtCSAgICp0aWRzX2RhdHVtOworCQlpbnQJCQlucG9zdGluZzsKKworCQl0aWRzID0g
QlRyZWVUdXBsZUdldFBvc3RpbmcoaXR1cCk7CisJCW5wb3N0aW5nID0gQlRyZWVUdXBsZUdldE5Q
b3N0aW5nKGl0dXApOworCQl0aWRzX2RhdHVtID0gKERhdHVtICopIHBhbGxvYyhucG9zdGluZyAq
IHNpemVvZihEYXR1bSkpOworCQlmb3IgKGludCBpID0gMDsgaSA8IG5wb3N0aW5nOyBpKyspCisJ
CQl0aWRzX2RhdHVtW2ldID0gSXRlbVBvaW50ZXJHZXREYXR1bSgmdGlkc1tpXSk7CisJCXZhbHVl
c1tqKytdID0gUG9pbnRlckdldERhdHVtKGNvbnN0cnVjdF9hcnJheSh0aWRzX2RhdHVtLAorCQkJ
CQkJCQkJCQkJCSAgbnBvc3RpbmcsCisJCQkJCQkJCQkJCQkJICBUSURPSUQsCisJCQkJCQkJCQkJ
CQkJICBzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSwKKwkJCQkJCQkJCQkJCQkgIGZhbHNlLCAncycp
KTsKKwkJcGZyZWUodGlkc19kYXR1bSk7CisJfQorCWVsc2UKKwkJbnVsbHNbaisrXSA9IHRydWU7
CisKKwkvKiBCdWlsZCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgdHVwbGUgKi8KKwl0dXBsZSA9IGhl
YXBfZm9ybV90dXBsZSh1YXJncy0+dHVwZCwgdmFsdWVzLCBudWxscyk7CiAKIAlyZXR1cm4gSGVh
cFR1cGxlR2V0RGF0dW0odHVwbGUpOwogfQpAQCAtMzc4LDEyICs0NTEsMTMgQEAgYnRfcGFnZV9p
dGVtcyhQR19GVU5DVElPTl9BUkdTKQogCQkJZWxvZyhOT1RJQ0UsICJwYWdlIGlzIGRlbGV0ZWQi
KTsKIAogCQlmY3R4LT5tYXhfY2FsbHMgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHVhcmdzLT5w
YWdlKTsKKwkJdWFyZ3MtPmxlYWZwYWdlID0gUF9JU0xFQUYob3BhcXVlKTsKKwkJdWFyZ3MtPnJp
Z2h0bW9zdCA9IFBfUklHSFRNT1NUKG9wYXF1ZSk7CiAKIAkJLyogQnVpbGQgYSB0dXBsZSBkZXNj
cmlwdG9yIGZvciBvdXIgcmVzdWx0IHR5cGUgKi8KIAkJaWYgKGdldF9jYWxsX3Jlc3VsdF90eXBl
KGZjaW5mbywgTlVMTCwgJnR1cGxlRGVzYykgIT0gVFlQRUZVTkNfQ09NUE9TSVRFKQogCQkJZWxv
ZyhFUlJPUiwgInJldHVybiB0eXBlIG11c3QgYmUgYSByb3cgdHlwZSIpOwotCi0JCWZjdHgtPmF0
dGlubWV0YSA9IFR1cGxlRGVzY0dldEF0dEluTWV0YWRhdGEodHVwbGVEZXNjKTsKKwkJdWFyZ3Mt
PnR1cGQgPSB0dXBsZURlc2M7CiAKIAkJZmN0eC0+dXNlcl9mY3R4ID0gdWFyZ3M7CiAKQEAgLTM5
NSw3ICs0NjksNyBAQCBidF9wYWdlX2l0ZW1zKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlpZiAoZmN0
eC0+Y2FsbF9jbnRyIDwgZmN0eC0+bWF4X2NhbGxzKQogCXsKLQkJcmVzdWx0ID0gYnRfcGFnZV9w
cmludF90dXBsZXMoZmN0eCwgdWFyZ3MtPnBhZ2UsIHVhcmdzLT5vZmZzZXQpOworCQlyZXN1bHQg
PSBidF9wYWdlX3ByaW50X3R1cGxlcyhmY3R4LCB1YXJncyk7CiAJCXVhcmdzLT5vZmZzZXQrKzsK
IAkJU1JGX1JFVFVSTl9ORVhUKGZjdHgsIHJlc3VsdCk7CiAJfQpAQCAtNDYzLDEyICs1MzcsMTMg
QEAgYnRfcGFnZV9pdGVtc19ieXRlYShQR19GVU5DVElPTl9BUkdTKQogCQkJZWxvZyhOT1RJQ0Us
ICJwYWdlIGlzIGRlbGV0ZWQiKTsKIAogCQlmY3R4LT5tYXhfY2FsbHMgPSBQYWdlR2V0TWF4T2Zm
c2V0TnVtYmVyKHVhcmdzLT5wYWdlKTsKKwkJdWFyZ3MtPmxlYWZwYWdlID0gUF9JU0xFQUYob3Bh
cXVlKTsKKwkJdWFyZ3MtPnJpZ2h0bW9zdCA9IFBfUklHSFRNT1NUKG9wYXF1ZSk7CiAKIAkJLyog
QnVpbGQgYSB0dXBsZSBkZXNjcmlwdG9yIGZvciBvdXIgcmVzdWx0IHR5cGUgKi8KIAkJaWYgKGdl
dF9jYWxsX3Jlc3VsdF90eXBlKGZjaW5mbywgTlVMTCwgJnR1cGxlRGVzYykgIT0gVFlQRUZVTkNf
Q09NUE9TSVRFKQogCQkJZWxvZyhFUlJPUiwgInJldHVybiB0eXBlIG11c3QgYmUgYSByb3cgdHlw
ZSIpOwotCi0JCWZjdHgtPmF0dGlubWV0YSA9IFR1cGxlRGVzY0dldEF0dEluTWV0YWRhdGEodHVw
bGVEZXNjKTsKKwkJdWFyZ3MtPnR1cGQgPSB0dXBsZURlc2M7CiAKIAkJZmN0eC0+dXNlcl9mY3R4
ID0gdWFyZ3M7CiAKQEAgLTQ4MCw3ICs1NTUsNyBAQCBidF9wYWdlX2l0ZW1zX2J5dGVhKFBHX0ZV
TkNUSU9OX0FSR1MpCiAKIAlpZiAoZmN0eC0+Y2FsbF9jbnRyIDwgZmN0eC0+bWF4X2NhbGxzKQog
CXsKLQkJcmVzdWx0ID0gYnRfcGFnZV9wcmludF90dXBsZXMoZmN0eCwgdWFyZ3MtPnBhZ2UsIHVh
cmdzLT5vZmZzZXQpOworCQlyZXN1bHQgPSBidF9wYWdlX3ByaW50X3R1cGxlcyhmY3R4LCB1YXJn
cyk7CiAJCXVhcmdzLT5vZmZzZXQrKzsKIAkJU1JGX1JFVFVSTl9ORVhUKGZjdHgsIHJlc3VsdCk7
CiAJfQpAQCAtNTEwLDcgKzU4NSw3IEBAIGJ0X21ldGFwKFBHX0ZVTkNUSU9OX0FSR1MpCiAJQlRN
ZXRhUGFnZURhdGEgKm1ldGFkOwogCVR1cGxlRGVzYwl0dXBsZURlc2M7CiAJaW50CQkJajsKLQlj
aGFyCSAgICp2YWx1ZXNbOF07CisJY2hhcgkgICAqdmFsdWVzWzldOwogCUJ1ZmZlcgkJYnVmZmVy
OwogCVBhZ2UJCXBhZ2U7CiAJSGVhcFR1cGxlCXR1cGxlOwpAQCAtNTU3LDE3ICs2MzIsMjAgQEAg
YnRfbWV0YXAoUEdfRlVOQ1RJT05fQVJHUykKIAogCS8qCiAJICogR2V0IHZhbHVlcyBvZiBleHRl
bmRlZCBtZXRhZGF0YSBpZiBhdmFpbGFibGUsIHVzZSBkZWZhdWx0IHZhbHVlcwotCSAqIG90aGVy
d2lzZS4KKwkgKiBvdGhlcndpc2UuICBOb3RlIHRoYXQgd2UgcmVseSBvbiB0aGUgYXNzdW1wdGlv
biB0aGF0IGJ0bV9zYWZlZGVkdXAgaXMKKwkgKiBpbml0aWFsaXplZCB0byB6ZXJvIG9uIGRhdGFi
YXNlcyB0aGF0IHdlcmUgaW5pdGRiJ2QgYmVmb3JlIFBvc3RncmVzIDEzLgogCSAqLwogCWlmICht
ZXRhZC0+YnRtX3ZlcnNpb24gPj0gQlRSRUVfTk9WQUNfVkVSU0lPTikKIAl7CiAJCXZhbHVlc1tq
KytdID0gcHNwcmludGYoIiV1IiwgbWV0YWQtPmJ0bV9vbGRlc3RfYnRwb194YWN0KTsKIAkJdmFs
dWVzW2orK10gPSBwc3ByaW50ZigiJWYiLCBtZXRhZC0+YnRtX2xhc3RfY2xlYW51cF9udW1faGVh
cF90dXBsZXMpOworCQl2YWx1ZXNbaisrXSA9IG1ldGFkLT5idG1fc2FmZWRlZHVwID8gInQiIDog
ImYiOwogCX0KIAllbHNlCiAJewogCQl2YWx1ZXNbaisrXSA9ICIwIjsKIAkJdmFsdWVzW2orK10g
PSAiLTEiOworCQl2YWx1ZXNbaisrXSA9ICJmIjsKIAl9CiAKIAl0dXBsZSA9IEJ1aWxkVHVwbGVG
cm9tQ1N0cmluZ3MoVHVwbGVEZXNjR2V0QXR0SW5NZXRhZGF0YSh0dXBsZURlc2MpLApkaWZmIC0t
Z2l0IGEvY29udHJpYi9wYWdlaW5zcGVjdC9leHBlY3RlZC9idHJlZS5vdXQgYi9jb250cmliL3Bh
Z2VpbnNwZWN0L2V4cGVjdGVkL2J0cmVlLm91dAppbmRleCAwN2MyZGNkNzcxLi45MmQ1YzU5NjU0
IDEwMDY0NAotLS0gYS9jb250cmliL3BhZ2VpbnNwZWN0L2V4cGVjdGVkL2J0cmVlLm91dAorKysg
Yi9jb250cmliL3BhZ2VpbnNwZWN0L2V4cGVjdGVkL2J0cmVlLm91dApAQCAtMTIsNiArMTIsNyBA
QCBmYXN0cm9vdCAgICAgICAgICAgICAgICB8IDEKIGZhc3RsZXZlbCAgICAgICAgICAgICAgIHwg
MAogb2xkZXN0X3hhY3QgICAgICAgICAgICAgfCAwCiBsYXN0X2NsZWFudXBfbnVtX3R1cGxlcyB8
IC0xCitzYWZlZGVkdXAgICAgICAgICAgICAgICB8IHQKIAogU0VMRUNUICogRlJPTSBidF9wYWdl
X3N0YXRzKCd0ZXN0MV9hX2lkeCcsIDApOwogRVJST1I6ICBibG9jayAwIGlzIGEgbWV0YSBwYWdl
CkBAIC00MSw2ICs0Miw5IEBAIGl0ZW1sZW4gICAgfCAxNgogbnVsbHMgICAgICB8IGYKIHZhcnMg
ICAgICAgfCBmCiBkYXRhICAgICAgIHwgMDEgMDAgMDAgMDAgMDAgMDAgMDAgMDEKK2RlYWQgICAg
ICAgfCBmCitodGlkICAgICAgIHwgKDAsMSkKK3RpZHMgICAgICAgfCAKIAogU0VMRUNUICogRlJP
TSBidF9wYWdlX2l0ZW1zKCd0ZXN0MV9hX2lkeCcsIDIpOwogRVJST1I6ICBibG9jayBudW1iZXIg
b3V0IG9mIHJhbmdlCkBAIC01NCw2ICs1OCw5IEBAIGl0ZW1sZW4gICAgfCAxNgogbnVsbHMgICAg
ICB8IGYKIHZhcnMgICAgICAgfCBmCiBkYXRhICAgICAgIHwgMDEgMDAgMDAgMDAgMDAgMDAgMDAg
MDEKK2RlYWQgICAgICAgfCBmCitodGlkICAgICAgIHwgKDAsMSkKK3RpZHMgICAgICAgfCAKIAog
U0VMRUNUICogRlJPTSBidF9wYWdlX2l0ZW1zKGdldF9yYXdfcGFnZSgndGVzdDFfYV9pZHgnLCAy
KSk7CiBFUlJPUjogIGJsb2NrIG51bWJlciAyIGlzIG91dCBvZiByYW5nZSBmb3IgcmVsYXRpb24g
InRlc3QxX2FfaWR4IgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wYWdlaW5zcGVjdC9wYWdlaW5zcGVj
dC0tMS43LS0xLjguc3FsIGIvY29udHJpYi9wYWdlaW5zcGVjdC9wYWdlaW5zcGVjdC0tMS43LS0x
Ljguc3FsCmluZGV4IDJhN2M0YjM1MTYuLjkzZWEzN2NkZTMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv
cGFnZWluc3BlY3QvcGFnZWluc3BlY3QtLTEuNy0tMS44LnNxbAorKysgYi9jb250cmliL3BhZ2Vp
bnNwZWN0L3BhZ2VpbnNwZWN0LS0xLjctLTEuOC5zcWwKQEAgLTE0LDMgKzE0LDU2IEBAIENSRUFU
RSBGVU5DVElPTiBoZWFwX3R1cGxlX2luZm9tYXNrX2ZsYWdzKAogUkVUVVJOUyByZWNvcmQKIEFT
ICdNT0RVTEVfUEFUSE5BTUUnLCAnaGVhcF90dXBsZV9pbmZvbWFza19mbGFncycKIExBTkdVQUdF
IEMgU1RSSUNUIFBBUkFMTEVMIFNBRkU7CisKKy0tCistLSBidF9tZXRhcCgpCistLQorRFJPUCBG
VU5DVElPTiBidF9tZXRhcCh0ZXh0KTsKK0NSRUFURSBGVU5DVElPTiBidF9tZXRhcChJTiByZWxu
YW1lIHRleHQsCisgICAgT1VUIG1hZ2ljIGludDQsCisgICAgT1VUIHZlcnNpb24gaW50NCwKKyAg
ICBPVVQgcm9vdCBpbnQ0LAorICAgIE9VVCBsZXZlbCBpbnQ0LAorICAgIE9VVCBmYXN0cm9vdCBp
bnQ0LAorICAgIE9VVCBmYXN0bGV2ZWwgaW50NCwKKyAgICBPVVQgb2xkZXN0X3hhY3QgaW50NCwK
KyAgICBPVVQgbGFzdF9jbGVhbnVwX251bV90dXBsZXMgcmVhbCwKKyAgICBPVVQgc2FmZWRlZHVw
IGJvb2xlYW4pCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ2J0X21ldGFwJworTEFOR1VBR0UgQyBT
VFJJQ1QgUEFSQUxMRUwgU0FGRTsKKworLS0KKy0tIGJ0X3BhZ2VfaXRlbXModGV4dCwgaW50NCkK
Ky0tCitEUk9QIEZVTkNUSU9OIGJ0X3BhZ2VfaXRlbXModGV4dCwgaW50NCk7CitDUkVBVEUgRlVO
Q1RJT04gYnRfcGFnZV9pdGVtcyhJTiByZWxuYW1lIHRleHQsIElOIGJsa25vIGludDQsCisgICAg
T1VUIGl0ZW1vZmZzZXQgc21hbGxpbnQsCisgICAgT1VUIGN0aWQgdGlkLAorICAgIE9VVCBpdGVt
bGVuIHNtYWxsaW50LAorICAgIE9VVCBudWxscyBib29sLAorICAgIE9VVCB2YXJzIGJvb2wsCisg
ICAgT1VUIGRhdGEgdGV4dCwKKyAgICBPVVQgZGVhZCBib29sZWFuLAorICAgIE9VVCBodGlkIHRp
ZCwKKyAgICBPVVQgdGlkcyB0aWRbXSkKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAnTU9EVUxF
X1BBVEhOQU1FJywgJ2J0X3BhZ2VfaXRlbXMnCitMQU5HVUFHRSBDIFNUUklDVCBQQVJBTExFTCBT
QUZFOworCistLQorLS0gYnRfcGFnZV9pdGVtcyhieXRlYSkKKy0tCitEUk9QIEZVTkNUSU9OIGJ0
X3BhZ2VfaXRlbXMoYnl0ZWEpOworQ1JFQVRFIEZVTkNUSU9OIGJ0X3BhZ2VfaXRlbXMoSU4gcGFn
ZSBieXRlYSwKKyAgICBPVVQgaXRlbW9mZnNldCBzbWFsbGludCwKKyAgICBPVVQgY3RpZCB0aWQs
CisgICAgT1VUIGl0ZW1sZW4gc21hbGxpbnQsCisgICAgT1VUIG51bGxzIGJvb2wsCisgICAgT1VU
IHZhcnMgYm9vbCwKKyAgICBPVVQgZGF0YSB0ZXh0LAorICAgIE9VVCBkZWFkIGJvb2xlYW4sCisg
ICAgT1VUIGh0aWQgdGlkLAorICAgIE9VVCB0aWRzIHRpZFtdKQorUkVUVVJOUyBTRVRPRiByZWNv
cmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAnYnRfcGFnZV9pdGVtc19ieXRlYScKK0xBTkdVQUdF
IEMgU1RSSUNUIFBBUkFMTEVMIFNBRkU7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcGFnZWlu
c3BlY3Quc2dtbCBiL2RvYy9zcmMvc2dtbC9wYWdlaW5zcGVjdC5zZ21sCmluZGV4IDdlMmUxNDg3
ZDcuLmI1MjdkYWY2Y2EgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9wYWdlaW5zcGVjdC5zZ21s
CisrKyBiL2RvYy9zcmMvc2dtbC9wYWdlaW5zcGVjdC5zZ21sCkBAIC0zMDAsMTMgKzMwMCwxNCBA
QCB0ZXN0PSMgU0VMRUNUIHRfY3RpZCwgcmF3X2ZsYWdzLCBjb21iaW5lZF9mbGFncwogdGVzdD0j
IFNFTEVDVCAqIEZST00gYnRfbWV0YXAoJ3BnX2Nhc3Rfb2lkX2luZGV4Jyk7CiAtWyBSRUNPUkQg
MSBdLS0tLS0tLS0tLS0rLS0tLS0tLQogbWFnaWMgICAgICAgICAgICAgICAgICAgfCAzNDAzMjIK
LXZlcnNpb24gICAgICAgICAgICAgICAgIHwgMwordmVyc2lvbiAgICAgICAgICAgICAgICAgfCA0
CiByb290ICAgICAgICAgICAgICAgICAgICB8IDEKIGxldmVsICAgICAgICAgICAgICAgICAgIHwg
MAogZmFzdHJvb3QgICAgICAgICAgICAgICAgfCAxCiBmYXN0bGV2ZWwgICAgICAgICAgICAgICB8
IDAKIG9sZGVzdF94YWN0ICAgICAgICAgICAgIHwgNTgyCiBsYXN0X2NsZWFudXBfbnVtX3R1cGxl
cyB8IDEwMDAKK3NhZmVkZWR1cCAgICAgICAgICAgICAgIHwgZgogPC9zY3JlZW4+CiAgICAgIDwv
cGFyYT4KICAgICA8L2xpc3RpdGVtPgpAQCAtMzI5LDExICszMzAsMTEgQEAgdGVzdD0jIFNFTEVD
VCAqIEZST00gYnRfcGFnZV9zdGF0cygncGdfY2FzdF9vaWRfaW5kZXgnLCAxKTsKIC1bIFJFQ09S
RCAxIF0tKy0tLS0tCiBibGtubyAgICAgICAgIHwgMQogdHlwZSAgICAgICAgICB8IGwKLWxpdmVf
aXRlbXMgICAgfCAyNTYKK2xpdmVfaXRlbXMgICAgfCAyMjQKIGRlYWRfaXRlbXMgICAgfCAwCi1h
dmdfaXRlbV9zaXplIHwgMTIKK2F2Z19pdGVtX3NpemUgfCAxNgogcGFnZV9zaXplICAgICB8IDgx
OTIKLWZyZWVfc2l6ZSAgICAgfCA0MDU2CitmcmVlX3NpemUgICAgIHwgMzY2OAogYnRwb19wcmV2
ICAgICB8IDAKIGJ0cG9fbmV4dCAgICAgfCAwCiBidHBvICAgICAgICAgIHwgMApAQCAtMzU2LDMz
ICszNTcsNDUgQEAgYnRwb19mbGFncyAgICB8IDMKICAgICAgIDxmdW5jdGlvbj5idF9wYWdlX2l0
ZW1zPC9mdW5jdGlvbj4gcmV0dXJucyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dAogICAgICAg
YWxsIG9mIHRoZSBpdGVtcyBvbiBhIEItdHJlZSBpbmRleCBwYWdlLiAgRm9yIGV4YW1wbGU6CiA8
c2NyZWVuPgotdGVzdD0jIFNFTEVDVCAqIEZST00gYnRfcGFnZV9pdGVtcygncGdfY2FzdF9vaWRf
aW5kZXgnLCAxKTsKLSBpdGVtb2Zmc2V0IHwgIGN0aWQgICB8IGl0ZW1sZW4gfCBudWxscyB8IHZh
cnMgfCAgICBkYXRhCi0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0t
LS0tLSstLS0tLS0tLS0tLS0tCi0gICAgICAgICAgMSB8ICgwLDEpICAgfCAgICAgIDEyIHwgZiAg
ICAgfCBmICAgIHwgMjMgMjcgMDAgMDAKLSAgICAgICAgICAyIHwgKDAsMikgICB8ICAgICAgMTIg
fCBmICAgICB8IGYgICAgfCAyNCAyNyAwMCAwMAotICAgICAgICAgIDMgfCAoMCwzKSAgIHwgICAg
ICAxMiB8IGYgICAgIHwgZiAgICB8IDI1IDI3IDAwIDAwCi0gICAgICAgICAgNCB8ICgwLDQpICAg
fCAgICAgIDEyIHwgZiAgICAgfCBmICAgIHwgMjYgMjcgMDAgMDAKLSAgICAgICAgICA1IHwgKDAs
NSkgICB8ICAgICAgMTIgfCBmICAgICB8IGYgICAgfCAyNyAyNyAwMCAwMAotICAgICAgICAgIDYg
fCAoMCw2KSAgIHwgICAgICAxMiB8IGYgICAgIHwgZiAgICB8IDI4IDI3IDAwIDAwCi0gICAgICAg
ICAgNyB8ICgwLDcpICAgfCAgICAgIDEyIHwgZiAgICAgfCBmICAgIHwgMjkgMjcgMDAgMDAKLSAg
ICAgICAgICA4IHwgKDAsOCkgICB8ICAgICAgMTIgfCBmICAgICB8IGYgICAgfCAyYSAyNyAwMCAw
MAorcmVncmVzc2lvbj0jIFNFTEVDVCAqIEZST00gYnRfcGFnZV9pdGVtcygndGVuazJfdW5pcXVl
MScsIDUpOworIGl0ZW1vZmZzZXQgfCAgIGN0aWQgICB8IGl0ZW1sZW4gfCBudWxscyB8IHZhcnMg
fCAgICAgICAgICBkYXRhICAgICAgICAgICB8IGRlYWQgfCAgIGh0aWQgICB8IHRpZHMKKy0tLS0t
LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorICAgICAgICAgIDEgfCAoNDAs
MSkgICB8ICAgICAgMTYgfCBmICAgICB8IGYgICAgfCBiOCAwNSAwMCAwMCAwMCAwMCAwMCAwMCB8
ICAgICAgfCAgICAgICAgICB8CisgICAgICAgICAgMiB8ICg1OCwxMSkgIHwgICAgICAxNiB8IGYg
ICAgIHwgZiAgICB8IDRhIDA0IDAwIDAwIDAwIDAwIDAwIDAwIHwgZiAgICB8ICg1OCwxMSkgIHwK
KyAgICAgICAgICAzIHwgKDI2Niw0KSAgfCAgICAgIDE2IHwgZiAgICAgfCBmICAgIHwgNGIgMDQg
MDAgMDAgMDAgMDAgMDAgMDAgfCBmICAgIHwgKDI2Niw0KSAgfAorICAgICAgICAgIDQgfCAoMjc5
LDI1KSB8ICAgICAgMTYgfCBmICAgICB8IGYgICAgfCA0YyAwNCAwMCAwMCAwMCAwMCAwMCAwMCB8
IGYgICAgfCAoMjc5LDI1KSB8CisgICAgICAgICAgNSB8ICgzMzMsMTEpIHwgICAgICAxNiB8IGYg
ICAgIHwgZiAgICB8IDRkIDA0IDAwIDAwIDAwIDAwIDAwIDAwIHwgZiAgICB8ICgzMzMsMTEpIHwK
KyAgICAgICAgICA2IHwgKDg3LDI0KSAgfCAgICAgIDE2IHwgZiAgICAgfCBmICAgIHwgNGUgMDQg
MDAgMDAgMDAgMDAgMDAgMDAgfCBmICAgIHwgKDg3LDI0KSAgfAorICAgICAgICAgIDcgfCAoMzgs
MjIpICB8ICAgICAgMTYgfCBmICAgICB8IGYgICAgfCA0ZiAwNCAwMCAwMCAwMCAwMCAwMCAwMCB8
IGYgICAgfCAoMzgsMjIpICB8CisgICAgICAgICAgOCB8ICgyNzIsMTcpIHwgICAgICAxNiB8IGYg
ICAgIHwgZiAgICB8IDUwIDA0IDAwIDAwIDAwIDAwIDAwIDAwIHwgZiAgICB8ICgyNzIsMTcpIHwK
IDwvc2NyZWVuPgotICAgICAgSW4gYSBCLXRyZWUgbGVhZiBwYWdlLCA8c3RydWN0ZmllbGQ+Y3Rp
ZDwvc3RydWN0ZmllbGQ+IHBvaW50cyB0byBhIGhlYXAgdHVwbGUuCi0gICAgICBJbiBhbiBpbnRl
cm5hbCBwYWdlLCB0aGUgYmxvY2sgbnVtYmVyIHBhcnQgb2YgPHN0cnVjdGZpZWxkPmN0aWQ8L3N0
cnVjdGZpZWxkPgotICAgICAgcG9pbnRzIHRvIGFub3RoZXIgcGFnZSBpbiB0aGUgaW5kZXggaXRz
ZWxmLCB3aGlsZSB0aGUgb2Zmc2V0IHBhcnQKLSAgICAgICh0aGUgc2Vjb25kIG51bWJlcikgaXMg
aWdub3JlZCBhbmQgaXMgdXN1YWxseSAxLgorICAgICAgSW4gYSBCLXRyZWUgbGVhZiBwYWdlLCA8
c3RydWN0ZmllbGQ+Y3RpZDwvc3RydWN0ZmllbGQ+IHVzdWFsbHkKKyAgICAgIHBvaW50cyB0byBh
IGhlYXAgdHVwbGUsIGFuZCA8c3RydWN0ZmllbGQ+ZGVhZDwvc3RydWN0ZmllbGQ+IG1heQorICAg
ICAgaW5kaWNhdGUgdGhhdCB0aGUgaXRlbSBoYXMgaXRzIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVy
YWw+IGJpdAorICAgICAgc2V0LiAgSW4gYW4gaW50ZXJuYWwgcGFnZSwgdGhlIGJsb2NrIG51bWJl
ciBwYXJ0IG9mCisgICAgICA8c3RydWN0ZmllbGQ+Y3RpZDwvc3RydWN0ZmllbGQ+IHBvaW50cyB0
byBhbm90aGVyIHBhZ2UgaW4gdGhlCisgICAgICBpbmRleCBpdHNlbGYsIHdoaWxlIHRoZSBvZmZz
ZXQgcGFydCAodGhlIHNlY29uZCBudW1iZXIpIGVuY29kZXMKKyAgICAgIG1ldGFkYXRhIGFib3V0
IHRoZSB0dXBsZS4gIFBvc3RpbmcgbGlzdCB0dXBsZXMgb24gbGVhZiBwYWdlcworICAgICAgYWxz
byB1c2UgPHN0cnVjdGZpZWxkPmN0aWQ8L3N0cnVjdGZpZWxkPiBmb3IgbWV0YWRhdGEuCisgICAg
ICA8c3RydWN0ZmllbGQ+aHRpZDwvc3RydWN0ZmllbGQ+IGFsd2F5cyBzaG93cyBhIHNpbmdsZSBo
ZWFwIFRJRAorICAgICAgZm9yIHRoZSB0dXBsZSwgcmVnYXJkbGVzcyBvZiBob3cgaXQgaXMgcmVw
cmVzZW50ZWQgKGludGVybmFsCisgICAgICBwYWdlIHR1cGxlcyBtYXkgbmVlZCB0byBzdG9yZSBh
IGhlYXAgVElEIHdoZW4gdGhlcmUgYXJlIG1hbnkKKyAgICAgIGR1cGxpY2F0ZSB0dXBsZXMgb24g
ZGVzY2VuZGVudCBsZWFmIHBhZ2VzKS4KKyAgICAgIDxzdHJ1Y3RmaWVsZD50aWRzPC9zdHJ1Y3Rm
aWVsZD4gaXMgYSBsaXN0IG9mIFRJRHMgdGhhdCBpcyBzdG9yZWQKKyAgICAgIHdpdGhpbiBwb3N0
aW5nIGxpc3QgdHVwbGVzICh0dXBsZXMgY3JlYXRlZCBieSBkZWR1cGxpY2F0aW9uKS4KICAgICAg
PC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgIE5vdGUgdGhhdCB0aGUgZmlyc3QgaXRlbSBvbiBh
bnkgbm9uLXJpZ2h0bW9zdCBwYWdlIChhbnkgcGFnZSB3aXRoCiAgICAgICBhIG5vbi16ZXJvIHZh
bHVlIGluIHRoZSA8c3RydWN0ZmllbGQ+YnRwb19uZXh0PC9zdHJ1Y3RmaWVsZD4gZmllbGQpIGlz
IHRoZQogICAgICAgcGFnZSdzIDxxdW90ZT5oaWdoIGtleTwvcXVvdGU+LCBtZWFuaW5nIGl0cyA8
c3RydWN0ZmllbGQ+ZGF0YTwvc3RydWN0ZmllbGQ+CiAgICAgICBzZXJ2ZXMgYXMgYW4gdXBwZXIg
Ym91bmQgb24gYWxsIGl0ZW1zIGFwcGVhcmluZyBvbiB0aGUgcGFnZSwgd2hpbGUKLSAgICAgIGl0
cyA8c3RydWN0ZmllbGQ+Y3RpZDwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIG1lYW5pbmdsZXNzLiAg
QWxzbywgb24gbm9uLWxlYWYKLSAgICAgIHBhZ2VzLCB0aGUgZmlyc3QgcmVhbCBkYXRhIGl0ZW0g
KHRoZSBmaXJzdCBpdGVtIHRoYXQgaXMgbm90IGEgaGlnaAotICAgICAga2V5KSBpcyBhIDxxdW90
ZT5taW51cyBpbmZpbml0eTwvcXVvdGU+IGl0ZW0sIHdpdGggbm8gYWN0dWFsIHZhbHVlCi0gICAg
ICBpbiBpdHMgPHN0cnVjdGZpZWxkPmRhdGE8L3N0cnVjdGZpZWxkPiBmaWVsZC4gIFN1Y2ggYW4g
aXRlbSBkb2VzIGhhdmUgYSB2YWxpZAotICAgICAgZG93bmxpbmsgaW4gaXRzIDxzdHJ1Y3RmaWVs
ZD5jdGlkPC9zdHJ1Y3RmaWVsZD4gZmllbGQsIGhvd2V2ZXIuCisgICAgICBpdHMgPHN0cnVjdGZp
ZWxkPmN0aWQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBkb2VzIG5vdCBwb2ludCB0bworICAgICAgYW5v
dGhlciBibG9jay4gIEFsc28sIG9uIG5vbi1sZWFmIHBhZ2VzLCB0aGUgZmlyc3QgcmVhbCBkYXRh
IGl0ZW0KKyAgICAgICh0aGUgZmlyc3QgaXRlbSB0aGF0IGlzIG5vdCBhIGhpZ2gga2V5KSBpcyBh
IDxxdW90ZT5taW51cworICAgICAgaW5maW5pdHk8L3F1b3RlPiBpdGVtLCB3aXRoIG5vIGFjdHVh
bCB2YWx1ZSBpbiBpdHMKKyAgICAgIDxzdHJ1Y3RmaWVsZD5kYXRhPC9zdHJ1Y3RmaWVsZD4gZmll
bGQuICBTdWNoIGFuIGl0ZW0gZG9lcyBoYXZlIGEKKyAgICAgIHZhbGlkIGRvd25saW5rIGluIGl0
cyA8c3RydWN0ZmllbGQ+Y3RpZDwvc3RydWN0ZmllbGQ+IGZpZWxkLAorICAgICAgaG93ZXZlci4K
ICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KQEAgLTQw
MiwxNyArNDE1LDE3IEBAIHRlc3Q9IyBTRUxFQ1QgKiBGUk9NIGJ0X3BhZ2VfaXRlbXMoJ3BnX2Nh
c3Rfb2lkX2luZGV4JywgMSk7CiAgICAgICB3aXRoIDxmdW5jdGlvbj5nZXRfcmF3X3BhZ2U8L2Z1
bmN0aW9uPiBzaG91bGQgYmUgcGFzc2VkIGFzIGFyZ3VtZW50LiAgU28KICAgICAgIHRoZSBsYXN0
IGV4YW1wbGUgY291bGQgYWxzbyBiZSByZXdyaXR0ZW4gbGlrZSB0aGlzOgogPHNjcmVlbj4KLXRl
c3Q9IyBTRUxFQ1QgKiBGUk9NIGJ0X3BhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdlKCdwZ19jYXN0X29p
ZF9pbmRleCcsIDEpKTsKLSBpdGVtb2Zmc2V0IHwgIGN0aWQgICB8IGl0ZW1sZW4gfCBudWxscyB8
IHZhcnMgfCAgICBkYXRhCi0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t
Ky0tLS0tLSstLS0tLS0tLS0tLS0tCi0gICAgICAgICAgMSB8ICgwLDEpICAgfCAgICAgIDEyIHwg
ZiAgICAgfCBmICAgIHwgMjMgMjcgMDAgMDAKLSAgICAgICAgICAyIHwgKDAsMikgICB8ICAgICAg
MTIgfCBmICAgICB8IGYgICAgfCAyNCAyNyAwMCAwMAotICAgICAgICAgIDMgfCAoMCwzKSAgIHwg
ICAgICAxMiB8IGYgICAgIHwgZiAgICB8IDI1IDI3IDAwIDAwCi0gICAgICAgICAgNCB8ICgwLDQp
ICAgfCAgICAgIDEyIHwgZiAgICAgfCBmICAgIHwgMjYgMjcgMDAgMDAKLSAgICAgICAgICA1IHwg
KDAsNSkgICB8ICAgICAgMTIgfCBmICAgICB8IGYgICAgfCAyNyAyNyAwMCAwMAotICAgICAgICAg
IDYgfCAoMCw2KSAgIHwgICAgICAxMiB8IGYgICAgIHwgZiAgICB8IDI4IDI3IDAwIDAwCi0gICAg
ICAgICAgNyB8ICgwLDcpICAgfCAgICAgIDEyIHwgZiAgICAgfCBmICAgIHwgMjkgMjcgMDAgMDAK
LSAgICAgICAgICA4IHwgKDAsOCkgICB8ICAgICAgMTIgfCBmICAgICB8IGYgICAgfCAyYSAyNyAw
MCAwMAorcmVncmVzc2lvbj0jIFNFTEVDVCAqIEZST00gYnRfcGFnZV9pdGVtcyhnZXRfcmF3X3Bh
Z2UoJ3RlbmsyX3VuaXF1ZTEnLCA1KSk7CisgaXRlbW9mZnNldCB8ICAgY3RpZCAgIHwgaXRlbWxl
biB8IG51bGxzIHwgdmFycyB8ICAgICAgICAgIGRhdGEgICAgICAgICAgIHwgZGVhZCB8ICAgaHRp
ZCAgIHwgdGlkcworLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0t
LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg
ICAgICAgICAgMSB8ICg0MCwxKSAgIHwgICAgICAxNiB8IGYgICAgIHwgZiAgICB8IGI4IDA1IDAw
IDAwIDAwIDAwIDAwIDAwIHwgICAgICB8ICAgICAgICAgIHwKKyAgICAgICAgICAyIHwgKDU4LDEx
KSAgfCAgICAgIDE2IHwgZiAgICAgfCBmICAgIHwgNGEgMDQgMDAgMDAgMDAgMDAgMDAgMDAgfCBm
ICAgIHwgKDU4LDExKSAgfAorICAgICAgICAgIDMgfCAoMjY2LDQpICB8ICAgICAgMTYgfCBmICAg
ICB8IGYgICAgfCA0YiAwNCAwMCAwMCAwMCAwMCAwMCAwMCB8IGYgICAgfCAoMjY2LDQpICB8Cisg
ICAgICAgICAgNCB8ICgyNzksMjUpIHwgICAgICAxNiB8IGYgICAgIHwgZiAgICB8IDRjIDA0IDAw
IDAwIDAwIDAwIDAwIDAwIHwgZiAgICB8ICgyNzksMjUpIHwKKyAgICAgICAgICA1IHwgKDMzMywx
MSkgfCAgICAgIDE2IHwgZiAgICAgfCBmICAgIHwgNGQgMDQgMDAgMDAgMDAgMDAgMDAgMDAgfCBm
ICAgIHwgKDMzMywxMSkgfAorICAgICAgICAgIDYgfCAoODcsMjQpICB8ICAgICAgMTYgfCBmICAg
ICB8IGYgICAgfCA0ZSAwNCAwMCAwMCAwMCAwMCAwMCAwMCB8IGYgICAgfCAoODcsMjQpICB8Cisg
ICAgICAgICAgNyB8ICgzOCwyMikgIHwgICAgICAxNiB8IGYgICAgIHwgZiAgICB8IDRmIDA0IDAw
IDAwIDAwIDAwIDAwIDAwIHwgZiAgICB8ICgzOCwyMikgIHwKKyAgICAgICAgICA4IHwgKDI3Miwx
NykgfCAgICAgIDE2IHwgZiAgICAgfCBmICAgIHwgNTAgMDQgMDAgMDAgMDAgMDAgMDAgMDAgfCBm
ICAgIHwgKDI3MiwxNykgfAogPC9zY3JlZW4+CiAgICAgICBBbGwgdGhlIG90aGVyIGRldGFpbHMg
YXJlIHRoZSBzYW1lIGFzIGV4cGxhaW5lZCBpbiB0aGUgcHJldmlvdXMgaXRlbS4KICAgICAgPC9w
YXJhPgotLSAKMi4xNy4xCgo=
--000000000000f3369d059c2431aa
Content-Type: application/octet-stream; 
	name="v30-0003-Bucket-sort-for-compactify_tuples.patch"
Content-Disposition: attachment; 
	filename="v30-0003-Bucket-sort-for-compactify_tuples.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_k5en9nkt2>
X-Attachment-Id: f_k5en9nkt2

RnJvbSA2NGMwM2IyMDQwZWVmYTgxNjQ0NDc1MzRiZjFjM2RkNWQ1Y2JiMzIwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1
ZSwgMTQgSmFuIDIwMjAgMTU6Mjc6NTQgLTA4MDAKU3ViamVjdDogW1BBVENIIHYzMCAzLzVdIEJ1
Y2tldCBzb3J0IGZvciBjb21wYWN0aWZ5X3R1cGxlcy4KCk9yaWdpbmFsIGNvbW1pdCBtZXNzYWdl
IGZyb20gU29rb2xvdiBZdXJhOgoKVGhpcyBwYXRjaCBpbXBsZW1lbnRzIGJ1Y2tldCBzb3J0IGZv
ciBjb21wYWN0aWZ5X3R1cGxlczoKLSBvbmUgcGFzcyBvZiBzdGFibGUgcHJlZml4IHNvcnQgb24g
aGlnaCA4IGJpdHMgb2Ygb2Zmc2V0Ci0gYW5kIGluc2VydGlvbiBzb3J0IGZvciBidWNrZXRzIGxh
cmdlciB0aGFuIDEgZWxlbWVudAoKVGhpcyBhcHByb2FjaCBhbGxvd3MgdG8gc2F2ZSAzJSBvZiBj
cHUgaW4gZGVnZW5lcmF0ZSBjYXNlCihoaWdobHkgaW50ZW5zaXZlIEhPVCByYW5kb20gdXBkYXRl
cyBvbiB1bmxvZ2dlZCB0YWJsZSB3aXRoCiBzeW5jaHJvbml6ZWRfY29tbWl0PW9mZiksIGFuZCBz
cGVlZHMgdXAgV0FMIHJlcGxheWluZyAoYXMgd2VyZQpmb3VuZCBieSBIZWlra2kgTGlubmFrYW5n
YXMpLgoKU2FtZSBhcHByb2FjaCB3ZXJlIGltcGxlbWVudGVkIGJ5IEhlaWtraSBMaW5uYWthbmdh
cyBzb21lIHRpbWUgYWdvIHdpdGgKc2V2ZXJhbCBkaXN0aW5jdGlvbnMuCgpUaGlzIHBhdGNoIHdh
cyByZXRyaWV2ZWQgZnJvbToKaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUwtckNBMm43VWZWdTFVaTBm
JTJCN2NWTjR2QUtWTTAlMkItY1pLYl9rYTYtbUdRQkFGOTJ3JTQwbWFpbC5nbWFpbC5jb20KCkNG
IEVudHJ5IGZvciBwYXRjaDogaHR0cHM6Ly9jb21taXRmZXN0LnBvc3RncmVzcWwub3JnLzE0LzEx
MzgvCgpSZWxhdGVkIHRocmVhZDogaHR0cHM6Ly9wb3N0Z3IuZXMvbS81NDZCODlERS43MDMwOTA2
JTQwdm13YXJlLmNvbQotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdlLmMgfCA4
MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCA3OCBpbnNl
cnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3Jh
Z2UvcGFnZS9idWZwYWdlLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvYnVmcGFnZS5jCmlu
ZGV4IDMyZmYwM2IzZTQuLjAwODFkZDkyMWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh
Z2UvcGFnZS9idWZwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2Uu
YwpAQCAtNDM2LDYgKzQzNiw3OSBAQCBpdGVtb2ZmY29tcGFyZShjb25zdCB2b2lkICppdGVtaWRw
MSwgY29uc3Qgdm9pZCAqaXRlbWlkcDIpCiAJCSgoaXRlbUlkU29ydCkgaXRlbWlkcDEpLT5pdGVt
b2ZmOwogfQogCisjZGVmaW5lIFFTX1NVRkZJWCBpdGVtSWRzCisjZGVmaW5lIFFTX1RZUEUgaXRl
bUlkU29ydERhdGEKKyNkZWZpbmUgUVNfU0NPUEUgc3RhdGljCisjZGVmaW5lIFFTX0NNUCBpdGVt
b2ZmY29tcGFyZQorI2RlZmluZSBRU19ERUZJTkUKKyNkZWZpbmUgUVNfU0tJUF9NRUQzCisjaW5j
bHVkZSAibGliL3Fzb3J0X3RlbXBsYXRlLmgiCisKKy8qCisgKiBTb3J0IGFuIGFycmF5IG9mIGl0
ZW1JZFNvcnQncyBvbiBpdGVtb2ZmLCBkZXNjZW5kaW5nLgorICoKKyAqIEl0IHVzZXMgYnVja2V0
IHNvcnQ6CisgKiAtIHNpbmdsZSBwYXNzIG9mIHN0YWJsZSBwcmVmaXggc29ydCBvbiBoaWdoIDgg
Yml0cworICogLSBhbmQgaW5zZXJ0aW9uIHNvcnQgb24gYnVja2V0cyBsYXJnZXIgdGhhbiAxIGVs
ZW1lbnQKKyAqLworc3RhdGljIHZvaWQKK2J1Y2tldHNvcnRfaXRlbUlkcyhpdGVtSWRTb3J0IGl0
ZW1pZGJhc2UsIGludCBuaXRlbXMpCit7CisJaXRlbUlkU29ydERhdGEgY29weVtNYXgoTWF4SW5k
ZXhUdXBsZXNQZXJQYWdlLCBNYXhIZWFwVHVwbGVzUGVyUGFnZSldOworI2RlZmluZSBOU1BMSVQg
MjU2CisjZGVmaW5lIFBSRUZESVYgKEJMQ0tTWiAvIE5TUExJVCkKKwkvKiB0d28gZXh0cmEgZWxl
bWVudHMgdG8gZW11bGF0ZSBvZmZzZXQgb24gcHJldmlvdXMgc3RlcCAqLworCXVpbnQxNgkJY291
bnRbTlNQTElUICsgMl0gPSB7MH07CisJaW50CQkJaSwKKwkJCQltYXgsCisJCQkJdG90YWwsCisJ
CQkJcG9zLAorCQkJCWhpZ2hiaXRzOworCisJQXNzZXJ0KG5pdGVtcyA8PSBNYXhJbmRleFR1cGxl
c1BlclBhZ2UpOworCWZvciAoaSA9IDA7IGkgPCBuaXRlbXM7IGkrKykKKwl7CisJCWhpZ2hiaXRz
ID0gaXRlbWlkYmFzZVtpXS5pdGVtb2ZmIC8gUFJFRkRJVjsKKwkJY291bnRbaGlnaGJpdHNdKys7
CisJfQorCS8qIHNvcnQgaW4gZGVjcmVhc2luZyBvcmRlciAqLworCW1heCA9IHRvdGFsID0gY291
bnRbTlNQTElUIC0gMV07CisJZm9yIChpID0gTlNQTElUIC0gMjsgaSA+PSAwOyBpLS0pCisJewor
CQltYXggfD0gY291bnRbaV07CisJCXRvdGFsICs9IGNvdW50W2ldOworCQljb3VudFtpXSA9IHRv
dGFsOworCX0KKworCS8qCisJICogY291bnRbaysxXSBpcyBzdGFydCBvZiBidWNrZXQgaywgY291
bnRba10gaXMgZW5kIG9mIGJ1Y2tldCBrLCBhbmQKKwkgKiBjb3VudFtrXSAtIGNvdW50W2srMV0g
aXMgbGVuZ3RoIG9mIGJ1Y2tldCBrLgorCSAqLworCUFzc2VydChjb3VudFswXSA9PSBuaXRlbXMp
OworCWZvciAoaSA9IDA7IGkgPCBuaXRlbXM7IGkrKykKKwl7CisJCWhpZ2hiaXRzID0gaXRlbWlk
YmFzZVtpXS5pdGVtb2ZmIC8gUFJFRkRJVjsKKwkJcG9zID0gY291bnRbaGlnaGJpdHMgKyAxXTsK
KwkJY291bnRbaGlnaGJpdHMgKyAxXSsrOworCQljb3B5W3Bvc10gPSBpdGVtaWRiYXNlW2ldOwor
CX0KKwlBc3NlcnQoY291bnRbMV0gPT0gbml0ZW1zKTsKKworCWlmIChtYXggPiAxKQorCXsKKwkJ
LyoKKwkJICogY291bnRbaysyXSBpcyBzdGFydCBvZiBidWNrZXQgaywgY291bnRbaysxXSBpcyBl
bmQgb2YgYnVja2V0IGssIGFuZAorCQkgKiBjb3VudFtrKzFdLWNvdW50W2srMl0gaXMgbGVuZ3Ro
IG9mIGJ1Y2tldCBrLgorCQkgKi8KKwkJZm9yIChpID0gTlNQTElUOyBpID4gMDsgaS0tKQorCQl7
CisJCQlpbnNlcnRpb25fc29ydF9pdGVtSWRzKGNvcHkgKyBjb3VudFtpICsgMV0sIGNvdW50W2ld
IC0gY291bnRbaSArIDFdKTsKKwkJfQorCX0KKworCW1lbWNweShpdGVtaWRiYXNlLCBjb3B5LCBz
aXplb2YoaXRlbUlkU29ydERhdGEpICogbml0ZW1zKTsKK30KKwogLyoKICAqIEFmdGVyIHJlbW92
aW5nIG9yIG1hcmtpbmcgc29tZSBsaW5lIHBvaW50ZXJzIHVudXNlZCwgbW92ZSB0aGUgdHVwbGVz
IHRvCiAgKiByZW1vdmUgdGhlIGdhcHMgY2F1c2VkIGJ5IHRoZSByZW1vdmVkIGl0ZW1zLgpAQCAt
NDQ4LDggKzUyMSwxMSBAQCBjb21wYWN0aWZ5X3R1cGxlcyhpdGVtSWRTb3J0IGl0ZW1pZGJhc2Us
IGludCBuaXRlbXMsIFBhZ2UgcGFnZSkKIAlpbnQJCQlpOwogCiAJLyogc29ydCBpdGVtSWRTb3J0
RGF0YSBhcnJheSBpbnRvIGRlY3JlYXNpbmcgaXRlbW9mZiBvcmRlciAqLwotCXFzb3J0KChjaGFy
ICopIGl0ZW1pZGJhc2UsIG5pdGVtcywgc2l6ZW9mKGl0ZW1JZFNvcnREYXRhKSwKLQkJICBpdGVt
b2ZmY29tcGFyZSk7CisJaWYgKG5pdGVtcyA+IDQ4KQorCQlidWNrZXRzb3J0X2l0ZW1JZHMoaXRl
bWlkYmFzZSwgbml0ZW1zKTsKKwllbHNlCisJCXFzb3J0X2l0ZW1JZHMoaXRlbWlkYmFzZSwgbml0
ZW1zKTsKKwogCiAJdXBwZXIgPSBwaGRyLT5wZF9zcGVjaWFsOwogCWZvciAoaSA9IDA7IGkgPCBu
aXRlbXM7IGkrKykKLS0gCjIuMTcuMQoK
--000000000000f3369d059c2431aa
Content-Type: application/octet-stream; 
	name="v30-0001-Add-deduplication-to-nbtree.patch"
Content-Disposition: attachment; 
	filename="v30-0001-Add-deduplication-to-nbtree.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_k5en9nk10>
X-Attachment-Id: f_k5en9nk10

RnJvbSA1ZDk3MTNjNzgyMGRiYTA4NGUwMzZhYThjMDBjZjkyNzNhNTdmZjM4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl
ZCwgMjUgU2VwIDIwMTkgMTA6MDg6NTMgLTA3MDAKU3ViamVjdDogW1BBVENIIHYzMCAxLzVdIEFk
ZCBkZWR1cGxpY2F0aW9uIHRvIG5idHJlZS4KCkRlZHVwbGljYXRpb24gcmVkdWNlcyB0aGUgc3Rv
cmFnZSBvdmVyaGVhZCBvZiBkdXBsaWNhdGVzIGluIGluZGV4ZXMgdGhhdAp1c2UgdGhlIHN0YW5k
YXJkIG5idHJlZSBpbmRleCBhY2Nlc3MgbWV0aG9kLiAgVGhlIGRlZHVwbGljYXRpb24gcHJvY2Vz
cwppcyBhcHBsaWVkIGxhemlseSwgYWZ0ZXIgdGhlIHBvaW50IHdoZXJlIG9wcG9ydHVuaXN0aWMg
ZGVsZXRpb24gb2YKTFBfREVBRC1tYXJrZWQgaW5kZXggdHVwbGVzIG9jY3Vycy4gIERlZHVwbGlj
YXRpb24gaXMgb25seSBhcHBsaWVkIGF0CnRoZSBwb2ludCB3aGVyZSBhIGxlYWYgcGFnZSBzcGxp
dCB3b3VsZCBvdGhlcndpc2UgYmUgcmVxdWlyZWQuICBOZXcKInBvc3RpbmcgbGlzdCB0dXBsZXMi
IGFyZSBmb3JtZWQgYnkgbWVyZ2luZyB0b2dldGhlciBleGlzdGluZyBkdXBsaWNhdGUKdHVwbGVz
LiAgVGhlIHBoeXNpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpdGVtcyBvbiBhbiBuYnRyZWUg
bGVhZiBwYWdlCmlzIG1hZGUgbW9yZSBzcGFjZSBlZmZpY2llbnQgYnkgZGVkdXBsaWNhdGlvbiwg
YnV0IHRoZSBsb2dpY2FsIGNvbnRlbnRzCm9mIHRoZSBwYWdlIGFyZSBub3QgY2hhbmdlZC4KClRl
c3RpbmcgaGFzIHNob3duIHRoYXQgbmJ0cmVlIGRlZHVwbGljYXRpb24gY2FuIGdlbmVyYWxseSBt
YWtlIGluZGV4ZXMKd2l0aCBhYm91dCAxMCBvciAxNSB0dXBsZXMgZm9yIGVhY2ggZGlzdGluY3Qg
a2V5IHZhbHVlIGFib3V0IDIuNVggLSA0WApzbWFsbGVyLCBldmVuIHdpdGggc2luZ2xlIGNvbHVt
biBpbnRlZ2VyIGluZGV4ZXMgKGUuZy4sIGFuIGluZGV4IG9uIGEKcmVmZXJlbmNpbmcgY29sdW1u
IHRoYXQgYWNjb21wYW5pZXMgYSBmb3JlaWduIGtleSkuICBUaGUgZmluYWwgc2l6ZSBvZgpzaW5n
bGUgY29sdW1uIG5idHJlZSBpbmRleGVzIGNvbWVzIGNsb3NlIHRvIHRoZSBmaW5hbCBzaXplIG9m
IGEgc2ltaWxhcgpjb250cmliL2J0cmVlX2dpbiBpbmRleCwgYXQgbGVhc3QgaW4gY2FzZXMgd2hl
cmUgR0lOJ3MgcG9zdGluZyBsaXN0CmNvbXByZXNzaW9uIGlzbid0IHZlcnkgZWZmZWN0aXZlLgoK
VGhlIGxhenkgYXBwcm9hY2ggdGFrZW4gYnkgbmJ0cmVlIGhhcyBzaWduaWZpY2FudCBhZHZhbnRh
Z2VzIG92ZXIgYQpHSU4gc3R5bGUgZWFnZXIgYXBwcm9hY2guICBNb3N0IGluZGl2aWR1YWwgaW5z
ZXJ0cyBvZiBpbmRleCB0dXBsZXMgaGF2ZQpleGFjdGx5IHRoZSBzYW1lIG92ZXJoZWFkIGFzIGJl
Zm9yZS4gIFRoZSBleHRyYSBvdmVyaGVhZCBvZgpkZWR1cGxpY2F0aW9uIGlzIGFtb3J0aXplZCBh
Y3Jvc3MgaW5zZXJ0aW9ucywganVzdCBsaWtlIHRoZSBvdmVyaGVhZCBvZgpwYWdlIHNwbGl0cy4g
IFRoZSBrZXkgc3BhY2Ugb2YgaW5kZXhlcyB3b3JrcyBpbiB0aGUgc2FtZSB3YXkgYXMgaXQgaGFz
CnNpbmNlIGNvbW1pdCBkZDI5OWRmOCAodGhlIGNvbW1pdCB3aGljaCBtYWRlIGhlYXAgVElEIGEg
dGllYnJlYWtlcgpjb2x1bW4pLCBzaW5jZSBvbmx5IHRoZSBwaHlzaWNhbCByZXByZXNlbnRhdGlv
biBvZiB0dXBsZXMgaXMgY2hhbmdlZC4KRnVydGhlcm1vcmUsIGRlZHVwbGljYXRpb24gY2FuIGVh
c2lseSBiZSB0dXJuZWQgb24gb3Igb2ZmLiAgVGhlIHNwbGl0CnBvaW50IGNob2ljZSBsb2dpYyBk
b2Vzbid0IG5lZWQgdG8gYmUgY2hhbmdlZCwgc2luY2UgcG9zdGluZyBsaXN0IHR1cGxlcwphcmUg
anVzdCB0dXBsZXMgd2l0aCBwYXlsb2FkLCBtdWNoIGxpa2UgdHVwbGVzIHdpdGggbm9uLWtleSBj
b2x1bW5zIGluCklOQ0xVREUgaW5kZXhlcy4gIChuYnRzcGxpdGxvYy5jIGlzIHN0aWxsIG9wdGlt
aXplZCB0byBtYWtlIGludGVsbGlnZW50CmNob2ljZXMgaW4gdGhlIHByZXNlbmNlIG9mIHBvc3Rp
bmcgbGlzdCB0dXBsZXMsIHRob3VnaCBvbmx5IGJlY2F1c2UKc3VmZml4IHRydW5jYXRpb24gd2ls
bCByb3V0aW5lbHkgbWFrZSBuZXcgaGlnaCBrZXlzIGZhciBmYXIgc21hbGxlciB0aGFuCnRoZSBu
b24tcGl2b3QgdHVwbGUgdGhleSdyZSBkZXJpdmVkIGZyb20pLgoKSW4gZ2VuZXJhbCwgbmJ0cmVl
IHVuaXF1ZSBpbmRleGVzIHNvbWV0aW1lcyBuZWVkIHRvIHN0b3JlIG11bHRpcGxlIGVxdWFsCihu
b24tTlVMTCkgdHVwbGVzIGZvciB0aGUgc2FtZSBsb2dpY2FsIHJvdyAob25lIHBlciBwaHlzaWNh
bCByb3cKdmVyc2lvbikuICBVbmlxdWUgaW5kZXhlcyBjYW4gdXNlIGRlZHVwbGljYXRpb24gc3Bl
Y2lmaWNhbGx5IHRvIG1lcmdlCnRvZ2V0aGVyIG11bHRpcGxlIHBoeXNpY2FsIHZlcnNpb25zIChp
bmRleCB0dXBsZXMpLCB0aG91Z2ggdGhlIG92ZXJhbGwKc3RyYXRlZ3kgdXNlZCB0aGVyZSBpcyBz
b21ld2hhdCBkaWZmZXJlbnQuICBUaGUgaGlnaC1sZXZlbCBnb2FsIHdpdGgKdW5pcXVlIGluZGV4
ZXMgaXMgdG8gcHJldmVudCAidW5uZWNlc3NhcnkiIHBhZ2Ugc3BsaXRzIC0tIHNwbGl0cyBjYXVz
ZWQKb25seSBieSBhIHNob3J0IHRlcm0gYnVyc3Qgb2YgaW5kZXggdHVwbGUgdmVyc2lvbnMuICBU
aGlzIGlzIG9mdGVuIGEKY29uY2VybiB3aXRoIGZyZXF1ZW50bHkgdXBkYXRlZCB0YWJsZXMgd2hl
cmUgVVBEQVRFcyBhbHdheXMgbW9kaWZ5IGF0CmxlYXN0IG9uZSBpbmRleGVkIGNvbHVtbiAobWFr
aW5nIGl0IGltcG9zc2libGUgZm9yIHRoZSB0YWJsZSBhbSB0byB1c2UKYW4gb3B0aW1pemF0aW9u
IGxpa2UgaGVhcGFtJ3MgaGVhcC1vbmx5IHR1cGxlcyBvcHRpbWl6YXRpb24pLgpEZWR1cGxpY2F0
aW9uIGluIHVuaXF1ZSBpbmRleGVzIGVmZmVjdGl2ZWx5ICJidXlzIHRpbWUiIGZvciBleGlzdGlu
ZwpuYnRyZWUgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbXMgdG8gcnVuIGFuZCBwcmV2ZW50
IHRoZXNlIHBhZ2UKc3BsaXRzICh0aGUgTFBfREVBRCBiaXQgc2V0dGluZyBwZXJmb3JtZWQgZHVy
aW5nIHRoZSB1bmlxdWVuZXNzIGNoZWNrIGlzCnRoZSBtb3N0IGltcG9ydGFudCBtZWNoYW5pc20g
Zm9yIGNvbnRyb2xsaW5nIGJsb2F0IHdpdGggYWZmZWN0ZWQKd29ya2xvYWRzKS4KCkRlZHVwbGlj
YXRpb24gaW4gbm9uLXVuaXF1ZSBpbmRleGVzIGlzIGNvbnRyb2xsZWQgYnkgYSBuZXcgR1VDLApk
ZWR1cGxpY2F0ZV9idHJlZV9pdGVtcy4gIEEgbmV3IHN0b3JhZ2UgcGFyYW1ldGVyIChkZWR1cGxp
Y2F0ZV9pdGVtcykgaXMKYWxzbyBhZGRlZCwgd2hpY2ggY29udHJvbHMgZGVkdXBsaWNhdGlvbiBh
dCB0aGUgaW5kZXggcmVsYXRpb24KZ3JhbnVsYXJpdHkuICBJdCBjYW4gYmUgdXNlZCB0byBkaXNh
YmxlIGRlZHVwbGljYXRpb24gaW4gdW5pcXVlIGluZGV4ZXMKZm9yIGRlYnVnZ2luZyBwdXJwb3Nl
cy4gKFRoZSBnZW5lcmFsIGNyaXRlcmlhIGZvciBhcHBseWluZyBkZWR1cGxpY2F0aW9uCmluIHVu
aXF1ZSBpbmRleGVzIGVuc3VyZXMgdGhhdCBvbmx5IGNhc2VzIHdpdGggc29tZSBkdXBsaWNhdGVz
IHdpbGwKYWN0dWFsbHkgZ2V0IGEgZGVkdXBsaWNhdGlvbiBwYXNzIC0tIHRoYXQncyB3aHkgdW5p
cXVlIGluZGV4ZXMgYXJlIG5vdAphZmZlY3RlZCBieSB0aGUgZGVkdXBsaWNhdGVfYnRyZWVfaXRl
bXMgR1VDLikKClNpbmNlIHBvc3RpbmcgbGlzdCB0dXBsZXMgaGF2ZSBvbmx5IG9uZSBsaW5lIHBv
aW50ZXIgKGp1c3QgbGlrZSBhbnkKb3RoZXIgdHVwbGUpLCB0aGV5IGhhdmUgb25seSBvbmUgTFBf
REVBRCBiaXQuICBUaGUgTFBfREVBRCBiaXQgY2FuIHN0aWxsCmJlIHNldCBieSBib3RoIHVuaXF1
ZSBjaGVja2luZyBhbmQgdGhlIGtpbGxfcHJpb3JfdHVwbGUgb3B0aW1pemF0aW9uLApidXQgb25s
eSB3aGVuIGFsbCBoZWFwIFRJRHMgYXJlIGRlYWQtdG8tYWxsLiAgVGhpcyAibG9zcyBvZiBncmFu
dWxhcml0eSIKZm9yIExQX0RFQUQgYml0cyBpcyBjb25zaWRlcmVkIGFuIGFjY2VwdGFibGUgZG93
bnNpZGUgb2YgdGhlCmRlZHVwbGljYXRpb24gZGVzaWduLiAgV2UgYWx3YXlzIHByZWZlciBkZWxl
dGluZyBMUF9ERUFEIGl0ZW1zIHRvIGEKZGVkdXBsaWNhdGlvbiBwYXNzLCBhbmQgYSBkZWR1cGxp
Y2F0aW9uIHBhc3MgY2FuIG9ubHkgdGFrZSBwbGFjZSBhdCB0aGUKcG9pbnQgd2hlcmUgd2UnZCBw
cmV2aW91c2x5IGhhdmUgaGFkIHRvIHNwbGl0IHRoZSBwYWdlLCBzbyBhbnkgd29ya2xvYWQKdGhh
dCBwYXlzIGEgY29zdCBoZXJlIG11c3QgYWxzbyBnZXQgYSBzaWduaWZpY2FudCBiZW5lZml0LgoK
QnVtcCBYTE9HX1BBR0VfTUFHSUMgYmVjYXVzZSB4bF9idHJlZV92YWN1dW0gY2hhbmdlZC4KCk5v
IGJ1bXAgaW4gQlRSRUVfVkVSU0lPTiwgc2luY2UgZGVkdXBsaWNhdGlvbiBvbmx5IGFmZmVjdHMg
dGhlIHBoeXNpY2FsCnJlcHJlc2VudGF0aW9uIG9mIHR1cGxlcy4gIEhvd2V2ZXIsIHVzZXJzIG11
c3Qgc3RpbGwgUkVJTkRFWCBhCnBnX3VwZ3JhZGUnZCBpbmRleCB0byBiZWZvcmUgaXRzIGxlYWYg
cGFnZSBzcGxpdHMgd2lsbCBhcHBseQpkZWR1cGxpY2F0aW9uLiAgQW4gaW5kZXggYnVpbGQgaXMg
dGhlIG9ubHkgd2F5IHRvIHNldCB0aGUgbmV3IG5idHJlZQptZXRhcGFnZSBmbGFnIGluZGljYXRp
bmcgdGhhdCBkZWR1cGxpY2F0aW9uIGlzIGdlbmVyYWxseSBzYWZlLgoKQXV0aG9yOiBBbmFzdGFz
aWEgTHViZW5uaWtvdmEsIFBldGVyIEdlb2doZWdhbgpSZXZpZXdlZC1CeTogUGV0ZXIgR2VvZ2hl
Z2FuLCBIZWlra2kgTGlubmFrYW5nYXMKRGlzY3Vzc2lvbjoKICAgIGh0dHBzOi8vcG9zdGdyLmVz
L20vNTVFNDA1MUIuNzAyMDIwOUBwb3N0Z3Jlc3Byby5ydQogICAgaHR0cHM6Ly9wb3N0Z3IuZXMv
bS80YWI2ZTJkYi1iY2VlLWY0Y2YtMDkxNi0zYTA2ZTZjY2JiNTVAcG9zdGdyZXNwcm8ucnUKLS0t
CiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAgICAgICAgICAgICAgICAgfCA0MDcgKysr
KysrKy0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0eGxvZy5oICAgICAgICAgICAgICAgICAgfCAg
OTYgKystCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaCAgICAgICAgICAgICAgICAgfCAg
IDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jICAgICAgICB8ICAg
OSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgICAgICAgfCAgIDQg
Kwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9NYWtlZmlsZSAgICAgICAgICAgIHwgICAxICsK
IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FICAgICAgICAgICAgICB8IDE1MSArKyst
CiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMgICAgICAgICAgfCA4MDkgKysr
KysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGluc2VydC5jICAg
ICAgICAgfCAzOTcgKysrKysrKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2Uu
YyAgICAgICAgICAgfCAyMjMgKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVl
LmMgICAgICAgICAgICB8IDE4MCArKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNl
YXJjaC5jICAgICAgICAgfCAyNzEgKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i
dHNvcnQuYyAgICAgICAgICAgfCAxOTAgKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u
YnRzcGxpdGxvYy5jICAgICAgIHwgIDM5ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i
dHV0aWxzLmMgICAgICAgICAgfCAyMjYgKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv
bmJ0eGxvZy5jICAgICAgICAgICB8IDIwMiArKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk
ZXNjL25idGRlc2MuYyAgICAgICAgIHwgIDIzICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2Uv
YnVmcGFnZS5jICAgICAgICAgICAgfCAgIDkgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj
LmMgICAgICAgICAgICAgICAgICB8ICAxMCArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn
cmVzcWwuY29uZi5zYW1wbGUgfCAgIDEgKwogc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jICAg
ICAgICAgICAgICAgICAgIHwgICA0ICstCiBjb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5j
ICAgICAgICAgICAgICAgfCAyMzEgKysrKy0KIGRvYy9zcmMvc2dtbC9idHJlZS5zZ21sICAgICAg
ICAgICAgICAgICAgICAgICB8IDEyMCArKy0KIGRvYy9zcmMvc2dtbC9jaGFyc2V0LnNnbWwgICAg
ICAgICAgICAgICAgICAgICB8ICAgOSArLQogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAg
ICAgICAgICAgICAgICAgIHwgIDI1ICsKIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNn
bWwgICAgICAgICAgICB8ICAzOCArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9idHJlZV9p
bmRleC5vdXQgICAgIHwgIDE2ICsKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2J0cmVlX2luZGV4LnNx
bCAgICAgICAgICB8ICAxNyArCiAyOCBmaWxlcyBjaGFuZ2VkLCAzMzkwIGluc2VydGlvbnMoKyks
IDMyMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3Mv
bmJ0cmVlL25idGRlZHVwLmMKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVl
LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXggMjBhY2U2OWRhYi4uMDM2YTlk
OWU5NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCisrKyBiL3NyYy9p
bmNsdWRlL2FjY2Vzcy9uYnRyZWUuaApAQCAtMjQsNiArMjQsOSBAQAogI2luY2x1ZGUgInN0b3Jh
Z2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1fdG9jLmgiCiAKKy8qIEdVQyBwYXJh
bWV0ZXIgKi8KK2V4dGVybiBib29sIGRlZHVwbGljYXRlX2J0cmVlX2l0ZW1zOworCiAvKiBUaGVy
ZSdzIHJvb20gZm9yIGEgMTYtYml0IHZhY3V1bSBjeWNsZSBJRCBpbiBCVFBhZ2VPcGFxdWVEYXRh
ICovCiB0eXBlZGVmIHVpbnQxNiBCVEN5Y2xlSWQ7CiAKQEAgLTEwOCw2ICsxMTEsNyBAQCB0eXBl
ZGVmIHN0cnVjdCBCVE1ldGFQYWdlRGF0YQogCQkJCQkJCQkJCSAqIHBhZ2VzICovCiAJZmxvYXQ4
CQlidG1fbGFzdF9jbGVhbnVwX251bV9oZWFwX3R1cGxlczsJLyogbnVtYmVyIG9mIGhlYXAgdHVw
bGVzCiAJCQkJCQkJCQkJCQkJICogZHVyaW5nIGxhc3QgY2xlYW51cCAqLworCWJvb2wJCWJ0bV9z
YWZlZGVkdXA7CS8qIGRlZHVwbGljYXRpb24ga25vd24gdG8gYmUgc2FmZT8gKi8KIH0gQlRNZXRh
UGFnZURhdGE7CiAKICNkZWZpbmUgQlRQYWdlR2V0TWV0YShwKSBcCkBAIC0xMjQsNiArMTI4LDEz
IEBAIHR5cGVkZWYgc3RydWN0IEJUTWV0YVBhZ2VEYXRhCiAgKiBuZWVkIHRvIGJlIGltbWVkaWF0
ZWx5IHJlLWluZGV4ZWQgYXQgcGdfdXBncmFkZS4gIEluIG9yZGVyIHRvIGdldCB0aGUKICAqIG5l
dyBoZWFwa2V5c3BhY2Ugc2VtYW50aWNzLCBob3dldmVyLCBhIFJFSU5ERVggaXMgbmVlZGVkLgog
ICoKKyAqIERlZHVwbGljYXRpb24gaXMgc2FmZSB0byB1c2Ugd2hlbiB0aGUgYnRtX3NhZmVkZWR1
cCBmaWVsZCBpcyBzZXQgdG8KKyAqIHRydWUuICBJdCdzIHNhZmUgdG8gcmVhZCB0aGUgYnRtX3Nh
ZmVkZWR1cCBmaWVsZCBvbiB2ZXJzaW9uIDMsIGJ1dCBvbmx5CisgKiB2ZXJzaW9uIDQgaW5kZXhl
cyBtYWtlIHVzZSBvZiBkZWR1cGxpY2F0aW9uLiAgRXZlbiB2ZXJzaW9uIDQgaW5kZXhlcworICog
Y3JlYXRlZCBvbiBQb3N0Z3JlU1FMIHYxMiB3aWxsIG5lZWQgYSBSRUlOREVYIHRvIG1ha2UgdXNl
IG9mCisgKiBkZWR1cGxpY2F0aW9uLCB0aG91Z2gsIHNpbmNlIHRoZXJlIGlzIG5vIG90aGVyIHdh
eSB0byBzZXQgYnRtX3NhZmVkZWR1cAorICogdG8gdHJ1ZSAocGdfdXBncmFkZSBoYXNuJ3QgYmVl
biB0YXVnaHQgdG8gc2V0IHRoZSBtZXRhcGFnZSBmaWVsZCkuCisgKgogICogQnRyZWUgdmVyc2lv
biAyIGlzIG1vc3RseSB0aGUgc2FtZSBhcyB2ZXJzaW9uIDMuICBUaGVyZSBhcmUgdHdvIG5ldwog
ICogZmllbGRzIGluIHRoZSBtZXRhcGFnZSB0aGF0IHdlcmUgaW50cm9kdWNlZCBpbiB2ZXJzaW9u
IDMuICBBIHZlcnNpb24gMgogICogbWV0YXBhZ2Ugd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHVwZ3Jh
ZGVkIHRvIHZlcnNpb24gMyBvbiB0aGUgZmlyc3QKQEAgLTE1Niw2ICsxNjcsMjEgQEAgdHlwZWRl
ZiBzdHJ1Y3QgQlRNZXRhUGFnZURhdGEKIAkJCQkgICBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVy
RGF0YSArIDMqc2l6ZW9mKEl0ZW1JZERhdGEpKSAtIFwKIAkJCQkgICBNQVhBTElHTihzaXplb2Yo
QlRQYWdlT3BhcXVlRGF0YSkpKSAvIDMpCiAKKy8qCisgKiBNYXhUSURzUGVyQlRyZWVQYWdlIGlz
IGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBudW1iZXIgb2YgaGVhcCBUSURzIHR1cGxlcworICogdGhh
dCBtYXkgYmUgc3RvcmVkIG9uIGEgYnRyZWUgbGVhZiBwYWdlLiAgSXQgaXMgdXNlZCB0byBzaXpl
IHRoZQorICogcGVyLXBhZ2UgdGVtcG9yYXJ5IGJ1ZmZlcnMgdXNlZCBieSBpbmRleCBzY2Fucy4p
CisgKgorICogTm90ZTogd2UgZG9uJ3QgYm90aGVyIGNvbnNpZGVyaW5nIHBlci10dXBsZSBvdmVy
aGVhZHMgaGVyZSB0byBrZWVwCisgKiB0aGluZ3Mgc2ltcGxlICh2YWx1ZSBpcyBiYXNlZCBvbiBo
b3cgbWFueSBlbGVtZW50cyBhIHNpbmdsZSBhcnJheSBvZgorICogaGVhcCBUSURzIG11c3QgaGF2
ZSB0byBmaWxsIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBwYWdlIGhlYWRlciBhbmQKKyAqIHNwZWNp
YWwgYXJlYSkuICBUaGUgdmFsdWUgaXMgc2xpZ2h0bHkgaGlnaGVyIChpLmUuIG1vcmUgY29uc2Vy
dmF0aXZlKQorICogdGhhbiBuZWNlc3NhcnkgYXMgYSByZXN1bHQsIHdoaWNoIGlzIGNvbnNpZGVy
ZWQgYWNjZXB0YWJsZS4KKyAqLworI2RlZmluZSBNYXhUSURzUGVyQlRyZWVQYWdlIFwKKwkoaW50
KSAoKEJMQ0tTWiAtIFNpemVPZlBhZ2VIZWFkZXJEYXRhIC0gc2l6ZW9mKEJUUGFnZU9wYXF1ZURh
dGEpKSAvIFwKKwkJICAgc2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSkpCisKIC8qCiAgKiBUaGUgbGVh
Zi1wYWdlIGZpbGxmYWN0b3IgZGVmYXVsdHMgdG8gOTAlIGJ1dCBpcyB1c2VyLWFkanVzdGFibGUu
CiAgKiBGb3IgcGFnZXMgYWJvdmUgdGhlIGxlYWYgbGV2ZWwsIHdlIHVzZSBhIGZpeGVkIDcwJSBm
aWxsZmFjdG9yLgpAQCAtMjMwLDE2ICsyNTYsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRNZXRhUGFn
ZURhdGEKICAqIHR1cGxlcyAobm9uLXBpdm90IHR1cGxlcykuICBfYnRfY2hlY2tfbmF0dHMoKSBl
bmZvcmNlcyB0aGUgcnVsZXMKICAqIGRlc2NyaWJlZCBoZXJlLgogICoKLSAqIE5vbi1waXZvdCB0
dXBsZSBmb3JtYXQ6CisgKiBOb24tcGl2b3QgdHVwbGUgZm9ybWF0IChwbGFpbi9ub24tcG9zdGlu
ZyB2YXJpYW50KToKICAqCiAgKiAgdF90aWQgfCB0X2luZm8gfCBrZXkgdmFsdWVzIHwgSU5DTFVE
RSBjb2x1bW5zLCBpZiBhbnkKICAqCiAgKiB0X3RpZCBwb2ludHMgdG8gdGhlIGhlYXAgVElELCB3
aGljaCBpcyBhIHRpZWJyZWFrZXIga2V5IGNvbHVtbiBhcyBvZgotICogQlRSRUVfVkVSU0lPTiA0
LiAgQ3VycmVudGx5LCB0aGUgSU5ERVhfQUxUX1RJRF9NQVNLIHN0YXR1cyBiaXQgaXMgbmV2ZXIK
LSAqIHNldCBmb3Igbm9uLXBpdm90IHR1cGxlcy4KKyAqIEJUUkVFX1ZFUlNJT04gNC4KICAqCi0g
KiBBbGwgb3RoZXIgdHlwZXMgb2YgaW5kZXggdHVwbGVzICgicGl2b3QiIHR1cGxlcykgb25seSBo
YXZlIGtleSBjb2x1bW5zLAotICogc2luY2UgcGl2b3QgdHVwbGVzIG9ubHkgZXhpc3QgdG8gcmVw
cmVzZW50IGhvdyB0aGUga2V5IHNwYWNlIGlzCisgKiBOb24tcGl2b3QgdHVwbGVzIGNvbXBsZW1l
bnQgcGl2b3QgdHVwbGVzLCB3aGljaCBvbmx5IGhhdmUga2V5IGNvbHVtbnMuCisgKiBUaGUgc29s
ZSBwdXJwb3NlIG9mIHBpdm90IHR1cGxlcyBpcyB0byByZXByZXNlbnQgaG93IHRoZSBrZXkgc3Bh
Y2UgaXMKICAqIHNlcGFyYXRlZC4gIEluIGdlbmVyYWwsIGFueSBCLVRyZWUgaW5kZXggdGhhdCBo
YXMgbW9yZSB0aGFuIG9uZSBsZXZlbAogICogKGkuZS4gYW55IGluZGV4IHRoYXQgZG9lcyBub3Qg
anVzdCBjb25zaXN0IG9mIGEgbWV0YXBhZ2UgYW5kIGEgc2luZ2xlCiAgKiBsZWFmIHJvb3QgcGFn
ZSkgbXVzdCBoYXZlIHNvbWUgbnVtYmVyIG9mIHBpdm90IHR1cGxlcywgc2luY2UgcGl2b3QKQEAg
LTI2NCw3ICsyODksOCBAQCB0eXBlZGVmIHN0cnVjdCBCVE1ldGFQYWdlRGF0YQogICogSU5ERVhf
QUxUX1RJRF9NQVNLIGJpdCBpcyBzZXQsIHdoaWNoIGRvZXNuJ3QgY291bnQgdGhlIHRyYWlsaW5n
IGhlYXAKICAqIFRJRCBjb2x1bW4gc29tZXRpbWVzIHN0b3JlZCBpbiBwaXZvdCB0dXBsZXMgLS0g
dGhhdCdzIHJlcHJlc2VudGVkIGJ5CiAgKiB0aGUgcHJlc2VuY2Ugb2YgQlRfUElWT1RfSEVBUF9U
SURfQVRUUi4gIFRoZSBJTkRFWF9BTFRfVElEX01BU0sgYml0IGluCi0gKiB0X2luZm8gaXMgYWx3
YXlzIHNldCBvbiBCVFJFRV9WRVJTSU9OIDQgcGl2b3QgdHVwbGVzLgorICogdF9pbmZvIGlzIGFs
d2F5cyBzZXQgb24gQlRSRUVfVkVSU0lPTiA0IHBpdm90IHR1cGxlcywgc2luY2UKKyAqIEJUcmVl
VHVwbGVJc1Bpdm90KCkgbXVzdCB3b3JrIHJlbGlhYmx5IG9uIGhlYXBrZXlzcGFjZSB2ZXJzaW9u
cy4KICAqCiAgKiBJbiB2ZXJzaW9uIDMgaW5kZXhlcywgdGhlIElOREVYX0FMVF9USURfTUFTSyBm
bGFnIG1pZ2h0IG5vdCBiZSBzZXQgaW4KICAqIHBpdm90IHR1cGxlcy4gIEluIHRoYXQgY2FzZSwg
dGhlIG51bWJlciBvZiBrZXkgY29sdW1ucyBpcyBpbXBsaWNpdGx5CkBAIC0yNzksOTAgKzMwNSwy
NTYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRNZXRhUGFnZURhdGEKICAqIFRoZSAxMiBsZWFzdCBzaWdu
aWZpY2FudCBvZmZzZXQgYml0cyBmcm9tIHRfdGlkIGFyZSB1c2VkIHRvIHJlcHJlc2VudAogICog
dGhlIG51bWJlciBvZiBjb2x1bW5zIGluIElOREVYX0FMVF9USURfTUFTSyB0dXBsZXMsIGxlYXZp
bmcgNCBzdGF0dXMKICAqIGJpdHMgKEJUX1JFU0VSVkVEX09GRlNFVF9NQVNLIGJpdHMpLCAzIG9m
IHdoaWNoIHRoYXQgYXJlIHJlc2VydmVkIGZvcgotICogZnV0dXJlIHVzZS4gIEJUX05fS0VZU19P
RkZTRVRfTUFTSyBzaG91bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIGFueQotICogbnVtYmVy
IG9mIGNvbHVtbnMvYXR0cmlidXRlcyA8PSBJTkRFWF9NQVhfS0VZUy4KKyAqIGZ1dHVyZSB1c2Uu
ICBCVF9PRkZTRVRfTUFTSyBzaG91bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIGFueSBudW1i
ZXIKKyAqIG9mIGNvbHVtbnMvYXR0cmlidXRlcyA8PSBJTkRFWF9NQVhfS0VZUy4KKyAqCisgKiBT
b21ldGltZXMgbm9uLXBpdm90IHR1cGxlcyBhbHNvIHVzZSBhIHJlcHJlc2VudGF0aW9uIHRoYXQg
cmVwdXJwb3NlcworICogdF90aWQgdG8gc3RvcmUgbWV0YWRhdGEgcmF0aGVyIHRoYW4gYSBUSUQu
ICBQb3N0Z3JlU1FMIHYxMyBpbnRyb2R1Y2VkIGEKKyAqIG5ldyBub24tcGl2b3QgdHVwbGUgZm9y
bWF0IHRvIHN1cHBvcnQgZGVkdXBsaWNhdGlvbjogcG9zdGluZyBsaXN0CisgKiB0dXBsZXMuICBE
ZWR1cGxpY2F0aW9uIG1lcmdlcyB0b2dldGhlciBtdWx0aXBsZSBlcXVhbCBub24tcGl2b3QgdHVw
bGVzCisgKiBpbnRvIGEgbG9naWNhbGx5IGVxdWl2YWxlbnQsIHNwYWNlIGVmZmljaWVudCByZXBy
ZXNlbnRhdGlvbi4gIEEgcG9zdGluZworICogbGlzdCBpcyBhbiBhcnJheSBvZiBJdGVtUG9pbnRl
ckRhdGEgZWxlbWVudHMuICBOb24tcGl2b3QgdHVwbGVzIGFyZQorICogbWVyZ2VkIHRvZ2V0aGVy
IHRvIGZvcm0gcG9zdGluZyBsaXN0IHR1cGxlcyBsYXppbHksIGF0IHRoZSBwb2ludCB3aGVyZQor
ICogd2UnZCBvdGhlcndpc2UgaGF2ZSB0byBzcGxpdCBhIGxlYWYgcGFnZS4KKyAqCisgKiBQb3N0
aW5nIHR1cGxlIGZvcm1hdCAoYWx0ZXJuYXRpdmUgbm9uLXBpdm90IHR1cGxlIHJlcHJlc2VudGF0
aW9uKToKKyAqCisgKiAgdF90aWQgfCB0X2luZm8gfCBrZXkgdmFsdWVzIHwgcG9zdGluZyBsaXN0
IChUSUQgYXJyYXkpCisgKgorICogUG9zdGluZyBsaXN0IHR1cGxlcyBhcmUgcmVjb2duaXplZCBh
cyBzdWNoIGJ5IGhhdmluZyB0aGUKKyAqIElOREVYX0FMVF9USURfTUFTSyBzdGF0dXMgYml0IHNl
dCBpbiB0X2luZm8gYW5kIHRoZSBCVF9JU19QT1NUSU5HIHN0YXR1cworICogYml0IHNldCBpbiB0
X3RpZC4gIFRoZXNlIGZsYWdzIHJlZGVmaW5lIHRoZSBjb250ZW50IG9mIHRoZSBwb3N0aW5nCisg
KiB0dXBsZSdzIHRfdGlkIHRvIHN0b3JlIGFuIG9mZnNldCB0byB0aGUgcG9zdGluZyBsaXN0LCBh
cyB3ZWxsIGFzIHRoZQorICogdG90YWwgbnVtYmVyIG9mIHBvc3RpbmcgbGlzdCBhcnJheSBlbGVt
ZW50cy4KKyAqCisgKiBUaGUgMTIgbGVhc3Qgc2lnbmlmaWNhbnQgb2Zmc2V0IGJpdHMgZnJvbSB0
X3RpZCBhcmUgdXNlZCB0byByZXByZXNlbnQKKyAqIHRoZSBudW1iZXIgb2YgcG9zdGluZyBpdGVt
cyBwcmVzZW50IGluIHRoZSB0dXBsZSwgbGVhdmluZyA0IHN0YXR1cworICogYml0cyAoQlRfUkVT
RVJWRURfT0ZGU0VUX01BU0sgYml0cyksIDMgb2Ygd2hpY2ggdGhhdCBhcmUgcmVzZXJ2ZWQgZm9y
CisgKiBmdXR1cmUgdXNlLiAgTGlrZSBhbnkgbm9uLXBpdm90IHR1cGxlLCB0aGUgbnVtYmVyIG9m
IGNvbHVtbnMgc3RvcmVkIGlzCisgKiBhbHdheXMgaW1wbGljaXRseSB0aGUgdG90YWwgbnVtYmVy
IGluIHRoZSBpbmRleCAoaW4gcHJhY3RpY2UgdGhlcmUgY2FuCisgKiBuZXZlciBiZSBub24ta2V5
IGNvbHVtbnMgc3RvcmVkLCBzaW5jZSBkZWR1cGxpY2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAq
IHdpdGggSU5DTFVERSBpbmRleGVzKS4gIEJUX09GRlNFVF9NQVNLIHNob3VsZCBiZSBsYXJnZSBl
bm91Z2ggdG8gc3RvcmUKKyAqIGFueSBudW1iZXIgb2YgcG9zdGluZyBsaXN0IFRJRHMgdGhhdCBt
aWdodCBiZSBwcmVzZW50IGluIGEgdHVwbGUgKHNpbmNlCisgKiB0dXBsZSBzaXplIGlzIHN1Ympl
Y3QgdG8gdGhlIElOREVYX1NJWkVfTUFTSyBsaW1pdCkuCiAgKgogICogTm90ZSB3ZWxsOiBUaGUg
bWFjcm9zIHRoYXQgZGVhbCB3aXRoIHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcyBpbiB0dXBsZXMK
LSAqIGFzc3VtZSB0aGF0IGEgdHVwbGUgd2l0aCBJTkRFWF9BTFRfVElEX01BU0sgc2V0IG11c3Qg
YmUgYSBwaXZvdCB0dXBsZSwKLSAqIGFuZCB0aGF0IGEgdHVwbGUgd2l0aG91dCBJTkRFWF9BTFRf
VElEX01BU0sgc2V0IG11c3QgYmUgYSBub24tcGl2b3QKLSAqIHR1cGxlIChvciBtdXN0IGhhdmUg
dGhlIHNhbWUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgYXMgdGhlIGluZGV4IGhhcwotICogZ2VuZXJh
bGx5IGluIHRoZSBjYXNlIG9mICFoZWFwa2V5c3BhY2UgaW5kZXhlcykuICBUaGV5IHdpbGwgbmVl
ZCB0byBiZQotICogdXBkYXRlZCBpZiBub24tcGl2b3QgdHVwbGVzIGV2ZXIgZ2V0IHRhdWdodCB0
byB1c2UgSU5ERVhfQUxUX1RJRF9NQVNLCi0gKiBmb3Igc29tZXRoaW5nIGVsc2UuCisgKiBhc3N1
bWUgdGhhdCBhIHR1cGxlIHdpdGggSU5ERVhfQUxUX1RJRF9NQVNLIHNldCBtdXN0IGJlIGEgcGl2
b3QgdHVwbGUgb3IKKyAqIG5vbi1waXZvdCBwb3N0aW5nIHR1cGxlLCBhbmQgdGhhdCBhIHR1cGxl
IHdpdGhvdXQgSU5ERVhfQUxUX1RJRF9NQVNLIHNldAorICogbXVzdCBiZSBhIG5vbi1waXZvdCB0
dXBsZSAob3IgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBhdHRyaWJ1dGVzIGFzCisgKiB0
aGUgaW5kZXggaGFzIGdlbmVyYWxseSBpbiB0aGUgY2FzZSBvZiAhaGVhcGtleXNwYWNlIGluZGV4
ZXMpLgogICovCiAjZGVmaW5lIElOREVYX0FMVF9USURfTUFTSwkJCUlOREVYX0FNX1JFU0VSVkVE
X0JJVAogCiAvKiBJdGVtIHBvaW50ZXIgb2Zmc2V0IGJpdHMgKi8KICNkZWZpbmUgQlRfUkVTRVJW
RURfT0ZGU0VUX01BU0sJCTB4RjAwMAotI2RlZmluZSBCVF9OX0tFWVNfT0ZGU0VUX01BU0sJCTB4
MEZGRgorI2RlZmluZSBCVF9PRkZTRVRfTUFTSwkJCQkweDBGRkYKICNkZWZpbmUgQlRfUElWT1Rf
SEVBUF9USURfQVRUUgkJMHgxMDAwCi0KLS8qIEdldC9zZXQgZG93bmxpbmsgYmxvY2sgbnVtYmVy
IGluIHBpdm90IHR1cGxlICovCi0jZGVmaW5lIEJUcmVlVHVwbGVHZXREb3duTGluayhpdHVwKSBc
Ci0JSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlck5vQ2hlY2soJigoaXR1cCktPnRfdGlkKSkKLSNk
ZWZpbmUgQlRyZWVUdXBsZVNldERvd25MaW5rKGl0dXAsIGJsa25vKSBcCi0JSXRlbVBvaW50ZXJT
ZXRCbG9ja051bWJlcigmKChpdHVwKS0+dF90aWQpLCAoYmxrbm8pKQorI2RlZmluZSBCVF9JU19Q
T1NUSU5HCQkJCTB4MjAwMAogCiAvKgotICogR2V0L3NldCBsZWFmIHBhZ2UgaGlnaGtleSdzIGxp
bmsuIER1cmluZyB0aGUgc2Vjb25kIHBoYXNlIG9mIGRlbGV0aW9uLCB0aGUKLSAqIHRhcmdldCBs
ZWFmIHBhZ2UncyBoaWdoIGtleSBtYXkgcG9pbnQgdG8gYW4gYW5jZXN0b3IgcGFnZSAoYXQgYWxs
IG90aGVyCi0gKiB0aW1lcywgdGhlIGxlYWYgbGV2ZWwgaGlnaCBrZXkncyBsaW5rIGlzIG5vdCB1
c2VkKS4gIFNlZSB0aGUgbmJ0cmVlIFJFQURNRQotICogZm9yIGZ1bGwgZGV0YWlscy4KKyAqIE5v
dGU6IEJUcmVlVHVwbGVJc1Bpdm90KCkgY2FuIGhhdmUgZmFsc2UgbmVnYXRpdmVzIChidXQgbm90
IGZhbHNlCisgKiBwb3NpdGl2ZXMpIHdoZW4gdXNlZCB3aXRoICFoZWFwa2V5c3BhY2UgaW5kZXhl
cwogICovCi0jZGVmaW5lIEJUcmVlVHVwbGVHZXRUb3BQYXJlbnQoaXR1cCkgXAotCUl0ZW1Qb2lu
dGVyR2V0QmxvY2tOdW1iZXJOb0NoZWNrKCYoKGl0dXApLT50X3RpZCkpCi0jZGVmaW5lIEJUcmVl
VHVwbGVTZXRUb3BQYXJlbnQoaXR1cCwgYmxrbm8pCVwKLQlkbyB7IFwKLQkJSXRlbVBvaW50ZXJT
ZXRCbG9ja051bWJlcigmKChpdHVwKS0+dF90aWQpLCAoYmxrbm8pKTsgXAotCQlCVHJlZVR1cGxl
U2V0TkF0dHMoKGl0dXApLCAwKTsgXAotCX0gd2hpbGUoMCkKK3N0YXRpYyBpbmxpbmUgYm9vbAor
QlRyZWVUdXBsZUlzUGl2b3QoSW5kZXhUdXBsZSBpdHVwKQoreworCWlmICgoaXR1cC0+dF9pbmZv
ICYgSU5ERVhfQUxUX1RJRF9NQVNLKSA9PSAwKQorCQlyZXR1cm4gZmFsc2U7CisJLyogYWJzZW5j
ZSBvZiBCVF9JU19QT1NUSU5HIGluIG9mZnNldCBudW1iZXIgaW5kaWNhdGVzIHBpdm90IHR1cGxl
ICovCisJaWYgKChJdGVtUG9pbnRlckdldE9mZnNldE51bWJlck5vQ2hlY2soJml0dXAtPnRfdGlk
KSAmIEJUX0lTX1BPU1RJTkcpICE9IDApCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVl
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK0JUcmVlVHVwbGVJc1Bvc3RpbmcoSW5kZXhUdXBs
ZSBpdHVwKQoreworCWlmICgoaXR1cC0+dF9pbmZvICYgSU5ERVhfQUxUX1RJRF9NQVNLKSA9PSAw
KQorCQlyZXR1cm4gZmFsc2U7CisJLyogcHJlc2VuY2Ugb2YgQlRfSVNfUE9TVElORyBpbiBvZmZz
ZXQgbnVtYmVyIGluZGljYXRlcyBwb3N0aW5nIHR1cGxlICovCisJaWYgKChJdGVtUG9pbnRlckdl
dE9mZnNldE51bWJlck5vQ2hlY2soJml0dXAtPnRfdGlkKSAmIEJUX0lTX1BPU1RJTkcpID09IDAp
CisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQKK0JUcmVlVHVwbGVTZXRQb3N0aW5nKEluZGV4VHVwbGUgaXR1cCwgaW50IG5odGlkcywgaW50
IHBvc3RpbmdvZmZzZXQpCit7CisJQXNzZXJ0KG5odGlkcyA+IDEgJiYgKG5odGlkcyAmIEJUX09G
RlNFVF9NQVNLKSA9PSBuaHRpZHMpOworCUFzc2VydChwb3N0aW5nb2Zmc2V0ID09IE1BWEFMSUdO
KHBvc3RpbmdvZmZzZXQpKTsKKwlBc3NlcnQocG9zdGluZ29mZnNldCA8IElOREVYX1NJWkVfTUFT
Syk7CisKKwlpdHVwLT50X2luZm8gfD0gSU5ERVhfQUxUX1RJRF9NQVNLOworCUl0ZW1Qb2ludGVy
U2V0T2Zmc2V0TnVtYmVyKCZpdHVwLT50X3RpZCwgKG5odGlkcyB8IEJUX0lTX1BPU1RJTkcpKTsK
KwlJdGVtUG9pbnRlclNldEJsb2NrTnVtYmVyKCZpdHVwLT50X3RpZCwgcG9zdGluZ29mZnNldCk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDE2CitCVHJlZVR1cGxlR2V0TlBvc3RpbmcoSW5kZXhU
dXBsZSBwb3N0aW5nKQoreworCU9mZnNldE51bWJlciBleGlzdGluZzsKKworCUFzc2VydChCVHJl
ZVR1cGxlSXNQb3N0aW5nKHBvc3RpbmcpKTsKKworCWV4aXN0aW5nID0gSXRlbVBvaW50ZXJHZXRP
ZmZzZXROdW1iZXJOb0NoZWNrKCZwb3N0aW5nLT50X3RpZCk7CisJcmV0dXJuIChleGlzdGluZyAm
IEJUX09GRlNFVF9NQVNLKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzIKK0JUcmVlVHVwbGVH
ZXRQb3N0aW5nT2Zmc2V0KEluZGV4VHVwbGUgcG9zdGluZykKK3sKKwlBc3NlcnQoQlRyZWVUdXBs
ZUlzUG9zdGluZyhwb3N0aW5nKSk7CisKKwlyZXR1cm4gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl
ck5vQ2hlY2soJnBvc3RpbmctPnRfdGlkKTsKK30KKworc3RhdGljIGlubGluZSBJdGVtUG9pbnRl
cgorQlRyZWVUdXBsZUdldFBvc3RpbmcoSW5kZXhUdXBsZSBwb3N0aW5nKQoreworCXJldHVybiAo
SXRlbVBvaW50ZXIpICgoY2hhciAqKSBwb3N0aW5nICsKKwkJCQkJCSAgQlRyZWVUdXBsZUdldFBv
c3RpbmdPZmZzZXQocG9zdGluZykpOworfQorCitzdGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyCitC
VHJlZVR1cGxlR2V0UG9zdGluZ04oSW5kZXhUdXBsZSBwb3N0aW5nLCBpbnQgbikKK3sKKwlyZXR1
cm4gQlRyZWVUdXBsZUdldFBvc3RpbmcocG9zdGluZykgKyBuOworfQogCiAvKgotICogR2V0L3Nl
dCBudW1iZXIgb2YgYXR0cmlidXRlcyB3aXRoaW4gQi10cmVlIGluZGV4IHR1cGxlLgorICogR2V0
L3NldCBkb3dubGluayBibG9jayBudW1iZXIgaW4gcGl2b3QgdHVwbGUuCisgKgorICogTm90ZTog
Q2Fubm90IGFzc2VydCB0aGF0IHR1cGxlIGlzIGEgcGl2b3QgdHVwbGUuICBJZiB3ZSBkaWQgc28g
dGhlbgorICogIWhlYXBrZXlzcGFjZSBpbmRleGVzIHdvdWxkIGV4aGliaXQgZmFsc2UgcG9zaXRp
dmUgYXNzZXJ0aW9uIGZhaWx1cmVzLgorICovCitzdGF0aWMgaW5saW5lIEJsb2NrTnVtYmVyCitC
VHJlZVR1cGxlR2V0RG93bkxpbmsoSW5kZXhUdXBsZSBwaXZvdCkKK3sKKwlyZXR1cm4gSXRlbVBv
aW50ZXJHZXRCbG9ja051bWJlck5vQ2hlY2soJnBpdm90LT50X3RpZCk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZAorQlRyZWVUdXBsZVNldERvd25MaW5rKEluZGV4VHVwbGUgcGl2b3QsIEJsb2Nr
TnVtYmVyIGJsa25vKQoreworCUl0ZW1Qb2ludGVyU2V0QmxvY2tOdW1iZXIoJnBpdm90LT50X3Rp
ZCwgYmxrbm8pOworfQorCisvKgorICogR2V0IG51bWJlciBvZiBhdHRyaWJ1dGVzIHdpdGhpbiB0
dXBsZS4KICAqCiAgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBpbmNsdWRlIGFuIGltcGxpY2l0
IHRpZWJyZWFrZXIgaGVhcCBUSUQKICAqIGF0dHJpYnV0ZSwgaWYgYW55LiAgTm90ZSBhbHNvIHRo
YXQgdGhlIG51bWJlciBvZiBrZXkgYXR0cmlidXRlcyBtdXN0IGJlCiAgKiBleHBsaWNpdGx5IHJl
cHJlc2VudGVkIGluIGFsbCBoZWFwa2V5c3BhY2UgcGl2b3QgdHVwbGVzLgorICoKKyAqIE5vdGU6
IFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1hY3JvIHJhdGhlciB0aGFuIGFuIGlubGluZSBmdW5jdGlv
biB0bworICogYXZvaWQgaW5jbHVkaW5nIHJlbC5oLgogICovCiAjZGVmaW5lIEJUcmVlVHVwbGVH
ZXROQXR0cyhpdHVwLCByZWwpCVwKIAkoIFwKLQkJKGl0dXApLT50X2luZm8gJiBJTkRFWF9BTFRf
VElEX01BU0sgPyBcCisJCShCVHJlZVR1cGxlSXNQaXZvdChpdHVwKSkgPyBcCiAJCSggXAotCQkJ
SXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXJOb0NoZWNrKCYoaXR1cCktPnRfdGlkKSAmIEJUX05f
S0VZU19PRkZTRVRfTUFTSyBcCisJCQlJdGVtUG9pbnRlckdldE9mZnNldE51bWJlck5vQ2hlY2so
JihpdHVwKS0+dF90aWQpICYgQlRfT0ZGU0VUX01BU0sgXAogCQkpIFwKIAkJOiBcCiAJCUluZGV4
UmVsYXRpb25HZXROdW1iZXJPZkF0dHJpYnV0ZXMocmVsKSBcCiAJKQotI2RlZmluZSBCVHJlZVR1
cGxlU2V0TkF0dHMoaXR1cCwgbikgXAotCWRvIHsgXAotCQkoaXR1cCktPnRfaW5mbyB8PSBJTkRF
WF9BTFRfVElEX01BU0s7IFwKLQkJSXRlbVBvaW50ZXJTZXRPZmZzZXROdW1iZXIoJihpdHVwKS0+
dF90aWQsIChuKSAmIEJUX05fS0VZU19PRkZTRVRfTUFTSyk7IFwKLQl9IHdoaWxlKDApCiAKIC8q
Ci0gKiBHZXQgdGllYnJlYWtlciBoZWFwIFRJRCBhdHRyaWJ1dGUsIGlmIGFueS4gIE1hY3JvIHdv
cmtzIHdpdGggYm90aCBwaXZvdAotICogYW5kIG5vbi1waXZvdCB0dXBsZXMsIGRlc3BpdGUgZGlm
ZmVyZW5jZXMgaW4gaG93IGhlYXAgVElEIGlzIHJlcHJlc2VudGVkLgorICogU2V0IG51bWJlciBv
ZiBhdHRyaWJ1dGVzIGluIHR1cGxlLCBtYWtpbmcgaXQgaW50byBhIHBpdm90IHR1cGxlCiAgKi8K
LSNkZWZpbmUgQlRyZWVUdXBsZUdldEhlYXBUSUQoaXR1cCkgXAotCSggXAotCSAgKGl0dXApLT50
X2luZm8gJiBJTkRFWF9BTFRfVElEX01BU0sgJiYgXAotCSAgKEl0ZW1Qb2ludGVyR2V0T2Zmc2V0
TnVtYmVyTm9DaGVjaygmKGl0dXApLT50X3RpZCkgJiBCVF9QSVZPVF9IRUFQX1RJRF9BVFRSKSAh
PSAwID8gXAotCSAgKCBcCi0JCShJdGVtUG9pbnRlcikgKCgoY2hhciAqKSAoaXR1cCkgKyBJbmRl
eFR1cGxlU2l6ZShpdHVwKSkgLSBcCi0JCQkJCSAgIHNpemVvZihJdGVtUG9pbnRlckRhdGEpKSBc
Ci0JICApIFwKLQkgIDogKGl0dXApLT50X2luZm8gJiBJTkRFWF9BTFRfVElEX01BU0sgPyBOVUxM
IDogKEl0ZW1Qb2ludGVyKSAmKChpdHVwKS0+dF90aWQpIFwKLQkpCitzdGF0aWMgaW5saW5lIHZv
aWQKK0JUcmVlVHVwbGVTZXROQXR0cyhJbmRleFR1cGxlIGl0dXAsIGludCBuYXR0cykKK3sKKwlB
c3NlcnQobmF0dHMgPD0gSU5ERVhfTUFYX0tFWVMpOworCisJaXR1cC0+dF9pbmZvIHw9IElOREVY
X0FMVF9USURfTUFTSzsKKwkvKiBCVF9JU19QT1NUSU5HIGJpdCBtYXkgYmUgdW5zZXQgLS0gdHVw
bGUgYWx3YXlzIGJlY29tZXMgYSBwaXZvdCB0dXBsZSAqLworCUl0ZW1Qb2ludGVyU2V0T2Zmc2V0
TnVtYmVyKCZpdHVwLT50X3RpZCwgbmF0dHMpOworCUFzc2VydChCVHJlZVR1cGxlSXNQaXZvdChp
dHVwKSk7Cit9CisKIC8qCi0gKiBTZXQgdGhlIGhlYXAgVElEIGF0dHJpYnV0ZSBmb3IgYSB0dXBs
ZSB0aGF0IHVzZXMgdGhlIElOREVYX0FMVF9USURfTUFTSwotICogcmVwcmVzZW50YXRpb24gKGN1
cnJlbnRseSBsaW1pdGVkIHRvIHBpdm90IHR1cGxlcykKKyAqIFNldCB0aGUgYml0IGluZGljYXRp
bmcgaGVhcCBUSUQgYXR0cmlidXRlIHByZXNlbnQgaW4gcGl2b3QgdHVwbGUKICAqLwotI2RlZmlu
ZSBCVHJlZVR1cGxlU2V0QWx0SGVhcFRJRChpdHVwKSBcCi0JZG8geyBcCi0JCUFzc2VydCgoaXR1
cCktPnRfaW5mbyAmIElOREVYX0FMVF9USURfTUFTSyk7IFwKLQkJSXRlbVBvaW50ZXJTZXRPZmZz
ZXROdW1iZXIoJihpdHVwKS0+dF90aWQsIFwKLQkJCQkJCQkJICAgSXRlbVBvaW50ZXJHZXRPZmZz
ZXROdW1iZXJOb0NoZWNrKCYoaXR1cCktPnRfdGlkKSB8IEJUX1BJVk9UX0hFQVBfVElEX0FUVFIp
OyBcCi0JfSB3aGlsZSgwKQorc3RhdGljIGlubGluZSB2b2lkCitCVHJlZVR1cGxlU2V0QWx0SGVh
cFRJRChJbmRleFR1cGxlIHBpdm90KQoreworCU9mZnNldE51bWJlciBleGlzdGluZzsKKworCUFz
c2VydChCVHJlZVR1cGxlSXNQaXZvdChwaXZvdCkpOworCisJZXhpc3RpbmcgPSBJdGVtUG9pbnRl
ckdldE9mZnNldE51bWJlck5vQ2hlY2soJnBpdm90LT50X3RpZCk7CisJSXRlbVBvaW50ZXJTZXRP
ZmZzZXROdW1iZXIoJnBpdm90LT50X3RpZCwKKwkJCQkJCQkgICBleGlzdGluZyB8IEJUX1BJVk9U
X0hFQVBfVElEX0FUVFIpOworfQorCisvKgorICogR2V0L3NldCBsZWFmIHBhZ2UncyAidG9wIHBh
cmVudCIgbGluayBmcm9tIGl0cyBoaWdoIGtleS4gIFVzZWQgZHVyaW5nIHBhZ2UKKyAqIGRlbGV0
aW9uLgorICoKKyAqIE5vdGU6IENhbm5vdCBhc3NlcnQgdGhhdCB0dXBsZSBpcyBhIHBpdm90IHR1
cGxlLiAgSWYgd2UgZGlkIHNvIHRoZW4KKyAqICFoZWFwa2V5c3BhY2UgaW5kZXhlcyB3b3VsZCBl
eGhpYml0IGZhbHNlIHBvc2l0aXZlIGFzc2VydGlvbiBmYWlsdXJlcy4KKyAqLworc3RhdGljIGlu
bGluZSBCbG9ja051bWJlcgorQlRyZWVUdXBsZUdldFRvcFBhcmVudChJbmRleFR1cGxlIGxlYWZo
aWtleSkKK3sKKwlyZXR1cm4gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlck5vQ2hlY2soJmxlYWZo
aWtleS0+dF90aWQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0JUcmVlVHVwbGVTZXRUb3BQ
YXJlbnQoSW5kZXhUdXBsZSBsZWFmaGlrZXksIEJsb2NrTnVtYmVyIGJsa25vKQoreworCUl0ZW1Q
b2ludGVyU2V0QmxvY2tOdW1iZXIoJmxlYWZoaWtleS0+dF90aWQsIGJsa25vKTsKKwlCVHJlZVR1
cGxlU2V0TkF0dHMobGVhZmhpa2V5LCAwKTsKK30KKworLyoKKyAqIEdldCB0aWVicmVha2VyIGhl
YXAgVElEIGF0dHJpYnV0ZSwgaWYgYW55LgorICoKKyAqIFRoaXMgcmV0dXJucyB0aGUgZmlyc3Qv
bG93ZXN0IGhlYXAgVElEIGluIHRoZSBjYXNlIG9mIGEgcG9zdGluZyBsaXN0IHR1cGxlLgorICov
CitzdGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyCitCVHJlZVR1cGxlR2V0SGVhcFRJRChJbmRleFR1
cGxlIGl0dXApCit7CisJaWYgKEJUcmVlVHVwbGVJc1Bpdm90KGl0dXApKQorCXsKKwkJLyogUGl2
b3QgdHVwbGUgaGVhcCBUSUQgcmVwcmVzZW50YXRpb24/ICovCisJCWlmICgoSXRlbVBvaW50ZXJH
ZXRPZmZzZXROdW1iZXJOb0NoZWNrKCZpdHVwLT50X3RpZCkgJgorCQkJIEJUX1BJVk9UX0hFQVBf
VElEX0FUVFIpICE9IDApCisJCQlyZXR1cm4gKEl0ZW1Qb2ludGVyKSAoKGNoYXIgKikgaXR1cCAr
IEluZGV4VHVwbGVTaXplKGl0dXApIC0KKwkJCQkJCQkJICBzaXplb2YoSXRlbVBvaW50ZXJEYXRh
KSk7CisKKwkJLyogSGVhcCBUSUQgYXR0cmlidXRlIHdhcyB0cnVuY2F0ZWQgKi8KKwkJcmV0dXJu
IE5VTEw7CisJfQorCWVsc2UgaWYgKEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpCisJCXJldHVy
biBCVHJlZVR1cGxlR2V0UG9zdGluZyhpdHVwKTsKKworCXJldHVybiAmaXR1cC0+dF90aWQ7Cit9
CisKKy8qCisgKiBHZXQgbWF4aW11bSBoZWFwIFRJRCBhdHRyaWJ1dGUsIHdoaWNoIGNvdWxkIGJl
IHRoZSBvbmx5IFRJRCBpbiB0aGUgY2FzZSBvZgorICogYSBub24tcGl2b3QgdHVwbGUgdGhhdCBk
b2VzIG5vdCBoYXZlIGEgcG9zdGluZyBsaXN0IHR1cGxlLgorICoKKyAqIFdvcmtzIHdpdGggbm9u
LXBpdm90IHR1cGxlcyBvbmx5LgorICovCitzdGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyCitCVHJl
ZVR1cGxlR2V0TWF4SGVhcFRJRChJbmRleFR1cGxlIGl0dXApCit7CisJQXNzZXJ0KCFCVHJlZVR1
cGxlSXNQaXZvdChpdHVwKSk7CisKKwlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkKKwl7
CisJCXVpbnQxNgkJbnBvc3RpbmcgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7CisKKwkJ
cmV0dXJuIEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBucG9zdGluZyAtIDEpOworCX0KKwor
CXJldHVybiAmaXR1cC0+dF90aWQ7Cit9CiAKIC8qCiAgKglPcGVyYXRvciBzdHJhdGVneSBudW1i
ZXJzIGZvciBCLXRyZWUgaGF2ZSBiZWVuIG1vdmVkIHRvIGFjY2Vzcy9zdHJhdG51bS5oLApAQCAt
NDM0LDYgKzYyNiw5IEBAIHR5cGVkZWYgQlRTdGFja0RhdGEgKkJUU3RhY2s7CiAgKiBpbmRleGVz
IHdob3NlIHZlcnNpb24gaXMgPj0gdmVyc2lvbiA0LiAgSXQncyBjb252ZW5pZW50IHRvIGtlZXAg
dGhpcyBjbG9zZQogICogYnksIHJhdGhlciB0aGFuIGFjY2Vzc2luZyB0aGUgbWV0YXBhZ2UgcmVw
ZWF0ZWRseS4KICAqCisgKiBzYWZlZGVkdXAgaXMgc2V0IHRvIGluZGljYXRlIHRoYXQgaW5kZXgg
bWF5IHVzZSBkZWR1cGxpY2F0aW9uIHNhZmVseS4KKyAqIFRoaXMgaXMgYWxzbyBhIHByb3BlcnR5
IG9mIHRoZSBpbmRleCByZWxhdGlvbiByYXRoZXIgdGhhbiBhbiBpbmRleHNjYW4uCisgKgogICog
YW55bnVsbGtleXMgaW5kaWNhdGVzIGlmIGFueSBvZiB0aGUga2V5cyBoYWQgTlVMTCB2YWx1ZSB3
aGVuIHNjYW5rZXkgd2FzCiAgKiBidWlsdCBmcm9tIGluZGV4IHR1cGxlIChub3RlIHRoYXQgYWxy
ZWFkeS10cnVuY2F0ZWQgdHVwbGUga2V5IGF0dHJpYnV0ZXMKICAqIHNldCBOVUxMIGFzIGEgcGxh
Y2Vob2xkZXIga2V5IHZhbHVlLCB3aGljaCBhbHNvIGFmZmVjdHMgdmFsdWUgb2YKQEAgLTQ2OSw2
ICs2NjQsNyBAQCB0eXBlZGVmIEJUU3RhY2tEYXRhICpCVFN0YWNrOwogdHlwZWRlZiBzdHJ1Y3Qg
QlRTY2FuSW5zZXJ0RGF0YQogewogCWJvb2wJCWhlYXBrZXlzcGFjZTsKKwlib29sCQlzYWZlZGVk
dXA7CiAJYm9vbAkJYW55bnVsbGtleXM7CiAJYm9vbAkJbmV4dGtleTsKIAlib29sCQlwaXZvdHNl
YXJjaDsKQEAgLTUwNywxMCArNzAzLDU5IEBAIHR5cGVkZWYgc3RydWN0IEJUSW5zZXJ0U3RhdGVE
YXRhCiAJYm9vbAkJYm91bmRzX3ZhbGlkOwogCU9mZnNldE51bWJlciBsb3c7CiAJT2Zmc2V0TnVt
YmVyIHN0cmljdGhpZ2g7CisKKwkvKgorCSAqIGlmIF9idF9iaW5zcmNoX2luc2VydCBmb3VuZCB0
aGUgbG9jYXRpb24gaW5zaWRlIGV4aXN0aW5nIHBvc3RpbmcgbGlzdCwKKwkgKiBzYXZlIHRoZSBw
b3NpdGlvbiBpbnNpZGUgdGhlIGxpc3QuICAtMSBzZW50aW5lbCB2YWx1ZSBpbmRpY2F0ZXMgb3Zl
cmxhcAorCSAqIHdpdGggYW4gZXhpc3RpbmcgcG9zdGluZyBsaXN0IHR1cGxlIHRoYXQgaGFzIGl0
cyBMUF9ERUFEIGJpdCBzZXQuCisJICovCisJaW50CQkJcG9zdGluZ29mZjsKIH0gQlRJbnNlcnRT
dGF0ZURhdGE7CiAKIHR5cGVkZWYgQlRJbnNlcnRTdGF0ZURhdGEgKkJUSW5zZXJ0U3RhdGU7CiAK
Ky8qCisgKiBCVERlZHVwU3RhdGVEYXRhIGlzIGEgd29ya2luZyBhcmVhIHVzZWQgZHVyaW5nIGRl
ZHVwbGljYXRpb24uCisgKgorICogVGhlIHN0YXR1cyBpbmZvIGZpZWxkcyB0cmFjayB0aGUgc3Rh
dGUgb2YgYSB3aG9sZS1wYWdlIGRlZHVwbGljYXRpb24gcGFzcy4KKyAqIFN0YXRlIGFib3V0IHRo
ZSBjdXJyZW50IHBlbmRpbmcgcG9zdGluZyBsaXN0IGlzIGFsc28gdHJhY2tlZC4KKyAqCisgKiBB
IHBlbmRpbmcgcG9zdGluZyBsaXN0IGlzIGNvbXByaXNlZCBvZiBhIGNvbnRpZ3VvdXMgZ3JvdXAg
b2YgZXF1YWwgaXRlbXMKKyAqIGZyb20gdGhlIHBhZ2UsIHN0YXJ0aW5nIGZyb20gcGFnZSBvZmZz
ZXQgbnVtYmVyICdiYXNlb2ZmJy4gIFRoaXMgaXMgdGhlCisgKiBvZmZzZXQgbnVtYmVyIG9mIHRo
ZSAiYmFzZSIgdHVwbGUgZm9yIG5ldyBwb3N0aW5nIGxpc3QuICAnbml0ZW1zJyBpcyB0aGUKKyAq
IGN1cnJlbnQgdG90YWwgbnVtYmVyIG9mIGV4aXN0aW5nIGl0ZW1zIGZyb20gdGhlIHBhZ2UgdGhh
dCB3aWxsIGJlIG1lcmdlZCB0bworICogbWFrZSBhIG5ldyBwb3N0aW5nIGxpc3QgdHVwbGUsIGlu
Y2x1ZGluZyB0aGUgYmFzZSB0dXBsZSBpdGVtLiAgKEV4aXN0aW5nCisgKiBpdGVtcyBtYXkgdGhl
bXNlbHZlcyBiZSBwb3N0aW5nIGxpc3QgdHVwbGVzLCBvciByZWd1bGFyIG5vbi1waXZvdCB0dXBs
ZXMuKQorICoKKyAqIE5vdGUgdGhhdCB3aGVuIGRlZHVwbGljYXRpb24gbWVyZ2VzIHRvZ2V0aGVy
IGV4aXN0aW5nIHR1cGxlcywgdGhlIHBhZ2UgaXMKKyAqIG1vZGlmaWVkIGVhZ2VybHkuICBUaGlz
IG1ha2VzIHRyYWNraW5nIHRoZSBkZXRhaWxzIG9mIG1vcmUgdGhhbiBhIHNpbmdsZQorICogcGVu
ZGluZyBwb3N0aW5nIGxpc3QgYXQgYSB0aW1lIHVubmVjZXNzYXJ5LiAgVGhlIHRvdGFsIHNpemUg
b2YgdGhlIGV4aXN0aW5nCisgKiB0dXBsZXMgdG8gYmUgZnJlZWQgd2hlbiBwZW5kaW5nIHBvc3Rp
bmcgbGlzdCBpcyBwcm9jZXNzZWQgZ2V0cyB0cmFja2VkIGJ5CisgKiAncGh5c3R1cHNpemUnLiAg
VGhpcyBpbmZvcm1hdGlvbiBhbGxvd3MgZGVkdXBsaWNhdGlvbiB0byBjYWxjdWxhdGUgdGhlCisg
KiBzcGFjZSBzYXZpbmcgZm9yIGVhY2ggbmV3IHBvc3RpbmcgbGlzdCB0dXBsZSwgYW5kIGZvciB0
aGUgZW50aXJlIHBhc3Mgb3ZlcgorICogdGhlIHBhZ2UgYXMgYSB3aG9sZS4KKyAqLwordHlwZWRl
ZiBzdHJ1Y3QgQlREZWR1cFN0YXRlRGF0YQoreworCS8qIERlZHVwbGljYXRpb24gc3RhdHVzIGlu
Zm8gZm9yIGVudGlyZSBwYXNzIG92ZXIgcGFnZSAqLworCVNpemUJCW1heHBvc3RpbmdzaXplOyAv
KiBMaW1pdCBvbiBzaXplIG9mIGZpbmFsIHR1cGxlICovCisJYm9vbAkJY2hlY2tpbmd1bmlxdWU7
IC8qIFVzZSB1bmlxdWUgaW5kZXggc3RyYXRlZ3k/ICovCisJT2Zmc2V0TnVtYmVyIHNraXBwZWRi
YXNlOwkvKiBGaXJzdCBvZmZzZXQgc2tpcHBlZCBieSBjaGVja2luZ3VuaXF1ZSAqLworCisJLyog
TWV0YWRhdGEgYWJvdXQgYmFzZSB0dXBsZSBvZiBjdXJyZW50IHBlbmRpbmcgcG9zdGluZyBsaXN0
ICovCisJSW5kZXhUdXBsZQliYXNlOwkJCS8qIFVzZSB0byBmb3JtIG5ldyBwb3N0aW5nIGxpc3Qg
Ki8KKwlPZmZzZXROdW1iZXIgYmFzZW9mZjsJCS8qIHBhZ2Ugb2Zmc2V0IG9mIGJhc2UgKi8KKwlT
aXplCQliYXNldHVwc2l6ZTsJLyogYmFzZSBzaXplIHdpdGhvdXQgb3JpZ2luYWwgcG9zdGluZyBs
aXN0ICovCisKKwkvKiBPdGhlciBtZXRhZGF0YSBhYm91dCBwZW5kaW5nIHBvc3RpbmcgbGlzdCAq
LworCUl0ZW1Qb2ludGVyIGh0aWRzOwkJCS8qIEhlYXAgVElEcyBpbiBwZW5kaW5nIHBvc3Rpbmcg
bGlzdCAqLworCWludAkJCW5odGlkczsJCQkvKiBOdW1iZXIgb2YgaGVhcCBUSURzIGluIG5odGlk
cyBhcnJheSAqLworCWludAkJCW5pdGVtczsJCQkvKiBOdW1iZXIgb2YgZXhpc3RpbmcgdHVwbGVz
L2xpbmUgcG9pbnRlcnMgKi8KKwlTaXplCQlwaHlzdHVwc2l6ZTsJLyogSW5jbHVkZXMgbGluZSBw
b2ludGVyIG92ZXJoZWFkICovCit9IEJURGVkdXBTdGF0ZURhdGE7CisKK3R5cGVkZWYgQlREZWR1
cFN0YXRlRGF0YSAqQlREZWR1cFN0YXRlOworCiAvKgogICogQlRTY2FuT3BhcXVlRGF0YSBpcyB0
aGUgYnRyZWUtcHJpdmF0ZSBzdGF0ZSBuZWVkZWQgZm9yIGFuIGluZGV4c2Nhbi4KICAqIFRoaXMg
Y29uc2lzdHMgb2YgcHJlcHJvY2Vzc2VkIHNjYW4ga2V5cyAoc2VlIF9idF9wcmVwcm9jZXNzX2tl
eXMoKSBmb3IKQEAgLTUzNCw3ICs3NzksOSBAQCB0eXBlZGVmIEJUSW5zZXJ0U3RhdGVEYXRhICpC
VEluc2VydFN0YXRlOwogICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ug
c2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gKICAqIG1hdGNoZWQgaXRlbSwgb3Ro
ZXJ3aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFuZCBvZmZzZXQuICBUaGUgSW5kZXhUdXBsZXMgZ28K
ICAqIGludG8gYSBzZXBhcmF0ZSB3b3Jrc3BhY2UgYXJyYXk7IGVhY2ggQlRTY2FuUG9zSXRlbSBz
dG9yZXMgaXRzIHR1cGxlJ3MKLSAqIG9mZnNldCB3aXRoaW4gdGhhdCBhcnJheS4KKyAqIG9mZnNl
dCB3aXRoaW4gdGhhdCBhcnJheS4gIFBvc3RpbmcgbGlzdCB0dXBsZXMgc3RvcmUgYSAiYmFzZSIg
dHVwbGUgb25jZSwKKyAqIGFsbG93aW5nIHRoZSBzYW1lIGtleSB0byBiZSByZXR1cm5lZCBmb3Ig
ZWFjaCBUSUQgaW4gdGhlIHBvc3RpbmcgbGlzdAorICogdHVwbGUuCiAgKi8KIAogdHlwZWRlZiBz
dHJ1Y3QgQlRTY2FuUG9zSXRlbQkvKiB3aGF0IHdlIHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0Y2gg
Ki8KQEAgLTU3OCw3ICs4MjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBCVFNjYW5Qb3NEYXRhCiAJaW50
CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KIAlpbnQJCQlp
dGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10gKi8KIAotCUJUU2NhblBvc0l0
ZW0gaXRlbXNbTWF4SW5kZXhUdXBsZXNQZXJQYWdlXTsgLyogTVVTVCBCRSBMQVNUICovCisJQlRT
Y2FuUG9zSXRlbSBpdGVtc1tNYXhUSURzUGVyQlRyZWVQYWdlXTsJLyogTVVTVCBCRSBMQVNUICov
CiB9IEJUU2NhblBvc0RhdGE7CiAKIHR5cGVkZWYgQlRTY2FuUG9zRGF0YSAqQlRTY2FuUG9zOwpA
QCAtNjg2LDYgKzkzMyw3IEBAIHR5cGVkZWYgc3RydWN0IEJUT3B0aW9ucwogCWludAkJCWZpbGxm
YWN0b3I7CQkvKiBwYWdlIGZpbGwgZmFjdG9yIGluIHBlcmNlbnQgKDAuLjEwMCkgKi8KIAkvKiBm
cmFjdGlvbiBvZiBuZXdseSBpbnNlcnRlZCB0dXBsZXMgcHJpb3IgdG8gdHJpZ2dlciBpbmRleCBj
bGVhbnVwICovCiAJZmxvYXQ4CQl2YWN1dW1fY2xlYW51cF9pbmRleF9zY2FsZV9mYWN0b3I7CisJ
Ym9vbAkJZGVkdXBsaWNhdGVfaXRlbXM7CS8qIFVzZSBkZWR1cGxpY2F0aW9uIHdoZXJlIHNhZmU/
ICovCiB9IEJUT3B0aW9uczsKIAogI2RlZmluZSBCVEdldEZpbGxGYWN0b3IocmVsYXRpb24pIFwK
QEAgLTY5NCw4ICs5NDIsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRPcHRpb25zCiAJIChyZWxhdGlv
biktPnJkX29wdGlvbnMgPyBcCiAJICgoQlRPcHRpb25zICopIChyZWxhdGlvbiktPnJkX29wdGlv
bnMpLT5maWxsZmFjdG9yIDogXAogCSBCVFJFRV9ERUZBVUxUX0ZJTExGQUNUT1IpCisjZGVmaW5l
IEJUR2V0VXNlRGVkdXAocmVsYXRpb24pIFwKKwkoQXNzZXJ0TWFjcm8ocmVsYXRpb24tPnJkX3Jl
bC0+cmVsa2luZCA9PSBSRUxLSU5EX0lOREVYICYmIFwKKwkJCQkgcmVsYXRpb24tPnJkX3JlbC0+
cmVsYW0gPT0gQlRSRUVfQU1fT0lEKSwgXAorCSgocmVsYXRpb24pLT5yZF9vcHRpb25zID8gXAor
CSAoKEJUT3B0aW9ucyAqKSAocmVsYXRpb24pLT5yZF9vcHRpb25zKS0+ZGVkdXBsaWNhdGVfaXRl
bXMgOiBcCisJIEJUR2V0VXNlRGVkdXBHVUMocmVsYXRpb24pKSkKICNkZWZpbmUgQlRHZXRUYXJn
ZXRQYWdlRnJlZVNwYWNlKHJlbGF0aW9uKSBcCiAJKEJMQ0tTWiAqICgxMDAgLSBCVEdldEZpbGxG
YWN0b3IocmVsYXRpb24pKSAvIDEwMCkKKyNkZWZpbmUgQlRHZXRVc2VEZWR1cEdVQyhyZWxhdGlv
bikgXAorCShyZWxhdGlvbi0+cmRfaW5kZXgtPmluZGlzdW5pcXVlIHx8IGRlZHVwbGljYXRlX2J0
cmVlX2l0ZW1zKQogCiAvKgogICogQ29uc3RhbnQgZGVmaW5pdGlvbiBmb3IgcHJvZ3Jlc3MgcmVw
b3J0aW5nLiAgUGhhc2UgbnVtYmVycyBtdXN0IG1hdGNoCkBAIC03NDIsNiArOTk4LDIyIEBAIGV4
dGVybiB2b2lkIF9idF9wYXJhbGxlbF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tO
dW1iZXIgc2Nhbl9wYWdlKTsKIGV4dGVybiB2b2lkIF9idF9wYXJhbGxlbF9kb25lKEluZGV4U2Nh
bkRlc2Mgc2Nhbik7CiBleHRlcm4gdm9pZCBfYnRfcGFyYWxsZWxfYWR2YW5jZV9hcnJheV9rZXlz
KEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKKy8qCisgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMg
aW4gbmJ0ZGVkdXAuYworICovCitleHRlcm4gdm9pZCBfYnRfZGVkdXBfb25lX3BhZ2UoUmVsYXRp
b24gcmVsLCBCdWZmZXIgYnVmLCBSZWxhdGlvbiBoZWFwUmVsLAorCQkJCQkJCSAgIEluZGV4VHVw
bGUgbmV3aXRlbSwgU2l6ZSBuZXdpdGVtc3osCisJCQkJCQkJICAgYm9vbCBjaGVja2luZ3VuaXF1
ZSk7CitleHRlcm4gdm9pZCBfYnRfZGVkdXBfc3RhcnRfcGVuZGluZyhCVERlZHVwU3RhdGUgc3Rh
dGUsIEluZGV4VHVwbGUgYmFzZSwKKwkJCQkJCQkJCU9mZnNldE51bWJlciBiYXNlX29mZik7Citl
eHRlcm4gYm9vbCBfYnRfZGVkdXBfc2F2ZV9odGlkKEJURGVkdXBTdGF0ZSBzdGF0ZSwgSW5kZXhU
dXBsZSBpdHVwKTsKK2V4dGVybiBTaXplIF9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhCdWZmZXIg
YnVmLCBCVERlZHVwU3RhdGUgc3RhdGUsCisJCQkJCQkJCQkgYm9vbCBsb2dnZWQpOworZXh0ZXJu
IEluZGV4VHVwbGUgX2J0X2Zvcm1fcG9zdGluZyhJbmRleFR1cGxlIGJhc2UsIEl0ZW1Qb2ludGVy
IGh0aWRzLAorCQkJCQkJCQkgICBpbnQgbmh0aWRzKTsKK2V4dGVybiBJbmRleFR1cGxlIF9idF9z
d2FwX3Bvc3RpbmcoSW5kZXhUdXBsZSBuZXdpdGVtLCBJbmRleFR1cGxlIG9wb3N0aW5nLAorCQkJ
CQkJCQkgICBpbnQgcG9zdGluZ29mZik7CisKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlv
bnMgaW4gbmJ0aW5zZXJ0LmMKICAqLwpAQCAtNzYwLDE0ICsxMDMyLDE2IEBAIGV4dGVybiBPZmZz
ZXROdW1iZXIgX2J0X2ZpbmRzcGxpdGxvYyhSZWxhdGlvbiByZWwsIFBhZ2UgcGFnZSwKIC8qCiAg
KiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbmJ0cGFnZS5jCiAgKi8KLWV4dGVybiB2b2lk
IF9idF9pbml0bWV0YXBhZ2UoUGFnZSBwYWdlLCBCbG9ja051bWJlciByb290YmtudW0sIHVpbnQz
MiBsZXZlbCk7CitleHRlcm4gdm9pZCBfYnRfaW5pdG1ldGFwYWdlKFBhZ2UgcGFnZSwgQmxvY2tO
dW1iZXIgcm9vdGJrbnVtLCB1aW50MzIgbGV2ZWwsCisJCQkJCQkJIGJvb2wgc2FmZWRlZHVwKTsK
IGV4dGVybiB2b2lkIF9idF91cGRhdGVfbWV0YV9jbGVhbnVwX2luZm8oUmVsYXRpb24gcmVsLAog
CQkJCQkJCQkJCSBUcmFuc2FjdGlvbklkIG9sZGVzdEJ0cG9YYWN0LCBmbG9hdDggbnVtSGVhcFR1
cGxlcyk7CiBleHRlcm4gdm9pZCBfYnRfdXBncmFkZW1ldGFwYWdlKFBhZ2UgcGFnZSk7CiBleHRl
cm4gQnVmZmVyIF9idF9nZXRyb290KFJlbGF0aW9uIHJlbCwgaW50IGFjY2Vzcyk7CiBleHRlcm4g
QnVmZmVyIF9idF9nZXR0cnVlcm9vdChSZWxhdGlvbiByZWwpOwogZXh0ZXJuIGludAlfYnRfZ2V0
cm9vdGhlaWdodChSZWxhdGlvbiByZWwpOwotZXh0ZXJuIGJvb2wgX2J0X2hlYXBrZXlzcGFjZShS
ZWxhdGlvbiByZWwpOworZXh0ZXJuIHZvaWQgX2J0X21ldGF2ZXJzaW9uKFJlbGF0aW9uIHJlbCwg
Ym9vbCAqaGVhcGtleXNwYWNlLAorCQkJCQkJCWJvb2wgKnNhZmVkZWR1cCk7CiBleHRlcm4gdm9p
ZCBfYnRfY2hlY2twYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Zik7CiBleHRlcm4gQnVmZmVy
IF9idF9nZXRidWYoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubywgaW50IGFjY2Vzcyk7
CiBleHRlcm4gQnVmZmVyIF9idF9yZWxhbmRnZXRidWYoUmVsYXRpb24gcmVsLCBCdWZmZXIgb2J1
ZiwKQEAgLTc3Niw3ICsxMDUwLDkgQEAgZXh0ZXJuIHZvaWQgX2J0X3JlbGJ1ZihSZWxhdGlvbiBy
ZWwsIEJ1ZmZlciBidWYpOwogZXh0ZXJuIHZvaWQgX2J0X3BhZ2Vpbml0KFBhZ2UgcGFnZSwgU2l6
ZSBzaXplKTsKIGV4dGVybiBib29sIF9idF9wYWdlX3JlY3ljbGFibGUoUGFnZSBwYWdlKTsKIGV4
dGVybiB2b2lkIF9idF9kZWxpdGVtc192YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAot
CQkJCQkJCQlPZmZzZXROdW1iZXIgKmRlbGV0YWJsZSwgaW50IG5kZWxldGFibGUpOworCQkJCQkJ
CQlPZmZzZXROdW1iZXIgKmRlbGV0YWJsZSwgaW50IG5kZWxldGFibGUsCisJCQkJCQkJCU9mZnNl
dE51bWJlciAqdXBkYXRhYmxlLCBJbmRleFR1cGxlICp1cGRhdGVkLAorCQkJCQkJCQlpbnQgbnVw
ZGF0YWJsZSk7CiBleHRlcm4gdm9pZCBfYnRfZGVsaXRlbXNfZGVsZXRlKFJlbGF0aW9uIHJlbCwg
QnVmZmVyIGJ1ZiwKIAkJCQkJCQkJT2Zmc2V0TnVtYmVyICpkZWxldGFibGUsIGludCBuZGVsZXRh
YmxlLAogCQkJCQkJCQlSZWxhdGlvbiBoZWFwUmVsKTsKQEAgLTgyOSw2ICsxMTA1LDcgQEAgZXh0
ZXJuIGJvb2wgX2J0X2NoZWNrX25hdHRzKFJlbGF0aW9uIHJlbCwgYm9vbCBoZWFwa2V5c3BhY2Us
IFBhZ2UgcGFnZSwKIAkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtKTsKIGV4dGVybiB2b2lkIF9i
dF9jaGVja190aGlyZF9wYWdlKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcCwKIAkJCQkJCQkJ
IGJvb2wgbmVlZGhlYXB0aWRzcGFjZSwgUGFnZSBwYWdlLCBJbmRleFR1cGxlIG5ld3R1cCk7Citl
eHRlcm4gYm9vbCBfYnRfb3BjbGFzc2VzX3N1cHBvcnRfZGVkdXAoUmVsYXRpb24gaW5kZXgpOwog
CiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIG5idHZhbGlkYXRlLmMKZGlmZiAt
LWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnR4bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv
bmJ0eGxvZy5oCmluZGV4IDc3NmE5YmQ3MjMuLmJhZDhkYTRiMzAgMTAwNjQ0Ci0tLSBhL3NyYy9p
bmNsdWRlL2FjY2Vzcy9uYnR4bG9nLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHhsb2cu
aApAQCAtMjgsNyArMjgsOCBAQAogI2RlZmluZSBYTE9HX0JUUkVFX0lOU0VSVF9NRVRBCTB4MjAJ
Lyogc2FtZSwgcGx1cyB1cGRhdGUgbWV0YXBhZ2UgKi8KICNkZWZpbmUgWExPR19CVFJFRV9TUExJ
VF9MCQkweDMwCS8qIGFkZCBpbmRleCB0dXBsZSB3aXRoIHNwbGl0ICovCiAjZGVmaW5lIFhMT0df
QlRSRUVfU1BMSVRfUgkJMHg0MAkvKiBhcyBhYm92ZSwgbmV3IGl0ZW0gb24gcmlnaHQgKi8KLS8q
IDB4NTAgYW5kIDB4NjAgYXJlIHVudXNlZCAqLworI2RlZmluZSBYTE9HX0JUUkVFX0RFRFVQX1BB
R0UJMHg1MAkvKiBkZWR1cGxpY2F0ZSB0dXBsZXMgb24gbGVhZiBwYWdlICovCisjZGVmaW5lIFhM
T0dfQlRSRUVfSU5TRVJUX1BPU1QJMHg2MAkvKiBhZGQgaW5kZXggdHVwbGUgd2l0aCBwb3N0aW5n
IHNwbGl0ICovCiAjZGVmaW5lIFhMT0dfQlRSRUVfREVMRVRFCQkweDcwCS8qIGRlbGV0ZSBsZWFm
IGluZGV4IHR1cGxlcyBmb3IgYSBwYWdlICovCiAjZGVmaW5lIFhMT0dfQlRSRUVfVU5MSU5LX1BB
R0UJMHg4MAkvKiBkZWxldGUgYSBoYWxmLWRlYWQgcGFnZSAqLwogI2RlZmluZSBYTE9HX0JUUkVF
X1VOTElOS19QQUdFX01FVEEgMHg5MAkvKiBzYW1lLCBhbmQgdXBkYXRlIG1ldGFwYWdlICovCkBA
IC01MywyMSArNTQsMzQgQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfYnRyZWVfbWV0YWRhdGEKIAl1aW50
MzIJCWZhc3RsZXZlbDsKIAlUcmFuc2FjdGlvbklkIG9sZGVzdF9idHBvX3hhY3Q7CiAJZmxvYXQ4
CQlsYXN0X2NsZWFudXBfbnVtX2hlYXBfdHVwbGVzOworCWJvb2wJCXNhZmVkZWR1cDsKIH0geGxf
YnRyZWVfbWV0YWRhdGE7CiAKIC8qCiAgKiBUaGlzIGlzIHdoYXQgd2UgbmVlZCB0byBrbm93IGFi
b3V0IHNpbXBsZSAod2l0aG91dCBzcGxpdCkgaW5zZXJ0LgogICoKLSAqIFRoaXMgZGF0YSByZWNv
cmQgaXMgdXNlZCBmb3IgSU5TRVJUX0xFQUYsIElOU0VSVF9VUFBFUiwgSU5TRVJUX01FVEEuCi0g
KiBOb3RlIHRoYXQgSU5TRVJUX01FVEEgaW1wbGllcyBpdCdzIG5vdCBhIGxlYWYgcGFnZS4KKyAq
IFRoaXMgZGF0YSByZWNvcmQgaXMgdXNlZCBmb3IgSU5TRVJUX0xFQUYsIElOU0VSVF9VUFBFUiwg
SU5TRVJUX01FVEEsIGFuZAorICogSU5TRVJUX1BPU1QuICBOb3RlIHRoYXQgSU5TRVJUX01FVEEg
YW5kIElOU0VSVF9VUFBFUiBpbXBsaWVzIGl0J3Mgbm90IGEKKyAqIGxlYWYgcGFnZSwgd2hpbGUg
SU5TRVJUX1BPU1QgYW5kIElOU0VSVF9MRUFGIGltcGx5IHRoYXQgaXQgbXVzdCBiZSBhIGxlYWYK
KyAqIHBhZ2UuCiAgKgotICogQmFja3VwIEJsayAwOiBvcmlnaW5hbCBwYWdlIChkYXRhIGNvbnRh
aW5zIHRoZSBpbnNlcnRlZCB0dXBsZSkKKyAqIEJhY2t1cCBCbGsgMDogb3JpZ2luYWwgcGFnZQog
ICogQmFja3VwIEJsayAxOiBjaGlsZCdzIGxlZnQgc2libGluZywgaWYgSU5TRVJUX1VQUEVSIG9y
IElOU0VSVF9NRVRBCiAgKiBCYWNrdXAgQmxrIDI6IHhsX2J0cmVlX21ldGFkYXRhLCBpZiBJTlNF
UlRfTUVUQQorICoKKyAqIE5vdGU6IFRoZSBuZXcgdHVwbGUgaXMgYWN0dWFsbHkgdGhlICJvcmln
aW5hbCIgbmV3IGl0ZW0gaW4gdGhlIHBvc3RpbmcKKyAqIGxpc3Qgc3BsaXQgaW5zZXJ0IGNhc2Ug
KGkuZS4gdGhlIElOU0VSVF9QT1NUIGNhc2UpLiAgQSBzcGxpdCBvZmZzZXQgZm9yCisgKiB0aGUg
cG9zdGluZyBsaXN0IGlzIGxvZ2dlZCBiZWZvcmUgdGhlIG9yaWdpbmFsIG5ldyBpdGVtLiAgUmVj
b3ZlcnkgbmVlZHMKKyAqIGJvdGgsIHNpbmNlIGl0IG11c3QgZG8gYW4gaW4tcGxhY2UgdXBkYXRl
IG9mIHRoZSBleGlzdGluZyBwb3N0aW5nIGxpc3QKKyAqIHRoYXQgd2FzIHNwbGl0IGFzIGFuIGV4
dHJhIHN0ZXAuICBBbHNvLCByZWNvdmVyeSBnZW5lcmF0ZXMgYSAiZmluYWwiCisgKiBuZXdpdGVt
LiAgU2VlIF9idF9zd2FwX3Bvc3RpbmcoKSBmb3IgZGV0YWlscyBvbiBwb3N0aW5nIGxpc3Qgc3Bs
aXRzLgogICovCiB0eXBlZGVmIHN0cnVjdCB4bF9idHJlZV9pbnNlcnQKIHsKIAlPZmZzZXROdW1i
ZXIgb2ZmbnVtOworCisJLyogUE9TVElORyBTUExJVCBPRkZTRVQgRk9MTE9XUyAoSU5TRVJUX1BP
U1QgY2FzZSkgKi8KKwkvKiBORVcgVFVQTEUgQUxXQVlTIEZPTExPV1MgQVQgVEhFIEVORCAqLwog
fSB4bF9idHJlZV9pbnNlcnQ7CiAKICNkZWZpbmUgU2l6ZU9mQnRyZWVJbnNlcnQJKG9mZnNldG9m
KHhsX2J0cmVlX2luc2VydCwgb2ZmbnVtKSArIHNpemVvZihPZmZzZXROdW1iZXIpKQpAQCAtOTIs
OCArMTA2LDM3IEBAIHR5cGVkZWYgc3RydWN0IHhsX2J0cmVlX2luc2VydAogICogQmFja3VwIEJs
ayAwOiBvcmlnaW5hbCBwYWdlIC8gbmV3IGxlZnQgcGFnZQogICoKICAqIFRoZSBsZWZ0IHBhZ2Un
cyBkYXRhIHBvcnRpb24gY29udGFpbnMgdGhlIG5ldyBpdGVtLCBpZiBpdCdzIHRoZSBfTCB2YXJp
YW50LgotICogQW4gSW5kZXhUdXBsZSByZXByZXNlbnRpbmcgdGhlIGhpZ2gga2V5IG9mIHRoZSBs
ZWZ0IHBhZ2UgbXVzdCBmb2xsb3cgd2l0aAotICogZWl0aGVyIHZhcmlhbnQuCisgKiBfUiB2YXJp
YW50IHNwbGl0IHJlY29yZHMgZ2VuZXJhbGx5IGRvIG5vdCBoYXZlIGEgbmV3aXRlbSAoX1IgdmFy
aWFudCBsZWFmCisgKiBwYWdlIHNwbGl0IHJlY29yZHMgdGhhdCBtdXN0IGRlYWwgd2l0aCBhIHBv
c3RpbmcgbGlzdCBzcGxpdCB3aWxsIGluY2x1ZGUgYW4KKyAqIGV4cGxpY2l0IG5ld2l0ZW0sIHRo
b3VnaCBpdCBpcyBuZXZlciB1c2VkIG9uIHRoZSByaWdodCBwYWdlIC0tIGl0IGlzCisgKiBhY3R1
YWxseSBhbiBvcmlnbmV3aXRlbSBuZWVkZWQgdG8gdXBkYXRlIGV4aXN0aW5nIHBvc3RpbmcgbGlz
dCkuICBUaGUgbmV3CisgKiBoaWdoIGtleSBvZiB0aGUgbGVmdC9vcmlnaW5hbCBwYWdlIGFwcGVh
cnMgbGFzdCBvZiBhbGwgKGFuZCBtdXN0IGFsd2F5cyBiZQorICogcHJlc2VudCkuCisgKgorICog
UGFnZSBzcGxpdCByZWNvcmRzIHRoYXQgbmVlZCB0aGUgUkVETyByb3V0aW5lIHRvIGRlYWwgd2l0
aCBhIHBvc3RpbmcgbGlzdAorICogc3BsaXQgZGlyZWN0bHkgd2lsbCBoYXZlIGFuIGV4cGxpY2l0
IG5ld2l0ZW0sIHdoaWNoIGlzIGFjdHVhbGx5IGFuCisgKiBvcmlnbmV3aXRlbSAodGhlIG5ld2l0
ZW0gYXMgaXQgd2FzIGJlZm9yZSB0aGUgcG9zdGluZyBsaXN0IHNwbGl0LCBub3QKKyAqIGFmdGVy
KS4gIEEgcG9zdGluZyBsaXN0IHNwbGl0IGFsd2F5cyBoYXMgYSBuZXdpdGVtIHRoYXQgY29tZXMg
aW1tZWRpYXRlbHkKKyAqIGFmdGVyIHRoZSBwb3N0aW5nIGxpc3QgYmVpbmcgc3BsaXQgKHdoaWNo
IHdvdWxkIGhhdmUgb3ZlcmxhcHBlZCB3aXRoCisgKiBvcmlnbmV3aXRlbSBwcmlvciB0byBzcGxp
dCkuICBVc3VhbGx5IFJFRE8gbXVzdCBkZWFsIHdpdGggcG9zdGluZyBsaXN0CisgKiBzcGxpdHMg
d2l0aCBhbiBfTCB2YXJpYW50IHBhZ2Ugc3BsaXQgcmVjb3JkLCBhbmQgdXN1YWxseSBib3RoIHRo
ZSBuZXcKKyAqIHBvc3RpbmcgbGlzdCBhbmQgdGhlIGZpbmFsIG5ld2l0ZW0gZ28gb24gdGhlIGxl
ZnQgcGFnZSAodGhlIGV4aXN0aW5nCisgKiBwb3N0aW5nIGxpc3Qgd2lsbCBiZSBpbnNlcnRlZCBp
bnN0ZWFkIG9mIHRoZSBvbGQsIGFuZCB0aGUgZmluYWwgbmV3aXRlbQorICogd2lsbCBiZSBpbnNl
cnRlZCBuZXh0IHRvIHRoYXQpLiAgSG93ZXZlciwgX1IgdmFyaWFudCBzcGxpdCByZWNvcmRzIHdp
bGwKKyAqIGluY2x1ZGUgYW4gb3JpZ25ld2l0ZW0gd2hlbiB0aGUgc3BsaXQgcG9pbnQgZm9yIHRo
ZSBwYWdlIGhhcHBlbnMgdG8gaGF2ZSBhCisgKiBsYXN0bGVmdCB0dXBsZSB0aGF0IGlzIGFsc28g
dGhlIHBvc3RpbmcgbGlzdCBiZWluZyBzcGxpdCAobGVhdmluZyBuZXdpdGVtCisgKiBhcyB0aGUg
cGFnZSBzcGxpdCdzIGZpcnN0cmlnaHQgdHVwbGUpLiAgVGhlIGV4aXN0ZW5jZSBvZiB0aGlzIGNv
cm5lciBjYXNlCisgKiBkb2VzIG5vdCBjaGFuZ2UgdGhlIGJhc2ljIGZhY3QgYWJvdXQgbmV3aXRl
bS9vcmlnbmV3aXRlbSBmb3IgdGhlIFJFRE8KKyAqIHJvdXRpbmU6IGl0IGlzIGFsd2F5cyBzdGF0
ZSB1c2VkIGZvciB0aGUgbGVmdCBwYWdlIGFsb25lLiAgKFRoaXMgaXMgd2h5IHRoZQorICogcmVj
b3JkJ3MgcG9zdGluZ29mZiBmaWVsZCBpc24ndCBhIHJlbGlhYmxlIGluZGljYXRvciBvZiB3aGV0
aGVyIG9yIG5vdCBhCisgKiBwb3N0aW5nIGxpc3Qgc3BsaXQgb2NjdXJyZWQgZHVyaW5nIHRoZSBw
YWdlIHNwbGl0OyBhIG5vbi16ZXJvIHZhbHVlIG1lcmVseQorICogaW5kaWNhdGVzIHRoYXQgdGhl
IFJFRE8gcm91dGluZSBtdXN0IHJlY29uc3RydWN0IGEgbmV3IHBvc3RpbmcgbGlzdCB0dXBsZQor
ICogdGhhdCBpcyBuZWVkZWQgZm9yIHRoZSBsZWZ0IHBhZ2UuKQorICoKKyAqIFRoaXMgcG9zdGlu
ZyBsaXN0IHNwbGl0IGhhbmRsaW5nIGlzIGVxdWl2YWxlbnQgdG8gdGhlIHhsX2J0cmVlX2luc2Vy
dCBSRURPCisgKiByb3V0aW5lJ3MgSU5TRVJUX1BPU1QgaGFuZGxpbmcuICBXaGlsZSB0aGUgZGV0
YWlscyBhcmUgbW9yZSBjb21wbGljYXRlZAorICogaGVyZSwgdGhlIGNvbmNlcHQgYW5kIGdvYWxz
IGFyZSBleGFjdGx5IHRoZSBzYW1lLiAgU2VlIF9idF9zd2FwX3Bvc3RpbmcoKQorICogZm9yIGRl
dGFpbHMgb24gcG9zdGluZyBsaXN0IHNwbGl0cy4KICAqCiAgKiBCYWNrdXAgQmxrIDE6IG5ldyBy
aWdodCBwYWdlCiAgKgpAQCAtMTExLDE1ICsxNTQsMzIgQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfYnRy
ZWVfc3BsaXQKIHsKIAl1aW50MzIJCWxldmVsOwkJCS8qIHRyZWUgbGV2ZWwgb2YgcGFnZSBiZWlu
ZyBzcGxpdCAqLwogCU9mZnNldE51bWJlciBmaXJzdHJpZ2h0OwkvKiBmaXJzdCBpdGVtIG1vdmVk
IHRvIHJpZ2h0IHBhZ2UgKi8KLQlPZmZzZXROdW1iZXIgbmV3aXRlbW9mZjsJLyogbmV3IGl0ZW0n
cyBvZmZzZXQgKHVzZWZ1bCBmb3IgX0wgdmFyaWFudCkgKi8KKwlPZmZzZXROdW1iZXIgbmV3aXRl
bW9mZjsJLyogbmV3IGl0ZW0ncyBvZmZzZXQgKi8KKwl1aW50MTYJCXBvc3RpbmdvZmY7CQkvKiBv
ZmZzZXQgaW5zaWRlIG9yaWcgcG9zdGluZyB0dXBsZSAqLwogfSB4bF9idHJlZV9zcGxpdDsKIAot
I2RlZmluZSBTaXplT2ZCdHJlZVNwbGl0CShvZmZzZXRvZih4bF9idHJlZV9zcGxpdCwgbmV3aXRl
bW9mZikgKyBzaXplb2YoT2Zmc2V0TnVtYmVyKSkKKyNkZWZpbmUgU2l6ZU9mQnRyZWVTcGxpdAko
b2Zmc2V0b2YoeGxfYnRyZWVfc3BsaXQsIHBvc3RpbmdvZmYpICsgc2l6ZW9mKHVpbnQxNikpCisK
Ky8qCisgKiBXaGVuIHBhZ2UgaXMgZGVkdXBsaWNhdGVkLCBjb25zZWN1dGl2ZSBncm91cHMgb2Yg
dHVwbGVzIHdpdGggZXF1YWwga2V5cyBhcmUKKyAqIG1lcmdlZCB0b2dldGhlciBpbnRvIHBvc3Rp
bmcgbGlzdCB0dXBsZXMuCisgKgorICogVGhlIFdBTCByZWNvcmQgcmVwcmVzZW50cyB0aGUgaW50
ZXJ2YWwgdGhhdCBkZXNjcmliZXMgdGhlIHBvc3RpbmcgdHVwbGUKKyAqIHRoYXQgc2hvdWxkIGJl
IGFkZGVkIHRvIHRoZSBwYWdlLgorICovCit0eXBlZGVmIHN0cnVjdCB4bF9idHJlZV9kZWR1cAor
eworCU9mZnNldE51bWJlciBiYXNlb2ZmOworCXVpbnQxNgkJbml0ZW1zOworfSB4bF9idHJlZV9k
ZWR1cDsKKworI2RlZmluZSBTaXplT2ZCdHJlZURlZHVwIAkob2Zmc2V0b2YoeGxfYnRyZWVfZGVk
dXAsIG5pdGVtcykgKyBzaXplb2YodWludDE2KSkKIAogLyoKICAqIFRoaXMgaXMgd2hhdCB3ZSBu
ZWVkIHRvIGtub3cgYWJvdXQgZGVsZXRlIG9mIGluZGl2aWR1YWwgbGVhZiBpbmRleCB0dXBsZXMu
CiAgKiBUaGUgV0FMIHJlY29yZCBjYW4gcmVwcmVzZW50IGRlbGV0aW9uIG9mIGFueSBudW1iZXIg
b2YgaW5kZXggdHVwbGVzIG9uIGEKLSAqIHNpbmdsZSBpbmRleCBwYWdlIHdoZW4gKm5vdCogZXhl
Y3V0ZWQgYnkgVkFDVVVNLgorICogc2luZ2xlIGluZGV4IHBhZ2Ugd2hlbiAqbm90KiBleGVjdXRl
ZCBieSBWQUNVVU0uICBEZWxldGlvbiBvZiBhIHN1YnNldCBvZgorICogdGhlIFRJRHMgd2l0aGlu
IGEgcG9zdGluZyBsaXN0IHR1cGxlIGlzIG5vdCBzdXBwb3J0ZWQuCiAgKgogICogQmFja3VwIEJs
ayAwOiBpbmRleCBwYWdlCiAgKi8KQEAgLTE1MiwxOSArMjEyLDIzIEBAIHR5cGVkZWYgc3RydWN0
IHhsX2J0cmVlX3JldXNlX3BhZ2UKIC8qCiAgKiBUaGlzIGlzIHdoYXQgd2UgbmVlZCB0byBrbm93
IGFib3V0IHZhY3V1bSBvZiBpbmRpdmlkdWFsIGxlYWYgaW5kZXggdHVwbGVzLgogICogVGhlIFdB
TCByZWNvcmQgY2FuIHJlcHJlc2VudCBkZWxldGlvbiBvZiBhbnkgbnVtYmVyIG9mIGluZGV4IHR1
cGxlcyBvbiBhCi0gKiBzaW5nbGUgaW5kZXggcGFnZSB3aGVuIGV4ZWN1dGVkIGJ5IFZBQ1VVTS4K
LSAqCi0gKiBOb3RlIHRoYXQgdGhlIFdBTCByZWNvcmQgaW4gYW55IHZhY3V1bSBvZiBhbiBpbmRl
eCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lCi0gKiBpdGVtIHRvIGRlbGV0ZS4KKyAqIHNpbmdsZSBp
bmRleCBwYWdlIHdoZW4gZXhlY3V0ZWQgYnkgVkFDVVVNLiAgSXQgY2FuIGFsc28gc3VwcG9ydCAi
dXBkYXRlcyIKKyAqIG9mIGluZGV4IHR1cGxlcywgd2hpY2ggYXJlIGhvdyBkZWxldGVzIG9mIGEg
c3Vic2V0IG9mIFRJRHMgY29udGFpbmVkIGluIGFuCisgKiBleGlzdGluZyBwb3N0aW5nIGxpc3Qg
dHVwbGUgYXJlIGltcGxlbWVudGVkLiAoVXBkYXRlcyBhcmUgb25seSB1c2VkIHdoZW4KKyAqIHRo
ZXJlIHdpbGwgYmUgc29tZSByZW1haW5pbmcgVElEcyBvbmNlIFZBQ1VVTSBmaW5pc2hlczsgb3Ro
ZXJ3aXNlIHRoZQorICogcG9zdGluZyBsaXN0IHR1cGxlIGNhbiBqdXN0IGJlIGRlbGV0ZWQpLgog
ICovCiB0eXBlZGVmIHN0cnVjdCB4bF9idHJlZV92YWN1dW0KIHsKLQl1aW50MzIJCW5kZWxldGVk
OworCXVpbnQxNgkJbmRlbGV0ZWQ7CisJdWludDE2CQludXBkYXRlZDsKIAogCS8qIERFTEVURUQg
VEFSR0VUIE9GRlNFVCBOVU1CRVJTIEZPTExPVyAqLworCS8qIFVQREFURUQgVEFSR0VUIE9GRlNF
VCBOVU1CRVJTIEZPTExPVyAqLworCS8qIFVQREFURUQgVFVQTEVTIEZPUiBPVkVSV1JJVEVTIEZP
TExPVyAqLwogfSB4bF9idHJlZV92YWN1dW07CiAKLSNkZWZpbmUgU2l6ZU9mQnRyZWVWYWN1dW0J
KG9mZnNldG9mKHhsX2J0cmVlX3ZhY3V1bSwgbmRlbGV0ZWQpICsgc2l6ZW9mKHVpbnQzMikpCisj
ZGVmaW5lIFNpemVPZkJ0cmVlVmFjdXVtCShvZmZzZXRvZih4bF9idHJlZV92YWN1dW0sIG51cGRh
dGVkKSArIHNpemVvZih1aW50MTYpKQogCiAvKgogICogVGhpcyBpcyB3aGF0IHdlIG5lZWQgdG8g
a25vdyBhYm91dCBtYXJraW5nIGFuIGVtcHR5IGJyYW5jaCBmb3IgZGVsZXRpb24uCkBAIC0yNDUs
NiArMzA5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfYnRyZWVfbmV3cm9vdAogZXh0ZXJuIHZvaWQg
YnRyZWVfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CiBleHRlcm4gdm9pZCBidHJlZV9k
ZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CiBleHRlcm4gY29u
c3QgY2hhciAqYnRyZWVfaWRlbnRpZnkodWludDggaW5mbyk7CitleHRlcm4gdm9pZCBidHJlZV94
bG9nX3N0YXJ0dXAodm9pZCk7CitleHRlcm4gdm9pZCBidHJlZV94bG9nX2NsZWFudXAodm9pZCk7
CiBleHRlcm4gdm9pZCBidHJlZV9tYXNrKGNoYXIgKnBhZ2VkYXRhLCBCbG9ja051bWJlciBibGtu
byk7CiAKICNlbmRpZgkJCQkJCQkvKiBOQlRYTE9HX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs
dWRlL2FjY2Vzcy9ybWdybGlzdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKaW5k
ZXggYzg4ZGNjZmI4ZC4uNmMxNWRmN2U3MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz
L3JtZ3JsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKQEAgLTM2LDcg
KzM2LDcgQEAgUEdfUk1HUihSTV9SRUxNQVBfSUQsICJSZWxNYXAiLCByZWxtYXBfcmVkbywgcmVs
bWFwX2Rlc2MsIHJlbG1hcF9pZGVudGlmeSwgTlVMTCwKIFBHX1JNR1IoUk1fU1RBTkRCWV9JRCwg
IlN0YW5kYnkiLCBzdGFuZGJ5X3JlZG8sIHN0YW5kYnlfZGVzYywgc3RhbmRieV9pZGVudGlmeSwg
TlVMTCwgTlVMTCwgTlVMTCkKIFBHX1JNR1IoUk1fSEVBUDJfSUQsICJIZWFwMiIsIGhlYXAyX3Jl
ZG8sIGhlYXAyX2Rlc2MsIGhlYXAyX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBoZWFwX21hc2spCiBQ
R19STUdSKFJNX0hFQVBfSUQsICJIZWFwIiwgaGVhcF9yZWRvLCBoZWFwX2Rlc2MsIGhlYXBfaWRl
bnRpZnksIE5VTEwsIE5VTEwsIGhlYXBfbWFzaykKLVBHX1JNR1IoUk1fQlRSRUVfSUQsICJCdHJl
ZSIsIGJ0cmVlX3JlZG8sIGJ0cmVlX2Rlc2MsIGJ0cmVlX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBi
dHJlZV9tYXNrKQorUEdfUk1HUihSTV9CVFJFRV9JRCwgIkJ0cmVlIiwgYnRyZWVfcmVkbywgYnRy
ZWVfZGVzYywgYnRyZWVfaWRlbnRpZnksIGJ0cmVlX3hsb2dfc3RhcnR1cCwgYnRyZWVfeGxvZ19j
bGVhbnVwLCBidHJlZV9tYXNrKQogUEdfUk1HUihSTV9IQVNIX0lELCAiSGFzaCIsIGhhc2hfcmVk
bywgaGFzaF9kZXNjLCBoYXNoX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBoYXNoX21hc2spCiBQR19S
TUdSKFJNX0dJTl9JRCwgIkdpbiIsIGdpbl9yZWRvLCBnaW5fZGVzYywgZ2luX2lkZW50aWZ5LCBn
aW5feGxvZ19zdGFydHVwLCBnaW5feGxvZ19jbGVhbnVwLCBnaW5fbWFzaykKIFBHX1JNR1IoUk1f
R0lTVF9JRCwgIkdpc3QiLCBnaXN0X3JlZG8sIGdpc3RfZGVzYywgZ2lzdF9pZGVudGlmeSwgZ2lz
dF94bG9nX3N0YXJ0dXAsIGdpc3RfeGxvZ19jbGVhbnVwLCBnaXN0X21hc2spCmRpZmYgLS1naXQg
YS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYyBiL3NyYy9iYWNrZW5kL2Fj
Y2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCmluZGV4IDc5NDMwZDJiN2IuLmYyYjAzYTZjZmMgMTAw
NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCisrKyBiL3Ny
Yy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCkBAIC0xNTgsNiArMTU4LDE1IEBA
IHN0YXRpYyByZWxvcHRfYm9vbCBib29sUmVsT3B0c1tdID0KIAkJfSwKIAkJdHJ1ZQogCX0sCisJ
eworCQl7CisJCQkiZGVkdXBsaWNhdGVfaXRlbXMiLAorCQkJIkVuYWJsZXMgZGVkdXBsaWNhdGlv
biBvbiBidHJlZSBpbmRleCBsZWFmIHBhZ2VzIiwKKwkJCVJFTE9QVF9LSU5EX0JUUkVFLAorCQkJ
U2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrCisJCX0sCisJCXRydWUKKwl9LAogCS8qIGxpc3QgdGVy
bWluYXRvciAqLwogCXt7TlVMTH19CiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz
L2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCBj
MTZlYjA1NDE2Li5kZmJhNWFlMzlhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k
ZXgvZ2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpAQCAtMjc2
LDYgKzI3NiwxMCBAQCBCdWlsZEluZGV4VmFsdWVEZXNjcmlwdGlvbihSZWxhdGlvbiBpbmRleFJl
bGF0aW9uLAogLyoKICAqIEdldCB0aGUgbGF0ZXN0UmVtb3ZlZFhpZCBmcm9tIHRoZSB0YWJsZSBl
bnRyaWVzIHBvaW50ZWQgYXQgYnkgdGhlIGluZGV4CiAgKiB0dXBsZXMgYmVpbmcgZGVsZXRlZC4K
KyAqCisgKiBOb3RlOiBpbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IGRvbid0IGNvbnNpc3RlbnRs
eSB1c2UgdGhlIHN0YW5kYXJkCisgKiBJbmRleFR1cGxlICsgaGVhcCBUSUQgaXRlbSBwb2ludGVy
IHJlcHJlc2VudGF0aW9uIHdpbGwgbmVlZCB0byBwcm92aWRlCisgKiB0aGVpciBvd24gdmVyc2lv
biBvZiB0aGlzIGZ1bmN0aW9uLgogICovCiBUcmFuc2FjdGlvbklkCiBpbmRleF9jb21wdXRlX3hp
ZF9ob3Jpem9uX2Zvcl90dXBsZXMoUmVsYXRpb24gaXJlbCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr
ZW5kL2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL01h
a2VmaWxlCmluZGV4IGJmMjQ1ZjVkYWIuLmQ2OTgwOGU3OGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr
ZW5kL2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl
ZS9NYWtlZmlsZQpAQCAtMTQsNiArMTQsNyBAQCBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMv
TWFrZWZpbGUuZ2xvYmFsCiAKIE9CSlMgPSBcCiAJbmJ0Y29tcGFyZS5vIFwKKwluYnRkZWR1cC5v
IFwKIAluYnRpbnNlcnQubyBcCiAJbmJ0cGFnZS5vIFwKIAluYnRyZWUubyBcCmRpZmYgLS1naXQg
YS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u
YnRyZWUvUkVBRE1FCmluZGV4IGM2MGE0ZDBkOWUuLmYyNjczMzI4YjQgMTAwNjQ0Ci0tLSBhL3Ny
Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u
YnRyZWUvUkVBRE1FCkBAIC00MzIsNyArNDMyLDEwIEBAIGJlY2F1c2Ugd2UgYWxsb3cgTFBfREVB
RCB0byBiZSBzZXQgd2l0aCBvbmx5IGEgc2hhcmUgbG9jayAoaXQncyBleGFjdGx5CiBsaWtlIGEg
aGludCBiaXQgZm9yIGEgaGVhcCB0dXBsZSksIGJ1dCBwaHlzaWNhbGx5IHJlbW92aW5nIHR1cGxl
cyByZXF1aXJlcwogZXhjbHVzaXZlIGxvY2suICBJbiB0aGUgY3VycmVudCBjb2RlIHdlIHRyeSB0
byByZW1vdmUgTFBfREVBRCB0dXBsZXMgd2hlbgogd2UgYXJlIG90aGVyd2lzZSBmYWNlZCB3aXRo
IGhhdmluZyB0byBzcGxpdCBhIHBhZ2UgdG8gZG8gYW4gaW5zZXJ0aW9uIChhbmQKLWhlbmNlIGhh
dmUgZXhjbHVzaXZlIGxvY2sgb24gaXQgYWxyZWFkeSkuCitoZW5jZSBoYXZlIGV4Y2x1c2l2ZSBs
b2NrIG9uIGl0IGFscmVhZHkpLiAgRGVkdXBsaWNhdGlvbiBjYW4gYWxzbyBwcmV2ZW50CithIHBh
Z2Ugc3BsaXQsIGJ1dCByZW1vdmluZyBMUF9ERUFEIHR1cGxlcyBpcyB0aGUgcHJlZmVycmVkIGFw
cHJvYWNoLgorKE5vdGUgdGhhdCBwb3N0aW5nIGxpc3QgdHVwbGVzIGNhbiBvbmx5IGhhdmUgdGhl
aXIgTFBfREVBRCBiaXQgc2V0IHdoZW4KK2V2ZXJ5IHRhYmxlIFRJRCB3aXRoaW4gdGhlIHBvc3Rp
bmcgbGlzdCBpcyBrbm93biBkZWFkLikKIAogVGhpcyBsZWF2ZXMgdGhlIGluZGV4IGluIGEgc3Rh
dGUgd2hlcmUgaXQgaGFzIG5vIGVudHJ5IGZvciBhIGRlYWQgdHVwbGUKIHRoYXQgc3RpbGwgZXhp
c3RzIGluIHRoZSBoZWFwLiAgVGhpcyBpcyBub3QgYSBwcm9ibGVtIGZvciB0aGUgY3VycmVudApA
QCAtNzI2LDYgKzcyOSwxNTIgQEAgaWYgaXQgbXVzdC4gIFdoZW4gYSBwYWdlIHRoYXQncyBhbHJl
YWR5IGZ1bGwgb2YgZHVwbGljYXRlcyBtdXN0IGJlIHNwbGl0LAogdGhlIGZhbGxiYWNrIHN0cmF0
ZWd5IGFzc3VtZXMgdGhhdCBkdXBsaWNhdGVzIGFyZSBtb3N0bHkgaW5zZXJ0ZWQgaW4KIGFzY2Vu
ZGluZyBoZWFwIFRJRCBvcmRlci4gIFRoZSBwYWdlIGlzIHNwbGl0IGluIGEgd2F5IHRoYXQgbGVh
dmVzIHRoZSBsZWZ0CiBoYWxmIG9mIHRoZSBwYWdlIG1vc3RseSBmdWxsLCBhbmQgdGhlIHJpZ2h0
IGhhbGYgb2YgdGhlIHBhZ2UgbW9zdGx5IGVtcHR5LgorVGhlIG92ZXJhbGwgZWZmZWN0IGlzIHRo
YXQgbGVhZiBwYWdlIHNwbGl0cyBncmFjZWZ1bGx5IGFkYXB0IHRvIGluc2VydHMgb2YKK2xhcmdl
IGdyb3VwcyBvZiBkdXBsaWNhdGVzLCBtYXhpbWl6aW5nIHNwYWNlIHV0aWxpemF0aW9uLiAgTm90
ZSBhbHNvIHRoYXQKKyJ0cmFwcGluZyIgbGFyZ2UgZ3JvdXBzIG9mIGR1cGxpY2F0ZXMgb24gdGhl
IHNhbWUgbGVhZiBwYWdlIGxpa2UgdGhpcyBtYWtlcworZGVkdXBsaWNhdGlvbiBtb3JlIGVmZmlj
aWVudC4gIERlZHVwbGljYXRpb24gY2FuIGJlIHBlcmZvcm1lZCBpbmZyZXF1ZW50bHksCit3aXRo
b3V0IG1lcmdpbmcgdG9nZXRoZXIgZXhpc3RpbmcgcG9zdGluZyBsaXN0IHR1cGxlcyB0b28gb2Z0
ZW4uCisKK05vdGVzIGFib3V0IGRlZHVwbGljYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworV2UgZGVkdXBsaWNhdGUgbm9uLXBpdm90IHR1cGxlcyBpbiBub24tdW5pcXVlIGluZGV4
ZXMgdG8gcmVkdWNlIHN0b3JhZ2UKK292ZXJoZWFkLCBhbmQgdG8gYXZvaWQgKG9yIGF0IGxlYXN0
IGRlbGF5KSBwYWdlIHNwbGl0cy4gIE5vdGUgdGhhdCB0aGUKK2dvYWxzIGZvciBkZWR1cGxpY2F0
aW9uIGluIHVuaXF1ZSBpbmRleGVzIGFyZSByYXRoZXIgZGlmZmVyZW50OyBzZWUgbGF0ZXIKK3Nl
Y3Rpb24gZm9yIGRldGFpbHMuICBEZWR1cGxpY2F0aW9uIGFsdGVycyB0aGUgcGh5c2ljYWwgcmVw
cmVzZW50YXRpb24gb2YKK3R1cGxlcyB3aXRob3V0IGNoYW5naW5nIHRoZSBsb2dpY2FsIGNvbnRl
bnRzIG9mIHRoZSBpbmRleCwgYW5kIHdpdGhvdXQKK2FkZGluZyBvdmVyaGVhZCB0byByZWFkIHF1
ZXJpZXMuICBOb24tcGl2b3QgdHVwbGVzIGFyZSBtZXJnZWQgdG9nZXRoZXIKK2ludG8gYSBzaW5n
bGUgcGh5c2ljYWwgdHVwbGUgd2l0aCBhIHBvc3RpbmcgbGlzdCAoYSBzaW1wbGUgYXJyYXkgb2Yg
aGVhcAorVElEcyB3aXRoIHRoZSBzdGFuZGFyZCBpdGVtIHBvaW50ZXIgZm9ybWF0KS4gIERlZHVw
bGljYXRpb24gaXMgYWx3YXlzCithcHBsaWVkIGxhemlseSwgYXQgdGhlIHBvaW50IHdoZXJlIGl0
IHdvdWxkIG90aGVyd2lzZSBiZSBuZWNlc3NhcnkgdG8KK3BlcmZvcm0gYSBwYWdlIHNwbGl0LiAg
SXQgb2NjdXJzIG9ubHkgd2hlbiBMUF9ERUFEIGl0ZW1zIGhhdmUgYmVlbgorcmVtb3ZlZCwgYXMg
b3VyIGxhc3QgbGluZSBvZiBkZWZlbnNlIGFnYWluc3Qgc3BsaXR0aW5nIGEgbGVhZiBwYWdlLiAg
V2UKK2NhbiBzZXQgdGhlIExQX0RFQUQgYml0IHdpdGggcG9zdGluZyBsaXN0IHR1cGxlcywgdGhv
dWdoIG9ubHkgd2hlbiBhbGwKK1RJRHMgYXJlIGtub3duIGRlYWQuCisKK091ciBsYXp5IGFwcHJv
YWNoIHRvIGRlZHVwbGljYXRpb24gYWxsb3dzIHRoZSBwYWdlIHNwYWNlIGFjY291bnRpbmcgdXNl
ZAorZHVyaW5nIHBhZ2Ugc3BsaXRzIHRvIGhhdmUgYWJzb2x1dGVseSBtaW5pbWFsIHNwZWNpYWwg
Y2FzZSBsb2dpYyBmb3IKK3Bvc3RpbmcgbGlzdHMuICBQb3N0aW5nIGxpc3RzIGNhbiBiZSB0aG91
Z2h0IG9mIGFzIGV4dHJhIHBheWxvYWQgdGhhdAorc3VmZml4IHRydW5jYXRpb24gd2lsbCByZWxp
YWJseSB0cnVuY2F0ZSBhd2F5IGFzIG5lZWRlZCBkdXJpbmcgcGFnZQorc3BsaXRzLCBqdXN0IGxp
a2Ugbm9uLWtleSBjb2x1bW5zIGZyb20gYW4gSU5DTFVERSBpbmRleCB0dXBsZS4KK0luY29taW5n
L25ldyB0dXBsZXMgY2FuIGdlbmVyYWxseSBiZSB0cmVhdGVkIGFzIG5vbi1vdmVybGFwcGluZyBw
bGFpbgoraXRlbXMgKHRob3VnaCBzZWUgc2VjdGlvbiBvbiBwb3N0aW5nIGxpc3Qgc3BsaXRzIGZv
ciBpbmZvcm1hdGlvbiBhYm91dCBob3cKK292ZXJsYXBwaW5nIG5ldy9pbmNvbWluZyBpdGVtcyBh
cmUgcmVhbGx5IGhhbmRsZWQpLgorCitUaGUgcmVwcmVzZW50YXRpb24gb2YgcG9zdGluZyBsaXN0
cyBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBwb3N0aW5nCitsaXN0cyB1c2VkIGJ5IEdJTiwg
c28gaXQgd291bGQgYmUgc3RyYWlnaHRmb3J3YXJkIHRvIGFwcGx5IEdJTidzIHZhcmJ5dGUKK2Vu
Y29kaW5nIGNvbXByZXNzaW9uIHNjaGVtZSB0byBpbmRpdmlkdWFsIHBvc3RpbmcgbGlzdHMuICBQ
b3N0aW5nIGxpc3QKK2NvbXByZXNzaW9uIHdvdWxkIGJyZWFrIHRoZSBhc3N1bXB0aW9ucyBtYWRl
IGJ5IHBvc3RpbmcgbGlzdCBzcGxpdHMgYWJvdXQKK3BhZ2Ugc3BhY2UgYWNjb3VudGluZyAoc2Vl
IGxhdGVyIHNlY3Rpb24pLCBzbyBpdCdzIG5vdCBjbGVhciBob3cKK2NvbXByZXNzaW9uIGNvdWxk
IGJlIGludGVncmF0ZWQgd2l0aCBuYnRyZWUuICBCZXNpZGVzLCBwb3N0aW5nIGxpc3QKK2NvbXBy
ZXNzaW9uIGRvZXMgbm90IG9mZmVyIGEgY29tcGVsbGluZyB0cmFkZS1vZmYgZm9yIG5idHJlZSwg
c2luY2UgaW4KK2dlbmVyYWwgbmJ0cmVlIGlzIG9wdGltaXplZCBmb3IgY29uc2lzdGVudCBwZXJm
b3JtYW5jZSB3aXRoIG1hbnkKK2NvbmN1cnJlbnQgcmVhZGVycyBhbmQgd3JpdGVycy4KKworQSBt
YWpvciBnb2FsIG9mIG91ciBsYXp5IGFwcHJvYWNoIHRvIGRlZHVwbGljYXRpb24gaXMgdG8gbGlt
aXQgdGhlCitwZXJmb3JtYW5jZSBpbXBhY3Qgb2YgZGVkdXBsaWNhdGlvbiB3aXRoIHJhbmRvbSB1
cGRhdGVzLiAgRXZlbiBjb25jdXJyZW50CithcHBlbmQtb25seSBpbnNlcnRzIG9mIHRoZSBzYW1l
IGtleSB2YWx1ZSB3aWxsIHRlbmQgdG8gaGF2ZSBpbnNlcnRzIG9mCitpbmRpdmlkdWFsIGluZGV4
IHR1cGxlcyBpbiBhbiBvcmRlciB0aGF0IGRvZXNuJ3QgcXVpdGUgbWF0Y2ggaGVhcCBUSUQKK29y
ZGVyLiAgRGVsYXlpbmcgZGVkdXBsaWNhdGlvbiBtaW5pbWl6ZXMgcGFnZSBsZXZlbCBmcmFnbWVu
dGF0aW9uLgorCitEZWR1cGxpY2F0aW9uIGluIHVuaXF1ZSBpbmRleGVzCistLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK1Zlcnkgb2Z0ZW4sIHRoZSByYW5nZSBvZiB2YWx1ZXMgdGhh
dCBjYW4gYmUgcGxhY2VkIG9uIGEgZ2l2ZW4gbGVhZiBwYWdlIGluCithIHVuaXF1ZSBpbmRleCBp
cyBmaXhlZCBhbmQgcGVybWFuZW50LiAgRm9yIGV4YW1wbGUsIGEgcHJpbWFyeSBrZXkgb24gYW4K
K2lkZW50aXR5IGNvbHVtbiB3aWxsIHVzdWFsbHkgb25seSBoYXZlIHBhZ2Ugc3BsaXRzIGNhdXNl
ZCBieSB0aGUgaW5zZXJ0aW9uCitvZiBuZXcgbG9naWNhbCByb3dzIHdpdGhpbiB0aGUgcmlnaHRt
b3N0IGxlYWYgcGFnZS4gIElmIHRoZXJlIGlzIGEgc3BsaXQKK29mIGEgbm9uLXJpZ2h0bW9zdCBs
ZWFmIHBhZ2UsIHRoZW4gdGhlIHNwbGl0IG11c3QgaGF2ZSBiZWVuIHRyaWdnZXJlZCBieQoraW5z
ZXJ0cyBhc3NvY2lhdGVkIHdpdGggYW4gVVBEQVRFIG9mIGFuIGV4aXN0aW5nIGxvZ2ljYWwgcm93
LiAgU3BsaXR0aW5nIGEKK2xlYWYgcGFnZSBwdXJlbHkgdG8gc3RvcmUgbXVsdGlwbGUgdmVyc2lv
bnMgc2hvdWxkIGJlIGNvbnNpZGVyZWQKK3BhdGhvbG9naWNhbCwgc2luY2UgaXQgcGVybWFuZW50
bHkgZGVncmFkZXMgdGhlIGluZGV4IHN0cnVjdHVyZSBpbiBvcmRlcgordG8gYWJzb3JiIGEgdGVt
cG9yYXJ5IGJ1cnN0IG9mIGR1cGxpY2F0ZXMuICBEZWR1cGxpY2F0aW9uIGluIHVuaXF1ZQoraW5k
ZXhlcyBoZWxwcyB0byBwcmV2ZW50IHRoZXNlIHBhdGhvbG9naWNhbCBwYWdlIHNwbGl0cy4KKwor
TGlrZSBhbGwgaW5kZXggYWNjZXNzIG1ldGhvZHMsIG5idHJlZSBkb2VzIG5vdCBoYXZlIGRpcmVj
dCBrbm93bGVkZ2Ugb2YKK3ZlcnNpb25pbmcgb3Igb2YgTVZDQzsgaXQgZGVhbHMgb25seSB3aXRo
IHBoeXNpY2FsIHR1cGxlcy4gIEhvd2V2ZXIsIHVuaXF1ZQoraW5kZXhlcyBpbXBsaWNpdGx5IGdp
dmUgbmJ0cmVlIGJhc2ljIGluZm9ybWF0aW9uIGFib3V0IHR1cGxlIHZlcnNpb25pbmcsCitzaW5j
ZSBieSBkZWZpbml0aW9uIHplcm8gb3Igb25lIHR1cGxlcyBvZiBhbnkgZ2l2ZW4ga2V5IHZhbHVl
IGNhbiBiZQordmlzaWJsZSB0byBhbnkgcG9zc2libGUgTVZDQyBzbmFwc2hvdCAoZXhjbHVkaW5n
IGluZGV4IGVudHJpZXMgd2l0aCBOVUxMCit2YWx1ZXMpLiAgV2hlbiBvcHRpbWl6YXRpb25zIHN1
Y2ggYXMgaGVhcGFtJ3MgSGVhcC1vbmx5IHR1cGxlcyAoSE9UKSBoYXBwZW4KK3RvIGJlIGluZWZm
ZWN0aXZlLCBuYnRyZWUncyBvbi10aGUtZmx5IGRlbGV0aW9uIG9mIHR1cGxlcyBpbiB1bmlxdWUg
aW5kZXhlcworY2FuIGJlIHZlcnkgaW1wb3J0YW50IHdpdGggVVBEQVRFLWhlYXZ5IHdvcmtsb2Fk
cy4gIFVuaXF1ZSBjaGVja2luZydzCitMUF9ERUFEIGJpdCBzZXR0aW5nIHJlbGlhYmx5IGF0dGVt
cHRzIHRvIGtpbGwgb2xkLCBlcXVhbCBpbmRleCB0dXBsZQordmVyc2lvbnMuICBUaGlzIHByZXZl
bnRzIChvciBhdCBsZWFzdCBkZWxheXMpIHBhZ2Ugc3BsaXRzIHRoYXQgYXJlCituZWNlc3Nhcnkg
b25seSBiZWNhdXNlIGEgbGVhZiBwYWdlIG11c3QgY29udGFpbiBtdWx0aXBsZSBwaHlzaWNhbCB0
dXBsZXMKK2ZvciB0aGUgc2FtZSBsb2dpY2FsIHJvdy4gIERlZHVwbGljYXRpb24gaW4gdW5pcXVl
IGluZGV4ZXMgbXVzdCBjb29wZXJhdGUKK3dpdGggdGhpcyBtZWNoYW5pc20uICBEZWxldGluZyBp
dGVtcyBvbiB0aGUgcGFnZSBpcyBhbHdheXMgcHJlZmVyYWJsZSB0bworZGVkdXBsaWNhdGlvbi4K
KworVGhlIHN0cmF0ZWd5IHVzZWQgZHVyaW5nIGEgZGVkdXBsaWNhdGlvbiBwYXNzIGhhcyBzaWdu
aWZpY2FudCBkaWZmZXJlbmNlcwordG8gdGhlIHN0cmF0ZWd5IHVzZWQgZm9yIGluZGV4ZXMgdGhh
dCBjYW4gaGF2ZSBtdWx0aXBsZSBsb2dpY2FsIHJvd3Mgd2l0aAordGhlIHNhbWUga2V5IHZhbHVl
LiAgV2UncmUgbm90IHJlYWxseSB0cnlpbmcgdG8gc3RvcmUgZHVwbGljYXRlcyBpbiBhCitzcGFj
ZSBlZmZpY2llbnQgbWFubmVyLCBzaW5jZSBpbiB0aGUgbG9uZyBydW4gdGhlcmUgd29uJ3QgYmUg
YW55CitkdXBsaWNhdGVzIGFueXdheS4gIFJhdGhlciwgd2UncmUgYnV5aW5nIHRpbWUgZm9yIGdh
cmJhZ2UgY29sbGVjdGlvbgorbWVjaGFuaXNtcyB0byBydW4gYmVmb3JlIGEgcGFnZSBzcGxpdCBp
cyBuZWVkZWQuCisKK1VuaXF1ZSBpbmRleCBsZWFmIHBhZ2VzIG9ubHkgZ2V0IGEgZGVkdXBsaWNh
dGlvbiBwYXNzIHdoZW4gYW4gaW5zZXJ0aW9uCisodGhhdCBtaWdodCBoYXZlIHRvIHNwbGl0IHRo
ZSBwYWdlKSBvYnNlcnZlZCBhbiBleGlzdGluZyBkdXBsaWNhdGUgb24gdGhlCitwYWdlIGluIHBh
c3NpbmcuICBUaGlzIGlzIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgZGVkdXBsaWNhdGlv
biB3aWxsCitvbmx5IHdvcmsgb3V0IHdoZW4gX2FsbF8gbmV3IGluc2VydGlvbnMgYXJlIGR1cGxp
Y2F0ZXMgZnJvbSBVUERBVEVzLiAgVGhpcworbWF5IG1lYW4gdGhhdCB3ZSBtaXNzIGFuIG9wcG9y
dHVuaXR5IHRvIGRlbGF5IGEgcGFnZSBzcGxpdCwgYnV0IHRoYXQncworb2theSBiZWNhdXNlIG91
ciB1bHRpbWF0ZSBnb2FsIGlzIHRvIGRlbGF5IGxlYWYgcGFnZSBzcGxpdHMgX2luZGVmaW5pdGVs
eV8KKyhpLmUuIHRvIHByZXZlbnQgdGhlbSBhbHRvZ2V0aGVyKS4gIFRoZXJlIGlzIGxpdHRsZSBw
b2ludCBpbiB0cnlpbmcgdG8KK2RlbGF5IGEgc3BsaXQgdGhhdCBpcyBwcm9iYWJseSBpbmV2aXRh
YmxlIGFueXdheS4gIFRoaXMgYWxsb3dzIHVzIHRvIGF2b2lkCit0aGUgb3ZlcmhlYWQgb2YgYXR0
ZW1wdGluZyB0byBkZWR1cGxpY2F0ZSB3aXRoIHVuaXF1ZSBpbmRleGVzIHRoYXQgYWx3YXlzCito
YXZlIGZldyBvciBubyBkdXBsaWNhdGVzLgorCitQb3N0aW5nIGxpc3Qgc3BsaXRzCistLS0tLS0t
LS0tLS0tLS0tLS0tCisKK1doZW4gdGhlIGluY29taW5nIHR1cGxlIGhhcHBlbnMgdG8gb3Zlcmxh
cCB3aXRoIGFuIGV4aXN0aW5nIHBvc3RpbmcgbGlzdCwKK2EgcG9zdGluZyBsaXN0IHNwbGl0IGlz
IHBlcmZvcm1lZC4gIExpa2UgYSBwYWdlIHNwbGl0LCBhIHBvc3RpbmcgbGlzdAorc3BsaXQgcmVz
b2x2ZXMgYSBzaXR1YXRpb24gd2hlcmUgYSBuZXcvaW5jb21pbmcgaXRlbSAid29uJ3QgZml0Iiwg
d2hpbGUKK2luc2VydGluZyB0aGUgaW5jb21pbmcgaXRlbSBpbiBwYXNzaW5nIChpLmUuIGFzIHBh
cnQgb2YgdGhlIHNhbWUgYXRvbWljCithY3Rpb24pLiAgSXQncyBwb3NzaWJsZSAodGhvdWdoIG5v
dCBwYXJ0aWN1bGFybHkgbGlrZWx5KSB0aGF0IGFuIGluc2VydCBvZgorYSBuZXcgaXRlbSBvbiB0
byBhbiBhbG1vc3QtZnVsbCBwYWdlIHdpbGwgb3ZlcmxhcCB3aXRoIGEgcG9zdGluZyBsaXN0LAor
cmVzdWx0aW5nIGluIGJvdGggYSBwb3N0aW5nIGxpc3Qgc3BsaXQgYW5kIGEgcGFnZSBzcGxpdC4g
IEV2ZW4gdGhlbiwgdGhlCithdG9taWMgYWN0aW9uIHRoYXQgc3BsaXRzIHRoZSBwb3N0aW5nIGxp
c3QgYWxzbyBpbnNlcnRzIHRoZSBuZXcgaXRlbQorKHNpbmNlIHBhZ2Ugc3BsaXRzIGFsd2F5cyBp
bnNlcnQgdGhlIG5ldyBpdGVtIGluIHBhc3NpbmcpLiAgSW5jbHVkaW5nIHRoZQorcG9zdGluZyBs
aXN0IHNwbGl0IGluIHRoZSBzYW1lIGF0b21pYyBhY3Rpb24gYXMgdGhlIGluc2VydCBhdm9pZHMg
cHJvYmxlbXMKK2NhdXNlZCBieSBjb25jdXJyZW50IGluc2VydHMgaW50byB0aGUgc2FtZSBwb3N0
aW5nIGxpc3QgLS0gIHRoZSBleGFjdAorZGV0YWlscyBvZiBob3cgd2UgY2hhbmdlIHRoZSBwb3N0
aW5nIGxpc3QgZGVwZW5kIHVwb24gdGhlIG5ldyBpdGVtLCBhbmQKK3ZpY2UtdmVyc2EuICBBIHNp
bmdsZSBhdG9taWMgYWN0aW9uIGFsc28gbWluaW1pemVzIHRoZSB2b2x1bWUgb2YgZXh0cmEKK1dB
TCByZXF1aXJlZCBmb3IgYSBwb3N0aW5nIGxpc3Qgc3BsaXQsIHNpbmNlIHdlIGRvbid0IGhhdmUg
dG8gZXhwbGljaXRseQorV0FMLWxvZyB0aGUgb3JpZ2luYWwgcG9zdGluZyBsaXN0IHR1cGxlLgor
CitEZXNwaXRlIHBpZ2d5LWJhY2tpbmcgb24gdGhlIHNhbWUgYXRvbWljIGFjdGlvbiB0aGF0IGlu
c2VydHMgYSBuZXcgdHVwbGUsCitwb3N0aW5nIGxpc3Qgc3BsaXRzIGNhbiBiZSB0aG91Z2h0IG9m
IGFzIGEgc2VwYXJhdGUsIGV4dHJhIGFjdGlvbiB0byB0aGUKK2luc2VydCBpdHNlbGYgKG9yIHRv
IHRoZSBwYWdlIHNwbGl0IGl0c2VsZikuICBQb3N0aW5nIGxpc3Qgc3BsaXRzCitjb25jZXB0dWFs
bHkgInJld3JpdGUiIGFuIGluc2VydCB0aGF0IG92ZXJsYXBzIHdpdGggYW4gZXhpc3RpbmcgcG9z
dGluZworbGlzdCBpbnRvIGFuIGluc2VydCB0aGF0IGFkZHMgaXRzIGZpbmFsIG5ldyBpdGVtIGp1
c3QgdG8gdGhlIHJpZ2h0IG9mIHRoZQorcG9zdGluZyBsaXN0IGluc3RlYWQuICBUaGUgc2l6ZSBv
ZiB0aGUgcG9zdGluZyBsaXN0IHdvbid0IGNoYW5nZSwgYW5kIHNvCitwYWdlIHNwYWNlIGFjY291
bnRpbmcgY29kZSBkb2VzIG5vdCBuZWVkIHRvIGNhcmUgYWJvdXQgcG9zdGluZyBsaXN0IHNwbGl0
cworYXQgYWxsLiAgVGhpcyBpcyBhbiBpbXBvcnRhbnQgdXBzaWRlIG9mIG91ciBkZXNpZ247IHRo
ZSBwYWdlIHNwbGl0IHBvaW50CitjaG9pY2UgbG9naWMgaXMgdmVyeSBzdWJ0bGUgZXZlbiB3aXRo
b3V0IGl0IG5lZWRpbmcgdG8gZGVhbCB3aXRoIHBvc3RpbmcKK2xpc3Qgc3BsaXRzLgorCitPbmx5
IGEgZmV3IGlzb2xhdGVkIGV4dHJhIHN0ZXBzIGFyZSByZXF1aXJlZCB0byBwcmVzZXJ2ZSB0aGUg
aWxsdXNpb24gdGhhdAordGhlIG5ldyBpdGVtIG5ldmVyIG92ZXJsYXBwZWQgd2l0aCBhbiBleGlz
dGluZyBwb3N0aW5nIGxpc3QgaW4gdGhlIGZpcnN0CitwbGFjZTogdGhlIGhlYXAgVElEIG9mIHRo
ZSBpbmNvbWluZyB0dXBsZSBpcyBzd2FwcGVkIHdpdGggdGhlIHJpZ2h0bW9zdC9tYXgKK2hlYXAg
VElEIGZyb20gdGhlIGV4aXN0aW5nL29yaWdpbmFsbHkgb3ZlcmxhcHBpbmcgcG9zdGluZyBsaXN0
LiAgQWxzbywgdGhlCitwb3N0aW5nLXNwbGl0LXdpdGgtcGFnZS1zcGxpdCBjYXNlIG11c3QgZ2Vu
ZXJhdGUgYSBuZXcgaGlnaCBrZXkgYmFzZWQgb24KK2FuIGltYWdpbmFyeSB2ZXJzaW9uIG9mIHRo
ZSBvcmlnaW5hbCBwYWdlIHRoYXQgaGFzIGJvdGggdGhlIGZpbmFsIG5ldyBpdGVtCithbmQgdGhl
IGFmdGVyLWxpc3Qtc3BsaXQgcG9zdGluZyB0dXBsZSAocGFnZSBzcGxpdHMgdXN1YWxseSBqdXN0
IG9wZXJhdGUKK2FnYWluc3QgYW4gaW1hZ2luYXJ5IHZlcnNpb24gdGhhdCBjb250YWlucyB0aGUg
bmV3IGl0ZW0vaXRlbSB0aGF0IHdvbid0CitmaXQpLgorCitUaGlzIGFwcHJvYWNoIGF2b2lkcyBp
bnZlbnRpbmcgYW4gImVhZ2VyIiBhdG9taWMgcG9zdGluZyBzcGxpdCBvcGVyYXRpb24KK3RoYXQg
c3BsaXRzIHRoZSBwb3N0aW5nIGxpc3Qgd2l0aG91dCBzaW11bHRhbmVvdXNseSBmaW5pc2hpbmcg
dGhlIGluc2VydAorb2YgdGhlIGluY29taW5nIGl0ZW0uICBUaGlzIGFsdGVybmF0aXZlIGRlc2ln
biBtaWdodCBzZWVtIGNsZWFuZXIsIGJ1dCBpdAorY3JlYXRlcyBzdWJ0bGUgcHJvYmxlbXMgZm9y
IHBhZ2Ugc3BhY2UgYWNjb3VudGluZy4gIEluIGdlbmVyYWwsIHRoZXJlCittaWdodCBub3QgYmUg
ZW5vdWdoIGZyZWUgc3BhY2Ugb24gdGhlIHBhZ2UgdG8gc3BsaXQgYSBwb3N0aW5nIGxpc3Qgc3Vj
aAordGhhdCB0aGUgaW5jb21pbmcvbmV3IGl0ZW0gbm8gbG9uZ2VyIG92ZXJsYXBzIHdpdGggZWl0
aGVyIHBvc3RpbmcgbGlzdAoraGFsZiAtLS0gdGhlIG9wZXJhdGlvbiBjb3VsZCBmYWlsIGJlZm9y
ZSB0aGUgYWN0dWFsIHJldGFpbCBpbnNlcnQgb2YgdGhlCituZXcgaXRlbSBldmVuIGJlZ2lucy4g
IFdlJ2QgZW5kIHVwIGhhdmluZyB0byBoYW5kbGUgcG9zdGluZyBsaXN0IHNwbGl0cwordGhhdCBu
ZWVkIGEgcGFnZSBzcGxpdCBhbnl3YXkuICBCZXNpZGVzLCBzdXBwb3J0aW5nIHZhcmlhYmxlICJz
cGxpdCBwb2ludHMiCit3aGlsZSBzcGxpdHRpbmcgcG9zdGluZyBsaXN0cyB3b24ndCBhY3R1YWxs
eSBpbXByb3ZlIG92ZXJhbGwgc3BhY2UKK3V0aWxpemF0aW9uLgogCiBOb3RlcyBBYm91dCBEYXRh
IFJlcHJlc2VudGF0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1n
aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMgYi9zcmMvYmFja2VuZC9h
Y2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMC4uYzMyNmE4YzY2NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u
YnRyZWUvbmJ0ZGVkdXAuYwpAQCAtMCwwICsxLDgwOSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
KgorICogbmJ0ZGVkdXAuYworICoJICBEZWR1cGxpY2F0ZSBpdGVtcyBpbiBQb3N0Z3JlcyBidHJl
ZXMuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjAsIFBvc3RncmVTUUwg
R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQs
IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVO
VElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMKKyAq
CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2lu
Y2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvbmJ0eGxvZy5oIgorI2lu
Y2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorCitzdGF0aWMgYm9v
bCBfYnRfZG9fc2luZ2xldmFsKFJlbGF0aW9uIHJlbCwgUGFnZSBwYWdlLCBCVERlZHVwU3RhdGUg
c3RhdGUsCisJCQkJCQkJIE9mZnNldE51bWJlciBtaW5vZmYsIEluZGV4VHVwbGUgbmV3aXRlbSk7
CitzdGF0aWMgdm9pZCBfYnRfc2luZ2xldmFsX2ZpbGxmYWN0b3IoUGFnZSBwYWdlLCBCVERlZHVw
U3RhdGUgc3RhdGUsCisJCQkJCQkJCQkgU2l6ZSBuZXdpdGVtc3opOworI2lmZGVmIFVTRV9BU1NF
UlRfQ0hFQ0tJTkcKK3N0YXRpYyBib29sIF9idF9wb3N0aW5nX3ZhbGlkKEluZGV4VHVwbGUgcG9z
dGluZyk7CisjZW5kaWYKKworLyoKKyAqIFRyeSB0byBkZWR1cGxpY2F0ZSBpdGVtcyB0byBmcmVl
IGF0IGxlYXN0IGVub3VnaCBzcGFjZSB0byBhdm9pZCBhIHBhZ2UKKyAqIHNwbGl0LiAgVGhpcyBm
dW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGR1cmluZyBpbnNlcnRpb24sIG9ubHkgYWZ0ZXIgTFBf
REVBRAorICogaXRlbXMgd2VyZSByZW1vdmVkIGJ5IF9idF92YWN1dW1fb25lX3BhZ2UoKSB0byBw
cmV2ZW50IGEgcGFnZSBzcGxpdC4KKyAqIChXZSdsbCBoYXZlIHRvIGtpbGwgTFBfREVBRCBpdGVt
cyBoZXJlIHdoZW4gdGhlIHBhZ2UncyBCVFBfSEFTX0dBUkJBR0UgaGludAorICogd2FzIG5vdCBz
ZXQsIGJ1dCB0aGF0IHNob3VsZCBiZSByYXJlLikKKyAqCisgKiBUaGUgZ2VuZXJhbCBhcHByb2Fj
aCB0YWtlbiB3aXRoICFjaGVja2luZ3VuaXF1ZSBjYWxsZXJzIGlzIHRvIHBlcmZvcm0gYXMKKyAq
IG11Y2ggZGVkdXBsaWNhdGlvbiBhcyBwb3NzaWJsZSB0byBmcmVlIGFzIG11Y2ggc3BhY2UgYXMg
cG9zc2libGUgbm93LiAgTm90ZQorICogdGhhdCAic2luZ2xlIHZhbHVlIiBzdHJhdGVneSBpcyBz
b21ldGltZXMgdXNlZC4gIFRoaXMgbWF4aW1pemVzIHNwYWNlCisgKiB1dGlsaXphdGlvbiBvdmVy
IHRpbWUgZ2l2ZW4gYSB3b3JrbG9hZCB3aGVyZSBtYW55IGxlYWYgcGFnZXMgYXJlIG5lZWRlZCB0
bworICogc3RvcmUgZHVwbGljYXRlcyB0aGF0IGFsbCBoYXZlIHRoZSBzYW1lIGR1cGxpY2F0ZSB2
YWx1ZSAoZS5nLiwgYSBzaW5nbGUKKyAqIGNvbHVtbiBpbmRleCB3aGVyZSBhIHNpZ25pZmljYW50
IGZyYWN0aW9uIG9mIGFsbCB0dXBsZXMgYXJlIE5VTExzKS4KKyAqCisgKiBUaGUgc3RyYXRlZ3kg
Zm9yIGNoZWNraW5ndW5pcXVlIGNhbGxlcnMgaXMgY29tcGxldGVseSBkaWZmZXJlbnQuCisgKiBE
ZWR1cGxpY2F0aW9uIHdvcmtzIGluIHRhbmRlbSB3aXRoIGdhcmJhZ2UgY29sbGVjdGlvbiwgZXNw
ZWNpYWxseSB0aGUKKyAqIExQX0RFQUQgYml0IHNldHRpbmcgdGhhdCB0YWtlcyBwbGFjZSBpbiBf
YnRfY2hlY2tfdW5pcXVlKCkuICBXZSBnaXZlIHVwIGFzCisgKiBzb29uIGFzIGl0IGJlY29tZXMg
Y2xlYXIgdGhhdCBlbm91Z2ggc3BhY2UgaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8KKyAqIGlu
c2VydCBuZXdpdGVtIHdpdGhvdXQgbmVlZGluZyB0byBzcGxpdCB0aGUgcGFnZS4gIEFsc28sIHdl
IG1lcmdlIHRvZ2V0aGVyCisgKiBsYXJnZXIgZ3JvdXBzIG9mIGR1cGxpY2F0ZSB0dXBsZXMgZmly
c3QgKG1lcmdpbmcgdG9nZXRoZXIgdHdvIGluZGV4IHR1cGxlcworICogdXN1YWxseSBzYXZlcyB2
ZXJ5IGxpdHRsZSBzcGFjZSksIGFuZCBhdm9pZCBtZXJnaW5nIHRvZ2V0aGVyIGV4aXN0aW5nCisg
KiBwb3N0aW5nIGxpc3QgdHVwbGVzLiAgVGhlIGdvYWwgaXMgdG8gZ2VuZXJhdGUgcG9zdGluZyBs
aXN0cyB3aXRoIFRJRHMgdGhhdAorICogYXJlICJjbG9zZSB0b2dldGhlciBpbiB0aW1lIiwgaW4g
b3JkZXIgdG8gbWF4aW1pemUgdGhlIGNoYW5jZXMgb2YgYW4KKyAqIExQX0RFQUQgYml0IGJlaW5n
IHNldCBvcHBvcnR1bmlzdGljYWxseS4gIFNlZSBuYnRyZWUvUkVBRE1FIGZvciBtb3JlCisgKiBp
bmZvcm1hdGlvbiBvbiBkZWR1cGxpY2F0aW9uIHdpdGhpbiB1bmlxdWUgaW5kZXhlcy4KKyAqCisg
KiBOb3RlIHRoYXQgdW5pcXVlIGluZGV4ZXMgd2lsbCB1c2UgdGhlICFjaGVja2luZ3VuaXF1ZSBz
dHJhdGVneSB3aGVuIGFuCisgKiBpbnNlcnQgb2YgYSB0dXBsZSB3aXRoIE5VTExzIGNhdXNlcyBh
IGRlZHVwbGljYXRpb24gcGFzcy4gIFRoaXMgY2FzZSBpcworICogc3RpbGwgbm90IGFmZmVjdGVk
IGJ5IHRoZSBkZWR1cGxpY2F0ZV9idHJlZV9pdGVtcyBHVUMsIHNpbmNlIHVuaXF1ZSBpbmRleGVz
CisgKiBuZXZlciB1c2UgaXQsIGFuZCBpdCBkb2Vzbid0IHNlZW0gd29ydGggY3JlYXRpbmcgYSBz
cGVjaWFsIGNhc2UgZm9yLgorICoKKyAqIG5idGluc2VydC5jIGNhbGxlciBzaG91bGQgY2FsbCBf
YnRfdmFjdXVtX29uZV9wYWdlKCkgYmVmb3JlIGNhbGxpbmcgaGVyZQorICogd2hlbiBCVFBfSEFT
X0dBUkJBR0UgZmxhZyBpcyBzZXQuICBOb3RlIHRoYXQgdGhpcyByb3V0aW5lIHdpbGwgZGVsZXRl
IGFsbAorICogaXRlbXMgb24gdGhlIHBhZ2UgdGhhdCBoYXZlIHRoZWlyIExQX0RFQUQgYml0IHNl
dCwgZXZlbiB3aGVuIHBhZ2UncyBmbGFnCisgKiBiaXQgaXMgbm90IHNldCAodGhvdWdoIHRoYXQg
c2hvdWxkIGJlIHJhcmUpLiAgQ2FsbGVyIGNhbiByZWx5IG9uIHRoYXQgdG8KKyAqIGF2b2lkIGlu
c2VydGluZyBhIG5ldyB0dXBsZSB0aGF0IGhhcHBlbnMgdG8gb3ZlcmxhcCB3aXRoIGFuIGV4aXN0
aW5nCisgKiBwb3N0aW5nIGxpc3QgdHVwbGUgd2l0aCBpdHMgTFBfREVBRCBiaXQgc2V0LiAoQ2Fs
bGluZyBoZXJlIHdpdGggYSBuZXdpdGVtc3oKKyAqIG9mIDAgd2lsbCByZWxpYWJseSBkZWxldGUg
dGhlIGV4aXN0aW5nIGl0ZW0sIG1ha2luZyBpdCBwb3NzaWJsZSB0byBhdm9pZAorICogdW5zZXR0
aW5nIHRoZSBMUF9ERUFEIGJpdCBqdXN0IHRvIGluc2VydCB0aGUgbmV3IGl0ZW0uICBJbiBnZW5l
cmFsLCBwb3N0aW5nCisgKiBsaXN0IHNwbGl0cyBzaG91bGQgbmV2ZXIgaGF2ZSB0byBkZWFsIHdp
dGggYSBwb3N0aW5nIGxpc3QgdHVwbGUgd2l0aCBpdHMKKyAqIExQX0RFQUQgYml0IHNldC4pCisg
KgorICogTm90ZTogSWYgbmV3aXRlbSBjb250YWlucyBOVUxMIHZhbHVlcyBpbiBrZXkgYXR0cmli
dXRlcywgY2FsbGVyIHdpbGwgYmUKKyAqICFjaGVja2luZ3VuaXF1ZSBldmVuIHdoZW4gcmVsIGlz
IGEgdW5pcXVlIGluZGV4LiAgVGhlIHBhZ2UgaW4gcXVlc3Rpb24gd2lsbAorICogdXN1YWxseSBo
YXZlIG1hbnkgZXhpc3RpbmcgaXRlbXMgd2l0aCBOVUxMcy4KKyAqLwordm9pZAorX2J0X2RlZHVw
X29uZV9wYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgUmVsYXRpb24gaGVhcFJlbCwKKwkJ
CQkgICBJbmRleFR1cGxlIG5ld2l0ZW0sIFNpemUgbmV3aXRlbXN6LCBib29sIGNoZWNraW5ndW5p
cXVlKQoreworCU9mZnNldE51bWJlciBvZmZudW0sCisJCQkJbWlub2ZmLAorCQkJCW1heG9mZjsK
KwlQYWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOworCUJUUGFnZU9wYXF1ZSBvcGFxdWU7
CisJT2Zmc2V0TnVtYmVyIGRlbGV0YWJsZVtNYXhJbmRleFR1cGxlc1BlclBhZ2VdOworCUJURGVk
dXBTdGF0ZSBzdGF0ZTsKKwlpbnQJCQluYXR0cyA9IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZkF0
dHJpYnV0ZXMocmVsKTsKKwlib29sCQltaW5pbWFsID0gY2hlY2tpbmd1bmlxdWU7CisJaW50CQkJ
bmRlbGV0YWJsZSA9IDA7CisJU2l6ZQkJcGFnZXNhdmluZyA9IDA7CisJaW50CQkJcGFnZW5pdGVt
cyA9IDA7CisJYm9vbAkJc2luZ2xldmFsc3RyYXQgPSBmYWxzZTsKKworCS8qCisJICogQ2FsbGVy
IHNob3VsZCBjYWxsIF9idF92YWN1dW1fb25lX3BhZ2UoKSBiZWZvcmUgY2FsbGluZyBoZXJlIHdo
ZW4gaXQKKwkgKiBsb29rZWQgbGlrZSB0aGVyZSB3ZXJlIExQX0RFQUQgaXRlbXMgb24gdGhlIHBh
Z2UuICBIb3dldmVyLCB3ZSBjYW4ndAorCSAqIGFzc3VtZSB0aGF0IHRoZXJlIGFyZSBubyBMUF9E
RUFEIGl0ZW1zIChmb3Igb25lIHRoaW5nLCBWQUNVVU0gd2lsbAorCSAqIGNsZWFyIHRoZSBCVFBf
SEFTX0dBUkJBR0UgaGludCB3aXRob3V0IHJlbGlhYmx5IHJlbW92aW5nIGl0ZW1zIHRoYXQgYXJl
CisJICogbWFya2VkIExQX0RFQUQpLiAgV2UgbXVzdCBiZSBjYXJlZnVsIHRvIGNsZWFyIGFsbCBM
UF9ERUFEIGl0ZW1zIGJlY2F1c2UKKwkgKiBwb3N0aW5nIGxpc3Qgc3BsaXRzIGNhbm5vdCBnbyBh
aGVhZCBpZiBhbiBleGlzdGluZyBwb3N0aW5nIGxpc3QgaXRlbQorCSAqIGhhcyBpdHMgTFBfREVB
RCBiaXQgc2V0LiAoQWxzbywgd2UgZG9uJ3Qgd2FudCB0byB1bm5lY2Vzc2FyaWx5IHVuc2V0CisJ
ICogTFBfREVBRCBiaXRzIHdoZW4gZGVkdXBsaWNhdGluZyBpdGVtcyBvbiB0aGUgcGFnZSBiZWxv
dywgdGhvdWdoIHRoYXQKKwkgKiBzaG91bGQgYmUgaGFybWxlc3MuKQorCSAqCisJICogVGhlIG9w
cG9zaXRlIHByb2JsZW0gaXMgYWxzbyBwb3NzaWJsZTogX2J0X3ZhY3V1bV9vbmVfcGFnZSgpIHdv
bid0CisJICogY2xlYXIgdGhlIEJUUF9IQVNfR0FSQkFHRSBiaXQgd2hlbiBpdCBpcyBmYWxzZWx5
IHNldCAoaS5lLiB3aGVuIHRoZXJlCisJICogYXJlIG5vIExQX0RFQUQgYml0cykuICBUaGlzIHBy
b2JhYmx5IGRvZXNuJ3QgbWF0dGVyIGluIHByYWN0aWNlLCBzaW5jZQorCSAqIGl0J3Mgb25seSBh
IGhpbnQsIGFuZCBWQUNVVU0gd2lsbCBjbGVhciBpdCBhdCBzb21lIHBvaW50IGFueXdheS4gIEV2
ZW4KKwkgKiBzdGlsbCwgd2UgY2xlYXIgdGhlIEJUUF9IQVNfR0FSQkFHRSBoaW50IHJlbGlhYmx5
IGhlcmUuIChTZWVtcyBsaWtlIGEKKwkgKiBnb29kIGlkZWEgZm9yIGRlZHVwbGljYXRpb24gdG8g
b25seSBiZWdpbiB3aGVuIHdlIHVuYW1iaWd1b3VzbHkgaGF2ZSBubworCSAqIExQX0RFQUQgaXRl
bXMuKQorCSAqLworCW9wYXF1ZSA9IChCVFBhZ2VPcGFxdWUpIFBhZ2VHZXRTcGVjaWFsUG9pbnRl
cihwYWdlKTsKKwltaW5vZmYgPSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpOworCW1heG9mZiA9IFBh
Z2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7CisJZm9yIChvZmZudW0gPSBtaW5vZmY7CisJCSBv
ZmZudW0gPD0gbWF4b2ZmOworCQkgb2ZmbnVtID0gT2Zmc2V0TnVtYmVyTmV4dChvZmZudW0pKQor
CXsKKwkJSXRlbUlkCQlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisKKwkJ
aWYgKEl0ZW1JZElzRGVhZChpdGVtaWQpKQorCQkJZGVsZXRhYmxlW25kZWxldGFibGUrK10gPSBv
ZmZudW07CisJfQorCisJaWYgKG5kZWxldGFibGUgPiAwKQorCXsKKwkJX2J0X2RlbGl0ZW1zX2Rl
bGV0ZShyZWwsIGJ1ZiwgZGVsZXRhYmxlLCBuZGVsZXRhYmxlLCBoZWFwUmVsKTsKKworCQkvKgor
CQkgKiBSZXR1cm4gd2hlbiBhIHNwbGl0IHdpbGwgYmUgYXZvaWRlZC4gIFRoaXMgaXMgZXF1aXZh
bGVudCB0bworCQkgKiBhdm9pZGluZyBhIHNwbGl0IHVzaW5nIHRoZSB1c3VhbCBfYnRfdmFjdXVt
X29uZV9wYWdlKCkgcGF0aC4KKwkJICovCisJCWlmIChQYWdlR2V0RnJlZVNwYWNlKHBhZ2UpID49
IG5ld2l0ZW1zeikKKwkJCXJldHVybjsKKworCQkvKgorCQkgKiBSZWNvbnNpZGVyIG51bWJlciBv
ZiBpdGVtcyBvbiBwYWdlLCBpbiBjYXNlIF9idF9kZWxpdGVtc19kZWxldGUoKQorCQkgKiBtYW5h
Z2VkIHRvIGRlbGV0ZSBhbiBpdGVtIG9yIHR3bworCQkgKi8KKwkJbWlub2ZmID0gUF9GSVJTVERB
VEFLRVkob3BhcXVlKTsKKwkJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsK
Kwl9CisJZWxzZSBpZiAoUF9IQVNfR0FSQkFHRShvcGFxdWUpKQorCXsKKwkJb3BhcXVlLT5idHBv
X2ZsYWdzICY9IH5CVFBfSEFTX0dBUkJBR0U7CisJCU1hcmtCdWZmZXJEaXJ0eUhpbnQoYnVmLCB0
cnVlKTsKKwl9CisKKwkvKgorCSAqIFJldHVybiBlYXJseSBpbiBjYXNlIHdoZXJlIGNhbGxlciBq
dXN0IHdhbnRzIHVzIHRvIGtpbGwgYW4gZXhpc3RpbmcKKwkgKiBMUF9ERUFEIHBvc3RpbmcgbGlz
dCB0dXBsZQorCSAqLworCUFzc2VydCghUF9IQVNfR0FSQkFHRShvcGFxdWUpKTsKKwlpZiAobmV3
aXRlbXN6ID09IDApCisJCXJldHVybjsKKworCS8qIFBhc3NlZC1pbiBuZXdpdGVtc3ogaXMgTUFY
QUxJR05FRCBidXQgZG9lcyBub3QgaW5jbHVkZSBsaW5lIHBvaW50ZXIgKi8KKwluZXdpdGVtc3og
Kz0gc2l6ZW9mKEl0ZW1JZERhdGEpOworCisJLyoKKwkgKiBCeSBoZXJlLCBpdCdzIGNsZWFyIHRo
YXQgZGVkdXBsaWNhdGlvbiB3aWxsIGRlZmluaXRlbHkgYmUgYXR0ZW1wdGVkLgorCSAqIEluaXRp
YWxpemUgZGVkdXBsaWNhdGlvbiBzdGF0ZS4KKwkgKgorCSAqIEl0IHdvdWxkIGJlIHBvc3NpYmxl
IGZvciBtYXhwb3N0aW5nc2l6ZSAobGltaXQgb24gcG9zdGluZyBsaXN0IHR1cGxlCisJICogc2l6
ZSkgdG8gYmUgc2V0IHRvIG9uZSB0aGlyZCBvZiB0aGUgcGFnZS4gIEhvd2V2ZXIsIGl0IHNlZW1z
IGxpa2UgYQorCSAqIGdvb2QgaWRlYSB0byBsaW1pdCB0aGUgc2l6ZSBvZiBwb3N0aW5nIGxpc3Rz
IHRvIG9uZSBzaXh0aCBvZiBhIHBhZ2UuCisJICogVGhhdCBvdWdodCB0byBsZWF2ZSB1cyB3aXRo
IGEgZ29vZCBzcGxpdCBwb2ludCB3aGVuIHBhZ2VzIGZ1bGwgb2YKKwkgKiBkdXBsaWNhdGVzIGNh
biBiZSBzcGxpdCBzZXZlcmFsIHRpbWVzLgorCSAqLworCXN0YXRlID0gKEJURGVkdXBTdGF0ZSkg
cGFsbG9jKHNpemVvZihCVERlZHVwU3RhdGVEYXRhKSk7CisJc3RhdGUtPm1heHBvc3RpbmdzaXpl
ID0gTWluKEJUTWF4SXRlbVNpemUocGFnZSkgLyAyLCBJTkRFWF9TSVpFX01BU0spOworCXN0YXRl
LT5jaGVja2luZ3VuaXF1ZSA9IGNoZWNraW5ndW5pcXVlOworCXN0YXRlLT5za2lwcGVkYmFzZSA9
IEludmFsaWRPZmZzZXROdW1iZXI7CisJLyogTWV0YWRhdGEgYWJvdXQgYmFzZSB0dXBsZSBvZiBj
dXJyZW50IHBlbmRpbmcgcG9zdGluZyBsaXN0ICovCisJc3RhdGUtPmJhc2UgPSBOVUxMOworCXN0
YXRlLT5iYXNlb2ZmID0gSW52YWxpZE9mZnNldE51bWJlcjsKKwlzdGF0ZS0+YmFzZXR1cHNpemUg
PSAwOworCS8qIE1ldGFkYXRhIGFib3V0IGN1cnJlbnQgcGVuZGluZyBwb3N0aW5nIGxpc3QgVElE
cyAqLworCXN0YXRlLT5odGlkcyA9IHBhbGxvYyhzdGF0ZS0+bWF4cG9zdGluZ3NpemUpOworCXN0
YXRlLT5uaHRpZHMgPSAwOworCXN0YXRlLT5uaXRlbXMgPSAwOworCS8qIFNpemUgb2YgYWxsIHBo
eXNpY2FsIHR1cGxlcyB0byBiZSByZXBsYWNlZCBieSBwZW5kaW5nIHBvc3RpbmcgbGlzdCAqLwor
CXN0YXRlLT5waHlzdHVwc2l6ZSA9IDA7CisKKwkvKiBEZXRlcm1pbmUgaWYgInNpbmdsZSB2YWx1
ZSIgc3RyYXRlZ3kgc2hvdWxkIGJlIHVzZWQgKi8KKwlpZiAoIWNoZWNraW5ndW5pcXVlKQorCQlz
aW5nbGV2YWxzdHJhdCA9IF9idF9kb19zaW5nbGV2YWwocmVsLCBwYWdlLCBzdGF0ZSwgbWlub2Zm
LCBuZXdpdGVtKTsKKworCW9mZm51bSA9IG1pbm9mZjsKK3JldHJ5OgorCisJLyoKKwkgKiBEZWR1
cGxpY2F0ZSBpdGVtcywgc3RhcnRpbmcgZnJvbSBvZmZudW0uCisJICoKKwkgKiBOb3RlOiBXZSBk
ZWxpYmVyYXRlbHkgcmVhc3Nlc3MgdGhlIG1heCBvZmZzZXQgbnVtYmVyIG9uIGVhY2ggaXRlcmF0
aW9uLgorCSAqIFRoZSBudW1iZXIgb2YgaXRlbXMgb24gdGhlIHBhZ2UgZ29lcyBkb3duIGFzIGV4
aXN0aW5nIGl0ZW1zIGFyZQorCSAqIGRlZHVwbGljYXRlZC4KKwkgKi8KKwl3aGlsZSAob2ZmbnVt
IDw9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSkpCisJeworCQlJdGVtSWQJCWl0ZW1pZCA9
IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKKwkJSW5kZXhUdXBsZQlpdHVwID0gKEluZGV4
VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGl0ZW1pZCk7CisKKwkJQXNzZXJ0KCFJdGVtSWRJc0Rl
YWQoaXRlbWlkKSk7CisKKwkJaWYgKHN0YXRlLT5uaXRlbXMgPT0gMCkKKwkJeworCQkJLyoKKwkJ
CSAqIE5vIHByZXZpb3VzL2Jhc2UgdHVwbGUgZm9yIHRoZSBkYXRhIGl0ZW0gLS0gdXNlIHRoZSBk
YXRhIGl0ZW0KKwkJCSAqIGFzIGJhc2UgdHVwbGUgb2YgcGVuZGluZyBwb3N0aW5nIGxpc3QKKwkJ
CSAqLworCQkJX2J0X2RlZHVwX3N0YXJ0X3BlbmRpbmcoc3RhdGUsIGl0dXAsIG9mZm51bSk7CisJ
CX0KKwkJZWxzZSBpZiAoX2J0X2tlZXBfbmF0dHNfZmFzdChyZWwsIHN0YXRlLT5iYXNlLCBpdHVw
KSA+IG5hdHRzICYmCisJCQkJIF9idF9kZWR1cF9zYXZlX2h0aWQoc3RhdGUsIGl0dXApKQorCQl7
CisJCQkvKgorCQkJICogVHVwbGUgaXMgZXF1YWwgdG8gYmFzZSB0dXBsZSBvZiBwZW5kaW5nIHBv
c3RpbmcgbGlzdC4gIEhlYXAKKwkJCSAqIFRJRChzKSBmb3IgaXR1cCBoYXZlIGJlZW4gc2F2ZWQg
aW4gc3RhdGUuCisJCQkgKi8KKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBUdXBsZSBp
cyBub3QgZXF1YWwgdG8gcGVuZGluZyBwb3N0aW5nIGxpc3QgdHVwbGUsIG9yCisJCQkgKiBfYnRf
ZGVkdXBfc2F2ZV9odGlkKCkgb3B0ZWQgdG8gbm90IG1lcmdlIGN1cnJlbnQgaXRlbSBpbnRvCisJ
CQkgKiBwZW5kaW5nIHBvc3RpbmcgbGlzdCBmb3Igc29tZSBvdGhlciByZWFzb24gKGUuZy4sIGFk
ZGluZyBtb3JlCisJCQkgKiBUSURzIHdvdWxkIGhhdmUgY2F1c2VkIHBvc3RpbmcgbGlzdCB0byBl
eGNlZWQgY3VycmVudAorCQkJICogbWF4cG9zdGluZ3NpemUpLgorCQkJICoKKwkJCSAqIElmIHN0
YXRlIGNvbnRhaW5zIHBlbmRpbmcgcG9zdGluZyBsaXN0IHdpdGggbW9yZSB0aGFuIG9uZSBpdGVt
LAorCQkJICogZm9ybSBuZXcgcG9zdGluZyB0dXBsZSwgYW5kIGFjdHVhbGx5IHVwZGF0ZSB0aGUg
cGFnZS4gIEVsc2UKKwkJCSAqIHJlc2V0IHRoZSBzdGF0ZSBhbmQgbW92ZSBvbiB3aXRob3V0IG1v
ZGlmeWluZyB0aGUgcGFnZS4KKwkJCSAqLworCQkJcGFnZXNhdmluZyArPSBfYnRfZGVkdXBfZmlu
aXNoX3BlbmRpbmcoYnVmLCBzdGF0ZSwKKwkJCQkJCQkJCQkJCSAgIFJlbGF0aW9uTmVlZHNXQUwo
cmVsKSk7CisJCQlwYWdlbml0ZW1zKys7CisKKwkJCWlmIChzaW5nbGV2YWxzdHJhdCkKKwkJCXsK
KwkJCQkvKgorCQkJCSAqIFNpbmdsZSB2YWx1ZSBzdHJhdGVneSdzIGV4dHJhIHN0ZXBzLgorCQkJ
CSAqCisJCQkJICogTG93ZXIgbWF4cG9zdGluZ3NpemUgZm9yIHNpeHRoIGFuZCBmaW5hbCBpdGVt
IHRoYXQgbWlnaHQgYmUKKwkJCQkgKiBkZWR1cGxpY2F0ZWQgYnkgY3VycmVudCBkZWR1cGxpY2F0
aW9uIHBhc3MuICBXaGVuIHNpeHRoCisJCQkJICogaXRlbSBmb3JtZWQvb2JzZXJ2ZWQsIGVuZCBw
YXNzLgorCQkJCSAqCisJCQkJICogTm90ZTogSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgd2lsbCBi
ZSByZWFjaGVkIGV2ZW4gd2hlbgorCQkJCSAqIGN1cnJlbnQgZGVkdXBsaWNhdGlvbiBwYXNzIGhh
cyB5ZXQgdG8gbW9kaWZ5IHRoZSBwYWdlLiAgSXQKKwkJCQkgKiBkb2Vzbid0IG1hdHRlciB3aGV0
aGVyIG9yIG5vdCB0aGUgY3VycmVudCBjYWxsIGdlbmVyYXRlZAorCQkJCSAqIHRoZSBtYXhwb3N0
aW5nc2l6ZS1jYXBwZWQgZHVwbGljYXRlIHR1cGxlcyBhdCB0aGUgc3RhcnQgb2YKKwkJCQkgKiB0
aGUgcGFnZS4KKwkJCQkgKi8KKwkJCQlBc3NlcnQoIW1pbmltYWwgJiYgcGFnZW5pdGVtcyA8PSA2
KTsKKwkJCQlpZiAocGFnZW5pdGVtcyA9PSA1KQorCQkJCQlfYnRfc2luZ2xldmFsX2ZpbGxmYWN0
b3IocGFnZSwgc3RhdGUsIG5ld2l0ZW1zeik7CisJCQkJZWxzZSBpZiAocGFnZW5pdGVtcyA9PSA2
KQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFN0b3AgZGVkdXBsaWNhdGluZyBm
b3IgYSBjaGVja2luZ3VuaXF1ZSAobWluaW1hbCkgY2FsbGVyIG9uY2UKKwkJCSAqIHdlJ3ZlIGZy
ZWVkIGVub3VnaCBzcGFjZSB0byBhdm9pZCBhbiBpbW1lZGlhdGUgcGFnZSBzcGxpdAorCQkJICov
CisJCQllbHNlIGlmIChtaW5pbWFsICYmIHBhZ2VzYXZpbmcgPj0gbmV3aXRlbXN6KQorCQkJCWJy
ZWFrOworCisJCQkvKgorCQkJICogTmV4dCBpdGVyYXRpb24gc3RhcnRzIGltbWVkaWF0ZWx5IGFm
dGVyIGJhc2UgdHVwbGUgb2Zmc2V0ICh0aGlzCisJCQkgKiB3aWxsIGJlIHRoZSBuZXh0IG9mZnNl
dCBvbiB0aGUgcGFnZSB3aGVuIHdlIGRpZG4ndCBtb2RpZnkgdGhlCisJCQkgKiBwYWdlKQorCQkJ
ICovCisJCQlvZmZudW0gPSBzdGF0ZS0+YmFzZW9mZjsKKwkJfQorCisJCW9mZm51bSA9IE9mZnNl
dE51bWJlck5leHQob2ZmbnVtKTsKKwl9CisKKwkvKiBIYW5kbGUgdGhlIGxhc3QgaXRlbSB3aGVu
IHBlbmRpbmcgcG9zdGluZyBsaXN0IGlzIG5vdCBlbXB0eSAqLworCWlmIChzdGF0ZS0+bml0ZW1z
ICE9IDApCisJeworCQlwYWdlc2F2aW5nICs9IF9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhidWYs
IHN0YXRlLAorCQkJCQkJCQkJCQkgICBSZWxhdGlvbk5lZWRzV0FMKHJlbCkpOworCQlwYWdlbml0
ZW1zKys7CisJfQorCisJaWYgKHBhZ2VzYXZpbmcgPCBuZXdpdGVtc3ogJiYgc3RhdGUtPnNraXBw
ZWRiYXNlICE9IEludmFsaWRPZmZzZXROdW1iZXIpCisJeworCQkvKgorCQkgKiBEaWRuJ3QgZnJl
ZSBlbm91Z2ggc3BhY2UgZm9yIG5ldyBpdGVtIGluIGZpcnN0IGNoZWNraW5ndW5pcXVlIHBhc3Mu
CisJCSAqIFRyeSBtYWtpbmcgYSBzZWNvbmQgcGFzcyBvdmVyIHRoZSBwYWdlLCB0aGlzIHRpbWUg
c3RhcnRpbmcgZnJvbSB0aGUKKwkJICogZmlyc3QgY2FuZGlkYXRlIHBvc3RpbmcgbGlzdCBiYXNl
IG9mZnNldCB0aGF0IHdhcyBza2lwcGVkIG92ZXIgaW4KKwkJICogdGhlIGZpcnN0IHBhc3MgKG9u
bHkgZG8gYSBzZWNvbmQgcGFzcyB3aGVuIHRoaXMgYWN0dWFsbHkgaGFwcGVuZWQpLgorCQkgKgor
CQkgKiBUaGUgc2Vjb25kIHBhc3Mgb3ZlciB0aGUgcGFnZSBtYXkgZGVkdXBsaWNhdGUgaXRlbXMg
dGhhdCB3ZXJlCisJCSAqIGluaXRpYWxseSBwYXNzZWQgb3ZlciBkdWUgdG8gY29uY2VybnMgYWJv
dXQgbGltaXRpbmcgdGhlCisJCSAqIGVmZmVjdGl2ZW5lc3Mgb2YgTFBfREVBRCBiaXQgc2V0dGlu
ZyB3aXRoaW4gX2J0X2NoZWNrX3VuaXF1ZSgpLgorCQkgKiBOb3RlIHRoYXQgdGhlIHNlY29uZCBw
YXNzIHdpbGwgc3RpbGwgc3RvcCBkZWR1cGxpY2F0aW5nIGFzIHNvb24gYXMKKwkJICogZW5vdWdo
IHNwYWNlIGhhcyBiZWVuIGZyZWVkIHRvIGF2b2lkIGFuIGltbWVkaWF0ZSBwYWdlIHNwbGl0Lgor
CQkgKi8KKwkJb2ZmbnVtID0gc3RhdGUtPnNraXBwZWRiYXNlOworCQlwYWdlbml0ZW1zID0gMDsK
KworCQlBc3NlcnQoc3RhdGUtPmNoZWNraW5ndW5pcXVlKTsKKwkJc3RhdGUtPmNoZWNraW5ndW5p
cXVlID0gZmFsc2U7CisJCXN0YXRlLT5za2lwcGVkYmFzZSA9IEludmFsaWRPZmZzZXROdW1iZXI7
CisKKwkJZ290byByZXRyeTsKKwl9CisKKwkvKiBMb2NhbCBzcGFjZSBhY2NvdW50aW5nIHNob3Vs
ZCBhZ3JlZSB3aXRoIHBhZ2UgYWNjb3VudGluZyAqLworCUFzc2VydChwYWdlc2F2aW5nIDwgbmV3
aXRlbXN6IHx8IFBhZ2VHZXRFeGFjdEZyZWVTcGFjZShwYWdlKSA+PSBuZXdpdGVtc3opOworCisJ
LyogY2Fubm90IGxlYWsgbWVtb3J5IGhlcmUgKi8KKwlwZnJlZShzdGF0ZS0+aHRpZHMpOworCXBm
cmVlKHN0YXRlKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIG5ldyBwZW5kaW5nIHBvc3RpbmcgbGlz
dCB0dXBsZSBiYXNlZCBvbiBjYWxsZXIncyBiYXNlIHR1cGxlLgorICoKKyAqIEV2ZXJ5IHR1cGxl
IHByb2Nlc3NlZCBieSBkZWR1cGxpY2F0aW9uIGVpdGhlciBiZWNvbWVzIHRoZSBiYXNlIHR1cGxl
IGZvciBhCisgKiBwb3N0aW5nIGxpc3QsIG9yIGdldHMgaXRzIGhlYXAgVElEKHMpIGFjY2VwdGVk
IGludG8gYSBwZW5kaW5nIHBvc3RpbmcgbGlzdC4KKyAqIEEgdHVwbGUgdGhhdCBzdGFydHMgb3V0
IGFzIHRoZSBiYXNlIHR1cGxlIGZvciBhIHBvc3RpbmcgbGlzdCB3aWxsIG9ubHkKKyAqIGFjdHVh
bGx5IGJlIHJld3JpdHRlbiB3aXRoaW4gX2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKCkgd2hlbiBp
dCB0dXJucyBvdXQKKyAqIHRoYXQgdGhlcmUgYXJlIGR1cGxpY2F0ZXMgdGhhdCBjYW4gYmUgbWVy
Z2VkIGludG8gdGhlIGJhc2UgdHVwbGUuCisgKi8KK3ZvaWQKK19idF9kZWR1cF9zdGFydF9wZW5k
aW5nKEJURGVkdXBTdGF0ZSBzdGF0ZSwgSW5kZXhUdXBsZSBiYXNlLAorCQkJCQkJT2Zmc2V0TnVt
YmVyIGJhc2VvZmYpCit7CisJQXNzZXJ0KHN0YXRlLT5uaHRpZHMgPT0gMCk7CisJQXNzZXJ0KHN0
YXRlLT5uaXRlbXMgPT0gMCk7CisJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQaXZvdChiYXNlKSk7CisK
KwkvKgorCSAqIENvcHkgaGVhcCBUSUQocykgZnJvbSBuZXcgYmFzZSB0dXBsZSBmb3IgbmV3IGNh
bmRpZGF0ZSBwb3N0aW5nIGxpc3QKKwkgKiBpbnRvIHdvcmtpbmcgc3RhdGUncyBhcnJheQorCSAq
LworCWlmICghQlRyZWVUdXBsZUlzUG9zdGluZyhiYXNlKSkKKwl7CisJCW1lbWNweShzdGF0ZS0+
aHRpZHMsIGJhc2UsIHNpemVvZihJdGVtUG9pbnRlckRhdGEpKTsKKwkJc3RhdGUtPm5odGlkcyA9
IDE7CisJCXN0YXRlLT5iYXNldHVwc2l6ZSA9IEluZGV4VHVwbGVTaXplKGJhc2UpOworCX0KKwll
bHNlCisJeworCQlpbnQJCQlucG9zdGluZzsKKworCQlucG9zdGluZyA9IEJUcmVlVHVwbGVHZXRO
UG9zdGluZyhiYXNlKTsKKwkJbWVtY3B5KHN0YXRlLT5odGlkcywgQlRyZWVUdXBsZUdldFBvc3Rp
bmcoYmFzZSksCisJCQkgICBzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSAqIG5wb3N0aW5nKTsKKwkJ
c3RhdGUtPm5odGlkcyA9IG5wb3N0aW5nOworCQkvKiBiYXNldHVwc2l6ZSBzaG91bGQgbm90IGlu
Y2x1ZGUgZXhpc3RpbmcgcG9zdGluZyBsaXN0ICovCisJCXN0YXRlLT5iYXNldHVwc2l6ZSA9IEJU
cmVlVHVwbGVHZXRQb3N0aW5nT2Zmc2V0KGJhc2UpOworCX0KKworCS8qCisJICogU2F2ZSBuZXcg
YmFzZSB0dXBsZSBpdHNlbGYgLS0gaXQnbGwgYmUgbmVlZGVkIGlmIHdlIGFjdHVhbGx5IGNyZWF0
ZSBhCisJICogbmV3IHBvc3RpbmcgbGlzdCBmcm9tIG5ldyBwZW5kaW5nIHBvc3RpbmcgbGlzdC4K
KwkgKgorCSAqIE11c3QgbWFpbnRhaW4gcGh5c2ljYWwgc2l6ZSBvZiBhbGwgZXhpc3RpbmcgdHVw
bGVzIChpbmNsdWRpbmcgbGluZQorCSAqIHBvaW50ZXIgb3ZlcmhlYWQpIHNvIHRoYXQgd2UgY2Fu
IGNhbGN1bGF0ZSBzcGFjZSBzYXZpbmdzIG9uIHBhZ2UuCisJICovCisJc3RhdGUtPm5pdGVtcyA9
IDE7CisJc3RhdGUtPmJhc2UgPSBiYXNlOworCXN0YXRlLT5iYXNlb2ZmID0gYmFzZW9mZjsKKwlz
dGF0ZS0+cGh5c3R1cHNpemUgPSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShiYXNlKSkgKyBzaXpl
b2YoSXRlbUlkRGF0YSk7Cit9CisKKy8qCisgKiBTYXZlIGl0dXAgaGVhcCBUSUQocykgaW50byBw
ZW5kaW5nIHBvc3RpbmcgbGlzdCB3aGVyZSBwb3NzaWJsZS4KKyAqCisgKiBSZXR1cm5zIGJvb2wg
aW5kaWNhdGluZyBpZiB0aGUgcGVuZGluZyBwb3N0aW5nIGxpc3QgbWFuYWdlZCBieSBzdGF0ZSBu
b3cKKyAqIGluY2x1ZGVzIGl0dXAncyBoZWFwIFRJRChzKS4KKyAqLworYm9vbAorX2J0X2RlZHVw
X3NhdmVfaHRpZChCVERlZHVwU3RhdGUgc3RhdGUsIEluZGV4VHVwbGUgaXR1cCkKK3sKKwlpbnQJ
CQluaHRpZHM7CisJSXRlbVBvaW50ZXIgaHRpZHM7CisJU2l6ZQkJbWVyZ2VkdHVwc3o7CisKKwlB
c3NlcnQoIUJUcmVlVHVwbGVJc1Bpdm90KGl0dXApKTsKKworCWlmICghQlRyZWVUdXBsZUlzUG9z
dGluZyhpdHVwKSkKKwl7CisJCW5odGlkcyA9IDE7CisJCWh0aWRzID0gJml0dXAtPnRfdGlkOwor
CX0KKwllbHNlCisJeworCQluaHRpZHMgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7CisJ
CWh0aWRzID0gQlRyZWVUdXBsZUdldFBvc3RpbmcoaXR1cCk7CisJfQorCisJLyoKKwkgKiBEb24n
dCBhcHBlbmQgKGhhdmUgY2FsbGVyIGZpbmlzaCBwZW5kaW5nIHBvc3RpbmcgbGlzdCBhcy1pcykg
aWYKKwkgKiBhcHBlbmRpbmcgaGVhcCBUSUQocykgZnJvbSBpdHVwIHdvdWxkIHB1dCB1cyBvdmVy
IG1heHBvc3RpbmdzaXplIGxpbWl0LgorCSAqCisJICogVGhpcyBjYWxjdWxhdGlvbiBuZWVkcyB0
byBtYXRjaCB0aGUgY29kZSB1c2VkIHdpdGhpbiBfYnRfZm9ybV9wb3N0aW5nKCkKKwkgKiBmb3Ig
bmV3IHBvc3RpbmcgbGlzdCB0dXBsZXMuCisJICovCisJbWVyZ2VkdHVwc3ogPSBNQVhBTElHTihz
dGF0ZS0+YmFzZXR1cHNpemUgKworCQkJCQkJICAgKHN0YXRlLT5uaHRpZHMgKyBuaHRpZHMpICog
c2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSkpOworCisJaWYgKG1lcmdlZHR1cHN6ID4gc3RhdGUtPm1h
eHBvc3RpbmdzaXplKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBEb24ndCBtZXJnZSBleGlzdGlu
ZyBwb3N0aW5nIGxpc3RzIGluIGZpcnN0IGNoZWNraW5ndW5pcXVlIHBhc3MgKi8KKwlpZiAoc3Rh
dGUtPmNoZWNraW5ndW5pcXVlICYmCisJCShCVHJlZVR1cGxlSXNQb3N0aW5nKHN0YXRlLT5iYXNl
KSB8fCBuaHRpZHMgPiAxKSkKKwl7CisJCS8qIE1heSBiZWdpbiBoZXJlIGlmIHNlY29uZCBwYXNz
IG92ZXIgcGFnZSBpcyByZXF1aXJlZCAqLworCQlpZiAoc3RhdGUtPnNraXBwZWRiYXNlID09IElu
dmFsaWRPZmZzZXROdW1iZXIpCisJCQlzdGF0ZS0+c2tpcHBlZGJhc2UgPSBzdGF0ZS0+YmFzZW9m
ZjsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogU2F2ZSBoZWFwIFRJRHMgdG8gcGVu
ZGluZyBwb3N0aW5nIGxpc3QgdHVwbGUgLS0gaXR1cCBjYW4gYmUgbWVyZ2VkIGludG8KKwkgKiBw
ZW5kaW5nIHBvc3RpbmcgbGlzdAorCSAqLworCXN0YXRlLT5uaXRlbXMrKzsKKwltZW1jcHkoc3Rh
dGUtPmh0aWRzICsgc3RhdGUtPm5odGlkcywgaHRpZHMsCisJCSAgIHNpemVvZihJdGVtUG9pbnRl
ckRhdGEpICogbmh0aWRzKTsKKwlzdGF0ZS0+bmh0aWRzICs9IG5odGlkczsKKwlzdGF0ZS0+cGh5
c3R1cHNpemUgKz0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUoaXR1cCkpICsgc2l6ZW9mKEl0ZW1J
ZERhdGEpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBGaW5hbGl6ZSBwZW5kaW5nIHBv
c3RpbmcgbGlzdCB0dXBsZSwgYW5kIGFkZCBpdCB0byB0aGUgcGFnZS4gIEZpbmFsIHR1cGxlCisg
KiBpcyBiYXNlZCBvbiBzYXZlZCBiYXNlIHR1cGxlLCBhbmQgc2F2ZWQgbGlzdCBvZiBoZWFwIFRJ
RHMuCisgKgorICogUmV0dXJucyBzcGFjZSBzYXZpbmcgZnJvbSBkZWR1cGxpY2F0aW5nIHRvIG1h
a2UgYSBuZXcgcG9zdGluZyBsaXN0IHR1cGxlLgorICogTm90ZSB0aGF0IHRoaXMgaW5jbHVkZXMg
bGluZSBwb2ludGVyIG92ZXJoZWFkLiAgVGhpcyBpcyB6ZXJvIGluIHRoZSBjYXNlCisgKiB3aGVy
ZSBubyBkZWR1cGxpY2F0aW9uIHdhcyBwb3NzaWJsZS4KKyAqLworU2l6ZQorX2J0X2RlZHVwX2Zp
bmlzaF9wZW5kaW5nKEJ1ZmZlciBidWYsIEJURGVkdXBTdGF0ZSBzdGF0ZSwgYm9vbCBsb2dnZWQp
Cit7CisJU2l6ZQkJc3BhY2VzYXZpbmcgPSAwOworCVBhZ2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdl
KGJ1Zik7CisJaW50CQkJbWluaW11bSA9IDI7CisKKwlBc3NlcnQoc3RhdGUtPm5pdGVtcyA+IDAp
OworCUFzc2VydChzdGF0ZS0+bml0ZW1zIDw9IHN0YXRlLT5uaHRpZHMpOworCisJLyoKKwkgKiBP
bmx5IGNyZWF0ZSBhIHBvc3RpbmcgbGlzdCB3aGVuIGF0IGxlYXN0IDMgaGVhcCBUSURzIHdpbGwg
YXBwZWFyIGluIHRoZQorCSAqIGNoZWNraW5ndW5pcXVlIGNhc2UgKGNoZWNraW5ndW5pcXVlIHN0
cmF0ZWd5IHdvbid0IG1lcmdlIGV4aXN0aW5nCisJICogcG9zdGluZyBsaXN0IHR1cGxlcywgc28g
d2Uga25vdyB0aGF0IHRoZSBudW1iZXIgb2YgaXRlbXMgaGVyZSBtdXN0IGFsc28KKwkgKiBiZSB0
aGUgdG90YWwgbnVtYmVyIG9mIGhlYXAgVElEcykuICBDcmVhdGluZyBhIG5ldyBwb3N0aW5nIGxp
c3RzIHdpdGgKKwkgKiBvbmx5IHR3byBoZWFwIFRJRHMgd29uJ3QgZXZlbiBzYXZlIGVub3VnaCBz
cGFjZSB0byBmaXQgYW5vdGhlcgorCSAqIGR1cGxpY2F0ZSB3aXRoIHRoZSBzYW1lIGtleSBhcyB0
aGUgcG9zdGluZyBsaXN0LiAgVGhpcyBpcyBhIGJhZAorCSAqIHRyYWRlLW9mZiBpZiB0aGVyZSBp
cyBhIGNoYW5jZSB0aGF0IHRoZSBMUF9ERUFEIGJpdCBjYW4gYmUgc2V0IGZvcgorCSAqIGVpdGhl
ciBleGlzdGluZyB0dXBsZSBieSBwdXR0aW5nIG9mZiBkZWR1cGxpY2F0aW9uLgorCSAqCisJICog
KE5vdGUgdGhhdCBhIHNlY29uZCBwYXNzIG92ZXIgdGhlIHBhZ2UgY2FuIGRlZHVwbGljYXRlIHRo
ZSBpdGVtIGlmIHRoYXQKKwkgKiBpcyB0cnVseSB0aGUgb25seSB3YXkgdG8gYXZvaWQgYSBwYWdl
IHNwbGl0IGZvciBjaGVja2luZ3VuaXF1ZSBjYWxsZXIuKQorCSAqLworCUFzc2VydCghc3RhdGUt
PmNoZWNraW5ndW5pcXVlIHx8IHN0YXRlLT5uaXRlbXMgPT0gMSB8fAorCQkgICBzdGF0ZS0+bmh0
aWRzID09IHN0YXRlLT5uaXRlbXMpOworCWlmIChzdGF0ZS0+Y2hlY2tpbmd1bmlxdWUpCisJewor
CQltaW5pbXVtID0gMzsKKwkJLyogTWF5IGJlZ2luIGhlcmUgaWYgc2Vjb25kIHBhc3Mgb3ZlciBw
YWdlIGlzIHJlcXVpcmVkICovCisJCWlmIChzdGF0ZS0+bml0ZW1zID09IDIgJiYgc3RhdGUtPnNr
aXBwZWRiYXNlID09IEludmFsaWRPZmZzZXROdW1iZXIpCisJCQlzdGF0ZS0+c2tpcHBlZGJhc2Ug
PSBzdGF0ZS0+YmFzZW9mZjsKKwl9CisKKwlpZiAoc3RhdGUtPm5pdGVtcyA+PSBtaW5pbXVtKQor
CXsKKwkJT2Zmc2V0TnVtYmVyIGRlbGV0YWJsZVtNYXhJbmRleFR1cGxlc1BlclBhZ2VdOworCQlp
bnQJCQluZGVsZXRhYmxlID0gMDsKKwkJT2Zmc2V0TnVtYmVyIG9mZm51bTsKKwkJSW5kZXhUdXBs
ZQlmaW5hbDsKKwkJU2l6ZQkJZmluYWxzejsKKworCQkvKiBmaW5kIGFsbCB0dXBsZXMgdGhhdCB3
aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhpcyBuZXcgcG9zdGluZyB0dXBsZSAqLworCQlmb3IgKG9m
Zm51bSA9IHN0YXRlLT5iYXNlb2ZmOworCQkJIG9mZm51bSA8IHN0YXRlLT5iYXNlb2ZmICsgc3Rh
dGUtPm5pdGVtczsKKwkJCSBvZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KG9mZm51bSkpCisJCQlk
ZWxldGFibGVbbmRlbGV0YWJsZSsrXSA9IG9mZm51bTsKKworCQkvKiBGb3JtIGEgdHVwbGUgd2l0
aCBhIHBvc3RpbmcgbGlzdCAqLworCQlmaW5hbCA9IF9idF9mb3JtX3Bvc3Rpbmcoc3RhdGUtPmJh
c2UsIHN0YXRlLT5odGlkcywgc3RhdGUtPm5odGlkcyk7CisJCWZpbmFsc3ogPSBJbmRleFR1cGxl
U2l6ZShmaW5hbCk7CisJCXNwYWNlc2F2aW5nID0gc3RhdGUtPnBoeXN0dXBzaXplIC0gKGZpbmFs
c3ogKyBzaXplb2YoSXRlbUlkRGF0YSkpOworCQkvKiBNdXN0IHNhdmUgc29tZSBzcGFjZSwgYW5k
IG11c3Qgbm90IGV4Y2VlZCB0dXBsZSBsaW1pdHMgKi8KKwkJQXNzZXJ0KHNwYWNlc2F2aW5nID4g
MCAmJiBzcGFjZXNhdmluZyA8IEJMQ0tTWik7CisJCUFzc2VydChmaW5hbHN6IDw9IHN0YXRlLT5t
YXhwb3N0aW5nc2l6ZSk7CisJCUFzc2VydChmaW5hbHN6ID09IE1BWEFMSUdOKEluZGV4VHVwbGVT
aXplKGZpbmFsKSkpOworCisJCVNUQVJUX0NSSVRfU0VDVElPTigpOworCisJCS8qIERlbGV0ZSBv
cmlnaW5hbCBpdGVtcyAqLworCQlQYWdlSW5kZXhNdWx0aURlbGV0ZShwYWdlLCBkZWxldGFibGUs
IG5kZWxldGFibGUpOworCQkvKiBJbnNlcnQgcG9zdGluZyB0dXBsZSwgcmVwbGFjaW5nIG9yaWdp
bmFsIGl0ZW1zICovCisJCWlmIChQYWdlQWRkSXRlbShwYWdlLCAoSXRlbSkgZmluYWwsIGZpbmFs
c3osIHN0YXRlLT5iYXNlb2ZmLCBmYWxzZSwKKwkJCQkJCWZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0
TnVtYmVyKQorCQkJZWxvZyhFUlJPUiwgImRlZHVwbGljYXRpb24gZmFpbGVkIHRvIGFkZCB0dXBs
ZSB0byBwYWdlIik7CisKKwkJTWFya0J1ZmZlckRpcnR5KGJ1Zik7CisKKwkJLyogTG9nIGRlZHVw
bGljYXRlZCBpdGVtcyAqLworCQlpZiAobG9nZ2VkKQorCQl7CisJCQlYTG9nUmVjUHRyCXJlY3B0
cjsKKwkJCXhsX2J0cmVlX2RlZHVwIHhscmVjX2RlZHVwOworCisJCQl4bHJlY19kZWR1cC5iYXNl
b2ZmID0gc3RhdGUtPmJhc2VvZmY7CisJCQl4bHJlY19kZWR1cC5uaXRlbXMgPSBzdGF0ZS0+bml0
ZW1zOworCisJCQlYTG9nQmVnaW5JbnNlcnQoKTsKKwkJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBi
dWYsIFJFR0JVRl9TVEFOREFSRCk7CisJCQlYTG9nUmVnaXN0ZXJEYXRhKChjaGFyICopICZ4bHJl
Y19kZWR1cCwgU2l6ZU9mQnRyZWVEZWR1cCk7CisKKwkJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1f
QlRSRUVfSUQsIFhMT0dfQlRSRUVfREVEVVBfUEFHRSk7CisKKwkJCVBhZ2VTZXRMU04ocGFnZSwg
cmVjcHRyKTsKKwkJfQorCisJCUVORF9DUklUX1NFQ1RJT04oKTsKKworCQlwZnJlZShmaW5hbCk7
CisJfQorCisJLyogUmVzZXQgc3RhdGUgZm9yIG5leHQgcGVuZGluZyBwb3N0aW5nIGxpc3QgKi8K
KwlzdGF0ZS0+bmh0aWRzID0gMDsKKwlzdGF0ZS0+bml0ZW1zID0gMDsKKwlzdGF0ZS0+cGh5c3R1
cHNpemUgPSAwOworCisJcmV0dXJuIHNwYWNlc2F2aW5nOworfQorCisvKgorICogRGV0ZXJtaW5l
IGlmIHBhZ2Ugbm9uLXBpdm90IHR1cGxlcyAoZGF0YSBpdGVtcykgYXJlIGFsbCBkdXBsaWNhdGVz
IG9mIHRoZQorICogc2FtZSB2YWx1ZSAtLSBpZiB0aGV5IGFyZSwgZGVkdXBsaWNhdGlvbidzICJz
aW5nbGUgdmFsdWUiIHN0cmF0ZWd5IHNob3VsZAorICogYmUgYXBwbGllZC4gIFRoZSBnZW5lcmFs
IGdvYWwgb2YgdGhpcyBzdHJhdGVneSBpcyB0byBlbnN1cmUgdGhhdAorICogbmJ0c3BsaXRsb2Mu
YyAod2hpY2ggdXNlcyBpdHMgb3duIHNpbmdsZSB2YWx1ZSBzdHJhdGVneSkgd2lsbCBmaW5kIGEg
dXNlZnVsCisgKiBzcGxpdCBwb2ludCBhcyBmdXJ0aGVyIGR1cGxpY2F0ZXMgYXJlIGluc2VydGVk
LCBhbmQgc3VjY2Vzc2l2ZSByaWdodG1vc3QKKyAqIHBhZ2Ugc3BsaXRzIG9jY3VyIGFtb25nIHBh
Z2VzIHRoYXQgc3RvcmUgdGhlIHNhbWUgZHVwbGljYXRlIHZhbHVlLiAgV2hlbgorICogdGhlIHBh
Z2UgZmluYWxseSBzcGxpdHMsIGl0IHNob3VsZCBlbmQgdXAgQlRSRUVfU0lOR0xFVkFMX0ZJTExG
QUNUT1IlIGZ1bGwsCisgKiBqdXN0IGxpa2UgaXQgd291bGQgaWYgZGVkdXBsaWNhdGlvbiB3ZXJl
IGRpc2FibGVkLgorICoKKyAqIFdlIGV4cGVjdCB0aGF0IGFmZmVjdGVkIHdvcmtsb2FkcyB3aWxs
IHJlcXVpcmUgX3NldmVyYWxfIHNpbmdsZSB2YWx1ZQorICogc3RyYXRlZ3kgZGVkdXBsaWNhdGlv
biBwYXNzZXMgKG92ZXIgYSBwYWdlIHRoYXQgb25seSBzdG9yZXMgZHVwbGljYXRlcykKKyAqIGJl
Zm9yZSB0aGUgcGFnZSBpcyBmaW5hbGx5IHNwbGl0LiAgVGhlIGZpcnN0IGRlZHVwbGljYXRpb24g
cGFzcyBzaG91bGQgb25seQorICogZmluZCByZWd1bGFyIG5vbi1waXZvdCB0dXBsZXMuICBMYXRl
ciBkZWR1cGxpY2F0aW9uIHBhc3NlcyB3aWxsIGZpbmQKKyAqIGV4aXN0aW5nIG1heHBvc3Rpbmdz
aXplLWNhcHBlZCBwb3N0aW5nIGxpc3QgdHVwbGVzLCB3aGljaCBtdXN0IGJlIHNraXBwZWQKKyAq
IG92ZXIuICBUaGUgcGVudWx0aW1hdGUgcGFzcyBpcyBnZW5lcmFsbHkgdGhlIGZpcnN0IHBhc3Mg
dGhhdCBhY3R1YWxseQorICogcmVhY2hlcyBfYnRfc2luZ2xldmFsX2ZpbGxmYWN0b3IoKSwgYW5k
IHNvIHdpbGwgZGVsaWJlcmF0ZWx5IGxlYXZlIGJlaGluZCBhCisgKiBmZXcgdW50b3VjaGVkIG5v
bi1waXZvdCB0dXBsZXMuICBUaGUgZmluYWwgZGVkdXBsaWNhdGlvbiBwYXNzIHdvbid0IGZyZWUK
KyAqIGFueSBzcGFjZSAtLSBpdCB3aWxsIHNraXAgb3ZlciBldmVyeXRoaW5nIHdpdGhvdXQgbWVy
Z2luZyBhbnl0aGluZyAoaXQKKyAqIHJldHJhY2VzIHRoZSBzdGVwcyBvZiB0aGUgcGVudWx0aW1h
dGUgcGFzcykuCisgKgorICogRm9ydHVuYXRlbHksIGhhdmluZyBzZXZlcmFsIHBhc3NlcyBpc24n
dCB0b28gZXhwZW5zaXZlLiAgRWFjaCBwYXNzIChhZnRlcgorICogdGhlIGZpcnN0IHBhc3MpIHdv
bid0IHNwZW5kIG1hbnkgY3ljbGVzIG9uIHRoZSBsYXJnZSBwb3N0aW5nIGxpc3QgdHVwbGVzCisg
KiBsZWZ0IGJ5IHByZXZpb3VzIHBhc3Nlcy4gIEVhY2ggcGFzcyB3aWxsIGZpbmQgYSBsYXJnZSBj
b250aWd1b3VzIGdyb3VwIG9mCisgKiBzbWFsbGVyIGR1cGxpY2F0ZSB0dXBsZXMgdG8gbWVyZ2Ug
dG9nZXRoZXIgYXQgdGhlIGVuZCBvZiB0aGUgcGFnZS4KKyAqCisgKiBOb3RlOiBXZSBkZWxpYmVy
YXRlbHkgZG9uJ3QgYm90aGVyIGNoZWNraW5nIGlmIHRoZSBoaWdoIGtleSBpcyBhIGRpc3RpbmN0
CisgKiB2YWx1ZSAocHJpb3IgdG8gdGhlIFRJRCB0aWVicmVha2VyIGNvbHVtbikgYmVmb3JlIHBy
b2NlZWRpbmcsIHVubGlrZQorICogbmJ0c3BsaXRsb2MuYy4gIEl0cyBzaW5nbGUgdmFsdWUgc3Ry
YXRlZ3kgb25seSBnZXRzIGFwcGxpZWQgb24gdGhlCisgKiByaWdodG1vc3QgcGFnZSBvZiBkdXBs
aWNhdGVzIG9mIHRoZSBzYW1lIHZhbHVlIChvdGhlciBsZWFmIHBhZ2VzIGZ1bGwgb2YKKyAqIGR1
cGxpY2F0ZXMgd2lsbCBnZXQgYSBzaW1wbGUgNTA6NTAgcGFnZSBzcGxpdCBpbnN0ZWFkIG9mIHNw
bGl0dGluZyB0b3dhcmRzCisgKiB0aGUgZW5kIG9mIHRoZSBwYWdlKS4gIFRoZXJlIGlzIGxpdHRs
ZSBwb2ludCBpbiBtYWtpbmcgdGhlIHNhbWUgZGlzdGluY3Rpb24KKyAqIGhlcmUuCisgKi8KK3N0
YXRpYyBib29sCitfYnRfZG9fc2luZ2xldmFsKFJlbGF0aW9uIHJlbCwgUGFnZSBwYWdlLCBCVERl
ZHVwU3RhdGUgc3RhdGUsCisJCQkJIE9mZnNldE51bWJlciBtaW5vZmYsIEluZGV4VHVwbGUgbmV3
aXRlbSkKK3sKKwlpbnQJCQluYXR0cyA9IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZkF0dHJpYnV0
ZXMocmVsKTsKKwlJdGVtSWQJCWl0ZW1pZDsKKwlJbmRleFR1cGxlCWl0dXA7CisKKwlpdGVtaWQg
PSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG1pbm9mZik7CisJaXR1cCA9IChJbmRleFR1cGxlKSBQYWdl
R2V0SXRlbShwYWdlLCBpdGVtaWQpOworCisJaWYgKF9idF9rZWVwX25hdHRzX2Zhc3QocmVsLCBu
ZXdpdGVtLCBpdHVwKSA+IG5hdHRzKQorCXsKKwkJaXRlbWlkID0gUGFnZUdldEl0ZW1JZChwYWdl
LCBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpKTsKKwkJaXR1cCA9IChJbmRleFR1cGxlKSBQ
YWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpOworCisJCWlmIChfYnRfa2VlcF9uYXR0c19mYXN0KHJl
bCwgbmV3aXRlbSwgaXR1cCkgPiBuYXR0cykKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVy
biBmYWxzZTsKK30KKworLyoKKyAqIExvd2VyIG1heHBvc3RpbmdzaXplIHdoZW4gdXNpbmcgInNp
bmdsZSB2YWx1ZSIgc3RyYXRlZ3ksIHRvIGF2b2lkIGEgc2l4dGgKKyAqIGFuZCBmaW5hbCBtYXhw
b3N0aW5nc2l6ZS1jYXBwZWQgdHVwbGUuICBUaGUgc2l4dGggYW5kIGZpbmFsIHBvc3RpbmcgbGlz
dAorICogdHVwbGUgd2lsbCBlbmQgdXAgc29tZXdoYXQgc21hbGxlciB0aGFuIHRoZSBmaXJzdCBm
aXZlLiAgKE5vdGU6IFRoZSBmaXJzdAorICogZml2ZSB0dXBsZXMgY291bGQgYWN0dWFsbHkganVz
dCBiZSB2ZXJ5IGxhcmdlIGR1cGxpY2F0ZSB0dXBsZXMgdGhhdAorICogY291bGRuJ3QgYmUgbWVy
Z2VkIHRvZ2V0aGVyIGF0IGFsbC4gIERlZHVwbGljYXRpb24gd2lsbCBzaW1wbHkgbm90IG1vZGlm
eQorICogdGhlIHBhZ2Ugd2hlbiB0aGF0IGhhcHBlbnMuKQorICoKKyAqIFdoZW4gdGhlcmUgYXJl
IHNpeCBwb3N0aW5nIGxpc3RzIG9uIHRoZSBwYWdlIChhZnRlciBjdXJyZW50IGRlZHVwbGljYXRp
b24KKyAqIHBhc3MgZ29lcyBvbiB0byBjcmVhdGUvb2JzZXJ2ZSBhIHNpeHRoIHZlcnkgbGFyZ2Ug
dHVwbGUpLCBjYWxsZXIgc2hvdWxkIGVuZAorICogaXRzIGRlZHVwbGljYXRpb24gcGFzcy4gIEl0
IGlzbid0IHVzZWZ1bCB0byB0cnkgdG8gZGVkdXBsaWNhdGUgaXRlbXMgdGhhdAorICogYXJlIHN1
cHBvc2VkIHRvIGVuZCB1cCBvbiB0aGUgbmV3IHJpZ2h0IHNpYmxpbmcgcGFnZSBmb2xsb3dpbmcg
dGhlCisgKiBhbnRpY2lwYXRlZCBwYWdlIHNwbGl0LiAgQSBmdXR1cmUgZGVkdXBsaWNhdGlvbiBw
YXNzIG9mIGZ1dHVyZSByaWdodAorICogc2libGluZyBwYWdlIG1pZ2h0IHRha2UgY2FyZSBvZiBp
dC4gIChUaGlzIGlzIHdoeSB0aGUgZmlyc3Qgc2luZ2xlIHZhbHVlCisgKiBzdHJhdGVneSBkZWR1
cGxpY2F0aW9uIHBhc3MgZm9yIGEgZ2l2ZW4gbGVhZiBwYWdlIHdpbGwgZ2VuZXJhbGx5IGZpbmQg
b25seQorICogcGxhaW4gbm9uLXBpdm90IHR1cGxlcyAtLSBzZWUgX2J0X2RvX3NpbmdsZXZhbCgp
IGNvbW1lbnRzLikKKyAqLworc3RhdGljIHZvaWQKK19idF9zaW5nbGV2YWxfZmlsbGZhY3RvcihQ
YWdlIHBhZ2UsIEJURGVkdXBTdGF0ZSBzdGF0ZSwgU2l6ZSBuZXdpdGVtc3opCit7CisJU2l6ZQkJ
bGVmdGZyZWU7CisJaW50CQkJcmVkdWN0aW9uOworCisJLyogVGhpcyBjYWxjdWxhdGlvbiBuZWVk
cyB0byBtYXRjaCBuYnRzcGxpdGxvYy5jICovCisJbGVmdGZyZWUgPSBQYWdlR2V0UGFnZVNpemUo
cGFnZSkgLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSAtCisJCU1BWEFMSUdOKHNpemVvZihCVFBhZ2VP
cGFxdWVEYXRhKSk7CisJLyogU3VidHJhY3Qgc2l6ZSBvZiBuZXcgaGlnaCBrZXkgKGluY2x1ZGVz
IHBpdm90IGhlYXAgVElEIHNwYWNlKSAqLworCWxlZnRmcmVlIC09IG5ld2l0ZW1zeiArIE1BWEFM
SUdOKHNpemVvZihJdGVtUG9pbnRlckRhdGEpKTsKKworCS8qCisJICogUmVkdWNlIG1heHBvc3Rp
bmdzaXplIGJ5IGFuIGFtb3VudCBlcXVhbCB0byB0YXJnZXQgZnJlZSBzcGFjZSBvbiBsZWZ0CisJ
ICogaGFsZiBvZiBwYWdlCisJICovCisJcmVkdWN0aW9uID0gbGVmdGZyZWUgKiAoKDEwMCAtIEJU
UkVFX1NJTkdMRVZBTF9GSUxMRkFDVE9SKSAvIDEwMC4wKTsKKwlpZiAoc3RhdGUtPm1heHBvc3Rp
bmdzaXplID4gcmVkdWN0aW9uKQorCQlzdGF0ZS0+bWF4cG9zdGluZ3NpemUgLT0gcmVkdWN0aW9u
OworCWVsc2UKKwkJc3RhdGUtPm1heHBvc3RpbmdzaXplID0gMDsKK30KKworLyoKKyAqIEJ1aWxk
IGEgcG9zdGluZyBsaXN0IHR1cGxlIGJhc2VkIG9uIGNhbGxlcidzICJiYXNlIiBpbmRleCB0dXBs
ZSBhbmQgbGlzdCBvZgorICogaGVhcCBUSURzLiAgV2hlbiBuaHRpZHMgPT0gMSwgYnVpbGRzIGEg
c3RhbmRhcmQgbm9uLXBpdm90IHR1cGxlIHdpdGhvdXQgYQorICogcG9zdGluZyBsaXN0LiAoUG9z
dGluZyBsaXN0IHR1cGxlcyBjYW4gbmV2ZXIgaGF2ZSBhIHNpbmdsZSBoZWFwIFRJRCwgcGFydGx5
CisgKiBiZWNhdXNlIHRoYXQgZW5zdXJlcyB0aGF0IGRlZHVwbGljYXRpb24gYWx3YXlzIHJlZHVj
ZXMgZmluYWwgTUFYQUxJR04oKSdkCisgKiBzaXplIG9mIGVudGlyZSB0dXBsZS4pCisgKgorICog
Q29udmVudGlvbiBpcyB0aGF0IHBvc3RpbmcgbGlzdCBzdGFydHMgYXQgYSBNQVhBTElHTigpJ2Qg
b2Zmc2V0IChyYXRoZXIKKyAqIHRoYW4gYSBTSE9SVEFMSUdOKCknZCBvZmZzZXQpLCBpbiBsaW5l
IHdpdGggdGhlIGFwcHJvYWNoIHRha2VuIHdoZW4KKyAqIGFwcGVuZGluZyBhIGhlYXAgVElEIHRv
IG5ldyBwaXZvdCB0dXBsZS9oaWdoIGtleSBkdXJpbmcgc3VmZml4IHRydW5jYXRpb24uCisgKiBU
aGlzIHNvbWV0aW1lcyB3YXN0ZXMgYSBsaXR0bGUgc3BhY2UgdGhhdCB3YXMgb25seSBuZWVkZWQg
YXMgYWxpZ25tZW50CisgKiBwYWRkaW5nIGluIHRoZSBvcmlnaW5hbCB0dXBsZS4gIEZvbGxvd2lu
ZyB0aGlzIGNvbnZlbnRpb24gc2ltcGxpZmllcyB0aGUKKyAqIHNwYWNlIGFjY291bnRpbmcgdXNl
ZCB3aGVuIGRlZHVwbGljYXRpbmcgYSBwYWdlICh0aGUgc2FtZSBjb252ZW50aW9uCisgKiBzaW1w
bGlmaWVzIHRoZSBhY2NvdW50aW5nIGZvciBjaG9vc2luZyBhIHBvaW50IHRvIHNwbGl0IGEgcGFn
ZSBhdCkuCisgKgorICogTm90ZTogQ2FsbGVyJ3MgImh0aWRzIiBhcnJheSBtdXN0IGJlIHVuaXF1
ZSBhbmQgYWxyZWFkeSBpbiBhc2NlbmRpbmcgVElECisgKiBvcmRlci4gIEFueSBleGlzdGluZyBo
ZWFwIFRJRHMgZnJvbSAiYmFzZSIgd29uJ3QgYXV0b21hdGljYWxseSBhcHBlYXIgaW4KKyAqIHJl
dHVybmVkIHBvc3RpbmcgbGlzdCB0dXBsZSAodGhleSBtdXN0IGJlIGluY2x1ZGVkIGluIGh0aWRz
IGFycmF5LikKKyAqLworSW5kZXhUdXBsZQorX2J0X2Zvcm1fcG9zdGluZyhJbmRleFR1cGxlIGJh
c2UsIEl0ZW1Qb2ludGVyIGh0aWRzLCBpbnQgbmh0aWRzKQoreworCXVpbnQzMgkJa2V5c2l6ZSwK
KwkJCQluZXdzaXplOworCUluZGV4VHVwbGUJaXR1cDsKKworCWlmIChCVHJlZVR1cGxlSXNQb3N0
aW5nKGJhc2UpKQorCQlrZXlzaXplID0gQlRyZWVUdXBsZUdldFBvc3RpbmdPZmZzZXQoYmFzZSk7
CisJZWxzZQorCQlrZXlzaXplID0gSW5kZXhUdXBsZVNpemUoYmFzZSk7CisKKwlBc3NlcnQoIUJU
cmVlVHVwbGVJc1Bpdm90KGJhc2UpKTsKKwlBc3NlcnQobmh0aWRzID4gMCAmJiBuaHRpZHMgPD0g
UEdfVUlOVDE2X01BWCk7CisJQXNzZXJ0KGtleXNpemUgPT0gTUFYQUxJR04oa2V5c2l6ZSkpOwor
CisJLyoKKwkgKiBEZXRlcm1pbmUgZmluYWwgc2l6ZSBvZiBuZXcgdHVwbGUuCisJICoKKwkgKiBU
aGUgY2FsY3VsYXRpb24gdXNlZCB3aGVuIG5ldyB0dXBsZSBoYXMgYSBwb3N0aW5nIGxpc3QgbmVl
ZHMgdG8gbWF0Y2gKKwkgKiB0aGUgY29kZSB1c2VkIHdpdGhpbiBfYnRfZGVkdXBfc2F2ZV9odGlk
KCkuCisJICovCisJaWYgKG5odGlkcyA+IDEpCisJCW5ld3NpemUgPSBNQVhBTElHTihrZXlzaXpl
ICsKKwkJCQkJCSAgIG5odGlkcyAqIHNpemVvZihJdGVtUG9pbnRlckRhdGEpKTsKKwllbHNlCisJ
CW5ld3NpemUgPSBrZXlzaXplOworCisJQXNzZXJ0KG5ld3NpemUgPD0gSU5ERVhfU0laRV9NQVNL
KTsKKwlBc3NlcnQobmV3c2l6ZSA9PSBNQVhBTElHTihuZXdzaXplKSk7CisKKwkvKiBBbGxvY2F0
ZSBtZW1vcnkgdXNpbmcgcGFsbG9jMCgpIChtYXRjaGVzIGluZGV4X2Zvcm1fdHVwbGUoKSkgKi8K
KwlpdHVwID0gcGFsbG9jMChuZXdzaXplKTsKKwltZW1jcHkoaXR1cCwgYmFzZSwga2V5c2l6ZSk7
CisJaXR1cC0+dF9pbmZvICY9IH5JTkRFWF9TSVpFX01BU0s7CisJaXR1cC0+dF9pbmZvIHw9IG5l
d3NpemU7CisJaWYgKG5odGlkcyA+IDEpCisJeworCQkvKiBGb3JtIHBvc3RpbmcgbGlzdCB0dXBs
ZSAqLworCQlCVHJlZVR1cGxlU2V0UG9zdGluZyhpdHVwLCBuaHRpZHMsIGtleXNpemUpOworCQlt
ZW1jcHkoQlRyZWVUdXBsZUdldFBvc3RpbmcoaXR1cCksIGh0aWRzLAorCQkJICAgc2l6ZW9mKEl0
ZW1Qb2ludGVyRGF0YSkgKiBuaHRpZHMpOworCQlBc3NlcnQoX2J0X3Bvc3RpbmdfdmFsaWQoaXR1
cCkpOworCX0KKwllbHNlCisJeworCQkvKiBGb3JtIHN0YW5kYXJkIG5vbi1waXZvdCB0dXBsZSAq
LworCQlpdHVwLT50X2luZm8gJj0gfklOREVYX0FMVF9USURfTUFTSzsKKwkJSXRlbVBvaW50ZXJD
b3B5KGh0aWRzLCAmaXR1cC0+dF90aWQpOworCQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZp
dHVwLT50X3RpZCkpOworCX0KKworCXJldHVybiBpdHVwOworfQorCisvKgorICogUHJlcGFyZSBm
b3IgYSBwb3N0aW5nIGxpc3Qgc3BsaXQgYnkgc3dhcHBpbmcgaGVhcCBUSUQgaW4gbmV3aXRlbSB3
aXRoIGhlYXAKKyAqIFRJRCBmcm9tIG9yaWdpbmFsIHBvc3RpbmcgbGlzdCAodGhlICdvcG9zdGlu
ZycgaGVhcCBUSUQgbG9jYXRlZCBhdCBvZmZzZXQKKyAqICdwb3N0aW5nb2ZmJykuICBNb2RpZmll
cyBuZXdpdGVtLCBzbyBjYWxsZXIgc2hvdWxkIHBhc3MgdGhlaXIgb3duIHByaXZhdGUKKyAqIGNv
cHkgdGhhdCBjYW4gc2FmZWx5IGJlIG1vZGlmaWVkLgorICoKKyAqIFJldHVybnMgbmV3IHBvc3Rp
bmcgbGlzdCB0dXBsZSwgd2hpY2ggaXMgcGFsbG9jKCknZCBpbiBjYWxsZXIncyBjb250ZXh0Lgor
ICogVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lIHNpemUgYXMgJ29wb3N0aW5nJy4g
IE1vZGlmaWVkIG5ld2l0ZW0gaXMKKyAqIHdoYXQgY2FsbGVyIGFjdHVhbGx5IGluc2VydHMuIChU
aGlzIGdlbmVyYWxseSBoYXBwZW5zIGluc2lkZSB0aGUgc2FtZQorICogY3JpdGljYWwgc2VjdGlv
biB0aGF0IHBlcmZvcm1zIGFuIGluLXBsYWNlIHVwZGF0ZSBvZiBvbGQgcG9zdGluZyBsaXN0IHVz
aW5nCisgKiBuZXcgcG9zdGluZyBsaXN0IHJldHVybmVkIGhlcmUpLgorICoKKyAqIFdoaWxlIHRo
ZSBrZXlzIGZyb20gbmV3aXRlbSBhbmQgb3Bvc3RpbmcgbXVzdCBiZSBvcGNsYXNzIGVxdWFsLCBh
bmQgbXVzdAorICogZ2VuZXJhdGUgaWRlbnRpY2FsIG91dHB1dCB3aGVuIHJ1biB0aHJvdWdoIHRo
ZSB1bmRlcmx5aW5nIHR5cGUncyBvdXRwdXQKKyAqIGZ1bmN0aW9uLCBpdCBkb2Vzbid0IGZvbGxv
dyB0aGF0IHRoZWlyIHJlcHJlc2VudGF0aW9ucyBtYXRjaCBleGFjdGx5LgorICogQ2FsbGVyIG11
c3QgYXZvaWQgYXNzdW1pbmcgdGhhdCB0aGVyZSBjYW4ndCBiZSByZXByZXNlbnRhdGlvbmFsIGRp
ZmZlcmVuY2VzCisgKiB0aGF0IG1ha2UgZGF0dW1zIGZyb20gb3Bvc3RpbmcgYmlnZ2VyIG9yIHNt
YWxsZXIgdGhhbiB0aGUgY29ycmVzcG9uZGluZworICogZGF0dW1zIGZyb20gbmV3aXRlbS4gIEZv
ciBleGFtcGxlLCBkaWZmZXJlbmNlcyBpbiBUT0FTVCBpbnB1dCBzdGF0ZSBtaWdodAorICogYnJl
YWsgYSBmYXVsdHkgYXNzdW1wdGlvbiBhYm91dCB0dXBsZSBzaXplICh0aGUgZXhlY3V0b3IgaXMg
ZW50aXRsZWQgdG8KKyAqIGFwcGx5IFRPQVNUIGNvbXByZXNzaW9uIGJhc2VkIG9uIGl0cyBvd24g
Y3JpdGVyaWEpLiAgSXQgYWxzbyBzZWVtcyBwb3NzaWJsZQorICogdGhhdCBmdXJ0aGVyIHJlcHJl
c2VudGF0aW9uYWwgdmFyaWF0aW9uIHdpbGwgYmUgaW50cm9kdWNlZCBpbiB0aGUgZnV0dXJlLAor
ICogaW4gb3JkZXIgdG8gc3VwcG9ydCBuYnRyZWUgZmVhdHVyZXMgbGlrZSBwYWdlLWxldmVsIHBy
ZWZpeCBjb21wcmVzc2lvbi4KKyAqCisgKiBTZWUgbmJ0cmVlL1JFQURNRSBmb3IgZGV0YWlscyBv
biB0aGUgZGVzaWduIG9mIHBvc3RpbmcgbGlzdCBzcGxpdHMuCisgKi8KK0luZGV4VHVwbGUKK19i
dF9zd2FwX3Bvc3RpbmcoSW5kZXhUdXBsZSBuZXdpdGVtLCBJbmRleFR1cGxlIG9wb3N0aW5nLCBp
bnQgcG9zdGluZ29mZikKK3sKKwlpbnQJCQluaHRpZHM7CisJY2hhcgkgICAqcmVwbGFjZXBvczsK
KwljaGFyCSAgICpyZXBsYWNlcG9zcmlnaHQ7CisJU2l6ZQkJbm1vdmVieXRlczsKKwlJbmRleFR1
cGxlCW5wb3N0aW5nOworCisJbmh0aWRzID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKG9wb3N0aW5n
KTsKKwlBc3NlcnQoX2J0X3Bvc3RpbmdfdmFsaWQob3Bvc3RpbmcpKTsKKwlBc3NlcnQocG9zdGlu
Z29mZiA+IDAgJiYgcG9zdGluZ29mZiA8IG5odGlkcyk7CisKKwkvKgorCSAqIE1vdmUgaXRlbSBw
b2ludGVycyBpbiBwb3N0aW5nIGxpc3QgdG8gbWFrZSBhIGdhcCBmb3IgdGhlIG5ldyBpdGVtJ3MK
KwkgKiBoZWFwIFRJRC4gIFdlIHNoaWZ0IFRJRHMgb25lIHBsYWNlIHRvIHRoZSByaWdodCwgbG9z
aW5nIG9yaWdpbmFsCisJICogcmlnaHRtb3N0IFRJRC4gKG5tb3ZlYnl0ZXMgbXVzdCBub3QgaW5j
bHVkZSBUSURzIHRvIHRoZSBsZWZ0IG9mCisJICogcG9zdGluZ29mZiwgbm9yIHRoZSBleGlzdGlu
ZyByaWdodG1vc3QvbWF4IFRJRCB0aGF0IGdldHMgb3ZlcndyaXR0ZW4uKQorCSAqLworCW5wb3N0
aW5nID0gQ29weUluZGV4VHVwbGUob3Bvc3RpbmcpOworCXJlcGxhY2Vwb3MgPSAoY2hhciAqKSBC
VHJlZVR1cGxlR2V0UG9zdGluZ04obnBvc3RpbmcsIHBvc3RpbmdvZmYpOworCXJlcGxhY2Vwb3Ny
aWdodCA9IChjaGFyICopIEJUcmVlVHVwbGVHZXRQb3N0aW5nTihucG9zdGluZywgcG9zdGluZ29m
ZiArIDEpOworCW5tb3ZlYnl0ZXMgPSAobmh0aWRzIC0gcG9zdGluZ29mZiAtIDEpICogc2l6ZW9m
KEl0ZW1Qb2ludGVyRGF0YSk7CisJbWVtbW92ZShyZXBsYWNlcG9zcmlnaHQsIHJlcGxhY2Vwb3Ms
IG5tb3ZlYnl0ZXMpOworCisJLyogRmlsbCB0aGUgZ2FwIGF0IHBvc3RpbmdvZmYgd2l0aCBUSUQg
b2YgbmV3IGl0ZW0gKG9yaWdpbmFsIG5ldyBUSUQpICovCisJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQ
aXZvdChuZXdpdGVtKSAmJiAhQlRyZWVUdXBsZUlzUG9zdGluZyhuZXdpdGVtKSk7CisJSXRlbVBv
aW50ZXJDb3B5KCZuZXdpdGVtLT50X3RpZCwgKEl0ZW1Qb2ludGVyKSByZXBsYWNlcG9zKTsKKwor
CS8qIE5vdyBjb3B5IG9wb3N0aW5nJ3MgcmlnaHRtb3N0L21heCBUSUQgaW50byBuZXcgaXRlbSAo
ZmluYWwgbmV3IFRJRCkgKi8KKwlJdGVtUG9pbnRlckNvcHkoQlRyZWVUdXBsZUdldE1heEhlYXBU
SUQob3Bvc3RpbmcpLCAmbmV3aXRlbS0+dF90aWQpOworCisJQXNzZXJ0KEl0ZW1Qb2ludGVyQ29t
cGFyZShCVHJlZVR1cGxlR2V0TWF4SGVhcFRJRChucG9zdGluZyksCisJCQkJCQkJICBCVHJlZVR1
cGxlR2V0SGVhcFRJRChuZXdpdGVtKSkgPCAwKTsKKwlBc3NlcnQoX2J0X3Bvc3RpbmdfdmFsaWQo
bnBvc3RpbmcpKTsKKworCXJldHVybiBucG9zdGluZzsKK30KKworLyoKKyAqIFZlcmlmeSBwb3N0
aW5nIGxpc3QgaW52YXJpYW50cyBmb3IgInBvc3RpbmciLCB3aGljaCBtdXN0IGJlIGEgcG9zdGlu
ZyBsaXN0CisgKiB0dXBsZS4gIFVzZWQgd2l0aGluIGFzc2VydGlvbnMuCisgKi8KKyNpZmRlZiBV
U0VfQVNTRVJUX0NIRUNLSU5HCitzdGF0aWMgYm9vbAorX2J0X3Bvc3RpbmdfdmFsaWQoSW5kZXhU
dXBsZSBwb3N0aW5nKQoreworCUl0ZW1Qb2ludGVyRGF0YSBsYXN0OworCUl0ZW1Qb2ludGVyIGh0
aWQ7CisKKwlpZiAoIUJUcmVlVHVwbGVJc1Bvc3RpbmcocG9zdGluZykgfHwgQlRyZWVUdXBsZUdl
dE5Qb3N0aW5nKHBvc3RpbmcpIDwgMikKKwkJcmV0dXJuIGZhbHNlOworCisJLyogUmVtZW1iZXIg
Zmlyc3QgaGVhcCBUSUQgZm9yIGxvb3AgKi8KKwlJdGVtUG9pbnRlckNvcHkoQlRyZWVUdXBsZUdl
dEhlYXBUSUQocG9zdGluZyksICZsYXN0KTsKKwlpZiAoIUl0ZW1Qb2ludGVySXNWYWxpZCgmbGFz
dCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEl0ZXJhdGUsIHN0YXJ0aW5nIGZyb20gc2Vjb25k
IFRJRCAqLworCWZvciAoaW50IGkgPSAxOyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0aW5nKHBvc3Rp
bmcpOyBpKyspCisJeworCQlodGlkID0gQlRyZWVUdXBsZUdldFBvc3RpbmdOKHBvc3RpbmcsIGkp
OworCisJCWlmICghSXRlbVBvaW50ZXJJc1ZhbGlkKGh0aWQpKQorCQkJcmV0dXJuIGZhbHNlOwor
CQlpZiAoSXRlbVBvaW50ZXJDb21wYXJlKGh0aWQsICZsYXN0KSA8PSAwKQorCQkJcmV0dXJuIGZh
bHNlOworCQlJdGVtUG9pbnRlckNvcHkoaHRpZCwgJmxhc3QpOworCX0KKworCXJldHVybiB0cnVl
OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGlu
c2VydC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYwppbmRleCA3ZGRi
YTNmZjlmLi4xNzUzYWY4ZjhiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl
L25idGluc2VydC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMK
QEAgLTI4LDYgKzI4LDggQEAKIC8qIE1pbmltdW0gdHJlZSBoZWlnaHQgZm9yIGFwcGxpY2F0aW9u
IG9mIGZhc3RwYXRoIG9wdGltaXphdGlvbiAqLwogI2RlZmluZSBCVFJFRV9GQVNUUEFUSF9NSU5f
TEVWRUwJMgogCisvKiBHVUMgcGFyYW1ldGVyICovCitib29sCQlkZWR1cGxpY2F0ZV9idHJlZV9p
dGVtcyA9IHRydWU7CiAKIHN0YXRpYyBCdWZmZXIgX2J0X25ld3Jvb3QoUmVsYXRpb24gcmVsLCBC
dWZmZXIgbGJ1ZiwgQnVmZmVyIHJidWYpOwogCkBAIC00NywxMCArNDksMTIgQEAgc3RhdGljIHZv
aWQgX2J0X2luc2VydG9ucGcoUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksCiAJ
CQkJCQkgICBCVFN0YWNrIHN0YWNrLAogCQkJCQkJICAgSW5kZXhUdXBsZSBpdHVwLAogCQkJCQkJ
ICAgT2Zmc2V0TnVtYmVyIG5ld2l0ZW1vZmYsCisJCQkJCQkgICBpbnQgcG9zdGluZ29mZiwKIAkJ
CQkJCSAgIGJvb2wgc3BsaXRfb25seV9wYWdlKTsKIHN0YXRpYyBCdWZmZXIgX2J0X3NwbGl0KFJl
bGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLAogCQkJCQkJQnVm
ZmVyIGNidWYsIE9mZnNldE51bWJlciBuZXdpdGVtb2ZmLCBTaXplIG5ld2l0ZW1zeiwKLQkJCQkJ
CUluZGV4VHVwbGUgbmV3aXRlbSk7CisJCQkJCQlJbmRleFR1cGxlIG5ld2l0ZW0sIEluZGV4VHVw
bGUgb3JpZ25ld2l0ZW0sCisJCQkJCQlJbmRleFR1cGxlIG5wb3N0aW5nLCB1aW50MTYgcG9zdGlu
Z29mZik7CiBzdGF0aWMgdm9pZCBfYnRfaW5zZXJ0X3BhcmVudChSZWxhdGlvbiByZWwsIEJ1ZmZl
ciBidWYsIEJ1ZmZlciByYnVmLAogCQkJCQkJCSAgQlRTdGFjayBzdGFjaywgYm9vbCBpc19yb290
LCBib29sIGlzX29ubHkpOwogc3RhdGljIGJvb2wgX2J0X3BnYWRkdHVwKFBhZ2UgcGFnZSwgU2l6
ZSBpdGVtc2l6ZSwgSW5kZXhUdXBsZSBpdHVwLApAQCAtMTI1LDYgKzEyOSw3IEBAIF9idF9kb2lu
c2VydChSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCwKIAlpbnNlcnRzdGF0ZS5pdHVwX2tl
eSA9IGl0dXBfa2V5OwogCWluc2VydHN0YXRlLmJvdW5kc192YWxpZCA9IGZhbHNlOwogCWluc2Vy
dHN0YXRlLmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJaW5zZXJ0c3RhdGUucG9zdGluZ29mZiA9IDA7
CiAKIAkvKgogCSAqIEl0J3MgdmVyeSBjb21tb24gdG8gaGF2ZSBhbiBpbmRleCBvbiBhbiBhdXRv
LWluY3JlbWVudGVkIG9yCkBAIC0yOTUsNyArMzAwLDcgQEAgdG9wOgogCQluZXdpdGVtb2ZmID0g
X2J0X2ZpbmRpbnNlcnRsb2MocmVsLCAmaW5zZXJ0c3RhdGUsIGNoZWNraW5ndW5pcXVlLAogCQkJ
CQkJCQkJICAgc3RhY2ssIGhlYXBSZWwpOwogCQlfYnRfaW5zZXJ0b25wZyhyZWwsIGl0dXBfa2V5
LCBpbnNlcnRzdGF0ZS5idWYsIEludmFsaWRCdWZmZXIsIHN0YWNrLAotCQkJCQkgICBpdHVwLCBu
ZXdpdGVtb2ZmLCBmYWxzZSk7CisJCQkJCSAgIGl0dXAsIG5ld2l0ZW1vZmYsIGluc2VydHN0YXRl
LnBvc3RpbmdvZmYsIGZhbHNlKTsKIAl9CiAJZWxzZQogCXsKQEAgLTM0MCw2ICszNDUsOCBAQCBf
YnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSwg
UmVsYXRpb24gaGVhcFJlbCwKIAkJCQkgdWludDMyICpzcGVjdWxhdGl2ZVRva2VuKQogewogCUlu
ZGV4VHVwbGUJaXR1cCA9IGluc2VydHN0YXRlLT5pdHVwOworCUluZGV4VHVwbGUJY3VyaXR1cDsK
KwlJdGVtSWQJCWN1cml0ZW1pZDsKIAlCVFNjYW5JbnNlcnQgaXR1cF9rZXkgPSBpbnNlcnRzdGF0
ZS0+aXR1cF9rZXk7CiAJU25hcHNob3REYXRhIFNuYXBzaG90RGlydHk7CiAJT2Zmc2V0TnVtYmVy
IG9mZnNldDsKQEAgLTM0OCw2ICszNTUsOSBAQCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJl
bCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAlCVFBhZ2VP
cGFxdWUgb3BhcXVlOwogCUJ1ZmZlcgkJbmJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJYm9vbAkJZm91
bmQgPSBmYWxzZTsKKwlib29sCQlpbnBvc3RpbmcgPSBmYWxzZTsKKwlib29sCQlwcmV2YWxsZGVh
ZCA9IHRydWU7CisJaW50CQkJY3VycG9zdGkgPSAwOwogCiAJLyogQXNzdW1lIHVuaXF1ZSB1bnRp
bCB3ZSBmaW5kIGEgZHVwbGljYXRlICovCiAJKmlzX3VuaXF1ZSA9IHRydWU7CkBAIC0zNzUsMTMg
KzM4NSwyMSBAQCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRTdGF0ZSBp
bnNlcnRzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAlBc3NlcnQoaXR1cF9rZXktPnNjYW50aWQg
PT0gTlVMTCk7CiAJZm9yICg7OykKIAl7Ci0JCUl0ZW1JZAkJY3VyaXRlbWlkOwotCQlJbmRleFR1
cGxlCWN1cml0dXA7Ci0JCUJsb2NrTnVtYmVyIG5ibGtubzsKLQogCQkvKgotCQkgKiBtYWtlIHN1
cmUgdGhlIG9mZnNldCBwb2ludHMgdG8gYW4gYWN0dWFsIGl0ZW0gYmVmb3JlIHRyeWluZyB0bwot
CQkgKiBleGFtaW5lIGl0Li4uCisJCSAqIEVhY2ggaXRlcmF0aW9uIG9mIHRoZSBsb29wIHByb2Nl
c3NlcyBvbmUgaGVhcCBUSUQsIG5vdCBvbmUgaW5kZXgKKwkJICogdHVwbGUuICBDdXJyZW50IG9m
ZnNldCBudW1iZXIgZm9yIHBhZ2UgaXNuJ3QgdXN1YWxseSBhZHZhbmNlZCBvbgorCQkgKiBpdGVy
YXRpb25zIHRoYXQgcHJvY2VzcyBoZWFwIFRJRHMgZnJvbSBwb3N0aW5nIGxpc3QgdHVwbGVzLgor
CQkgKgorCQkgKiAiaW5wb3N0aW5nIiBzdGF0ZSBpcyBzZXQgd2hlbiBfaW5zaWRlXyBhIHBvc3Rp
bmcgbGlzdCAtLS0gbm90IHdoZW4KKwkJICogd2UncmUgYXQgdGhlIHN0YXJ0IChvciBlbmQpIG9m
IGEgcG9zdGluZyBsaXN0LiAgV2UgYWR2YW5jZSBjdXJwb3N0aQorCQkgKiBhdCB0aGUgZW5kIG9m
IHRoZSBpdGVyYXRpb24gd2hlbiBpbnNpZGUgYSBwb3N0aW5nIGxpc3QgdHVwbGUuICBJbgorCQkg
KiBnZW5lcmFsLCBldmVyeSBsb29wIGl0ZXJhdGlvbiBlaXRoZXIgYWR2YW5jZXMgdGhlIHBhZ2Ug
b2Zmc2V0IG9yCisJCSAqIGFkdmFuY2VzIGN1cnBvc3RpIC0tLSBhbiBpdGVyYXRpb24gdGhhdCBo
YW5kbGVzIHRoZSByaWdodG1vc3QvbWF4CisJCSAqIGhlYXAgVElEIGluIGEgcG9zdGluZyBsaXN0
IGZpbmFsbHkgYWR2YW5jZXMgdGhlIHBhZ2Ugb2Zmc2V0IChhbmQKKwkJICogdW5zZXRzICJpbnBv
c3RpbmciKS4KKwkJICoKKwkJICogTWFrZSBzdXJlIHRoZSBvZmZzZXQgcG9pbnRzIHRvIGFuIGFj
dHVhbCBpbmRleCB0dXBsZSBiZWZvcmUgdHJ5aW5nCisJCSAqIHRvIGV4YW1pbmUgaXQuLi4KIAkJ
ICovCiAJCWlmIChvZmZzZXQgPD0gbWF4b2ZmKQogCQl7CkBAIC00MDYsMzEgKzQyNCw2MCBAQCBf
YnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSwg
UmVsYXRpb24gaGVhcFJlbCwKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJY3VyaXRlbWlkID0gUGFn
ZUdldEl0ZW1JZChwYWdlLCBvZmZzZXQpOwotCiAJCQkvKgotCQkJICogV2UgY2FuIHNraXAgaXRl
bXMgdGhhdCBhcmUgbWFya2VkIGtpbGxlZC4KKwkJCSAqIFdlIGNhbiBza2lwIGl0ZW1zIHRoYXQg
YXJlIGFscmVhZHkgbWFya2VkIGtpbGxlZC4KIAkJCSAqCiAJCQkgKiBJbiB0aGUgcHJlc2VuY2Ug
b2YgaGVhdnkgdXBkYXRlIGFjdGl2aXR5IGFuIGluZGV4IG1heSBjb250YWluCiAJCQkgKiBtYW55
IGtpbGxlZCBpdGVtcyB3aXRoIHRoZSBzYW1lIGtleTsgcnVubmluZyBfYnRfY29tcGFyZSgpIG9u
CiAJCQkgKiBlYWNoIGtpbGxlZCBpdGVtIGdldHMgZXhwZW5zaXZlLiAgSnVzdCBhZHZhbmNlIG92
ZXIga2lsbGVkCiAJCQkgKiBpdGVtcyBhcyBxdWlja2x5IGFzIHdlIGNhbi4gIFdlIG9ubHkgYXBw
bHkgX2J0X2NvbXBhcmUoKSB3aGVuCi0JCQkgKiB3ZSBnZXQgdG8gYSBub24ta2lsbGVkIGl0ZW0u
ICBFdmVuIHRob3NlIGNvbXBhcmlzb25zIGNvdWxkIGJlCi0JCQkgKiBhdm9pZGVkIChpbiB0aGUg
Y29tbW9uIGNhc2Ugd2hlcmUgdGhlcmUgaXMgb25seSBvbmUgcGFnZSB0bwotCQkJICogdmlzaXQp
IGJ5IHJldXNpbmcgYm91bmRzLCBidXQganVzdCBza2lwcGluZyBkZWFkIGl0ZW1zIGlzIGZhc3QK
LQkJCSAqIGVub3VnaC4KKwkJCSAqIHdlIGdldCB0byBhIG5vbi1raWxsZWQgaXRlbS4gIFdlIGNv
dWxkIHJldXNlIHRoZSBib3VuZHMgdG8KKwkJCSAqIGF2b2lkIF9idF9jb21wYXJlKCkgY2FsbHMg
Zm9yIGtub3duIGVxdWFsIHR1cGxlcywgYnV0IGl0CisJCQkgKiBkb2Vzbid0IHNlZW0gd29ydGgg
aXQuICBXb3JrbG9hZHMgd2l0aCBoZWF2eSB1cGRhdGUgYWN0aXZpdHkKKwkJCSAqIHRlbmQgdG8g
aGF2ZSBtYW55IGRlZHVwbGljYXRpb24gcGFzc2VzLCBzbyB3ZSdsbCBvZnRlbiBhdm9pZAorCQkJ
ICogbW9zdCBvZiB0aG9zZSBjb21wYXJpc29ucywgdG9vICh3ZSBjYWxsIF9idF9jb21wYXJlKCkg
d2hlbiB0aGUKKwkJCSAqIHBvc3RpbmcgbGlzdCB0dXBsZSBpcyBpbml0aWFsbHkgZW5jb3VudGVy
ZWQsIHRob3VnaCBub3Qgd2hlbgorCQkJICogcHJvY2Vzc2luZyBsYXRlciBUSURzIGZyb20gdGhl
IHNhbWUgdHVwbGUpLgogCQkJICovCi0JCQlpZiAoIUl0ZW1JZElzRGVhZChjdXJpdGVtaWQpKQor
CQkJaWYgKCFpbnBvc3RpbmcpCisJCQkJY3VyaXRlbWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBv
ZmZzZXQpOworCQkJaWYgKGlucG9zdGluZyB8fCAhSXRlbUlkSXNEZWFkKGN1cml0ZW1pZCkpCiAJ
CQl7CiAJCQkJSXRlbVBvaW50ZXJEYXRhIGh0aWQ7CiAJCQkJYm9vbAkJYWxsX2RlYWQ7CiAKLQkJ
CQlpZiAoX2J0X2NvbXBhcmUocmVsLCBpdHVwX2tleSwgcGFnZSwgb2Zmc2V0KSAhPSAwKQotCQkJ
CQlicmVhazsJCS8qIHdlJ3JlIHBhc3QgYWxsIHRoZSBlcXVhbCB0dXBsZXMgKi8KKwkJCQlpZiAo
IWlucG9zdGluZykKKwkJCQl7CisJCQkJCS8qIFBsYWluIHR1cGxlLCBvciBmaXJzdCBUSUQgaW4g
cG9zdGluZyBsaXN0IHR1cGxlICovCisJCQkJCWlmIChfYnRfY29tcGFyZShyZWwsIGl0dXBfa2V5
LCBwYWdlLCBvZmZzZXQpICE9IDApCisJCQkJCQlicmVhazsJLyogd2UncmUgcGFzdCBhbGwgdGhl
IGVxdWFsIHR1cGxlcyAqLwogCi0JCQkJLyogb2theSwgd2UgZ290dGEgZmV0Y2ggdGhlIGhlYXAg
dHVwbGUgLi4uICovCi0JCQkJY3VyaXR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdl
LCBjdXJpdGVtaWQpOwotCQkJCWh0aWQgPSBjdXJpdHVwLT50X3RpZDsKKwkJCQkJLyogQWR2YW5j
ZWQgY3VyaXR1cCAqLworCQkJCQljdXJpdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBh
Z2UsIGN1cml0ZW1pZCk7CisJCQkJCUFzc2VydCghQlRyZWVUdXBsZUlzUGl2b3QoY3VyaXR1cCkp
OworCQkJCX0KKworCQkJCS8qIG9rYXksIHdlIGdvdHRhIGZldGNoIHRoZSBoZWFwIHR1cGxlIHVz
aW5nIGh0aWQgLi4uICovCisJCQkJaWYgKCFCVHJlZVR1cGxlSXNQb3N0aW5nKGN1cml0dXApKQor
CQkJCXsKKwkJCQkJLyogLi4uIGh0aWQgaXMgZnJvbSBzaW1wbGUgbm9uLXBpdm90IHR1cGxlICov
CisJCQkJCUFzc2VydCghaW5wb3N0aW5nKTsKKwkJCQkJaHRpZCA9IGN1cml0dXAtPnRfdGlkOwor
CQkJCX0KKwkJCQllbHNlIGlmICghaW5wb3N0aW5nKQorCQkJCXsKKwkJCQkJLyogLi4uIGh0aWQg
aXMgZmlyc3QgVElEIGluIG5ldyBwb3N0aW5nIGxpc3QgKi8KKwkJCQkJaW5wb3N0aW5nID0gdHJ1
ZTsKKwkJCQkJcHJldmFsbGRlYWQgPSB0cnVlOworCQkJCQljdXJwb3N0aSA9IDA7CisJCQkJCWh0
aWQgPSAqQlRyZWVUdXBsZUdldFBvc3RpbmdOKGN1cml0dXAsIDApOworCQkJCX0KKwkJCQllbHNl
CisJCQkJeworCQkJCQkvKiAuLi4gaHRpZCBpcyBzZWNvbmQgb3Igc3Vic2VxdWVudCBUSUQgaW4g
cG9zdGluZyBsaXN0ICovCisJCQkJCUFzc2VydChjdXJwb3N0aSA+IDApOworCQkJCQlodGlkID0g
KkJUcmVlVHVwbGVHZXRQb3N0aW5nTihjdXJpdHVwLCBjdXJwb3N0aSk7CisJCQkJfQogCiAJCQkJ
LyoKIAkJCQkgKiBJZiB3ZSBhcmUgZG9pbmcgYSByZWNoZWNrLCB3ZSBleHBlY3QgdG8gZmluZCB0
aGUgdHVwbGUgd2UKQEAgLTUwNiw4ICs1NTMsNyBAQCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9u
IHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkJ
ICogbm90IHBhcnQgb2YgdGhpcyBjaGFpbiBiZWNhdXNlIGl0IGhhZCBhIGRpZmZlcmVudCBpbmRl
eAogCQkJCQkgKiBlbnRyeS4KIAkJCQkJICovCi0JCQkJCWh0aWQgPSBpdHVwLT50X3RpZDsKLQkJ
CQkJaWYgKHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNrKGhlYXBSZWwsICZodGlkLAorCQkJ
CQlpZiAodGFibGVfaW5kZXhfZmV0Y2hfdHVwbGVfY2hlY2soaGVhcFJlbCwgJml0dXAtPnRfdGlk
LAogCQkJCQkJCQkJCQkJCSAgU25hcHNob3RTZWxmLCBOVUxMKSkKIAkJCQkJewogCQkJCQkJLyog
Tm9ybWFsIGNhc2UgLS0tIGl0J3Mgc3RpbGwgbGl2ZSAqLwpAQCAtNTY1LDEyICs2MTEsMTQgQEAg
X2J0X2NoZWNrX3VuaXF1ZShSZWxhdGlvbiByZWwsIEJUSW5zZXJ0U3RhdGUgaW5zZXJ0c3RhdGUs
IFJlbGF0aW9uIGhlYXBSZWwsCiAJCQkJCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo
cmVsKSkpKTsKIAkJCQkJfQogCQkJCX0KLQkJCQllbHNlIGlmIChhbGxfZGVhZCkKKwkJCQllbHNl
IGlmIChhbGxfZGVhZCAmJiAoIWlucG9zdGluZyB8fAorCQkJCQkJCQkJICAocHJldmFsbGRlYWQg
JiYKKwkJCQkJCQkJCSAgIGN1cnBvc3RpID09IEJUcmVlVHVwbGVHZXROUG9zdGluZyhjdXJpdHVw
KSAtIDEpKSkKIAkJCQl7CiAJCQkJCS8qCi0JCQkJCSAqIFRoZSBjb25mbGljdGluZyB0dXBsZSAo
b3Igd2hvbGUgSE9UIGNoYWluKSBpcyBkZWFkIHRvCi0JCQkJCSAqIGV2ZXJ5b25lLCBzbyB3ZSBt
YXkgYXMgd2VsbCBtYXJrIHRoZSBpbmRleCBlbnRyeQotCQkJCQkgKiBraWxsZWQuCisJCQkJCSAq
IFRoZSBjb25mbGljdGluZyB0dXBsZSAob3IgYWxsIEhPVCBjaGFpbnMgcG9pbnRlZCB0byBieQor
CQkJCQkgKiBhbGwgcG9zdGluZyBsaXN0IFRJRHMpIGlzIGRlYWQgdG8gZXZlcnlvbmUsIHNvIG1h
cmsgdGhlCisJCQkJCSAqIGluZGV4IGVudHJ5IGtpbGxlZC4KIAkJCQkJICovCiAJCQkJCUl0ZW1J
ZE1hcmtEZWFkKGN1cml0ZW1pZCk7CiAJCQkJCW9wYXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfSEFT
X0dBUkJBR0U7CkBAIC01ODQsMTQgKzYzMiwyOSBAQCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9u
IHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkJ
ZWxzZQogCQkJCQkJTWFya0J1ZmZlckRpcnR5SGludChpbnNlcnRzdGF0ZS0+YnVmLCB0cnVlKTsK
IAkJCQl9CisKKwkJCQkvKgorCQkJCSAqIFJlbWVtYmVyIGlmIHBvc3RpbmcgbGlzdCB0dXBsZSBo
YXMgZXZlbiBhIHNpbmdsZSBIT1QgY2hhaW4KKwkJCQkgKiB3aG9zZSBtZW1iZXJzIGFyZSBub3Qg
YWxsIGRlYWQKKwkJCQkgKi8KKwkJCQlpZiAoIWFsbF9kZWFkICYmIGlucG9zdGluZykKKwkJCQkJ
cHJldmFsbGRlYWQgPSBmYWxzZTsKIAkJCX0KIAkJfQogCi0JCS8qCi0JCSAqIEFkdmFuY2UgdG8g
bmV4dCB0dXBsZSB0byBjb250aW51ZSBjaGVja2luZy4KLQkJICovCi0JCWlmIChvZmZzZXQgPCBt
YXhvZmYpCisJCWlmIChpbnBvc3RpbmcgJiYgY3VycG9zdGkgPCBCVHJlZVR1cGxlR2V0TlBvc3Rp
bmcoY3VyaXR1cCkgLSAxKQorCQl7CisJCQkvKiBBZHZhbmNlIHRvIG5leHQgVElEIGluIHNhbWUg
cG9zdGluZyBsaXN0ICovCisJCQljdXJwb3N0aSsrOworCQkJY29udGludWU7CisJCX0KKwkJZWxz
ZSBpZiAob2Zmc2V0IDwgbWF4b2ZmKQorCQl7CisJCQkvKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUg
Ki8KKwkJCWN1cnBvc3RpID0gMDsKKwkJCWlucG9zdGluZyA9IGZhbHNlOwogCQkJb2Zmc2V0ID0g
T2Zmc2V0TnVtYmVyTmV4dChvZmZzZXQpOworCQl9CiAJCWVsc2UKIAkJewogCQkJaW50CQkJaGln
aGtleWNtcDsKQEAgLTYwNiw3ICs2NjksOCBAQCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJl
bCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAkJCS8qIEFk
dmFuY2UgdG8gbmV4dCBub24tZGVhZCBwYWdlIC0tLSB0aGVyZSBtdXN0IGJlIG9uZSAqLwogCQkJ
Zm9yICg7OykKIAkJCXsKLQkJCQluYmxrbm8gPSBvcGFxdWUtPmJ0cG9fbmV4dDsKKwkJCQlCbG9j
a051bWJlciBuYmxrbm8gPSBvcGFxdWUtPmJ0cG9fbmV4dDsKKwogCQkJCW5idWYgPSBfYnRfcmVs
YW5kZ2V0YnVmKHJlbCwgbmJ1ZiwgbmJsa25vLCBCVF9SRUFEKTsKIAkJCQlwYWdlID0gQnVmZmVy
R2V0UGFnZShuYnVmKTsKIAkJCQlvcGFxdWUgPSAoQlRQYWdlT3BhcXVlKSBQYWdlR2V0U3BlY2lh
bFBvaW50ZXIocGFnZSk7CkBAIC02MTYsNiArNjgwLDkgQEAgX2J0X2NoZWNrX3VuaXF1ZShSZWxh
dGlvbiByZWwsIEJUSW5zZXJ0U3RhdGUgaW5zZXJ0c3RhdGUsIFJlbGF0aW9uIGhlYXBSZWwsCiAJ
CQkJCWVsb2coRVJST1IsICJmZWxsIG9mZiB0aGUgZW5kIG9mIGluZGV4IFwiJXNcIiIsCiAJCQkJ
CQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CiAJCQl9CisJCQkvKiBXaWxsIGFsc28g
YWR2YW5jZSB0byBuZXh0IHR1cGxlICovCisJCQljdXJwb3N0aSA9IDA7CisJCQlpbnBvc3Rpbmcg
PSBmYWxzZTsKIAkJCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7CiAJCQlv
ZmZzZXQgPSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpOwogCQkJLyogRG9uJ3QgaW52YWxpZGF0ZSBi
aW5hcnkgc2VhcmNoIGJvdW5kcyAqLwpAQCAtNjg0LDYgKzc1MSw3IEBAIF9idF9maW5kaW5zZXJ0
bG9jKFJlbGF0aW9uIHJlbCwKIAlCVFNjYW5JbnNlcnQgaXR1cF9rZXkgPSBpbnNlcnRzdGF0ZS0+
aXR1cF9rZXk7CiAJUGFnZQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoaW5zZXJ0c3RhdGUtPmJ1Zik7
CiAJQlRQYWdlT3BhcXVlIGxwYWdlb3A7CisJT2Zmc2V0TnVtYmVyIG5ld2l0ZW1vZmY7CiAKIAls
cGFnZW9wID0gKEJUUGFnZU9wYXF1ZSkgUGFnZUdldFNwZWNpYWxQb2ludGVyKHBhZ2UpOwogCkBA
IC02OTksNiArNzY3LDggQEAgX2J0X2ZpbmRpbnNlcnRsb2MoUmVsYXRpb24gcmVsLAogCiAJaWYg
KGl0dXBfa2V5LT5oZWFwa2V5c3BhY2UpCiAJeworCQlib29sCQlkZWR1cHVuaXF1ZSA9IGZhbHNl
OworCiAJCS8qCiAJCSAqIElmIHdlJ3JlIGluc2VydGluZyBpbnRvIGEgdW5pcXVlIGluZGV4LCB3
ZSBtYXkgaGF2ZSB0byB3YWxrIHJpZ2h0CiAJCSAqIHRocm91Z2ggbGVhZiBwYWdlcyB0byBmaW5k
IHRoZSBvbmUgbGVhZiBwYWdlIHRoYXQgd2UgbXVzdCBpbnNlcnQgb24KQEAgLTcxMiw5ICs3ODIs
MjUgQEAgX2J0X2ZpbmRpbnNlcnRsb2MoUmVsYXRpb24gcmVsLAogCQkgKiB0dXBsZSBiZWxvbmdz
IG9uLiAgVGhlIGhlYXAgVElEIGF0dHJpYnV0ZSBmb3IgbmV3IHR1cGxlIChzY2FudGlkKQogCQkg
KiBjb3VsZCBmb3JjZSB1cyB0byBpbnNlcnQgb24gYSBzaWJsaW5nIHBhZ2UsIHRob3VnaCB0aGF0
IHNob3VsZCBiZQogCQkgKiB2ZXJ5IHJhcmUgaW4gcHJhY3RpY2UuCisJCSAqCisJCSAqIGNoZWNr
aW5ndW5pcXVlIGluc2VydGVycyB0aGF0IGVuY291bnRlciBhIGR1cGxpY2F0ZSB3aWxsIGFwcGx5
CisJCSAqIGRlZHVwbGljYXRpb24gd2hlbiBpdCBsb29rcyBsaWtlIHRoZXJlIHdpbGwgYmUgYSBw
YWdlIHNwbGl0LCBidXQKKwkJICogdGhlcmUgaXMgbm8gTFBfREVBRCBnYXJiYWdlIG9uIHRoZSBs
ZWFmIHBhZ2UgdG8gdmFjdXVtIGF3YXkgKG9yCisJCSAqIHRoZXJlIHdhc24ndCBlbm91Z2ggc3Bh
Y2UgZnJlZWQgYnkgTFBfREVBRCBjbGVhbnVwKS4gIFRoaXMKKwkJICogY29tcGxlbWVudHMgdGhl
IG9wcG9ydHVuaXN0aWMgTFBfREVBRCB2YWN1dW1pbmcgbWVjaGFuaXNtLiAgVGhlCisJCSAqIGhp
Z2ggbGV2ZWwgZ29hbCBpcyB0byBhdm9pZCBwYWdlIHNwbGl0cyBjYXVzZWQgYnkgbmV3LCB1bmNo
YW5nZWQKKwkJICogdmVyc2lvbnMgb2YgZXhpc3RpbmcgbG9naWNhbCByb3dzIGFsdG9nZXRoZXIu
ICBTZWUgbmJ0cmVlL1JFQURNRQorCQkgKiBmb3IgZnVsbCBkZXRhaWxzLgogCQkgKi8KIAkJaWYg
KGNoZWNraW5ndW5pcXVlKQogCQl7CisJCQlpZiAoaW5zZXJ0c3RhdGUtPmxvdyA8IGluc2VydHN0
YXRlLT5zdHJpY3RoaWdoKQorCQkJeworCQkJCS8qIEVuY291bnRlcmVkIGEgZHVwbGljYXRlIGlu
IF9idF9jaGVja191bmlxdWUoKSAqLworCQkJCUFzc2VydChpbnNlcnRzdGF0ZS0+Ym91bmRzX3Zh
bGlkKTsKKwkJCQlkZWR1cHVuaXF1ZSA9IHRydWU7CisJCQl9CisKIAkJCWZvciAoOzspCiAJCQl7
CiAJCQkJLyoKQEAgLTc0MSwxOCArODI3LDM3IEBAIF9idF9maW5kaW5zZXJ0bG9jKFJlbGF0aW9u
IHJlbCwKIAkJCQkvKiBVcGRhdGUgbG9jYWwgc3RhdGUgYWZ0ZXIgc3RlcHBpbmcgcmlnaHQgKi8K
IAkJCQlwYWdlID0gQnVmZmVyR2V0UGFnZShpbnNlcnRzdGF0ZS0+YnVmKTsKIAkJCQlscGFnZW9w
ID0gKEJUUGFnZU9wYXF1ZSkgUGFnZUdldFNwZWNpYWxQb2ludGVyKHBhZ2UpOworCQkJCS8qIEFz
c3VtZSBkdXBsaWNhdGVzIChoZWxwZnVsIHdoZW4gaW5pdGlhbCBwYWdlIGlzIGVtcHR5KSAqLwor
CQkJCWRlZHVwdW5pcXVlID0gdHJ1ZTsKIAkJCX0KIAkJfQogCiAJCS8qCiAJCSAqIElmIHRoZSB0
YXJnZXQgcGFnZSBpcyBmdWxsLCBzZWUgaWYgd2UgY2FuIG9idGFpbiBlbm91Z2ggc3BhY2UgYnkK
LQkJICogZXJhc2luZyBMUF9ERUFEIGl0ZW1zCisJCSAqIGVyYXNpbmcgTFBfREVBRCBpdGVtcy4g
IElmIHRoYXQgZG9lc24ndCB3b3JrIG91dCwgdHJ5IHRvIG9idGFpbgorCQkgKiBlbm91Z2ggZnJl
ZSBzcGFjZSB0byBhdm9pZCBhIHBhZ2Ugc3BsaXQgYnkgZGVkdXBsaWNhdGluZyBleGlzdGluZwor
CQkgKiBpdGVtcyAoaWYgZGVkdXBsaWNhdGlvbiBpcyBzYWZlKS4KIAkJICovCi0JCWlmIChQYWdl
R2V0RnJlZVNwYWNlKHBhZ2UpIDwgaW5zZXJ0c3RhdGUtPml0ZW1zeiAmJgotCQkJUF9IQVNfR0FS
QkFHRShscGFnZW9wKSkKKwkJaWYgKFBhZ2VHZXRGcmVlU3BhY2UocGFnZSkgPCBpbnNlcnRzdGF0
ZS0+aXRlbXN6KQogCQl7Ci0JCQlfYnRfdmFjdXVtX29uZV9wYWdlKHJlbCwgaW5zZXJ0c3RhdGUt
PmJ1ZiwgaGVhcFJlbCk7Ci0JCQlpbnNlcnRzdGF0ZS0+Ym91bmRzX3ZhbGlkID0gZmFsc2U7CisJ
CQlpZiAoUF9IQVNfR0FSQkFHRShscGFnZW9wKSkKKwkJCXsKKwkJCQlfYnRfdmFjdXVtX29uZV9w
YWdlKHJlbCwgaW5zZXJ0c3RhdGUtPmJ1ZiwgaGVhcFJlbCk7CisJCQkJaW5zZXJ0c3RhdGUtPmJv
dW5kc192YWxpZCA9IGZhbHNlOworCisJCQkJLyogTWlnaHQgYXMgd2VsbCBhc3N1bWUgZHVwbGlj
YXRlcyBpZiBjaGVja2luZ3VuaXF1ZSAqLworCQkJCWRlZHVwdW5pcXVlID0gdHJ1ZTsKKwkJCX0K
KworCQkJaWYgKGl0dXBfa2V5LT5zYWZlZGVkdXAgJiYgQlRHZXRVc2VEZWR1cChyZWwpICYmCisJ
CQkJUGFnZUdldEZyZWVTcGFjZShwYWdlKSA8IGluc2VydHN0YXRlLT5pdGVtc3ogJiYKKwkJCQko
IWNoZWNraW5ndW5pcXVlIHx8IGRlZHVwdW5pcXVlKSkKKwkJCXsKKwkJCQlfYnRfZGVkdXBfb25l
X3BhZ2UocmVsLCBpbnNlcnRzdGF0ZS0+YnVmLCBoZWFwUmVsLAorCQkJCQkJCQkgICBpbnNlcnRz
dGF0ZS0+aXR1cCwgaW5zZXJ0c3RhdGUtPml0ZW1zeiwKKwkJCQkJCQkJICAgY2hlY2tpbmd1bmlx
dWUpOworCQkJCWluc2VydHN0YXRlLT5ib3VuZHNfdmFsaWQgPSBmYWxzZTsKKwkJCX0KIAkJfQog
CX0KIAllbHNlCkBAIC04MzQsNyArOTM5LDM2IEBAIF9idF9maW5kaW5zZXJ0bG9jKFJlbGF0aW9u
IHJlbCwKIAlBc3NlcnQoUF9SSUdIVE1PU1QobHBhZ2VvcCkgfHwKIAkJICAgX2J0X2NvbXBhcmUo
cmVsLCBpdHVwX2tleSwgcGFnZSwgUF9ISUtFWSkgPD0gMCk7CiAKLQlyZXR1cm4gX2J0X2JpbnNy
Y2hfaW5zZXJ0KHJlbCwgaW5zZXJ0c3RhdGUpOworCW5ld2l0ZW1vZmYgPSBfYnRfYmluc3JjaF9p
bnNlcnQocmVsLCBpbnNlcnRzdGF0ZSk7CisKKwlpZiAoaW5zZXJ0c3RhdGUtPnBvc3RpbmdvZmYg
PT0gLTEpCisJeworCQkvKgorCQkgKiBUaGVyZSBpcyBhbiBvdmVybGFwcGluZyBwb3N0aW5nIGxp
c3QgdHVwbGUgd2l0aCBpdHMgTFBfREVBRCBiaXQKKwkJICogc2V0LiAgX2J0X2luc2VydG9ucGco
KSBjYW5ub3QgaGFuZGxlIHRoaXMsIHNvIGRlbGV0ZSBhbGwgTFBfREVBRAorCQkgKiBpdGVtcyBl
YXJseS4gIFRoaXMgaXMgdGhlIG9ubHkgY2FzZSB3aGVyZSBMUF9ERUFEIGRlbGV0ZXMgaGFwcGVu
CisJCSAqIGV2ZW4gdGhvdWdoIGEgcGFnZSBzcGxpdCB3b3VsZG4ndCB0YWtlIHBsYWNlIGlmIHdl
IHdlbnQgc3RyYWlnaHQgdG8KKwkJICogdGhlIF9idF9pbnNlcnRvbnBnKCkgY2FsbC4KKwkJICoK
KwkJICogQ2FsbCBfYnRfZGVkdXBfb25lX3BhZ2UoKSBpbnN0ZWFkIG9mIF9idF92YWN1dW1fb25l
X3BhZ2UoKSB0byBmb3JjZQorCQkgKiBkZWxldGVzICh0aGlzIGF2b2lkcyByZWx5aW5nIG9uIHRo
ZSBCVFBfSEFTX0dBUkJBR0UgaGludCBmbGFnLAorCQkgKiB3aGljaCBtaWdodCBiZSBmYWxzZWx5
IHVuc2V0KS4gIENhbGwgY2FuJ3QgYWN0dWFsbHkgZGVkdXAgaXRlbXMsCisJCSAqIHNpbmNlIHdl
IHBhc3MgYSBuZXdpdGVtc3ogb2YgMC4KKwkJICovCisJCV9idF9kZWR1cF9vbmVfcGFnZShyZWws
IGluc2VydHN0YXRlLT5idWYsIGhlYXBSZWwsIGluc2VydHN0YXRlLT5pdHVwLAorCQkJCQkJICAg
MCwgdHJ1ZSk7CisKKwkJLyoKKwkJICogRG8gbmV3IGJpbmFyeSBzZWFyY2guICBOZXcgaW5zZXJ0
IGxvY2F0aW9uIGNhbm5vdCBvdmVybGFwIHdpdGggYW55CisJCSAqIHBvc3RpbmcgbGlzdCBub3cu
CisJCSAqLworCQlpbnNlcnRzdGF0ZS0+Ym91bmRzX3ZhbGlkID0gZmFsc2U7CisJCWluc2VydHN0
YXRlLT5wb3N0aW5nb2ZmID0gMDsKKwkJbmV3aXRlbW9mZiA9IF9idF9iaW5zcmNoX2luc2VydChy
ZWwsIGluc2VydHN0YXRlKTsKKwkJQXNzZXJ0KGluc2VydHN0YXRlLT5wb3N0aW5nb2ZmID09IDAp
OworCX0KKworCXJldHVybiBuZXdpdGVtb2ZmOwogfQogCiAvKgpAQCAtOTAwLDEwICsxMDM0LDEy
IEBAIF9idF9zdGVwcmlnaHQoUmVsYXRpb24gcmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRl
LCBCVFN0YWNrIHN0YWNrKQogICoKICAqCQlUaGlzIHJlY3Vyc2l2ZSBwcm9jZWR1cmUgZG9lcyB0
aGUgZm9sbG93aW5nIHRoaW5nczoKICAqCisgKgkJCSsgIGlmIHBvc3RpbmdvZmYgIT0gMCwgc3Bs
aXRzIGV4aXN0aW5nIHBvc3RpbmcgbGlzdCB0dXBsZQorICoJCQkgICAoc2luY2UgaXQgb3Zlcmxh
cHMgd2l0aCBuZXcgJ2l0dXAnIHR1cGxlKS4KICAqCQkJKyAgaWYgbmVjZXNzYXJ5LCBzcGxpdHMg
dGhlIHRhcmdldCBwYWdlLCB1c2luZyAnaXR1cF9rZXknIGZvcgogICoJCQkgICBzdWZmaXggdHJ1
bmNhdGlvbiBvbiBsZWFmIHBhZ2VzIChjYWxsZXIgcGFzc2VzIE5VTEwgZm9yCiAgKgkJCSAgIG5v
bi1sZWFmIHBhZ2VzKS4KLSAqCQkJKyAgaW5zZXJ0cyB0aGUgdHVwbGUuCisgKgkJCSsgIGluc2Vy
dHMgdGhlIG5ldyB0dXBsZSAobWlnaHQgYmUgc3BsaXQgZnJvbSBwb3N0aW5nIGxpc3QpLgogICoJ
CQkrICBpZiB0aGUgcGFnZSB3YXMgc3BsaXQsIHBvcHMgdGhlIHBhcmVudCBzdGFjaywgYW5kIGZp
bmRzIHRoZQogICoJCQkgICByaWdodCBwbGFjZSB0byBpbnNlcnQgdGhlIG5ldyBjaGlsZCBwb2lu
dGVyIChieSB3YWxraW5nCiAgKgkJCSAgIHJpZ2h0IHVzaW5nIGluZm9ybWF0aW9uIHN0b3JlZCBp
biB0aGUgcGFyZW50IHN0YWNrKS4KQEAgLTkzMSwxMSArMTA2NywxNSBAQCBfYnRfaW5zZXJ0b25w
ZyhSZWxhdGlvbiByZWwsCiAJCQkgICBCVFN0YWNrIHN0YWNrLAogCQkJICAgSW5kZXhUdXBsZSBp
dHVwLAogCQkJICAgT2Zmc2V0TnVtYmVyIG5ld2l0ZW1vZmYsCisJCQkgICBpbnQgcG9zdGluZ29m
ZiwKIAkJCSAgIGJvb2wgc3BsaXRfb25seV9wYWdlKQogewogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdl
T3BhcXVlIGxwYWdlb3A7CiAJU2l6ZQkJaXRlbXN6OworCUluZGV4VHVwbGUJb3Bvc3Rpbmc7CisJ
SW5kZXhUdXBsZQlvcmlnaXR1cCA9IE5VTEw7CisJSW5kZXhUdXBsZQlucG9zdGluZyA9IE5VTEw7
CiAKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCWxwYWdlb3AgPSAoQlRQYWdlT3BhcXVl
KSBQYWdlR2V0U3BlY2lhbFBvaW50ZXIocGFnZSk7CkBAIC05NDksNiArMTA4OSw3IEBAIF9idF9p
bnNlcnRvbnBnKFJlbGF0aW9uIHJlbCwKIAlBc3NlcnQoUF9JU0xFQUYobHBhZ2VvcCkgfHwKIAkJ
ICAgQlRyZWVUdXBsZUdldE5BdHRzKGl0dXAsIHJlbCkgPD0KIAkJICAgSW5kZXhSZWxhdGlvbkdl
dE51bWJlck9mS2V5QXR0cmlidXRlcyhyZWwpKTsKKwlBc3NlcnQoIUJUcmVlVHVwbGVJc1Bvc3Rp
bmcoaXR1cCkpOwogCiAJLyogVGhlIGNhbGxlciBzaG91bGQndmUgZmluaXNoZWQgYW55IGluY29t
cGxldGUgc3BsaXRzIGFscmVhZHkuICovCiAJaWYgKFBfSU5DT01QTEVURV9TUExJVChscGFnZW9w
KSkKQEAgLTk1OSw2ICsxMTAwLDM0IEBAIF9idF9pbnNlcnRvbnBnKFJlbGF0aW9uIHJlbCwKIAlp
dGVtc3ogPSBNQVhBTElHTihpdGVtc3opOwkvKiBiZSBzYWZlLCBQYWdlQWRkSXRlbSB3aWxsIGRv
IHRoaXMgYnV0IHdlCiAJCQkJCQkJCSAqIG5lZWQgdG8gYmUgY29uc2lzdGVudCAqLwogCisJLyoK
KwkgKiBEbyB3ZSBuZWVkIHRvIHNwbGl0IGFuIGV4aXN0aW5nIHBvc3RpbmcgbGlzdCBpdGVtPwor
CSAqLworCWlmIChwb3N0aW5nb2ZmICE9IDApCisJeworCQlJdGVtSWQJCWl0ZW1pZCA9IFBhZ2VH
ZXRJdGVtSWQocGFnZSwgbmV3aXRlbW9mZik7CisKKwkJLyoKKwkJICogVGhlIG5ldyB0dXBsZSBp
cyBhIGR1cGxpY2F0ZSB3aXRoIGEgaGVhcCBUSUQgdGhhdCBmYWxscyBpbnNpZGUgdGhlCisJCSAq
IHJhbmdlIG9mIGFuIGV4aXN0aW5nIHBvc3RpbmcgbGlzdCB0dXBsZSBvbiBhIGxlYWYgcGFnZS4g
IFByZXBhcmUgdG8KKwkJICogc3BsaXQgYW4gZXhpc3RpbmcgcG9zdGluZyBsaXN0LiAgT3Zlcndy
aXRpbmcgdGhlIHBvc3RpbmcgbGlzdCB3aXRoCisJCSAqIGl0cyBwb3N0LXNwbGl0IHZlcnNpb24g
aXMgdHJlYXRlZCBhcyBhbiBleHRyYSBzdGVwIGluIGVpdGhlciB0aGUKKwkJICogaW5zZXJ0IG9y
IHBhZ2Ugc3BsaXQgY3JpdGljYWwgc2VjdGlvbi4KKwkJICovCisJCUFzc2VydChQX0lTTEVBRihs
cGFnZW9wKSAmJiAhSXRlbUlkSXNEZWFkKGl0ZW1pZCkpOworCQlBc3NlcnQoaXR1cF9rZXktPmhl
YXBrZXlzcGFjZSAmJiBpdHVwX2tleS0+c2FmZWRlZHVwKTsKKwkJb3Bvc3RpbmcgPSAoSW5kZXhU
dXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaXRlbWlkKTsKKworCQkvKiB1c2UgYSBtdXRhYmxlIGNv
cHkgb2YgaXR1cCBhcyBvdXIgaXR1cCBmcm9tIGhlcmUgb24gKi8KKwkJb3JpZ2l0dXAgPSBpdHVw
OworCQlpdHVwID0gQ29weUluZGV4VHVwbGUob3JpZ2l0dXApOworCQlucG9zdGluZyA9IF9idF9z
d2FwX3Bvc3RpbmcoaXR1cCwgb3Bvc3RpbmcsIHBvc3RpbmdvZmYpOworCQkvKiBpdHVwIG5vdyBj
b250YWlucyByaWdodG1vc3QvbWF4IFRJRCBmcm9tIG9wb3N0aW5nICovCisKKwkJLyogQWx0ZXIg
b2Zmc2V0IHNvIHRoYXQgbmV3aXRlbSBnb2VzIGFmdGVyIHBvc3RpbmcgbGlzdCAqLworCQluZXdp
dGVtb2ZmID0gT2Zmc2V0TnVtYmVyTmV4dChuZXdpdGVtb2ZmKTsKKwl9CisKIAkvKgogCSAqIERv
IHdlIG5lZWQgdG8gc3BsaXQgdGhlIHBhZ2UgdG8gZml0IHRoZSBpdGVtIG9uIGl0PwogCSAqCkBA
IC05OTEsNyArMTE2MCw4IEBAIF9idF9pbnNlcnRvbnBnKFJlbGF0aW9uIHJlbCwKIAkJCQkgQmxv
Y2tOdW1iZXJJc1ZhbGlkKFJlbGF0aW9uR2V0VGFyZ2V0QmxvY2socmVsKSkpKTsKIAogCQkvKiBz
cGxpdCB0aGUgYnVmZmVyIGludG8gbGVmdCBhbmQgcmlnaHQgaGFsdmVzICovCi0JCXJidWYgPSBf
YnRfc3BsaXQocmVsLCBpdHVwX2tleSwgYnVmLCBjYnVmLCBuZXdpdGVtb2ZmLCBpdGVtc3osIGl0
dXApOworCQlyYnVmID0gX2J0X3NwbGl0KHJlbCwgaXR1cF9rZXksIGJ1ZiwgY2J1ZiwgbmV3aXRl
bW9mZiwgaXRlbXN6LCBpdHVwLAorCQkJCQkJIG9yaWdpdHVwLCBucG9zdGluZywgcG9zdGluZ29m
Zik7CiAJCVByZWRpY2F0ZUxvY2tQYWdlU3BsaXQocmVsLAogCQkJCQkJCSAgIEJ1ZmZlckdldEJs
b2NrTnVtYmVyKGJ1ZiksCiAJCQkJCQkJICAgQnVmZmVyR2V0QmxvY2tOdW1iZXIocmJ1ZikpOwpA
QCAtMTA2Niw2ICsxMjM2LDkgQEAgX2J0X2luc2VydG9ucGcoUmVsYXRpb24gcmVsLAogCQkvKiBE
byB0aGUgdXBkYXRlLiAgTm8gZXJlcG9ydChFUlJPUikgdW50aWwgY2hhbmdlcyBhcmUgbG9nZ2Vk
ICovCiAJCVNUQVJUX0NSSVRfU0VDVElPTigpOwogCisJCWlmIChwb3N0aW5nb2ZmICE9IDApCisJ
CQltZW1jcHkob3Bvc3RpbmcsIG5wb3N0aW5nLCBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShucG9z
dGluZykpKTsKKwogCQlpZiAoIV9idF9wZ2FkZHR1cChwYWdlLCBpdGVtc3osIGl0dXAsIG5ld2l0
ZW1vZmYpKQogCQkJZWxvZyhQQU5JQywgImZhaWxlZCB0byBhZGQgbmV3IGl0ZW0gdG8gYmxvY2sg
JXUgaW4gaW5kZXggXCIlc1wiIiwKIAkJCQkgaXR1cF9ibGtubywgUmVsYXRpb25HZXRSZWxhdGlv
bk5hbWUocmVsKSk7CkBAIC0xMTE1LDggKzEyODgsMTkgQEAgX2J0X2luc2VydG9ucGcoUmVsYXRp
b24gcmVsLAogCQkJWExvZ0JlZ2luSW5zZXJ0KCk7CiAJCQlYTG9nUmVnaXN0ZXJEYXRhKChjaGFy
ICopICZ4bHJlYywgU2l6ZU9mQnRyZWVJbnNlcnQpOwogCi0JCQlpZiAoUF9JU0xFQUYobHBhZ2Vv
cCkpCisJCQlpZiAoUF9JU0xFQUYobHBhZ2VvcCkgJiYgcG9zdGluZ29mZiA9PSAwKQorCQkJewor
CQkJCS8qIFNpbXBsZSBsZWFmIGluc2VydCAqLwogCQkJCXhsaW5mbyA9IFhMT0dfQlRSRUVfSU5T
RVJUX0xFQUY7CisJCQl9CisJCQllbHNlIGlmIChwb3N0aW5nb2ZmICE9IDApCisJCQl7CisJCQkJ
LyoKKwkJCQkgKiBMZWFmIGluc2VydCB3aXRoIHBvc3RpbmcgbGlzdCBzcGxpdC4gIE11c3QgaW5j
bHVkZQorCQkJCSAqIHBvc3RpbmdvZmYgZmllbGQgYmVmb3JlIG5ld2l0ZW0vb3JpZ25ld2l0ZW0u
CisJCQkJICovCisJCQkJeGxpbmZvID0gWExPR19CVFJFRV9JTlNFUlRfUE9TVDsKKwkJCX0KIAkJ
CWVsc2UKIAkJCXsKIAkJCQkvKgpAQCAtMTEzOSw2ICsxMzIzLDcgQEAgX2J0X2luc2VydG9ucGco
UmVsYXRpb24gcmVsLAogCQkJCXhsbWV0YS5vbGRlc3RfYnRwb194YWN0ID0gbWV0YWQtPmJ0bV9v
bGRlc3RfYnRwb194YWN0OwogCQkJCXhsbWV0YS5sYXN0X2NsZWFudXBfbnVtX2hlYXBfdHVwbGVz
ID0KIAkJCQkJbWV0YWQtPmJ0bV9sYXN0X2NsZWFudXBfbnVtX2hlYXBfdHVwbGVzOworCQkJCXhs
bWV0YS5zYWZlZGVkdXAgPSBtZXRhZC0+YnRtX3NhZmVkZWR1cDsKIAogCQkJCVhMb2dSZWdpc3Rl
ckJ1ZmZlcigyLCBtZXRhYnVmLCBSRUdCVUZfV0lMTF9JTklUIHwgUkVHQlVGX1NUQU5EQVJEKTsK
IAkJCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDIsIChjaGFyICopICZ4bG1ldGEsIHNpemVvZih4bF9i
dHJlZV9tZXRhZGF0YSkpOwpAQCAtMTE0Nyw3ICsxMzMyLDI3IEBAIF9idF9pbnNlcnRvbnBnKFJl
bGF0aW9uIHJlbCwKIAkJCX0KIAogCQkJWExvZ1JlZ2lzdGVyQnVmZmVyKDAsIGJ1ZiwgUkVHQlVG
X1NUQU5EQVJEKTsKLQkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgKGNoYXIgKikgaXR1cCwgSW5k
ZXhUdXBsZVNpemUoaXR1cCkpOworCQkJaWYgKHBvc3RpbmdvZmYgPT0gMCkKKwkJCXsKKwkJCQkv
KiBTaW1wbGUsIGNvbW1vbiBjYXNlIC0tIGxvZyBpdHVwIGZyb20gY2FsbGVyICovCisJCQkJWExv
Z1JlZ2lzdGVyQnVmRGF0YSgwLCAoY2hhciAqKSBpdHVwLCBJbmRleFR1cGxlU2l6ZShpdHVwKSk7
CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoKKwkJCQkgKiBJbnNlcnQgd2l0aCBwb3N0aW5n
IGxpc3Qgc3BsaXQgKFhMT0dfQlRSRUVfSU5TRVJUX1BPU1QKKwkJCQkgKiByZWNvcmQpIGNhc2Uu
CisJCQkJICoKKwkJCQkgKiBMb2cgcG9zdGluZ29mZi4gIEFsc28gbG9nIG9yaWdpdHVwLCBub3Qg
aXR1cC4gIFJFRE8gcm91dGluZQorCQkJCSAqIG11c3QgcmVjb25zdHJ1Y3QgZmluYWwgaXR1cCAo
YXMgd2VsbCBhcyBucG9zdGluZykgdXNpbmcKKwkJCQkgKiBfYnRfc3dhcF9wb3N0aW5nKCkuCisJ
CQkJICovCisJCQkJdWludDE2CQl1cG9zdGluZ29mZiA9IHBvc3RpbmdvZmY7CisKKwkJCQlYTG9n
UmVnaXN0ZXJCdWZEYXRhKDAsIChjaGFyICopICZ1cG9zdGluZ29mZiwgc2l6ZW9mKHVpbnQxNikp
OworCQkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgKGNoYXIgKikgb3JpZ2l0dXAsCisJCQkJCQkJ
CQlJbmRleFR1cGxlU2l6ZShvcmlnaXR1cCkpOworCQkJfQogCiAJCQlyZWNwdHIgPSBYTG9nSW5z
ZXJ0KFJNX0JUUkVFX0lELCB4bGluZm8pOwogCkBAIC0xMTg5LDYgKzEzOTQsMTQgQEAgX2J0X2lu
c2VydG9ucGcoUmVsYXRpb24gcmVsLAogCQkJX2J0X2dldHJvb3RoZWlnaHQocmVsKSA+PSBCVFJF
RV9GQVNUUEFUSF9NSU5fTEVWRUwpCiAJCQlSZWxhdGlvblNldFRhcmdldEJsb2NrKHJlbCwgY2Fj
aGVkQmxvY2spOwogCX0KKworCS8qIGJlIHRpZHkgKi8KKwlpZiAocG9zdGluZ29mZiAhPSAwKQor
CXsKKwkJLyogaXR1cCBpcyBhY3R1YWxseSBhIG1vZGlmaWVkIGNvcHkgb2YgY2FsbGVyJ3Mgb3Jp
Z2luYWwgKi8KKwkJcGZyZWUobnBvc3RpbmcpOworCQlwZnJlZShpdHVwKTsKKwl9CiB9CiAKIC8q
CkBAIC0xMjA0LDEyICsxNDE3LDI0IEBAIF9idF9pbnNlcnRvbnBnKFJlbGF0aW9uIHJlbCwKICAq
CQlUaGlzIGZ1bmN0aW9uIHdpbGwgY2xlYXIgdGhlIElOQ09NUExFVEVfU1BMSVQgZmxhZyBvbiBp
dCwgYW5kCiAgKgkJcmVsZWFzZSB0aGUgYnVmZmVyLgogICoKKyAqCQlvcmlnbmV3aXRlbSwgbnBv
c3RpbmcsIGFuZCBwb3N0aW5nb2ZmIGFyZSBuZWVkZWQgd2hlbiBhbiBpbnNlcnQgb2YKKyAqCQlv
cmlnbmV3aXRlbSByZXN1bHRzIGluIGJvdGggYSBwb3N0aW5nIGxpc3Qgc3BsaXQgYW5kIGEgcGFn
ZSBzcGxpdC4KKyAqCQlUaGVzZSBleHRyYSBwb3N0aW5nIGxpc3Qgc3BsaXQgZGV0YWlscyBhcmUg
dXNlZCBoZXJlIGluIHRoZSBzYW1lCisgKgkJd2F5IGFzIHRoZXkgYXJlIHVzZWQgaW4gdGhlIG1v
cmUgY29tbW9uIGNhc2Ugd2hlcmUgYSBwb3N0aW5nIGxpc3QKKyAqCQlzcGxpdCBkb2VzIG5vdCBj
b2luY2lkZSB3aXRoIGEgcGFnZSBzcGxpdC4gIFdlIG5lZWQgdG8gZGVhbCB3aXRoCisgKgkJcG9z
dGluZyBsaXN0IHNwbGl0cyBkaXJlY3RseSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBldmVyeXRo
aW5nCisgKgkJdGhhdCBmb2xsb3dzIGZyb20gdGhlIGluc2VydCBvZiBvcmlnbmV3aXRlbSBpcyBo
YW5kbGVkIGFzIGEgc2luZ2xlCisgKgkJYXRvbWljIG9wZXJhdGlvbiAodGhvdWdoIGNhbGxlcidz
IGluc2VydCBvZiBhIG5ldyBwaXZvdC9kb3dubGluaworICoJCWludG8gcGFyZW50IHBhZ2Ugd2ls
bCBzdGlsbCBiZSBhIHNlcGFyYXRlIG9wZXJhdGlvbikuICBTZWUKKyAqCQluYnRyZWUvUkVBRE1F
IGZvciBkZXRhaWxzIG9uIHRoZSBkZXNpZ24gb2YgcG9zdGluZyBsaXN0IHNwbGl0cy4KKyAqCiAg
KgkJUmV0dXJucyB0aGUgbmV3IHJpZ2h0IHNpYmxpbmcgb2YgYnVmLCBwaW5uZWQgYW5kIHdyaXRl
LWxvY2tlZC4KICAqCQlUaGUgcGluIGFuZCBsb2NrIG9uIGJ1ZiBhcmUgbWFpbnRhaW5lZC4KICAq
Lwogc3RhdGljIEJ1ZmZlcgogX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGl0
dXBfa2V5LCBCdWZmZXIgYnVmLCBCdWZmZXIgY2J1ZiwKLQkJICBPZmZzZXROdW1iZXIgbmV3aXRl
bW9mZiwgU2l6ZSBuZXdpdGVtc3osIEluZGV4VHVwbGUgbmV3aXRlbSkKKwkJICBPZmZzZXROdW1i
ZXIgbmV3aXRlbW9mZiwgU2l6ZSBuZXdpdGVtc3osIEluZGV4VHVwbGUgbmV3aXRlbSwKKwkJICBJ
bmRleFR1cGxlIG9yaWduZXdpdGVtLCBJbmRleFR1cGxlIG5wb3N0aW5nLCB1aW50MTYgcG9zdGlu
Z29mZikKIHsKIAlCdWZmZXIJCXJidWY7CiAJUGFnZQkJb3JpZ3BhZ2U7CkBAIC0xMjI5LDYgKzE0
NTQsNyBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1
ZmZlciBidWYsIEJ1ZmZlciBjYnVmLAogCU9mZnNldE51bWJlciBsZWZ0b2ZmLAogCQkJCXJpZ2h0
b2ZmOwogCU9mZnNldE51bWJlciBmaXJzdHJpZ2h0OworCU9mZnNldE51bWJlciBvcmlncGFnZXBv
c3RpbmdvZmY7CiAJT2Zmc2V0TnVtYmVyIG1heG9mZjsKIAlPZmZzZXROdW1iZXIgaTsKIAlib29s
CQluZXdpdGVtb25sZWZ0LApAQCAtMTI5OCw2ICsxNTI0LDM0IEBAIF9idF9zcGxpdChSZWxhdGlv
biByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwgQnVmZmVyIGNidWYsCiAJ
UGFnZVNldExTTihsZWZ0cGFnZSwgUGFnZUdldExTTihvcmlncGFnZSkpOwogCWlzbGVhZiA9IFBf
SVNMRUFGKG9vcGFxdWUpOwogCisJLyoKKwkgKiBEZXRlcm1pbmUgcGFnZSBvZmZzZXQgbnVtYmVy
IG9mIGV4aXN0aW5nIG92ZXJsYXBwZWQtd2l0aC1vcmlnbmV3aXRlbQorCSAqIHBvc3RpbmcgbGlz
dCB3aGVuIGl0IGlzIG5lY2Vzc2FyeSB0byBwZXJmb3JtIGEgcG9zdGluZyBsaXN0IHNwbGl0IGlu
CisJICogcGFzc2luZy4gIE5vdGUgdGhhdCBuZXdpdGVtIHdhcyBhbHJlYWR5IGNoYW5nZWQgYnkg
Y2FsbGVyIChuZXdpdGVtIG5vCisJICogbG9uZ2VyIGhhcyB0aGUgb3JpZ25ld2l0ZW0gVElEKS4K
KwkgKgorCSAqIFRoaXMgcGFnZSBvZmZzZXQgbnVtYmVyIChvcmlncGFnZXBvc3RpbmdvZmYpIHdp
bGwgYmUgdXNlZCB0byBwcmV0ZW5kCisJICogdGhhdCB0aGUgcG9zdGluZyBzcGxpdCBoYXMgYWxy
ZWFkeSB0YWtlbiBwbGFjZSwgZXZlbiB0aG91Z2ggdGhlCisJICogcmVxdWlyZWQgbW9kaWZpY2F0
aW9ucyB0byBvcmlncGFnZSB3b24ndCBvY2N1ciB1bnRpbCB3ZSByZWFjaCB0aGUKKwkgKiBjcml0
aWNhbCBzZWN0aW9uLiAgVGhlIGxhc3RsZWZ0IGFuZCBmaXJzdHJpZ2h0IHR1cGxlcyBvZiBvdXIg
cGFnZSBzcGxpdAorCSAqIHBvaW50IHNob3VsZCwgaW4gZWZmZWN0LCBjb21lIGZyb20gYW4gaW1h
Z2luYXJ5IHZlcnNpb24gb2Ygb3JpZ3BhZ2UKKwkgKiB0aGF0IGhhcyB0aGUgbnBvc3RpbmcgdHVw
bGUgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgcG9zdGluZyBsaXN0IHR1cGxlLgorCSAqCisJICog
Tm90ZTogX2J0X2ZpbmRzcGxpdGxvYygpIHNob3VsZCBoYXZlIGNvbXBlbnNhdGVkIGZvciBjb2lu
Y2lkaW5nIHBvc3RpbmcKKwkgKiBsaXN0IHNwbGl0cyBpbiBqdXN0IHRoZSBzYW1lIHdheSwgYXQg
bGVhc3QgaW4gdGhlb3J5LiAgSXQgZG9lc24ndAorCSAqIGJvdGhlciB3aXRoIHRoYXQsIHRob3Vn
aC4gIEluIHByYWN0aWNlIGl0IHdvbid0IGFmZmVjdCBpdHMgY2hvaWNlIG9mCisJICogc3BsaXQg
cG9pbnQuCisJICovCisJb3JpZ3BhZ2Vwb3N0aW5nb2ZmID0gSW52YWxpZE9mZnNldE51bWJlcjsK
KwlpZiAocG9zdGluZ29mZiAhPSAwKQorCXsKKwkJQXNzZXJ0KGlzbGVhZik7CisJCUFzc2VydChJ
dGVtUG9pbnRlckNvbXBhcmUoJm9yaWduZXdpdGVtLT50X3RpZCwKKwkJCQkJCQkJICAmbmV3aXRl
bS0+dF90aWQpIDwgMCk7CisJCUFzc2VydChCVHJlZVR1cGxlSXNQb3N0aW5nKG5wb3N0aW5nKSk7
CisJCW9yaWdwYWdlcG9zdGluZ29mZiA9IE9mZnNldE51bWJlclByZXYobmV3aXRlbW9mZik7CisJ
fQorCiAJLyoKIAkgKiBUaGUgImhpZ2gga2V5IiBmb3IgdGhlIG5ldyBsZWZ0IHBhZ2Ugd2lsbCBi
ZSB0aGUgZmlyc3Qga2V5IHRoYXQncyBnb2luZwogCSAqIHRvIGdvIGludG8gdGhlIG5ldyByaWdo
dCBwYWdlLCBvciBhIHRydW5jYXRlZCB2ZXJzaW9uIGlmIHRoaXMgaXMgYSBsZWFmCkBAIC0xMzM1
LDYgKzE1ODksOCBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9r
ZXksIEJ1ZmZlciBidWYsIEJ1ZmZlciBjYnVmLAogCQlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKG9y
aWdwYWdlLCBmaXJzdHJpZ2h0KTsKIAkJaXRlbXN6ID0gSXRlbUlkR2V0TGVuZ3RoKGl0ZW1pZCk7
CiAJCWl0ZW0gPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ob3JpZ3BhZ2UsIGl0ZW1pZCk7CisJ
CWlmIChmaXJzdHJpZ2h0ID09IG9yaWdwYWdlcG9zdGluZ29mZikKKwkJCWl0ZW0gPSBucG9zdGlu
ZzsKIAl9CiAKIAkvKgpAQCAtMTM2OCw2ICsxNjI0LDggQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJl
bCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLCBCdWZmZXIgY2J1ZiwKIAkJCUFz
c2VydChsYXN0bGVmdG9mZiA+PSBQX0ZJUlNUREFUQUtFWShvb3BhcXVlKSk7CiAJCQlpdGVtaWQg
PSBQYWdlR2V0SXRlbUlkKG9yaWdwYWdlLCBsYXN0bGVmdG9mZik7CiAJCQlsYXN0bGVmdCA9IChJ
bmRleFR1cGxlKSBQYWdlR2V0SXRlbShvcmlncGFnZSwgaXRlbWlkKTsKKwkJCWlmIChsYXN0bGVm
dG9mZiA9PSBvcmlncGFnZXBvc3RpbmdvZmYpCisJCQkJbGFzdGxlZnQgPSBucG9zdGluZzsKIAkJ
fQogCiAJCUFzc2VydChsYXN0bGVmdCAhPSBpdGVtKTsKQEAgLTEzODMsNiArMTY0MSw3IEBAIF9i
dF9zcGxpdChSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1Ziwg
QnVmZmVyIGNidWYsCiAJICovCiAJbGVmdG9mZiA9IFBfSElLRVk7CiAKKwlBc3NlcnQoQlRyZWVU
dXBsZUlzUGl2b3QobGVmdGhpa2V5KSB8fCAhaXR1cF9rZXktPmhlYXBrZXlzcGFjZSk7CiAJQXNz
ZXJ0KEJUcmVlVHVwbGVHZXROQXR0cyhsZWZ0aGlrZXksIHJlbCkgPiAwKTsKIAlBc3NlcnQoQlRy
ZWVUdXBsZUdldE5BdHRzKGxlZnRoaWtleSwgcmVsKSA8PSBpbmRua2V5YXR0cyk7CiAJaWYgKFBh
Z2VBZGRJdGVtKGxlZnRwYWdlLCAoSXRlbSkgbGVmdGhpa2V5LCBpdGVtc3osIGxlZnRvZmYsCkBA
IC0xNDQ3LDYgKzE3MDYsNyBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQg
aXR1cF9rZXksIEJ1ZmZlciBidWYsIEJ1ZmZlciBjYnVmLAogCQlpdGVtaWQgPSBQYWdlR2V0SXRl
bUlkKG9yaWdwYWdlLCBQX0hJS0VZKTsKIAkJaXRlbXN6ID0gSXRlbUlkR2V0TGVuZ3RoKGl0ZW1p
ZCk7CiAJCWl0ZW0gPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ob3JpZ3BhZ2UsIGl0ZW1pZCk7
CisJCUFzc2VydChCVHJlZVR1cGxlSXNQaXZvdChpdGVtKSB8fCAhaXR1cF9rZXktPmhlYXBrZXlz
cGFjZSk7CiAJCUFzc2VydChCVHJlZVR1cGxlR2V0TkF0dHMoaXRlbSwgcmVsKSA+IDApOwogCQlB
c3NlcnQoQlRyZWVUdXBsZUdldE5BdHRzKGl0ZW0sIHJlbCkgPD0gaW5kbmtleWF0dHMpOwogCQlp
ZiAoUGFnZUFkZEl0ZW0ocmlnaHRwYWdlLCAoSXRlbSkgaXRlbSwgaXRlbXN6LCByaWdodG9mZiwK
QEAgLTE0NzUsOCArMTczNSwxNiBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNl
cnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsIEJ1ZmZlciBjYnVmLAogCQlpdGVtc3ogPSBJdGVtSWRH
ZXRMZW5ndGgoaXRlbWlkKTsKIAkJaXRlbSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShvcmln
cGFnZSwgaXRlbWlkKTsKIAorCQkvKiByZXBsYWNlIG9yaWdpbmFsIGl0ZW0gd2l0aCBucG9zdGlu
ZyBkdWUgdG8gcG9zdGluZyBzcGxpdD8gKi8KKwkJaWYgKGkgPT0gb3JpZ3BhZ2Vwb3N0aW5nb2Zm
KQorCQl7CisJCQlBc3NlcnQoQlRyZWVUdXBsZUlzUG9zdGluZyhpdGVtKSk7CisJCQlBc3NlcnQo
aXRlbXN6ID09IE1BWEFMSUdOKEluZGV4VHVwbGVTaXplKG5wb3N0aW5nKSkpOworCQkJaXRlbSA9
IG5wb3N0aW5nOworCQl9CisKIAkJLyogZG9lcyBuZXcgaXRlbSBiZWxvbmcgYmVmb3JlIHRoaXMg
b25lPyAqLwotCQlpZiAoaSA9PSBuZXdpdGVtb2ZmKQorCQllbHNlIGlmIChpID09IG5ld2l0ZW1v
ZmYpCiAJCXsKIAkJCWlmIChuZXdpdGVtb25sZWZ0KQogCQkJewpAQCAtMTY0NSw4ICsxOTEzLDEy
IEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVy
IGJ1ZiwgQnVmZmVyIGNidWYsCiAJCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJCXhscmVjLmxldmVs
ID0gcm9wYXF1ZS0+YnRwby5sZXZlbDsKKwkJLyogU2VlIGNvbW1lbnRzIGJlbG93IG9uIG5ld2l0
ZW0sIG9yaWduZXdpdGVtLCBhbmQgcG9zdGluZyBsaXN0cyAqLwogCQl4bHJlYy5maXJzdHJpZ2h0
ID0gZmlyc3RyaWdodDsKIAkJeGxyZWMubmV3aXRlbW9mZiA9IG5ld2l0ZW1vZmY7CisJCXhscmVj
LnBvc3RpbmdvZmYgPSAwOworCQlpZiAocG9zdGluZ29mZiAhPSAwICYmIG9yaWdwYWdlcG9zdGlu
Z29mZiA8IGZpcnN0cmlnaHQpCisJCQl4bHJlYy5wb3N0aW5nb2ZmID0gcG9zdGluZ29mZjsKIAog
CQlYTG9nQmVnaW5JbnNlcnQoKTsKIAkJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAmeGxyZWMs
IFNpemVPZkJ0cmVlU3BsaXQpOwpAQCAtMTY2NSwxMSArMTkzNywzNSBAQCBfYnRfc3BsaXQoUmVs
YXRpb24gcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsIEJ1ZmZlciBjYnVm
LAogCQkgKiBiZWNhdXNlIGl0J3MgaW5jbHVkZWQgd2l0aCBhbGwgdGhlIG90aGVyIGl0ZW1zIG9u
IHRoZSByaWdodCBwYWdlLikKIAkJICogU2hvdyB0aGUgbmV3IGl0ZW0gYXMgYmVsb25naW5nIHRv
IHRoZSBsZWZ0IHBhZ2UgYnVmZmVyLCBzbyB0aGF0IGl0CiAJCSAqIGlzIG5vdCBzdG9yZWQgaWYg
WExvZ0luc2VydCBkZWNpZGVzIGl0IG5lZWRzIGEgZnVsbC1wYWdlIGltYWdlIG9mCi0JCSAqIHRo
ZSBsZWZ0IHBhZ2UuICBXZSBzdG9yZSB0aGUgb2Zmc2V0IGFueXdheSwgdGhvdWdoLCB0byBzdXBw
b3J0Ci0JCSAqIGFyY2hpdmUgY29tcHJlc3Npb24gb2YgdGhlc2UgcmVjb3Jkcy4KKwkJICogdGhl
IGxlZnQgcGFnZS4gIFdlIGFsd2F5cyBzdG9yZSBuZXdpdGVtb2ZmIGluIHRoZSByZWNvcmQsIHRo
b3VnaC4KKwkJICoKKwkJICogVGhlIGRldGFpbHMgYXJlIHNvbWV0aW1lcyBzbGlnaHRseSBkaWZm
ZXJlbnQgZm9yIHBhZ2Ugc3BsaXRzIHRoYXQKKwkJICogY29pbmNpZGUgd2l0aCBhIHBvc3Rpbmcg
bGlzdCBzcGxpdC4gIElmIGJvdGggdGhlIHJlcGxhY2VtZW50CisJCSAqIHBvc3RpbmcgbGlzdCBh
bmQgbmV3aXRlbSBnbyBvbiB0aGUgcmlnaHQgcGFnZSwgdGhlbiB3ZSBkb24ndCBuZWVkCisJCSAq
IHRvIGxvZyBhbnl0aGluZyBleHRyYSwganVzdCBsaWtlIHRoZSBzaW1wbGUgIW5ld2l0ZW1vbmxl
ZnQKKwkJICogbm8tcG9zdGluZy1zcGxpdCBjYXNlIChwb3N0aW5nb2ZmIGlzIHNldCB0byB6ZXJv
IGluIHRoZSBXQUwgcmVjb3JkLAorCQkgKiBzbyByZWNvdmVyeSBkb2Vzbid0IG5lZWQgdG8gcHJv
Y2VzcyBhIHBvc3RpbmcgbGlzdCBzcGxpdCBhdCBhbGwpLgorCQkgKiBPdGhlcndpc2UsIHdlIHNl
dCBwb3N0aW5nb2ZmIGFuZCBsb2cgb3JpZ25ld2l0ZW0gaW5zdGVhZCBvZgorCQkgKiBuZXdpdGVt
LCBkZXNwaXRlIGhhdmluZyBhY3R1YWxseSBpbnNlcnRlZCBuZXdpdGVtLiAgUkVETyByb3V0aW5l
CisJCSAqIG11c3QgcmVjb25zdHJ1Y3QgbnBvc3RpbmcgYW5kIG5ld2l0ZW0gdXNpbmcgX2J0X3N3
YXBfcG9zdGluZygpLgorCQkgKgorCQkgKiBOb3RlOiBJdCdzIHBvc3NpYmxlIHRoYXQgb3VyIHBh
Z2Ugc3BsaXQgcG9pbnQgaXMgdGhlIHBvaW50IHRoYXQKKwkJICogbWFrZXMgdGhlIHBvc3Rpbmcg
bGlzdCBsYXN0bGVmdCBhbmQgbmV3aXRlbSBmaXJzdHJpZ2h0LiAgVGhpcyBpcworCQkgKiB0aGUg
b25seSBjYXNlIHdoZXJlIHdlIGxvZyBvcmlnbmV3aXRlbS9uZXdpdGVtIGRlc3BpdGUgbmV3aXRl
bQorCQkgKiBnb2luZyBvbiB0aGUgcmlnaHQgcGFnZS4gIElmIFhMb2dJbnNlcnQgZGVjaWRlcyB0
aGF0IGl0IGNhbiBvbWl0CisJCSAqIG9yaWduZXdpdGVtIGR1ZSB0byBsb2dnaW5nIGEgZnVsbC1w
YWdlIGltYWdlIG9mIHRoZSBsZWZ0IHBhZ2UsCisJCSAqIGV2ZXJ5dGhpbmcgc3RpbGwgd29ya3Mg
b3V0LCBzaW5jZSByZWNvdmVyeSBvbmx5IG5lZWRzIHRvIGxvZworCQkgKiBvcmlnbmV3aXRlbSBm
b3IgaXRlbXMgb24gdGhlIGxlZnQgcGFnZSAoanVzdCBsaWtlIHRoZSByZWd1bGFyCisJCSAqIG5l
d2l0ZW0tbG9nZ2VkIGNhc2UpLgogCQkgKi8KLQkJaWYgKG5ld2l0ZW1vbmxlZnQpCisJCWlmIChu
ZXdpdGVtb25sZWZ0ICYmIHhscmVjLnBvc3RpbmdvZmYgPT0gMCkKIAkJCVhMb2dSZWdpc3RlckJ1
ZkRhdGEoMCwgKGNoYXIgKikgbmV3aXRlbSwgTUFYQUxJR04obmV3aXRlbXN6KSk7CisJCWVsc2Ug
aWYgKHhscmVjLnBvc3RpbmdvZmYgIT0gMCkKKwkJeworCQkJQXNzZXJ0KG5ld2l0ZW1vbmxlZnQg
fHwgZmlyc3RyaWdodCA9PSBuZXdpdGVtb2ZmKTsKKwkJCUFzc2VydChNQVhBTElHTihuZXdpdGVt
c3opID09IEluZGV4VHVwbGVTaXplKG9yaWduZXdpdGVtKSk7CisJCQlYTG9nUmVnaXN0ZXJCdWZE
YXRhKDAsIChjaGFyICopIG9yaWduZXdpdGVtLCBNQVhBTElHTihuZXdpdGVtc3opKTsKKwkJfQog
CiAJCS8qIExvZyB0aGUgbGVmdCBwYWdlJ3MgbmV3IGhpZ2gga2V5ICovCiAJCWl0ZW1pZCA9IFBh
Z2VHZXRJdGVtSWQob3JpZ3BhZ2UsIFBfSElLRVkpOwpAQCAtMTgyOSw3ICsyMTI1LDcgQEAgX2J0
X2luc2VydF9wYXJlbnQoUmVsYXRpb24gcmVsLAogCiAJCS8qIFJlY3Vyc2l2ZWx5IGluc2VydCBp
bnRvIHRoZSBwYXJlbnQgKi8KIAkJX2J0X2luc2VydG9ucGcocmVsLCBOVUxMLCBwYnVmLCBidWYs
IHN0YWNrLT5idHNfcGFyZW50LAotCQkJCQkgICBuZXdfaXRlbSwgc3RhY2stPmJ0c19vZmZzZXQg
KyAxLAorCQkJCQkgICBuZXdfaXRlbSwgc3RhY2stPmJ0c19vZmZzZXQgKyAxLCAwLAogCQkJCQkg
ICBpc19vbmx5KTsKIAogCQkvKiBiZSB0aWR5ICovCkBAIC0yMTg1LDYgKzI0ODEsNyBAQCBfYnRf
bmV3cm9vdChSZWxhdGlvbiByZWwsIEJ1ZmZlciBsYnVmLCBCdWZmZXIgcmJ1ZikKIAkJbWQuZmFz
dGxldmVsID0gbWV0YWQtPmJ0bV9sZXZlbDsKIAkJbWQub2xkZXN0X2J0cG9feGFjdCA9IG1ldGFk
LT5idG1fb2xkZXN0X2J0cG9feGFjdDsKIAkJbWQubGFzdF9jbGVhbnVwX251bV9oZWFwX3R1cGxl
cyA9IG1ldGFkLT5idG1fbGFzdF9jbGVhbnVwX251bV9oZWFwX3R1cGxlczsKKwkJbWQuc2FmZWRl
ZHVwID0gbWV0YWQtPmJ0bV9zYWZlZGVkdXA7CiAKIAkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgyLCAo
Y2hhciAqKSAmbWQsIHNpemVvZih4bF9idHJlZV9tZXRhZGF0YSkpOwogCkBAIC0yMjY1LDcgKzI1
NjIsNyBAQCBfYnRfcGdhZGR0dXAoUGFnZSBwYWdlLAogc3RhdGljIHZvaWQKIF9idF92YWN1dW1f
b25lX3BhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmZmVyLCBSZWxhdGlvbiBoZWFwUmVsKQog
ewotCU9mZnNldE51bWJlciBkZWxldGFibGVbTWF4T2Zmc2V0TnVtYmVyXTsKKwlPZmZzZXROdW1i
ZXIgZGVsZXRhYmxlW01heEluZGV4VHVwbGVzUGVyUGFnZV07CiAJaW50CQkJbmRlbGV0YWJsZSA9
IDA7CiAJT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQltaW5vZmYsCkBAIC0yMjk4LDYgKzI1OTUs
NiBAQCBfYnRfdmFjdXVtX29uZV9wYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZmZlciwgUmVs
YXRpb24gaGVhcFJlbCkKIAkgKiBOb3RlOiBpZiB3ZSBkaWRuJ3QgZmluZCBhbnkgTFBfREVBRCBp
dGVtcywgdGhlbiB0aGUgcGFnZSdzCiAJICogQlRQX0hBU19HQVJCQUdFIGhpbnQgYml0IGlzIGZh
bHNlbHkgc2V0LiAgV2UgZG8gbm90IGJvdGhlciBleHBlbmRpbmcgYQogCSAqIHNlcGFyYXRlIHdy
aXRlIHRvIGNsZWFyIGl0LCBob3dldmVyLiAgV2Ugd2lsbCBjbGVhciBpdCB3aGVuIHdlIHNwbGl0
Ci0JICogdGhlIHBhZ2UuCisJICogdGhlIHBhZ2UsIG9yIHdoZW4gZGVkdXBsaWNhdGlvbiBydW5z
LgogCSAqLwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdl
LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwppbmRleCBmMDVjYmU3NDY3
Li43MmIzOTIxMTE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBh
Z2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwpAQCAtMjQsNiAr
MjQsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9u
YnR4bG9nLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJhY2Nlc3Mv
dHJhbnNhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hs
b2dpbnNlcnQuaCIKQEAgLTM3LDYgKzM4LDggQEAgc3RhdGljIEJUTWV0YVBhZ2VEYXRhICpfYnRf
Z2V0bWV0YShSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmKTsKIHN0YXRpYyBib29sIF9idF9t
YXJrX3BhZ2VfaGFsZmRlYWQoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLCBCVFN0YWNrIHN0YWNr
KTsKIHN0YXRpYyBib29sIF9idF91bmxpbmtfaGFsZmRlYWRfcGFnZShSZWxhdGlvbiByZWwsIEJ1
ZmZlciBsZWFmYnVmLAogCQkJCQkJCQkJIGJvb2wgKnJpZ2h0c2liX2VtcHR5KTsKK3N0YXRpYyBU
cmFuc2FjdGlvbklkIF9idF94aWRfaG9yaXpvbihSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXBS
ZWwsIFBhZ2UgcGFnZSwKKwkJCQkJCQkJCSBPZmZzZXROdW1iZXIgKmRlbGV0YWJsZSwgaW50IG5k
ZWxldGFibGUpOwogc3RhdGljIGJvb2wgX2J0X2xvY2tfYnJhbmNoX3BhcmVudChSZWxhdGlvbiBy
ZWwsIEJsb2NrTnVtYmVyIGNoaWxkLAogCQkJCQkJCQkgICBCVFN0YWNrIHN0YWNrLCBCdWZmZXIg
KnRvcHBhcmVudCwgT2Zmc2V0TnVtYmVyICp0b3BvZmYsCiAJCQkJCQkJCSAgIEJsb2NrTnVtYmVy
ICp0YXJnZXQsIEJsb2NrTnVtYmVyICpyaWdodHNpYik7CkBAIC00Nyw3ICs1MCw4IEBAIHN0YXRp
YyB2b2lkIF9idF9sb2dfcmV1c2VfcGFnZShSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGJsa25v
LAogICoJX2J0X2luaXRtZXRhcGFnZSgpIC0tIEZpbGwgYSBwYWdlIGJ1ZmZlciB3aXRoIGEgY29y
cmVjdCBtZXRhcGFnZSBpbWFnZQogICovCiB2b2lkCi1fYnRfaW5pdG1ldGFwYWdlKFBhZ2UgcGFn
ZSwgQmxvY2tOdW1iZXIgcm9vdGJrbnVtLCB1aW50MzIgbGV2ZWwpCitfYnRfaW5pdG1ldGFwYWdl
KFBhZ2UgcGFnZSwgQmxvY2tOdW1iZXIgcm9vdGJrbnVtLCB1aW50MzIgbGV2ZWwsCisJCQkJIGJv
b2wgc2FmZWRlZHVwKQogewogCUJUTWV0YVBhZ2VEYXRhICptZXRhZDsKIAlCVFBhZ2VPcGFxdWUg
bWV0YW9wYXF1ZTsKQEAgLTYzLDYgKzY3LDcgQEAgX2J0X2luaXRtZXRhcGFnZShQYWdlIHBhZ2Us
IEJsb2NrTnVtYmVyIHJvb3Ria251bSwgdWludDMyIGxldmVsKQogCW1ldGFkLT5idG1fZmFzdGxl
dmVsID0gbGV2ZWw7CiAJbWV0YWQtPmJ0bV9vbGRlc3RfYnRwb194YWN0ID0gSW52YWxpZFRyYW5z
YWN0aW9uSWQ7CiAJbWV0YWQtPmJ0bV9sYXN0X2NsZWFudXBfbnVtX2hlYXBfdHVwbGVzID0gLTEu
MDsKKwltZXRhZC0+YnRtX3NhZmVkZWR1cCA9IHNhZmVkZWR1cDsKIAogCW1ldGFvcGFxdWUgPSAo
QlRQYWdlT3BhcXVlKSBQYWdlR2V0U3BlY2lhbFBvaW50ZXIocGFnZSk7CiAJbWV0YW9wYXF1ZS0+
YnRwb19mbGFncyA9IEJUUF9NRVRBOwpAQCAtMTAyLDYgKzEwNyw5IEBAIF9idF91cGdyYWRlbWV0
YXBhZ2UoUGFnZSBwYWdlKQogCW1ldGFkLT5idG1fdmVyc2lvbiA9IEJUUkVFX05PVkFDX1ZFUlNJ
T047CiAJbWV0YWQtPmJ0bV9vbGRlc3RfYnRwb194YWN0ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7
CiAJbWV0YWQtPmJ0bV9sYXN0X2NsZWFudXBfbnVtX2hlYXBfdHVwbGVzID0gLTEuMDsKKwkvKiBP
bmx5IGEgUkVJTkRFWCBjYW4gc2V0IHRoaXMgZmllbGQgKi8KKwlBc3NlcnQoIW1ldGFkLT5idG1f
c2FmZWRlZHVwKTsKKwltZXRhZC0+YnRtX3NhZmVkZWR1cCA9IGZhbHNlOwogCiAJLyogQWRqdXN0
IHBkX2xvd2VyIChzZWUgX2J0X2luaXRtZXRhcGFnZSgpIGZvciBkZXRhaWxzKSAqLwogCSgoUGFn
ZUhlYWRlcikgcGFnZSktPnBkX2xvd2VyID0KQEAgLTIxMyw2ICsyMjEsNyBAQCBfYnRfdXBkYXRl
X21ldGFfY2xlYW51cF9pbmZvKFJlbGF0aW9uIHJlbCwgVHJhbnNhY3Rpb25JZCBvbGRlc3RCdHBv
WGFjdCwKIAkJbWQuZmFzdGxldmVsID0gbWV0YWQtPmJ0bV9mYXN0bGV2ZWw7CiAJCW1kLm9sZGVz
dF9idHBvX3hhY3QgPSBvbGRlc3RCdHBvWGFjdDsKIAkJbWQubGFzdF9jbGVhbnVwX251bV9oZWFw
X3R1cGxlcyA9IG51bUhlYXBUdXBsZXM7CisJCW1kLnNhZmVkZWR1cCA9IG1ldGFkLT5idG1fc2Fm
ZWRlZHVwOwogCiAJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgKGNoYXIgKikgJm1kLCBzaXplb2Yo
eGxfYnRyZWVfbWV0YWRhdGEpKTsKIApAQCAtMjc0LDYgKzI4Myw4IEBAIF9idF9nZXRyb290KFJl
bGF0aW9uIHJlbCwgaW50IGFjY2VzcykKIAkJQXNzZXJ0KG1ldGFkLT5idG1fbWFnaWMgPT0gQlRS
RUVfTUFHSUMpOwogCQlBc3NlcnQobWV0YWQtPmJ0bV92ZXJzaW9uID49IEJUUkVFX01JTl9WRVJT
SU9OKTsKIAkJQXNzZXJ0KG1ldGFkLT5idG1fdmVyc2lvbiA8PSBCVFJFRV9WRVJTSU9OKTsKKwkJ
QXNzZXJ0KCFtZXRhZC0+YnRtX3NhZmVkZWR1cCB8fAorCQkJICAgbWV0YWQtPmJ0bV92ZXJzaW9u
ID4gQlRSRUVfTk9WQUNfVkVSU0lPTik7CiAJCUFzc2VydChtZXRhZC0+YnRtX3Jvb3QgIT0gUF9O
T05FKTsKIAogCQlyb290Ymxrbm8gPSBtZXRhZC0+YnRtX2Zhc3Ryb290OwpAQCAtMzk0LDYgKzQw
NSw3IEBAIF9idF9nZXRyb290KFJlbGF0aW9uIHJlbCwgaW50IGFjY2VzcykKIAkJCW1kLmZhc3Rs
ZXZlbCA9IDA7CiAJCQltZC5vbGRlc3RfYnRwb194YWN0ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7
CiAJCQltZC5sYXN0X2NsZWFudXBfbnVtX2hlYXBfdHVwbGVzID0gLTEuMDsKKwkJCW1kLnNhZmVk
ZWR1cCA9IG1ldGFkLT5idG1fc2FmZWRlZHVwOwogCiAJCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDIs
IChjaGFyICopICZtZCwgc2l6ZW9mKHhsX2J0cmVlX21ldGFkYXRhKSk7CiAKQEAgLTYxOCwyMiAr
NjMwLDMzIEBAIF9idF9nZXRyb290aGVpZ2h0KFJlbGF0aW9uIHJlbCkKIAlBc3NlcnQobWV0YWQt
PmJ0bV9tYWdpYyA9PSBCVFJFRV9NQUdJQyk7CiAJQXNzZXJ0KG1ldGFkLT5idG1fdmVyc2lvbiA+
PSBCVFJFRV9NSU5fVkVSU0lPTik7CiAJQXNzZXJ0KG1ldGFkLT5idG1fdmVyc2lvbiA8PSBCVFJF
RV9WRVJTSU9OKTsKKwlBc3NlcnQoIW1ldGFkLT5idG1fc2FmZWRlZHVwIHx8IG1ldGFkLT5idG1f
dmVyc2lvbiA+IEJUUkVFX05PVkFDX1ZFUlNJT04pOwogCUFzc2VydChtZXRhZC0+YnRtX2Zhc3Ry
b290ICE9IFBfTk9ORSk7CiAKIAlyZXR1cm4gbWV0YWQtPmJ0bV9mYXN0bGV2ZWw7CiB9CiAKIC8q
Ci0gKglfYnRfaGVhcGtleXNwYWNlKCkgLS0gaXMgaGVhcCBUSUQgYmVpbmcgdHJlYXRlZCBhcyBh
IGtleT8KKyAqCV9idF9tZXRhdmVyc2lvbigpIC0tIEdldCB2ZXJzaW9uL3N0YXR1cyBpbmZvIGZy
b20gbWV0YXBhZ2UuCisgKgorICoJCVNldHMgY2FsbGVyJ3MgKmhlYXBrZXlzcGFjZSBhbmQgKnNh
ZmVkZWR1cCBhcmd1bWVudHMgdXNpbmcgZGF0YSBmcm9tCisgKgkJdGhlIEItVHJlZSBtZXRhcGFn
ZSAoY291bGQgYmUgbG9jYWxseS1jYWNoZWQgdmVyc2lvbikuICBUaGlzCisgKgkJaW5mb3JtYXRp
b24gbmVlZHMgdG8gYmUgc3Rhc2hlZCBpbiBpbnNlcnRpb24gc2NhbmtleSwgc28gd2UgcHJvdmlk
ZSBhCisgKgkJc2luZ2xlIGZ1bmN0aW9uIHRoYXQgZmV0Y2hlcyBib3RoIGF0IG9uY2UuCiAgKgog
ICoJCVRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJ1bGVzIHRoYXQgbXVzdCBiZSB1c2Vk
IHRvIGRlc2NlbmQgYQogICoJCWJ0cmVlLiAgVmVyc2lvbiA0IGluZGV4ZXMgdHJlYXQgaGVhcCBU
SUQgYXMgYSB0aWVicmVha2VyIGF0dHJpYnV0ZS4KICAqCQlwZ191cGdyYWRlJ2QgdmVyc2lvbiAz
IGluZGV4ZXMgbmVlZCBleHRyYSBzdGVwcyB0byBwcmVzZXJ2ZSByZWFzb25hYmxlCiAgKgkJcGVy
Zm9ybWFuY2Ugd2hlbiBpbnNlcnRpbmcgYSBuZXcgQlRTY2FuSW5zZXJ0LXdpc2UgZHVwbGljYXRl
IHR1cGxlCiAgKgkJYW1vbmcgbWFueSBsZWFmIHBhZ2VzIGFscmVhZHkgZnVsbCBvZiBzdWNoIGR1
cGxpY2F0ZXMuCisgKgorICoJCUFsc28gc2V0cyBmaWVsZCB0aGF0IGluZGljYXRlcyB0byBjYWxs
ZXIgd2hldGhlciBvciBub3QgaXQgaXMgc2FmZSB0bworICoJCWFwcGx5IGRlZHVwbGljYXRpb24g
d2l0aGluIGluZGV4LiAgTm90ZSB0aGF0IHdlIHJlbHkgb24gdGhlIGFzc3VtcHRpb24KKyAqCQl0
aGF0IGJ0bV9zYWZlZGVkdXAgd2lsbCBiZSB6ZXJvJ2VkIG9uIGhlYXBrZXlzcGFjZSBpbmRleGVz
IHRoYXQgd2VyZQorICoJCXBnX3VwZ3JhZGUnZCBmcm9tIFBvc3RncmVzIDEyLgogICovCi1ib29s
Ci1fYnRfaGVhcGtleXNwYWNlKFJlbGF0aW9uIHJlbCkKK3ZvaWQKK19idF9tZXRhdmVyc2lvbihS
ZWxhdGlvbiByZWwsIGJvb2wgKmhlYXBrZXlzcGFjZSwgYm9vbCAqc2FmZWRlZHVwKQogewogCUJU
TWV0YVBhZ2VEYXRhICptZXRhZDsKIApAQCAtNjUxLDEwICs2NzQsMTEgQEAgX2J0X2hlYXBrZXlz
cGFjZShSZWxhdGlvbiByZWwpCiAJCSAqLwogCQlpZiAobWV0YWQtPmJ0bV9yb290ID09IFBfTk9O
RSkKIAkJewotCQkJdWludDMyCQlidG1fdmVyc2lvbiA9IG1ldGFkLT5idG1fdmVyc2lvbjsKKwkJ
CSpoZWFwa2V5c3BhY2UgPSBtZXRhZC0+YnRtX3ZlcnNpb24gPiBCVFJFRV9OT1ZBQ19WRVJTSU9O
OworCQkJKnNhZmVkZWR1cCA9IG1ldGFkLT5idG1fc2FmZWRlZHVwOwogCiAJCQlfYnRfcmVsYnVm
KHJlbCwgbWV0YWJ1Zik7Ci0JCQlyZXR1cm4gYnRtX3ZlcnNpb24gPiBCVFJFRV9OT1ZBQ19WRVJT
SU9OOworCQkJcmV0dXJuOwogCQl9CiAKIAkJLyoKQEAgLTY3OCw5ICs3MDIsMTEgQEAgX2J0X2hl
YXBrZXlzcGFjZShSZWxhdGlvbiByZWwpCiAJQXNzZXJ0KG1ldGFkLT5idG1fbWFnaWMgPT0gQlRS
RUVfTUFHSUMpOwogCUFzc2VydChtZXRhZC0+YnRtX3ZlcnNpb24gPj0gQlRSRUVfTUlOX1ZFUlNJ
T04pOwogCUFzc2VydChtZXRhZC0+YnRtX3ZlcnNpb24gPD0gQlRSRUVfVkVSU0lPTik7CisJQXNz
ZXJ0KCFtZXRhZC0+YnRtX3NhZmVkZWR1cCB8fCBtZXRhZC0+YnRtX3ZlcnNpb24gPiBCVFJFRV9O
T1ZBQ19WRVJTSU9OKTsKIAlBc3NlcnQobWV0YWQtPmJ0bV9mYXN0cm9vdCAhPSBQX05PTkUpOwog
Ci0JcmV0dXJuIG1ldGFkLT5idG1fdmVyc2lvbiA+IEJUUkVFX05PVkFDX1ZFUlNJT047CisJKmhl
YXBrZXlzcGFjZSA9IG1ldGFkLT5idG1fdmVyc2lvbiA+IEJUUkVFX05PVkFDX1ZFUlNJT047CisJ
KnNhZmVkZWR1cCA9IG1ldGFkLT5idG1fc2FmZWRlZHVwOwogfQogCiAvKgpAQCAtOTY0LDI4ICs5
OTAsODggQEAgX2J0X3BhZ2VfcmVjeWNsYWJsZShQYWdlIHBhZ2UpCiAgKiBEZWxldGUgaXRlbShz
KSBmcm9tIGEgYnRyZWUgbGVhZiBwYWdlIGR1cmluZyBWQUNVVU0uCiAgKgogICogVGhpcyByb3V0
aW5lIGFzc3VtZXMgdGhhdCB0aGUgY2FsbGVyIGhhcyBhIHN1cGVyLWV4Y2x1c2l2ZSB3cml0ZSBs
b2NrIG9uCi0gKiB0aGUgYnVmZmVyLiAgQWxzbywgdGhlIGdpdmVuIGRlbGV0YWJsZSBhcnJheSAq
bXVzdCogYmUgc29ydGVkIGluIGFzY2VuZGluZwotICogb3JkZXIuCisgKiB0aGUgYnVmZmVyLiAg
QWxzbywgdGhlIGdpdmVuIGRlbGV0YWJsZSBhbmQgdXBkYXRhYmxlIGFycmF5cyAqbXVzdCogYmUK
KyAqIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIuCisgKgorICogUm91dGluZSBkZWFscyB3aXRo
IGRlbGV0aW5nIFRJRHMgd2hlbiBzb21lIChidXQgbm90IGFsbCkgb2YgdGhlIGhlYXAgVElEcwor
ICogaW4gYW4gZXhpc3RpbmcgcG9zdGluZyBsaXN0IGl0ZW0gYXJlIHRvIGJlIHJlbW92ZWQgYnkg
VkFDVVVNLiAgVGhpcyB3b3JrcworICogYnkgdXBkYXRpbmcvb3ZlcndyaXRpbmcgYW4gZXhpc3Rp
bmcgaXRlbSB3aXRoIGNhbGxlcidzIG5ldyB2ZXJzaW9uIG9mIHRoZQorICogaXRlbSAoYSB2ZXJz
aW9uIHRoYXQgbGFja3MgdGhlIFRJRHMgdGhhdCBhcmUgdG8gYmUgZGVsZXRlZCkuCiAgKgogICog
V2UgcmVjb3JkIFZBQ1VVTXMgYW5kIGItdHJlZSBkZWxldGVzIGRpZmZlcmVudGx5IGluIFdBTC4g
IERlbGV0ZXMgbXVzdAogICogZ2VuZXJhdGUgdGhlaXIgb3duIGxhdGVzdFJlbW92ZWRYaWQgYnkg
YWNjZXNzaW5nIHRoZSBoZWFwIGRpcmVjdGx5LCB3aGVyZWFzCi0gKiBWQUNVVU1zIHJlbHkgb24g
dGhlIGluaXRpYWwgaGVhcCBzY2FuIHRha2luZyBjYXJlIG9mIGl0IGluZGlyZWN0bHkuCisgKiBW
QUNVVU1zIHJlbHkgb24gdGhlIGluaXRpYWwgaGVhcCBzY2FuIHRha2luZyBjYXJlIG9mIGl0IGlu
ZGlyZWN0bHkuICBBbHNvLAorICogb25seSBWQUNVVU0gY2FuIHBlcmZvcm0gZ3JhbnVsYXIgZGVs
ZXRlcyBvZiBpbmRpdmlkdWFsIFRJRHMgaW4gcG9zdGluZyBsaXN0CisgKiB0dXBsZXMuCiAgKi8K
IHZvaWQKIF9idF9kZWxpdGVtc192YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAotCQkJ
CQlPZmZzZXROdW1iZXIgKmRlbGV0YWJsZSwgaW50IG5kZWxldGFibGUpCisJCQkJCU9mZnNldE51
bWJlciAqZGVsZXRhYmxlLCBpbnQgbmRlbGV0YWJsZSwKKwkJCQkJT2Zmc2V0TnVtYmVyICp1cGRh
dGFibGUsIEluZGV4VHVwbGUgKnVwZGF0ZWQsCisJCQkJCWludCBudXBkYXRhYmxlKQogewogCVBh
Z2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKKwlJ
bmRleFR1cGxlCWl0dXA7CisJU2l6ZQkJaXRlbXN6OworCWNoYXIJICAgKnVwZGF0ZWRidWYgPSBO
VUxMOworCVNpemUJCXVwZGF0ZWRidWZsZW4gPSAwOwogCiAJLyogU2hvdWxkbid0IGJlIGNhbGxl
ZCB1bmxlc3MgdGhlcmUncyBzb21ldGhpbmcgdG8gZG8gKi8KLQlBc3NlcnQobmRlbGV0YWJsZSA+
IDApOworCUFzc2VydChuZGVsZXRhYmxlID4gMCB8fCBudXBkYXRhYmxlID4gMCk7CisKKwkvKiBY
TE9HIHN0dWZmIC0tIGFsbG9jYXRlIGFuZCBmaWxsIGJ1ZmZlciBiZWZvcmUgY3JpdGljYWwgc2Vj
dGlvbiAqLworCWlmIChudXBkYXRhYmxlID4gMCAmJiBSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCisJ
eworCQlTaXplCQlvZmZzZXQgPSAwOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnVwZGF0YWJs
ZTsgaSsrKQorCQl7CisJCQlpdHVwID0gdXBkYXRlZFtpXTsKKwkJCWl0ZW1zeiA9IE1BWEFMSUdO
KEluZGV4VHVwbGVTaXplKGl0dXApKTsKKwkJCXVwZGF0ZWRidWZsZW4gKz0gaXRlbXN6OworCQl9
CisKKwkJdXBkYXRlZGJ1ZiA9IHBhbGxvYyh1cGRhdGVkYnVmbGVuKTsKKwkJZm9yIChpbnQgaSA9
IDA7IGkgPCBudXBkYXRhYmxlOyBpKyspCisJCXsKKwkJCWl0dXAgPSB1cGRhdGVkW2ldOworCQkJ
aXRlbXN6ID0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUoaXR1cCkpOworCQkJbWVtY3B5KHVwZGF0
ZWRidWYgKyBvZmZzZXQsIGl0dXAsIGl0ZW1zeik7CisJCQlvZmZzZXQgKz0gaXRlbXN6OworCQl9
CisJfQogCiAJLyogTm8gZXJlcG9ydChFUlJPUikgdW50aWwgY2hhbmdlcyBhcmUgbG9nZ2VkICov
CiAJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7CiAKLQkvKiBGaXggdGhlIHBhZ2UgKi8KLQlQYWdlSW5k
ZXhNdWx0aURlbGV0ZShwYWdlLCBkZWxldGFibGUsIG5kZWxldGFibGUpOworCS8qCisJICogSGFu
ZGxlIHBvc3RpbmcgdHVwbGUgdXBkYXRlcy4KKwkgKgorCSAqIERlbGliZXJhdGVseSBkbyB0aGlz
IGJlZm9yZSBoYW5kbGluZyBzaW1wbGUgZGVsZXRlcy4gIElmIHdlIGRpZCBpdCB0aGUKKwkgKiBv
dGhlciB3YXkgYXJvdW5kIChpLmUuIFdBTCByZWNvcmQgb3JkZXIgLS0gc2ltcGxlIGRlbGV0ZXMg
YmVmb3JlCisJICogdXBkYXRlcykgdGhlbiB3ZSdkIGhhdmUgdG8gbWFrZSBjb21wZW5zYXRpbmcg
Y2hhbmdlcyB0byB0aGUgJ3VwZGF0YWJsZScKKwkgKiBhcnJheSBvZiBvZmZzZXQgbnVtYmVycy4K
KwkgKgorCSAqIFBhZ2VJbmRleFR1cGxlT3ZlcndyaXRlKCkgd29uJ3QgdW5zZXQgZWFjaCBpdGVt
J3MgTFBfREVBRCBiaXQgd2hlbiBpdAorCSAqIGhhcHBlbnMgdG8gYWxyZWFkeSBiZSBzZXQuICBB
bHRob3VnaCB3ZSB1bnNldCB0aGUgQlRQX0hBU19HQVJCQUdFIHBhZ2UKKwkgKiBsZXZlbCBmbGFn
LCB1bnNldHRpbmcgaW5kaXZpZHVhbCBMUF9ERUFEIGJpdHMgc2hvdWxkIHN0aWxsIGJlIGF2b2lk
ZWQuCisJICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudXBkYXRhYmxlOyBpKyspCisJeworCQlP
ZmZzZXROdW1iZXIgb2ZmbnVtID0gdXBkYXRhYmxlW2ldOworCisJCWl0dXAgPSB1cGRhdGVkW2ld
OworCQlpdGVtc3ogPSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShpdHVwKSk7CisKKwkJaWYgKCFQ
YWdlSW5kZXhUdXBsZU92ZXJ3cml0ZShwYWdlLCBvZmZudW0sIChJdGVtKSBpdHVwLCBpdGVtc3op
KQorCQkJZWxvZyhQQU5JQywgImNvdWxkIG5vdCB1cGRhdGUgcGFydGlhbGx5IGRlYWQgaXRlbSBp
biBibG9jayAldSBvZiBpbmRleCBcIiVzXCIiLAorCQkJCSBCdWZmZXJHZXRCbG9ja051bWJlcihi
dWYpLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKwl9CisKKwkvKiBOb3cgaGFuZGxl
IHNpbXBsZSBkZWxldGVzIG9mIGVudGlyZSB0dXBsZXMgKi8KKwlpZiAobmRlbGV0YWJsZSA+IDAp
CisJCVBhZ2VJbmRleE11bHRpRGVsZXRlKHBhZ2UsIGRlbGV0YWJsZSwgbmRlbGV0YWJsZSk7CiAK
IAkvKgogCSAqIFdlIGNhbiBjbGVhciB0aGUgdmFjdXVtIGN5Y2xlIElEIHNpbmNlIHRoaXMgcGFn
ZSBoYXMgY2VydGFpbmx5IGJlZW4KQEAgLTEwMDYsNyArMTA5Miw5IEBAIF9idF9kZWxpdGVtc192
YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCSAqIGxpbWl0ZWQsIHNpbmNlIHdlIG5l
dmVyIGZhbHNlbHkgdW5zZXQgYW4gTFBfREVBRCBiaXQuICBXb3JrbG9hZHMgdGhhdAogCSAqIGFy
ZSBwYXJ0aWN1bGFybHkgZGVwZW5kZW50IG9uIExQX0RFQUQgYml0cyBiZWluZyBzZXQgcXVpY2ts
eSB3aWxsCiAJICogdXN1YWxseSBtYW5hZ2UgdG8gc2V0IHRoZSBCVFBfSEFTX0dBUkJBR0UgZmxh
ZyBiZWZvcmUgdGhlIHBhZ2UgZmlsbHMgdXAKLQkgKiBhZ2FpbiBhbnl3YXkuCisJICogYWdhaW4g
YW55d2F5LiAgRnVydGhlcm1vcmUsIGF0dGVtcHRpbmcgYSBkZWR1cGxpY2F0aW9uIHBhc3Mgd2ls
bCByZW1vdmUKKwkgKiBhbGwgTFBfREVBRCBpdGVtcywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRo
ZSBCVFBfSEFTX0dBUkJBR0UgaGludCBiaXQKKwkgKiBpcyBzZXQgb3Igbm90LgogCSAqLwogCW9w
YXF1ZS0+YnRwb19mbGFncyAmPSB+QlRQX0hBU19HQVJCQUdFOwogCkBAIC0xMDE5LDE4ICsxMTA3
LDIyIEBAIF9idF9kZWxpdGVtc192YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCQl4
bF9idHJlZV92YWN1dW0geGxyZWNfdmFjdXVtOwogCiAJCXhscmVjX3ZhY3V1bS5uZGVsZXRlZCA9
IG5kZWxldGFibGU7CisJCXhscmVjX3ZhY3V1bS5udXBkYXRlZCA9IG51cGRhdGFibGU7CiAKIAkJ
WExvZ0JlZ2luSW5zZXJ0KCk7CiAJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBidWYsIFJFR0JVRl9T
VEFOREFSRCk7CiAJCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgJnhscmVjX3ZhY3V1bSwgU2l6
ZU9mQnRyZWVWYWN1dW0pOwogCi0JCS8qCi0JCSAqIFRoZSBkZWxldGFibGUgYXJyYXkgaXMgbm90
IGluIHRoZSBidWZmZXIsIGJ1dCBwcmV0ZW5kIHRoYXQgaXQgaXMuCi0JCSAqIFdoZW4gWExvZ0lu
c2VydCBzdG9yZXMgdGhlIHdob2xlIGJ1ZmZlciwgdGhlIGFycmF5IG5lZWQgbm90IGJlCi0JCSAq
IHN0b3JlZCB0b28uCi0JCSAqLwotCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsIChjaGFyICopIGRl
bGV0YWJsZSwKLQkJCQkJCQluZGVsZXRhYmxlICogc2l6ZW9mKE9mZnNldE51bWJlcikpOworCQlp
ZiAobmRlbGV0YWJsZSA+IDApCisJCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsIChjaGFyICopIGRl
bGV0YWJsZSwKKwkJCQkJCQkJbmRlbGV0YWJsZSAqIHNpemVvZihPZmZzZXROdW1iZXIpKTsKKwor
CQlpZiAobnVwZGF0YWJsZSA+IDApCisJCXsKKwkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgKGNo
YXIgKikgdXBkYXRhYmxlLAorCQkJCQkJCQludXBkYXRhYmxlICogc2l6ZW9mKE9mZnNldE51bWJl
cikpOworCQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCB1cGRhdGVkYnVmLCB1cGRhdGVkYnVmbGVu
KTsKKwkJfQogCiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fQlRSRUVfSUQsIFhMT0dfQlRSRUVf
VkFDVVVNKTsKIApAQCAtMTAzOCw2ICsxMTMwLDEwIEBAIF9idF9kZWxpdGVtc192YWN1dW0oUmVs
YXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCX0KIAogCUVORF9DUklUX1NFQ1RJT04oKTsKKworCS8q
IGNhbid0IGxlYWsgbWVtb3J5IGhlcmUgKi8KKwlpZiAodXBkYXRlZGJ1ZiAhPSBOVUxMKQorCQlw
ZnJlZSh1cGRhdGVkYnVmKTsKIH0KIAogLyoKQEAgLTEwNTAsNiArMTE0Niw4IEBAIF9idF9kZWxp
dGVtc192YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogICogVGhpcyBpcyBuZWFybHkg
dGhlIHNhbWUgYXMgX2J0X2RlbGl0ZW1zX3ZhY3V1bSBhcyBmYXIgYXMgd2hhdCBpdCBkb2VzIHRv
CiAgKiB0aGUgcGFnZSwgYnV0IGl0IG5lZWRzIHRvIGdlbmVyYXRlIGl0cyBvd24gbGF0ZXN0UmVt
b3ZlZFhpZCBieSBhY2Nlc3NpbmcKICAqIHRoZSBoZWFwLiAgVGhpcyBpcyB1c2VkIGJ5IHRoZSBS
RURPIHJvdXRpbmUgdG8gZ2VuZXJhdGUgcmVjb3ZlcnkgY29uZmxpY3RzLgorICogQWxzbywgaXQg
ZG9lc24ndCBoYW5kbGUgcG9zdGluZyBsaXN0IHR1cGxlcyB1bmxlc3MgdGhlIGVudGlyZSB0dXBs
ZSBjYW4gYmUKKyAqIGRlbGV0ZWQgYXMgYSB3aG9sZSAoc2luY2UgdGhlcmUgaXMgb25seSBvbmUg
TFBfREVBRCBiaXQgcGVyIGxpbmUgcG9pbnRlcikuCiAgKi8KIHZvaWQKIF9idF9kZWxpdGVtc19k
ZWxldGUoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLApAQCAtMTA2NSw4ICsxMTYzLDcgQEAgX2J0
X2RlbGl0ZW1zX2RlbGV0ZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsCiAKIAlpZiAoWExvZ1N0
YW5kYnlJbmZvQWN0aXZlKCkgJiYgUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCQlsYXRlc3RSZW1v
dmVkWGlkID0KLQkJCWluZGV4X2NvbXB1dGVfeGlkX2hvcml6b25fZm9yX3R1cGxlcyhyZWwsIGhl
YXBSZWwsIGJ1ZiwKLQkJCQkJCQkJCQkJCSBkZWxldGFibGUsIG5kZWxldGFibGUpOworCQkJX2J0
X3hpZF9ob3Jpem9uKHJlbCwgaGVhcFJlbCwgcGFnZSwgZGVsZXRhYmxlLCBuZGVsZXRhYmxlKTsK
IAogCS8qIE5vIGVyZXBvcnQoRVJST1IpIHVudGlsIGNoYW5nZXMgYXJlIGxvZ2dlZCAqLwogCVNU
QVJUX0NSSVRfU0VDVElPTigpOwpAQCAtMTExMyw2ICsxMjEwLDgzIEBAIF9idF9kZWxpdGVtc19k
ZWxldGUoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCUVORF9DUklUX1NFQ1RJT04oKTsKIH0K
IAorLyoKKyAqIEdldCB0aGUgbGF0ZXN0UmVtb3ZlZFhpZCBmcm9tIHRoZSB0YWJsZSBlbnRyaWVz
IHBvaW50ZWQgdG8gYnkgdGhlIG5vbi1waXZvdAorICogdHVwbGVzIGJlaW5nIGRlbGV0ZWQuCisg
KgorICogVGhpcyBpcyBhIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgaW5kZXhfY29tcHV0ZV94aWRf
aG9yaXpvbl9mb3JfdHVwbGVzKCkuCisgKiBJdCdzIG5lZWRlZCBiZWNhdXNlIGJ0cmVlIHR1cGxl
cyBkb24ndCBhbHdheXMgc3RvcmUgdGFibGUgVElEIHVzaW5nIHRoZQorICogc3RhbmRhcmQgaW5k
ZXggdHVwbGUgaGVhZGVyIGZpZWxkLgorICovCitzdGF0aWMgVHJhbnNhY3Rpb25JZAorX2J0X3hp
ZF9ob3Jpem9uKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcFJlbCwgUGFnZSBwYWdlLAorCQkJ
CU9mZnNldE51bWJlciAqZGVsZXRhYmxlLCBpbnQgbmRlbGV0YWJsZSkKK3sKKwlUcmFuc2FjdGlv
bklkIGxhdGVzdFJlbW92ZWRYaWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlpbnQJCQlzcGFj
ZW5odGlkczsKKwlpbnQJCQluaHRpZHM7CisJSXRlbVBvaW50ZXIgaHRpZHM7CisKKwkvKiBBcnJh
eSB3aWxsIGdyb3cgaWZmIHRoZXJlIGFyZSBwb3N0aW5nIGxpc3QgdHVwbGVzIHRvIGNvbnNpZGVy
ICovCisJc3BhY2VuaHRpZHMgPSBuZGVsZXRhYmxlOworCW5odGlkcyA9IDA7CisJaHRpZHMgPSAo
SXRlbVBvaW50ZXIpIHBhbGxvYyhzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSAqIHNwYWNlbmh0aWRz
KTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG5kZWxldGFibGU7IGkrKykKKwl7CisJCUl0ZW1JZAkJ
aXRlbWlkOworCQlJbmRleFR1cGxlCWl0dXA7CisKKwkJaXRlbWlkID0gUGFnZUdldEl0ZW1JZChw
YWdlLCBkZWxldGFibGVbaV0pOworCQlpdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBh
Z2UsIGl0ZW1pZCk7CisKKwkJQXNzZXJ0KEl0ZW1JZElzRGVhZChpdGVtaWQpKTsKKwkJQXNzZXJ0
KCFCVHJlZVR1cGxlSXNQaXZvdChpdHVwKSk7CisKKwkJaWYgKCFCVHJlZVR1cGxlSXNQb3N0aW5n
KGl0dXApKQorCQl7CisJCQlpZiAobmh0aWRzICsgMSA+IHNwYWNlbmh0aWRzKQorCQkJeworCQkJ
CXNwYWNlbmh0aWRzICo9IDI7CisJCQkJaHRpZHMgPSAoSXRlbVBvaW50ZXIpCisJCQkJCXJlcGFs
bG9jKGh0aWRzLCBzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSAqIHNwYWNlbmh0aWRzKTsKKwkJCX0K
KworCQkJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZCgmaXR1cC0+dF90aWQpKTsKKwkJCUl0ZW1Q
b2ludGVyQ29weSgmaXR1cC0+dF90aWQsICZodGlkc1tuaHRpZHNdKTsKKwkJCW5odGlkcysrOwor
CQl9CisJCWVsc2UKKwkJeworCQkJaW50CQkJbnBvc3RpbmcgPSBCVHJlZVR1cGxlR2V0TlBvc3Rp
bmcoaXR1cCk7CisKKwkJCWlmIChuaHRpZHMgKyBucG9zdGluZyA+IHNwYWNlbmh0aWRzKQorCQkJ
eworCQkJCXNwYWNlbmh0aWRzID0gTWF4KHNwYWNlbmh0aWRzICogMiwgbmh0aWRzICsgbnBvc3Rp
bmcpOworCQkJCWh0aWRzID0gKEl0ZW1Qb2ludGVyKQorCQkJCQlyZXBhbGxvYyhodGlkcywgc2l6
ZW9mKEl0ZW1Qb2ludGVyRGF0YSkgKiBzcGFjZW5odGlkcyk7CisJCQl9CisKKwkJCWZvciAoaW50
IGogPSAwOyBqIDwgbnBvc3Rpbmc7IGorKykKKwkJCXsKKwkJCQlJdGVtUG9pbnRlciBodGlkID0g
QlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGopOworCisJCQkJQXNzZXJ0KEl0ZW1Qb2ludGVy
SXNWYWxpZChodGlkKSk7CisJCQkJSXRlbVBvaW50ZXJDb3B5KGh0aWQsICZodGlkc1tuaHRpZHNd
KTsKKwkJCQluaHRpZHMrKzsKKwkJCX0KKwkJfQorCX0KKworCUFzc2VydChuaHRpZHMgPj0gbmRl
bGV0YWJsZSk7CisKKwlsYXRlc3RSZW1vdmVkWGlkID0KKwkJdGFibGVfY29tcHV0ZV94aWRfaG9y
aXpvbl9mb3JfdHVwbGVzKGhlYXBSZWwsIGh0aWRzLCBuaHRpZHMpOworCisJcGZyZWUoaHRpZHMp
OworCisJcmV0dXJuIGxhdGVzdFJlbW92ZWRYaWQ7Cit9CisKIC8qCiAgKiBSZXR1cm5zIHRydWUs
IGlmIHRoZSBnaXZlbiBibG9jayBoYXMgdGhlIGhhbGYtZGVhZCBmbGFnIHNldC4KICAqLwpAQCAt
MjA1OCw2ICsyMjMyLDcgQEAgX2J0X3VubGlua19oYWxmZGVhZF9wYWdlKFJlbGF0aW9uIHJlbCwg
QnVmZmVyIGxlYWZidWYsIGJvb2wgKnJpZ2h0c2liX2VtcHR5KQogCQkJeGxtZXRhLmZhc3RsZXZl
bCA9IG1ldGFkLT5idG1fZmFzdGxldmVsOwogCQkJeGxtZXRhLm9sZGVzdF9idHBvX3hhY3QgPSBt
ZXRhZC0+YnRtX29sZGVzdF9idHBvX3hhY3Q7CiAJCQl4bG1ldGEubGFzdF9jbGVhbnVwX251bV9o
ZWFwX3R1cGxlcyA9IG1ldGFkLT5idG1fbGFzdF9jbGVhbnVwX251bV9oZWFwX3R1cGxlczsKKwkJ
CXhsbWV0YS5zYWZlZGVkdXAgPSBtZXRhZC0+YnRtX3NhZmVkZWR1cDsKIAogCQkJWExvZ1JlZ2lz
dGVyQnVmRGF0YSg0LCAoY2hhciAqKSAmeGxtZXRhLCBzaXplb2YoeGxfYnRyZWVfbWV0YWRhdGEp
KTsKIAkJCXhsaW5mbyA9IFhMT0dfQlRSRUVfVU5MSU5LX1BBR0VfTUVUQTsKZGlmZiAtLWdpdCBh
L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv
bmJ0cmVlL25idHJlZS5jCmluZGV4IDgzNzZhNWU2YjcuLjkxMjgxOWI5ZGIgMTAwNjQ0Ci0tLSBh
L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj
ZXNzL25idHJlZS9uYnRyZWUuYwpAQCAtOTUsNiArOTUsOCBAQCBzdGF0aWMgdm9pZCBidHZhY3V1
bXNjYW4oSW5kZXhWYWN1dW1JbmZvICppbmZvLCBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRz
LAogCQkJCQkJIEJUQ3ljbGVJZCBjeWNsZWlkLCBUcmFuc2FjdGlvbklkICpvbGRlc3RCdHBvWGFj
dCk7CiBzdGF0aWMgdm9pZCBidHZhY3V1bXBhZ2UoQlRWYWNTdGF0ZSAqdnN0YXRlLCBCbG9ja051
bWJlciBibGtubywKIAkJCQkJCSBCbG9ja051bWJlciBvcmlnX2Jsa25vKTsKK3N0YXRpYyBJdGVt
UG9pbnRlciBidHJlZXZhY3V1bXBvc3RpbmcoQlRWYWNTdGF0ZSAqdnN0YXRlLCBJbmRleFR1cGxl
IHBvc3RpbmcsCisJCQkJCQkJCQkgIGludCAqbnJlbWFpbmluZyk7CiAKIAogLyoKQEAgLTE1OCw3
ICsxNjAsNyBAQCBidGJ1aWxkZW1wdHkoUmVsYXRpb24gaW5kZXgpCiAKIAkvKiBDb25zdHJ1Y3Qg
bWV0YXBhZ2UuICovCiAJbWV0YXBhZ2UgPSAoUGFnZSkgcGFsbG9jKEJMQ0tTWik7Ci0JX2J0X2lu
aXRtZXRhcGFnZShtZXRhcGFnZSwgUF9OT05FLCAwKTsKKwlfYnRfaW5pdG1ldGFwYWdlKG1ldGFw
YWdlLCBQX05PTkUsIDAsIF9idF9vcGNsYXNzZXNfc3VwcG9ydF9kZWR1cChpbmRleCkpOwogCiAJ
LyoKIAkgKiBXcml0ZSB0aGUgcGFnZSBhbmQgbG9nIGl0LiAgSXQgbWlnaHQgc2VlbSB0aGF0IGFu
IGltbWVkaWF0ZSBzeW5jIHdvdWxkCkBAIC0yNjEsOCArMjYzLDggQEAgYnRnZXR0dXBsZShJbmRl
eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJCSAqLwogCQkJCWlmIChzby0+
a2lsbGVkSXRlbXMgPT0gTlVMTCkKIAkJCQkJc28tPmtpbGxlZEl0ZW1zID0gKGludCAqKQotCQkJ
CQkJcGFsbG9jKE1heEluZGV4VHVwbGVzUGVyUGFnZSAqIHNpemVvZihpbnQpKTsKLQkJCQlpZiAo
c28tPm51bUtpbGxlZCA8IE1heEluZGV4VHVwbGVzUGVyUGFnZSkKKwkJCQkJCXBhbGxvYyhNYXhU
SURzUGVyQlRyZWVQYWdlICogc2l6ZW9mKGludCkpOworCQkJCWlmIChzby0+bnVtS2lsbGVkIDwg
TWF4VElEc1BlckJUcmVlUGFnZSkKIAkJCQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQr
K10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7CiAJCQl9CiAKQEAgLTExNTEsMTEgKzExNTMsMTYg
QEAgcmVzdGFydDoKIAl9CiAJZWxzZSBpZiAoUF9JU0xFQUYob3BhcXVlKSkKIAl7Ci0JCU9mZnNl
dE51bWJlciBkZWxldGFibGVbTWF4T2Zmc2V0TnVtYmVyXTsKKwkJT2Zmc2V0TnVtYmVyIGRlbGV0
YWJsZVtNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwogCQlpbnQJCQluZGVsZXRhYmxlOworCQlJbmRl
eFR1cGxlCXVwZGF0ZWRbTWF4SW5kZXhUdXBsZXNQZXJQYWdlXTsKKwkJT2Zmc2V0TnVtYmVyIHVw
ZGF0YWJsZVtNYXhJbmRleFR1cGxlc1BlclBhZ2VdOworCQlpbnQJCQludXBkYXRhYmxlOwogCQlP
ZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCQltaW5vZmYsCiAJCQkJCW1heG9mZjsKKwkJaW50CQkJ
bmh0aWRzZGVhZCwKKwkJCQkJbmh0aWRzbGl2ZTsKIAogCQkvKgogCQkgKiBUcmFkZSBpbiB0aGUg
aW5pdGlhbCByZWFkIGxvY2sgZm9yIGEgc3VwZXItZXhjbHVzaXZlIHdyaXRlIGxvY2sgb24KQEAg
LTExODcsOCArMTE5NCwxMSBAQCByZXN0YXJ0OgogCQkgKiBwb2ludCB1c2luZyBjYWxsYmFjay4K
IAkJICovCiAJCW5kZWxldGFibGUgPSAwOworCQludXBkYXRhYmxlID0gMDsKIAkJbWlub2ZmID0g
UF9GSVJTVERBVEFLRVkob3BhcXVlKTsKIAkJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJl
cihwYWdlKTsKKwkJbmh0aWRzZGVhZCA9IDA7CisJCW5odGlkc2xpdmUgPSAwOwogCQlpZiAoY2Fs
bGJhY2spCiAJCXsKIAkJCWZvciAob2ZmbnVtID0gbWlub2ZmOwpAQCAtMTE5NiwxMSArMTIwNiw5
IEBAIHJlc3RhcnQ6CiAJCQkJIG9mZm51bSA9IE9mZnNldE51bWJlck5leHQob2ZmbnVtKSkKIAkJ
CXsKIAkJCQlJbmRleFR1cGxlCWl0dXA7Ci0JCQkJSXRlbVBvaW50ZXIgaHR1cDsKIAogCQkJCWl0
dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwKIAkJCQkJCQkJCQkJCVBhZ2VHZXRJ
dGVtSWQocGFnZSwgb2ZmbnVtKSk7Ci0JCQkJaHR1cCA9ICYoaXR1cC0+dF90aWQpOwogCiAJCQkJ
LyoKIAkJCQkgKiBIb3QgU3RhbmRieSBhc3N1bWVzIHRoYXQgaXQncyBva2F5IHRoYXQgWExPR19C
VFJFRV9WQUNVVU0KQEAgLTEyMjMsMjIgKzEyMzEsODYgQEAgcmVzdGFydDoKIAkJCQkgKiBzaW1w
bGUsIGFuZCBhbGxvd3MgdXMgdG8gYWx3YXlzIGF2b2lkIGdlbmVyYXRpbmcgb3VyIG93bgogCQkJ
CSAqIGNvbmZsaWN0cy4KIAkJCQkgKi8KLQkJCQlpZiAoY2FsbGJhY2soaHR1cCwgY2FsbGJhY2tf
c3RhdGUpKQotCQkJCQlkZWxldGFibGVbbmRlbGV0YWJsZSsrXSA9IG9mZm51bTsKKwkJCQlBc3Nl
cnQoIUJUcmVlVHVwbGVJc1Bpdm90KGl0dXApKTsKKwkJCQlpZiAoIUJUcmVlVHVwbGVJc1Bvc3Rp
bmcoaXR1cCkpCisJCQkJeworCQkJCQkvKiBSZWd1bGFyIHR1cGxlLCBzdGFuZGFyZCB0YWJsZSBU
SUQgcmVwcmVzZW50YXRpb24gKi8KKwkJCQkJaWYgKGNhbGxiYWNrKCZpdHVwLT50X3RpZCwgY2Fs
bGJhY2tfc3RhdGUpKQorCQkJCQl7CisJCQkJCQlkZWxldGFibGVbbmRlbGV0YWJsZSsrXSA9IG9m
Zm51bTsKKwkJCQkJCW5odGlkc2RlYWQrKzsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCQluaHRp
ZHNsaXZlKys7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUl0ZW1Qb2ludGVyIG5ld2h0
aWRzOworCQkJCQlpbnQJCQlucmVtYWluaW5nOworCisJCQkJCS8qIFBvc3RpbmcgbGlzdCB0dXBs
ZSAqLworCQkJCQluZXdodGlkcyA9IGJ0cmVldmFjdXVtcG9zdGluZyh2c3RhdGUsIGl0dXAsICZu
cmVtYWluaW5nKTsKKwkJCQkJaWYgKG5ld2h0aWRzID09IE5VTEwpCisJCQkJCXsKKwkJCQkJCS8q
CisJCQkJCQkgKiBBbGwgdGFibGUgVElEcyBmcm9tIHRoZSBwb3N0aW5nIHR1cGxlIHJlbWFpbiwg
c28gbm8KKwkJCQkJCSAqIGRlbGV0ZSBvciB1cGRhdGUgcmVxdWlyZWQKKwkJCQkJCSAqLworCQkJ
CQkJQXNzZXJ0KG5yZW1haW5pbmcgPT0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApKTsKKwkJ
CQkJfQorCQkJCQllbHNlIGlmIChucmVtYWluaW5nID4gMCkKKwkJCQkJeworCQkJCQkJSW5kZXhU
dXBsZQl1cGRhdGVkdHVwbGU7CisKKwkJCQkJCS8qCisJCQkJCQkgKiBGb3JtIG5ldyB0dXBsZSB0
aGF0IGNvbnRhaW5zIG9ubHkgcmVtYWluaW5nIFRJRHMuCisJCQkJCQkgKiBSZW1lbWJlciB0aGlz
IG5ldyB0dXBsZSBhbmQgdGhlIG9mZnNldCBvZiB0aGUgdHVwbGUKKwkJCQkJCSAqIHRvIGJlIHVw
ZGF0ZWQgZm9yIHRoZSBwYWdlJ3MgX2J0X2RlbGl0ZW1zX3ZhY3V1bSgpCisJCQkJCQkgKiBjYWxs
LgorCQkJCQkJICovCisJCQkJCQlBc3NlcnQobnJlbWFpbmluZyA8IEJUcmVlVHVwbGVHZXROUG9z
dGluZyhpdHVwKSk7CisJCQkJCQl1cGRhdGVkdHVwbGUgPSBfYnRfZm9ybV9wb3N0aW5nKGl0dXAs
IG5ld2h0aWRzLAorCQkJCQkJCQkJCQkJCQlucmVtYWluaW5nKTsKKwkJCQkJCXVwZGF0ZWRbbnVw
ZGF0YWJsZV0gPSB1cGRhdGVkdHVwbGU7CisJCQkJCQl1cGRhdGFibGVbbnVwZGF0YWJsZSsrXSA9
IG9mZm51bTsKKwkJCQkJCW5odGlkc2RlYWQgKz0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXAp
IC0gbnJlbWFpbmluZzsKKwkJCQkJCXBmcmVlKG5ld2h0aWRzKTsKKwkJCQkJfQorCQkJCQllbHNl
CisJCQkJCXsKKwkJCQkJCS8qCisJCQkJCQkgKiBBbGwgdGFibGUgVElEcyBmcm9tIHRoZSBwb3N0
aW5nIGxpc3QgbXVzdCBiZQorCQkJCQkJICogZGVsZXRlZC4gIFdlJ2xsIGRlbGV0ZSB0aGUgaW5k
ZXggdHVwbGUgY29tcGxldGVseQorCQkJCQkJICogKG5vIHVwZGF0ZSkuCisJCQkJCQkgKi8KKwkJ
CQkJCUFzc2VydChucmVtYWluaW5nID09IDApOworCQkJCQkJZGVsZXRhYmxlW25kZWxldGFibGUr
K10gPSBvZmZudW07CisJCQkJCQluaHRpZHNkZWFkICs9IEJUcmVlVHVwbGVHZXROUG9zdGluZyhp
dHVwKTsKKwkJCQkJCXBmcmVlKG5ld2h0aWRzKTsKKwkJCQkJfQorCisJCQkJCW5odGlkc2xpdmUg
Kz0gbnJlbWFpbmluZzsKKwkJCQl9CiAJCQl9CiAJCX0KIAogCQkvKgotCQkgKiBBcHBseSBhbnkg
bmVlZGVkIGRlbGV0ZXMuICBXZSBpc3N1ZSBqdXN0IG9uZSBfYnRfZGVsaXRlbXNfdmFjdXVtKCkK
LQkJICogY2FsbCBwZXIgcGFnZSwgc28gYXMgdG8gbWluaW1pemUgV0FMIHRyYWZmaWMuCisJCSAq
IEFwcGx5IGFueSBuZWVkZWQgZGVsZXRlcyBvciB1cGRhdGVzLiAgV2UgaXNzdWUganVzdCBvbmUK
KwkJICogX2J0X2RlbGl0ZW1zX3ZhY3V1bSgpIGNhbGwgcGVyIHBhZ2UsIHNvIGFzIHRvIG1pbmlt
aXplIFdBTCB0cmFmZmljLgogCQkgKi8KLQkJaWYgKG5kZWxldGFibGUgPiAwKQorCQlpZiAobmRl
bGV0YWJsZSA+IDAgfHwgbnVwZGF0YWJsZSA+IDApCiAJCXsKLQkJCV9idF9kZWxpdGVtc192YWN1
dW0ocmVsLCBidWYsIGRlbGV0YWJsZSwgbmRlbGV0YWJsZSk7CisJCQlBc3NlcnQobmh0aWRzZGVh
ZCA+PSBNYXgobmRlbGV0YWJsZSwgMSkpOworCQkJX2J0X2RlbGl0ZW1zX3ZhY3V1bShyZWwsIGJ1
ZiwgZGVsZXRhYmxlLCBuZGVsZXRhYmxlLCB1cGRhdGFibGUsCisJCQkJCQkJCXVwZGF0ZWQsIG51
cGRhdGFibGUpOwogCi0JCQlzdGF0cy0+dHVwbGVzX3JlbW92ZWQgKz0gbmRlbGV0YWJsZTsKKwkJ
CXN0YXRzLT50dXBsZXNfcmVtb3ZlZCArPSBuaHRpZHNkZWFkOwogCQkJLyogbXVzdCByZWNvbXB1
dGUgbWF4b2ZmICovCiAJCQltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwor
CisJCQkvKiBjYW4ndCBsZWFrIG1lbW9yeSBoZXJlICovCisJCQlmb3IgKGludCBpID0gMDsgaSA8
IG51cGRhdGFibGU7IGkrKykKKwkJCQlwZnJlZSh1cGRhdGVkW2ldKTsKIAkJfQogCQllbHNlCiAJ
CXsKQEAgLTEyNTEsNiArMTMyMyw3IEBAIHJlc3RhcnQ6CiAJCQkgKiBXZSB0cmVhdCB0aGlzIGxp
a2UgYSBoaW50LWJpdCB1cGRhdGUgYmVjYXVzZSB0aGVyZSdzIG5vIG5lZWQgdG8KIAkJCSAqIFdB
TC1sb2cgaXQuCiAJCQkgKi8KKwkJCUFzc2VydChuaHRpZHNkZWFkID09IDApOwogCQkJaWYgKHZz
dGF0ZS0+Y3ljbGVpZCAhPSAwICYmCiAJCQkJb3BhcXVlLT5idHBvX2N5Y2xlaWQgPT0gdnN0YXRl
LT5jeWNsZWlkKQogCQkJewpAQCAtMTI2MCwxNSArMTMzMywxOCBAQCByZXN0YXJ0OgogCQl9CiAK
IAkJLyoKLQkJICogSWYgaXQncyBub3cgZW1wdHksIHRyeSB0byBkZWxldGU7IGVsc2UgY291bnQg
dGhlIGxpdmUgdHVwbGVzLiBXZQotCQkgKiBkb24ndCBkZWxldGUgd2hlbiByZWN1cnNpbmcsIHRo
b3VnaCwgdG8gYXZvaWQgcHV0dGluZyBlbnRyaWVzIGludG8KLQkJICogZnJlZVBhZ2VzIG91dC1v
Zi1vcmRlciAoZG9lc24ndCBzZWVtIHdvcnRoIGFueSBleHRyYSBjb2RlIHRvIGhhbmRsZQotCQkg
KiB0aGUgY2FzZSkuCisJCSAqIElmIGl0J3Mgbm93IGVtcHR5LCB0cnkgdG8gZGVsZXRlOyBlbHNl
IGNvdW50IHRoZSBsaXZlIHR1cGxlcyAobGl2ZQorCQkgKiB0YWJsZSBUSURzIGluIHBvc3Rpbmcg
bGlzdHMgYXJlIGNvdW50ZWQgYXMgc2VwYXJhdGUgbGl2ZSB0dXBsZXMpLgorCQkgKiBXZSBkb24n
dCBkZWxldGUgd2hlbiByZWN1cnNpbmcsIHRob3VnaCwgdG8gYXZvaWQgcHV0dGluZyBlbnRyaWVz
CisJCSAqIGludG8gZnJlZVBhZ2VzIG91dC1vZi1vcmRlciAoZG9lc24ndCBzZWVtIHdvcnRoIGFu
eSBleHRyYSBjb2RlIHRvCisJCSAqIGhhbmRsZSB0aGUgY2FzZSkuCiAJCSAqLwogCQlpZiAobWlu
b2ZmID4gbWF4b2ZmKQogCQkJZGVsZXRlX25vdyA9IChibGtubyA9PSBvcmlnX2Jsa25vKTsKIAkJ
ZWxzZQotCQkJc3RhdHMtPm51bV9pbmRleF90dXBsZXMgKz0gbWF4b2ZmIC0gbWlub2ZmICsgMTsK
KwkJCXN0YXRzLT5udW1faW5kZXhfdHVwbGVzICs9IG5odGlkc2xpdmU7CisKKwkJQXNzZXJ0KCFk
ZWxldGVfbm93IHx8IG5odGlkc2xpdmUgPT0gMCk7CiAJfQogCiAJaWYgKGRlbGV0ZV9ub3cpCkBA
IC0xMzAwLDkgKzEzNzYsMTAgQEAgcmVzdGFydDoKIAkvKgogCSAqIFRoaXMgaXMgcmVhbGx5IHRh
aWwgcmVjdXJzaW9uLCBidXQgaWYgdGhlIGNvbXBpbGVyIGlzIHRvbyBzdHVwaWQgdG8KIAkgKiBv
cHRpbWl6ZSBpdCBhcyBzdWNoLCB3ZSdkIGVhdCBhbiB1bmNvbWZvcnRhYmx5IGxhcmdlIGFtb3Vu
dCBvZiBzdGFjawotCSAqIHNwYWNlIHBlciByZWN1cnNpb24gbGV2ZWwgKGR1ZSB0byB0aGUgZGVs
ZXRhYmxlW10gYXJyYXkpLiBBIGZhaWx1cmUgaXMKLQkgKiBpbXByb2JhYmxlIHNpbmNlIHRoZSBu
dW1iZXIgb2YgbGV2ZWxzIGlzbid0IGxpa2VseSB0byBiZSBsYXJnZSAuLi4gYnV0Ci0JICoganVz
dCBpbiBjYXNlLCBsZXQncyBoYW5kLW9wdGltaXplIGludG8gYSBsb29wLgorCSAqIHNwYWNlIHBl
ciByZWN1cnNpb24gbGV2ZWwgKGR1ZSB0byB0aGUgYXJyYXlzIHVzZWQgdG8gdHJhY2sgZGV0YWls
cyBvZgorCSAqIGRlbGV0YWJsZS91cGRhdGFibGUgaXRlbXMpLiAgQSBmYWlsdXJlIGlzIGltcHJv
YmFibGUgc2luY2UgdGhlIG51bWJlcgorCSAqIG9mIGxldmVscyBpc24ndCBsaWtlbHkgdG8gYmUg
bGFyZ2UgLi4uICBidXQganVzdCBpbiBjYXNlLCBsZXQncworCSAqIGhhbmQtb3B0aW1pemUgaW50
byBhIGxvb3AuCiAJICovCiAJaWYgKHJlY3Vyc2VfdG8gIT0gUF9OT05FKQogCXsKQEAgLTEzMTEs
NiArMTM4OCw2NyBAQCByZXN0YXJ0OgogCX0KIH0KIAorLyoKKyAqIGJ0cmVldmFjdXVtcG9zdGlu
ZyAtLS0gZGV0ZXJtaW5lIFRJRHMgc3RpbGwgbmVlZGVkIGluIHBvc3RpbmcgbGlzdAorICoKKyAq
IFJldHVybnMgbmV3IHBhbGxvYydkIGFycmF5IG9mIGl0ZW0gcG9pbnRlcnMgbmVlZGVkIHRvIGJ1
aWxkCisgKiByZXBsYWNlbWVudCBwb3N0aW5nIGxpc3QgdHVwbGUgd2l0aG91dCB0aGUgVElEcyB0
aGF0IFZBQ1VVTSBuZWVkcyB0bworICogZGVsZXRlLiAgUmV0dXJuZWQgdmFsdWUgaXMgTlVMTCBp
biB0aGUgY29tbW9uIGNhc2Ugbm8gY2hhbmdlcyBhcmUKKyAqIG5lZWRlZCBpbiBjYWxsZXIncyBw
b3N0aW5nIGxpc3QgdHVwbGUgKHdlIGF2b2lkIGFsbG9jYXRpbmcgbWVtb3J5CisgKiBoZXJlIGFz
IGFuIG9wdGltaXphdGlvbikuCisgKgorICogVGhlIG51bWJlciBvZiBUSURzIHRoYXQgc2hvdWxk
IHJlbWFpbiBpbiB0aGUgcG9zdGluZyBsaXN0IHR1cGxlIGlzCisgKiBzZXQgZm9yIGNhbGxlciBp
biAqbnJlbWFpbmluZy4gIFRoaXMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMKKyAq
IGluIHRoZSByZXR1cm5lZCBhcnJheSAoYXNzdW1pbmcgdGhhdCByZXR1cm4gdmFsdWUgaXNuJ3Qg
anVzdCBOVUxMKS4KKyAqLworc3RhdGljIEl0ZW1Qb2ludGVyCitidHJlZXZhY3V1bXBvc3Rpbmco
QlRWYWNTdGF0ZSAqdnN0YXRlLCBJbmRleFR1cGxlIHBvc3RpbmcsIGludCAqbnJlbWFpbmluZykK
K3sKKwlpbnQJCQlsaXZlID0gMDsKKwlpbnQJCQluaXRlbSA9IEJUcmVlVHVwbGVHZXROUG9zdGlu
Zyhwb3N0aW5nKTsKKwlJdGVtUG9pbnRlciB0bXBpdGVtcyA9IE5VTEwsCisJCQkJaXRlbXMgPSBC
VHJlZVR1cGxlR2V0UG9zdGluZyhwb3N0aW5nKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbml0
ZW07IGkrKykKKwl7CisJCWlmICghdnN0YXRlLT5jYWxsYmFjayhpdGVtcyArIGksIHZzdGF0ZS0+
Y2FsbGJhY2tfc3RhdGUpKQorCQl7CisJCQkvKgorCQkJICogTGl2ZSB0YWJsZSBUSUQuCisJCQkg
KgorCQkJICogT25seSBzYXZlIGxpdmUgVElEIHdoZW4gd2UgYWxyZWFkeSBrbm93IHRoYXQgd2Un
cmUgZ29pbmcgdG8KKwkJCSAqIGhhdmUgdG8ga2lsbCBhdCBsZWFzdCBvbmUgVElELCBhbmQgaGF2
ZSBhbHJlYWR5IGFsbG9jYXRlZAorCQkJICogbWVtb3J5LgorCQkJICovCisJCQlpZiAodG1waXRl
bXMpCisJCQkJdG1waXRlbXNbbGl2ZV0gPSBpdGVtc1tpXTsKKwkJCWxpdmUrKzsKKwkJfQorCQll
bHNlIGlmICh0bXBpdGVtcyA9PSBOVUxMKQorCQl7CisJCQkvKgorCQkJICogRmlyc3QgZGVhZCB0
YWJsZSBUSUQgZW5jb3VudGVyZWQuCisJCQkgKgorCQkJICogSXQncyBub3cgY2xlYXIgdGhhdCB3
ZSBuZWVkIHRvIGRlbGV0ZSBvbmUgb3IgbW9yZSBkZWFkIHRhYmxlCisJCQkgKiBUSURzLCBzbyBz
dGFydCBtYWludGFpbmluZyBhbiBhcnJheSBvZiBsaXZlIFRJRHMgZm9yIGNhbGxlciB0bworCQkJ
ICogcmVjb25zdHJ1Y3Qgc21hbGxlciByZXBsYWNlbWVudCBwb3N0aW5nIGxpc3QgdHVwbGUKKwkJ
CSAqLworCQkJdG1waXRlbXMgPSBwYWxsb2Moc2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSkgKiBuaXRl
bSk7CisKKwkJCS8qIENvcHkgbGl2ZSBUSURzIHNraXBwZWQgaW4gcHJldmlvdXMgaXRlcmF0aW9u
cywgaWYgYW55ICovCisJCQlpZiAobGl2ZSA+IDApCisJCQkJbWVtY3B5KHRtcGl0ZW1zLCBpdGVt
cywgc2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSkgKiBsaXZlKTsKKwkJfQorCQllbHNlCisJCXsKKwkJ
CS8qIFNlY29uZCBvciBzdWJzZXF1ZW50IGRlYWQgdGFibGUgVElEICovCisJCX0KKwl9CisKKwkq
bnJlbWFpbmluZyA9IGxpdmU7CisJcmV0dXJuIHRtcGl0ZW1zOworfQorCiAvKgogICoJYnRjYW5y
ZXR1cm4oKSAtLSBDaGVjayB3aGV0aGVyIGJ0cmVlIGluZGV4ZXMgc3VwcG9ydCBpbmRleC1vbmx5
IHNjYW5zLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2Vh
cmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCmluZGV4IGM1NzM4
MTRmMDEuLmM4YzhlZTA1N2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv
bmJ0c2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpA
QCAtMjYsMTAgKzI2LDE4IEBACiAKIHN0YXRpYyB2b2lkIF9idF9kcm9wX2xvY2tfYW5kX21heWJl
X3BpbihJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2NhblBvcyBzcCk7CiBzdGF0aWMgT2Zmc2V0TnVt
YmVyIF9idF9iaW5zcmNoKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgQnVmZmVyIGJ1
Zik7CitzdGF0aWMgaW50CV9idF9iaW5zcmNoX3Bvc3RpbmcoQlRTY2FuSW5zZXJ0IGtleSwgUGFn
ZSBwYWdlLAorCQkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtKTsKIHN0YXRpYyBib29sIF9idF9y
ZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCQkJCQkJIE9m
ZnNldE51bWJlciBvZmZudW0pOwogc3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1
ZSBzbywgaW50IGl0ZW1JbmRleCwKIAkJCQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1
cGxlIGl0dXApOworc3RhdGljIGludAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoQlRTY2FuT3BhcXVl
IHNvLCBpbnQgaXRlbUluZGV4LAorCQkJCQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIEl0ZW1Q
b2ludGVyIGhlYXBUaWQsCisJCQkJCQkJCSAgSW5kZXhUdXBsZSBpdHVwKTsKK3N0YXRpYyBpbmxp
bmUgdm9pZCBfYnRfc2F2ZXBvc3RpbmdpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRl
eCwKKwkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkJCQkgICBJdGVtUG9p
bnRlciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpOwogc3RhdGljIGJvb2wgX2J0X3N0ZXBwYWdl
KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwogc3RhdGljIGJvb2wgX2J0
X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLCBTY2Fu
RGlyZWN0aW9uIGRpcik7CiBzdGF0aWMgYm9vbCBfYnRfcGFyYWxsZWxfcmVhZHBhZ2UoSW5kZXhT
Y2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKQEAgLTE0Miw2ICsxNTAsNyBAQCBfYnRf
c2VhcmNoKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgQnVmZmVyICpidWZQLCBpbnQg
YWNjZXNzLAogCQlvZmZudW0gPSBfYnRfYmluc3JjaChyZWwsIGtleSwgKmJ1ZlApOwogCQlpdGVt
aWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CiAJCWl0dXAgPSAoSW5kZXhUdXBsZSkg
UGFnZUdldEl0ZW0ocGFnZSwgaXRlbWlkKTsKKwkJQXNzZXJ0KEJUcmVlVHVwbGVJc1Bpdm90KGl0
dXApIHx8ICFrZXktPmhlYXBrZXlzcGFjZSk7CiAJCWJsa25vID0gQlRyZWVUdXBsZUdldERvd25M
aW5rKGl0dXApOwogCQlwYXJfYmxrbm8gPSBCdWZmZXJHZXRCbG9ja051bWJlcigqYnVmUCk7CiAK
QEAgLTQzNCw3ICs0NDMsMTAgQEAgX2J0X2JpbnNyY2goUmVsYXRpb24gcmVsLAogICogbG93KSBt
YWtlcyBib3VuZHMgaW52YWxpZC4KICAqCiAgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGlu
dmFsaWRhdGluZyBib3VuZHMgd2hlbiBpdCBtb2RpZmllcyB0aGUgcGFnZQotICogYmVmb3JlIGNh
bGxpbmcgaGVyZSBhIHNlY29uZCB0aW1lLgorICogYmVmb3JlIGNhbGxpbmcgaGVyZSBhIHNlY29u
ZCB0aW1lLCBhbmQgZm9yIGRlYWxpbmcgd2l0aCBwb3N0aW5nIGxpc3QKKyAqIHR1cGxlIG1hdGNo
ZXMgKGNhbGxlcnMgY2FuIHVzZSBpbnNlcnRzdGF0ZSdzIHBvc3RpbmdvZmYgZmllbGQgdG8KKyAq
IGRldGVybWluZSB3aGljaCBleGlzdGluZyBoZWFwIFRJRCB3aWxsIG5lZWQgdG8gYmUgcmVwbGFj
ZWQgYnkgYSBwb3N0aW5nCisgKiBsaXN0IHNwbGl0KS4KICAqLwogT2Zmc2V0TnVtYmVyCiBfYnRf
Ymluc3JjaF9pbnNlcnQoUmVsYXRpb24gcmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRlKQpA
QCAtNDUzLDYgKzQ2NSw3IEBAIF9idF9iaW5zcmNoX2luc2VydChSZWxhdGlvbiByZWwsIEJUSW5z
ZXJ0U3RhdGUgaW5zZXJ0c3RhdGUpCiAKIAlBc3NlcnQoUF9JU0xFQUYob3BhcXVlKSk7CiAJQXNz
ZXJ0KCFrZXktPm5leHRrZXkpOworCUFzc2VydChpbnNlcnRzdGF0ZS0+cG9zdGluZ29mZiA9PSAw
KTsKIAogCWlmICghaW5zZXJ0c3RhdGUtPmJvdW5kc192YWxpZCkKIAl7CkBAIC01MDksNiArNTIy
LDE2IEBAIF9idF9iaW5zcmNoX2luc2VydChSZWxhdGlvbiByZWwsIEJUSW5zZXJ0U3RhdGUgaW5z
ZXJ0c3RhdGUpCiAJCQlpZiAocmVzdWx0ICE9IDApCiAJCQkJc3RyaWN0aGlnaCA9IGhpZ2g7CiAJ
CX0KKworCQkvKgorCQkgKiBJZiB0dXBsZSBhdCBvZmZzZXQgbG9jYXRlZCBieSBiaW5hcnkgc2Vh
cmNoIGlzIGEgcG9zdGluZyBsaXN0IHdob3NlCisJCSAqIFRJRCByYW5nZSBvdmVybGFwcyB3aXRo
IGNhbGxlcidzIHNjYW50aWQsIHBlcmZvcm0gcG9zdGluZyBsaXN0CisJCSAqIGJpbmFyeSBzZWFy
Y2ggdG8gc2V0IHBvc3RpbmdvZmYgZm9yIGNhbGxlci4gIENhbGxlciBtdXN0IHNwbGl0IHRoZQor
CQkgKiBwb3N0aW5nIGxpc3Qgd2hlbiBwb3N0aW5nb2ZmIGlzIHNldC4gIFRoaXMgc2hvdWxkIGhh
cHBlbgorCQkgKiBpbmZyZXF1ZW50bHkuCisJCSAqLworCQlpZiAodW5saWtlbHkocmVzdWx0ID09
IDAgJiYga2V5LT5zY2FudGlkICE9IE5VTEwpKQorCQkJaW5zZXJ0c3RhdGUtPnBvc3RpbmdvZmYg
PSBfYnRfYmluc3JjaF9wb3N0aW5nKGtleSwgcGFnZSwgbWlkKTsKIAl9CiAKIAkvKgpAQCAtNTI4
LDYgKzU1MSw3MyBAQCBfYnRfYmluc3JjaF9pbnNlcnQoUmVsYXRpb24gcmVsLCBCVEluc2VydFN0
YXRlIGluc2VydHN0YXRlKQogCXJldHVybiBsb3c7CiB9CiAKKy8qLS0tLS0tLS0tLQorICoJX2J0
X2JpbnNyY2hfcG9zdGluZygpIC0tIHBvc3RpbmcgbGlzdCBiaW5hcnkgc2VhcmNoLgorICoKKyAq
IEhlbHBlciByb3V0aW5lIGZvciBfYnRfYmluc3JjaF9pbnNlcnQoKS4KKyAqCisgKiBSZXR1cm5z
IG9mZnNldCBpbnRvIHBvc3RpbmcgbGlzdCB3aGVyZSBjYWxsZXIncyBzY2FudGlkIGJlbG9uZ3Mu
CisgKi0tLS0tLS0tLS0KKyAqLworc3RhdGljIGludAorX2J0X2JpbnNyY2hfcG9zdGluZyhCVFNj
YW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsIE9mZnNldE51bWJlciBvZmZudW0pCit7CisJSW5kZXhU
dXBsZQlpdHVwOworCUl0ZW1JZAkJaXRlbWlkOworCWludAkJCWxvdywKKwkJCQloaWdoLAorCQkJ
CW1pZCwKKwkJCQlyZXM7CisKKwkvKgorCSAqIElmIHRoaXMgaXNuJ3QgYSBwb3N0aW5nIHR1cGxl
LCB0aGVuIHRoZSBpbmRleCBtdXN0IGJlIGNvcnJ1cHQgKGlmIGl0IGlzCisJICogYW4gb3JkaW5h
cnkgbm9uLXBpdm90IHR1cGxlIHRoZW4gdGhlcmUgbXVzdCBiZSBhbiBleGlzdGluZyB0dXBsZSB3
aXRoIGEKKwkgKiBoZWFwIFRJRCB0aGF0IGVxdWFscyBpbnNlcnRlcidzIG5ldyBoZWFwIFRJRC9z
Y2FudGlkKS4gIERlZmVuc2l2ZWx5CisJICogY2hlY2sgdGhhdCB0dXBsZSBpcyBhIHBvc3Rpbmcg
bGlzdCB0dXBsZSB3aG9zZSBwb3N0aW5nIGxpc3QgcmFuZ2UKKwkgKiBpbmNsdWRlcyBjYWxsZXIn
cyBzY2FudGlkLgorCSAqCisJICogKFRoaXMgaXMgYWxzbyBuZWVkZWQgYmVjYXVzZSBjb250cmli
L2FtY2hlY2sncyByb290ZGVzY2VuZCBvcHRpb24gbmVlZHMKKwkgKiB0byBiZSBhYmxlIHRvIHJl
bG9jYXRlIGEgbm9uLXBpdm90IHR1cGxlIHVzaW5nIF9idF9iaW5zcmNoX2luc2VydCgpLikKKwkg
Ki8KKwlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisJaXR1cCA9IChJbmRl
eFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpOworCWlmICghQlRyZWVUdXBsZUlzUG9z
dGluZyhpdHVwKSkKKwkJcmV0dXJuIDA7CisKKwlBc3NlcnQoa2V5LT5oZWFwa2V5c3BhY2UgJiYg
a2V5LT5zYWZlZGVkdXApOworCisJLyoKKwkgKiBJbiB0aGUgZXZlbnQgdGhhdCBwb3N0aW5nIGxp
c3QgdHVwbGUgaGFzIExQX0RFQUQgYml0IHNldCwgaW5kaWNhdGUgdGhpcworCSAqIHRvIF9idF9i
aW5zcmNoX2luc2VydCgpIGNhbGxlciBieSByZXR1cm5pbmcgLTEsIGEgc2VudGluZWwgdmFsdWUu
ICBBCisJICogc2Vjb25kIGNhbGwgdG8gX2J0X2JpbnNyY2hfaW5zZXJ0KCkgY2FuIHRha2UgcGxh
Y2Ugd2hlbiBpdHMgY2FsbGVyIGhhcworCSAqIHJlbW92ZWQgdGhlIGRlYWQgaXRlbS4KKwkgKi8K
KwlpZiAoSXRlbUlkSXNEZWFkKGl0ZW1pZCkpCisJCXJldHVybiAtMTsKKworCS8qICJoaWdoIiBp
cyBwYXN0IGVuZCBvZiBwb3N0aW5nIGxpc3QgZm9yIGxvb3AgaW52YXJpYW50ICovCisJbG93ID0g
MDsKKwloaWdoID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOworCUFzc2VydChoaWdoID49
IDIpOworCisJd2hpbGUgKGhpZ2ggPiBsb3cpCisJeworCQltaWQgPSBsb3cgKyAoKGhpZ2ggLSBs
b3cpIC8gMik7CisJCXJlcyA9IEl0ZW1Qb2ludGVyQ29tcGFyZShrZXktPnNjYW50aWQsCisJCQkJ
CQkJCSBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgbWlkKSk7CisKKwkJaWYgKHJlcyA+IDAp
CisJCQlsb3cgPSBtaWQgKyAxOworCQllbHNlIGlmIChyZXMgPCAwKQorCQkJaGlnaCA9IG1pZDsK
KwkJZWxzZQorCQkJcmV0dXJuIG1pZDsKKwl9CisKKwkvKiBFeGFjdCBtYXRjaCBub3QgZm91bmQg
Ki8KKwlyZXR1cm4gbG93OworfQorCiAvKi0tLS0tLS0tLS0KICAqCV9idF9jb21wYXJlKCkgLS0g
Q29tcGFyZSBpbnNlcnRpb24tdHlwZSBzY2Fua2V5IHRvIHR1cGxlIG9uIGEgcGFnZS4KICAqCkBA
IC01MzcsOSArNjI3LDE0IEBAIF9idF9iaW5zcmNoX2luc2VydChSZWxhdGlvbiByZWwsIEJUSW5z
ZXJ0U3RhdGUgaW5zZXJ0c3RhdGUpCiAgKgkJCTwwIGlmIHNjYW5rZXkgPCB0dXBsZSBhdCBvZmZu
dW07CiAgKgkJCSAwIGlmIHNjYW5rZXkgPT0gdHVwbGUgYXQgb2ZmbnVtOwogICoJCQk+MCBpZiBz
Y2Fua2V5ID4gdHVwbGUgYXQgb2ZmbnVtLgotICoJCU5VTExzIGluIHRoZSBrZXlzIGFyZSB0cmVh
dGVkIGFzIHNvcnRhYmxlIHZhbHVlcy4gIFRoZXJlZm9yZQotICoJCSJlcXVhbGl0eSIgZG9lcyBu
b3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHRoZSBpdGVtIHNob3VsZCBiZQotICoJCXJldHVybmVk
IHRvIHRoZSBjYWxsZXIgYXMgYSBtYXRjaGluZyBrZXkhCisgKgorICogTlVMTHMgaW4gdGhlIGtl
eXMgYXJlIHRyZWF0ZWQgYXMgc29ydGFibGUgdmFsdWVzLiAgVGhlcmVmb3JlCisgKiAiZXF1YWxp
dHkiIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCB0aGUgaXRlbSBzaG91bGQgYmUgcmV0
dXJuZWQKKyAqIHRvIHRoZSBjYWxsZXIgYXMgYSBtYXRjaGluZyBrZXkuICBTaW1pbGFybHksIGFu
IGluc2VydGlvbiBzY2Fua2V5CisgKiB3aXRoIGl0cyBzY2FudGlkIHNldCBpcyB0cmVhdGVkIGFz
IGVxdWFsIHRvIGEgcG9zdGluZyB0dXBsZSB3aG9zZSBUSUQKKyAqIHJhbmdlIG92ZXJsYXBzIHdp
dGggdGhlaXIgc2NhbnRpZC4gIFRoZXJlIGdlbmVyYWxseSB3b24ndCBiZSBhCisgKiBtYXRjaGlu
ZyBUSUQgaW4gdGhlIHBvc3RpbmcgdHVwbGUsIHdoaWNoIGNhbGxlciBtdXN0IGhhbmRsZQorICog
dGhlbXNlbHZlcyAoZS5nLiwgYnkgc3BsaXR0aW5nIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUpLgog
ICoKICAqIENSVUNJQUwgTk9URTogb24gYSBub24tbGVhZiBwYWdlLCB0aGUgZmlyc3QgZGF0YSBr
ZXkgaXMgYXNzdW1lZCB0byBiZQogICogIm1pbnVzIGluZmluaXR5IjogdGhpcyByb3V0aW5lIHdp
bGwgYWx3YXlzIGNsYWltIGl0IGlzIGxlc3MgdGhhbiB0aGUKQEAgLTU2Myw2ICs2NTgsNyBAQCBf
YnRfY29tcGFyZShSZWxhdGlvbiByZWwsCiAJU2NhbktleQkJc2NhbmtleTsKIAlpbnQJCQluY21w
a2V5OwogCWludAkJCW50dXBhdHRzOworCWludDMyCQlyZXN1bHQ7CiAKIAlBc3NlcnQoX2J0X2No
ZWNrX25hdHRzKHJlbCwga2V5LT5oZWFwa2V5c3BhY2UsIHBhZ2UsIG9mZm51bSkpOwogCUFzc2Vy
dChrZXktPmtleXN6IDw9IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMocmVs
KSk7CkBAIC01OTcsNyArNjkzLDYgQEAgX2J0X2NvbXBhcmUoUmVsYXRpb24gcmVsLAogCXsKIAkJ
RGF0dW0JCWRhdHVtOwogCQlib29sCQlpc051bGw7Ci0JCWludDMyCQlyZXN1bHQ7CiAKIAkJZGF0
dW0gPSBpbmRleF9nZXRhdHRyKGl0dXAsIHNjYW5rZXktPnNrX2F0dG5vLCBpdHVwZGVzYywgJmlz
TnVsbCk7CiAKQEAgLTcxMyw4ICs4MDgsMjUgQEAgX2J0X2NvbXBhcmUoUmVsYXRpb24gcmVsLAog
CWlmIChoZWFwVGlkID09IE5VTEwpCiAJCXJldHVybiAxOwogCisJLyoKKwkgKiBTY2Fua2V5IG11
c3QgYmUgdHJlYXRlZCBhcyBlcXVhbCB0byBhIHBvc3RpbmcgbGlzdCB0dXBsZSBpZiBpdHMgc2Nh
bnRpZAorCSAqIHZhbHVlIGZhbGxzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgdGhlIHBvc3RpbmcgbGlz
dC4gIEluIGFsbCBvdGhlciBjYXNlcworCSAqIHRoZXJlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIGhl
YXAgVElEIHZhbHVlLCB3aGljaCBpcyBjb21wYXJlZCBkaXJlY3RseQorCSAqIGFzIGEgc2ltcGxl
IHNjYWxhciB2YWx1ZS4KKwkgKi8KIAlBc3NlcnQobnR1cGF0dHMgPj0gSW5kZXhSZWxhdGlvbkdl
dE51bWJlck9mS2V5QXR0cmlidXRlcyhyZWwpKTsKLQlyZXR1cm4gSXRlbVBvaW50ZXJDb21wYXJl
KGtleS0+c2NhbnRpZCwgaGVhcFRpZCk7CisJcmVzdWx0ID0gSXRlbVBvaW50ZXJDb21wYXJlKGtl
eS0+c2NhbnRpZCwgaGVhcFRpZCk7CisJaWYgKHJlc3VsdCA8PSAwIHx8ICFCVHJlZVR1cGxlSXNQ
b3N0aW5nKGl0dXApKQorCQlyZXR1cm4gcmVzdWx0OworCWVsc2UKKwl7CisJCXJlc3VsdCA9IEl0
ZW1Qb2ludGVyQ29tcGFyZShrZXktPnNjYW50aWQsCisJCQkJCQkJCQlCVHJlZVR1cGxlR2V0TWF4
SGVhcFRJRChpdHVwKSk7CisJCWlmIChyZXN1bHQgPiAwKQorCQkJcmV0dXJuIDE7CisJfQorCisJ
cmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xMjI5LDcgKzEzNDEsNyBAQCBfYnRfZmlyc3QoSW5kZXhT
Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAl9CiAKIAkvKiBJbml0aWFsaXplIHJl
bWFpbmluZyBpbnNlcnRpb24gc2NhbiBrZXkgZmllbGRzICovCi0JaW5za2V5LmhlYXBrZXlzcGFj
ZSA9IF9idF9oZWFwa2V5c3BhY2UocmVsKTsKKwlfYnRfbWV0YXZlcnNpb24ocmVsLCAmaW5za2V5
LmhlYXBrZXlzcGFjZSwgJmluc2tleS5zYWZlZGVkdXApOwogCWluc2tleS5hbnludWxsa2V5cyA9
IGZhbHNlOyAvKiB1bnVzZWQgKi8KIAlpbnNrZXkubmV4dGtleSA9IG5leHRrZXk7CiAJaW5za2V5
LnBpdm90c2VhcmNoID0gZmFsc2U7CkBAIC0xNDg0LDkgKzE1OTYsMzUgQEAgX2J0X3JlYWRwYWdl
KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZu
dW0pCiAKIAkJCWlmIChfYnRfY2hlY2trZXlzKHNjYW4sIGl0dXAsIGluZG5hdHRzLCBkaXIsICZj
b250aW51ZXNjYW4pKQogCQkJewotCQkJCS8qIHR1cGxlIHBhc3NlcyBhbGwgc2NhbiBrZXkgY29u
ZGl0aW9ucywgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRl
eCwgb2ZmbnVtLCBpdHVwKTsKLQkJCQlpdGVtSW5kZXgrKzsKKwkJCQkvKiB0dXBsZSBwYXNzZXMg
YWxsIHNjYW4ga2V5IGNvbmRpdGlvbnMgKi8KKwkJCQlpZiAoIUJUcmVlVHVwbGVJc1Bvc3Rpbmco
aXR1cCkpCisJCQkJeworCQkJCQkvKiBSZW1lbWJlciBpdCAqLworCQkJCQlfYnRfc2F2ZWl0ZW0o
c28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQkJaXRlbUluZGV4Kys7CisJCQkJfQor
CQkJCWVsc2UKKwkJCQl7CisJCQkJCWludAkJCXR1cGxlT2Zmc2V0OworCisJCQkJCS8qCisJCQkJ
CSAqIFNldCB1cCBzdGF0ZSB0byByZXR1cm4gcG9zdGluZyBsaXN0LCBhbmQgcmVtZW1iZXIgZmly
c3QKKwkJCQkJICogVElECisJCQkJCSAqLworCQkJCQl0dXBsZU9mZnNldCA9CisJCQkJCQlfYnRf
c2V0dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQkJCQkJCQkgIEJU
cmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCAwKSwKKwkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJ
aXRlbUluZGV4Kys7CisJCQkJCS8qIFJlbWVtYmVyIGFkZGl0aW9uYWwgVElEcyAqLworCQkJCQlm
b3IgKGludCBpID0gMTsgaSA8IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwKTsgaSsrKQorCQkJ
CQl7CisJCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJ
CQkJCQkJCQkJQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpLAorCQkJCQkJCQkJCQl0dXBs
ZU9mZnNldCk7CisJCQkJCQlpdGVtSW5kZXgrKzsKKwkJCQkJfQorCQkJCX0KIAkJCX0KIAkJCS8q
IFdoZW4gIWNvbnRpbnVlc2NhbiwgdGhlcmUgY2FuJ3QgYmUgYW55IG1vcmUgbWF0Y2hlcywgc28g
c3RvcCAqLwogCQkJaWYgKCFjb250aW51ZXNjYW4pCkBAIC0xNTE5LDcgKzE2NTcsNyBAQCBfYnRf
cmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVt
YmVyIG9mZm51bSkKIAkJaWYgKCFjb250aW51ZXNjYW4pCiAJCQlzby0+Y3VyclBvcy5tb3JlUmln
aHQgPSBmYWxzZTsKIAotCQlBc3NlcnQoaXRlbUluZGV4IDw9IE1heEluZGV4VHVwbGVzUGVyUGFn
ZSk7CisJCUFzc2VydChpdGVtSW5kZXggPD0gTWF4VElEc1BlckJUcmVlUGFnZSk7CiAJCXNvLT5j
dXJyUG9zLmZpcnN0SXRlbSA9IDA7CiAJCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gaXRlbUluZGV4
IC0gMTsKIAkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gMDsKQEAgLTE1MjcsNyArMTY2NSw3IEBA
IF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZz
ZXROdW1iZXIgb2ZmbnVtKQogCWVsc2UKIAl7CiAJCS8qIGxvYWQgaXRlbXNbXSBpbiBkZXNjZW5k
aW5nIG9yZGVyICovCi0JCWl0ZW1JbmRleCA9IE1heEluZGV4VHVwbGVzUGVyUGFnZTsKKwkJaXRl
bUluZGV4ID0gTWF4VElEc1BlckJUcmVlUGFnZTsKIAogCQlvZmZudW0gPSBNaW4ob2ZmbnVtLCBt
YXhvZmYpOwogCkBAIC0xNTY4LDkgKzE3MDYsNDEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRl
c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0pCiAJCQkJCQkJ
CQkJICZjb250aW51ZXNjYW4pOwogCQkJaWYgKHBhc3Nlc19xdWFscyAmJiB0dXBsZV9hbGl2ZSkK
IAkJCXsKLQkJCQkvKiB0dXBsZSBwYXNzZXMgYWxsIHNjYW4ga2V5IGNvbmRpdGlvbnMsIHNvIHJl
bWVtYmVyIGl0ICovCi0JCQkJaXRlbUluZGV4LS07Ci0JCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVt
SW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJLyogdHVwbGUgcGFzc2VzIGFsbCBzY2FuIGtleSBj
b25kaXRpb25zICovCisJCQkJaWYgKCFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKQorCQkJCXsK
KwkJCQkJLyogUmVtZW1iZXIgaXQgKi8KKwkJCQkJaXRlbUluZGV4LS07CisJCQkJCV9idF9zYXZl
aXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCX0KKwkJCQllbHNlCisJCQkJ
eworCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsKKworCQkJCQkvKgorCQkJCQkgKiBTZXQgdXAgc3Rh
dGUgdG8gcmV0dXJuIHBvc3RpbmcgbGlzdCwgYW5kIHJlbWVtYmVyIGZpcnN0CisJCQkJCSAqIFRJ
RC4KKwkJCQkJICoKKwkJCQkJICogTm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSBzYXZlL3JldHVy
biBpdGVtcyBmcm9tCisJCQkJCSAqIHBvc3RpbmcgbGlzdHMgaW4gYXNjZW5kaW5nIGhlYXAgVElE
IG9yZGVyIGZvciBiYWNrd2FyZHMKKwkJCQkJICogc2NhbnMuICBUaGlzIGFsbG93cyBfYnRfa2ls
bGl0ZW1zKCkgdG8gbWFrZSBhCisJCQkJCSAqIGNvbnNpc3RlbnQgYXNzdW1wdGlvbiBhYm91dCB0
aGUgb3JkZXIgb2YgaXRlbXMKKwkJCQkJICogYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIHBvc3Rp
bmcgbGlzdCB0dXBsZS4KKwkJCQkJICovCisJCQkJCWl0ZW1JbmRleC0tOworCQkJCQl0dXBsZU9m
ZnNldCA9CisJCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVt
LAorCQkJCQkJCQkJCQkgIEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCAwKSwKKwkJCQkJCQkJ
CQkJICBpdHVwKTsKKwkJCQkJLyogUmVtZW1iZXIgYWRkaXRpb25hbCBUSURzICovCisJCQkJCWZv
ciAoaW50IGkgPSAxOyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOyBpKyspCisJCQkJ
CXsKKwkJCQkJCWl0ZW1JbmRleC0tOworCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShzbywgaXRl
bUluZGV4LCBvZmZudW0sCisJCQkJCQkJCQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBp
KSwKKwkJCQkJCQkJCQkJdHVwbGVPZmZzZXQpOworCQkJCQl9CisJCQkJfQogCQkJfQogCQkJaWYg
KCFjb250aW51ZXNjYW4pCiAJCQl7CkBAIC0xNTg0LDggKzE3NTQsOCBAQCBfYnRfcmVhZHBhZ2Uo
SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51
bSkKIAogCQlBc3NlcnQoaXRlbUluZGV4ID49IDApOwogCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0g
PSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gTWF4SW5kZXhUdXBsZXNQZXJQ
YWdlIC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdl
IC0gMTsKKwkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsK
KwkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7CiAJfQog
CiAJcmV0dXJuIChzby0+Y3VyclBvcy5maXJzdEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0p
OwpAQCAtMTU5OCw2ICsxNzY4LDggQEAgX2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50
IGl0ZW1JbmRleCwKIHsKIAlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5p
dGVtc1tpdGVtSW5kZXhdOwogCisJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQaXZvdChpdHVwKSAmJiAh
QlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CisKIAljdXJySXRlbS0+aGVhcFRpZCA9IGl0dXAt
PnRfdGlkOwogCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKIAlpZiAoc28tPmN1cnJU
dXBsZXMpCkBAIC0xNjEwLDYgKzE3ODIsNzEgQEAgX2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1ZSBz
bywgaW50IGl0ZW1JbmRleCwKIAl9CiB9CiAKKy8qCisgKiBTZXR1cCBzdGF0ZSB0byBzYXZlIFRJ
RHMvaXRlbXMgZnJvbSBhIHNpbmdsZSBwb3N0aW5nIGxpc3QgdHVwbGUuCisgKgorICogU2F2ZXMg
YW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0
aGF0IGlzCisgKiByZXR1cm5lZCB0byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQg
VElEcyBmb3IgcG9zdGluZyBsaXN0IHNob3VsZAorICogYmUgc2F2ZWQgYnkgY2FsbGluZyBfYnRf
c2F2ZXBvc3RpbmdpdGVtKCkuCisgKgorICogUmV0dXJucyBhbiBvZmZzZXQgaW50byB0dXBsZSBz
dG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0dXBsZSBpcyBzdG9yZWQgYXQgaWYKKyAqIG5lZWRlZC4K
KyAqLworc3RhdGljIGludAorX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywg
aW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJICBJdGVtUG9pbnRlciBo
ZWFwVGlkLCBJbmRleFR1cGxlIGl0dXApCit7CisJQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAm
c28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKworCUFzc2VydChCVHJlZVR1cGxlSXNQb3N0
aW5nKGl0dXApKTsKKworCWN1cnJJdGVtLT5oZWFwVGlkID0gKmhlYXBUaWQ7CisJY3Vyckl0ZW0t
PmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCWlmIChzby0+Y3VyclR1cGxlcykKKwl7CisJCS8qIFNh
dmUgYmFzZSBJbmRleFR1cGxlICh0cnVuY2F0ZSBwb3N0aW5nIGxpc3QpICovCisJCUluZGV4VHVw
bGUJYmFzZTsKKwkJU2l6ZQkJaXR1cHN6ID0gQlRyZWVUdXBsZUdldFBvc3RpbmdPZmZzZXQoaXR1
cCk7CisKKwkJaXR1cHN6ID0gTUFYQUxJR04oaXR1cHN6KTsKKwkJY3Vyckl0ZW0tPnR1cGxlT2Zm
c2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OworCQliYXNlID0gKEluZGV4VHVwbGUp
IChzby0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCk7CisJCW1lbWNw
eShiYXNlLCBpdHVwLCBpdHVwc3opOworCQkvKiBEZWZlbnNpdmVseSByZWR1Y2Ugd29yayBhcmVh
IGluZGV4IHR1cGxlIGhlYWRlciBzaXplICovCisJCWJhc2UtPnRfaW5mbyAmPSB+SU5ERVhfU0la
RV9NQVNLOworCQliYXNlLT50X2luZm8gfD0gaXR1cHN6OworCQlzby0+Y3VyclBvcy5uZXh0VHVw
bGVPZmZzZXQgKz0gaXR1cHN6OworCisJCXJldHVybiBjdXJySXRlbS0+dHVwbGVPZmZzZXQ7CisJ
fQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBzby0+
Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdIGZvciBjdXJyZW50IHBvc3RpbmcKKyAqIHR1cGxlLgor
ICoKKyAqIEFzc3VtZXMgdGhhdCBfYnRfc2V0dXBwb3N0aW5naXRlbXMoKSBoYXMgYWxyZWFkeSBi
ZWVuIGNhbGxlZCBmb3IgY3VycmVudAorICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVyIHBh
c3NlcyBpdHMgcmV0dXJuIHZhbHVlIGFzIHR1cGxlT2Zmc2V0LgorICovCitzdGF0aWMgaW5saW5l
IHZvaWQKK19idF9zYXZlcG9zdGluZ2l0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4
LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQlJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgdHVw
bGVPZmZzZXQpCit7CisJQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRl
bXNbaXRlbUluZGV4XTsKKworCWN1cnJJdGVtLT5oZWFwVGlkID0gKmhlYXBUaWQ7CisJY3Vyckl0
ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCisJLyoKKwkgKiBIYXZlIGluZGV4LW9ubHkgc2Nh
bnMgcmV0dXJuIHRoZSBzYW1lIGJhc2UgSW5kZXhUdXBsZSBmb3IgZXZlcnkgVElECisJICogdGhh
dCBvcmlnaW5hdGVzIGZyb20gdGhlIHNhbWUgcG9zdGluZyBsaXN0CisJICovCisJaWYgKHNvLT5j
dXJyVHVwbGVzKQorCQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSB0dXBsZU9mZnNldDsKK30KKwog
LyoKICAqCV9idF9zdGVwcGFnZSgpIC0tIFN0ZXAgdG8gbmV4dCBwYWdlIGNvbnRhaW5pbmcgdmFs
aWQgZGF0YSBmb3Igc2NhbgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy
ZWUvbmJ0c29ydC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMKaW5kZXgg
ZjE2MzQ5MWQ2MC4uZGRkZmUxNGQ1OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25i
dHJlZS9uYnRzb3J0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMK
QEAgLTI0Myw2ICsyNDMsNyBAQCB0eXBlZGVmIHN0cnVjdCBCVFBhZ2VTdGF0ZQogCUJsb2NrTnVt
YmVyIGJ0cHNfYmxrbm87CQkvKiBibG9jayAjIHRvIHdyaXRlIHRoaXMgcGFnZSBhdCAqLwogCUlu
ZGV4VHVwbGUJYnRwc19sb3drZXk7CS8qIHBhZ2UncyBzdHJpY3QgbG93ZXIgYm91bmQgcGl2b3Qg
dHVwbGUgKi8KIAlPZmZzZXROdW1iZXIgYnRwc19sYXN0b2ZmOwkvKiBsYXN0IGl0ZW0gb2Zmc2V0
IGxvYWRlZCAqLworCVNpemUJCWJ0cHNfbGFzdGV4dHJhOyAvKiBsYXN0IGl0ZW0ncyBleHRyYSBw
b3N0aW5nIGxpc3Qgc3BhY2UgKi8KIAl1aW50MzIJCWJ0cHNfbGV2ZWw7CQkvKiB0cmVlIGxldmVs
ICgwID0gbGVhZikgKi8KIAlTaXplCQlidHBzX2Z1bGw7CQkvKiAiZnVsbCIgaWYgbGVzcyB0aGFu
IHRoaXMgbXVjaCBmcmVlIHNwYWNlICovCiAJc3RydWN0IEJUUGFnZVN0YXRlICpidHBzX25leHQ7
CS8qIGxpbmsgdG8gcGFyZW50IGxldmVsLCBpZiBhbnkgKi8KQEAgLTI3Nyw3ICsyNzgsMTAgQEAg
c3RhdGljIHZvaWQgX2J0X3NsaWRlbGVmdChQYWdlIHBhZ2UpOwogc3RhdGljIHZvaWQgX2J0X3Nv
cnRhZGR0dXAoUGFnZSBwYWdlLCBTaXplIGl0ZW1zaXplLAogCQkJCQkJICAgSW5kZXhUdXBsZSBp
dHVwLCBPZmZzZXROdW1iZXIgaXR1cF9vZmYpOwogc3RhdGljIHZvaWQgX2J0X2J1aWxkYWRkKEJU
V3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFBhZ2VTdGF0ZSAqc3RhdGUsCi0JCQkJCQkgSW5kZXhUdXBs
ZSBpdHVwKTsKKwkJCQkJCSBJbmRleFR1cGxlIGl0dXAsIFNpemUgdHJ1bmNleHRyYSk7CitzdGF0
aWMgdm9pZCBfYnRfc29ydF9kZWR1cF9maW5pc2hfcGVuZGluZyhCVFdyaXRlU3RhdGUgKndzdGF0
ZSwKKwkJCQkJCQkJCQkgIEJUUGFnZVN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJCQkgIEJURGVkdXBT
dGF0ZSBkc3RhdGUpOwogc3RhdGljIHZvaWQgX2J0X3VwcGVyc2h1dGRvd24oQlRXcml0ZVN0YXRl
ICp3c3RhdGUsIEJUUGFnZVN0YXRlICpzdGF0ZSk7CiBzdGF0aWMgdm9pZCBfYnRfbG9hZChCVFdy
aXRlU3RhdGUgKndzdGF0ZSwKIAkJCQkJIEJUU3Bvb2wgKmJ0c3Bvb2wsIEJUU3Bvb2wgKmJ0c3Bv
b2wyKTsKQEAgLTcxMSw2ICs3MTUsNyBAQCBfYnRfcGFnZXN0YXRlKEJUV3JpdGVTdGF0ZSAqd3N0
YXRlLCB1aW50MzIgbGV2ZWwpCiAJc3RhdGUtPmJ0cHNfbG93a2V5ID0gTlVMTDsKIAkvKiBpbml0
aWFsaXplIGxhc3RvZmYgc28gZmlyc3QgaXRlbSBnb2VzIGludG8gUF9GSVJTVEtFWSAqLwogCXN0
YXRlLT5idHBzX2xhc3RvZmYgPSBQX0hJS0VZOworCXN0YXRlLT5idHBzX2xhc3RleHRyYSA9IDA7
CiAJc3RhdGUtPmJ0cHNfbGV2ZWwgPSBsZXZlbDsKIAkvKiBzZXQgImZ1bGwiIHRocmVzaG9sZCBi
YXNlZCBvbiBsZXZlbC4gIFNlZSBub3RlcyBhdCBoZWFkIG9mIGZpbGUuICovCiAJaWYgKGxldmVs
ID4gMCkKQEAgLTc4OSw3ICs3OTQsOCBAQCBfYnRfc29ydGFkZHR1cChQYWdlIHBhZ2UsCiB9CiAK
IC8qLS0tLS0tLS0tLQotICogQWRkIGFuIGl0ZW0gdG8gYSBkaXNrIHBhZ2UgZnJvbSB0aGUgc29y
dCBvdXRwdXQuCisgKiBBZGQgYW4gaXRlbSB0byBhIGRpc2sgcGFnZSBmcm9tIHRoZSBzb3J0IG91
dHB1dCAob3IgYWRkIGEgcG9zdGluZyBsaXN0CisgKiBpdGVtIGZvcm1lZCBmcm9tIHRoZSBzb3J0
IG91dHB1dCkuCiAgKgogICogV2UgbXVzdCBiZSBjYXJlZnVsIHRvIG9ic2VydmUgdGhlIHBhZ2Ug
bGF5b3V0IGNvbnZlbnRpb25zIG9mIG5idHNlYXJjaC5jOgogICogLSByaWdodG1vc3QgcGFnZXMg
c3RhcnQgZGF0YSBpdGVtcyBhdCBQX0hJS0VZIGluc3RlYWQgb2YgYXQgUF9GSVJTVEtFWS4KQEAg
LTgyMSwxNCArODI3LDI3IEBAIF9idF9zb3J0YWRkdHVwKFBhZ2UgcGFnZSwKICAqIHRoZSB0cnVu
Y2F0ZWQgaGlnaCBrZXkgYXQgb2Zmc2V0IDEuCiAgKgogICogJ2xhc3QnIHBvaW50ZXIgaW5kaWNh
dGVzIHRoZSBsYXN0IG9mZnNldCBhZGRlZCB0byB0aGUgcGFnZS4KKyAqCisgKiAndHJ1bmNleHRy
YScgaXMgdGhlIHNpemUgb2YgdGhlIHBvc3RpbmcgbGlzdCBpbiBpdHVwLCBpZiBhbnkuICBUaGlz
CisgKiBpbmZvcm1hdGlvbiBpcyBzdGFzaGVkIGZvciB0aGUgbmV4dCBjYWxsIGhlcmUsIHdoZW4g
d2UgbWF5IGJlbmVmaXQKKyAqIGZyb20gY29uc2lkZXJpbmcgdGhlIGltcGFjdCBvZiB0cnVuY2F0
aW5nIGF3YXkgdGhlIHBvc3RpbmcgbGlzdCBvbgorICogdGhlIHBhZ2UgYmVmb3JlIGRlY2lkaW5n
IHRvIGZpbmlzaCB0aGUgcGFnZSBvZmYuICBQb3N0aW5nIGxpc3RzIGFyZQorICogb2Z0ZW4gcmVs
YXRpdmVseSBsYXJnZSwgc28gaXQgaXMgd29ydGggZ29pbmcgdG8gdGhlIHRyb3VibGUgb2YKKyAq
IGFjY291bnRpbmcgZm9yIHRoZSBzYXZpbmcgZnJvbSB0cnVuY2F0aW5nIGF3YXkgdGhlIHBvc3Rp
bmcgbGlzdCBvZgorICogdGhlIHR1cGxlIHRoYXQgYmVjb21lcyB0aGUgaGlnaCBrZXkgKHRoYXQg
bWF5IGJlIHRoZSBvbmx5IHdheSB0bworICogZ2V0IGNsb3NlIHRvIHRhcmdldCBmcmVlIHNwYWNl
IG9uIHRoZSBwYWdlKS4gIE5vdGUgdGhhdCB0aGlzIGlzCisgKiBvbmx5IHVzZWQgZm9yIHRoZSBz
b2Z0IGZpbGxmYWN0b3Itd2lzZSBsaW1pdCwgbm90IHRoZSBjcml0aWNhbCBoYXJkCisgKiBsaW1p
dC4KICAqLS0tLS0tLS0tLQogICovCiBzdGF0aWMgdm9pZAotX2J0X2J1aWxkYWRkKEJUV3JpdGVT
dGF0ZSAqd3N0YXRlLCBCVFBhZ2VTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCkKK19idF9i
dWlsZGFkZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRQYWdlU3RhdGUgKnN0YXRlLCBJbmRleFR1
cGxlIGl0dXAsCisJCQkgU2l6ZSB0cnVuY2V4dHJhKQogewogCVBhZ2UJCW5wYWdlOwogCUJsb2Nr
TnVtYmVyIG5ibGtubzsKIAlPZmZzZXROdW1iZXIgbGFzdF9vZmY7CisJU2l6ZQkJbGFzdF90cnVu
Y2V4dHJhOwogCVNpemUJCXBnc3BjOwogCVNpemUJCWl0dXBzejsKIAlib29sCQlpc2xlYWY7CkBA
IC04NDIsNiArODYxLDggQEAgX2J0X2J1aWxkYWRkKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFBh
Z2VTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCkKIAlucGFnZSA9IHN0YXRlLT5idHBzX3Bh
Z2U7CiAJbmJsa25vID0gc3RhdGUtPmJ0cHNfYmxrbm87CiAJbGFzdF9vZmYgPSBzdGF0ZS0+YnRw
c19sYXN0b2ZmOworCWxhc3RfdHJ1bmNleHRyYSA9IHN0YXRlLT5idHBzX2xhc3RleHRyYTsKKwlz
dGF0ZS0+YnRwc19sYXN0ZXh0cmEgPSB0cnVuY2V4dHJhOwogCiAJcGdzcGMgPSBQYWdlR2V0RnJl
ZVNwYWNlKG5wYWdlKTsKIAlpdHVwc3ogPSBJbmRleFR1cGxlU2l6ZShpdHVwKTsKQEAgLTg4Mywx
MCArOTA0LDEwIEBAIF9idF9idWlsZGFkZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRQYWdlU3Rh
dGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXApCiAJICogcGFnZS4gIERpc3JlZ2FyZCBmaWxsZmFj
dG9yIGFuZCBpbnNlcnQgb24gImZ1bGwiIGN1cnJlbnQgcGFnZSBpZiB3ZQogCSAqIGRvbid0IGhh
dmUgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIHlldC4gIChOb3RlIHRoYXQgd2UgZGVsaWJl
cmF0ZWx5CiAJICogYXNzdW1lIHRoYXQgc3VmZml4IHRydW5jYXRpb24gbmVpdGhlciBlbmxhcmdl
cyBub3Igc2hyaW5rcyBuZXcgaGlnaCBrZXkKLQkgKiB3aGVuIGFwcGx5aW5nIHNvZnQgbGltaXQu
KQorCSAqIHdoZW4gYXBwbHlpbmcgc29mdCBsaW1pdCwgZXhjZXB0IHdoZW4gbGFzdCB0dXBsZSBo
YWQgYSBwb3N0aW5nIGxpc3QuKQogCSAqLwogCWlmIChwZ3NwYyA8IGl0dXBzeiArIChpc2xlYWYg
PyBNQVhBTElHTihzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSkgOiAwKSB8fAotCQkocGdzcGMgPCBz
dGF0ZS0+YnRwc19mdWxsICYmIGxhc3Rfb2ZmID4gUF9GSVJTVEtFWSkpCisJCShwZ3NwYyArIGxh
c3RfdHJ1bmNleHRyYSA8IHN0YXRlLT5idHBzX2Z1bGwgJiYgbGFzdF9vZmYgPiBQX0ZJUlNUS0VZ
KSkKIAl7CiAJCS8qCiAJCSAqIEZpbmlzaCBvZmYgdGhlIHBhZ2UgYW5kIHdyaXRlIGl0IG91dC4K
QEAgLTk0NCwxMSArOTY1LDE0IEBAIF9idF9idWlsZGFkZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwg
QlRQYWdlU3RhdGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXApCiAJCQkgKiBXZSBkb24ndCB0cnkg
dG8gYmlhcyBvdXIgY2hvaWNlIG9mIHNwbGl0IHBvaW50IHRvIG1ha2UgaXQgbW9yZQogCQkJICog
bGlrZWx5IHRoYXQgX2J0X3RydW5jYXRlKCkgY2FuIHRydW5jYXRlIGF3YXkgbW9yZSBhdHRyaWJ1
dGVzLAogCQkJICogd2hlcmVhcyB0aGUgc3BsaXQgcG9pbnQgdXNlZCB3aXRoaW4gX2J0X3NwbGl0
KCkgaXMgY2hvc2VuIG11Y2gKLQkJCSAqIG1vcmUgZGVsaWNhdGVseS4gIFN1ZmZpeCB0cnVuY2F0
aW9uIGlzIG1vc3RseSB1c2VmdWwgYmVjYXVzZSBpdAotCQkJICogaW1wcm92ZXMgc3BhY2UgdXRp
bGl6YXRpb24gZm9yIHdvcmtsb2FkcyB3aXRoIHJhbmRvbQotCQkJICogaW5zZXJ0aW9ucy4gIEl0
IGRvZXNuJ3Qgc2VlbSB3b3J0aHdoaWxlIHRvIGFkZCBsb2dpYyBmb3IKLQkJCSAqIGNob29zaW5n
IGEgc3BsaXQgcG9pbnQgaGVyZSBmb3IgYSBiZW5lZml0IHRoYXQgaXMgYm91bmQgdG8gYmUKLQkJ
CSAqIG11Y2ggc21hbGxlci4KKwkJCSAqIG1vcmUgZGVsaWNhdGVseS4gIEV2ZW4gc3RpbGwsIHRo
ZSBsYXN0bGVmdCBhbmQgZmlyc3RyaWdodAorCQkJICogdHVwbGVzIHBhc3NlZCB0byBfYnRfdHJ1
bmNhdGUoKSBoZXJlIGFyZSBhdCBsZWFzdCBub3QgZnVsbHkKKwkJCSAqIGVxdWFsIHRvIGVhY2gg
b3RoZXIgd2hlbiBkZWR1cGxpY2F0aW9uIGlzIHVzZWQsIHVubGVzcyB0aGVyZSBpcworCQkJICog
YSBsYXJnZSBncm91cCBvZiBkdXBsaWNhdGVzIChhbHNvLCB1bmlxdWUgaW5kZXggYnVpbGRzIHVz
dWFsbHkKKwkJCSAqIGhhdmUgZmV3IG9yIG5vIHNwb29sMiBkdXBsaWNhdGVzKS4gIFdoZW4gdGhl
IHNwbGl0IHBvaW50IGlzCisJCQkgKiBiZXR3ZWVuIHR3byB1bmVxdWFsIHR1cGxlcywgX2J0X3Ry
dW5jYXRlKCkgd2lsbCBhdm9pZCBpbmNsdWRpbmcKKwkJCSAqIGEgaGVhcCBUSUQgaW4gdGhlIG5l
dyBoaWdoIGtleSwgd2hpY2ggaXMgdGhlIG1vc3QgaW1wb3J0YW50CisJCQkgKiBiZW5lZml0IG9m
IHN1ZmZpeCB0cnVuY2F0aW9uLgogCQkJICoKIAkJCSAqIE92ZXJ3cml0ZSB0aGUgb2xkIGl0ZW0g
d2l0aCBuZXcgdHJ1bmNhdGVkIGhpZ2gga2V5IGRpcmVjdGx5LgogCQkJICogb2l0dXAgaXMgYWxy
ZWFkeSBsb2NhdGVkIGF0IHRoZSBwaHlzaWNhbCBiZWdpbm5pbmcgb2YgdHVwbGUKQEAgLTk4Myw3
ICsxMDA3LDcgQEAgX2J0X2J1aWxkYWRkKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFBhZ2VTdGF0
ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCkKIAkJQXNzZXJ0KEJUcmVlVHVwbGVHZXROQXR0cyhz
dGF0ZS0+YnRwc19sb3drZXksIHdzdGF0ZS0+aW5kZXgpID09IDAgfHwKIAkJCSAgICFQX0xFRlRN
T1NUKChCVFBhZ2VPcGFxdWUpIFBhZ2VHZXRTcGVjaWFsUG9pbnRlcihvcGFnZSkpKTsKIAkJQlRy
ZWVUdXBsZVNldERvd25MaW5rKHN0YXRlLT5idHBzX2xvd2tleSwgb2Jsa25vKTsKLQkJX2J0X2J1
aWxkYWRkKHdzdGF0ZSwgc3RhdGUtPmJ0cHNfbmV4dCwgc3RhdGUtPmJ0cHNfbG93a2V5KTsKKwkJ
X2J0X2J1aWxkYWRkKHdzdGF0ZSwgc3RhdGUtPmJ0cHNfbmV4dCwgc3RhdGUtPmJ0cHNfbG93a2V5
LCAwKTsKIAkJcGZyZWUoc3RhdGUtPmJ0cHNfbG93a2V5KTsKIAogCQkvKgpAQCAtMTA0NSw2ICsx
MDY5LDQzIEBAIF9idF9idWlsZGFkZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRQYWdlU3RhdGUg
KnN0YXRlLCBJbmRleFR1cGxlIGl0dXApCiAJc3RhdGUtPmJ0cHNfbGFzdG9mZiA9IGxhc3Rfb2Zm
OwogfQogCisvKgorICogRmluYWxpemUgcGVuZGluZyBwb3N0aW5nIGxpc3QgdHVwbGUsIGFuZCBh
ZGQgaXQgdG8gdGhlIGluZGV4LiAgRmluYWwgdHVwbGUKKyAqIGlzIGJhc2VkIG9uIHNhdmVkIGJh
c2UgdHVwbGUsIGFuZCBzYXZlZCBsaXN0IG9mIGhlYXAgVElEcy4KKyAqCisgKiBUaGlzIGlzIGFs
bW9zdCBsaWtlIF9idF9kZWR1cF9maW5pc2hfcGVuZGluZygpLCBidXQgaXQgYWRkcyBhIG5ldyB0
dXBsZQorICogdXNpbmcgX2J0X2J1aWxkYWRkKCkuCisgKi8KK3N0YXRpYyB2b2lkCitfYnRfc29y
dF9kZWR1cF9maW5pc2hfcGVuZGluZyhCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRQYWdlU3RhdGUg
KnN0YXRlLAorCQkJCQkJCSAgQlREZWR1cFN0YXRlIGRzdGF0ZSkKK3sKKwlBc3NlcnQoZHN0YXRl
LT5uaXRlbXMgPiAwKTsKKworCWlmIChkc3RhdGUtPm5pdGVtcyA9PSAxKQorCQlfYnRfYnVpbGRh
ZGQod3N0YXRlLCBzdGF0ZSwgZHN0YXRlLT5iYXNlLCAwKTsKKwllbHNlCisJeworCQlJbmRleFR1
cGxlCXBvc3Rpbmd0dXBsZTsKKwkJU2l6ZQkJdHJ1bmNleHRyYTsKKworCQkvKiBmb3JtIGEgdHVw
bGUgd2l0aCBhIHBvc3RpbmcgbGlzdCAqLworCQlwb3N0aW5ndHVwbGUgPSBfYnRfZm9ybV9wb3N0
aW5nKGRzdGF0ZS0+YmFzZSwKKwkJCQkJCQkJCQlkc3RhdGUtPmh0aWRzLAorCQkJCQkJCQkJCWRz
dGF0ZS0+bmh0aWRzKTsKKwkJLyogQ2FsY3VsYXRlIHBvc3RpbmcgbGlzdCBvdmVyaGVhZCAqLwor
CQl0cnVuY2V4dHJhID0gSW5kZXhUdXBsZVNpemUocG9zdGluZ3R1cGxlKSAtCisJCQlCVHJlZVR1
cGxlR2V0UG9zdGluZ09mZnNldChwb3N0aW5ndHVwbGUpOworCisJCV9idF9idWlsZGFkZCh3c3Rh
dGUsIHN0YXRlLCBwb3N0aW5ndHVwbGUsIHRydW5jZXh0cmEpOworCQlwZnJlZShwb3N0aW5ndHVw
bGUpOworCX0KKworCWRzdGF0ZS0+bmh0aWRzID0gMDsKKwlkc3RhdGUtPm5pdGVtcyA9IDA7CisJ
ZHN0YXRlLT5waHlzdHVwc2l6ZSA9IDA7Cit9CisKIC8qCiAgKiBGaW5pc2ggd3JpdGluZyBvdXQg
dGhlIGNvbXBsZXRlZCBidHJlZS4KICAqLwpAQCAtMTA5MCw3ICsxMTUxLDcgQEAgX2J0X3VwcGVy
c2h1dGRvd24oQlRXcml0ZVN0YXRlICp3c3RhdGUsIEJUUGFnZVN0YXRlICpzdGF0ZSkKIAkJCUFz
c2VydChCVHJlZVR1cGxlR2V0TkF0dHMocy0+YnRwc19sb3drZXksIHdzdGF0ZS0+aW5kZXgpID09
IDAgfHwKIAkJCQkgICAhUF9MRUZUTU9TVChvcGFxdWUpKTsKIAkJCUJUcmVlVHVwbGVTZXREb3du
TGluayhzLT5idHBzX2xvd2tleSwgYmxrbm8pOwotCQkJX2J0X2J1aWxkYWRkKHdzdGF0ZSwgcy0+
YnRwc19uZXh0LCBzLT5idHBzX2xvd2tleSk7CisJCQlfYnRfYnVpbGRhZGQod3N0YXRlLCBzLT5i
dHBzX25leHQsIHMtPmJ0cHNfbG93a2V5LCAwKTsKIAkJCXBmcmVlKHMtPmJ0cHNfbG93a2V5KTsK
IAkJCXMtPmJ0cHNfbG93a2V5ID0gTlVMTDsKIAkJfQpAQCAtMTExMSw3ICsxMTcyLDggQEAgX2J0
X3VwcGVyc2h1dGRvd24oQlRXcml0ZVN0YXRlICp3c3RhdGUsIEJUUGFnZVN0YXRlICpzdGF0ZSkK
IAkgKiBieSBmaWxsaW5nIGluIGEgdmFsaWQgbWFnaWMgbnVtYmVyIGluIHRoZSBtZXRhcGFnZS4K
IAkgKi8KIAltZXRhcGFnZSA9IChQYWdlKSBwYWxsb2MoQkxDS1NaKTsKLQlfYnRfaW5pdG1ldGFw
YWdlKG1ldGFwYWdlLCByb290Ymxrbm8sIHJvb3RsZXZlbCk7CisJX2J0X2luaXRtZXRhcGFnZSht
ZXRhcGFnZSwgcm9vdGJsa25vLCByb290bGV2ZWwsCisJCQkJCSB3c3RhdGUtPmluc2tleS0+c2Fm
ZWRlZHVwKTsKIAlfYnRfYmx3cml0ZXBhZ2Uod3N0YXRlLCBtZXRhcGFnZSwgQlRSRUVfTUVUQVBB
R0UpOwogfQogCkBAIC0xMTMyLDYgKzExOTQsOSBAQCBfYnRfbG9hZChCVFdyaXRlU3RhdGUgKndz
dGF0ZSwgQlRTcG9vbCAqYnRzcG9vbCwgQlRTcG9vbCAqYnRzcG9vbDIpCiAJCQkJa2V5c3ogPSBJ
bmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZLZXlBdHRyaWJ1dGVzKHdzdGF0ZS0+aW5kZXgpOwogCVNv
cnRTdXBwb3J0IHNvcnRLZXlzOwogCWludDY0CQl0dXBsZXNfZG9uZSA9IDA7CisJYm9vbAkJZGVk
dXBsaWNhdGU7CisKKwlkZWR1cGxpY2F0ZSA9IHdzdGF0ZS0+aW5za2V5LT5zYWZlZGVkdXAgJiYg
QlRHZXRVc2VEZWR1cCh3c3RhdGUtPmluZGV4KTsKIAogCWlmIChtZXJnZSkKIAl7CkBAIC0xMjI4
LDEyICsxMjkzLDEyIEBAIF9idF9sb2FkKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFNwb29sICpi
dHNwb29sLCBCVFNwb29sICpidHNwb29sMikKIAogCQkJaWYgKGxvYWQxKQogCQkJewotCQkJCV9i
dF9idWlsZGFkZCh3c3RhdGUsIHN0YXRlLCBpdHVwKTsKKwkJCQlfYnRfYnVpbGRhZGQod3N0YXRl
LCBzdGF0ZSwgaXR1cCwgMCk7CiAJCQkJaXR1cCA9IHR1cGxlc29ydF9nZXRpbmRleHR1cGxlKGJ0
c3Bvb2wtPnNvcnRzdGF0ZSwgdHJ1ZSk7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJX2J0X2J1
aWxkYWRkKHdzdGF0ZSwgc3RhdGUsIGl0dXAyKTsKKwkJCQlfYnRfYnVpbGRhZGQod3N0YXRlLCBz
dGF0ZSwgaXR1cDIsIDApOwogCQkJCWl0dXAyID0gdHVwbGVzb3J0X2dldGluZGV4dHVwbGUoYnRz
cG9vbDItPnNvcnRzdGF0ZSwgdHJ1ZSk7CiAJCQl9CiAKQEAgLTEyNDMsOSArMTMwOCwxMDAgQEAg
X2J0X2xvYWQoQlRXcml0ZVN0YXRlICp3c3RhdGUsIEJUU3Bvb2wgKmJ0c3Bvb2wsIEJUU3Bvb2wg
KmJ0c3Bvb2wyKQogCQl9CiAJCXBmcmVlKHNvcnRLZXlzKTsKIAl9CisJZWxzZSBpZiAoZGVkdXBs
aWNhdGUpCisJeworCQkvKiBtZXJnZSBpcyB1bm5lY2Vzc2FyeSwgZGVkdXBsaWNhdGUgaW50byBw
b3N0aW5nIGxpc3RzICovCisJCUJURGVkdXBTdGF0ZSBkc3RhdGU7CisKKwkJZHN0YXRlID0gKEJU
RGVkdXBTdGF0ZSkgcGFsbG9jKHNpemVvZihCVERlZHVwU3RhdGVEYXRhKSk7CisJCWRzdGF0ZS0+
bWF4cG9zdGluZ3NpemUgPSAwOyAvKiBzZXQgbGF0ZXIgKi8KKwkJZHN0YXRlLT5jaGVja2luZ3Vu
aXF1ZSA9IGZhbHNlOyAvKiB1bnVzZWQgKi8KKwkJZHN0YXRlLT5za2lwcGVkYmFzZSA9IEludmFs
aWRPZmZzZXROdW1iZXI7CisJCS8qIE1ldGFkYXRhIGFib3V0IGJhc2UgdHVwbGUgb2YgY3VycmVu
dCBwZW5kaW5nIHBvc3RpbmcgbGlzdCAqLworCQlkc3RhdGUtPmJhc2UgPSBOVUxMOworCQlkc3Rh
dGUtPmJhc2VvZmYgPSBJbnZhbGlkT2Zmc2V0TnVtYmVyOwkvKiB1bnVzZWQgKi8KKwkJZHN0YXRl
LT5iYXNldHVwc2l6ZSA9IDA7CisJCS8qIE1ldGFkYXRhIGFib3V0IGN1cnJlbnQgcGVuZGluZyBw
b3N0aW5nIGxpc3QgVElEcyAqLworCQlkc3RhdGUtPmh0aWRzID0gTlVMTDsKKwkJZHN0YXRlLT5u
aHRpZHMgPSAwOworCQlkc3RhdGUtPm5pdGVtcyA9IDA7CisJCWRzdGF0ZS0+cGh5c3R1cHNpemUg
PSAwOwkvKiB1bnVzZWQgKi8KKworCQl3aGlsZSAoKGl0dXAgPSB0dXBsZXNvcnRfZ2V0aW5kZXh0
dXBsZShidHNwb29sLT5zb3J0c3RhdGUsCisJCQkJCQkJCQkJCSAgIHRydWUpKSAhPSBOVUxMKQor
CQl7CisJCQkvKiBXaGVuIHdlIHNlZSBmaXJzdCB0dXBsZSwgY3JlYXRlIGZpcnN0IGluZGV4IHBh
Z2UgKi8KKwkJCWlmIChzdGF0ZSA9PSBOVUxMKQorCQkJeworCQkJCXN0YXRlID0gX2J0X3BhZ2Vz
dGF0ZSh3c3RhdGUsIDApOworCisJCQkJLyoKKwkJCQkgKiBMaW1pdCBzaXplIG9mIHBvc3Rpbmcg
bGlzdCB0dXBsZXMgdG8gMS8xMCBzcGFjZSB3ZSB3YW50IHRvCisJCQkJICogbGVhdmUgYmVoaW5k
IG9uIHRoZSBwYWdlLCBwbHVzIHNwYWNlIGZvciBmaW5hbCBpdGVtJ3MgbGluZQorCQkJCSAqIHBv
aW50ZXIuICBUaGlzIGlzIGVxdWFsIHRvIHRoZSBzcGFjZSB0aGF0IHdlJ2QgbGlrZSB0bworCQkJ
CSAqIGxlYXZlIGJlaGluZCBvbiBlYWNoIGxlYWYgcGFnZSB3aGVuIGZpbGxmYWN0b3IgaXMgOTAs
CisJCQkJICogYWxsb3dpbmcgdXMgdG8gZ2V0IGNsb3NlIHRvIGZpbGxmYWN0b3IlIHNwYWNlIHV0
aWxpemF0aW9uCisJCQkJICogd2hlbiB0aGVyZSBoYXBwZW4gdG8gYmUgYSBncmVhdCBtYW55IGR1
cGxpY2F0ZXMuICAoVGhpcworCQkJCSAqIG1ha2VzIGhpZ2hlciBsZWFmIGZpbGxmYWN0b3Igc2V0
dGluZ3MgaW5lZmZlY3RpdmUgd2hlbgorCQkJCSAqIGJ1aWxkaW5nIGluZGV4ZXMgdGhhdCBoYXZl
IG1hbnkgZHVwbGljYXRlcywgYnV0IHBhY2tpbmcKKwkJCQkgKiBsZWFmIHBhZ2VzIGZ1bGwgd2l0
aCBmZXcgdmVyeSBsYXJnZSB0dXBsZXMgZG9lc24ndCBzZWVtCisJCQkJICogbGlrZSBhIHVzZWZ1
bCBnb2FsLikKKwkJCQkgKi8KKwkJCQlkc3RhdGUtPm1heHBvc3RpbmdzaXplID0gTUFYQUxJR05f
RE9XTigoQkxDS1NaICogMTAgLyAxMDApKSAtCisJCQkJCXNpemVvZihJdGVtSWREYXRhKTsKKwkJ
CQlBc3NlcnQoZHN0YXRlLT5tYXhwb3N0aW5nc2l6ZSA8PSBCVE1heEl0ZW1TaXplKHN0YXRlLT5i
dHBzX3BhZ2UpICYmCisJCQkJCSAgIGRzdGF0ZS0+bWF4cG9zdGluZ3NpemUgPD0gSU5ERVhfU0la
RV9NQVNLKTsKKwkJCQlkc3RhdGUtPmh0aWRzID0gcGFsbG9jKGRzdGF0ZS0+bWF4cG9zdGluZ3Np
emUpOworCisJCQkJLyogc3RhcnQgbmV3IHBlbmRpbmcgcG9zdGluZyBsaXN0IHdpdGggaXR1cCBj
b3B5ICovCisJCQkJX2J0X2RlZHVwX3N0YXJ0X3BlbmRpbmcoZHN0YXRlLCBDb3B5SW5kZXhUdXBs
ZShpdHVwKSwKKwkJCQkJCQkJCQlJbnZhbGlkT2Zmc2V0TnVtYmVyKTsKKwkJCX0KKwkJCWVsc2Ug
aWYgKF9idF9rZWVwX25hdHRzX2Zhc3Qod3N0YXRlLT5pbmRleCwgZHN0YXRlLT5iYXNlLAorCQkJ
CQkJCQkJCSBpdHVwKSA+IGtleXN6ICYmCisJCQkJCSBfYnRfZGVkdXBfc2F2ZV9odGlkKGRzdGF0
ZSwgaXR1cCkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBUdXBsZSBpcyBlcXVhbCB0byBiYXNlIHR1
cGxlIG9mIHBlbmRpbmcgcG9zdGluZyBsaXN0LiAgSGVhcAorCQkJCSAqIFRJRCBmcm9tIGl0dXAg
aGFzIGJlZW4gc2F2ZWQgaW4gc3RhdGUuCisJCQkJICovCisJCQl9CisJCQllbHNlCisJCQl7CisJ
CQkJLyoKKwkJCQkgKiBUdXBsZSBpcyBub3QgZXF1YWwgdG8gcGVuZGluZyBwb3N0aW5nIGxpc3Qg
dHVwbGUsIG9yCisJCQkJICogX2J0X2RlZHVwX3NhdmVfaHRpZCgpIG9wdGVkIHRvIG5vdCBtZXJn
ZSBjdXJyZW50IGl0ZW0gaW50bworCQkJCSAqIHBlbmRpbmcgcG9zdGluZyBsaXN0LgorCQkJCSAq
LworCQkJCV9idF9zb3J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKHdzdGF0ZSwgc3RhdGUsIGRzdGF0
ZSk7CisJCQkJcGZyZWUoZHN0YXRlLT5iYXNlKTsKKworCQkJCS8qIHN0YXJ0IG5ldyBwZW5kaW5n
IHBvc3RpbmcgbGlzdCB3aXRoIGl0dXAgY29weSAqLworCQkJCV9idF9kZWR1cF9zdGFydF9wZW5k
aW5nKGRzdGF0ZSwgQ29weUluZGV4VHVwbGUoaXR1cCksCisJCQkJCQkJCQkJSW52YWxpZE9mZnNl
dE51bWJlcik7CisJCQl9CisKKwkJCS8qIFJlcG9ydCBwcm9ncmVzcyAqLworCQkJcGdzdGF0X3By
b2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfVFVQTEVTX0RPTkUsCisJCQkJ
CQkJCQkJICsrdHVwbGVzX2RvbmUpOworCQl9CisKKwkJaWYgKHN0YXRlKQorCQl7CisJCQkvKgor
CQkJICogSGFuZGxlIHRoZSBsYXN0IGl0ZW0gKHRoZXJlIG11c3QgYmUgYSBsYXN0IGl0ZW0gd2hl
biB0aGUKKwkJCSAqIHR1cGxlc29ydCByZXR1cm5lZCBvbmUgb3IgbW9yZSB0dXBsZXMpCisJCQkg
Ki8KKwkJCV9idF9zb3J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKHdzdGF0ZSwgc3RhdGUsIGRzdGF0
ZSk7CisJCQlwZnJlZShkc3RhdGUtPmJhc2UpOworCQkJcGZyZWUoZHN0YXRlLT5odGlkcyk7CisJ
CX0KKworCQlwZnJlZShkc3RhdGUpOworCX0KIAllbHNlCiAJewotCQkvKiBtZXJnZSBpcyB1bm5l
Y2Vzc2FyeSAqLworCQkvKiBtZXJnaW5nIGFuZCBkZWR1cGxpY2F0aW9uIGFyZSBib3RoIHVubmVj
ZXNzYXJ5ICovCiAJCXdoaWxlICgoaXR1cCA9IHR1cGxlc29ydF9nZXRpbmRleHR1cGxlKGJ0c3Bv
b2wtPnNvcnRzdGF0ZSwKIAkJCQkJCQkJCQkJICAgdHJ1ZSkpICE9IE5VTEwpCiAJCXsKQEAgLTEy
NTMsNyArMTQwOSw3IEBAIF9idF9sb2FkKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFNwb29sICpi
dHNwb29sLCBCVFNwb29sICpidHNwb29sMikKIAkJCWlmIChzdGF0ZSA9PSBOVUxMKQogCQkJCXN0
YXRlID0gX2J0X3BhZ2VzdGF0ZSh3c3RhdGUsIDApOwogCi0JCQlfYnRfYnVpbGRhZGQod3N0YXRl
LCBzdGF0ZSwgaXR1cCk7CisJCQlfYnRfYnVpbGRhZGQod3N0YXRlLCBzdGF0ZSwgaXR1cCwgMCk7
CiAKIAkJCS8qIFJlcG9ydCBwcm9ncmVzcyAqLwogCQkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9w
YXJhbShQUk9HUkVTU19DUkVBVEVJRFhfVFVQTEVTX0RPTkUsCmRpZmYgLS1naXQgYS9zcmMvYmFj
a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNwbGl0bG9jLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0
cmVlL25idHNwbGl0bG9jLmMKaW5kZXggNzZjMmQ5NDVjOC4uOGJhMDU1YmU5ZSAxMDA2NDQKLS0t
IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzcGxpdGxvYy5jCisrKyBiL3NyYy9iYWNr
ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c3BsaXRsb2MuYwpAQCAtMTgzLDYgKzE4Myw5IEBAIF9idF9m
aW5kc3BsaXRsb2MoUmVsYXRpb24gcmVsLAogCXN0YXRlLm1pbmZpcnN0cmlnaHRzeiA9IFNJWkVf
TUFYOwogCXN0YXRlLm5ld2l0ZW1vZmYgPSBuZXdpdGVtb2ZmOwogCisJLyogbmV3aXRlbSBjYW5u
b3QgYmUgYSBwb3N0aW5nIGxpc3QgaXRlbSAqLworCUFzc2VydCghQlRyZWVUdXBsZUlzUG9zdGlu
ZyhuZXdpdGVtKSk7CisKIAkvKgogCSAqIG1heHNwbGl0cyBzaG91bGQgbmV2ZXIgZXhjZWVkIG1h
eG9mZiBiZWNhdXNlIHRoZXJlIHdpbGwgYmUgYXQgbW9zdCBhcwogCSAqIG1hbnkgY2FuZGlkYXRl
IHNwbGl0IHBvaW50cyBhcyB0aGVyZSBhcmUgcG9pbnRzIF9iZXR3ZWVuXyB0dXBsZXMsIG9uY2UK
QEAgLTQ1OSw2ICs0NjIsNyBAQCBfYnRfcmVjc3BsaXRsb2MoRmluZFNwbGl0RGF0YSAqc3RhdGUs
CiAJaW50MTYJCWxlZnRmcmVlLAogCQkJCXJpZ2h0ZnJlZTsKIAlTaXplCQlmaXJzdHJpZ2h0aXRl
bXN6OworCVNpemUJCXBvc3RpbmdzeiA9IDA7CiAJYm9vbAkJbmV3aXRlbWlzZmlyc3RvbnJpZ2h0
OwogCiAJLyogSXMgdGhlIG5ldyBpdGVtIGdvaW5nIHRvIGJlIHRoZSBmaXJzdCBpdGVtIG9uIHRo
ZSByaWdodCBwYWdlPyAqLwpAQCAtNDY4LDggKzQ3MiwzMCBAQCBfYnRfcmVjc3BsaXRsb2MoRmlu
ZFNwbGl0RGF0YSAqc3RhdGUsCiAJaWYgKG5ld2l0ZW1pc2ZpcnN0b25yaWdodCkKIAkJZmlyc3Ry
aWdodGl0ZW1zeiA9IHN0YXRlLT5uZXdpdGVtc3o7CiAJZWxzZQorCXsKIAkJZmlyc3RyaWdodGl0
ZW1zeiA9IGZpcnN0b2xkb25yaWdodHN6OwogCisJCS8qCisJCSAqIENhbGN1bGF0ZSBzdWZmaXgg
dHJ1bmNhdGlvbiBzcGFjZSBzYXZpbmcgd2hlbiBmaXJzdHJpZ2h0IGlzIGEKKwkJICogcG9zdGlu
ZyBsaXN0IHR1cGxlLCB0aG91Z2ggb25seSB3aGVuIHRoZSBmaXJzdHJpZ2h0IGlzIG92ZXIgNjQK
KwkJICogYnl0ZXMgaW5jbHVkaW5nIGxpbmUgcG9pbnRlciBvdmVyaGVhZCAoYXJiaXRyYXJ5KS4g
IFRoaXMgYXZvaWRzCisJCSAqIGFjY2Vzc2luZyB0aGUgdHVwbGUgaW4gY2FzZXMgd2hlcmUgaXRz
IHBvc3RpbmcgbGlzdCBtdXN0IGJlIHZlcnkKKwkJICogc21hbGwgKGlmIGZpcnN0cmlnaHQgaGFz
IG9uZSBhdCBhbGwpLgorCQkgKi8KKwkJaWYgKHN0YXRlLT5pc19sZWFmICYmIGZpcnN0cmlnaHRp
dGVtc3ogPiA2NCkKKwkJeworCQkJSXRlbUlkCQlpdGVtaWQ7CisJCQlJbmRleFR1cGxlCW5ld2hp
Z2hrZXk7CisKKwkJCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQoc3RhdGUtPnBhZ2UsIGZpcnN0b2xk
b25yaWdodCk7CisJCQluZXdoaWdoa2V5ID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHN0YXRl
LT5wYWdlLCBpdGVtaWQpOworCisJCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhuZXdoaWdoa2V5
KSkKKwkJCQlwb3N0aW5nc3ogPSBJbmRleFR1cGxlU2l6ZShuZXdoaWdoa2V5KSAtCisJCQkJCUJU
cmVlVHVwbGVHZXRQb3N0aW5nT2Zmc2V0KG5ld2hpZ2hrZXkpOworCQl9CisJfQorCiAJLyogQWNj
b3VudCBmb3IgYWxsIHRoZSBvbGQgdHVwbGVzICovCiAJbGVmdGZyZWUgPSBzdGF0ZS0+bGVmdHNw
YWNlIC0gb2xkZGF0YWl0ZW1zdG9sZWZ0OwogCXJpZ2h0ZnJlZSA9IHN0YXRlLT5yaWdodHNwYWNl
IC0KQEAgLTQ5MSwxMSArNTE3LDE3IEBAIF9idF9yZWNzcGxpdGxvYyhGaW5kU3BsaXREYXRhICpz
dGF0ZSwKIAkgKiBJZiB3ZSBhcmUgb24gdGhlIGxlYWYgbGV2ZWwsIGFzc3VtZSB0aGF0IHN1ZmZp
eCB0cnVuY2F0aW9uIGNhbm5vdCBhdm9pZAogCSAqIGFkZGluZyBhIGhlYXAgVElEIHRvIHRoZSBs
ZWZ0IGhhbGYncyBuZXcgaGlnaCBrZXkgd2hlbiBzcGxpdHRpbmcgYXQgdGhlCiAJICogbGVhZiBs
ZXZlbC4gIEluIHByYWN0aWNlIHRoZSBuZXcgaGlnaCBrZXkgd2lsbCBvZnRlbiBiZSBzbWFsbGVy
IGFuZAotCSAqIHdpbGwgcmFyZWx5IGJlIGxhcmdlciwgYnV0IGNvbnNlcnZhdGl2ZWx5IGFzc3Vt
ZSB0aGUgd29yc3QgY2FzZS4KKwkgKiB3aWxsIHJhcmVseSBiZSBsYXJnZXIsIGJ1dCBjb25zZXJ2
YXRpdmVseSBhc3N1bWUgdGhlIHdvcnN0IGNhc2UuICBXZSBkbworCSAqIGdvIHRvIHRoZSB0cm91
YmxlIG9mIHN1YnRyYWN0aW5nIGF3YXkgcG9zdGluZyBsaXN0IG92ZXJoZWFkLCB0aG91Z2gKKwkg
KiBvbmx5IHdoZW4gaXQgbG9va3MgbGlrZSBpdCB3aWxsIG1ha2UgYW4gYXBwcmVjaWFibGUgZGlm
ZmVyZW5jZS4KKwkgKiAoUG9zdGluZyBsaXN0cyBhcmUgdGhlIG9ubHkgY2FzZSB3aGVyZSB0cnVu
Y2F0aW9uIHdpbGwgdHlwaWNhbGx5IG1ha2UKKwkgKiB0aGUgZmluYWwgaGlnaCBrZXkgZmFyIHNt
YWxsZXIgdGhhbiBmaXJzdHJpZ2h0LCBzbyBiZWluZyBhIGJpdCBtb3JlCisJICogcHJlY2lzZSB0
aGVyZSBub3RpY2VhYmx5IGltcHJvdmVzIHRoZSBiYWxhbmNlIG9mIGZyZWUgc3BhY2UuKQogCSAq
LwogCWlmIChzdGF0ZS0+aXNfbGVhZikKIAkJbGVmdGZyZWUgLT0gKGludDE2KSAoZmlyc3RyaWdo
dGl0ZW1zeiArCi0JCQkJCQkJIE1BWEFMSUdOKHNpemVvZihJdGVtUG9pbnRlckRhdGEpKSk7CisJ
CQkJCQkJIE1BWEFMSUdOKHNpemVvZihJdGVtUG9pbnRlckRhdGEpKSAtCisJCQkJCQkJIHBvc3Rp
bmdzeik7CiAJZWxzZQogCQlsZWZ0ZnJlZSAtPSAoaW50MTYpIGZpcnN0cmlnaHRpdGVtc3o7CiAK
QEAgLTY5MSw3ICs3MjMsOCBAQCBfYnRfYWZ0ZXJuZXdpdGVtb2ZmKEZpbmRTcGxpdERhdGEgKnN0
YXRlLCBPZmZzZXROdW1iZXIgbWF4b2ZmLAogCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQoc3RhdGUt
PnBhZ2UsIE9mZnNldE51bWJlclByZXYoc3RhdGUtPm5ld2l0ZW1vZmYpKTsKIAl0dXAgPSAoSW5k
ZXhUdXBsZSkgUGFnZUdldEl0ZW0oc3RhdGUtPnBhZ2UsIGl0ZW1pZCk7CiAJLyogRG8gY2hlYXBl
ciB0ZXN0IGZpcnN0ICovCi0JaWYgKCFfYnRfYWRqYWNlbnRodGlkKCZ0dXAtPnRfdGlkLCAmc3Rh
dGUtPm5ld2l0ZW0tPnRfdGlkKSkKKwlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyh0dXApIHx8CisJ
CSFfYnRfYWRqYWNlbnRodGlkKCZ0dXAtPnRfdGlkLCAmc3RhdGUtPm5ld2l0ZW0tPnRfdGlkKSkK
IAkJcmV0dXJuIGZhbHNlOwogCS8qIENoZWNrIHNhbWUgY29uZGl0aW9ucyBhcyByaWdodG1vc3Qg
aXRlbSBjYXNlLCB0b28gKi8KIAlrZWVwbmF0dHMgPSBfYnRfa2VlcF9uYXR0c19mYXN0KHN0YXRl
LT5yZWwsIHR1cCwgc3RhdGUtPm5ld2l0ZW0pOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj
ZXNzL25idHJlZS9uYnR1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGls
cy5jCmluZGV4IDVhYjRlNzEyZjEuLjVlZDA5NjQwYWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k
L2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl
L25idHV0aWxzLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVlLmgi
CiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nh
bi5oIgorI2luY2x1ZGUgImNhdGFsb2cvY2F0YWxvZy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3By
b2dyZXNzLmgiCiAjaW5jbHVkZSAibGliL3F1bmlxdWUuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4u
aCIKQEAgLTEwNyw3ICsxMDgsMTMgQEAgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4
VHVwbGUgaXR1cCkKIAkgKi8KIAlrZXkgPSBwYWxsb2Mob2Zmc2V0b2YoQlRTY2FuSW5zZXJ0RGF0
YSwgc2NhbmtleXMpICsKIAkJCQkgc2l6ZW9mKFNjYW5LZXlEYXRhKSAqIGluZG5rZXlhdHRzKTsK
LQlrZXktPmhlYXBrZXlzcGFjZSA9IGl0dXAgPT0gTlVMTCB8fCBfYnRfaGVhcGtleXNwYWNlKHJl
bCk7CisJaWYgKGl0dXApCisJCV9idF9tZXRhdmVyc2lvbihyZWwsICZrZXktPmhlYXBrZXlzcGFj
ZSwgJmtleS0+c2FmZWRlZHVwKTsKKwllbHNlCisJeworCQlrZXktPmhlYXBrZXlzcGFjZSA9IHRy
dWU7CisJCWtleS0+c2FmZWRlZHVwID0gX2J0X29wY2xhc3Nlc19zdXBwb3J0X2RlZHVwKHJlbCk7
CisJfQogCWtleS0+YW55bnVsbGtleXMgPSBmYWxzZTsJLyogaW5pdGlhbCBhc3N1bXB0aW9uICov
CiAJa2V5LT5uZXh0a2V5ID0gZmFsc2U7CiAJa2V5LT5waXZvdHNlYXJjaCA9IGZhbHNlOwpAQCAt
MTM3Myw2ICsxMzgwLDcgQEAgX2J0X2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4
VHVwbGUgdHVwbGUsIGludCB0dXBuYXR0cywKIAkJCSAqIGF0dHJpYnV0ZSBwYXNzZXMgdGhlIHF1
YWwuCiAJCQkgKi8KIAkJCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpOworCQkJ
QXNzZXJ0KEJUcmVlVHVwbGVJc1Bpdm90KHR1cGxlKSk7CiAJCQljb250aW51ZTsKIAkJfQogCkBA
IC0xNTM0LDYgKzE1NDIsNyBAQCBfYnRfY2hlY2tfcm93Y29tcGFyZShTY2FuS2V5IHNrZXksIElu
ZGV4VHVwbGUgdHVwbGUsIGludCB0dXBuYXR0cywKIAkJCSAqIGF0dHJpYnV0ZSBwYXNzZXMgdGhl
IHF1YWwuCiAJCQkgKi8KIAkJCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpOwor
CQkJQXNzZXJ0KEJUcmVlVHVwbGVJc1Bpdm90KHR1cGxlKSk7CiAJCQljbXByZXN1bHQgPSAwOwog
CQkJaWYgKHN1YmtleS0+c2tfZmxhZ3MgJiBTS19ST1dfRU5EKQogCQkJCWJyZWFrOwpAQCAtMTc3
MywxMCArMTc4Miw2NSBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJewog
CQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CiAJCQlJbmRleFR1
cGxlCWl0dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOworCQkJYm9v
bAkJa2lsbHR1cGxlID0gZmFsc2U7CiAKLQkJCWlmIChJdGVtUG9pbnRlckVxdWFscygmaXR1cGxl
LT50X3RpZCwgJmtpdGVtLT5oZWFwVGlkKSkKKwkJCWlmIChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0
dXBsZSkpCiAJCQl7Ci0JCQkJLyogZm91bmQgdGhlIGl0ZW0gKi8KKwkJCQlpbnQJCQlwaSA9IGkg
KyAxOworCQkJCWludAkJCW5wb3N0aW5nID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXBsZSk7
CisJCQkJaW50CQkJajsKKworCQkJCS8qCisJCQkJICogTm90ZSB0aGF0IHdlIHJlbHkgb24gdGhl
IGFzc3VtcHRpb24gdGhhdCBoZWFwIFRJRHMgaW4gdGhlCisJCQkJICogc2NhbnBvcyBpdGVtcyBh
cnJheSBhcmUgYWx3YXlzIGluIGFzY2VuZGluZyBoZWFwIFRJRCBvcmRlcgorCQkJCSAqIHdpdGhp
biBhIHBvc3RpbmcgbGlzdAorCQkJCSAqLworCQkJCWZvciAoaiA9IDA7IGogPCBucG9zdGluZzsg
aisrKQorCQkJCXsKKwkJCQkJSXRlbVBvaW50ZXIgaXRlbSA9IEJUcmVlVHVwbGVHZXRQb3N0aW5n
TihpdHVwbGUsIGopOworCisJCQkJCWlmICghSXRlbVBvaW50ZXJFcXVhbHMoaXRlbSwgJmtpdGVt
LT5oZWFwVGlkKSkKKwkJCQkJCWJyZWFrOwkvKiBvdXQgb2YgcG9zdGluZyBsaXN0IGxvb3AgKi8K
KworCQkJCQkvKiBraXRlbSBtdXN0IGhhdmUgbWF0Y2hpbmcgb2ZmbnVtIHdoZW4gaGVhcCBUSURz
IG1hdGNoICovCisJCQkJCUFzc2VydChraXRlbS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtKTsKKwor
CQkJCQkvKgorCQkJCQkgKiBSZWFkLWFoZWFkIHRvIGxhdGVyIGtpdGVtcyBoZXJlLgorCQkJCQkg
KgorCQkJCQkgKiBXZSByZWx5IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgbm90IGFkdmFuY2luZyBr
aXRlbSBoZXJlCisJCQkJCSAqIHdpbGwgcHJldmVudCB1cyBmcm9tIGNvbnNpZGVyaW5nIHRoZSBw
b3N0aW5nIGxpc3QgdHVwbGUKKwkJCQkJICogZnVsbHkgZGVhZCBieSBub3QgbWF0Y2hpbmcgaXRz
IG5leHQgaGVhcCBUSUQgaW4gbmV4dAorCQkJCQkgKiBsb29wIGl0ZXJhdGlvbi4KKwkJCQkJICoK
KwkJCQkJICogSWYsIG9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIGlzIHRoZSBmaW5hbCBoZWFwIFRJ
RCBpbgorCQkJCQkgKiB0aGUgcG9zdGluZyBsaXN0IHR1cGxlLCB0aGVuIHR1cGxlIGdldHMga2ls
bGVkCisJCQkJCSAqIHJlZ2FyZGxlc3MgKGkuZS4gd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRo
ZSBsYXN0CisJCQkJCSAqIGtpdGVtIGlzIGFsc28gdGhlIGxhc3QgaGVhcCBUSUQgaW4gdGhlIGxh
c3QgaW5kZXggdHVwbGUKKwkJCQkJICogY29ycmVjdGx5IC0tIHBvc3RpbmcgdHVwbGUgc3RpbGwg
Z2V0cyBraWxsZWQpLgorCQkJCQkgKi8KKwkJCQkJaWYgKHBpIDwgbnVtS2lsbGVkKQorCQkJCQkJ
a2l0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmtpbGxlZEl0ZW1zW3BpKytdXTsKKwkJCQl9
CisKKwkJCQkvKgorCQkJCSAqIERvbid0IGJvdGhlciBhZHZhbmNpbmcgdGhlIG91dGVybW9zdCBs
b29wJ3MgaW50IGl0ZXJhdG9yIHRvCisJCQkJICogYXZvaWQgcHJvY2Vzc2luZyBraWxsZWQgaXRl
bXMgdGhhdCByZWxhdGUgdG8gdGhlIHNhbWUKKwkJCQkgKiBvZmZudW0vcG9zdGluZyBsaXN0IHR1
cGxlLiAgVGhpcyBtaWNyby1vcHRpbWl6YXRpb24gaGFyZGx5CisJCQkJICogc2VlbXMgd29ydGgg
aXQuICAoRnVydGhlciBpdGVyYXRpb25zIG9mIHRoZSBvdXRlcm1vc3QgbG9vcAorCQkJCSAqIHdp
bGwgZmFpbCB0byBtYXRjaCBvbiB0aGlzIHNhbWUgcG9zdGluZyBsaXN0J3MgZmlyc3QgaGVhcAor
CQkJCSAqIFRJRCBpbnN0ZWFkLCBzbyB3ZSdsbCBhZHZhbmNlIHRvIHRoZSBuZXh0IG9mZm51bS9p
bmRleAorCQkJCSAqIHR1cGxlIHByZXR0eSBxdWlja2x5LikKKwkJCQkgKi8KKwkJCQlpZiAoaiA9
PSBucG9zdGluZykKKwkJCQkJa2lsbHR1cGxlID0gdHJ1ZTsKKwkJCX0KKwkJCWVsc2UgaWYgKEl0
ZW1Qb2ludGVyRXF1YWxzKCZpdHVwbGUtPnRfdGlkLCAma2l0ZW0tPmhlYXBUaWQpKQorCQkJCWtp
bGx0dXBsZSA9IHRydWU7CisKKwkJCWlmIChraWxsdHVwbGUpCisJCQl7CisJCQkJLyogZm91bmQg
dGhlIGl0ZW0vYWxsIHBvc3RpbmcgbGlzdCBpdGVtcyAqLwogCQkJCUl0ZW1JZE1hcmtEZWFkKGlp
ZCk7CiAJCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKIAkJCQlicmVhazsJCQkvKiBvdXQgb2Yg
aW5uZXIgc2VhcmNoIGxvb3AgKi8KQEAgLTIwMTcsNyArMjA4MSw5IEBAIGJ0b3B0aW9ucyhEYXR1
bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlKQogCXN0YXRpYyBjb25zdCByZWxvcHRfcGFyc2Vf
ZWx0IHRhYltdID0gewogCQl7ImZpbGxmYWN0b3IiLCBSRUxPUFRfVFlQRV9JTlQsIG9mZnNldG9m
KEJUT3B0aW9ucywgZmlsbGZhY3Rvcil9LAogCQl7InZhY3V1bV9jbGVhbnVwX2luZGV4X3NjYWxl
X2ZhY3RvciIsIFJFTE9QVF9UWVBFX1JFQUwsCi0JCW9mZnNldG9mKEJUT3B0aW9ucywgdmFjdXVt
X2NsZWFudXBfaW5kZXhfc2NhbGVfZmFjdG9yKX0KKwkJb2Zmc2V0b2YoQlRPcHRpb25zLCB2YWN1
dW1fY2xlYW51cF9pbmRleF9zY2FsZV9mYWN0b3IpfSwKKwkJeyJkZWR1cGxpY2F0ZV9pdGVtcyIs
IFJFTE9QVF9UWVBFX0JPT0wsCisJCW9mZnNldG9mKEJUT3B0aW9ucywgZGVkdXBsaWNhdGVfaXRl
bXMpfQogCiAJfTsKIApAQCAtMjExOCwxMSArMjE4NCwxMCBAQCBfYnRfdHJ1bmNhdGUoUmVsYXRp
b24gcmVsLCBJbmRleFR1cGxlIGxhc3RsZWZ0LCBJbmRleFR1cGxlIGZpcnN0cmlnaHQsCiAJU2l6
ZQkJbmV3c2l6ZTsKIAogCS8qCi0JICogV2Ugc2hvdWxkIG9ubHkgZXZlciB0cnVuY2F0ZSBsZWFm
IGluZGV4IHR1cGxlcy4gIEl0J3MgbmV2ZXIgb2theSB0bwotCSAqIHRydW5jYXRlIGEgc2Vjb25k
IHRpbWUuCisJICogV2Ugc2hvdWxkIG9ubHkgZXZlciB0cnVuY2F0ZSBub24tcGl2b3QgdHVwbGVz
IGZyb20gbGVhZiBwYWdlcy4gIEl0J3MKKwkgKiBuZXZlciBva2F5IHRvIHRydW5jYXRlIHdoZW4g
c3BsaXR0aW5nIGFuIGludGVybmFsIHBhZ2UuCiAJICovCi0JQXNzZXJ0KEJUcmVlVHVwbGVHZXRO
QXR0cyhsYXN0bGVmdCwgcmVsKSA9PSBuYXR0cyk7Ci0JQXNzZXJ0KEJUcmVlVHVwbGVHZXROQXR0
cyhmaXJzdHJpZ2h0LCByZWwpID09IG5hdHRzKTsKKwlBc3NlcnQoIUJUcmVlVHVwbGVJc1Bpdm90
KGxhc3RsZWZ0KSAmJiAhQlRyZWVUdXBsZUlzUGl2b3QoZmlyc3RyaWdodCkpOwogCiAJLyogRGV0
ZXJtaW5lIGhvdyBtYW55IGF0dHJpYnV0ZXMgbXVzdCBiZSBrZXB0IGluIHRydW5jYXRlZCB0dXBs
ZSAqLwogCWtlZXBuYXR0cyA9IF9idF9rZWVwX25hdHRzKHJlbCwgbGFzdGxlZnQsIGZpcnN0cmln
aHQsIGl0dXBfa2V5KTsKQEAgLTIxMzgsNiArMjIwMywxOSBAQCBfYnRfdHJ1bmNhdGUoUmVsYXRp
b24gcmVsLCBJbmRleFR1cGxlIGxhc3RsZWZ0LCBJbmRleFR1cGxlIGZpcnN0cmlnaHQsCiAKIAkJ
cGl2b3QgPSBpbmRleF90cnVuY2F0ZV90dXBsZShpdHVwZGVzYywgZmlyc3RyaWdodCwga2VlcG5h
dHRzKTsKIAorCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhwaXZvdCkpCisJCXsKKwkJCS8qCisJ
CQkgKiBpbmRleF90cnVuY2F0ZV90dXBsZSgpIGp1c3QgcmV0dXJucyBhIHN0cmFpZ2h0IGNvcHkg
b2YKKwkJCSAqIGZpcnN0cmlnaHQgd2hlbiBpdCBoYXMgbm8ga2V5IGF0dHJpYnV0ZXMgdG8gdHJ1
bmNhdGUuICBXZSBuZWVkCisJCQkgKiB0byB0cnVuY2F0ZSBhd2F5IHRoZSBwb3N0aW5nIGxpc3Qg
b3Vyc2VsdmVzLgorCQkJICovCisJCQlBc3NlcnQoa2VlcG5hdHRzID09IG5rZXlhdHRzKTsKKwkJ
CUFzc2VydChuYXR0cyA9PSBua2V5YXR0cyk7CisJCQlwaXZvdC0+dF9pbmZvICY9IH5JTkRFWF9T
SVpFX01BU0s7CisJCQlwaXZvdC0+dF9pbmZvIHw9IE1BWEFMSUdOKEJUcmVlVHVwbGVHZXRQb3N0
aW5nT2Zmc2V0KGZpcnN0cmlnaHQpKTsKKwkJfQorCiAJCS8qCiAJCSAqIElmIHRoZXJlIGlzIGEg
ZGlzdGluZ3Vpc2hpbmcga2V5IGF0dHJpYnV0ZSB3aXRoaW4gbmV3IHBpdm90IHR1cGxlLAogCQkg
KiB0aGVyZSBpcyBubyBuZWVkIHRvIGFkZCBhbiBleHBsaWNpdCBoZWFwIFRJRCBhdHRyaWJ1dGUK
QEAgLTIxNTQsNiArMjIzMiw4IEBAIF9idF90cnVuY2F0ZShSZWxhdGlvbiByZWwsIEluZGV4VHVw
bGUgbGFzdGxlZnQsIEluZGV4VHVwbGUgZmlyc3RyaWdodCwKIAkJICogYXR0cmlidXRlIHRvIHRo
ZSBuZXcgcGl2b3QgdHVwbGUuCiAJCSAqLwogCQlBc3NlcnQobmF0dHMgIT0gbmtleWF0dHMpOwor
CQlBc3NlcnQoIUJUcmVlVHVwbGVJc1Bvc3RpbmcobGFzdGxlZnQpICYmCisJCQkgICAhQlRyZWVU
dXBsZUlzUG9zdGluZyhmaXJzdHJpZ2h0KSk7CiAJCW5ld3NpemUgPSBJbmRleFR1cGxlU2l6ZShw
aXZvdCkgKyBNQVhBTElHTihzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSk7CiAJCXRpZHBpdm90ID0g
cGFsbG9jMChuZXdzaXplKTsKIAkJbWVtY3B5KHRpZHBpdm90LCBwaXZvdCwgSW5kZXhUdXBsZVNp
emUocGl2b3QpKTsKQEAgLTIxNzEsNiArMjI1MSwxOSBAQCBfYnRfdHJ1bmNhdGUoUmVsYXRpb24g
cmVsLCBJbmRleFR1cGxlIGxhc3RsZWZ0LCBJbmRleFR1cGxlIGZpcnN0cmlnaHQsCiAJCW5ld3Np
emUgPSBJbmRleFR1cGxlU2l6ZShmaXJzdHJpZ2h0KSArIE1BWEFMSUdOKHNpemVvZihJdGVtUG9p
bnRlckRhdGEpKTsKIAkJcGl2b3QgPSBwYWxsb2MwKG5ld3NpemUpOwogCQltZW1jcHkocGl2b3Qs
IGZpcnN0cmlnaHQsIEluZGV4VHVwbGVTaXplKGZpcnN0cmlnaHQpKTsKKworCQlpZiAoQlRyZWVU
dXBsZUlzUG9zdGluZyhmaXJzdHJpZ2h0KSkKKwkJeworCQkJLyoKKwkJCSAqIE5ldyBwaXZvdCB0
dXBsZSB3YXMgY29waWVkIGZyb20gZmlyc3RyaWdodCwgd2hpY2ggaGFwcGVucyB0byBiZQorCQkJ
ICogYSBwb3N0aW5nIGxpc3QgdHVwbGUuICBXZSB3aWxsIGhhdmUgdG8gaW5jbHVkZSB0aGUgbWF4
IGxhc3RsZWZ0CisJCQkgKiBoZWFwIFRJRCBpbiB0aGUgZmluYWwgcGl2b3QgdHVwbGUsIGJ1dCB3
ZSBjYW4gcmVtb3ZlIHRoZQorCQkJICogcG9zdGluZyBsaXN0IG5vdy4gKFBpdm90IHR1cGxlcyBz
aG91bGQgbmV2ZXIgY29udGFpbiBhIHBvc3RpbmcKKwkJCSAqIGxpc3QuKQorCQkJICovCisJCQlu
ZXdzaXplID0gTUFYQUxJR04oQlRyZWVUdXBsZUdldFBvc3RpbmdPZmZzZXQoZmlyc3RyaWdodCkp
ICsKKwkJCQlNQVhBTElHTihzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSk7CisJCX0KIAl9CiAKIAkv
KgpAQCAtMjE5OCw3ICsyMjkxLDcgQEAgX2J0X3RydW5jYXRlKFJlbGF0aW9uIHJlbCwgSW5kZXhU
dXBsZSBsYXN0bGVmdCwgSW5kZXhUdXBsZSBmaXJzdHJpZ2h0LAogCSAqLwogCXBpdm90aGVhcHRp
ZCA9IChJdGVtUG9pbnRlcikgKChjaGFyICopIHBpdm90ICsgbmV3c2l6ZSAtCiAJCQkJCQkJCSAg
c2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSkpOwotCUl0ZW1Qb2ludGVyQ29weSgmbGFzdGxlZnQtPnRf
dGlkLCBwaXZvdGhlYXB0aWQpOworCUl0ZW1Qb2ludGVyQ29weShCVHJlZVR1cGxlR2V0TWF4SGVh
cFRJRChsYXN0bGVmdCksIHBpdm90aGVhcHRpZCk7CiAKIAkvKgogCSAqIExlaG1hbiBhbmQgWWFv
IHJlcXVpcmUgdGhhdCB0aGUgZG93bmxpbmsgdG8gdGhlIHJpZ2h0IHBhZ2UsIHdoaWNoIGlzIHRv
CkBAIC0yMjA5LDkgKzIzMDIsMTIgQEAgX2J0X3RydW5jYXRlKFJlbGF0aW9uIHJlbCwgSW5kZXhU
dXBsZSBsYXN0bGVmdCwgSW5kZXhUdXBsZSBmaXJzdHJpZ2h0LAogCSAqIHRpZWJyZWFrZXIuCiAJ
ICovCiAjaWZuZGVmIERFQlVHX05PX1RSVU5DQVRFCi0JQXNzZXJ0KEl0ZW1Qb2ludGVyQ29tcGFy
ZSgmbGFzdGxlZnQtPnRfdGlkLCAmZmlyc3RyaWdodC0+dF90aWQpIDwgMCk7Ci0JQXNzZXJ0KEl0
ZW1Qb2ludGVyQ29tcGFyZShwaXZvdGhlYXB0aWQsICZsYXN0bGVmdC0+dF90aWQpID49IDApOwot
CUFzc2VydChJdGVtUG9pbnRlckNvbXBhcmUocGl2b3RoZWFwdGlkLCAmZmlyc3RyaWdodC0+dF90
aWQpIDwgMCk7CisJQXNzZXJ0KEl0ZW1Qb2ludGVyQ29tcGFyZShCVHJlZVR1cGxlR2V0TWF4SGVh
cFRJRChsYXN0bGVmdCksCisJCQkJCQkJICBCVHJlZVR1cGxlR2V0SGVhcFRJRChmaXJzdHJpZ2h0
KSkgPCAwKTsKKwlBc3NlcnQoSXRlbVBvaW50ZXJDb21wYXJlKHBpdm90aGVhcHRpZCwKKwkJCQkJ
CQkgIEJUcmVlVHVwbGVHZXRIZWFwVElEKGxhc3RsZWZ0KSkgPj0gMCk7CisJQXNzZXJ0KEl0ZW1Q
b2ludGVyQ29tcGFyZShwaXZvdGhlYXB0aWQsCisJCQkJCQkJICBCVHJlZVR1cGxlR2V0SGVhcFRJ
RChmaXJzdHJpZ2h0KSkgPCAwKTsKICNlbHNlCiAKIAkvKgpAQCAtMjIyNCw3ICsyMzIwLDcgQEAg
X2J0X3RydW5jYXRlKFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBsYXN0bGVmdCwgSW5kZXhUdXBs
ZSBmaXJzdHJpZ2h0LAogCSAqIGF0dHJpYnV0ZSB2YWx1ZXMgYWxvbmcgd2l0aCBsYXN0bGVmdCdz
IGhlYXAgVElEIHZhbHVlIHdoZW4gbGFzdGxlZnQncwogCSAqIFRJRCBoYXBwZW5zIHRvIGJlIGdy
ZWF0ZXIgdGhhbiBmaXJzdHJpZ2h0J3MgVElELgogCSAqLwotCUl0ZW1Qb2ludGVyQ29weSgmZmly
c3RyaWdodC0+dF90aWQsIHBpdm90aGVhcHRpZCk7CisJSXRlbVBvaW50ZXJDb3B5KEJUcmVlVHVw
bGVHZXRIZWFwVElEKGZpcnN0cmlnaHQpLCBwaXZvdGhlYXB0aWQpOwogCiAJLyoKIAkgKiBQaXZv
dCBoZWFwIFRJRCBzaG91bGQgbmV2ZXIgYmUgZnVsbHkgZXF1YWwgdG8gZmlyc3RyaWdodC4gIE5v
dGUgdGhhdApAQCAtMjIzMyw3ICsyMzI5LDggQEAgX2J0X3RydW5jYXRlKFJlbGF0aW9uIHJlbCwg
SW5kZXhUdXBsZSBsYXN0bGVmdCwgSW5kZXhUdXBsZSBmaXJzdHJpZ2h0LAogCSAqLwogCUl0ZW1Q
b2ludGVyU2V0T2Zmc2V0TnVtYmVyKHBpdm90aGVhcHRpZCwKIAkJCQkJCQkgICBPZmZzZXROdW1i
ZXJQcmV2KEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKHBpdm90aGVhcHRpZCkpKTsKLQlBc3Nl
cnQoSXRlbVBvaW50ZXJDb21wYXJlKHBpdm90aGVhcHRpZCwgJmZpcnN0cmlnaHQtPnRfdGlkKSA8
IDApOworCUFzc2VydChJdGVtUG9pbnRlckNvbXBhcmUocGl2b3RoZWFwdGlkLAorCQkJCQkJCSAg
QlRyZWVUdXBsZUdldEhlYXBUSUQoZmlyc3RyaWdodCkpIDwgMCk7CiAjZW5kaWYKIAogCUJUcmVl
VHVwbGVTZXROQXR0cyhwaXZvdCwgbmtleWF0dHMpOwpAQCAtMjMxNCwxMyArMjQxMSwxNiBAQCBf
YnRfa2VlcF9uYXR0cyhSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgbGFzdGxlZnQsIEluZGV4VHVw
bGUgZmlyc3RyaWdodCwKICAqIFRoZSBhcHByb2FjaCB0YWtlbiBoZXJlIHVzdWFsbHkgcHJvdmlk
ZXMgdGhlIHNhbWUgYW5zd2VyIGFzIF9idF9rZWVwX25hdHRzCiAgKiB3aWxsIChmb3IgdGhlIHNh
bWUgcGFpciBvZiB0dXBsZXMgZnJvbSBhIGhlYXBrZXlzcGFjZSBpbmRleCksIHNpbmNlIHRoZQog
ICogbWFqb3JpdHkgb2YgYnRyZWUgb3BjbGFzc2VzIGNhbiBuZXZlciBpbmRpY2F0ZSB0aGF0IHR3
byBkYXR1bXMgYXJlIGVxdWFsCi0gKiB1bmxlc3MgdGhleSdyZSBiaXR3aXNlIGVxdWFsIGFmdGVy
IGRldG9hc3RpbmcuCisgKiB1bmxlc3MgdGhleSdyZSBiaXR3aXNlIGVxdWFsIGFmdGVyIGRldG9h
c3RpbmcuICBXaGVuIGFuIGluZGV4IGlzIGNvbnNpZGVyZWQKKyAqIGRlZHVwbGljYXRpb24tc2Fm
ZSBieSBfYnRfb3BjbGFzc2VzX3N1cHBvcnRfZGVkdXAsIHJvdXRpbmUgaXMgZ3VhcmFudGVlZCB0
bworICogZ2l2ZSB0aGUgc2FtZSByZXN1bHQgYXMgX2J0X2tlZXBfbmF0dHMgd291bGQuCiAgKgot
ICogVGhlc2UgaXNzdWVzIG11c3QgYmUgYWNjZXB0YWJsZSB0byBjYWxsZXJzLCB0eXBpY2FsbHkg
YmVjYXVzZSB0aGV5J3JlIG9ubHkKLSAqIGNvbmNlcm5lZCBhYm91dCBtYWtpbmcgc3VmZml4IHRy
dW5jYXRpb24gYXMgZWZmZWN0aXZlIGFzIHBvc3NpYmxlIHdpdGhvdXQKLSAqIGxlYXZpbmcgZXhj
ZXNzaXZlIGFtb3VudHMgb2YgZnJlZSBzcGFjZSBvbiBlaXRoZXIgc2lkZSBvZiBwYWdlIHNwbGl0
LgogICogQ2FsbGVycyBjYW4gcmVseSBvbiB0aGUgZmFjdCB0aGF0IGF0dHJpYnV0ZXMgY29uc2lk
ZXJlZCBlcXVhbCBoZXJlIGFyZQotICogZGVmaW5pdGVseSBhbHNvIGVxdWFsIGFjY29yZGluZyB0
byBfYnRfa2VlcF9uYXR0cy4KKyAqIGRlZmluaXRlbHkgYWxzbyBlcXVhbCBhY2NvcmRpbmcgdG8g
X2J0X2tlZXBfbmF0dHMsIGV2ZW4gd2hlbiB0aGUgaW5kZXggdXNlcworICogYW4gb3BjbGFzcyBv
ciBjb2xsYXRpb24gdGhhdCBpcyBub3QgZGVkdXBsaWNhdGlvbi1zYWZlLiAgVGhpcyB3ZWFrZXIK
KyAqIGd1YXJhbnRlZSBpcyBnb29kIGVub3VnaCBmb3IgbmJ0c3BsaXRsb2MuYyBjYWxsZXIsIHNp
bmNlIGZhbHNlIG5lZ2F0aXZlcworICogZ2VuZXJhbGx5IG9ubHkgaGF2ZSB0aGUgZWZmZWN0IG9m
IG1ha2luZyBsZWFmIHBhZ2Ugc3BsaXRzIHVzZSBhIG1vcmUKKyAqIGJhbGFuY2VkIHNwbGl0IHBv
aW50LgogICovCiBpbnQKIF9idF9rZWVwX25hdHRzX2Zhc3QoUmVsYXRpb24gcmVsLCBJbmRleFR1
cGxlIGxhc3RsZWZ0LCBJbmRleFR1cGxlIGZpcnN0cmlnaHQpCkBAIC0yMzkyLDI4ICsyNDkyLDQy
IEBAIF9idF9jaGVja19uYXR0cyhSZWxhdGlvbiByZWwsIGJvb2wgaGVhcGtleXNwYWNlLCBQYWdl
IHBhZ2UsIE9mZnNldE51bWJlciBvZmZudW0pCiAJICogTWFzayBhbGxvY2F0ZWQgZm9yIG51bWJl
ciBvZiBrZXlzIGluIGluZGV4IHR1cGxlIG11c3QgYmUgYWJsZSB0byBmaXQKIAkgKiBtYXhpbXVt
IHBvc3NpYmxlIG51bWJlciBvZiBpbmRleCBhdHRyaWJ1dGVzCiAJICovCi0JU3RhdGljQXNzZXJ0
U3RtdChCVF9OX0tFWVNfT0ZGU0VUX01BU0sgPj0gSU5ERVhfTUFYX0tFWVMsCi0JCQkJCSAiQlRf
Tl9LRVlTX09GRlNFVF9NQVNLIGNhbid0IGZpdCBJTkRFWF9NQVhfS0VZUyIpOworCVN0YXRpY0Fz
c2VydFN0bXQoQlRfT0ZGU0VUX01BU0sgPj0gSU5ERVhfTUFYX0tFWVMsCisJCQkJCSAiQlRfT0ZG
U0VUX01BU0sgY2FuJ3QgZml0IElOREVYX01BWF9LRVlTIik7CiAKIAlpdHVwID0gKEluZGV4VHVw
bGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKSk7CiAJdHVw
bmF0dHMgPSBCVHJlZVR1cGxlR2V0TkF0dHMoaXR1cCwgcmVsKTsKIAorCS8qICFoZWFwa2V5c3Bh
Y2UgaW5kZXhlcyBkbyBub3Qgc3VwcG9ydCBkZWR1cGxpY2F0aW9uICovCisJaWYgKCFoZWFwa2V5
c3BhY2UgJiYgQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkKKwkJcmV0dXJuIGZhbHNlOworCisJ
LyogUG9zdGluZyBsaXN0IHR1cGxlcyBzaG91bGQgbmV2ZXIgaGF2ZSAicGl2b3QgaGVhcCBUSUQi
IGJpdCBzZXQgKi8KKwlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSAmJgorCQkoSXRlbVBv
aW50ZXJHZXRPZmZzZXROdW1iZXJOb0NoZWNrKCZpdHVwLT50X3RpZCkgJgorCQkgQlRfUElWT1Rf
SEVBUF9USURfQVRUUikgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogSU5DTFVERSBpbmRl
eGVzIGRvIG5vdCBzdXBwb3J0IGRlZHVwbGljYXRpb24gKi8KKwlpZiAobmF0dHMgIT0gbmtleWF0
dHMgJiYgQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkKKwkJcmV0dXJuIGZhbHNlOworCiAJaWYg
KFBfSVNMRUFGKG9wYXF1ZSkpCiAJewogCQlpZiAob2ZmbnVtID49IFBfRklSU1REQVRBS0VZKG9w
YXF1ZSkpCiAJCXsKIAkJCS8qCi0JCQkgKiBOb24tcGl2b3QgdHVwbGVzIGN1cnJlbnRseSBuZXZl
ciB1c2UgYWx0ZXJuYXRpdmUgaGVhcCBUSUQKLQkJCSAqIHJlcHJlc2VudGF0aW9uIC0tIGV2ZW4g
dGhvc2Ugd2l0aGluIGhlYXBrZXlzcGFjZSBpbmRleGVzCisJCQkgKiBOb24tcGl2b3QgdHVwbGUg
c2hvdWxkIG5ldmVyIGJlIGV4cGxpY2l0bHkgbWFya2VkIGFzIGEgcGl2b3QKKwkJCSAqIHR1cGxl
CiAJCQkgKi8KLQkJCWlmICgoaXR1cC0+dF9pbmZvICYgSU5ERVhfQUxUX1RJRF9NQVNLKSAhPSAw
KQorCQkJaWYgKEJUcmVlVHVwbGVJc1Bpdm90KGl0dXApKQogCQkJCXJldHVybiBmYWxzZTsKIAog
CQkJLyoKIAkJCSAqIExlYWYgdHVwbGVzIHRoYXQgYXJlIG5vdCB0aGUgcGFnZSBoaWdoIGtleSAo
bm9uLXBpdm90IHR1cGxlcykKIAkJCSAqIHNob3VsZCBuZXZlciBiZSB0cnVuY2F0ZWQuICAoTm90
ZSB0aGF0IHR1cG5hdHRzIG11c3QgaGF2ZSBiZWVuCi0JCQkgKiBpbmZlcnJlZCwgcmF0aGVyIHRo
YW4gY29taW5nIGZyb20gYW4gZXhwbGljaXQgb24tZGlzawotCQkJICogcmVwcmVzZW50YXRpb24u
KQorCQkJICogaW5mZXJyZWQsIGV2ZW4gd2l0aCBhIHBvc3RpbmcgbGlzdCB0dXBsZSwgYmVjYXVz
ZSBvbmx5IHBpdm90CisJCQkgKiB0dXBsZXMgc3RvcmUgdHVwbmF0dHMgZGlyZWN0bHkuKQogCQkJ
ICovCiAJCQlyZXR1cm4gdHVwbmF0dHMgPT0gbmF0dHM7CiAJCX0KQEAgLTI0NTcsMTIgKzI1NzEs
MTIgQEAgX2J0X2NoZWNrX25hdHRzKFJlbGF0aW9uIHJlbCwgYm9vbCBoZWFwa2V5c3BhY2UsIFBh
Z2UgcGFnZSwgT2Zmc2V0TnVtYmVyIG9mZm51bSkKIAkJCSAqIG5vbi16ZXJvLCBvciB3aGVuIHRo
ZXJlIGlzIG5vIGV4cGxpY2l0IHJlcHJlc2VudGF0aW9uIGFuZCB0aGUKIAkJCSAqIHR1cGxlIGlz
IGV2aWRlbnRseSBub3QgYSBwcmUtcGdfdXBncmFkZSB0dXBsZS4KIAkJCSAqCi0JCQkgKiBQcmlv
ciB0byB2MTEsIGRvd25saW5rcyBhbHdheXMgaGFkIFBfSElLRVkgYXMgdGhlaXIgb2Zmc2V0LiBV
c2UKLQkJCSAqIHRoYXQgdG8gZGVjaWRlIGlmIHRoZSB0dXBsZSBpcyBhIHByZS12MTEgdHVwbGUu
CisJCQkgKiBQcmlvciB0byB2MTEsIGRvd25saW5rcyBhbHdheXMgaGFkIFBfSElLRVkgYXMgdGhl
aXIgb2Zmc2V0LgorCQkJICogQWNjZXB0IHRoYXQgYXMgYW4gYWx0ZXJuYXRpdmUgaW5kaWNhdGlv
biBvZiBhIHZhbGlkCisJCQkgKiAhaGVhcGtleXNwYWNlIG5lZ2F0aXZlIGluZmluaXR5IHR1cGxl
LgogCQkJICovCiAJCQlyZXR1cm4gdHVwbmF0dHMgPT0gMCB8fAotCQkJCSgoaXR1cC0+dF9pbmZv
ICYgSU5ERVhfQUxUX1RJRF9NQVNLKSA9PSAwICYmCi0JCQkJIEl0ZW1Qb2ludGVyR2V0T2Zmc2V0
TnVtYmVyKCYoaXR1cC0+dF90aWQpKSA9PSBQX0hJS0VZKTsKKwkJCQlJdGVtUG9pbnRlckdldE9m
ZnNldE51bWJlcigmKGl0dXAtPnRfdGlkKSkgPT0gUF9ISUtFWTsKIAkJfQogCQllbHNlCiAJCXsK
QEAgLTI0ODgsNyArMjYwMiwxMSBAQCBfYnRfY2hlY2tfbmF0dHMoUmVsYXRpb24gcmVsLCBib29s
IGhlYXBrZXlzcGFjZSwgUGFnZSBwYWdlLCBPZmZzZXROdW1iZXIgb2ZmbnVtKQogCSAqIGhlYXBr
ZXlzcGFjZSBpbmRleCBwaXZvdCB0dXBsZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3Qg
dGhlcmUgYXJlCiAJICogbm9uLWtleSBhdHRyaWJ1dGVzLgogCSAqLwotCWlmICgoaXR1cC0+dF9p
bmZvICYgSU5ERVhfQUxUX1RJRF9NQVNLKSA9PSAwKQorCWlmICghQlRyZWVUdXBsZUlzUGl2b3Qo
aXR1cCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIFBpdm90IHR1cGxlIHNob3VsZCBub3QgdXNl
IHBvc3RpbmcgbGlzdCByZXByZXNlbnRhdGlvbiAocmVkdW5kYW50KSAqLworCWlmIChCVHJlZVR1
cGxlSXNQb3N0aW5nKGl0dXApKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgpAQCAtMjU1OCwxMSAr
MjY3Niw1MyBAQCBfYnRfY2hlY2tfdGhpcmRfcGFnZShSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhl
YXAsIGJvb2wgbmVlZGhlYXB0aWRzcGFjZSwKIAkJCQkJQlRNYXhJdGVtU2l6ZU5vSGVhcFRpZChw
YWdlKSwKIAkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSksCiAJCQkgZXJyZGV0YWls
KCJJbmRleCByb3cgcmVmZXJlbmNlcyB0dXBsZSAoJXUsJXUpIGluIHJlbGF0aW9uIFwiJXNcIi4i
LAotCQkJCQkgICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZuZXd0dXAtPnRfdGlkKSwKLQkJ
CQkJICAgSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIoJm5ld3R1cC0+dF90aWQpLAorCQkJCQkg
ICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKEJUcmVlVHVwbGVHZXRIZWFwVElEKG5ld3R1cCkp
LAorCQkJCQkgICBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcihCVHJlZVR1cGxlR2V0SGVhcFRJ
RChuZXd0dXApKSwKIAkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcCkpLAogCQkJ
IGVycmhpbnQoIlZhbHVlcyBsYXJnZXIgdGhhbiAxLzMgb2YgYSBidWZmZXIgcGFnZSBjYW5ub3Qg
YmUgaW5kZXhlZC5cbiIKIAkJCQkJICJDb25zaWRlciBhIGZ1bmN0aW9uIGluZGV4IG9mIGFuIE1E
NSBoYXNoIG9mIHRoZSB2YWx1ZSwgIgogCQkJCQkgIm9yIHVzZSBmdWxsIHRleHQgaW5kZXhpbmcu
IiksCiAJCQkgZXJydGFibGVjb25zdHJhaW50KGhlYXAsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l
KHJlbCkpKSk7CiB9CisKKy8qCisgKiBJcyBpdCBzYWZlIHRvIHBlcmZvcm0gZGVkdXBsaWNhdGlv
biBmb3IgYW4gaW5kZXgsIGdpdmVuIHRoZSBvcGNsYXNzZXMgYW5kCisgKiBjb2xsYXRpb25zIHVz
ZWQ/CisgKgorICogUmV0dXJuZWQgdmFsdWUgaXMgc3RvcmVkIGluIGluZGV4IG1ldGFwYWdlIGR1
cmluZyBpbmRleCBidWlsZHMuICBGdW5jdGlvbgorICogZG9lcyBub3QgYWNjb3VudCBmb3IgaW5j
b21wYXRpYmlsaXRpZXMgY2F1c2VkIGJ5IGluZGV4IGJlaW5nIG9uIGFuIGVhcmxpZXIKKyAqIG5i
dHJlZSB2ZXJzaW9uLgorICovCitib29sCitfYnRfb3BjbGFzc2VzX3N1cHBvcnRfZGVkdXAoUmVs
YXRpb24gaW5kZXgpCit7CisJLyogSU5DTFVERSBpbmRleGVzIGRvbid0IHN1cHBvcnQgZGVkdXBs
aWNhdGlvbiAqLworCWlmIChJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKGluZGV4
KSAhPQorCQlJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZLZXlBdHRyaWJ1dGVzKGluZGV4KSkKKwkJ
cmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBUaGVyZSBpcyBubyByZWFzb24gd2h5IGRlZHVwbGlj
YXRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCBzeXN0ZW0gY2F0YWxvZworCSAqIGluZGV4ZXMuICBI
b3dldmVyLCB3ZSBkZWVtIGl0IGdlbmVyYWxseSB1bnNhZmUgYmVjYXVzZSBpdCdzIG5vdCBjbGVh
cgorCSAqIGhvdyBpdCBjb3VsZCBiZSBkaXNhYmxlZC4gIChBTFRFUiBJTkRFWCBpcyBub3Qgc3Vw
cG9ydGVkIHdpdGggc3lzdGVtCisJICogY2F0YWxvZyBpbmRleGVzLCBzbyB1c2VycyBoYXZlIG5v
IHdheSB0byBzZXQgdGhlIHN0b3JhZ2UgcGFyYW1ldGVyLikKKwkgKi8KKwlpZiAoSXNDYXRhbG9n
UmVsYXRpb24oaW5kZXgpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlmb3IgKGludCBpID0gMDsgaSA8
IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMoaW5kZXgpOyBpKyspCisJewor
CQlPaWQJCQlvcGZhbWlseSA9IGluZGV4LT5yZF9vcGZhbWlseVtpXTsKKwkJT2lkCQkJY29sbGF0
aW9uID0gaW5kZXgtPnJkX2luZGNvbGxhdGlvbltpXTsKKworCQkvKiBUT0RPIGFkZCBhZGVxdWF0
ZSBjaGVjayBvZiBvcGNsYXNzZXMgYW5kIGNvbGxhdGlvbnMgKi8KKwkJZWxvZyhERUJVRzQsICJp
bmRleCAlcyBjb2x1bW4gaSAlZCBvcGZhbWlseU9pZCAldSBjb2xsYXRpb25PaWQgJXUiLAorCQkJ
IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGluZGV4KSwgaSwgb3BmYW1pbHksIGNvbGxhdGlvbik7
CisKKwkJLyogTlVNRVJJQyBidHJlZSBvcGZhbWlseSBPSUQgaXMgMTk4OCAqLworCQlpZiAob3Bm
YW1pbHkgPT0gMTk4OCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30K
ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jIGIvc3JjL2Jh
Y2tlbmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMKaW5kZXggMmU1MjAyYzJkNi4uMWQxY2Q3YjY2
NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMKKysrIGIv
c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMKQEAgLTIyLDYgKzIyLDkgQEAKICNp
bmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j
bHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgor
CitzdGF0aWMgTWVtb3J5Q29udGV4dCBvcEN0eDsJCS8qIHdvcmtpbmcgbWVtb3J5IGZvciBvcGVy
YXRpb25zICovCiAKIC8qCiAgKiBfYnRfcmVzdG9yZV9wYWdlIC0tIHJlLWVudGVyIGFsbCB0aGUg
aW5kZXggdHVwbGVzIG9uIGEgcGFnZQpAQCAtMTExLDYgKzExNCw3IEBAIF9idF9yZXN0b3JlX21l
dGEoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQsIHVpbnQ4IGJsb2NrX2lkKQogCUFzc2VydChtZC0+
YnRtX3ZlcnNpb24gPj0gQlRSRUVfTk9WQUNfVkVSU0lPTik7CiAJbWQtPmJ0bV9vbGRlc3RfYnRw
b194YWN0ID0geGxyZWMtPm9sZGVzdF9idHBvX3hhY3Q7CiAJbWQtPmJ0bV9sYXN0X2NsZWFudXBf
bnVtX2hlYXBfdHVwbGVzID0geGxyZWMtPmxhc3RfY2xlYW51cF9udW1faGVhcF90dXBsZXM7CisJ
bWQtPmJ0bV9zYWZlZGVkdXAgPSB4bHJlYy0+c2FmZWRlZHVwOwogCiAJcGFnZW9wID0gKEJUUGFn
ZU9wYXF1ZSkgUGFnZUdldFNwZWNpYWxQb2ludGVyKG1ldGFwZyk7CiAJcGFnZW9wLT5idHBvX2Zs
YWdzID0gQlRQX01FVEE7CkBAIC0xNTYsNyArMTYwLDggQEAgX2J0X2NsZWFyX2luY29tcGxldGVf
c3BsaXQoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQsIHVpbnQ4IGJsb2NrX2lkKQogfQogCiBzdGF0
aWMgdm9pZAotYnRyZWVfeGxvZ19pbnNlcnQoYm9vbCBpc2xlYWYsIGJvb2wgaXNtZXRhLCBYTG9n
UmVhZGVyU3RhdGUgKnJlY29yZCkKK2J0cmVlX3hsb2dfaW5zZXJ0KGJvb2wgaXNsZWFmLCBib29s
IGlzbWV0YSwgYm9vbCBwb3N0aW5nLAorCQkJCSAgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiB7
CiAJWExvZ1JlY1B0cglsc24gPSByZWNvcmQtPkVuZFJlY1B0cjsKIAl4bF9idHJlZV9pbnNlcnQg
KnhscmVjID0gKHhsX2J0cmVlX2luc2VydCAqKSBYTG9nUmVjR2V0RGF0YShyZWNvcmQpOwpAQCAt
MTgxLDkgKzE4Niw1MiBAQCBidHJlZV94bG9nX2luc2VydChib29sIGlzbGVhZiwgYm9vbCBpc21l
dGEsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCiAJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1
ZmZlcik7CiAKLQkJaWYgKFBhZ2VBZGRJdGVtKHBhZ2UsIChJdGVtKSBkYXRhcG9zLCBkYXRhbGVu
LCB4bHJlYy0+b2ZmbnVtLAotCQkJCQkJZmFsc2UsIGZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0TnVt
YmVyKQotCQkJZWxvZyhQQU5JQywgImJ0cmVlX3hsb2dfaW5zZXJ0OiBmYWlsZWQgdG8gYWRkIGl0
ZW0iKTsKKwkJaWYgKCFwb3N0aW5nKQorCQl7CisJCQkvKiBTaW1wbGUgcmV0YWlsIGluc2VydGlv
biAqLworCQkJaWYgKFBhZ2VBZGRJdGVtKHBhZ2UsIChJdGVtKSBkYXRhcG9zLCBkYXRhbGVuLCB4
bHJlYy0+b2ZmbnVtLAorCQkJCQkJCWZhbHNlLCBmYWxzZSkgPT0gSW52YWxpZE9mZnNldE51bWJl
cikKKwkJCQllbG9nKFBBTklDLCAiYnRyZWVfeGxvZ19pbnNlcnQ6IGZhaWxlZCB0byBhZGQgaXRl
bSIpOworCQl9CisJCWVsc2UKKwkJeworCQkJSXRlbUlkCQlpdGVtaWQ7CisJCQlJbmRleFR1cGxl
CW9wb3N0aW5nLAorCQkJCQkJbmV3aXRlbSwKKwkJCQkJCW5wb3N0aW5nOworCQkJdWludDE2CQlw
b3N0aW5nb2ZmOworCisJCQkvKgorCQkJICogQSBwb3N0aW5nIGxpc3Qgc3BsaXQgb2NjdXJyZWQg
ZHVyaW5nIGxlYWYgcGFnZSBpbnNlcnRpb24uICBXQUwKKwkJCSAqIHJlY29yZCBkYXRhIHdpbGwg
c3RhcnQgd2l0aCBhbiBvZmZzZXQgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUKKwkJCSAqIHBvaW50
IGluIGFuIGV4aXN0aW5nIHBvc3RpbmcgbGlzdCB0aGF0IGEgc3BsaXQgb2NjdXJzIGF0LgorCQkJ
ICoKKwkJCSAqIFVzZSBfYnRfc3dhcF9wb3N0aW5nKCkgdG8gcmVwZWF0IHBvc3RpbmcgbGlzdCBz
cGxpdCBzdGVwcyBmcm9tCisJCQkgKiBwcmltYXJ5LiAgTm90ZSB0aGF0IG5ld2l0ZW0gZnJvbSBX
QUwgcmVjb3JkIGlzICdvcmlnbmV3aXRlbScsCisJCQkgKiBub3QgdGhlIGZpbmFsIHZlcnNpb24g
b2YgbmV3aXRlbSB0aGF0IGlzIGFjdHVhbGx5IGluc2VydGVkIG9uCisJCQkgKiBwYWdlLgorCQkJ
ICovCisJCQlwb3N0aW5nb2ZmID0gKigodWludDE2ICopIGRhdGFwb3MpOworCQkJZGF0YXBvcyAr
PSBzaXplb2YodWludDE2KTsKKwkJCWRhdGFsZW4gLT0gc2l6ZW9mKHVpbnQxNik7CisKKwkJCWl0
ZW1pZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgT2Zmc2V0TnVtYmVyUHJldih4bHJlYy0+b2ZmbnVt
KSk7CisJCQlvcG9zdGluZyA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpdGVtaWQp
OworCisJCQkvKiBVc2UgbXV0YWJsZSwgYWxpZ25lZCBuZXdpdGVtIGNvcHkgaW4gX2J0X3N3YXBf
cG9zdGluZygpICovCisJCQlBc3NlcnQoaXNsZWFmICYmIHBvc3RpbmdvZmYgPiAwKTsKKwkJCW5l
d2l0ZW0gPSBDb3B5SW5kZXhUdXBsZSgoSW5kZXhUdXBsZSkgZGF0YXBvcyk7CisJCQlucG9zdGlu
ZyA9IF9idF9zd2FwX3Bvc3RpbmcobmV3aXRlbSwgb3Bvc3RpbmcsIHBvc3RpbmdvZmYpOworCisJ
CQkvKiBSZXBsYWNlIGV4aXN0aW5nIHBvc3RpbmcgbGlzdCB3aXRoIHBvc3Qtc3BsaXQgdmVyc2lv
biAqLworCQkJbWVtY3B5KG9wb3N0aW5nLCBucG9zdGluZywgTUFYQUxJR04oSW5kZXhUdXBsZVNp
emUobnBvc3RpbmcpKSk7CisKKwkJCS8qIEluc2VydCAiZmluYWwiIG5ldyBpdGVtIChub3Qgb3Jp
Z25ld2l0ZW0gZnJvbSBXQUwgc3RyZWFtKSAqLworCQkJQXNzZXJ0KEluZGV4VHVwbGVTaXplKG5l
d2l0ZW0pID09IGRhdGFsZW4pOworCQkJaWYgKFBhZ2VBZGRJdGVtKHBhZ2UsIChJdGVtKSBuZXdp
dGVtLCBkYXRhbGVuLCB4bHJlYy0+b2ZmbnVtLAorCQkJCQkJCWZhbHNlLCBmYWxzZSkgPT0gSW52
YWxpZE9mZnNldE51bWJlcikKKwkJCQllbG9nKFBBTklDLCAiYnRyZWVfeGxvZ19pbnNlcnQ6IGZh
aWxlZCB0byBhZGQgcG9zdGluZyBzcGxpdCBuZXcgaXRlbSIpOworCQl9CiAKIAkJUGFnZVNldExT
TihwYWdlLCBsc24pOwogCQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKQEAgLTI2NSwyMCArMzEz
LDM4IEBAIGJ0cmVlX3hsb2dfc3BsaXQoYm9vbCBvbmxlZnQsIFhMb2dSZWFkZXJTdGF0ZSAqcmVj
b3JkKQogCQlCVFBhZ2VPcGFxdWUgbG9wYXF1ZSA9IChCVFBhZ2VPcGFxdWUpIFBhZ2VHZXRTcGVj
aWFsUG9pbnRlcihscGFnZSk7CiAJCU9mZnNldE51bWJlciBvZmY7CiAJCUluZGV4VHVwbGUJbmV3
aXRlbSA9IE5VTEwsCi0JCQkJCWxlZnRfaGlrZXkgPSBOVUxMOworCQkJCQlsZWZ0X2hpa2V5ID0g
TlVMTCwKKwkJCQkJbnBvc3RpbmcgPSBOVUxMOwogCQlTaXplCQluZXdpdGVtc3ogPSAwLAogCQkJ
CQlsZWZ0X2hpa2V5c3ogPSAwOwogCQlQYWdlCQluZXdscGFnZTsKLQkJT2Zmc2V0TnVtYmVyIGxl
ZnRvZmY7CisJCU9mZnNldE51bWJlciBsZWZ0b2ZmLAorCQkJCQlyZXBsYWNlcG9zdGluZ29mZiA9
IEludmFsaWRPZmZzZXROdW1iZXI7CiAKIAkJZGF0YXBvcyA9IFhMb2dSZWNHZXRCbG9ja0RhdGEo
cmVjb3JkLCAwLCAmZGF0YWxlbik7CiAKLQkJaWYgKG9ubGVmdCkKKwkJaWYgKG9ubGVmdCB8fCB4
bHJlYy0+cG9zdGluZ29mZiAhPSAwKQogCQl7CiAJCQluZXdpdGVtID0gKEluZGV4VHVwbGUpIGRh
dGFwb3M7CiAJCQluZXdpdGVtc3ogPSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShuZXdpdGVtKSk7
CiAJCQlkYXRhcG9zICs9IG5ld2l0ZW1zejsKIAkJCWRhdGFsZW4gLT0gbmV3aXRlbXN6OworCisJ
CQlpZiAoeGxyZWMtPnBvc3RpbmdvZmYgIT0gMCkKKwkJCXsKKwkJCQlJdGVtSWQJCWl0ZW1pZDsK
KwkJCQlJbmRleFR1cGxlCW9wb3N0aW5nOworCisJCQkJLyogUG9zdGluZyBsaXN0IG11c3QgYmUg
YXQgb2Zmc2V0IG51bWJlciBiZWZvcmUgbmV3IGl0ZW0ncyAqLworCQkJCXJlcGxhY2Vwb3N0aW5n
b2ZmID0gT2Zmc2V0TnVtYmVyUHJldih4bHJlYy0+bmV3aXRlbW9mZik7CisKKwkJCQkvKiBVc2Ug
bXV0YWJsZSwgYWxpZ25lZCBuZXdpdGVtIGNvcHkgaW4gX2J0X3N3YXBfcG9zdGluZygpICovCisJ
CQkJbmV3aXRlbSA9IENvcHlJbmRleFR1cGxlKG5ld2l0ZW0pOworCQkJCWl0ZW1pZCA9IFBhZ2VH
ZXRJdGVtSWQobHBhZ2UsIHJlcGxhY2Vwb3N0aW5nb2ZmKTsKKwkJCQlvcG9zdGluZyA9IChJbmRl
eFR1cGxlKSBQYWdlR2V0SXRlbShscGFnZSwgaXRlbWlkKTsKKwkJCQlucG9zdGluZyA9IF9idF9z
d2FwX3Bvc3RpbmcobmV3aXRlbSwgb3Bvc3RpbmcsCisJCQkJCQkJCQkJCXhscmVjLT5wb3N0aW5n
b2ZmKTsKKwkJCX0KIAkJfQogCiAJCS8qCkBAIC0zMDgsOCArMzc0LDIwIEBAIGJ0cmVlX3hsb2df
c3BsaXQoYm9vbCBvbmxlZnQsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkJU2l6ZQkJaXRl
bXN6OwogCQkJSW5kZXhUdXBsZQlpdGVtOwogCisJCQkvKiBBZGQgcmVwbGFjZW1lbnQgcG9zdGlu
ZyBsaXN0IHdoZW4gcmVxdWlyZWQgKi8KKwkJCWlmIChvZmYgPT0gcmVwbGFjZXBvc3RpbmdvZmYp
CisJCQl7CisJCQkJQXNzZXJ0KG9ubGVmdCB8fCB4bHJlYy0+Zmlyc3RyaWdodCA9PSB4bHJlYy0+
bmV3aXRlbW9mZik7CisJCQkJaWYgKFBhZ2VBZGRJdGVtKG5ld2xwYWdlLCAoSXRlbSkgbnBvc3Rp
bmcsCisJCQkJCQkJCU1BWEFMSUdOKEluZGV4VHVwbGVTaXplKG5wb3N0aW5nKSksIGxlZnRvZmYs
CisJCQkJCQkJCWZhbHNlLCBmYWxzZSkgPT0gSW52YWxpZE9mZnNldE51bWJlcikKKwkJCQkJZWxv
ZyhFUlJPUiwgImZhaWxlZCB0byBhZGQgbmV3IHBvc3RpbmcgbGlzdCBpdGVtIHRvIGxlZnQgcGFn
ZSBhZnRlciBzcGxpdCIpOworCQkJCWxlZnRvZmYgPSBPZmZzZXROdW1iZXJOZXh0KGxlZnRvZmYp
OworCQkJCWNvbnRpbnVlOwkJLyogZG9uJ3QgaW5zZXJ0IG9wb3N0aW5nICovCisJCQl9CisKIAkJ
CS8qIGFkZCB0aGUgbmV3IGl0ZW0gaWYgaXQgd2FzIGluc2VydGVkIG9uIGxlZnQgcGFnZSAqLwot
CQkJaWYgKG9ubGVmdCAmJiBvZmYgPT0geGxyZWMtPm5ld2l0ZW1vZmYpCisJCQllbHNlIGlmIChv
bmxlZnQgJiYgb2ZmID09IHhscmVjLT5uZXdpdGVtb2ZmKQogCQkJewogCQkJCWlmIChQYWdlQWRk
SXRlbShuZXdscGFnZSwgKEl0ZW0pIG5ld2l0ZW0sIG5ld2l0ZW1zeiwgbGVmdG9mZiwKIAkJCQkJ
CQkJZmFsc2UsIGZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0TnVtYmVyKQpAQCAtMzgzLDYgKzQ2MSw1
NiBAQCBidHJlZV94bG9nX3NwbGl0KGJvb2wgb25sZWZ0LCBYTG9nUmVhZGVyU3RhdGUgKnJlY29y
ZCkKIAl9CiB9CiAKK3N0YXRpYyB2b2lkCitidHJlZV94bG9nX2RlZHVwKFhMb2dSZWFkZXJTdGF0
ZSAqcmVjb3JkKQoreworCVhMb2dSZWNQdHIJbHNuID0gcmVjb3JkLT5FbmRSZWNQdHI7CisJeGxf
YnRyZWVfZGVkdXAgKnhscmVjID0gKHhsX2J0cmVlX2RlZHVwICopIFhMb2dSZWNHZXREYXRhKHJl
Y29yZCk7CisJQnVmZmVyCQlidWY7CisKKwlpZiAoWExvZ1JlYWRCdWZmZXJGb3JSZWRvKHJlY29y
ZCwgMCwgJmJ1ZikgPT0gQkxLX05FRURTX1JFRE8pCisJeworCQlQYWdlCQlwYWdlID0gKFBhZ2Up
IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKwkJT2Zmc2V0TnVtYmVyIG9mZm51bTsKKwkJQlREZWR1cFN0
YXRlIHN0YXRlOworCisJCXN0YXRlID0gKEJURGVkdXBTdGF0ZSkgcGFsbG9jKHNpemVvZihCVERl
ZHVwU3RhdGVEYXRhKSk7CisJCS8qIENvbnNlcnZhdGl2ZWx5IHVzZSBsYXJnZXIgbWF4cG9zdGlu
Z3NpemUgdGhhbiBwcmltYXJ5ICovCisJCXN0YXRlLT5tYXhwb3N0aW5nc2l6ZSA9IEJUTWF4SXRl
bVNpemUocGFnZSk7CisJCXN0YXRlLT5jaGVja2luZ3VuaXF1ZSA9IGZhbHNlOwkvKiB1bnVzZWQg
Ki8KKwkJc3RhdGUtPnNraXBwZWRiYXNlID0gSW52YWxpZE9mZnNldE51bWJlcjsKKwkJc3RhdGUt
PmJhc2UgPSBOVUxMOworCQlzdGF0ZS0+YmFzZW9mZiA9IEludmFsaWRPZmZzZXROdW1iZXI7CisJ
CXN0YXRlLT5iYXNldHVwc2l6ZSA9IDA7CisJCXN0YXRlLT5odGlkcyA9IHBhbGxvYyhzdGF0ZS0+
bWF4cG9zdGluZ3NpemUpOworCQlzdGF0ZS0+bmh0aWRzID0gMDsKKwkJc3RhdGUtPm5pdGVtcyA9
IDA7CisJCXN0YXRlLT5waHlzdHVwc2l6ZSA9IDA7CisKKwkJZm9yIChvZmZudW0gPSB4bHJlYy0+
YmFzZW9mZjsKKwkJCSBvZmZudW0gPCB4bHJlYy0+YmFzZW9mZiArIHhscmVjLT5uaXRlbXM7CisJ
CQkgb2ZmbnVtID0gT2Zmc2V0TnVtYmVyTmV4dChvZmZudW0pKQorCQl7CisJCQlJdGVtSWQJCWl0
ZW1pZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKKwkJCUluZGV4VHVwbGUJaXR1cCA9
IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpOworCisJCQlpZiAob2ZmbnVt
ID09IHhscmVjLT5iYXNlb2ZmKQorCQkJCV9idF9kZWR1cF9zdGFydF9wZW5kaW5nKHN0YXRlLCBp
dHVwLCBvZmZudW0pOworCQkJZWxzZSBpZiAoIV9idF9kZWR1cF9zYXZlX2h0aWQoc3RhdGUsIGl0
dXApKQorCQkJCWVsb2coRVJST1IsICJjb3VsZCBub3QgYWRkIGhlYXAgdGlkIHRvIHBlbmRpbmcg
cG9zdGluZyBsaXN0Iik7CisJCX0KKworCQlBc3NlcnQoc3RhdGUtPm5pdGVtcyA9PSB4bHJlYy0+
bml0ZW1zKTsKKwkJX2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKGJ1Ziwgc3RhdGUsIGZhbHNlKTsK
KworCQlQYWdlU2V0TFNOKHBhZ2UsIGxzbik7CisJCU1hcmtCdWZmZXJEaXJ0eShidWYpOworCX0K
KworCWlmIChCdWZmZXJJc1ZhbGlkKGJ1ZikpCisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsK
K30KKwogc3RhdGljIHZvaWQKIGJ0cmVlX3hsb2dfdmFjdXVtKFhMb2dSZWFkZXJTdGF0ZSAqcmVj
b3JkKQogewpAQCAtNDA1LDcgKzUzMywzMiBAQCBidHJlZV94bG9nX3ZhY3V1bShYTG9nUmVhZGVy
U3RhdGUgKnJlY29yZCkKIAogCQlwYWdlID0gKFBhZ2UpIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsK
IAotCQlQYWdlSW5kZXhNdWx0aURlbGV0ZShwYWdlLCAoT2Zmc2V0TnVtYmVyICopIHB0ciwgeGxy
ZWMtPm5kZWxldGVkKTsKKwkJaWYgKHhscmVjLT5udXBkYXRlZCA+IDApCisJCXsKKwkJCU9mZnNl
dE51bWJlciAqdXBkYXRlZG9mZnNldHM7CisJCQlJbmRleFR1cGxlCXVwZGF0ZWQ7CisJCQlTaXpl
CQlpdGVtc3o7CisKKwkJCXVwZGF0ZWRvZmZzZXRzID0gKE9mZnNldE51bWJlciAqKQorCQkJCShw
dHIgKyB4bHJlYy0+bmRlbGV0ZWQgKiBzaXplb2YoT2Zmc2V0TnVtYmVyKSk7CisJCQl1cGRhdGVk
ID0gKEluZGV4VHVwbGUpICgoY2hhciAqKSB1cGRhdGVkb2Zmc2V0cyArCisJCQkJCQkJCQl4bHJl
Yy0+bnVwZGF0ZWQgKiBzaXplb2YoT2Zmc2V0TnVtYmVyKSk7CisKKwkJCWZvciAoaW50IGkgPSAw
OyBpIDwgeGxyZWMtPm51cGRhdGVkOyBpKyspCisJCQl7CisJCQkJQXNzZXJ0KEJUcmVlVHVwbGVJ
c1Bvc3RpbmcodXBkYXRlZCkpOworCQkJCWl0ZW1zeiA9IE1BWEFMSUdOKEluZGV4VHVwbGVTaXpl
KHVwZGF0ZWQpKTsKKworCQkJCWlmICghUGFnZUluZGV4VHVwbGVPdmVyd3JpdGUocGFnZSwgdXBk
YXRlZG9mZnNldHNbaV0sCisJCQkJCQkJCQkJCSAoSXRlbSkgdXBkYXRlZCwgaXRlbXN6KSkKKwkJ
CQkJZWxvZyhQQU5JQywgImNvdWxkIG5vdCB1cGRhdGUgcGFydGlhbGx5IGRlYWQgaXRlbSIpOwor
CisJCQkJdXBkYXRlZCA9IChJbmRleFR1cGxlKSAoKGNoYXIgKikgdXBkYXRlZCArIGl0ZW1zeik7
CisJCQl9CisJCX0KKworCQlpZiAoeGxyZWMtPm5kZWxldGVkID4gMCkKKwkJCVBhZ2VJbmRleE11
bHRpRGVsZXRlKHBhZ2UsIChPZmZzZXROdW1iZXIgKikgcHRyLCB4bHJlYy0+bmRlbGV0ZWQpOwog
CiAJCS8qCiAJCSAqIE1hcmsgdGhlIHBhZ2UgYXMgbm90IGNvbnRhaW5pbmcgYW55IExQX0RFQUQg
aXRlbXMgLS0tIHNlZSBjb21tZW50cwpAQCAtNzI0LDE3ICs4NzcsMjIgQEAgdm9pZAogYnRyZWVf
cmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIHsKIAl1aW50OAkJaW5mbyA9IFhMb2dSZWNH
ZXRJbmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFTSzsKKwlNZW1vcnlDb250ZXh0IG9sZEN0eDsK
IAorCW9sZEN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvcEN0eCk7CiAJc3dpdGNoIChpbmZv
KQogCXsKIAkJY2FzZSBYTE9HX0JUUkVFX0lOU0VSVF9MRUFGOgotCQkJYnRyZWVfeGxvZ19pbnNl
cnQodHJ1ZSwgZmFsc2UsIHJlY29yZCk7CisJCQlidHJlZV94bG9nX2luc2VydCh0cnVlLCBmYWxz
ZSwgZmFsc2UsIHJlY29yZCk7CiAJCQlicmVhazsKIAkJY2FzZSBYTE9HX0JUUkVFX0lOU0VSVF9V
UFBFUjoKLQkJCWJ0cmVlX3hsb2dfaW5zZXJ0KGZhbHNlLCBmYWxzZSwgcmVjb3JkKTsKKwkJCWJ0
cmVlX3hsb2dfaW5zZXJ0KGZhbHNlLCBmYWxzZSwgZmFsc2UsIHJlY29yZCk7CiAJCQlicmVhazsK
IAkJY2FzZSBYTE9HX0JUUkVFX0lOU0VSVF9NRVRBOgotCQkJYnRyZWVfeGxvZ19pbnNlcnQoZmFs
c2UsIHRydWUsIHJlY29yZCk7CisJCQlidHJlZV94bG9nX2luc2VydChmYWxzZSwgdHJ1ZSwgZmFs
c2UsIHJlY29yZCk7CisJCQlicmVhazsKKwkJY2FzZSBYTE9HX0JUUkVFX0lOU0VSVF9QT1NUOgor
CQkJYnRyZWVfeGxvZ19pbnNlcnQodHJ1ZSwgZmFsc2UsIHRydWUsIHJlY29yZCk7CiAJCQlicmVh
azsKIAkJY2FzZSBYTE9HX0JUUkVFX1NQTElUX0w6CiAJCQlidHJlZV94bG9nX3NwbGl0KHRydWUs
IHJlY29yZCk7CkBAIC03NDIsNiArOTAwLDkgQEAgYnRyZWVfcmVkbyhYTG9nUmVhZGVyU3RhdGUg
KnJlY29yZCkKIAkJY2FzZSBYTE9HX0JUUkVFX1NQTElUX1I6CiAJCQlidHJlZV94bG9nX3NwbGl0
KGZhbHNlLCByZWNvcmQpOwogCQkJYnJlYWs7CisJCWNhc2UgWExPR19CVFJFRV9ERURVUF9QQUdF
OgorCQkJYnRyZWVfeGxvZ19kZWR1cChyZWNvcmQpOworCQkJYnJlYWs7CiAJCWNhc2UgWExPR19C
VFJFRV9WQUNVVU06CiAJCQlidHJlZV94bG9nX3ZhY3V1bShyZWNvcmQpOwogCQkJYnJlYWs7CkBA
IC03NjcsNiArOTI4LDIzIEBAIGJ0cmVlX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJ
CWRlZmF1bHQ6CiAJCQllbG9nKFBBTklDLCAiYnRyZWVfcmVkbzogdW5rbm93biBvcCBjb2RlICV1
IiwgaW5mbyk7CiAJfQorCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDdHgpOworCU1lbW9yeUNv
bnRleHRSZXNldChvcEN0eCk7Cit9CisKK3ZvaWQKK2J0cmVlX3hsb2dfc3RhcnR1cCh2b2lkKQor
eworCW9wQ3R4ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAor
CQkJCQkJCQkgICJCdHJlZSByZWNvdmVyeSB0ZW1wb3JhcnkgY29udGV4dCIsCisJCQkJCQkJCSAg
QUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7Cit9CisKK3ZvaWQKK2J0cmVlX3hsb2dfY2xlYW51cCh2
b2lkKQoreworCU1lbW9yeUNvbnRleHREZWxldGUob3BDdHgpOworCW9wQ3R4ID0gTlVMTDsKIH0K
IAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9uYnRkZXNjLmMg
Yi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbmJ0ZGVzYy5jCmluZGV4IDdkNjNhNzEyNGUu
LjY4ZmFkMWM5MWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9uYnRk
ZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL25idGRlc2MuYwpAQCAtMjcs
NiArMjcsNyBAQCBidHJlZV9kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJl
Y29yZCkKIAkJY2FzZSBYTE9HX0JUUkVFX0lOU0VSVF9MRUFGOgogCQljYXNlIFhMT0dfQlRSRUVf
SU5TRVJUX1VQUEVSOgogCQljYXNlIFhMT0dfQlRSRUVfSU5TRVJUX01FVEE6CisJCWNhc2UgWExP
R19CVFJFRV9JTlNFUlRfUE9TVDoKIAkJCXsKIAkJCQl4bF9idHJlZV9pbnNlcnQgKnhscmVjID0g
KHhsX2J0cmVlX2luc2VydCAqKSByZWM7CiAKQEAgLTM4LDE1ICszOSwyNSBAQCBidHJlZV9kZXNj
KFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJCXsKIAkJCQl4bF9i
dHJlZV9zcGxpdCAqeGxyZWMgPSAoeGxfYnRyZWVfc3BsaXQgKikgcmVjOwogCi0JCQkJYXBwZW5k
U3RyaW5nSW5mbyhidWYsICJsZXZlbCAldSwgZmlyc3RyaWdodCAlZCwgbmV3aXRlbW9mZiAlZCIs
Ci0JCQkJCQkJCSB4bHJlYy0+bGV2ZWwsIHhscmVjLT5maXJzdHJpZ2h0LCB4bHJlYy0+bmV3aXRl
bW9mZik7CisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJsZXZlbCAldSwgZmlyc3RyaWdodCAl
ZCwgbmV3aXRlbW9mZiAlZCwgcG9zdGluZ29mZiAlZCIsCisJCQkJCQkJCSB4bHJlYy0+bGV2ZWws
IHhscmVjLT5maXJzdHJpZ2h0LAorCQkJCQkJCQkgeGxyZWMtPm5ld2l0ZW1vZmYsIHhscmVjLT5w
b3N0aW5nb2ZmKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBYTE9HX0JUUkVFX0RFRFVQX1BB
R0U6CisJCQl7CisJCQkJeGxfYnRyZWVfZGVkdXAgKnhscmVjID0gKHhsX2J0cmVlX2RlZHVwICop
IHJlYzsKKworCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiYmFzZW9mZiAldTsgbml0ZW1zICV1
IiwKKwkJCQkJCQkJIHhscmVjLT5iYXNlb2ZmLCB4bHJlYy0+bml0ZW1zKTsKIAkJCQlicmVhazsK
IAkJCX0KIAkJY2FzZSBYTE9HX0JUUkVFX1ZBQ1VVTToKIAkJCXsKIAkJCQl4bF9idHJlZV92YWN1
dW0gKnhscmVjID0gKHhsX2J0cmVlX3ZhY3V1bSAqKSByZWM7CiAKLQkJCQlhcHBlbmRTdHJpbmdJ
bmZvKGJ1ZiwgIm5kZWxldGVkICV1IiwgeGxyZWMtPm5kZWxldGVkKTsKKwkJCQlhcHBlbmRTdHJp
bmdJbmZvKGJ1ZiwgIm5kZWxldGVkICV1OyBudXBkYXRlZCAldSIsCisJCQkJCQkJCSB4bHJlYy0+
bmRlbGV0ZWQsIHhscmVjLT5udXBkYXRlZCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCWNhc2UgWExP
R19CVFJFRV9ERUxFVEU6CkBAIC0xMzAsNiArMTQxLDEyIEBAIGJ0cmVlX2lkZW50aWZ5KHVpbnQ4
IGluZm8pCiAJCWNhc2UgWExPR19CVFJFRV9TUExJVF9SOgogCQkJaWQgPSAiU1BMSVRfUiI7CiAJ
CQlicmVhazsKKwkJY2FzZSBYTE9HX0JUUkVFX0RFRFVQX1BBR0U6CisJCQlpZCA9ICJERURVUExJ
Q0FURSI7CisJCQlicmVhazsKKwkJY2FzZSBYTE9HX0JUUkVFX0lOU0VSVF9QT1NUOgorCQkJaWQg
PSAiSU5TRVJUX1BPU1QiOworCQkJYnJlYWs7CiAJCWNhc2UgWExPR19CVFJFRV9WQUNVVU06CiAJ
CQlpZCA9ICJWQUNVVU0iOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y
YWdlL3BhZ2UvYnVmcGFnZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYwpp
bmRleCBmNDcxNzY3NTNkLi4zMmZmMDNiM2U0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y
YWdlL3BhZ2UvYnVmcGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdl
LmMKQEAgLTEwNTUsOCArMTA1NSwxMCBAQCBQYWdlSW5kZXhUdXBsZURlbGV0ZU5vQ29tcGFjdChQ
YWdlIHBhZ2UsIE9mZnNldE51bWJlciBvZmZudW0pCiAgKiBUaGlzIGlzIGJldHRlciB0aGFuIGRl
bGV0aW5nIGFuZCByZWluc2VydGluZyB0aGUgdHVwbGUsIGJlY2F1c2UgaXQKICAqIGF2b2lkcyBh
bnkgZGF0YSBzaGlmdGluZyB3aGVuIHRoZSB0dXBsZSBzaXplIGRvZXNuJ3QgY2hhbmdlOyBhbmQK
ICAqIGV2ZW4gd2hlbiBpdCBkb2VzLCB3ZSBhdm9pZCBtb3ZpbmcgdGhlIGxpbmUgcG9pbnRlcnMg
YXJvdW5kLgotICogQ29uY2VpdmFibHkgdGhpcyBjb3VsZCBhbHNvIGJlIG9mIHVzZSB0byBhbiBp
bmRleCBBTSB0aGF0IGNhcmVzIGFib3V0Ci0gKiB0aGUgcGh5c2ljYWwgb3JkZXIgb2YgdHVwbGVz
IGFzIHdlbGwgYXMgdGhlaXIgSXRlbUlkIG9yZGVyLgorICogVGhpcyBjb3VsZCBiZSB1c2VkIGJ5
IGFuIGluZGV4IEFNIHRoYXQgZG9lc24ndCB3YW50IHRvIHVuc2V0IHRoZQorICogTFBfREVBRCBi
aXQgd2hlbiBpdCBoYXBwZW5zIHRvIGJlIHNldC4gIEl0IGNvdWxkIGNvbmNlaXZhYmx5IGFsc28g
YmUKKyAqIHVzZWQgYnkgYW4gaW5kZXggQU0gdGhhdCBjYXJlcyBhYm91dCB0aGUgcGh5c2ljYWwg
b3JkZXIgb2YgdHVwbGVzIGFzCisgKiB3ZWxsIGFzIHRoZWlyIGxvZ2ljYWwvSXRlbUlkIG9yZGVy
LgogICoKICAqIElmIHRoZXJlJ3MgaW5zdWZmaWNpZW50IHNwYWNlIGZvciB0aGUgbmV3IHR1cGxl
LCByZXR1cm4gZmFsc2UuICBPdGhlcgogICogZXJyb3JzIHJlcHJlc2VudCBkYXRhLWNvcnJ1cHRp
b24gcHJvYmxlbXMsIHNvIHdlIGp1c3QgZWxvZy4KQEAgLTExNDIsNyArMTE0NCw4IEBAIFBhZ2VJ
bmRleFR1cGxlT3ZlcndyaXRlKFBhZ2UgcGFnZSwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAl9CiAK
IAkvKiBVcGRhdGUgdGhlIGl0ZW0ncyB0dXBsZSBsZW5ndGggKG90aGVyIGZpZWxkcyBzaG91bGRu
J3QgY2hhbmdlKSAqLwotCUl0ZW1JZFNldE5vcm1hbCh0dXBpZCwgb2Zmc2V0ICsgc2l6ZV9kaWZm
LCBuZXdzaXplKTsKKwl0dXBpZC0+bHBfb2ZmID0gb2Zmc2V0ICsgc2l6ZV9kaWZmOworCXR1cGlk
LT5scF9sZW4gPSBuZXdzaXplOwogCiAJLyogQ29weSBuZXcgdHVwbGUgZGF0YSBvbnRvIHBhZ2Ug
Ki8KIAltZW1jcHkoUGFnZUdldEl0ZW0ocGFnZSwgdHVwaWQpLCBuZXd0dXAsIG5ld3NpemUpOwpk
aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyBiL3NyYy9iYWNrZW5kL3V0
aWxzL21pc2MvZ3VjLmMKaW5kZXggZTVmOGExMzAxZi4uNzNkYTI3MTZmMiAxMDA2NDQKLS0tIGEv
c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNj
L2d1Yy5jCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvY29tbWl0X3RzLmgi
CiAjaW5jbHVkZSAiYWNjZXNzL2dpbi5oIgorI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKICNp
bmNsdWRlICJhY2Nlc3Mvcm1nci5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5j
bHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKQEAgLTEwOTEsNiArMTA5MiwxNSBAQCBzdGF0aWMgc3Ry
dWN0IGNvbmZpZ19ib29sIENvbmZpZ3VyZU5hbWVzQm9vbFtdID0KIAkJZmFsc2UsCiAJCWNoZWNr
X2JvbmpvdXIsIE5VTEwsIE5VTEwKIAl9LAorCXsKKwkJeyJkZWR1cGxpY2F0ZV9idHJlZV9pdGVt
cyIsIFBHQ19VU0VSU0VULCBDTElFTlRfQ09OTl9TVEFURU1FTlQsCisJCQlnZXR0ZXh0X25vb3Ao
IkVuYWJsZXMgQi10cmVlIGluZGV4IGRlZHVwbGljYXRpb24gb3B0aW1pemF0aW9uLiIpLAorCQkJ
TlVMTAorCQl9LAorCQkmZGVkdXBsaWNhdGVfYnRyZWVfaXRlbXMsCisJCXRydWUsCisJCU5VTEws
IE5VTEwsIE5VTEwKKwl9LAogCXsKIAkJeyJ0cmFja19jb21taXRfdGltZXN0YW1wIiwgUEdDX1BP
U1RNQVNURVIsIFJFUExJQ0FUSU9OLAogCQkJZ2V0dGV4dF9ub29wKCJDb2xsZWN0cyB0cmFuc2Fj
dGlvbiBjb21taXQgdGltZS4iKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv
cG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNx
bC5jb25mLnNhbXBsZQppbmRleCBlMTA0OGMwMDQ3Li5iM2E5ODM0NWZhIDEwMDY0NAotLS0gYS9z
cmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2Jh
Y2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC02NTIsNiArNjUyLDcg
QEAKICN2YWN1dW1fY2xlYW51cF9pbmRleF9zY2FsZV9mYWN0b3IgPSAwLjEJIyBmcmFjdGlvbiBv
ZiB0b3RhbCBudW1iZXIgb2YgdHVwbGVzCiAJCQkJCQkjIGJlZm9yZSBpbmRleCBjbGVhbnVwLCAw
IGFsd2F5cyBwZXJmb3JtcwogCQkJCQkJIyBpbmRleCBjbGVhbnVwCisjZGVkdXBsaWNhdGVfYnRy
ZWVfaXRlbXMgPSBvbgogI2J5dGVhX291dHB1dCA9ICdoZXgnCQkJIyBoZXgsIGVzY2FwZQogI3ht
bGJpbmFyeSA9ICdiYXNlNjQnCiAjeG1sb3B0aW9uID0gJ2NvbnRlbnQnCmRpZmYgLS1naXQgYS9z
cmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMK
aW5kZXggYjUyMzk2YzE3YS4uOTg3ZTY0MDBlMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL3Rh
Yi1jb21wbGV0ZS5jCisrKyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYwpAQCAtMTY4NSwx
NCArMTY4NSwxNCBAQCBwc3FsX2NvbXBsZXRpb24oY29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0
LCBpbnQgZW5kKQogCS8qIEFMVEVSIElOREVYIDxmb28+IFNFVHxSRVNFVCAoICovCiAJZWxzZSBp
ZiAoTWF0Y2hlcygiQUxURVIiLCAiSU5ERVgiLCBNYXRjaEFueSwgIlJFU0VUIiwgIigiKSkKIAkJ
Q09NUExFVEVfV0lUSCgiZmlsbGZhY3RvciIsCi0JCQkJCSAgInZhY3V1bV9jbGVhbnVwX2luZGV4
X3NjYWxlX2ZhY3RvciIsCS8qIEJUUkVFICovCisJCQkJCSAgInZhY3V1bV9jbGVhbnVwX2luZGV4
X3NjYWxlX2ZhY3RvciIsICJkZWR1cGxpY2F0ZV9pdGVtcyIsCS8qIEJUUkVFICovCiAJCQkJCSAg
ImZhc3R1cGRhdGUiLCAiZ2luX3BlbmRpbmdfbGlzdF9saW1pdCIsCS8qIEdJTiAqLwogCQkJCQkg
ICJidWZmZXJpbmciLAkvKiBHaVNUICovCiAJCQkJCSAgInBhZ2VzX3Blcl9yYW5nZSIsICJhdXRv
c3VtbWFyaXplIgkvKiBCUklOICovCiAJCQkpOwogCWVsc2UgaWYgKE1hdGNoZXMoIkFMVEVSIiwg
IklOREVYIiwgTWF0Y2hBbnksICJTRVQiLCAiKCIpKQogCQlDT01QTEVURV9XSVRIKCJmaWxsZmFj
dG9yID0iLAotCQkJCQkgICJ2YWN1dW1fY2xlYW51cF9pbmRleF9zY2FsZV9mYWN0b3IgPSIsCS8q
IEJUUkVFICovCisJCQkJCSAgInZhY3V1bV9jbGVhbnVwX2luZGV4X3NjYWxlX2ZhY3RvciA9Iiwg
ImRlZHVwbGljYXRlX2l0ZW1zID0iLAkvKiBCVFJFRSAqLwogCQkJCQkgICJmYXN0dXBkYXRlID0i
LCAiZ2luX3BlbmRpbmdfbGlzdF9saW1pdCA9IiwJLyogR0lOICovCiAJCQkJCSAgImJ1ZmZlcmlu
ZyA9IiwJLyogR2lTVCAqLwogCQkJCQkgICJwYWdlc19wZXJfcmFuZ2UgPSIsICJhdXRvc3VtbWFy
aXplID0iCS8qIEJSSU4gKi8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0
cmVlLmMgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCmluZGV4IDZhMDU4Y2NkYWMu
LjM1OWI1YzE4ZGMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMK
KysrIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYwpAQCAtMTQ1LDYgKzE0NSw3IEBA
IHN0YXRpYyB2b2lkIGJ0X3R1cGxlX3ByZXNlbnRfY2FsbGJhY2soUmVsYXRpb24gaW5kZXgsIEl0
ZW1Qb2ludGVyIHRpZCwKIAkJCQkJCQkJCSAgYm9vbCB0dXBsZUlzQWxpdmUsIHZvaWQgKmNoZWNr
c3RhdGUpOwogc3RhdGljIEluZGV4VHVwbGUgYnRfbm9ybWFsaXplX3R1cGxlKEJ0cmVlQ2hlY2tT
dGF0ZSAqc3RhdGUsCiAJCQkJCQkJCQkgSW5kZXhUdXBsZSBpdHVwKTsKK3N0YXRpYyBpbmxpbmUg
SW5kZXhUdXBsZSBidF9wb3N0aW5nX3BsYWluX3R1cGxlKEluZGV4VHVwbGUgaXR1cCwgaW50IG4p
Owogc3RhdGljIGJvb2wgYnRfcm9vdGRlc2NlbmQoQnRyZWVDaGVja1N0YXRlICpzdGF0ZSwgSW5k
ZXhUdXBsZSBpdHVwKTsKIHN0YXRpYyBpbmxpbmUgYm9vbCBvZmZzZXRfaXNfbmVnYXRpdmVfaW5m
aW5pdHkoQlRQYWdlT3BhcXVlIG9wYXF1ZSwKIAkJCQkJCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9m
ZnNldCk7CkBAIC0xNjcsNiArMTY4LDcgQEAgc3RhdGljIEl0ZW1JZCBQYWdlR2V0SXRlbUlkQ2Fy
ZWZ1bChCdHJlZUNoZWNrU3RhdGUgKnN0YXRlLCBCbG9ja051bWJlciBibG9jaywKIAkJCQkJCQkJ
ICAgUGFnZSBwYWdlLCBPZmZzZXROdW1iZXIgb2Zmc2V0KTsKIHN0YXRpYyBpbmxpbmUgSXRlbVBv
aW50ZXIgQlRyZWVUdXBsZUdldEhlYXBUSURDYXJlZnVsKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUs
CiAJCQkJCQkJCQkJCQkJICBJbmRleFR1cGxlIGl0dXAsIGJvb2wgbm9ucGl2b3QpOworc3RhdGlj
IGlubGluZSBJdGVtUG9pbnRlciBCVHJlZVR1cGxlR2V0UG9pbnRzVG9USUQoSW5kZXhUdXBsZSBp
dHVwKTsKIAogLyoKICAqIGJ0X2luZGV4X2NoZWNrKGluZGV4IHJlZ2NsYXNzLCBoZWFwYWxsaW5k
ZXhlZCBib29sZWFuKQpAQCAtMjc4LDcgKzI4MCw4IEBAIGJ0X2luZGV4X2NoZWNrX2ludGVybmFs
KE9pZCBpbmRyZWxpZCwgYm9vbCBwYXJlbnRjaGVjaywgYm9vbCBoZWFwYWxsaW5kZXhlZCwKIAog
CWlmIChidHJlZV9pbmRleF9tYWluZm9ya19leHBlY3RlZChpbmRyZWwpKQogCXsKLQkJYm9vbAlo
ZWFwa2V5c3BhY2U7CisJCWJvb2wJCWhlYXBrZXlzcGFjZSwKKwkJCQkJc2FmZWRlZHVwOwogCiAJ
CVJlbGF0aW9uT3BlblNtZ3IoaW5kcmVsKTsKIAkJaWYgKCFzbWdyZXhpc3RzKGluZHJlbC0+cmRf
c21nciwgTUFJTl9GT1JLTlVNKSkKQEAgLTI4OCw3ICsyOTEsNyBAQCBidF9pbmRleF9jaGVja19p
bnRlcm5hbChPaWQgaW5kcmVsaWQsIGJvb2wgcGFyZW50Y2hlY2ssIGJvb2wgaGVhcGFsbGluZGV4
ZWQsCiAJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaW5kcmVsKSkpKTsKIAogCQkvKiBD
aGVjayBpbmRleCwgcG9zc2libHkgYWdhaW5zdCB0YWJsZSBpdCBpcyBhbiBpbmRleCBvbiAqLwot
CQloZWFwa2V5c3BhY2UgPSBfYnRfaGVhcGtleXNwYWNlKGluZHJlbCk7CisJCV9idF9tZXRhdmVy
c2lvbihpbmRyZWwsICZoZWFwa2V5c3BhY2UsICZzYWZlZGVkdXApOwogCQlidF9jaGVja19ldmVy
eV9sZXZlbChpbmRyZWwsIGhlYXByZWwsIGhlYXBrZXlzcGFjZSwgcGFyZW50Y2hlY2ssCiAJCQkJ
CQkJIGhlYXBhbGxpbmRleGVkLCByb290ZGVzY2VuZCk7CiAJfQpAQCAtNDE5LDEyICs0MjIsMTIg
QEAgYnRfY2hlY2tfZXZlcnlfbGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBi
b29sIGhlYXBrZXlzcGFjZSwKIAkJLyoKIAkJICogU2l6ZSBCbG9vbSBmaWx0ZXIgYmFzZWQgb24g
ZXN0aW1hdGVkIG51bWJlciBvZiB0dXBsZXMgaW4gaW5kZXgsCiAJCSAqIHdoaWxlIGNvbnNlcnZh
dGl2ZWx5IGFzc3VtaW5nIHRoYXQgZWFjaCBibG9jayBtdXN0IGNvbnRhaW4gYXQgbGVhc3QKLQkJ
ICogTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC8gNSBub24tcGl2b3QgdHVwbGVzLiAgKE5vbi1sZWFm
IHBhZ2VzIGNhbm5vdAotCQkgKiBjb250YWluIG5vbi1waXZvdCB0dXBsZXMuICBUaGF0J3Mgb2th
eSBiZWNhdXNlIHRoZXkgZ2VuZXJhbGx5IG1ha2UKLQkJICogdXAgbm8gbW9yZSB0aGFuIGFib3V0
IDElIG9mIGFsbCBwYWdlcyBpbiB0aGUgaW5kZXguKQorCQkgKiBNYXhUSURzUGVyQlRyZWVQYWdl
IC8gMyAicGxhaW4iIHR1cGxlcyAtLSBzZWUKKwkJICogYnRfcG9zdGluZ19wbGFpbl90dXBsZSgp
IGZvciBkZWZpbml0aW9uLCBhbmQgZGV0YWlscyBvZiBob3cgcG9zdGluZworCQkgKiBsaXN0IHR1
cGxlcyBhcmUgaGFuZGxlZC4KIAkJICovCiAJCXRvdGFsX3BhZ2VzID0gUmVsYXRpb25HZXROdW1i
ZXJPZkJsb2NrcyhyZWwpOwotCQl0b3RhbF9lbGVtcyA9IE1heCh0b3RhbF9wYWdlcyAqIChNYXhJ
bmRleFR1cGxlc1BlclBhZ2UgLyA1KSwKKwkJdG90YWxfZWxlbXMgPSBNYXgodG90YWxfcGFnZXMg
KiAoTWF4VElEc1BlckJUcmVlUGFnZSAvIDMpLAogCQkJCQkJICAoaW50NjQpIHN0YXRlLT5yZWwt
PnJkX3JlbC0+cmVsdHVwbGVzKTsKIAkJLyogUmFuZG9tIHNlZWQgcmVsaWVzIG9uIGJhY2tlbmQg
c3JhbmRvbSgpIGNhbGwgdG8gYXZvaWQgcmVwZXRpdGlvbiAqLwogCQlzZWVkID0gcmFuZG9tKCk7
CkBAIC05MjQsNiArOTI3LDcgQEAgYnRfdGFyZ2V0X3BhZ2VfY2hlY2soQnRyZWVDaGVja1N0YXRl
ICpzdGF0ZSkKIAkJc2l6ZV90CQl0dXBzaXplOwogCQlCVFNjYW5JbnNlcnQgc2tleTsKIAkJYm9v
bAkJbG93ZXJzaXplbGltaXQ7CisJCUl0ZW1Qb2ludGVyIHNjYW50aWQ7CiAKIAkJQ0hFQ0tfRk9S
X0lOVEVSUlVQVFMoKTsKIApAQCAtOTU0LDEzICs5NTgsMTUgQEAgYnRfdGFyZ2V0X3BhZ2VfY2hl
Y2soQnRyZWVDaGVja1N0YXRlICpzdGF0ZSkKIAkJaWYgKCFfYnRfY2hlY2tfbmF0dHMoc3RhdGUt
PnJlbCwgc3RhdGUtPmhlYXBrZXlzcGFjZSwgc3RhdGUtPnRhcmdldCwKIAkJCQkJCQkgb2Zmc2V0
KSkKIAkJeworCQkJSXRlbVBvaW50ZXIgdGlkOwogCQkJY2hhcgkgICAqaXRpZCwKIAkJCQkJICAg
Kmh0aWQ7CiAKIAkJCWl0aWQgPSBwc3ByaW50ZigiKCV1LCV1KSIsIHN0YXRlLT50YXJnZXRibG9j
aywgb2Zmc2V0KTsKKwkJCXRpZCA9IEJUcmVlVHVwbGVHZXRQb2ludHNUb1RJRChpdHVwKTsKIAkJ
CWh0aWQgPSBwc3ByaW50ZigiKCV1LCV1KSIsCi0JCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051
bWJlck5vQ2hlY2soJihpdHVwLT50X3RpZCkpLAotCQkJCQkJCUl0ZW1Qb2ludGVyR2V0T2Zmc2V0
TnVtYmVyTm9DaGVjaygmKGl0dXAtPnRfdGlkKSkpOworCQkJCQkJCUl0ZW1Qb2ludGVyR2V0Qmxv
Y2tOdW1iZXJOb0NoZWNrKHRpZCksCisJCQkJCQkJSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXJO
b0NoZWNrKHRpZCkpOwogCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RF
X0lOREVYX0NPUlJVUFRFRCksCkBAIC05OTQsMTggKzEwMDAsMjAgQEAgYnRfdGFyZ2V0X3BhZ2Vf
Y2hlY2soQnRyZWVDaGVja1N0YXRlICpzdGF0ZSkKIAogCQkvKgogCQkgKiBSZWFkb25seSBjYWxs
ZXJzIG1heSBvcHRpb25hbGx5IHZlcmlmeSB0aGF0IG5vbi1waXZvdCB0dXBsZXMgY2FuCi0JCSAq
IGVhY2ggYmUgZm91bmQgYnkgYW4gaW5kZXBlbmRlbnQgc2VhcmNoIHRoYXQgc3RhcnRzIGZyb20g
dGhlIHJvb3QKKwkJICogZWFjaCBiZSBmb3VuZCBieSBhbiBpbmRlcGVuZGVudCBzZWFyY2ggdGhh
dCBzdGFydHMgZnJvbSB0aGUgcm9vdC4KKwkJICogTm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSBk
b24ndCBkbyBpbmRpdmlkdWFsIHNlYXJjaGVzIGZvciBlYWNoCisJCSAqIFRJRCwgc2luY2UgdGhl
IHBvc3RpbmcgbGlzdCBpdHNlbGYgaXMgdmFsaWRhdGVkIGJ5IG90aGVyIGNoZWNrcy4KIAkJICov
CiAJCWlmIChzdGF0ZS0+cm9vdGRlc2NlbmQgJiYgUF9JU0xFQUYodG9wYXF1ZSkgJiYKIAkJCSFi
dF9yb290ZGVzY2VuZChzdGF0ZSwgaXR1cCkpCiAJCXsKKwkJCUl0ZW1Qb2ludGVyIHRpZCA9IEJU
cmVlVHVwbGVHZXRQb2ludHNUb1RJRChpdHVwKTsKIAkJCWNoYXIJICAgKml0aWQsCiAJCQkJCSAg
ICpodGlkOwogCiAJCQlpdGlkID0gcHNwcmludGYoIigldSwldSkiLCBzdGF0ZS0+dGFyZ2V0Ymxv
Y2ssIG9mZnNldCk7Ci0JCQlodGlkID0gcHNwcmludGYoIigldSwldSkiLAotCQkJCQkJCUl0ZW1Q
b2ludGVyR2V0QmxvY2tOdW1iZXIoJihpdHVwLT50X3RpZCkpLAotCQkJCQkJCUl0ZW1Qb2ludGVy
R2V0T2Zmc2V0TnVtYmVyKCYoaXR1cC0+dF90aWQpKSk7CisJCQlodGlkID0gcHNwcmludGYoIigl
dSwldSkiLCBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJSXRlbVBvaW50
ZXJHZXRPZmZzZXROdW1iZXIodGlkKSk7CiAKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJj
b2RlKEVSUkNPREVfSU5ERVhfQ09SUlVQVEVEKSwKQEAgLTEwMTcsNiArMTAyNSw0MCBAQCBidF90
YXJnZXRfcGFnZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUgKnN0YXRlKQogCQkJCQkJCQkJCSh1aW50
MzIpIHN0YXRlLT50YXJnZXRsc24pKSk7CiAJCX0KIAorCQkvKgorCQkgKiBJZiB0dXBsZSBpcyBh
IHBvc3RpbmcgbGlzdCB0dXBsZSwgbWFrZSBzdXJlIHBvc3RpbmcgbGlzdCBUSURzIGFyZQorCQkg
KiBpbiBvcmRlcgorCQkgKi8KKwkJaWYgKEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpCisJCXsK
KwkJCUl0ZW1Qb2ludGVyRGF0YSBsYXN0OworCQkJSXRlbVBvaW50ZXIgY3VycmVudDsKKworCQkJ
SXRlbVBvaW50ZXJDb3B5KEJUcmVlVHVwbGVHZXRIZWFwVElEKGl0dXApLCAmbGFzdCk7CisKKwkJ
CWZvciAoaW50IGkgPSAxOyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOyBpKyspCisJ
CQl7CisKKwkJCQljdXJyZW50ID0gQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpOworCisJ
CQkJaWYgKEl0ZW1Qb2ludGVyQ29tcGFyZShjdXJyZW50LCAmbGFzdCkgPD0gMCkKKwkJCQl7CisJ
CQkJCWNoYXIJICAgKml0aWQgPSBwc3ByaW50ZigiKCV1LCV1KSIsIHN0YXRlLT50YXJnZXRibG9j
aywgb2Zmc2V0KTsKKworCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNP
REVfSU5ERVhfQ09SUlVQVEVEKSwKKwkJCQkJCQkgZXJybXNnKCJwb3N0aW5nIGxpc3QgaGVhcCBU
SURzIG91dCBvZiBvcmRlciBpbiBpbmRleCBcIiVzXCIiLAorCQkJCQkJCQkJUmVsYXRpb25HZXRS
ZWxhdGlvbk5hbWUoc3RhdGUtPnJlbCkpLAorCQkJCQkJCSBlcnJkZXRhaWxfaW50ZXJuYWwoIklu
ZGV4IHRpZD0lcyBwb3N0aW5nIGxpc3Qgb2Zmc2V0PSVkIHBhZ2UgbHNuPSVYLyVYLiIsCisJCQkJ
CQkJCQkJCQlpdGlkLCBpLAorCQkJCQkJCQkJCQkJKHVpbnQzMikgKHN0YXRlLT50YXJnZXRsc24g
Pj4gMzIpLAorCQkJCQkJCQkJCQkJKHVpbnQzMikgc3RhdGUtPnRhcmdldGxzbikpKTsKKwkJCQl9
CisKKwkJCQlJdGVtUG9pbnRlckNvcHkoY3VycmVudCwgJmxhc3QpOworCQkJfQorCQl9CisKIAkJ
LyogQnVpbGQgaW5zZXJ0aW9uIHNjYW5rZXkgZm9yIGN1cnJlbnQgcGFnZSBvZmZzZXQgKi8KIAkJ
c2tleSA9IGJ0X21rc2NhbmtleV9waXZvdHNlYXJjaChzdGF0ZS0+cmVsLCBpdHVwKTsKIApAQCAt
MTA0OSwxMyArMTA5MSwxNCBAQCBidF90YXJnZXRfcGFnZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUg
KnN0YXRlKQogCQlpZiAodHVwc2l6ZSA+IChsb3dlcnNpemVsaW1pdCA/IEJUTWF4SXRlbVNpemUo
c3RhdGUtPnRhcmdldCkgOgogCQkJCQkgICBCVE1heEl0ZW1TaXplTm9IZWFwVGlkKHN0YXRlLT50
YXJnZXQpKSkKIAkJeworCQkJSXRlbVBvaW50ZXIgdGlkID0gQlRyZWVUdXBsZUdldFBvaW50c1Rv
VElEKGl0dXApOwogCQkJY2hhcgkgICAqaXRpZCwKIAkJCQkJICAgKmh0aWQ7CiAKIAkJCWl0aWQg
PSBwc3ByaW50ZigiKCV1LCV1KSIsIHN0YXRlLT50YXJnZXRibG9jaywgb2Zmc2V0KTsKIAkJCWh0
aWQgPSBwc3ByaW50ZigiKCV1LCV1KSIsCi0JCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl
ck5vQ2hlY2soJihpdHVwLT50X3RpZCkpLAotCQkJCQkJCUl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVt
YmVyTm9DaGVjaygmKGl0dXAtPnRfdGlkKSkpOworCQkJCQkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tO
dW1iZXJOb0NoZWNrKHRpZCksCisJCQkJCQkJSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXJOb0No
ZWNrKHRpZCkpOwogCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lO
REVYX0NPUlJVUFRFRCksCkBAIC0xMDc0LDEyICsxMTE3LDMyIEBAIGJ0X3RhcmdldF9wYWdlX2No
ZWNrKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUpCiAJCXsKIAkJCUluZGV4VHVwbGUJbm9ybTsKIAot
CQkJbm9ybSA9IGJ0X25vcm1hbGl6ZV90dXBsZShzdGF0ZSwgaXR1cCk7Ci0JCQlibG9vbV9hZGRf
ZWxlbWVudChzdGF0ZS0+ZmlsdGVyLCAodW5zaWduZWQgY2hhciAqKSBub3JtLAotCQkJCQkJCSAg
SW5kZXhUdXBsZVNpemUobm9ybSkpOwotCQkJLyogQmUgdGlkeSAqLwotCQkJaWYgKG5vcm0gIT0g
aXR1cCkKLQkJCQlwZnJlZShub3JtKTsKKwkJCWlmIChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXAp
KQorCQkJeworCQkJCS8qIEZpbmdlcnByaW50IGFsbCBlbGVtZW50cyBhcyBkaXN0aW5jdCAicGxh
aW4iIHR1cGxlcyAqLworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0
aW5nKGl0dXApOyBpKyspCisJCQkJeworCQkJCQlJbmRleFR1cGxlCWxvZ3R1cGxlOworCisJCQkJ
CWxvZ3R1cGxlID0gYnRfcG9zdGluZ19wbGFpbl90dXBsZShpdHVwLCBpKTsKKwkJCQkJbm9ybSA9
IGJ0X25vcm1hbGl6ZV90dXBsZShzdGF0ZSwgbG9ndHVwbGUpOworCQkJCQlibG9vbV9hZGRfZWxl
bWVudChzdGF0ZS0+ZmlsdGVyLCAodW5zaWduZWQgY2hhciAqKSBub3JtLAorCQkJCQkJCQkJICBJ
bmRleFR1cGxlU2l6ZShub3JtKSk7CisJCQkJCS8qIEJlIHRpZHkgKi8KKwkJCQkJaWYgKG5vcm0g
IT0gbG9ndHVwbGUpCisJCQkJCQlwZnJlZShub3JtKTsKKwkJCQkJcGZyZWUobG9ndHVwbGUpOwor
CQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlub3JtID0gYnRfbm9ybWFsaXplX3R1cGxl
KHN0YXRlLCBpdHVwKTsKKwkJCQlibG9vbV9hZGRfZWxlbWVudChzdGF0ZS0+ZmlsdGVyLCAodW5z
aWduZWQgY2hhciAqKSBub3JtLAorCQkJCQkJCQkgIEluZGV4VHVwbGVTaXplKG5vcm0pKTsKKwkJ
CQkvKiBCZSB0aWR5ICovCisJCQkJaWYgKG5vcm0gIT0gaXR1cCkKKwkJCQkJcGZyZWUobm9ybSk7
CisJCQl9CiAJCX0KIAogCQkvKgpAQCAtMTA4Nyw3ICsxMTUwLDggQEAgYnRfdGFyZ2V0X3BhZ2Vf
Y2hlY2soQnRyZWVDaGVja1N0YXRlICpzdGF0ZSkKIAkJICoKIAkJICogSWYgdGhlcmUgaXMgYSBo
aWdoIGtleSAoaWYgdGhpcyBpcyBub3QgdGhlIHJpZ2h0bW9zdCBwYWdlIG9uIGl0cwogCQkgKiBl
bnRpcmUgbGV2ZWwpLCBjaGVjayB0aGF0IGhpZ2gga2V5IGFjdHVhbGx5IGlzIHVwcGVyIGJvdW5k
IG9uIGFsbAotCQkgKiBwYWdlIGl0ZW1zLgorCQkgKiBwYWdlIGl0ZW1zLiAgSWYgdGhpcyBpcyBh
IHBvc3RpbmcgbGlzdCB0dXBsZSwgd2UnbGwgbmVlZCB0byBzZXQKKwkJICogc2NhbnRpZCB0byBi
ZSBoaWdoZXN0IFRJRCBpbiBwb3N0aW5nIGxpc3QuCiAJCSAqCiAJCSAqIFdlIHByZWZlciB0byBj
aGVjayBhbGwgaXRlbXMgYWdhaW5zdCBoaWdoIGtleSByYXRoZXIgdGhhbiBjaGVja2luZwogCQkg
KiBqdXN0IHRoZSBsYXN0IGFuZCB0cnVzdGluZyB0aGF0IHRoZSBvcGVyYXRvciBjbGFzcyBvYmV5
cyB0aGUKQEAgLTExMjcsMTcgKzExOTEsMjIgQEAgYnRfdGFyZ2V0X3BhZ2VfY2hlY2soQnRyZWVD
aGVja1N0YXRlICpzdGF0ZSkKIAkJICogdHVwbGUuIChTZWUgYWxzbzogIk5vdGVzIEFib3V0IERh
dGEgUmVwcmVzZW50YXRpb24iIGluIHRoZSBuYnRyZWUKIAkJICogUkVBRE1FLikKIAkJICovCisJ
CXNjYW50aWQgPSBza2V5LT5zY2FudGlkOworCQlpZiAoc3RhdGUtPmhlYXBrZXlzcGFjZSAmJiBC
VHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKQorCQkJc2tleS0+c2NhbnRpZCA9IEJUcmVlVHVwbGVH
ZXRNYXhIZWFwVElEKGl0dXApOworCiAJCWlmICghUF9SSUdIVE1PU1QodG9wYXF1ZSkgJiYKIAkJ
CSEoUF9JU0xFQUYodG9wYXF1ZSkgPyBpbnZhcmlhbnRfbGVxX29mZnNldChzdGF0ZSwgc2tleSwg
UF9ISUtFWSkgOgogCQkJICBpbnZhcmlhbnRfbF9vZmZzZXQoc3RhdGUsIHNrZXksIFBfSElLRVkp
KSkKIAkJeworCQkJSXRlbVBvaW50ZXIgdGlkID0gQlRyZWVUdXBsZUdldFBvaW50c1RvVElEKGl0
dXApOwogCQkJY2hhcgkgICAqaXRpZCwKIAkJCQkJICAgKmh0aWQ7CiAKIAkJCWl0aWQgPSBwc3By
aW50ZigiKCV1LCV1KSIsIHN0YXRlLT50YXJnZXRibG9jaywgb2Zmc2V0KTsKIAkJCWh0aWQgPSBw
c3ByaW50ZigiKCV1LCV1KSIsCi0JCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlck5vQ2hl
Y2soJihpdHVwLT50X3RpZCkpLAotCQkJCQkJCUl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyTm9D
aGVjaygmKGl0dXAtPnRfdGlkKSkpOworCQkJCQkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXJO
b0NoZWNrKHRpZCksCisJCQkJCQkJSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXJOb0NoZWNrKHRp
ZCkpOwogCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOREVYX0NP
UlJVUFRFRCksCkBAIC0xMTUwLDYgKzEyMTksOCBAQCBidF90YXJnZXRfcGFnZV9jaGVjayhCdHJl
ZUNoZWNrU3RhdGUgKnN0YXRlKQogCQkJCQkJCQkJCSh1aW50MzIpIChzdGF0ZS0+dGFyZ2V0bHNu
ID4+IDMyKSwKIAkJCQkJCQkJCQkodWludDMyKSBzdGF0ZS0+dGFyZ2V0bHNuKSkpOwogCQl9CisJ
CS8qIFJlc2V0LCBpbiBjYXNlIHNjYW50aWQgd2FzIHNldCB0byAoaXR1cCkgcG9zdGluZyB0dXBs
ZSdzIG1heCBUSUQgKi8KKwkJc2tleS0+c2NhbnRpZCA9IHNjYW50aWQ7CiAKIAkJLyoKIAkJICog
KiBJdGVtIG9yZGVyIGNoZWNrICoKQEAgLTExNjAsMTUgKzEyMzEsMTcgQEAgYnRfdGFyZ2V0X3Bh
Z2VfY2hlY2soQnRyZWVDaGVja1N0YXRlICpzdGF0ZSkKIAkJaWYgKE9mZnNldE51bWJlck5leHQo
b2Zmc2V0KSA8PSBtYXggJiYKIAkJCSFpbnZhcmlhbnRfbF9vZmZzZXQoc3RhdGUsIHNrZXksIE9m
ZnNldE51bWJlck5leHQob2Zmc2V0KSkpCiAJCXsKKwkJCUl0ZW1Qb2ludGVyIHRpZDsKIAkJCWNo
YXIJICAgKml0aWQsCiAJCQkJCSAgICpodGlkLAogCQkJCQkgICAqbml0aWQsCiAJCQkJCSAgICpu
aHRpZDsKIAogCQkJaXRpZCA9IHBzcHJpbnRmKCIoJXUsJXUpIiwgc3RhdGUtPnRhcmdldGJsb2Nr
LCBvZmZzZXQpOworCQkJdGlkID0gQlRyZWVUdXBsZUdldFBvaW50c1RvVElEKGl0dXApOwogCQkJ
aHRpZCA9IHBzcHJpbnRmKCIoJXUsJXUpIiwKLQkJCQkJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVt
YmVyTm9DaGVjaygmKGl0dXAtPnRfdGlkKSksCi0JCQkJCQkJSXRlbVBvaW50ZXJHZXRPZmZzZXRO
dW1iZXJOb0NoZWNrKCYoaXR1cC0+dF90aWQpKSk7CisJCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9j
a051bWJlck5vQ2hlY2sodGlkKSwKKwkJCQkJCQlJdGVtUG9pbnRlckdldE9mZnNldE51bWJlck5v
Q2hlY2sodGlkKSk7CiAJCQluaXRpZCA9IHBzcHJpbnRmKCIoJXUsJXUpIiwgc3RhdGUtPnRhcmdl
dGJsb2NrLAogCQkJCQkJCSBPZmZzZXROdW1iZXJOZXh0KG9mZnNldCkpOwogCkBAIC0xMTc3LDkg
KzEyNTAsMTAgQEAgYnRfdGFyZ2V0X3BhZ2VfY2hlY2soQnRyZWVDaGVja1N0YXRlICpzdGF0ZSkK
IAkJCQkJCQkJCQkgIHN0YXRlLT50YXJnZXQsCiAJCQkJCQkJCQkJICBPZmZzZXROdW1iZXJOZXh0
KG9mZnNldCkpOwogCQkJaXR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShzdGF0ZS0+dGFy
Z2V0LCBpdGVtaWQpOworCQkJdGlkID0gQlRyZWVUdXBsZUdldFBvaW50c1RvVElEKGl0dXApOwog
CQkJbmh0aWQgPSBwc3ByaW50ZigiKCV1LCV1KSIsCi0JCQkJCQkJIEl0ZW1Qb2ludGVyR2V0Qmxv
Y2tOdW1iZXJOb0NoZWNrKCYoaXR1cC0+dF90aWQpKSwKLQkJCQkJCQkgSXRlbVBvaW50ZXJHZXRP
ZmZzZXROdW1iZXJOb0NoZWNrKCYoaXR1cC0+dF90aWQpKSk7CisJCQkJCQkJIEl0ZW1Qb2ludGVy
R2V0QmxvY2tOdW1iZXJOb0NoZWNrKHRpZCksCisJCQkJCQkJIEl0ZW1Qb2ludGVyR2V0T2Zmc2V0
TnVtYmVyTm9DaGVjayh0aWQpKTsKIAogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUo
RVJSQ09ERV9JTkRFWF9DT1JSVVBURUQpLApAQCAtMTk1MywxMCArMjAyNyw5IEBAIGJ0X3R1cGxl
X3ByZXNlbnRfY2FsbGJhY2soUmVsYXRpb24gaW5kZXgsIEl0ZW1Qb2ludGVyIHRpZCwgRGF0dW0g
KnZhbHVlcywKICAqIHZlcmlmaWNhdGlvbi4gIEluIHBhcnRpY3VsYXIsIGl0IHdvbid0IHRyeSB0
byBub3JtYWxpemUgb3BjbGFzcy1lcXVhbAogICogZGF0dW1zIHdpdGggcG90ZW50aWFsbHkgZGlz
dGluY3QgcmVwcmVzZW50YXRpb25zIChlLmcuLCBidHJlZS9udW1lcmljX29wcwogICogaW5kZXgg
ZGF0dW1zIHdpbGwgbm90IGdldCB0aGVpciBkaXNwbGF5IHNjYWxlIG5vcm1hbGl6ZWQtYXdheSBo
ZXJlKS4KLSAqIE5vcm1hbGl6YXRpb24gbWF5IG5lZWQgdG8gYmUgZXhwYW5kZWQgdG8gaGFuZGxl
IG1vcmUgY2FzZXMgaW4gdGhlIGZ1dHVyZSwKLSAqIHRob3VnaC4gIEZvciBleGFtcGxlLCBpdCdz
IHBvc3NpYmxlIHRoYXQgbm9uLXBpdm90IHR1cGxlcyBjb3VsZCBpbiB0aGUKLSAqIGZ1dHVyZSBo
YXZlIGFsdGVybmF0aXZlIGxvZ2ljYWxseSBlcXVpdmFsZW50IHJlcHJlc2VudGF0aW9ucyBkdWUg
dG8gdXNpbmcKLSAqIHRoZSBJTkRFWF9BTFRfVElEX01BU0sgYml0IHRvIGltcGxlbWVudCBpbnRl
bGxpZ2VudCBkZWR1cGxpY2F0aW9uLgorICogQ2FsbGVyIGRvZXMgbm9ybWFsaXphdGlvbiBmb3Ig
bm9uLXBpdm90IHR1cGxlcyB0aGF0IGhhdmUgYSBwb3N0aW5nIGxpc3QsCisgKiBzaW5jZSBkdW1t
eSBDUkVBVEUgSU5ERVggY2FsbGJhY2sgY29kZSBnZW5lcmF0ZXMgbmV3IHR1cGxlcyB3aXRoIHRo
ZSBzYW1lCisgKiBub3JtYWxpemVkIHJlcHJlc2VudGF0aW9uLgogICovCiBzdGF0aWMgSW5kZXhU
dXBsZQogYnRfbm9ybWFsaXplX3R1cGxlKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUsIEluZGV4VHVw
bGUgaXR1cCkKQEAgLTE5NjksNiArMjA0Miw5IEBAIGJ0X25vcm1hbGl6ZV90dXBsZShCdHJlZUNo
ZWNrU3RhdGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXApCiAJSW5kZXhUdXBsZQlyZWZvcm1lZDsK
IAlpbnQJCQlpOwogCisJLyogQ2FsbGVyIHNob3VsZCBvbmx5IHBhc3MgImxvZ2ljYWwiIG5vbi1w
aXZvdCB0dXBsZXMgaGVyZSAqLworCUFzc2VydCghQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSAm
JiAhQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkpOworCiAJLyogRWFzeSBjYXNlOiBJdCdzIGltbWVk
aWF0ZWx5IGNsZWFyIHRoYXQgdHVwbGUgaGFzIG5vIHZhcmxlbmEgZGF0dW1zICovCiAJaWYgKCFJ
bmRleFR1cGxlSGFzVmFyd2lkdGhzKGl0dXApKQogCQlyZXR1cm4gaXR1cDsKQEAgLTIwMzEsNiAr
MjEwNywyOSBAQCBidF9ub3JtYWxpemVfdHVwbGUoQnRyZWVDaGVja1N0YXRlICpzdGF0ZSwgSW5k
ZXhUdXBsZSBpdHVwKQogCXJldHVybiByZWZvcm1lZDsKIH0KIAorLyoKKyAqIFByb2R1Y2UgcGFs
bG9jKCknZCAicGxhaW4iIHR1cGxlIGZvciBudGggcG9zdGluZyBsaXN0IGVudHJ5L1RJRC4KKyAq
CisgKiBJbiBnZW5lcmFsLCBkZWR1cGxpY2F0aW9uIGlzIG5vdCBzdXBwb3NlZCB0byBjaGFuZ2Ug
dGhlIGxvZ2ljYWwgY29udGVudHMgb2YKKyAqIGFuIGluZGV4LiAgTXVsdGlwbGUgaW5kZXggdHVw
bGVzIGFyZSBtZXJnZWQgdG9nZXRoZXIgaW50byBvbmUgZXF1aXZhbGVudAorICogcG9zdGluZyBs
aXN0IGluZGV4IHR1cGxlIHdoZW4gY29udmVuaWVudC4KKyAqCisgKiBoZWFwYWxsaW5kZXhlZCB2
ZXJpZmljYXRpb24gbXVzdCBub3JtYWxpemUtYXdheSB0aGlzIHZhcmlhdGlvbiBpbgorICogcmVw
cmVzZW50YXRpb24gYnkgY29udmVydGluZyBwb3N0aW5nIGxpc3QgdHVwbGVzIGludG8gdHdvIG9y
IG1vcmUgInBsYWluIgorICogdHVwbGVzLiAgRWFjaCB0dXBsZSBtdXN0IGJlIGZpbmdlcnByaW50
ZWQgc2VwYXJhdGVseSAtLSB0aGVyZSBtdXN0IGJlIG9uZQorICogdHVwbGUgZm9yIGVhY2ggY29y
cmVzcG9uZGluZyBCbG9vbSBmaWx0ZXIgcHJvYmUgZHVyaW5nIHRoZSBoZWFwIHNjYW4uCisgKgor
ICogTm90ZTogQ2FsbGVyIHN0aWxsIG5lZWRzIHRvIGNhbGwgYnRfbm9ybWFsaXplX3R1cGxlKCkg
d2l0aCByZXR1cm5lZCB0dXBsZS4KKyAqLworc3RhdGljIGlubGluZSBJbmRleFR1cGxlCitidF9w
b3N0aW5nX3BsYWluX3R1cGxlKEluZGV4VHVwbGUgaXR1cCwgaW50IG4pCit7CisJQXNzZXJ0KEJU
cmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpOworCisJLyogUmV0dXJucyBub24tcG9zdGluZy1saXN0
IHR1cGxlICovCisJcmV0dXJuIF9idF9mb3JtX3Bvc3RpbmcoaXR1cCwgQlRyZWVUdXBsZUdldFBv
c3RpbmdOKGl0dXAsIG4pLCAxKTsKK30KKwogLyoKICAqIFNlYXJjaCBmb3IgaXR1cCBpbiBpbmRl
eCwgc3RhcnRpbmcgZnJvbSBmYXN0IHJvb3QgcGFnZS4gIGl0dXAgbXVzdCBiZSBhCiAgKiBub24t
cGl2b3QgdHVwbGUuICBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIHdpdGggaGVhcGtleXNwYWNlIGlu
ZGV4ZXMsIHNpbmNlCkBAIC0yMDg3LDYgKzIxODYsNyBAQCBidF9yb290ZGVzY2VuZChCdHJlZUNo
ZWNrU3RhdGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXApCiAJCWluc2VydHN0YXRlLml0dXAgPSBp
dHVwOwogCQlpbnNlcnRzdGF0ZS5pdGVtc3ogPSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShpdHVw
KSk7CiAJCWluc2VydHN0YXRlLml0dXBfa2V5ID0ga2V5OworCQlpbnNlcnRzdGF0ZS5wb3N0aW5n
b2ZmID0gMDsKIAkJaW5zZXJ0c3RhdGUuYm91bmRzX3ZhbGlkID0gZmFsc2U7CiAJCWluc2VydHN0
YXRlLmJ1ZiA9IGxidWY7CiAKQEAgLTIwOTQsNyArMjE5NCw5IEBAIGJ0X3Jvb3RkZXNjZW5kKEJ0
cmVlQ2hlY2tTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCkKIAkJb2ZmbnVtID0gX2J0X2Jp
bnNyY2hfaW5zZXJ0KHN0YXRlLT5yZWwsICZpbnNlcnRzdGF0ZSk7CiAJCS8qIENvbXBhcmUgZmly
c3QgPj0gbWF0Y2hpbmcgaXRlbSBvbiBsZWFmIHBhZ2UsIGlmIGFueSAqLwogCQlwYWdlID0gQnVm
ZmVyR2V0UGFnZShsYnVmKTsKKwkJLyogU2hvdWxkIG1hdGNoIG9uIGZpcnN0IGhlYXAgVElEIHdo
ZW4gdHVwbGUgaGFzIGEgcG9zdGluZyBsaXN0ICovCiAJCWlmIChvZmZudW0gPD0gUGFnZUdldE1h
eE9mZnNldE51bWJlcihwYWdlKSAmJgorCQkJaW5zZXJ0c3RhdGUucG9zdGluZ29mZiA8PSAwICYm
CiAJCQlfYnRfY29tcGFyZShzdGF0ZS0+cmVsLCBrZXksIHBhZ2UsIG9mZm51bSkgPT0gMCkKIAkJ
CWV4aXN0cyA9IHRydWU7CiAJCV9idF9yZWxidWYoc3RhdGUtPnJlbCwgbGJ1Zik7CkBAIC0yNTQ4
LDI2ICsyNjUwLDY5IEBAIFBhZ2VHZXRJdGVtSWRDYXJlZnVsKEJ0cmVlQ2hlY2tTdGF0ZSAqc3Rh
dGUsIEJsb2NrTnVtYmVyIGJsb2NrLCBQYWdlIHBhZ2UsCiB9CiAKIC8qCi0gKiBCVHJlZVR1cGxl
R2V0SGVhcFRJRCgpIHdyYXBwZXIgdGhhdCBsZXRzIGNhbGxlciBlbmZvcmNlIHRoYXQgYSBoZWFw
IFRJRCBtdXN0Ci0gKiBiZSBwcmVzZW50IGluIGNhc2VzIHdoZXJlIHRoYXQgaXMgbWFuZGF0b3J5
LgotICoKLSAqIFRoaXMgZG9lc24ndCBhZGQgbXVjaCBhcyBvZiBCVFJFRV9WRVJTSU9OIDQsIHNp
bmNlIHRoZSBJTkRFWF9BTFRfVElEX01BU0sKLSAqIGJpdCBpcyBlZmZlY3RpdmVseSBhIHByb3h5
IGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgdHVwbGUgaXMgYSBwaXZvdCB0dXBsZS4KLSAqIEl0IG1h
eSBiZWNvbWUgbW9yZSB1c2VmdWwgaW4gdGhlIGZ1dHVyZSwgd2hlbiBub24tcGl2b3QgdHVwbGVz
IHN1cHBvcnQgdGhlaXIKLSAqIG93biBhbHRlcm5hdGl2ZSBJTkRFWF9BTFRfVElEX01BU0sgcmVw
cmVzZW50YXRpb24uCisgKiBCVHJlZVR1cGxlR2V0SGVhcFRJRCgpIHdyYXBwZXIgdGhhdCBlbmZv
cmNlcyB0aGF0IGEgaGVhcCBUSUQgaXMgcHJlc2VudCBpbgorICogY2FzZXMgd2hlcmUgdGhhdCBp
cyBtYW5kYXRvcnkgKGkuZS4gZm9yIG5vbi1waXZvdCB0dXBsZXMpCiAgKi8KIHN0YXRpYyBpbmxp
bmUgSXRlbVBvaW50ZXIKIEJUcmVlVHVwbGVHZXRIZWFwVElEQ2FyZWZ1bChCdHJlZUNoZWNrU3Rh
dGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXAsCiAJCQkJCQkJYm9vbCBub25waXZvdCkKIHsKLQlJ
dGVtUG9pbnRlciByZXN1bHQgPSBCVHJlZVR1cGxlR2V0SGVhcFRJRChpdHVwKTsKLQlCbG9ja051
bWJlciB0YXJnZXRibG9jayA9IHN0YXRlLT50YXJnZXRibG9jazsKKwlJdGVtUG9pbnRlciBodGlk
OwogCi0JaWYgKHJlc3VsdCA9PSBOVUxMICYmIG5vbnBpdm90KQorCS8qCisJICogQ2FsbGVyIGRl
dGVybWluZXMgd2hldGhlciB0aGlzIGlzIHN1cHBvc2VkIHRvIGJlIGEgcGl2b3Qgb3Igbm9uLXBp
dm90CisJICogdHVwbGUgdXNpbmcgcGFnZSB0eXBlIGFuZCBpdGVtIG9mZnNldCBudW1iZXIuICBW
ZXJpZnkgdGhhdCB0dXBsZQorCSAqIG1ldGFkYXRhIGFncmVlcyB3aXRoIHRoaXMuCisJICovCisJ
QXNzZXJ0KHN0YXRlLT5oZWFwa2V5c3BhY2UpOworCWlmIChCVHJlZVR1cGxlSXNQaXZvdChpdHVw
KSAmJiBub25waXZvdCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lO
REVYX0NPUlJVUFRFRCksCisJCQkJIGVycm1zZ19pbnRlcm5hbCgiYmxvY2sgJXUgb3IgaXRzIHJp
Z2h0IHNpYmxpbmcgYmxvY2sgb3IgY2hpbGQgYmxvY2sgaW4gaW5kZXggXCIlc1wiIGhhcyB1bmV4
cGVjdGVkIHBpdm90IHR1cGxlIiwKKwkJCQkJCQkJIHN0YXRlLT50YXJnZXRibG9jaywKKwkJCQkJ
CQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5yZWwpKSkpOworCisJaWYgKCFCVHJl
ZVR1cGxlSXNQaXZvdChpdHVwKSAmJiAhbm9ucGl2b3QpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ
KGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JSVVBURUQpLAorCQkJCSBlcnJtc2dfaW50ZXJuYWwo
ImJsb2NrICV1IG9yIGl0cyByaWdodCBzaWJsaW5nIGJsb2NrIG9yIGNoaWxkIGJsb2NrIGluIGlu
ZGV4IFwiJXNcIiBoYXMgdW5leHBlY3RlZCBub24tcGl2b3QgdHVwbGUiLAorCQkJCQkJCQkgc3Rh
dGUtPnRhcmdldGJsb2NrLAorCQkJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc3RhdGUt
PnJlbCkpKSk7CisKKwlodGlkID0gQlRyZWVUdXBsZUdldEhlYXBUSUQoaXR1cCk7CisJaWYgKCFJ
dGVtUG9pbnRlcklzVmFsaWQoaHRpZCkgJiYgbm9ucGl2b3QpCiAJCWVyZXBvcnQoRVJST1IsCiAJ
CQkJKGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JSVVBURUQpLAogCQkJCSBlcnJtc2coImJsb2Nr
ICV1IG9yIGl0cyByaWdodCBzaWJsaW5nIGJsb2NrIG9yIGNoaWxkIGJsb2NrIGluIGluZGV4IFwi
JXNcIiBjb250YWlucyBub24tcGl2b3QgdHVwbGUgdGhhdCBsYWNrcyBhIGhlYXAgVElEIiwKLQkJ
CQkJCXRhcmdldGJsb2NrLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzdGF0ZS0+cmVsKSkpKTsK
KwkJCQkJCXN0YXRlLT50YXJnZXRibG9jaywKKwkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1l
KHN0YXRlLT5yZWwpKSkpOwogCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gaHRpZDsKK30KKwor
LyoKKyAqIFJldHVybiB0aGUgInBvaW50ZWQgdG8iIFRJRCBmb3IgaXR1cCwgd2hpY2ggaXMgdXNl
ZCB0byBnZW5lcmF0ZSBhCisgKiBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlLiAgaXR1cCBtdXN0
IGJlIGEgImRhdGEgaXRlbSIgdHVwbGUgKGl0IHdvdWxkbid0CisgKiBtYWtlIG11Y2ggc2Vuc2Ug
dG8gY2FsbCBoZXJlIHdpdGggYSBoaWdoIGtleSB0dXBsZSwgc2luY2UgdGhlcmUgd29uJ3QgYmUg
YQorICogdmFsaWQgZG93bmxpbmsvYmxvY2sgbnVtYmVyIHRvIGRpc3BsYXkpLgorICoKKyAqIFJl
dHVybnMgZWl0aGVyIGEgaGVhcCBUSUQgKHdoaWNoIHdpbGwgYmUgdGhlIGZpcnN0IGhlYXAgVElE
IGluIHBvc3RpbmcgbGlzdAorICogaWYgaXR1cCBpcyBwb3N0aW5nIGxpc3QgdHVwbGUpLCBvciBh
IFRJRCB0aGF0IGNvbnRhaW5zIGRvd25saW5rIGJsb2NrCisgKiBudW1iZXIsIHBsdXMgc29tZSBl
bmNvZGVkIG1ldGFkYXRhIChlLmcuLCB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgcHJlc2VudAor
ICogaW4gaXR1cCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgSXRlbVBvaW50ZXIKK0JUcmVlVHVwbGVH
ZXRQb2ludHNUb1RJRChJbmRleFR1cGxlIGl0dXApCit7CisJLyoKKwkgKiBSZWx5IG9uIHRoZSBh
c3N1bXB0aW9uIHRoYXQgIWhlYXBrZXlzcGFjZSBpbnRlcm5hbCBwYWdlIGRhdGEgaXRlbXMgd2ls
bAorCSAqIGNvcnJlY3RseSByZXR1cm4gVElEIHdpdGggZG93bmxpbmsgaGVyZSAtLSBCVHJlZVR1
cGxlR2V0SGVhcFRJRCgpIHdvbid0CisJICogcmVjb2duaXplIGl0IGFzIGEgcGl2b3QgdHVwbGUs
IGJ1dCBldmVyeXRoaW5nIHN0aWxsIHdvcmtzIG91dCBiZWNhdXNlCisJICogdGhlIHRfdGlkIGZp
ZWxkIGlzIHN0aWxsIHJldHVybmVkCisJICovCisJaWYgKCFCVHJlZVR1cGxlSXNQaXZvdChpdHVw
KSkKKwkJcmV0dXJuIEJUcmVlVHVwbGVHZXRIZWFwVElEKGl0dXApOworCisJLyogUGl2b3QgdHVw
bGUgcmV0dXJucyBUSUQgd2l0aCBkb3dubGluayBibG9jayAoaGVhcGtleXNwYWNlIHZhcmlhbnQp
ICovCisJcmV0dXJuICZpdHVwLT50X3RpZDsKIH0KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9i
dHJlZS5zZ21sIGIvZG9jL3NyYy9zZ21sL2J0cmVlLnNnbWwKaW5kZXggNTg4MWVhNWRkNi4uZGE3
MDA3MTM1ZCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2J0cmVlLnNnbWwKKysrIGIvZG9jL3Ny
Yy9zZ21sL2J0cmVlLnNnbWwKQEAgLTQzMywxMSArNDMzLDEyNyBAQCByZXR1cm5zIGJvb2wKIDxz
ZWN0MSBpZD0iYnRyZWUtaW1wbGVtZW50YXRpb24iPgogIDx0aXRsZT5JbXBsZW1lbnRhdGlvbjwv
dGl0bGU+CiAKKyA8cGFyYT4KKyAgSW50ZXJuYWxseSwgYSBCLXRyZWUgaW5kZXggY29uc2lzdHMg
b2YgYSB0cmVlIHN0cnVjdHVyZSB3aXRoIGxlYWYKKyAgcGFnZXMuICBFYWNoIGxlYWYgcGFnZSBj
b250YWlucyB0dXBsZXMgdGhhdCBwb2ludCB0byB0YWJsZSBlbnRyaWVzCisgIHVzaW5nIGEgaGVh
cCBpdGVtIHBvaW50ZXIuICBFYWNoIHR1cGxlJ3Mga2V5IGlzIGNvbnNpZGVyZWQgdW5pcXVlCisg
IGludGVybmFsbHksIHNpbmNlIHRoZSBpdGVtIHBvaW50ZXIgaXMgdHJlYXRlZCBhcyBwYXJ0IG9m
IHRoZSBrZXkuCisgPC9wYXJhPgorIDxwYXJhPgorICBBbiBpbnRyb2R1Y3Rpb24gdG8gdGhlIGJ0
cmVlIGluZGV4IGltcGxlbWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpbgorICA8ZmlsZW5hbWU+c3Jj
L2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUU8L2ZpbGVuYW1lPi4KKyA8L3BhcmE+CisKKyA8
c2VjdDIgaWQ9ImJ0cmVlLWRlZHVwbGljYXRpb24iPgorICA8dGl0bGU+RGVkdXBsaWNhdGlvbjwv
dGl0bGU+CiAgIDxwYXJhPgotICAgQW4gaW50cm9kdWN0aW9uIHRvIHRoZSBidHJlZSBpbmRleCBp
bXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4KLSAgIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9h
Y2Nlc3MvbmJ0cmVlL1JFQURNRTwvZmlsZW5hbWU+LgorICAgQi1UcmVlIHN1cHBvcnRzIDxmaXJz
dHRlcm0+ZGVkdXBsaWNhdGlvbjwvZmlyc3R0ZXJtPi4gIEV4aXN0aW5nCisgICBsZWFmIHBhZ2Ug
dHVwbGVzIHdpdGggZnVsbHkgZXF1YWwga2V5cyAoZXF1YWwgcHJpb3IgdG8gdGhlIGhlYXAKKyAg
IGl0ZW0gcG9pbnRlcikgYXJlIG1lcmdlZCB0b2dldGhlciBpbnRvIGEgc2luZ2xlIDxxdW90ZT5w
b3N0aW5nCisgICBsaXN0PC9xdW90ZT4gdHVwbGUuICBUaGUga2V5cyBhcHBlYXIgb25seSBvbmNl
IGluIHRoaXMKKyAgIHJlcHJlc2VudGF0aW9uLiAgQSBzaW1wbGUgYXJyYXkgb2YgaGVhcCBpdGVt
IHBvaW50ZXJzIGZvbGxvd3MuCisgICBQb3N0aW5nIGxpc3RzIGFyZSBmb3JtZWQgPHF1b3RlPmxh
emlseTwvcXVvdGU+LCB3aGVuIGEgbmV3IGl0ZW0gaXMKKyAgIGluc2VydGVkIHRoYXQgY2Fubm90
IGZpdCBvbiBhbiBleGlzdGluZyBsZWFmIHBhZ2UuICBUaGUgaW1tZWRpYXRlCisgICBnb2FsIG9m
IHRoZSBkZWR1cGxpY2F0aW9uIHByb2Nlc3MgaXMgdG8gYXQgbGVhc3QgZnJlZSBlbm91Z2ggc3Bh
Y2UKKyAgIHRvIGZpdCB0aGUgbmV3IGl0ZW07IG90aGVyd2lzZSBhIGxlYWYgcGFnZSBzcGxpdCBv
Y2N1cnMsIHdoaWNoCisgICBhbGxvY2F0ZXMgYSBuZXcgbGVhZiBwYWdlLiAgVGhlIDxmaXJzdHRl
cm0+a2V5IHNwYWNlPC9maXJzdHRlcm0+CisgICBjb3ZlcmVkIGJ5IHRoZSBvcmlnaW5hbCBsZWFm
IHBhZ2UgaXMgc2hhcmVkIGFtb25nIHRoZSBvcmlnaW5hbCBwYWdlLAorICAgYW5kIGl0cyBuZXcg
cmlnaHQgc2libGluZyBwYWdlLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgQSBkdXBsaWNhdGUg
aXMgYSByb3cgd2hlcmUgPGVtcGhhc2lzPmFsbDwvZW1waGFzaXM+IGluZGV4ZWQga2V5CisgICBj
b2x1bW5zIGFyZSBlcXVhbCB0byB0aGUgY29ycmVzcG9uZGluZyBjb2x1bW4gdmFsdWVzIGZyb20g
c29tZQorICAgb3RoZXIgcm93LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgRGVkdXBsaWNhdGlv
biBjYW4gZ3JlYXRseSBpbmNyZWFzZSBpbmRleCBzcGFjZSBlZmZpY2llbmN5IHdpdGggZGF0YQor
ICAgc2V0cyB3aGVyZSBlYWNoIGRpc3RpbmN0IGtleSBhcHBlYXJzIGF0IGxlYXN0IGEgZmV3IHRp
bWVzIG9uCisgICBhdmVyYWdlLiAgSXQgY2FuIGFsc28gcmVkdWNlIHRoZSBjb3N0IG9mIHN1YnNl
cXVlbnQgaW5kZXggc2NhbnMsCisgICBlc3BlY2lhbGx5IHdoZW4gbWFueSBsZWFmIHBhZ2VzIG11
c3QgYmUgYWNjZXNzZWQuICBGb3IgZXhhbXBsZSwgYW4KKyAgIGluZGV4IG9uIGEgc2ltcGxlIDx0
eXBlPmludGVnZXI8L3R5cGU+IGNvbHVtbiB0aGF0IHVzZXMKKyAgIGRlZHVwbGljYXRpb24gd2ls
bCBoYXZlIGEgc3RvcmFnZSBzaXplIHRoYXQgaXMgb25seSBhYm91dCA2NSUgb2YgYW4KKyAgIGVx
dWl2YWxlbnQgdW5vcHRpbWl6ZWQgaW5kZXggd2hlbiBlYWNoIGRpc3RpbmN0CisgICA8dHlwZT5p
bnRlZ2VyPC90eXBlPiB2YWx1ZSBhcHBlYXJzIHRocmVlIHRpbWVzLiAgSWYgZWFjaCBkaXN0aW5j
dAorICAgPHR5cGU+aW50ZWdlcjwvdHlwZT4gdmFsdWUgYXBwZWFycyBzaXggdGltZXMsIHRoZSBz
dG9yYWdlIG92ZXJoZWFkCisgICBjYW4gYmUgYXMgbG93IGFzIDUwJSBvZiBiYXNlbGluZS4gIFdp
dGggaHVuZHJlZHMgb2YgZHVwbGljYXRlcyBwZXIKKyAgIGRpc3RpbmN0IHZhbHVlIChvciB3aXRo
IGxhcmdlciA8cXVvdGU+YmFzZTwvcXVvdGU+IGtleSB2YWx1ZXMpLCBhCisgICBzdG9yYWdlIHNp
emUgb2YgYWJvdXQgb25lIHRoaXJkIG9mIHRoZSB1bm9wdGltaXplZCBjYXNlIGlzCisgICBleHBl
Y3RlZC4gIFRoZXJlIGlzIHVzdWFsbHkgYSBkaXJlY3QgYmVuZWZpdCBmb3IgcXVlcmllcywgYXMg
d2VsbAorICAgYXMgYW4gaW5kaXJlY3QgYmVuZWZpdCBkdWUgdG8gcmVkdWNlZCBJL08gZHVyaW5n
IHJvdXRpbmUgdmFjdXVtaW5nLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgQ2FzZXMgdGhhdCBk
b24ndCBiZW5lZml0IGR1ZSB0byBoYXZpbmcgbm8gZHVwbGljYXRlIHZhbHVlcyB3aWxsCisgICBp
bmN1ciBhIHNtYWxsIHBlcmZvcm1hbmNlIHBlbmFsdHkgd2l0aCBtaXhlZCByZWFkLXdyaXRlIHdv
cmtsb2Fkcy4KKyAgIFRoZXJlIGlzIG5vIHBlcmZvcm1hbmNlIHBlbmFsdHkgd2l0aCByZWFkLW9u
bHkgd29ya2xvYWRzLCBzaW5jZQorICAgcmVhZGluZyBmcm9tIHBvc3RpbmcgbGlzdHMgaXMgYXQg
bGVhc3QgYXMgZWZmaWNpZW50IGFzIHJlYWRpbmcgdGhlCisgICBzdGFuZGFyZCBpbmRleCB0dXBs
ZSByZXByZXNlbnRhdGlvbi4KKyAgPC9wYXJhPgorIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9ImJ0
cmVlLWRlZHVwbGljYXRpb24tY29uZmlndXJlIj4KKyAgPHRpdGxlPkNvbmZpZ3VyaW5nIERlZHVw
bGljYXRpb248L3RpdGxlPgorCisgIDxwYXJhPgorICAgVGhlIDx4cmVmIGxpbmtlbmQ9Imd1Yy1i
dHJlZS1kZWR1cGxpY2F0ZS1pdGVtcyIvPiBjb25maWd1cmF0aW9uCisgICBwYXJhbWV0ZXIgY29u
dHJvbHMgZGVkdXBsaWNhdGlvbi4gIEJ5IGRlZmF1bHQsIGRlZHVwbGljYXRpb24gaXMKKyAgIGVu
YWJsZWQuICBUaGUgPGxpdGVyYWw+ZGVkdXBsaWNhdGVfaXRlbXM8L2xpdGVyYWw+IHN0b3JhZ2UK
KyAgIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgY29uZmlndXJhdGlvbiBw
YXJhbWF0ZXIgZm9yCisgICBpbmRpdmlkdWFsIGluZGV4ZXMuICBTZWUgPHhyZWYKKyAgIGxpbmtl
bmQ9InNxbC1jcmVhdGVpbmRleC1zdG9yYWdlLXBhcmFtZXRlcnMiLz4gZnJvbSB0aGUKKyAgIDxj
b21tYW5kPkNSRUFURSBJTkRFWDwvY29tbWFuZD4gZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4K
KyAgPC9wYXJhPgorIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9ImJ0cmVlLWRlZHVwbGljYXRpb24t
cmVzdHJpY3Rpb25zIj4KKyAgPHRpdGxlPlJlc3RyaWN0aW9uczwvdGl0bGU+CisKKyAgPHBhcmE+
CisgICBEZWR1cGxpY2F0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBhIEItVHJlZSBpbmRleCB3
aGVuCisgICA8ZW1waGFzaXM+YWxsPC9lbXBoYXNpcz4gaW5kZXhlZCBjb2x1bW5zIHVzZSBhIGRl
ZHVwbGljYXRpb24tc2FmZQorICAgb3BlcmF0b3IgY2xhc3MgdGhhdCBleHBsaWNpdGx5IGluZGlj
YXRlcyB0aGF0IGRlZHVwbGljYXRpb24gaXMgc2FmZQorICAgYXQgPGNvbW1hbmQ+Q1JFQVRFIElO
REVYPC9jb21tYW5kPiB0aW1lLiAgSW4gcHJhY3RpY2UgYWxtb3N0IGFsbAorICAgZGF0YXR5cGVz
IHN1cHBvcnQgZGVkdXBsaWNhdGlvbi4gIDx0eXBlPm51bWVyaWM8L3R5cGU+IGlzIGEgbm90YWJs
ZQorICAgZXhjZXB0aW9uICg8cXVvdGU+ZGlzcGxheSBzY2FsZTwvcXVvdGU+IG1ha2VzIGl0IGlt
cG9zc2libGUgdG8KKyAgIGVuYWJsZSBkZWR1cGxpY2F0aW9uIHdpdGhvdXQgbG9zaW5nIHVzZWZ1
bCBpbmZvcm1hdGlvbiBhYm91dCBlcXVhbAorICAgPHR5cGU+bnVtZXJpYzwvdHlwZT4gZGF0dW1z
KS4gIFNvbWUgb3BlcmF0b3IgY2xhc3NlcyBzdXBwb3J0CisgICBkZWR1cGxpY2F0aW9uIGNvbmRp
dGlvbmFsbHkuICBGb3IgZXhhbXBsZSwgZGVkdXBsaWNhdGlvbiBvZiBpbmRleGVzCisgICBvbiBh
IDx0eXBlPnRleHQ8L3R5cGU+IGNvbHVtbiAod2l0aCB0aGUgZGVmYXVsdAorICAgPGxpdGVyYWw+
YnRyZWUvdGV4dF9vcHM8L2xpdGVyYWw+IG9wZXJhdG9yIGNsYXNzKSBpcyBub3Qgc3VwcG9ydGVk
CisgICB3aGVuIHRoZSBjb2x1bW4gdXNlcyBhICBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbi4K
KyAgPC9wYXJhPgorICA8cGFyYT4KKyAgIDxsaXRlcmFsPklOQ0xVREU8L2xpdGVyYWw+IGluZGV4
ZXMgZG8gbm90IHN1cHBvcnQgZGVkdXBsaWNhdGlvbi4KICAgPC9wYXJhPgogCisgPC9zZWN0Mj4K
KworIDxzZWN0MiBpZD0iYnRyZWUtZGVkdXBsaWNhdGlvbi11bmlxdWUiPgorICA8dGl0bGU+SW50
ZXJuYWwgdXNlIG9mIERlZHVwbGljYXRpb24gaW4gdW5pcXVlIGluZGV4ZXM8L3RpdGxlPgorCisg
IDxwYXJhPgorICAgUGFnZSBzcGxpdHMgdGhhdCBvY2N1ciBkdWUgdG8gaW5zZXJ0aW5nIG11bHRp
cGxlIHBoeXNpY2FsIHZlcnNpb25zCisgICAocmF0aGVyIHRoYW4gaW5zZXJ0aW5nIG5ldyBsb2dp
Y2FsIHJvd3MpIHRlbmQgdG8gZGVncmFkZSB0aGUKKyAgIHN0cnVjdHVyZSBvZiBpbmRleGVzLCBl
c3BlY2lhbGx5IGluIHRoZSBjYXNlIG9mIHVuaXF1ZSBpbmRleGVzLgorICAgVW5pcXVlIGluZGV4
ZXMgdXNlIGRlZHVwbGljYXRpb24gPGVtcGhhc2lzPmludGVybmFsbHk8L2VtcGhhc2lzPgorICAg
YW5kIDxlbXBoYXNpcz5zZWxlY3RpdmVseTwvZW1waGFzaXM+IHRvIGRlbGF5IChhbmQgaWRlYWxs
eSB0bworICAgcHJldmVudCkgdGhlc2UgPHF1b3RlPnVubmVjZXNzYXJ5PC9xdW90ZT4gcGFnZSBz
cGxpdHMuCisgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IG9yIGF1dG92YWN1dW0gd2lsbCBl
dmVudHVhbGx5IHJlbW92ZSBkZWFkCisgICB2ZXJzaW9ucyBvZiB0dXBsZXMgZnJvbSBldmVyeSBp
bmRleCBpbiBhbnkgY2FzZSwgYnV0IHVzdWFsbHkgY2Fubm90CisgICByZXZlcnNlIHBhZ2Ugc3Bs
aXRzIChpbiBnZW5lcmFsLCB0aGUgcGFnZSBtdXN0IGJlIGNvbXBsZXRlbHkgZW1wdHkKKyAgIGJl
Zm9yZSA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IGNhbiA8cXVvdGU+ZGVsZXRlPC9xdW90ZT4g
aXQpLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgVGhlIDx4cmVmIGxpbmtlbmQ9Imd1Yy1idHJl
ZS1kZWR1cGxpY2F0ZS1pdGVtcyIvPiBjb25maWd1cmF0aW9uCisgICBwYXJhbWV0ZXIgZG9lcyBu
b3QgYWZmZWN0IHdoZXRoZXIgb3Igbm90IGRlZHVwbGljYXRpb24gaXMgdXNlZAorICAgd2l0aGlu
IHVuaXF1ZSBpbmRleGVzLiAgVGhlIGludGVybmFsIHVzZSBvZiBkZWR1cGxpY2F0aW9uIGZvcgor
ICAgdW5pcXVlIGluZGV4ZXMgaXMgc3ViamVjdCB0byBhbGwgb2YgdGhlIHNhbWUgcmVzdHJpY3Rp
b25zIGFzCisgICBkZWR1cGxpY2F0aW9uIGluIGdlbmVyYWwuICBUaGUgPGxpdGVyYWw+ZGVkdXBs
aWNhdGVfaXRlbXM8L2xpdGVyYWw+CisgICBzdG9yYWdlIHBhcmFtZXRlciBjYW4gYmUgc2V0IHRv
IDxsaXRlcmFsPk9GRjwvbGl0ZXJhbD4gdG8gZGlzYWJsZQorICAgZGVkdXBsaWNhdGlvbiBpbiB1
bmlxdWUgaW5kZXhlcywgYnV0IHRoaXMgaXMgaW50ZW5kZWQgb25seSBhcyBhCisgICBkZWJ1Z2dp
bmcgb3B0aW9uIGZvciBkZXZlbG9wZXJzLgorICA8L3BhcmE+CisKKyA8L3NlY3QyPgogPC9zZWN0
MT4KIAogPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NoYXJzZXQuc2dtbCBi
L2RvYy9zcmMvc2dtbC9jaGFyc2V0LnNnbWwKaW5kZXggNTU2NjliNWNhZC4uOWYzNzFkM2UzYSAx
MDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NoYXJzZXQuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv
Y2hhcnNldC5zZ21sCkBAIC05MjgsMTAgKzkyOCwxMSBAQCBDUkVBVEUgQ09MTEFUSU9OIGlnbm9y
ZV9hY2NlbnRzIChwcm92aWRlciA9IGljdSwgbG9jYWxlID0gJ3VuZC11LWtzLWxldmVsMS1rYy10
cgogICAgICBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMgZ2l2ZSBhIG1vcmUgPHF1b3RlPmNv
cnJlY3Q8L3F1b3RlPiBiZWhhdmlvciwKICAgICAgZXNwZWNpYWxseSB3aGVuIGNvbnNpZGVyaW5n
IHRoZSBmdWxsIHBvd2VyIG9mIFVuaWNvZGUgYW5kIGl0cyBtYW55CiAgICAgIHNwZWNpYWwgY2Fz
ZXMsIHRoZXkgYWxzbyBoYXZlIHNvbWUgZHJhd2JhY2tzLiAgRm9yZW1vc3QsIHRoZWlyIHVzZSBs
ZWFkcwotICAgICB0byBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuICBBbHNvLCBjZXJ0YWluIG9wZXJh
dGlvbnMgYXJlIG5vdCBwb3NzaWJsZSB3aXRoCi0gICAgIG5vbmRldGVybWluaXN0aWMgY29sbGF0
aW9ucywgc3VjaCBhcyBwYXR0ZXJuIG1hdGNoaW5nIG9wZXJhdGlvbnMuCi0gICAgIFRoZXJlZm9y
ZSwgdGhleSBzaG91bGQgYmUgdXNlZCBvbmx5IGluIGNhc2VzIHdoZXJlIHRoZXkgYXJlIHNwZWNp
ZmljYWxseQotICAgICB3YW50ZWQuCisgICAgIHRvIGEgcGVyZm9ybWFuY2UgcGVuYWx0eS4gIE5v
dGUsIGluIHBhcnRpY3VsYXIsIHRoYXQgQi10cmVlIGNhbm5vdCB1c2UKKyAgICAgZGVkdXBsaWNh
dGlvbiB3aXRoIGluZGV4ZXMgdGhhdCB1c2UgYSBub25kZXRlcm1pbmlzdGljIGNvbGxhdGlvbi4g
IEFsc28sCisgICAgIGNlcnRhaW4gb3BlcmF0aW9ucyBhcmUgbm90IHBvc3NpYmxlIHdpdGggbm9u
ZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zLAorICAgICBzdWNoIGFzIHBhdHRlcm4gbWF0Y2hpbmcg
b3BlcmF0aW9ucy4gIFRoZXJlZm9yZSwgdGhleSBzaG91bGQgYmUgdXNlZAorICAgICBvbmx5IGlu
IGNhc2VzIHdoZXJlIHRoZXkgYXJlIHNwZWNpZmljYWxseSB3YW50ZWQuCiAgICAgPC9wYXJhPgog
ICAgPC9zZWN0Mz4KICAgPC9zZWN0Mj4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcu
c2dtbCBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCA1ZDQ1YjZmN2NiLi41NWE4MGQ5
ZjRlIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9z
Z21sL2NvbmZpZy5zZ21sCkBAIC04MDQxLDYgKzgwNDEsMzEgQEAgQ09QWSBwb3N0Z3Jlc19sb2cg
RlJPTSAnL2Z1bGwvcGF0aC90by9sb2dmaWxlLmNzdicgV0lUSCBjc3Y7CiAgICAgICA8L2xpc3Rp
dGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMt
YnRyZWUtZGVkdXBsaWNhdGUtaXRlbXMiIHhyZWZsYWJlbD0iZGVkdXBsaWNhdGVfYnRyZWVfaXRl
bXMiPgorICAgICAgPHRlcm0+PHZhcm5hbWU+ZGVkdXBsaWNhdGVfYnRyZWVfaXRlbXM8L3Zhcm5h
bWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHBy
aW1hcnk+PHZhcm5hbWU+ZGVkdXBsaWNhdGVfYnRyZWVfaXRlbXM8L3Zhcm5hbWU+PC9wcmltYXJ5
PgorICAgICAgIDxzZWNvbmRhcnk+Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3NlY29uZGFyeT4K
KyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAg
ICAgIDxwYXJhPgorICAgICAgICBDb250cm9scyB3aGV0aGVyIGRlZHVwbGljYXRpb24gc2hvdWxk
IGJlIHVzZWQgd2l0aGluIEItVHJlZQorICAgICAgICBpbmRleGVzLiAgRGVkdXBsaWNhdGlvbiBp
cyBhbiBvcHRpbWl6YXRpb24gdGhhdCByZWR1Y2VzIHRoZQorICAgICAgICBzdG9yYWdlIHNpemUg
b2YgaW5kZXhlcyBieSBzdG9yaW5nIGVxdWFsIGluZGV4IGtleXMgb25seSBvbmNlLgorICAgICAg
ICBTZWUgPHhyZWYgbGlua2VuZD0iYnRyZWUtZGVkdXBsaWNhdGlvbiIvPiBmb3IgbW9yZQorICAg
ICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICA8cGFyYT4KKyAgICAg
ICAgVGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIGZvciBpbmRpdmlkdWFsIEItVHJlZSBp
bmRleGVzCisgICAgICAgIGJ5IGNoYW5naW5nIGluZGV4IHN0b3JhZ2UgcGFyYW1ldGVycy4gIFNl
ZSA8eHJlZgorICAgICAgICBsaW5rZW5kPSJzcWwtY3JlYXRlaW5kZXgtc3RvcmFnZS1wYXJhbWV0
ZXJzIi8+IGZyb20gdGhlCisgICAgICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWDwvY29tbWFuZD4g
ZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3Rp
dGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMt
Ynl0ZWEtb3V0cHV0IiB4cmVmbGFiZWw9ImJ5dGVhX291dHB1dCI+CiAgICAgICA8dGVybT48dmFy
bmFtZT5ieXRlYV9vdXRwdXQ8L3Zhcm5hbWU+ICg8dHlwZT5lbnVtPC90eXBlPikKICAgICAgIDxp
bmRleHRlcm0+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21s
IGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbAppbmRleCA2MjlhMzFlZjc5Li42
NjU5ZDE1YmY0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21s
CisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwKQEAgLTE2Niw2ICsxNjYs
OCBAQCBDUkVBVEUgWyBVTklRVUUgXSBJTkRFWCBbIENPTkNVUlJFTlRMWSBdIFsgWyBJRiBOT1Qg
RVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPQogICAgICAgICBtYXhpbXVtIHNpemUgYWxsb3dl
ZCBmb3IgdGhlIGluZGV4IHR5cGUsIGRhdGEgaW5zZXJ0aW9uIHdpbGwgZmFpbC4KICAgICAgICAg
SW4gYW55IGNhc2UsIG5vbi1rZXkgY29sdW1ucyBkdXBsaWNhdGUgZGF0YSBmcm9tIHRoZSBpbmRl
eCdzIHRhYmxlCiAgICAgICAgIGFuZCBibG9hdCB0aGUgc2l6ZSBvZiB0aGUgaW5kZXgsIHRodXMg
cG90ZW50aWFsbHkgc2xvd2luZyBzZWFyY2hlcy4KKyAgICAgICAgTW9yZW92ZXIsIEItdHJlZSBk
ZWR1cGxpY2F0aW9uIGlzIG5ldmVyIHVzZWQgd2l0aCBpbmRleGVzIHRoYXQKKyAgICAgICAgaGF2
ZSBhIG5vbi1rZXkgY29sdW1uLgogICAgICAgIDwvcGFyYT4KIAogICAgICAgIDxwYXJhPgpAQCAt
Mzg4LDEwICszOTAsNDAgQEAgQ1JFQVRFIFsgVU5JUVVFIF0gSU5ERVggWyBDT05DVVJSRU5UTFkg
XSBbIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0KICAgIDwvdmFyaWFibGVs
aXN0PgogCiAgICA8cGFyYT4KLSAgICBCLXRyZWUgaW5kZXhlcyBhZGRpdGlvbmFsbHkgYWNjZXB0
IHRoaXMgcGFyYW1ldGVyOgorICAgIEItdHJlZSBpbmRleGVzIGFsc28gYWNjZXB0IHRoZXNlIHBh
cmFtZXRlcnM6CiAgICA8L3BhcmE+CiAKICAgIDx2YXJpYWJsZWxpc3Q+CisgICA8dmFybGlzdGVu
dHJ5IGlkPSJpbmRleC1yZWxvcHRpb24tZGVkdXBsaWNhdGlvbiIgeHJlZmxhYmVsPSJkZWR1cGxp
Y2F0ZV9pdGVtcyI+CisgICAgPHRlcm0+PGxpdGVyYWw+ZGVkdXBsaWNhdGVfaXRlbXM8L2xpdGVy
YWw+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5kZWR1cGxpY2F0
ZV9pdGVtczwvdmFybmFtZT48L3ByaW1hcnk+CisgICAgICA8c2Vjb25kYXJ5PnN0b3JhZ2UgcGFy
YW1ldGVyPC9zZWNvbmRhcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8
bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgICBQZXItaW5kZXggdmFsdWUgZm9yIDx4cmVmCisg
ICAgICBsaW5rZW5kPSJndWMtYnRyZWUtZGVkdXBsaWNhdGUtaXRlbXMiLz4uICBDb250cm9scyB1
c2FnZSBvZiB0aGUKKyAgICAgIEItdHJlZSBkZWR1cGxpY2F0aW9uIHRlY2huaXF1ZSBkZXNjcmli
ZWQgaW4gPHhyZWYKKyAgICAgIGxpbmtlbmQ9ImJ0cmVlLWRlZHVwbGljYXRpb24iLz4uICBTZXQg
dG8gPGxpdGVyYWw+T048L2xpdGVyYWw+CisgICAgICBvciA8bGl0ZXJhbD5PRkY8L2xpdGVyYWw+
IHRvIG92ZXJyaWRlIEdVQy4gIChBbHRlcm5hdGl2ZQorICAgICAgc3BlbGxpbmdzIG9mIDxsaXRl
cmFsPk9OPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+T0ZGPC9saXRlcmFsPgorICAgICAgYXJlIGFs
bG93ZWQgYXMgZGVzY3JpYmVkIGluIDx4cmVmIGxpbmtlbmQ9ImNvbmZpZy1zZXR0aW5nIi8+LikK
KyAgICAgIFRoZSBkZWZhdWx0IGlzIDxsaXRlcmFsPk9OPC9saXRlcmFsPi4KKyAgICA8L3BhcmE+
CisKKyAgICA8bm90ZT4KKyAgICAgPHBhcmE+CisgICAgICBUdXJuaW5nIDxsaXRlcmFsPmRlZHVw
bGljYXRlX2l0ZW1zPC9saXRlcmFsPiBvZmYgdmlhCisgICAgICA8Y29tbWFuZD5BTFRFUiBJTkRF
WDwvY29tbWFuZD4gcHJldmVudHMgZnV0dXJlIGluc2VydGlvbnMgZnJvbQorICAgICAgdHJpZ2dl
cmluZyBkZWR1cGxpY2F0aW9uLCBidXQgZG9lcyBub3QgaW4gaXRzZWxmIG1ha2UgZXhpc3RpbmcK
KyAgICAgIHBvc3RpbmcgbGlzdCB0dXBsZXMgdXNlIHRoZSBzdGFuZGFyZCB0dXBsZSByZXByZXNl
bnRhdGlvbi4KKyAgICAgPC9wYXJhPgorICAgIDwvbm90ZT4KKyAgICA8L2xpc3RpdGVtPgorICAg
PC92YXJsaXN0ZW50cnk+CisKICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImluZGV4LXJlbG9wdGlvbi12
YWN1dW0tY2xlYW51cC1pbmRleC1zY2FsZS1mYWN0b3IiIHhyZWZsYWJlbD0idmFjdXVtX2NsZWFu
dXBfaW5kZXhfc2NhbGVfZmFjdG9yIj4KICAgICA8dGVybT48bGl0ZXJhbD52YWN1dW1fY2xlYW51
cF9pbmRleF9zY2FsZV9mYWN0b3I8L2xpdGVyYWw+CiAgICAgIDxpbmRleHRlcm0+CkBAIC00NDYs
OSArNDc4LDcgQEAgQ1JFQVRFIFsgVU5JUVVFIF0gSU5ERVggWyBDT05DVVJSRU5UTFkgXSBbIFsg
SUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0KICAgICAgVGhpcyBzZXR0aW5nIGNv
bnRyb2xzIHVzYWdlIG9mIHRoZSBmYXN0IHVwZGF0ZSB0ZWNobmlxdWUgZGVzY3JpYmVkIGluCiAg
ICAgIDx4cmVmIGxpbmtlbmQ9Imdpbi1mYXN0LXVwZGF0ZSIvPi4gIEl0IGlzIGEgQm9vbGVhbiBw
YXJhbWV0ZXI6CiAgICAgIDxsaXRlcmFsPk9OPC9saXRlcmFsPiBlbmFibGVzIGZhc3QgdXBkYXRl
LCA8bGl0ZXJhbD5PRkY8L2xpdGVyYWw+IGRpc2FibGVzIGl0LgotICAgICAoQWx0ZXJuYXRpdmUg
c3BlbGxpbmdzIG9mIDxsaXRlcmFsPk9OPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+T0ZGPC9saXRl
cmFsPiBhcmUKLSAgICAgYWxsb3dlZCBhcyBkZXNjcmliZWQgaW4gPHhyZWYgbGlua2VuZD0iY29u
ZmlnLXNldHRpbmciLz4uKSAgVGhlCi0gICAgIGRlZmF1bHQgaXMgPGxpdGVyYWw+T048L2xpdGVy
YWw+LgorICAgICBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD5PTjwvbGl0ZXJhbD4uCiAgICAgPC9w
YXJhPgogCiAgICAgPG5vdGU+CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk
L2J0cmVlX2luZGV4Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYnRyZWVfaW5kZXgu
b3V0CmluZGV4IGY1NjcxMTdhNDYuLjNkMzUzY2VmZGYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl
Z3Jlc3MvZXhwZWN0ZWQvYnRyZWVfaW5kZXgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw
ZWN0ZWQvYnRyZWVfaW5kZXgub3V0CkBAIC0yNjYsNiArMjY2LDIyIEBAIHNlbGVjdCAqIGZyb20g
YnRyZWVfYnBjaGFyIHdoZXJlIGYxOjpicGNoYXIgbGlrZSAnZm9vJSc7CiAgZm9vbAogKDIgcm93
cykKIAorLS0KKy0tIFBlcmZvcm0gdW5pcXVlIGNoZWNraW5nLCB3aXRoIGFuZCB3aXRob3V0IHRo
ZSB1c2Ugb2YgZGVkdXBsaWNhdGlvbgorLS0KK0NSRUFURSBUQUJMRSBkZWR1cF91bmlxdWVfdGVz
dF90YWJsZSAoYSBpbnQpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZD1mYWxzZSk7CitDUkVBVEUg
VU5JUVVFIElOREVYIGRlZHVwX3VuaXF1ZSBPTiBkZWR1cF91bmlxdWVfdGVzdF90YWJsZSAoYSkg
V0lUSCAoZGVkdXBsaWNhdGVfaXRlbXM9b24pOworQ1JFQVRFIFVOSVFVRSBJTkRFWCBwbGFpbl91
bmlxdWUgT04gZGVkdXBfdW5pcXVlX3Rlc3RfdGFibGUgKGEpIFdJVEggKGRlZHVwbGljYXRlX2l0
ZW1zPW9mZik7CistLSBHZW5lcmF0ZSBlbm91Z2ggZ2FyYmFnZSB0dXBsZXMgaW4gaW5kZXggdG8g
ZW5zdXJlIHRoYXQgZXZlbiB0aGUgdW5pcXVlIGluZGV4CistLSB3aXRoIGRlZHVwbGljYXRpb24g
ZW5hYmxlZCBoYXMgdG8gY2hlY2sgbXVsdGlwbGUgbGVhZiBwYWdlcyBkdXJpbmcgdW5pcXVlCist
LSBjaGVja2luZyAoYXQgbGVhc3Qgd2l0aCBhIEJMQ0tTWiBvZiA4MTkyIG9yIGxlc3MpCitETyAk
JAorQkVHSU4KKyAgICBGT1IgciBJTiAxLi4xMzUwIExPT1AKKyAgICAgICAgREVMRVRFIEZST00g
ZGVkdXBfdW5pcXVlX3Rlc3RfdGFibGU7CisgICAgICAgIElOU0VSVCBJTlRPIGRlZHVwX3VuaXF1
ZV90ZXN0X3RhYmxlIFNFTEVDVCAxOworICAgIEVORCBMT09QOworRU5EJCQ7CiAtLQogLS0gVGVz
dCBCLXRyZWUgZmFzdCBwYXRoIChjYWNoZSByaWdodG1vc3QgbGVhZiBwYWdlKSBvcHRpbWl6YXRp
b24uCiAtLQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfaW5kZXguc3Fs
IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfaW5kZXguc3FsCmluZGV4IDU1OGRjYWUwZWMu
LmIwYjgxYjJiOWEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2J0cmVlX2luZGV4
LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9idHJlZV9pbmRleC5zcWwKQEAgLTEwMyw2
ICsxMDMsMjMgQEAgZXhwbGFpbiAoY29zdHMgb2ZmKQogc2VsZWN0ICogZnJvbSBidHJlZV9icGNo
YXIgd2hlcmUgZjE6OmJwY2hhciBsaWtlICdmb28lJzsKIHNlbGVjdCAqIGZyb20gYnRyZWVfYnBj
aGFyIHdoZXJlIGYxOjpicGNoYXIgbGlrZSAnZm9vJSc7CiAKKy0tCistLSBQZXJmb3JtIHVuaXF1
ZSBjaGVja2luZywgd2l0aCBhbmQgd2l0aG91dCB0aGUgdXNlIG9mIGRlZHVwbGljYXRpb24KKy0t
CitDUkVBVEUgVEFCTEUgZGVkdXBfdW5pcXVlX3Rlc3RfdGFibGUgKGEgaW50KSBXSVRIIChhdXRv
dmFjdXVtX2VuYWJsZWQ9ZmFsc2UpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCBkZWR1cF91bmlxdWUg
T04gZGVkdXBfdW5pcXVlX3Rlc3RfdGFibGUgKGEpIFdJVEggKGRlZHVwbGljYXRlX2l0ZW1zPW9u
KTsKK0NSRUFURSBVTklRVUUgSU5ERVggcGxhaW5fdW5pcXVlIE9OIGRlZHVwX3VuaXF1ZV90ZXN0
X3RhYmxlIChhKSBXSVRIIChkZWR1cGxpY2F0ZV9pdGVtcz1vZmYpOworLS0gR2VuZXJhdGUgZW5v
dWdoIGdhcmJhZ2UgdHVwbGVzIGluIGluZGV4IHRvIGVuc3VyZSB0aGF0IGV2ZW4gdGhlIHVuaXF1
ZSBpbmRleAorLS0gd2l0aCBkZWR1cGxpY2F0aW9uIGVuYWJsZWQgaGFzIHRvIGNoZWNrIG11bHRp
cGxlIGxlYWYgcGFnZXMgZHVyaW5nIHVuaXF1ZQorLS0gY2hlY2tpbmcgKGF0IGxlYXN0IHdpdGgg
YSBCTENLU1ogb2YgODE5MiBvciBsZXNzKQorRE8gJCQKK0JFR0lOCisgICAgRk9SIHIgSU4gMS4u
MTM1MCBMT09QCisgICAgICAgIERFTEVURSBGUk9NIGRlZHVwX3VuaXF1ZV90ZXN0X3RhYmxlOwor
ICAgICAgICBJTlNFUlQgSU5UTyBkZWR1cF91bmlxdWVfdGVzdF90YWJsZSBTRUxFQ1QgMTsKKyAg
ICBFTkQgTE9PUDsKK0VORCQkOworCiAtLQogLS0gVGVzdCBCLXRyZWUgZmFzdCBwYXRoIChjYWNo
ZSByaWdodG1vc3QgbGVhZiBwYWdlKSBvcHRpbWl6YXRpb24uCiAtLQotLSAKMi4xNy4xCgo=
--000000000000f3369d059c2431aa
Content-Type: application/octet-stream; 
	name="v30-0002-Header-for-customized-qsort.patch"
Content-Disposition: attachment; 
	filename="v30-0002-Header-for-customized-qsort.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_k5en9nkr1>
X-Attachment-Id: f_k5en9nkr1

RnJvbSA0NTY2NGU1MjgyZmEyMTdhYzc3Mzc0M2FjNzUwOTBkOGI1MmJiZjNhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1
ZSwgMTQgSmFuIDIwMjAgMTQ6MDE6NTUgLTA4MDAKU3ViamVjdDogW1BBVENIIHYzMCAyLzVdIEhl
YWRlciBmb3IgY3VzdG9taXplZCBxc29ydC4KClRoaXMgaXMgYSBkZXBlbmRlbmN5IG9mIHRoZSAi
QnVja2V0IHNvcnQgZm9yIGNvbXBhY3RpZnlfdHVwbGVzIiBjb21taXQKdGhhdCBmb2xsb3dzLiAg
KFdlIHByb2JhYmx5IHdvbid0IG5lZWQgdG8gaW5saW5lIHFzb3J0LCBidXQgbGVhdmUgaXQgZm9y
Cm5vdy4pCgpUaGlzIHBhdGNoIHdhcyByZXRyaWV2ZWQgZnJvbToKaHR0cHM6Ly9wb3N0Z3IuZXMv
bS9DQUwtckNBMm43VWZWdTFVaTBmJTJCN2NWTjR2QUtWTTAlMkItY1pLYl9rYTYtbUdRQkFGOTJ3
JTQwbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9saWIvcXNvcnRfdGVtcGxhdGUuaCAg
ICAgICAgICB8IDMyNSArKysrKysrKysrKysrKysrKysrKysrCiBzcmMvcG9ydC9xc29ydC5jICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL3BvcnQvcXNvcnRfYXJnLmMgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL3NvcnQvTWFrZWZp
bGUgICAgICAgICAgIHwgICA3IC0KIHNyYy9iYWNrZW5kL3V0aWxzL3NvcnQvZ2VuX3Fzb3J0X3R1
cGxlLnBsIHwgMjcwIC0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90
dXBsZXNvcnQuYyAgICAgICAgfCAgMjcgKy0KIHNyYy90b29scy9tc3ZjL1NvbHV0aW9uLnBtICAg
ICAgICAgICAgICAgIHwgIDEwICsKIHNyYy90b29scy9tc3ZjL2NsZWFuLmJhdCAgICAgICAgICAg
ICAgICAgIHwgICAxIC0KIDggZmlsZXMgY2hhbmdlZCwgMzYzIGluc2VydGlvbnMoKyksIDI4MSBk
ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9saWIvcXNvcnRfdGVt
cGxhdGUuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3V0aWxzL3NvcnQvZ2VuX3Fz
b3J0X3R1cGxlLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGliL3Fzb3J0X3RlbXBsYXRl
LmggYi9zcmMvaW5jbHVkZS9saWIvcXNvcnRfdGVtcGxhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwLi4zZDlmZmJkODFiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2lu
Y2x1ZGUvbGliL3Fzb3J0X3RlbXBsYXRlLmgKQEAgLTAsMCArMSwzMjUgQEAKKy8qCSROZXRCU0Q6
IHFzb3J0LmMsdiAxLjEzIDIwMDMvMDgvMDcgMTY6NDM6NDIgYWdjIEV4cCAkCSovCisKKy8qLQor
ICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVy
c2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKgkgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKgkgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqCSAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzCisgKgkgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICoJICB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNV
Q0ggREFNQUdFLgorICovCisKKy8qCisgKiBRc29ydCByb3V0aW5lIGJhc2VkIG9uIEouIEwuIEJl
bnRsZXkgYW5kIE0uIEQuIE1jSWxyb3ksCisgKiAiRW5naW5lZXJpbmcgYSBzb3J0IGZ1bmN0aW9u
IiwKKyAqIFNvZnR3YXJlLS1QcmFjdGljZSBhbmQgRXhwZXJpZW5jZSAyMyAoMTk5MykgMTI0OS0x
MjY1LgorICoKKyAqIFdlIGhhdmUgbW9kaWZpZWQgdGhlaXIgb3JpZ2luYWwgYnkgYWRkaW5nIGEg
Y2hlY2sgZm9yIGFscmVhZHktc29ydGVkIGlucHV0LAorICogd2hpY2ggc2VlbXMgdG8gYmUgYSB3
aW4gcGVyIGRpc2N1c3Npb25zIG9uIHBnc3FsLWhhY2tlcnMgYXJvdW5kIDIwMDYtMDMtMjEuCisg
KgorICogQWxzbywgd2UgcmVjdXJzZSBvbiB0aGUgc21hbGxlciBwYXJ0aXRpb24gYW5kIGl0ZXJh
dGUgb24gdGhlIGxhcmdlciBvbmUsCisgKiB3aGljaCBlbnN1cmVzIHdlIGNhbm5vdCByZWN1cnNl
IG1vcmUgdGhhbiBsb2coTikgbGV2ZWxzIChzaW5jZSB0aGUKKyAqIHBhcnRpdGlvbiByZWN1cnNl
ZCB0byBpcyBzdXJlbHkgbm8gbW9yZSB0aGFuIGhhbGYgb2YgdGhlIGlucHV0KS4gIEJlbnRsZXkK
KyAqIGFuZCBNY0lscm95IGV4cGxpY2l0bHkgcmVqZWN0ZWQgZG9pbmcgdGhpcyBvbiB0aGUgZ3Jv
dW5kcyB0aGF0IGl0J3MgIm5vdAorICogd29ydGggdGhlIGVmZm9ydCIsIGJ1dCB3ZSBoYXZlIHNl
ZW4gY3Jhc2hlcyBpbiB0aGUgZmllbGQgZHVlIHRvIHN0YWNrCisgKiBvdmVycnVuLCBzbyB0aGF0
IGp1ZGdtZW50IHNlZW1zIHdyb25nLgorICovCisKKworLyoKKyAqIFRlbXBsYXRlIHBhcmFtZXRl
cnMgYXJlOgorICogUVNfU1VGRklYIC0gbmFtZSBzdWZmaXguCisgKiBRU19UWVBFIC0gYXJyYXkg
ZWxlbWVudCB0eXBlLgorICogUVNfQ01QICAtIEZ1bmN0aW9uIHVzZWQgdG8gY29tcGFyZSBlbGVt
ZW50cywgc2hvdWxkIGJlIGRlZmluZWQKKyAqICAgICAgICAgICBiZWZvcmUgaW5jbHVzaW9uLCBv
ciBwYXNzZWQgdXNpbmcgUVNfRVhUUkFQQVJBTVMvUVNfRVhUUkFBUkdTLgorICogICAgICAgICAg
IERlZmF1bHQgaXMgYGNtcF8jI1FTX1NVRkZJWGAKKyAqIFFTX0VYVFJBUEFSQU1TIC0gZXh0cmEg
cGFyYW1ldGVycyBjb25zdW1lZCBieSBxc29ydCBhbmQgaW5zZXJ0aW9uIHNvcnQuCisgKiBRU19F
WFRSQUFSR1MgLSBleHRyYSBhcmd1bWVudHMgcGFzc2VkIHRvIHFzb3J0IGFuZCBpbnNlcnRpb24g
c29ydC4KKyAqIFFTX0NNUEFSR1MgLSBleHRyYSBhcmd1bWVudHMgcGFzc2VkIHRvIGNtcCBmdW5j
dGlvbi4KKyAqCisgKiBpZiBRU19FWFRSQVBBUkFNUywgUVNfRVhUUkFBUkdTIGFuZCBRU19DTVBB
UkdTIGFyZSBhbGwgdW5kZWZpbmVkLCB0aGVuCisgKiBRU19DTVAgYXNzdW1tZWQgdG8gYmUgcHJl
ZGVmaW5lZCBhbmQgYWNjZXB0aW5nIG9ubHkgZWxlbWVudHMgdG8gY29tcGFyZQorICogKGllIG5v
IGV4dHJhIHBhcmFtZXRlcnMpLgorICoKKyAqIFFTX0RFQ0xBUkUgLSBpZiBkZWZpbmVkIGZ1bmN0
aW9uIHByb3RvdHlwZXMgYW5kIHR5cGUgZGVjbGFyYXRpb25zIGFyZQorICoJCSAgICAgICAgZ2Vu
ZXJhdGVkCisgKiBRU19ERUZJTkUgLSBpZiBkZWZpbmVkIGZ1bmN0aW9uIGRlZmluaXRpb25zIGFy
ZSBnZW5lcmF0ZWQKKyAqIFFTX1NDT1BFIC0gaW4gd2hpY2ggc2NvcGUgKGUuZy4gZXh0ZXJuLCBz
dGF0aWMpIGRvIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyByZXNpZGUKKyAqCisgKiBRU19DSEVDS19G
T1JfSU5URVJSVVBUUyAtIGlmIGRlZmluZWQsIHRoZW4gQ0hFQ0tfRk9SX0lOVEVSUlVQVFMgaXMg
Y2FsbGVkCisgKgkJCXBlcmlvZGljYWxseS4KKyAqIFFTX0NIRUNLX1BSRVNPUlRFRCAtIGlmIGRl
ZmluZWQsIGNoZWNrIGZvciBwcmVzb3J0ZWQgYXJyYXkgaXMgaW5jbHVkZWQuCisgKi8KKworI2lm
bmRlZiBRU19TVUZGSVgKKyNlcnJvciAiUVNfU1VGRklYIHNob3VsZCBiZSBkZWZpbmVkIgorI2Vu
ZGlmCisjaWZuZGVmIFFTX1RZUEUKKyNlcnJvciAiUVNfVFlQRSBzaG91bGQgYmUgZGVmaW5lZCIK
KyNlbmRpZgorCisvKiBoZWxwZXJzICovCisjZGVmaW5lIFFTX01BS0VfTkFNRV8oYSwgYikgQ3Bw
Q29uY2F0KGEsIGIpCisjZGVmaW5lIFFTX01BS0VfTkFNRShhKSBRU19NQUtFX05BTUVfKGEsIFFT
X1NVRkZJWCkKKworI2RlZmluZSBRU19TV0FQTUFOWSBRU19NQUtFX05BTUUocXNzd2FwbWFueV8p
CisjZGVmaW5lIFFTX1NXQVBPTkUgUVNfTUFLRV9OQU1FKHFzc3dhcG9uZV8pCisjZGVmaW5lIFFT
X01FRDMgUVNfTUFLRV9OQU1FKHFzbWVkM18pCisjZGVmaW5lIFFTX0lOU0VSVElPTl9TT1JUIFFT
X01BS0VfTkFNRShpbnNlcnRpb25fc29ydF8pCisjZGVmaW5lIFFTX1FTT1JUIFFTX01BS0VfTkFN
RShxc29ydF8pCisjZGVmaW5lIFFTX1FTT1JUX0lNUEwgUVNfTUFLRV9OQU1FKHFzb3J0X2ltcGxf
KQorI2lmbmRlZiBRU19DTVAKKyNkZWZpbmUgUVNfQ01QIFFTX01BS0VfTkFNRShjbXBfKQorI2Vu
ZGlmCisKKyNpZiAhZGVmaW5lZChRU19FWFRSQVBBUkFNUykgJiYgIWRlZmluZWQoUVNfRVhUUkFB
UkdTKSAmJiAhZGVmaW5lZChRU19DTVBBUkdTKQorI2RlZmluZSBRU19FWFRSQVBBUkFNUworI2Rl
ZmluZSBRU19FWFRSQUFSR1MKKyNkZWZpbmUgUVNfQ01QQVJHUworI2Vsc2UKKyNpZm5kZWYgUVNf
RVhUUkFQQVJBTVMKKyNlcnJvciAiUVNfRVhUUkFQQVJBTVMgc2hvdWxkIGJlIGRlZmluZWQiCisj
ZW5kaWYKKyNpZm5kZWYgUVNfRVhUUkFBUkdTCisjZXJyb3IgIlFTX0VYVFJBQVJHUyBzaG91bGQg
YmUgZGVmaW5lZCIKKyNlbmRpZgorI2lmbmRlZiBRU19DTVBBUkdTCisjZXJyb3IgIlFTX0NNUEFS
R1Mgc2hvdWxkIGJlIGRlZmluZWQiCisjZW5kaWYKKyNlbmRpZgorCisvKiBnZW5lcmF0ZSBmb3J3
YXJkIGRlY2xhcmF0aW9ucyBuZWNlc3NhcnkgdG8gdXNlIHRoZSBoYXNoIHRhYmxlICovCisjaWZk
ZWYgUVNfREVDTEFSRQorUVNfU0NPUEUgdm9pZCBRU19JTlNFUlRJT05fU09SVChRU19UWVBFICog
YSwgUVNfVFlQRSAqIGIgUVNfRVhUUkFQQVJBTVMpOworUVNfU0NPUEUgdm9pZCBRU19RU09SVChR
U19UWVBFICogYSwgUVNfVFlQRSAqIGIgUVNfRVhUUkFQQVJBTVMpOworI2VuZGlmCisKKyNpZmRl
ZiBRU19ERUZJTkUKK3N0YXRpYyBpbmxpbmUgdm9pZAorUVNfU1dBUE9ORShRU19UWVBFICogYSwg
UVNfVFlQRSAqIGIpCit7CisJUVNfVFlQRQkJdCA9ICphOworCisJKmEgPSAqYjsKKwkqYiA9IHQ7
Cit9CisKK3N0YXRpYyB2b2lkCitRU19TV0FQTUFOWShRU19UWVBFICogYSwgUVNfVFlQRSAqIGIs
IHNpemVfdCBuKQoreworCWZvciAoOyBuID4gMDsgbi0tLCBhKyssIGIrKykKKwkJUVNfU1dBUE9O
RShhLCBiKTsKK30KKworI2lmbmRlZiBRU19TS0lQX01FRDMKK3N0YXRpYyBRU19UWVBFICoKK1FT
X01FRDMoUVNfVFlQRSAqIGEsIFFTX1RZUEUgKiBiLCBRU19UWVBFICogYyBRU19FWFRSQVBBUkFN
UykKK3sKKwlyZXR1cm4gUVNfQ01QKGEsIGIgUVNfQ01QQVJHUykgPCAwID8KKwkJKFFTX0NNUChi
LCBjIFFTX0NNUEFSR1MpIDwgMCA/IGIgOgorCQkgKFFTX0NNUChhLCBjIFFTX0NNUEFSR1MpIDwg
MCA/IGMgOiBhKSkKKwkJOiAoUVNfQ01QKGIsIGMgUVNfQ01QQVJHUykgPiAwID8gYiA6CisJCSAg
IChRU19DTVAoYSwgYyBRU19DTVBBUkdTKSA8IDAgPyBhIDogYykpOworfQorI2VuZGlmCisKK1FT
X1NDT1BFIHZvaWQKK1FTX0lOU0VSVElPTl9TT1JUKFFTX1RZUEUgKiBhLCBzaXplX3QgbiBRU19F
WFRSQVBBUkFNUykKK3sKKwlRU19UWVBFICAgICpwbSwKKwkJCSAgICpwbDsKKworCWZvciAocG0g
PSBhICsgMTsgcG0gPCBhICsgbjsgcG0rKykKKwkJZm9yIChwbCA9IHBtOyBwbCA+IGEgJiYgUVNf
Q01QKHBsIC0gMSwgcGwgUVNfQ01QQVJHUykgPiAwOyBwbC0tKQorCQkJUVNfU1dBUE9ORShwbCwg
cGwgLSAxKTsKK30KKworI2lmZGVmIFFTX0NIRUNLX0ZPUl9JTlRFUlJVUFRTCisjZGVmaW5lIERP
X0NIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKQorI2Vsc2UKKyNk
ZWZpbmUgRE9fQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKQorI2VuZGlmCisKK1FTX1NDT1BFIHZvaWQK
K1FTX1FTT1JUKFFTX1RZUEUgKiBhLCBzaXplX3QgbiBRU19FWFRSQVBBUkFNUykKK3sKKwlRU19U
WVBFICAgICpwYSwKKwkJCSAgICpwYiwKKwkJCSAgICpwYywKKwkJCSAgICpwZCwKKwkJCSAgICpw
bSwKKwkJCSAgICpwbjsKKwlzaXplX3QJCWQxLAorCQkJCWQyOworCWludAkJCXI7CisKK2xvb3A6
CisJRE9fQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwlpZiAobiA8IDcpCisJeworCQlRU19JTlNF
UlRJT05fU09SVChhLCBuIFFTX0VYVFJBQVJHUyk7CisJCXJldHVybjsKKwl9CisKKyNpZmRlZiBR
U19DSEVDS19QUkVTT1JURUQKKwl7CisJCWludAkJCXByZXNvcnRlZCA9IDE7CisKKwkJZm9yIChw
bSA9IGEgKyAxOyBwbSA8IGEgKyBuOyBwbSsrKQorCQl7CisJCQlET19DSEVDS19GT1JfSU5URVJS
VVBUUygpOworCQkJaWYgKFFTX0NNUChwbSAtIDEsIHBtIFFTX0NNUEFSR1MpID4gMCkKKwkJCXsK
KwkJCQlwcmVzb3J0ZWQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChwcmVzb3J0
ZWQpCisJCQlyZXR1cm47CisJfQorI2VuZGlmCisJcG0gPSBhICsgKG4gLyAyKTsKKyNpZm5kZWYg
UVNfU0tJUF9NRUQzCisJaWYgKG4gPiA3KQorCXsKKwkJUVNfVFlQRSAgICAqcGwgPSBhOworCisJ
CXBuID0gYSArIChuIC0gMSk7CisjaWZuZGVmIFFTX1NLSVBfTUVEX09GX01FRAorCQlpZiAobiA+
IDQwKQorCQl7CisJCQlzaXplX3QJCWQgPSAobiAvIDgpOworCisJCQlwbCA9IFFTX01FRDMocGws
IHBsICsgZCwgcGwgKyAyICogZCBRU19FWFRSQUFSR1MpOworCQkJcG0gPSBRU19NRUQzKHBtIC0g
ZCwgcG0sIHBtICsgZCBRU19FWFRSQUFSR1MpOworCQkJcG4gPSBRU19NRUQzKHBuIC0gMiAqIGQs
IHBuIC0gZCwgcG4gUVNfRVhUUkFBUkdTKTsKKwkJfQorI2VuZGlmCisJCXBtID0gUVNfTUVEMyhw
bCwgcG0sIHBuIFFTX0VYVFJBQVJHUyk7CisJfQorI2VuZGlmCisJUVNfU1dBUE9ORShhLCBwbSk7
CisJcGEgPSBwYiA9IGEgKyAxOworCXBjID0gcGQgPSBhICsgKG4gLSAxKTsKKwlmb3IgKDs7KQor
CXsKKwkJd2hpbGUgKHBiIDw9IHBjICYmIChyID0gUVNfQ01QKHBiLCBhIFFTX0NNUEFSR1MpKSA8
PSAwKQorCQl7CisJCQlpZiAociA9PSAwKQorCQkJeworCQkJCVFTX1NXQVBPTkUocGEsIHBiKTsK
KwkJCQlwYSsrOworCQkJfQorCQkJcGIrKzsKKwkJCURPX0NIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7
CisJCX0KKwkJd2hpbGUgKHBiIDw9IHBjICYmIChyID0gUVNfQ01QKHBjLCBhIFFTX0NNUEFSR1Mp
KSA+PSAwKQorCQl7CisJCQlpZiAociA9PSAwKQorCQkJeworCQkJCVFTX1NXQVBPTkUocGMsIHBk
KTsKKwkJCQlwZC0tOworCQkJfQorCQkJcGMtLTsKKwkJCURPX0NIRUNLX0ZPUl9JTlRFUlJVUFRT
KCk7CisJCX0KKwkJaWYgKHBiID4gcGMpCisJCQlicmVhazsKKwkJUVNfU1dBUE9ORShwYiwgcGMp
OworCQlwYisrOworCQlwYy0tOworCX0KKwlwbiA9IGEgKyBuOworCWQxID0gTWluKHBhIC0gYSwg
cGIgLSBwYSk7CisJaWYgKGQxID4gMCkKKwkJUVNfU1dBUE1BTlkoYSwgcGIgLSBkMSwgZDEpOwor
CWQxID0gTWluKHBkIC0gcGMsIHBuIC0gcGQgLSAxKTsKKwlpZiAoZDEgPiAwKQorCQlRU19TV0FQ
TUFOWShwYiwgcG4gLSBkMSwgZDEpOworCWQxID0gcGIgLSBwYTsKKwlkMiA9IHBkIC0gcGM7CisJ
aWYgKGQxIDw9IGQyKQorCXsKKwkJLyogUmVjdXJzZSBvbiBsZWZ0IHBhcnRpdGlvbiwgdGhlbiBp
dGVyYXRlIG9uIHJpZ2h0IHBhcnRpdGlvbiAqLworCQlpZiAoZDEgPiAxKQorCQkJUVNfUVNPUlQo
YSwgZDEgUVNfRVhUUkFBUkdTKTsKKwkJaWYgKGQyID4gMSkKKwkJeworCQkJLyogSXRlcmF0ZSBy
YXRoZXIgdGhhbiByZWN1cnNlIHRvIHNhdmUgc3RhY2sgc3BhY2UgKi8KKwkJCS8qIFFTX1FTT1JU
KHBuIC0gZDIsIGQyIEVYVFJBQVJHUyk7ICovCisJCQlhID0gcG4gLSBkMjsKKwkJCW4gPSBkMjsK
KwkJCWdvdG8gbG9vcDsKKwkJfQorCX0KKwllbHNlCisJeworCQkvKiBSZWN1cnNlIG9uIHJpZ2h0
IHBhcnRpdGlvbiwgdGhlbiBpdGVyYXRlIG9uIGxlZnQgcGFydGl0aW9uICovCisJCWlmIChkMiA+
IDEpCisJCQlRU19RU09SVChwbiAtIGQyLCBkMiBRU19FWFRSQUFSR1MpOworCQlpZiAoZDEgPiAx
KQorCQl7CisJCQkvKiBJdGVyYXRlIHJhdGhlciB0aGFuIHJlY3Vyc2UgdG8gc2F2ZSBzdGFjayBz
cGFjZSAqLworCQkJLyogUVNfUVNPUlQoYSwgZDEgRVhUUkFBUkdTKTsgKi8KKwkJCW4gPSBkMTsK
KwkJCWdvdG8gbG9vcDsKKwkJfQorCX0KK30KKyNlbmRpZgorCisjdW5kZWYgUVNfU1VGRklYCisj
dW5kZWYgUVNfVFlQRQorI2lmZGVmIFFTX0RFQ0xBUkUKKyN1bmRlZiBRU19ERUNMQVJFCisjZW5k
aWYKKyNpZmRlZiBRU19ERUZJTkUKKyN1bmRlZiBRU19ERUZJTkUKKyNlbmRpZgorI2lmZGVmIFFT
X1NDT1BFCisjdW5kZWYgUVNfU0NPUEUKKyNlbmRpZgorI2lmZGVmIFFTX0NIRUNLX0ZPUl9JTlRF
UlJVUFRTCisjdW5kZWYgUVNfQ0hFQ0tfRk9SX0lOVEVSUlVQVFMKKyNlbmRpZgorI2lmZGVmIFFT
X0NIRUNLX1BSRVNPUlRFRAorI3VuZGVmIFFTX0NIRUNLX1BSRVNPUlRFRAorI2VuZGlmCisjaWZk
ZWYgUVNfU0tJUF9NRUQzCisjdW5kZWYgUVNfU0tJUF9NRUQzCisjZW5kaWYKKyNpZmRlZiBRU19T
S0lQX01FRF9PRl9NRUQKKyN1bmRlZiBRU19TS0lQX01FRF9PRl9NRUQKKyNlbmRpZgorI3VuZGVm
IERPX0NIRUNLX0ZPUl9JTlRFUlJVUFRTCisjdW5kZWYgUVNfTUFLRV9OQU1FCisjdW5kZWYgUVNf
U1dBUE1BTlkKKyN1bmRlZiBRU19TV0FQT05FCisjdW5kZWYgUVNfTUVEMworI3VuZGVmIFFTX0lO
U0VSVElPTl9TT1JUCisjdW5kZWYgUVNfUVNPUlQKKyN1bmRlZiBRU19RU09SVF9JTVBMCisjdW5k
ZWYgUVNfQ01QCisjdW5kZWYgUVNfRVhUUkFQQVJBTVMKKyN1bmRlZiBRU19FWFRSQUFSR1MKKyN1
bmRlZiBRU19DTVBBUkdTCmRpZmYgLS1naXQgYS9zcmMvcG9ydC9xc29ydC5jIGIvc3JjL3BvcnQv
cXNvcnQuYwppbmRleCA0MDlmNjlhMTI4Li5iMzhiMzNhNjNhIDEwMDY0NAotLS0gYS9zcmMvcG9y
dC9xc29ydC5jCisrKyBiL3NyYy9wb3J0L3Fzb3J0LmMKQEAgLTgsNyArOCw3IEBACiAgKgkgIGlu
IGZhdm9yIG9mIGEgc2ltcGxlIGNoZWNrIGZvciBwcmVzb3J0ZWQgaW5wdXQuCiAgKgkgIFRha2Ug
Y2FyZSB0byByZWN1cnNlIG9uIHRoZSBzbWFsbGVyIHBhcnRpdGlvbiwgdG8gYm91bmQgc3RhY2sg
dXNhZ2UuCiAgKgotICoJQ0FVVElPTjogaWYgeW91IGNoYW5nZSB0aGlzIGZpbGUsIHNlZSBhbHNv
IHFzb3J0X2FyZy5jLCBnZW5fcXNvcnRfdHVwbGUucGwKKyAqCUNBVVRJT046IGlmIHlvdSBjaGFu
Z2UgdGhpcyBmaWxlLCBzZWUgYWxzbyBxc29ydF9hcmcuYywgcXNvcnRfdGVtcGxhdGUuaAogICoK
ICAqCXNyYy9wb3J0L3Fzb3J0LmMKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BvcnQvcXNvcnRfYXJn
LmMgYi9zcmMvcG9ydC9xc29ydF9hcmcuYwppbmRleCBhMjE5NGIwZmIxLi45YmM3ZTZlZGNhIDEw
MDY0NAotLS0gYS9zcmMvcG9ydC9xc29ydF9hcmcuYworKysgYi9zcmMvcG9ydC9xc29ydF9hcmcu
YwpAQCAtOCw3ICs4LDcgQEAKICAqCSAgaW4gZmF2b3Igb2YgYSBzaW1wbGUgY2hlY2sgZm9yIHBy
ZXNvcnRlZCBpbnB1dC4KICAqCSAgVGFrZSBjYXJlIHRvIHJlY3Vyc2Ugb24gdGhlIHNtYWxsZXIg
cGFydGl0aW9uLCB0byBib3VuZCBzdGFjayB1c2FnZS4KICAqCi0gKglDQVVUSU9OOiBpZiB5b3Ug
Y2hhbmdlIHRoaXMgZmlsZSwgc2VlIGFsc28gcXNvcnQuYywgZ2VuX3Fzb3J0X3R1cGxlLnBsCisg
KglDQVVUSU9OOiBpZiB5b3UgY2hhbmdlIHRoaXMgZmlsZSwgc2VlIGFsc28gcXNvcnRfYXJnLmMs
IHFzb3J0X3RlbXBsYXRlLmgKICAqCiAgKglzcmMvcG9ydC9xc29ydF9hcmcuYwogICovCmRpZmYg
LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9zb3J0L01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvdXRp
bHMvc29ydC9NYWtlZmlsZQppbmRleCA3YWMzNjU5MjYxLi5mYmQwMDA0NmY0IDEwMDY0NAotLS0g
YS9zcmMvYmFja2VuZC91dGlscy9zb3J0L01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz
L3NvcnQvTWFrZWZpbGUKQEAgLTIxLDEyICsyMSw1IEBAIE9CSlMgPSBcCiAJdHVwbGVzb3J0Lm8g
XAogCXR1cGxlc3RvcmUubwogCi10dXBsZXNvcnQubzogcXNvcnRfdHVwbGUuYwotCi1xc29ydF90
dXBsZS5jOiBnZW5fcXNvcnRfdHVwbGUucGwKLQkkKFBFUkwpICQoc3JjZGlyKS9nZW5fcXNvcnRf
dHVwbGUucGwgJDwgPiAkQAotCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY29t
bW9uLm1rCiAKLW1haW50YWluZXItY2xlYW46Ci0Jcm0gLWYgcXNvcnRfdHVwbGUuYwpkaWZmIC0t
Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC9nZW5fcXNvcnRfdHVwbGUucGwgYi9zcmMvYmFj
a2VuZC91dGlscy9zb3J0L2dlbl9xc29ydF90dXBsZS5wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYjZiMmZmYTdkMC4uMDAwMDAwMDAwMAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9z
b3J0L2dlbl9xc29ydF90dXBsZS5wbAorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBACi0j
IS91c3IvYmluL3BlcmwgLXcKLQotIwotIyBnZW5fcXNvcnRfdHVwbGUucGwKLSMKLSMgVGhpcyBz
Y3JpcHQgZ2VuZXJhdGVzIHNwZWNpYWxpemVkIHZlcnNpb25zIG9mIHRoZSBxdWlja3NvcnQgYWxn
b3JpdGhtIGZvcgotIyB0dXBsZSBzb3J0aW5nLiAgVGhlIHF1aWNrc29ydCBjb2RlIGlzIGRlcml2
ZWQgZnJvbSB0aGUgTmV0QlNEIGNvZGUuICBUaGUKLSMgY29kZSBnZW5lcmF0ZWQgYnkgdGhpcyBz
Y3JpcHQgcnVucyBzaWduaWZpY2FudGx5IGZhc3RlciB0aGFuIHZhbmlsbGEgcXNvcnQKLSMgd2hl
biB1c2VkIHRvIHNvcnQgdHVwbGVzLiAgVGhpcyBzcGVlZHVwIGNvbWVzIGZyb20gYSBudW1iZXIg
b2YgcGxhY2VzLgotIyBUaGUgbWFqb3IgZWZmZWN0cyBhcmUgKDEpIGlubGluaW5nIHNpbXBsZSB0
dXBsZSBjb21wYXJhdG9ycyBpcyBtdWNoIGZhc3RlcgotIyB0aGFuIGp1bXBpbmcgdGhyb3VnaCBh
IGZ1bmN0aW9uIHBvaW50ZXIgYW5kICgyKSBzd2FwIGFuZCB2ZWNzd2FwIG9wZXJhdGlvbnMKLSMg
c3BlY2lhbGl6ZWQgdG8gdGhlIHBhcnRpY3VsYXIgZGF0YSB0eXBlIG9mIGludGVyZXN0IChpbiB0
aGlzIGNhc2UsIFNvcnRUdXBsZSkKLSMgYXJlIGZhc3RlciB0aGFuIHRoZSBnZW5lcmljIHJvdXRp
bmVzLgotIwotIwlNb2RpZmljYXRpb25zIGZyb20gdmFuaWxsYSBOZXRCU0Qgc291cmNlOgotIwkg
IEFkZCBkbyAuLi4gd2hpbGUoKSBtYWNybyBmaXgKLSMJICBSZW1vdmUgX19pbmxpbmUsIF9ESUFH
QVNTRVJUcywgX19QCi0jCSAgUmVtb3ZlIGlsbC1jb25zaWRlcmVkICJzd2FwX2NudCIgc3dpdGNo
IHRvIGluc2VydGlvbiBzb3J0LAotIwkgIGluIGZhdm9yIG9mIGEgc2ltcGxlIGNoZWNrIGZvciBw
cmVzb3J0ZWQgaW5wdXQuCi0jCSAgVGFrZSBjYXJlIHRvIHJlY3Vyc2Ugb24gdGhlIHNtYWxsZXIg
cGFydGl0aW9uLCB0byBib3VuZCBzdGFjayB1c2FnZS4KLSMKLSMgICAgIEluc3RlYWQgb2Ygc29y
dGluZyBhcmJpdHJhcnkgb2JqZWN0cywgd2UncmUgYWx3YXlzIHNvcnRpbmcgU29ydFR1cGxlcy4K
LSMgICAgIEFkZCBDSEVDS19GT1JfSU5URVJSVVBUUygpLgotIwotIyBDQVVUSU9OOiBpZiB5b3Ug
Y2hhbmdlIHRoaXMgZmlsZSwgc2VlIGFsc28gcXNvcnQuYyBhbmQgcXNvcnRfYXJnLmMKLSMKLQot
dXNlIHN0cmljdDsKLQotbXkgJFNVRkZJWDsKLW15ICRFWFRSQUFSR1M7Ci1teSAkRVhUUkFQQVJB
TVM7Ci1teSAkQ01QUEFSQU1TOwotCi1lbWl0X3Fzb3J0X2JvaWxlcnBsYXRlKCk7Ci0KLSRTVUZG
SVggICAgICA9ICd0dXBsZSc7Ci0kRVhUUkFBUkdTICAgPSAnLCBTb3J0VHVwbGVDb21wYXJhdG9y
IGNtcF90dXBsZSwgVHVwbGVzb3J0c3RhdGUgKnN0YXRlJzsKLSRFWFRSQVBBUkFNUyA9ICcsIGNt
cF90dXBsZSwgc3RhdGUnOwotJENNUFBBUkFNUyAgID0gJywgc3RhdGUnOwotZW1pdF9xc29ydF9p
bXBsZW1lbnRhdGlvbigpOwotCi0kU1VGRklYICAgICAgPSAnc3N1cCc7Ci0kRVhUUkFBUkdTICAg
PSAnLCBTb3J0U3VwcG9ydCBzc3VwJzsKLSRFWFRSQVBBUkFNUyA9ICcsIHNzdXAnOwotJENNUFBB
UkFNUyAgID0gJywgc3N1cCc7Ci1wcmludCA8PCdFT00nOwotCi0jZGVmaW5lIGNtcF9zc3VwKGEs
IGIsIHNzdXApIFwKLQlBcHBseVNvcnRDb21wYXJhdG9yKChhKS0+ZGF0dW0xLCAoYSktPmlzbnVs
bDEsIFwKLQkJCQkJCShiKS0+ZGF0dW0xLCAoYiktPmlzbnVsbDEsIHNzdXApCi0KLUVPTQotZW1p
dF9xc29ydF9pbXBsZW1lbnRhdGlvbigpOwotCi1zdWIgZW1pdF9xc29ydF9ib2lsZXJwbGF0ZQot
ewotCXByaW50IDw8J0VPTSc7Ci0vKgotICogYXV0b2dlbmVyYXRlZCBieSBzcmMvYmFja2VuZC91
dGlscy9zb3J0L2dlbl9xc29ydF90dXBsZS5wbCwgZG8gbm90IGVkaXQhCi0gKgotICogVGhpcyBm
aWxlIGlzIGluY2x1ZGVkIGJ5IHR1cGxlc29ydC5jLCByYXRoZXIgdGhhbiBjb21waWxlZCBzZXBh
cmF0ZWx5LgotICovCi0KLS8qCSROZXRCU0Q6IHFzb3J0LmMsdiAxLjEzIDIwMDMvMDgvMDcgMTY6
NDM6NDIgYWdjIEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCi0g
KglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKgkgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKgkgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqCSAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNp
dHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKgkgIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQot
ICoJICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICog
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK
LSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBRc29y
dCByb3V0aW5lIGJhc2VkIG9uIEouIEwuIEJlbnRsZXkgYW5kIE0uIEQuIE1jSWxyb3ksCi0gKiAi
RW5naW5lZXJpbmcgYSBzb3J0IGZ1bmN0aW9uIiwKLSAqIFNvZnR3YXJlLS1QcmFjdGljZSBhbmQg
RXhwZXJpZW5jZSAyMyAoMTk5MykgMTI0OS0xMjY1LgotICoKLSAqIFdlIGhhdmUgbW9kaWZpZWQg
dGhlaXIgb3JpZ2luYWwgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGFscmVhZHktc29ydGVkIGlucHV0
LAotICogd2hpY2ggc2VlbXMgdG8gYmUgYSB3aW4gcGVyIGRpc2N1c3Npb25zIG9uIHBnc3FsLWhh
Y2tlcnMgYXJvdW5kIDIwMDYtMDMtMjEuCi0gKgotICogQWxzbywgd2UgcmVjdXJzZSBvbiB0aGUg
c21hbGxlciBwYXJ0aXRpb24gYW5kIGl0ZXJhdGUgb24gdGhlIGxhcmdlciBvbmUsCi0gKiB3aGlj
aCBlbnN1cmVzIHdlIGNhbm5vdCByZWN1cnNlIG1vcmUgdGhhbiBsb2coTikgbGV2ZWxzIChzaW5j
ZSB0aGUKLSAqIHBhcnRpdGlvbiByZWN1cnNlZCB0byBpcyBzdXJlbHkgbm8gbW9yZSB0aGFuIGhh
bGYgb2YgdGhlIGlucHV0KS4gIEJlbnRsZXkKLSAqIGFuZCBNY0lscm95IGV4cGxpY2l0bHkgcmVq
ZWN0ZWQgZG9pbmcgdGhpcyBvbiB0aGUgZ3JvdW5kcyB0aGF0IGl0J3MgIm5vdAotICogd29ydGgg
dGhlIGVmZm9ydCIsIGJ1dCB3ZSBoYXZlIHNlZW4gY3Jhc2hlcyBpbiB0aGUgZmllbGQgZHVlIHRv
IHN0YWNrCi0gKiBvdmVycnVuLCBzbyB0aGF0IGp1ZGdtZW50IHNlZW1zIHdyb25nLgotICovCi0K
LXN0YXRpYyB2b2lkCi1zd2FwZnVuYyhTb3J0VHVwbGUgKmEsIFNvcnRUdXBsZSAqYiwgc2l6ZV90
IG4pCi17Ci0JZG8KLQl7Ci0JCVNvcnRUdXBsZSAJdCA9ICphOwotCQkqYSsrID0gKmI7Ci0JCSpi
KysgPSB0OwotCX0gd2hpbGUgKC0tbiA+IDApOwotfQotCi0jZGVmaW5lIHN3YXAoYSwgYikJCQkJ
CQlcCi0JZG8geyAJCQkJCQkJCVwKLQkJU29ydFR1cGxlIHQgPSAqKGEpOwkJCQlcCi0JCSooYSkg
PSAqKGIpOwkJCQkJXAotCQkqKGIpID0gdDsJCQkJCQlcCi0JfSB3aGlsZSAoMCk7Ci0KLSNkZWZp
bmUgdmVjc3dhcChhLCBiLCBuKSBpZiAoKG4pID4gMCkgc3dhcGZ1bmMoYSwgYiwgbikKLQotRU9N
Ci0KLQlyZXR1cm47Ci19Ci0KLXN1YiBlbWl0X3Fzb3J0X2ltcGxlbWVudGF0aW9uCi17Ci0JcHJp
bnQgPDxFT007Ci1zdGF0aWMgU29ydFR1cGxlICoKLW1lZDNfJFNVRkZJWChTb3J0VHVwbGUgKmEs
IFNvcnRUdXBsZSAqYiwgU29ydFR1cGxlICpjJEVYVFJBQVJHUykKLXsKLQlyZXR1cm4gY21wXyRT
VUZGSVgoYSwgYiRDTVBQQVJBTVMpIDwgMCA/Ci0JCShjbXBfJFNVRkZJWChiLCBjJENNUFBBUkFN
UykgPCAwID8gYiA6Ci0JCQkoY21wXyRTVUZGSVgoYSwgYyRDTVBQQVJBTVMpIDwgMCA/IGMgOiBh
KSkKLQkJOiAoY21wXyRTVUZGSVgoYiwgYyRDTVBQQVJBTVMpID4gMCA/IGIgOgotCQkJKGNtcF8k
U1VGRklYKGEsIGMkQ01QUEFSQU1TKSA8IDAgPyBhIDogYykpOwotfQotCi1zdGF0aWMgdm9pZAot
cXNvcnRfJFNVRkZJWChTb3J0VHVwbGUgKmEsIHNpemVfdCBuJEVYVFJBQVJHUykKLXsKLQlTb3J0
VHVwbGUgICpwYSwKLQkJCSAgICpwYiwKLQkJCSAgICpwYywKLQkJCSAgICpwZCwKLQkJCSAgICpw
bCwKLQkJCSAgICpwbSwKLQkJCSAgICpwbjsKLQlzaXplX3QJCWQxLAotCQkJCWQyOwotCWludAkJ
CXIsCi0JCQkJcHJlc29ydGVkOwotCi1sb29wOgotCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci0J
aWYgKG4gPCA3KQotCXsKLQkJZm9yIChwbSA9IGEgKyAxOyBwbSA8IGEgKyBuOyBwbSsrKQotCQkJ
Zm9yIChwbCA9IHBtOyBwbCA+IGEgJiYgY21wXyRTVUZGSVgocGwgLSAxLCBwbCRDTVBQQVJBTVMp
ID4gMDsgcGwtLSkKLQkJCQlzd2FwKHBsLCBwbCAtIDEpOwotCQlyZXR1cm47Ci0JfQotCXByZXNv
cnRlZCA9IDE7Ci0JZm9yIChwbSA9IGEgKyAxOyBwbSA8IGEgKyBuOyBwbSsrKQotCXsKLQkJQ0hF
Q0tfRk9SX0lOVEVSUlVQVFMoKTsKLQkJaWYgKGNtcF8kU1VGRklYKHBtIC0gMSwgcG0kQ01QUEFS
QU1TKSA+IDApCi0JCXsKLQkJCXByZXNvcnRlZCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlp
ZiAocHJlc29ydGVkKQotCQlyZXR1cm47Ci0JcG0gPSBhICsgKG4gLyAyKTsKLQlpZiAobiA+IDcp
Ci0JewotCQlwbCA9IGE7Ci0JCXBuID0gYSArIChuIC0gMSk7Ci0JCWlmIChuID4gNDApCi0JCXsK
LQkJCXNpemVfdAkJZCA9IChuIC8gOCk7Ci0KLQkJCXBsID0gbWVkM18kU1VGRklYKHBsLCBwbCAr
IGQsIHBsICsgMiAqIGQkRVhUUkFQQVJBTVMpOwotCQkJcG0gPSBtZWQzXyRTVUZGSVgocG0gLSBk
LCBwbSwgcG0gKyBkJEVYVFJBUEFSQU1TKTsKLQkJCXBuID0gbWVkM18kU1VGRklYKHBuIC0gMiAq
IGQsIHBuIC0gZCwgcG4kRVhUUkFQQVJBTVMpOwotCQl9Ci0JCXBtID0gbWVkM18kU1VGRklYKHBs
LCBwbSwgcG4kRVhUUkFQQVJBTVMpOwotCX0KLQlzd2FwKGEsIHBtKTsKLQlwYSA9IHBiID0gYSAr
IDE7Ci0JcGMgPSBwZCA9IGEgKyAobiAtIDEpOwotCWZvciAoOzspCi0JewotCQl3aGlsZSAocGIg
PD0gcGMgJiYgKHIgPSBjbXBfJFNVRkZJWChwYiwgYSRDTVBQQVJBTVMpKSA8PSAwKQotCQl7Ci0J
CQlpZiAociA9PSAwKQotCQkJewotCQkJCXN3YXAocGEsIHBiKTsKLQkJCQlwYSsrOwotCQkJfQot
CQkJcGIrKzsKLQkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci0JCX0KLQkJd2hpbGUgKHBiIDw9
IHBjICYmIChyID0gY21wXyRTVUZGSVgocGMsIGEkQ01QUEFSQU1TKSkgPj0gMCkKLQkJewotCQkJ
aWYgKHIgPT0gMCkKLQkJCXsKLQkJCQlzd2FwKHBjLCBwZCk7Ci0JCQkJcGQtLTsKLQkJCX0KLQkJ
CXBjLS07Ci0JCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQl9Ci0JCWlmIChwYiA+IHBjKQot
CQkJYnJlYWs7Ci0JCXN3YXAocGIsIHBjKTsKLQkJcGIrKzsKLQkJcGMtLTsKLQl9Ci0JcG4gPSBh
ICsgbjsKLQlkMSA9IE1pbihwYSAtIGEsIHBiIC0gcGEpOwotCXZlY3N3YXAoYSwgcGIgLSBkMSwg
ZDEpOwotCWQxID0gTWluKHBkIC0gcGMsIHBuIC0gcGQgLSAxKTsKLQl2ZWNzd2FwKHBiLCBwbiAt
IGQxLCBkMSk7Ci0JZDEgPSBwYiAtIHBhOwotCWQyID0gcGQgLSBwYzsKLQlpZiAoZDEgPD0gZDIp
Ci0JewotCQkvKiBSZWN1cnNlIG9uIGxlZnQgcGFydGl0aW9uLCB0aGVuIGl0ZXJhdGUgb24gcmln
aHQgcGFydGl0aW9uICovCi0JCWlmIChkMSA+IDEpCi0JCQlxc29ydF8kU1VGRklYKGEsIGQxJEVY
VFJBUEFSQU1TKTsKLQkJaWYgKGQyID4gMSkKLQkJewotCQkJLyogSXRlcmF0ZSByYXRoZXIgdGhh
biByZWN1cnNlIHRvIHNhdmUgc3RhY2sgc3BhY2UgKi8KLQkJCS8qIHFzb3J0XyRTVUZGSVgocG4g
LSBkMiwgZDIkRVhUUkFQQVJBTVMpOyAqLwotCQkJYSA9IHBuIC0gZDI7Ci0JCQluID0gZDI7Ci0J
CQlnb3RvIGxvb3A7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJLyogUmVjdXJzZSBvbiByaWdodCBw
YXJ0aXRpb24sIHRoZW4gaXRlcmF0ZSBvbiBsZWZ0IHBhcnRpdGlvbiAqLwotCQlpZiAoZDIgPiAx
KQotCQkJcXNvcnRfJFNVRkZJWChwbiAtIGQyLCBkMiRFWFRSQVBBUkFNUyk7Ci0JCWlmIChkMSA+
IDEpCi0JCXsKLQkJCS8qIEl0ZXJhdGUgcmF0aGVyIHRoYW4gcmVjdXJzZSB0byBzYXZlIHN0YWNr
IHNwYWNlICovCi0JCQkvKiBxc29ydF8kU1VGRklYKGEsIGQxJEVYVFJBUEFSQU1TKTsgKi8KLQkJ
CW4gPSBkMTsKLQkJCWdvdG8gbG9vcDsKLQkJfQotCX0KLX0KLUVPTQotCi0JcmV0dXJuOwotfQpk
aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnQuYyBiL3NyYy9iYWNr
ZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0LmMKaW5kZXggZDAyZTY3NmFhMy4uZWNiOTI0MWZhZCAx
MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnQuYworKysgYi9zcmMv
YmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydC5jCkBAIC02NTUsOCArNjU1LDMzIEBAIHN0YXRp
YyB2b2lkIGZyZWVfc29ydF90dXBsZShUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNvcnRUdXBsZSAq
c3R1cCk7CiAgKiByZWR1Y2VzIHRvIEFwcGx5U29ydENvbXBhcmF0b3IoKSwgdGhhdCBpcyBzaW5n
bGUta2V5IE1pbmltYWxUdXBsZSBzb3J0cwogICogYW5kIERhdHVtIHNvcnRzLgogICovCi0jaW5j
bHVkZSAicXNvcnRfdHVwbGUuYyIKKyNkZWZpbmUgUVNfU1VGRklYIHR1cGxlCisjZGVmaW5lIFFT
X1RZUEUgU29ydFR1cGxlCisjZGVmaW5lIFFTX0VYVFJBUEFSQU1TICwgU29ydFR1cGxlQ29tcGFy
YXRvciBjbXBfdHVwbGUsIFR1cGxlc29ydHN0YXRlICpzdGF0ZQorI2RlZmluZSBRU19FWFRSQUFS
R1MgLCBjbXBfdHVwbGUsIHN0YXRlCisjZGVmaW5lIFFTX0NNUEFSR1MgLCBzdGF0ZQorI2RlZmlu
ZSBRU19DSEVDS19GT1JfSU5URVJSVVBUUworI2RlZmluZSBRU19DSEVDS19QUkVTT1JURUQKKyNk
ZWZpbmUgUVNfU0NPUEUgc3RhdGljCisjZGVmaW5lIFFTX0RFRklORQorI2luY2x1ZGUgImxpYi9x
c29ydF90ZW1wbGF0ZS5oIgogCisjZGVmaW5lIFFTX1NVRkZJWCBzc3VwCisjZGVmaW5lIFFTX1RZ
UEUgU29ydFR1cGxlCisjZGVmaW5lIFFTX0VYVFJBUEFSQU1TICwgU29ydFN1cHBvcnQgc3N1cAor
I2RlZmluZSBRU19FWFRSQUFSR1MgLCBzc3VwCisjZGVmaW5lIFFTX0NNUEFSR1MgLCBzc3VwCisj
ZGVmaW5lIFFTX0NIRUNLX0ZPUl9JTlRFUlJVUFRTCisjZGVmaW5lIFFTX0NIRUNLX1BSRVNPUlRF
RAorI2RlZmluZSBRU19TQ09QRSBzdGF0aWMKK3N0YXRpYyBpbmxpbmUgaW50CitjbXBfc3N1cChT
b3J0VHVwbGUgKmEsIFNvcnRUdXBsZSAqYiwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwlyZXR1cm4g
QXBwbHlTb3J0Q29tcGFyYXRvcihhLT5kYXR1bTEsIGEtPmlzbnVsbDEsCisJCQkJCQkJICAgYi0+
ZGF0dW0xLCBiLT5pc251bGwxLCBzc3VwKTsKK30KKyNkZWZpbmUgUVNfREVGSU5FCisjaW5jbHVk
ZSAibGliL3Fzb3J0X3RlbXBsYXRlLmgiCiAKIC8qCiAgKgkJdHVwbGVzb3J0X2JlZ2luX3h4eApk
aWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL21zdmMvU29sdXRpb24ucG0gYi9zcmMvdG9vbHMvbXN2Yy9T
b2x1dGlvbi5wbQppbmRleCA5MDliZGVkNTkyLi43Y2ZkMGZlODYzIDEwMDY0NAotLS0gYS9zcmMv
dG9vbHMvbXN2Yy9Tb2x1dGlvbi5wbQorKysgYi9zcmMvdG9vbHMvbXN2Yy9Tb2x1dGlvbi5wbQpA
QCAtNjY4LDYgKzY2OCwxNiBAQCBzdWIgR2VuZXJhdGVGaWxlcwogCQkpOwogCX0KIAorCWlmIChJ
c05ld2VyKAorCQkJJ3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvcXNvcnRfdHVwbGUuYycsCisJCQkn
c3JjL2JhY2tlbmQvdXRpbHMvc29ydC9nZW5fcXNvcnRfdHVwbGUucGwnKSkKKwl7CisJCXByaW50
ICJHZW5lcmF0aW5nIHFzb3J0X3R1cGxlLmMuLi5cbiI7CisJCXN5c3RlbSgKKydwZXJsIHNyYy9i
YWNrZW5kL3V0aWxzL3NvcnQvZ2VuX3Fzb3J0X3R1cGxlLnBsID4gc3JjL2JhY2tlbmQvdXRpbHMv
c29ydC9xc29ydF90dXBsZS5jJworCQkpOworCX0KKwogCWlmIChJc05ld2VyKAogCQkJJ3NyYy9p
bnRlcmZhY2VzL2xpYnBxL2xpYnBxLnJjJywKIAkJCSdzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJw
cS5yYy5pbicpKQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL21zdmMvY2xlYW4uYmF0IGIvc3JjL3Rv
b2xzL21zdmMvY2xlYW4uYmF0CmluZGV4IGQwMzRlYzU3NjUuLmIxZWI3NTlmNTIgMTAwNzU1Ci0t
LSBhL3NyYy90b29scy9tc3ZjL2NsZWFuLmJhdAorKysgYi9zcmMvdG9vbHMvbXN2Yy9jbGVhbi5i
YXQKQEAgLTYxLDcgKzYxLDYgQEAgaWYgJURJU1QlPT0xIGlmIGV4aXN0IHNyY1xiYWNrZW5kXHN0
b3JhZ2VcbG1nclxsd2xvY2tuYW1lcy5oIGRlbCAvcSBzcmNcYmFja2VuZFwKIGlmICVESVNUJT09
MSBpZiBleGlzdCBzcmNccGxccGxweXRob25cc3BpZXhjZXB0aW9ucy5oIGRlbCAvcSBzcmNccGxc
cGxweXRob25cc3BpZXhjZXB0aW9ucy5oCiBpZiAlRElTVCU9PTEgaWYgZXhpc3Qgc3JjXHBsXHBs
cGdzcWxcc3JjXHBsZXJyY29kZXMuaCBkZWwgL3Egc3JjXHBsXHBscGdzcWxcc3JjXHBsZXJyY29k
ZXMuaAogaWYgJURJU1QlPT0xIGlmIGV4aXN0IHNyY1xwbFx0Y2xccGx0Y2xlcnJjb2Rlcy5oIGRl
bCAvcSBzcmNccGxcdGNsXHBsdGNsZXJyY29kZXMuaAotaWYgJURJU1QlPT0xIGlmIGV4aXN0IHNy
Y1xiYWNrZW5kXHV0aWxzXHNvcnRccXNvcnRfdHVwbGUuYyBkZWwgL3Egc3JjXGJhY2tlbmRcdXRp
bHNcc29ydFxxc29ydF90dXBsZS5jCiBpZiAlRElTVCU9PTEgaWYgZXhpc3Qgc3JjXGJpblxwc3Fs
XHNxbF9oZWxwLmMgZGVsIC9xIHNyY1xiaW5ccHNxbFxzcWxfaGVscC5jCiBpZiAlRElTVCU9PTEg
aWYgZXhpc3Qgc3JjXGJpblxwc3FsXHNxbF9oZWxwLmggZGVsIC9xIHNyY1xiaW5ccHNxbFxzcWxf
aGVscC5oCiBpZiAlRElTVCU9PTEgaWYgZXhpc3Qgc3JjXGNvbW1vblxrd2xpc3RfZC5oIGRlbCAv
cSBzcmNcY29tbW9uXGt3bGlzdF9kLmgKLS0gCjIuMTcuMQoK
--000000000000f3369d059c2431aa--