libgcj/5508: ARM cross-compiler build fails due to compiler error

jsantala@tml.hut.fi jsantala@tml.hut.fi
Mon Jan 28 02:46:00 GMT 2002


>Number:         5508
>Category:       libgcj
>Synopsis:       ARM cross-compiler build fails due to compiler error
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Jan 28 02:46:08 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Jukka Santala
>Release:        gcc version 3.1 20020122 (experimental)
>Organization:
>Environment:
[jsantala@yavin armg]$ arm-linux-gcc -v
Reading specs from /skiff/local/lib/gcc-lib/arm-linux/3.1/specs
Configured with: ../gcc/configure --target=arm-linux --host=i386-pc-linux-gnu --prefix=/skiff/local --with-cpu=strongarm110
Thread model: posix
gcc version 3.1 20020122 (experimental)
>Description:
/home/jsantala/armg/gcc/xgcc -B/home/jsantala/armg/gcc/ -B/skiff/local/arm-linux/bin/ -B/skiff/local/arm-linux/lib/ -isystem /skiff/local/arm-linux/include -DGC_LINUX_THREADS=1 -D_REENTRANT=1 -DSILENT=1 -DNO_SIGNALS=1 -DNO_EXECUTE_PERMISSION=1 -DALL_INTERIOR_POINTERS=1 -DJAVA_FINALIZATION=1 -DGC_GCJ_SUPPORT=1 -DATOMIC_UNCOLLECTABLE=1 -DNO_SIGSET=1 -DNO_CLOCK=1 -DSMALL_CONFIG=1 -DNO_DEBUGGING=1 -I. -I../../../gcc/boehm-gc -I../../../gcc/boehm-gc/include -fexceptions -I././targ-include -I./../../../gcc/boehm-gc/./libc/include -g -O2 -c ../../../gcc/boehm-gc/specific.c  -fPIC -DPIC -o .libs/specific.o
../../../gcc/boehm-gc/specific.c: In function `GC_key_create':
../../../gcc/boehm-gc/specific.c:32: virtual array reg_n_info[51]: element 51 out of bounds in load_mems, at loop.c:9808


Compiling module with -O1 avoids specific error. I suppose this is an optimization error, but I don't have much idea hwo to classify it, so I put it in Java category too, as it comes up on compiling the Java garbage-collector library.
>How-To-Repeat:
../gcc/configure --target=arm-linux --host=i386-pc-linux-gnu --prefix=/skiff/local --with-cpu=strongarm110
make
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/x-csrc; name="specific.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="specific.i"

IyAxICIuLi8uLi8uLi9nY2MvYm9laG0tZ2Mvc3BlY2lmaWMuYyIKIyAxICI8YnVpbHQtaW4+Igoj
IDEgIjxjb21tYW5kIGxpbmU+IgojIDEgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9zcGVjaWZpYy5j
IgojIDE2ICIuLi8uLi8uLi9nY2MvYm9laG0tZ2Mvc3BlY2lmaWMuYyIKIyAxICIuLi8uLi8uLi9n
Y2MvYm9laG0tZ2MvaW5jbHVkZS9wcml2YXRlL2djX3ByaXYuaCIgMQojIDQwICIuLi8uLi8uLi9n
Y2MvYm9laG0tZ2MvaW5jbHVkZS9wcml2YXRlL2djX3ByaXYuaCIKIyAxICIuLi8uLi8uLi9nY2Mv
Ym9laG0tZ2MvaW5jbHVkZS9nYy5oIiAxCiMgODIgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNs
dWRlL2djLmgiCiMgMSAiL2hvbWUvanNhbnRhbGEvYXJtZy9nY2MvaW5jbHVkZS9zdGRkZWYuaCIg
MSAzCiMgMTQ3ICIvaG9tZS9qc2FudGFsYS9hcm1nL2djYy9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5
cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAyMDEgIi9ob21lL2pzYW50YWxhL2FybWcvZ2NjL2luY2x1
ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDI5NCAiL2hvbWUv
anNhbnRhbGEvYXJtZy9nY2MvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGxvbmcgaW50IHdj
aGFyX3Q7CiMgODMgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL2djLmgiIDIKIyAxMjEg
Ii4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL2djLmgiCiAgICB0eXBlZGVmIHZvaWQgKiBH
Q19QVFI7CiMgMTQyICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIgp0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgR0Nfd29yZDsKdHlwZWRlZiBsb25nIEdDX3NpZ25lZF93b3JkOwoKCgpl
eHRlcm4gR0Nfd29yZCBHQ19nY19ubzsKCgpleHRlcm4gaW50IEdDX3BhcmFsbGVsOwojIDE2MyAi
Li4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCIKZXh0ZXJuIEdDX1BUUiAoKkdDX29v
bV9mbikgKHNpemVfdCBieXRlc19yZXF1ZXN0ZWQpOwojIDE3MiAiLi4vLi4vLi4vZ2NjL2JvZWht
LWdjL2luY2x1ZGUvZ2MuaCIKZXh0ZXJuIGludCBHQ19maW5kX2xlYWs7CgoKCgoKZXh0ZXJuIGlu
dCBHQ19hbGxfaW50ZXJpb3JfcG9pbnRlcnM7CiMgMTkwICIuLi8uLi8uLi9nY2MvYm9laG0tZ2Mv
aW5jbHVkZS9nYy5oIgpleHRlcm4gaW50IEdDX3F1aWV0OwoKCgoKZXh0ZXJuIGludCBHQ19maW5h
bGl6ZV9vbl9kZW1hbmQ7CgoKCgoKCmV4dGVybiBpbnQgR0NfamF2YV9maW5hbGl6YXRpb247CgoK
CgoKCmV4dGVybiB2b2lkICgqIEdDX2ZpbmFsaXplcl9ub3RpZmllcikoKTsKIyAyMTggIi4uLy4u
Ly4uL2djYy9ib2VobS1nYy9pbmNsdWRlL2djLmgiCmV4dGVybiBpbnQgR0NfZG9udF9nYzsKCgpl
eHRlcm4gaW50IEdDX2RvbnRfZXhwYW5kOwoKCgpleHRlcm4gaW50IEdDX3VzZV9lbnRpcmVfaGVh
cDsKIyAyMzYgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL2djLmgiCmV4dGVybiBpbnQg
R0NfZnVsbF9mcmVxOwojIDI0NiAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCIK
ZXh0ZXJuIEdDX3dvcmQgR0Nfbm9uX2djX2J5dGVzOwoKCgoKCmV4dGVybiBpbnQgR0Nfbm9fZGxz
OwoKCgoKCgoKZXh0ZXJuIEdDX3dvcmQgR0NfZnJlZV9zcGFjZV9kaXZpc29yOwojIDI3MyAiLi4v
Li4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCIKZXh0ZXJuIEdDX3dvcmQgR0NfbWF4X3Jl
dHJpZXM7CgoKCgoKZXh0ZXJuIGNoYXIgKkdDX3N0YWNrYm90dG9tOwojIDI5MSAiLi4vLi4vLi4v
Z2NjL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCIKZXh0ZXJuIGludCBHQ19kb250X3ByZWNvbGxlY3Q7
CiMgMzA2ICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIgpleHRlcm4gdm9pZCBH
Q19pbml0ICh2b2lkKTsKIyAzMjQgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL2djLmgi
CmV4dGVybiBHQ19QVFIgR0NfbWFsbG9jIChzaXplX3Qgc2l6ZV9pbl9ieXRlcyk7CmV4dGVybiBH
Q19QVFIgR0NfbWFsbG9jX2F0b21pYyAoc2l6ZV90IHNpemVfaW5fYnl0ZXMpOwpleHRlcm4gR0Nf
UFRSIEdDX21hbGxvY191bmNvbGxlY3RhYmxlIChzaXplX3Qgc2l6ZV9pbl9ieXRlcyk7CmV4dGVy
biBHQ19QVFIgR0NfbWFsbG9jX3N0dWJib3JuIChzaXplX3Qgc2l6ZV9pbl9ieXRlcyk7CgoKCmV4
dGVybiBHQ19QVFIgR0NfbWFsbG9jX2F0b21pY191bmNvbGxlY3RhYmxlIChzaXplX3Qgc2l6ZV9p
bl9ieXRlcyk7CgoKCgoKCgpleHRlcm4gdm9pZCBHQ19mcmVlIChHQ19QVFIgb2JqZWN0X2FkZHIp
OwojIDM1NiAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCIKZXh0ZXJuIHZvaWQg
R0NfY2hhbmdlX3N0dWJib3JuIChHQ19QVFIpOwpleHRlcm4gdm9pZCBHQ19lbmRfc3R1YmJvcm5f
Y2hhbmdlIChHQ19QVFIpOwojIDM2NyAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvZ2Mu
aCIKZXh0ZXJuIEdDX1BUUiBHQ19iYXNlIChHQ19QVFIgZGlzcGxhY2VkX3BvaW50ZXIpOwoKCgoK
ZXh0ZXJuIHNpemVfdCBHQ19zaXplIChHQ19QVFIgb2JqZWN0X2FkZHIpOwojIDM4MiAiLi4vLi4v
Li4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCIKZXh0ZXJuIEdDX1BUUiBHQ19yZWFsbG9jCiAg
ICAgICAgKEdDX1BUUiBvbGRfb2JqZWN0LCBzaXplX3QgbmV3X3NpemVfaW5fYnl0ZXMpOwoKCgpl
eHRlcm4gaW50IEdDX2V4cGFuZF9ocCAoc2l6ZV90IG51bWJlcl9vZl9ieXRlcyk7CgoKCgpleHRl
cm4gdm9pZCBHQ19zZXRfbWF4X2hlYXBfc2l6ZSAoR0Nfd29yZCBuKTsKCgoKCgoKZXh0ZXJuIHZv
aWQgR0NfZXhjbHVkZV9zdGF0aWNfcm9vdHMgKEdDX1BUUiBzdGFydCwgR0NfUFRSIGZpbmlzaCk7
CgoKZXh0ZXJuIHZvaWQgR0NfY2xlYXJfcm9vdHMgKHZvaWQpOwoKCmV4dGVybiB2b2lkIEdDX2Fk
ZF9yb290cyAoY2hhciAqIGxvd19hZGRyZXNzLCBjaGFyICogaGlnaF9hZGRyZXNzX3BsdXNfMSk7
CiMgNDIwICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIgpleHRlcm4gdm9pZCBH
Q19yZWdpc3Rlcl9kaXNwbGFjZW1lbnQgKEdDX3dvcmQgbik7CgoKCmV4dGVybiB2b2lkIEdDX2Rl
YnVnX3JlZ2lzdGVyX2Rpc3BsYWNlbWVudCAoR0Nfd29yZCBuKTsKCgpleHRlcm4gdm9pZCBHQ19n
Y29sbGVjdCAodm9pZCk7CiMgNDM4ICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9nYy5o
Igp0eXBlZGVmIGludCAoKiBHQ19zdG9wX2Z1bmMpICh2b2lkKTsKZXh0ZXJuIGludCBHQ190cnlf
dG9fY29sbGVjdCAoR0Nfc3RvcF9mdW5jIHN0b3BfZnVuYyk7CgoKCgpleHRlcm4gc2l6ZV90IEdD
X2dldF9oZWFwX3NpemUgKHZvaWQpOwoKCmV4dGVybiBzaXplX3QgR0NfZ2V0X2ZyZWVfYnl0ZXMg
KHZvaWQpOwoKCmV4dGVybiBzaXplX3QgR0NfZ2V0X2J5dGVzX3NpbmNlX2djICh2b2lkKTsKCgoK
ZXh0ZXJuIHNpemVfdCBHQ19nZXRfdG90YWxfYnl0ZXMgKHZvaWQpOwojIDQ2NCAiLi4vLi4vLi4v
Z2NjL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCIKZXh0ZXJuIHZvaWQgR0NfZW5hYmxlX2luY3JlbWVu
dGFsICh2b2lkKTsKIyA0NzMgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL2djLmgiCmV4
dGVybiBpbnQgR0NfY29sbGVjdF9hX2xpdHRsZSAodm9pZCk7CiMgNDg5ICIuLi8uLi8uLi9nY2Mv
Ym9laG0tZ2MvaW5jbHVkZS9nYy5oIgpleHRlcm4gR0NfUFRSIEdDX21hbGxvY19pZ25vcmVfb2Zm
X3BhZ2UgKHNpemVfdCBsYik7CmV4dGVybiBHQ19QVFIgR0NfbWFsbG9jX2F0b21pY19pZ25vcmVf
b2ZmX3BhZ2UgKHNpemVfdCBsYik7CiMgNTA3ICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVk
ZS9nYy5oIgpleHRlcm4gR0NfUFRSIEdDX2RlYnVnX21hbGxvYwogICAgICAgIChzaXplX3Qgc2l6
ZV9pbl9ieXRlcywgY29uc3QgY2hhciAqIHMsIGludCBpKTsKZXh0ZXJuIEdDX1BUUiBHQ19kZWJ1
Z19tYWxsb2NfYXRvbWljCiAgICAgICAgKHNpemVfdCBzaXplX2luX2J5dGVzLCBjb25zdCBjaGFy
ICogcywgaW50IGkpOwpleHRlcm4gR0NfUFRSIEdDX2RlYnVnX21hbGxvY191bmNvbGxlY3RhYmxl
CiAgICAgICAgKHNpemVfdCBzaXplX2luX2J5dGVzLCBjb25zdCBjaGFyICogcywgaW50IGkpOwpl
eHRlcm4gR0NfUFRSIEdDX2RlYnVnX21hbGxvY19zdHViYm9ybgogICAgICAgIChzaXplX3Qgc2l6
ZV9pbl9ieXRlcywgY29uc3QgY2hhciAqIHMsIGludCBpKTsKZXh0ZXJuIHZvaWQgR0NfZGVidWdf
ZnJlZSAoR0NfUFRSIG9iamVjdF9hZGRyKTsKZXh0ZXJuIEdDX1BUUiBHQ19kZWJ1Z19yZWFsbG9j
CiAgICAgICAgKEdDX1BUUiBvbGRfb2JqZWN0LCBzaXplX3QgbmV3X3NpemVfaW5fYnl0ZXMsIGNv
bnN0IGNoYXIgKiBzLCBpbnQgaSk7CgoKZXh0ZXJuIHZvaWQgR0NfZGVidWdfY2hhbmdlX3N0dWJi
b3JuIChHQ19QVFIpOwpleHRlcm4gdm9pZCBHQ19kZWJ1Z19lbmRfc3R1YmJvcm5fY2hhbmdlIChH
Q19QVFIpOwojIDU3NiAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCIKdHlwZWRl
ZiB2b2lkICgqR0NfZmluYWxpemF0aW9uX3Byb2MpCiAgICAgICAgKEdDX1BUUiBvYmosIEdDX1BU
UiBjbGllbnRfZGF0YSk7CgpleHRlcm4gdm9pZCBHQ19yZWdpc3Rlcl9maW5hbGl6ZXIKICAgICAg
ICAoR0NfUFRSIG9iaiwgR0NfZmluYWxpemF0aW9uX3Byb2MgZm4sIEdDX1BUUiBjZCwgR0NfZmlu
YWxpemF0aW9uX3Byb2MgKm9mbiwgR0NfUFRSICpvY2QpOwoKZXh0ZXJuIHZvaWQgR0NfZGVidWdf
cmVnaXN0ZXJfZmluYWxpemVyCiAgICAgICAgKEdDX1BUUiBvYmosIEdDX2ZpbmFsaXphdGlvbl9w
cm9jIGZuLCBHQ19QVFIgY2QsIEdDX2ZpbmFsaXphdGlvbl9wcm9jICpvZm4sIEdDX1BUUiAqb2Nk
KTsKIyA2MjYgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL2djLmgiCmV4dGVybiB2b2lk
IEdDX3JlZ2lzdGVyX2ZpbmFsaXplcl9pZ25vcmVfc2VsZgogICAgICAgIChHQ19QVFIgb2JqLCBH
Q19maW5hbGl6YXRpb25fcHJvYyBmbiwgR0NfUFRSIGNkLCBHQ19maW5hbGl6YXRpb25fcHJvYyAq
b2ZuLCBHQ19QVFIgKm9jZCk7CgpleHRlcm4gdm9pZCBHQ19kZWJ1Z19yZWdpc3Rlcl9maW5hbGl6
ZXJfaWdub3JlX3NlbGYKICAgICAgICAoR0NfUFRSIG9iaiwgR0NfZmluYWxpemF0aW9uX3Byb2Mg
Zm4sIEdDX1BUUiBjZCwgR0NfZmluYWxpemF0aW9uX3Byb2MgKm9mbiwgR0NfUFRSICpvY2QpOwoK
CgoKCgpleHRlcm4gdm9pZCBHQ19yZWdpc3Rlcl9maW5hbGl6ZXJfbm9fb3JkZXIKICAgICAgICAo
R0NfUFRSIG9iaiwgR0NfZmluYWxpemF0aW9uX3Byb2MgZm4sIEdDX1BUUiBjZCwgR0NfZmluYWxp
emF0aW9uX3Byb2MgKm9mbiwgR0NfUFRSICpvY2QpOwoKZXh0ZXJuIHZvaWQgR0NfZGVidWdfcmVn
aXN0ZXJfZmluYWxpemVyX25vX29yZGVyCiAgICAgICAgKEdDX1BUUiBvYmosIEdDX2ZpbmFsaXph
dGlvbl9wcm9jIGZuLCBHQ19QVFIgY2QsIEdDX2ZpbmFsaXphdGlvbl9wcm9jICpvZm4sIEdDX1BU
UiAqb2NkKTsKIyA2NTIgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL2djLmgiCmV4dGVy
biBpbnQgR0NfcmVnaXN0ZXJfZGlzYXBwZWFyaW5nX2xpbmsgKEdDX1BUUiAqICk7CiMgNjcyICIu
Li8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIgpleHRlcm4gaW50IEdDX2dlbmVyYWxf
cmVnaXN0ZXJfZGlzYXBwZWFyaW5nX2xpbmsKICAgICAgICAoR0NfUFRSICogLCBHQ19QVFIgb2Jq
KTsKIyA2OTEgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL2djLmgiCmV4dGVybiBpbnQg
R0NfdW5yZWdpc3Rlcl9kaXNhcHBlYXJpbmdfbGluayAoR0NfUFRSICogKTsKCgoKCgoKZXh0ZXJu
IEdDX1BUUiBHQ19tYWtlX2Nsb3N1cmUgKEdDX2ZpbmFsaXphdGlvbl9wcm9jIGZuLCBHQ19QVFIg
ZGF0YSk7CmV4dGVybiB2b2lkIEdDX2RlYnVnX2ludm9rZV9maW5hbGl6ZXIgKEdDX1BUUiBvYmos
IEdDX1BUUiBkYXRhKTsKCgpleHRlcm4gaW50IEdDX3Nob3VsZF9pbnZva2VfZmluYWxpemVycyAo
dm9pZCk7CgpleHRlcm4gaW50IEdDX2ludm9rZV9maW5hbGl6ZXJzICh2b2lkKTsKIyA3MTQgIi4u
Ly4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL2djLmgiCnR5cGVkZWYgdm9pZCAoKkdDX3dhcm5f
cHJvYykgKGNoYXIgKm1zZywgR0Nfd29yZCBhcmcpOwpleHRlcm4gR0Nfd2Fybl9wcm9jIEdDX3Nl
dF93YXJuX3Byb2MgKEdDX3dhcm5fcHJvYyBwKTsKIyA3MzUgIi4uLy4uLy4uL2djYy9ib2VobS1n
Yy9pbmNsdWRlL2djLmgiCnR5cGVkZWYgR0NfUFRSICgqR0NfZm5fdHlwZSkgKEdDX1BUUiBjbGll
bnRfZGF0YSk7CmV4dGVybiBHQ19QVFIgR0NfY2FsbF93aXRoX2FsbG9jX2xvY2sKICAgICAgICAg
ICAgICAgIChHQ19mbl90eXBlIGZuLCBHQ19QVFIgY2xpZW50X2RhdGEpOwojIDc0NyAiLi4vLi4v
Li4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCIKZXh0ZXJuIEdDX1BUUiBHQ19zYW1lX29iaiAo
R0NfUFRSIHAsIEdDX1BUUiBxKTsKCgoKCgpleHRlcm4gR0NfUFRSIEdDX3ByZV9pbmNyIChHQ19Q
VFIgKnAsIHNpemVfdCBob3dfbXVjaCk7CmV4dGVybiBHQ19QVFIgR0NfcG9zdF9pbmNyIChHQ19Q
VFIgKnAsIHNpemVfdCBob3dfbXVjaCk7CiMgNzY0ICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5j
bHVkZS9nYy5oIgpleHRlcm4gR0NfUFRSIEdDX2lzX3Zpc2libGUgKEdDX1BUUiBwKTsKCgoKCgoK
ZXh0ZXJuIEdDX1BUUiBHQ19pc192YWxpZF9kaXNwbGFjZW1lbnQgKEdDX1BUUiBwKTsKIyA4MTkg
Ii4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL2djLmgiCmV4dGVybiB2b2lkICgqR0Nfc2Ft
ZV9vYmpfcHJpbnRfcHJvYykgKEdDX1BUUiBwLCBHQ19QVFIgcSk7CgpleHRlcm4gdm9pZCAoKkdD
X2lzX3ZhbGlkX2Rpc3BsYWNlbWVudF9wcmludF9wcm9jKQogICAgICAgIChHQ19QVFIgcCk7Cgpl
eHRlcm4gdm9pZCAoKkdDX2lzX3Zpc2libGVfcHJpbnRfcHJvYykKICAgICAgICAoR0NfUFRSIHAp
OwoKCgoKCgoKIyAxICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9nY19wdGhyZWFkX3Jl
ZGlyZWN0cy5oIiAxCiMgNDkgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL2djX3B0aHJl
YWRfcmVkaXJlY3RzLmgiCiMgMSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3B0aHJl
YWQuaCIgMSAzCiMgMTggIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9wdGhyZWFkLmgi
IDMKIyAxICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg
MjQ5ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi9z
a2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjUwICIvc2tp
ZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjc3ICIvc2tpZmYv
bG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi9za2lmZi9sb2NhbC9h
cm0tbGludXgvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMjc4ICIvc2tpZmYvbG9jYWwvYXJt
LWxpbnV4L2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMTkgIi9za2lmZi9sb2NhbC9hcm0tbGlu
dXgvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKIyAxICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2lu
Y2x1ZGUvc2NoZWQuaCIgMSAzCiMgMjYgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9z
Y2hlZC5oIiAzCiMgMSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL2JpdHMvdHlwZXMu
aCIgMSAzCiMgMjkgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9iaXRzL3R5cGVzLmgi
IDMKIyAxICIvaG9tZS9qc2FudGFsYS9hcm1nL2djYy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAz
MCAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlw
ZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9z
aG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25n
IF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
X191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7
CiMgNDkgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlw
ZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhf
dDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQg
bG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0
eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVk
ZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191
X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGlu
dCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90
Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19ybGltX3Q7CnR5cGVk
ZWYgX19xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYg
c3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQg
X19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3Rp
bWVfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xv
Y2tfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fZmRfbWFzazsKIyAxMDAgIi9za2lm
Zi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzdHJ1Y3QK
ICB7CgoKCgoKCiAgICBfX2ZkX21hc2sgX19mZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9f
ZmRfbWFzaykpXTsKCgogIH0gX19mZF9zZXQ7CgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBl
ZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKCgp0eXBlZGVmIGxvbmcgaW50
IF9fYmxrY250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191
X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoK
dHlwZWRlZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmls
Y250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90
IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQg
aW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKIyAyNyAiL3NraWZm
L2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3NjaGVkLmgiIDIgMwoKCiMgMSAiL3NraWZmL2xvY2Fs
L2FybS1saW51eC9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgODMgIi9za2lmZi9sb2NhbC9hcm0tbGlu
dXgvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRpbWVzcGVjCiAgewogICAgbG9uZyBpbnQgdHZf
c2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9OwojIDMwICIvc2tpZmYvbG9jYWwvYXJtLWxp
bnV4L2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIyAxICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2lu
Y2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA0NyAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNs
dWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3Qgc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgc2NoZWRf
cHJpb3JpdHk7CiAgfTsKCgoKCgpleHRlcm4gaW50IGNsb25lIChpbnQgKCpfX2ZuKSAodm9pZCAq
X19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLCBpbnQgX19mbGFncywgdm9pZCAqX19hcmcpIDsK
CgoKCgoKCgoKCgpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBzY2hlZF9wcmlvcml0
eTsKICB9OwojIDMzICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvc2NoZWQuaCIgMiAz
CgoKCgpleHRlcm4gaW50IF9fc2NoZWRfc2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIF9fY29uc3Qg
c3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSA7CgpleHRlcm4gaW50IHNjaGVkX3NldHBhcmFt
IChfX3BpZF90IF9fcGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgOwoK
CgpleHRlcm4gaW50IF9fc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hl
ZF9wYXJhbSAqX19wYXJhbSkgOwpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9f
cGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIDsKCgpleHRlcm4gaW50IF9fc2NoZWRf
c2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksIF9fY29uc3Qgc3RydWN0
IHNjaGVkX3BhcmFtICpfX3BhcmFtKSA7CgpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxlciAo
X19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAq
X19wYXJhbSkgOwoKCgpleHRlcm4gaW50IF9fc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90IF9f
cGlkKSA7CmV4dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkKSA7CgoK
ZXh0ZXJuIGludCBfX3NjaGVkX3lpZWxkICh2b2lkKSA7CmV4dGVybiBpbnQgc2NoZWRfeWllbGQg
KHZvaWQpIDsKCgpleHRlcm4gaW50IF9fc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxn
b3JpdGhtKSA7CmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3Jp
dGhtKSA7CgoKZXh0ZXJuIGludCBfX3NjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29y
aXRobSkgOwpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29yaXRo
bSkgOwoKCmV4dGVybiBpbnQgX19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQs
IHN0cnVjdCB0aW1lc3BlYyAqX190KSA7CmV4dGVybiBpbnQgc2NoZWRfcnJfZ2V0X2ludGVydmFs
IChfX3BpZF90IF9fcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCkgOwoKCiMgMjEgIi9za2lmZi9s
b2NhbC9hcm0tbGludXgvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi9za2lmZi9sb2NhbC9h
cm0tbGludXgvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMwICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4
L2luY2x1ZGUvdGltZS5oIiAzCgoKCgoKCgoKIyAxICIvaG9tZS9qc2FudGFsYS9hcm1nL2djYy9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRl
L3RpbWUuaCIgMiAzCgoKCiMgMSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL2JpdHMv
dGltZS5oIiAxIDMKIyA0MyAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3RpbWUuaCIg
MiAzCiMgNjAgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRl
ZiBfX2Nsb2NrX3QgY2xvY2tfdDsKIyA3MSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRl
L3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKIyA5NSAiL3NraWZmL2xvY2FsL2Fy
bS1saW51eC9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50
IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGlu
dCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsK
CgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoK
CgoKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIDsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRp
bWVfdCAqX190aW1lcikgOwoKCmV4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUx
LCB0aW1lX3QgX190aW1lMCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0
ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgOwoKCgoKCmV4dGVybiBzaXplX3Qg
c3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0
IF9fdHApIDsKIyAxNDkgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS90aW1lLmgiIDMK
ZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgOwoKCgpl
eHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSA7CgoK
CgpleHRlcm4gc3RydWN0IHRtICpfX2dtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmlj
dCBfX3RpbWVyLCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgOwoKZXh0ZXJuIHN0cnVjdCB0
bSAqZ210aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsIHN0cnVjdCB0
bSAqX19yZXN0cmljdCBfX3RwKSA7CgoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWVfciAo
X19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwgc3RydWN0IHRtICpfX3Jlc3RyaWN0
IF9fdHApIDsKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9f
dHApIDsKCgpleHRlcm4gY2hhciAqY3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSA7CgoK
CgoKCmV4dGVybiBjaGFyICphc2N0aW1lX3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0
IF9fdHAsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIDsKCgoKZXh0ZXJuIGNoYXIgKmN0aW1lX3Ig
KF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsIGNoYXIgKl9fcmVzdHJpY3QgX19i
dWYpIDsKCgoKCgpleHRlcm4gY2hhciAqX190em5hbWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdo
dDsKZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJd
OwoKCgpleHRlcm4gdm9pZCB0enNldCAodm9pZCkgOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0Owpl
eHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0
aW1lX3QgKl9fd2hlbikgOwojIDIyOCAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3Rp
bWUuaCIgMwpleHRlcm4gdGltZV90IHRpbWVnbSAoc3RydWN0IHRtICpfX3RwKSA7CgoKZXh0ZXJu
IHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVjdCB0bSAqX190cCkgOwoKCmV4dGVybiBpbnQgZHlzaXpl
IChpbnQgX195ZWFyKSA7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0
IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5n
KSA7CiMgMjc3ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvdGltZS5oIiAzCgojIDIy
ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgojIDEgIi9z
a2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMzEgIi9za2lmZi9s
b2NhbC9hcm0tbGludXgvaW5jbHVkZS9zaWduYWwuaCIgMwoKCiMgMSAiL3NraWZmL2xvY2FsL2Fy
bS1saW51eC9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDIzICIvc2tpZmYvbG9jYWwvYXJt
LWxpbnV4L2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNf
dDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEw
MjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsK
IyAzNCAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKIyA0OSAi
L3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3NpZ25hbC5oIiAzCnR5cGVkZWYgX19zaWdz
ZXRfdCBzaWdzZXRfdDsKIyAzNTQgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zaWdu
YWwuaCIgMwoKIyAyNSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3B0aHJlYWQuaCIg
MiAzCiMgMSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz
LmgiIDEgMwojIDIzICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvYml0cy9wdGhyZWFk
dHlwZXMuaCIgMwojIDEgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9iaXRzL3NjaGVk
LmgiIDEgMwojIDI0ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvYml0cy9wdGhyZWFk
dHlwZXMuaCIgMiAzCgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0
YXR1czsKICBpbnQgX19zcGlubG9jazsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVz
Y3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9f
ZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0g
X19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXpl
X3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRk
cjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3Ry
dWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVz
Y3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBp
bnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
cHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsK
ICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tp
bmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhf
dDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4
YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKIyAxMjAgIi9za2lmZi9sb2Nh
bC9hcm0tbGludXgvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDI2ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1
ZGUvcHRocmVhZC5oIiAyIDMKCgoKIyA0OSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRl
L3B0aHJlYWQuaCIgMwplbnVtCnsKICBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSwKCiAgUFRIUkVB
RF9DUkVBVEVfREVUQUNIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX0lOSEVSSVRfU0NIRUQsCgog
IFBUSFJFQURfRVhQTElDSVRfU0NIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX1NDT1BFX1NZU1RF
TSwKCiAgUFRIUkVBRF9TQ09QRV9QUk9DRVNTCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9NVVRFWF9G
QVNUX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJS
T1JDSEVDS19OUAoKCgoKCgoKfTsKCmVudW0KewogIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFLAoK
ICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwojIDEwOCAiL3NraWZmL2xvY2FsL2FybS1saW51
eC9pbmNsdWRlL3B0aHJlYWQuaCIgMwpzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewog
IHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopOwogIHZvaWQgKl9fYXJnOwogIGludCBfX2NhbmNl
bHR5cGU7CiAgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX3ByZXY7Cn07CgoKCmVu
dW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoK
fTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfREVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FT
WU5DSFJPTk9VUwoKfTsKIyAxNDAgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9wdGhy
ZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVhZF90ICpfX3RocmVhZCwg
X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICooKl9fc3RhcnRfcm91dGluZSkg
KHZvaWQgKiksIHZvaWQgKl9fYXJnKSA7CgoKCgoKZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3Nl
bGYgKHZvaWQpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgKHB0aHJlYWRfdCBfX3RocmVh
ZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIpIDsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZv
aWQgKl9fcmV0dmFsKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4g
aW50IHB0aHJlYWRfam9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4p
IDsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoIChwdGhyZWFkX3QgX190aCkgOwoKCgoK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3QgKl9fYXR0cikg
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSAocHRocmVhZF9h
dHRyX3QgKl9fYXR0ciwgaW50IF9fZGV0YWNoc3RhdGUpIDsKCgoKZXh0ZXJuIGludCBwdGhyZWFk
X2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50
ICpfX2RldGFjaHN0YXRlKSA7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFy
YW0gKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpf
X3BhcmFtKSA7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0gKF9fY29u
c3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSA7
CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhyZWFkX2F0dHJf
dCAqX19hdHRyLCBpbnQgX19wb2xpY3kpIDsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0
c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50ICpfX3BvbGlj
eSkgOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQgKHB0aHJlYWRf
YXR0cl90ICpfX2F0dHIsIGludCBfX2luaGVyaXQpIDsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0
dHJfZ2V0aW5oZXJpdHNjaGVkIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCAq
X19pbmhlcml0KSA7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlIChwdGhyZWFk
X2F0dHJfdCAqX19hdHRyLCBpbnQgX19zY29wZSkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X2dldHNjb3BlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCAqX19zY29wZSkg
OwojIDIyOSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs
IHZvaWQgKl9fc3RhY2thZGRyKSA7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNr
YWRkciAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICoqX19zdGFja2FkZHIp
IDsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0
cl90ICpfX2F0dHIsIHNpemVfdCBfX3N0YWNrc2l6ZSkgOwoKCgpleHRlcm4gaW50IHB0aHJlYWRf
YXR0cl9nZXRzdGFja3NpemUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgc2l6ZV90
ICpfX3N0YWNrc2l6ZSkgOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAo
cHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9fcG9saWN5LCBfX2NvbnN0IHN0cnVjdCBz
Y2hlZF9wYXJhbSAqX19wYXJhbSkgOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJh
bSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50ICpfX3BvbGljeSwgc3RydWN0IHNjaGVk
X3BhcmFtICpfX3BhcmFtKSA7CiMgMjcwICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUv
cHRocmVhZC5oIiAzCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X2luaXQgKHB0aHJlYWRfbXV0
ZXhfdCAqX19tdXRleCwgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX211dGV4X2F0dHIp
IDsKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9pbml0IChwdGhyZWFkX211dGV4X3QgKl9fbXV0
ZXgsIF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19tdXRleF9hdHRyKSA7CgoKCmV4dGVy
biBpbnQgX19wdGhyZWFkX211dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkg
OwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211
dGV4KSA7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRl
eF90ICpfX211dGV4KSA7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90cnlsb2NrIChwdGhyZWFk
X211dGV4X3QgKl9fbXV0ZXgpIDsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF9sb2NrIChw
dGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sg
KHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgOwoKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4
X3VubG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSA7CmV4dGVybiBpbnQgcHRocmVhZF9t
dXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgOwoKCgoKCgpleHRlcm4gaW50
IF9fcHRocmVhZF9tdXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSA7
CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRleGF0dHJfdCAq
X19hdHRyKSA7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJl
YWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rl
c3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgOwojIDMyMiAiL3NraWZmL2xvY2Fs
L2FybS1saW51eC9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9p
bml0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kLCBfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAq
X19jb25kX2F0dHIpIDsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfZGVzdHJveSAocHRocmVh
ZF9jb25kX3QgKl9fY29uZCkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3NpZ25hbCAocHRo
cmVhZF9jb25kX3QgKl9fY29uZCkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2Fz
dCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93
YWl0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kLCBwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIDsK
CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0IChwdGhyZWFkX2NvbmRfdCAq
X19jb25kLCBwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVj
ICpfX2Fic3RpbWUpIDsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0
aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRy
X2Rlc3Ryb3kgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSA7CiMgNDE5ICIvc2tpZmYvbG9j
YWwvYXJtLWxpbnV4L2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgX19wdGhyZWFkX2tl
eV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LCB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikg
KHZvaWQgKikpIDsKCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfY3JlYXRlIChwdGhyZWFkX2tleV90
ICpfX2tleSwgdm9pZCAoKl9fZGVzdHJfZnVuY3Rpb24pICh2b2lkICopKSA7CgoKCmV4dGVybiBp
bnQgcHRocmVhZF9rZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IF9fa2V5KSA7CgoKZXh0ZXJuIGlu
dCBfX3B0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksIF9fY29uc3Qgdm9p
ZCAqX19wb2ludGVyKSA7CgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRf
a2V5X3QgX19rZXksIF9fY29uc3Qgdm9pZCAqX19wb2ludGVyKSA7CgoKCmV4dGVybiB2b2lkICpf
X3B0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpIDsKZXh0ZXJuIHZvaWQg
KnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpIDsKIyA0NDQgIi9za2lm
Zi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBfX3B0aHJl
YWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9sLCB2b2lkICgqX19pbml0X3Jv
dXRpbmUpICh2b2lkKSkgOwoKZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90
ICpfX29uY2VfY29udHJvbCwgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpIDsKCgoKCgoK
CmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAoaW50IF9fc3RhdGUsIGludCAqX19v
bGRzdGF0ZSkgOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlwZSAoaW50IF9fdHlw
ZSwgaW50ICpfX29sZHR5cGUpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFk
X3QgX190aHJlYWQpIDsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCkg
OwojIDQ4MCAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRl
cm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2ggKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1
ZmZlciAqX19idWZmZXIsIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLCB2b2lkICpfX2FyZykg
OwojIDQ5MCAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRl
cm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVm
ZmVyICpfX2J1ZmZlciwgaW50IF9fZXhlY3V0ZSkgOwojIDUxNyAiL3NraWZmL2xvY2FsL2FybS1s
aW51eC9pbmNsdWRlL3B0aHJlYWQuaCIgMwojIDEgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5j
bHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMKIyAzMSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9p
bmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21hc2sgKGlu
dCBfX2hvdywgX19jb25zdCBfX3NpZ3NldF90ICpfX25ld21hc2ssIF9fc2lnc2V0X3QgKl9fb2xk
bWFzaykgOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkLCBp
bnQgX19zaWdubykgOwojIDUxOCAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3B0aHJl
YWQuaCIgMiAzCiMgNTMzICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvcHRocmVhZC5o
IiAzCmV4dGVybiBpbnQgX19wdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQp
LCB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwgdm9pZCAo
Kl9fcGFyZW50KSAodm9pZCksIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIDsKCgoKCgoKZXh0ZXJu
IHZvaWQgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgKHZvaWQpIDsKCgoKZXh0ZXJuIHZv
aWQgX19wdGhyZWFkX2luaXRpYWxpemUgKHZvaWQpIDsKCgojIDUwICIuLi8uLi8uLi9nY2MvYm9l
aG0tZ2MvaW5jbHVkZS9nY19wdGhyZWFkX3JlZGlyZWN0cy5oIiAyCiMgMSAiL3NraWZmL2xvY2Fs
L2FybS1saW51eC9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIyAzMSAiL3NraWZmL2xvY2FsL2FybS1s
aW51eC9pbmNsdWRlL3NpZ25hbC5oIiAzCgoKIyAxICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2lu
Y2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMTAzICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2lu
Y2x1ZGUvYml0cy9zaWdzZXQuaCIgMwpleHRlcm4gaW50IF9fc2lnaXNtZW1iZXIgKF9fY29uc3Qg
X19zaWdzZXRfdCAqLCBpbnQpOwpleHRlcm4gaW50IF9fc2lnYWRkc2V0IChfX3NpZ3NldF90ICos
IGludCk7CmV4dGVybiBpbnQgX19zaWdkZWxzZXQgKF9fc2lnc2V0X3QgKiwgaW50KTsKIyAxMTcg
Ii9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCmV4dGVybiBf
X2lubGluZSBpbnQgX19zaWdpc21lbWJlciAoX19jb25zdCBfX3NpZ3NldF90ICpfX3NldCwgaW50
IF9fc2lnKSB7IHVuc2lnbmVkIGxvbmcgaW50IF9fbWFzayA9ICgoKHVuc2lnbmVkIGxvbmcgaW50
KSAxKSA8PCAoKChfX3NpZykgLSAxKSAlICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkp
KSk7IHVuc2lnbmVkIGxvbmcgaW50IF9fd29yZCA9ICgoKF9fc2lnKSAtIDEpIC8gKDggKiBzaXpl
b2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpOyByZXR1cm4gKF9fc2V0LT5fX3ZhbFtfX3dvcmRdICYg
X19tYXNrKSA/IDEgOiAwOyB9CmV4dGVybiBfX2lubGluZSBpbnQgX19zaWdhZGRzZXQgKCBfX3Np
Z3NldF90ICpfX3NldCwgaW50IF9fc2lnKSB7IHVuc2lnbmVkIGxvbmcgaW50IF9fbWFzayA9ICgo
KHVuc2lnbmVkIGxvbmcgaW50KSAxKSA8PCAoKChfX3NpZykgLSAxKSAlICg4ICogc2l6ZW9mICh1
bnNpZ25lZCBsb25nIGludCkpKSk7IHVuc2lnbmVkIGxvbmcgaW50IF9fd29yZCA9ICgoKF9fc2ln
KSAtIDEpIC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpOyByZXR1cm4gKChfX3Nl
dC0+X192YWxbX193b3JkXSB8PSBfX21hc2spLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgaW50IF9f
c2lnZGVsc2V0ICggX19zaWdzZXRfdCAqX19zZXQsIGludCBfX3NpZykgeyB1bnNpZ25lZCBsb25n
IGludCBfX21hc2sgPSAoKCh1bnNpZ25lZCBsb25nIGludCkgMSkgPDwgKCgoX19zaWcpIC0gMSkg
JSAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSkpOyB1bnNpZ25lZCBsb25nIGludCBf
X3dvcmQgPSAoKChfX3NpZykgLSAxKSAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkp
KTsgcmV0dXJuICgoX19zZXQtPl9fdmFsW19fd29yZF0gJj0gfl9fbWFzayksIDApOyB9CiMgMzQg
Ii9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zaWduYWwuaCIgMiAzCgoKCgoKCgp0eXBl
ZGVmIF9fc2lnX2F0b21pY190IHNpZ19hdG9taWNfdDsKIyA1NiAiL3NraWZmL2xvY2FsL2FybS1s
aW51eC9pbmNsdWRlL3NpZ25hbC5oIiAzCiMgMSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNs
dWRlL2JpdHMvc2lnbnVtLmgiIDEgMwojIDU3ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1
ZGUvc2lnbmFsLmgiIDIgMwojIDY1ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvc2ln
bmFsLmgiIDMKdHlwZWRlZiB2b2lkICgqX19zaWdoYW5kbGVyX3QpIChpbnQpOwoKCgoKZXh0ZXJu
IF9fc2lnaGFuZGxlcl90IF9fc3lzdl9zaWduYWwgKGludCBfX3NpZywgX19zaWdoYW5kbGVyX3Qg
X19oYW5kbGVyKSA7CiMgODAgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zaWduYWwu
aCIgMwpleHRlcm4gX19zaWdoYW5kbGVyX3Qgc2lnbmFsIChpbnQgX19zaWcsIF9fc2lnaGFuZGxl
cl90IF9faGFuZGxlcikgOwojIDEwMiAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3Np
Z25hbC5oIiAzCmV4dGVybiBpbnQga2lsbCAoX19waWRfdCBfX3BpZCwgaW50IF9fc2lnKSA7CgoK
CgoKCmV4dGVybiBpbnQga2lsbHBnIChfX3BpZF90IF9fcGdycCwgaW50IF9fc2lnKSA7CgoKCmV4
dGVybiBpbnQgcmFpc2UgKGludCBfX3NpZykgOwoKCgpleHRlcm4gX19zaWdoYW5kbGVyX3Qgc3Np
Z25hbCAoaW50IF9fc2lnLCBfX3NpZ2hhbmRsZXJfdCBfX2hhbmRsZXIpIDsKZXh0ZXJuIGludCBn
c2lnbmFsIChpbnQgX19zaWcpIDsKCgoKCmV4dGVybiB2b2lkIHBzaWduYWwgKGludCBfX3NpZywg
X19jb25zdCBjaGFyICpfX3MpIDsKIyAxMzIgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVk
ZS9zaWduYWwuaCIgMwpleHRlcm4gaW50IF9fc2lncGF1c2UgKGludCBfX3NpZ19vcl9tYXNrLCBp
bnQgX19pc19zaWcpIDsKCgoKCmV4dGVybiBpbnQgc2lncGF1c2UgKGludCBfX21hc2spIDsKIyAx
NTcgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zaWduYWwuaCIgMwpleHRlcm4gaW50
IHNpZ2Jsb2NrIChpbnQgX19tYXNrKSA7CgoKZXh0ZXJuIGludCBzaWdzZXRtYXNrIChpbnQgX19t
YXNrKSA7CgoKZXh0ZXJuIGludCBzaWdnZXRtYXNrICh2b2lkKSA7CiMgMTc3ICIvc2tpZmYvbG9j
YWwvYXJtLWxpbnV4L2luY2x1ZGUvc2lnbmFsLmgiIDMKdHlwZWRlZiBfX3NpZ2hhbmRsZXJfdCBz
aWdfdDsKIyAxODggIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zaWduYWwuaCIgMwoj
IDEgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMSAzCiMg
MjkgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwp0eXBl
ZGVmIHVuaW9uIHNpZ3ZhbAogIHsKICAgIGludCBzaXZhbF9pbnQ7CiAgICB2b2lkICpzaXZhbF9w
dHI7CiAgfSBzaWd2YWxfdDsKCgoKCnR5cGVkZWYgc3RydWN0IHNpZ2luZm8KICB7CiAgICBpbnQg
c2lfc2lnbm87CiAgICBpbnQgc2lfZXJybm87CgogICAgaW50IHNpX2NvZGU7CgogICAgdW5pb24K
ICAgICAgewogICAgICAgIGludCBfcGFkWygoMTI4IC8gc2l6ZW9mIChpbnQpKSAtIDMpXTsKCgog
ICAgICAgIHN0cnVjdAogICAgICAgICAgewogICAgICAgICAgICBfX3BpZF90IHNpX3BpZDsKICAg
ICAgICAgICAgX191aWRfdCBzaV91aWQ7CiAgICAgICAgICB9IF9raWxsOwoKCiAgICAgICAgc3Ry
dWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIHVuc2lnbmVkIGludCBfdGltZXIxOwogICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgX3RpbWVyMjsKICAgICAgICAgIH0gX3RpbWVyOwoKCiAgICAgICAg
c3RydWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIF9fcGlkX3Qgc2lfcGlkOwogICAgICAgICAg
ICBfX3VpZF90IHNpX3VpZDsKICAgICAgICAgICAgc2lndmFsX3Qgc2lfc2lndmFsOwogICAgICAg
ICAgfSBfcnQ7CgoKICAgICAgICBzdHJ1Y3QKICAgICAgICAgIHsKICAgICAgICAgICAgX19waWRf
dCBzaV9waWQ7CiAgICAgICAgICAgIF9fdWlkX3Qgc2lfdWlkOwogICAgICAgICAgICBpbnQgc2lf
c3RhdHVzOwogICAgICAgICAgICBfX2Nsb2NrX3Qgc2lfdXRpbWU7CiAgICAgICAgICAgIF9fY2xv
Y2tfdCBzaV9zdGltZTsKICAgICAgICAgIH0gX3NpZ2NobGQ7CgoKICAgICAgICBzdHJ1Y3QKICAg
ICAgICAgIHsKICAgICAgICAgICAgdm9pZCAqc2lfYWRkcjsKICAgICAgICAgIH0gX3NpZ2ZhdWx0
OwoKCiAgICAgICAgc3RydWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIGludCBzaV9iYW5kOwog
ICAgICAgICAgICBpbnQgc2lfZmQ7CiAgICAgICAgICB9IF9zaWdwb2xsOwogICAgICB9IF9zaWZp
ZWxkczsKICB9IHNpZ2luZm9fdDsKIyAxMTMgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVk
ZS9iaXRzL3NpZ2luZm8uaCIgMwplbnVtCnsKICBTSV9TSUdJTyA9IC01LAoKICBTSV9BU1lOQ0lP
LAoKICBTSV9NRVNHUSwKCiAgU0lfVElNRVIsCgogIFNJX1FVRVVFLAoKICBTSV9VU0VSCgp9OwoK
CgplbnVtCnsKICBJTExfSUxMT1BDID0gMSwKCiAgSUxMX0lMTE9QTiwKCiAgSUxMX0lMTEFEUiwK
CiAgSUxMX0lMTFRSUCwKCiAgSUxMX1BSVk9QQywKCiAgSUxMX1BSVlJFRywKCiAgSUxMX0NPUFJP
QywKCiAgSUxMX0JBRFNUSwoKfTsKCgplbnVtCnsKICBGUEVfSU5URElWID0gMSwKCiAgRlBFX0lO
VE9WRiwKCiAgRlBFX0ZMVERJViwKCiAgRlBFX0ZMVE9WRiwKCiAgRlBFX0ZMVFVORCwKCiAgRlBF
X0ZMVFJFUywKCiAgRlBFX0ZMVElOViwKCiAgRlBFX0ZMVFNVQgoKfTsKCgplbnVtCnsKICBTRUdW
X01BUEVSUiA9IDEsCgogIFNFR1ZfQUNDRVJSCgp9OwoKCmVudW0KewogIEJVU19BRFJBTE4gPSAx
LAoKICBCVVNfQURSRVJSLAoKICBCVVNfT0JKRVJSCgp9OwoKCmVudW0KewogIFRSQVBfQlJLUFQg
PSAxLAoKICBUUkFQX1RSQUNFCgp9OwoKCmVudW0KewogIENMRF9FWElURUQgPSAxLAoKICBDTERf
S0lMTEVELAoKICBDTERfRFVNUEVELAoKICBDTERfVFJBUFBFRCwKCiAgQ0xEX1NUT1BQRUQsCgog
IENMRF9DT05USU5VRUQKCn07CgoKZW51bQp7CiAgUE9MTF9JTiA9IDEsCgogIFBPTExfT1VULAoK
ICBQT0xMX01TRywKCiAgUE9MTF9FUlIsCgogIFBPTExfUFJJLAoKICBQT0xMX0hVUAoKfTsKIyAy
NDYgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwp0eXBl
ZGVmIHN0cnVjdCBzaWdldmVudAogIHsKICAgIHNpZ3ZhbF90IHNpZ2V2X3ZhbHVlOwogICAgaW50
IHNpZ2V2X3NpZ25vOwogICAgaW50IHNpZ2V2X25vdGlmeTsKCiAgICB1bmlvbgogICAgICB7CiAg
ICAgICAgaW50IF9wYWRbKCg2NCAvIHNpemVvZiAoaW50KSkgLSAzKV07CgogICAgICAgIHN0cnVj
dAogICAgICAgICAgewogICAgICAgICAgICB2b2lkICgqX2Z1bmN0aW9uKSAoc2lndmFsX3QpOwog
ICAgICAgICAgICB2b2lkICpfYXR0cmlidXRlOwogICAgICAgICAgfSBfc2lnZXZfdGhyZWFkOwog
ICAgICB9IF9zaWdldl91bjsKICB9IHNpZ2V2ZW50X3Q7CgoKCgoKCmVudW0KewogIFNJR0VWX1NJ
R05BTCA9IDAsCgogIFNJR0VWX05PTkUsCgogIFNJR0VWX1RIUkVBRAoKfTsKIyAxODkgIi9za2lm
Zi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zaWduYWwuaCIgMiAzCgoKCmV4dGVybiBpbnQgc2ln
ZW1wdHlzZXQgKHNpZ3NldF90ICpfX3NldCkgOwoKCmV4dGVybiBpbnQgc2lnZmlsbHNldCAoc2ln
c2V0X3QgKl9fc2V0KSA7CgoKZXh0ZXJuIGludCBzaWdhZGRzZXQgKHNpZ3NldF90ICpfX3NldCwg
aW50IF9fc2lnbm8pIDsKCgpleHRlcm4gaW50IHNpZ2RlbHNldCAoc2lnc2V0X3QgKl9fc2V0LCBp
bnQgX19zaWdubykgOwoKCmV4dGVybiBpbnQgc2lnaXNtZW1iZXIgKF9fY29uc3Qgc2lnc2V0X3Qg
Kl9fc2V0LCBpbnQgX19zaWdubykgOwojIDIyMSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNs
dWRlL3NpZ25hbC5oIiAzCiMgMSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL2JpdHMv
c2lnYWN0aW9uLmgiIDEgMwojIDI1ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvYml0
cy9zaWdhY3Rpb24uaCIgMwpzdHJ1Y3Qgc2lnYWN0aW9uCiAgewoKCiAgICB1bmlvbgogICAgICB7
CgogICAgICAgIF9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CgogICAgICAgIHZvaWQgKCpzYV9z
aWdhY3Rpb24pIChpbnQsIHNpZ2luZm9fdCAqLCB2b2lkICopOwogICAgICB9CiAgICBfX3NpZ2Fj
dGlvbl9oYW5kbGVyOwoKCgoKCgoKICAgIF9fc2lnc2V0X3Qgc2FfbWFzazsKCgogICAgaW50IHNh
X2ZsYWdzOwoKCiAgICB2b2lkICgqc2FfcmVzdG9yZXIpICh2b2lkKTsKICB9OwojIDIyMiAiL3Nr
aWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKCgpleHRlcm4gaW50IHNp
Z3Byb2NtYXNrIChpbnQgX19ob3csIF9fY29uc3Qgc2lnc2V0X3QgKl9fc2V0LCBzaWdzZXRfdCAq
X19vc2V0KSA7CgoKCgpleHRlcm4gaW50IHNpZ3N1c3BlbmQgKF9fY29uc3Qgc2lnc2V0X3QgKl9f
c2V0KSA7CgoKZXh0ZXJuIGludCBfX3NpZ2FjdGlvbiAoaW50IF9fc2lnLCBfX2NvbnN0IHN0cnVj
dCBzaWdhY3Rpb24gKl9fYWN0LCBzdHJ1Y3Qgc2lnYWN0aW9uICpfX29hY3QpIDsKCmV4dGVybiBp
bnQgc2lnYWN0aW9uIChpbnQgX19zaWcsIF9fY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiAqX19hY3Qs
IHN0cnVjdCBzaWdhY3Rpb24gKl9fb2FjdCkgOwoKCgpleHRlcm4gaW50IHNpZ3BlbmRpbmcgKHNp
Z3NldF90ICpfX3NldCkgOwoKCgpleHRlcm4gaW50IHNpZ3dhaXQgKF9fY29uc3Qgc2lnc2V0X3Qg
Kl9fc2V0LCBpbnQgKl9fc2lnKSA7CgoKCmV4dGVybiBpbnQgc2lnd2FpdGluZm8gKF9fY29uc3Qg
c2lnc2V0X3QgKl9fc2V0LCBzaWdpbmZvX3QgKl9faW5mbykgOwoKCgpleHRlcm4gaW50IHNpZ3Rp
bWVkd2FpdCAoX19jb25zdCBzaWdzZXRfdCAqX19zZXQsIHNpZ2luZm9fdCAqX19pbmZvLCBfX2Nv
bnN0IHN0cnVjdCB0aW1lc3BlYyAqX190aW1lb3V0KSA7CgoKCgpleHRlcm4gaW50IHNpZ3F1ZXVl
IChfX3BpZF90IF9fcGlkLCBpbnQgX19zaWcsIF9fY29uc3QgdW5pb24gc2lndmFsIF9fdmFsKSA7
CiMgMjY1ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJu
IF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX3NpZ2xpc3RbNjRdOwpleHRlcm4gX19jb25zdCBj
aGFyICpfX2NvbnN0IHN5c19zaWdsaXN0WzY0XTsKCgpzdHJ1Y3Qgc2lndmVjCiAgewogICAgX19z
aWdoYW5kbGVyX3Qgc3ZfaGFuZGxlcjsKICAgIGludCBzdl9tYXNrOwoKICAgIGludCBzdl9mbGFn
czsKCiAgfTsKIyAyODkgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zaWduYWwuaCIg
MwpleHRlcm4gaW50IHNpZ3ZlYyAoaW50IF9fc2lnLCBfX2NvbnN0IHN0cnVjdCBzaWd2ZWMgKl9f
dmVjLCBzdHJ1Y3Qgc2lndmVjICpfX292ZWMpIDsKCgoKCiMgMSAiL3NraWZmL2xvY2FsL2FybS1s
aW51eC9pbmNsdWRlL2JpdHMvc2lnY29udGV4dC5oIiAxIDMKIyAyOCAiL3NraWZmL2xvY2FsL2Fy
bS1saW51eC9pbmNsdWRlL2JpdHMvc2lnY29udGV4dC5oIiAzCiMgMSAiL3NraWZmL2xvY2FsL2Fy
bS1saW51eC9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgiIDEgMwojIDkgIi9za2lmZi9sb2NhbC9h
cm0tbGludXgvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIiAzCnN0cnVjdCBzaWdjb250ZXh0IHsK
ICAgICAgICB1bnNpZ25lZCBsb25nIHRyYXBfbm87CiAgICAgICAgdW5zaWduZWQgbG9uZyBlcnJv
cl9jb2RlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgb2xkbWFzazsKICAgICAgICB1bnNpZ25lZCBs
b25nIGFybV9yMDsKICAgICAgICB1bnNpZ25lZCBsb25nIGFybV9yMTsKICAgICAgICB1bnNpZ25l
ZCBsb25nIGFybV9yMjsKICAgICAgICB1bnNpZ25lZCBsb25nIGFybV9yMzsKICAgICAgICB1bnNp
Z25lZCBsb25nIGFybV9yNDsKICAgICAgICB1bnNpZ25lZCBsb25nIGFybV9yNTsKICAgICAgICB1
bnNpZ25lZCBsb25nIGFybV9yNjsKICAgICAgICB1bnNpZ25lZCBsb25nIGFybV9yNzsKICAgICAg
ICB1bnNpZ25lZCBsb25nIGFybV9yODsKICAgICAgICB1bnNpZ25lZCBsb25nIGFybV9yOTsKICAg
ICAgICB1bnNpZ25lZCBsb25nIGFybV9yMTA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBhcm1fZnA7
CiAgICAgICAgdW5zaWduZWQgbG9uZyBhcm1faXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBhcm1f
c3A7CiAgICAgICAgdW5zaWduZWQgbG9uZyBhcm1fbHI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBh
cm1fcGM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBhcm1fY3BzcjsKICAgICAgICB1bnNpZ25lZCBs
b25nIGZhdWx0X2FkZHJlc3M7Cn07CiMgMjkgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVk
ZS9iaXRzL3NpZ2NvbnRleHQuaCIgMiAzCiMgMjk1ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2lu
Y2x1ZGUvc2lnbmFsLmgiIDIgMwoKCmV4dGVybiBpbnQgc2lncmV0dXJuIChzdHJ1Y3Qgc2lnY29u
dGV4dCAqX19zY3ApIDsKIyAzMDcgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zaWdu
YWwuaCIgMwpleHRlcm4gaW50IHNpZ2ludGVycnVwdCAoaW50IF9fc2lnLCBpbnQgX19pbnRlcnJ1
cHQpIDsKCiMgMSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL2JpdHMvc2lnc3RhY2su
aCIgMSAzCiMgMjYgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9iaXRzL3NpZ3N0YWNr
LmgiIDMKc3RydWN0IHNpZ3N0YWNrCiAgewogICAgdm9pZCAqIHNzX3NwOwogICAgaW50IHNzX29u
c3RhY2s7CiAgfTsKCgoKZW51bQp7CiAgU1NfT05TVEFDSyA9IDEsCgogIFNTX0RJU0FCTEUKCn07
CiMgNTAgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9iaXRzL3NpZ3N0YWNrLmgiIDMK
dHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sKICB7CiAgICB2b2lkICogc3Nfc3A7CiAgICBpbnQg
c3NfZmxhZ3M7CiAgICBzaXplX3Qgc3Nfc2l6ZTsKICB9IHN0YWNrX3Q7CiMgMzEwICIvc2tpZmYv
bG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKCgoKZXh0ZXJuIGludCBzaWdz
dGFjayAoX19jb25zdCBzdHJ1Y3Qgc2lnc3RhY2sgKl9fc3MsIHN0cnVjdCBzaWdzdGFjayAqX19v
c3MpIDsKCgoKCmV4dGVybiBpbnQgc2lnYWx0c3RhY2sgKF9fY29uc3Qgc3RydWN0IHNpZ2FsdHN0
YWNrICpfX3NzLCBzdHJ1Y3Qgc2lnYWx0c3RhY2sgKl9fb3NzKSA7CiMgMzQ4ICIvc2tpZmYvbG9j
YWwvYXJtLWxpbnV4L2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuIGludCBfX2xpYmNfY3VycmVu
dF9zaWdydG1pbiAodm9pZCkgOwoKZXh0ZXJuIGludCBfX2xpYmNfY3VycmVudF9zaWdydG1heCAo
dm9pZCkgOwoKCgoKIyA1MSAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvZ2NfcHRocmVh
ZF9yZWRpcmVjdHMuaCIgMgoKICBpbnQgR0NfcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICpuZXdf
dGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwdGhyZWFkX2F0dHJfdCAqYXR0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKCpzdGFydF9yb3V0aW5lKSh2b2lkICop
LCB2b2lkICphcmcpOwogIGludCBHQ19wdGhyZWFkX3NpZ21hc2soaW50IGhvdywgY29uc3Qgc2ln
c2V0X3QgKnNldCwgc2lnc2V0X3QgKm9zZXQpOwogIGludCBHQ19wdGhyZWFkX2pvaW4ocHRocmVh
ZF90IHRocmVhZCwgdm9pZCAqKnJldHZhbCk7CiAgaW50IEdDX3B0aHJlYWRfZGV0YWNoKHB0aHJl
YWRfdCB0aHJlYWQpOwojIDgzNCAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCIg
MgojIDg0NSAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCIKR0NfUFRSIEdDX21h
bGxvY19tYW55KHNpemVfdCBsYik7CgoKZXh0ZXJuIHZvaWQgR0NfdGhyX2luaXQoKTsKIyA0MSAi
Li4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvcHJpdmF0ZS9nY19wcml2LmgiIDIKCgoKIyAx
ICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9nY19tYXJrLmgiIDEKIyA1NyAiLi4vLi4v
Li4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvZ2NfbWFyay5oIgpzdHJ1Y3QgR0NfbXNfZW50cnk7CnR5
cGVkZWYgc3RydWN0IEdDX21zX2VudHJ5ICogKCpHQ19tYXJrX3Byb2MpICggR0Nfd29yZCAqIGFk
ZHIsIHN0cnVjdCBHQ19tc19lbnRyeSAqIG1hcmtfc3RhY2tfcHRyLCBzdHJ1Y3QgR0NfbXNfZW50
cnkgKiBtYXJrX3N0YWNrX2xpbWl0LCBHQ193b3JkIGVudik7CiMgMTExICIuLi8uLi8uLi9nY2Mv
Ym9laG0tZ2MvaW5jbHVkZS9nY19tYXJrLmgiCmV4dGVybiBHQ19QVFIgR0NfbGVhc3RfcGxhdXNp
YmxlX2hlYXBfYWRkcjsKZXh0ZXJuIEdDX1BUUiBHQ19ncmVhdGVzdF9wbGF1c2libGVfaGVhcF9h
ZGRyOwojIDEzMyAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvZ2NfbWFyay5oIgpzdHJ1
Y3QgR0NfbXNfZW50cnkgKkdDX21hcmtfYW5kX3B1c2gKICAgICAgICAgICAgICAgIChHQ19QVFIg
b2JqLCBzdHJ1Y3QgR0NfbXNfZW50cnkgKiBtYXJrX3N0YWNrX3B0ciwgc3RydWN0IEdDX21zX2Vu
dHJ5ICogbWFya19zdGFja19saW1pdCwgR0NfUFRSICpzcmMpOwojIDQ1ICIuLi8uLi8uLi9nY2Mv
Ym9laG0tZ2MvaW5jbHVkZS9wcml2YXRlL2djX3ByaXYuaCIgMgoKCgojIDEgIi4uLy4uLy4uL2dj
Yy9ib2VobS1nYy9pbmNsdWRlL3ByaXZhdGUvZ2Njb25maWcuaCIgMQojIDE0ODcgIi4uLy4uLy4u
L2djYy9ib2VobS1nYy9pbmNsdWRlL3ByaXZhdGUvZ2Njb25maWcuaCIKICAgICAgICAgICAgIGV4
dGVybiBpbnQgX2VuZDsKIyAxNTMxICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9wcml2
YXRlL2djY29uZmlnLmgiCiNwcmFnbWEgd2VhayBfX2RhdGFfc3RhcnQKICAgIGV4dGVybiBpbnQg
X19kYXRhX3N0YXJ0OwojcHJhZ21hIHdlYWsgZGF0YV9zdGFydAogICAgZXh0ZXJuIGludCBkYXRh
X3N0YXJ0OwojIDQ5ICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9wcml2YXRlL2djX3By
aXYuaCIgMgoKCnR5cGVkZWYgR0Nfd29yZCB3b3JkOwp0eXBlZGVmIEdDX3NpZ25lZF93b3JkIHNp
Z25lZF93b3JkOwoKdHlwZWRlZiBpbnQgR0NfYm9vbDsKCgoKdHlwZWRlZiBjaGFyICogcHRyX3Q7
CgoKCgoKIyAxICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9wcml2YXRlL2djX2hkcnMu
aCIgMQojIDE3ICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9wcml2YXRlL2djX2hkcnMu
aCIKdHlwZWRlZiBzdHJ1Y3QgaGJsa2hkciBoZHI7CiMgNjMgIi4uLy4uLy4uL2djYy9ib2VobS1n
Yy9pbmNsdWRlL3ByaXZhdGUvZ2NfaGRycy5oIgpleHRlcm4gaGRyICogR0NfaW52YWxpZF9oZWFk
ZXI7CiMgMTQ2ICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9wcml2YXRlL2djX2hkcnMu
aCIKdHlwZWRlZiBzdHJ1Y3QgYmkgewogICAgaGRyICogaW5kZXhbKDEgPDwgMTEpXTsKIyAxNTcg
Ii4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL3ByaXZhdGUvZ2NfaGRycy5oIgogICAgc3Ry
dWN0IGJpICogYXNjX2xpbms7CgogICAgc3RydWN0IGJpICogZGVzY19saW5rOwogICAgd29yZCBr
ZXk7CgoKCn0gYm90dG9tX2luZGV4OwojIDY1ICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVk
ZS9wcml2YXRlL2djX3ByaXYuaCIgMgoKCgojIDEgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5j
bHVkZS9zdGRsaWIuaCIgMSAzCiMgMzMgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9z
dGRsaWIuaCIgMwojIDEgIi9ob21lL2pzYW50YWxhL2FybWcvZ2NjL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMwojIDM0ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvc3RkbGliLmgiIDIgMwoK
CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBk
aXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBp
bnQgcmVtOwogIH0gbGRpdl90OwojIDgwICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUv
c3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSA7
CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIDsKCmV4dGVybiBp
bnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIDsKCmV4dGVybiBsb25nIGludCBhdG9sIChf
X2NvbnN0IGNoYXIgKl9fbnB0cikgOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcg
aW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgOwoKCgpleHRlcm4gZG91YmxlIHN0cnRv
ZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIpIDsKIyAxMDkgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zdGRsaWIuaCIg
MwpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKCmV4dGVybiB1bnNp
Z25lZCBsb25nIGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKCgoKCl9fZXh0ZW5zaW9u
X18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKCl9fZXh0
ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UpIDsKIyAxMzIgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zdGRsaWIuaCIg
MwpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i
YXNlKSA7CgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0
b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UpIDsKIyAxOTYgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5j
bHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fZ3JvdXApIDsKCgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19n
cm91cCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBj
aGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg
X19ncm91cCkgOwoKCgoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19z
dHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCgoKCgpf
X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5z
aWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKiBf
X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKiBfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl
LCBpbnQgX19ncm91cCkgOwojIDI0MiAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3N0
ZGxpYi5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikKewogIHJldHVybiBf
X3N0cnRvZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5l
IGxvbmcgaW50CnN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0
cnRvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpleHRlcm4gX19p
bmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2Up
CnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us
IDApOwp9CiMgMjc0ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvc3RkbGliLmgiIDMK
X19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b3EgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIs
IF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpCnsK
ICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAw
KTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRv
bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5h
bCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBf
X2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBf
X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICBp
bnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw
dHIsIF9fYmFzZSwgMCk7Cn0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCmF0b2YgKF9fY29uc3Qg
Y2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvZCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lk
ICopMCkpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIp
CnsKICByZXR1cm4gKGludCkgc3RydG9sIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwg
MTApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0
cikKewogIHJldHVybiBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7
Cn0KCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CmF0b2xsIChf
X2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVybiBzdHJ0b2xsIChfX25wdHIsIChjaGFyICoq
KSAoKHZvaWQgKikwKSwgMTApOwp9CiMgMzMzICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1
ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgOwoKCmV4dGVy
biBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgOwoKCiMgMSAiL3NraWZmL2xvY2Fs
L2FybS1saW51eC9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyOCAiL3NraWZmL2xvY2FsL2Fy
bS1saW51eC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgoKCgoKdHlwZWRlZiBfX3VfY2hhciB1X2No
YXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlw
ZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9f
dV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5cGVkZWYgX19s
b2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CiMgNTcgIi9za2lmZi9sb2Nh
bC9hcm0tbGludXgvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7
CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsK
CgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7
CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwojIDk1ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRl
ZiBfX2lkX3QgaWRfdDsKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCnR5cGVkZWYg
X19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCnR5cGVkZWYg
X19rZXlfdCBrZXlfdDsKIyAxMjQgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMwojIDEgIi9ob21lL2pzYW50YWxhL2FybWcvZ2NjL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMwojIDEyNSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3N5cy90eXBlcy5oIiAy
IDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE2OCAiL3NraWZm
L2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgaW50IGludDhf
dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZf
dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJf
dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRf
dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVk
IGludCB1X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9f
KSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsKIyAxOTAgIi9za2lmZi9sb2NhbC9hcm0t
bGludXgvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi9za2lmZi9sb2NhbC9hcm0tbGludXgv
aW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgMzUgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVk
ZS9lbmRpYW4uaCIgMwojIDEgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9iaXRzL2Vu
ZGlhbi5oIiAxIDMKIyAzNiAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL2VuZGlhbi5o
IiAyIDMKIyAxOTEgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
MiAzCgoKIyAxICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAx
IDMKIyAzMSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwoj
IDEgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMKIyAz
MiAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAx
ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMzUg
Ii9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgoKCgoK
CgoKCnN0cnVjdCB0aW1ldmFsOwoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKCgp0eXBlZGVm
IF9fZmRfc2V0IGZkX3NldDsKIyA3NCAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMwpleHRlcm4gaW50IF9fc2VsZWN0IChpbnQgX19uZmRzLCBfX2ZkX3NldCAq
X19yZWFkZmRzLCBfX2ZkX3NldCAqX193cml0ZWZkcywgX19mZF9zZXQgKl9fZXhjZXB0ZmRzLCBz
dHJ1Y3QgdGltZXZhbCAqX190aW1lb3V0KSA7CgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25m
ZHMsIF9fZmRfc2V0ICpfX3JlYWRmZHMsIF9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAq
X19leGNlcHRmZHMsIHN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQpIDsKIyA5MyAiL3NraWZmL2xv
Y2FsL2FybS1saW51eC9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwoKIyAxOTQgIi9za2lmZi9sb2Nh
bC9hcm0tbGludXgvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvc2tpZmYvbG9jYWwv
YXJtLWxpbnV4L2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAxOTcgIi9za2lmZi9sb2Nh
bC9hcm0tbGludXgvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCgoKdHlwZWRlZiBfX2Jsa2Nu
dF90IGJsa2NudF90Owp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90Owp0eXBlZGVmIF9f
ZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDIxNyAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNs
dWRlL3N5cy90eXBlcy5oIiAzCgojIDM0MCAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRl
L3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGludDMyX3QgcmFuZG9tICh2b2lkKSA7CgoKZXh0
ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgoKCmV4dGVybiB2b2lk
ICogaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lkICogX19zdGF0ZWJ1Ziwgc2l6
ZV90IF9fc3RhdGVsZW4pIDsKCgoKCmV4dGVybiB2b2lkICogc2V0c3RhdGUgKHZvaWQgKiBfX3N0
YXRlYnVmKSA7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRy
OwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlw
ZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9w
dHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0
cmljdCBfX2J1ZiwgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQg
c3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVm
KSA7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lkICog
X19yZXN0cmljdCBfX3N0YXRlYnVmLCBzaXplX3QgX19zdGF0ZWxlbiwgc3RydWN0IHJhbmRvbV9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCgpleHRlcm4gaW50IHNldHN0YXRlX3IgKHZvaWQg
KiBfX3Jlc3RyaWN0IF9fc3RhdGVidWYsIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBf
X2J1ZikgOwoKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIDsKCmV4dGVybiB2b2lkIHNyYW5k
ICh1bnNpZ25lZCBpbnQgX19zZWVkKSA7CgoKCmV4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBp
bnQgKl9fc2VlZCkgOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSA7CmV4dGVy
biBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIDsKCgpleHRl
cm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkgOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5z
aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIDsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAo
dm9pZCkgOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1
YmlbM10pIDsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIDsKZXh0
ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVk
MTZ2WzNdKSA7CmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFt
WzddKSA7CgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCB4
WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IGFbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQg
YzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBvbGRfeFszXTsKICAgIGludCBpbml0OwogIH07CgoK
CmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9f
YnVmZmVyLCBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCmV4dGVybiBpbnQgZXJhbmQ0
OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwgc3RydWN0IGRyYW5kNDhfZGF0YSAq
X19yZXN0cmljdCBfX2J1ZmZlciwgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKCgpl
eHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1
ZmZlciwgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCmV4dGVybiBpbnQgbnJhbmQ0
OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwgc3RydWN0IGRyYW5kNDhfZGF0YSAq
X19yZXN0cmljdCBfX2J1ZmZlciwgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCgoK
CmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9f
YnVmZmVyLCBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKZXh0ZXJuIGludCBqcmFu
ZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRh
ICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwoK
CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5k
NDhfZGF0YSAqX19idWZmZXIpIDsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0
IGludCBfX3NlZWQxNnZbM10sIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CgoKZXh0
ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLCBzdHJ1Y3Qg
ZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgOwojIDQ3NCAiL3NraWZmL2xvY2FsL2FybS1saW51eC9p
bmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICogbWFsbG9jIChzaXplX3QgX19zaXplKSA7
CgpleHRlcm4gdm9pZCAqIGNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpIDsK
CgoKCgpleHRlcm4gdm9pZCAqIHJlYWxsb2MgKHZvaWQgKiBfX3B0ciwgc2l6ZV90IF9fc2l6ZSkg
OwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqIF9fcHRyKSA7CgoKCmV4dGVybiB2b2lkIGNmcmVl
ICh2b2lkICogX19wdHIpIDsKCgoKIyAxICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUv
YWxsb2NhLmgiIDEgMwojIDI1ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvYWxsb2Nh
LmgiIDMKIyAxICIvaG9tZS9qc2FudGFsYS9hcm1nL2djYy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK
IyAyNiAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCgoKCgoK
CmV4dGVybiB2b2lkICogYWxsb2NhIChzaXplX3QgX19zaXplKSA7CgoKCgoKCiMgNDkzICIvc2tp
ZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQg
KiB2YWxsb2MgKHNpemVfdCBfX3NpemUpIDsKCgoKCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lk
ICgqX19mdW5jKSAodm9pZCkpIDsKCgoKCmV4dGVybiBpbnQgX19vbl9leGl0ICh2b2lkICgqX19m
dW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICogX19hcmcpLCB2b2lkICogX19hcmcpIDsKCmV4dGVy
biBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqIF9fYXJn
KSwgdm9pZCAqIF9fYXJnKSA7CgoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykg
X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwojIDUzMCAiL3NraWZmL2xvY2FsL2FybS1s
aW51eC9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hh
ciAqX19uYW1lKSA7CgoKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hh
ciAqX19uYW1lKSA7CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKF9fY29uc3QgY2hhciAqX19zdHJp
bmcpIDsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29u
c3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkgOwoKCgpleHRlcm4gdm9pZCB1bnNldGVu
diAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9p
ZCkgOwojIDU2NiAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4
dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoKCgoKZXh0ZXJuIGludCBt
a3N0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSA7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25z
dCBjaGFyICpfX2NvbW1hbmQpIDsKIyA1OTUgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVk
ZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25hbWUsIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgOwoKCgoKCgoKdHlwZWRl
ZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsK
IyA2MTIgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4g
dm9pZCAqIGJzZWFyY2ggKF9fY29uc3Qgdm9pZCAqIF9fa2V5LCBfX2NvbnN0IHZvaWQgKiBfX2Jh
c2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFy
KTsKCgoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqIF9fYmFzZSwgc2l6ZV90IF9fbm1lbWIs
IHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgoKZXh0ZXJuIGludCBh
YnMgKGludCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50
IGxhYnMgKGxvbmcgaW50IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDYzNCAi
L3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkaXZfdCBk
aXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwpleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20p
CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDY1MSAiL3NraWZmL2xvY2FsL2Fy
bS1saW51eC9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192
YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3Ry
aWN0IF9fc2lnbikgOwoKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50
IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2ln
bikgOwoKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LCBjaGFyICpfX2J1ZikgOwoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0
IF9fc2lnbikgOwoKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQg
X19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWdu
KSA7CgpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwgY2hhciAqX19idWYpIDsKCgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUs
IGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBf
X3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgOwoKCmV4dGVybiBp
bnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3Qg
X19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwg
c2l6ZV90IF9fbGVuKSA7CgoKCmV4dGVybiBpbnQgcWVjdnRfciAobG9uZyBkb3VibGUgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0
IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CgoKZXh0ZXJu
IGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19y
ZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0
IF9fYnVmLCBzaXplX3QgX19sZW4pIDsKIyA2OTUgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5j
bHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6
ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdj
LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSA7CgoKCmV4dGVybiBp
bnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgOwoKCgpleHRlcm4gc2l6ZV90
IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXpl
X3QgX19uKSA7CiMgNzE4ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvc3RkbGliLmgi
IDMKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIDsKIyA3NzEg
Ii9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zdGRsaWIuaCIgMwoKIyA2OSAiLi4vLi4v
Li4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvcHJpdmF0ZS9nY19wcml2LmgiIDIKCiMgMSAiL2hvbWUv
anNhbnRhbGEvYXJtZy9nY2MvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNzEgIi4uLy4uLy4uL2dj
Yy9ib2VobS1nYy9pbmNsdWRlL3ByaXZhdGUvZ2NfcHJpdi5oIiAyCiMgODggIi4uLy4uLy4uL2dj
Yy9ib2VobS1nYy9pbmNsdWRlL3ByaXZhdGUvZ2NfcHJpdi5oIgojIDEgIi4uLy4uLy4uL2djYy9i
b2VobS1nYy9pbmNsdWRlL3ByaXZhdGUvZ2NfbG9ja3MuaCIgMQojIDQ2ICIuLi8uLi8uLi9nY2Mv
Ym9laG0tZ2MvaW5jbHVkZS9wcml2YXRlL2djX2xvY2tzLmgiCiAgIHZvaWQgR0Nfbm9vcDEgKHdv
cmQpOwojIDE5OCAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvcHJpdmF0ZS9nY19sb2Nr
cy5oIgogICAgICAgIGlubGluZSBzdGF0aWMgaW50IEdDX3Rlc3RfYW5kX3NldCh2b2xhdGlsZSB1
bnNpZ25lZCBpbnQgKmFkZHIpIHsKICAgICAgICAgIGludCBvbGR2YWw7CgoKCgogICAgICAgICAg
X19hc21fXyBfX3ZvbGF0aWxlX18oInN3cCAlMCwgJTEsIFslMl0iCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiAiPXIiKG9sZHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
ICJyIigxKSwgInIiKGFkZHIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5
Iik7CiAgICAgICAgICByZXR1cm4gb2xkdmFsOwogICAgICAgIH0KIyAyNDYgIi4uLy4uLy4uL2dj
Yy9ib2VobS1nYy9pbmNsdWRlL3ByaXZhdGUvZ2NfbG9ja3MuaCIKICAgICAgIGlubGluZSBzdGF0
aWMgdm9pZCBHQ19jbGVhcih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmFkZHIpIHsKCiAgICAgICAg
IF9fYXNtX18gX192b2xhdGlsZV9fKCIgIiA6IDogOiAibWVtb3J5Iik7CiAgICAgICAgICooYWRk
cikgPSAwOwogICAgICAgfQojIDM1NCAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvcHJp
dmF0ZS9nY19sb2Nrcy5oIgogICAgICBleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgaW50IEdDX2Fs
bG9jYXRlX2xvY2s7CiAgICAgIGV4dGVybiB2b2lkIEdDX2xvY2sodm9pZCk7CiMgNDA3ICIuLi8u
Li8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9wcml2YXRlL2djX2xvY2tzLmgiCiAgICBleHRlcm4g
dm9sYXRpbGUgR0NfYm9vbCBHQ19jb2xsZWN0aW5nOwoKCiAgICBleHRlcm4gdm9pZCBHQ19sb2Nr
KHZvaWQpOwogICAgZXh0ZXJuIHB0aHJlYWRfdCBHQ19sb2NrX2hvbGRlcjsKIyA4OSAiLi4vLi4v
Li4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvcHJpdmF0ZS9nY19wcml2LmgiIDIKIyAzNzEgIi4uLy4u
Ly4uL2djYy9ib2VobS1nYy9pbmNsdWRlL3ByaXZhdGUvZ2NfcHJpdi5oIgojIDEgIi9za2lmZi9s
b2NhbC9hcm0tbGludXgvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjggIi9za2lmZi9sb2NhbC9h
cm0tbGludXgvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgoKCiMgMSAiL2hvbWUvanNhbnRhbGEvYXJt
Zy9nY2MvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi9za2lmZi9sb2NhbC9hcm0tbGludXgv
aW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCmV4dGVybiB2b2lkICogbWVtY3B5ICh2b2lkICogX19y
ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqIF9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf
X24pIDsKCgoKZXh0ZXJuIHZvaWQgKiBtZW1tb3ZlICh2b2lkICogX19kZXN0LCBfX2NvbnN0IHZv
aWQgKiBfX3NyYywgc2l6ZV90IF9fbikgOwoKCgoKCgpleHRlcm4gdm9pZCAqIG1lbWNjcHkgKHZv
aWQgKiBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqIF9fc3JjLCBpbnQgX19jLCBzaXplX3QgX19uKSA7
CgoKCgoKZXh0ZXJuIHZvaWQgKiBtZW1zZXQgKHZvaWQgKiBfX3MsIGludCBfX2MsIHNpemVfdCBf
X24pIDsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICogX19zMSwgX19jb25zdCB2
b2lkICogX19zMiwgc2l6ZV90IF9fbikgOwoKCgpleHRlcm4gdm9pZCAqIG1lbWNociAoX19jb25z
dCB2b2lkICogX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSA7CiMgNzEgIi9za2lmZi9sb2NhbC9h
cm0tbGludXgvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpf
X3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKSA7CgoKZXh0
ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAo
Y2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykg
OwoKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKCmV4dGVybiBpbnQgc3Ry
Y21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgOwoKZXh0ZXJuIGlu
dCBzdHJuY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90
IF9fbikgOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0
IGNoYXIgKl9fczIpIDsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBf
X2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwojIDEx
MSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFy
ICpfX3N0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIDsKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19j
b25zdCBjaGFyICpfX3MpIDsKIyAxNDYgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9z
dHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f
YykgOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSA7
CiMgMTU4ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJu
IHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVj
dCkgOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBj
aGFyICpfX2FjY2VwdCkgOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19z
LCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KSA7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0
IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpIDsKIyAxNzYgIi9za2lm
Zi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RydG9r
IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0p
IDsKCgoKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9w
dHIpIDsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9w
dHIpIDsKIyAyMDcgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9zdHJpbmcuaCIgMwpl
eHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIDsKIyAyMTcgIi9za2lmZi9s
b2NhbC9hcm0tbGludXgvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyZXJyb3Ig
KGludCBfX2Vycm51bSkgOwoKCgpleHRlcm4gY2hhciAqX19zdHJlcnJvcl9yIChpbnQgX19lcnJu
dW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIDsKZXh0ZXJuIGNoYXIgKnN0cmVycm9y
X3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgOwoKCgoKZXh0
ZXJuIHZvaWQgX19iemVybyAodm9pZCAqIF9fcywgc2l6ZV90IF9fbikgOwoKCgpleHRlcm4gdm9p
ZCBiY29weSAoX19jb25zdCB2b2lkICogX19zcmMsIHZvaWQgKiBfX2Rlc3QsIHNpemVfdCBfX24p
IDsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqIF9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVy
biBpbnQgYmNtcCAoX19jb25zdCB2b2lkICogX19zMSwgX19jb25zdCB2b2lkICogX19zMiwgc2l6
ZV90IF9fbikgOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBf
X2MpIDsKCgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykg
OwoKCgpleHRlcm4gaW50IF9fZmZzIChpbnQgX19pKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsK
ZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwojIDI2MSAi
L3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBpbnQgX19z
dHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgOwpleHRl
cm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3My
KSA7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0
IGNoYXIgKl9fczIsIHNpemVfdCBfX24pIDsKIyAyODIgIi9za2lmZi9sb2NhbC9hcm0tbGludXgv
aW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmlj
dCBfX3N0cmluZ3AsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSA7CiMgMzQzICIv
c2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvc3RyaW5nLmgiIDMKIyAxICIvc2tpZmYvbG9j
YWwvYXJtLWxpbnV4L2luY2x1ZGUvYml0cy9zdHJpbmcuaCIgMSAzCiMgMzQ0ICIvc2tpZmYvbG9j
YWwvYXJtLWxpbnV4L2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCiMgMSAiL3NraWZmL2xvY2FsL2Fy
bS1saW51eC9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAxIDMKIyA4MCAiL3NraWZmL2xvY2FsL2Fy
bS1saW51eC9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCnR5cGVkZWYgc3RydWN0IHsgdW5zaWdu
ZWQgY2hhciBfX2FyclsyXTsgfSBfX1NUUklORzJfQ09QWV9BUlIyIF9fYXR0cmlidXRlX18gKChw
YWNrZWQpKTsKdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBjaGFyIF9fYXJyWzNdOyB9IF9fU1RS
SU5HMl9DT1BZX0FSUjMgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwp0eXBlZGVmIHN0cnVjdCB7
IHVuc2lnbmVkIGNoYXIgX19hcnJbNF07IH0gX19TVFJJTkcyX0NPUFlfQVJSNCBfX2F0dHJpYnV0
ZV9fICgocGFja2VkKSk7CnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBfX2Fycls1XTsg
fSBfX1NUUklORzJfQ09QWV9BUlI1IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKdHlwZWRlZiBz
dHJ1Y3QgeyB1bnNpZ25lZCBjaGFyIF9fYXJyWzZdOyB9IF9fU1RSSU5HMl9DT1BZX0FSUjYgX19h
dHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGNoYXIgX19h
cnJbN107IH0gX19TVFJJTkcyX0NPUFlfQVJSNyBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CnR5
cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBfX2Fycls4XTsgfSBfX1NUUklORzJfQ09QWV9B
UlI4IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIyAzNzIgIi9za2lmZi9sb2NhbC9hcm0tbGlu
dXgvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gdm9pZCAqIF9fcmF3bWVtY2hyIChj
b25zdCB2b2lkICogX19zLCBpbnQgX19jKTsKIyA4NzIgIi9za2lmZi9sb2NhbC9hcm0tbGludXgv
aW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nw
bl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUg
c2l6ZV90Cl9fc3RyY3Nwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QpCnsK
ICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9
ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdCkKICAgICsrX19yZXN1bHQ7CiAgcmV0
dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nwbl9jMiAoX19j
b25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciBfX3JlamVjdDIpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ry
Y3Nwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0
MikKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3Vs
dF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MQogICAgICAgICAmJiBfX3Nb
X19yZXN1bHRdICE9IF9fcmVqZWN0MikKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0
Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nwbl9jMyAoX19jb25zdCBjaGFyICpf
X3MsIGNoYXIgX19yZWplY3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciBfX3JlamVjdDIsIGNoYXIgX19yZWplY3QzKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApf
X3N0cmNzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3Jl
amVjdDIsCiAgICAgICAgICAgICAgY2hhciBfX3JlamVjdDMpCnsKICByZWdpc3RlciBzaXplX3Qg
X19yZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVz
dWx0XSAhPSBfX3JlamVjdDEKICAgICAgICAgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDIg
JiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDMpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBf
X3Jlc3VsdDsKfQojIDkyNyAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL2JpdHMvc3Ry
aW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzEgKF9fY29uc3QgY2hh
ciAqX19zLCBjaGFyIF9fYWNjZXB0KTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9j
MSAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19hY2NlcHQpCnsKICByZWdpc3RlciBzaXplX3Qg
X19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdCkKICAgICsr
X19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9f
c3Ryc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19hY2NlcHQyKTsKZXh0ZXJuIF9faW5saW5l
IHNpemVfdApfX3N0cnNwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19hY2NlcHQxLCBj
aGFyIF9fYWNjZXB0MikKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxl
IChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MSB8fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0
MikKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUg
c2l6ZV90IF9fc3Ryc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19hY2NlcHQyLCBjaGFyIF9f
YWNjZXB0Myk7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJzcG5fYzMgKF9fY29uc3QgY2hh
ciAqX19zLCBjaGFyIF9fYWNjZXB0MSwgY2hhciBfX2FjY2VwdDIsIGNoYXIgX19hY2NlcHQzKQp7
CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0g
PT0gX19hY2NlcHQxIHx8IF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQyCiAgICAgICAgIHx8IF9f
c1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQzKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1
bHQ7Cn0KIyA5ODIgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9iaXRzL3N0cmluZzIu
aCIgMwpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJwYnJrX2MyIChfX2NvbnN0IGNoYXIgKl9f
cywgY2hhciBfX2FjY2VwdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyIF9fYWNjZXB0Mik7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJrX2MyIChfX2Nv
bnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdDEsIGNoYXIgX19hY2NlcHQyKQp7CgogIHdoaWxl
ICgqX19zICE9ICdcMCcgJiYgKl9fcyAhPSBfX2FjY2VwdDEgJiYgKl9fcyAhPSBfX2FjY2VwdDIp
CiAgICArK19fczsKICByZXR1cm4gKl9fcyA9PSAnXDAnID8gKCh2b2lkICopMCkgOiAoY2hhciAq
KSAoc2l6ZV90KSBfX3M7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnBicmtfYzMgKF9f
Y29uc3QgY2hhciAqX19zLCBjaGFyIF9fYWNjZXB0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgX19hY2NlcHQyLCBjaGFyIF9fYWNjZXB0Myk7CmV4dGVybiBfX2lu
bGluZSBjaGFyICoKX19zdHJwYnJrX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2Vw
dDEsIGNoYXIgX19hY2NlcHQyLAogICAgICAgICAgICAgIGNoYXIgX19hY2NlcHQzKQp7CgogIHdo
aWxlICgqX19zICE9ICdcMCcgJiYgKl9fcyAhPSBfX2FjY2VwdDEgJiYgKl9fcyAhPSBfX2FjY2Vw
dDIKICAgICAgICAgJiYgKl9fcyAhPSBfX2FjY2VwdDMpCiAgICArK19fczsKICByZXR1cm4gKl9f
cyA9PSAnXDAnID8gKCh2b2lkICopMCkgOiAoY2hhciAqKSAoc2l6ZV90KSBfX3M7Cn0KIyAxMDQz
ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJu
IF9faW5saW5lIGNoYXIgKl9fc3RydG9rX3JfMWMgKGNoYXIgKl9fcywgY2hhciBfX3NlcCwgY2hh
ciAqKl9fbmV4dHApOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RydG9rX3JfMWMgKGNoYXIg
Kl9fcywgY2hhciBfX3NlcCwgY2hhciAqKl9fbmV4dHApCnsKICBjaGFyICpfX3Jlc3VsdDsKICBp
ZiAoX19zID09ICgodm9pZCAqKTApKQogICAgX19zID0gKl9fbmV4dHA7CiAgd2hpbGUgKCpfX3Mg
PT0gX19zZXApCiAgICArK19fczsKICBpZiAoKl9fcyA9PSAnXDAnKQogICAgX19yZXN1bHQgPSAo
KHZvaWQgKikwKTsKICBlbHNlCiAgICB7CiAgICAgIF9fcmVzdWx0ID0gX19zOwogICAgICB3aGls
ZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19zZXApCiAgICAgICAgKytfX3M7CiAgICAgIGlm
ICgqX19zID09ICdcMCcpCiAgICAgICAgKl9fbmV4dHAgPSBfX3M7CiAgICAgIGVsc2UKICAgICAg
ICB7CiAgICAgICAgICAqX19zID0gJ1wwJzsKICAgICAgICAgICpfX25leHRwID0gX19zICsgMTsK
ICAgICAgICB9CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgMTA5MSAiL3NraWZmL2xvY2Fs
L2FybS1saW51eC9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFy
ICpfX3N0cnNlcF8xYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdCk7CmV4dGVybiBfX2lubGlu
ZSBjaGFyICoKX19zdHJzZXBfMWMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QpCnsKICByZWdp
c3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsID09ICgodm9pZCAqKTAp
KQogICAgcmV0dXJuICpfX3MgPSAoKHZvaWQgKikwKTsKICBpZiAoKl9fcmV0dmFsID09IF9fcmVq
ZWN0KQogICAgKigqX19zKSsrID0gJ1wwJzsKICBlbHNlCiAgICBpZiAoKCpfX3MgPSAoX19leHRl
bnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKF9fcmVqZWN0KSAmJiAoX19yZWplY3QpID09
ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAoX19yZXR2YWwsIF9fcmVqZWN0KSA6IHN0cmNo
ciAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSAhPSAoKHZvaWQgKikwKSkKICAgICAgKigqX19zKSsr
ID0gJ1wwJzsKICAgIGVsc2UKICAgICAgKl9fcyA9ICgodm9pZCAqKTApOwogIHJldHVybiBfX3Jl
dHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ryc2VwXzJjIChjaGFyICoqX19zLCBj
aGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9f
c3Ryc2VwXzJjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpCnsK
ICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsID09ICgodm9p
ZCAqKTApKQogICAgcmV0dXJuICpfX3MgPSAoKHZvaWQgKikwKTsKICBpZiAoKl9fcmV0dmFsID09
IF9fcmVqZWN0MSB8fCAqX19yZXR2YWwgPT0gX19yZWplY3QyKQogICAgKigqX19zKSsrID0gJ1ww
JzsKICBlbHNlCiAgICB7CiAgICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAg
ICAgd2hpbGUgKCpfX2NwICE9ICdcMCcgJiYgKl9fY3AgIT0gX19yZWplY3QxICYmICpfX2NwICE9
IF9fcmVqZWN0MikKICAgICAgICArK19fY3A7CiAgICAgIGlmICgqX19jcCAhPSAnXDAnKQogICAg
ICAgIHsKICAgICAgICAgICpfX3MgPSBfX2NwOwogICAgICAgICAgKigqX19zKSsrID0gJ1wwJzsK
ICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICAqX19zID0gKCh2b2lkICopMCk7CiAgICB9CiAg
cmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfM2MgKGNo
YXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyIF9fcmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBjaGFy
ICoKX19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0
MiwgY2hhciBfX3JlamVjdDMpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAg
aWYgKF9fcmV0dmFsID09ICgodm9pZCAqKTApKQogICAgcmV0dXJuICpfX3MgPSAoKHZvaWQgKikw
KTsKICBpZiAoKl9fcmV0dmFsID09IF9fcmVqZWN0MSB8fCAqX19yZXR2YWwgPT0gX19yZWplY3Qy
CiAgICAgIHx8ICpfX3JldHZhbCA9PSBfX3JlamVjdDMpCiAgICAqKCpfX3MpKysgPSAnXDAnOwog
IGVsc2UKICAgIHsKICAgICAgcmVnaXN0ZXIgY2hhciAqX19jcCA9IF9fcmV0dmFsOwogICAgICB3
aGlsZSAoKl9fY3AgIT0gJ1wwJyAmJiAqX19jcCAhPSBfX3JlamVjdDEgJiYgKl9fY3AgIT0gX19y
ZWplY3QyCiAgICAgICAgICAgICAmJiAqX19jcCAhPSBfX3JlamVjdDMpCiAgICAgICAgKytfX2Nw
OwogICAgICBpZiAoKl9fY3AgIT0gJ1wwJykKICAgICAgICB7CiAgICAgICAgICAqX19zID0gX19j
cDsKICAgICAgICAgICooKl9fcykrKyA9ICdcMCc7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg
ICAgKl9fcyA9ICgodm9pZCAqKTApOwogICAgfQogIHJldHVybiBfX3JldHZhbDsKfQoKZXh0ZXJu
IF9faW5saW5lIGNoYXIgKl9fc3Ryc2VwX2cgKGNoYXIgKipfX3MsIF9fY29uc3QgY2hhciAqX19y
ZWplY3QpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ryc2VwX2cgKGNoYXIgKipfX3MsIF9f
Y29uc3QgY2hhciAqX19yZWplY3QpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7
CiAgaWYgKF9fcmV0dmFsID09ICgodm9pZCAqKTApIHx8ICpfX3JldHZhbCA9PSAnXDAnKQogICAg
cmV0dXJuICgodm9pZCAqKTApOwogIGlmICgoKl9fcyA9IF9fZXh0ZW5zaW9uX18gKHsgY2hhciBf
X2EwLCBfX2ExLCBfX2EyOyAoX19idWlsdGluX2NvbnN0YW50X3AgKF9fcmVqZWN0KSAmJiAoKHNp
emVfdCkoY29uc3Qgdm9pZCAqKSgoX19yZWplY3QpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lk
ICopKF9fcmVqZWN0KSA9PSAxKSA/ICgoX19hMCA9ICgoX19jb25zdCBjaGFyICopIChfX3JlamVj
dCkpWzBdLCBfX2EwID09ICdcMCcpID8gKCh2b2lkICopMCkgOiAoKF9fYTEgPSAoKF9fY29uc3Qg
Y2hhciAqKSAoX19yZWplY3QpKVsxXSwgX19hMSA9PSAnXDAnKSA/IChfX2V4dGVuc2lvbl9fIChf
X2J1aWx0aW5fY29uc3RhbnRfcCAoX19hMCkgJiYgKF9fYTApID09ICdcMCcgPyAoY2hhciAqKSBf
X3Jhd21lbWNociAoX19yZXR2YWwsIF9fYTApIDogc3RyY2hyIChfX3JldHZhbCwgX19hMCkpKSA6
ICgoX19hMiA9ICgoX19jb25zdCBjaGFyICopIChfX3JlamVjdCkpWzJdLCBfX2EyID09ICdcMCcp
ID8gX19zdHJwYnJrX2MyIChfX3JldHZhbCwgX19hMCwgX19hMSkgOiAoKChfX2NvbnN0IGNoYXIg
KikgKF9fcmVqZWN0KSlbM10gPT0gJ1wwJyA/IF9fc3RycGJya19jMyAoX19yZXR2YWwsIF9fYTAs
IF9fYTEsIF9fYTIpIDogc3RycGJyayAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSkgOiBzdHJwYnJr
IChfX3JldHZhbCwgX19yZWplY3QpKTsgfSkpICE9ICgodm9pZCAqKTApKQogICAgKigqX19zKSsr
ID0gJ1wwJzsKICByZXR1cm4gX19yZXR2YWw7Cn0KIyAzNDcgIi9za2lmZi9sb2NhbC9hcm0tbGlu
dXgvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCgojIDM3MiAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdj
L2luY2x1ZGUvcHJpdmF0ZS9nY19wcml2LmgiIDIKIyAzODYgIi4uLy4uLy4uL2djYy9ib2VobS1n
Yy9pbmNsdWRlL3ByaXZhdGUvZ2NfcHJpdi5oIgpzdHJ1Y3QgaGJsazsKIyA0MzAgIi4uLy4uLy4u
L2djYy9ib2VobS1nYy9pbmNsdWRlL3ByaXZhdGUvZ2NfcHJpdi5oIgogICAgICAgICAgICAgICAg
ZXh0ZXJuIHB0cl90IEdDX3VuaXhfZ2V0X21lbSgpOwojIDQ4NyAiLi4vLi4vLi4vZ2NjL2JvZWht
LWdjL2luY2x1ZGUvcHJpdmF0ZS9nY19wcml2LmgiCiAgICAgIHZvaWQgR0Nfc3RvcF93b3JsZCgp
OwogICAgICB2b2lkIEdDX3N0YXJ0X3dvcmxkKCk7CiMgNTE4ICIuLi8uLi8uLi9nY2MvYm9laG0t
Z2MvaW5jbHVkZS9wcml2YXRlL2djX3ByaXYuaCIKZXh0ZXJuIEdDX3dhcm5fcHJvYyBHQ19jdXJy
ZW50X3dhcm5fcHJvYzsKIyA2ODAgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL3ByaXZh
dGUvZ2NfcHJpdi5oIgp0eXBlZGVmIHdvcmQgcGFnZV9oYXNoX3RhYmxlWygoKHdvcmQpMSA8PCAx
NCkgPj4gKCh3b3JkKTUpKV07CiMgNzI3ICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9w
cml2YXRlL2djX3ByaXYuaCIKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIG1hcF9lbnRyeV90eXBlOwoK
c3RydWN0IGhibGtoZHIgewogICAgd29yZCBoYl9zejsKCiAgICBzdHJ1Y3QgaGJsayAqIGhiX25l
eHQ7CgoKICAgIHN0cnVjdCBoYmxrICogaGJfcHJldjsKICAgIHdvcmQgaGJfZGVzY3I7CgogICAg
bWFwX2VudHJ5X3R5cGUgKiBoYl9tYXA7CgoKCgogICAgdW5zaWduZWQgY2hhciBoYl9vYmpfa2lu
ZDsKCgoKICAgIHVuc2lnbmVkIGNoYXIgaGJfZmxhZ3M7CiMgNzU3ICIuLi8uLi8uLi9nY2MvYm9l
aG0tZ2MvaW5jbHVkZS9wcml2YXRlL2djX3ByaXYuaCIKICAgIHVuc2lnbmVkIHNob3J0IGhiX2xh
c3RfcmVjbGFpbWVkOwojIDc3NCAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvcHJpdmF0
ZS9nY19wcml2LmgiCiAgICAgIHdvcmQgaGJfbWFya3NbKCgoKDEgPDwgMTApICogOCkvMzIpLzMy
KV07CiMgNzgzICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9wcml2YXRlL2djX3ByaXYu
aCIKfTsKCgoKCgpzdHJ1Y3QgaGJsayB7CgoKCiAgICB3b3JkIGhiX2JvZHlbKCgod29yZCkoMSA8
PCAxMCkpL3NpemVvZih3b3JkKSldOwp9OwojIDgzMyAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2lu
Y2x1ZGUvcHJpdmF0ZS9nY19wcml2LmgiCnN0cnVjdCBleGNsdXNpb24gewogICAgcHRyX3QgZV9z
dGFydDsKICAgIHB0cl90IGVfZW5kOwp9OwoKCgoKCnN0cnVjdCByb290cyB7CiAgICAgICAgcHRy
X3Qgcl9zdGFydDsKICAgICAgICBwdHJfdCByX2VuZDsKCiAgICAgICAgICBzdHJ1Y3Qgcm9vdHMg
KiByX25leHQ7CgogICAgICAgIEdDX2Jvb2wgcl90bXA7Cgp9OwojIDg3NyAiLi4vLi4vLi4vZ2Nj
L2JvZWhtLWdjL2luY2x1ZGUvcHJpdmF0ZS9nY19wcml2LmgiCnN0cnVjdCBfR0NfYXJyYXlzIHsK
ICB3b3JkIF9oZWFwc2l6ZTsKICB3b3JkIF9tYXhfaGVhcHNpemU7CiAgd29yZCBfcmVxdWVzdGVk
X2hlYXBzaXplOwogIHB0cl90IF9sYXN0X2hlYXBfYWRkcjsKICBwdHJfdCBfcHJldl9oZWFwX2Fk
ZHI7CiAgd29yZCBfbGFyZ2VfZnJlZV9ieXRlczsKCgogIHdvcmQgX2xhcmdlX2FsbG9jZF9ieXRl
czsKCgoKCiAgd29yZCBfbWF4X2xhcmdlX2FsbG9jZF9ieXRlczsKCgoKICB3b3JkIF93b3Jkc19h
bGxvY2RfYmVmb3JlX2djOwoKCgogICAgd29yZCBfd29yZHNfYWxsb2NkOwoKCiAgd29yZCBfd29y
ZHNfd2FzdGVkOwoKCgogIHdvcmQgX3dvcmRzX2ZpbmFsaXplZDsKCgoKICB3b3JkIF9ub25fZ2Nf
Ynl0ZXNfYXRfZ2M7CgoKICB3b3JkIF9tZW1fZnJlZWQ7CgoKICBwdHJfdCBfc2NyYXRjaF9lbmRf
cHRyOwogIHB0cl90IF9zY3JhdGNoX2xhc3RfZW5kX3B0cjsKCgogIEdDX21hcmtfcHJvYyBfbWFy
a19wcm9jc1soMSA8PCA2KV07CgoKCgoKICAgIHB0cl90IF9vYmpmcmVlbGlzdFsoKHdvcmQpKCgo
MSA8PCAxMCkvMik+PjIpKSsxXTsKCiAgICBwdHJfdCBfYW9iamZyZWVsaXN0Wygod29yZCkoKCgx
IDw8IDEwKS8yKT4+MikpKzFdOwoKCgogIHB0cl90IF91b2JqZnJlZWxpc3RbKCh3b3JkKSgoKDEg
PDwgMTApLzIpPj4yKSkrMV07CgoKCgoKICAgIHB0cl90IF9hdW9iamZyZWVsaXN0Wygod29yZCko
KCgxIDw8IDEwKS8yKT4+MikpKzFdOwojIDk1NCAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1
ZGUvcHJpdmF0ZS9nY19wcml2LmgiCiAgICB1bnNpZ25lZCBfc2l6ZV9tYXBbKCgoKHdvcmQpKCgo
MSA8PCAxMCkvMik+PjIpKSsxKTw8MildOwojIDk2MyAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2lu
Y2x1ZGUvcHJpdmF0ZS9nY19wcml2LmgiCiAgbWFwX2VudHJ5X3R5cGUgKiBfb2JqX21hcFsoKHdv
cmQpKCgoMSA8PCAxMCkvMik+PjIpKSsxXTsKIyA5ODkgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9p
bmNsdWRlL3ByaXZhdGUvZ2NfcHJpdi5oIgogICAgICAgIGNoYXIgX3ZhbGlkX29mZnNldHNbKCgw
eGZlIC0gMSkgPiAoKCgoKDEgPDwgMTApLzIpPj4yKSk8PDIpPyAoMHhmZSAtIDEpKzEgOiAoKCgo
KDEgPDwgMTApLzIpPj4yKSk8PDIpKzEpXTsKCgoKCiAgICAgICAgY2hhciBfbW9kd3NfdmFsaWRf
b2Zmc2V0c1tzaXplb2Yod29yZCldOwojIDEwMjkgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNs
dWRlL3ByaXZhdGUvZ2NfcHJpdi5oIgogIHN0cnVjdCBIZWFwU2VjdCB7CiAgICAgIHB0cl90IGhz
X3N0YXJ0OyB3b3JkIGhzX2J5dGVzOwogIH0gX2hlYXBfc2VjdHNbMTI4XTsKIyAxMDQwICIuLi8u
Li8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9wcml2YXRlL2djX3ByaXYuaCIKICBzdHJ1Y3Qgcm9v
dHMgX3N0YXRpY19yb290c1syNTZdOwoKICAgIHN0cnVjdCByb290cyAqIF9yb290X2luZGV4Wygx
IDw8IDYpXTsKCiAgc3RydWN0IGV4Y2x1c2lvbiBfZXhjbF90YWJsZVsoMjU2LzQpXTsKCiAgYm90
dG9tX2luZGV4ICogX2FsbF9uaWxzOwogIGJvdHRvbV9pbmRleCAqIF90b3BfaW5kZXggWygxIDw8
ICgoKHdvcmQpMzIpIC0gMTEgLSAoKHdvcmQpMTApKSldOwojIDEwNTYgIi4uLy4uLy4uL2djYy9i
b2VobS1nYy9pbmNsdWRlL3ByaXZhdGUvZ2NfcHJpdi5oIgp9OwoKZXh0ZXJuIHN0cnVjdCBfR0Nf
YXJyYXlzIEdDX2FycmF5czsKIyAxMTM0ICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9w
cml2YXRlL2djX3ByaXYuaCIKZXh0ZXJuIHN0cnVjdCBvYmpfa2luZCB7CiAgIHB0cl90ICpva19m
cmVlbGlzdDsKCgogICBzdHJ1Y3QgaGJsayAqKm9rX3JlY2xhaW1fbGlzdDsKCgogICB3b3JkIG9r
X2Rlc2NyaXB0b3I7CgogICBHQ19ib29sIG9rX3JlbG9jYXRlX2Rlc2NyOwoKCgogICBHQ19ib29s
IG9rX2luaXQ7Cn0gR0Nfb2JqX2tpbmRzWzE2XTsKIyAxMTg1ICIuLi8uLi8uLi9nY2MvYm9laG0t
Z2MvaW5jbHVkZS9wcml2YXRlL2djX3ByaXYuaCIKZXh0ZXJuIGludCBHQ19uX2tpbmRzOwoKZXh0
ZXJuIHdvcmQgR0NfZm9fZW50cmllczsKCmV4dGVybiB3b3JkIEdDX25faGVhcF9zZWN0czsKCgpl
eHRlcm4gd29yZCBHQ19wYWdlX3NpemU7CgoKCgoKCgpleHRlcm4gd29yZCBHQ190b3RhbF9zdGFj
a19ibGFja19saXN0ZWQ7CgoKZXh0ZXJuIHdvcmQgR0NfYmxhY2tfbGlzdF9zcGFjaW5nOwoKCgoK
CgpleHRlcm4gbWFwX2VudHJ5X3R5cGUgKiBHQ19pbnZhbGlkX21hcDsKCgoKZXh0ZXJuIHN0cnVj
dCBoYmxrICogR0NfaGJsa2ZyZWVsaXN0W107CgoKCgoKZXh0ZXJuIEdDX2Jvb2wgR0NfaXNfaW5p
dGlhbGl6ZWQ7CgpleHRlcm4gR0NfYm9vbCBHQ19vYmplY3RzX2FyZV9tYXJrZWQ7CiMgMTIzMyAi
Li4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvcHJpdmF0ZS9nY19wcml2LmgiCmV4dGVybiBH
Q19ib29sIEdDX2RpcnR5X21haW50YWluZWQ7CgoKCgpleHRlcm4gd29yZCBHQ19yb290X3NpemU7
CgpleHRlcm4gR0NfYm9vbCBHQ19kZWJ1Z2dpbmdfc3RhcnRlZDsKIyAxMzA4ICIuLi8uLi8uLi9n
Y2MvYm9laG0tZ2MvaW5jbHVkZS9wcml2YXRlL2djX3ByaXYuaCIKcHRyX3QgR0NfYXBwcm94X3Nw
ICh2b2lkKTsKCkdDX2Jvb2wgR0Nfc2hvdWxkX2NvbGxlY3QgKHZvaWQpOwoKdm9pZCBHQ19hcHBs
eV90b19hbGxfYmxvY2tzICggdm9pZCAoKmZuKSAoc3RydWN0IGhibGsgKmgsIHdvcmQgY2xpZW50
X2RhdGEpLCB3b3JkIGNsaWVudF9kYXRhKTsKCgoKCnN0cnVjdCBoYmxrICogR0NfbmV4dF91c2Vk
X2Jsb2NrIChzdHJ1Y3QgaGJsayAqIGgpOwoKc3RydWN0IGhibGsgKiBHQ19wcmV2X2Jsb2NrIChz
dHJ1Y3QgaGJsayAqIGgpOwoKCgp2b2lkIEdDX21hcmtfaW5pdCAodm9pZCk7CnZvaWQgR0NfY2xl
YXJfbWFya3MgKHZvaWQpOwp2b2lkIEdDX2ludmFsaWRhdGVfbWFya19zdGF0ZSAodm9pZCk7CgoK
CgoKR0NfYm9vbCBHQ19tYXJrX3N0YWNrX2VtcHR5ICh2b2lkKTsKR0NfYm9vbCBHQ19tYXJrX3Nv
bWUgKHB0cl90IGNvbGRfZ2NfZnJhbWUpOwoKCgoKdm9pZCBHQ19pbml0aWF0ZV9nYyAodm9pZCk7
CgoKCgp2b2lkIEdDX3B1c2hfYWxsIChwdHJfdCBib3R0b20sIHB0cl90IHRvcCk7CgoKdm9pZCBH
Q19wdXNoX3NlbGVjdGVkICggcHRyX3QgYm90dG9tLCBwdHJfdCB0b3AsIGludCAoKmRpcnR5X2Zu
KSAoc3RydWN0IGhibGsgKmgpLCB2b2lkICgqcHVzaF9mbikgKHB0cl90IGJvdHRvbSwgcHRyX3Qg
dG9wKSApOwojIDEzNTkgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL3ByaXZhdGUvZ2Nf
cHJpdi5oIgp2b2lkIEdDX3B1c2hfYWxsX3N0YWNrIChwdHJfdCBiLCBwdHJfdCB0KTsKCgp2b2lk
IEdDX3B1c2hfYWxsX2VhZ2VyIChwdHJfdCBiLCBwdHJfdCB0KTsKIyAxMzgxICIuLi8uLi8uLi9n
Y2MvYm9laG0tZ2MvaW5jbHVkZS9wcml2YXRlL2djX3ByaXYuaCIKdm9pZCBHQ19wdXNoX2N1cnJl
bnRfc3RhY2sgKHB0cl90IGNvbGRfZ2NfZnJhbWUpOwoKCgoKCnZvaWQgR0NfcHVzaF9yb290cyAo
R0NfYm9vbCBhbGwsIHB0cl90IGNvbGRfZ2NfZnJhbWUpOwoKZXh0ZXJuIHZvaWQgKCpHQ19wdXNo
X290aGVyX3Jvb3RzKSAodm9pZCk7CgoKCgoKCmV4dGVybiB2b2lkIEdDX3B1c2hfZ2Nfc3RydWN0
dXJlcyAodm9pZCk7CgoKCgoKICAgICAgICBleHRlcm4gdm9pZCBHQ19wdXNoX2ZpbmFsaXplcl9z
dHJ1Y3R1cmVzICh2b2lkKTsKICAgICAgICBleHRlcm4gdm9pZCBHQ19wdXNoX3N0dWJib3JuX3N0
cnVjdHVyZXMgKHZvaWQpOwoKICAgICAgICAgIGV4dGVybiB2b2lkIEdDX3B1c2hfdGhyZWFkX3N0
cnVjdHVyZXMgKHZvaWQpOwoKZXh0ZXJuIHZvaWQgKCpHQ19zdGFydF9jYWxsX2JhY2spICh2b2lk
KTsKCgoKCgogIHZvaWQgR0NfZ2VuZXJpY19wdXNoX3JlZ3MgKHB0cl90IGNvbGRfZ2NfZnJhbWUp
OwojIDE0MjcgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL3ByaXZhdGUvZ2NfcHJpdi5o
IgogIHZvaWQgR0NfcHVzaF9vbmUgKHdvcmQgcCk7CiMgMTQzOSAiLi4vLi4vLi4vZ2NjL2JvZWht
LWdjL2luY2x1ZGUvcHJpdmF0ZS9nY19wcml2LmgiCiAgdm9pZCBHQ19tYXJrX2FuZF9wdXNoX3N0
YWNrICh3b3JkIHApOwoKdm9pZCBHQ19wdXNoX21hcmtlZCAoc3RydWN0IGhibGsgKiBoLCBoZHIg
KiBoaGRyKTsKIyAxNDUxICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9wcml2YXRlL2dj
X3ByaXYuaCIKc3RydWN0IGhibGsgKiBHQ19wdXNoX25leHRfbWFya2VkIChzdHJ1Y3QgaGJsayAq
IGgpOwoKc3RydWN0IGhibGsgKiBHQ19wdXNoX25leHRfbWFya2VkX3VuY29sbGVjdGFibGUgKHN0
cnVjdCBoYmxrICogaCk7CgpHQ19ib29sIEdDX3N0b3BwZWRfbWFyayAoR0Nfc3RvcF9mdW5jIHN0
b3BfZnVuYyk7CgoKdm9pZCBHQ19jbGVhcl9oZHJfbWFya3MgKGhkciAqIGhoZHIpOwoKdm9pZCBH
Q19zZXRfaGRyX21hcmtzIChoZHIgKiBoaGRyKTsKCnZvaWQgR0Nfc2V0X2ZsX21hcmtzIChwdHJf
dCBwKTsKCgp2b2lkIEdDX2FkZF9yb290c19pbm5lciAoY2hhciAqIGIsIGNoYXIgKiBlLCBHQ19i
b29sIHRtcCk7CkdDX2Jvb2wgR0NfaXNfc3RhdGljX3Jvb3QgKHB0cl90IHApOwoKCgoKCgoKdm9p
ZCBHQ19yZWdpc3Rlcl9keW5hbWljX2xpYnJhcmllcyAodm9pZCk7CgoKCnB0cl90IEdDX2dldF9z
dGFja19iYXNlICh2b2lkKTsKCgoKCnZvaWQgR0NfcmVnaXN0ZXJfZGF0YV9zZWdtZW50cyAodm9p
ZCk7CgoKdm9pZCBHQ19ibF9pbml0ICh2b2lkKTsKIyAxNDk4ICIuLi8uLi8uLi9nY2MvYm9laG0t
Z2MvaW5jbHVkZS9wcml2YXRlL2djX3ByaXYuaCIKICAgICAgdm9pZCBHQ19hZGRfdG9fYmxhY2tf
bGlzdF9ub3JtYWwgKHdvcmQgcCk7CiMgMTUxMCAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1
ZGUvcHJpdmF0ZS9nY19wcml2LmgiCiAgICB2b2lkIEdDX2FkZF90b19ibGFja19saXN0X3N0YWNr
ICh3b3JkIHApOwoKc3RydWN0IGhibGsgKiBHQ19pc19ibGFja19saXN0ZWQgKHN0cnVjdCBoYmxr
ICogaCwgd29yZCBsZW4pOwoKCgoKCnZvaWQgR0NfcHJvbW90ZV9ibGFja19saXN0cyAodm9pZCk7
Cgp2b2lkIEdDX3VucHJvbW90ZV9ibGFja19saXN0cyAodm9pZCk7CgoKCndvcmQgR0NfbnVtYmVy
X3N0YWNrX2JsYWNrX2xpc3RlZCAoIHN0cnVjdCBoYmxrICpzdGFydCwgc3RydWN0IGhibGsgKmVu
ZHAxKTsKCgoKCgpwdHJfdCBHQ19zY3JhdGNoX2FsbG9jICh3b3JkIGJ5dGVzKTsKCgoKCgp2b2lk
IEdDX2ludmFsaWRhdGVfbWFwIChoZHIgKiBoaGRyKTsKCgoKCkdDX2Jvb2wgR0NfYWRkX21hcF9l
bnRyeSAod29yZCBzeik7CgoKCnZvaWQgR0NfcmVnaXN0ZXJfZGlzcGxhY2VtZW50X2lubmVyICh3
b3JkIG9mZnNldCk7CgoKCgoKdm9pZCBHQ19uZXdfaGJsayAod29yZCBzaXplX2luX3dvcmRzLCBp
bnQga2luZCk7CgoKCnB0cl90IEdDX2J1aWxkX2ZsIChzdHJ1Y3QgaGJsayAqaCwgd29yZCBzeiwg
R0NfYm9vbCBjbGVhciwgcHRyX3QgbGlzdCk7CiMgMTU2NCAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdj
L2luY2x1ZGUvcHJpdmF0ZS9nY19wcml2LmgiCnN0cnVjdCBoYmxrICogR0NfYWxsb2NoYmxrICgg
d29yZCBzaXplX2luX3dvcmRzLCBpbnQga2luZCwgdW5zaWduZWQgZmxhZ3MpOwoKCgoKCnB0cl90
IEdDX2FsbG9jX2xhcmdlICh3b3JkIGx3LCBpbnQgaywgdW5zaWduZWQgZmxhZ3MpOwojIDE1ODAg
Ii4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL3ByaXZhdGUvZ2NfcHJpdi5oIgpwdHJfdCBH
Q19hbGxvY19sYXJnZV9hbmRfY2xlYXIgKHdvcmQgbHcsIGludCBrLCB1bnNpZ25lZCBmbGFncyk7
CgoKCnZvaWQgR0NfZnJlZWhibGsgKHN0cnVjdCBoYmxrICogcCk7CgoKCgp2b2lkIEdDX2luaXRf
aW5uZXIgKHZvaWQpOwpHQ19ib29sIEdDX2V4cGFuZF9ocF9pbm5lciAod29yZCBuKTsKdm9pZCBH
Q19zdGFydF9yZWNsYWltIChpbnQgYWJvcnRfaWZfZm91bmQpOwoKCgoKCnZvaWQgR0NfY29udGlu
dWVfcmVjbGFpbSAod29yZCBzeiwgaW50IGtpbmQpOwoKCgoKdm9pZCBHQ19yZWNsYWltX29yX2Rl
bGV0ZV9hbGwgKHZvaWQpOwoKCgpHQ19ib29sIEdDX3JlY2xhaW1fYWxsIChHQ19zdG9wX2Z1bmMg
c3RvcF9mdW5jLCBHQ19ib29sIGlnbm9yZV9vbGQpOwoKCkdDX2Jvb2wgR0NfYmxvY2tfZW1wdHkg
KGhkciAqIGhoZHIpOwoKR0NfYm9vbCBHQ19uZXZlcl9zdG9wX2Z1bmMgKHZvaWQpOwoKR0NfYm9v
bCBHQ190cnlfdG9fY29sbGVjdF9pbm5lciAoR0Nfc3RvcF9mdW5jIGYpOwojIDE2MjIgIi4uLy4u
Ly4uL2djYy9ib2VobS1nYy9pbmNsdWRlL3ByaXZhdGUvZ2NfcHJpdi5oIgp2b2lkIEdDX2Zpbmlz
aF9jb2xsZWN0aW9uICh2b2lkKTsKCgpHQ19ib29sIEdDX2NvbGxlY3Rfb3JfZXhwYW5kICggd29y
ZCBuZWVkZWRfYmxvY2tzLCBHQ19ib29sIGlnbm9yZV9vZmZfcGFnZSk7CiMgMTYzOSAiLi4vLi4v
Li4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvcHJpdmF0ZS9nY19wcml2LmgiCnZvaWQgR0NfY29sbGVj
dF9hX2xpdHRsZV9pbm5lciAoaW50IG4pOwoKCgoKcHRyX3QgR0NfZ2VuZXJpY19tYWxsb2MgKHdv
cmQgbGIsIGludCBrKTsKIyAxNjU0ICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9wcml2
YXRlL2djX3ByaXYuaCIKcHRyX3QgR0NfZ2VuZXJpY19tYWxsb2NfaWdub3JlX29mZl9wYWdlIChz
aXplX3QgYiwgaW50IGspOwoKCgpwdHJfdCBHQ19nZW5lcmljX21hbGxvY19pbm5lciAod29yZCBs
YiwgaW50IGspOwoKcHRyX3QgR0NfZ2VuZXJpY19tYWxsb2Nfd29yZHNfc21hbGwgKHNpemVfdCBs
dywgaW50IGspOwoKCgpwdHJfdCBHQ19nZW5lcmljX21hbGxvY19pbm5lcl9pZ25vcmVfb2ZmX3Bh
Z2UgKHNpemVfdCBsYiwgaW50IGspOwoKCgoKCnB0cl90IEdDX2FsbG9jb2JqICh3b3JkIHN6LCBp
bnQga2luZCk7CgoKCgp2b2lkIEdDX2luaXRfaGVhZGVycyAodm9pZCk7CnN0cnVjdCBoYmxraGRy
ICogR0NfaW5zdGFsbF9oZWFkZXIgKHN0cnVjdCBoYmxrICpoKTsKCgoKR0NfYm9vbCBHQ19pbnN0
YWxsX2NvdW50cyAoc3RydWN0IGhibGsgKiBoLCB3b3JkIHN6KTsKCgoKdm9pZCBHQ19yZW1vdmVf
aGVhZGVyIChzdHJ1Y3QgaGJsayAqIGgpOwoKdm9pZCBHQ19yZW1vdmVfY291bnRzIChzdHJ1Y3Qg
aGJsayAqIGgsIHdvcmQgc3opOwoKaGRyICogR0NfZmluZF9oZWFkZXIgKHB0cl90IGgpOwoKdm9p
ZCBHQ19maW5hbGl6ZSAodm9pZCk7CgoKCgoKCnZvaWQgR0Nfbm90aWZ5X29yX2ludm9rZV9maW5h
bGl6ZXJzICh2b2lkKTsKCgoKCgoKdm9pZCBHQ19hZGRfdG9faGVhcCAoc3RydWN0IGhibGsgKnAs
IHdvcmQgYnl0ZXMpOwoKCnZvaWQgR0NfcHJpbnRfb2JqIChwdHJfdCBwKTsKCgoKZXh0ZXJuIHZv
aWQgKCpHQ19jaGVja19oZWFwKSAodm9pZCk7CgoKCmV4dGVybiB2b2lkICgqR0NfcHJpbnRfaGVh
cF9vYmopIChwdHJfdCBwKTsKCgoKCmV4dGVybiBHQ19ib29sIEdDX3ByaW50X3N0YXRzOwojIDE3
NTkgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL3ByaXZhdGUvZ2NfcHJpdi5oIgp2b2lk
IEdDX3JlYWRfZGlydHkgKHZvaWQpOwoKR0NfYm9vbCBHQ19wYWdlX3dhc19kaXJ0eSAoc3RydWN0
IGhibGsgKmgpOwoKR0NfYm9vbCBHQ19wYWdlX3dhc19ldmVyX2RpcnR5IChzdHJ1Y3QgaGJsayAq
aCk7Cgp2b2lkIEdDX2lzX2ZyZXNoIChzdHJ1Y3QgaGJsayAqaCwgd29yZCBuKTsKCgp2b2lkIEdD
X3dyaXRlX2hpbnQgKHN0cnVjdCBoYmxrICpoKTsKCnZvaWQgR0NfZGlydHlfaW5pdCAodm9pZCk7
CgoKZXh0ZXJuIEdDX2Jvb2wgR0NfaXNfbWFya2VkIChwdHJfdCBwKTsKdm9pZCBHQ19jbGVhcl9t
YXJrX2JpdCAocHRyX3QgcCk7CnZvaWQgR0Nfc2V0X21hcmtfYml0IChwdHJfdCBwKTsKCgp2b2lk
IEdDX3JlYWRfY2hhbmdlZCAodm9pZCk7CkdDX2Jvb2wgR0NfcGFnZV93YXNfY2hhbmdlZCAoc3Ry
dWN0IGhibGsgKiBoKTsKCnZvaWQgR0NfY2xlYW5fY2hhbmdpbmdfbGlzdCAodm9pZCk7Cgp2b2lk
IEdDX3N0dWJib3JuX2luaXQgKHZvaWQpOwoKCnZvaWQgR0NfcHJpbnRfYmxvY2tfbGlzdCAodm9p
ZCk7CnZvaWQgR0NfcHJpbnRfaGJsa2ZyZWVsaXN0ICh2b2lkKTsKdm9pZCBHQ19wcmludF9oZWFw
X3NlY3RzICh2b2lkKTsKdm9pZCBHQ19wcmludF9zdGF0aWNfcm9vdHMgKHZvaWQpOwp2b2lkIEdD
X2R1bXAgKHZvaWQpOwojIDE4MDkgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL3ByaXZh
dGUvZ2NfcHJpdi5oIgogICAgICBleHRlcm4gdm9pZCBHQ19ub29wKCk7CgoKCnZvaWQgR0Nfbm9v
cDEgKHdvcmQpOwoKCmV4dGVybiB2b2lkIEdDX3ByaW50ZiAoY29uc3QgY2hhciAqIGZvcm1hdCwg
bG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZyk7CiMgMTgzNSAiLi4vLi4vLi4vZ2Nj
L2JvZWhtLWdjL2luY2x1ZGUvcHJpdmF0ZS9nY19wcml2LmgiCmV4dGVybiB2b2lkIEdDX2Vycl9w
cmludGYgKGNvbnN0IGNoYXIgKiBmb3JtYXQsIGxvbmcsIGxvbmcsIGxvbmcsIGxvbmcsIGxvbmcs
IGxvbmcpOwojIDE4NTEgIi4uLy4uLy4uL2djYy9ib2VobS1nYy9pbmNsdWRlL3ByaXZhdGUvZ2Nf
cHJpdi5oIgp2b2lkIEdDX2Vycl9wdXRzIChjb25zdCBjaGFyICpzKTsKIyAxNyAiLi4vLi4vLi4v
Z2NjL2JvZWhtLWdjL3NwZWNpZmljLmMiIDIKIyAxICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5j
bHVkZS9wcml2YXRlL3NwZWNpZmljLmgiIDEKIyAxNSAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2lu
Y2x1ZGUvcHJpdmF0ZS9zcGVjaWZpYy5oIgojIDEgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5j
bHVkZS9lcnJuby5oIiAxIDMKIyAzMiAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL2Vy
cm5vLmgiIDMKCgoKCiMgMSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL2JpdHMvZXJy
bm8uaCIgMSAzCiMgMjUgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9iaXRzL2Vycm5v
LmgiIDMKIyAxICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvbGludXgvZXJybm8uaCIg
MSAzCgoKCiMgMSAiL3NraWZmL2xvY2FsL2FybS1saW51eC9pbmNsdWRlL2FzbS9lcnJuby5oIiAx
IDMKIyA1ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvbGludXgvZXJybm8uaCIgMiAz
CiMgMjYgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDIgMwoj
IDM2ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCmV4dGVy
biBpbnQgZXJybm87CgoKZXh0ZXJuIGludCAqX19lcnJub19sb2NhdGlvbiAodm9pZCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDM3ICIvc2tpZmYvbG9jYWwvYXJtLWxpbnV4L2luY2x1
ZGUvZXJybm8uaCIgMiAzCiMgNTkgIi9za2lmZi9sb2NhbC9hcm0tbGludXgvaW5jbHVkZS9lcnJu
by5oIiAzCgojIDE2ICIuLi8uLi8uLi9nY2MvYm9laG0tZ2MvaW5jbHVkZS9wcml2YXRlL3NwZWNp
ZmljLmgiIDIKIyAzMCAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvcHJpdmF0ZS9zcGVj
aWZpYy5oIgp0eXBlZGVmIHN0cnVjdCB0aHJlYWRfc3BlY2lmaWNfZW50cnkgewogICAgICAgIHVu
c2lnbmVkIGxvbmcgcXRpZDsKICAgICAgICB2b2lkICogdmFsdWU7CiAgICAgICAgcHRocmVhZF90
IHRocmVhZDsKICAgICAgICBzdHJ1Y3QgdGhyZWFkX3NwZWNpZmljX2VudHJ5ICpuZXh0Owp9IHRz
ZTsKIyA0OCAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL2luY2x1ZGUvcHJpdmF0ZS9zcGVjaWZpYy5o
IgpzdGF0aWMgX19pbmxpbmVfXyBsb25nIHF1aWNrX3RocmVhZF9pZCgpIHsKICAgIGludCBkdW1t
eTsKICAgIHJldHVybiAobG9uZykoJmR1bW15KSA+PiAxMjsKfQoKCgp0eXBlZGVmIHN0cnVjdCB0
aHJlYWRfc3BlY2lmaWNfZGF0YSB7CiAgICB0c2UgKiB2b2xhdGlsZSBjYWNoZVsxMDI0XTsKCiAg
ICB0c2UgKiBoYXNoWzEwMjRdOwogICAgcHRocmVhZF9tdXRleF90IGxvY2s7Cn0gdHNkOwoKdHlw
ZWRlZiB0c2QgKiBHQ19rZXlfdDsKCmV4dGVybiBpbnQgR0Nfa2V5X2NyZWF0ZSAodHNkICoqIGtl
eV9wdHIsIHZvaWQgKCogZGVzdHJ1Y3Rvcikodm9pZCAqKSk7CgpleHRlcm4gaW50IEdDX3NldHNw
ZWNpZmljICh0c2QgKiBrZXksIHZvaWQgKiB2YWx1ZSk7CgpleHRlcm4gdm9pZCBHQ19yZW1vdmVf
c3BlY2lmaWMgKHRzZCAqIGtleSk7CgoKdm9pZCAqIEdDX3Nsb3dfZ2V0c3BlY2lmaWMgKHRzZCAq
IGtleSwgdW5zaWduZWQgbG9uZyBxdGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRzZSAqIHZvbGF0aWxlICogY2FjaGVfZW50cnkpOwoKc3RhdGljIF9faW5saW5lX18gdm9p
ZCAqIEdDX2dldHNwZWNpZmljICh0c2QgKiBrZXkpIHsKICAgIGxvbmcgcXRpZCA9IHF1aWNrX3Ro
cmVhZF9pZCgpOwogICAgdW5zaWduZWQgaGFzaF92YWwgPSAoKCgoKGxvbmcpcXRpZCkgPj4gOCkg
XiAobG9uZylxdGlkKSAmICgxMDI0IC0gMSkpOwogICAgdHNlICogdm9sYXRpbGUgKiBlbnRyeV9w
dHIgPSBrZXkgLT4gY2FjaGUgKyBoYXNoX3ZhbDsKICAgIHRzZSAqIGVudHJ5ID0gKmVudHJ5X3B0
cjsKICAgIGlmIChlbnRyeSAtPiBxdGlkID09IHF0aWQpIHJldHVybiBlbnRyeSAtPiB2YWx1ZTsK
ICAgIHJldHVybiBHQ19zbG93X2dldHNwZWNpZmljIChrZXksIHF0aWQsIGVudHJ5X3B0cik7Cn0K
IyAxOCAiLi4vLi4vLi4vZ2NjL2JvZWhtLWdjL3NwZWNpZmljLmMiIDIKCnN0YXRpYyB0c2UgaW52
YWxpZF90c2U7CgppbnQgR0Nfa2V5X2NyZWF0ZSAodHNkICoqIGtleV9wdHIsIHZvaWQgKCogZGVz
dHJ1Y3Rvcikodm9pZCAqKSkgewogICAgaW50IGk7CiAgICB0c2QgKiByZXN1bHQgPSAodHNkICop
R0NfZ2VuZXJpY19tYWxsb2NfaW5uZXIoc2l6ZW9mICh0c2QpLCAxKTsKCiAgICBpZiAoMCA9PSBy
ZXN1bHQpIHJldHVybiAxMjsKICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmKHJlc3VsdCAtPiBsb2Nr
KSwgKCh2b2lkICopMCkpOwogICAgZm9yIChpID0gMDsgaSA8IDEwMjQ7ICsraSkgewogICAgICAg
IHJlc3VsdCAtPiBjYWNoZVtpXSA9ICZpbnZhbGlkX3RzZTsKICAgIH0KICAgICprZXlfcHRyID0g
cmVzdWx0OwogICAgcmV0dXJuIDA7Cn0KCmludCBHQ19zZXRzcGVjaWZpYyAodHNkICoga2V5LCB2
b2lkICogdmFsdWUpIHsKICAgIHB0aHJlYWRfdCBzZWxmID0gcHRocmVhZF9zZWxmKCk7CiAgICBp
bnQgaGFzaF92YWwgPSAoKCgoKGxvbmcpc2VsZikgPj4gOCkgXiAobG9uZylzZWxmKSAmICgxMDI0
IC0gMSkpOwogICAgdm9sYXRpbGUgdHNlICogZW50cnkgPSAodm9sYXRpbGUgdHNlICopR0NfZ2Vu
ZXJpY19tYWxsb2NfaW5uZXIoc2l6ZW9mICh0c2UpLCAxKTsKCiAgICBpZiAoMCA9PSBlbnRyeSkg
cmV0dXJuIDEyOwogICAgcHRocmVhZF9tdXRleF9sb2NrKCYoa2V5IC0+IGxvY2spKTsKCiAgICBl
bnRyeSAtPiBuZXh0ID0ga2V5IC0+IGhhc2hbaGFzaF92YWxdOwogICAgZW50cnkgLT4gdGhyZWFk
ID0gc2VsZjsKICAgIGVudHJ5IC0+IHZhbHVlID0gdmFsdWU7CgoKICAgICoodm9sYXRpbGUgdHNl
ICoqKShrZXkgLT4gaGFzaCArIGhhc2hfdmFsKSA9IGVudHJ5OwogICAgcHRocmVhZF9tdXRleF91
bmxvY2soJihrZXkgLT4gbG9jaykpOwogICAgcmV0dXJuIDA7Cn0KCgoKdm9pZCBHQ19yZW1vdmVf
c3BlY2lmaWMgKHRzZCAqIGtleSkgewogICAgcHRocmVhZF90IHNlbGYgPSBwdGhyZWFkX3NlbGYo
KTsKICAgIHVuc2lnbmVkIGhhc2hfdmFsID0gKCgoKChsb25nKXNlbGYpID4+IDgpIF4gKGxvbmcp
c2VsZikgJiAoMTAyNCAtIDEpKTsKICAgIHRzZSAqZW50cnk7CiAgICB0c2UgKipsaW5rID0ga2V5
IC0+IGhhc2ggKyBoYXNoX3ZhbDsKCiAgICBwdGhyZWFkX211dGV4X2xvY2soJihrZXkgLT4gbG9j
aykpOwogICAgZW50cnkgPSAqbGluazsKICAgIHdoaWxlIChlbnRyeSAhPSAoKHZvaWQgKikwKSAm
JiBlbnRyeSAtPiB0aHJlYWQgIT0gc2VsZikgewogICAgICAgIGxpbmsgPSAmKGVudHJ5IC0+IG5l
eHQpOwogICAgICAgIGVudHJ5ID0gKmxpbms7CiAgICB9CgoKICAgICAgICBlbnRyeSAtPiBxdGlk
ID0gKCh1bnNpZ25lZCBsb25nKSgtMSkpOwogICAgaWYgKGVudHJ5ICE9ICgodm9pZCAqKTApKSB7
CiAgICAgICAgKmxpbmsgPSBlbnRyeSAtPiBuZXh0OwoKCiAgICB9CiMgODQgIi4uLy4uLy4uL2dj
Yy9ib2VobS1nYy9zcGVjaWZpYy5jIgogICAgcHRocmVhZF9tdXRleF91bmxvY2soJihrZXkgLT4g
bG9jaykpOwp9CgoKdm9pZCAqIEdDX3Nsb3dfZ2V0c3BlY2lmaWMgKHRzZCAqIGtleSwgdW5zaWdu
ZWQgbG9uZyBxdGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2UgKiB2
b2xhdGlsZSAqIGNhY2hlX3B0cikgewogICAgcHRocmVhZF90IHNlbGYgPSBwdGhyZWFkX3NlbGYo
KTsKICAgIHVuc2lnbmVkIGhhc2hfdmFsID0gKCgoKChsb25nKXNlbGYpID4+IDgpIF4gKGxvbmcp
c2VsZikgJiAoMTAyNCAtIDEpKTsKICAgIHRzZSAqZW50cnkgPSBrZXkgLT4gaGFzaFtoYXNoX3Zh
bF07CgogICAgd2hpbGUgKGVudHJ5ICE9ICgodm9pZCAqKTApICYmIGVudHJ5IC0+IHRocmVhZCAh
PSBzZWxmKSB7CiAgICAgICAgZW50cnkgPSBlbnRyeSAtPiBuZXh0OwogICAgfQogICAgaWYgKGVu
dHJ5ID09ICgodm9pZCAqKTApKSByZXR1cm4gKCh2b2lkICopMCk7CgogICAgICAgIGVudHJ5IC0+
IHF0aWQgPSBxdGlkOwoKCiAgICAgICAgKmNhY2hlX3B0ciA9IGVudHJ5OwoKCiAgICByZXR1cm4g
ZW50cnkgLT4gdmFsdWU7Cn0K



More information about the Java-prs mailing list