Re: Block level parallel vacuum

Amit Kapila <[email protected]> Tue, 14 Jan 2020 18:13:22 +0530
Newsgroups gmane.comp.db.postgresql.devel.general
Message-ID <CAA4eK1KgD+SnP4iddBNQP8fDOWLfKCJMo0G0witwz47sd9fhKw@mail.gmail.com>
--000000000000a9643b059c18f087
Content-Type: text/plain; charset="UTF-8"

On Tue, Jan 14, 2020 at 10:04 AM Masahiko Sawada
<[email protected]> wrote:
>
> On Mon, 13 Jan 2020 at 12:50, Amit Kapila <[email protected]> wrote:
> >
> > On Sat, Jan 11, 2020 at 7:48 PM Masahiko Sawada
> > <[email protected]> wrote:
> >
> > Okay, would it better if we get rid of this variable and have code like below?
> >
> > /* Skip the indexes that can be processed by parallel workers */
> > if ( !(get_indstats(lps->lvshared, i) == NULL ||
> > skip_parallel_vacuum_index(Irel[i], lps->lvshared)))
> >     continue;
>
> Make sense to me.
>

I have changed the comment and condition to make it a positive test so
that it is more clear.

> > ...
> > > Agreed. But with the updated patch the PARALLEL option without the
> > > parallel degree doesn't display warning because params->nworkers = 0
> > > in that case. So how about restoring params->nworkers at the end of
> > > vacuum_rel()?
> > >
> >
> > I had also thought on those lines, but I was not entirely sure about
> > this resetting of workers.  Today, again thinking about it, it seems
> > the idea Mahendra is suggesting that is giving an error if the
> > parallel degree is not specified seems reasonable to me.  This means
> > Vacuum (parallel), Vacuum (parallel) <tbl_name>, etc. will give an
> > error "parallel degree must be specified".  This idea has merit as now
> > we are supporting a parallel vacuum by default, so a 'parallel' option
> > without a parallel degree doesn't have any meaning.  If we do that,
> > then we don't need to do anything additional about the handling of
> > temp tables (other than what patch is already doing) as well.  What do
> > you think?
> >
>
> Good point! Agreed.
>

Thanks, changed accordingly.

-- 
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com

--000000000000a9643b059c18f087
Content-Type: application/octet-stream; 
	name="v47-0001-Introduce-IndexAM-fields-for-parallel-vacuum.patch"
Content-Disposition: attachment; 
	filename="v47-0001-Introduce-IndexAM-fields-for-parallel-vacuum.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_k5dva2zd0>
X-Attachment-Id: f_k5dva2zd0

RnJvbSAzZDU3M2RiODc1NzE0MDI1OTM5ODAyYjRlOGRlYjNlOTVhNjIxODIxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IEthcGlsYSA8YWthcGlsYUBwb3N0Z3Jlc3FsLm9yZz4K
RGF0ZTogVGh1LCA5IEphbiAyMDIwIDE0OjM2OjM1ICswNTMwClN1YmplY3Q6IFtQQVRDSCAxLzJd
IEludHJvZHVjZSBJbmRleEFNIGZpZWxkcyBmb3IgcGFyYWxsZWwgdmFjdXVtLgoKSW50cm9kdWNl
IG5ldyBmaWVsZHMgYW11c2VtYWludGVuYW5jZXdvcmttZW0gYW5kIGFtcGFyYWxsZWx2YWN1dW1v
cHRpb25zCmluIEluZGV4QW1Sb3V0aW5lIGZvciBwYXJhbGxlbCB2YWN1dW0uICBUaGUgYW11c2Vt
YWludGVuYW5jZXdvcmttZW0gdGVsbHMKd2hldGhlciBhIHBhcnRpY3VsYXIgSW5kZXhBTSB1c2Vz
IG1haW50ZW5hbmNlX3dvcmtfbWVtIG9yIG5vdC4gIFRoaXMgd2lsbApoZWxwIGluIGNvbnRyb2xs
aW5nIHRoZSBtZW1vcnkgdXNlZCBieSBpbmRpdmlkdWFsIHdvcmtlcnMgYXMgb3RoZXJ3aXNlLApl
YWNoIHdvcmtlciBjYW4gY29uc3VtZSBtZW1vcnkgZXF1YWwgdG8gbWFpbnRlbmFuY2Vfd29ya19t
ZW0uICBUaGUKYW1wYXJhbGxlbHZhY3V1bW9wdGlvbnMgdGVsbCB3aGV0aGVyIGEgcGFydGljdWxh
ciBJbmRleEFNIHBhcnRpY2lwYXRlcyBpbgphIHBhcmFsbGVsIHZhY3V1bSBhbmQgaWYgc28gaW4g
d2hpY2ggcGhhc2UgKGJ1bGtkZWxldGUsIHZhY3V1bWNsZWFudXApIG9mCnZhY3V1bS4KCkF1dGhv
cjogTWFzYWhpa28gU2F3YWRhIGFuZCBBbWl0IEthcGlsYQpSZXZpZXdlZC1ieTogRGlsaXAgS3Vt
YXIsIEFtaXQgS2FwaWxhLCBUb21hcyBWb25kcmEgYW5kIFJvYmVydCBIYWFzCkRpc2N1c3Npb246
Cmh0dHBzOi8vcG9zdGdyLmVzL20vQ0FEMjFBb0RUUE1nelNrVjRFM1NGbzFDSF94NTBiZjVQcVpG
UWY0am1xamstQzAzQldnQG1haWwuZ21haWwuY29tCmh0dHBzOi8vcG9zdGdyLmVzL20vQ0FBNGVL
MUxtY0Q1YVBvZ3p3aW01Tm41OEtpKzc0YTZFZGdoeDRXZDhoQXNrdkhhcTVBQG1haWwuZ21haWwu
Y29tCi0tLQogY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDQgKysrCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgNCArKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyAgICAgICAgICAgICAg
ICAgICB8ICA0ICsrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgICAgICAgICAg
ICAgICAgIHwgIDQgKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgICAgICAgICAg
ICAgICAgICAgfCAgNCArKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyAgICAgICAg
ICAgICAgICAgICB8ICAzICsrCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAg
ICAgICAgICAgICAgfCAgMyArKwogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5j
ICAgICAgICAgICAgIHwgIDQgKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAg
ICAgICAgICAgICAgICAgfCAgNCArKysKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oICAg
ICAgICAgICAgICAgICAgICB8IDM4ICsrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3Qv
bW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jIHwgIDMgKysKIDExIGZpbGVz
IGNoYW5nZWQsIDc1IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2Js
dXRpbHMuYyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCmluZGV4IDIzZDk1OWI5ZjAuLjAxMDRk
MDJmNjcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCisrKyBiL2NvbnRyaWIv
Ymxvb20vYmx1dGlscy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9w
dGlvbnMuaCIKICNpbmNsdWRlICJibG9vbS5oIgogI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIK
KyNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNp
bmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZnJlZXNwYWNlLmgi
CkBAIC0xMjEsNiArMTIyLDkgQEAgYmxoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0
aW5lLT5hbXByZWRsb2NrcyA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1jYW5wYXJhbGxlbCA9IGZh
bHNlOwogCWFtcm91dGluZS0+YW1jYW5pbmNsdWRlID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXVz
ZW1haW50ZW5hbmNld29ya21lbSA9IGZhbHNlOworCWFtcm91dGluZS0+YW1wYXJhbGxlbHZhY3V1
bW9wdGlvbnMgPQorCQlWQUNVVU1fT1BUSU9OX1BBUkFMTEVMX0JVTEtERUwgfCBWQUNVVU1fT1BU
SU9OX1BBUkFMTEVMX0NMRUFOVVA7CiAJYW1yb3V0aW5lLT5hbWtleXR5cGUgPSBJbnZhbGlkT2lk
OwogCiAJYW1yb3V0aW5lLT5hbWJ1aWxkID0gYmxidWlsZDsKZGlmZiAtLWdpdCBhL2RvYy9zcmMv
c2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCmluZGV4IGRkNTRj
Njg4MDIuLjM3ZjhkODc2MGEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwK
KysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAtMTIyLDYgKzEyMiwxMCBAQCB0eXBl
ZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogICAgIGJvb2wgICAgICAgIGFtY2FucGFyYWxsZWw7
CiAgICAgLyogZG9lcyBBTSBzdXBwb3J0IGNvbHVtbnMgaW5jbHVkZWQgd2l0aCBjbGF1c2UgSU5D
TFVERT8gKi8KICAgICBib29sICAgICAgICBhbWNhbmluY2x1ZGU7CisgICAgLyogZG9lcyBBTSB1
c2UgbWFpbnRlbmFuY2Vfd29ya19tZW0/ICovCisgICAgYm9vbCAgICAgICAgYW11c2VtYWludGVu
YW5jZXdvcmttZW07CisgICAgLyogT1Igb2YgcGFyYWxsZWwgdmFjdXVtIGZsYWdzICovCisgICAg
dWludDggICAgICAgYW1wYXJhbGxlbHZhY3V1bW9wdGlvbnM7CiAgICAgLyogdHlwZSBvZiBkYXRh
IHN0b3JlZCBpbiBpbmRleCwgb3IgSW52YWxpZE9pZCBpZiB2YXJpYWJsZSAqLwogICAgIE9pZCAg
ICAgICAgIGFta2V5dHlwZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4v
YnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCmluZGV4IGQ4OWFmNzg0NGQu
LjJlOGY2N2VmMTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwor
KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgogI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIK
ICNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvdmFjdXVtLmgi
CiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAi
cG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCkBAIC0xMDEsNiArMTAyLDkgQEAgYnJpbmhhbmRsZXIo
UEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtcHJlZGxvY2tzID0gZmFsc2U7CiAJYW1y
b3V0aW5lLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7CiAJYW1yb3V0aW5lLT5hbWNhbmluY2x1ZGUg
PSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtdXNlbWFpbnRlbmFuY2V3b3JrbWVtID0gZmFsc2U7CisJ
YW1yb3V0aW5lLT5hbXBhcmFsbGVsdmFjdXVtb3B0aW9ucyA9CisJCVZBQ1VVTV9PUFRJT05fUEFS
QUxMRUxfQ0xFQU5VUDsKIAlhbXJvdXRpbmUtPmFta2V5dHlwZSA9IEludmFsaWRPaWQ7CiAKIAlh
bXJvdXRpbmUtPmFtYnVpbGQgPSBicmluYnVpbGQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h
Y2Nlc3MvZ2luL2dpbnV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCmlu
ZGV4IDkxMGYwYmNiOTEuLmE3ZTU1Y2FmMjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz
cy9naW4vZ2ludXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCkBA
IC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKICNpbmNsdWRl
ICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgor
I2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu
Y2x1ZGUgInN0b3JhZ2UvaW5kZXhmc20uaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKQEAg
LTUzLDYgKzU0LDkgQEAgZ2luaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+
YW1wcmVkbG9ja3MgPSB0cnVlOwogCWFtcm91dGluZS0+YW1jYW5wYXJhbGxlbCA9IGZhbHNlOwog
CWFtcm91dGluZS0+YW1jYW5pbmNsdWRlID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXVzZW1haW50
ZW5hbmNld29ya21lbSA9IHRydWU7CisJYW1yb3V0aW5lLT5hbXBhcmFsbGVsdmFjdXVtb3B0aW9u
cyA9CisJCVZBQ1VVTV9PUFRJT05fUEFSQUxMRUxfQlVMS0RFTCB8IFZBQ1VVTV9PUFRJT05fUEFS
QUxMRUxfQ0xFQU5VUDsKIAlhbXJvdXRpbmUtPmFta2V5dHlwZSA9IEludmFsaWRPaWQ7CiAKIAlh
bXJvdXRpbmUtPmFtYnVpbGQgPSBnaW5idWlsZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj
Y2Vzcy9naXN0L2dpc3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwppbmRleCA1
YzlhZDM0MWIzLi5hZWZjMzAyZWQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lz
dC9naXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCkBAIC0xNyw2ICsx
Nyw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2dpc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFjY2Vz
cy9naXN0c2Nhbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCisjaW5jbHVk
ZSAiY29tbWFuZHMvdmFjdXVtLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi
bm9kZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCkBAIC03NCw2ICs3
NSw5IEBAIGdpc3RoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbXByZWRs
b2NrcyA9IHRydWU7CiAJYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7CiAJYW1yb3V0
aW5lLT5hbWNhbmluY2x1ZGUgPSB0cnVlOworCWFtcm91dGluZS0+YW11c2VtYWludGVuYW5jZXdv
cmttZW0gPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtcGFyYWxsZWx2YWN1dW1vcHRpb25zID0KKwkJ
VkFDVVVNX09QVElPTl9QQVJBTExFTF9CVUxLREVMIHwgVkFDVVVNX09QVElPTl9QQVJBTExFTF9D
T05EX0NMRUFOVVA7CiAJYW1yb3V0aW5lLT5hbWtleXR5cGUgPSBJbnZhbGlkT2lkOwogCiAJYW1y
b3V0aW5lLT5hbWJ1aWxkID0gZ2lzdGJ1aWxkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj
ZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDRi
YjZlZmM5OGYuLjQ4NzFiN2ZmNGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo
L2hhc2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTcyLDYgKzcy
LDkgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtcHJlZGxv
Y2tzID0gdHJ1ZTsKIAlhbXJvdXRpbmUtPmFtY2FucGFyYWxsZWwgPSBmYWxzZTsKIAlhbXJvdXRp
bmUtPmFtY2FuaW5jbHVkZSA9IGZhbHNlOworCWFtcm91dGluZS0+YW11c2VtYWludGVuYW5jZXdv
cmttZW0gPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtcGFyYWxsZWx2YWN1dW1vcHRpb25zID0KKwkJ
VkFDVVVNX09QVElPTl9QQVJBTExFTF9CVUxLREVMOwogCWFtcm91dGluZS0+YW1rZXl0eXBlID0g
SU5UNE9JRDsKIAogCWFtcm91dGluZS0+YW1idWlsZCA9IGhhc2hidWlsZDsKZGlmZiAtLWdpdCBh
L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv
bmJ0cmVlL25idHJlZS5jCmluZGV4IDgzNzZhNWU2YjcuLjUyNTRiYzdlZjUgMTAwNjQ0Ci0tLSBh
L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj
ZXNzL25idHJlZS9uYnRyZWUuYwpAQCAtMTIxLDYgKzEyMSw5IEBAIGJ0aGFuZGxlcihQR19GVU5D
VElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1wcmVkbG9ja3MgPSB0cnVlOwogCWFtcm91dGluZS0+
YW1jYW5wYXJhbGxlbCA9IHRydWU7CiAJYW1yb3V0aW5lLT5hbWNhbmluY2x1ZGUgPSB0cnVlOwor
CWFtcm91dGluZS0+YW11c2VtYWludGVuYW5jZXdvcmttZW0gPSBmYWxzZTsKKwlhbXJvdXRpbmUt
PmFtcGFyYWxsZWx2YWN1dW1vcHRpb25zID0KKwkJVkFDVVVNX09QVElPTl9QQVJBTExFTF9CVUxL
REVMIHwgVkFDVVVNX09QVElPTl9QQVJBTExFTF9DT05EX0NMRUFOVVA7CiAJYW1yb3V0aW5lLT5h
bWtleXR5cGUgPSBJbnZhbGlkT2lkOwogCiAJYW1yb3V0aW5lLT5hbWJ1aWxkID0gYnRidWlsZDsK
ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9i
YWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwppbmRleCBkNzE1OTA4NzY0Li40OTI0YWUx
YzU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKKysr
IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCkBAIC0yMiw2ICsyMiw3IEBA
CiAjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgog
I2luY2x1ZGUgImNhdGFsb2cvcGdfYW1vcC5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5o
IgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pbmRleGZz
bS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgpAQCAtNTYsNiArNTcsOSBAQCBzcGdoYW5k
bGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbXByZWRsb2NrcyA9IGZhbHNlOwog
CWFtcm91dGluZS0+YW1jYW5wYXJhbGxlbCA9IGZhbHNlOwogCWFtcm91dGluZS0+YW1jYW5pbmNs
dWRlID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXVzZW1haW50ZW5hbmNld29ya21lbSA9IGZhbHNl
OworCWFtcm91dGluZS0+YW1wYXJhbGxlbHZhY3V1bW9wdGlvbnMgPQorCQlWQUNVVU1fT1BUSU9O
X1BBUkFMTEVMX0JVTEtERUwgfCBWQUNVVU1fT1BUSU9OX1BBUkFMTEVMX0NPTkRfQ0xFQU5VUDsK
IAlhbXJvdXRpbmUtPmFta2V5dHlwZSA9IEludmFsaWRPaWQ7CiAKIAlhbXJvdXRpbmUtPmFtYnVp
bGQgPSBzcGdidWlsZDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oIGIv
c3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggZDJhNDllOGQzZS4uM2IzZTIyZjczZCAx
MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKKysrIGIvc3JjL2luY2x1ZGUv
YWNjZXNzL2FtYXBpLmgKQEAgLTE5Nyw2ICsxOTcsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhB
bVJvdXRpbmUKIAlib29sCQlhbWNhbnBhcmFsbGVsOwogCS8qIGRvZXMgQU0gc3VwcG9ydCBjb2x1
bW5zIGluY2x1ZGVkIHdpdGggY2xhdXNlIElOQ0xVREU/ICovCiAJYm9vbAkJYW1jYW5pbmNsdWRl
OworCS8qIGRvZXMgQU0gdXNlIG1haW50ZW5hbmNlX3dvcmtfbWVtPyAqLworCWJvb2wJCWFtdXNl
bWFpbnRlbmFuY2V3b3JrbWVtOworCS8qIE9SIG9mIHBhcmFsbGVsIHZhY3V1bSBmbGFncy4gIFNl
ZSB2YWN1dW0uaCBmb3IgZmxhZ3MuICovCisJdWludDgJCWFtcGFyYWxsZWx2YWN1dW1vcHRpb25z
OwogCS8qIHR5cGUgb2YgZGF0YSBzdG9yZWQgaW4gaW5kZXgsIG9yIEludmFsaWRPaWQgaWYgdmFy
aWFibGUgKi8KIAlPaWQJCQlhbWtleXR5cGU7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nv
bW1hbmRzL3ZhY3V1bS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmgKaW5kZXggNWRj
NDFkZDBjMS4uYjMzNTFhZDQwNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFj
dXVtLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmgKQEAgLTIzLDYgKzIzLDQ0
IEBACiAjaW5jbHVkZSAic3RvcmFnZS9sb2NrLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUu
aCIKIAorLyoKKyAqIEZsYWdzIGZvciBhbXBhcmFsbGVsdmFjdXVtb3B0aW9ucyB0byBjb250cm9s
IHRoZSBwYXJ0aWNpcGF0aW9uIG9mIGJ1bGtkZWxldGUKKyAqIGFuZCB2YWN1dW1jbGVhbnVwIGlu
IHBhcmFsbGVsIHZhY3V1bS4KKyAqLworCisvKgorICogQm90aCBidWxrZGVsZXRlIGFuZCB2YWN1
dW1jbGVhbnVwIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LiAgVGhpcyB3aWxsIGJlCisgKiB1c2Vk
IGJ5IEluZGV4QU0ncyB0aGF0IGRvbid0IHdhbnQgdG8gb3IgY2Fubm90IHBhcnRpY2lwYXRlIGlu
IHBhcmFsbGVsCisgKiB2YWN1dW0uICBGb3IgZXhhbXBsZSwgaWYgYW4gaW5kZXggQU0gZG9lc24n
dCBoYXZlIGEgd2F5IHRvIGNvbW11bmljYXRlIHRoZQorICogaW5kZXggc3RhdGlzdGljcyBhbGxv
Y2F0ZWQgYnkgdGhlIGZpcnN0IGFtYnVsa2RlbGV0ZSBjYWxsIHRvIHRoZSBzdWJzZXF1ZW50Cisg
KiBvbmVzIHVudGlsIGFtdmFjdXVtY2xlYW51cCwgdGhlIGluZGV4IEFNIGNhbm5vdCBwYXJ0aWNp
cGF0ZSBpbiBwYXJhbGxlbAorICogdmFjdXVtLgorICovCisjZGVmaW5lIFZBQ1VVTV9PUFRJT05f
Tk9fUEFSQUxMRUwJCQkwCisKKy8qCisgKiBidWxrZGVsZXRlIGNhbiBiZSBwZXJmb3JtZWQgaW4g
cGFyYWxsZWwuICBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBieQorICogSW5kZXhBbSdzIHRoYXQg
bmVlZCB0byBzY2FuIHRoZSBpbmRleCB0byBkZWxldGUgdGhlIHR1cGxlcy4KKyAqLworI2RlZmlu
ZSBWQUNVVU1fT1BUSU9OX1BBUkFMTEVMX0JVTEtERUwJCSgxIDw8IDApCisKKy8qCisgKiB2YWN1
dW1jbGVhbnVwIGNhbiBiZSBwZXJmb3JtZWQgaW4gcGFyYWxsZWwgaWYgYnVsa2RlbGV0ZSBpcyBu
b3QgcGVyZm9ybWVkCisgKiB5ZXQuICBUaGlzIHdpbGwgYmUgdXNlZCBieSBJbmRleEFNJ3MgdGhh
dCBjYW4gc2NhbiB0aGUgaW5kZXggaWYgdGhlCisgKiBidWxrZGVsZXRlIGlzIG5vdCBwZXJmb3Jt
ZWQuCisgKi8KKyNkZWZpbmUgVkFDVVVNX09QVElPTl9QQVJBTExFTF9DT05EX0NMRUFOVVAJKDEg
PDwgMSkKKworLyoKKyAqIHZhY3V1bWNsZWFudXAgY2FuIGJlIHBlcmZvcm1lZCBpbiBwYXJhbGxl
bCBldmVuIGlmIGJ1bGtkZWxldGUgaGFzIGFscmVhZHkKKyAqIHByb2Nlc3NlZCB0aGUgaW5kZXgu
ICBUaGlzIHdpbGwgYmUgdXNlZCBieSBJbmRleEFNJ3MgdGhhdCBzY2FuIHRoZSBpbmRleAorICog
ZHVyaW5nIHRoZSBjbGVhbnVwIHBoYXNlIG9mIGluZGV4IGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVy
IHRoZSBpbmRleCBpcworICogYWxyZWFkeSBzY2FubmVkIG9yIG5vdCBkdXJpbmcgYnVsa2RlbGV0
ZSBwaGFzZS4KKyAqLworI2RlZmluZSBWQUNVVU1fT1BUSU9OX1BBUkFMTEVMX0NMRUFOVVAJCSgx
IDw8IDIpCisKKy8qIHZhbHVlIGZvciBjaGVja2luZyB2YWN1dW0gZmxhZ3MgKi8KKyNkZWZpbmUg
VkFDVVVNX09QVElPTl9NQVhfVkFMSURfVkFMVUUJCSgoMSA8PCAzKSAtIDEpCiAKIC8qLS0tLS0t
LS0tLQogICogQU5BTFlaRSBidWlsZHMgb25lIG9mIHRoZXNlIHN0cnVjdHMgZm9yIGVhY2ggYXR0
cmlidXRlIChjb2x1bW4pIHRoYXQgaXMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZHVt
bXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5k
ZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwppbmRleCA4OThhYjA2NjM5Li5mMzI2MzIwODliIDEwMDY0
NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMK
KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCkBA
IC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCiAjaW5jbHVkZSAiYWNj
ZXNzL3JlbG9wdGlvbnMuaCIKICNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCisjaW5jbHVkZSAi
Y29tbWFuZHMvdmFjdXVtLmgiCiAjaW5jbHVkZSAibm9kZXMvcGF0aG5vZGVzLmgiCiAjaW5jbHVk
ZSAidXRpbHMvZ3VjLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCkBAIC0yOTQsNiArMjk1LDgg
QEAgZGloYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbXByZWRsb2NrcyA9
IGZhbHNlOwogCWFtcm91dGluZS0+YW1jYW5wYXJhbGxlbCA9IGZhbHNlOwogCWFtcm91dGluZS0+
YW1jYW5pbmNsdWRlID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXVzZW1haW50ZW5hbmNld29ya21l
bSA9IGZhbHNlOworCWFtcm91dGluZS0+YW1wYXJhbGxlbHZhY3V1bW9wdGlvbnMgPSBWQUNVVU1f
T1BUSU9OX05PX1BBUkFMTEVMOwogCWFtcm91dGluZS0+YW1rZXl0eXBlID0gSW52YWxpZE9pZDsK
IAogCWFtcm91dGluZS0+YW1idWlsZCA9IGRpYnVpbGQ7Ci0tIAoyLjE2LjIud2luZG93cy4xCgo=
--000000000000a9643b059c18f087
Content-Type: application/octet-stream; 
	name="v47-0002-Allow-vacuum-command-to-process-indexes-in-parallel.patch"
Content-Disposition: attachment; 
	filename="v47-0002-Allow-vacuum-command-to-process-indexes-in-parallel.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_k5dva6x21>
X-Attachment-Id: f_k5dva6x21

