This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

optimization/8284: GCC 3.2 mistakenly assumes unaliased buffers with -O3


>Number:         8284
>Category:       optimization
>Synopsis:       GCC 3.2 mistakenly assumes unaliased buffers with -O3
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Sat Oct 19 07:36:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Davin McCall
>Release:        3.2
>Organization:
>Environment:
Custom linux distribution, Pentium3, kernel version 2.4.18. Binutils 2.13. Gcc version 3.2
>Description:
When compiling glibc 2.3.1 I noticed problems with the readdir function for programs which were statically linked. On further investigation this turns out to be a bug in gcc. Some values are transferred from a buffer to some local variables, then the buffer is modified through a seperate pointer, and finally the values taken from the original buffer are compared to some values in the new buffer. However GCC (with -O3 option) doesn't seem to recognize that the old buffer is no longer available; it seems to assume that the two buffer pointers do not alias.

The function in question is __getdents from glibc, I have attached preprocessed source.

I have the generated assembly (with comments showing exactly where the problem occurs) as well, but can't seem to attach more than one file using this bug-reporting interface.
>How-To-Repeat:
gcc -S -O3 -fomit-frame-pointer getdents.i
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="getdents.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="getdents.i"

dHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwpleHRlcm4gdm9pZCAqYWxsb2NhIChzaXplX3Qg
X19zaXplKSA7CmV4dGVybiB2b2lkICpfX2FsbG9jYSAoc2l6ZV90IF9fc2l6ZSk7CgpleHRlcm4g
aW50IF9fbGliY191c2VfYWxsb2NhIChzaXplX3Qgc2l6ZSkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0
KSk7CmV4dGVybiBpbnQgX19saWJjX2FsbG9jYV9jdXRvZmYgKHNpemVfdCBzaXplKSBfX2F0dHJp
YnV0ZV9fICgoY29uc3QpKTsKCmV4dGVybiBpbmxpbmUgaW50IF9fbGliY191c2VfYWxsb2NhIChz
aXplX3Qgc2l6ZSkKewogIHJldHVybiAoX19idWlsdGluX2V4cGVjdCAoc2l6ZSA8PSAxNjM4NCAv
IDQsIDEpCiAgICAgICAgICB8fCBfX2xpYmNfYWxsb2NhX2N1dG9mZiAoc2l6ZSkpOwp9CgpleHRl
cm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0
IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9f
bGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIF9fYXR0cmlidXRlX18gKChfX25v
cmV0dXJuX18pKTsKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJu
dW0sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy
bl9fKSk7CgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNv
bnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3Jl
dHVybl9fKSk7CgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNz
ZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogIF9fYXR0cmli
dXRlX18gKChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFp
bCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fbm9yZXR1cm5fXykpOwoKZXh0ZXJuIGludCAqX19lcnJub19sb2NhdGlvbiAodm9pZCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gY2hhciAqcHJvZ3JhbV9pbnZvY2F0
aW9uX25hbWUsICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCnR5cGVkZWYgaW50IGVy
cm9yX3Q7CmV4dGVybiBsb25nIGludCB0ZXN0YW5kc2V0IChpbnQgKnNwaW5sb2NrKTsKZXh0ZXJu
IGludCBfX2NvbXBhcmVfYW5kX3N3YXAgKGxvbmcgaW50ICpwLCBsb25nIGludCBvbGR2YWwsIGxv
bmcgaW50IG5ld3ZhbCk7CgpleHRlcm4gaW5saW5lIGxvbmcgaW50CnRlc3RhbmRzZXQgKGludCAq
c3BpbmxvY2spCnsKICBsb25nIGludCByZXQ7CgogIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAg
ICAgInhjaGdsICUwLCAlMSIKICAgICAgIDogIj1yIihyZXQpLCAiPW0iKCpzcGlubG9jaykKICAg
ICAgIDogIjAiKDEpLCAibSIoKnNwaW5sb2NrKQogICAgICAgOiAibWVtb3J5Iik7CgogIHJldHVy
biByZXQ7Cn0KZXh0ZXJuIGlubGluZSBpbnQKX19jb21wYXJlX2FuZF9zd2FwIChsb25nIGludCAq
cCwgbG9uZyBpbnQgb2xkdmFsLCBsb25nIGludCBuZXd2YWwpCnsKICBjaGFyIHJldDsKICBsb25n
IGludCByZWFkdmFsOwoKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IGNtcHhjaGdsICUz
LCAlMTsgc2V0ZSAlMCIKICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXEiIChyZXQpLCAiPW0i
ICgqcCksICI9YSIgKHJlYWR2YWwpCiAgICAgICAgICAgICAgICAgICAgICAgIDogInIiIChuZXd2
YWwpLCAibSIgKCpwKSwgImEiIChvbGR2YWwpCiAgICAgICAgICAgICAgICAgICAgICAgIDogIm1l
bW9yeSIpOwogIHJldHVybiByZXQ7Cn0KCgpleHRlcm4gaW5saW5lIGludApnZXRfZWZsYWdzICh2
b2lkKQp7CiAgaW50IHJlczsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInB1c2hmbDsgcG9wbCAl
MCIgOiAiPXIiIChyZXMpIDogKTsKICByZXR1cm4gcmVzOwp9CgoKZXh0ZXJuIGlubGluZSB2b2lk
CnNldF9lZmxhZ3MgKGludCBuZXdmbGFncykKewogIF9fYXNtX18gX192b2xhdGlsZV9fICgicHVz
aGwgJTA7IHBvcGZsIiA6IDogInIiIChuZXdmbGFncykgOiAiY2MiKTsKfQoKCmV4dGVybiBpbmxp
bmUgaW50CmNvbXBhcmVfYW5kX3N3YXBfaXNfYXZhaWxhYmxlICh2b2lkKQp7CiAgaW50IG9sZGZs
YWdzID0gZ2V0X2VmbGFncyAoKTsKICBpbnQgY2hhbmdlZDsKCiAgc2V0X2VmbGFncyAob2xkZmxh
Z3MgXiAweDQwMDAwKTsKCiAgY2hhbmdlZCA9IChnZXRfZWZsYWdzICgpIF4gb2xkZmxhZ3MpICYg
MHg0MDAwMDsKCiAgc2V0X2VmbGFncyAob2xkZmxhZ3MpOwoKCiAgcmV0dXJuIGNoYW5nZWQgIT0g
MDsKfQoKCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKdHlwZWRlZiBsb25nIGludCB3Y2hhcl90OwoK
CnR5cGVkZWYgdW5pb24gZHR2CnsKICBzaXplX3QgY291bnRlcjsKICB2b2lkICpwb2ludGVyOwp9
IGR0dl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICB2b2lkICp0Y2I7CgogIGR0dl90ICpkdHY7CiAg
dm9pZCAqc2VsZjsKfSB0Y2JoZWFkX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFy
Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
X191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0
eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4
X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0
IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5
cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMy
X3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90
OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90
OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2
X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlw
ZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYg
X191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1
YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90
Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRf
dDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9f
dmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNo
YXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVk
ZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlw
ZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBl
ZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90
OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBf
X2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9s
b25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5
cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNu
dDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90
IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgpzdHJ1Y3QgX19zY2hlZF9wYXJh
bQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CgoKc3RydWN0IF9wdGhyZWFkX2Zh
c3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlubG9jazsKfTsKCnR5cGVk
ZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCnR5cGVk
ZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBf
X3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQg
X19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGlu
dCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tz
aXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhy
ZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0
aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVh
ZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKdHlw
ZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRo
cmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9m
YXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsK
ICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQg
cHRocmVhZF9vbmNlX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0
cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBf
cHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2Fp
dGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2lu
ZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3Ry
dWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2Nr
YXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5
cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGlu
dCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19i
YV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQg
X19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgaW50IHB0aHJlYWRfdDsKCgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYg
X191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9u
ZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9x
dWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCgoKdHlwZWRlZiBfX2xvZmZfdCBsb2Zm
X3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3QgaW5v
NjRfdDsKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRf
dDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3Qgbmxp
bmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2Zm
X3Q7CgoKCgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CgoKCgp0eXBlZGVmIF9fcGlkX3Qg
cGlkX3Q7CgoKCgp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3Np
emVfdDsKCgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBj
YWRkcl90OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKCgp0eXBlZGVmIF9fY2xvY2tfdCBj
bG9ja190OwoKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7Cgp0eXBlZGVmIF9fY2xvY2tpZF90IGNs
b2NraWRfdDsKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKCgoKdHlwZWRlZiBfX3VzZWNvbmRz
X3QgdXNlY29uZHNfdDsKCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCnR5
cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50
IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKdHlwZWRlZiBpbnQgaW50OF90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50
IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVu
c2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7
CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g
KF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18g
KChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwoKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7
CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0
IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CgoK
CnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIF9f
dGltZV90IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKCnN0cnVjdCB0aW1ldmFs
CiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07
CnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwp0eXBlZGVmIHN0cnVjdAogIHsKCiAgICBfX2Zk
X21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgogIH0gZmRf
c2V0OwoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKCmV4dGVybiBpbnQgc2VsZWN0IChpbnQg
X19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAg
ZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQg
Kl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZh
bCAqX19yZXN0cmljdCBfX3RpbWVvdXQpIDsKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZk
cywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBmZF9z
ZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9f
cmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRp
bWVzcGVjICpfX3Jlc3RyaWN0IF9fdGltZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBf
X3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fc2lnbWFzaykgOwoKZXh0ZXJuIGludCBfX3BzZWxlY3Qg
KGludCBfX25mZHMsIGZkX3NldCAqX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgICAgZmRf
c2V0ICpfX3dyaXRlZmRzLCBmZF9zZXQgKl9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfX3NpZ3NldF90ICpfX3NpZ21hc2spOwoKZXh0ZXJuIGludCBfX3NlbGVjdCAoaW50
IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAg
ICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICAgIGZk
X3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KTsKCgp0eXBlZGVmIF9fYmxrc2l6ZV90IGJs
a3NpemVfdDsKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90Owp0eXBlZGVmIF9fZnNibGtjbnRf
dCBmc2Jsa2NudF90Owp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwoKdHlwZWRlZiBf
X2Jsa2NudDY0X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0
X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKc3RydWN0IHNjaGVkX3Bh
cmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKCgpleHRlcm4gaW50IGNsb25l
IChpbnQgKCpfX2ZuKSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAg
ICAgICAgICAgICBpbnQgX19mbGFncywgdm9pZCAqX19hcmcpIDsKCmV4dGVybiBpbnQgc2NoZWRf
c2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Bh
cmFtKQogICAgIDsKCgpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlkLCBz
dHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIDsKCgpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVk
dWxlciAoX19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIDsKCgpleHRlcm4g
aW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgOwoKCmV4dGVybiBpbnQgc2No
ZWRfeWllbGQgKHZvaWQpIDsKCgpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXggKGlu
dCBfX2FsZ29yaXRobSkgOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50
IF9fYWxnb3JpdGhtKSA7CgoKZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlk
X3QgX19waWQsIHN0cnVjdCB0aW1lc3BlYyAqX190KSA7CgoKCgpleHRlcm4gaW50IHNjaGVkX3Nl
dGFmZmluaXR5IChfX3BpZF90IF9fcGlkLCB1bnNpZ25lZCBsb25nIGludCBfX2xlbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgKl9fbWFzaykgOwoKCmV4
dGVybiBpbnQgc2NoZWRfZ2V0YWZmaW5pdHkgKF9fcGlkX3QgX19waWQsIHVuc2lnbmVkIGxvbmcg
aW50IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGlu
dCAqX19tYXNrKSA7CgoKCmV4dGVybiBpbnQgX19zY2hlZF9zZXRwYXJhbSAoX19waWRfdCBfX3Bp
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJh
bSAqX19wYXJhbSk7CmV4dGVybiBpbnQgX19zY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3BpZCwg
c3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKTsKZXh0ZXJuIGludCBfX3NjaGVkX3NldHNjaGVk
dWxlciAoX19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSk7CgpleHRlcm4g
aW50IF9fc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkKTsKZXh0ZXJuIGludCBfX3Nj
aGVkX3lpZWxkICh2b2lkKTsKZXh0ZXJuIGludCBfX3NjaGVkX2dldF9wcmlvcml0eV9tYXggKGlu
dCBfX2FsZ29yaXRobSk7CmV4dGVybiBpbnQgX19zY2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQg
X19hbGdvcml0aG0pOwpleHRlcm4gaW50IF9fc2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX3BpZF90
IF9fcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCk7CgoKZXh0ZXJuIGludCBfX2Nsb25lIChpbnQg
KCpfX2ZuKSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAgICAgICAg
ICAgICAgIGludCBfX2ZsYWdzLCB2b2lkICpfX2FyZywgLi4uKTsKZXh0ZXJuIGludCBfX2Nsb25l
MiAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFja19iYXNlLAog
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19jaGlsZF9zdGFja19zaXplLCBpbnQgX19mbGFn
cywgdm9pZCAqX19hcmcpOwoKc3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47
CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21kYXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVh
cjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1feWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25n
IGludCB0bV9nbXRvZmY7CiAgX19jb25zdCBjaGFyICp0bV96b25lOwoKCgoKfTsKCgpzdHJ1Y3Qg
aXRpbWVyc3BlYwogIHsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgIHN0cnVj
dCB0aW1lc3BlYyBpdF92YWx1ZTsKICB9OwoKCnN0cnVjdCBzaWdldmVudDsKCgoKZXh0ZXJuIGNs
b2NrX3QgY2xvY2sgKHZvaWQpIDsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1l
cikgOwoKCmV4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190
aW1lMCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIHRpbWVfdCBt
a3RpbWUgKHN0cnVjdCB0bSAqX190cCkgOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNo
YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsKCgoKCgpleHRlcm4g
Y2hhciAqc3RycHRpbWUgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBzdHJ1Y3QgdG0gKl9f
dHApCiAgICAgOwoKCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBs
b2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAq
X19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19j
dHlwZV90b3VwcGVyOwoKCiAgY29uc3QgY2hhciAqX19uYW1lc1sxM107Cn0gKl9fbG9jYWxlX3Q7
CgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lX2wgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg
X19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0
bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg
X19sb2MpIDsKCmV4dGVybiBjaGFyICpzdHJwdGltZV9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm10LCBzdHJ1Y3QgdG0gKl9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2Fs
ZV90IF9fbG9jKSA7CgoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAoX19jb25zdCB0aW1l
X3QgKl9fdGltZXIpIDsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRp
bWVfdCAqX190aW1lcikgOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZV9yIChfX2NvbnN0
IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0
aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgOwoKCgoKCmV4dGVy
biBjaGFyICphc2N0aW1lIChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCkgOwoKCmV4dGVybiBjaGFy
ICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIDsKCgoKCgoKCmV4dGVybiBjaGFyICph
c2N0aW1lX3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIDsKCgpleHRlcm4gY2hhciAqY3Rp
bWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIDsKCgoKCmV4dGVybiBjaGFyICpfX3R6bmFt
ZVsyXTsKZXh0ZXJuIGludCBfX2RheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgX190aW1lem9uZTsK
CgoKCmV4dGVybiBjaGFyICp0em5hbWVbMl07CgoKCmV4dGVybiB2b2lkIHR6c2V0ICh2b2lkKSA7
CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0aW1lem9uZTsKCgoKCgpl
eHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSA7CmV4dGVybiB0aW1lX3Qg
dGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIDsKCgpleHRlcm4gdGltZV90IHRpbWVsb2NhbCAoc3Ry
dWN0IHRtICpfX3RwKSA7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IG5hbm9zbGVlcCAoX19jb25zdCBz
dHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSA7CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVz
IChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3JlcykgOwoKCmV4dGVy
biBpbnQgY2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3Bl
YyAqX190cCkgOwoKCmV4dGVybiBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tf
aWQsIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RwKQogICAgIDsKCgoKZXh0ZXJuIGludCBj
bG9ja19uYW5vc2xlZXAgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW0pIDsKCgpleHRl
cm4gaW50IGNsb2NrX2dldGNwdWNsb2NraWQgKHBpZF90IF9fcGlkLCBjbG9ja2lkX3QgKl9fY2xv
Y2tfaWQpIDsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lkX3QgX19jbG9ja19p
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCBf
X2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9fcmVzdHJpY3QgX190aW1l
cmlkKSA7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSA7CgoK
ZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgaW50IF9fZmxhZ3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19y
ZXN0cmljdCBfX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpdGltZXJz
cGVjICpfX3Jlc3RyaWN0IF9fb3ZhbHVlKSA7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0
aW1lcl90IF9fdGltZXJpZCwgc3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgOwoKCmV4
dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIDsKZXh0ZXJuIGlu
dCBnZXRkYXRlX2VycjsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlIChfX2NvbnN0IGNo
YXIgKl9fc3RyaW5nKSA7CmV4dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJp
Y3QgX19yZXNidWZwKSA7CgoKCgpleHRlcm4gX190eXBlb2YgKHN0cmZ0aW1lX2wpIF9fc3RyZnRp
bWVfbDsKZXh0ZXJuIF9fdHlwZW9mIChzdHJwdGltZV9sKSBfX3N0cnB0aW1lX2w7CgoKCgoKCgoK
CgpzdHJ1Y3QgdG07CgoKZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCBfX21vbl95ZGF5
WzJdWzEzXSA7CgoKZXh0ZXJuIHN0cnVjdCB0bSBfdG1idWYgOwoKCmV4dGVybiBjaGFyICpfX3R6
c3RyaW5nIChjb25zdCBjaGFyICpzdHJpbmcpOwoKCmV4dGVybiBzaXplX3QgX190em5hbWVfY3Vy
X21heCA7CgoKZXh0ZXJuIGludCBfX3VzZV90emZpbGUgOwoKZXh0ZXJuIHZvaWQgX190emZpbGVf
cmVhZCAoY29uc3QgY2hhciAqZmlsZSwgc2l6ZV90IGV4dHJhLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqZXh0cmFwKTsKZXh0ZXJuIGludCBfX3R6ZmlsZV9jb21wdXRlICh0aW1l
X3QgdGltZXIsIGludCB1c2VfbG9jYWx0aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxvbmcgaW50ICpsZWFwX2NvcnJlY3QsIGludCAqbGVhcF9oaXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHRtICp0cCk7CmV4dGVybiB2b2lkIF9fdHpmaWxlX2RlZmF1bHQg
KGNvbnN0IGNoYXIgKnN0ZCwgY29uc3QgY2hhciAqZHN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb25nIGludCBzdGRvZmYsIGxvbmcgaW50IGRzdG9mZik7CgoKCgpleHRlcm4gdGlt
ZV90IF9fbWt0aW1lX2ludGVybmFsIChzdHJ1Y3QgdG0gKl9fdHAsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqKCpfX2Z1bmMpIChjb25zdCB0aW1lX3QgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCB0bSAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZV90ICpfX29mZnNl
dCk7CmV4dGVybiBzdHJ1Y3QgdG0gKl9fbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Rp
bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fdHApIDsK
CmV4dGVybiBzdHJ1Y3QgdG0gKl9fZ210aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0
IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0
cmljdCBfX3RwKTsKCgoKCgoKZXh0ZXJuIGludCBfX29mZnRpbWUgKF9fY29uc3QgdGltZV90ICpf
X3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgX19vZmZzZXQsCiAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fdHApOwoKZXh0ZXJuIGNoYXIgKl9fYXNjdGltZV9y
IChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCwgY2hhciAqX19idWYpOwpleHRlcm4gdm9pZCBfX3R6
c2V0ICh2b2lkKTsKCgpleHRlcm4gc3RydWN0IHRtICpfX3R6X2NvbnZlcnQgKGNvbnN0IHRpbWVf
dCAqdGltZXIsIGludCB1c2VfbG9jYWx0aW1lLCBzdHJ1Y3QgdG0gKnRwKTsKCgoKZXh0ZXJuIGxv
bmcgaW50IF9fdHpuYW1lX21heCAodm9pZCk7CgpleHRlcm4gaW50IF9fbmFub3NsZWVwIChfX2Nv
bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZyk7CmV4dGVybiBpbnQgX19nZXRkYXRl
X3IgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHN0cnVjdCB0bSAqX19yZXNidWZwKTsKCgoKZXh0
ZXJuIGludCBfX2dldGNsa3RjayAodm9pZCk7CgplbnVtCnsKICBQVEhSRUFEX0NSRUFURV9KT0lO
QUJMRSwKCiAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX0lO
SEVSSVRfU0NIRUQsCgogIFBUSFJFQURfRVhQTElDSVRfU0NIRUQKCn07CgplbnVtCnsKICBQVEhS
RUFEX1NDT1BFX1NZU1RFTSwKCiAgUFRIUkVBRF9TQ09QRV9QUk9DRVNTCgp9OwoKZW51bQp7CiAg
UFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQ
VEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoK
ICAsCiAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBU
SFJFQURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRI
UkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBU
SFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVURVhfTk9STUFMCgoKCiAgLCBQVEhSRUFE
X01VVEVYX0ZBU1RfTlAgPSBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCgp9OwoKZW51bQp7CiAg
UFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQKCn07CgoK
ZW51bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURFUl9OUCwKICBQVEhSRUFEX1JXTE9D
S19QUkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTk9OUkVD
VVJTSVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RFRkFVTFRfTlAgPSBQVEhSRUFEX1JXTE9DS19Q
UkVGRVJfV1JJVEVSX05QCn07CnN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9p
ZCAoKl9fcm91dGluZSkgKHZvaWQgKik7CiAgdm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2VsdHlw
ZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fcHJldjsKfTsKCgoKZW51bQp7
CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAoKICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCgp9Owpl
bnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRCwKCiAgUFRIUkVBRF9DQU5DRUxfQVNZTkNI
Uk9OT1VTCgp9OwpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlIChwdGhyZWFkX3QgKl9fcmVzdHJp
Y3QgX190aHJlYWRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRf
YXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKSA7CgoKZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3Nl
bGYgKHZvaWQpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgKHB0aHJlYWRfdCBfX3RocmVh
ZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIpIDsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZv
aWQgKl9fcmV0dmFsKQogICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9qb2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3Jl
dHVybikgOwpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoIChwdGhyZWFkX3QgX190aCkgOwpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9pbml0IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSA7CmV4dGVy
biBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIDsKZXh0
ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19kZXRhY2hz
dGF0ZSkgOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0ZSAoX19jb25zdCBw
dGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50ICpfX2RldGFjaHN0YXRlKSA7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNj
aGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9f
cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbSkg
OwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtIChfX2NvbnN0IHB0aHJlYWRf
YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNj
aGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgOwpleHRlcm4gaW50IHB0aHJlYWRf
YXR0cl9zZXRzY2hlZHBvbGljeSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fcG9saWN5
KQogICAgIDsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9fY29uc3Qg
cHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5KQogICAgIDsKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfc2V0aW5oZXJpdHNjaGVkIChwdGhyZWFkX2F0dHJfdCAqX19hdHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2luaGVyaXQp
IDsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkIChfX2NvbnN0IHB0aHJl
YWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19pbmhlcml0KQogICAgIDsKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Nj
b3BlKQogICAgIDsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgKF9fY29uc3QgcHRo
cmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2NvcGUpIDsKZXh0ZXJuIGludCBwdGhyZWFkX2F0
dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2d1YXJkc2l6ZSkgOwpleHRlcm4gaW50IHB0
aHJlYWRfYXR0cl9nZXRndWFyZHNpemUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJp
Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAq
X19yZXN0cmljdCBfX2d1YXJkc2l6ZSkKICAgICA7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3Nl
dHN0YWNrYWRkciAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2b2lkICpfX3N0YWNrYWRkcikgOwpleHRlcm4gaW50IHB0aHJlYWRf
YXR0cl9nZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHZvaWQgKipfX3Jlc3Ry
aWN0IF9fc3RhY2thZGRyKQogICAgIDsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2sg
KHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHZvaWQgKl9fc3RhY2thZGRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhY2tzaXplKSA7CmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX2dldHN0YWNrIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9f
YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipfX3Jlc3RyaWN0
IF9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpf
X3Jlc3RyaWN0IF9fc3RhY2tzaXplKSA7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNr
c2l6ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpIDsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
Z2V0c3RhY2tzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3Qg
X19zdGFja3NpemUpCiAgICAgOwpleHRlcm4gaW50IHB0aHJlYWRfZ2V0YXR0cl9ucCAocHRocmVh
ZF90IF9fdGgsIHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIDsKZXh0ZXJuIGludCBwdGhyZWFkX3Nl
dHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBfX3BvbGljeSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFt
ICpfX3BhcmFtKQogICAgIDsKZXh0ZXJuIGludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0gKHB0aHJl
YWRfdCBfX3RhcmdldF90aHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgKl9fcmVzdHJpY3QgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19wYXJhbSkKICAgICA7CmV4dGVybiBp
bnQgcHRocmVhZF9nZXRjb25jdXJyZW5jeSAodm9pZCkgOwpleHRlcm4gaW50IHB0aHJlYWRfc2V0
Y29uY3VycmVuY3kgKGludCBfX2xldmVsKSA7CmV4dGVybiBpbnQgcHRocmVhZF95aWVsZCAodm9p
ZCkgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICpfX3Jl
c3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0
aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbXV0ZXhfYXR0cikgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRo
cmVhZF9tdXRleF90ICpfX211dGV4KSA7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90cnlsb2Nr
IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xv
Y2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhf
dGltZWRsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVz
dHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSA7CgoK
CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRl
eCkgOwoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0
cl90ICpfX2F0dHIpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0
aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0
dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVk
KSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX211
dGV4YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fcHNoYXJlZCkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlw
ZSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKQogICAgIDsKCgpleHRl
cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0
dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fa2luZCkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25k
X2luaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKl9fcmVzdHJpY3QKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25kX2F0dHIpIDsKCgpleHRlcm4gaW50IHB0
aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSA7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2NvbmRfc2lnbmFsIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSA7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSA7CgoK
CmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0
IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpf
X3Jlc3RyaWN0IF9fbXV0ZXgpIDsKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAo
cHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jl
c3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSA7Cgpl
eHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0
dHIpIDsKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChwdGhyZWFkX2NvbmRh
dHRyX3QgKl9fYXR0cikgOwoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQg
KF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIDsK
CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0
cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0
aHJlYWRfcndsb2NrYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19hdHRyKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhy
ZWFkX3J3bG9ja190ICpfX3J3bG9jaykgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfcmRs
b2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9y
d2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgOwoKCgpleHRlcm4g
aW50IHB0aHJlYWRfcndsb2NrX3RpbWVkcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3Ry
aWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2Fic3RpbWUpIDsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193
cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X3J3bG9ja190cnl3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSA7CgoKCmV4dGVy
biBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWR3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVz
dHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2Nr
X3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIDsKCgoKCgpleHRlcm4gaW50IHB0
aHJlYWRfcndsb2NrYXR0cl9pbml0IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSA7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveSAocHRocmVhZF9yd2xvY2thdHRy
X3QgKl9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQg
KF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfcndsb2NrYXR0cl90
ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X3BzaGFyZWQpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRraW5kX25wIChf
X2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCAqX19wcmVmKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X3J3bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHJlZikgOwpleHRl
cm4gaW50IHB0aHJlYWRfc3Bpbl9pbml0IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaywgaW50
IF9fcHNoYXJlZCkKICAgICA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fZGVzdHJveSAocHRo
cmVhZF9zcGlubG9ja190ICpfX2xvY2spIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9sb2Nr
IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGlu
X3RyeWxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSA7CgoKZXh0ZXJuIGludCBwdGhy
ZWFkX3NwaW5fdW5sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgOwoKCgoKZXh0ZXJu
IGludCBwdGhyZWFkX2JhcnJpZXJfaW5pdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fcmVzdHJpY3Qg
X19iYXJyaWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJl
YWRfYmFycmllcmF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2F0dHIsIHVuc2lnbmVkIGludCBfX2NvdW50KSA7CgpleHRlcm4gaW50IHB0aHJlYWRf
YmFycmllcl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJfdCAqX19iYXJyaWVyKSA7CgpleHRlcm4g
aW50IHB0aHJlYWRfYmFycmllcmF0dHJfaW5pdCAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX2F0
dHIpIDsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhyZWFkX2Jh
cnJpZXJhdHRyX3QgKl9fYXR0cikgOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2dl
dHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9iYXJyaWVyYXR0cl90ICoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJl
ZCkgOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRf
YmFycmllcmF0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IF9fcHNoYXJlZCkgOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfd2Fp
dCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgOwpleHRlcm4gaW50IHB0aHJlYWRfa2V5
X2NyZWF0ZSAocHRocmVhZF9rZXlfdCAqX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIDsKCgpleHRlcm4gaW50IHB0
aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVhZF9rZXlfdCBfX2tleSkgOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcG9pbnRlcikgOwoKCmV4dGVybiB2b2lkICpw
dGhyZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5KSA7CmV4dGVybiBpbnQgcHRo
cmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsCiAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkgOwoKCgoKCgpleHRlcm4g
aW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGludCBfX3N0YXRlLCBpbnQgKl9fb2xkc3RhdGUp
IDsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUsIGludCAq
X19vbGR0eXBlKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90IF9fY2Fu
Y2VsdGhyZWFkKSA7CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwgKHZvaWQpIDsK
ZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51
cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKl9fYXJnKSA7CgoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3Bv
cCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIDsKZXh0ZXJuIHZvaWQgX3B0aHJl
YWRfY2xlYW51cF9wdXNoX2RlZmVyIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9f
YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpf
X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKl9fYXJnKSA7CmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3Rv
cmUgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIDsKCgoKCgpleHRl
cm4gaW50IHB0aHJlYWRfZ2V0Y3B1Y2xvY2tpZCAocHRocmVhZF90IF9fdGhyZWFkX2lkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tpZF90ICpfX2Nsb2NrX2lkKSA7CgoK
CgpleHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayAoaW50IF9faG93LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fbmV3bWFzaywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19vbGRtYXNr
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkaWQsIGludCBf
X3NpZ25vKSA7CmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2
b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIDsKCmV4
dGVybiB2b2lkIHB0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wICh2b2lkKSA7CgoKZXh0ZXJu
IHZvaWQgX19wdGhyZWFkX2luaXRpYWxpemUgKHZvaWQpIF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7
CgoKCnR5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fbGliY19sb2NrX3Q7CnR5cGVkZWYgc3RydWN0
IHsgcHRocmVhZF9tdXRleF90IG11dGV4OyB9IF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90OwoKdHlw
ZWRlZiBwdGhyZWFkX3J3bG9ja190IF9fbGliY19yd2xvY2tfdDsKdHlwZWRlZiBwdGhyZWFkX2tl
eV90IF9fbGliY19rZXlfdDsKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVh
ZF9tdXRleF90ICpfX211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fbXV0ZXhfYXR0cik7CgpleHRlcm4gaW50IF9fcHRo
cmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpOwoKZXh0ZXJuIGlu
dCBfX3B0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KTsKCmV4
dGVybiBpbnQgX19wdGhyZWFkX211dGV4X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCk7
CgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19t
dXRleCk7CgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRl
eGF0dHJfdCAqX19hdHRyKTsKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4YXR0cl9kZXN0cm95
IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpOwoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0
ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2tpbmQpOwoKCmV4dGVybiBpbnQgX19w
dGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9f
YXR0cik7CgpleHRlcm4gaW50IF9fcHRocmVhZF9yd2xvY2tfZGVzdHJveSAocHRocmVhZF9yd2xv
Y2tfdCAqX19yd2xvY2spOwoKZXh0ZXJuIGludCBfX3B0aHJlYWRfcndsb2NrX3JkbG9jayAocHRo
cmVhZF9yd2xvY2tfdCAqX19yd2xvY2spOwoKZXh0ZXJuIGludCBfX3B0aHJlYWRfcndsb2NrX3Ry
eXJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spOwoKZXh0ZXJuIGludCBfX3B0aHJl
YWRfcndsb2NrX3dybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spOwoKZXh0ZXJuIGlu
dCBfX3B0aHJlYWRfcndsb2NrX3RyeXdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2sp
OwoKZXh0ZXJuIGludCBfX3B0aHJlYWRfcndsb2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAq
X19yd2xvY2spOwoKCmV4dGVybiBpbnQgX19wdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5
X3QgKl9fa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19kZXN0
cl9mdW5jdGlvbikgKHZvaWQgKikpOwoKZXh0ZXJuIGludCBfX3B0aHJlYWRfc2V0c3BlY2lmaWMg
KHB0aHJlYWRfa2V5X3QgX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHZvaWQgKl9fcG9pbnRlcik7CgpleHRlcm4gdm9pZCAqX19wdGhyZWFkX2dldHNwZWNp
ZmljIChwdGhyZWFkX2tleV90IF9fa2V5KTsKCmV4dGVybiBpbnQgX19wdGhyZWFkX29uY2UgKHB0
aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpOwoKZXh0ZXJuIGludCBfX3B0aHJlYWRfYXRm
b3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAoKl9fY2hpbGQpICh2b2lkKSk7CgoKYXNtICgiLndlYWsgIiAiX19wdGhyZWFkX211dGV4
X2luaXQiKTsKYXNtICgiLndlYWsgIiAiX19wdGhyZWFkX211dGV4X2Rlc3Ryb3kiKTsKYXNtICgi
LndlYWsgIiAiX19wdGhyZWFkX211dGV4X2xvY2siKTsKYXNtICgiLndlYWsgIiAiX19wdGhyZWFk
X211dGV4X3RyeWxvY2siKTsKYXNtICgiLndlYWsgIiAiX19wdGhyZWFkX211dGV4X3VubG9jayIp
Owphc20gKCIud2VhayAiICJfX3B0aHJlYWRfbXV0ZXhhdHRyX2luaXQiKTsKYXNtICgiLndlYWsg
IiAiX19wdGhyZWFkX211dGV4YXR0cl9kZXN0cm95Iik7CmFzbSAoIi53ZWFrICIgIl9fcHRocmVh
ZF9tdXRleGF0dHJfc2V0dHlwZSIpOwphc20gKCIud2VhayAiICJfX3B0aHJlYWRfcndsb2NrX2lu
aXQiKTsKYXNtICgiLndlYWsgIiAiX19wdGhyZWFkX3J3bG9ja19kZXN0cm95Iik7CmFzbSAoIi53
ZWFrICIgIl9fcHRocmVhZF9yd2xvY2tfcmRsb2NrIik7CmFzbSAoIi53ZWFrICIgIl9fcHRocmVh
ZF9yd2xvY2tfdHJ5cmRsb2NrIik7CmFzbSAoIi53ZWFrICIgIl9fcHRocmVhZF9yd2xvY2tfd3Js
b2NrIik7CmFzbSAoIi53ZWFrICIgIl9fcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrIik7CmFzbSAo
Ii53ZWFrICIgIl9fcHRocmVhZF9yd2xvY2tfdW5sb2NrIik7CmFzbSAoIi53ZWFrICIgIl9fcHRo
cmVhZF9rZXlfY3JlYXRlIik7CmFzbSAoIi53ZWFrICIgIl9fcHRocmVhZF9zZXRzcGVjaWZpYyIp
Owphc20gKCIud2VhayAiICJfX3B0aHJlYWRfZ2V0c3BlY2lmaWMiKTsKYXNtICgiLndlYWsgIiAi
X19wdGhyZWFkX29uY2UiKTsKYXNtICgiLndlYWsgIiAiX19wdGhyZWFkX2luaXRpYWxpemUiKTsK
YXNtICgiLndlYWsgIiAiX19wdGhyZWFkX2F0Zm9yayIpOwphc20gKCIud2VhayAiICJfcHRocmVh
ZF9jbGVhbnVwX3B1c2hfZGVmZXIiKTsKYXNtICgiLndlYWsgIiAiX3B0aHJlYWRfY2xlYW51cF9w
b3BfcmVzdG9yZSIpOwoKCgpzdHJ1Y3QgX19kaXJzdHJlYW0KICB7CiAgICBpbnQgZmQ7CgogICAg
Y2hhciAqZGF0YTsKICAgIHNpemVfdCBhbGxvY2F0aW9uOwogICAgc2l6ZV90IHNpemU7CiAgICBz
aXplX3Qgb2Zmc2V0OwoKICAgIG9mZl90IGZpbGVwb3M7CgogICAgX19saWJjX2xvY2tfdCBsb2Nr
OwogIH07CgpzdHJ1Y3QgZGlyZW50CiAgewoKICAgIF9faW5vX3QgZF9pbm87CiAgICBfX29mZl90
IGRfb2ZmOwoKCgoKICAgIHVuc2lnbmVkIHNob3J0IGludCBkX3JlY2xlbjsKICAgIHVuc2lnbmVk
IGNoYXIgZF90eXBlOwogICAgY2hhciBkX25hbWVbMjU2XTsKICB9OwoKCnN0cnVjdCBkaXJlbnQ2
NAogIHsKICAgIF9faW5vNjRfdCBkX2lubzsKICAgIF9fb2ZmNjRfdCBkX29mZjsKICAgIHVuc2ln
bmVkIHNob3J0IGludCBkX3JlY2xlbjsKICAgIHVuc2lnbmVkIGNoYXIgZF90eXBlOwogICAgY2hh
ciBkX25hbWVbMjU2XTsKICB9OwoKZW51bQogIHsKICAgIERUX1VOS05PV04gPSAwLAoKICAgIERU
X0ZJRk8gPSAxLAoKICAgIERUX0NIUiA9IDIsCgogICAgRFRfRElSID0gNCwKCiAgICBEVF9CTEsg
PSA2LAoKICAgIERUX1JFRyA9IDgsCgogICAgRFRfTE5LID0gMTAsCgogICAgRFRfU09DSyA9IDEy
LAoKICAgIERUX1dIVCA9IDE0CgogIH07Cgp0eXBlZGVmIHN0cnVjdCBfX2RpcnN0cmVhbSBESVI7
CmV4dGVybiBESVIgKm9wZW5kaXIgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CmV4dGVybiBpbnQg
Y2xvc2VkaXIgKERJUiAqX19kaXJwKSA7CmV4dGVybiBzdHJ1Y3QgZGlyZW50ICpyZWFkZGlyIChE
SVIgKl9fZGlycCkgOwpleHRlcm4gc3RydWN0IGRpcmVudDY0ICpyZWFkZGlyNjQgKERJUiAqX19k
aXJwKSA7CgoKZXh0ZXJuIGludCByZWFkZGlyX3IgKERJUiAqX19yZXN0cmljdCBfX2RpcnAsCiAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50ICpfX3Jlc3RyaWN0IF9fZW50cnksCiAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkg
OwpleHRlcm4gaW50IHJlYWRkaXI2NF9yIChESVIgKl9fcmVzdHJpY3QgX19kaXJwLAogICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50NjQgKl9fcmVzdHJpY3QgX19lbnRyeSwKICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudDY0ICoqX19yZXN0cmljdCBfX3Jlc3Vs
dCkgOwoKCgoKZXh0ZXJuIHZvaWQgcmV3aW5kZGlyIChESVIgKl9fZGlycCkgOwoKCgoKCmV4dGVy
biB2b2lkIHNlZWtkaXIgKERJUiAqX19kaXJwLCBsb25nIGludCBfX3BvcykgOwoKCmV4dGVybiBs
b25nIGludCB0ZWxsZGlyIChESVIgKl9fZGlycCkgOwpleHRlcm4gaW50IGRpcmZkIChESVIgKl9f
ZGlycCkgOwoKZXh0ZXJuIGludCBzY2FuZGlyIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19k
aXIsCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudCAqKipfX3Jlc3RyaWN0IF9fbmFt
ZWxpc3QsCiAgICAgICAgICAgICAgICAgICAgaW50ICgqX19zZWxlY3RvcikgKF9fY29uc3Qgc3Ry
dWN0IGRpcmVudCAqKSwKICAgICAgICAgICAgICAgICAgICBpbnQgKCpfX2NtcCkgKF9fY29uc3Qg
dm9pZCAqLCBfX2NvbnN0IHZvaWQgKikpIDsKZXh0ZXJuIGludCBzY2FuZGlyNjQgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2RpciwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJl
bnQ2NCAqKipfX3Jlc3RyaWN0IF9fbmFtZWxpc3QsCiAgICAgICAgICAgICAgICAgICAgICBpbnQg
KCpfX3NlbGVjdG9yKSAoX19jb25zdCBzdHJ1Y3QgZGlyZW50NjQgKiksCiAgICAgICAgICAgICAg
ICAgICAgICBpbnQgKCpfX2NtcCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKikpIDsK
CmV4dGVybiBpbnQgYWxwaGFzb3J0IChfX2NvbnN0IHZvaWQgKl9fZTEsIF9fY29uc3Qgdm9pZCAq
X19lMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKZXh0ZXJuIGludCBhbHBoYXNv
cnQ2NCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCB2ZXJzaW9uc29ydCAoX19jb25zdCB2
b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CmV4dGVybiBpbnQgdmVyc2lvbnNvcnQ2NCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2Nv
bnN0IHZvaWQgKl9fZTIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CmV4dGVybiBf
X3NzaXplX3QgZ2V0ZGlyZW50cmllcyAoaW50IF9fZmQsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmJ5dGVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmX3QgKl9fcmVzdHJpY3QgX19iYXNlcCkgOwpl
eHRlcm4gX19zc2l6ZV90IGdldGRpcmVudHJpZXM2NCAoaW50IF9fZmQsIGNoYXIgKl9fcmVzdHJp
Y3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uYnl0
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgKl9fcmVzdHJp
Y3QgX19iYXNlcCkgOwoKCmV4dGVybiBESVIgKl9fb3BlbmRpciAoX19jb25zdCBjaGFyICpfX25h
bWUpOwpleHRlcm4gaW50IF9fY2xvc2VkaXIgKERJUiAqX19kaXJwKTsKZXh0ZXJuIHN0cnVjdCBk
aXJlbnQgKl9fcmVhZGRpciAoRElSICpfX2RpcnApOwpleHRlcm4gc3RydWN0IGRpcmVudDY0ICpf
X3JlYWRkaXI2NCAoRElSICpfX2RpcnApOwpleHRlcm4gaW50IF9fcmVhZGRpcl9yIChESVIgKl9f
ZGlycCwgc3RydWN0IGRpcmVudCAqX19lbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IGRpcmVudCAqKl9fcmVzdWx0KTsKZXh0ZXJuIGludCBfX3JlYWRkaXI2NF9yIChESVIgKl9f
ZGlycCwgc3RydWN0IGRpcmVudDY0ICpfX2VudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBkaXJlbnQ2NCAqKl9fcmVzdWx0KTsKZXh0ZXJuIGludCBfX3NjYW5kaXI2NCAoX19j
b25zdCBjaGFyICogX19kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQ2
NCAqKiogX19uYW1lbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqX19zZWxlY3Rv
cikgKF9fY29uc3Qgc3RydWN0IGRpcmVudDY0ICopLAogICAgICAgICAgICAgICAgICAgICAgICBp
bnQgKCpfX2NtcCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKikpOwpleHRlcm4gX19z
c2l6ZV90IF9fZ2V0ZGVudHMgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVz
KQogICAgIF9fYXR0cmlidXRlX18gKChyZWdwYXJtICgzKSwgc3RkY2FsbCkpOwpleHRlcm4gX19z
c2l6ZV90IF9fZ2V0ZGVudHM2NCAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0
ZXMpCiAgICAgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0gKDMpLCBzdGRjYWxsKSk7CmV4dGVybiBp
bnQgX19hbHBoYXNvcnQ2NCAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKICAgICBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKZXh0ZXJuIGludCBfX3ZlcnNpb25zb3J0NjQgKGNvbnN0
IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlu
dCB1aW50MTZfdDsKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OwoKCgpfX2V4dGVuc2lv
bl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50NjRfdDsKCgoKdHlwZWRlZiBz
aWduZWQgY2hhciBpbnRfbGVhc3Q4X3Q7CnR5cGVkZWYgc2hvcnQgaW50IGludF9sZWFzdDE2X3Q7
CnR5cGVkZWYgaW50IGludF9sZWFzdDMyX3Q7CgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25n
IGxvbmcgaW50IGludF9sZWFzdDY0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50X2xl
YXN0OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1aW50X2xlYXN0MTZfdDsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgdWludF9sZWFzdDMyX3Q7CgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1
bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRfbGVhc3Q2NF90OwoKdHlwZWRlZiBzaWduZWQgY2hh
ciBpbnRfZmFzdDhfdDsKCgp0eXBlZGVmIGludCBpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgaW50IGlu
dF9mYXN0MzJfdDsKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50X2Zhc3Q2
NF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9mYXN0OF90OwoKCgoKCnR5cGVkZWYg
dW5zaWduZWQgaW50IHVpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfZmFz
dDMyX3Q7Cl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRf
ZmFzdDY0X3Q7CnR5cGVkZWYgaW50IGludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVp
bnRwdHJfdDsKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50bWF4X3Q7Cl9f
ZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRtYXhfdDsKCgoK
ZXh0ZXJuIHZvaWQgKl9fbWVtY2NweSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3Jj
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pOwoKZXh0ZXJu
IHNpemVfdCBfX3N0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxl
bikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpfX3N0cnNl
cCAoY2hhciAqKl9fc3RyaW5ncCwgX19jb25zdCBjaGFyICpfX2RlbGltKTsKCmV4dGVybiBpbnQg
X19zdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAg
ICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNtcCAo
X19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4
dGVybiBpbnQgX19zdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq
X19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpfX3N0
cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRs
ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpfX3N0cmR1
cCAoX19jb25zdCBjaGFyICpfX3N0cmluZykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2Nf
XykpOwpleHRlcm4gY2hhciAqX19zdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXpl
X3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAq
X19yYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKQogICAgIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKl9fc3RyY2hybnVsIChfX2NvbnN0IGNoYXIg
Kl9fcywgaW50IF9fYykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB2
b2lkICpfX21lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQog
ICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHZvaWQgKl9fbWVtY2hyIChf
X2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgX19mZnMgKGludCBfX2kpIF9fYXR0cmlidXRlX18g
KChjb25zdCkpOwoKZXh0ZXJuIGNoYXIgKl9fc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFy
ICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKTsKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAq
X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19y
ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lk
ICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgOwoKCgoKCgpl
eHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9p
ZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVf
dCBfX24pCiAgICAgOwoKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9f
Yywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEs
IF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9f
Yywgc2l6ZV90IF9fbikKICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0
ZXJuIHZvaWQgKnJhd21lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQg
Kl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgpleHRlcm4gY2hhciAqc3RybmNw
eSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gY2hhciAqc3Ry
Y2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
c3JjKQogICAgIDsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz
dCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f
Y29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy
biBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNp
emVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBz
dHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19y
ZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBzdHJjb2xsX2wgKF9fY29u
c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybV9sIChjaGFy
ICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2xvY2FsZV90IF9fbCkgOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19j
b25zdCBjaGFyICpfX3MpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKCmV4dGVy
biBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAg
IF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19j
b25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0
ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNo
YXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJu
IHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVj
dCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNw
biAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25zdCBjaGFy
ICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9f
Y29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
CmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICA7CgoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAo
Y2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAqX19y
ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKCgoKCmV4dGVybiBj
aGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAq
X19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKCmV4dGVybiB2
b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2ts
ZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNpemVfdCBf
X25lZWRsZWxlbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHZv
aWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwpleHRl
cm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgoK
CgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFyICpf
X3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVtKSA7CgoKCgpleHRlcm4g
Y2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVm
bGVuKSA7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIDsK
CgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwg
c2l6ZV90IF9fbikgOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24p
IDsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpf
X3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy
biBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBp
bnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGlu
dCBfX2kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAo
bG9uZyBpbnQgX19sKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9f
IGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAq
X19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj
aGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3Qg
Y2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcF9sIChfX2Nv
bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9f
c3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
ZGVsaW0pIDsKCgoKCmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBf
X2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0
ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSA7CgoKZXh0ZXJuIGNoYXIgKl9fc3RwY3B5
IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj
KQogICAgIDsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgoKCmV4dGVybiBjaGFyICpfX3N0
cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKZXh0ZXJuIGNoYXIg
KnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGNo
YXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIDsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9p
ZCAqX19zLCBzaXplX3QgX19uKSA7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25z
dCBjaGFyICpfX2ZpbGVuYW1lKSA7CmV4dGVybiBfX2lubGluZSB2b2lkICpfX21lbWNweV9ieTQg
KHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgpleHRlcm4gX19pbmxpbmUgdm9pZCAqCl9fbWVt
Y3B5X2J5NCAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQp7
CiAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMCwgX19kMTsKICByZWdpc3RlciB2b2lk
ICpfX3RtcCA9IF9fZGVzdDsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCIxOlxuXHQiCiAg
ICAgIm1vdmwJKCUyKSwlMFxuXHQiCiAgICAgImxlYWwJNCglMiksJTJcblx0IgogICAgICJtb3Zs
CSUwLCglMSlcblx0IgogICAgICJsZWFsCTQoJTEpLCUxXG5cdCIKICAgICAiZGVjbAklM1xuXHQi
CiAgICAgImpuegkxYiIKICAgICA6ICI9JnIiIChfX2QwKSwgIj0mciIgKF9fdG1wKSwgIj0mciIg
KF9fc3JjKSwgIj0mciIgKF9fZDEpCiAgICAgOiAiMSIgKF9fdG1wKSwgIjIiIChfX3NyYyksICIz
IiAoX19uIC8gNCkKICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKICByZXR1cm4gX19kZXN0Owp9Cgpl
eHRlcm4gX19pbmxpbmUgdm9pZCAqX19tZW1jcHlfYnkyICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qg
dm9pZCAqX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X24pOwoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKgpfX21lbWNweV9ieTIgKHZvaWQgKl9fZGVzdCwg
X19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxv
bmcgaW50IF9fZDAsIF9fZDE7CiAgcmVnaXN0ZXIgdm9pZCAqX190bXAgPSBfX2Rlc3Q7CiAgX19h
c21fXyBfX3ZvbGF0aWxlX18KICAgICgic2hybAkkMSwlM1xuXHQiCiAgICAgImp6CTJmXG4iCiAg
ICAgIjE6XG5cdCIKICAgICAibW92bAkoJTIpLCUwXG5cdCIKICAgICAibGVhbAk0KCUyKSwlMlxu
XHQiCiAgICAgIm1vdmwJJTAsKCUxKVxuXHQiCiAgICAgImxlYWwJNCglMSksJTFcblx0IgogICAg
ICJkZWNsCSUzXG5cdCIKICAgICAiam56CTFiXG4iCiAgICAgIjI6XG5cdCIKICAgICAibW92dwko
JTIpLCV3MFxuXHQiCiAgICAgIm1vdncJJXcwLCglMSkiCiAgICAgOiAiPSZxIiAoX19kMCksICI9
JnIiIChfX3RtcCksICI9JnIiIChfX3NyYyksICI9JnIiIChfX2QxKQogICAgIDogIjEiIChfX3Rt
cCksICIyIiAoX19zcmMpLCAiMyIgKF9fbiAvIDIpCiAgICAgOiAibWVtb3J5IiwgImNjIik7CiAg
cmV0dXJuIF9fZGVzdDsKfQoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKl9fbWVtY3B5X2cgKHZvaWQg
Kl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBfX24pOwoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKgpfX21lbWNweV9nICh2
b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCnsKICByZWdpc3Rl
ciB1bnNpZ25lZCBsb25nIGludCBfX2QwLCBfX2QxLCBfX2QyOwogIHJlZ2lzdGVyIHZvaWQgKl9f
dG1wID0gX19kZXN0OwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoImNsZFxuXHQiCiAgICAg
InNocmwJJDEsJSVlY3hcblx0IgogICAgICJqbmMJMWZcblx0IgogICAgICJtb3ZzYlxuIgogICAg
ICIxOlxuXHQiCiAgICAgInNocmwJJDEsJSVlY3hcblx0IgogICAgICJqbmMJMmZcblx0IgogICAg
ICJtb3Zzd1xuIgogICAgICIyOlxuXHQiCiAgICAgInJlcDsgbW92c2wiCiAgICAgOiAiPSZjIiAo
X19kMCksICI9JkQiIChfX2QxKSwgIj0mUyIgKF9fZDIpLAogICAgICAgIj1tIiAoICooc3RydWN0
IHsgX19leHRlbnNpb25fXyBjaGFyIF9feFtfX25dOyB9ICopX19kZXN0KQogICAgIDogIjAiIChf
X24pLCAiMSIgKF9fdG1wKSwgIjIiIChfX3NyYyksCiAgICAgICAibSIgKCAqKHN0cnVjdCB7IF9f
ZXh0ZW5zaW9uX18gY2hhciBfX3hbX19uXTsgfSAqKV9fc3JjKQogICAgIDogImNjIik7CiAgcmV0
dXJuIF9fZGVzdDsKfQoKCgoKCmV4dGVybiBfX2lubGluZSB2b2lkICoKbWVtbW92ZSAodm9pZCAq
X19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQp7CiAgcmVnaXN0ZXIgdW5z
aWduZWQgbG9uZyBpbnQgX19kMCwgX19kMSwgX19kMjsKICByZWdpc3RlciB2b2lkICpfX3RtcCA9
IF9fZGVzdDsKICBpZiAoX19kZXN0IDwgX19zcmMpCiAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXwog
ICAgICAoImNsZFxuXHQiCiAgICAgICAicmVwOyBtb3ZzYiIKICAgICAgIDogIj0mYyIgKF9fZDAp
LCAiPSZTIiAoX19kMSksICI9JkQiIChfX2QyKSwKICAgICAgICAgIj1tIiAoICooc3RydWN0IHsg
X19leHRlbnNpb25fXyBjaGFyIF9feFtfX25dOyB9ICopX19kZXN0KQogICAgICAgOiAiMCIgKF9f
biksICIxIiAoX19zcmMpLCAiMiIgKF9fdG1wKSwKICAgICAgICAgIm0iICggKihzdHJ1Y3QgeyBf
X2V4dGVuc2lvbl9fIGNoYXIgX194W19fbl07IH0gKilfX3NyYykpOwogIGVsc2UKICAgIF9fYXNt
X18gX192b2xhdGlsZV9fCiAgICAgICgic3RkXG5cdCIKICAgICAgICJyZXA7IG1vdnNiXG5cdCIK
ICAgICAgICJjbGQiCiAgICAgICA6ICI9JmMiIChfX2QwKSwgIj0mUyIgKF9fZDEpLCAiPSZEIiAo
X19kMiksCiAgICAgICAgICI9bSIgKCAqKHN0cnVjdCB7IF9fZXh0ZW5zaW9uX18gY2hhciBfX3hb
X19uXTsgfSAqKV9fZGVzdCkKICAgICAgIDogIjAiIChfX24pLCAiMSIgKF9fbiAtIDEgKyAoX19j
b25zdCBjaGFyICopIF9fc3JjKSwKICAgICAgICAgIjIiIChfX24gLSAxICsgKGNoYXIgKikgX190
bXApLAogICAgICAgICAibSIgKCAqKHN0cnVjdCB7IF9fZXh0ZW5zaW9uX18gY2hhciBfX3hbX19u
XTsgfSAqKV9fc3JjKSk7CiAgcmV0dXJuIF9fZGVzdDsKfQoKCgoKCgoKZXh0ZXJuIF9faW5saW5l
IGludAptZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXpl
X3QgX19uKQp7CiAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMCwgX19kMSwgX19kMjsK
ICByZWdpc3RlciBpbnQgX19yZXM7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgiY2xkXG5c
dCIKICAgICAidGVzdGwgJTMsJTNcblx0IgogICAgICJyZXBlOyBjbXBzYlxuXHQiCiAgICAgImpl
CTFmXG5cdCIKICAgICAic2JibAklMCwlMFxuXHQiCiAgICAgIm9ybAkkMSwlMFxuIgogICAgICIx
OiIKICAgICA6ICI9JmEiIChfX3JlcyksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpLCAiPSZj
IiAoX19kMikKICAgICA6ICIwIiAoMCksICIxIiAoX19zMSksICIyIiAoX19zMiksICIzIiAoX19u
KSwKICAgICAgICJtIiAoICooc3RydWN0IHsgX19leHRlbnNpb25fXyBjaGFyIF9feFtfX25dOyB9
ICopX19zMSksCiAgICAgICAibSIgKCAqKHN0cnVjdCB7IF9fZXh0ZW5zaW9uX18gY2hhciBfX3hb
X19uXTsgfSAqKV9fczIpCiAgICAgOiAiY2MiKTsKICByZXR1cm4gX19yZXM7Cn0KZXh0ZXJuIF9f
aW5saW5lIHZvaWQgKl9fbWVtc2V0X2Njbl9ieTQgKHZvaWQgKl9fcywgdW5zaWduZWQgaW50IF9f
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pOwoK
ZXh0ZXJuIF9faW5saW5lIHZvaWQgKgpfX21lbXNldF9jY25fYnk0ICh2b2lkICpfX3MsIHVuc2ln
bmVkIGludCBfX2MsIHNpemVfdCBfX24pCnsKICByZWdpc3RlciB2b2lkICpfX3RtcCA9IF9fczsK
ICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwOwogIF9fYXNtX18gX192b2xhdGlsZV9f
CiAgICAoIjE6XG5cdCIKICAgICAibW92bAklMCwoJTEpXG5cdCIKICAgICAiYWRkbAkkNCwlMVxu
XHQiCiAgICAgImRlY2wJJTJcblx0IgogICAgICJqbnoJMWJcbiIKICAgICA6ICI9JnIiIChfX2Mp
LCAiPSZyIiAoX190bXApLCAiPSZyIiAoX19kMCksCiAgICAgICAiPW0iICggKihzdHJ1Y3QgeyBf
X2V4dGVuc2lvbl9fIGNoYXIgX194W19fbl07IH0gKilfX3MpCiAgICAgOiAiMCIgKCh1bnNpZ25l
ZCBpbnQpIF9fYyksICIxIiAoX190bXApLCAiMiIgKF9fbiAvIDQpCiAgICAgOiAiY2MiKTsKCiAg
cmV0dXJuIF9fczsKfQoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKl9fbWVtc2V0X2Njbl9ieTIgKHZv
aWQgKl9fcywgdW5zaWduZWQgaW50IF9fYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX24pOwoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKgpfX21lbXNldF9j
Y25fYnkyICh2b2lkICpfX3MsIHVuc2lnbmVkIGludCBfX2MsIHNpemVfdCBfX24pCnsKICByZWdp
c3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwLCBfX2QxOwogIHJlZ2lzdGVyIHZvaWQgKl9fdG1w
ID0gX19zOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoIjE6XHRtb3ZsCSUwLCglMSlcblx0
IgogICAgICJsZWFsCTQoJTEpLCUxXG5cdCIKICAgICAiZGVjbAklMlxuXHQiCiAgICAgImpuegkx
YlxuIgogICAgICJtb3Z3CSV3MCwoJTEpIgogICAgIDogIj0mcSIgKF9fZDApLCAiPSZyIiAoX190
bXApLCAiPSZyIiAoX19kMSksCiAgICAgICAiPW0iICggKihzdHJ1Y3QgeyBfX2V4dGVuc2lvbl9f
IGNoYXIgX194W19fbl07IH0gKilfX3MpCiAgICAgOiAiMCIgKCh1bnNpZ25lZCBpbnQpIF9fYyks
ICIxIiAoX190bXApLCAiMiIgKF9fbiAvIDQpCiAgICAgOiAiY2MiKTsKCiAgcmV0dXJuIF9fczsK
fQpleHRlcm4gX19pbmxpbmUgdm9pZCAqX19tZW1zZXRfZ2NuX2J5NCAodm9pZCAqX19zLCBpbnQg
X19jLCBzaXplX3QgX19uKTsKCmV4dGVybiBfX2lubGluZSB2b2lkICoKX19tZW1zZXRfZ2NuX2J5
NCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQp7CiAgcmVnaXN0ZXIgdm9pZCAqX190
bXAgPSBfX3M7CiAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMDsKICBfX2FzbV9fIF9f
dm9sYXRpbGVfXwogICAgKCJtb3ZiCSViMCwlaDBcbiIKICAgICAicHVzaHcJJXcwXG5cdCIKICAg
ICAic2hsbAkkMTYsJTBcblx0IgogICAgICJwb3B3CSV3MFxuIgogICAgICIxOlxuXHQiCiAgICAg
Im1vdmwJJTAsKCUxKVxuXHQiCiAgICAgImFkZGwJJDQsJTFcblx0IgogICAgICJkZWNsCSUyXG5c
dCIKICAgICAiam56CTFiXG4iCiAgICAgOiAiPSZxIiAoX19jKSwgIj0mciIgKF9fdG1wKSwgIj0m
ciIgKF9fZDApLAogICAgICAgIj1tIiAoICooc3RydWN0IHsgX19leHRlbnNpb25fXyBjaGFyIF9f
eFtfX25dOyB9ICopX19zKQogICAgIDogIjAiICgodW5zaWduZWQgaW50KSBfX2MpLCAiMSIgKF9f
dG1wKSwgIjIiIChfX24gLyA0KQogICAgIDogImNjIik7CiAgcmV0dXJuIF9fczsKfQoKZXh0ZXJu
IF9faW5saW5lIHZvaWQgKl9fbWVtc2V0X2djbl9ieTIgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6
ZV90IF9fbik7CgpleHRlcm4gX19pbmxpbmUgdm9pZCAqCl9fbWVtc2V0X2djbl9ieTIgKHZvaWQg
Kl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaW50
IF9fZDAsIF9fZDE7CiAgcmVnaXN0ZXIgdm9pZCAqX190bXAgPSBfX3M7CiAgX19hc21fXyBfX3Zv
bGF0aWxlX18KICAgICgibW92YgklYjAsJWgwXG5cdCIKICAgICAicHVzaHcJJXcwXG5cdCIKICAg
ICAic2hsbAkkMTYsJTBcblx0IgogICAgICJwb3B3CSV3MFxuIgogICAgICIxOlxuXHQiCiAgICAg
Im1vdmwJJTAsKCUxKVxuXHQiCiAgICAgImxlYWwJNCglMSksJTFcblx0IgogICAgICJkZWNsCSUy
XG5cdCIKICAgICAiam56CTFiXG4iCiAgICAgIm1vdncJJXcwLCglMSkiCiAgICAgOiAiPSZxIiAo
X19kMCksICI9JnIiIChfX3RtcCksICI9JnIiIChfX2QxKSwKICAgICAgICI9bSIgKCAqKHN0cnVj
dCB7IF9fZXh0ZW5zaW9uX18gY2hhciBfX3hbX19uXTsgfSAqKV9fcykKICAgICA6ICIwIiAoKHVu
c2lnbmVkIGludCkgX19jKSwgIjEiIChfX3RtcCksICIyIiAoX19uIC8gNCkKICAgICA6ICJjYyIp
OwogIHJldHVybiBfX3M7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgdm9pZCAqCm1lbWNociAoX19j
b25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCnsKICByZWdpc3RlciB1bnNpZ25l
ZCBsb25nIGludCBfX2QwOwoKCgogIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKl9fcmVzOwogIGlm
IChfX24gPT0gMCkKICAgIHJldHVybiAoKHZvaWQgKikwKTsKICBfX2FzbV9fIF9fdm9sYXRpbGVf
XwogICAgKCJjbGRcblx0IgogICAgICJyZXBuZTsgc2Nhc2Jcblx0IgogICAgICJqZQkxZlxuXHQi
CiAgICAgIm1vdmwJJDEsJTBcbiIKICAgICAiMToiCiAgICAgOiAiPUQiIChfX3JlcyksICI9JmMi
IChfX2QwKQogICAgIDogImEiIChfX2MpLCAiMCIgKF9fcyksICIxIiAoX19uKSwKICAgICAgICJt
IiAoICooc3RydWN0IHsgX19leHRlbnNpb25fXyBjaGFyIF9feFtfX25dOyB9ICopX19zKQogICAg
IDogImNjIik7CgogIHJldHVybiBfX3JlcyAtIDE7Cn0KCgoKCmV4dGVybiBfX2lubGluZSB2b2lk
ICpfX21lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKTsKCmV4
dGVybiBfX2lubGluZSB2b2lkICoKX19tZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9f
Yywgc2l6ZV90IF9fbikKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaW50IF9fZDA7CgoKCiAg
cmVnaXN0ZXIgdm9pZCAqX19yZXM7CiAgaWYgKF9fbiA9PSAwKQogICAgcmV0dXJuICgodm9pZCAq
KTApOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoInN0ZFxuXHQiCiAgICAgInJlcG5lOyBz
Y2FzYlxuXHQiCiAgICAgImplIDFmXG5cdCIKICAgICAib3JsICQtMSwlMFxuIgogICAgICIxOlx0
Y2xkIgogICAgIDogIj1EIiAoX19yZXMpLCAiPSZjIiAoX19kMCkKICAgICA6ICJhIiAoX19jKSwg
IjAiIChfX3MgKyBfX24gLSAxKSwgIjEiIChfX24pLAogICAgICAgIm0iICggKihzdHJ1Y3QgeyBf
X2V4dGVuc2lvbl9fIGNoYXIgX194W19fbl07IH0gKilfX3MpCiAgICAgOiAiY2MiKTsKCiAgcmV0
dXJuIF9fcmVzICsgMTsKfQoKCgoKCgoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKl9fcmF3bWVtY2hy
IChjb25zdCB2b2lkICpfX3MsIGludCBfX2MpOwoKCmV4dGVybiBfX2lubGluZSB2b2lkICoKX19y
YXdtZW1jaHIgKGNvbnN0IHZvaWQgKl9fcywgaW50IF9fYykKewogIHJlZ2lzdGVyIHVuc2lnbmVk
IGxvbmcgaW50IF9fZDA7CiAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqX19yZXM7CiAgX19hc21f
XyBfX3ZvbGF0aWxlX18KICAgICgiY2xkXG5cdCIKICAgICAicmVwbmU7IHNjYXNiXG5cdCIKICAg
ICA6ICI9RCIgKF9fcmVzKSwgIj0mYyIgKF9fZDApCiAgICAgOiAiYSIgKF9fYyksICIwIiAoX19z
KSwgIjEiICgweGZmZmZmZmZmKSwKICAgICAgICJtIiAoICooc3RydWN0IHsgY2hhciBfX3hbMHhm
ZmZmZmZmXTsgfSAqKV9fcykKICAgICA6ICJjYyIpOwogIHJldHVybiBfX3JlcyAtIDE7Cn0KCmV4
dGVybiBfX2lubGluZSB2b2lkICoKcmF3bWVtY2hyIChjb25zdCB2b2lkICpfX3MsIGludCBfX2Mp
CnsKICByZXR1cm4gX19yYXdtZW1jaHIgKF9fcywgX19jKTsKfQpleHRlcm4gX19pbmxpbmUgc2l6
ZV90IF9fc3RybGVuX2cgKF9fY29uc3QgY2hhciAqX19zdHIpOwoKZXh0ZXJuIF9faW5saW5lIHNp
emVfdApfX3N0cmxlbl9nIChfX2NvbnN0IGNoYXIgKl9fc3RyKQp7CiAgcmVnaXN0ZXIgY2hhciBf
X2R1bW15OwogIHJlZ2lzdGVyIF9fY29uc3QgY2hhciAqX190bXAgPSBfX3N0cjsKICBfX2FzbV9f
IF9fdm9sYXRpbGVfXwogICAgKCIxOlxuXHQiCiAgICAgIm1vdmIJKCUwKSwlYjFcblx0IgogICAg
ICJsZWFsCTEoJTApLCUwXG5cdCIKICAgICAidGVzdGIJJWIxLCViMVxuXHQiCiAgICAgImpuZQkx
YiIKICAgICA6ICI9ciIgKF9fdG1wKSwgIj0mcSIgKF9fZHVtbXkpCiAgICAgOiAiMCIgKF9fc3Ry
KSwKICAgICAgICJtIiAoICooc3RydWN0IHsgY2hhciBfX3hbMHhmZmZmZmZmXTsgfSAqKV9fc3Ry
KQogICAgIDogImNjIiApOwogIHJldHVybiBfX3RtcCAtIF9fc3RyIC0gMTsKfQpleHRlcm4gX19p
bmxpbmUgY2hhciAqX19zdHJjcHlfZyAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3Jj
KTsKCmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJjcHlfZyAoY2hhciAqX19kZXN0LCBfX2Nv
bnN0IGNoYXIgKl9fc3JjKQp7CiAgcmVnaXN0ZXIgY2hhciAqX190bXAgPSBfX2Rlc3Q7CiAgcmVn
aXN0ZXIgY2hhciBfX2R1bW15OwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoCiAgICAgIjE6
XG5cdCIKICAgICAibW92YgkoJTApLCViMlxuXHQiCiAgICAgImxlYWwJMSglMCksJTBcblx0Igog
ICAgICJtb3ZiCSViMiwoJTEpXG5cdCIKICAgICAibGVhbAkxKCUxKSwlMVxuXHQiCiAgICAgInRl
c3RiCSViMiwlYjJcblx0IgogICAgICJqbmUJMWIiCiAgICAgOiAiPSZyIiAoX19zcmMpLCAiPSZy
IiAoX190bXApLCAiPSZxIiAoX19kdW1teSkKICAgICA6ICIwIiAoX19zcmMpLCAiMSIgKF9fdG1w
KSwKICAgICAgICJtIiAoICooc3RydWN0IHsgY2hhciBfX3hbMHhmZmZmZmZmXTsgfSAqKV9fZGVz
dCkKICAgICA6ICJjYyIpOwogIHJldHVybiBfX2Rlc3Q7Cn0KZXh0ZXJuIF9faW5saW5lIGNoYXIg
Kl9fbWVtcGNweV9ieTQgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NyY2xlbik7CgpleHRlcm4g
X19pbmxpbmUgY2hhciAqCl9fbWVtcGNweV9ieTQgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFy
ICpfX3NyYywgc2l6ZV90IF9fc3JjbGVuKQp7CiAgcmVnaXN0ZXIgY2hhciAqX190bXAgPSBfX2Rl
c3Q7CiAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMCwgX19kMTsKICBfX2FzbV9fIF9f
dm9sYXRpbGVfXwogICAgKCIxOlxuXHQiCiAgICAgIm1vdmwJKCUyKSwlMFxuXHQiCiAgICAgImxl
YWwJNCglMiksJTJcblx0IgogICAgICJtb3ZsCSUwLCglMSlcblx0IgogICAgICJsZWFsCTQoJTEp
LCUxXG5cdCIKICAgICAiZGVjbAklM1xuXHQiCiAgICAgImpuegkxYiIKICAgICA6ICI9JnIiIChf
X2QwKSwgIj1yIiAoX190bXApLCAiPSZyIiAoX19zcmMpLCAiPSZyIiAoX19kMSkKICAgICA6ICIx
IiAoX190bXApLCAiMiIgKF9fc3JjKSwgIjMiIChfX3NyY2xlbiAvIDQpCiAgICAgOiAibWVtb3J5
IiwgImNjIik7CiAgcmV0dXJuIF9fdG1wOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19tZW1w
Y3B5X2J5MiAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3JjbGVuKTsKCmV4dGVybiBfX2lubGlu
ZSBjaGFyICoKX19tZW1wY3B5X2J5MiAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3Jj
LCBzaXplX3QgX19zcmNsZW4pCnsKICByZWdpc3RlciBjaGFyICpfX3RtcCA9IF9fZGVzdDsKICBy
ZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwLCBfX2QxOwogIF9fYXNtX18gX192b2xhdGls
ZV9fCiAgICAoInNocmwJJDEsJTNcblx0IgogICAgICJqegkyZlxuIgogICAgICIxOlxuXHQiCiAg
ICAgIm1vdmwJKCUyKSwlMFxuXHQiCiAgICAgImxlYWwJNCglMiksJTJcblx0IgogICAgICJtb3Zs
CSUwLCglMSlcblx0IgogICAgICJsZWFsCTQoJTEpLCUxXG5cdCIKICAgICAiZGVjbAklM1xuXHQi
CiAgICAgImpuegkxYlxuIgogICAgICIyOlxuXHQiCiAgICAgIm1vdncJKCUyKSwldzBcblx0Igog
ICAgICJtb3Z3CSV3MCwoJTEpIgogICAgIDogIj0mcSIgKF9fZDApLCAiPXIiIChfX3RtcCksICI9
JnIiIChfX3NyYyksICI9JnIiIChfX2QxKSwKICAgICAgICI9bSIgKCAqKHN0cnVjdCB7IF9fZXh0
ZW5zaW9uX18gY2hhciBfX3hbX19zcmNsZW5dOyB9ICopX19kZXN0KQogICAgIDogIjEiIChfX3Rt
cCksICIyIiAoX19zcmMpLCAiMyIgKF9fc3JjbGVuIC8gMiksCiAgICAgICAibSIgKCAqKHN0cnVj
dCB7IF9fZXh0ZW5zaW9uX18gY2hhciBfX3hbX19zcmNsZW5dOyB9ICopX19zcmMpCiAgICAgOiAi
Y2MiKTsKICByZXR1cm4gX190bXAgKyAyOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19tZW1w
Y3B5X2J5biAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3JjbGVuKTsKCmV4dGVybiBfX2lubGlu
ZSBjaGFyICoKX19tZW1wY3B5X2J5biAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3Jj
LCBzaXplX3QgX19zcmNsZW4pCnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fZDAsIF9fZDE7
CiAgcmVnaXN0ZXIgY2hhciAqX190bXAgPSBfX2Rlc3Q7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18K
ICAgICgiY2xkXG5cdCIKICAgICAic2hybAkkMSwlJWVjeFxuXHQiCiAgICAgImpuYwkxZlxuXHQi
CiAgICAgIm1vdnNiXG4iCiAgICAgIjE6XG5cdCIKICAgICAic2hybAkkMSwlJWVjeFxuXHQiCiAg
ICAgImpuYwkyZlxuXHQiCiAgICAgIm1vdnN3XG4iCiAgICAgIjI6XG5cdCIKICAgICAicmVwOyBt
b3ZzbCIKICAgICA6ICI9RCIgKF9fdG1wKSwgIj0mYyIgKF9fZDApLCAiPSZTIiAoX19kMSksCiAg
ICAgICAiPW0iICggKihzdHJ1Y3QgeyBfX2V4dGVuc2lvbl9fIGNoYXIgX194W19fc3JjbGVuXTsg
fSAqKV9fZGVzdCkKICAgICA6ICIwIiAoX190bXApLCAiMSIgKF9fc3JjbGVuKSwgIjIiIChfX3Ny
YyksCiAgICAgICAibSIgKCAqKHN0cnVjdCB7IF9fZXh0ZW5zaW9uX18gY2hhciBfX3hbX19zcmNs
ZW5dOyB9ICopX19zcmMpCiAgICAgOiAiY2MiKTsKICByZXR1cm4gX190bXA7Cn0KCmV4dGVybiBf
X2lubGluZSBjaGFyICpfX3N0cGNweV9nIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19z
cmMpOwoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cGNweV9nIChjaGFyICpfX2Rlc3QsIF9f
Y29uc3QgY2hhciAqX19zcmMpCnsKICByZWdpc3RlciBjaGFyICpfX3RtcCA9IF9fZGVzdDsKICBy
ZWdpc3RlciBjaGFyIF9fZHVtbXk7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgKICAgICAi
MTpcblx0IgogICAgICJtb3ZiCSglMCksJWIyXG5cdCIKICAgICAibGVhbAkxKCUwKSwlMFxuXHQi
CiAgICAgIm1vdmIJJWIyLCglMSlcblx0IgogICAgICJsZWFsCTEoJTEpLCUxXG5cdCIKICAgICAi
dGVzdGIJJWIyLCViMlxuXHQiCiAgICAgImpuZQkxYiIKICAgICA6ICI9JnIiIChfX3NyYyksICI9
ciIgKF9fdG1wKSwgIj0mcSIgKF9fZHVtbXkpLAogICAgICAgIj1tIiAoICooc3RydWN0IHsgY2hh
ciBfX3hbMHhmZmZmZmZmXTsgfSAqKV9fZGVzdCkKICAgICA6ICIwIiAoX19zcmMpLCAiMSIgKF9f
dG1wKSwKICAgICAgICJtIiAoICooc3RydWN0IHsgY2hhciBfX3hbMHhmZmZmZmZmXTsgfSAqKV9f
c3JjKQogICAgIDogImNjIik7CiAgcmV0dXJuIF9fdG1wIC0gMTsKfQpleHRlcm4gX19pbmxpbmUg
Y2hhciAqX19zdHJuY3B5X2J5NCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgX19zcmNbXSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NyY2xlbiwgc2l6
ZV90IF9fbik7CgpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RybmNweV9ieTQgKGNoYXIgKl9f
ZGVzdCwgX19jb25zdCBjaGFyIF9fc3JjW10sIHNpemVfdCBfX3NyY2xlbiwgc2l6ZV90IF9fbikK
ewogIHJlZ2lzdGVyIGNoYXIgKl9fdG1wID0gX19kZXN0OwogIHJlZ2lzdGVyIGludCBfX2R1bW15
MSwgX19kdW1teTI7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgiMTpcblx0IgogICAgICJt
b3ZsCSglMiksJTBcblx0IgogICAgICJsZWFsCTQoJTIpLCUyXG5cdCIKICAgICAibW92bAklMCwo
JTEpXG5cdCIKICAgICAibGVhbAk0KCUxKSwlMVxuXHQiCiAgICAgImRlY2wJJTNcblx0IgogICAg
ICJqbnoJMWIiCiAgICAgOiAiPSZyIiAoX19kdW1teTEpLCAiPXIiIChfX3RtcCksICI9JnIiIChf
X3NyYyksICI9JnIiIChfX2R1bW15MiksCiAgICAgICAiPW0iICggKihzdHJ1Y3QgeyBfX2V4dGVu
c2lvbl9fIGNoYXIgX194W19fc3JjbGVuXTsgfSAqKV9fZGVzdCkKICAgICA6ICIxIiAoX190bXAp
LCAiMiIgKF9fc3JjKSwgIjMiIChfX3NyY2xlbiAvIDQpLAogICAgICAgIm0iICggKihzdHJ1Y3Qg
eyBfX2V4dGVuc2lvbl9fIGNoYXIgX194W19fc3JjbGVuXTsgfSAqKV9fc3JjKQogICAgIDogImNj
Iik7CiAgKHZvaWQpIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uIC0g
X19zcmNsZW4pICYmIChfX24gLSBfX3NyY2xlbikgPD0gMTYgPyAoKF9fbiAtIF9fc3JjbGVuKSA9
PSAxID8gKHsgdm9pZCAqX19zID0gKF9fdG1wKTsgKigodW5zaWduZWQgY2hhciAqKSBfX3MpID0g
KHVuc2lnbmVkIGNoYXIpICgnXDAnKTsgX19zOyB9KSA6ICh7IHZvaWQgKl9fcyA9IChfX3RtcCk7
IHVuaW9uIHsgdW5zaWduZWQgaW50IF9fdWk7IHVuc2lnbmVkIHNob3J0IGludCBfX3VzaTsgdW5z
aWduZWQgY2hhciBfX3VjOyB9ICpfX3UgPSBfX3M7IHVuc2lnbmVkIGludCBfX2MgPSAoKHVuc2ln
bmVkIGludCkgKCh1bnNpZ25lZCBjaGFyKSAoJ1wwJykpKSAqIDB4MDEwMTAxMDE7IGlmIChfX24g
LSBfX3NyY2xlbiA9PSAzIHx8IF9fbiAtIF9fc3JjbGVuID49IDUpIF9fYXNtX18gX192b2xhdGls
ZV9fICgiIiA6ICI9ciIgKF9fYykgOiAiMCIgKF9fYykpOyBzd2l0Y2ggKF9fbiAtIF9fc3JjbGVu
KSB7IGNhc2UgMTU6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQg
KikgX191ICsgNCk7IGNhc2UgMTE6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25f
XyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgNzogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4
dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAzOiBfX3UtPl9fdXNpID0gKHVuc2ln
bmVkIHNob3J0IGludCkgX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAy
KTsgX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTQ6IF9fdS0+
X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2Ug
MTA6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsg
NCk7IGNhc2UgNjogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAq
KSBfX3UgKyA0KTsgY2FzZSAyOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19j
OyBicmVhazsgY2FzZSAxMzogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgo
dm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA5OiBfX3UtPl9fdWkgPSBfX2M7IF9fdSA9IF9fZXh0ZW5z
aW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDU6IF9fdS0+X191aSA9IF9fYzsgX191ID0g
X19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTogX191LT5fX3VjID0gKHVu
c2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTY6IF9fdS0+X191aSA9IF9fYzsgX191ID0g
X19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTI6IF9fdS0+X191aSA9IF9f
YzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgODogX191LT5f
X3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA0
OiBfX3UtPl9fdWkgPSBfX2M7IGNhc2UgMDogYnJlYWs7IH0gX19zOyB9KSkgOiAoX19idWlsdGlu
X2NvbnN0YW50X3AgKCdcMCcpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChfX24gLSBfX3NyY2xl
bikgPyAoKChfX24gLSBfX3NyY2xlbikgJSA0ID09IDApID8gX19tZW1zZXRfY2NuX2J5NCAoX190
bXAsICgodW5zaWduZWQgaW50KSAoKHVuc2lnbmVkIGNoYXIpICgnXDAnKSkpICogMHgwMTAxMDEw
MSwgX19uIC0gX19zcmNsZW4pIDogKCgoX19uIC0gX19zcmNsZW4pICUgMiA9PSAwKSA/IF9fbWVt
c2V0X2Njbl9ieTIgKF9fdG1wLCAoKHVuc2lnbmVkIGludCkgKCh1bnNpZ25lZCBjaGFyKSAoJ1ww
JykpKSAqIDB4MDEwMTAxMDEsIF9fbiAtIF9fc3JjbGVuKSA6IG1lbXNldCAoX190bXAsICdcMCcs
IF9fbiAtIF9fc3JjbGVuKSkpIDogbWVtc2V0IChfX3RtcCwgJ1wwJywgX19uIC0gX19zcmNsZW4p
KSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uIC0gX19zcmNsZW4pID8gKCgoX19uIC0gX19z
cmNsZW4pICUgNCA9PSAwKSA/IF9fbWVtc2V0X2djbl9ieTQgKF9fdG1wLCAnXDAnLCBfX24gLSBf
X3NyY2xlbikgOiAoKChfX24gLSBfX3NyY2xlbikgJSAyID09IDApID8gX19tZW1zZXRfZ2NuX2J5
MiAoX190bXAsICdcMCcsIF9fbiAtIF9fc3JjbGVuKSA6IG1lbXNldCAoX190bXAsICdcMCcsIF9f
biAtIF9fc3JjbGVuKSkpIDogbWVtc2V0IChfX3RtcCwgJ1wwJywgX19uIC0gX19zcmNsZW4pKSkp
KTsKICByZXR1cm4gX19kZXN0Owp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJuY3B5X2J5
MiAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgX19zcmNbXSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NyY2xlbiwgc2l6ZV90IF9fbik7CgpleHRlcm4g
X19pbmxpbmUgY2hhciAqCl9fc3RybmNweV9ieTIgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFy
IF9fc3JjW10sIHNpemVfdCBfX3NyY2xlbiwgc2l6ZV90IF9fbikKewogIHJlZ2lzdGVyIGNoYXIg
Kl9fdG1wID0gX19kZXN0OwogIHJlZ2lzdGVyIGludCBfX2R1bW15MSwgX19kdW1teTI7CiAgX19h
c21fXyBfX3ZvbGF0aWxlX18KICAgICgic2hybAkkMSwlM1xuXHQiCiAgICAgImp6CTJmXG4iCiAg
ICAgIjE6XG5cdCIKICAgICAibW92bAkoJTIpLCUwXG5cdCIKICAgICAibGVhbAk0KCUyKSwlMlxu
XHQiCiAgICAgIm1vdmwJJTAsKCUxKVxuXHQiCiAgICAgImxlYWwJNCglMSksJTFcblx0IgogICAg
ICJkZWNsCSUzXG5cdCIKICAgICAiam56CTFiXG4iCiAgICAgIjI6XG5cdCIKICAgICAibW92dwko
JTIpLCV3MFxuXHQiCiAgICAgIm1vdncJJXcwLCglMSlcblx0IgogICAgIDogIj0mcSIgKF9fZHVt
bXkxKSwgIj1yIiAoX190bXApLCAiPSZyIiAoX19zcmMpLCAiPSZyIiAoX19kdW1teTIpLAogICAg
ICAgIj1tIiAoICooc3RydWN0IHsgX19leHRlbnNpb25fXyBjaGFyIF9feFtfX3NyY2xlbl07IH0g
KilfX2Rlc3QpCiAgICAgOiAiMSIgKF9fdG1wKSwgIjIiIChfX3NyYyksICIzIiAoX19zcmNsZW4g
LyAyKSwKICAgICAgICJtIiAoICooc3RydWN0IHsgX19leHRlbnNpb25fXyBjaGFyIF9feFtfX3Ny
Y2xlbl07IH0gKilfX3NyYykKICAgICA6ICJjYyIpOwogICh2b2lkKSAoX19leHRlbnNpb25fXyAo
X19idWlsdGluX2NvbnN0YW50X3AgKF9fbiAtIF9fc3JjbGVuKSAmJiAoX19uIC0gX19zcmNsZW4p
IDw9IDE2ID8gKChfX24gLSBfX3NyY2xlbikgPT0gMSA/ICh7IHZvaWQgKl9fcyA9IChfX3RtcCAr
IDIpOyAqKCh1bnNpZ25lZCBjaGFyICopIF9fcykgPSAodW5zaWduZWQgY2hhcikgKCdcMCcpOyBf
X3M7IH0pIDogKHsgdm9pZCAqX19zID0gKF9fdG1wICsgMik7IHVuaW9uIHsgdW5zaWduZWQgaW50
IF9fdWk7IHVuc2lnbmVkIHNob3J0IGludCBfX3VzaTsgdW5zaWduZWQgY2hhciBfX3VjOyB9ICpf
X3UgPSBfX3M7IHVuc2lnbmVkIGludCBfX2MgPSAoKHVuc2lnbmVkIGludCkgKCh1bnNpZ25lZCBj
aGFyKSAoJ1wwJykpKSAqIDB4MDEwMTAxMDE7IGlmIChfX24gLSBfX3NyY2xlbiA9PSAzIHx8IF9f
biAtIF9fc3JjbGVuID49IDUpIF9fYXNtX18gX192b2xhdGlsZV9fICgiIiA6ICI9ciIgKF9fYykg
OiAiMCIgKF9fYykpOyBzd2l0Y2ggKF9fbiAtIF9fc3JjbGVuKSB7IGNhc2UgMTU6IF9fdS0+X191
aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTE6
IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7
IGNhc2UgNzogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBf
X3UgKyA0KTsgY2FzZSAzOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jOyBf
X3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAyKTsgX191LT5fX3VjID0gKHVuc2ln
bmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTQ6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19l
eHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTA6IF9fdS0+X191aSA9IF9fYzsg
X191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgNjogX191LT5fX3Vp
ID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAyOiBf
X3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jOyBicmVhazsgY2FzZSAxMzogX191
LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2Fz
ZSA5OiBfX3UtPl9fdWkgPSBfX2M7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSAr
IDQpOyBjYXNlIDU6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQg
KikgX191ICsgNCk7IGNhc2UgMTogX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJl
YWs7IGNhc2UgMTY6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQg
KikgX191ICsgNCk7IGNhc2UgMTI6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25f
XyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgODogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4
dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA0OiBfX3UtPl9fdWkgPSBfX2M7IGNh
c2UgMDogYnJlYWs7IH0gX19zOyB9KSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCdcMCcpID8g
KF9fYnVpbHRpbl9jb25zdGFudF9wIChfX24gLSBfX3NyY2xlbikgPyAoKChfX24gLSBfX3NyY2xl
bikgJSA0ID09IDApID8gX19tZW1zZXRfY2NuX2J5NCAoX190bXAgKyAyLCAoKHVuc2lnbmVkIGlu
dCkgKCh1bnNpZ25lZCBjaGFyKSAoJ1wwJykpKSAqIDB4MDEwMTAxMDEsIF9fbiAtIF9fc3JjbGVu
KSA6ICgoKF9fbiAtIF9fc3JjbGVuKSAlIDIgPT0gMCkgPyBfX21lbXNldF9jY25fYnkyIChfX3Rt
cCArIDIsICgodW5zaWduZWQgaW50KSAoKHVuc2lnbmVkIGNoYXIpICgnXDAnKSkpICogMHgwMTAx
MDEwMSwgX19uIC0gX19zcmNsZW4pIDogbWVtc2V0IChfX3RtcCArIDIsICdcMCcsIF9fbiAtIF9f
c3JjbGVuKSkpIDogbWVtc2V0IChfX3RtcCArIDIsICdcMCcsIF9fbiAtIF9fc3JjbGVuKSkgOiAo
X19idWlsdGluX2NvbnN0YW50X3AgKF9fbiAtIF9fc3JjbGVuKSA/ICgoKF9fbiAtIF9fc3JjbGVu
KSAlIDQgPT0gMCkgPyBfX21lbXNldF9nY25fYnk0IChfX3RtcCArIDIsICdcMCcsIF9fbiAtIF9f
c3JjbGVuKSA6ICgoKF9fbiAtIF9fc3JjbGVuKSAlIDIgPT0gMCkgPyBfX21lbXNldF9nY25fYnky
IChfX3RtcCArIDIsICdcMCcsIF9fbiAtIF9fc3JjbGVuKSA6IG1lbXNldCAoX190bXAgKyAyLCAn
XDAnLCBfX24gLSBfX3NyY2xlbikpKSA6IG1lbXNldCAoX190bXAgKyAyLCAnXDAnLCBfX24gLSBf
X3NyY2xlbikpKSkpOwogIHJldHVybiBfX2Rlc3Q7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpf
X3N0cm5jcHlfYnluIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciBfX3NyY1tdLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3JjbGVuLCBzaXplX3QgX19u
KTsKCmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJuY3B5X2J5biAoY2hhciAqX19kZXN0LCBf
X2NvbnN0IGNoYXIgX19zcmNbXSwgc2l6ZV90IF9fc3JjbGVuLCBzaXplX3QgX19uKQp7CiAgcmVn
aXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMCwgX19kMTsKICByZWdpc3RlciBjaGFyICpfX3Rt
cCA9IF9fZGVzdDsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCJjbGRcblx0IgogICAgICJz
aHJsCSQxLCUxXG5cdCIKICAgICAiam5jCTFmXG5cdCIKICAgICAibW92c2JcbiIKICAgICAiMTpc
blx0IgogICAgICJzaHJsCSQxLCUxXG5cdCIKICAgICAiam5jCTJmXG5cdCIKICAgICAibW92c3dc
biIKICAgICAiMjpcblx0IgogICAgICJyZXA7IG1vdnNsIgogICAgIDogIj1EIiAoX190bXApLCAi
PSZjIiAoX19kMCksICI9JlMiIChfX2QxKSwKICAgICAgICI9bSIgKCAqKHN0cnVjdCB7IF9fZXh0
ZW5zaW9uX18gY2hhciBfX3hbX19zcmNsZW5dOyB9ICopX19kZXN0KQogICAgIDogIjEiIChfX3Ny
Y2xlbiksICIwIiAoX190bXApLCIyIiAoX19zcmMpLAogICAgICAgIm0iICggKihzdHJ1Y3QgeyBf
X2V4dGVuc2lvbl9fIGNoYXIgX194W19fc3JjbGVuXTsgfSAqKV9fc3JjKQogICAgIDogImNjIik7
CiAgKHZvaWQpIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uIC0gX19z
cmNsZW4pICYmIChfX24gLSBfX3NyY2xlbikgPD0gMTYgPyAoKF9fbiAtIF9fc3JjbGVuKSA9PSAx
ID8gKHsgdm9pZCAqX19zID0gKF9fdG1wKTsgKigodW5zaWduZWQgY2hhciAqKSBfX3MpID0gKHVu
c2lnbmVkIGNoYXIpICgnXDAnKTsgX19zOyB9KSA6ICh7IHZvaWQgKl9fcyA9IChfX3RtcCk7IHVu
aW9uIHsgdW5zaWduZWQgaW50IF9fdWk7IHVuc2lnbmVkIHNob3J0IGludCBfX3VzaTsgdW5zaWdu
ZWQgY2hhciBfX3VjOyB9ICpfX3UgPSBfX3M7IHVuc2lnbmVkIGludCBfX2MgPSAoKHVuc2lnbmVk
IGludCkgKCh1bnNpZ25lZCBjaGFyKSAoJ1wwJykpKSAqIDB4MDEwMTAxMDE7IGlmIChfX24gLSBf
X3NyY2xlbiA9PSAzIHx8IF9fbiAtIF9fc3JjbGVuID49IDUpIF9fYXNtX18gX192b2xhdGlsZV9f
ICgiIiA6ICI9ciIgKF9fYykgOiAiMCIgKF9fYykpOyBzd2l0Y2ggKF9fbiAtIF9fc3JjbGVuKSB7
IGNhc2UgMTU6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikg
X191ICsgNCk7IGNhc2UgMTE6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAo
KHZvaWQgKikgX191ICsgNCk7IGNhc2UgNzogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVu
c2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAzOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVk
IHNob3J0IGludCkgX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAyKTsg
X191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTQ6IF9fdS0+X191
aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTA6
IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7
IGNhc2UgNjogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBf
X3UgKyA0KTsgY2FzZSAyOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jOyBi
cmVhazsgY2FzZSAxMzogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9p
ZCAqKSBfX3UgKyA0KTsgY2FzZSA5OiBfX3UtPl9fdWkgPSBfX2M7IF9fdSA9IF9fZXh0ZW5zaW9u
X18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDU6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19l
eHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTogX191LT5fX3VjID0gKHVuc2ln
bmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTY6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19l
eHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTI6IF9fdS0+X191aSA9IF9fYzsg
X191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgODogX191LT5fX3Vp
ID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA0OiBf
X3UtPl9fdWkgPSBfX2M7IGNhc2UgMDogYnJlYWs7IH0gX19zOyB9KSkgOiAoX19idWlsdGluX2Nv
bnN0YW50X3AgKCdcMCcpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChfX24gLSBfX3NyY2xlbikg
PyAoKChfX24gLSBfX3NyY2xlbikgJSA0ID09IDApID8gX19tZW1zZXRfY2NuX2J5NCAoX190bXAs
ICgodW5zaWduZWQgaW50KSAoKHVuc2lnbmVkIGNoYXIpICgnXDAnKSkpICogMHgwMTAxMDEwMSwg
X19uIC0gX19zcmNsZW4pIDogKCgoX19uIC0gX19zcmNsZW4pICUgMiA9PSAwKSA/IF9fbWVtc2V0
X2Njbl9ieTIgKF9fdG1wLCAoKHVuc2lnbmVkIGludCkgKCh1bnNpZ25lZCBjaGFyKSAoJ1wwJykp
KSAqIDB4MDEwMTAxMDEsIF9fbiAtIF9fc3JjbGVuKSA6IG1lbXNldCAoX190bXAsICdcMCcsIF9f
biAtIF9fc3JjbGVuKSkpIDogbWVtc2V0IChfX3RtcCwgJ1wwJywgX19uIC0gX19zcmNsZW4pKSA6
IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uIC0gX19zcmNsZW4pID8gKCgoX19uIC0gX19zcmNs
ZW4pICUgNCA9PSAwKSA/IF9fbWVtc2V0X2djbl9ieTQgKF9fdG1wLCAnXDAnLCBfX24gLSBfX3Ny
Y2xlbikgOiAoKChfX24gLSBfX3NyY2xlbikgJSAyID09IDApID8gX19tZW1zZXRfZ2NuX2J5MiAo
X190bXAsICdcMCcsIF9fbiAtIF9fc3JjbGVuKSA6IG1lbXNldCAoX190bXAsICdcMCcsIF9fbiAt
IF9fc3JjbGVuKSkpIDogbWVtc2V0IChfX3RtcCwgJ1wwJywgX19uIC0gX19zcmNsZW4pKSkpKTsK
ICByZXR1cm4gX19kZXN0Owp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJuY3B5X2dnIChj
aGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cm5j
cHlfZ2cgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbikKewog
IHJlZ2lzdGVyIGNoYXIgKl9fdG1wID0gX19kZXN0OwogIHJlZ2lzdGVyIGNoYXIgX19kdW1teTsK
ICBpZiAoX19uID4gMCkKICAgIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAgICgiMTpcblx0Igog
ICAgICAgIm1vdmIJKCUwKSwlMlxuXHQiCiAgICAgICAiaW5jbAklMFxuXHQiCiAgICAgICAibW92
YgklMiwoJTEpXG5cdCIKICAgICAgICJpbmNsCSUxXG5cdCIKICAgICAgICJkZWNsCSUzXG5cdCIK
ICAgICAgICJqZQkzZlxuXHQiCiAgICAgICAidGVzdGIJJTIsJTJcblx0IgogICAgICAgImpuZQkx
YlxuXHQiCiAgICAgICAiMjpcblx0IgogICAgICAgIm1vdmIJJTIsKCUxKVxuXHQiCiAgICAgICAi
aW5jbAklMVxuXHQiCiAgICAgICAiZGVjbAklM1xuXHQiCiAgICAgICAiam5lCTJiXG5cdCIKICAg
ICAgICIzOiIKICAgICAgIDogIj0mciIgKF9fc3JjKSwgIj0mciIgKF9fdG1wKSwgIj0mcSIgKF9f
ZHVtbXkpLCAiPSZyIiAoX19uKQogICAgICAgOiAiMCIgKF9fc3JjKSwgIjEiIChfX3RtcCksICIz
IiAoX19uKQogICAgICAgOiAibWVtb3J5IiwgImNjIik7CgogIHJldHVybiBfX2Rlc3Q7Cn0KZXh0
ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RyY2F0X2MgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFy
IF9fc3JjW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zcmNs
ZW4pOwoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cmNhdF9jIChjaGFyICpfX2Rlc3QsIF9f
Y29uc3QgY2hhciBfX3NyY1tdLCBzaXplX3QgX19zcmNsZW4pCnsKICByZWdpc3RlciBjaGFyICpf
X3RtcCA9IF9fZGVzdCAtIDE7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgiMTpcblx0Igog
ICAgICJpbmNsCSUwXG5cdCIKICAgICAiY21wYgkkMCwoJTApXG5cdCIKICAgICAiam5lCTFiXG4i
CiAgICAgOiAiPXIiIChfX3RtcCksCiAgICAgICAiPW0iICggKihzdHJ1Y3QgeyBjaGFyIF9feFsw
eGZmZmZmZmZdOyB9ICopX19kZXN0KQogICAgIDogIjAiIChfX3RtcCksCiAgICAgICAibSIgKCAq
KHN0cnVjdCB7IF9fZXh0ZW5zaW9uX18gY2hhciBfX3hbX19zcmNsZW5dOyB9ICopX19zcmMpCiAg
ICAgOiAiY2MiKTsKCiAgKHZvaWQpIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRf
cCAoX19zcmNsZW4pID8gKChfX3NyY2xlbikgPT0gMCA/IChfX3RtcCkgOiAoKChfX3NyY2xlbikg
JSA0ID09IDApID8gX19tZW1jcHlfYnk0IChfX3RtcCwgX19zcmMsIF9fc3JjbGVuKSA6ICgoKF9f
c3JjbGVuKSAlIDIgPT0gMCkgPyBfX21lbWNweV9ieTIgKF9fdG1wLCBfX3NyYywgX19zcmNsZW4p
IDogX19tZW1jcHlfZyAoX190bXAsIF9fc3JjLCBfX3NyY2xlbikpKSkgOiBfX21lbWNweV9nIChf
X3RtcCwgX19zcmMsIF9fc3JjbGVuKSkpOwogIHJldHVybiBfX2Rlc3Q7Cn0KCmV4dGVybiBfX2lu
bGluZSBjaGFyICpfX3N0cmNhdF9nIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMp
OwoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cmNhdF9nIChjaGFyICpfX2Rlc3QsIF9fY29u
c3QgY2hhciAqX19zcmMpCnsKICByZWdpc3RlciBjaGFyICpfX3RtcCA9IF9fZGVzdCAtIDE7CiAg
cmVnaXN0ZXIgY2hhciBfX2R1bW15OwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoIjE6XG5c
dCIKICAgICAiaW5jbAklMVxuXHQiCiAgICAgImNtcGIJJDAsKCUxKVxuXHQiCiAgICAgImpuZQkx
YlxuIgogICAgICIyOlxuXHQiCiAgICAgIm1vdmIJKCUyKSwlYjBcblx0IgogICAgICJpbmNsCSUy
XG5cdCIKICAgICAibW92YgklYjAsKCUxKVxuXHQiCiAgICAgImluY2wJJTFcblx0IgogICAgICJ0
ZXN0YgklYjAsJWIwXG5cdCIKICAgICAiam5lCTJiXG4iCiAgICAgOiAiPSZxIiAoX19kdW1teSks
ICI9JnIiIChfX3RtcCksICI9JnIiIChfX3NyYyksCiAgICAgICAiPW0iICggKihzdHJ1Y3QgeyBj
aGFyIF9feFsweGZmZmZmZmZdOyB9ICopX19kZXN0KQogICAgIDogIjEiIChfX3RtcCksICIyIiAo
X19zcmMpLAogICAgICAgIm0iICggKihzdHJ1Y3QgeyBjaGFyIF9feFsweGZmZmZmZmZdOyB9ICop
X19zcmMpCiAgICAgOiAibWVtb3J5IiwgImNjIik7CiAgcmV0dXJuIF9fZGVzdDsKfQpleHRlcm4g
X19pbmxpbmUgY2hhciAqX19zdHJuY2F0X2cgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyIF9f
c3JjW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7Cgpl
eHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RybmNhdF9nIChjaGFyICpfX2Rlc3QsIF9fY29uc3Qg
Y2hhciBfX3NyY1tdLCBzaXplX3QgX19uKQp7CiAgcmVnaXN0ZXIgY2hhciAqX190bXAgPSBfX2Rl
c3Q7CiAgcmVnaXN0ZXIgY2hhciBfX2R1bW15OwogIC0tX190bXA7CiAgX19hc21fXyBfX3ZvbGF0
aWxlX18KICAgICgiMTpcblx0IgogICAgICJjbXBiCSQwLDEoJTEpXG5cdCIKICAgICAibGVhbAkx
KCUxKSwlMVxuXHQiCiAgICAgImpuZQkxYlxuIgogICAgICIyOlxuXHQiCiAgICAgImRlY2wJJTNc
blx0IgogICAgICJqcwkzZlxuXHQiCiAgICAgIm1vdmIJKCUyKSwlYjBcblx0IgogICAgICJsZWFs
CTEoJTIpLCUyXG5cdCIKICAgICAibW92YgklYjAsKCUxKVxuXHQiCiAgICAgImxlYWwJMSglMSks
JTFcblx0IgogICAgICJ0ZXN0YgklYjAsJWIwXG5cdCIKICAgICAiam5lCTJiXG5cdCIKICAgICAi
ZGVjbAklMVxuIgogICAgICIzOlxuXHQiCiAgICAgIm1vdmIJJDAsKCUxKSIKICAgICA6ICI9JnEi
IChfX2R1bW15KSwgIj0mciIgKF9fdG1wKSwgIj0mciIgKF9fc3JjKSwgIj0mciIgKF9fbikKICAg
ICA6ICIxIiAoX190bXApLCAiMiIgKF9fc3JjKSwgIjMiIChfX24pCiAgICAgOiAibWVtb3J5Iiwg
ImNjIik7CgogIHJldHVybiBfX2Rlc3Q7Cn0KZXh0ZXJuIF9faW5saW5lIGludCBfX3N0cmNtcF9n
ZyAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpOwoKZXh0ZXJuIF9faW5s
aW5lIGludApfX3N0cmNtcF9nZyAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f
czIpCnsKICByZWdpc3RlciBpbnQgX19yZXM7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgi
MTpcblx0IgogICAgICJtb3ZiCSglMSksJWIwXG5cdCIKICAgICAibGVhbAkxKCUxKSwlMVxuXHQi
CiAgICAgImNtcGIJJWIwLCglMilcblx0IgogICAgICJqbmUJMmZcblx0IgogICAgICJsZWFsCTEo
JTIpLCUyXG5cdCIKICAgICAidGVzdGIJJWIwLCViMFxuXHQiCiAgICAgImpuZQkxYlxuXHQiCiAg
ICAgInhvcmwJJTAsJTBcblx0IgogICAgICJqbXAJM2ZcbiIKICAgICAiMjpcblx0IgogICAgICJt
b3ZsCSQxLCUwXG5cdCIKICAgICAiamIJM2Zcblx0IgogICAgICJuZWdsCSUwXG4iCiAgICAgIjM6
IgogICAgIDogIj1xIiAoX19yZXMpLCAiPSZyIiAoX19zMSksICI9JnIiIChfX3MyKQogICAgIDog
IjEiIChfX3MxKSwgIjIiIChfX3MyKSwKICAgICAgICJtIiAoICooc3RydWN0IHsgY2hhciBfX3hb
MHhmZmZmZmZmXTsgfSAqKV9fczEpLAogICAgICAgIm0iICggKihzdHJ1Y3QgeyBjaGFyIF9feFsw
eGZmZmZmZmZdOyB9ICopX19zMikKICAgICA6ICJjYyIpOwogIHJldHVybiBfX3JlczsKfQpleHRl
cm4gX19pbmxpbmUgaW50IF9fc3RybmNtcF9nIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3Qg
Y2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7
CgpleHRlcm4gX19pbmxpbmUgaW50Cl9fc3RybmNtcF9nIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f
Y29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKewogIHJlZ2lzdGVyIGludCBfX3JlczsKICBf
X2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCIxOlxuXHQiCiAgICAgImRlY2wJJTNcblx0IgogICAg
ICJqcwkyZlxuXHQiCiAgICAgIm1vdmIJKCUxKSwlYjBcblx0IgogICAgICJpbmNsCSUxXG5cdCIK
ICAgICAiY21wYgklYjAsKCUyKVxuXHQiCiAgICAgImpuZQkzZlxuXHQiCiAgICAgImluY2wJJTJc
blx0IgogICAgICJ0ZXN0YgklYjAsJWIwXG5cdCIKICAgICAiam5lCTFiXG4iCiAgICAgIjI6XG5c
dCIKICAgICAieG9ybAklMCwlMFxuXHQiCiAgICAgImptcAk0ZlxuIgogICAgICIzOlxuXHQiCiAg
ICAgIm1vdmwJJDEsJTBcblx0IgogICAgICJqYgk0ZlxuXHQiCiAgICAgIm5lZ2wJJTBcbiIKICAg
ICAiNDoiCiAgICAgOiAiPXEiIChfX3JlcyksICI9JnIiIChfX3MxKSwgIj0mciIgKF9fczIpLCAi
PSZyIiAoX19uKQogICAgIDogIjEiIChfX3MxKSwgIjIiIChfX3MyKSwgIjMiIChfX24pLAogICAg
ICAgIm0iICggKihzdHJ1Y3QgeyBfX2V4dGVuc2lvbl9fIGNoYXIgX194W19fbl07IH0gKilfX3Mx
KSwKICAgICAgICJtIiAoICooc3RydWN0IHsgX19leHRlbnNpb25fXyBjaGFyIF9feFtfX25dOyB9
ICopX19zMikKICAgICA6ICJjYyIpOwogIHJldHVybiBfX3JlczsKfQpleHRlcm4gX19pbmxpbmUg
Y2hhciAqX19zdHJjaHJfYyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpOwoKZXh0ZXJuIF9f
aW5saW5lIGNoYXIgKgpfX3N0cmNocl9jIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykKewog
IHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaW50IF9fZDA7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXM7
CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgiMTpcblx0IgogICAgICJtb3ZiCSglMCksJSVh
bFxuXHQiCiAgICAgImNtcGIJJSVhaCwlJWFsXG5cdCIKICAgICAiamUJMmZcblx0IgogICAgICJs
ZWFsCTEoJTApLCUwXG5cdCIKICAgICAidGVzdGIJJSVhbCwlJWFsXG5cdCIKICAgICAiam5lCTFi
XG5cdCIKICAgICAieG9ybAklMCwlMFxuIgogICAgICIyOiIKICAgICA6ICI9ciIgKF9fcmVzKSwg
Ij0mYSIgKF9fZDApCiAgICAgOiAiMCIgKF9fcyksICIxIiAoX19jKSwKICAgICAgICJtIiAoICoo
c3RydWN0IHsgY2hhciBfX3hbMHhmZmZmZmZmXTsgfSAqKV9fcykKICAgICA6ICJjYyIpOwogIHJl
dHVybiBfX3JlczsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RyY2hyX2cgKF9fY29uc3Qg
Y2hhciAqX19zLCBpbnQgX19jKTsKCmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJjaHJfZyAo
X19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpCnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGlu
dCBfX2QwOwogIHJlZ2lzdGVyIGNoYXIgKl9fcmVzOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAg
ICAoIm1vdmIJJSVhbCwlJWFoXG4iCiAgICAgIjE6XG5cdCIKICAgICAibW92YgkoJTApLCUlYWxc
blx0IgogICAgICJjbXBiCSUlYWgsJSVhbFxuXHQiCiAgICAgImplCTJmXG5cdCIKICAgICAibGVh
bAkxKCUwKSwlMFxuXHQiCiAgICAgInRlc3RiCSUlYWwsJSVhbFxuXHQiCiAgICAgImpuZQkxYlxu
XHQiCiAgICAgInhvcmwJJTAsJTBcbiIKICAgICAiMjoiCiAgICAgOiAiPXIiIChfX3JlcyksICI9
JmEiIChfX2QwKQogICAgIDogIjAiIChfX3MpLCAiMSIgKF9fYyksCiAgICAgICAibSIgKCAqKHN0
cnVjdCB7IGNoYXIgX194WzB4ZmZmZmZmZl07IH0gKilfX3MpCiAgICAgOiAiY2MiKTsKICByZXR1
cm4gX19yZXM7Cn0KZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RyY2hybnVsX2MgKF9fY29uc3Qg
Y2hhciAqX19zLCBpbnQgX19jKTsKCmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJjaHJudWxf
YyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpCnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25n
IGludCBfX2QwOwogIHJlZ2lzdGVyIGNoYXIgKl9fcmVzOwogIF9fYXNtX18gX192b2xhdGlsZV9f
CiAgICAoIjE6XG5cdCIKICAgICAibW92YgkoJTApLCUlYWxcblx0IgogICAgICJjbXBiCSUlYWgs
JSVhbFxuXHQiCiAgICAgImplCTJmXG5cdCIKICAgICAibGVhbAkxKCUwKSwlMFxuXHQiCiAgICAg
InRlc3RiCSUlYWwsJSVhbFxuXHQiCiAgICAgImpuZQkxYlxuXHQiCiAgICAgImRlY2wJJTBcbiIK
ICAgICAiMjoiCiAgICAgOiAiPXIiIChfX3JlcyksICI9JmEiIChfX2QwKQogICAgIDogIjAiIChf
X3MpLCAiMSIgKF9fYyksCiAgICAgICAibSIgKCAqKHN0cnVjdCB7IGNoYXIgX194WzB4ZmZmZmZm
Zl07IH0gKilfX3MpCiAgICAgOiAiY2MiKTsKICByZXR1cm4gX19yZXM7Cn0KCmV4dGVybiBfX2lu
bGluZSBjaGFyICpfX3N0cmNocm51bF9nIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYyk7Cgpl
eHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RyY2hybnVsX2cgKF9fY29uc3QgY2hhciAqX19zLCBp
bnQgX19jKQp7CiAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMDsKICByZWdpc3RlciBj
aGFyICpfX3JlczsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCJtb3ZiCSUlYWwsJSVhaFxu
IgogICAgICIxOlxuXHQiCiAgICAgIm1vdmIJKCUwKSwlJWFsXG5cdCIKICAgICAiY21wYgklJWFo
LCUlYWxcblx0IgogICAgICJqZQkyZlxuXHQiCiAgICAgImxlYWwJMSglMCksJTBcblx0IgogICAg
ICJ0ZXN0YgklJWFsLCUlYWxcblx0IgogICAgICJqbmUJMWJcblx0IgogICAgICJkZWNsCSUwXG4i
CiAgICAgIjI6IgogICAgIDogIj1yIiAoX19yZXMpLCAiPSZhIiAoX19kMCkKICAgICA6ICIwIiAo
X19zKSwgIjEiIChfX2MpLAogICAgICAgIm0iICggKihzdHJ1Y3QgeyBjaGFyIF9feFsweGZmZmZm
ZmZdOyB9ICopX19zKQogICAgIDogImNjIik7CiAgcmV0dXJuIF9fcmVzOwp9CiMgMTQyMCAiLi4v
c3lzZGVwcy9pMzg2L2k0ODYvYml0cy9zdHJpbmcuaCIKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9f
c3RycmNocl9jIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYyk7CgpleHRlcm4gX19pbmxpbmUg
Y2hhciAqCl9fc3RycmNocl9jIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykKewogIHJlZ2lz
dGVyIHVuc2lnbmVkIGxvbmcgaW50IF9fZDAsIF9fZDE7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXM7
CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgiY2xkXG4iCiAgICAgIjE6XG5cdCIKICAgICAi
bG9kc2Jcblx0IgogICAgICJjbXBiCSUlYWgsJSVhbFxuXHQiCiAgICAgImpuZQkyZlxuXHQiCiAg
ICAgImxlYWwJLTEoJSVlc2kpLCUwXG4iCiAgICAgIjI6XG5cdCIKICAgICAidGVzdGIJJSVhbCwl
JWFsXG5cdCIKICAgICAiam5lIDFiIgogICAgIDogIj1kIiAoX19yZXMpLCAiPSZTIiAoX19kMCks
ICI9JmEiIChfX2QxKQogICAgIDogIjAiICgwKSwgIjEiIChfX3MpLCAiMiIgKF9fYyksCiAgICAg
ICAibSIgKCAqKHN0cnVjdCB7IGNoYXIgX194WzB4ZmZmZmZmZl07IH0gKilfX3MpCiAgICAgOiAi
Y2MiKTsKICByZXR1cm4gX19yZXM7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnJjaHJf
ZyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpOwoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpf
X3N0cnJjaHJfZyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpCnsKICByZWdpc3RlciB1bnNp
Z25lZCBsb25nIGludCBfX2QwLCBfX2QxOwogIHJlZ2lzdGVyIGNoYXIgKl9fcmVzOwogIF9fYXNt
X18gX192b2xhdGlsZV9fCiAgICAoIm1vdmIJJSVhbCwlJWFoXG4iCiAgICAgImNsZFxuXHQiCiAg
ICAgIjE6XG5cdCIKICAgICAibG9kc2Jcblx0IgogICAgICJjbXBiCSUlYWgsJSVhbFxuXHQiCiAg
ICAgImpuZQkyZlxuXHQiCiAgICAgImxlYWwJLTEoJSVlc2kpLCUwXG4iCiAgICAgIjI6XG5cdCIK
ICAgICAidGVzdGIJJSVhbCwlJWFsXG5cdCIKICAgICAiam5lIDFiIgogICAgIDogIj1yIiAoX19y
ZXMpLCAiPSZTIiAoX19kMCksICI9JmEiIChfX2QxKQogICAgIDogIjAiICgwKSwgIjEiIChfX3Mp
LCAiMiIgKF9fYyksCiAgICAgICAibSIgKCAqKHN0cnVjdCB7IGNoYXIgX194WzB4ZmZmZmZmZl07
IH0gKilfX3MpCiAgICAgOiAiY2MiKTsKICByZXR1cm4gX19yZXM7Cn0KIyAxNDkzICIuLi9zeXNk
ZXBzL2kzODYvaTQ4Ni9iaXRzL3N0cmluZy5oIgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ry
Y3Nwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdCk7CgoKZXh0ZXJuIF9faW5s
aW5lIHNpemVfdApfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3Qp
CnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwOwogIHJlZ2lzdGVyIGNoYXIgKl9f
cmVzOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoIjE6XG5cdCIKICAgICAibW92YgkoJTAp
LCUlYWxcblx0IgogICAgICJsZWFsCTEoJTApLCUwXG5cdCIKICAgICAiY21wYgklJWFoLCUlYWxc
blx0IgogICAgICJqZQkyZlxuXHQiCiAgICAgInRlc3RiCSUlYWwsJSVhbFxuXHQiCiAgICAgImpu
ZQkxYlxuIgogICAgICIyOiIKICAgICA6ICI9ciIgKF9fcmVzKSwgIj0mYSIgKF9fZDApCiAgICAg
OiAiMCIgKF9fcyksICIxIiAoX19yZWplY3QpLAogICAgICAgIm0iICggKihzdHJ1Y3QgeyBjaGFy
IF9feFsweGZmZmZmZmZdOyB9ICopX19zKQogICAgIDogImNjIik7CiAgcmV0dXJuIChfX3JlcyAt
IDEpIC0gX19zOwp9CgoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fY2cgKF9fY29u
c3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgX19yZWplY3RbXSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fcmVqZWN0X2xlbik7CgpleHRlcm4gX19pbmxpbmUg
c2l6ZV90Cl9fc3RyY3Nwbl9jZyAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciBfX3Jl
amVjdFtdLCBzaXplX3QgX19yZWplY3RfbGVuKQp7CiAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBp
bnQgX19kMCwgX19kMSwgX19kMjsKICByZWdpc3RlciBfX2NvbnN0IGNoYXIgKl9fcmVzOwogIF9f
YXNtX18gX192b2xhdGlsZV9fCiAgICAoImNsZFxuIgogICAgICIxOlxuXHQiCiAgICAgImxvZHNi
XG5cdCIKICAgICAidGVzdGIJJSVhbCwlJWFsXG5cdCIKICAgICAiamUJMmZcblx0IgogICAgICJt
b3ZsCSU1LCUlZWRpXG5cdCIKICAgICAibW92bAklNiwlJWVjeFxuXHQiCiAgICAgInJlcG5lOyBz
Y2FzYlxuXHQiCiAgICAgImpuZQkxYlxuIgogICAgICIyOiIKICAgICA6ICI9UyIgKF9fcmVzKSwg
Ij0mYSIgKF9fZDApLCAiPSZjIiAoX19kMSksICI9JkQiIChfX2QyKQogICAgIDogIjAiIChfX3Mp
LCAiZCIgKF9fcmVqZWN0KSwgImciIChfX3JlamVjdF9sZW4pCiAgICAgOiAibWVtb3J5IiwgImNj
Iik7CiAgcmV0dXJuIChfX3JlcyAtIDEpIC0gX19zOwp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90
IF9fc3RyY3Nwbl9nIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCk7
CiMgMTU3NCAiLi4vc3lzZGVwcy9pMzg2L2k0ODYvYml0cy9zdHJpbmcuaCIKZXh0ZXJuIF9faW5s
aW5lIHNpemVfdApfX3N0cmNzcG5fZyAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAq
X19yZWplY3QpCnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwLCBfX2QxLCBfX2Qy
LCBfX2QzOwogIHJlZ2lzdGVyIF9fY29uc3QgY2hhciAqX19yZXM7CiAgX19hc21fXyBfX3ZvbGF0
aWxlX18KICAgICgiY2xkXG5cdCIKICAgICAicmVwbmU7IHNjYXNiXG5cdCIKICAgICAibm90bAkl
JWVjeFxuXHQiCiAgICAgImxlYWwJLTEoJSVlY3gpLCUlZWR4XG4iCiAgICAgIjE6XG5cdCIKICAg
ICAibG9kc2Jcblx0IgogICAgICJ0ZXN0YgklJWFsLCUlYWxcblx0IgogICAgICJqZQkyZlxuXHQi
CiAgICAgIm1vdmwJJSVlYngsJSVlZGlcblx0IgogICAgICJtb3ZsCSUlZWR4LCUlZWN4XG5cdCIK
ICAgICAicmVwbmU7IHNjYXNiXG5cdCIKICAgICAiam5lCTFiXG4iCiAgICAgIjI6IgogICAgIDog
Ij1TIiAoX19yZXMpLCAiPSZhIiAoX19kMCksICI9JmMiIChfX2QxKSwgIj0mRCIgKF9fZDIpLCAi
PSZkIiAoX19kMykKICAgICA6ICIwIiAoX19zKSwgIjEiICgwKSwgIjIiICgweGZmZmZmZmZmKSwg
IjMiIChfX3JlamVjdCksICJiIiAoX19yZWplY3QpCgogICAgIDogIm1lbW9yeSIsICJjYyIpOwog
IHJldHVybiAoX19yZXMgLSAxKSAtIF9fczsKfQojIDE2MTUgIi4uL3N5c2RlcHMvaTM4Ni9pNDg2
L2JpdHMvc3RyaW5nLmgiCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzEgKF9fY29u
c3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQpOwoKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0
cnNwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdCkKewogIHJlZ2lzdGVyIHVu
c2lnbmVkIGxvbmcgaW50IF9fZDA7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXM7CgogIF9fYXNtX18g
X192b2xhdGlsZV9fCiAgICAoIjE6XG5cdCIKICAgICAibW92YgkoJTApLCViMVxuXHQiCiAgICAg
ImxlYWwJMSglMCksJTBcblx0IgogICAgICJjbXBiCSVoMSwlYjFcblx0IgogICAgICJqZQkxYiIK
ICAgICA6ICI9ciIgKF9fcmVzKSwgIj0mcSIgKF9fZDApCiAgICAgOiAiMCIgKF9fcyksICIxIiAo
X19hY2NlcHQpLAogICAgICAgIm0iICggKihzdHJ1Y3QgeyBjaGFyIF9feFsweGZmZmZmZmZdOyB9
ICopX19zKQogICAgIDogImNjIik7CiAgcmV0dXJuIChfX3JlcyAtIDEpIC0gX19zOwp9CgoKZXh0
ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cnNwbl9jZyAoX19jb25zdCBjaGFyICpfX3MsIF9fY29u
c3QgY2hhciBfX2FjY2VwdFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19hY2NlcHRfbGVuKTsKCmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJzcG5fY2cg
KF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgX19hY2NlcHRbXSwgc2l6ZV90IF9fYWNj
ZXB0X2xlbikKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaW50IF9fZDAsIF9fZDEsIF9fZDI7
CiAgcmVnaXN0ZXIgX19jb25zdCBjaGFyICpfX3JlczsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwog
ICAgKCJjbGRcbiIKICAgICAiMTpcblx0IgogICAgICJsb2RzYlxuXHQiCiAgICAgInRlc3RiCSUl
YWwsJSVhbFxuXHQiCiAgICAgImplCTJmXG5cdCIKICAgICAibW92bAklMSwlJWVkaVxuXHQiCiAg
ICAgIm1vdmwJJTYsJSVlY3hcblx0IgogICAgICJyZXBuZTsgc2Nhc2Jcblx0IgogICAgICJqZQkx
YlxuIgogICAgICIyOiIKICAgICA6ICI9UyIgKF9fcmVzKSwgIj0mZCIgKF9fZDApLCAiPSZjIiAo
X19kMSksICI9JkQiIChfX2QyKQogICAgIDogIjAiIChfX3MpLCAiMSIgKF9fYWNjZXB0KSwgImci
IChfX2FjY2VwdF9sZW4pLAoKICAgICAgICJtIiAoICooc3RydWN0IHsgY2hhciBfX3hbMHhmZmZm
ZmZmXTsgfSAqKV9fcyksCiAgICAgICAibSIgKCAqKHN0cnVjdCB7IF9fZXh0ZW5zaW9uX18gY2hh
ciBfX3hbX19hY2NlcHRfbGVuXTsgfSAqKV9fYWNjZXB0KQogICAgIDogImNjIik7CiAgcmV0dXJu
IChfX3JlcyAtIDEpIC0gX19zOwp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2cg
KF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KTsKIyAxNjk1ICIuLi9z
eXNkZXBzL2kzODYvaTQ4Ni9iaXRzL3N0cmluZy5oIgpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9f
c3Ryc3BuX2cgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQp7CiAg
cmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMCwgX19kMSwgX19kMiwgX19kMzsKICByZWdp
c3RlciBfX2NvbnN0IGNoYXIgKl9fcmVzOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoImNs
ZFxuXHQiCiAgICAgInJlcG5lOyBzY2FzYlxuXHQiCiAgICAgIm5vdGwJJSVlY3hcblx0IgogICAg
ICJsZWFsCS0xKCUlZWN4KSwlJWVkeFxuIgogICAgICIxOlxuXHQiCiAgICAgImxvZHNiXG5cdCIK
ICAgICAidGVzdGIJJSVhbCwlJWFsXG5cdCIKICAgICAiamUJMmZcblx0IgogICAgICJtb3ZsCSUl
ZWJ4LCUlZWRpXG5cdCIKICAgICAibW92bAklJWVkeCwlJWVjeFxuXHQiCiAgICAgInJlcG5lOyBz
Y2FzYlxuXHQiCiAgICAgImplCTFiXG4iCiAgICAgIjI6IgogICAgIDogIj1TIiAoX19yZXMpLCAi
PSZhIiAoX19kMCksICI9JmMiIChfX2QxKSwgIj0mRCIgKF9fZDIpLCAiPSZkIiAoX19kMykKICAg
ICA6ICIwIiAoX19zKSwgIjEiICgwKSwgIjIiICgweGZmZmZmZmZmKSwgIjMiIChfX2FjY2VwdCks
ICJiIiAoX19hY2NlcHQpCiAgICAgOiAibWVtb3J5IiwgImNjIik7CiAgcmV0dXJuIChfX3JlcyAt
IDEpIC0gX19zOwp9CiMgMTczMyAiLi4vc3lzZGVwcy9pMzg2L2k0ODYvYml0cy9zdHJpbmcuaCIK
ZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RycGJya19jZyAoX19jb25zdCBjaGFyICpfX3MsIF9f
Y29uc3QgY2hhciBfX2FjY2VwdFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgX19hY2NlcHRfbGVuKTsKCmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJr
X2NnIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyIF9fYWNjZXB0W10sIHNpemVfdCBf
X2FjY2VwdF9sZW4pCnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwLCBfX2QxLCBf
X2QyOwogIHJlZ2lzdGVyIGNoYXIgKl9fcmVzOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAo
ImNsZFxuIgogICAgICIxOlxuXHQiCiAgICAgImxvZHNiXG5cdCIKICAgICAidGVzdGIJJSVhbCwl
JWFsXG5cdCIKICAgICAiamUJMmZcblx0IgogICAgICJtb3ZsCSU1LCUlZWRpXG5cdCIKICAgICAi
bW92bAklNiwlJWVjeFxuXHQiCiAgICAgInJlcG5lOyBzY2FzYlxuXHQiCiAgICAgImpuZQkxYlxu
XHQiCiAgICAgImRlY2wJJTBcblx0IgogICAgICJqbXAJM2ZcbiIKICAgICAiMjpcblx0IgogICAg
ICJ4b3JsCSUwLCUwXG4iCiAgICAgIjM6IgogICAgIDogIj1TIiAoX19yZXMpLCAiPSZhIiAoX19k
MCksICI9JmMiIChfX2QxKSwgIj0mRCIgKF9fZDIpCiAgICAgOiAiMCIgKF9fcyksICJkIiAoX19h
Y2NlcHQpLCAiZyIgKF9fYWNjZXB0X2xlbikKICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKICByZXR1
cm4gX19yZXM7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnBicmtfZyAoX19jb25zdCBj
aGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpOwojIDE3OTcgIi4uL3N5c2RlcHMvaTM4
Ni9pNDg2L2JpdHMvc3RyaW5nLmgiCmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJrX2cg
KF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQp7CiAgcmVnaXN0ZXIg
dW5zaWduZWQgbG9uZyBpbnQgX19kMCwgX19kMSwgX19kMiwgX19kMzsKICByZWdpc3RlciBjaGFy
ICpfX3JlczsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCJtb3ZsCSUlZWJ4LCUlZWRpXG5c
dCIKICAgICAiY2xkXG5cdCIKICAgICAicmVwbmU7IHNjYXNiXG5cdCIKICAgICAibm90bAklJWVj
eFxuXHQiCiAgICAgImxlYWwJLTEoJSVlY3gpLCUlZWR4XG4iCiAgICAgIjE6XG5cdCIKICAgICAi
bG9kc2Jcblx0IgogICAgICJ0ZXN0YgklJWFsLCUlYWxcblx0IgogICAgICJqZQkyZlxuXHQiCiAg
ICAgIm1vdmwJJSVlYngsJSVlZGlcblx0IgogICAgICJtb3ZsCSUlZWR4LCUlZWN4XG5cdCIKICAg
ICAicmVwbmU7IHNjYXNiXG5cdCIKICAgICAiam5lCTFiXG5cdCIKICAgICAiZGVjbAklMFxuXHQi
CiAgICAgImptcAkzZlxuIgogICAgICIyOlxuXHQiCiAgICAgInhvcmwJJTAsJTBcbiIKICAgICAi
MzoiCiAgICAgOiAiPVMiIChfX3JlcyksICI9JmEiIChfX2QwKSwgIj0mYyIgKF9fZDEpLCAiPSZk
IiAoX19kMiksICI9JkQiIChfX2QzKQogICAgIDogIjAiIChfX3MpLCAiMSIgKDApLCAiMiIgKDB4
ZmZmZmZmZmYpLCAiYiIgKF9fYWNjZXB0KQogICAgIDogIm1lbW9yeSIsICJjYyIpOwogIHJldHVy
biBfX3JlczsKfQojIDE4NDIgIi4uL3N5c2RlcHMvaTM4Ni9pNDg2L2JpdHMvc3RyaW5nLmgiCmV4
dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnN0cl9jZyAoX19jb25zdCBjaGFyICpfX2hheXN0YWNr
LCBfX2NvbnN0IGNoYXIgX19uZWVkbGVbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19uZWVkbGVfbGVuKTsKCmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJz
dHJfY2cgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyIF9fbmVlZGxlW10s
CiAgICAgICAgICAgICBzaXplX3QgX19uZWVkbGVfbGVuKQp7CiAgcmVnaXN0ZXIgdW5zaWduZWQg
bG9uZyBpbnQgX19kMCwgX19kMSwgX19kMjsKICByZWdpc3RlciBjaGFyICpfX3JlczsKICBfX2Fz
bV9fIF9fdm9sYXRpbGVfXwogICAgKCJjbGRcbiIgIjE6XG5cdCIKCiAgICAgIm1vdmwJJTYsJSVl
ZGlcblx0IgogICAgICJtb3ZsCSU1LCUlZWF4XG5cdCIKICAgICAibW92bAklNCwlJWVjeFxuXHQi
CiAgICAgInJlcGU7IGNtcHNiXG5cdCIKICAgICAiamUJMmZcblx0IgogICAgICJjbXBiCSQwLC0x
KCUlZXNpKVxuXHQiCiAgICAgImxlYWwJMSglJWVheCksJTVcblx0IgogICAgICJqbmUJMWJcblx0
IgogICAgICJ4b3JsCSUlZWF4LCUlZWF4XG4iCiAgICAgIjI6IgogICAgIDogIj0mYSIgKF9fcmVz
KSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSksICI9JmMiIChfX2QyKQogICAgIDogImciIChf
X25lZWRsZV9sZW4pLCAiMSIgKF9faGF5c3RhY2spLCAiZCIgKF9fbmVlZGxlKQogICAgIDogIm1l
bW9yeSIsICJjYyIpOwogIHJldHVybiBfX3JlczsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9f
c3Ryc3RyX2cgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRs
ZSk7CiMgMTkwNCAiLi4vc3lzZGVwcy9pMzg2L2k0ODYvYml0cy9zdHJpbmcuaCIKZXh0ZXJuIF9f
aW5saW5lIGNoYXIgKgpfX3N0cnN0cl9nIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29u
c3QgY2hhciAqX19uZWVkbGUpCnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwLCBf
X2QxLCBfX2QyLCBfX2QzOwogIHJlZ2lzdGVyIGNoYXIgKl9fcmVzOwogIF9fYXNtX18gX192b2xh
dGlsZV9fCiAgICAoImNsZFxuXHQiCiAgICAgInJlcG5lOyBzY2FzYlxuXHQiCiAgICAgIm5vdGwJ
JSVlY3hcblx0IgogICAgICJkZWNsCSUlZWN4XG5cdCIKICAgICAibW92bAklJWVjeCwlJWVkeFxu
IgogICAgICIxOlxuXHQiCiAgICAgIm1vdmwJJSVlYngsJSVlZGlcblx0IgogICAgICJtb3ZsCSUl
ZXNpLCUlZWF4XG5cdCIKICAgICAibW92bAklJWVkeCwlJWVjeFxuXHQiCiAgICAgInJlcGU7IGNt
cHNiXG5cdCIKICAgICAiamUJMmZcblx0IgogICAgICJjbXBiCSQwLC0xKCUlZXNpKVxuXHQiCiAg
ICAgImxlYWwJMSglJWVheCksJSVlc2lcblx0IgogICAgICJqbmUJMWJcblx0IgogICAgICJ4b3Js
CSUlZWF4LCUlZWF4XG4iCiAgICAgIjI6IgogICAgIDogIj0mYSIgKF9fcmVzKSwgIj0mYyIgKF9f
ZDApLCAiPSZTIiAoX19kMSksICI9JkQiIChfX2QyKSwgIj0mZCIgKF9fZDMpCiAgICAgOiAiMCIg
KDApLCAiMSIgKDB4ZmZmZmZmZmYpLCAiMiIgKF9faGF5c3RhY2spLCAiMyIgKF9fbmVlZGxlKSwK
ICAgICAgICJiIiAoX19uZWVkbGUpCiAgICAgOiAibWVtb3J5IiwgImNjIik7CiAgcmV0dXJuIF9f
cmVzOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJ0b2tfcl8xYyAoY2hhciAqX19zLCBj
aGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJ0
b2tfcl8xYyAoY2hhciAqX19zLCBjaGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCkKewogIGNoYXIg
Kl9fcmVzdWx0OwogIGlmIChfX3MgPT0gKCh2b2lkICopMCkpCiAgICBfX3MgPSAqX19uZXh0cDsK
ICB3aGlsZSAoKl9fcyA9PSBfX3NlcCkKICAgICsrX19zOwogIF9fcmVzdWx0ID0gKCh2b2lkICop
MCk7CiAgaWYgKCpfX3MgIT0gJ1wwJykKICAgIHsKICAgICAgX19yZXN1bHQgPSBfX3MrKzsKICAg
ICAgd2hpbGUgKCpfX3MgIT0gJ1wwJykKICAgICAgICBpZiAoKl9fcysrID09IF9fc2VwKQogICAg
ICAgICAgewogICAgICAgICAgICBfX3NbLTFdID0gJ1wwJzsKICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICB9CiAgICAgICpfX25leHRwID0gX19zOwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsK
fQojIDExMTcgIi4uL3N0cmluZy9iaXRzL3N0cmluZzIuaCIKZXh0ZXJuIGNoYXIgKl9fc3Ryc2Vw
X2cgKGNoYXIgKipfX3N0cmluZ3AsIF9fY29uc3QgY2hhciAqX19kZWxpbSk7CiMgMTEzNSAiLi4v
c3RyaW5nL2JpdHMvc3RyaW5nMi5oIgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfMWMg
KGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ry
c2VwXzFjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIgY2hhciAqX19y
ZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCAhPSAoKHZvaWQgKikwKSAmJiAoKl9fcyA9IChf
X2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19yZWplY3QpID8gKChfX3JlamVj
dCkgPT0gJ1wwJyA/IChjaGFyICopIF9fcmF3bWVtY2hyIChfX3JldHZhbCwgX19yZWplY3QpIDog
X19zdHJjaHJfYyAoX19yZXR2YWwsICgoX19yZWplY3QpICYgMHhmZikgPDwgOCkpIDogX19zdHJj
aHJfZyAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSAhPSAoKHZvaWQgKikwKSkKICAgICooKl9fcykr
KyA9ICdcMCc7CiAgcmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19z
dHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0Mik7CmV4
dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWpl
Y3QxLCBjaGFyIF9fcmVqZWN0MikKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsK
ICBpZiAoX19yZXR2YWwgIT0gKCh2b2lkICopMCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIGNoYXIg
Kl9fY3AgPSBfX3JldHZhbDsKICAgICAgd2hpbGUgKDEpCiAgICAgICAgewogICAgICAgICAgaWYg
KCpfX2NwID09ICdcMCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2NwID0gKCh2b2lk
ICopMCk7CiAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCpfX2Nw
ID09IF9fcmVqZWN0MSB8fCAqX19jcCA9PSBfX3JlamVjdDIpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAqX19jcCsrID0gJ1wwJzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
fQogICAgICAgICAgKytfX2NwOwogICAgICAgIH0KICAgICAgKl9fcyA9IF9fY3A7CiAgICB9CiAg
cmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfM2MgKGNo
YXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyIF9fcmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBjaGFy
ICoKX19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0
MiwgY2hhciBfX3JlamVjdDMpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAg
aWYgKF9fcmV0dmFsICE9ICgodm9pZCAqKTApKQogICAgewogICAgICByZWdpc3RlciBjaGFyICpf
X2NwID0gX19yZXR2YWw7CiAgICAgIHdoaWxlICgxKQogICAgICAgIHsKICAgICAgICAgIGlmICgq
X19jcCA9PSAnXDAnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jcCA9ICgodm9pZCAq
KTApOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICgqX19jcCA9
PSBfX3JlamVjdDEgfHwgKl9fY3AgPT0gX19yZWplY3QyIHx8ICpfX2NwID09IF9fcmVqZWN0MykK
ICAgICAgICAgICAgewogICAgICAgICAgICAgICpfX2NwKysgPSAnXDAnOwogICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICArK19fY3A7CiAgICAgICAgfQogICAgICAq
X19zID0gX19jcDsKICAgIH0KICByZXR1cm4gX19yZXR2YWw7Cn0KIyAxMjExICIuLi9zdHJpbmcv
Yml0cy9zdHJpbmcyLmgiCiMgMSAiLi4vaW5jbHVkZS9zdGRsaWIuaCIgMQoKCgoKCgojIDEgIi91
c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MwojIDggIi4uL2luY2x1ZGUvc3RkbGliLmgiIDIKIyAxICIuLi9zdGRsaWIvc3RkbGliLmgiIDEK
IyAzMyAiLi4vc3RkbGliL3N0ZGxpYi5oIgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1s
aW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIuLi9zdGRsaWIvc3RkbGli
LmgiIDIKCgojIDU1MiAiLi4vc3RkbGliL3N0ZGxpYi5oIgoKCmV4dGVybiB2b2lkICptYWxsb2Mg
KHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9p
ZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICBfX2F0dHJpYnV0
ZV9fICgoX19tYWxsb2NfXykpOwoKIyA5MTQgIi4uL3N0ZGxpYi9zdGRsaWIuaCIKCiMgOSAiLi4v
aW5jbHVkZS9zdGRsaWIuaCIgMgojIDE5OSAiLi4vaW5jbHVkZS9zdGRsaWIuaCIKZXh0ZXJuIHZv
aWQgKiBfX2RlZmF1bHRfbW9yZWNvcmUgKHB0cmRpZmZfdCk7CgoKZXh0ZXJuIGNoYXIgKl9fc3Ry
ZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp
OwpleHRlcm4gY2hhciAqX19zdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3Qg
X19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKZXh0ZXJuIF9fdHlwZW9m
IChzdHJjb2xsX2wpIF9fc3RyY29sbF9sOwpleHRlcm4gX190eXBlb2YgKHN0cnhmcm1fbCkgX19z
dHJ4ZnJtX2w7CmV4dGVybiBfX3R5cGVvZiAoc3RyY2FzZWNtcF9sKSBfX3N0cmNhc2VjbXBfbDsK
ZXh0ZXJuIF9fdHlwZW9mIChzdHJuY2FzZWNtcF9sKSBfX3N0cm5jYXNlY21wX2w7Cgp0eXBlZGVm
IF9fc29ja2xlbl90IHNvY2tsZW5fdDsKZXh0ZXJuIGludCBhY2Nlc3MgKF9fY29uc3QgY2hhciAq
X19uYW1lLCBpbnQgX190eXBlKSA7CgoKCgpleHRlcm4gaW50IGV1aWRhY2Nlc3MgKF9fY29uc3Qg
Y2hhciAqX19uYW1lLCBpbnQgX190eXBlKSA7CmV4dGVybiBfX29mZl90IGxzZWVrIChpbnQgX19m
ZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSA7CmV4dGVybiBfX29mZjY0X3QgbHNl
ZWs2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSA7CgpleHRl
cm4gaW50IGNsb3NlIChpbnQgX19mZCkgOwoKCgpleHRlcm4gc3NpemVfdCByZWFkIChpbnQgX19m
ZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcykgOwoKCmV4dGVybiBzc2l6ZV90IHdyaXRl
IChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbikgOwoKCgpleHRlcm4g
c3NpemVfdCBwcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIF9f
b2ZmX3QgX19vZmZzZXQpCiAgICAgOwpleHRlcm4gc3NpemVfdCBwd3JpdGUgKGludCBfX2ZkLCBf
X2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIF9f
b2ZmX3QgX19vZmZzZXQpIDsKZXh0ZXJuIHNzaXplX3QgcHJlYWQ2NCAoaW50IF9fZmQsIHZvaWQg
Kl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmNjRf
dCBfX29mZnNldCkgOwoKCmV4dGVybiBzc2l6ZV90IHB3cml0ZTY0IChpbnQgX19mZCwgX19jb25z
dCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2Zm
NjRfdCBfX29mZnNldCkgOwoKCgoKCgoKZXh0ZXJuIGludCBwaXBlIChpbnQgX19waXBlZGVzWzJd
KSA7CmV4dGVybiB1bnNpZ25lZCBpbnQgYWxhcm0gKHVuc2lnbmVkIGludCBfX3NlY29uZHMpIDsK
ZXh0ZXJuIHVuc2lnbmVkIGludCBzbGVlcCAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgOwoKCgoK
CgpleHRlcm4gX191c2Vjb25kc190IHVhbGFybSAoX191c2Vjb25kc190IF9fdmFsdWUsIF9fdXNl
Y29uZHNfdCBfX2ludGVydmFsKQogICAgIDsKCgoKZXh0ZXJuIGludCB1c2xlZXAgKF9fdXNlY29u
ZHNfdCBfX3VzZWNvbmRzKSA7CgoKCgoKZXh0ZXJuIGludCBwYXVzZSAodm9pZCkgOwoKCgpleHRl
cm4gaW50IGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dp
ZF90IF9fZ3JvdXApCiAgICAgOwoKCgpleHRlcm4gaW50IGZjaG93biAoaW50IF9fZmQsIF9fdWlk
X3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSA7CgoKCgpleHRlcm4gaW50IGxjaG93biAoX19j
b25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAg
IDsKCgoKCmV4dGVybiBpbnQgY2hkaXIgKF9fY29uc3QgY2hhciAqX19wYXRoKSA7CgoKCmV4dGVy
biBpbnQgZmNoZGlyIChpbnQgX19mZCkgOwpleHRlcm4gY2hhciAqZ2V0Y3dkIChjaGFyICpfX2J1
Ziwgc2l6ZV90IF9fc2l6ZSkgOwoKCgoKCmV4dGVybiBjaGFyICpnZXRfY3VycmVudF9kaXJfbmFt
ZSAodm9pZCkgOwoKCgoKCgpleHRlcm4gY2hhciAqZ2V0d2QgKGNoYXIgKl9fYnVmKSA7CgoKCgpl
eHRlcm4gaW50IGR1cCAoaW50IF9fZmQpIDsKCgpleHRlcm4gaW50IGR1cDIgKGludCBfX2ZkLCBp
bnQgX19mZDIpIDsKCgpleHRlcm4gY2hhciAqKl9fZW52aXJvbjsKCmV4dGVybiBjaGFyICoqZW52
aXJvbjsKCgoKCgpleHRlcm4gaW50IGV4ZWN2ZSAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIg
Kl9fY29uc3QgX19hcmd2W10sCiAgICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0IF9fZW52
cFtdKSA7CgoKCgpleHRlcm4gaW50IGZleGVjdmUgKGludCBfX2ZkLCBjaGFyICpfX2NvbnN0IF9f
YXJndltdLCBjaGFyICpfX2NvbnN0IF9fZW52cFtdKQogICAgIDsKCgoKCmV4dGVybiBpbnQgZXhl
Y3YgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSA7CgoKCmV4
dGVybiBpbnQgZXhlY2xlIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2Fy
ZywgLi4uKSA7CgoKCmV4dGVybiBpbnQgZXhlY2wgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2Nv
bnN0IGNoYXIgKl9fYXJnLCAuLi4pIDsKCgoKZXh0ZXJuIGludCBleGVjdnAgKF9fY29uc3QgY2hh
ciAqX19maWxlLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSA7CgoKCgpleHRlcm4gaW50IGV4ZWNs
cCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgOwoKCgoK
ZXh0ZXJuIGludCBuaWNlIChpbnQgX19pbmMpIDsKCgoKCmV4dGVybiB2b2lkIF9leGl0IChpbnQg
X19zdGF0dXMpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCgojIDEgIi4uL3N5
c2RlcHMvZ2VuZXJpYy9iaXRzL2NvbmZuYW1lLmgiIDEKIyAyNSAiLi4vc3lzZGVwcy9nZW5lcmlj
L2JpdHMvY29uZm5hbWUuaCIKZW51bQogIHsKICAgIF9QQ19MSU5LX01BWCwKCiAgICBfUENfTUFY
X0NBTk9OLAoKICAgIF9QQ19NQVhfSU5QVVQsCgogICAgX1BDX05BTUVfTUFYLAoKICAgIF9QQ19Q
QVRIX01BWCwKCiAgICBfUENfUElQRV9CVUYsCgogICAgX1BDX0NIT1dOX1JFU1RSSUNURUQsCgog
ICAgX1BDX05PX1RSVU5DLAoKICAgIF9QQ19WRElTQUJMRSwKCiAgICBfUENfU1lOQ19JTywKCiAg
ICBfUENfQVNZTkNfSU8sCgogICAgX1BDX1BSSU9fSU8sCgogICAgX1BDX1NPQ0tfTUFYQlVGLAoK
ICAgIF9QQ19GSUxFU0laRUJJVFMsCgogICAgX1BDX1JFQ19JTkNSX1hGRVJfU0laRSwKCiAgICBf
UENfUkVDX01BWF9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19NSU5fWEZFUl9TSVpFLAoKICAgIF9Q
Q19SRUNfWEZFUl9BTElHTiwKCiAgICBfUENfQUxMT0NfU0laRV9NSU4sCgogICAgX1BDX1NZTUxJ
TktfTUFYCgogIH07CgoKZW51bQogIHsKICAgIF9TQ19BUkdfTUFYLAoKICAgIF9TQ19DSElMRF9N
QVgsCgogICAgX1NDX0NMS19UQ0ssCgogICAgX1NDX05HUk9VUFNfTUFYLAoKICAgIF9TQ19PUEVO
X01BWCwKCiAgICBfU0NfU1RSRUFNX01BWCwKCiAgICBfU0NfVFpOQU1FX01BWCwKCiAgICBfU0Nf
Sk9CX0NPTlRST0wsCgogICAgX1NDX1NBVkVEX0lEUywKCiAgICBfU0NfUkVBTFRJTUVfU0lHTkFM
UywKCiAgICBfU0NfUFJJT1JJVFlfU0NIRURVTElORywKCiAgICBfU0NfVElNRVJTLAoKICAgIF9T
Q19BU1lOQ0hST05PVVNfSU8sCgogICAgX1NDX1BSSU9SSVRJWkVEX0lPLAoKICAgIF9TQ19TWU5D
SFJPTklaRURfSU8sCgogICAgX1NDX0ZTWU5DLAoKICAgIF9TQ19NQVBQRURfRklMRVMsCgogICAg
X1NDX01FTUxPQ0ssCgogICAgX1NDX01FTUxPQ0tfUkFOR0UsCgogICAgX1NDX01FTU9SWV9QUk9U
RUNUSU9OLAoKICAgIF9TQ19NRVNTQUdFX1BBU1NJTkcsCgogICAgX1NDX1NFTUFQSE9SRVMsCgog
ICAgX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNUUywKCiAgICBfU0NfQUlPX0xJU1RJT19NQVgsCgog
ICAgX1NDX0FJT19NQVgsCgogICAgX1NDX0FJT19QUklPX0RFTFRBX01BWCwKCiAgICBfU0NfREVM
QVlUSU1FUl9NQVgsCgogICAgX1NDX01RX09QRU5fTUFYLAoKICAgIF9TQ19NUV9QUklPX01BWCwK
CiAgICBfU0NfVkVSU0lPTiwKCiAgICBfU0NfUEFHRVNJWkUsCgoKICAgIF9TQ19SVFNJR19NQVgs
CgogICAgX1NDX1NFTV9OU0VNU19NQVgsCgogICAgX1NDX1NFTV9WQUxVRV9NQVgsCgogICAgX1ND
X1NJR1FVRVVFX01BWCwKCiAgICBfU0NfVElNRVJfTUFYLAoKCgoKICAgIF9TQ19CQ19CQVNFX01B
WCwKCiAgICBfU0NfQkNfRElNX01BWCwKCiAgICBfU0NfQkNfU0NBTEVfTUFYLAoKICAgIF9TQ19C
Q19TVFJJTkdfTUFYLAoKICAgIF9TQ19DT0xMX1dFSUdIVFNfTUFYLAoKICAgIF9TQ19FUVVJVl9D
TEFTU19NQVgsCgogICAgX1NDX0VYUFJfTkVTVF9NQVgsCgogICAgX1NDX0xJTkVfTUFYLAoKICAg
IF9TQ19SRV9EVVBfTUFYLAoKICAgIF9TQ19DSEFSQ0xBU1NfTkFNRV9NQVgsCgoKICAgIF9TQ18y
X1ZFUlNJT04sCgogICAgX1NDXzJfQ19CSU5ELAoKICAgIF9TQ18yX0NfREVWLAoKICAgIF9TQ18y
X0ZPUlRfREVWLAoKICAgIF9TQ18yX0ZPUlRfUlVOLAoKICAgIF9TQ18yX1NXX0RFViwKCiAgICBf
U0NfMl9MT0NBTEVERUYsCgoKICAgIF9TQ19QSUksCgogICAgX1NDX1BJSV9YVEksCgogICAgX1ND
X1BJSV9TT0NLRVQsCgogICAgX1NDX1BJSV9JTlRFUk5FVCwKCiAgICBfU0NfUElJX09TSSwKCiAg
ICBfU0NfUE9MTCwKCiAgICBfU0NfU0VMRUNULAoKICAgIF9TQ19VSU9fTUFYSU9WLAoKICAgIF9T
Q19JT1ZfTUFYID0gX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX1BJSV9JTlRFUk5FVF9TVFJFQU0s
CgogICAgX1NDX1BJSV9JTlRFUk5FVF9ER1JBTSwKCiAgICBfU0NfUElJX09TSV9DT1RTLAoKICAg
IF9TQ19QSUlfT1NJX0NMVFMsCgogICAgX1NDX1BJSV9PU0lfTSwKCiAgICBfU0NfVF9JT1ZfTUFY
LAoKCgogICAgX1NDX1RIUkVBRFMsCgogICAgX1NDX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUywKCiAg
ICBfU0NfR0VUR1JfUl9TSVpFX01BWCwKCiAgICBfU0NfR0VUUFdfUl9TSVpFX01BWCwKCiAgICBf
U0NfTE9HSU5fTkFNRV9NQVgsCgogICAgX1NDX1RUWV9OQU1FX01BWCwKCiAgICBfU0NfVEhSRUFE
X0RFU1RSVUNUT1JfSVRFUkFUSU9OUywKCiAgICBfU0NfVEhSRUFEX0tFWVNfTUFYLAoKICAgIF9T
Q19USFJFQURfU1RBQ0tfTUlOLAoKICAgIF9TQ19USFJFQURfVEhSRUFEU19NQVgsCgogICAgX1ND
X1RIUkVBRF9BVFRSX1NUQUNLQUREUiwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFLAoK
ICAgIF9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORywKCiAgICBfU0NfVEhSRUFEX1BSSU9f
SU5IRVJJVCwKCiAgICBfU0NfVEhSRUFEX1BSSU9fUFJPVEVDVCwKCiAgICBfU0NfVEhSRUFEX1BS
T0NFU1NfU0hBUkVELAoKCiAgICBfU0NfTlBST0NFU1NPUlNfQ09ORiwKCiAgICBfU0NfTlBST0NF
U1NPUlNfT05MTiwKCiAgICBfU0NfUEhZU19QQUdFUywKCiAgICBfU0NfQVZQSFlTX1BBR0VTLAoK
ICAgIF9TQ19BVEVYSVRfTUFYLAoKICAgIF9TQ19QQVNTX01BWCwKCgogICAgX1NDX1hPUEVOX1ZF
UlNJT04sCgogICAgX1NDX1hPUEVOX1hDVV9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9VTklYLAoK
ICAgIF9TQ19YT1BFTl9DUllQVCwKCiAgICBfU0NfWE9QRU5fRU5IX0kxOE4sCgogICAgX1NDX1hP
UEVOX1NITSwKCgogICAgX1NDXzJfQ0hBUl9URVJNLAoKICAgIF9TQ18yX0NfVkVSU0lPTiwKCiAg
ICBfU0NfMl9VUEUsCgoKICAgIF9TQ19YT1BFTl9YUEcyLAoKICAgIF9TQ19YT1BFTl9YUEczLAoK
ICAgIF9TQ19YT1BFTl9YUEc0LAoKCiAgICBfU0NfQ0hBUl9CSVQsCgogICAgX1NDX0NIQVJfTUFY
LAoKICAgIF9TQ19DSEFSX01JTiwKCiAgICBfU0NfSU5UX01BWCwKCiAgICBfU0NfSU5UX01JTiwK
CiAgICBfU0NfTE9OR19CSVQsCgogICAgX1NDX1dPUkRfQklULAoKICAgIF9TQ19NQl9MRU5fTUFY
LAoKICAgIF9TQ19OWkVSTywKCiAgICBfU0NfU1NJWkVfTUFYLAoKICAgIF9TQ19TQ0hBUl9NQVgs
CgogICAgX1NDX1NDSEFSX01JTiwKCiAgICBfU0NfU0hSVF9NQVgsCgogICAgX1NDX1NIUlRfTUlO
LAoKICAgIF9TQ19VQ0hBUl9NQVgsCgogICAgX1NDX1VJTlRfTUFYLAoKICAgIF9TQ19VTE9OR19N
QVgsCgogICAgX1NDX1VTSFJUX01BWCwKCgogICAgX1NDX05MX0FSR01BWCwKCiAgICBfU0NfTkxf
TEFOR01BWCwKCiAgICBfU0NfTkxfTVNHTUFYLAoKICAgIF9TQ19OTF9OTUFYLAoKICAgIF9TQ19O
TF9TRVRNQVgsCgogICAgX1NDX05MX1RFWFRNQVgsCgoKICAgIF9TQ19YQlM1X0lMUDMyX09GRjMy
LAoKICAgIF9TQ19YQlM1X0lMUDMyX09GRkJJRywKCiAgICBfU0NfWEJTNV9MUDY0X09GRjY0LAoK
ICAgIF9TQ19YQlM1X0xQQklHX09GRkJJRywKCgogICAgX1NDX1hPUEVOX0xFR0FDWSwKCiAgICBf
U0NfWE9QRU5fUkVBTFRJTUUsCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMsCgoKICAg
IF9TQ19BRFZJU09SWV9JTkZPLAoKICAgIF9TQ19CQVJSSUVSUywKCiAgICBfU0NfQkFTRSwKCiAg
ICBfU0NfQ19MQU5HX1NVUFBPUlQsCgogICAgX1NDX0NfTEFOR19TVVBQT1JUX1IsCgogICAgX1ND
X0NMT0NLX1NFTEVDVElPTiwKCiAgICBfU0NfQ1BVVElNRSwKCiAgICBfU0NfVEhSRUFEX0NQVVRJ
TUUsCgogICAgX1NDX0RFVklDRV9JTywKCiAgICBfU0NfREVWSUNFX1NQRUNJRklDLAoKICAgIF9T
Q19ERVZJQ0VfU1BFQ0lGSUNfUiwKCiAgICBfU0NfRkRfTUdNVCwKCiAgICBfU0NfRklGTywKCiAg
ICBfU0NfUElQRSwKCiAgICBfU0NfRklMRV9BVFRSSUJVVEVTLAoKICAgIF9TQ19GSUxFX0xPQ0tJ
TkcsCgogICAgX1NDX0ZJTEVfU1lTVEVNLAoKICAgIF9TQ19NT05PVE9OSUNfQ0xPQ0ssCgogICAg
X1NDX01VTFRJX1BST0NFU1MsCgogICAgX1NDX1NJTkdMRV9QUk9DRVNTLAoKICAgIF9TQ19ORVRX
T1JLSU5HLAoKICAgIF9TQ19SRUFERVJfV1JJVEVSX0xPQ0tTLAoKICAgIF9TQ19TUElOX0xPQ0tT
LAoKICAgIF9TQ19SRUdFWFAsCgogICAgX1NDX1JFR0VYX1ZFUlNJT04sCgogICAgX1NDX1NIRUxM
LAoKICAgIF9TQ19TSUdOQUxTLAoKICAgIF9TQ19TUEFXTiwKCiAgICBfU0NfU1BPUkFESUNfU0VS
VkVSLAoKICAgIF9TQ19USFJFQURfU1BPUkFESUNfU0VSVkVSLAoKICAgIF9TQ19TWVNURU1fREFU
QUJBU0UsCgogICAgX1NDX1NZU1RFTV9EQVRBQkFTRV9SLAoKICAgIF9TQ19USU1FT1VUUywKCiAg
ICBfU0NfVFlQRURfTUVNT1JZX09CSkVDVFMsCgogICAgX1NDX1VTRVJfR1JPVVBTLAoKICAgIF9T
Q19VU0VSX0dST1VQU19SLAoKICAgIF9TQ18yX1BCUywKCiAgICBfU0NfMl9QQlNfQUNDT1VOVElO
RywKCiAgICBfU0NfMl9QQlNfTE9DQVRFLAoKICAgIF9TQ18yX1BCU19NRVNTQUdFLAoKICAgIF9T
Q18yX1BCU19UUkFDSywKCiAgICBfU0NfU1lNTE9PUF9NQVgsCgogICAgX1NDX1NUUkVBTVMsCgog
ICAgX1NDXzJfUEJTX0NIRUNLUE9JTlQsCgoKICAgIF9TQ19WNl9JTFAzMl9PRkYzMiwKCiAgICBf
U0NfVjZfSUxQMzJfT0ZGQklHLAoKICAgIF9TQ19WNl9MUDY0X09GRjY0LAoKICAgIF9TQ19WNl9M
UEJJR19PRkZCSUcsCgoKICAgIF9TQ19IT1NUX05BTUVfTUFYLAoKICAgIF9TQ19UUkFDRSwKCiAg
ICBfU0NfVFJBQ0VfRVZFTlRfRklMVEVSLAoKICAgIF9TQ19UUkFDRV9JTkhFUklULAoKICAgIF9T
Q19UUkFDRV9MT0cKCiAgfTsKCgoKCgplbnVtCiAgewogICAgX0NTX1BBVEgsCgoKCgogICAgX0NT
X0xGU19DRkxBR1MgPSAxMDAwLAoKICAgIF9DU19MRlNfTERGTEFHUywKCiAgICBfQ1NfTEZTX0xJ
QlMsCgogICAgX0NTX0xGU19MSU5URkxBR1MsCgogICAgX0NTX0xGUzY0X0NGTEFHUywKCiAgICBf
Q1NfTEZTNjRfTERGTEFHUywKCiAgICBfQ1NfTEZTNjRfTElCUywKCiAgICBfQ1NfTEZTNjRfTElO
VEZMQUdTLAoKCgoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0NGTEFHUyA9IDExMDAsCgogICAg
X0NTX1hCUzVfSUxQMzJfT0ZGMzJfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9M
SUJTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9J
TFAzMl9PRkZCSUdfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MREZMQUdTLAoK
ICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MSUJTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJ
R19MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9DRkxBR1MsCgogICAgX0NTX1hC
UzVfTFA2NF9PRkY2NF9MREZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElCUywKCiAg
ICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZC
SUdfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19MREZMQUdTLAoKICAgIF9DU19Y
QlM1X0xQQklHX09GRkJJR19MSUJTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19MSU5URkxB
R1MsCgoKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfQ0ZMQUdTLAoKICAgIF9DU19QT1NJ
WF9WNl9JTFAzMl9PRkYzMl9MREZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9M
SUJTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9MSU5URkxBR1MsCgogICAgX0NTX1BP
U0lYX1Y2X0lMUDMyX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJ
R19MREZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTElCUywKCiAgICBfQ1Nf
UE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xJTlRGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfTFA2NF9P
RkY2NF9DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTERGTEFHUywKCiAgICBf
Q1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MSUJTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0
X0xJTlRGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0NGTEFHUywKCiAgICBf
Q1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQQklH
X09GRkJJR19MSUJTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfTElOVEZMQUdTLAoK
CgogICAgX0NTX1Y2X1dJRFRIX1JFU1RSSUNURURfRU5WUwoKICB9OwoKCmV4dGVybiBsb25nIGlu
dCBwYXRoY29uZiAoX19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX25hbWUpIDsKCgpleHRlcm4g
bG9uZyBpbnQgZnBhdGhjb25mIChpbnQgX19mZCwgaW50IF9fbmFtZSkgOwoKCmV4dGVybiBsb25n
IGludCBzeXNjb25mIChpbnQgX19uYW1lKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
CmV4dGVybiBzaXplX3QgY29uZnN0ciAoaW50IF9fbmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBf
X2xlbikgOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGlkICh2b2lkKSA7CgoKZXh0ZXJuIF9fcGlk
X3QgZ2V0cHBpZCAodm9pZCkgOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAodm9pZCkgOwpl
eHRlcm4gX19waWRfdCBfX2dldHBnaWQgKF9fcGlkX3QgX19waWQpIDsKCmV4dGVybiBfX3BpZF90
IGdldHBnaWQgKF9fcGlkX3QgX19waWQpIDsKCgoKCgoKZXh0ZXJuIGludCBzZXRwZ2lkIChfX3Bp
ZF90IF9fcGlkLCBfX3BpZF90IF9fcGdpZCkgOwpleHRlcm4gaW50IHNldHBncnAgKHZvaWQpIDsK
ZXh0ZXJuIF9fcGlkX3Qgc2V0c2lkICh2b2lkKSA7CgoKCmV4dGVybiBfX3BpZF90IGdldHNpZCAo
X19waWRfdCBfX3BpZCkgOwoKCgpleHRlcm4gX191aWRfdCBnZXR1aWQgKHZvaWQpIDsKCgpleHRl
cm4gX191aWRfdCBnZXRldWlkICh2b2lkKSA7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICh2b2lk
KSA7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0ZWdpZCAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBnZXRn
cm91cHMgKGludCBfX3NpemUsIF9fZ2lkX3QgX19saXN0W10pIDsKCgoKZXh0ZXJuIGludCBncm91
cF9tZW1iZXIgKF9fZ2lkX3QgX19naWQpIDsKCgoKCgoKZXh0ZXJuIGludCBzZXR1aWQgKF9fdWlk
X3QgX191aWQpIDsKCgoKCmV4dGVybiBpbnQgc2V0cmV1aWQgKF9fdWlkX3QgX19ydWlkLCBfX3Vp
ZF90IF9fZXVpZCkgOwoKCgoKZXh0ZXJuIGludCBzZXRldWlkIChfX3VpZF90IF9fdWlkKSA7CgoK
CgoKCmV4dGVybiBpbnQgc2V0Z2lkIChfX2dpZF90IF9fZ2lkKSA7CgoKCgpleHRlcm4gaW50IHNl
dHJlZ2lkIChfX2dpZF90IF9fcmdpZCwgX19naWRfdCBfX2VnaWQpIDsKCgoKCmV4dGVybiBpbnQg
c2V0ZWdpZCAoX19naWRfdCBfX2dpZCkgOwoKCgoKCgpleHRlcm4gX19waWRfdCBmb3JrICh2b2lk
KSA7CgoKCgoKCmV4dGVybiBfX3BpZF90IHZmb3JrICh2b2lkKSA7CgoKCgoKZXh0ZXJuIGNoYXIg
KnR0eW5hbWUgKGludCBfX2ZkKSA7CgoKCmV4dGVybiBpbnQgdHR5bmFtZV9yIChpbnQgX19mZCwg
Y2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgOwoKCgpleHRlcm4gaW50IGlzYXR0eSAoaW50
IF9fZmQpIDsKCgoKCgpleHRlcm4gaW50IHR0eXNsb3QgKHZvaWQpIDsKCgoKCmV4dGVybiBpbnQg
bGluayAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgOwoKCgpleHRl
cm4gaW50IHN5bWxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8p
IDsKCgoKCmV4dGVybiBpbnQgcmVhZGxpbmsgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Bh
dGgsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X2xlbikgOwoKCgpleHRlcm4gaW50IHVubGluayAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgpl
eHRlcm4gaW50IHJtZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgOwoKCgpleHRlcm4gX19waWRf
dCB0Y2dldHBncnAgKGludCBfX2ZkKSA7CgoKZXh0ZXJuIGludCB0Y3NldHBncnAgKGludCBfX2Zk
LCBfX3BpZF90IF9fcGdycF9pZCkgOwoKCgpleHRlcm4gY2hhciAqZ2V0bG9naW4gKHZvaWQpIDsK
CgoKCmV4dGVybiBpbnQgZ2V0bG9naW5fciAoY2hhciAqX19uYW1lLCBzaXplX3QgX19uYW1lX2xl
bikgOwoKCgoKZXh0ZXJuIGludCBzZXRsb2dpbiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKIyAx
ICIuLi9pbmNsdWRlL2dldG9wdC5oIiAxCgoKCiMgMSAiLi4vcG9zaXgvZ2V0b3B0LmgiIDEKIyA0
NyAiLi4vcG9zaXgvZ2V0b3B0LmgiCmV4dGVybiBjaGFyICpvcHRhcmc7CiMgNjEgIi4uL3Bvc2l4
L2dldG9wdC5oIgpleHRlcm4gaW50IG9wdGluZDsKCgoKCmV4dGVybiBpbnQgb3B0ZXJyOwoKCgpl
eHRlcm4gaW50IG9wdG9wdDsKIyAxNDUgIi4uL3Bvc2l4L2dldG9wdC5oIgpleHRlcm4gaW50IGdl
dG9wdCAoaW50IF9fX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LCBjb25zdCBjaGFyICpfX3No
b3J0b3B0cyk7CiMgNSAiLi4vaW5jbHVkZS9nZXRvcHQuaCIgMgoKCgoKCgoKZXh0ZXJuIGludCBn
ZXRob3N0bmFtZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIDsKCgoKCgoKZXh0ZXJuIGlu
dCBzZXRob3N0bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgOwoKCgpl
eHRlcm4gaW50IHNldGhvc3RpZCAobG9uZyBpbnQgX19pZCkgOwoKCgoKCmV4dGVybiBpbnQgZ2V0
ZG9tYWlubmFtZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBzZXRk
b21haW5uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSA7CgoKCgoKZXh0
ZXJuIGludCB2aGFuZ3VwICh2b2lkKSA7CgoKZXh0ZXJuIGludCByZXZva2UgKF9fY29uc3QgY2hh
ciAqX19maWxlKSA7CgoKCgoKCgpleHRlcm4gaW50IHByb2ZpbCAodW5zaWduZWQgc2hvcnQgaW50
ICpfX3NhbXBsZV9idWZmZXIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBzaXpl
X3QgX19vZmZzZXQsIHVuc2lnbmVkIGludCBfX3NjYWxlKSA7CgoKCgoKZXh0ZXJuIGludCBhY2N0
IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgpleHRlcm4gY2hhciAqZ2V0dXNlcnNoZWxsICh2
b2lkKSA7CmV4dGVybiB2b2lkIGVuZHVzZXJzaGVsbCAodm9pZCkgOwpleHRlcm4gdm9pZCBzZXR1
c2Vyc2hlbGwgKHZvaWQpIDsKCgoKCgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9jaGRpciwg
aW50IF9fbm9jbG9zZSkgOwoKCgoKCgpleHRlcm4gaW50IGNocm9vdCAoX19jb25zdCBjaGFyICpf
X3BhdGgpIDsKCgoKZXh0ZXJuIGNoYXIgKmdldHBhc3MgKF9fY29uc3QgY2hhciAqX19wcm9tcHQp
IDsKCgoKCgpleHRlcm4gaW50IGZzeW5jIChpbnQgX19mZCkgOwoKCgoKCgpleHRlcm4gbG9uZyBp
bnQgZ2V0aG9zdGlkICh2b2lkKSA7CgoKZXh0ZXJuIHZvaWQgc3luYyAodm9pZCkgOwoKCgoKZXh0
ZXJuIGludCBnZXRwYWdlc2l6ZSAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CgoKZXh0ZXJuIGludCB0cnVuY2F0ZSAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmX3QgX19s
ZW5ndGgpIDsKZXh0ZXJuIGludCB0cnVuY2F0ZTY0IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19v
ZmY2NF90IF9fbGVuZ3RoKSA7CgoKCgpleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQsIF9f
b2ZmX3QgX19sZW5ndGgpIDsKZXh0ZXJuIGludCBmdHJ1bmNhdGU2NCAoaW50IF9fZmQsIF9fb2Zm
NjRfdCBfX2xlbmd0aCkgOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAodm9pZCkgOwpl
eHRlcm4gaW50IGJyayAodm9pZCAqX19hZGRyKSA7CgoKCgoKZXh0ZXJuIHZvaWQgKnNicmsgKGlu
dHB0cl90IF9fZGVsdGEpIDsKZXh0ZXJuIGxvbmcgaW50IHN5c2NhbGwgKGxvbmcgaW50IF9fc3lz
bm8sIC4uLikgOwpleHRlcm4gaW50IGxvY2tmIChpbnQgX19mZCwgaW50IF9fY21kLCBfX29mZl90
IF9fbGVuKSA7CmV4dGVybiBpbnQgbG9ja2Y2NCAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmY2
NF90IF9fbGVuKSA7CmV4dGVybiBpbnQgZmRhdGFzeW5jIChpbnQgX19maWxkZXMpIDsKCgoKCgoK
CmV4dGVybiBjaGFyICpjcnlwdCAoX19jb25zdCBjaGFyICpfX2tleSwgX19jb25zdCBjaGFyICpf
X3NhbHQpIDsKCgoKZXh0ZXJuIHZvaWQgZW5jcnlwdCAoY2hhciAqX19ibG9jaywgaW50IF9fZWRm
bGFnKSA7CgoKCgoKCmV4dGVybiB2b2lkIHN3YWIgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBf
X2Zyb20sIHZvaWQgKl9fcmVzdHJpY3QgX190bywKICAgICAgICAgICAgICAgICAgc3NpemVfdCBf
X24pIDsKCgoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIDsKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgOwoKZXh0ZXJuIGludCBfX2FjY2VzcyAo
X19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpOwpleHRlcm4gaW50IF9fZXVpZGFjY2Vz
cyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpOwpleHRlcm4gX19vZmY2NF90IF9f
bHNlZWs2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKTsKZXh0
ZXJuIF9fb2ZmX3QgX19sc2VlayAoaW50IF9fZmQsIF9fb2ZmX3QgX19vZmZzZXQsIGludCBfX3do
ZW5jZSk7CmV4dGVybiBfX29mZl90IF9fbGliY19sc2VlayAoaW50IF9fZmQsIF9fb2ZmX3QgX19v
ZmZzZXQsIGludCBfX3doZW5jZSk7CmV4dGVybiBfX29mZjY0X3QgX19saWJjX2xzZWVrNjQgKGlu
dCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSk7CmV4dGVybiBzc2l6ZV90
IF9fcHJlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLAogICAgICAg
ICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KTsKZXh0ZXJuIHNzaXplX3QgX19saWJj
X3ByZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KTsKZXh0ZXJuIHNzaXplX3QgX19w
cmVhZDY0IChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpOwpleHRlcm4gc3NpemVfdCBfX2xp
YmNfcHJlYWQ2NCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpOwpleHRlcm4gc3Np
emVfdCBfX3B3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24s
CiAgICAgICAgICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KTsKZXh0ZXJuIHNzaXpl
X3QgX19saWJjX3B3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBf
X24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmX3QgX19vZmZzZXQpOwpleHRl
cm4gc3NpemVfdCBfX3B3cml0ZTY0IChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6
ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vZmY2NF90IF9fb2Zmc2V0KTsK
CmV4dGVybiBzc2l6ZV90IF9fbGliY19wd3JpdGU2NCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAq
X19idWYsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vZmY2
NF90IF9fb2Zmc2V0KTsKZXh0ZXJuIHNzaXplX3QgX19saWJjX3JlYWQgKGludCBfX2ZkLCB2b2lk
ICpfX2J1Ziwgc2l6ZV90IF9fbik7CgpleHRlcm4gc3NpemVfdCBfX2xpYmNfd3JpdGUgKGludCBf
X2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uKTsKCmV4dGVybiBpbnQgX19waXBl
IChpbnQgX19waXBlZGVzWzJdKTsKCmV4dGVybiB1bnNpZ25lZCBpbnQgX19zbGVlcCAodW5zaWdu
ZWQgaW50IF9fc2Vjb25kcyk7CmV4dGVybiBpbnQgX19jaG93biAoX19jb25zdCBjaGFyICpfX2Zp
bGUsCiAgICAgICAgICAgICAgICAgICAgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXAp
OwoKZXh0ZXJuIGludCBfX2ZjaG93biAoaW50IF9fZmQsCiAgICAgICAgICAgICAgICAgICAgIF9f
dWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKTsKZXh0ZXJuIGludCBfX2xjaG93biAoX19j
b25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwKICAgICAgICAgICAgICAgICAgICAg
X19naWRfdCBfX2dyb3VwKTsKZXh0ZXJuIGludCBfX2NoZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0
aCk7CmV4dGVybiBpbnQgX19mY2hkaXIgKGludCBfX2ZkKTsKZXh0ZXJuIGNoYXIgKl9fZ2V0Y3dk
IChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSk7CmV4dGVybiBpbnQgX19ybWRpciAoY29uc3Qg
Y2hhciAqX19wYXRoKTsKCgoKCgoKCmNoYXIgKl9fY2Fub25pY2FsaXplX2RpcmVjdG9yeV9uYW1l
X2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fdGhpc2RpciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSkgOwoKZXh0ZXJuIGludCBf
X2R1cCAoaW50IF9fZmQpOwpleHRlcm4gaW50IF9fZHVwMiAoaW50IF9fZmQsIGludCBfX2ZkMik7
CgpleHRlcm4gaW50IF9fZXhlY3ZlIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19jb25z
dCBfX2FyZ3ZbXSwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCBfX2VudnBbXSk7
CmV4dGVybiBsb25nIGludCBfX3BhdGhjb25mIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgaW50IF9f
bmFtZSk7CmV4dGVybiBsb25nIGludCBfX2ZwYXRoY29uZiAoaW50IF9fZmQsIGludCBfX25hbWUp
OwpleHRlcm4gbG9uZyBpbnQgX19zeXNjb25mIChpbnQgX19uYW1lKTsKCmV4dGVybiBfX3BpZF90
IF9fZ2V0cGlkICh2b2lkKTsKCmV4dGVybiBfX3BpZF90IF9fZ2V0cHBpZCAodm9pZCk7CmV4dGVy
biBfX3BpZF90IF9fc2V0c2lkICh2b2lkKTsKZXh0ZXJuIF9fdWlkX3QgX19nZXR1aWQgKHZvaWQp
OwpleHRlcm4gX191aWRfdCBfX2dldGV1aWQgKHZvaWQpOwpleHRlcm4gX19naWRfdCBfX2dldGdp
ZCAodm9pZCk7CmV4dGVybiBfX2dpZF90IF9fZ2V0ZWdpZCAodm9pZCk7CmV4dGVybiBpbnQgX19n
ZXRncm91cHMgKGludCBfX3NpemUsIF9fZ2lkX3QgX19saXN0W10pOwoKZXh0ZXJuIGludCBfX2dy
b3VwX21lbWJlciAoX19naWRfdCBfX2dpZCk7CmV4dGVybiBpbnQgX19zZXR1aWQgKF9fdWlkX3Qg
X191aWQpOwpleHRlcm4gaW50IF9fc2V0cmV1aWQgKF9fdWlkX3QgX19ydWlkLCBfX3VpZF90IF9f
ZXVpZCk7CmV4dGVybiBpbnQgX19zZXRnaWQgKF9fZ2lkX3QgX19naWQpOwpleHRlcm4gaW50IF9f
c2V0cGdpZCAoX19waWRfdCBfX3BpZCwgX19waWRfdCBfX3BnaWQpOwoKZXh0ZXJuIGludCBfX3Nl
dHJlZ2lkIChfX2dpZF90IF9fcmdpZCwgX19naWRfdCBfX2VnaWQpOwpleHRlcm4gX19waWRfdCBf
X3Zmb3JrICh2b2lkKTsKZXh0ZXJuIGludCBfX3R0eW5hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9f
YnVmLCBzaXplX3QgX19idWZsZW4pOwpleHRlcm4gaW50IF9faXNhdHR5IChpbnQgX19mZCk7CmV4
dGVybiBpbnQgX19saW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3Rv
KTsKZXh0ZXJuIGludCBfX3N5bWxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNo
YXIgKl9fdG8pOwpleHRlcm4gaW50IF9fcmVhZGxpbmsgKF9fY29uc3QgY2hhciAqX19wYXRoLCBj
aGFyICpfX2J1Ziwgc2l6ZV90IF9fbGVuKTsKZXh0ZXJuIGludCBfX3VubGluayAoX19jb25zdCBj
aGFyICpfX25hbWUpOwpleHRlcm4gaW50IF9fZ2V0aG9zdG5hbWUgKGNoYXIgKl9fbmFtZSwgc2l6
ZV90IF9fbGVuKTsKZXh0ZXJuIGludCBfX3Byb2ZpbCAodW5zaWduZWQgc2hvcnQgaW50ICpfX3Nh
bXBsZV9idWZmZXIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpOwpleHRlcm4gaW50IF9fZ2V0ZHRhYmxlc2l6
ZSAodm9pZCk7CmV4dGVybiBpbnQgX19icmsgKHZvaWQgKl9fYWRkcik7CmV4dGVybiBpbnQgX19j
bG9zZSAoaW50IF9fZmQpOwoKZXh0ZXJuIHNzaXplX3QgX19yZWFkIChpbnQgX19mZCwgdm9pZCAq
X19idWYsIHNpemVfdCBfX25ieXRlcyk7CgpleHRlcm4gc3NpemVfdCBfX3dyaXRlIChpbnQgX19m
ZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbik7CgpleHRlcm4gX19waWRfdCBfX2Zv
cmsgKHZvaWQpOwpleHRlcm4gaW50IF9fZ2V0cGFnZXNpemUgKHZvaWQpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCmV4dGVybiBpbnQgX19mdHJ1bmNhdGUgKGludCBfX2ZkLCBfX29mZl90
IF9fbGVuZ3RoKTsKZXh0ZXJuIGludCBfX2Z0cnVuY2F0ZTY0IChpbnQgX19mZCwgX19vZmY2NF90
IF9fbGVuZ3RoKTsKZXh0ZXJuIHZvaWQgKl9fc2JyayAoaW50cHRyX3QgX19kZWx0YSk7CgoKCgoK
CgoKZXh0ZXJuIGludCBfX2xpYmNfZW5hYmxlX3NlY3VyZTsKCgoKCgoKCmV4dGVybiB2b2lkIF9f
bGliY19jaGVja19zdGFuZGFyZF9mZHMgKHZvaWQpOwoKCgpleHRlcm4gdm9pZCBfX2V4aXRfdGhy
ZWFkIChpbnQgdmFsKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKCgpleHRlcm4gX19waWRf
dCBfX2xpYmNfZm9yayAodm9pZCk7CgoKCmV4dGVybiBpbnQgX19saWJjX3BhdXNlICh2b2lkKTsK
Cgphc20gKCIuTF9fWCclZWJ4ID0gMVxuXHQiCiAgICAgIi5MX19YJyVlY3ggPSAyXG5cdCIKICAg
ICAiLkxfX1gnJWVkeCA9IDJcblx0IgogICAgICIuTF9fWCclZWF4ID0gM1xuXHQiCiAgICAgIi5M
X19YJyVlc2kgPSAzXG5cdCIKICAgICAiLkxfX1gnJWVkaSA9IDNcblx0IgogICAgICIuTF9fWCcl
ZWJwID0gM1xuXHQiCiAgICAgIi5MX19YJyVlc3AgPSAzXG5cdCIKICAgICAiLm1hY3JvIGJwdXNo
bCBuYW1lIHJlZ1xuXHQiCiAgICAgIi5pZiAxIC0gXFxuYW1lXG5cdCIKICAgICAiLmlmIDIgLSBc
XG5hbWVcblx0IgogICAgICJwdXNobCAlZWJ4XG5cdCIKICAgICAiLmVsc2Vcblx0IgogICAgICJ4
Y2hnbCBcXHJlZywgJWVieFxuXHQiCiAgICAgIi5lbmRpZlxuXHQiCiAgICAgIi5lbmRpZlxuXHQi
CiAgICAgIi5lbmRtXG5cdCIKICAgICAiLm1hY3JvIGJwb3BsIG5hbWUgcmVnXG5cdCIKICAgICAi
LmlmIDEgLSBcXG5hbWVcblx0IgogICAgICIuaWYgMiAtIFxcbmFtZVxuXHQiCiAgICAgInBvcGwg
JWVieFxuXHQiCiAgICAgIi5lbHNlXG5cdCIKICAgICAieGNoZ2wgXFxyZWcsICVlYnhcblx0Igog
ICAgICIuZW5kaWZcblx0IgogICAgICIuZW5kaWZcblx0IgogICAgICIuZW5kbVxuXHQiCiAgICAg
Ii5tYWNybyBibW92bCBuYW1lIHJlZ1xuXHQiCiAgICAgIi5pZiAxIC0gXFxuYW1lXG5cdCIKICAg
ICAiLmlmIDIgLSBcXG5hbWVcblx0IgogICAgICJtb3ZsIFxccmVnLCAlZWJ4XG5cdCIKICAgICAi
LmVuZGlmXG5cdCIKICAgICAiLmVuZGlmXG5cdCIKICAgICAiLmVuZG1cblx0Iik7CgoKdHlwZWRl
ZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgZmRzX2JpdHMgWygxMDI0Lyg4ICogc2l6
ZW9mKHVuc2lnbmVkIGxvbmcpKSldOwp9IF9fa2VybmVsX2ZkX3NldDsKCgp0eXBlZGVmIHZvaWQg
KCpfX2tlcm5lbF9zaWdoYW5kbGVyX3QpKGludCk7CgoKdHlwZWRlZiBpbnQgX19rZXJuZWxfa2V5
X3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX2Rldl90Owp0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgX19rZXJuZWxfaW5vX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxf
bW9kZV90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX25saW5rX3Q7CnR5cGVkZWYg
bG9uZyBfX2tlcm5lbF9vZmZfdDsKdHlwZWRlZiBpbnQgX19rZXJuZWxfcGlkX3Q7CnR5cGVkZWYg
dW5zaWduZWQgc2hvcnQgX19rZXJuZWxfaXBjX3BpZF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IF9fa2VybmVsX3VpZF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX2dpZF90Owp0
eXBlZGVmIHVuc2lnbmVkIGludCBfX2tlcm5lbF9zaXplX3Q7CnR5cGVkZWYgaW50IF9fa2VybmVs
X3NzaXplX3Q7CnR5cGVkZWYgaW50IF9fa2VybmVsX3B0cmRpZmZfdDsKdHlwZWRlZiBsb25nIF9f
a2VybmVsX3RpbWVfdDsKdHlwZWRlZiBsb25nIF9fa2VybmVsX3N1c2Vjb25kc190Owp0eXBlZGVm
IGxvbmcgX19rZXJuZWxfY2xvY2tfdDsKdHlwZWRlZiBpbnQgX19rZXJuZWxfZGFkZHJfdDsKdHlw
ZWRlZiBjaGFyICogX19rZXJuZWxfY2FkZHJfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tl
cm5lbF91aWQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX2dpZDE2X3Q7CnR5
cGVkZWYgdW5zaWduZWQgaW50IF9fa2VybmVsX3VpZDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50
IF9fa2VybmVsX2dpZDMyX3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX29sZF91
aWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9vbGRfZ2lkX3Q7CgoKdHlwZWRl
ZiBsb25nIGxvbmcgX19rZXJuZWxfbG9mZl90OwoKCnR5cGVkZWYgc3RydWN0IHsKCgoKICAgICAg
ICBpbnQgX192YWxbMl07Cgp9IF9fa2VybmVsX2ZzaWRfdDsKCmV4dGVybiBpbnQgX19zeXNjYWxs
X2dldGRlbnRzIChpbnQgZmQsIGNoYXIgKiBidWYsIHVuc2lnbmVkIGludCBuYnl0ZXMpOwpleHRl
cm4gaW50IF9fc3lzY2FsbF9nZXRkZW50czY0IChpbnQgZmQsIGNoYXIgKiBidWYsIHVuc2lnbmVk
IGludCBuYnl0ZXMpOwoKc3RydWN0IGtlcm5lbF9kaXJlbnQKICB7CiAgICBsb25nIGludCBkX2lu
bzsKICAgIF9fa2VybmVsX29mZl90IGRfb2ZmOwogICAgdW5zaWduZWQgc2hvcnQgaW50IGRfcmVj
bGVuOwogICAgY2hhciBkX25hbWVbMjU2XTsKICB9OwoKc3RydWN0IGtlcm5lbF9kaXJlbnQ2NAog
IHsKICAgIHVpbnQ2NF90IGRfaW5vOwogICAgaW50NjRfdCBkX29mZjsKICAgIHVuc2lnbmVkIHNo
b3J0IGludCBkX3JlY2xlbjsKICAgIHVuc2lnbmVkIGNoYXIgZF90eXBlOwogICAgY2hhciBkX25h
bWVbMjU2XTsKICB9OwojIDk2ICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9nZXRkZW50cy5j
IgoKCnNzaXplX3QKX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0gKDMpLCBzdGRjYWxsKSkKX19nZXRk
ZW50cyAoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMpCnsKICBzdHJ1Y3QgZGlyZW50
ICpkcDsKICBvZmY2NF90IGxhc3Rfb2Zmc2V0ID0gLTE7CiAgc3NpemVfdCByZXR2YWw7CgogIHsK
ICAgIGNoYXIgKmtidWYgPSBidWY7CiAgICBzaXplX3Qga2J5dGVzID0gbmJ5dGVzOwogICAgaWYg
KCgoc2l6ZV90KSAmKChzdHJ1Y3QgZGlyZW50ICopMCktPmRfbmFtZSkKICAgICAgICA8ICgoc2l6
ZV90KSAmKChzdHJ1Y3Qga2VybmVsX2RpcmVudDY0ICopMCktPmRfbmFtZSkKICAgICAgICAmJiBu
Ynl0ZXMgPD0gc2l6ZW9mIChzdHJ1Y3QgZGlyZW50KSkKICAgIHsKICAgICAga2J5dGVzID0gbmJ5
dGVzICsgKChzaXplX3QpICYoKHN0cnVjdCBrZXJuZWxfZGlyZW50NjQgKikwKS0+ZF9uYW1lKQog
ICAgICAgICAgICAgICAgLSAoKHNpemVfdCkgJigoc3RydWN0IGRpcmVudCAqKTApLT5kX25hbWUp
OwogICAgICBrYnVmID0gX19idWlsdGluX2FsbG9jYSAoa2J5dGVzKTsKICAgIH0KICAgIHJldHZh
bCA9ICh7IHVuc2lnbmVkIGludCByZXN1bHR2YXI7IGFzbSB2b2xhdGlsZSAoICJicHVzaGwgLkxf
X1gnJWsyLCAlazJcblx0IiAiYm1vdmwgLkxfX1gnJWsyLCAlazJcblx0IiAibW92bCAlMSwgJSVl
YXhcblx0IiAiaW50ICQweDgwXG5cdCIgImJwb3BsIC5MX19YJyVrMiwgJWsyXG5cdCIgOiAiPWEi
IChyZXN1bHR2YXIpIDogImkiICgyMjApICwgImFDRCIgKGZkKSwgImMiICgoa2J1ZikpLCAiZCIg
KGtieXRlcykgOiAibWVtb3J5IiwgImNjIik7IGlmIChyZXN1bHR2YXIgPj0gMHhmZmZmZjAwMSkg
eyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gKC1yZXN1bHR2YXIpOyByZXN1bHR2YXIgPSAweGZm
ZmZmZmZmOyB9IChpbnQpIHJlc3VsdHZhcjsgfSk7CgogICAgewogICAgICBzdHJ1Y3Qga2VybmVs
X2RpcmVudDY0ICprZHA7CiAgICAgIGNvbnN0IHNpemVfdCBzaXplX2RpZmYgPSAoKChzaXplX3Qp
ICYoKHN0cnVjdCBrZXJuZWxfZGlyZW50NjQgKikwKS0+ZF9uYW1lKQogICAgICAgICAgICAgICAt
ICgoc2l6ZV90KSAmKChzdHJ1Y3QgZGlyZW50ICopMCktPmRfbmFtZSkpOwoKICAgICAgaWYgKHJl
dHZhbCA9PSAtMSkgcmV0dXJuIC0xOwoKICAgICAgaWYgKCgoc2l6ZV90KSAmKChzdHJ1Y3QgZGly
ZW50ICopMCktPmRfbmFtZSkKICAgICAgICAgICAgID09ICgoc2l6ZV90KSAmKChzdHJ1Y3Qga2Vy
bmVsX2RpcmVudDY0ICopMCktPmRfbmFtZSkKICAgICAgICAgICAgICYmIHNpemVvZiAoZHAtPmRf
aW5vKSA9PSBzaXplb2YgKGtkcC0+ZF9pbm8pCiAgICAgICAgICAgICAmJiBzaXplb2YgKGRwLT5k
X29mZikgPT0gc2l6ZW9mIChrZHAtPmRfb2ZmKSkKICAgICAgICByZXR1cm4gcmV0dmFsOwoKICAg
ICAgZHAgPSAoc3RydWN0IGRpcmVudCAqKWJ1ZjsKICAgICAga2RwID0gKHN0cnVjdCBrZXJuZWxf
ZGlyZW50NjQgKikga2J1ZjsKICAgICAgd2hpbGUgKChjaGFyICopIGtkcCA8IGtidWYgKyByZXR2
YWwpCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3QgYWxpZ25tZW50ID0gX19hbGlnbm9mX18g
KHN0cnVjdCBkaXJlbnQpOwoKICAgICAgICBzaXplX3Qgb2xkX3JlY2xlbiA9IGtkcC0+ZF9yZWNs
ZW47CiAgICAgICAgc2l6ZV90IG5ld19yZWNsZW4gPSAoKG9sZF9yZWNsZW4gLSBzaXplX2RpZmYg
KyBhbGlnbm1lbnQgLSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmIH4oYWxpZ25tZW50IC0gMSkpOwogICAgICAgIHVpbnQ2NF90IGRfaW5vID0ga2Rw
LT5kX2lubzsKICAgICAgICBpbnQ2NF90IGRfb2ZmID0ga2RwLT5kX29mZjsKICAgICAgICB1bnNp
Z25lZCBjaGFyIGRfdHlwZSA9IGtkcC0+ZF90eXBlOwoKICAgICAgICAoZHApLT5kX2lubyA9IChk
X2lubyk7CiAgICAgICAgZHAtPmRfb2ZmID0gZF9vZmY7CiAgICAgICAgaWYgKChzaXplb2YgKGRw
LT5kX2lubykgIT0gc2l6ZW9mIChrZHAtPmRfaW5vKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIGRwLT5kX2lubyAhPSBkX2lubykKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCAoc2l6ZW9mIChkcC0+ZF9vZmYpICE9IHNpemVvZiAoa2RwLT5kX29mZikKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBkcC0+ZF9vZmYgIT0gZF9vZmYpKQogICAgICAg
IHsKICAgICAgICAgIGlmIChsYXN0X29mZnNldCAhPSAtMSkKICAgICAgICAgIHsKICAgICAgICAg
ICAgX19sc2VlazY0IChmZCwgbGFzdF9vZmZzZXQsIDApOwogICAgICAgICAgICByZXR1cm4gKGNo
YXIgKikgZHAgLSBidWY7CiAgICAgICAgICB9CiAgICAgICAgICAoKl9fZXJybm9fbG9jYXRpb24g
KCkpID0gKDc1KTsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CgogICAgICAgIGxhc3Rf
b2Zmc2V0ID0gZF9vZmY7CiAgICAgICAgZHAtPmRfcmVjbGVuID0gbmV3X3JlY2xlbjsKICAgICAg
ICBkcC0+ZF90eXBlID0gZF90eXBlOwogICAgICAgIG1lbW1vdmUgKGRwLT5kX25hbWUsIGtkcC0+
ZF9uYW1lLAogICAgICAgICAgICBvbGRfcmVjbGVuIC0gKChzaXplX3QpICYoKHN0cnVjdCBrZXJu
ZWxfZGlyZW50NjQgKikwKS0+ZF9uYW1lKSk7CgogICAgICAgIGRwID0gKHN0cnVjdCBkaXJlbnQg
KikgKChjaGFyICopIGRwICsgbmV3X3JlY2xlbik7CiAgICAgICAga2RwID0gKHN0cnVjdCBrZXJu
ZWxfZGlyZW50NjQgKikgKChjaGFyICopIGtkcCArIG9sZF9yZWNsZW4pOwogICAgICB9CgogICAg
ICByZXR1cm4gKGNoYXIgKikgZHAgLSBidWY7CiAgICB9CiAgfQoKICB7CiAgICBzaXplX3QgcmVk
X25ieXRlczsKICAgIHN0cnVjdCBrZXJuZWxfZGlyZW50ICpza2RwLCAqa2RwOwogICAgY29uc3Qg
c2l6ZV90IHNpemVfZGlmZiA9ICgoKHNpemVfdCkgJigoc3RydWN0IGRpcmVudCAqKTApLT5kX25h
bWUpCiAgICAgICAtICgoc2l6ZV90KSAmKChzdHJ1Y3Qga2VybmVsX2RpcmVudCAqKTApLT5kX25h
bWUpKTsKCiAgICByZWRfbmJ5dGVzID0gKCgobmJ5dGVzIC0gKChuYnl0ZXMgLyAoKChzaXplX3Qp
ICYoKHN0cnVjdCBkaXJlbnQgKikwKS0+ZF9uYW1lKSArIDE0KSkgKiBzaXplX2RpZmYpKTwobmJ5
dGVzIC0gc2l6ZV9kaWZmKSk/KG5ieXRlcyAtICgobmJ5dGVzIC8gKCgoc2l6ZV90KSAmKChzdHJ1
Y3QgZGlyZW50ICopMCktPmRfbmFtZSkgKyAxNCkpICogc2l6ZV9kaWZmKSk6KG5ieXRlcyAtIHNp
emVfZGlmZikpOwoKICAgIGRwID0gKHN0cnVjdCBkaXJlbnQgKikgYnVmOwogICAgc2tkcCA9IGtk
cCA9IF9fYnVpbHRpbl9hbGxvY2EgKHJlZF9uYnl0ZXMpOwoKICAgIHJldHZhbCA9ICh7IHVuc2ln
bmVkIGludCByZXN1bHR2YXI7IGFzbSB2b2xhdGlsZSAoICJicHVzaGwgLkxfX1gnJWsyLCAlazJc
blx0IiAiYm1vdmwgLkxfX1gnJWsyLCAlazJcblx0IiAibW92bCAlMSwgJSVlYXhcblx0IiAiaW50
ICQweDgwXG5cdCIgImJwb3BsIC5MX19YJyVrMiwgJWsyXG5cdCIgOiAiPWEiIChyZXN1bHR2YXIp
IDogImkiICgxNDEpICwgImFDRCIgKGZkKSwgImMiICgoKGNoYXIgKikga2RwKSksICJkIiAocmVk
X25ieXRlcykgOiAibWVtb3J5IiwgImNjIik7IGlmIChyZXN1bHR2YXIgPj0gMHhmZmZmZjAwMSkg
eyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gKC1yZXN1bHR2YXIpOyByZXN1bHR2YXIgPSAweGZm
ZmZmZmZmOyB9IChpbnQpIHJlc3VsdHZhcjsgfSk7CiAgICBpZiAocmV0dmFsID09IC0xKSByZXR1
cm4gLTE7CgogICAgd2hpbGUgKChjaGFyICopIGtkcCA8IChjaGFyICopIHNrZHAgKyByZXR2YWwp
CiAgICB7CiAgICAgIGNvbnN0IHNpemVfdCBhbGlnbm1lbnQgPSBfX2FsaWdub2ZfXyAoc3RydWN0
IGRpcmVudCk7CgogICAgICBzaXplX3QgbmV3X3JlY2xlbiA9ICgoa2RwLT5kX3JlY2xlbiArIHNp
emVfZGlmZiArIGFsaWdubWVudCAtIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+KGFs
aWdubWVudCAtIDEpKTsKICAgICAgaWYgKChjaGFyICopIGRwICsgbmV3X3JlY2xlbiA+IGJ1ZiAr
IG5ieXRlcykKICAgICAgewogICAgICAgICgodm9pZCkgKChsYXN0X29mZnNldCAhPSAtMSkgPyAw
IDogKF9fYXNzZXJ0X2ZhaWwgKCJsYXN0X29mZnNldCAhPSAtMSIsICIuLi9zeXNkZXBzL3VuaXgv
c3lzdi9saW51eC9nZXRkZW50cy5jIiwgMjI3LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsK
ICAgICAgICBfX2xzZWVrNjQgKGZkLCBsYXN0X29mZnNldCwgMCk7CgogICAgICAgIGlmICgoY2hh
ciAqKSBkcCA9PSBidWYpCiAgICAgICAgewogICAgICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgp
KSA9ICgyMik7CiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQoKICAgICAgICBicmVhazsK
ICAgICAgfQoKICAgICAgbGFzdF9vZmZzZXQgPSBrZHAtPmRfb2ZmOwogICAgICAoZHApLT5kX2lu
byA9IChrZHAtPmRfaW5vKTsKICAgICAgZHAtPmRfb2ZmID0ga2RwLT5kX29mZjsKICAgICAgZHAt
PmRfcmVjbGVuID0gbmV3X3JlY2xlbjsKICAgICAgZHAtPmRfdHlwZSA9IERUX1VOS05PV047CiAg
ICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoa2RwLT5kX3JlY2xlbiAt
ICgoc2l6ZV90KSAmKChzdHJ1Y3Qga2VybmVsX2RpcmVudCAqKTApLT5kX25hbWUpKSA/ICgoa2Rw
LT5kX3JlY2xlbiAtICgoc2l6ZV90KSAmKChzdHJ1Y3Qga2VybmVsX2RpcmVudCAqKTApLT5kX25h
bWUpKSA9PSAwID8gKGRwLT5kX25hbWUpIDogKCgoa2RwLT5kX3JlY2xlbiAtICgoc2l6ZV90KSAm
KChzdHJ1Y3Qga2VybmVsX2RpcmVudCAqKTApLT5kX25hbWUpKSAlIDQgPT0gMCkgPyBfX21lbWNw
eV9ieTQgKGRwLT5kX25hbWUsIGtkcC0+ZF9uYW1lLCBrZHAtPmRfcmVjbGVuIC0gKChzaXplX3Qp
ICYoKHN0cnVjdCBrZXJuZWxfZGlyZW50ICopMCktPmRfbmFtZSkpIDogKCgoa2RwLT5kX3JlY2xl
biAtICgoc2l6ZV90KSAmKChzdHJ1Y3Qga2VybmVsX2RpcmVudCAqKTApLT5kX25hbWUpKSAlIDIg
PT0gMCkgPyBfX21lbWNweV9ieTIgKGRwLT5kX25hbWUsIGtkcC0+ZF9uYW1lLCBrZHAtPmRfcmVj
bGVuIC0gKChzaXplX3QpICYoKHN0cnVjdCBrZXJuZWxfZGlyZW50ICopMCktPmRfbmFtZSkpIDog
X19tZW1jcHlfZyAoZHAtPmRfbmFtZSwga2RwLT5kX25hbWUsIGtkcC0+ZF9yZWNsZW4gLSAoKHNp
emVfdCkgJigoc3RydWN0IGtlcm5lbF9kaXJlbnQgKikwKS0+ZF9uYW1lKSkpKSkgOiBfX21lbWNw
eV9nIChkcC0+ZF9uYW1lLCBrZHAtPmRfbmFtZSwga2RwLT5kX3JlY2xlbiAtICgoc2l6ZV90KSAm
KChzdHJ1Y3Qga2VybmVsX2RpcmVudCAqKTApLT5kX25hbWUpKSkpOwoKICAgICAgZHAgPSAoc3Ry
dWN0IGRpcmVudCAqKSAoKGNoYXIgKikgZHAgKyBuZXdfcmVjbGVuKTsKICAgICAga2RwID0gKHN0
cnVjdCBrZXJuZWxfZGlyZW50ICopICgoKGNoYXIgKikga2RwKSArIGtkcC0+ZF9yZWNsZW4pOwog
ICAgfQogIH0KCiAgcmV0dXJuIChjaGFyICopIGRwIC0gYnVmOwp9Cg==


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]