RnJvbSBjMGVhNDdjOGY2MjM3NjZkZmNiZDc5MTdmMGQ1NGZiYjg0Zjc5NmNjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IEthcGlsYSA8YWthcGlsYUBwb3N0Z3Jlc3FsLm9yZz4K
RGF0ZTogVGh1LCA5IEphbiAyMDIwIDE1OjQ5OjQ2ICswNTMwClN1YmplY3Q6IFtQQVRDSCAyLzJd
IEFsbG93IHZhY3V1bSBjb21tYW5kIHRvIHByb2Nlc3MgaW5kZXhlcyBpbiBwYXJhbGxlbC4KClRo
aXMgZmVhdHVyZSBhbGxvd3MgdGhlIHZhY3V1bSB0byBsZXZlcmFnZSBtdWx0aXBsZSBDUFVzIGlu
IG9yZGVyIHRvCnByb2Nlc3MgaW5kZXhlcy4gIFRoaXMgZW5hYmxlcyB1cyB0byBwZXJmb3JtIGlu
ZGV4IHZhY3V1bWluZyBhbmQgaW5kZXgKY2xlYW51cCB3aXRoIGJhY2tncm91bmQgd29ya2Vycy4g
IFRoaXMgYWRkcyBhIFBBUkFMTEVMIG9wdGlvbiB0byBWQUNVVU0KY29tbWFuZCB3aGVyZSB0aGUg
dXNlciBjYW4gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIHdvcmtlcnMgdGhhdCBjYW4gYmUgdXNlZAp0
byBwZXJmb3JtIHRoZSBjb21tYW5kIHdoaWNoIGlzIGxpbWl0ZWQgYnkgdGhlIG51bWJlciBvZiBp
bmRleGVzIG9uIGEKdGFibGUuICBTcGVjaWZ5aW5nIHplcm8gYXMgYSBudW1iZXIgb2Ygd29ya2Vy
cyB3aWxsIGRpc2FibGUgcGFyYWxsZWxpc20uClRoaXMgb3B0aW9uIGNhbid0IGJlIHVzZWQgd2l0
aCB0aGUgRlVMTCBvcHRpb24uCgpFYWNoIGluZGV4IGlzIHByb2Nlc3NlZCBieSBhdCBtb3N0IG9u
ZSB2YWN1dW0gcHJvY2Vzcy4gIFRoZXJlZm9yZSBwYXJhbGxlbAp2YWN1dW0gY2FuIGJlIHVzZWQg
d2hlbiB0aGUgdGFibGUgaGFzIGF0IGxlYXN0IHR3byBpbmRleGVzLgoKVGhlIHBhcmFsbGVsIGRl
Z3JlZSBpcyBlaXRoZXIgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyIG9yIGRldGVybWluZWQgYmFzZWQg
b24KdGhlIG51bWJlciBvZiBpbmRleGVzIHRoYXQgdGhlIHRhYmxlIGhhcywgYW5kIGZ1cnRoZXIg
bGltaXRlZCBieQptYXhfcGFyYWxsZWxfbWFpbnRlbmFuY2Vfd29ya2Vycy4gIFRoZSBpbmRleCBj
YW4gcGFydGljaXBhdGUgaW4gcGFyYWxsZWwKdmFjdXVtIGlmZiBpdCdzIHNpemUgaXMgZ3JlYXRl
ciB0aGFuIG1pbl9wYXJhbGxlbF9pbmRleF9zY2FuX3NpemUuCgpBdXRob3I6IE1hc2FoaWtvIFNh
d2FkYSBhbmQgQW1pdCBLYXBpbGEKUmV2aWV3ZWQtYnk6IERpbGlwIEt1bWFyLCBBbWl0IEthcGls
YSwgUm9iZXJ0IEhhYXMsIFRvbWFzIFZvbmRyYSwKTWFoZW5kcmEgU2luZ2ggYW5kIFNlcmdlaSBL
b3JuaWxvdgpUZXN0ZWQtYnk6IE1haGVuZHJhIFNpbmdoIGFuZCBQcmFiaGF0IFNhaHUKRGlzY3Vz
c2lvbjoKaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUQyMUFvRFRQTWd6U2tWNEUzU0ZvMUNIX3g1MGJm
NVBxWkZRZjRqbXFqay1DMDNCV2dAbWFpbC5nbWFpbC5jb20KaHR0cHM6Ly9wb3N0Z3IuZXMvbS9D
QUE0ZUsxSi1Wb1I5Z3pTNUU3NXBjRC1PSDBtRXlDZHA4UmloY3dLcmN1dzdKLVEwK3dAbWFpbC5n
bWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgIHwgICAx
OCArLQogZG9jL3NyYy9zZ21sL3JlZi92YWN1dW0uc2dtbCAgICAgICAgICB8ICAgNjEgKy0KIHNy
Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYyAgfCAxMjY1ICsrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKy0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwu
YyB8ICAgMjYgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jICAgICAgICAgfCAgMTMz
ICsrKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jICAgfCAgICAyICsKIHNy
Yy9iaW4vcHNxbC90YWItY29tcGxldGUuYyAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVk
ZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgIHwgICAgMyArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv
cGFyYWxsZWwuaCAgICAgICAgIHwgICAgNCArLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVt
LmggICAgICAgICB8ICAgMTIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC92YWN1dW0ub3V0
ICB8ICAgMjggKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvdmFjdXVtLnNxbCAgICAgICB8ICAgMjcg
Kwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICB8ICAgIDQgKwogMTMgZmls
ZXMgY2hhbmdlZCwgMTQ0OSBpbnNlcnRpb25zKCspLCAxMzYgZGVsZXRpb25zKC0pCgpkaWZmIC0t
Z2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21s
CmluZGV4IDVkMWM5MDI4MmYuLmJlYjNkNTk5YzkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9j
b25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTIzMDgsMTMgKzIz
MDgsMTMgQEAgaW5jbHVkZV9kaXIgJ2NvbmYuZCcKICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAg
IDxwYXJhPgogICAgICAgICAgU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgd29y
a2VycyB0aGF0IGNhbiBiZQotICAgICAgICAgc3RhcnRlZCBieSBhIHNpbmdsZSB1dGlsaXR5IGNv
bW1hbmQuICBDdXJyZW50bHksIHRoZSBvbmx5Ci0gICAgICAgICBwYXJhbGxlbCB1dGlsaXR5IGNv
bW1hbmQgdGhhdCBzdXBwb3J0cyB0aGUgdXNlIG9mIHBhcmFsbGVsCi0gICAgICAgICB3b3JrZXJz
IGlzIDxjb21tYW5kPkNSRUFURSBJTkRFWDwvY29tbWFuZD4sIGFuZCBvbmx5IHdoZW4KLSAgICAg
ICAgIGJ1aWxkaW5nIGEgQi10cmVlIGluZGV4LiAgUGFyYWxsZWwgd29ya2VycyBhcmUgdGFrZW4g
ZnJvbSB0aGUKLSAgICAgICAgIHBvb2wgb2YgcHJvY2Vzc2VzIGVzdGFibGlzaGVkIGJ5IDx4cmVm
Ci0gICAgICAgICBsaW5rZW5kPSJndWMtbWF4LXdvcmtlci1wcm9jZXNzZXMiLz4sIGxpbWl0ZWQg
YnkgPHhyZWYKLSAgICAgICAgIGxpbmtlbmQ9Imd1Yy1tYXgtcGFyYWxsZWwtd29ya2VycyIvPi4g
IE5vdGUgdGhhdCB0aGUgcmVxdWVzdGVkCisgICAgICAgICBzdGFydGVkIGJ5IGEgc2luZ2xlIHV0
aWxpdHkgY29tbWFuZC4gIEN1cnJlbnRseSwgdGhlIHBhcmFsbGVsCisgICAgICAgICB1dGlsaXR5
IGNvbW1hbmRzIHRoYXQgc3VwcG9ydCB0aGUgdXNlIG9mIHBhcmFsbGVsIHdvcmtlcnMgYXJlCisg
ICAgICAgICA8Y29tbWFuZD5DUkVBVEUgSU5ERVg8L2NvbW1hbmQ+IG9ubHkgd2hlbiBidWlsZGlu
ZyBhIEItdHJlZSBpbmRleCwKKyAgICAgICAgIGFuZCA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+
IHdpdGhvdXQgPGxpdGVyYWw+RlVMTDwvbGl0ZXJhbD4KKyAgICAgICAgIG9wdGlvbi4gIFBhcmFs
bGVsIHdvcmtlcnMgYXJlIHRha2VuIGZyb20gdGhlIHBvb2wgb2YgcHJvY2Vzc2VzCisgICAgICAg
ICBlc3RhYmxpc2hlZCBieSA8eHJlZiBsaW5rZW5kPSJndWMtbWF4LXdvcmtlci1wcm9jZXNzZXMi
Lz4sIGxpbWl0ZWQKKyAgICAgICAgIGJ5IDx4cmVmIGxpbmtlbmQ9Imd1Yy1tYXgtcGFyYWxsZWwt
d29ya2VycyIvPi4gIE5vdGUgdGhhdCB0aGUgcmVxdWVzdGVkCiAgICAgICAgICBudW1iZXIgb2Yg
d29ya2VycyBtYXkgbm90IGFjdHVhbGx5IGJlIGF2YWlsYWJsZSBhdCBydW4gdGltZS4KICAgICAg
ICAgIElmIHRoaXMgb2NjdXJzLCB0aGUgdXRpbGl0eSBvcGVyYXRpb24gd2lsbCBydW4gd2l0aCBm
ZXdlcgogICAgICAgICAgd29ya2VycyB0aGFuIGV4cGVjdGVkLiAgVGhlIGRlZmF1bHQgdmFsdWUg
aXMgMi4gIFNldHRpbmcgdGhpcwpAQCAtNDg5NSw3ICs0ODk1LDkgQEAgQU5ZIDxyZXBsYWNlYWJs
ZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxl
IGNsYXNzPSIKICAgICAgICAgZm9yIGEgcGFyYWxsZWwgc2NhbiB0byBiZSBjb25zaWRlcmVkLiAg
Tm90ZSB0aGF0IGEgcGFyYWxsZWwgaW5kZXggc2NhbgogICAgICAgICB0eXBpY2FsbHkgd29uJ3Qg
dG91Y2ggdGhlIGVudGlyZSBpbmRleDsgaXQgaXMgdGhlIG51bWJlciBvZiBwYWdlcwogICAgICAg
ICB3aGljaCB0aGUgcGxhbm5lciBiZWxpZXZlcyB3aWxsIGFjdHVhbGx5IGJlIHRvdWNoZWQgYnkg
dGhlIHNjYW4gd2hpY2gKLSAgICAgICAgaXMgcmVsZXZhbnQuCisgICAgICAgIGlzIHJlbGV2YW50
LiAgVGhpcyBwYXJhbWV0ZXIgaXMgYWxzbyB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIGEKKyAgICAg
ICAgcGFydGljdWxhciBpbmRleCBjYW4gcGFydGljaXBhdGUgaW4gYSBwYXJhbGxlbCB2YWN1dW0u
ICBTZWUKKyAgICAgICAgPHhyZWYgbGlua2VuZD0ic3FsLXZhY3V1bSIvPi4KICAgICAgICAgSWYg
dGhpcyB2YWx1ZSBpcyBzcGVjaWZpZWQgd2l0aG91dCB1bml0cywgaXQgaXMgdGFrZW4gYXMgYmxv
Y2tzLAogICAgICAgICB0aGF0IGlzIDxzeW1ib2w+QkxDS1NaPC9zeW1ib2w+IGJ5dGVzLCB0eXBp
Y2FsbHkgOGtCLgogICAgICAgICBUaGUgZGVmYXVsdCBpcyA1MTIga2lsb2J5dGVzICg8bGl0ZXJh
bD41MTJrQjwvbGl0ZXJhbD4pLgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi92YWN1dW0u
c2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvdmFjdXVtLnNnbWwKaW5kZXggZjliMGZiODc5NC4uODQ2
MDU2YTM1MyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi92YWN1dW0uc2dtbAorKysgYi9k
b2Mvc3JjL3NnbWwvcmVmL3ZhY3V1bS5zZ21sCkBAIC0zNCw2ICszNCw3IEBAIFZBQ1VVTSBbIEZV
TEwgXSBbIEZSRUVaRSBdIFsgVkVSQk9TRSBdIFsgQU5BTFlaRSBdIFsgPHJlcGxhY2VhYmxlIGNs
YXNzPSJwYXJhbWV0CiAgICAgU0tJUF9MT0NLRUQgWyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt
ZXRlciI+Ym9vbGVhbjwvcmVwbGFjZWFibGU+IF0KICAgICBJTkRFWF9DTEVBTlVQIFsgPHJlcGxh
Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmJvb2xlYW48L3JlcGxhY2VhYmxlPiBdCiAgICAgVFJV
TkNBVEUgWyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Ym9vbGVhbjwvcmVwbGFjZWFi
bGU+IF0KKyAgICBQQVJBTExFTCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+aW50ZWdl
cjwvcmVwbGFjZWFibGU+CiAKIDxwaHJhc2U+YW5kIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l
dGVyIj50YWJsZV9hbmRfY29sdW1uczwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgogCkBAIC03
NSwxMCArNzYsMTQgQEAgVkFDVVVNIFsgRlVMTCBdIFsgRlJFRVpFIF0gWyBWRVJCT1NFIF0gWyBB
TkFMWVpFIF0gWyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXQKICAgIHdpdGggbm9ybWFsIHJl
YWRpbmcgYW5kIHdyaXRpbmcgb2YgdGhlIHRhYmxlLCBhcyBhbiBleGNsdXNpdmUgbG9jawogICAg
aXMgbm90IG9idGFpbmVkLiAgSG93ZXZlciwgZXh0cmEgc3BhY2UgaXMgbm90IHJldHVybmVkIHRv
IHRoZSBvcGVyYXRpbmcKICAgIHN5c3RlbSAoaW4gbW9zdCBjYXNlcyk7IGl0J3MganVzdCBrZXB0
IGF2YWlsYWJsZSBmb3IgcmUtdXNlIHdpdGhpbiB0aGUKLSAgIHNhbWUgdGFibGUuICA8Y29tbWFu
ZD5WQUNVVU0gRlVMTDwvY29tbWFuZD4gcmV3cml0ZXMgdGhlIGVudGlyZSBjb250ZW50cwotICAg
b2YgdGhlIHRhYmxlIGludG8gYSBuZXcgZGlzayBmaWxlIHdpdGggbm8gZXh0cmEgc3BhY2UsIGFs
bG93aW5nIHVudXNlZAotICAgc3BhY2UgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIG9wZXJhdGluZyBz
eXN0ZW0uICBUaGlzIGZvcm0gaXMgbXVjaCBzbG93ZXIgYW5kCi0gICByZXF1aXJlcyBhbiBleGNs
dXNpdmUgbG9jayBvbiBlYWNoIHRhYmxlIHdoaWxlIGl0IGlzIGJlaW5nIHByb2Nlc3NlZC4KKyAg
IHNhbWUgdGFibGUuICBJdCBhbHNvIGFsbG93cyB1cyB0byBsZXZlcmFnZSBtdWx0aXBsZSBDUFVz
IGluIG9yZGVyIHRvIHByb2Nlc3MKKyAgIGluZGV4ZXMuICBUaGlzIGZlYXR1cmUgaXMga25vd24g
YXMgPGZpcnN0dGVybT5wYXJhbGxlbCB2YWN1dW08L2ZpcnN0dGVybT4uCisgICBUbyBkaXNhYmxl
IHRoaXMgZmVhdHVyZSwgb25lIGNhbiB1c2UgPGxpdGVyYWw+UEFSQUxMRUw8L2xpdGVyYWw+IG9w
dGlvbiBhbmQKKyAgIHNwZWNpZnkgcGFyYWxsZWwgd29ya2VycyBhcyB6ZXJvLiAgPGNvbW1hbmQ+
VkFDVVVNIEZVTEw8L2NvbW1hbmQ+IHJld3JpdGVzCisgICB0aGUgZW50aXJlIGNvbnRlbnRzIG9m
IHRoZSB0YWJsZSBpbnRvIGEgbmV3IGRpc2sgZmlsZSB3aXRoIG5vIGV4dHJhIHNwYWNlLAorICAg
YWxsb3dpbmcgdW51c2VkIHNwYWNlIHRvIGJlIHJldHVybmVkIHRvIHRoZSBvcGVyYXRpbmcgc3lz
dGVtLiAgVGhpcyBmb3JtIGlzCisgICBtdWNoIHNsb3dlciBhbmQgcmVxdWlyZXMgYW4gZXhjbHVz
aXZlIGxvY2sgb24gZWFjaCB0YWJsZSB3aGlsZSBpdCBpcyBiZWluZworICAgcHJvY2Vzc2VkLgog
ICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC0yMjMsNiArMjI4LDMzIEBAIFZBQ1VVTSBbIEZVTEwg
XSBbIEZSRUVaRSBdIFsgVkVSQk9TRSBdIFsgQU5BTFlaRSBdIFsgPHJlcGxhY2VhYmxlIGNsYXNz
PSJwYXJhbWV0CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogCisgICA8dmFy
bGlzdGVudHJ5PgorICAgIDx0ZXJtPjxsaXRlcmFsPlBBUkFMTEVMPC9saXRlcmFsPjwvdGVybT4K
KyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUGVyZm9ybSB2YWN1dW0gaW5kZXgg
YW5kIGNsZWFudXAgaW5kZXggcGhhc2VzIG9mIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4KKyAg
ICAgIGluIHBhcmFsbGVsIHVzaW5nIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbnRl
Z2VyPC9yZXBsYWNlYWJsZT4KKyAgICAgIGJhY2tncm91bmQgd29ya2VycyAoZm9yIHRoZSBkZXRh
aWwgb2YgZWFjaCB2YWN1dW0gcGhhc2VzLCBwbGVhc2UKKyAgICAgIHJlZmVyIHRvIDx4cmVmIGxp
bmtlbmQ9InZhY3V1bS1waGFzZXMiLz4pLiAgSWYgdGhlCisgICAgICA8bGl0ZXJhbD5QQVJBTExF
TDwvbGl0ZXJhbD4gb3B0aW9uIGlzIG9taXR0ZWQsIHRoZW4KKyAgICAgIDxjb21tYW5kPlZBQ1VV
TTwvY29tbWFuZD4gZGVjaWRlcyB0aGUgbnVtYmVyIG9mIHdvcmtlcnMgYmFzZWQgb24gbnVtYmVy
CisgICAgICBvZiBpbmRleGVzIHRoYXQgc3VwcG9ydCBwYXJhbGxlbCB2YWN1dW0gb3BlcmF0aW9u
IG9uIHRoZSByZWxhdGlvbiB3aGljaAorICAgICAgaXMgZnVydGhlciBsaW1pdGVkIGJ5IDx4cmVm
IGxpbmtlbmQ9Imd1Yy1tYXgtcGFyYWxsZWwtd29ya2Vycy1tYWludGVuYW5jZSIvPi4KKyAgICAg
IFRoZSBpbmRleCBjYW4gcGFydGljaXBhdGUgaW4gYSBwYXJhbGxlbCB2YWN1dW0gaWYgYW5kIG9u
bHkgaWYgdGhlIHNpemUKKyAgICAgIG9mIHRoZSBpbmRleCBpcyBtb3JlIHRoYW4gPHhyZWYgbGlu
a2VuZD0iZ3VjLW1pbi1wYXJhbGxlbC1pbmRleC1zY2FuLXNpemUiLz4uCisgICAgICBQbGVhc2Ug
bm90ZSB0aGF0IGl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXQgdGhlIG51bWJlciBvZiBwYXJhbGxl
bCB3b3JrZXJzCisgICAgICBzcGVjaWZpZWQgaW4gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0
ZXIiPmludGVnZXI8L3JlcGxhY2VhYmxlPiB3aWxsCisgICAgICBiZSB1c2VkIGR1cmluZyBleGVj
dXRpb24uICBJdCBpcyBwb3NzaWJsZSBmb3IgYSB2YWN1dW0gdG8gcnVuIHdpdGggZmV3ZXIKKyAg
ICAgIHdvcmtlcnMgdGhhbiBzcGVjaWZpZWQsIG9yIGV2ZW4gd2l0aCBubyB3b3JrZXJzIGF0IGFs
bC4gIE9ubHkgb25lIHdvcmtlcgorICAgICAgY2FuIGJlIHVzZWQgcGVyIGluZGV4LiAgU28gcGFy
YWxsZWwgd29ya2VycyBhcmUgbGF1bmNoZWQgb25seSB3aGVuIHRoZXJlCisgICAgICBhcmUgYXQg
bGVhc3QgPGxpdGVyYWw+MjwvbGl0ZXJhbD4gaW5kZXhlcyBpbiB0aGUgdGFibGUuICBXb3JrZXJz
IGZvcgorICAgICAgdmFjdXVtIGxhdW5jaGVzIGJlZm9yZSBzdGFydGluZyBlYWNoIHBoYXNlIGFu
ZCBleGl0IGF0IHRoZSBlbmQgb2YKKyAgICAgIHRoZSBwaGFzZS4gIFRoZXNlIGJlaGF2aW9ycyBt
aWdodCBjaGFuZ2UgaW4gYSBmdXR1cmUgcmVsZWFzZS4gIFRoaXMKKyAgICAgIG9wdGlvbiBjYW4n
dCBiZSB1c2VkIHdpdGggdGhlIDxsaXRlcmFsPkZVTEw8L2xpdGVyYWw+IG9wdGlvbi4KKyAgICAg
PC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgPHZhcmxp
c3RlbnRyeT4KICAgICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Ym9vbGVh
bjwvcmVwbGFjZWFibGU+PC90ZXJtPgogICAgIDxsaXN0aXRlbT4KQEAgLTIzNyw2ICsyNjksMTUg
QEAgVkFDVVVNIFsgRlVMTCBdIFsgRlJFRVpFIF0gWyBWRVJCT1NFIF0gWyBBTkFMWVpFIF0gWyA8
cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXQKICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0
ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+PHJlcGxhY2VhYmxlIGNsYXNz
PSJwYXJhbWV0ZXIiPmludGVnZXI8L3JlcGxhY2VhYmxlPjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+
CisgICAgIDxwYXJhPgorICAgICAgU3BlY2lmaWVzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFs
dWUgcGFzc2VkIHRvIHRoZSBzZWxlY3RlZCBvcHRpb24uCisgICAgIDwvcGFyYT4KKyAgICA8L2xp
c3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgPHRl
cm0+PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxl
PjwvdGVybT4KICAgICA8bGlzdGl0ZW0+CkBAIC0zMTYsMTEgKzM1NywxOSBAQCBWQUNVVU0gWyBG
VUxMIF0gWyBGUkVFWkUgXSBbIFZFUkJPU0UgXSBbIEFOQUxZWkUgXSBbIDxyZXBsYWNlYWJsZSBj
bGFzcz0icGFyYW1ldAogICAgIG1vcmUgdGhhbiBhIHBsYWluIDxjb21tYW5kPlZBQ1VVTTwvY29t
bWFuZD4gd291bGQuCiAgICA8L3BhcmE+CiAKKyAgIDxwYXJhPgorICAgICBUaGUgPG9wdGlvbj5Q
QVJBTExFTDwvb3B0aW9uPiBvcHRpb24gaXMgdXNlZCBvbmx5IGZvciB2YWN1dW0gcHVycG9zZS4K
KyAgICAgRXZlbiBpZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQgd2l0aCA8b3B0aW9uPkFOQUxZ
WkU8L29wdGlvbj4gb3B0aW9uCisgICAgIGl0IGRvZXMgbm90IGFmZmVjdCA8b3B0aW9uPkFOQUxZ
WkU8L29wdGlvbj4uCisgICA8L3BhcmE+CisKICAgIDxwYXJhPgogICAgIDxjb21tYW5kPlZBQ1VV
TTwvY29tbWFuZD4gY2F1c2VzIGEgc3Vic3RhbnRpYWwgaW5jcmVhc2UgaW4gSS9PIHRyYWZmaWMs
CiAgICAgd2hpY2ggbWlnaHQgY2F1c2UgcG9vciBwZXJmb3JtYW5jZSBmb3Igb3RoZXIgYWN0aXZl
IHNlc3Npb25zLiAgVGhlcmVmb3JlLAotICAgIGl0IGlzIHNvbWV0aW1lcyBhZHZpc2FibGUgdG8g
dXNlIHRoZSBjb3N0LWJhc2VkIHZhY3V1bSBkZWxheSBmZWF0dXJlLgotICAgIFNlZSA8eHJlZiBs
aW5rZW5kPSJydW50aW1lLWNvbmZpZy1yZXNvdXJjZS12YWN1dW0tY29zdCIvPiBmb3IgZGV0YWls
cy4KKyAgICBpdCBpcyBzb21ldGltZXMgYWR2aXNhYmxlIHRvIHVzZSB0aGUgY29zdC1iYXNlZCB2
YWN1dW0gZGVsYXkgZmVhdHVyZS4gIEZvcgorICAgIHBhcmFsbGVsIHZhY3V1bSwgZWFjaCB3b3Jr
ZXIgc2xlZXBzIHByb3BvcnRpb25hbCB0byB0aGUgd29yayBkb25lIGJ5IHRoYXQKKyAgICB3b3Jr
ZXIuICBTZWUgPHhyZWYgbGlua2VuZD0icnVudGltZS1jb25maWctcmVzb3VyY2UtdmFjdXVtLWNv
c3QiLz4gZm9yCisgICAgZGV0YWlscy4KICAgIDwvcGFyYT4KIAogICAgPHBhcmE+CmRpZmYgLS1n
aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgYi9zcmMvYmFja2VuZC9h
Y2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKaW5kZXggYTVmZTkwNDg1Zi4uZDJjODk1YTZmYiAxMDA2
NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCisrKyBiL3NyYy9i
YWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwpAQCAtMjIsNiArMjIsMjAgQEAKICAqIG9m
IGluZGV4IHNjYW5zIHBlcmZvcm1lZC4gIFNvIHdlIGRvbid0IHVzZSBtYWludGVuYW5jZV93b3Jr
X21lbSBtZW1vcnkgZm9yCiAgKiB0aGUgVElEIGFycmF5LCBqdXN0IGVub3VnaCB0byBob2xkIGFz
IG1hbnkgaGVhcCB0dXBsZXMgYXMgZml0IG9uIG9uZSBwYWdlLgogICoKKyAqIExhenkgdmFjdXVt
IHN1cHBvcnRzIHBhcmFsbGVsIGV4ZWN1dGlvbiB3aXRoIHBhcmFsbGVsIHdvcmtlciBwcm9jZXNz
ZXMuICBJbgorICogYSBwYXJhbGxlbCBsYXp5IHZhY3V1bSwgd2UgcGVyZm9ybSBib3RoIGluZGV4
IHZhY3V1bSBhbmQgaW5kZXggY2xlYW51cCB3aXRoCisgKiBwYXJhbGxlbCB3b3JrZXIgcHJvY2Vz
c2VzLiAgSW5kaXZpZHVhbCBpbmRleGVzIGFyZSBwcm9jZXNzZWQgYnkgb25lIHZhY3V1bQorICog
cHJvY2Vzcy4gIEF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsYXp5IHZhY3V1bSAoYXQgbGF6eV9zY2Fu
X2hlYXApIHdlIHByZXBhcmUKKyAqIHRoZSBwYXJhbGxlbCBjb250ZXh0IGFuZCBpbml0aWFsaXpl
IHRoZSBEU00gc2VnbWVudCB0aGF0IGNvbnRhaW5zIHNoYXJlZAorICogaW5mb3JtYXRpb24gYXMg
d2VsbCBhcyB0aGUgbWVtb3J5IHNwYWNlIGZvciBzdG9yaW5nIGRlYWQgdHVwbGVzLiAgV2hlbgor
ICogc3RhcnRpbmcgZWl0aGVyIGluZGV4IHZhY3V1bSBvciBpbmRleCBjbGVhbnVwLCB3ZSBsYXVu
Y2ggcGFyYWxsZWwgd29ya2VyCisgKiBwcm9jZXNzZXMuICBPbmNlIGFsbCBpbmRleGVzIGFyZSBw
cm9jZXNzZWQgdGhlIHBhcmFsbGVsIHdvcmtlciBwcm9jZXNzZXMKKyAqIGV4aXQuICBBZnRlciB0
aGF0LCB0aGUgbGVhZGVyIHByb2Nlc3MgcmUtaW5pdGlhbGl6ZXMgdGhlIHBhcmFsbGVsIGNvbnRl
eHQKKyAqIHNvIHRoYXQgaXQgY2FuIHVzZSB0aGUgc2FtZSBEU00gZm9yIG11bHRpcGxlIHBhc3Nl
cyBvZiBpbmRleCB2YWN1dW0gYW5kCisgKiBmb3IgcGVyZm9ybWluZyBpbmRleCBjbGVhbnVwLiAg
Rm9yIHVwZGF0aW5nIHRoZSBpbmRleCBzdGF0aXN0aWNzLCB3ZSBuZWVkCisgKiB0byB1cGRhdGUg
dGhlIHN5c3RlbSB0YWJsZSBhbmQgc2luY2UgdXBkYXRlcyBhcmUgbm90IGFsbG93ZWQgZHVyaW5n
CisgKiBwYXJhbGxlbCBtb2RlIHdlIHVwZGF0ZSB0aGUgaW5kZXggc3RhdGlzdGljcyBhZnRlciBl
eGl0aW5nIGZyb20gdGhlCisgKiBwYXJhbGxlbCBtb2RlLgogICoKICAqIFBvcnRpb25zIENvcHly
aWdodCAoYykgMTk5Ni0yMDIwLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAog
ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5
IG9mIENhbGlmb3JuaWEKQEAgLTM2LDI1ICs1MCwzMCBAQAogCiAjaW5jbHVkZSA8bWF0aC5oPgog
CisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAj
aW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW1feGxvZy5o
IgogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvbXVs
dGl4YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAiYWNjZXNz
L3RyYW5zYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgorI2luY2x1ZGUg
ImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKICNpbmNsdWRlICJjYXRh
bG9nL3N0b3JhZ2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kYmNvbW1hbmRzLmgiCiAjaW5jbHVk
ZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKICNp
bmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNs
dWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3J0YWJpbGl0eS9pbnN0cl90aW1lLmgiCiAjaW5j
bHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3Iu
aCIKICNpbmNsdWRlICJzdG9yYWdlL2ZyZWVzcGFjZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1n
ci5oIgorI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj
aGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BnX3J1
c2FnZS5oIgpAQCAtMTEwLDYgKzEyOSwxNDIgQEAKICAqLwogI2RlZmluZSBQUkVGRVRDSF9TSVpF
CQkJKChCbG9ja051bWJlcikgMzIpCiAKKy8qCisgKiBEU00ga2V5cyBmb3IgcGFyYWxsZWwgbGF6
eSB2YWN1dW0uICBVbmxpa2Ugb3RoZXIgcGFyYWxsZWwgZXhlY3V0aW9uIGNvZGUsCisgKiBzaW5j
ZSB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IERTTSBrZXlzIGNvbmZsaWN0aW5nIHdpdGgg
cGxhbl9ub2RlX2lkCisgKiB3ZSBjYW4gdXNlIHNtYWxsIGludGVnZXJzLgorICovCisjZGVmaW5l
IFBBUkFMTEVMX1ZBQ1VVTV9LRVlfU0hBUkVECQkJMQorI2RlZmluZSBQQVJBTExFTF9WQUNVVU1f
S0VZX0RFQURfVFVQTEVTCQkyCisjZGVmaW5lIFBBUkFMTEVMX1ZBQ1VVTV9LRVlfUVVFUllfVEVY
VAkJMworCisvKgorICogTWFjcm8gdG8gY2hlY2sgaWYgd2UgYXJlIGluIGEgcGFyYWxsZWwgbGF6
eSB2YWN1dW0uICBJZiB0cnVlLCB3ZSBhcmUKKyAqIGluIHRoZSBwYXJhbGxlbCBtb2RlIGFuZCB0
aGUgRFNNIHNlZ21lbnQgaXMgaW5pdGlhbGl6ZWQuCisgKi8KKyNkZWZpbmUgUGFyYWxsZWxWYWN1
dW1Jc0FjdGl2ZShscHMpICgoKExWUGFyYWxsZWxTdGF0ZSAqKSAobHBzKSkgIT0gTlVMTCkKKwor
LyoKKyAqIExWRGVhZFR1cGxlcyBzdG9yZXMgdGhlIGRlYWQgdHVwbGUgVElEcyBjb2xsZWN0ZWQg
ZHVyaW5nIHRoZSBoZWFwIHNjYW4uCisgKiBUaGlzIGlzIGFsbG9jYXRlZCBpbiB0aGUgRFNNIHNl
Z21lbnQgaW4gcGFyYWxsZWwgbW9kZSBhbmQgaW4gbG9jYWwgbWVtb3J5CisgKiBpbiBub24tcGFy
YWxsZWwgbW9kZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTFZEZWFkVHVwbGVzCit7CisJaW50CQkJ
bWF4X3R1cGxlczsJCS8qICMgc2xvdHMgYWxsb2NhdGVkIGluIGFycmF5ICovCisJaW50CQkJbnVt
X3R1cGxlczsJCS8qIGN1cnJlbnQgIyBvZiBlbnRyaWVzICovCisJLyogTGlzdCBvZiBUSURzIG9m
IHR1cGxlcyB3ZSBpbnRlbmQgdG8gZGVsZXRlICovCisJLyogTkI6IHRoaXMgbGlzdCBpcyBvcmRl
cmVkIGJ5IFRJRCBhZGRyZXNzICovCisJSXRlbVBvaW50ZXJEYXRhIGl0ZW1wdHJzW0ZMRVhJQkxF
X0FSUkFZX01FTUJFUl07CS8qIGFycmF5IG9mCisJCQkJCQkJCQkJCQkJCSAqIEl0ZW1Qb2ludGVy
RGF0YSAqLworfSBMVkRlYWRUdXBsZXM7CisKKyNkZWZpbmUgU2l6ZU9mTFZEZWFkVHVwbGVzKGNu
dCkgXAorCQlhZGRfc2l6ZSgob2Zmc2V0b2YoTFZEZWFkVHVwbGVzLCBpdGVtcHRycykpLCBcCisJ
CQkJIG11bF9zaXplKHNpemVvZihJdGVtUG9pbnRlckRhdGEpLCBjbnQpKQorCisvKgorICogU2hh
cmVkIGluZm9ybWF0aW9uIGFtb25nIHBhcmFsbGVsIHdvcmtlcnMuICBTbyB0aGlzIGlzIGFsbG9j
YXRlZCBpbiB0aGUgRFNNCisgKiBzZWdtZW50LgorICovCit0eXBlZGVmIHN0cnVjdCBMVlNoYXJl
ZAoreworCS8qCisJICogVGFyZ2V0IHRhYmxlIHJlbGlkIGFuZCBsb2cgbGV2ZWwuICBUaGVzZSBm
aWVsZHMgYXJlIG5vdCBtb2RpZmllZCBkdXJpbmcKKwkgKiB0aGUgbGF6eSB2YWN1dW0uCisJICov
CisJT2lkCQkJcmVsaWQ7CisJaW50CQkJZWxldmVsOworCisJLyoKKwkgKiBBbiBpbmRpY2F0aW9u
IGZvciB2YWN1dW0gd29ya2VycyB0byBwZXJmb3JtIGVpdGhlciBpbmRleCB2YWN1dW0gb3IKKwkg
KiBpbmRleCBjbGVhbnVwLiAgZmlyc3RfdGltZSBpcyB0cnVlIG9ubHkgaWYgZm9yX2NsZWFudXAg
aXMgdHJ1ZSBhbmQKKwkgKiBidWxrLWRlbGV0aW9uIGlzIG5vdCBwZXJmb3JtZWQgeWV0LgorCSAq
LworCWJvb2wJCWZvcl9jbGVhbnVwOworCWJvb2wJCWZpcnN0X3RpbWU7CisKKwkvKgorCSAqIEZp
ZWxkcyBmb3IgYm90aCBpbmRleCB2YWN1dW0gYW5kIGNsZWFudXAuCisJICoKKwkgKiByZWx0dXBs
ZXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBpbnB1dCBoZWFwIHR1cGxlcy4gIFdlIHNldCBlaXRo
ZXIgb2xkCisJICogbGl2ZSB0dXBsZXMgaW4gdGhlIGluZGV4IHZhY3V1bSBjYXNlIG9yIHRoZSBu
ZXcgbGl2ZSB0dXBsZXMgaW4gdGhlCisJICogaW5kZXggY2xlYW51cCBjYXNlLgorCSAqCisJICog
ZXN0aW1hdGVkX2NvdW50IGlzIHRydWUgaWYgdGhlIHJlbHR1cGxlcyBpcyBhbiBlc3RpbWF0ZWQg
dmFsdWUuCisJICovCisJZG91YmxlCQlyZWx0dXBsZXM7CisJYm9vbAkJZXN0aW1hdGVkX2NvdW50
OworCisJLyoKKwkgKiBJbiBzaW5nbGUgcHJvY2VzcyBsYXp5IHZhY3V1bSB3ZSBjb3VsZCBjb25z
dW1lIG1vcmUgbWVtb3J5IGR1cmluZyBpbmRleAorCSAqIHZhY3V1bWluZyBvciBjbGVhbnVwIGFw
YXJ0IGZyb20gdGhlIG1lbW9yeSBmb3IgaGVhcCBzY2FubmluZy4gSW4KKwkgKiBwYXJhbGxlbCBp
bmRleCB2YWN1dW0sIHNpbmNlIGluZGl2aWR1YWwgdmFjdXVtIHdvcmtlcnMgY2FuIGNvbnN1bWUK
KwkgKiBtZW1vcnkgZXF1YWwgdG8gbWFpbnRlbmFuY2Vfd29ya19tZW0sIHRoZSBuZXcgbWFpbnRl
bmFuY2Vfd29ya19tZW0gZm9yCisJICogZWFjaCB3b3JrZXIgaXMgc2V0IHN1Y2ggdGhhdCB0aGUg
cGFyYWxsZWwgb3BlcmF0aW9uIGRvZXNuJ3QgY29uc3VtZQorCSAqIG1vcmUgbWVtb3J5IHRoYW4g
c2luZ2xlIHByb2Nlc3MgbGF6eSB2YWN1dW0uCisJICovCisJaW50CQkJbWFpbnRlbmFuY2Vfd29y
a19tZW1fd29ya2VyOworCisJLyoKKwkgKiBTaGFyZWQgdmFjdXVtIGNvc3QgYmFsYW5jZS4gIER1
cmluZyBwYXJhbGxlbCBpbmRleCB2YWN1dW1pbmcKKwkgKiBWYWN1dW1TaGFyZWRDb3N0QmFsYW5j
ZSBwb2ludHMgdG8gdGhpcyB2YWx1ZSBhbmQgaXQgYWNjdW11bGF0ZXMgdGhlCisJICogYmFsYW5j
ZSBvZiBlYWNoIHBhcmFsbGVsIHZhY3V1bSB3b3JrZXIuCisJICovCisJcGdfYXRvbWljX3VpbnQz
MiBjb3N0X2JhbGFuY2U7CisKKwkvKgorCSAqIE51bWJlciBvZiBhY3RpdmUgcGFyYWxsZWwgd29y
a2Vycy4gIFRoaXMgaXMgdXNlZCBmb3IgY29tcHV0aW5nIHRoZQorCSAqIG1pbmltdW0gdGhyZXNo
b2xkIG9mIHRoZSB2YWN1dW0gY29zdCBiYWxhbmNlIGZvciBhIHdvcmtlciB0byBnbyBmb3IgdGhl
CisJICogZGVsYXkuCisJICovCisJcGdfYXRvbWljX3VpbnQzMiBhY3RpdmVfbndvcmtlcnM7CisK
KwkvKgorCSAqIFZhcmlhYmxlcyB0byBjb250cm9sIHBhcmFsbGVsIGluZGV4IHZhY3V1bWluZy4g
IFdlIGhhdmUgYSBiaXRtYXAgdG8KKwkgKiBpbmRpY2F0ZSB3aGljaCBpbmRleCBoYXMgc3RhdHMg
aW4gc2hhcmVkIG1lbW9yeS4gIFRoZSBzZXQgYml0IGluIHRoZQorCSAqIG1hcCBpbmRpY2F0ZXMg
dGhhdCB0aGUgcGFydGljdWxhciBpbmRleCBzdXBwb3J0cyBhIHBhcmFsbGVsIHZhY3V1bS4KKwkg
Ki8KKwlwZ19hdG9taWNfdWludDMyIGlkeDsJCS8qIGNvdW50ZXIgZm9yIHZhY3V1bWluZyBhbmQg
Y2xlYW4gdXAgKi8KKwl1aW50MzIJCW9mZnNldDsJCQkvKiBzaXplb2YgaGVhZGVyIGluY2wuIGJp
dG1hcCAqLworCWJpdHM4CQliaXRtYXBbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsJLyogYml0IG1h
cCBvZiBOVUxMcyAqLworCisJLyogU2hhcmVkIGluZGV4IHN0YXRpc3RpY3MgZGF0YSBmb2xsb3dz
IGF0IGVuZCBvZiBzdHJ1Y3QgKi8KK30gTFZTaGFyZWQ7CisKKyNkZWZpbmUgU2l6ZU9mTFZTaGFy
ZWQgKG9mZnNldG9mKExWU2hhcmVkLCBiaXRtYXApICsgc2l6ZW9mKGJpdHM4KSkKKyNkZWZpbmUg
R2V0U2hhcmVkSW5kU3RhdHMocykgXAorCSgoTFZTaGFyZWRJbmRTdGF0cyAqKSgoY2hhciAqKShz
KSArICgoTFZTaGFyZWQgKikocykpLT5vZmZzZXQpKQorI2RlZmluZSBJbmRTdGF0c0lzTnVsbChz
LCBpKSBcCisJKCEoKChMVlNoYXJlZCAqKShzKSktPmJpdG1hcFsoaSkgPj4gM10gJiAoMSA8PCAo
KGkpICYgMHgwNykpKSkKKworLyoKKyAqIFN0cnVjdCBmb3IgYW4gaW5kZXggYnVsay1kZWxldGlv
biBzdGF0aXN0aWMgdXNlZCBmb3IgcGFyYWxsZWwgbGF6eQorICogdmFjdXVtLiAgVGhpcyBpcyBh
bGxvY2F0ZWQgaW4gdGhlIERTTSBzZWdtZW50LgorICovCit0eXBlZGVmIHN0cnVjdCBMVlNoYXJl
ZEluZFN0YXRzCit7CisJYm9vbAkJdXBkYXRlZDsJCS8qIGFyZSB0aGUgc3RhdHMgdXBkYXRlZD8g
Ki8KKwlJbmRleEJ1bGtEZWxldGVSZXN1bHQgc3RhdHM7Cit9IExWU2hhcmVkSW5kU3RhdHM7CisK
Ky8qIFN0cnVjdCBmb3IgbWFpbnRhaW5pbmcgYSBwYXJhbGxlbCB2YWN1dW0gc3RhdGUuICovCit0
eXBlZGVmIHN0cnVjdCBMVlBhcmFsbGVsU3RhdGUKK3sKKwlQYXJhbGxlbENvbnRleHQgKnBjeHQ7
CisKKwkvKiBTaGFyZWQgaW5mb3JtYXRpb24gYW1vbmcgcGFyYWxsZWwgdmFjdXVtIHdvcmtlcnMg
Ki8KKwlMVlNoYXJlZCAgICpsdnNoYXJlZDsKKworCS8qCisJICogVGhlIG51bWJlciBvZiBpbmRl
eGVzIHRoYXQgc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBidWxrLWRlbGV0aW9uIGFuZAorCSAqIHBh
cmFsbGVsIGluZGV4IGNsZWFudXAgcmVzcGVjdGl2ZWx5LgorCSAqLworCWludAkJCW5pbmRleGVz
X3BhcmFsbGVsX2J1bGtkZWw7CisJaW50CQkJbmluZGV4ZXNfcGFyYWxsZWxfY2xlYW51cDsKKwlp
bnQJCQluaW5kZXhlc19wYXJhbGxlbF9jb25kY2xlYW51cDsKK30gTFZQYXJhbGxlbFN0YXRlOwor
CiB0eXBlZGVmIHN0cnVjdCBMVlJlbFN0YXRzCiB7CiAJLyogdXNlaW5kZXggPSB0cnVlIG1lYW5z
IHR3by1wYXNzIHN0cmF0ZWd5OyBmYWxzZSBtZWFucyBvbmUtcGFzcyAqLwpAQCAtMTI4LDExICsy
ODMsNyBAQCB0eXBlZGVmIHN0cnVjdCBMVlJlbFN0YXRzCiAJQmxvY2tOdW1iZXIgcGFnZXNfcmVt
b3ZlZDsKIAlkb3VibGUJCXR1cGxlc19kZWxldGVkOwogCUJsb2NrTnVtYmVyIG5vbmVtcHR5X3Bh
Z2VzOyAvKiBhY3R1YWxseSwgbGFzdCBub25lbXB0eSBwYWdlICsgMSAqLwotCS8qIExpc3Qgb2Yg
VElEcyBvZiB0dXBsZXMgd2UgaW50ZW5kIHRvIGRlbGV0ZSAqLwotCS8qIE5COiB0aGlzIGxpc3Qg
aXMgb3JkZXJlZCBieSBUSUQgYWRkcmVzcyAqLwotCWludAkJCW51bV9kZWFkX3R1cGxlczsJLyog
Y3VycmVudCAjIG9mIGVudHJpZXMgKi8KLQlpbnQJCQltYXhfZGVhZF90dXBsZXM7CS8qICMgc2xv
dHMgYWxsb2NhdGVkIGluIGFycmF5ICovCi0JSXRlbVBvaW50ZXIgZGVhZF90dXBsZXM7CS8qIGFy
cmF5IG9mIEl0ZW1Qb2ludGVyRGF0YSAqLworCUxWRGVhZFR1cGxlcyAqZGVhZF90dXBsZXM7CiAJ
aW50CQkJbnVtX2luZGV4X3NjYW5zOwogCVRyYW5zYWN0aW9uSWQgbGF0ZXN0UmVtb3ZlZFhpZDsK
IAlib29sCQlsb2NrX3dhaXRlcl9kZXRlY3RlZDsKQEAgLTE1NSwxNSArMzA2LDE1IEBAIHN0YXRp
YyB2b2lkIGxhenlfc2Nhbl9oZWFwKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1zICpwYXJh
bXMsCiAJCQkJCQkgICBib29sIGFnZ3Jlc3NpdmUpOwogc3RhdGljIHZvaWQgbGF6eV92YWN1dW1f
aGVhcChSZWxhdGlvbiBvbmVyZWwsIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzKTsKIHN0YXRpYyBi
b29sIGxhenlfY2hlY2tfbmVlZHNfZnJlZXplKEJ1ZmZlciBidWYsIGJvb2wgKmhhc3R1cCk7Ci1z
dGF0aWMgdm9pZCBsYXp5X3ZhY3V1bV9pbmRleChSZWxhdGlvbiBpbmRyZWwsCi0JCQkJCQkJICBJ
bmRleEJ1bGtEZWxldGVSZXN1bHQgKipzdGF0cywKLQkJCQkJCQkgIExWUmVsU3RhdHMgKnZhY3Jl
bHN0YXRzKTsKLXN0YXRpYyB2b2lkIGxhenlfdmFjdXVtX2FsbF9pbmRleGVzKFJlbGF0aW9uIG9u
ZXJlbCwgTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMsCi0JCQkJCQkJCQlSZWxhdGlvbiAqSXJlbCwg
aW50IG5pbmRleGVzLAotCQkJCQkJCQkJSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqaW5kc3RhdHMp
Oworc3RhdGljIHZvaWQgbGF6eV92YWN1dW1fYWxsX2luZGV4ZXMoUmVsYXRpb24gb25lcmVsLCBS
ZWxhdGlvbiAqSXJlbCwKKwkJCQkJCQkJCUluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKnN0YXRzLAor
CQkJCQkJCQkJTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMsIExWUGFyYWxsZWxTdGF0ZSAqbHBzLAor
CQkJCQkJCQkJaW50IG5pbmRleGVzKTsKK3N0YXRpYyB2b2lkIGxhenlfdmFjdXVtX2luZGV4KFJl
bGF0aW9uIGluZHJlbCwgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqc3RhdHMsCisJCQkJCQkJICBM
VkRlYWRUdXBsZXMgKmRlYWRfdHVwbGVzLCBkb3VibGUgcmVsdHVwbGVzKTsKIHN0YXRpYyB2b2lk
IGxhenlfY2xlYW51cF9pbmRleChSZWxhdGlvbiBpbmRyZWwsCi0JCQkJCQkJICAgSW5kZXhCdWxr
RGVsZXRlUmVzdWx0ICpzdGF0cywKLQkJCQkJCQkgICBMVlJlbFN0YXRzICp2YWNyZWxzdGF0cyk7
CisJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqc3RhdHMsCisJCQkJCQkJICAgZG91
YmxlIHJlbHR1cGxlcywgYm9vbCBlc3RpbWF0ZWRfY291bnQpOwogc3RhdGljIGludAlsYXp5X3Zh
Y3V1bV9wYWdlKFJlbGF0aW9uIG9uZXJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sIEJ1ZmZlciBidWZm
ZXIsCiAJCQkJCQkJIGludCB0dXBpbmRleCwgTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMsIEJ1ZmZl
ciAqdm1idWZmZXIpOwogc3RhdGljIGJvb2wgc2hvdWxkX2F0dGVtcHRfdHJ1bmNhdGlvbihWYWN1
dW1QYXJhbXMgKnBhcmFtcywKQEAgLTE3MiwxMiArMzIzLDQxIEBAIHN0YXRpYyB2b2lkIGxhenlf
dHJ1bmNhdGVfaGVhcChSZWxhdGlvbiBvbmVyZWwsIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzKTsK
IHN0YXRpYyBCbG9ja051bWJlciBjb3VudF9ub25kZWxldGFibGVfcGFnZXMoUmVsYXRpb24gb25l
cmVsLAogCQkJCQkJCQkJCQlMVlJlbFN0YXRzICp2YWNyZWxzdGF0cyk7CiBzdGF0aWMgdm9pZCBs
YXp5X3NwYWNlX2FsbG9jKExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLCBCbG9ja051bWJlciByZWxi
bG9ja3MpOwotc3RhdGljIHZvaWQgbGF6eV9yZWNvcmRfZGVhZF90dXBsZShMVlJlbFN0YXRzICp2
YWNyZWxzdGF0cywKK3N0YXRpYyB2b2lkIGxhenlfcmVjb3JkX2RlYWRfdHVwbGUoTFZEZWFkVHVw
bGVzICpkZWFkX3R1cGxlcywKIAkJCQkJCQkJICAgSXRlbVBvaW50ZXIgaXRlbXB0cik7CiBzdGF0
aWMgYm9vbCBsYXp5X3RpZF9yZWFwZWQoSXRlbVBvaW50ZXIgaXRlbXB0ciwgdm9pZCAqc3RhdGUp
Owogc3RhdGljIGludAl2YWNfY21wX2l0ZW1wdHIoY29uc3Qgdm9pZCAqbGVmdCwgY29uc3Qgdm9p
ZCAqcmlnaHQpOwogc3RhdGljIGJvb2wgaGVhcF9wYWdlX2lzX2FsbF92aXNpYmxlKFJlbGF0aW9u
IHJlbCwgQnVmZmVyIGJ1ZiwKIAkJCQkJCQkJCSBUcmFuc2FjdGlvbklkICp2aXNpYmlsaXR5X2N1
dG9mZl94aWQsIGJvb2wgKmFsbF9mcm96ZW4pOworc3RhdGljIHZvaWQgbGF6eV9wYXJhbGxlbF92
YWN1dW1faW5kZXhlcyhSZWxhdGlvbiAqSXJlbCwgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqc3Rh
dHMsCisJCQkJCQkJCQkJIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLCBMVlBhcmFsbGVsU3RhdGUg
KmxwcywKKwkJCQkJCQkJCQkgaW50IG5pbmRleGVzKTsKK3N0YXRpYyB2b2lkIHBhcmFsbGVsX3Zh
Y3V1bV9pbmRleChSZWxhdGlvbiAqSXJlbCwgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqc3RhdHMs
CisJCQkJCQkJCSAgTFZTaGFyZWQgKmx2c2hhcmVkLCBMVkRlYWRUdXBsZXMgKmRlYWRfdHVwbGVz
LAorCQkJCQkJCQkgIGludCBuaW5kZXhlcyk7CitzdGF0aWMgdm9pZCB2YWN1dW1faW5kZXhlc19s
ZWFkZXIoUmVsYXRpb24gKklyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKnN0YXRzLAorCQkJ
CQkJCQkgIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLCBMVlBhcmFsbGVsU3RhdGUgKmxwcywKKwkJ
CQkJCQkJICBpbnQgbmluZGV4ZXMpOworc3RhdGljIHZvaWQgdmFjdXVtX29uZV9pbmRleChSZWxh
dGlvbiBpbmRyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKnN0YXRzLAorCQkJCQkJCSBMVlNo
YXJlZCAqbHZzaGFyZWQsIExWU2hhcmVkSW5kU3RhdHMgKnNoYXJlZF9pbmRzdGF0cywKKwkJCQkJ
CQkgTFZEZWFkVHVwbGVzICpkZWFkX3R1cGxlcyk7CitzdGF0aWMgdm9pZCBsYXp5X2NsZWFudXBf
YWxsX2luZGV4ZXMoUmVsYXRpb24gKklyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKnN0YXRz
LAorCQkJCQkJCQkJIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLCBMVlBhcmFsbGVsU3RhdGUgKmxw
cywKKwkJCQkJCQkJCSBpbnQgbmluZGV4ZXMpOworc3RhdGljIGxvbmcgY29tcHV0ZV9tYXhfZGVh
ZF90dXBsZXMoQmxvY2tOdW1iZXIgcmVsYmxvY2tzLCBib29sIGhhc2luZGV4KTsKK3N0YXRpYyBp
bnQJY29tcHV0ZV9wYXJhbGxlbF92YWN1dW1fd29ya2VycyhSZWxhdGlvbiAqSXJlbCwgaW50IG5p
bmRleGVzLCBpbnQgbnJlcXVlc3RlZCwKKwkJCQkJCQkJCQkJYm9vbCAqY2FuX3BhcmFsbGVsX3Zh
Y3V1bSk7CitzdGF0aWMgdm9pZCBwcmVwYXJlX2luZGV4X3N0YXRpc3RpY3MoTFZTaGFyZWQgKmx2
c2hhcmVkLCBib29sICpjYW5fcGFyYWxsZWxfdmFjdXVtLAorCQkJCQkJCQkJIGludCBuaW5kZXhl
cyk7CitzdGF0aWMgdm9pZCB1cGRhdGVfaW5kZXhfc3RhdGlzdGljcyhSZWxhdGlvbiAqSXJlbCwg
SW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqc3RhdHMsCisJCQkJCQkJCQlpbnQgbmluZGV4ZXMpOwor
c3RhdGljIExWUGFyYWxsZWxTdGF0ZSAqYmVnaW5fcGFyYWxsZWxfdmFjdXVtKE9pZCByZWxpZCwg
UmVsYXRpb24gKklyZWwsCisJCQkJCQkJCQkJCSAgTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMsIEJs
b2NrTnVtYmVyIG5ibG9ja3MsCisJCQkJCQkJCQkJCSAgaW50IG5pbmRleGVzLCBpbnQgbnJlcXVl
c3RlZCk7CitzdGF0aWMgdm9pZCBlbmRfcGFyYWxsZWxfdmFjdXVtKFJlbGF0aW9uICpJcmVsLCBJ
bmRleEJ1bGtEZWxldGVSZXN1bHQgKipzdGF0cywKKwkJCQkJCQkJTFZQYXJhbGxlbFN0YXRlICps
cHMsIGludCBuaW5kZXhlcyk7CitzdGF0aWMgTFZTaGFyZWRJbmRTdGF0cyAqZ2V0X2luZHN0YXRz
KExWU2hhcmVkICpsdnNoYXJlZCwgaW50IG4pOworc3RhdGljIGJvb2wgc2tpcF9wYXJhbGxlbF92
YWN1dW1faW5kZXgoUmVsYXRpb24gaW5kcmVsLCBMVlNoYXJlZCAqbHZzaGFyZWQpOwogCiAKIC8q
CkBAIC00OTEsNiArNjcxLDE4IEBAIHZhY3V1bV9sb2dfY2xlYW51cF9pbmZvKFJlbGF0aW9uIHJl
bCwgTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMpCiAgKgkJZGVhZC10dXBsZSBUSURzLCBpbnZva2Ug
dmFjdXVtaW5nIG9mIGluZGV4ZXMgYW5kIGNhbGwgbGF6eV92YWN1dW1faGVhcAogICoJCXRvIHJl
Y2xhaW0gZGVhZCBsaW5lIHBvaW50ZXJzLgogICoKKyAqCQlJZiB0aGUgdGFibGUgaGFzIGF0IGxl
YXN0IHR3byBpbmRleGVzIGFuZCBwYXJhbGxlbCBsYXp5IHZhY3V1bSBpcworICoJCXJlcXVlc3Rl
ZCwgd2UgZXhlY3V0ZSBib3RoIGluZGV4IHZhY3V1bSBhbmQgaW5kZXggY2xlYW51cCB3aXRoCisg
KgkJcGFyYWxsZWwgd29ya2Vycy4gIEluIHBhcmFsbGVsIGxhenkgdmFjdXVtLCB3ZSBlbnRlciBw
YXJhbGxlbCBtb2RlIGFuZAorICoJCXRoZW4gY3JlYXRlIGJvdGggdGhlIHBhcmFsbGVsIGNvbnRl
eHQgYW5kIHRoZSBEU00gc2VnbWVudCBiZWZvcmUgc3RhcnRpbmcKKyAqCQloZWFwIHNjYW4gc28g
dGhhdCB3ZSBjYW4gcmVjb3JkIGRlYWQgdHVwbGVzIHRvIHRoZSBEU00gc2VnbWVudC4gIEFsbAor
ICoJCXBhcmFsbGVsIHdvcmtlcnMgYXJlIGxhdW5jaGVkIGF0IGJlZ2lubmluZyBvZiBpbmRleCB2
YWN1dW1pbmcgYW5kIGluZGV4CisgKgkJY2xlYW51cCBhbmQgdGhleSBleGl0IG9uY2UgZG9uZSB3
aXRoIGFsbCBpbmRleGVzLiAgQXQgdGhlIGVuZCBvZiB0aGlzCisgKgkJZnVuY3Rpb24gd2UgZXhp
dCBmcm9tIHBhcmFsbGVsIG1vZGUuICBJbmRleCBidWxrLWRlbGV0aW9uIHJlc3VsdHMgYXJlCisg
KgkJc3RvcmVkIGluIHRoZSBEU00gc2VnbWVudCBhbmQgd2UgdXBkYXRlIGluZGV4IHN0YXRpc3Rp
Y3MgZm9yIGFsbCB0aGUKKyAqCQlpbmRleGVzIGFmdGVyIGV4aXRpbmcgZnJvbSBwYXJhbGxlbCBt
b2RlIHNpbmNlIHdyaXRlcyBhcmUgbm90IGFsbG93ZWQKKyAqCQlkdXJpbmcgcGFyYWxsZWwgbW9k
ZS4KKyAqCiAgKgkJSWYgdGhlcmUgYXJlIG5vIGluZGV4ZXMgdGhlbiB3ZSBjYW4gcmVjbGFpbSBs
aW5lIHBvaW50ZXJzIG9uIHRoZSBmbHk7CiAgKgkJZGVhZCBsaW5lIHBvaW50ZXJzIG5lZWQgb25s
eSBiZSByZXRhaW5lZCB1bnRpbCBhbGwgaW5kZXggcG9pbnRlcnMgdGhhdAogICoJCXJlZmVyZW5j
ZSB0aGVtIGhhdmUgYmVlbiBraWxsZWQuCkBAIC00OTksNiArNjkxLDggQEAgc3RhdGljIHZvaWQK
IGxhenlfc2Nhbl9oZWFwKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMsIExW
UmVsU3RhdHMgKnZhY3JlbHN0YXRzLAogCQkJICAgUmVsYXRpb24gKklyZWwsIGludCBuaW5kZXhl
cywgYm9vbCBhZ2dyZXNzaXZlKQogeworCUxWUGFyYWxsZWxTdGF0ZSAqbHBzID0gTlVMTDsKKwlM
VkRlYWRUdXBsZXMgKmRlYWRfdHVwbGVzOwogCUJsb2NrTnVtYmVyIG5ibG9ja3MsCiAJCQkJYmxr
bm87CiAJSGVhcFR1cGxlRGF0YSB0dXBsZTsKQEAgLTU1NiwxMyArNzUwLDQ2IEBAIGxhenlfc2Nh
bl9oZWFwKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMsIExWUmVsU3RhdHMg
KnZhY3JlbHN0YXRzLAogCXZhY3JlbHN0YXRzLT5ub25lbXB0eV9wYWdlcyA9IDA7CiAJdmFjcmVs
c3RhdHMtPmxhdGVzdFJlbW92ZWRYaWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAotCWxhenlf
c3BhY2VfYWxsb2ModmFjcmVsc3RhdHMsIG5ibG9ja3MpOworCS8qCisJICogSW5pdGlhbGl6ZSB0
aGUgc3RhdGUgZm9yIHBhcmFsbGVsIHZhY3V1bQorCSAqLworCWlmIChwYXJhbXMtPm53b3JrZXJz
ID49IDAgJiYgdmFjcmVsc3RhdHMtPnVzZWluZGV4KQorCXsKKwkJLyoKKwkJICogU2luY2UgcGFy
YWxsZWwgd29ya2VycyBjYW5ub3QgYWNjZXNzIGRhdGEgaW4gdGVtcG9yYXJ5IHRhYmxlcywgd2UK
KwkJICogY2FuJ3QgcGVyZm9ybSBwYXJhbGxlbCB2YWN1dW0gb24gdGhlbS4KKwkJICovCisJCWlm
IChSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMob25lcmVsKSkKKwkJeworCQkJLyoKKwkJCSAqIEdp
dmUgd2FybmluZyBvbmx5IGlmIHRoZSB1c2VyIGV4cGxpY2l0bHkgdHJpZXMgdG8gcGVyZm9ybSBh
CisJCQkgKiBwYXJhbGxlbCB2YWN1dW0gb24gdGhlIHRlbXBvcmFyeSB0YWJsZS4KKwkJCSAqLwor
CQkJaWYgKHBhcmFtcy0+bndvcmtlcnMgPiAwKQorCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJ
CShlcnJtc2coImRpc2FibGluZyBwYXJhbGxlbCBvcHRpb24gb2YgdmFjdXVtIG9uIFwiJXNcIiAt
LS0gY2Fubm90IHZhY3V1bSB0ZW1wb3JhcnkgdGFibGVzIGluIHBhcmFsbGVsIiwKKwkJCQkJCQkJ
UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUob25lcmVsKSkpKTsKKwkJfQorCQllbHNlCisJCQlscHMg
PSBiZWdpbl9wYXJhbGxlbF92YWN1dW0oUmVsYXRpb25HZXRSZWxpZChvbmVyZWwpLCBJcmVsLAor
CQkJCQkJCQkJCXZhY3JlbHN0YXRzLCBuYmxvY2tzLCBuaW5kZXhlcywKKwkJCQkJCQkJCQlwYXJh
bXMtPm53b3JrZXJzKTsKKwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgZGVh
ZCB0dXBsZXMgaW4gY2FzZSB0aGUgcGFyYWxsZWwgdmFjdXVtIGlzIG5vdAorCSAqIGluaXRpYWxp
emVkLgorCSAqLworCWlmICghUGFyYWxsZWxWYWN1dW1Jc0FjdGl2ZShscHMpKQorCQlsYXp5X3Nw
YWNlX2FsbG9jKHZhY3JlbHN0YXRzLCBuYmxvY2tzKTsKKworCWRlYWRfdHVwbGVzID0gdmFjcmVs
c3RhdHMtPmRlYWRfdHVwbGVzOwogCWZyb3plbiA9IHBhbGxvYyhzaXplb2YoeGxfaGVhcF9mcmVl
emVfdHVwbGUpICogTWF4SGVhcFR1cGxlc1BlclBhZ2UpOwogCiAJLyogUmVwb3J0IHRoYXQgd2Un
cmUgc2Nhbm5pbmcgdGhlIGhlYXAsIGFkdmVydGlzaW5nIHRvdGFsICMgb2YgYmxvY2tzICovCiAJ
aW5pdHByb2dfdmFsWzBdID0gUFJPR1JFU1NfVkFDVVVNX1BIQVNFX1NDQU5fSEVBUDsKIAlpbml0
cHJvZ192YWxbMV0gPSBuYmxvY2tzOwotCWluaXRwcm9nX3ZhbFsyXSA9IHZhY3JlbHN0YXRzLT5t
YXhfZGVhZF90dXBsZXM7CisJaW5pdHByb2dfdmFsWzJdID0gZGVhZF90dXBsZXMtPm1heF90dXBs
ZXM7CiAJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9tdWx0aV9wYXJhbSgzLCBpbml0cHJvZ19pbmRl
eCwgaW5pdHByb2dfdmFsKTsKIAogCS8qCkBAIC03NDAsOCArOTY3LDggQEAgbGF6eV9zY2FuX2hl
YXAoUmVsYXRpb24gb25lcmVsLCBWYWN1dW1QYXJhbXMgKnBhcmFtcywgTFZSZWxTdGF0cyAqdmFj
cmVsc3RhdHMsCiAJCSAqIElmIHdlIGFyZSBjbG9zZSB0byBvdmVycnVubmluZyB0aGUgYXZhaWxh
YmxlIHNwYWNlIGZvciBkZWFkLXR1cGxlCiAJCSAqIFRJRHMsIHBhdXNlIGFuZCBkbyBhIGN5Y2xl
IG9mIHZhY3V1bWluZyBiZWZvcmUgd2UgdGFja2xlIHRoaXMgcGFnZS4KIAkJICovCi0JCWlmICgo
dmFjcmVsc3RhdHMtPm1heF9kZWFkX3R1cGxlcyAtIHZhY3JlbHN0YXRzLT5udW1fZGVhZF90dXBs
ZXMpIDwgTWF4SGVhcFR1cGxlc1BlclBhZ2UgJiYKLQkJCXZhY3JlbHN0YXRzLT5udW1fZGVhZF90
dXBsZXMgPiAwKQorCQlpZiAoKGRlYWRfdHVwbGVzLT5tYXhfdHVwbGVzIC0gZGVhZF90dXBsZXMt
Pm51bV90dXBsZXMpIDwgTWF4SGVhcFR1cGxlc1BlclBhZ2UgJiYKKwkJCWRlYWRfdHVwbGVzLT5u
dW1fdHVwbGVzID4gMCkKIAkJewogCQkJLyoKIAkJCSAqIEJlZm9yZSBiZWdpbm5pbmcgaW5kZXgg
dmFjdXVtaW5nLCB3ZSByZWxlYXNlIGFueSBwaW4gd2UgbWF5CkBAIC03NTYsOCArOTgzLDggQEAg
bGF6eV9zY2FuX2hlYXAoUmVsYXRpb24gb25lcmVsLCBWYWN1dW1QYXJhbXMgKnBhcmFtcywgTFZS
ZWxTdGF0cyAqdmFjcmVsc3RhdHMsCiAJCQl9CiAKIAkJCS8qIFdvcmsgb24gYWxsIHRoZSBpbmRl
eGVzLCB0aGVuIHRoZSBoZWFwICovCi0JCQlsYXp5X3ZhY3V1bV9hbGxfaW5kZXhlcyhvbmVyZWws
IHZhY3JlbHN0YXRzLCBJcmVsLAotCQkJCQkJCQkJbmluZGV4ZXMsIGluZHN0YXRzKTsKKwkJCWxh
enlfdmFjdXVtX2FsbF9pbmRleGVzKG9uZXJlbCwgSXJlbCwgaW5kc3RhdHMsCisJCQkJCQkJCQl2
YWNyZWxzdGF0cywgbHBzLCBuaW5kZXhlcyk7CiAKIAkJCS8qIFJlbW92ZSB0dXBsZXMgZnJvbSBo
ZWFwICovCiAJCQlsYXp5X3ZhY3V1bV9oZWFwKG9uZXJlbCwgdmFjcmVsc3RhdHMpOwpAQCAtNzY3
LDcgKzk5NCw3IEBAIGxhenlfc2Nhbl9oZWFwKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1z
ICpwYXJhbXMsIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLAogCQkJICogbm90IHRvIHJlc2V0IGxh
dGVzdFJlbW92ZWRYaWQgc2luY2Ugd2Ugd2FudCB0aGF0IHZhbHVlIHRvIGJlCiAJCQkgKiB2YWxp
ZC4KIAkJCSAqLwotCQkJdmFjcmVsc3RhdHMtPm51bV9kZWFkX3R1cGxlcyA9IDA7CisJCQlkZWFk
X3R1cGxlcy0+bnVtX3R1cGxlcyA9IDA7CiAKIAkJCS8qCiAJCQkgKiBWYWN1dW0gdGhlIEZyZWUg
U3BhY2UgTWFwIHRvIG1ha2UgbmV3bHktZnJlZWQgc3BhY2UgdmlzaWJsZSBvbgpAQCAtOTYyLDcg
KzExODksNyBAQCBsYXp5X3NjYW5faGVhcChSZWxhdGlvbiBvbmVyZWwsIFZhY3V1bVBhcmFtcyAq
cGFyYW1zLCBMVlJlbFN0YXRzICp2YWNyZWxzdGF0cywKIAkJaGFzX2RlYWRfdHVwbGVzID0gZmFs
c2U7CiAJCW5mcm96ZW4gPSAwOwogCQloYXN0dXAgPSBmYWxzZTsKLQkJcHJldl9kZWFkX2NvdW50
ID0gdmFjcmVsc3RhdHMtPm51bV9kZWFkX3R1cGxlczsKKwkJcHJldl9kZWFkX2NvdW50ID0gZGVh
ZF90dXBsZXMtPm51bV90dXBsZXM7CiAJCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIo
cGFnZSk7CiAKIAkJLyoKQEAgLTEwMDEsNyArMTIyOCw3IEBAIGxhenlfc2Nhbl9oZWFwKFJlbGF0
aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMsIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRz
LAogCQkJICovCiAJCQlpZiAoSXRlbUlkSXNEZWFkKGl0ZW1pZCkpCiAJCQl7Ci0JCQkJbGF6eV9y
ZWNvcmRfZGVhZF90dXBsZSh2YWNyZWxzdGF0cywgJih0dXBsZS50X3NlbGYpKTsKKwkJCQlsYXp5
X3JlY29yZF9kZWFkX3R1cGxlKGRlYWRfdHVwbGVzLCAmKHR1cGxlLnRfc2VsZikpOwogCQkJCWFs
bF92aXNpYmxlID0gZmFsc2U7CiAJCQkJY29udGludWU7CiAJCQl9CkBAIC0xMTQ3LDcgKzEzNzQs
NyBAQCBsYXp5X3NjYW5faGVhcChSZWxhdGlvbiBvbmVyZWwsIFZhY3V1bVBhcmFtcyAqcGFyYW1z
LCBMVlJlbFN0YXRzICp2YWNyZWxzdGF0cywKIAogCQkJaWYgKHR1cGdvbmUpCiAJCQl7Ci0JCQkJ
bGF6eV9yZWNvcmRfZGVhZF90dXBsZSh2YWNyZWxzdGF0cywgJih0dXBsZS50X3NlbGYpKTsKKwkJ
CQlsYXp5X3JlY29yZF9kZWFkX3R1cGxlKGRlYWRfdHVwbGVzLCAmKHR1cGxlLnRfc2VsZikpOwog
CQkJCUhlYXBUdXBsZUhlYWRlckFkdmFuY2VMYXRlc3RSZW1vdmVkWGlkKHR1cGxlLnRfZGF0YSwK
IAkJCQkJCQkJCQkJCQkgICAmdmFjcmVsc3RhdHMtPmxhdGVzdFJlbW92ZWRYaWQpOwogCQkJCXR1
cHNfdmFjdXVtZWQgKz0gMTsKQEAgLTEyMTcsNyArMTQ0NCw3IEBAIGxhenlfc2Nhbl9oZWFwKFJl
bGF0aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMsIExWUmVsU3RhdHMgKnZhY3JlbHN0
YXRzLAogCQkgKiBkb2luZyBhIHNlY29uZCBzY2FuLiBBbHNvIHdlIGRvbid0IGRvIHRoYXQgYnV0
IGZvcmdldCBkZWFkIHR1cGxlcwogCQkgKiB3aGVuIGluZGV4IGNsZWFudXAgaXMgZGlzYWJsZWQu
CiAJCSAqLwotCQlpZiAoIXZhY3JlbHN0YXRzLT51c2VpbmRleCAmJiB2YWNyZWxzdGF0cy0+bnVt
X2RlYWRfdHVwbGVzID4gMCkKKwkJaWYgKCF2YWNyZWxzdGF0cy0+dXNlaW5kZXggJiYgZGVhZF90
dXBsZXMtPm51bV90dXBsZXMgPiAwKQogCQl7CiAJCQlpZiAobmluZGV4ZXMgPT0gMCkKIAkJCXsK
QEAgLTEyNDYsNyArMTQ3Myw3IEBAIGxhenlfc2Nhbl9oZWFwKFJlbGF0aW9uIG9uZXJlbCwgVmFj
dXVtUGFyYW1zICpwYXJhbXMsIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLAogCQkJICogbm90IHRv
IHJlc2V0IGxhdGVzdFJlbW92ZWRYaWQgc2luY2Ugd2Ugd2FudCB0aGF0IHZhbHVlIHRvIGJlCiAJ
CQkgKiB2YWxpZC4KIAkJCSAqLwotCQkJdmFjcmVsc3RhdHMtPm51bV9kZWFkX3R1cGxlcyA9IDA7
CisJCQlkZWFkX3R1cGxlcy0+bnVtX3R1cGxlcyA9IDA7CiAKIAkJCS8qCiAJCQkgKiBQZXJpb2Rp
Y2FsbHkgZG8gaW5jcmVtZW50YWwgRlNNIHZhY3V1bWluZyB0byBtYWtlIG5ld2x5LWZyZWVkCkBA
IC0xMzYxLDcgKzE1ODgsNyBAQCBsYXp5X3NjYW5faGVhcChSZWxhdGlvbiBvbmVyZWwsIFZhY3V1
bVBhcmFtcyAqcGFyYW1zLCBMVlJlbFN0YXRzICp2YWNyZWxzdGF0cywKIAkJICogcGFnZSwgc28g
cmVtZW1iZXIgaXRzIGZyZWUgc3BhY2UgYXMtaXMuICAoVGhpcyBwYXRoIHdpbGwgYWx3YXlzIGJl
CiAJCSAqIHRha2VuIGlmIHRoZXJlIGFyZSBubyBpbmRleGVzLikKIAkJICovCi0JCWlmICh2YWNy
ZWxzdGF0cy0+bnVtX2RlYWRfdHVwbGVzID09IHByZXZfZGVhZF9jb3VudCkKKwkJaWYgKGRlYWRf
dHVwbGVzLT5udW1fdHVwbGVzID09IHByZXZfZGVhZF9jb3VudCkKIAkJCVJlY29yZFBhZ2VXaXRo
RnJlZVNwYWNlKG9uZXJlbCwgYmxrbm8sIGZyZWVzcGFjZSk7CiAJfQogCkBAIC0xMzk1LDExICsx
NjIyLDExIEBAIGxhenlfc2Nhbl9oZWFwKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1zICpw
YXJhbXMsIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLAogCiAJLyogSWYgYW55IHR1cGxlcyBuZWVk
IHRvIGJlIGRlbGV0ZWQsIHBlcmZvcm0gZmluYWwgdmFjdXVtIGN5Y2xlICovCiAJLyogWFhYIHB1
dCBhIHRocmVzaG9sZCBvbiBtaW4gbnVtYmVyIG9mIHR1cGxlcyBoZXJlPyAqLwotCWlmICh2YWNy
ZWxzdGF0cy0+bnVtX2RlYWRfdHVwbGVzID4gMCkKKwlpZiAoZGVhZF90dXBsZXMtPm51bV90dXBs
ZXMgPiAwKQogCXsKIAkJLyogV29yayBvbiBhbGwgdGhlIGluZGV4ZXMsIGFuZCB0aGVuIHRoZSBo
ZWFwICovCi0JCWxhenlfdmFjdXVtX2FsbF9pbmRleGVzKG9uZXJlbCwgdmFjcmVsc3RhdHMsIEly
ZWwsIG5pbmRleGVzLAotCQkJCQkJCQlpbmRzdGF0cyk7CisJCWxhenlfdmFjdXVtX2FsbF9pbmRl
eGVzKG9uZXJlbCwgSXJlbCwgaW5kc3RhdHMsIHZhY3JlbHN0YXRzLAorCQkJCQkJCQlscHMsIG5p
bmRleGVzKTsKIAogCQkvKiBSZW1vdmUgdHVwbGVzIGZyb20gaGVhcCAqLwogCQlsYXp5X3ZhY3V1
bV9oZWFwKG9uZXJlbCwgdmFjcmVsc3RhdHMpOwpAQCAtMTQxMiwxNyArMTYzOSwyMiBAQCBsYXp5
X3NjYW5faGVhcChSZWxhdGlvbiBvbmVyZWwsIFZhY3V1bVBhcmFtcyAqcGFyYW1zLCBMVlJlbFN0
YXRzICp2YWNyZWxzdGF0cywKIAlpZiAoYmxrbm8gPiBuZXh0X2ZzbV9ibG9ja190b192YWN1dW0p
CiAJCUZyZWVTcGFjZU1hcFZhY3V1bVJhbmdlKG9uZXJlbCwgbmV4dF9mc21fYmxvY2tfdG9fdmFj
dXVtLCBibGtubyk7CiAKLQkvKiByZXBvcnQgYWxsIGJsb2NrcyB2YWN1dW1lZDsgYW5kIHRoYXQg
d2UncmUgY2xlYW5pbmcgdXAgKi8KKwkvKiByZXBvcnQgYWxsIGJsb2NrcyB2YWN1dW1lZCAqLwog
CXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfVkFDVVVNX0hFQVBfQkxLU19W
QUNVVU1FRCwgYmxrbm8pOwotCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1Nf
VkFDVVVNX1BIQVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfVkFDVVVNX1BIQVNFX0lOREVYX0NMRUFO
VVApOwogCi0JLyogRG8gcG9zdC12YWN1dW0gY2xlYW51cCBhbmQgc3RhdGlzdGljcyB1cGRhdGUg
Zm9yIGVhY2ggaW5kZXggKi8KKwkvKiBEbyBwb3N0LXZhY3V1bSBjbGVhbnVwICovCiAJaWYgKHZh
Y3JlbHN0YXRzLT51c2VpbmRleCkKLQl7Ci0JCWZvciAoaSA9IDA7IGkgPCBuaW5kZXhlczsgaSsr
KQotCQkJbGF6eV9jbGVhbnVwX2luZGV4KElyZWxbaV0sIGluZHN0YXRzW2ldLCB2YWNyZWxzdGF0
cyk7Ci0JfQorCQlsYXp5X2NsZWFudXBfYWxsX2luZGV4ZXMoSXJlbCwgaW5kc3RhdHMsIHZhY3Jl
bHN0YXRzLCBscHMsIG5pbmRleGVzKTsKKworCS8qCisJICogRW5kIHBhcmFsbGVsIG1vZGUgYmVm
b3JlIHVwZGF0aW5nIGluZGV4IHN0YXRpc3RpY3MgYXMgd2UgY2Fubm90IHdyaXRlCisJICogZHVy
aW5nIHBhcmFsbGVsIG1vZGUuCisJICovCisJaWYgKFBhcmFsbGVsVmFjdXVtSXNBY3RpdmUobHBz
KSkKKwkJZW5kX3BhcmFsbGVsX3ZhY3V1bShJcmVsLCBpbmRzdGF0cywgbHBzLCBuaW5kZXhlcyk7
CisKKwkvKiBVcGRhdGUgaW5kZXggc3RhdGlzdGljcyAqLworCXVwZGF0ZV9pbmRleF9zdGF0aXN0
aWNzKElyZWwsIGluZHN0YXRzLCBuaW5kZXhlcyk7CiAKIAkvKiBJZiBubyBpbmRleGVzLCBtYWtl
IGxvZyByZXBvcnQgdGhhdCBsYXp5X3ZhY3V1bV9oZWFwIHdvdWxkJ3ZlIG1hZGUgKi8KIAlpZiAo
dmFjdXVtZWRfcGFnZXMpCkBAIC0xNDY3LDE1ICsxNjk5LDE2IEBAIGxhenlfc2Nhbl9oZWFwKFJl
bGF0aW9uIG9uZXJlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMsIExWUmVsU3RhdHMgKnZhY3JlbHN0
YXRzLAogLyoKICAqCWxhenlfdmFjdXVtX2FsbF9pbmRleGVzKCkgLS0gdmFjdXVtIGFsbCBpbmRl
eGVzIG9mIHJlbGF0aW9uLgogICoKLSAqCQlUaGlzIGlzIGEgdXRpbGl0eSB3cmFwcGVyIGZvciBs
YXp5X3ZhY3V1bV9pbmRleCgpLCBhYmxlIHRvIGRvCi0gKgkJcHJvZ3Jlc3MgcmVwb3J0aW5nLgor
ICogV2UgcHJvY2VzcyB0aGUgaW5kZXhlcyBzZXJpYWxseSB1bmxlc3Mgd2UgYXJlIGRvaW5nIHBh
cmFsbGVsIHZhY3V1bS4KICAqLwogc3RhdGljIHZvaWQKLWxhenlfdmFjdXVtX2FsbF9pbmRleGVz
KFJlbGF0aW9uIG9uZXJlbCwgTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMsCi0JCQkJCQlSZWxhdGlv
biAqSXJlbCwgaW50IG5pbmRleGVzLAotCQkJCQkJSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqaW5k
c3RhdHMpCitsYXp5X3ZhY3V1bV9hbGxfaW5kZXhlcyhSZWxhdGlvbiBvbmVyZWwsIFJlbGF0aW9u
ICpJcmVsLAorCQkJCQkJSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqc3RhdHMsCisJCQkJCQlMVlJl
bFN0YXRzICp2YWNyZWxzdGF0cywgTFZQYXJhbGxlbFN0YXRlICpscHMsCisJCQkJCQlpbnQgbmlu
ZGV4ZXMpCiB7Ci0JaW50CQkJaTsKKwlBc3NlcnQoIUlzUGFyYWxsZWxXb3JrZXIoKSk7CisJQXNz
ZXJ0KG5pbmRleGVzID4gMCk7CiAKIAkvKiBMb2cgY2xlYW51cCBpbmZvIGJlZm9yZSB3ZSB0b3Vj
aCBpbmRleGVzICovCiAJdmFjdXVtX2xvZ19jbGVhbnVwX2luZm8ob25lcmVsLCB2YWNyZWxzdGF0
cyk7CkBAIC0xNDg0LDkgKzE3MTcsMzAgQEAgbGF6eV92YWN1dW1fYWxsX2luZGV4ZXMoUmVsYXRp
b24gb25lcmVsLCBMVlJlbFN0YXRzICp2YWNyZWxzdGF0cywKIAlwZ3N0YXRfcHJvZ3Jlc3NfdXBk
YXRlX3BhcmFtKFBST0dSRVNTX1ZBQ1VVTV9QSEFTRSwKIAkJCQkJCQkJIFBST0dSRVNTX1ZBQ1VV
TV9QSEFTRV9WQUNVVU1fSU5ERVgpOwogCi0JLyogUmVtb3ZlIGluZGV4IGVudHJpZXMgKi8KLQlm
b3IgKGkgPSAwOyBpIDwgbmluZGV4ZXM7IGkrKykKLQkJbGF6eV92YWN1dW1faW5kZXgoSXJlbFtp
XSwgJmluZHN0YXRzW2ldLCB2YWNyZWxzdGF0cyk7CisJLyogUGVyZm9ybSBpbmRleCB2YWN1dW1p
bmcgd2l0aCBwYXJhbGxlbCB3b3JrZXJzIGZvciBwYXJhbGxlbCB2YWN1dW0uICovCisJaWYgKFBh
cmFsbGVsVmFjdXVtSXNBY3RpdmUobHBzKSkKKwl7CisJCS8qIFRlbGwgcGFyYWxsZWwgd29ya2Vy
cyB0byBkbyBpbmRleCB2YWN1dW1pbmcgKi8KKwkJbHBzLT5sdnNoYXJlZC0+Zm9yX2NsZWFudXAg
PSBmYWxzZTsKKwkJbHBzLT5sdnNoYXJlZC0+Zmlyc3RfdGltZSA9IGZhbHNlOworCisJCS8qCisJ
CSAqIFdlIGNhbiBvbmx5IHByb3ZpZGUgYW4gYXBwcm94aW1hdGUgdmFsdWUgb2YgbnVtX2hlYXBf
dHVwbGVzIGluCisJCSAqIHZhY3V1bSBjYXNlcy4KKwkJICovCisJCWxwcy0+bHZzaGFyZWQtPnJl
bHR1cGxlcyA9IHZhY3JlbHN0YXRzLT5vbGRfbGl2ZV90dXBsZXM7CisJCWxwcy0+bHZzaGFyZWQt
PmVzdGltYXRlZF9jb3VudCA9IHRydWU7CisKKwkJbGF6eV9wYXJhbGxlbF92YWN1dW1faW5kZXhl
cyhJcmVsLCBzdGF0cywgdmFjcmVsc3RhdHMsIGxwcywgbmluZGV4ZXMpOworCX0KKwllbHNlCisJ
eworCQlpbnQJCQlpZHg7CisKKwkJZm9yIChpZHggPSAwOyBpZHggPCBuaW5kZXhlczsgaWR4Kysp
CisJCQlsYXp5X3ZhY3V1bV9pbmRleChJcmVsW2lkeF0sICZzdGF0c1tpZHhdLCB2YWNyZWxzdGF0
cy0+ZGVhZF90dXBsZXMsCisJCQkJCQkJICB2YWNyZWxzdGF0cy0+b2xkX2xpdmVfdHVwbGVzKTsK
Kwl9CiAKIAkvKiBJbmNyZWFzZSBhbmQgcmVwb3J0IHRoZSBudW1iZXIgb2YgaW5kZXggc2NhbnMg
Ki8KIAl2YWNyZWxzdGF0cy0+bnVtX2luZGV4X3NjYW5zKys7CkBAIC0xNTIyLDcgKzE3NzYsNyBA
QCBsYXp5X3ZhY3V1bV9oZWFwKFJlbGF0aW9uIG9uZXJlbCwgTFZSZWxTdGF0cyAqdmFjcmVsc3Rh
dHMpCiAJbnBhZ2VzID0gMDsKIAogCXR1cGluZGV4ID0gMDsKLQl3aGlsZSAodHVwaW5kZXggPCB2
YWNyZWxzdGF0cy0+bnVtX2RlYWRfdHVwbGVzKQorCXdoaWxlICh0dXBpbmRleCA8IHZhY3JlbHN0
YXRzLT5kZWFkX3R1cGxlcy0+bnVtX3R1cGxlcykKIAl7CiAJCUJsb2NrTnVtYmVyIHRibGs7CiAJ
CUJ1ZmZlcgkJYnVmOwpAQCAtMTUzMSw3ICsxNzg1LDcgQEAgbGF6eV92YWN1dW1faGVhcChSZWxh
dGlvbiBvbmVyZWwsIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzKQogCiAJCXZhY3V1bV9kZWxheV9w
b2ludCgpOwogCi0JCXRibGsgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZ2YWNyZWxzdGF0
cy0+ZGVhZF90dXBsZXNbdHVwaW5kZXhdKTsKKwkJdGJsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tO
dW1iZXIoJnZhY3JlbHN0YXRzLT5kZWFkX3R1cGxlcy0+aXRlbXB0cnNbdHVwaW5kZXhdKTsKIAkJ
YnVmID0gUmVhZEJ1ZmZlckV4dGVuZGVkKG9uZXJlbCwgTUFJTl9GT1JLTlVNLCB0YmxrLCBSQk1f
Tk9STUFMLAogCQkJCQkJCQkgdmFjX3N0cmF0ZWd5KTsKIAkJaWYgKCFDb25kaXRpb25hbExvY2tC
dWZmZXJGb3JDbGVhbnVwKGJ1ZikpCkBAIC0xNTc5LDYgKzE4MzMsNyBAQCBzdGF0aWMgaW50CiBs
YXp5X3ZhY3V1bV9wYWdlKFJlbGF0aW9uIG9uZXJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sIEJ1ZmZl
ciBidWZmZXIsCiAJCQkJIGludCB0dXBpbmRleCwgTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMsIEJ1
ZmZlciAqdm1idWZmZXIpCiB7CisJTFZEZWFkVHVwbGVzICpkZWFkX3R1cGxlcyA9IHZhY3JlbHN0
YXRzLT5kZWFkX3R1cGxlczsKIAlQYWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOwog
CU9mZnNldE51bWJlciB1bnVzZWRbTWF4T2Zmc2V0TnVtYmVyXTsKIAlpbnQJCQl1bmNudCA9IDA7
CkBAIC0xNTg5LDE2ICsxODQ0LDE2IEBAIGxhenlfdmFjdXVtX3BhZ2UoUmVsYXRpb24gb25lcmVs
LCBCbG9ja051bWJlciBibGtubywgQnVmZmVyIGJ1ZmZlciwKIAogCVNUQVJUX0NSSVRfU0VDVElP
TigpOwogCi0JZm9yICg7IHR1cGluZGV4IDwgdmFjcmVsc3RhdHMtPm51bV9kZWFkX3R1cGxlczsg
dHVwaW5kZXgrKykKKwlmb3IgKDsgdHVwaW5kZXggPCBkZWFkX3R1cGxlcy0+bnVtX3R1cGxlczsg
dHVwaW5kZXgrKykKIAl7CiAJCUJsb2NrTnVtYmVyIHRibGs7CiAJCU9mZnNldE51bWJlciB0b2Zm
OwogCQlJdGVtSWQJCWl0ZW1pZDsKIAotCQl0YmxrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl
cigmdmFjcmVsc3RhdHMtPmRlYWRfdHVwbGVzW3R1cGluZGV4XSk7CisJCXRibGsgPSBJdGVtUG9p
bnRlckdldEJsb2NrTnVtYmVyKCZkZWFkX3R1cGxlcy0+aXRlbXB0cnNbdHVwaW5kZXhdKTsKIAkJ
aWYgKHRibGsgIT0gYmxrbm8pCiAJCQlicmVhazsJCQkJLyogcGFzdCBlbmQgb2YgdHVwbGVzIGZv
ciB0aGlzIGJsb2NrICovCi0JCXRvZmYgPSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcigmdmFj
cmVsc3RhdHMtPmRlYWRfdHVwbGVzW3R1cGluZGV4XSk7CisJCXRvZmYgPSBJdGVtUG9pbnRlckdl
dE9mZnNldE51bWJlcigmZGVhZF90dXBsZXMtPml0ZW1wdHJzW3R1cGluZGV4XSk7CiAJCWl0ZW1p
ZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgdG9mZik7CiAJCUl0ZW1JZFNldFVudXNlZChpdGVtaWQp
OwogCQl1bnVzZWRbdW5jbnQrK10gPSB0b2ZmOwpAQCAtMTcxOSwxOSArMTk3NCwzNTMgQEAgbGF6
eV9jaGVja19uZWVkc19mcmVlemUoQnVmZmVyIGJ1ZiwgYm9vbCAqaGFzdHVwKQogCXJldHVybiBm
YWxzZTsKIH0KIAorLyoKKyAqIFBlcmZvcm0gaW5kZXggdmFjdXVtIG9yIGluZGV4IGNsZWFudXAg
d2l0aCBwYXJhbGxlbCB3b3JrZXJzLiAgVGhpcyBmdW5jdGlvbgorICogbXVzdCBiZSB1c2VkIGJ5
IHRoZSBwYXJhbGxlbCB2YWN1dW0gbGVhZGVyIHByb2Nlc3MuICBUaGUgY2FsbGVyIG11c3Qgc2V0
CisgKiBscHMtPmx2c2hhcmVkLT5mb3JfY2xlYW51cCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRvIHBl
cmZvcm0gdmFjdXVtIG9yCisgKiBjbGVhbnVwLgorICovCitzdGF0aWMgdm9pZAorbGF6eV9wYXJh
bGxlbF92YWN1dW1faW5kZXhlcyhSZWxhdGlvbiAqSXJlbCwgSW5kZXhCdWxrRGVsZXRlUmVzdWx0
ICoqc3RhdHMsCisJCQkJCQkJIExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLCBMVlBhcmFsbGVsU3Rh
dGUgKmxwcywKKwkJCQkJCQkgaW50IG5pbmRleGVzKQoreworCWludAkJCW53b3JrZXJzOworCisJ
QXNzZXJ0KCFJc1BhcmFsbGVsV29ya2VyKCkpOworCUFzc2VydChQYXJhbGxlbFZhY3V1bUlzQWN0
aXZlKGxwcykpOworCUFzc2VydChuaW5kZXhlcyA+IDApOworCisJLyogRGV0ZXJtaW5lIHRoZSBu
dW1iZXIgb2YgcGFyYWxsZWwgd29ya2VycyB0byBsYXVuY2ggKi8KKwlpZiAobHBzLT5sdnNoYXJl
ZC0+Zm9yX2NsZWFudXApCisJeworCQlpZiAobHBzLT5sdnNoYXJlZC0+Zmlyc3RfdGltZSkKKwkJ
CW53b3JrZXJzID0gbHBzLT5uaW5kZXhlc19wYXJhbGxlbF9jbGVhbnVwICsKKwkJCQlscHMtPm5p
bmRleGVzX3BhcmFsbGVsX2NvbmRjbGVhbnVwOworCQllbHNlCisJCQlud29ya2VycyA9IGxwcy0+
bmluZGV4ZXNfcGFyYWxsZWxfY2xlYW51cDsKKworCX0KKwllbHNlCisJCW53b3JrZXJzID0gbHBz
LT5uaW5kZXhlc19wYXJhbGxlbF9idWxrZGVsOworCisJLyogVGhlIGxlYWRlciBwcm9jZXNzIHdp
bGwgcGFydGljaXBhdGUgKi8KKwlud29ya2Vycy0tOworCisJLyoKKwkgKiBJdCBpcyBwb3NzaWJs
ZSB0aGF0IHBhcmFsbGVsIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBmZXdlciB3b3JrZXJz
CisJICogdGhlbiB0aGUgbnVtYmVyIG9mIGluZGV4ZXMgdGhhdCBuZWVkIGEgc2VwYXJhdGUgd29y
a2VyIGluIHRoZSBjdXJyZW50CisJICogcGhhc2UsIHNvIHdlIG5lZWQgdG8gY29uc2lkZXIgaXQu
ICBTZWUgY29tcHV0ZV9wYXJhbGxlbF92YWN1dW1fd29ya2Vycy4KKwkgKi8KKwlud29ya2VycyA9
IE1pbihud29ya2VycywgbHBzLT5wY3h0LT5ud29ya2Vycyk7CisKKwkvKiBTZXR1cCB0aGUgc2hh
cmVkIGNvc3QtYmFzZWQgdmFjdXVtIGRlbGF5IGFuZCBsYXVuY2ggd29ya2VycyAqLworCWlmIChu
d29ya2VycyA+IDApCisJeworCQlpZiAodmFjcmVsc3RhdHMtPm51bV9pbmRleF9zY2FucyA+IDAp
CisJCXsKKwkJCS8qIFJlc2V0IHRoZSBwYXJhbGxlbCBpbmRleCBwcm9jZXNzaW5nIGNvdW50ZXIg
Ki8KKwkJCXBnX2F0b21pY193cml0ZV91MzIoJihscHMtPmx2c2hhcmVkLT5pZHgpLCAwKTsKKwor
CQkJLyogUmVpbml0aWFsaXplIHRoZSBwYXJhbGxlbCBjb250ZXh0IHRvIHJlbGF1bmNoIHBhcmFs
bGVsIHdvcmtlcnMgKi8KKwkJCVJlaW5pdGlhbGl6ZVBhcmFsbGVsRFNNKGxwcy0+cGN4dCk7CisJ
CX0KKworCQkvKiBFbmFibGUgc2hhcmVkIGNvc3QgYmFsYW5jZSAqLworCQlWYWN1dW1TaGFyZWRD
b3N0QmFsYW5jZSA9ICYobHBzLT5sdnNoYXJlZC0+Y29zdF9iYWxhbmNlKTsKKwkJVmFjdXVtQWN0
aXZlTldvcmtlcnMgPSAmKGxwcy0+bHZzaGFyZWQtPmFjdGl2ZV9ud29ya2Vycyk7CisKKwkJLyoK
KwkJICogU2V0IHVwIHNoYXJlZCBjb3N0IGJhbGFuY2UgYW5kIHRoZSBudW1iZXIgb2YgYWN0aXZl
IHdvcmtlcnMgZm9yCisJCSAqIHZhY3V1bSBkZWxheS4KKwkJICovCisJCXBnX2F0b21pY193cml0
ZV91MzIoVmFjdXVtU2hhcmVkQ29zdEJhbGFuY2UsIFZhY3V1bUNvc3RCYWxhbmNlKTsKKwkJcGdf
YXRvbWljX3dyaXRlX3UzMihWYWN1dW1BY3RpdmVOV29ya2VycywgMCk7CisKKwkJLyoKKwkJICog
VGhlIG51bWJlciBvZiB3b3JrZXJzIGNhbiB2YXJ5IGJldHdlZW4gYnVsa2RlbGV0ZSBhbmQgY2xl
YW51cAorCQkgKiBwaGFzZS4KKwkJICovCisJCVJlaW5pdGlhbGl6ZVBhcmFsbGVsV29ya2Vycyhs
cHMtPnBjeHQsIG53b3JrZXJzKTsKKworCQlMYXVuY2hQYXJhbGxlbFdvcmtlcnMobHBzLT5wY3h0
KTsKKworCQlpZiAobHBzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZCA+IDApCisJCXsKKwkJCS8q
CisJCQkgKiBSZXNldCB0aGUgbG9jYWwgY29zdCB2YWx1ZXMgZm9yIGxlYWRlciBiYWNrZW5kIGFz
IHdlIGhhdmUKKwkJCSAqIGFscmVhZHkgYWNjdW11bGF0ZWQgdGhlIHJlbWFpbmluZyBiYWxhbmNl
IG9mIGhlYXAuCisJCQkgKi8KKwkJCVZhY3V1bUNvc3RCYWxhbmNlID0gMDsKKwkJCVZhY3V1bUNv
c3RCYWxhbmNlTG9jYWwgPSAwOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIERpc2Fi
bGUgc2hhcmVkIGNvc3QgYmFsYW5jZSBpZiB3ZSBhcmUgbm90IGFibGUgdG8gbGF1bmNoCisJCQkg
KiB3b3JrZXJzLgorCQkJICovCisJCQlWYWN1dW1TaGFyZWRDb3N0QmFsYW5jZSA9IE5VTEw7CisJ
CQlWYWN1dW1BY3RpdmVOV29ya2VycyA9IE5VTEw7CisJCX0KKworCQlpZiAobHBzLT5sdnNoYXJl
ZC0+Zm9yX2NsZWFudXApCisJCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkJKGVycm1zZyhuZ2V0dGV4
dCgibGF1bmNoZWQgJWQgcGFyYWxsZWwgdmFjdXVtIHdvcmtlciBmb3IgaW5kZXggY2xlYW51cCAo
cGxhbm5lZDogJWQpIiwKKwkJCQkJCQkJCSAibGF1bmNoZWQgJWQgcGFyYWxsZWwgdmFjdXVtIHdv
cmtlcnMgZm9yIGluZGV4IGNsZWFudXAgKHBsYW5uZWQ6ICVkKSIsCisJCQkJCQkJCQkgbHBzLT5w
Y3h0LT5ud29ya2Vyc19sYXVuY2hlZCksCisJCQkJCQkJbHBzLT5wY3h0LT5ud29ya2Vyc19sYXVu
Y2hlZCwgbndvcmtlcnMpKSk7CisJCWVsc2UKKwkJCWVyZXBvcnQoZWxldmVsLAorCQkJCQkoZXJy
bXNnKG5nZXR0ZXh0KCJsYXVuY2hlZCAlZCBwYXJhbGxlbCB2YWN1dW0gd29ya2VyIGZvciBpbmRl
eCB2YWN1dW1pbmcgKHBsYW5uZWQ6ICVkKSIsCisJCQkJCQkJCQkgImxhdW5jaGVkICVkIHBhcmFs
bGVsIHZhY3V1bSB3b3JrZXJzIGZvciBpbmRleCB2YWN1dW1pbmcgKHBsYW5uZWQ6ICVkKSIsCisJ
CQkJCQkJCQkgbHBzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZCksCisJCQkJCQkJbHBzLT5wY3h0
LT5ud29ya2Vyc19sYXVuY2hlZCwgbndvcmtlcnMpKSk7CisJfQorCisJLyogUHJvY2VzcyB0aGUg
aW5kZXhlcyB0aGF0IGNhbiBiZSBwcm9jZXNzZWQgYnkgb25seSBsZWFkZXIgcHJvY2VzcyAqLwor
CXZhY3V1bV9pbmRleGVzX2xlYWRlcihJcmVsLCBzdGF0cywgdmFjcmVsc3RhdHMsIGxwcywgbmlu
ZGV4ZXMpOworCisJLyoKKwkgKiBKb2luIGFzIGEgcGFyYWxsZWwgd29ya2VyLiAgVGhlIGxlYWRl
ciBwcm9jZXNzIGFsb25lIHByb2Nlc3NlcyBhbGwgdGhlCisJICogaW5kZXhlcyBpbiB0aGUgY2Fz
ZSB3aGVyZSBubyB3b3JrZXJzIGFyZSBsYXVuY2hlZC4KKwkgKi8KKwlwYXJhbGxlbF92YWN1dW1f
aW5kZXgoSXJlbCwgc3RhdHMsIGxwcy0+bHZzaGFyZWQsCisJCQkJCQkgIHZhY3JlbHN0YXRzLT5k
ZWFkX3R1cGxlcywgbmluZGV4ZXMpOworCisJLyogV2FpdCBmb3IgYWxsIHZhY3V1bSB3b3JrZXJz
IHRvIGZpbmlzaCAqLworCVdhaXRGb3JQYXJhbGxlbFdvcmtlcnNUb0ZpbmlzaChscHMtPnBjeHQp
OworCisJLyogQ2FycnkgdGhlIHNoYXJlZCBiYWxhbmNlIHZhbHVlIHRvIGhlYXAgc2NhbiAqLwor
CWlmIChWYWN1dW1TaGFyZWRDb3N0QmFsYW5jZSkKKwkJVmFjdXVtQ29zdEJhbGFuY2UgPSBwZ19h
dG9taWNfcmVhZF91MzIoVmFjdXVtU2hhcmVkQ29zdEJhbGFuY2UpOworCisJaWYgKG53b3JrZXJz
ID4gMCkKKwl7CisJCS8qIERpc2FibGUgc2hhcmVkIGNvc3QgYmFsYW5jZSAqLworCQlWYWN1dW1T
aGFyZWRDb3N0QmFsYW5jZSA9IE5VTEw7CisJCVZhY3V1bUFjdGl2ZU5Xb3JrZXJzID0gTlVMTDsK
Kwl9Cit9CisKKy8qCisgKiBJbmRleCB2YWN1dW0vY2xlYW51cCByb3V0aW5lIHVzZWQgYnkgdGhl
IGxlYWRlciBwcm9jZXNzIGFuZCBwYXJhbGxlbAorICogdmFjdXVtIHdvcmtlciBwcm9jZXNzZXMg
dG8gcHJvY2VzcyB0aGUgaW5kZXhlcyBpbiBwYXJhbGxlbC4KKyAqLworc3RhdGljIHZvaWQKK3Bh
cmFsbGVsX3ZhY3V1bV9pbmRleChSZWxhdGlvbiAqSXJlbCwgSW5kZXhCdWxrRGVsZXRlUmVzdWx0
ICoqc3RhdHMsCisJCQkJCSAgTFZTaGFyZWQgKmx2c2hhcmVkLCBMVkRlYWRUdXBsZXMgKmRlYWRf
dHVwbGVzLAorCQkJCQkgIGludCBuaW5kZXhlcykKK3sKKwkvKgorCSAqIEluY3JlbWVudCB0aGUg
YWN0aXZlIHdvcmtlciBjb3VudCBpZiB3ZSBhcmUgYWJsZSB0byBsYXVuY2ggYW55IHdvcmtlci4K
KwkgKi8KKwlpZiAoVmFjdXVtQWN0aXZlTldvcmtlcnMpCisJCXBnX2F0b21pY19hZGRfZmV0Y2hf
dTMyKFZhY3V1bUFjdGl2ZU5Xb3JrZXJzLCAxKTsKKworCS8qIExvb3AgdW50aWwgYWxsIGluZGV4
ZXMgYXJlIHZhY3V1bWVkICovCisJZm9yICg7OykKKwl7CisJCWludAkJCWlkeDsKKwkJTFZTaGFy
ZWRJbmRTdGF0cyAqc2hhcmVkX2luZHN0YXRzOworCisJCS8qIEdldCBhbiBpbmRleCBudW1iZXIg
dG8gcHJvY2VzcyAqLworCQlpZHggPSBwZ19hdG9taWNfZmV0Y2hfYWRkX3UzMigmKGx2c2hhcmVk
LT5pZHgpLCAxKTsKKworCQkvKiBEb25lIGZvciBhbGwgaW5kZXhlcz8gKi8KKwkJaWYgKGlkeCA+
PSBuaW5kZXhlcykKKwkJCWJyZWFrOworCisJCS8qIEdldCB0aGUgaW5kZXggc3RhdGlzdGljcyBv
ZiB0aGlzIGluZGV4IGZyb20gRFNNICovCisJCXNoYXJlZF9pbmRzdGF0cyA9IGdldF9pbmRzdGF0
cyhsdnNoYXJlZCwgaWR4KTsKKworCQkvKgorCQkgKiBTa2lwIHByb2Nlc3NpbmcgaW5kZXhlcyB0
aGF0IGRvZXNuJ3QgcGFydGljaXBhdGUgaW4gcGFyYWxsZWwKKwkJICogb3BlcmF0aW9uCisJCSAq
LworCQlpZiAoc2hhcmVkX2luZHN0YXRzID09IE5VTEwgfHwKKwkJCXNraXBfcGFyYWxsZWxfdmFj
dXVtX2luZGV4KElyZWxbaWR4XSwgbHZzaGFyZWQpKQorCQkJY29udGludWU7CisKKwkJLyogRG8g
dmFjdXVtIG9yIGNsZWFudXAgb2YgdGhlIGluZGV4ICovCisJCXZhY3V1bV9vbmVfaW5kZXgoSXJl
bFtpZHhdLCAmKHN0YXRzW2lkeF0pLCBsdnNoYXJlZCwgc2hhcmVkX2luZHN0YXRzLAorCQkJCQkJ
IGRlYWRfdHVwbGVzKTsKKwl9CisKKwkvKgorCSAqIFdlIGhhdmUgY29tcGxldGVkIHRoZSBpbmRl
eCB2YWN1dW0gc28gZGVjcmVtZW50IHRoZSBhY3RpdmUgd29ya2VyCisJICogY291bnQuCisJICov
CisJaWYgKFZhY3V1bUFjdGl2ZU5Xb3JrZXJzKQorCQlwZ19hdG9taWNfc3ViX2ZldGNoX3UzMihW
YWN1dW1BY3RpdmVOV29ya2VycywgMSk7Cit9CisKKy8qCisgKiBWYWN1dW0gb3IgY2xlYW51cCBp
bmRleGVzIHRoYXQgY2FuIGJlIHByb2Nlc3NlZCBieSBvbmx5IHRoZSBsZWFkZXIgcHJvY2Vzcwor
ICogYmVjYXVzZSB0aGVzZSBpbmRleGVzIGRvbid0IHN1cHBvcnQgcGFyYWxsZWwgb3BlcmF0aW9u
IGF0IHRoYXQgcGhhc2UuCisgKi8KK3N0YXRpYyB2b2lkCit2YWN1dW1faW5kZXhlc19sZWFkZXIo
UmVsYXRpb24gKklyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKnN0YXRzLAorCQkJCQkgIExW
UmVsU3RhdHMgKnZhY3JlbHN0YXRzLCBMVlBhcmFsbGVsU3RhdGUgKmxwcywKKwkJCQkJICBpbnQg
bmluZGV4ZXMpCit7CisJaW50CQkJaTsKKworCUFzc2VydCghSXNQYXJhbGxlbFdvcmtlcigpKTsK
KworCS8qCisJICogSW5jcmVtZW50IHRoZSBhY3RpdmUgd29ya2VyIGNvdW50IGlmIHdlIGFyZSBh
YmxlIHRvIGxhdW5jaCBhbnkgd29ya2VyLgorCSAqLworCWlmIChWYWN1dW1BY3RpdmVOV29ya2Vy
cykKKwkJcGdfYXRvbWljX2FkZF9mZXRjaF91MzIoVmFjdXVtQWN0aXZlTldvcmtlcnMsIDEpOwor
CisJZm9yIChpID0gMDsgaSA8IG5pbmRleGVzOyBpKyspCisJeworCQlMVlNoYXJlZEluZFN0YXRz
ICpzaGFyZWRfaW5kc3RhdHM7CisKKwkJc2hhcmVkX2luZHN0YXRzID0gZ2V0X2luZHN0YXRzKGxw
cy0+bHZzaGFyZWQsIGkpOworCisJCS8qIFByb2Nlc3MgdGhlIGluZGV4ZXMgc2tpcHBlZCBieSBw
YXJhbGxlbCB3b3JrZXJzICovCisJCWlmIChzaGFyZWRfaW5kc3RhdHMgPT0gTlVMTCB8fAorCQkJ
c2tpcF9wYXJhbGxlbF92YWN1dW1faW5kZXgoSXJlbFtpXSwgbHBzLT5sdnNoYXJlZCkpCisJCQl2
YWN1dW1fb25lX2luZGV4KElyZWxbaV0sICYoc3RhdHNbaV0pLCBscHMtPmx2c2hhcmVkLAorCQkJ
CQkJCSBzaGFyZWRfaW5kc3RhdHMsIHZhY3JlbHN0YXRzLT5kZWFkX3R1cGxlcyk7CisJfQorCisJ
LyoKKwkgKiBXZSBoYXZlIGNvbXBsZXRlZCB0aGUgaW5kZXggdmFjdXVtIHNvIGRlY3JlbWVudCB0
aGUgYWN0aXZlIHdvcmtlcgorCSAqIGNvdW50LgorCSAqLworCWlmIChWYWN1dW1BY3RpdmVOV29y
a2VycykKKwkJcGdfYXRvbWljX3N1Yl9mZXRjaF91MzIoVmFjdXVtQWN0aXZlTldvcmtlcnMsIDEp
OworfQorCisvKgorICogVmFjdXVtIG9yIGNsZWFudXAgaW5kZXggZWl0aGVyIGJ5IGxlYWRlciBw
cm9jZXNzIG9yIGJ5IG9uZSBvZiB0aGUgd29ya2VyCisgKiBwcm9jZXNzLiAgQWZ0ZXIgcHJvY2Vz
c2luZyB0aGUgaW5kZXggdGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGluZGV4CisgKiBzdGF0aXN0
aWNzIHJldHVybmVkIGZyb20gYW1idWxrZGVsZXRlIGFuZCBhbXZhY3V1bWNsZWFudXAgdG8gdGhl
IERTTQorICogc2VnbWVudC4KKyAqLworc3RhdGljIHZvaWQKK3ZhY3V1bV9vbmVfaW5kZXgoUmVs
YXRpb24gaW5kcmVsLCBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKipzdGF0cywKKwkJCQkgTFZTaGFy
ZWQgKmx2c2hhcmVkLCBMVlNoYXJlZEluZFN0YXRzICpzaGFyZWRfaW5kc3RhdHMsCisJCQkJIExW
RGVhZFR1cGxlcyAqZGVhZF90dXBsZXMpCit7CisJSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpidWxr
ZGVsZXRlX3JlcyA9IE5VTEw7CisKKwlpZiAoc2hhcmVkX2luZHN0YXRzKQorCXsKKwkJLyogR2V0
IHRoZSBzcGFjZSBmb3IgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICovCisJCWJ1bGtkZWxldGVfcmVz
ID0gJihzaGFyZWRfaW5kc3RhdHMtPnN0YXRzKTsKKworCQkvKgorCQkgKiBVcGRhdGUgdGhlIHBv
aW50ZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYnVsay1kZWxldGlvbiByZXN1bHQgaWYKKwkJICog
c29tZW9uZSBoYXMgYWxyZWFkeSB1cGRhdGVkIGl0LgorCQkgKi8KKwkJaWYgKHNoYXJlZF9pbmRz
dGF0cy0+dXBkYXRlZCAmJiAqc3RhdHMgPT0gTlVMTCkKKwkJCSpzdGF0cyA9IGJ1bGtkZWxldGVf
cmVzOworCX0KKworCS8qIERvIHZhY3V1bSBvciBjbGVhbnVwIG9mIHRoZSBpbmRleCAqLworCWlm
IChsdnNoYXJlZC0+Zm9yX2NsZWFudXApCisJCWxhenlfY2xlYW51cF9pbmRleChpbmRyZWwsIHN0
YXRzLCBsdnNoYXJlZC0+cmVsdHVwbGVzLAorCQkJCQkJICAgbHZzaGFyZWQtPmVzdGltYXRlZF9j
b3VudCk7CisJZWxzZQorCQlsYXp5X3ZhY3V1bV9pbmRleChpbmRyZWwsIHN0YXRzLCBkZWFkX3R1
cGxlcywKKwkJCQkJCSAgbHZzaGFyZWQtPnJlbHR1cGxlcyk7CisKKwkvKgorCSAqIENvcHkgdGhl
IGluZGV4IGJ1bGstZGVsZXRpb24gcmVzdWx0IHJldHVybmVkIGZyb20gYW1idWxrZGVsZXRlIGFu
ZAorCSAqIGFtdmFjdXVtY2xlYW51cCB0byB0aGUgRFNNIHNlZ21lbnQgaWYgaXQncyB0aGUgZmly
c3QgdGltZSB0byBnZXQgaXQKKwkgKiBmcm9tIHRoZW0sIGJlY2F1c2UgdGhleSBhbGxvY2F0ZSBp
dCBsb2NhbGx5IGFuZCBpdCdzIHBvc3NpYmxlIHRoYXQgYW4KKwkgKiBpbmRleCB3aWxsIGJlIHZh
Y3V1bWVkIGJ5IHRoZSBkaWZmZXJlbnQgdmFjdXVtIHByb2Nlc3MgYXQgdGhlIG5leHQKKwkgKiB0
aW1lLiAgVGhlIGNvcHlpbmcgb2YgdGhlIHJlc3VsdCBub3JtYWxseSBoYXBwZW5zIG9ubHkgYWZ0
ZXIgdGhlIGZpcnN0CisJICogdGltZSBvZiBpbmRleCB2YWN1dW1pbmcuICBGcm9tIHRoZSBzZWNv
bmQgdGltZSwgd2UgcGFzcyB0aGUgcmVzdWx0IG9uCisJICogdGhlIERTTSBzZWdtZW50IHNvIHRo
YXQgdGhleSB0aGVuIHVwZGF0ZSBpdCBkaXJlY3RseS4KKwkgKgorCSAqIFNpbmNlIGFsbCB2YWN1
dW0gd29ya2VycyB3cml0ZSB0aGUgYnVsay1kZWxldGlvbiByZXN1bHQgYXQgZGlmZmVyZW50CisJ
ICogc2xvdHMgd2UgY2FuIHdyaXRlIHRoZW0gd2l0aG91dCBsb2NraW5nLgorCSAqLworCWlmIChz
aGFyZWRfaW5kc3RhdHMgJiYgIXNoYXJlZF9pbmRzdGF0cy0+dXBkYXRlZCAmJiAqc3RhdHMgIT0g
TlVMTCkKKwl7CisJCW1lbWNweShidWxrZGVsZXRlX3JlcywgKnN0YXRzLCBzaXplb2YoSW5kZXhC
dWxrRGVsZXRlUmVzdWx0KSk7CisJCXNoYXJlZF9pbmRzdGF0cy0+dXBkYXRlZCA9IHRydWU7CisK
KwkJLyoKKwkJICogTm93IHRoYXQgdGhlIHN0YXRzW2lkeF0gcG9pbnRzIHRvIHRoZSBEU00gc2Vn
bWVudCwgd2UgZG9uJ3QgbmVlZAorCQkgKiB0aGUgbG9jYWxseSBhbGxvY2F0ZWQgcmVzdWx0cy4K
KwkJICovCisJCXBmcmVlKCpzdGF0cyk7CisJCSpzdGF0cyA9IGJ1bGtkZWxldGVfcmVzOworCX0K
K30KKworLyoKKyAqCWxhenlfY2xlYW51cF9hbGxfaW5kZXhlcygpIC0tIGNsZWFudXAgYWxsIGlu
ZGV4ZXMgb2YgcmVsYXRpb24uCisgKgorICogQ2xlYW51cCBpbmRleGVzLiAgV2UgcHJvY2VzcyB0
aGUgaW5kZXhlcyBzZXJpYWxseSB1bmxlc3Mgd2UgYXJlIGRvaW5nCisgKiBwYXJhbGxlbCB2YWN1
dW0uCisgKi8KK3N0YXRpYyB2b2lkCitsYXp5X2NsZWFudXBfYWxsX2luZGV4ZXMoUmVsYXRpb24g
KklyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKnN0YXRzLAorCQkJCQkJIExWUmVsU3RhdHMg
KnZhY3JlbHN0YXRzLCBMVlBhcmFsbGVsU3RhdGUgKmxwcywKKwkJCQkJCSBpbnQgbmluZGV4ZXMp
Cit7CisJaW50CQkJaWR4OworCisJQXNzZXJ0KCFJc1BhcmFsbGVsV29ya2VyKCkpOworCUFzc2Vy
dChuaW5kZXhlcyA+IDApOworCisJLyogUmVwb3J0IHRoYXQgd2UgYXJlIG5vdyBjbGVhbmluZyB1
cCBpbmRleGVzICovCisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19WQUNV
VU1fUEhBU0UsCisJCQkJCQkJCSBQUk9HUkVTU19WQUNVVU1fUEhBU0VfSU5ERVhfQ0xFQU5VUCk7
CisKKwkvKgorCSAqIElmIHBhcmFsbGVsIHZhY3V1bSBpcyBhY3RpdmUgd2UgcGVyZm9ybSBpbmRl
eCBjbGVhbnVwIHdpdGggcGFyYWxsZWwKKwkgKiB3b3JrZXJzLgorCSAqLworCWlmIChQYXJhbGxl
bFZhY3V1bUlzQWN0aXZlKGxwcykpCisJeworCQkvKiBUZWxsIHBhcmFsbGVsIHdvcmtlcnMgdG8g
ZG8gaW5kZXggY2xlYW51cCAqLworCQlscHMtPmx2c2hhcmVkLT5mb3JfY2xlYW51cCA9IHRydWU7
CisJCWxwcy0+bHZzaGFyZWQtPmZpcnN0X3RpbWUgPQorCQkJKHZhY3JlbHN0YXRzLT5udW1faW5k
ZXhfc2NhbnMgPT0gMCk7CisKKwkJLyoKKwkJICogTm93IHdlIGNhbiBwcm92aWRlIGEgYmV0dGVy
IGVzdGltYXRlIG9mIHRvdGFsIG51bWJlciBvZiBzdXJ2aXZpbmcKKwkJICogdHVwbGVzICh3ZSBh
c3N1bWUgaW5kZXhlcyBhcmUgbW9yZSBpbnRlcmVzdGVkIGluIHRoYXQgdGhhbiBpbiB0aGUKKwkJ
ICogbnVtYmVyIG9mIG5vbWluYWxseSBsaXZlIHR1cGxlcykuCisJCSAqLworCQlscHMtPmx2c2hh
cmVkLT5yZWx0dXBsZXMgPSB2YWNyZWxzdGF0cy0+bmV3X3JlbF90dXBsZXM7CisJCWxwcy0+bHZz
aGFyZWQtPmVzdGltYXRlZF9jb3VudCA9CisJCQkodmFjcmVsc3RhdHMtPnR1cGNvdW50X3BhZ2Vz
IDwgdmFjcmVsc3RhdHMtPnJlbF9wYWdlcyk7CisKKwkJbGF6eV9wYXJhbGxlbF92YWN1dW1faW5k
ZXhlcyhJcmVsLCBzdGF0cywgdmFjcmVsc3RhdHMsIGxwcywgbmluZGV4ZXMpOworCX0KKwllbHNl
CisJeworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IG5pbmRleGVzOyBpZHgrKykKKwkJCWxhenlfY2xl
YW51cF9pbmRleChJcmVsW2lkeF0sICZzdGF0c1tpZHhdLAorCQkJCQkJCSAgIHZhY3JlbHN0YXRz
LT5uZXdfcmVsX3R1cGxlcywKKwkJCQkJCQkgICB2YWNyZWxzdGF0cy0+dHVwY291bnRfcGFnZXMg
PCB2YWNyZWxzdGF0cy0+cmVsX3BhZ2VzKTsKKwl9Cit9CiAKIC8qCiAgKglsYXp5X3ZhY3V1bV9p
bmRleCgpIC0tIHZhY3V1bSBvbmUgaW5kZXggcmVsYXRpb24uCiAgKgogICoJCURlbGV0ZSBhbGwg
dGhlIGluZGV4IGVudHJpZXMgcG9pbnRpbmcgdG8gdHVwbGVzIGxpc3RlZCBpbgotICoJCXZhY3Jl
bHN0YXRzLT5kZWFkX3R1cGxlcywgYW5kIHVwZGF0ZSBydW5uaW5nIHN0YXRpc3RpY3MuCisgKgkJ
ZGVhZF90dXBsZXMsIGFuZCB1cGRhdGUgcnVubmluZyBzdGF0aXN0aWNzLgorICoKKyAqCQlyZWx0
dXBsZXMgaXMgdGhlIG51bWJlciBvZiBoZWFwIHR1cGxlcyB0byBiZSBwYXNzZWQgdG8gdGhlCisg
KgkJYnVsa2RlbGV0ZSBjYWxsYmFjay4KICAqLwogc3RhdGljIHZvaWQKLWxhenlfdmFjdXVtX2lu
ZGV4KFJlbGF0aW9uIGluZHJlbCwKLQkJCQkgIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKnN0YXRz
LAotCQkJCSAgTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMpCitsYXp5X3ZhY3V1bV9pbmRleChSZWxh
dGlvbiBpbmRyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqKnN0YXRzLAorCQkJCSAgTFZEZWFk
VHVwbGVzICpkZWFkX3R1cGxlcywgZG91YmxlIHJlbHR1cGxlcykKIHsKIAlJbmRleFZhY3V1bUlu
Zm8gaXZpbmZvOworCWNvbnN0IGNoYXIgKm1zZzsKIAlQR1JVc2FnZQlydTA7CiAKIAlwZ19ydXNh
Z2VfaW5pdCgmcnUwKTsKQEAgLTE3NDEsMzAgKzIzMzAsMzggQEAgbGF6eV92YWN1dW1faW5kZXgo
UmVsYXRpb24gaW5kcmVsLAogCWl2aW5mby5yZXBvcnRfcHJvZ3Jlc3MgPSBmYWxzZTsKIAlpdmlu
Zm8uZXN0aW1hdGVkX2NvdW50ID0gdHJ1ZTsKIAlpdmluZm8ubWVzc2FnZV9sZXZlbCA9IGVsZXZl
bDsKLQkvKiBXZSBjYW4gb25seSBwcm92aWRlIGFuIGFwcHJveGltYXRlIHZhbHVlIG9mIG51bV9o
ZWFwX3R1cGxlcyBoZXJlICovCi0JaXZpbmZvLm51bV9oZWFwX3R1cGxlcyA9IHZhY3JlbHN0YXRz
LT5vbGRfbGl2ZV90dXBsZXM7CisJaXZpbmZvLm51bV9oZWFwX3R1cGxlcyA9IHJlbHR1cGxlczsK
IAlpdmluZm8uc3RyYXRlZ3kgPSB2YWNfc3RyYXRlZ3k7CiAKIAkvKiBEbyBidWxrIGRlbGV0aW9u
ICovCiAJKnN0YXRzID0gaW5kZXhfYnVsa19kZWxldGUoJml2aW5mbywgKnN0YXRzLAotCQkJCQkJ
CSAgIGxhenlfdGlkX3JlYXBlZCwgKHZvaWQgKikgdmFjcmVsc3RhdHMpOworCQkJCQkJCSAgIGxh
enlfdGlkX3JlYXBlZCwgKHZvaWQgKikgZGVhZF90dXBsZXMpOworCisJaWYgKElzUGFyYWxsZWxX
b3JrZXIoKSkKKwkJbXNnID0gZ2V0dGV4dF9ub29wKCJzY2FubmVkIGluZGV4IFwiJXNcIiB0byBy
ZW1vdmUgJWQgcm93IHZlcnNpb25zIGJ5IHBhcmFsbGVsIHZhY3V1bSB3b3JrZXIiKTsKKwllbHNl
CisJCW1zZyA9IGdldHRleHRfbm9vcCgic2Nhbm5lZCBpbmRleCBcIiVzXCIgdG8gcmVtb3ZlICVk
IHJvdyB2ZXJzaW9ucyIpOwogCiAJZXJlcG9ydChlbGV2ZWwsCi0JCQkoZXJybXNnKCJzY2FubmVk
IGluZGV4IFwiJXNcIiB0byByZW1vdmUgJWQgcm93IHZlcnNpb25zIiwKKwkJCShlcnJtc2cobXNn
LAogCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpbmRyZWwpLAotCQkJCQl2YWNyZWxzdGF0
cy0+bnVtX2RlYWRfdHVwbGVzKSwKKwkJCQkJZGVhZF90dXBsZXMtPm51bV90dXBsZXMpLAogCQkJ
IGVycmRldGFpbF9pbnRlcm5hbCgiJXMiLCBwZ19ydXNhZ2Vfc2hvdygmcnUwKSkpKTsKIH0KIAog
LyoKICAqCWxhenlfY2xlYW51cF9pbmRleCgpIC0tIGRvIHBvc3QtdmFjdXVtIGNsZWFudXAgZm9y
IG9uZSBpbmRleCByZWxhdGlvbi4KKyAqCisgKgkJcmVsdHVwbGVzIGlzIHRoZSBudW1iZXIgb2Yg
aGVhcCB0dXBsZXMgYW5kIGVzdGltYXRlZF9jb3VudCBpcyB0cnVlCisgKgkJaWYgdGhlIHJlbHR1
cGxlcyBpcyBhbiBlc3RpbWF0ZWQgdmFsdWUuCiAgKi8KIHN0YXRpYyB2b2lkCiBsYXp5X2NsZWFu
dXBfaW5kZXgoUmVsYXRpb24gaW5kcmVsLAotCQkJCSAgIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAq
c3RhdHMsCi0JCQkJICAgTFZSZWxTdGF0cyAqdmFjcmVsc3RhdHMpCisJCQkJICAgSW5kZXhCdWxr
RGVsZXRlUmVzdWx0ICoqc3RhdHMsCisJCQkJICAgZG91YmxlIHJlbHR1cGxlcywgYm9vbCBlc3Rp
bWF0ZWRfY291bnQpCiB7CiAJSW5kZXhWYWN1dW1JbmZvIGl2aW5mbzsKKwljb25zdCBjaGFyICpt
c2c7CiAJUEdSVXNhZ2UJcnUwOwogCiAJcGdfcnVzYWdlX2luaXQoJnJ1MCk7CkBAIC0xNzcyLDQ5
ICsyMzY5LDMzIEBAIGxhenlfY2xlYW51cF9pbmRleChSZWxhdGlvbiBpbmRyZWwsCiAJaXZpbmZv
LmluZGV4ID0gaW5kcmVsOwogCWl2aW5mby5hbmFseXplX29ubHkgPSBmYWxzZTsKIAlpdmluZm8u
cmVwb3J0X3Byb2dyZXNzID0gZmFsc2U7Ci0JaXZpbmZvLmVzdGltYXRlZF9jb3VudCA9ICh2YWNy
ZWxzdGF0cy0+dHVwY291bnRfcGFnZXMgPCB2YWNyZWxzdGF0cy0+cmVsX3BhZ2VzKTsKKwlpdmlu
Zm8uZXN0aW1hdGVkX2NvdW50ID0gZXN0aW1hdGVkX2NvdW50OwogCWl2aW5mby5tZXNzYWdlX2xl
dmVsID0gZWxldmVsOwogCi0JLyoKLQkgKiBOb3cgd2UgY2FuIHByb3ZpZGUgYSBiZXR0ZXIgZXN0
aW1hdGUgb2YgdG90YWwgbnVtYmVyIG9mIHN1cnZpdmluZwotCSAqIHR1cGxlcyAod2UgYXNzdW1l
IGluZGV4ZXMgYXJlIG1vcmUgaW50ZXJlc3RlZCBpbiB0aGF0IHRoYW4gaW4gdGhlCi0JICogbnVt
YmVyIG9mIG5vbWluYWxseSBsaXZlIHR1cGxlcykuCi0JICovCi0JaXZpbmZvLm51bV9oZWFwX3R1
cGxlcyA9IHZhY3JlbHN0YXRzLT5uZXdfcmVsX3R1cGxlczsKKwlpdmluZm8ubnVtX2hlYXBfdHVw
bGVzID0gcmVsdHVwbGVzOwogCWl2aW5mby5zdHJhdGVneSA9IHZhY19zdHJhdGVneTsKIAotCXN0
YXRzID0gaW5kZXhfdmFjdXVtX2NsZWFudXAoJml2aW5mbywgc3RhdHMpOworCSpzdGF0cyA9IGlu
ZGV4X3ZhY3V1bV9jbGVhbnVwKCZpdmluZm8sICpzdGF0cyk7CiAKLQlpZiAoIXN0YXRzKQorCWlm
ICghKCpzdGF0cykpCiAJCXJldHVybjsKIAotCS8qCi0JICogTm93IHVwZGF0ZSBzdGF0aXN0aWNz
IGluIHBnX2NsYXNzLCBidXQgb25seSBpZiB0aGUgaW5kZXggc2F5cyB0aGUgY291bnQKLQkgKiBp
cyBhY2N1cmF0ZS4KLQkgKi8KLQlpZiAoIXN0YXRzLT5lc3RpbWF0ZWRfY291bnQpCi0JCXZhY191
cGRhdGVfcmVsc3RhdHMoaW5kcmVsLAotCQkJCQkJCXN0YXRzLT5udW1fcGFnZXMsCi0JCQkJCQkJ
c3RhdHMtPm51bV9pbmRleF90dXBsZXMsCi0JCQkJCQkJMCwKLQkJCQkJCQlmYWxzZSwKLQkJCQkJ
CQlJbnZhbGlkVHJhbnNhY3Rpb25JZCwKLQkJCQkJCQlJbnZhbGlkTXVsdGlYYWN0SWQsCi0JCQkJ
CQkJZmFsc2UpOworCWlmIChJc1BhcmFsbGVsV29ya2VyKCkpCisJCW1zZyA9IGdldHRleHRfbm9v
cCgiaW5kZXggXCIlc1wiIG5vdyBjb250YWlucyAlLjBmIHJvdyB2ZXJzaW9ucyBpbiAldSBwYWdl
cyBhcyByZXBvcnRlZCBieSBwYXJhbGxlbCB2YWN1dW0gd29ya2VyIik7CisJZWxzZQorCQltc2cg
PSBnZXR0ZXh0X25vb3AoImluZGV4IFwiJXNcIiBub3cgY29udGFpbnMgJS4wZiByb3cgdmVyc2lv
bnMgaW4gJXUgcGFnZXMiKTsKIAogCWVyZXBvcnQoZWxldmVsLAotCQkJKGVycm1zZygiaW5kZXgg
XCIlc1wiIG5vdyBjb250YWlucyAlLjBmIHJvdyB2ZXJzaW9ucyBpbiAldSBwYWdlcyIsCisJCQko
ZXJybXNnKG1zZywKIAkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaW5kcmVsKSwKLQkJCQkJ
c3RhdHMtPm51bV9pbmRleF90dXBsZXMsCi0JCQkJCXN0YXRzLT5udW1fcGFnZXMpLAorCQkJCQko
KnN0YXRzKS0+bnVtX2luZGV4X3R1cGxlcywKKwkJCQkJKCpzdGF0cyktPm51bV9wYWdlcyksCiAJ
CQkgZXJyZGV0YWlsKCIlLjBmIGluZGV4IHJvdyB2ZXJzaW9ucyB3ZXJlIHJlbW92ZWQuXG4iCiAJ
CQkJCSAgICIldSBpbmRleCBwYWdlcyBoYXZlIGJlZW4gZGVsZXRlZCwgJXUgYXJlIGN1cnJlbnRs
eSByZXVzYWJsZS5cbiIKIAkJCQkJICAgIiVzLiIsCi0JCQkJCSAgIHN0YXRzLT50dXBsZXNfcmVt
b3ZlZCwKLQkJCQkJICAgc3RhdHMtPnBhZ2VzX2RlbGV0ZWQsIHN0YXRzLT5wYWdlc19mcmVlLAor
CQkJCQkgICAoKnN0YXRzKS0+dHVwbGVzX3JlbW92ZWQsCisJCQkJCSAgICgqc3RhdHMpLT5wYWdl
c19kZWxldGVkLCAoKnN0YXRzKS0+cGFnZXNfZnJlZSwKIAkJCQkJICAgcGdfcnVzYWdlX3Nob3co
JnJ1MCkpKSk7Ci0KLQlwZnJlZShzdGF0cyk7CiB9CiAKIC8qCkBAIC0yMTIyLDE5ICsyNzAzLDE3
IEBAIGNvdW50X25vbmRlbGV0YWJsZV9wYWdlcyhSZWxhdGlvbiBvbmVyZWwsIExWUmVsU3RhdHMg
KnZhY3JlbHN0YXRzKQogfQogCiAvKgotICogbGF6eV9zcGFjZV9hbGxvYyAtIHNwYWNlIGFsbG9j
YXRpb24gZGVjaXNpb25zIGZvciBsYXp5IHZhY3V1bQotICoKLSAqIFNlZSB0aGUgY29tbWVudHMg
YXQgdGhlIGhlYWQgb2YgdGhpcyBmaWxlIGZvciByYXRpb25hbGUuCisgKiBSZXR1cm4gdGhlIG1h
eGltdW0gbnVtYmVyIG9mIGRlYWQgdHVwbGVzIHdlIGNhbiByZWNvcmQuCiAgKi8KLXN0YXRpYyB2
b2lkCi1sYXp5X3NwYWNlX2FsbG9jKExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLCBCbG9ja051bWJl
ciByZWxibG9ja3MpCitzdGF0aWMgbG9uZworY29tcHV0ZV9tYXhfZGVhZF90dXBsZXMoQmxvY2tO
dW1iZXIgcmVsYmxvY2tzLCBib29sIHVzZWluZGV4KQogewogCWxvbmcJCW1heHR1cGxlczsKIAlp
bnQJCQl2YWNfd29ya19tZW0gPSBJc0F1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkgJiYKIAlhdXRv
dmFjdXVtX3dvcmtfbWVtICE9IC0xID8KIAlhdXRvdmFjdXVtX3dvcmtfbWVtIDogbWFpbnRlbmFu
Y2Vfd29ya19tZW07CiAKLQlpZiAodmFjcmVsc3RhdHMtPnVzZWluZGV4KQorCWlmICh1c2VpbmRl
eCkKIAl7CiAJCW1heHR1cGxlcyA9ICh2YWNfd29ya19tZW0gKiAxMDI0TCkgLyBzaXplb2YoSXRl
bVBvaW50ZXJEYXRhKTsKIAkJbWF4dHVwbGVzID0gTWluKG1heHR1cGxlcywgSU5UX01BWCk7CkBA
IC0yMTQ4LDM0ICsyNzI3LDQ4IEBAIGxhenlfc3BhY2VfYWxsb2MoTFZSZWxTdGF0cyAqdmFjcmVs
c3RhdHMsIEJsb2NrTnVtYmVyIHJlbGJsb2NrcykKIAkJbWF4dHVwbGVzID0gTWF4KG1heHR1cGxl
cywgTWF4SGVhcFR1cGxlc1BlclBhZ2UpOwogCX0KIAllbHNlCi0JewogCQltYXh0dXBsZXMgPSBN
YXhIZWFwVHVwbGVzUGVyUGFnZTsKLQl9CiAKLQl2YWNyZWxzdGF0cy0+bnVtX2RlYWRfdHVwbGVz
ID0gMDsKLQl2YWNyZWxzdGF0cy0+bWF4X2RlYWRfdHVwbGVzID0gKGludCkgbWF4dHVwbGVzOwot
CXZhY3JlbHN0YXRzLT5kZWFkX3R1cGxlcyA9IChJdGVtUG9pbnRlcikKLQkJcGFsbG9jKG1heHR1
cGxlcyAqIHNpemVvZihJdGVtUG9pbnRlckRhdGEpKTsKKwlyZXR1cm4gbWF4dHVwbGVzOworfQor
CisvKgorICogbGF6eV9zcGFjZV9hbGxvYyAtIHNwYWNlIGFsbG9jYXRpb24gZGVjaXNpb25zIGZv
ciBsYXp5IHZhY3V1bQorICoKKyAqIFNlZSB0aGUgY29tbWVudHMgYXQgdGhlIGhlYWQgb2YgdGhp
cyBmaWxlIGZvciByYXRpb25hbGUuCisgKi8KK3N0YXRpYyB2b2lkCitsYXp5X3NwYWNlX2FsbG9j
KExWUmVsU3RhdHMgKnZhY3JlbHN0YXRzLCBCbG9ja051bWJlciByZWxibG9ja3MpCit7CisJTFZE
ZWFkVHVwbGVzICpkZWFkX3R1cGxlcyA9IE5VTEw7CisJbG9uZwkJbWF4dHVwbGVzOworCisJbWF4
dHVwbGVzID0gY29tcHV0ZV9tYXhfZGVhZF90dXBsZXMocmVsYmxvY2tzLCB2YWNyZWxzdGF0cy0+
dXNlaW5kZXgpOworCisJZGVhZF90dXBsZXMgPSAoTFZEZWFkVHVwbGVzICopIHBhbGxvYyhTaXpl
T2ZMVkRlYWRUdXBsZXMobWF4dHVwbGVzKSk7CisJZGVhZF90dXBsZXMtPm51bV90dXBsZXMgPSAw
OworCWRlYWRfdHVwbGVzLT5tYXhfdHVwbGVzID0gKGludCkgbWF4dHVwbGVzOworCisJdmFjcmVs
c3RhdHMtPmRlYWRfdHVwbGVzID0gZGVhZF90dXBsZXM7CiB9CiAKIC8qCiAgKiBsYXp5X3JlY29y
ZF9kZWFkX3R1cGxlIC0gcmVtZW1iZXIgb25lIGRlbGV0YWJsZSB0dXBsZQogICovCiBzdGF0aWMg
dm9pZAotbGF6eV9yZWNvcmRfZGVhZF90dXBsZShMVlJlbFN0YXRzICp2YWNyZWxzdGF0cywKLQkJ
CQkJICAgSXRlbVBvaW50ZXIgaXRlbXB0cikKK2xhenlfcmVjb3JkX2RlYWRfdHVwbGUoTFZEZWFk
VHVwbGVzICpkZWFkX3R1cGxlcywgSXRlbVBvaW50ZXIgaXRlbXB0cikKIHsKIAkvKgogCSAqIFRo
ZSBhcnJheSBzaG91bGRuJ3Qgb3ZlcmZsb3cgdW5kZXIgbm9ybWFsIGJlaGF2aW9yLCBidXQgcGVy
aGFwcyBpdAogCSAqIGNvdWxkIGlmIHdlIGFyZSBnaXZlbiBhIHJlYWxseSBzbWFsbCBtYWludGVu
YW5jZV93b3JrX21lbS4gSW4gdGhhdAogCSAqIGNhc2UsIGp1c3QgZm9yZ2V0IHRoZSBsYXN0IGZl
dyB0dXBsZXMgKHdlJ2xsIGdldCAnZW0gbmV4dCB0aW1lKS4KIAkgKi8KLQlpZiAodmFjcmVsc3Rh
dHMtPm51bV9kZWFkX3R1cGxlcyA8IHZhY3JlbHN0YXRzLT5tYXhfZGVhZF90dXBsZXMpCisJaWYg
KGRlYWRfdHVwbGVzLT5udW1fdHVwbGVzIDwgZGVhZF90dXBsZXMtPm1heF90dXBsZXMpCiAJewot
CQl2YWNyZWxzdGF0cy0+ZGVhZF90dXBsZXNbdmFjcmVsc3RhdHMtPm51bV9kZWFkX3R1cGxlc10g
PSAqaXRlbXB0cjsKLQkJdmFjcmVsc3RhdHMtPm51bV9kZWFkX3R1cGxlcysrOworCQlkZWFkX3R1
cGxlcy0+aXRlbXB0cnNbZGVhZF90dXBsZXMtPm51bV90dXBsZXNdID0gKml0ZW1wdHI7CisJCWRl
YWRfdHVwbGVzLT5udW1fdHVwbGVzKys7CiAJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0o
UFJPR1JFU1NfVkFDVVVNX05VTV9ERUFEX1RVUExFUywKLQkJCQkJCQkJCSB2YWNyZWxzdGF0cy0+
bnVtX2RlYWRfdHVwbGVzKTsKKwkJCQkJCQkJCSBkZWFkX3R1cGxlcy0+bnVtX3R1cGxlcyk7CiAJ
fQogfQogCkBAIC0yMTg5LDEyICsyNzgyLDEyIEBAIGxhenlfcmVjb3JkX2RlYWRfdHVwbGUoTFZS
ZWxTdGF0cyAqdmFjcmVsc3RhdHMsCiBzdGF0aWMgYm9vbAogbGF6eV90aWRfcmVhcGVkKEl0ZW1Q
b2ludGVyIGl0ZW1wdHIsIHZvaWQgKnN0YXRlKQogewotCUxWUmVsU3RhdHMgKnZhY3JlbHN0YXRz
ID0gKExWUmVsU3RhdHMgKikgc3RhdGU7CisJTFZEZWFkVHVwbGVzICpkZWFkX3R1cGxlcyA9IChM
VkRlYWRUdXBsZXMgKikgc3RhdGU7CiAJSXRlbVBvaW50ZXIgcmVzOwogCiAJcmVzID0gKEl0ZW1Q
b2ludGVyKSBic2VhcmNoKCh2b2lkICopIGl0ZW1wdHIsCi0JCQkJCQkJCSh2b2lkICopIHZhY3Jl
bHN0YXRzLT5kZWFkX3R1cGxlcywKLQkJCQkJCQkJdmFjcmVsc3RhdHMtPm51bV9kZWFkX3R1cGxl
cywKKwkJCQkJCQkJKHZvaWQgKikgZGVhZF90dXBsZXMtPml0ZW1wdHJzLAorCQkJCQkJCQlkZWFk
X3R1cGxlcy0+bnVtX3R1cGxlcywKIAkJCQkJCQkJc2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSksCiAJ
CQkJCQkJCXZhY19jbXBfaXRlbXB0cik7CiAKQEAgLTIzNDIsMyArMjkzNSw0NDkgQEAgaGVhcF9w
YWdlX2lzX2FsbF92aXNpYmxlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwKIAogCXJldHVybiBh
bGxfdmlzaWJsZTsKIH0KKworLyoKKyAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBwYXJhbGxlbCB3
b3JrZXIgcHJvY2Vzc2VzIHRvIHJlcXVlc3QuICBCb3RoIGluZGV4CisgKiB2YWN1dW0gYW5kIGlu
ZGV4IGNsZWFudXAgY2FuIGJlIGV4ZWN1dGVkIHdpdGggcGFyYWxsZWwgd29ya2Vycy4gIFRoZQor
ICogcmVsYXRpb24gc2l6ZSBvZiB0aGUgdGFibGUgZG9uJ3QgYWZmZWN0IHRoZSBwYXJhbGxlbCBk
ZWdyZWUgZm9yIG5vdy4KKyAqCisgKiBucmVxdWVzdGVkIGlzIHRoZSBudW1iZXIgb2YgcGFyYWxs
ZWwgd29ya2VycyB0aGF0IHVzZXIgcmVxdWVzdGVkLiAgSWYKKyAqIG5yZXF1ZXN0ZWQgaXMgMCwg
d2UgY29tcHV0ZSB0aGUgcGFyYWxsZWwgZGVncmVlIGJhc2VkIG9uIG5pbmRleGVzLCB0aGF0IGlz
CisgKiB0aGUgbnVtYmVyIG9mIGluZGV4ZXMgdGhhdCBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHZh
Y3V1bWluZy4gIFRoaXMgZnVuY3Rpb24KKyAqIGFsc28gc2V0cyBjYW5fcGFyYWxsZWxfdmFjdXVt
IHRvIHJlbWVtYmVyIGluZGV4ZXMgdGhhdCBwYXJ0aWNpcGF0ZSBpbgorICogcGFyYWxsZWwgaW5k
ZXggdmFjdXVtLgorICovCitzdGF0aWMgaW50Citjb21wdXRlX3BhcmFsbGVsX3ZhY3V1bV93b3Jr
ZXJzKFJlbGF0aW9uICpJcmVsLCBpbnQgbmluZGV4ZXMsIGludCBucmVxdWVzdGVkLAorCQkJCQkJ
CQlib29sICpjYW5fcGFyYWxsZWxfdmFjdXVtKQoreworCWludAkJCW5pbmRleGVzX3BhcmFsbGVs
ID0gMDsKKwlpbnQJCQluaW5kZXhlc19wYXJhbGxlbF9idWxrZGVsID0gMDsKKwlpbnQJCQluaW5k
ZXhlc19wYXJhbGxlbF9jbGVhbnVwID0gMDsKKwlpbnQJCQlwYXJhbGxlbF93b3JrZXJzOworCWlu
dAkJCWk7CisKKwkvKgorCSAqIFdlIGRvbid0IGFsbG93IHRvIHBlcmZvcm0gcGFyYWxsZWwgb3Bl
cmF0aW9uIGluIHN0YW5kYWxvbmUgYmFja2VuZCBvcgorCSAqIHdoZW4gcGFyYWxsZWxpc20gaXMg
ZGlzYWJsZWQuCisJICovCisJaWYgKCFJc1VuZGVyUG9zdG1hc3RlciB8fCBtYXhfcGFyYWxsZWxf
bWFpbnRlbmFuY2Vfd29ya2VycyA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQ29tcHV0
ZSB0aGUgbnVtYmVyIG9mIGluZGV4ZXMgdGhhdCBjYW4gcGFydGljaXBhdGUgaW4gcGFyYWxsZWwg
aW5kZXgKKwkgKiB2YWN1dW1pbmcuCisJICovCisJZm9yIChpID0gMDsgaSA8IG5pbmRleGVzOyBp
KyspCisJeworCQl1aW50OAkJdmFjb3B0aW9ucyA9IElyZWxbaV0tPnJkX2luZGFtLT5hbXBhcmFs
bGVsdmFjdXVtb3B0aW9uczsKKworCQlpZiAodmFjb3B0aW9ucyA9PSBWQUNVVU1fT1BUSU9OX05P
X1BBUkFMTEVMIHx8CisJCQlSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKElyZWxbaV0pIDwgbWlu
X3BhcmFsbGVsX2luZGV4X3NjYW5fc2l6ZSkKKwkJCWNvbnRpbnVlOworCisJCWNhbl9wYXJhbGxl
bF92YWN1dW1baV0gPSB0cnVlOworCisJCWlmICgodmFjb3B0aW9ucyAmIFZBQ1VVTV9PUFRJT05f
UEFSQUxMRUxfQlVMS0RFTCkgIT0gMCkKKwkJCW5pbmRleGVzX3BhcmFsbGVsX2J1bGtkZWwrKzsK
KwkJaWYgKCgodmFjb3B0aW9ucyAmIFZBQ1VVTV9PUFRJT05fUEFSQUxMRUxfQ0xFQU5VUCkgIT0g
MCkgfHwKKwkJCSgodmFjb3B0aW9ucyAmIFZBQ1VVTV9PUFRJT05fUEFSQUxMRUxfQ09ORF9DTEVB
TlVQKSAhPSAwKSkKKwkJCW5pbmRleGVzX3BhcmFsbGVsX2NsZWFudXArKzsKKwl9CisKKwluaW5k
ZXhlc19wYXJhbGxlbCA9IE1heChuaW5kZXhlc19wYXJhbGxlbF9idWxrZGVsLAorCQkJCQkJCW5p
bmRleGVzX3BhcmFsbGVsX2NsZWFudXApOworCisJLyogTm8gaW5kZXggc3VwcG9ydHMgcGFyYWxs
ZWwgaW5kZXggdmFjdXVtaW5nICovCisJaWYgKG5pbmRleGVzX3BhcmFsbGVsID09IDApCisJCXJl
dHVybiAwOworCisJLyogVGhlIGxlYWRlciBwcm9jZXNzIHRha2VzIG9uZSBpbmRleCAqLworCW5p
bmRleGVzX3BhcmFsbGVsLS07CisKKwkvKiBDb21wdXRlIHRoZSBwYXJhbGxlbCBkZWdyZWUgKi8K
KwlwYXJhbGxlbF93b3JrZXJzID0gKG5yZXF1ZXN0ZWQgPiAwKSA/CisJCU1pbihucmVxdWVzdGVk
LCBuaW5kZXhlc19wYXJhbGxlbCkgOiBuaW5kZXhlc19wYXJhbGxlbDsKKworCS8qIENhcCBieSBt
YXhfcGFyYWxsZWxfbWFpbnRlbmFuY2Vfd29ya2VycyAqLworCXBhcmFsbGVsX3dvcmtlcnMgPSBN
aW4ocGFyYWxsZWxfd29ya2VycywgbWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dvcmtlcnMpOwor
CisJcmV0dXJuIHBhcmFsbGVsX3dvcmtlcnM7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHZhcmlh
YmxlcyBmb3Igc2hhcmVkIGluZGV4IHN0YXRpc3RpY3MsIHNldCBOVUxMIGJpdG1hcCBhbmQgdGhl
CisgKiBzaXplIG9mIHN0YXRzIGZvciBlYWNoIGluZGV4LgorICovCitzdGF0aWMgdm9pZAorcHJl
cGFyZV9pbmRleF9zdGF0aXN0aWNzKExWU2hhcmVkICpsdnNoYXJlZCwgYm9vbCAqY2FuX3BhcmFs
bGVsX3ZhY3V1bSwKKwkJCQkJCSBpbnQgbmluZGV4ZXMpCit7CisJaW50CQkJaTsKKworCS8qIEN1
cnJlbnRseSwgd2UgZG9uJ3Qgc3VwcG9ydCBwYXJhbGxlbCB2YWN1dW0gZm9yIGF1dG92YWN1dW0g
Ki8KKwlBc3NlcnQoIUlzQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3MoKSk7CisKKwkvKiBTZXQgTlVM
TCBmb3IgYWxsIGluZGV4ZXMgKi8KKwltZW1zZXQobHZzaGFyZWQtPmJpdG1hcCwgMHgwMCwgQklU
TUFQTEVOKG5pbmRleGVzKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmluZGV4ZXM7IGkrKykKKwl7
CisJCWlmICghY2FuX3BhcmFsbGVsX3ZhY3V1bVtpXSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNl
dCBOT1QgTlVMTCBhcyB0aGlzIGluZGV4IGRvIHN1cHBvcnQgcGFyYWxsZWxpc20gKi8KKwkJbHZz
aGFyZWQtPmJpdG1hcFtpID4+IDNdIHw9IDEgPDwgKGkgJiAweDA3KTsKKwl9Cit9CisKKy8qCisg
KiBVcGRhdGUgaW5kZXggc3RhdGlzdGljcyBpbiBwZ19jbGFzcyBpZiB0aGUgc3RhdGlzdGljcyBp
cyBhY2N1cmF0ZS4KKyAqLworc3RhdGljIHZvaWQKK3VwZGF0ZV9pbmRleF9zdGF0aXN0aWNzKFJl
bGF0aW9uICpJcmVsLCBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKipzdGF0cywKKwkJCQkJCWludCBu
aW5kZXhlcykKK3sKKwlpbnQJCQlpOworCisJQXNzZXJ0KCFJc0luUGFyYWxsZWxNb2RlKCkpOwor
CisJZm9yIChpID0gMDsgaSA8IG5pbmRleGVzOyBpKyspCisJeworCQlpZiAoc3RhdHNbaV0gPT0g
TlVMTCB8fCBzdGF0c1tpXS0+ZXN0aW1hdGVkX2NvdW50KQorCQkJY29udGludWU7CisKKwkJLyog
VXBkYXRlIGluZGV4IHN0YXRpc3RpY3MgKi8KKwkJdmFjX3VwZGF0ZV9yZWxzdGF0cyhJcmVsW2ld
LAorCQkJCQkJCXN0YXRzW2ldLT5udW1fcGFnZXMsCisJCQkJCQkJc3RhdHNbaV0tPm51bV9pbmRl
eF90dXBsZXMsCisJCQkJCQkJMCwKKwkJCQkJCQlmYWxzZSwKKwkJCQkJCQlJbnZhbGlkVHJhbnNh
Y3Rpb25JZCwKKwkJCQkJCQlJbnZhbGlkTXVsdGlYYWN0SWQsCisJCQkJCQkJZmFsc2UpOworCQlw
ZnJlZShzdGF0c1tpXSk7CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBh
bmQgcmV0dXJucyBwYXJhbGxlbCB2YWN1dW0gc3RhdGUgaWYgd2UgY2FuIGxhdW5jaAorICogZXZl
biBvbmUgd29ya2VyLiAgVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSB0byBjcmVhdGUgYSBw
YXJhbGxlbAorICogY29udGV4dCwgZW50ZXIgcGFyYWxsZWwgbW9kZSwgYW5kIHRoZW4gaW5pdGlh
bGl6ZSB0aGUgRFNNIHNlZ21lbnQuCisgKi8KK3N0YXRpYyBMVlBhcmFsbGVsU3RhdGUgKgorYmVn
aW5fcGFyYWxsZWxfdmFjdXVtKE9pZCByZWxpZCwgUmVsYXRpb24gKklyZWwsIExWUmVsU3RhdHMg
KnZhY3JlbHN0YXRzLAorCQkJCQkgIEJsb2NrTnVtYmVyIG5ibG9ja3MsIGludCBuaW5kZXhlcywg
aW50IG5yZXF1ZXN0ZWQpCit7CisJTFZQYXJhbGxlbFN0YXRlICpscHMgPSBOVUxMOworCVBhcmFs
bGVsQ29udGV4dCAqcGN4dDsKKwlMVlNoYXJlZCAgICpzaGFyZWQ7CisJTFZEZWFkVHVwbGVzICpk
ZWFkX3R1cGxlczsKKwlib29sCSAgICpjYW5fcGFyYWxsZWxfdmFjdXVtOworCWxvbmcJCW1heHR1
cGxlczsKKwljaGFyCSAgICpzaGFyZWRxdWVyeTsKKwlTaXplCQllc3Rfc2hhcmVkOworCVNpemUJ
CWVzdF9kZWFkdHVwbGVzOworCWludAkJCW5pbmRleGVzX213bSA9IDA7CisJaW50CQkJcGFyYWxs
ZWxfd29ya2VycyA9IDA7CisJaW50CQkJcXVlcnlsZW47CisJaW50CQkJaTsKKworCS8qCisJICog
QSBwYXJhbGxlbCB2YWN1dW0gbXVzdCBiZSByZXF1ZXN0ZWQgYW5kIHRoZXJlIG11c3QgYmUgaW5k
ZXhlcyBvbiB0aGUKKwkgKiByZWxhdGlvbgorCSAqLworCUFzc2VydChucmVxdWVzdGVkID49IDAp
OworCUFzc2VydChuaW5kZXhlcyA+IDApOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSBudW1iZXIg
b2YgcGFyYWxsZWwgdmFjdXVtIHdvcmtlcnMgdG8gbGF1bmNoCisJICovCisJY2FuX3BhcmFsbGVs
X3ZhY3V1bSA9IChib29sICopIHBhbGxvYzAoc2l6ZW9mKGJvb2wpICogbmluZGV4ZXMpOworCXBh
cmFsbGVsX3dvcmtlcnMgPSBjb21wdXRlX3BhcmFsbGVsX3ZhY3V1bV93b3JrZXJzKElyZWwsIG5p
bmRleGVzLAorCQkJCQkJCQkJCQkJCSAgIG5yZXF1ZXN0ZWQsCisJCQkJCQkJCQkJCQkJICAgY2Fu
X3BhcmFsbGVsX3ZhY3V1bSk7CisKKwkvKiBDYW4ndCBwZXJmb3JtIHZhY3V1bSBpbiBwYXJhbGxl
bCAqLworCWlmIChwYXJhbGxlbF93b3JrZXJzIDw9IDApCisJeworCQlwZnJlZShjYW5fcGFyYWxs
ZWxfdmFjdXVtKTsKKwkJcmV0dXJuIGxwczsKKwl9CisKKwlscHMgPSAoTFZQYXJhbGxlbFN0YXRl
ICopIHBhbGxvYzAoc2l6ZW9mKExWUGFyYWxsZWxTdGF0ZSkpOworCisJRW50ZXJQYXJhbGxlbE1v
ZGUoKTsKKwlwY3h0ID0gQ3JlYXRlUGFyYWxsZWxDb250ZXh0KCJwb3N0Z3JlcyIsICJwYXJhbGxl
bF92YWN1dW1fbWFpbiIsCisJCQkJCQkJCSBwYXJhbGxlbF93b3JrZXJzKTsKKwlBc3NlcnQocGN4
dC0+bndvcmtlcnMgPiAwKTsKKwlscHMtPnBjeHQgPSBwY3h0OworCisJLyogRXN0aW1hdGUgc2l6
ZSBmb3Igc2hhcmVkIGluZm9ybWF0aW9uIC0tIFBBUkFMTEVMX1ZBQ1VVTV9LRVlfU0hBUkVEICov
CisJZXN0X3NoYXJlZCA9IE1BWEFMSUdOKGFkZF9zaXplKFNpemVPZkxWU2hhcmVkLCBCSVRNQVBM
RU4obmluZGV4ZXMpKSk7CisJZm9yIChpID0gMDsgaSA8IG5pbmRleGVzOyBpKyspCisJeworCQl1
aW50OAkJdmFjb3B0aW9ucyA9IElyZWxbaV0tPnJkX2luZGFtLT5hbXBhcmFsbGVsdmFjdXVtb3B0
aW9uczsKKworCQkvKgorCQkgKiBDbGVhbnVwIG9wdGlvbiBzaG91bGQgYmUgZWl0aGVyIGRpc2Fi
bGVkLCBhbHdheXMgcGVyZm9ybWluZyBpbgorCQkgKiBwYXJhbGxlbCBvciBjb25kaXRpb25hbGx5
IHBlcmZvcm1pbmcgaW4gcGFyYWxsZWwuCisJCSAqLworCQlBc3NlcnQoKCh2YWNvcHRpb25zICYg
VkFDVVVNX09QVElPTl9QQVJBTExFTF9DTEVBTlVQKSA9PSAwKSB8fAorCQkJICAgKCh2YWNvcHRp
b25zICYgVkFDVVVNX09QVElPTl9QQVJBTExFTF9DT05EX0NMRUFOVVApID09IDApKTsKKwkJQXNz
ZXJ0KHZhY29wdGlvbnMgPD0gVkFDVVVNX09QVElPTl9NQVhfVkFMSURfVkFMVUUpOworCisJCS8q
IFNraXAgaW5kZXhlcyB0aGF0IGRvbid0IHBhcnRpY2lwYXRlIGluIHBhcmFsbGVsIGluZGV4IHZh
Y3V1bSAqLworCQlpZiAoIWNhbl9wYXJhbGxlbF92YWN1dW1baV0pCisJCQljb250aW51ZTsKKwor
CQlpZiAoSXJlbFtpXS0+cmRfaW5kYW0tPmFtdXNlbWFpbnRlbmFuY2V3b3JrbWVtKQorCQkJbmlu
ZGV4ZXNfbXdtKys7CisKKwkJZXN0X3NoYXJlZCA9IGFkZF9zaXplKGVzdF9zaGFyZWQsIHNpemVv
ZihMVlNoYXJlZEluZFN0YXRzKSk7CisKKwkJLyoKKwkJICogUmVtZW1iZXIgdGhlIG51bWJlciBv
ZiBpbmRleGVzIHRoYXQgc3VwcG9ydCBwYXJhbGxlbCBvcGVyYXRpb24gZm9yCisJCSAqIGVhY2gg
cGhhc2UuCisJCSAqLworCQlpZiAoKHZhY29wdGlvbnMgJiBWQUNVVU1fT1BUSU9OX1BBUkFMTEVM
X0JVTEtERUwpICE9IDApCisJCQlscHMtPm5pbmRleGVzX3BhcmFsbGVsX2J1bGtkZWwrKzsKKwkJ
aWYgKCh2YWNvcHRpb25zICYgVkFDVVVNX09QVElPTl9QQVJBTExFTF9DTEVBTlVQKSAhPSAwKQor
CQkJbHBzLT5uaW5kZXhlc19wYXJhbGxlbF9jbGVhbnVwKys7CisJCWlmICgodmFjb3B0aW9ucyAm
IFZBQ1VVTV9PUFRJT05fUEFSQUxMRUxfQ09ORF9DTEVBTlVQKSAhPSAwKQorCQkJbHBzLT5uaW5k
ZXhlc19wYXJhbGxlbF9jb25kY2xlYW51cCsrOworCX0KKwlzaG1fdG9jX2VzdGltYXRlX2NodW5r
KCZwY3h0LT5lc3RpbWF0b3IsIGVzdF9zaGFyZWQpOworCXNobV90b2NfZXN0aW1hdGVfa2V5cygm
cGN4dC0+ZXN0aW1hdG9yLCAxKTsKKworCS8qIEVzdGltYXRlIHNpemUgZm9yIGRlYWQgdHVwbGVz
IC0tIFBBUkFMTEVMX1ZBQ1VVTV9LRVlfREVBRF9UVVBMRVMgKi8KKwltYXh0dXBsZXMgPSBjb21w
dXRlX21heF9kZWFkX3R1cGxlcyhuYmxvY2tzLCB0cnVlKTsKKwllc3RfZGVhZHR1cGxlcyA9IE1B
WEFMSUdOKFNpemVPZkxWRGVhZFR1cGxlcyhtYXh0dXBsZXMpKTsKKwlzaG1fdG9jX2VzdGltYXRl
X2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIGVzdF9kZWFkdHVwbGVzKTsKKwlzaG1fdG9jX2VzdGlt
YXRlX2tleXMoJnBjeHQtPmVzdGltYXRvciwgMSk7CisKKwkvKiBGaW5hbGx5LCBlc3RpbWF0ZSBQ
QVJBTExFTF9WQUNVVU1fS0VZX1FVRVJZX1RFWFQgc3BhY2UgKi8KKwlxdWVyeWxlbiA9IHN0cmxl
bihkZWJ1Z19xdWVyeV9zdHJpbmcpOworCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJnBjeHQtPmVz
dGltYXRvciwgcXVlcnlsZW4gKyAxKTsKKwlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQtPmVz
dGltYXRvciwgMSk7CisKKwlJbml0aWFsaXplUGFyYWxsZWxEU00ocGN4dCk7CisKKwkvKiBQcmVw
YXJlIHNoYXJlZCBpbmZvcm1hdGlvbiAqLworCXNoYXJlZCA9IChMVlNoYXJlZCAqKSBzaG1fdG9j
X2FsbG9jYXRlKHBjeHQtPnRvYywgZXN0X3NoYXJlZCk7CisJTWVtU2V0KHNoYXJlZCwgMCwgZXN0
X3NoYXJlZCk7CisJc2hhcmVkLT5yZWxpZCA9IHJlbGlkOworCXNoYXJlZC0+ZWxldmVsID0gZWxl
dmVsOworCXNoYXJlZC0+bWFpbnRlbmFuY2Vfd29ya19tZW1fd29ya2VyID0KKwkJKG5pbmRleGVz
X213bSA+IDApID8KKwkJbWFpbnRlbmFuY2Vfd29ya19tZW0gLyBNaW4ocGFyYWxsZWxfd29ya2Vy
cywgbmluZGV4ZXNfbXdtKSA6CisJCW1haW50ZW5hbmNlX3dvcmtfbWVtOworCisJLyoKKwkgKiBX
ZSBuZWVkIHRvIGNhcmUgYWJvdXQgYWxpZ25tZW50IGJlY2F1c2Ugd2UgZXN0aW1hdGUgdGhlIHNo
YXJlZCBtZW1vcnkKKwkgKiBpbiB0aGF0IHdheS4KKwkgKi8KKwlzaGFyZWQtPm9mZnNldCA9IE1B
WEFMSUdOKGFkZF9zaXplKFNpemVPZkxWU2hhcmVkLCBCSVRNQVBMRU4obmluZGV4ZXMpKSk7CisJ
cHJlcGFyZV9pbmRleF9zdGF0aXN0aWNzKHNoYXJlZCwgY2FuX3BhcmFsbGVsX3ZhY3V1bSwgbmlu
ZGV4ZXMpOworCXBnX2F0b21pY19pbml0X3UzMigmKHNoYXJlZC0+aWR4KSwgMCk7CisJcGdfYXRv
bWljX2luaXRfdTMyKCYoc2hhcmVkLT5jb3N0X2JhbGFuY2UpLCAwKTsKKwlwZ19hdG9taWNfaW5p
dF91MzIoJihzaGFyZWQtPmFjdGl2ZV9ud29ya2VycyksIDApOworCisJc2htX3RvY19pbnNlcnQo
cGN4dC0+dG9jLCBQQVJBTExFTF9WQUNVVU1fS0VZX1NIQVJFRCwgc2hhcmVkKTsKKwlscHMtPmx2
c2hhcmVkID0gc2hhcmVkOworCisJLyogUHJlcGFyZSB0aGUgZGVhZCB0dXBsZSBzcGFjZSAqLwor
CWRlYWRfdHVwbGVzID0gKExWRGVhZFR1cGxlcyAqKSBzaG1fdG9jX2FsbG9jYXRlKHBjeHQtPnRv
YywgZXN0X2RlYWR0dXBsZXMpOworCWRlYWRfdHVwbGVzLT5tYXhfdHVwbGVzID0gbWF4dHVwbGVz
OworCWRlYWRfdHVwbGVzLT5udW1fdHVwbGVzID0gMDsKKwlNZW1TZXQoZGVhZF90dXBsZXMtPml0
ZW1wdHJzLCAwLCBzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSAqIG1heHR1cGxlcyk7CisJc2htX3Rv
Y19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9WQUNVVU1fS0VZX0RFQURfVFVQTEVTLCBkZWFk
X3R1cGxlcyk7CisJdmFjcmVsc3RhdHMtPmRlYWRfdHVwbGVzID0gZGVhZF90dXBsZXM7CisKKwkv
KiBTdG9yZSBxdWVyeSBzdHJpbmcgZm9yIHdvcmtlcnMgKi8KKwlzaGFyZWRxdWVyeSA9IChjaGFy
ICopIHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLCBxdWVyeWxlbiArIDEpOworCW1lbWNweShz
aGFyZWRxdWVyeSwgZGVidWdfcXVlcnlfc3RyaW5nLCBxdWVyeWxlbiArIDEpOworCXNoYXJlZHF1
ZXJ5W3F1ZXJ5bGVuXSA9ICdcMCc7CisJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExF
TF9WQUNVVU1fS0VZX1FVRVJZX1RFWFQsIHNoYXJlZHF1ZXJ5KTsKKworCXBmcmVlKGNhbl9wYXJh
bGxlbF92YWN1dW0pOworCXJldHVybiBscHM7Cit9CisKKy8qCisgKiBEZXN0cm95IHRoZSBwYXJh
bGxlbCBjb250ZXh0LCBhbmQgZW5kIHBhcmFsbGVsIG1vZGUuCisgKgorICogU2luY2Ugd3JpdGVz
IGFyZSBub3QgYWxsb3dlZCBkdXJpbmcgdGhlIHBhcmFsbGVsIG1vZGUsIHNvIHdlIGNvcHkgdGhl
CisgKiB1cGRhdGVkIGluZGV4IHN0YXRpc3RpY3MgZnJvbSBEU00gaW4gbG9jYWwgbWVtb3J5IGFu
ZCB0aGVuIGxhdGVyIHVzZSB0aGF0CisgKiB0byB1cGRhdGUgdGhlIGluZGV4IHN0YXRpc3RpY3Mu
ICBPbmUgbWlnaHQgdGhpbmsgdGhhdCB3ZSBjYW4gZXhpdCBmcm9tCisgKiBwYXJhbGxlbCBtb2Rl
LCB1cGRhdGUgdGhlIGluZGV4IHN0YXRpc3RpY3MgYW5kIHRoZW4gZGVzdHJveSBwYXJhbGxlbAor
ICogY29udGV4dCwgYnV0IHRoYXQgd29uJ3QgYmUgc2FmZSAoc2VlIEV4aXRQYXJhbGxlbE1vZGUp
LgorICovCitzdGF0aWMgdm9pZAorZW5kX3BhcmFsbGVsX3ZhY3V1bShSZWxhdGlvbiAqSXJlbCwg
SW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqc3RhdHMsCisJCQkJCUxWUGFyYWxsZWxTdGF0ZSAqbHBz
LCBpbnQgbmluZGV4ZXMpCit7CisJaW50CQkJaTsKKworCUFzc2VydCghSXNQYXJhbGxlbFdvcmtl
cigpKTsKKworCS8qIENvcHkgdGhlIHVwZGF0ZWQgc3RhdGlzdGljcyAqLworCWZvciAoaSA9IDA7
IGkgPCBuaW5kZXhlczsgaSsrKQorCXsKKwkJTFZTaGFyZWRJbmRTdGF0cyAqaW5kc3RhdHMgPSBn
ZXRfaW5kc3RhdHMobHBzLT5sdnNoYXJlZCwgaSk7CisKKwkJLyoKKwkJICogU2tpcCB1bnVzZWQg
c2xvdC4gIFRoZSBzdGF0aXN0aWNzIG9mIHRoaXMgaW5kZXggYXJlIGFscmVhZHkgc3RvcmVkCisJ
CSAqIGluIGxvY2FsIG1lbW9yeS4KKwkJICovCisJCWlmIChpbmRzdGF0cyA9PSBOVUxMKQorCQkJ
Y29udGludWU7CisKKwkJaWYgKGluZHN0YXRzLT51cGRhdGVkKQorCQl7CisJCQlzdGF0c1tpXSA9
IChJbmRleEJ1bGtEZWxldGVSZXN1bHQgKikgcGFsbG9jMChzaXplb2YoSW5kZXhCdWxrRGVsZXRl
UmVzdWx0KSk7CisJCQltZW1jcHkoc3RhdHNbaV0sICYoaW5kc3RhdHMtPnN0YXRzKSwgc2l6ZW9m
KEluZGV4QnVsa0RlbGV0ZVJlc3VsdCkpOworCQl9CisJCWVsc2UKKwkJCXN0YXRzW2ldID0gTlVM
TDsKKwl9CisKKwlEZXN0cm95UGFyYWxsZWxDb250ZXh0KGxwcy0+cGN4dCk7CisJRXhpdFBhcmFs
bGVsTW9kZSgpOworCisJLyogRGVhY3RpdmF0ZSBwYXJhbGxlbCB2YWN1dW0gKi8KKwlwZnJlZShs
cHMpOworCWxwcyA9IE5VTEw7Cit9CisKKy8qIFJldHVybiB0aGUgTnRoIGluZGV4IHN0YXRpc3Rp
Y3Mgb3IgTlVMTCAqLworc3RhdGljIExWU2hhcmVkSW5kU3RhdHMgKgorZ2V0X2luZHN0YXRzKExW
U2hhcmVkICpsdnNoYXJlZCwgaW50IG4pCit7CisJaW50CQkJaTsKKwljaGFyCSAgICpwOworCisJ
aWYgKEluZFN0YXRzSXNOdWxsKGx2c2hhcmVkLCBuKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwID0g
KGNoYXIgKikgR2V0U2hhcmVkSW5kU3RhdHMobHZzaGFyZWQpOworCWZvciAoaSA9IDA7IGkgPCBu
OyBpKyspCisJeworCQlpZiAoSW5kU3RhdHNJc051bGwobHZzaGFyZWQsIGkpKQorCQkJY29udGlu
dWU7CisKKwkJcCArPSBzaXplb2YoTFZTaGFyZWRJbmRTdGF0cyk7CisJfQorCisJcmV0dXJuIChM
VlNoYXJlZEluZFN0YXRzICopIHA7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUsIGlmIHRoZSBn
aXZlbiBpbmRleCBjYW4ndCBwYXJ0aWNpcGF0ZSBpbiBwYXJhbGxlbCBpbmRleCB2YWN1dW0KKyAq
IG9yIHBhcmFsbGVsIGluZGV4IGNsZWFudXAsIGZhbHNlLCBvdGhlcndpc2UuCisgKi8KK3N0YXRp
YyBib29sCitza2lwX3BhcmFsbGVsX3ZhY3V1bV9pbmRleChSZWxhdGlvbiBpbmRyZWwsIExWU2hh
cmVkICpsdnNoYXJlZCkKK3sKKwl1aW50OAkJdmFjb3B0aW9ucyA9IGluZHJlbC0+cmRfaW5kYW0t
PmFtcGFyYWxsZWx2YWN1dW1vcHRpb25zOworCisJLyogZmlyc3RfdGltZSBtdXN0IGJlIHRydWUg
b25seSBpZiBmb3JfY2xlYW51cCBpcyB0cnVlICovCisJQXNzZXJ0KGx2c2hhcmVkLT5mb3JfY2xl
YW51cCB8fCAhbHZzaGFyZWQtPmZpcnN0X3RpbWUpOworCisJaWYgKGx2c2hhcmVkLT5mb3JfY2xl
YW51cCkKKwl7CisJCS8qIFNraXAsIGlmIHRoZSBpbmRleCBkb2VzIG5vdCBzdXBwb3J0IHBhcmFs
bGVsIGNsZWFudXAgKi8KKwkJaWYgKCgodmFjb3B0aW9ucyAmIFZBQ1VVTV9PUFRJT05fUEFSQUxM
RUxfQ0xFQU5VUCkgPT0gMCkgJiYKKwkJCSgodmFjb3B0aW9ucyAmIFZBQ1VVTV9PUFRJT05fUEFS
QUxMRUxfQ09ORF9DTEVBTlVQKSA9PSAwKSkKKwkJCXJldHVybiB0cnVlOworCisJCS8qCisJCSAq
IFNraXAsIGlmIHRoZSBpbmRleCBzdXBwb3J0cyBwYXJhbGxlbCBjbGVhbnVwIGNvbmRpdGlvbmFs
bHksIGJ1dCB3ZQorCQkgKiBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkIHRoZSBpbmRleCAoZm9yIGJ1
bGtkZWxldGUpLiAgU2VlIHRoZQorCQkgKiBjb21tZW50cyBmb3Igb3B0aW9uIFZBQ1VVTV9PUFRJ
T05fUEFSQUxMRUxfQ09ORF9DTEVBTlVQIHRvIGtub3cKKwkJICogd2hlbiBpbmRleGVzIHN1cHBv
cnQgcGFyYWxsZWwgY2xlYW51cCBjb25kaXRpb25hbGx5LgorCQkgKi8KKwkJaWYgKCFsdnNoYXJl
ZC0+Zmlyc3RfdGltZSAmJgorCQkJKCh2YWNvcHRpb25zICYgVkFDVVVNX09QVElPTl9QQVJBTExF
TF9DT05EX0NMRUFOVVApICE9IDApKQorCQkJcmV0dXJuIHRydWU7CisJfQorCWVsc2UgaWYgKCh2
YWNvcHRpb25zICYgVkFDVVVNX09QVElPTl9QQVJBTExFTF9CVUxLREVMKSA9PSAwKQorCXsKKwkJ
LyogU2tpcCBpZiB0aGUgaW5kZXggZG9lcyBub3Qgc3VwcG9ydCBwYXJhbGxlbCBidWxrIGRlbGV0
aW9uICovCisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAq
IFBlcmZvcm0gd29yayB3aXRoaW4gYSBsYXVuY2hlZCBwYXJhbGxlbCBwcm9jZXNzLgorICoKKyAq
IFNpbmNlIHBhcmFsbGVsIHZhY3V1bSB3b3JrZXJzIHBlcmZvcm0gb25seSBpbmRleCB2YWN1dW0g
b3IgaW5kZXggY2xlYW51cCwKKyAqIHdlIGRvbid0IG5lZWQgdG8gcmVwb3J0IHRoZSBwcm9ncmVz
cyBpbmZvcm1hdGlvbi4KKyAqLwordm9pZAorcGFyYWxsZWxfdmFjdXVtX21haW4oZHNtX3NlZ21l
bnQgKnNlZywgc2htX3RvYyAqdG9jKQoreworCVJlbGF0aW9uCW9uZXJlbDsKKwlSZWxhdGlvbiAg
ICppbmRyZWxzOworCUxWU2hhcmVkICAgKmx2c2hhcmVkOworCUxWRGVhZFR1cGxlcyAqZGVhZF90
dXBsZXM7CisJaW50CQkJbmluZGV4ZXM7CisJY2hhcgkgICAqc2hhcmVkcXVlcnk7CisJSW5kZXhC
dWxrRGVsZXRlUmVzdWx0ICoqc3RhdHM7CisKKwlsdnNoYXJlZCA9IChMVlNoYXJlZCAqKSBzaG1f
dG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX1ZBQ1VVTV9LRVlfU0hBUkVELAorCQkJCQkJCQkJCSAg
IGZhbHNlKTsKKwllbGV2ZWwgPSBsdnNoYXJlZC0+ZWxldmVsOworCisJZXJlcG9ydChERUJVRzEs
CisJCQkoZXJybXNnKCJzdGFydGluZyBwYXJhbGxlbCBsYXp5IHZhY3V1bSB3b3JrZXIgZm9yICVz
IiwKKwkJCQkJbHZzaGFyZWQtPmZvcl9jbGVhbnVwID8gImNsZWFudXAiIDogInZhY3V1bWluZyIp
KSk7CisKKwkvKiBTZXQgZGVidWdfcXVlcnlfc3RyaW5nIGZvciBpbmRpdmlkdWFsIHdvcmtlcnMg
Ki8KKwlzaGFyZWRxdWVyeSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfVkFDVVVNX0tF
WV9RVUVSWV9URVhULCBmYWxzZSk7CisJZGVidWdfcXVlcnlfc3RyaW5nID0gc2hhcmVkcXVlcnk7
CisJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9SVU5OSU5HLCBkZWJ1Z19xdWVyeV9zdHJp
bmcpOworCisJLyoKKwkgKiBPcGVuIHRhYmxlLiAgVGhlIGxvY2sgbW9kZSBpcyB0aGUgc2FtZSBh
cyB0aGUgbGVhZGVyIHByb2Nlc3MuICBJdCdzCisJICogb2theSBiZWNhdXNlIHRoZSBsb2NrIG1v
ZGUgZG9lcyBub3QgY29uZmxpY3QgYW1vbmcgdGhlIHBhcmFsbGVsCisJICogd29ya2Vycy4KKwkg
Ki8KKwlvbmVyZWwgPSB0YWJsZV9vcGVuKGx2c2hhcmVkLT5yZWxpZCwgU2hhcmVVcGRhdGVFeGNs
dXNpdmVMb2NrKTsKKworCS8qCisJICogT3BlbiBhbGwgaW5kZXhlcy4gaW5kcmVscyBhcmUgc29y
dGVkIGluIG9yZGVyIGJ5IE9JRCwgd2hpY2ggc2hvdWxkIGJlCisJICogbWF0Y2hlZCB0byB0aGUg
bGVhZGVyJ3Mgb25lLgorCSAqLworCXZhY19vcGVuX2luZGV4ZXMob25lcmVsLCBSb3dFeGNsdXNp
dmVMb2NrLCAmbmluZGV4ZXMsICZpbmRyZWxzKTsKKwlBc3NlcnQobmluZGV4ZXMgPiAwKTsKKwor
CS8qIFNldCBkZWFkIHR1cGxlIHNwYWNlICovCisJZGVhZF90dXBsZXMgPSAoTFZEZWFkVHVwbGVz
ICopIHNobV90b2NfbG9va3VwKHRvYywKKwkJCQkJCQkJCQkJCSAgUEFSQUxMRUxfVkFDVVVNX0tF
WV9ERUFEX1RVUExFUywKKwkJCQkJCQkJCQkJCSAgZmFsc2UpOworCisJLyogU2V0IGNvc3QtYmFz
ZWQgdmFjdXVtIGRlbGF5ICovCisJVmFjdXVtQ29zdEFjdGl2ZSA9IChWYWN1dW1Db3N0RGVsYXkg
PiAwKTsKKwlWYWN1dW1Db3N0QmFsYW5jZSA9IDA7CisJVmFjdXVtUGFnZUhpdCA9IDA7CisJVmFj
dXVtUGFnZU1pc3MgPSAwOworCVZhY3V1bVBhZ2VEaXJ0eSA9IDA7CisJVmFjdXVtU2hhcmVkQ29z
dEJhbGFuY2UgPSAmKGx2c2hhcmVkLT5jb3N0X2JhbGFuY2UpOworCVZhY3V1bUFjdGl2ZU5Xb3Jr
ZXJzID0gJihsdnNoYXJlZC0+YWN0aXZlX253b3JrZXJzKTsKKworCXN0YXRzID0gKEluZGV4QnVs
a0RlbGV0ZVJlc3VsdCAqKikKKwkJcGFsbG9jMChuaW5kZXhlcyAqIHNpemVvZihJbmRleEJ1bGtE
ZWxldGVSZXN1bHQgKikpOworCisJaWYgKGx2c2hhcmVkLT5tYWludGVuYW5jZV93b3JrX21lbV93
b3JrZXIgPiAwKQorCQltYWludGVuYW5jZV93b3JrX21lbSA9IGx2c2hhcmVkLT5tYWludGVuYW5j
ZV93b3JrX21lbV93b3JrZXI7CisKKwkvKiBQcm9jZXNzIGluZGV4ZXMgdG8gcGVyZm9ybSB2YWN1
dW0vY2xlYW51cCAqLworCXBhcmFsbGVsX3ZhY3V1bV9pbmRleChpbmRyZWxzLCBzdGF0cywgbHZz
aGFyZWQsIGRlYWRfdHVwbGVzLCBuaW5kZXhlcyk7CisKKwl2YWNfY2xvc2VfaW5kZXhlcyhuaW5k
ZXhlcywgaW5kcmVscywgUm93RXhjbHVzaXZlTG9jayk7CisJdGFibGVfY2xvc2Uob25lcmVsLCBT
aGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOworCXBmcmVlKHN0YXRzKTsKK30KZGlmZiAtLWdpdCBh
L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMgYi9zcmMvYmFja2VuZC9hY2Nl
c3MvdHJhbnNhbS9wYXJhbGxlbC5jCmluZGV4IGYzZTIyNTQ5NTQuLmRmMDZlN2QxNzQgMTAwNjQ0
Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMKKysrIGIvc3JjL2Jh
Y2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYwpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5j
bHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKICNpbmNsdWRl
ICJhY2Nlc3MvbmJ0cmVlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVk
ZSAiYWNjZXNzL3Nlc3Npb24uaCIKQEAgLTEzOSw2ICsxNDAsOSBAQCBzdGF0aWMgY29uc3Qgc3Ry
dWN0CiAJfSwKIAl7CiAJCSJfYnRfcGFyYWxsZWxfYnVpbGRfbWFpbiIsIF9idF9wYXJhbGxlbF9i
dWlsZF9tYWluCisJfSwKKwl7CisJCSJwYXJhbGxlbF92YWN1dW1fbWFpbiIsIHBhcmFsbGVsX3Zh
Y3V1bV9tYWluCiAJfQogfTsKIApAQCAtMTc0LDYgKzE3OCw3IEBAIENyZWF0ZVBhcmFsbGVsQ29u
dGV4dChjb25zdCBjaGFyICpsaWJyYXJ5X25hbWUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uX25hbWUs
CiAJcGN4dCA9IHBhbGxvYzAoc2l6ZW9mKFBhcmFsbGVsQ29udGV4dCkpOwogCXBjeHQtPnN1Ymlk
ID0gR2V0Q3VycmVudFN1YlRyYW5zYWN0aW9uSWQoKTsKIAlwY3h0LT5ud29ya2VycyA9IG53b3Jr
ZXJzOworCXBjeHQtPm53b3JrZXJzX3RvX2xhdW5jaCA9IG53b3JrZXJzOwogCXBjeHQtPmxpYnJh
cnlfbmFtZSA9IHBzdHJkdXAobGlicmFyeV9uYW1lKTsKIAlwY3h0LT5mdW5jdGlvbl9uYW1lID0g
cHN0cmR1cChmdW5jdGlvbl9uYW1lKTsKIAlwY3h0LT5lcnJvcl9jb250ZXh0X3N0YWNrID0gZXJy
b3JfY29udGV4dF9zdGFjazsKQEAgLTQ4Niw2ICs0OTEsMjMgQEAgUmVpbml0aWFsaXplUGFyYWxs
ZWxEU00oUGFyYWxsZWxDb250ZXh0ICpwY3h0KQogCX0KIH0KIAorLyoKKyAqIFJlaW5pdGlhbGl6
ZSBwYXJhbGxlbCB3b3JrZXJzIGZvciBhIHBhcmFsbGVsIGNvbnRleHQgc3VjaCB0aGF0IHdlIGNv
dWxkCisgKiBsYXVuY2ggdGhlIGRpZmZlcmVudCBudW1iZXIgb2Ygd29ya2Vycy4gIFRoaXMgaXMg
cmVxdWlyZWQgZm9yIGNhc2VzIHdoZXJlCisgKiB3ZSBuZWVkIHRvIHJldXNlIHRoZSBzYW1lIERT
TSBzZWdtZW50LCBidXQgdGhlIG51bWJlciBvZiB3b3JrZXJzIGNhbgorICogdmFyeSBmcm9tIHJ1
bi10by1ydW4uCisgKi8KK3ZvaWQKK1JlaW5pdGlhbGl6ZVBhcmFsbGVsV29ya2VycyhQYXJhbGxl
bENvbnRleHQgKnBjeHQsIGludCBud29ya2Vyc190b19sYXVuY2gpCit7CisJLyoKKwkgKiBUaGUg
bnVtYmVyIG9mIHdvcmtlcnMgdGhhdCBuZWVkIHRvIGJlIGxhdW5jaGVkIG11c3QgYmUgbGVzcyB0
aGFuIHRoZQorCSAqIG51bWJlciBvZiB3b3JrZXJzIHdpdGggd2hpY2ggdGhlIHBhcmFsbGVsIGNv
bnRleHQgaXMgaW5pdGlhbGl6ZWQuCisJICovCisJQXNzZXJ0KHBjeHQtPm53b3JrZXJzID49IG53
b3JrZXJzX3RvX2xhdW5jaCk7CisJcGN4dC0+bndvcmtlcnNfdG9fbGF1bmNoID0gbndvcmtlcnNf
dG9fbGF1bmNoOworfQorCiAvKgogICogTGF1bmNoIHBhcmFsbGVsIHdvcmtlcnMuCiAgKi8KQEAg
LTQ5OCw3ICs1MjAsNyBAQCBMYXVuY2hQYXJhbGxlbFdvcmtlcnMoUGFyYWxsZWxDb250ZXh0ICpw
Y3h0KQogCWJvb2wJCWFueV9yZWdpc3RyYXRpb25zX2ZhaWxlZCA9IGZhbHNlOwogCiAJLyogU2tp
cCB0aGlzIGlmIHdlIGhhdmUgbm8gd29ya2Vycy4gKi8KLQlpZiAocGN4dC0+bndvcmtlcnMgPT0g
MCkKKwlpZiAocGN4dC0+bndvcmtlcnMgPT0gMCB8fCBwY3h0LT5ud29ya2Vyc190b19sYXVuY2gg
PT0gMCkKIAkJcmV0dXJuOwogCiAJLyogV2UgbmVlZCB0byBiZSBhIGxvY2sgZ3JvdXAgbGVhZGVy
LiAqLwpAQCAtNTMzLDcgKzU1NSw3IEBAIExhdW5jaFBhcmFsbGVsV29ya2VycyhQYXJhbGxlbENv
bnRleHQgKnBjeHQpCiAJICogZmFpbHMuICBJdCB3b3VsZG4ndCBoZWxwIG11Y2ggYW55d2F5LCBi
ZWNhdXNlIHJlZ2lzdGVyaW5nIHRoZSB3b3JrZXIgaW4KIAkgKiBubyB3YXkgZ3VhcmFudGVlcyB0
aGF0IGl0IHdpbGwgc3RhcnQgdXAgYW5kIGluaXRpYWxpemUgc3VjY2Vzc2Z1bGx5LgogCSAqLwot
CWZvciAoaSA9IDA7IGkgPCBwY3h0LT5ud29ya2VyczsgKytpKQorCWZvciAoaSA9IDA7IGkgPCBw
Y3h0LT5ud29ya2Vyc190b19sYXVuY2g7ICsraSkKIAl7CiAJCW1lbWNweSh3b3JrZXIuYmd3X2V4
dHJhLCAmaSwgc2l6ZW9mKGludCkpOwogCQlpZiAoIWFueV9yZWdpc3RyYXRpb25zX2ZhaWxlZCAm
JgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMgYi9zcmMvYmFja2Vu
ZC9jb21tYW5kcy92YWN1dW0uYwppbmRleCBiYjM0ZTI1MmU0Li4xY2Q3N2U3OWQyIDEwMDY0NAot
LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9jb21t
YW5kcy92YWN1dW0uYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5j
cy5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1
bS5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmgiCiAjaW5jbHVk
ZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRl
ICJzdG9yYWdlL3Byb2MuaCIKQEAgLTY4LDYgKzY5LDE0IEBAIHN0YXRpYyBNZW1vcnlDb250ZXh0
IHZhY19jb250ZXh0ID0gTlVMTDsKIHN0YXRpYyBCdWZmZXJBY2Nlc3NTdHJhdGVneSB2YWNfc3Ry
YXRlZ3k7CiAKIAorLyoKKyAqIFZhcmlhYmxlcyBmb3IgY29zdC1iYXNlZCBwYXJhbGxlbCB2YWN1
dW0uICBTZWUgY29tbWVudHMgYXRvcAorICogY29tcHV0ZV9wYXJhbGxlbF9kZWxheSB0byB1bmRl
cnN0YW5kIGhvdyBpdCB3b3Jrcy4KKyAqLworcGdfYXRvbWljX3VpbnQzMiAqVmFjdXVtU2hhcmVk
Q29zdEJhbGFuY2UgPSBOVUxMOworcGdfYXRvbWljX3VpbnQzMiAqVmFjdXVtQWN0aXZlTldvcmtl
cnMgPSBOVUxMOworaW50CQkJVmFjdXVtQ29zdEJhbGFuY2VMb2NhbCA9IDA7CisKIC8qIG5vbi1l
eHBvcnQgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwogc3RhdGljIExpc3QgKmV4cGFuZF92YWN1dW1f
cmVsKFZhY3V1bVJlbGF0aW9uICp2cmVsLCBpbnQgb3B0aW9ucyk7CiBzdGF0aWMgTGlzdCAqZ2V0
X2FsbF92YWN1dW1fcmVscyhpbnQgb3B0aW9ucyk7CkBAIC03Niw2ICs4NSw3IEBAIHN0YXRpYyB2
b2lkIHZhY190cnVuY2F0ZV9jbG9nKFRyYW5zYWN0aW9uSWQgZnJvemVuWElELAogCQkJCQkJCSAg
VHJhbnNhY3Rpb25JZCBsYXN0U2FuZUZyb3plblhpZCwKIAkJCQkJCQkgIE11bHRpWGFjdElkIGxh
c3RTYW5lTWluTXVsdGkpOwogc3RhdGljIGJvb2wgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdl
VmFyICpyZWxhdGlvbiwgVmFjdXVtUGFyYW1zICpwYXJhbXMpOworc3RhdGljIGRvdWJsZSBjb21w
dXRlX3BhcmFsbGVsX2RlbGF5KHZvaWQpOwogc3RhdGljIFZhY09wdFRlcm5hcnlWYWx1ZSBnZXRf
dmFjb3B0X3Rlcm5hcnlfdmFsdWUoRGVmRWxlbSAqZGVmKTsKIAogLyoKQEAgLTk0LDEyICsxMDQs
MTYgQEAgRXhlY1ZhY3V1bShQYXJzZVN0YXRlICpwc3RhdGUsIFZhY3V1bVN0bXQgKnZhY3N0bXQs
IGJvb2wgaXNUb3BMZXZlbCkKIAlib29sCQlmcmVlemUgPSBmYWxzZTsKIAlib29sCQlmdWxsID0g
ZmFsc2U7CiAJYm9vbAkJZGlzYWJsZV9wYWdlX3NraXBwaW5nID0gZmFsc2U7CisJYm9vbAkJcGFy
YWxsZWxfb3B0aW9uID0gZmFsc2U7CiAJTGlzdENlbGwgICAqbGM7CiAKIAkvKiBTZXQgZGVmYXVs
dCB2YWx1ZSAqLwogCXBhcmFtcy5pbmRleF9jbGVhbnVwID0gVkFDT1BUX1RFUk5BUllfREVGQVVM
VDsKIAlwYXJhbXMudHJ1bmNhdGUgPSBWQUNPUFRfVEVSTkFSWV9ERUZBVUxUOwogCisJLyogQnkg
ZGVmYXVsdCBwYXJhbGxlbCB2YWN1dW0gaXMgZW5hYmxlZCAqLworCXBhcmFtcy5ud29ya2VycyA9
IDA7CisKIAkvKiBQYXJzZSBvcHRpb25zIGxpc3QgKi8KIAlmb3JlYWNoKGxjLCB2YWNzdG10LT5v
cHRpb25zKQogCXsKQEAgLTEyOSw2ICsxNDMsMzkgQEAgRXhlY1ZhY3V1bShQYXJzZVN0YXRlICpw
c3RhdGUsIFZhY3V1bVN0bXQgKnZhY3N0bXQsIGJvb2wgaXNUb3BMZXZlbCkKIAkJCXBhcmFtcy5p
bmRleF9jbGVhbnVwID0gZ2V0X3ZhY29wdF90ZXJuYXJ5X3ZhbHVlKG9wdCk7CiAJCWVsc2UgaWYg
KHN0cmNtcChvcHQtPmRlZm5hbWUsICJ0cnVuY2F0ZSIpID09IDApCiAJCQlwYXJhbXMudHJ1bmNh
dGUgPSBnZXRfdmFjb3B0X3Rlcm5hcnlfdmFsdWUob3B0KTsKKwkJZWxzZSBpZiAoc3RyY21wKG9w
dC0+ZGVmbmFtZSwgInBhcmFsbGVsIikgPT0gMCkKKwkJeworCQkJcGFyYWxsZWxfb3B0aW9uID0g
dHJ1ZTsKKwkJCWlmIChvcHQtPmFyZyA9PSBOVUxMKQorCQkJeworCQkJCWVyZXBvcnQoRVJST1Is
CisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkgZXJybXNnKCJw
YXJhbGxlbCBvcHRpb24gcmVxdWlyZXMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kICVkIiwKKwkJCQkJ
CQkJTUFYX1BBUkFMTEVMX1dPUktFUl9MSU1JVCksCisJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9u
KHBzdGF0ZSwgb3B0LT5sb2NhdGlvbikpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpbnQJ
CQlud29ya2VyczsKKworCQkJCW53b3JrZXJzID0gZGVmR2V0SW50MzIob3B0KTsKKwkJCQlpZiAo
bndvcmtlcnMgPCAwIHx8IG53b3JrZXJzID4gTUFYX1BBUkFMTEVMX1dPUktFUl9MSU1JVCkKKwkJ
CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiks
CisJCQkJCQkJIGVycm1zZygicGFyYWxsZWwgdmFjdXVtIGRlZ3JlZSBtdXN0IGJlIGJldHdlZW4g
MCBhbmQgJWQiLAorCQkJCQkJCQkJTUFYX1BBUkFMTEVMX1dPUktFUl9MSU1JVCksCisJCQkJCQkJ
IHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIG9wdC0+bG9jYXRpb24pKSk7CisKKwkJCQkvKgor
CQkJCSAqIERpc2FibGUgcGFyYWxsZWwgdmFjdXVtLCBpZiB1c2VyIGhhcyBzcGVjaWZpZWQgcGFy
YWxsZWwKKwkJCQkgKiBkZWdyZWUgYXMgemVyby4KKwkJCQkgKi8KKwkJCQlpZiAobndvcmtlcnMg
PT0gMCkKKwkJCQkJcGFyYW1zLm53b3JrZXJzID0gLTE7CisJCQkJZWxzZQorCQkJCQlwYXJhbXMu
bndvcmtlcnMgPSBud29ya2VyczsKKwkJCX0KKwkJfQogCQllbHNlCiAJCQllcmVwb3J0KEVSUk9S
LAogCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCkBAIC0xNTIsNiArMTk5LDEx
IEBAIEV4ZWNWYWN1dW0oUGFyc2VTdGF0ZSAqcHN0YXRlLCBWYWN1dW1TdG10ICp2YWNzdG10LCBi
b29sIGlzVG9wTGV2ZWwpCiAJCSAgICEocGFyYW1zLm9wdGlvbnMgJiAoVkFDT1BUX0ZVTEwgfCBW
QUNPUFRfRlJFRVpFKSkpOwogCUFzc2VydCghKHBhcmFtcy5vcHRpb25zICYgVkFDT1BUX1NLSVBU
T0FTVCkpOwogCisJaWYgKChwYXJhbXMub3B0aW9ucyAmIFZBQ09QVF9GVUxMKSAmJiBwYXJhbGxl
bF9vcHRpb24pCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJF
X05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5IGJvdGggRlVMTCBh
bmQgUEFSQUxMRUwgb3B0aW9ucyIpKSk7CisKIAkvKgogCSAqIE1ha2Ugc3VyZSBWQUNPUFRfQU5B
TFlaRSBpcyBzcGVjaWZpZWQgaWYgYW55IGNvbHVtbiBsaXN0cyBhcmUgcHJlc2VudC4KIAkgKi8K
QEAgLTM4Myw2ICs0MzUsNyBAQCB2YWN1dW0oTGlzdCAqcmVsYXRpb25zLCBWYWN1dW1QYXJhbXMg
KnBhcmFtcywKIAkJVmFjdXVtUGFnZUhpdCA9IDA7CiAJCVZhY3V1bVBhZ2VNaXNzID0gMDsKIAkJ
VmFjdXVtUGFnZURpcnR5ID0gMDsKKwkJVmFjdXVtU2hhcmVkQ29zdEJhbGFuY2UgPSBOVUxMOwog
CiAJCS8qCiAJCSAqIExvb3AgdG8gcHJvY2VzcyBlYWNoIHNlbGVjdGVkIHJlbGF0aW9uLgpAQCAt
MTk0MSwxNiArMTk5NCwyNiBAQCB2YWNfY2xvc2VfaW5kZXhlcyhpbnQgbmluZGV4ZXMsIFJlbGF0
aW9uICpJcmVsLCBMT0NLTU9ERSBsb2NrbW9kZSkKIHZvaWQKIHZhY3V1bV9kZWxheV9wb2ludCh2
b2lkKQogeworCWRvdWJsZQkJbXNlYyA9IDA7CisKIAkvKiBBbHdheXMgY2hlY2sgZm9yIGludGVy
cnVwdHMgKi8KIAlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JLyogTmFwIGlmIGFwcHJvcHJp
YXRlICovCi0JaWYgKFZhY3V1bUNvc3RBY3RpdmUgJiYgIUludGVycnVwdFBlbmRpbmcgJiYKLQkJ
VmFjdXVtQ29zdEJhbGFuY2UgPj0gVmFjdXVtQ29zdExpbWl0KQotCXsKLQkJZG91YmxlCQltc2Vj
OworCWlmICghVmFjdXVtQ29zdEFjdGl2ZSB8fCBJbnRlcnJ1cHRQZW5kaW5nKQorCQlyZXR1cm47
CiAKKwkvKgorCSAqIEZvciBwYXJhbGxlbCB2YWN1dW0sIHRoZSBkZWxheSBpcyBjb21wdXRlZCBi
YXNlZCBvbiB0aGUgc2hhcmVkIGNvc3QKKwkgKiBiYWxhbmNlLiAgU2VlIGNvbXB1dGVfcGFyYWxs
ZWxfZGVsYXkuCisJICovCisJaWYgKFZhY3V1bVNoYXJlZENvc3RCYWxhbmNlICE9IE5VTEwpCisJ
CW1zZWMgPSBjb21wdXRlX3BhcmFsbGVsX2RlbGF5KCk7CisJZWxzZSBpZiAoVmFjdXVtQ29zdEJh
bGFuY2UgPj0gVmFjdXVtQ29zdExpbWl0KQogCQltc2VjID0gVmFjdXVtQ29zdERlbGF5ICogVmFj
dXVtQ29zdEJhbGFuY2UgLyBWYWN1dW1Db3N0TGltaXQ7CisKKwkvKiBOYXAgaWYgYXBwcm9wcmlh
dGUgKi8KKwlpZiAobXNlYyA+IDApCisJewogCQlpZiAobXNlYyA+IFZhY3V1bUNvc3REZWxheSAq
IDQpCiAJCQltc2VjID0gVmFjdXVtQ29zdERlbGF5ICogNDsKIApAQCAtMTk2Niw2ICsyMDI5LDY2
IEBAIHZhY3V1bV9kZWxheV9wb2ludCh2b2lkKQogCX0KIH0KIAorLyoKKyAqIENvbXB1dGVzIHRo
ZSB2YWN1dW0gZGVsYXkgZm9yIHBhcmFsbGVsIHdvcmtlcnMuCisgKgorICogVGhlIGJhc2ljIGlk
ZWEgb2YgYSBjb3N0LWJhc2VkIHZhY3V1bSBkZWxheSBmb3IgcGFyYWxsZWwgaW5kZXggdmFjdXVt
aW5nCisgKiBpcyB0byBhbGxvdyBlYWNoIHdvcmtlciB0byBzbGVlcCBwcm9wb3J0aW9uYWwgdG8g
dGhlIHdvcmsgZG9uZSBieSBpdC4gIFdlCisgKiBhY2hpZXZlIHRoaXMgYnkgYWxsb3dpbmcgYWxs
IHBhcmFsbGVsIHZhY3V1bSB3b3JrZXJzIGluY2x1ZGluZyB0aGUgbGVhZGVyCisgKiBwcm9jZXNz
IHRvIGhhdmUgYSBzaGFyZWQgdmlldyBvZiBjb3N0IHJlbGF0ZWQgcGFyYW1ldGVycyAobWFpbmx5
CisgKiBWYWN1dW1Db3N0QmFsYW5jZSkuICBXZSBhbGxvdyBlYWNoIHdvcmtlciB0byB1cGRhdGUg
aXQgYXMgYW5kIHdoZW4gaXQgaGFzCisgKiBpbmN1cnJlZCBhbnkgY29zdCBhbmQgdGhlbiBiYXNl
ZCBvbiB0aGF0IGRlY2lkZSB3aGV0aGVyIGl0IG5lZWRzIHRvIHNsZWVwLgorICogV2UgY29tcHV0
ZSB0aGUgdGltZSB0byBzbGVlcCBmb3IgYSB3b3JrZXIgYmFzZWQgb24gdGhlIGNvc3QgaXQgaGFz
IGluY3VycmVkCisgKiAoVmFjdXVtQ29zdEJhbGFuY2VMb2NhbCkgYW5kIHRoZW4gcmVkdWNlIHRo
ZSBWYWN1dW1TaGFyZWRDb3N0QmFsYW5jZSBieQorICogdGhhdCBhbW91bnQuICBUaGlzIGF2b2lk
cyBsZXR0aW5nIHRoZSB3b3JrZXJzIHNsZWVwIHdobyBoYXZlIGRvbmUgbGVzcyBvcgorICogbm8g
SS9PIGFzIGNvbXBhcmVkIHRvIG90aGVyIHdvcmtlcnMgYW5kIHRoZXJlZm9yZSBjYW4gZW5zdXJl
IHRoYXQgd29ya2VycworICogd2hvIGFyZSBkb2luZyBtb3JlIEkvTyBnb3QgdGhyb3R0bGVkIG1v
cmUuCisgKgorICogV2UgYWxsb3cgYW55IHdvcmtlciB0byBzbGVlcCBvbmx5IGlmIGl0IGhhcyBw
ZXJmb3JtZWQgdGhlIEkvTyBhYm92ZSBhCisgKiBjZXJ0YWluIHRocmVzaG9sZCwgd2hpY2ggaXMg
Y2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGFjdGl2ZQorICogd29ya2VycyAoVmFj
dXVtQWN0aXZlTldvcmtlcnMpLCBhbmQgdGhlIG92ZXJhbGwgY29zdCBiYWxhbmNlIGlzIG1vcmUg
dGhhbgorICogVmFjdXVtQ29zdExpbWl0IHNldCBieSB0aGUgc3lzdGVtLiAgVGhlIHRlc3Rpbmcg
cmV2ZWFscyB0aGF0IHdlIGFjaGlldmUKKyAqIHRoZSByZXF1aXJlZCB0aHJvdHRsaW5nIGlmIHdl
IGFsbG93IGEgd29ya2VyIHRoYXQgaGFzIGRvbmUgbW9yZSB0aGFuIDUwJQorICogb2YgaXRzIHNo
YXJlIG9mIHdvcmsgdG8gc2xlZXAuCisgKi8KK3N0YXRpYyBkb3VibGUKK2NvbXB1dGVfcGFyYWxs
ZWxfZGVsYXkodm9pZCkKK3sKKwlkb3VibGUJCW1zZWMgPSAwOworCXVpbnQzMgkJc2hhcmVkX2Jh
bGFuY2U7CisJaW50CQkJbndvcmtlcnM7CisKKwkvKiBQYXJhbGxlbCB2YWN1dW0gbXVzdCBiZSBh
Y3RpdmUgKi8KKwlBc3NlcnQoVmFjdXVtU2hhcmVkQ29zdEJhbGFuY2UpOworCisJbndvcmtlcnMg
PSBwZ19hdG9taWNfcmVhZF91MzIoVmFjdXVtQWN0aXZlTldvcmtlcnMpOworCisJLyogQXQgbGVh
c3QgY291bnQgaXRzZWxmICovCisJQXNzZXJ0KG53b3JrZXJzID49IDEpOworCisJLyogVXBkYXRl
IHRoZSBzaGFyZWQgY29zdCBiYWxhbmNlIHZhbHVlIGF0b21pY2FsbHkgKi8KKwlzaGFyZWRfYmFs
YW5jZSA9IHBnX2F0b21pY19hZGRfZmV0Y2hfdTMyKFZhY3V1bVNoYXJlZENvc3RCYWxhbmNlLCBW
YWN1dW1Db3N0QmFsYW5jZSk7CisKKwkvKiBDb21wdXRlIHRoZSB0b3RhbCBsb2NhbCBiYWxhbmNl
IGZvciB0aGUgY3VycmVudCB3b3JrZXIgKi8KKwlWYWN1dW1Db3N0QmFsYW5jZUxvY2FsICs9IFZh
Y3V1bUNvc3RCYWxhbmNlOworCisJaWYgKChzaGFyZWRfYmFsYW5jZSA+PSBWYWN1dW1Db3N0TGlt
aXQpICYmCisJCShWYWN1dW1Db3N0QmFsYW5jZUxvY2FsID4gMC41ICogKFZhY3V1bUNvc3RMaW1p
dCAvIG53b3JrZXJzKSkpCisJeworCQkvKiBDb21wdXRlIHNsZWVwIHRpbWUgYmFzZWQgb24gdGhl
IGxvY2FsIGNvc3QgYmFsYW5jZSAqLworCQltc2VjID0gVmFjdXVtQ29zdERlbGF5ICogVmFjdXVt
Q29zdEJhbGFuY2VMb2NhbCAvIFZhY3V1bUNvc3RMaW1pdDsKKwkJcGdfYXRvbWljX3N1Yl9mZXRj
aF91MzIoVmFjdXVtU2hhcmVkQ29zdEJhbGFuY2UsIFZhY3V1bUNvc3RCYWxhbmNlTG9jYWwpOwor
CQlWYWN1dW1Db3N0QmFsYW5jZUxvY2FsID0gMDsKKwl9CisKKwkvKgorCSAqIFJlc2V0IHRoZSBs
b2NhbCBiYWxhbmNlIGFzIHdlIGFjY3VtdWxhdGVkIGl0IGludG8gdGhlIHNoYXJlZCB2YWx1ZS4K
KwkgKi8KKwlWYWN1dW1Db3N0QmFsYW5jZSA9IDA7CisKKwlyZXR1cm4gbXNlYzsKK30KKwogLyoK
ICAqIEEgd3JhcHBlciBmdW5jdGlvbiBvZiBkZWZHZXRCb29sZWFuKCkuCiAgKgpkaWZmIC0tZ2l0
IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9wb3N0
bWFzdGVyL2F1dG92YWN1dW0uYwppbmRleCBmMGU0MGUzNmFmLi42ZDFmMjhjMzI3IDEwMDY0NAot
LS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9zcmMvYmFja2Vu
ZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwpAQCAtMjg4Niw2ICsyODg2LDggQEAgdGFibGVfcmVj
aGVja19hdXRvdmFjKE9pZCByZWxpZCwgSFRBQiAqdGFibGVfdG9hc3RfbWFwLAogCQkJKCF3cmFw
YXJvdW5kID8gVkFDT1BUX1NLSVBfTE9DS0VEIDogMCk7CiAJCXRhYi0+YXRfcGFyYW1zLmluZGV4
X2NsZWFudXAgPSBWQUNPUFRfVEVSTkFSWV9ERUZBVUxUOwogCQl0YWItPmF0X3BhcmFtcy50cnVu
Y2F0ZSA9IFZBQ09QVF9URVJOQVJZX0RFRkFVTFQ7CisJCS8qIEFzIG9mIG5vdywgd2UgZG9uJ3Qg
c3VwcG9ydCBwYXJhbGxlbCB2YWN1dW0gZm9yIGF1dG92YWN1dW0gKi8KKwkJdGFiLT5hdF9wYXJh
bXMubndvcmtlcnMgPSAtMTsKIAkJdGFiLT5hdF9wYXJhbXMuZnJlZXplX21pbl9hZ2UgPSBmcmVl
emVfbWluX2FnZTsKIAkJdGFiLT5hdF9wYXJhbXMuZnJlZXplX3RhYmxlX2FnZSA9IGZyZWV6ZV90
YWJsZV9hZ2U7CiAJCXRhYi0+YXRfcGFyYW1zLm11bHRpeGFjdF9mcmVlemVfbWluX2FnZSA9IG11
bHRpeGFjdF9mcmVlemVfbWluX2FnZTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90YWItY29t
cGxldGUuYyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYwppbmRleCAyZmQ4ODg2NmM5Li45
OTQ1MWZkOTQyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMKKysrIGIv
c3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jCkBAIC0zNTk3LDcgKzM1OTcsNyBAQCBwc3FsX2Nv
bXBsZXRpb24oY29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogCQlpZiAoZW5k
c193aXRoKHByZXZfd2QsICcoJykgfHwgZW5kc193aXRoKHByZXZfd2QsICcsJykpCiAJCQlDT01Q
TEVURV9XSVRIKCJGVUxMIiwgIkZSRUVaRSIsICJBTkFMWVpFIiwgIlZFUkJPU0UiLAogCQkJCQkJ
ICAiRElTQUJMRV9QQUdFX1NLSVBQSU5HIiwgIlNLSVBfTE9DS0VEIiwKLQkJCQkJCSAgIklOREVY
X0NMRUFOVVAiLCAiVFJVTkNBVEUiKTsKKwkJCQkJCSAgIklOREVYX0NMRUFOVVAiLCAiVFJVTkNB
VEUiLCAiUEFSQUxMRUwiKTsKIAkJZWxzZSBpZiAoVGFpbE1hdGNoZXMoIkZVTEx8RlJFRVpFfEFO
QUxZWkV8VkVSQk9TRXxESVNBQkxFX1BBR0VfU0tJUFBJTkd8U0tJUF9MT0NLRUR8SU5ERVhfQ0xF
QU5VUHxUUlVOQ0FURSIpKQogCQkJQ09NUExFVEVfV0lUSCgiT04iLCAiT0ZGIik7CiAJfQpkaWZm
IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz
L2hlYXBhbS5oCmluZGV4IDU4MGI0Y2FlZjcuLjQ3OWYxN2M1NWYgMTAwNjQ0Ci0tLSBhL3NyYy9p
bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgK
QEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlICJub2Rlcy9wcmltbm9kZXMuaCIKICNpbmNsdWRl
ICJzdG9yYWdlL2J1ZnBhZ2UuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xvY2tkZWZzLmgiCisjaW5j
bHVkZSAic3RvcmFnZS9zaG1fdG9jLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc20uaCIKICNpbmNs
dWRlICJ1dGlscy9yZWxjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBzaG90LmgiCiAKQEAg
LTE5Myw2ICsxOTUsNyBAQCBleHRlcm4gU2l6ZSBTeW5jU2NhblNobWVtU2l6ZSh2b2lkKTsKIHN0
cnVjdCBWYWN1dW1QYXJhbXM7CiBleHRlcm4gdm9pZCBoZWFwX3ZhY3V1bV9yZWwoUmVsYXRpb24g
b25lcmVsLAogCQkJCQkJCXN0cnVjdCBWYWN1dW1QYXJhbXMgKnBhcmFtcywgQnVmZmVyQWNjZXNz
U3RyYXRlZ3kgYnN0cmF0ZWd5KTsKK2V4dGVybiB2b2lkIHBhcmFsbGVsX3ZhY3V1bV9tYWluKGRz
bV9zZWdtZW50ICpzZWcsIHNobV90b2MgKnRvYyk7CiAKIC8qIGluIGhlYXAvaGVhcGFtX3Zpc2li
aWxpdHkuYyAqLwogZXh0ZXJuIGJvb2wgSGVhcFR1cGxlU2F0aXNmaWVzVmlzaWJpbGl0eShIZWFw
VHVwbGUgc3R1cCwgU25hcHNob3Qgc25hcHNob3QsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h
Y2Nlc3MvcGFyYWxsZWwuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9wYXJhbGxlbC5oCmluZGV4IDY0
NjcwOGJhNWYuLmZjNmE1NjAzYmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9wYXJh
bGxlbC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9wYXJhbGxlbC5oCkBAIC0zMyw3ICszMyw4
IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQ29udGV4dAogewogCWRsaXN0X25vZGUJbm9kZTsK
IAlTdWJUcmFuc2FjdGlvbklkIHN1YmlkOwotCWludAkJCW53b3JrZXJzOworCWludAkJCW53b3Jr
ZXJzOwkJLyogTWF4aW11bSBudW1iZXIgb2Ygd29ya2VycyB0byBsYXVuY2ggKi8KKwlpbnQJCQlu
d29ya2Vyc190b19sYXVuY2g7IC8qIEFjdHVhbCBudW1iZXIgb2Ygd29ya2VycyB0byBsYXVuY2gg
Ki8KIAlpbnQJCQlud29ya2Vyc19sYXVuY2hlZDsKIAljaGFyCSAgICpsaWJyYXJ5X25hbWU7CiAJ
Y2hhcgkgICAqZnVuY3Rpb25fbmFtZTsKQEAgLTYzLDYgKzY0LDcgQEAgZXh0ZXJuIFBhcmFsbGVs
Q29udGV4dCAqQ3JlYXRlUGFyYWxsZWxDb250ZXh0KGNvbnN0IGNoYXIgKmxpYnJhcnlfbmFtZSwK
IAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICpmdW5jdGlvbl9uYW1lLCBpbnQgbndvcmtlcnMpOwog
ZXh0ZXJuIHZvaWQgSW5pdGlhbGl6ZVBhcmFsbGVsRFNNKFBhcmFsbGVsQ29udGV4dCAqcGN4dCk7
CiBleHRlcm4gdm9pZCBSZWluaXRpYWxpemVQYXJhbGxlbERTTShQYXJhbGxlbENvbnRleHQgKnBj
eHQpOworZXh0ZXJuIHZvaWQgUmVpbml0aWFsaXplUGFyYWxsZWxXb3JrZXJzKFBhcmFsbGVsQ29u
dGV4dCAqcGN4dCwgaW50IG53b3JrZXJzX3RvX2xhdW5jaCk7CiBleHRlcm4gdm9pZCBMYXVuY2hQ
YXJhbGxlbFdvcmtlcnMoUGFyYWxsZWxDb250ZXh0ICpwY3h0KTsKIGV4dGVybiB2b2lkIFdhaXRG
b3JQYXJhbGxlbFdvcmtlcnNUb0F0dGFjaChQYXJhbGxlbENvbnRleHQgKnBjeHQpOwogZXh0ZXJu
IHZvaWQgV2FpdEZvclBhcmFsbGVsV29ya2Vyc1RvRmluaXNoKFBhcmFsbGVsQ29udGV4dCAqcGN4
dCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaCBiL3NyYy9pbmNs
dWRlL2NvbW1hbmRzL3ZhY3V1bS5oCmluZGV4IGIzMzUxYWQ0MDYuLjYyZGQwMWY0MWYgMTAwNjQ0
Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oCisrKyBiL3NyYy9pbmNsdWRlL2Nv
bW1hbmRzL3ZhY3V1bS5oCkBAIC0yMjIsNiArMjIyLDEzIEBAIHR5cGVkZWYgc3RydWN0IFZhY3V1
bVBhcmFtcwogCQkJCQkJCQkJCSAqIGRlZmF1bHQgdmFsdWUgZGVwZW5kcyBvbiByZWxvcHRpb25z
ICovCiAJVmFjT3B0VGVybmFyeVZhbHVlIHRydW5jYXRlOwkvKiBUcnVuY2F0ZSBlbXB0eSBwYWdl
cyBhdCB0aGUgZW5kLAogCQkJCQkJCQkJICogZGVmYXVsdCB2YWx1ZSBkZXBlbmRzIG9uIHJlbG9w
dGlvbnMgKi8KKworCS8qCisJICogVGhlIG51bWJlciBvZiBwYXJhbGxlbCB2YWN1dW0gd29ya2Vy
cy4gIDAgYnkgZGVmYXVsdCB3aGljaCBtZWFucyBjaG9vc2UKKwkgKiBiYXNlZCBvbiB0aGUgbnVt
YmVyIG9mIGluZGV4ZXMuICAtMSBpbmRpY2F0ZXMgYSBwYXJhbGxlbCB2YWN1dW0gaXMKKwkgKiBk
aXNhYmxlZC4KKwkgKi8KKwlpbnQJCQlud29ya2VyczsKIH0gVmFjdXVtUGFyYW1zOwogCiAvKiBH
VUMgcGFyYW1ldGVycyAqLwpAQCAtMjMxLDYgKzIzOCwxMSBAQCBleHRlcm4gaW50CXZhY3V1bV9m
cmVlemVfdGFibGVfYWdlOwogZXh0ZXJuIGludAl2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9taW5f
YWdlOwogZXh0ZXJuIGludAl2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2U7CiAKKy8q
IFZhcmlhYmxlcyBmb3IgY29zdC1iYXNlZCBwYXJhbGxlbCB2YWN1dW0gICovCitleHRlcm4gcGdf
YXRvbWljX3VpbnQzMiAqVmFjdXVtU2hhcmVkQ29zdEJhbGFuY2U7CitleHRlcm4gcGdfYXRvbWlj
X3VpbnQzMiAqVmFjdXVtQWN0aXZlTldvcmtlcnM7CitleHRlcm4gaW50CVZhY3V1bUNvc3RCYWxh
bmNlTG9jYWw7CisKIAogLyogaW4gY29tbWFuZHMvdmFjdXVtLmMgKi8KIGV4dGVybiB2b2lkIEV4
ZWNWYWN1dW0oUGFyc2VTdGF0ZSAqcHN0YXRlLCBWYWN1dW1TdG10ICp2YWNzdG10LCBib29sIGlz
VG9wTGV2ZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC92YWN1dW0u
b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC92YWN1dW0ub3V0CmluZGV4IDk5OTZkODgy
ZDEuLjIyY2NhNzA2ODcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdmFj
dXVtLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3ZhY3V1bS5vdXQKQEAgLTky
LDYgKzkyLDM0IEBAIENPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gImRvX2FuYWx5emUiIHN0YXRlbWVu
dCAxCiBTUUwgZnVuY3Rpb24gIndyYXBfZG9fYW5hbHl6ZSIgc3RhdGVtZW50IDEKIFZBQ1VVTSBG
VUxMIHZhY3RzdDsKIFZBQ1VVTSAoRElTQUJMRV9QQUdFX1NLSVBQSU5HKSB2YWNjbHVzdGVyOwor
LS0gUEFSQUxMRUwgb3B0aW9uCitDUkVBVEUgVEFCTEUgcHZhY3RzdCAoaSBJTlQsIGEgSU5UW10s
IHAgUE9JTlQpIHdpdGggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9mZik7CitJTlNFUlQgSU5UTyBw
dmFjdHN0IFNFTEVDVCBpLCBhcnJheVsxLDIsM10sIHBvaW50KGksIGkrMSkgRlJPTSBnZW5lcmF0
ZV9zZXJpZXMoMSwxMDAwKSBpOworQ1JFQVRFIElOREVYIGJ0cmVlX3B2YWN0c3QgT04gcHZhY3Rz
dCBVU0lORyBidHJlZSAoaSk7CitDUkVBVEUgSU5ERVggaGFzaF9wdmFjdHN0IE9OIHB2YWN0c3Qg
VVNJTkcgaGFzaCAoaSk7CitDUkVBVEUgSU5ERVggYnJpbl9wdmFjdHN0IE9OIHB2YWN0c3QgVVNJ
TkcgYnJpbiAoaSk7CitDUkVBVEUgSU5ERVggZ2luX3B2YWN0c3QgT04gcHZhY3RzdCBVU0lORyBn
aW4gKGEpOworQ1JFQVRFIElOREVYIGdpc3RfcHZhY3RzdCBPTiBwdmFjdHN0IFVTSU5HIGdpc3Qg
KHApOworQ1JFQVRFIElOREVYIHNwZ2lzdF9wdmFjdHN0IE9OIHB2YWN0c3QgVVNJTkcgc3BnaXN0
IChwKTsKKy0tIFZBQ1VVTSBpbnZva2VzIHBhcmFsbGVsIGluZGV4IGNsZWFudXAKK1NFVCBtaW5f
cGFyYWxsZWxfaW5kZXhfc2Nhbl9zaXplIHRvIDA7CitWQUNVVU0gKFBBUkFMTEVMIDIpIHB2YWN0
c3Q7CistLSBWQUNVVU0gaW52b2tlcyBwYXJhbGxlbCBidWxrLWRlbGV0aW9uCitVUERBVEUgcHZh
Y3RzdCBTRVQgaSA9IGkgV0hFUkUgaSA8IDEwMDA7CitWQUNVVU0gKFBBUkFMTEVMIDIpIHB2YWN0
c3Q7CitWQUNVVU0gKFBBUkFMTEVMIC0xKSBwdmFjdHN0OyAtLSBlcnJvcgorRVJST1I6ICBwYXJh
bGxlbCB2YWN1dW0gZGVncmVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMDI0CitMSU5FIDE6IFZB
Q1VVTSAoUEFSQUxMRUwgLTEpIHB2YWN0c3Q7CisgICAgICAgICAgICAgICAgXgorVkFDVVVNIChQ
QVJBTExFTCAyLCBJTkRFWF9DTEVBTlVQIEZBTFNFKSBwdmFjdHN0OworVkFDVVVNIChQQVJBTExF
TCAyLCBGVUxMIFRSVUUpIHB2YWN0c3Q7IC0tIGVycm9yLCBjYW5ub3QgdXNlIGJvdGggUEFSQUxM
RUwgYW5kIEZVTEwKK0VSUk9SOiAgY2Fubm90IHNwZWNpZnkgYm90aCBGVUxMIGFuZCBQQVJBTExF
TCBvcHRpb25zCitDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHRtcCAoYSBpbnQgUFJJTUFSWSBLRVkp
OworQ1JFQVRFIElOREVYIHRtcF9pZHgxIE9OIHRtcCAoYSk7CitWQUNVVU0gKFBBUkFMTEVMIDEp
IHRtcDsgLS0gZGlzYWJsZXMgcGFyYWxsZWwgdmFjdXVtIG9wdGlvbgorV0FSTklORzogIGRpc2Fi
bGluZyBwYXJhbGxlbCBvcHRpb24gb2YgdmFjdXVtIG9uICJ0bXAiIC0tLSBjYW5ub3QgdmFjdXVt
IHRlbXBvcmFyeSB0YWJsZXMgaW4gcGFyYWxsZWwKK1JFU0VUIG1pbl9wYXJhbGxlbF9pbmRleF9z
Y2FuX3NpemU7CitEUk9QIFRBQkxFIHB2YWN0c3Q7CiAtLSBJTkRFWF9DTEVBTlVQIG9wdGlvbgog
Q1JFQVRFIFRBQkxFIG5vX2luZGV4X2NsZWFudXAgKGkgSU5UIFBSSU1BUlkgS0VZLCB0IFRFWFQp
OwogLS0gVXNlIHVuY29tcHJlc3NlZCBkYXRhIHN0b3JlZCBpbiB0b2FzdC4KZGlmZiAtLWdpdCBh
L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3ZhY3V1bS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC92
YWN1dW0uc3FsCmluZGV4IDY5OTg3Zjc1ZTkuLmQ2ODU5YTViYzkgMTAwNjQ0Ci0tLSBhL3NyYy90
ZXN0L3JlZ3Jlc3Mvc3FsL3ZhY3V1bS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdmFj
dXVtLnNxbApAQCAtNzUsNiArNzUsMzMgQEAgVkFDVVVNIEZVTEwgdmFjdHN0OwogCiBWQUNVVU0g
KERJU0FCTEVfUEFHRV9TS0lQUElORykgdmFjY2x1c3RlcjsKIAorLS0gUEFSQUxMRUwgb3B0aW9u
CitDUkVBVEUgVEFCTEUgcHZhY3RzdCAoaSBJTlQsIGEgSU5UW10sIHAgUE9JTlQpIHdpdGggKGF1
dG92YWN1dW1fZW5hYmxlZCA9IG9mZik7CitJTlNFUlQgSU5UTyBwdmFjdHN0IFNFTEVDVCBpLCBh
cnJheVsxLDIsM10sIHBvaW50KGksIGkrMSkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBp
OworQ1JFQVRFIElOREVYIGJ0cmVlX3B2YWN0c3QgT04gcHZhY3RzdCBVU0lORyBidHJlZSAoaSk7
CitDUkVBVEUgSU5ERVggaGFzaF9wdmFjdHN0IE9OIHB2YWN0c3QgVVNJTkcgaGFzaCAoaSk7CitD
UkVBVEUgSU5ERVggYnJpbl9wdmFjdHN0IE9OIHB2YWN0c3QgVVNJTkcgYnJpbiAoaSk7CitDUkVB
VEUgSU5ERVggZ2luX3B2YWN0c3QgT04gcHZhY3RzdCBVU0lORyBnaW4gKGEpOworQ1JFQVRFIElO
REVYIGdpc3RfcHZhY3RzdCBPTiBwdmFjdHN0IFVTSU5HIGdpc3QgKHApOworQ1JFQVRFIElOREVY
IHNwZ2lzdF9wdmFjdHN0IE9OIHB2YWN0c3QgVVNJTkcgc3BnaXN0IChwKTsKKworLS0gVkFDVVVN
IGludm9rZXMgcGFyYWxsZWwgaW5kZXggY2xlYW51cAorU0VUIG1pbl9wYXJhbGxlbF9pbmRleF9z
Y2FuX3NpemUgdG8gMDsKK1ZBQ1VVTSAoUEFSQUxMRUwgMikgcHZhY3RzdDsKKworLS0gVkFDVVVN
IGludm9rZXMgcGFyYWxsZWwgYnVsay1kZWxldGlvbgorVVBEQVRFIHB2YWN0c3QgU0VUIGkgPSBp
IFdIRVJFIGkgPCAxMDAwOworVkFDVVVNIChQQVJBTExFTCAyKSBwdmFjdHN0OworCitWQUNVVU0g
KFBBUkFMTEVMIC0xKSBwdmFjdHN0OyAtLSBlcnJvcgorVkFDVVVNIChQQVJBTExFTCAyLCBJTkRF
WF9DTEVBTlVQIEZBTFNFKSBwdmFjdHN0OworVkFDVVVNIChQQVJBTExFTCAyLCBGVUxMIFRSVUUp
IHB2YWN0c3Q7IC0tIGVycm9yLCBjYW5ub3QgdXNlIGJvdGggUEFSQUxMRUwgYW5kIEZVTEwKK0NS
RUFURSBURU1QT1JBUlkgVEFCTEUgdG1wIChhIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgSU5E
RVggdG1wX2lkeDEgT04gdG1wIChhKTsKK1ZBQ1VVTSAoUEFSQUxMRUwgMSkgdG1wOyAtLSBkaXNh
YmxlcyBwYXJhbGxlbCB2YWN1dW0gb3B0aW9uCitSRVNFVCBtaW5fcGFyYWxsZWxfaW5kZXhfc2Nh
bl9zaXplOworRFJPUCBUQUJMRSBwdmFjdHN0OworCiAtLSBJTkRFWF9DTEVBTlVQIG9wdGlvbgog
Q1JFQVRFIFRBQkxFIG5vX2luZGV4X2NsZWFudXAgKGkgSU5UIFBSSU1BUlkgS0VZLCB0IFRFWFQp
OwogLS0gVXNlIHVuY29tcHJlc3NlZCBkYXRhIHN0b3JlZCBpbiB0b2FzdC4KZGlmZiAtLWdpdCBh
L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5
cGVkZWZzLmxpc3QKaW5kZXggY2FmNmI4NmY5Mi4uMDI0MmU2NjI3ZCAxMDA2NDQKLS0tIGEvc3Jj
L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5
cGVkZWZzLmxpc3QKQEAgLTEyMTYsNyArMTIxNiwxMSBAQCBMUFZPSUQKIExQV1NUUgogTFNFRwog
TFVJRAorTFZEZWFkVHVwbGVzCiBMVlJlbFN0YXRzCitMVlNoYXJlZAorTFZTaGFyZWRJbmRTdGF0
cworTFZQYXJhbGxlbFN0YXRlCiBMV0xvY2sKIExXTG9ja0hhbmRsZQogTFdMb2NrTWluaW1hbGx5
UGFkZGVkCi0tIAoyLjE2LjIud2luZG93cy4xCgo=
--000000000000a9643b059c18f087--