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


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

c++/3157: gives segmentation fault



>Number:         3157
>Category:       c++
>Synopsis:       gives segmentation fault
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Jun 12 21:56:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     gcc
>Release:        unknown-1.0
>Organization:
>Environment:
redhat 7.0
>Description:
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs
gcc version 2.96 20000731 (Red Hat Linux 7.0)
 /usr/lib/gcc-lib/i386-redhat-linux/2.96/cpp0 -lang-c++ -D__GNUG__=2 -v -D__GNUC__=2 -D__GNUC_MINOR__=96 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem(posix) -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__tune_i386__ file_io.cpp file_io.ii
GNU CPP version 2.96 20000731 (Red Hat Linux 7.0) (cpplib)
 (i386 Linux/ELF)
ignoring nonexistent directory "/usr/i386-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/g++-3
 /usr/local/include
 /usr/lib/gcc-lib/i386-redhat-linux/2.96/include
 /usr/include
End of search list.
 /usr/lib/gcc-lib/i386-redhat-linux/2.96/cc1plus file_io.ii -quiet -dumpbase file_io.cpp -version -o file_io.s
GNU C++ version 2.96 20000731 (Red Hat Linux 7.0) (i386-redhat-linux) compiled by GNU C version 2.96 20000731 (Red Hat Linux 7.0).
file_io.cpp:183: no `void file_io::writeWaypoints_for_matlab 
(vector<waypoint, allocator<waypoint> >, ofstream *)' member function 
declared in class `file_io'
file_io.cpp:220: Internal error: Segmentation fault.
Please submit a full bug report.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
>How-To-Repeat:
gcc -v -save-temps -c file_io.cpp 2> output.txt
>Fix:

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

IyAxICJmaWxlX2lvLmNwcCIKIyAyMiAiZmlsZV9pby5jcHAiCiMgMjQgImZpbGVfaW8uaCIgMQoj
IDI1ICJncHNfZGF0YS5oIiAxCiMgNyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmluZyIgMSAzCiMg
MzIgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMSAzCiNwcmFnbWEgaW50ZXJm
YWNlCiMgMzIgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMwoKCgoKIyA3ICIv
dXNyL2luY2x1ZGUvZysrLTMvY3N0ZGRlZiIgMSAzCiMgMTQ3ICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCnR5cGVkZWYgaW50IHB0
cmRpZmZfdDsKIyAxOTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9p
bmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyA3ICIvdXNy
L2luY2x1ZGUvZysrLTMvY3N0ZGRlZiIgMiAzCiMgMzYgIi91c3IvaW5jbHVkZS9nKystMy9zdGQv
YmFzdHJpbmcuaCIgMiAzCgojIDMzICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIg
MSAzCiNwcmFnbWEgaW50ZXJmYWNlICJzdGQvc3RyYWl0cy5oIgojIDMzICIvdXNyL2luY2x1ZGUv
ZysrLTMvc3RkL3N0cmFpdHMuaCIgMwoKCgoKCmV4dGVybiAiQysrIiB7CnRlbXBsYXRlIDxjbGFz
cyBjaGFyVD4Kc3RydWN0IHN0cmluZ19jaGFyX3RyYWl0cyB7CiAgdHlwZWRlZiBjaGFyVCBjaGFy
X3R5cGU7CgoKCiAgc3RhdGljIHZvaWQgYXNzaWduIChjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFy
X3R5cGUmIGMyKQogICAgeyBjMSA9IGMyOyB9CiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0IGNoYXJf
dHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgPT0gYzIpOyB9
CiAgc3RhdGljIGJvb2wgbmUgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYg
YzIpCiAgICB7IHJldHVybiAhKGMxID09IGMyKTsgfQogIHN0YXRpYyBib29sIGx0IChjb25zdCBj
aGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxIDwgYzIp
OyB9CiAgc3RhdGljIGNoYXJfdHlwZSBlb3MgKCkgeyByZXR1cm4gY2hhcl90eXBlKCk7IH0KICBz
dGF0aWMgYm9vbCBpc19kZWwoY2hhcl90eXBlIGEpIHsgcmV0dXJuIDA7IH0KCgoKCiAgc3RhdGlj
IGludCBjb21wYXJlIChjb25zdCBjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBz
aXplX3QgbikKICAgIHsKICAgICAgc2l6ZV90IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyAr
K2kpCiAgICAgICAgaWYgKG5lIChzMVtpXSwgczJbaV0pKQogICAgICAgICAgcmV0dXJuIGx0IChz
MVtpXSwgczJbaV0pID8gLTEgOiAxOwoKICAgICAgcmV0dXJuIDA7CiAgICB9CgogIHN0YXRpYyBz
aXplX3QgbGVuZ3RoIChjb25zdCBjaGFyX3R5cGUqIHMpCiAgICB7CiAgICAgIHNpemVfdCBsID0g
MDsKICAgICAgd2hpbGUgKG5lICgqcysrLCBlb3MgKCkpKQogICAgICAgICsrbDsKICAgICAgcmV0
dXJuIGw7CiAgICB9CgogIHN0YXRpYyBjaGFyX3R5cGUqIGNvcHkgKGNoYXJfdHlwZSogczEsIGNv
bnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgewogICAgICBmb3IgKDsgbi0tOyApCiAg
ICAgICAgYXNzaWduIChzMVtuXSwgczJbbl0pOwogICAgICByZXR1cm4gczE7CiAgICB9CgogIHN0
YXRpYyBjaGFyX3R5cGUqIG1vdmUgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIs
IHNpemVfdCBuKQogICAgewogICAgICBjaGFyX3R5cGUgYVtuXTsKICAgICAgc2l6ZV90IGk7CiAg
ICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCiAgICAgICAgYXNzaWduIChhW2ldLCBzMltpXSk7
CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCiAgICAgICAgYXNzaWduIChzMVtpXSwgYVtp
XSk7CiAgICAgIHJldHVybiBzMTsKICAgIH0KCiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChjaGFy
X3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUmIGMsIHNpemVfdCBuKQogICAgewogICAgICBmb3Ig
KDsgbi0tOyApCiAgICAgICAgYXNzaWduIChzMVtuXSwgYyk7CiAgICAgIHJldHVybiBzMTsKICAg
IH0KfTsKCmNsYXNzIGlzdHJlYW07CmNsYXNzIG9zdHJlYW07CgojIDcgIi91c3IvaW5jbHVkZS9n
KystMy9jY3R5cGUiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzCiMgMjgzICIv
dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzExICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMwojIDI3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCgojIDMwICIvdXNyL2luY2x1ZGUv
Yml0cy90eXBlcy5oIiAxIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVk
ZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50
Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYg
dW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYg
bG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIg
Mwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191
aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0
eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNp
Z25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJf
dDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsK
dHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRl
ZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxv
bmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9f
cGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsK
dHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0
eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwoKCnR5cGVk
ZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBp
bnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBs
b25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVk
ZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVk
ZWYgaW50IF9fdGltZXJfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2ZkX21hc2s7
CgoKIyAxMDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7
CgoKCgoKCiAgICBfX2ZkX21hc2sgX19mZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRf
bWFzaykpXTsKCgogIH0gX19mZF9zZXQ7CgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVm
IHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBsb25nIGludCBfX2Js
a3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRf
dCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYg
X191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRf
dDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYgX191X3F1YWRf
dCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRlZiBsb25n
IGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJf
dDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29j
a2xlbl90OwoKCgoKCiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMK
IyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCnN0cnVjdCBfX3NjaGVkX3BhcmFt
CiAgewogICAgaW50IHNjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRz
L3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcg
aW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0
aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7
CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2No
ZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29w
ZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpf
X3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5
cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0
aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3Ry
dWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9y
ZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBp
bnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJl
YWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhy
ZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgojIDE0MCAi
L3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBsb25n
IGludCBwdGhyZWFkX3Q7CgojIDE2NiAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMg
MjggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyA0MSAiL3Vzci9p
bmNsdWRlL2N0eXBlLmgiIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyA0MSAi
L3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwoKCgoKCgplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkg
PCA4ID8gKCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIg
PSAoKDEpIDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9J
U2FscGhhID0gKCgyKSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgp
KSwKICBfSVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMp
KSA+PiA4KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgo
MSA8PCAoNCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwg
OCkgOiAoKDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAo
NikpIDw8IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAo
KDEgPDwgKDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkg
PCA4ID8gKCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwg
PSAoKDkpIDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9J
U3B1bmN0ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+
IDgpKSwKICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8
PCAoMTEpKSA+PiA4KSkKfTsKIyA3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9f
Y29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CmV4dGVybiBfX2NvbnN0IF9faW50
MzJfdCAqX19jdHlwZV90b2xvd2VyOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVf
dG91cHBlcjsKCiMgOTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgaXNhbG51
bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpleHRl
cm4gaW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlz
Z3JhcGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGlu
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBpc3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgdG9sb3dlciAoaW50
IF9fYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0b3VwcGVyIChpbnQgX19jKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGludCBpc2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCB0b2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfdG91cHBlciAoaW50
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfdG9sb3dlciAoaW50KSB0aHJvdyAoKTsKIyAyNzcgIi91
c3IvaW5jbHVkZS9jdHlwZS5oIiAzCn0KCiMgNyAiL3Vzci9pbmNsdWRlL2crKy0zL2NjdHlwZSIg
MiAzCiMgMTA2ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAzCgojIDggIi91
c3IvaW5jbHVkZS9nKystMy9jc3RyaW5nIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5o
IiAxIDMKZXh0ZXJuICJDIiB7CgoKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19y
ZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0
cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUg
KHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3Qs
IF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0
ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
bWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9f
bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9p
ZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgojIDc3ICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3Qs
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBj
aGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJu
Y2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
c3JjLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY21w
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cmNv
bGwgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFy
ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKIyAxMjAgIi91c3IvaW5j
bHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNTUgIi91c3IvaW5jbHVk
ZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50
IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAq
c3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKIyAxNjcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4g
c2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXpl
X3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJw
YnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9f
Y29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCiMgMTg5ICIvdXNyL2luY2x1ZGUvc3Ry
aW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hh
ciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGNo
YXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19z
YXZlX3B0cikgdGhyb3cgKCk7CiMgMjIwICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJu
IHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCiMgMjMxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNo
YXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19z
dHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRo
cm93ICgpOwpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1
Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZv
aWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2Nv
bnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4
dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVf
dCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu
IGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFy
ICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpl
eHRlcm4gaW50IF9fZmZzIChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3Qp
KTsKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChjb25z
dCkpOwoKCgojIDI3NiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBpbnQgX19zdHJj
YXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKZXh0ZXJuIGludCBzdHJjYXNlY21wIChf
X2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0
IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyAzMDAgIi91c3IvaW5jbHVkZS9zdHJpbmcu
aCIgMwpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCiAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJv
dyAoKTsKIyAzNjkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwp9CgojIDggIi91c3IvaW5jbHVk
ZS9nKystMy9jc3RyaW5nIiAyIDMKIyAxMDcgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvc3RyYWl0
cy5oIiAyIDMKCnN0cnVjdCBzdHJpbmdfY2hhcl90cmFpdHMgPGNoYXI+IHsKICB0eXBlZGVmIGNo
YXIgY2hhcl90eXBlOwoKICBzdGF0aWMgdm9pZCBhc3NpZ24gKGNoYXJfdHlwZSYgYzEsIGNvbnN0
IGNoYXJfdHlwZSYgYzIpCiAgICB7IGMxID0gYzI7IH0KICBzdGF0aWMgYm9vbCBlcSAoY29uc3Qg
Y2hhcl90eXBlICYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgPT0g
YzIpOyB9CiAgc3RhdGljIGJvb2wgbmUgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJf
dHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgIT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbHQgKGNv
bnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEg
PCBjMik7IH0KICBzdGF0aWMgY2hhcl90eXBlIGVvcyAoKSB7IHJldHVybiAwOyB9CiAgc3RhdGlj
IGJvb2wgaXNfZGVsKGNoYXJfdHlwZSBhKSB7IHJldHVybiAoX19jdHlwZV9iWyhpbnQpICgoYSkp
XSAmICh1bnNpZ25lZCBzaG9ydCBpbnQpIF9JU3NwYWNlKTsgfQoKICBzdGF0aWMgaW50IGNvbXBh
cmUgKGNvbnN0IGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQog
ICAgeyByZXR1cm4gbWVtY21wIChzMSwgczIsIG4pOyB9CiAgc3RhdGljIHNpemVfdCBsZW5ndGgg
KGNvbnN0IGNoYXJfdHlwZSogcykKICAgIHsgcmV0dXJuIHN0cmxlbiAocyk7IH0KICBzdGF0aWMg
Y2hhcl90eXBlKiBjb3B5IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXpl
X3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkgKHMxLCBzMiwgbik7IH0KICBz
dGF0aWMgY2hhcl90eXBlKiBtb3ZlIChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMy
LCBzaXplX3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1tb3ZlIChzMSwgczIsIG4p
OyB9CiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5
cGUmIGMsIHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbXNldCAoczEsIGMs
IG4pOyB9Cn07CgojIDE2MCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9zdHJhaXRzLmgiIDMKfQoj
IDM3ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCgojIDE5ICIvdXNy
L2luY2x1ZGUvZysrLTMvYWxsb2MuaCIgMSAzCiMgMTUyICIvdXNyL2luY2x1ZGUvZysrLTMvc3Rs
X2NvbmZpZy5oIiAxIDMKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyAzMTIg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0df
Y29uZmlnLmgiIDIgMwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyA0NiAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDYyICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp0eXBl
ZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7
CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUgIi91
c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBf
X3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QK
ewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90
OwojIDQ1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2dj
b252LmgiIDEgMwojIDQ2ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgMjkgIi91c3IvaW5j
bHVkZS9nY29udi5oIiAyIDMKCgoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NP
TlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VN
UFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVU
LAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBU
T1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xB
U1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVj
dCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZf
bG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQg
KCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3Rl
cF9kYXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNo
YXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAo
Kl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQg
KCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGlu
dCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hh
ciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBj
aGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25l
ZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0
KSAoc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5z
aWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAo
X19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5z
X2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29u
dl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoK
ICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRf
ZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNf
ZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19u
ZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRf
b2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50
IF9fY291bnRlcjsKCiAgX19jb25zdCBjaGFyICpfX2Zyb21fbmFtZTsKICBfX2NvbnN0IGNoYXIg
Kl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBfX2lu
aXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9fbWluX25lZWRl
ZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVkX3RvOwog
IGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRh
Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0
YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdzOwoKCgog
IGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7CgogIF9f
bWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0cnVjdCBf
X2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZf
aW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3RlcHM7
CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhWzBdOwp9ICpf
X2djb252X3Q7CgojIDQ1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwp0eXBlZGVmIHVu
aW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAgc3RydWN0
IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsK
ICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19h
dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3Qg
X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50
IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVm
IHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lf
XykpKTsKCiMgMTUyICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5oIiAyIDMKIyAxOSAi
L3Vzci9pbmNsdWRlL2crKy0zL2FsbG9jLmgiIDIgMwoKCgojIDQ2ICIvdXNyL2luY2x1ZGUvZysr
LTMvc3RsX2FsbG9jLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIg
MSAzCiNwcmFnbWEgaW50ZXJmYWNlCiMgMjcgIi91c3IvaW5jbHVkZS9nKystMy9pb3N0cmVhbS5o
IiAzCgoKCgoKIyAyOCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAxIDMKI3ByYWdt
YSBpbnRlcmZhY2UKIyAyOCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAzCgoKCgoK
CgpleHRlcm4gIkMiIHsKCiMgNTIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMKIyA0MyAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvc3RkYXJnLmgiIDEg
Mwp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDUyICIvdXNyL2lu
Y2x1ZGUvbGliaW8uaCIgMiAzCiMgMTU3ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3Qg
X0lPX2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwoKCgoKCgoKCgp0eXBlZGVmIHZvaWQgX0lPX2xv
Y2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0
OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMgMTkwICIvdXNyL2lu
Y2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0
X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRf
bm9jb252Cn07CgojIDI2MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19GSUxF
IHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3Jl
YWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAg
Y2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19i
dWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBj
aGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lP
X21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2Zp
bGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25l
ZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFy
IF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAzMDYgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAzCiAgX19vZmY2NF90IF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3BhZDE7CiAg
dm9pZCAqX19wYWQyOwoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXplb2Yg
KGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3RydWN0IF9JT19GSUxFX3Bs
dXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4dGVybiBz
dHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJ
TEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzQ1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0
eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1
Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3JpdGVf
Zm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vl
a19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5cGVk
ZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgojIDM5NCAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lP
X0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cg
KCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0
ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2lu
dF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVy
ZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0aHJvdyAoKTsKCiMgNDI3ICIvdXNyL2luY2x1ZGUv
bGliaW8uaCIgMwpleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50
IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX0lPX3Bl
ZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIF9J
T19mbG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnVubG9j
a2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUg
KF9JT19GSUxFICopIHRocm93ICgpOwoKIyA0NTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4
dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAq
IF9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQg
Kl9fcmVzdHJpY3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUg
Kl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2dudWNfdmFfbGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4g
KF9JT19GSUxFICosIGludCwgX19zc2l6ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9f
c2dldG4gKF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29m
ZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93
ICgpOwpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3Qs
IGludCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJ
TEUgKikgdGhyb3cgKCk7CgojIDQ5NSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfQojIDM3ICIv
dXNyL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDIgMwp9CgoKCiMgMTEwICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCnR5cGVk
ZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyA0MSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmVh
bWJ1Zi5oIiAyIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAzCmV4dGVy
biAiQysrIiB7CmNsYXNzIGlzdHJlYW07CmNsYXNzIG9zdHJlYW07IGNsYXNzIHN0cmVhbWJ1ZjsK
CgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgc3RyZWFtb2ZmOwp0eXBlZGVmIF9fb2ZmNjRfdCBzdHJl
YW1wb3M7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBzdHJlYW1zaXplOwoKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIF9fZm10ZmxhZ3M7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX2lvc3RhdGU7CgpzdHJ1
Y3QgX2lvc19maWVsZHMKewogICAgc3RyZWFtYnVmICpfc3RyYnVmOwogICAgb3N0cmVhbSogX3Rp
ZTsKICAgIGludCBfd2lkdGg7CiAgICBfX2ZtdGZsYWdzIF9mbGFnczsKICAgIHdjaGFyX3QgX2Zp
bGw7CiAgICBfX2lvc3RhdGUgX3N0YXRlOwogICAgX19pb3N0YXRlIF9leGNlcHRpb25zOwogICAg
aW50IF9wcmVjaXNpb247CgogICAgdm9pZCAqX2FycmF5czsKfTsKCiMgMTI2ICIvdXNyL2luY2x1
ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKY2xhc3MgaW9zIDogcHVibGljIF9pb3NfZmllbGRzIHsK
ICBpb3MmIG9wZXJhdG9yPShpb3MmKTsKICBpb3MgKGNvbnN0IGlvcyYpOwogIHB1YmxpYzoKICAg
IHR5cGVkZWYgX19mbXRmbGFncyBmbXRmbGFnczsKICAgIHR5cGVkZWYgaW50IGlvc3RhdGU7CiAg
ICB0eXBlZGVmIGludCBvcGVubW9kZTsKICAgIHR5cGVkZWYgX19zc2l6ZV90IHN0cmVhbXNpemU7
CiAgICBlbnVtIGlvX3N0YXRlIHsKICAgICAgICBnb29kYml0ID0gMCwKICAgICAgICBlb2ZiaXQg
PSAxLAogICAgICAgIGZhaWxiaXQgPSAyLAogICAgICAgIGJhZGJpdCA9IDQgfTsKICAgIGVudW0g
b3Blbl9tb2RlIHsKICAgICAgICBpbiA9IDEsCiAgICAgICAgb3V0ID0gMiwKICAgICAgICBhdGUg
PSA0LAogICAgICAgIGFwcCA9IDgsCiAgICAgICAgdHJ1bmMgPSAxNiwKICAgICAgICBub2NyZWF0
ZSA9IDMyLAogICAgICAgIG5vcmVwbGFjZSA9IDY0LAogICAgICAgIGJpbiA9IDEyOCwKICAgICAg
ICBiaW5hcnkgPSAxMjggfTsKICAgIGVudW0gc2Vla19kaXIgeyBiZWcsIGN1ciwgZW5kfTsKICAg
IHR5cGVkZWYgZW51bSBzZWVrX2RpciBzZWVrZGlyOwoKICAgIGVudW0geyBza2lwd3M9MDEsCiAg
ICAgICAgICAgbGVmdD0wMiwgcmlnaHQ9MDQsIGludGVybmFsPTAxMCwKICAgICAgICAgICBkZWM9
MDIwLCBvY3Q9MDQwLCBoZXg9MDEwMCwKICAgICAgICAgICBzaG93YmFzZT0wMjAwLCBzaG93cG9p
bnQ9MDQwMCwKICAgICAgICAgICB1cHBlcmNhc2U9MDEwMDAsIHNob3dwb3M9MDIwMDAsCiAgICAg
ICAgICAgc2NpZW50aWZpYz0wNDAwMCwgZml4ZWQ9MDEwMDAwLAogICAgICAgICAgIHVuaXRidWY9
MDIwMDAwLCBzdGRpbz0wNDAwMDAKCgoKICAgICAgICAgICB9OwogICAgZW51bSB7CiAgICAgICAg
YmFzZWZpZWxkPWRlYytvY3QraGV4LAogICAgICAgIGZsb2F0ZmllbGQgPSBzY2llbnRpZmljK2Zp
eGVkLAogICAgICAgIGFkanVzdGZpZWxkID0gbGVmdCtyaWdodCtpbnRlcm5hbAogICAgfTsKCiMg
MTc5ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKICAgIG9zdHJlYW0qIHRpZSgp
IGNvbnN0IHsgcmV0dXJuIF90aWU7IH0KICAgIG9zdHJlYW0qIHRpZShvc3RyZWFtKiB2YWwpIHsg
b3N0cmVhbSogc2F2ZT1fdGllOyBfdGllPXZhbDsgcmV0dXJuIHNhdmU7IH0KCgogICAgd2NoYXJf
dCBmaWxsKCkgY29uc3QgeyByZXR1cm4gX2ZpbGw7IH0KICAgIHdjaGFyX3QgZmlsbCh3Y2hhcl90
IG5ld2YpCiAgICAgICAge3djaGFyX3Qgb2xkZiA9IF9maWxsOyBfZmlsbCA9IG5ld2Y7IHJldHVy
biBvbGRmO30KICAgIGZtdGZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gX2ZsYWdzOyB9CiAg
ICBmbXRmbGFncyBmbGFncyhmbXRmbGFncyBuZXdfdmFsKSB7CiAgICAgICAgZm10ZmxhZ3Mgb2xk
X3ZhbCA9IF9mbGFnczsgX2ZsYWdzID0gbmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAgIGlu
dCBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJlY2lz
aW9uKGludCBuZXdwKSB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgb2xkcCA9IF9wcmVjaXNpb247
IF9wcmVjaXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsKICAgICAgICByZXR1cm4gb2xkcDsg
fQogICAgZm10ZmxhZ3Mgc2V0ZihmbXRmbGFncyB2YWwpIHsKICAgICAgICBmbXRmbGFncyBvbGRi
aXRzID0gX2ZsYWdzOwogICAgICAgIF9mbGFncyB8PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAg
ICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCwgZm10ZmxhZ3MgbWFzaykgewogICAgICAgIGZt
dGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7CiAgICAgICAgX2ZsYWdzID0gKF9mbGFncyAmIH5tYXNr
KSB8ICh2YWwgJiBtYXNrKTsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHVuc2V0Zihm
bXRmbGFncyBtYXNrKSB7CiAgICAgICAgZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKICAgICAg
ICBfZmxhZ3MgJj0gfm1hc2s7IHJldHVybiBvbGRiaXRzOyB9CiAgICBpbnQgd2lkdGgoKSBjb25z
dCB7IHJldHVybiBfd2lkdGg7IH0KICAgIGludCB3aWR0aChpbnQgdmFsKSB7IGludCBzYXZlID0g
X3dpZHRoOyBfd2lkdGggPSB2YWw7IHJldHVybiBzYXZlOyB9CgoKCgogICAgdm9pZCBfdGhyb3df
ZmFpbHVyZSgpIGNvbnN0IHsgfQoKICAgIHZvaWQgY2xlYXIoaW9zdGF0ZSBzdGF0ZSA9IDApIHsK
ICAgICAgICBfc3RhdGUgPSBfc3RyYnVmID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CiAgICAgICAg
aWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNl
dChpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7CiAgICAgICAgaWYgKF9zdGF0ZSAmIF9l
eGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldHN0YXRlKGlvc3RhdGUg
ZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsKICAgICAgICBpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMp
IF90aHJvd19mYWlsdXJlKCk7IH0KICAgIGludCBnb29kKCkgY29uc3QgeyByZXR1cm4gX3N0YXRl
ID09IDA7IH0KICAgIGludCBlb2YoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmVvZmJp
dDsgfQogICAgaW50IGZhaWwoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiAoaW9zOjpiYWRiaXR8
aW9zOjpmYWlsYml0KTsgfQogICAgaW50IGJhZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlv
czo6YmFkYml0OyB9CiAgICBpb3N0YXRlIHJkc3RhdGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7
IH0KICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpID8gKHZvaWQqKTAg
OiAodm9pZCopKC0xKTsgfQogICAgaW50IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGZhaWwo
KTsgfQogICAgaW9zdGF0ZSBleGNlcHRpb25zKCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7
IH0KICAgIHZvaWQgZXhjZXB0aW9ucyhpb3N0YXRlIGVuYWJsZSkgewogICAgICAgIF9leGNlcHRp
b25zID0gZW5hYmxlOwogICAgICAgIGlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2Zh
aWx1cmUoKTsgfQoKICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBjb25zdCB7IHJldHVybiBfc3RyYnVm
OyB9CiAgICBzdHJlYW1idWYqIHJkYnVmKHN0cmVhbWJ1ZiAqX3MpIHsKICAgICAgc3RyZWFtYnVm
ICpfb2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9zOyBjbGVhciAoKTsgcmV0dXJuIF9vbGQ7IH0K
CiAgICBzdGF0aWMgaW50IHN5bmNfd2l0aF9zdGRpbyhpbnQgb24pOwogICAgc3RhdGljIHZvaWQg
c3luY193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0YXRpYyBmbXRm
bGFncyBiaXRhbGxvYygpOwogICAgc3RhdGljIGludCB4YWxsb2MoKTsKICAgIHZvaWQqJiBwd29y
ZChpbnQpOwogICAgdm9pZCogcHdvcmQoaW50KSBjb25zdDsKICAgIGxvbmcmIGl3b3JkKGludCk7
CiAgICBsb25nIGl3b3JkKGludCkgY29uc3Q7CgojIDI1MSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0
cmVhbWJ1Zi5oIiAzCiAgICBjbGFzcyBJbml0IHsKICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7
IH0KICAgIH07CgogIHByb3RlY3RlZDoKICAgIGlubGluZSBpb3Moc3RyZWFtYnVmKiBzYiA9IDAs
IG9zdHJlYW0qIHRpZV90byA9IDApOwogICAgaW5saW5lIHZpcnR1YWwgfmlvcygpOwogICAgaW5s
aW5lIHZvaWQgaW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWUgPSAwKTsKfTsKCgoKCnR5
cGVkZWYgaW9zOjpzZWVrX2RpciBfc2Vla19kaXI7CiMgMjc2ICIvdXNyL2luY2x1ZGUvZysrLTMv
c3RyZWFtYnVmLmgiIDMKY2xhc3Mgc3RyZWFtbWFya2VyIDogcHJpdmF0ZSBfSU9fbWFya2VyIHsK
ICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7CiAgICB2b2lkIHNldF9vZmZzZXQoaW50IG9mZnNl
dCkgeyBfcG9zID0gb2Zmc2V0OyB9CiAgcHVibGljOgogICAgc3RyZWFtbWFya2VyKHN0cmVhbWJ1
ZiAqc2IpOwogICAgfnN0cmVhbW1hcmtlcigpOwogICAgaW50IHNhdmluZygpIHsgcmV0dXJuIDE7
IH0KICAgIGludCBkZWx0YShzdHJlYW1tYXJrZXImKTsKICAgIGludCBkZWx0YSgpOwp9OwoKc3Ry
dWN0IHN0cmVhbWJ1ZiA6IHB1YmxpYyBfSU9fRklMRSB7CiAgICBmcmllbmQgY2xhc3MgaW9zOwog
ICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07CiAgICBmcmllbmQgY2xhc3Mgb3N0cmVhbTsKICAgIGZy
aWVuZCBjbGFzcyBzdHJlYW1tYXJrZXI7CiAgICBjb25zdCB2b2lkIComX3Z0YWJsZSgpIHsgcmV0
dXJuICooY29uc3Qgdm9pZCoqKSgoX0lPX0ZJTEUqKXRoaXMgKyAxKTsgfQogIHByb3RlY3RlZDoK
ICAgIHN0YXRpYyBzdHJlYW1idWYqIF9saXN0X2FsbDsKICAgIF9JT19GSUxFKiYgeGNoYWluKCkg
eyByZXR1cm4gX2NoYWluOyB9CiAgICB2b2lkIF91bl9saW5rKCk7CiAgICB2b2lkIF9saW5rX2lu
KCk7CiAgICBjaGFyKiBncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAg
PyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfcHRyOyB9CiAgICBjaGFyKiBwcHRyKCkgY29uc3Qg
eyByZXR1cm4gX0lPX3dyaXRlX3B0cjsgfQogICAgY2hhciogZWdwdHIoKSBjb25zdAogICAgICB7
IHJldHVybiBfZmxhZ3MgJiAweDEwMCA/IF9JT19zYXZlX2VuZCA6IF9JT19yZWFkX2VuZDsgfQog
ICAgY2hhciogZXBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfZW5kOyB9CiAgICBjaGFy
KiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9iYXNlOyB9CiAgICBjaGFyKiBlYmFj
aygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAmIDB4MTAwID8gX0lPX3NhdmVfYmFzZSA6
IF9JT19yZWFkX2Jhc2U7fQogICAgY2hhciogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZf
YmFzZTsgfQogICAgY2hhciogZWJ1ZigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kOyB9CiAg
ICBpbnQgYmxlbigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kIC0gX0lPX2J1Zl9iYXNlOyB9
CiAgICB2b2lkIHhwdXRfY2hhcihjaGFyIGMpIHsgKl9JT193cml0ZV9wdHIrKyA9IGM7IH0KICAg
IGludCB4ZmxhZ3MoKSB7IHJldHVybiBfZmxhZ3M7IH0KICAgIGludCB4ZmxhZ3MoaW50IGYpIHtp
bnQgZmwgPSBfZmxhZ3M7IF9mbGFncyA9IGY7IHJldHVybiBmbDt9CiAgICB2b2lkIHhzZXRmbGFn
cyhpbnQgZikgeyBfZmxhZ3MgfD0gZjsgfQogICAgdm9pZCB4c2V0ZmxhZ3MoaW50IGYsIGludCBt
YXNrKQogICAgICB7IF9mbGFncyA9IChfZmxhZ3MgJiB+bWFzaykgfCAoZiAmIG1hc2spOyB9CiAg
ICB2b2lkIGdidW1wKGludCBuKQogICAgICB7IF9mbGFncyAmIDB4MTAwID8gKF9JT19zYXZlX2Jh
c2UrPW4pOihfSU9fcmVhZF9wdHIrPW4pO30KICAgIHZvaWQgcGJ1bXAoaW50IG4pIHsgX0lPX3dy
aXRlX3B0ciArPSBuOyB9CiAgICB2b2lkIHNldGIoY2hhciogYiwgY2hhciogZWIsIGludCBhPTAp
OwogICAgdm9pZCBzZXRwKGNoYXIqIHAsIGNoYXIqIGVwKQogICAgICB7IF9JT193cml0ZV9iYXNl
PV9JT193cml0ZV9wdHI9cDsgX0lPX3dyaXRlX2VuZD1lcDsgfQogICAgdm9pZCBzZXRnKGNoYXIq
IGViLCBjaGFyKiBnLCBjaGFyICplZykgewogICAgICBpZiAoX2ZsYWdzICYgMHgxMDApIF9JT19m
cmVlX2JhY2t1cF9hcmVhKHRoaXMpOwogICAgICBfSU9fcmVhZF9iYXNlID0gZWI7IF9JT19yZWFk
X3B0ciA9IGc7IF9JT19yZWFkX2VuZCA9IGVnOyB9CiAgICBjaGFyICpzaG9ydGJ1ZigpIHsgcmV0
dXJuIF9zaG9ydGJ1ZjsgfQoKICAgIGludCBpbl9iYWNrdXAoKSB7IHJldHVybiBfZmxhZ3MgJiAw
eDEwMDsgfQoKICAgIGNoYXIgKkdiYXNlKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fc2F2
ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTsgfQoKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5f
YmFja3VwKCkgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KCiAgICBjaGFyICpCYmFz
ZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3JlYWRfYmFzZSA6IF9JT19zYXZlX2Jhc2U7
IH0KICAgIGNoYXIgKkJwdHIoKSB7IHJldHVybiBfSU9fYmFja3VwX2Jhc2U7IH0KCiAgICBjaGFy
ICplQnB0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3JlYWRfZW5kIDogX0lPX3NhdmVf
ZW5kOyB9CiAgICBjaGFyICpOYmFzZSgpIHsgcmV0dXJuIF9JT19zYXZlX2Jhc2U7IH0KICAgIGNo
YXIgKmVOcHRyKCkgeyByZXR1cm4gX0lPX3NhdmVfZW5kOyB9CiAgICBpbnQgaGF2ZV9iYWNrdXAo
KSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlICE9IF9fbnVsbDsgfQogICAgaW50IGhhdmVfbWFya2Vy
cygpIHsgcmV0dXJuIF9tYXJrZXJzICE9IF9fbnVsbDsgfQogICAgdm9pZCBmcmVlX2JhY2t1cF9h
cmVhKCk7CiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7CiAgICBpbnQgcHV0X21vZGUoKSB7IHJl
dHVybiBfZmxhZ3MgJiAweDgwMDsgfQogICAgaW50IHN3aXRjaF90b19nZXRfbW9kZSgpOwoKICAg
IHN0cmVhbWJ1ZihpbnQgZmxhZ3M9MCk7CiAgcHVibGljOgogICAgc3RhdGljIGludCBmbHVzaF9h
bGwoKTsKICAgIHN0YXRpYyB2b2lkIGZsdXNoX2FsbF9saW5lYnVmZmVyZWQoKTsKICAgIHZpcnR1
YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpKTsK
ICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOwogICAgdmlydHVhbCBpbnQgdWZsb3coKTsKICAg
IHZpcnR1YWwgaW50IHBiYWNrZmFpbChpbnQgYyk7CgogICAgdmlydHVhbCBzdHJlYW1zaXplIHhz
cHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBzdHJlYW1zaXpl
IHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vl
a29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAg
ICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9z
Ojppbnxpb3M6Om91dCk7CgogICAgc3RyZWFtcG9zIHB1YnNlZWtvZmYoc3RyZWFtb2ZmIG8sIF9z
ZWVrX2RpciBkLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9f
c2Vla29mZiAodGhpcywgbywgZCwgbW9kZSk7IH0KICAgIHN0cmVhbXBvcyBwdWJzZWVrcG9zKHN0
cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCkKICAgICAgeyByZXR1cm4g
X0lPX3NlZWtwb3MgKHRoaXMsIHBvcywgbW9kZSk7IH0KICAgIHN0cmVhbXBvcyBzc2Vla29mZihz
dHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICBzdHJl
YW1wb3Mgc3NlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0
KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICB2
aXJ0dWFsIGludCBzeW5jKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7CgogICAgaW50
IHNlZWttYXJrKHN0cmVhbW1hcmtlciYgbWFyaywgaW50IGRlbHRhID0gMCk7CiAgICBpbnQgc3B1
dGJhY2tjKGNoYXIgYyk7CiAgICBpbnQgc3VuZ2V0YygpOwogICAgaW50IHVuYnVmZmVyZWQoKSB7
IHJldHVybiBfZmxhZ3MgJiAyID8gMSA6IDA7IH0KICAgIGludCBsaW5lYnVmZmVyZWQoKSB7IHJl
dHVybiBfZmxhZ3MgJiAweDIwMCA/IDEgOiAwOyB9CiAgICB2b2lkIHVuYnVmZmVyZWQoaW50IGkp
CiAgICAgICAgeyBpZiAoaSkgX2ZsYWdzIHw9IDI7IGVsc2UgX2ZsYWdzICY9IH4yOyB9CiAgICB2
b2lkIGxpbmVidWZmZXJlZChpbnQgaSkKICAgICAgICB7IGlmIChpKSBfZmxhZ3MgfD0gMHgyMDA7
IGVsc2UgX2ZsYWdzICY9IH4weDIwMDsgfQogICAgaW50IGFsbG9jYXRlKCkgewogICAgICAgIGlm
IChiYXNlKCkgfHwgdW5idWZmZXJlZCgpKSByZXR1cm4gMDsKICAgICAgICBlbHNlIHJldHVybiBk
b2FsbG9jYXRlKCk7IH0KCiAgICB2b2lkIGFsbG9jYnVmKCkgeyBpZiAoYmFzZSgpID09IF9fbnVs
bCkgZG9hbGxvY2J1ZigpOyB9CiAgICB2b2lkIGRvYWxsb2NidWYoKTsKICAgIGludCBpbl9hdmFp
bCgpIHsgcmV0dXJuIF9JT19yZWFkX2VuZCAtIF9JT19yZWFkX3B0cjsgfQogICAgaW50IG91dF93
YWl0aW5nKCkgeyByZXR1cm4gX0lPX3dyaXRlX3B0ciAtIF9JT193cml0ZV9iYXNlOyB9CiAgICBz
dHJlYW1zaXplIHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4geHNw
dXRuKHMsIG4pOyB9CiAgICBzdHJlYW1zaXplIHBhZG4oY2hhciBwYWQsIHN0cmVhbXNpemUgbikg
eyByZXR1cm4gX0lPX3BhZG4odGhpcywgcGFkLCBuKTsgfQogICAgc3RyZWFtc2l6ZSBzZ2V0bihj
aGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19zZ2V0bih0aGlzLCBzLCBuKTsgfQog
ICAgaW50IGlnbm9yZShpbnQpOwogICAgaW50IGdldF9jb2x1bW4oKTsKICAgIGludCBzZXRfY29s
dW1uKGludCk7CiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1Ziwgc2l6ZV90IG4sIGNoYXIgZGVs
aW0sIGludCBwdXRiYWNrX2RlbGltKTsKICAgIGludCBzcHV0YyhpbnQgYykgeyByZXR1cm4gX0lP
X3B1dGMoYywgdGhpcyk7IH0KICAgIGludCBzYnVtcGMoKSB7IHJldHVybiBfSU9fZ2V0Yyh0aGlz
KTsgfQogICAgaW50IHNnZXRjKCkgeyByZXR1cm4gKCh0aGlzKS0+X0lPX3JlYWRfcHRyID49ICh0
aGlzKS0+X0lPX3JlYWRfZW5kICYmIF9fdW5kZXJmbG93ICh0aGlzKSA9PSAoLTEpID8gKC0xKSA6
ICoodW5zaWduZWQgY2hhciAqKSAodGhpcyktPl9JT19yZWFkX3B0cik7IH0KICAgIGludCBzbmV4
dGMoKSB7CiAgICAgICAgaWYgKF9JT19yZWFkX3B0ciA+PSBfSU9fcmVhZF9lbmQgJiYgX191bmRl
cmZsb3codGhpcykgPT0gKC0xKSkKICAgICAgICAgIHJldHVybiAoLTEpOwogICAgICAgIGVsc2Ug
cmV0dXJuIF9JT19yZWFkX3B0cisrLCBzZ2V0YygpOyB9CiAgICB2b2lkIHN0b3NzYygpIHsgaWYg
KF9JT19yZWFkX3B0ciA8IF9JT19yZWFkX2VuZCkgX0lPX3JlYWRfcHRyKys7IH0KICAgIGludCB2
c2NhbihjaGFyIGNvbnN0ICpmbXQwLCBfX2dudWNfdmFfbGlzdCBhcCwgaW9zKiBzdHJlYW0gPSBf
X251bGwpOwogICAgaW50IHNjYW4oY2hhciBjb25zdCAqZm10MCAuLi4pOwogICAgaW50IHZmb3Jt
KGNoYXIgY29uc3QgKmZtdDAsIF9fZ251Y192YV9saXN0IGFwKTsKICAgIGludCBmb3JtKGNoYXIg
Y29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hh
ciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0
ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2Vl
ayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2UoKTsKICAg
IHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsKCiAgICB2aXJ0dWFsIGludCBzaG93bWFueWMo
KTsKICAgIHZpcnR1YWwgdm9pZCBpbWJ1ZSh2b2lkICopOwoKfTsKCgoKCmNsYXNzIGZpbGVidWYg
OiBwdWJsaWMgc3RyZWFtYnVmIHsKICBwcm90ZWN0ZWQ6CiAgICB2b2lkIGluaXQoKTsKICBwdWJs
aWM6CiAgICBzdGF0aWMgY29uc3QgaW50IG9wZW5wcm90OwogICAgZmlsZWJ1ZigpOwogICAgZmls
ZWJ1ZihpbnQgZmQpOwogICAgZmlsZWJ1ZihpbnQgZmQsIGNoYXIqIHAsIGludCBsZW4pOwoKCgog
ICAgfmZpbGVidWYoKTsKICAgIGZpbGVidWYqIGF0dGFjaChpbnQgZmQpOwogICAgZmlsZWJ1Ziog
b3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSk7CiAgICBmaWxlYnVm
KiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpb3M6Om9wZW5tb2RlIG1vZGUsIGludCBwcm90
ID0gMDY2NCk7CiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3coKTsKICAgIHZpcnR1YWwgaW50IG92
ZXJmbG93KGludCBjID0gKC0xKSk7CiAgICBpbnQgaXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIF9m
aWxlbm8gPj0gMDsgfQogICAgaW50IGZkKCkgY29uc3QgeyByZXR1cm4gaXNfb3BlbigpID8gX2Zp
bGVubyA6ICgtMSk7IH0KICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBkb2Fs
bG9jYXRlKCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtf
ZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBz
ZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFy
KiBzLCBzdHJlYW1zaXplIG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFt
c2l6ZSBuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6CgogICAgaW50IGlz
X3JlYWRpbmcoKSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7IH0KICAgIGNoYXIqIGN1cl9w
dHIoKSB7IHJldHVybiBpc19yZWFkaW5nKCkgPyBncHRyKCkgOiBwcHRyKCk7IH0KCiAgICBjaGFy
KiBmaWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0KCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUg
c3lzX3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1w
b3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1zaXpl
IHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBzeXNf
c3RhdCh2b2lkKik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2UoKTsKCgoKCn07CgppbmxpbmUg
dm9pZCBpb3M6OmluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7CiAgICAgICAg
ICAgICAgICBfc3RhdGUgPSBzYiA/IGlvczo6Z29vZGJpdCA6IGlvczo6YmFkYml0OyBfZXhjZXB0
aW9ucz0wOwogICAgICAgICAgICAgICAgX3N0cmJ1Zj1zYjsgX3RpZSA9IHRpZV90bzsgX3dpZHRo
PTA7IF9maWxsPScgJzsKCiAgICAgICAgICAgICAgICBfZmxhZ3M9aW9zOjpza2lwd3N8aW9zOjpk
ZWM7CgoKCiAgICAgICAgICAgICAgICBfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9Cgppbmxp
bmUgaW9zOjppb3Moc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7IGluaXQoc2IsIHRp
ZV90byk7IH0KCmlubGluZSBpb3M6On5pb3MoKSB7CgoKCgoKICAgIG9wZXJhdG9yIGRlbGV0ZVtd
IChfYXJyYXlzKTsKfQp9CiMgMzIgIi91c3IvaW5jbHVkZS9nKystMy9pb3N0cmVhbS5oIiAyIDMK
CmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07CnR5cGVkZWYgaW9z
JiAoKl9fbWFuaXApKGlvcyYpOwp0eXBlZGVmIGlzdHJlYW0mICgqX19pbWFuaXApKGlzdHJlYW0m
KTsKdHlwZWRlZiBvc3RyZWFtJiAoKl9fb21hbmlwKShvc3RyZWFtJik7CgpleHRlcm4gaXN0cmVh
bSYgd3MoaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mIG91dHMp
OwpleHRlcm4gb3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIGVu
ZHMob3N0cmVhbSYgb3V0cyk7CgpjbGFzcyBvc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zCnsK
CiAgICB2b2lkIGRvX29zZngoKTsKICBwdWJsaWM6CiAgICBvc3RyZWFtKCkgeyB9CiAgICBvc3Ry
ZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZWQ9X19udWxsKTsKICAgIGludCBvcGZ4KCkg
ewogICAgICAgIGlmICghZ29vZCgpKSByZXR1cm4gMDsKICAgICAgICBlbHNlIHsgaWYgKF90aWUp
IF90aWUtPmZsdXNoKCk7OyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgpIHs7CiAgICAgICAg
ICAgICAgICAgIGlmIChmbGFncygpICYgKGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKICAgICAg
ICAgICAgICAgICAgICAgIGRvX29zZngoKTsgfQogICAgb3N0cmVhbSYgZmx1c2goKTsKICAgIG9z
dHJlYW0mIHB1dChjaGFyIGMpIHsgX3N0cmJ1Zi0+c3B1dGMoYyk7IHJldHVybiAqdGhpczsgfQoK
CgoKCiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBjaGFyICpzLCBzdHJlYW1zaXplIG4pOwogICAg
b3N0cmVhbSYgd3JpdGUoY29uc3QgdW5zaWduZWQgY2hhciAqcywgc3RyZWFtc2l6ZSBuKQogICAg
ICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgd3JpdGUo
Y29uc3Qgc2lnbmVkIGNoYXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUo
KGNvbnN0IGNoYXIqKXMsIG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHZvaWQgKnMsIHN0
cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30KICAg
IG9zdHJlYW0mIHNlZWtwKHN0cmVhbXBvcyk7CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1vZmYs
IF9zZWVrX2Rpcik7CiAgICBzdHJlYW1wb3MgdGVsbHAoKTsKICAgIG9zdHJlYW0mIGZvcm0oY29u
c3QgY2hhciAqZm9ybWF0IC4uLik7CiAgICBvc3RyZWFtJiB2Zm9ybShjb25zdCBjaGFyICpmb3Jt
YXQsIF9fZ251Y192YV9saXN0IGFyZ3MpOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY2hhciBj
KTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRo
aXMpIDw8IChjaGFyKWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2lnbmVkIGNoYXIgYykg
eyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNv
bnN0IGNoYXIgKnMpOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB1bnNpZ25lZCBjaGFy
ICpzKQogICAgICAgIHsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7IH0KICAgIG9z
dHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMpCiAgICAgICAgeyByZXR1cm4g
KCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25z
dCB2b2lkICpwKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoaW50IG4pOwogICAgb3N0cmVhbSYg
b3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcg
bik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbik7CgogICAgX19leHRl
bnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgbG9uZyBuKTsKICAgIF9fZXh0ZW5zaW9u
X18gb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgbik7CgogICAgb3N0cmVh
bSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGludCluKTt9CiAgICBv
c3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgo
dW5zaWduZWQgaW50KW4pO30KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGJvb2wgYikgeyByZXR1
cm4gb3BlcmF0b3I8PCgoaW50KWIpOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChkb3VibGUg
bik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGZsb2F0IG4pIHsgcmV0dXJuIG9wZXJhdG9yPDwo
KGRvdWJsZSluKTsgfQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBkb3VibGUgbik7CgoK
CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fb21hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYyko
KnRoaXMpOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fbWFuaXAgZnVuYykgeygqZnVuYyko
KnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzdHJlYW1idWYq
KTsKCgoKfTsKCmNsYXNzIGlzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewoKcHJvdGVjdGVk
OgogICAgc2l6ZV90IF9nY291bnQ7CgogICAgaW50IF9za2lwX3dzKCk7CiAgcHVibGljOgogICAg
aXN0cmVhbSgpOiBfZ2NvdW50ICgwKSB7IH0KICAgIGlzdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0
cmVhbSp0aWVkPV9fbnVsbCk7CiAgICBpc3RyZWFtJiBnZXQoY2hhciogcHRyLCBpbnQgbGVuLCBj
aGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciogcHRyLCBp
bnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKICAgICAgICB7IHJldHVybiBnZXQoKGNoYXIqKXB0
ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldChjaGFyJiBjKTsKICAgIGlzdHJlYW0m
IGdldCh1bnNpZ25lZCBjaGFyJiBjKSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3Ry
ZWFtJiBnZXRsaW5lKGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAg
aXN0cmVhbSYgZ2V0bGluZSh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0g
PSAnXG4nKQogICAgICAgIHsgcmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7
IH0KICAgIGlzdHJlYW0mIGdldChzaWduZWQgY2hhciYgYykgeyByZXR1cm4gZ2V0KChjaGFyJilj
KTsgfQogICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVs
aW0gPSAnXG4nKQogICAgICAgIHsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsg
fQogICAgaXN0cmVhbSYgZ2V0bGluZShzaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRl
bGltID0gJ1xuJykKICAgICAgICB7IHJldHVybiBnZXRsaW5lKChjaGFyKilwdHIsIGxlbiwgZGVs
aW0pOyB9CiAgICBpc3RyZWFtJiByZWFkKGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKTsKICAgIGlz
dHJlYW0mIHJlYWQodW5zaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0
dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJlYWQoc2lnbmVkIGNoYXIg
KnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9
CiAgICBpc3RyZWFtJiByZWFkKHZvaWQgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVy
biByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiBnZXQoc3RyZWFtYnVmJiBzYiwg
Y2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0cyhjaGFyICoqcywgY2hhciBkZWxp
bSA9ICdcbicpOwogICAgaW50IGlwZngoaW50IG5lZWQgPSAwKSB7CiAgICAgICAgaWYgKCFnb29k
KCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CiAgICAgICAgZWxzZSB7CjsKICAg
ICAgICAgIGlmIChfdGllICYmIChuZWVkID09IDAgfHwgcmRidWYoKS0+aW5fYXZhaWwoKSA8IG5l
ZWQpKSBfdGllLT5mbHVzaCgpOwogICAgICAgICAgaWYgKCFuZWVkICYmIChmbGFncygpICYgaW9z
Ojpza2lwd3MpKSByZXR1cm4gX3NraXBfd3MoKTsKICAgICAgICAgIGVsc2UgcmV0dXJuIDE7CiAg
ICAgICAgfQogICAgfQogICAgaW50IGlwZngwKCkgewogICAgICAgIGlmICghZ29vZCgpKSB7IHNl
dChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQogICAgICAgIGVsc2Ugewo7CiAgICAgICAgICBp
ZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsKICAgICAgICAgIGlmIChmbGFncygpICYgaW9zOjpza2lw
d3MpIHJldHVybiBfc2tpcF93cygpOwogICAgICAgICAgZWxzZSByZXR1cm4gMTsKICAgICAgICB9
CiAgICB9CiAgICBpbnQgaXBmeDEoKSB7CiAgICAgICAgaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6
ZmFpbGJpdCk7IHJldHVybiAwOyB9CiAgICAgICAgZWxzZSB7CjsKICAgICAgICAgIGlmIChfdGll
ICYmIHJkYnVmKCktPmluX2F2YWlsKCkgPT0gMCkgX3RpZS0+Zmx1c2goKTsKICAgICAgICAgIHJl
dHVybiAxOwogICAgICAgIH0KICAgIH0KICAgIHZvaWQgaXNmeCgpIHs7IH0KICAgIGludCBnZXQo
KSB7IGlmICghaXBmeDEoKSkgcmV0dXJuICgtMSk7CiAgICAgICAgICAgICAgICBlbHNlIHsgaW50
IGNoID0gX3N0cmJ1Zi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09
ICgtMSkpIHNldChpb3M6OmVvZmJpdCk7CiAgICAgICAgICAgICAgICAgICAgICAgaXNmeCgpOwog
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaDsKICAgICAgICAgICAgICAgICAgICAgfSB9
CiAgICBpbnQgcGVlaygpOwogICAgc2l6ZV90IGdjb3VudCgpIHsgcmV0dXJuIF9nY291bnQ7IH0K
ICAgIGlzdHJlYW0mIGlnbm9yZShpbnQgbj0xLCBpbnQgZGVsaW0gPSAoLTEpKTsKICAgIGludCBz
eW5jICgpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtcG9zKTsKICAgIGlzdHJlYW0mIHNlZWtn
KHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxsZygpOwogICAgaXN0cmVh
bSYgcHV0YmFjayhjaGFyIGNoKSB7CiAgICAgICAgaWYgKGdvb2QoKSAmJiBfc3RyYnVmLT5zcHV0
YmFja2MoY2gpID09ICgtMSkpIGNsZWFyKGlvczo6YmFkYml0KTsKICAgICAgICByZXR1cm4gKnRo
aXM7fQogICAgaXN0cmVhbSYgdW5nZXQoKSB7CiAgICAgICAgaWYgKGdvb2QoKSAmJiBfc3RyYnVm
LT5zdW5nZXRjKCkgPT0gKC0xKSkgY2xlYXIoaW9zOjpiYWRiaXQpOwogICAgICAgIHJldHVybiAq
dGhpczt9CiAgICBpc3RyZWFtJiBzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgaXN0
cmVhbSYgdnNjYW4oY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcmdzKTsKCgoK
CgoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciopOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+
Pih1bnNpZ25lZCBjaGFyKiBwKSB7IHJldHVybiBvcGVyYXRvcj4+KChjaGFyKilwKTsgfQogICAg
aXN0cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hhcipwKSB7IHJldHVybiBvcGVyYXRvcj4+KChj
aGFyKilwKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyJiBjKTsKICAgIGlzdHJlYW0m
IG9wZXJhdG9yPj4odW5zaWduZWQgY2hhciYgYykge3JldHVybiBvcGVyYXRvcj4+KChjaGFyJilj
KTt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJh
dG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oaW50Jik7CiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KGxvbmcmKTsKCiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9wZXJh
dG9yPj4obG9uZyBsb25nJik7CiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9yPj4o
dW5zaWduZWQgbG9uZyBsb25nJik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaG9ydCYpOwog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJh
dG9yPj4odW5zaWduZWQgbG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBz
aG9ydCYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oYm9vbCYpOwoKICAgIGlzdHJlYW0mIG9w
ZXJhdG9yPj4oZmxvYXQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oZG91YmxlJik7CiAgICBp
c3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+
KCBfX21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAgIGlzdHJl
YW0mIG9wZXJhdG9yPj4oX19pbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7IH0K
ICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc3RyZWFtYnVmKik7Cn07CgpjbGFzcyBpb3N0cmVhbSA6
IHB1YmxpYyBpc3RyZWFtLCBwdWJsaWMgb3N0cmVhbQp7CiAgcHVibGljOgogICAgaW9zdHJlYW0o
KSB7IH0KICAgIGlvc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD1fX251bGwpOwp9
OwoKY2xhc3MgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBpc3RyZWFtIHsKcHVibGlj
OgogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShpc3RyZWFtJik7CiAgX0lPX2lz
dHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIHJocykK
ICAgIHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8aXN0cmVhbSY+IChyaHMpKTsgfQp9
OwoKY2xhc3MgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBvc3RyZWFtIHsKcHVibGlj
OgogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShvc3RyZWFtJik7CiAgX0lPX29z
dHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIHJocykK
ICAgIHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8b3N0cmVhbSY+IChyaHMpKTsgfQp9
OwoKZXh0ZXJuIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gY2luOwoKZXh0ZXJuIF9JT19vc3RyZWFt
X3dpdGhhc3NpZ24gY291dCwgY2VycjsKCmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNs
b2cKCgoKOwoKZXh0ZXJuIGlzdHJlYW0mIGxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIGlzdHJl
YW0mIHVubG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgbG9jayhvc3RyZWFtJiBv
dXRzKTsKZXh0ZXJuIG9zdHJlYW0mIHVubG9jayhvc3RyZWFtJiBvdXRzKTsKCnN0cnVjdCBJb3N0
cmVhbV9pbml0IHsgfSA7CgppbmxpbmUgaW9zJiBkZWMoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmRl
YywgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBo
ZXgoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmhleCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3Qp
OyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBvY3QoaW9zJiBpKQp7IGkuc2V0Zihpb3M6Om9jdCwg
aW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQp9CgojIDQ2ICIvdXNyL2lu
Y2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwojIDU0ICIvdXNyL2luY2x1ZGUvZysrLTMvc3Rs
X2FsbG9jLmgiIDMKCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCgpleHRlcm4gIkMi
IHsKCiMgOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAg
IGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsK
ICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CiMgMTMzICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJf
bWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2NvbnN0IGNoYXIg
Kl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50
IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJu
IGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gZG91YmxlIHN0cnRvZCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCiMgMTYzICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRv
dWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAg
ICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3Eg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoK
X19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0
aHJvdyAoKTsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xs
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7
CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAg
ICAgdGhyb3cgKCk7CiMgMjUwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRvdWJs
ZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJu
YWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAg
IHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50
IF9fc3RydG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dy
b3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9pbnRl
cm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGlu
dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp
bnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5z
aWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKQogICAg
IHRocm93ICgpOwojIDM4NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICps
NjRhIChsb25nIGludCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2Nv
bnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCiMg
MjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCmV4dGVybiAiQyIgewoKCgoKdHlwZWRl
ZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191
X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVh
ZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90
OwoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CiMg
NTggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoK
Cgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoK
CnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoK
CgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwojIDk2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDMKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5
cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0
eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTI3
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyA3MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MSAzCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwoKIyA4MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
Mwp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsKCiMgOTMgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDMKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKCiMgMTI3ICIvdXNyL2luY2x1ZGUvc3lz
L3R5cGVzLmgiIDIgMwojIDE0MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgoKCnR5cGVk
ZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVz
aG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxODQgIi91c3IvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf
X1FJX18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf
X0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf
X1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf
X0RJX18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAo
KF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9p
bnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2ln
bmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0
eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18p
KSk7CgoKCgojIDIxMCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMzIgIi91c3IvaW5j
bHVkZS9zeXMvc2VsZWN0LmgiIDEgMwoKCgojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQu
aCIgMSAzCnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7
CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25l
ZCBsb25nIGludCkpKV07CiAgfSBfX3NpZ3NldF90OwoKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9z
ZWxlY3QuaCIgMiAzCgoKCgojIDEwNSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCnN0cnVjdCB0
aW1lc3BlYwogIHsKICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAg
fTsKCiMgMzkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoK
CgoKc3RydWN0IHRpbWV2YWw7Cgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoKCnR5cGVkZWYg
X19mZF9zZXQgZmRfc2V0OwoKCiMgNzQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0
ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIF9fZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZk
cywKICAgICAgICAgICAgICAgICAgIF9fZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAg
ICAgICAgICAgICAgICAgICBfX2ZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cg
KCk7CgojIDkyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCn0KCiMgMjEwICIvdXNyL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgojIDIyNCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o
IiAzCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3Qg
ZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTYgIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp9CgojIDM5MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAyIDMKCgoKCgoKZXh0ZXJuIGludDMyX3QgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRl
cm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVm
LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoK
CmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoK
CgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAq
cnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5k
X2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVy
biBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAg
ICAgICAgICAgICAgICAgICAgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7
CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRv
bV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25l
ZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBz
ZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVu
c2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWdu
ZWQgaW50ICpfX3NlZWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2
b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg
X194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRo
cm93ICgpOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1
YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAo
KTsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNd
KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRo
cm93ICgpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0
IGludCBfX3NlZWQxNnZbM10pIHRocm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgdGhyb3cgKCk7CgoKc3RydWN0IGRyYW5kNDhfZGF0YQog
IHsKICAgIHVuc2lnbmVkIHNob3J0IGludCB4WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IGFb
M107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBvbGRf
eFszXTsKICAgIGludCBpbml0OwogIH07CgoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3Qg
ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg
ZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4
X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwK
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i
dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3Vs
dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19y
ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25n
IGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4
X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAg
ICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19z
ZWVkMTZ2WzNdLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1
ZmZlcikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50
IF9fcGFyYW1bN10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X2J1ZmZlcikgdGhyb3cgKCk7CiMgNTI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu
IHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
bWFsbG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3Qg
X19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoK
ZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAq
X19wdHIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93
ICgpOwoKCgoKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKCmV4dGVybiAiQyIgewoK
CgoKCmV4dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCn0K
CiMgNTQ2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxv
YyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsK
IyA1NjAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0
ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19v
bl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQg
Kl9fYXJnKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMp
IChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19ub3JldHVybl9fKSk7CgojIDU4OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4
dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9f
dmFsdWUsIGludCBfX3JlcGxhY2UpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgdW5zZXRl
bnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVh
cmVudiAodm9pZCkgdGhyb3cgKCk7CiMgNjI0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0
ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjQwICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5k
KSB0aHJvdyAoKTsKCgojIDY2MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFy
ICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0
eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lk
ICopOwoKCgoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBf
X2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1i
LCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQg
cXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAg
ICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMg
KGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxv
bmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwojIDcwMCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkaXZfdCBkaXYg
KGludCBfX251bWVyLCBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBp
bnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMg
NzE4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAg
ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh
ciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9f
ZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBj
aGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0
IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAq
cWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAg
ICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhy
b3cgKCk7CmV4dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJs
ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAg
ICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1
ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQg
ZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19k
ZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9f
cmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgp
OwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
CiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0
cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwg
c2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0
IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hh
ciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGludCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNp
emVfdCBfX24pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0
cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50
IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CiMgODQwICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUgX19sb2Fk
YXZnW10sIGludCBfX25lbGVtKSB0aHJvdyAoKTsKCgoKCgp9CgojIDU1ICIvdXNyL2luY2x1ZGUv
ZysrLTMvc3RsX2FsbG9jLmgiIDIgMwoKCiMgNTggIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAz
CmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAq
X19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9f
YXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4g
dm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmls
ZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7CgoKfQoKIyA1NyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKIyA3MiAi
L3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCiMgMjEgIi91c3IvaW5jbHVkZS9wdGhy
ZWFkLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMSAzCgoKCiMgNDcgIi91c3Iv
aW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwpzdHJ1Y3Qgc2NoZWRfcGFyYW0KICB7CiAgICBpbnQg
c2NoZWRfcHJpb3JpdHk7CiAgfTsKCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW50IGNsb25lIChp
bnQgKCpfX2ZuKSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAgICAg
ICAgICAgICBpbnQgX19mbGFncywgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCn0KCiMgMzMgIi91
c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2NoZWRf
c2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Bh
cmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3Qg
X19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBzY2hlZF9zZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Bh
cmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRfdCBf
X3BpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3Jp
dGhtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRf
dCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwoKfQoKIyAyMSAiL3Vzci9p
bmNsdWRlL3B0aHJlYWQuaCIgMiAzCgojIDMwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKZXh0
ZXJuICJDIiB7CgoKCgoKCgoKCgoKCiMgNjAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRl
ZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCiMgMTE3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVj
dCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQgdG1fbWluOwogIGludCB0bV9ob3VyOwogIGludCB0
bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50IHRtX3llYXI7CiAgaW50IHRtX3dkYXk7CiAgaW50
IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0OwoKCiAgbG9uZyBpbnQgdG1fZ210b2ZmOwogIF9fY29u
c3QgY2hhciAqdG1fem9uZTsKCgoKCn07CgoKCgpzdHJ1Y3QgaXRpbWVyc3BlYwogIHsKICAgIHN0
cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsK
ICB9OwoKCnN0cnVjdCBzaWdldmVudDsKCiMgMTYyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4
dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUg
KHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGlt
ZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0
cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCiMgMTkzICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGlt
ZXIpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUgKF9fY29uc3QgdGlt
ZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZV9yIChf
X2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgpleHRlcm4gc3Ry
dWN0IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3Rw
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2NvbnN0IHN0cnVjdCB0bSAq
X190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190
aW1lcikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lX3IgKF9fY29uc3Qgc3Ry
dWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9f
cmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZV9yIChfX2NvbnN0
IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAq
X19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX190em5hbWVbMl07
CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7CgoKCgpl
eHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0enNldCAodm9pZCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0aW1lem9uZTsKCgoK
CgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSB0aHJvdyAoKTsKIyAy
NzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gKHN0cnVjdCB0
bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVjdCB0bSAq
X190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IG5hbm9zbGVlcCAo
X19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCiAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMg
Kl9fcmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUgKGNsb2NraWRfdCBf
X2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
Y2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qgc3RydWN0IHRpbWVz
cGVjICpfX3RwKQogICAgIHRocm93ICgpOwoKIyAzMDggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK
ZXh0ZXJuIGludCB0aW1lcl9jcmVhdGUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9fZXZwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZXJfdCAqX19yZXN0cmljdCBfX3RpbWVyaWQpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgdGltZXJfZGVsZXRlICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgaW50IF9fZmxh
Z3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAq
X19yZXN0cmljdCBfX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpdGlt
ZXJzcGVjICpfX3Jlc3RyaWN0IF9fb3ZhbHVlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVy
X2dldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX192YWx1ZSkK
ICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2dldG92ZXJydW4gKHRpbWVyX3QgX190
aW1lcmlkKSB0aHJvdyAoKTsKIyAzNjEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKfQoKIyAyMiAi
L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKCiMgMzEgIi91c3IvaW5jbHVkZS9zaWduYWwu
aCIgMSAzCmV4dGVybiAiQyIgewoKCiMgNDkgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp0eXBl
ZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CiMgMzczICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMK
fQoKIyAyNSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKCmV4dGVybiAiQyIgewoKCgoj
IDU4ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmVudW0KewogIFBUSFJFQURfQ1JFQVRFX0pP
SU5BQkxFLAoKICBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURf
SU5IRVJJVF9TQ0hFRCwKCiAgUFRIUkVBRF9FWFBMSUNJVF9TQ0hFRAoKfTsKCmVudW0KewogIFBU
SFJFQURfU0NPUEVfU1lTVEVNLAoKICBQVEhSRUFEX1NDT1BFX1BST0NFU1MKCn07CgplbnVtCnsK
ICBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAog
IFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05Q
CiMgOTkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKfTsKCmVudW0KewogIFBUSFJFQURfUFJP
Q0VTU19QUklWQVRFLAoKICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoKIyAxMzAgIi91c3Iv
aW5jbHVkZS9wdGhyZWFkLmgiIDMKc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyCnsKICB2
b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKTsKICB2b2lkICpfX2FyZzsKICBpbnQgX19jYW5jZWx0
eXBlOwogIHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19wcmV2Owp9OwoKCgplbnVt
CnsKICBQVEhSRUFEX0NBTkNFTF9FTkFCTEUsCgogIFBUSFJFQURfQ0FOQ0VMX0RJU0FCTEUKCn07
CmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0RFRkVSUkVELAoKICBQVEhSRUFEX0NBTkNFTF9BU1lO
Q0hST05PVVMKCn07CiMgMTYyICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQg
cHRocmVhZF9jcmVhdGUgKHB0aHJlYWRfdCAqX19yZXN0cmljdCBfX3RocmVhZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKigqX19zdGFydF9yb3V0aW5lKSAo
dm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBfX2Fy
ZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYgKHZvaWQpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9lcXVhbCAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRo
cmVhZF90IF9fdGhyZWFkMikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2
b2lkICpfX3JldHZhbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfam9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipf
X3RocmVhZF9yZXR1cm4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2gg
KHB0aHJlYWRfdCBfX3RoKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X2luaXQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlIChwdGhyZWFkX2F0dHJfdCAqX19h
dHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZGV0YWNo
c3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRl
IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgKl9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0
IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBz
dHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
Z2V0c2NoZWRwYXJhbSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3Bh
cmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9s
aWN5IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVh
ZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5KQogICAgIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAocHRocmVhZF9hdHRyX3QgKl9f
YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19pbmhl
cml0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQg
KF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX2luaGVyaXQpCiAg
ICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJlYWRf
YXR0cl90ICpfX2F0dHIsIGludCBfX3Njb3BlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9hdHRyX2dldHNjb3BlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0
IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj
dCBfX3Njb3BlKSB0aHJvdyAoKTsKCiMgMjU5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkciAocHRocmVhZF9hdHRyX3QgKl9fYXR0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3N0YWNrYWRk
cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyIChfX2Nv
bnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19hdHRyLCB2b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkcikKICAgICB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVh
ZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dl
dHN0YWNrc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9f
c3RhY2tzaXplKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzY2hl
ZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLCBpbnQgX19wb2xpY3ksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19w
YXJhbSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSAo
cHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCAqX19yZXN0cmljdCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93
ICgpOwoKIyAzMTIgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFk
X211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX3Jl
c3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX211dGV4X2F0dHIpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3Qg
Kl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90cnlsb2NrIChw
dGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9t
dXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKIyAzMzMgIi91
c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3VubG9jayAo
cHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAocHRocmVhZF9tdXRleGF0
dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dl
dHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXRwc2hhcmVkIChwdGhyZWFk
X211dGV4YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgojIDM3MSAiL3Vzci9pbmNsdWRlL3B0aHJl
YWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19y
ZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRo
cmVhZF9jb25kYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uZF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0cm95
IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf
Y29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jl
c3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRl
eF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmlj
dCBfX211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3Ry
dWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9p
bml0IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBw
dGhyZWFkX2NvbmRhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJv
dyAoKTsKCgojIDUzNyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJl
YWRfa2V5X2NyZWF0ZSAocHRocmVhZF9rZXlfdCAqX19rZXksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9rZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19r
ZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3BvaW50
ZXIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljIChwdGhyZWFk
X2tleV90IF9fa2V5KSB0aHJvdyAoKTsKIyA1NTcgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMK
ZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChpbnQgX19z
dGF0ZSwgaW50ICpfX29sZHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3Nl
dGNhbmNlbHR5cGUgKGludCBfX3R5cGUsIGludCAqX19vbGR0eXBlKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFkX3QgX190aHJlYWQpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsICh2b2lkKSB0aHJvdyAoKTsKIyA1ODcgIi91
c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKCgoKCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBf
cHVzaCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2FyZykgdGhyb3cgKCk7CgoK
CgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAoc3RydWN0IF9wdGhyZWFkX2Ns
ZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwoKCgoKIyA2MzcgIi91c3IvaW5jbHVkZS9wdGhyZWFk
LmgiIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDEgMwpleHRlcm4gaW50
IHB0aHJlYWRfc2lnbWFzayAoaW50IF9faG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fbmV3bWFzaywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19vbGRtYXNrKXRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9raWxsIChwdGhyZWFkX3QgX190aHJlYWQsIGludCBfX3NpZ25v
KSB0aHJvdyAoKTsKCiMgNjM3ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyA2NTIgIi91
c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAo
Kl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19w
YXJlbnQpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQp
ICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhy
ZWFkc19ucCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIF9fcHRocmVhZF9pbml0aWFs
aXplICh2b2lkKSB0aHJvdyAoKTsKCn0KCiMgNzIgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxs
b2MuaCIgMiAzCiMgMTI0ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKIyAxNDEg
Ii91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8aW50IF9faW5zdD4K
Y2xhc3MgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGUgewoKcHJpdmF0ZToKCiAgc3RhdGljIHZvaWQq
IF9TX29vbV9tYWxsb2Moc2l6ZV90KTsKICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9p
ZCosIHNpemVfdCk7CgoKICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxl
cikoKTsKCgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsK
ICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkg
X19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoK
ICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICkKICB7CiAgICBmcmVl
KF9fcCk7CiAgfQoKICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAs
IHNpemVfdCBfX25ld19zeikKICB7CiAgICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBf
X25ld19zeik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxv
YyhfX3AsIF9fbmV3X3N6KTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lk
ICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgpCiAgewogICAgdm9pZCAo
KiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgX19tYWxsb2NfYWxs
b2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICByZXR1cm4oX19vbGQpOwogIH0KCn07CgoKCgp0ZW1w
bGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7CgoKdGVtcGxhdGUgPGludCBfX2lu
c3Q+CnZvaWQqCl9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Mo
c2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9p
ZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIg
PSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxv
Y19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4aXQoMSk7IH0K
ICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgX19yZXN1bHQgPSBtYWxs
b2MoX19uKTsKICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7CiAgICB9Cn0K
CnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu
c3Q+OjpfU19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCog
X19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzsp
IHsKICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRs
ZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBjZXJyIDw8ICJvdXQg
b2YgbWVtb3J5IiA8PCBlbmRsOyBleGl0KDEpOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5k
bGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgaWYg
KF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0eXBlZGVmIF9fbWFsbG9jX2Fs
bG9jX3RlbXBsYXRlPDA+IG1hbGxvY19hbGxvYzsKCnRlbXBsYXRlPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgpjbGFzcyBzaW1wbGVfYWxsb2MgewoKcHVibGljOgogICAgc3RhdGljIF9UcCogYWxs
b2NhdGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9B
bGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIF9UcCogYWxs
b2NhdGUodm9pZCkKICAgICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9m
IChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9f
bikKICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNp
emVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAg
IHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQp9OwoKCgoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBkZWJ1Z19hbGxvYyB7Cgpwcml2YXRlOgoKICBlbnVt
IHtfU19leHRyYSA9IDh9OwoKCgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXpl
X3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUo
X19uICsgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uOwogICAgcmV0dXJu
IF9fcmVzdWx0ICsgX1NfZXh0cmE7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQq
IF9fcCwgc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSBf
U19leHRyYTsKICAgICgodm9pZCkgKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/IDAgOiAo
X19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iLCAiL3Vzci9pbmNsdWRl
L2crKy0zL3N0bF9hbGxvYy5oIiwgMjYzLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAg
IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgX1NfZXh0cmEpOwogIH0KCiAgc3Rh
dGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBf
X25ld19zeikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSBfU19leHRyYTsK
ICAgICgodm9pZCkgKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3opID8gMCA6IChfX2Fz
c2VydF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiwgIi91c3IvaW5jbHVk
ZS9nKystMy9zdGxfYWxsb2MuaCIsIDI3MCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAg
ICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKikKICAgICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVh
bF9wLCBfX29sZF9zeiArIF9TX2V4dHJhLCBfX25ld19zeiArIF9TX2V4dHJhKTsKICAgICooc2l6
ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6OwogICAgcmV0dXJuIF9fcmVzdWx0ICsgX1NfZXh0cmE7
CiAgfQoKfTsKCgojIDMxOSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCnRlbXBs
YXRlIDxib29sIHRocmVhZHMsIGludCBpbnN0PgpjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGUgewoKcHJpdmF0ZToKCgoKICAgIGVudW0ge19BTElHTiA9IDh9OwogICAgZW51bSB7X01BWF9C
WVRFUyA9IDEyOH07CiAgICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9NQVhfQllURVMvX0FMSUdOfTsK
CiAgc3RhdGljIHNpemVfdAogIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQogICAgeyByZXR1
cm4gKCgoX19ieXRlcykgKyBfQUxJR04tMSkgJiB+KF9BTElHTiAtIDEpKTsgfQoKcHJpdmF0ZToK
ICB1bmlvbiBfT2JqIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsKICAg
ICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOwogIH07CnByaXZhdGU6CgoKCgogICAgc3RhdGlj
IF9PYmoqIHZvbGF0aWxlIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgogIHN0YXRpYyBzaXpl
X3QgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpIHsKICAgICAgICByZXR1cm4gKCgo
X19ieXRlcykgKyBfQUxJR04tMSkvX0FMSUdOIC0gMSk7CiAgfQoKCiAgc3RhdGljIHZvaWQqIF9T
X3JlZmlsbChzaXplX3QgX19uKTsKCgogIHN0YXRpYyBjaGFyKiBfU19jaHVua19hbGxvYyhzaXpl
X3QgX19zaXplLCBpbnQmIF9fbm9ianMpOwoKCiAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7
CiAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVlOwogIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXpl
OwoKCgoKCgoKCiAgICBzdGF0aWMgcHRocmVhZF9tdXRleF90IF9TX25vZGVfYWxsb2NhdG9yX2xv
Y2s7CiMgMzkxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKICAgIGNsYXNzIF9M
b2NrIHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIF9Mb2NrKCkgeyBpZiAodGhyZWFkcykg
cHRocmVhZF9tdXRleF9sb2NrKCZfU19ub2RlX2FsbG9jYXRvcl9sb2NrKTsgfQogICAgICAgICAg
ICB+X0xvY2soKSB7IGlmICh0aHJlYWRzKSBwdGhyZWFkX211dGV4X3VubG9jaygmX1Nfbm9kZV9h
bGxvY2F0b3JfbG9jayk7IH0KICAgIH07CiAgICBmcmllbmQgY2xhc3MgX0xvY2s7CgpwdWJsaWM6
CgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICBfT2JqKiB2b2xh
dGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICBfT2JqKiBfX3Jlc3VsdDsKCiAgICBpZiAoX19uID4g
KHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIHJldHVybihtYWxsb2NfYWxsb2M6OmFsbG9j
YXRlKF9fbikpOwogICAgfQogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19m
cmVlbGlzdF9pbmRleChfX24pOwoKCgoKCiAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwoK
ICAgIF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgaWYgKF9fcmVzdWx0ID09IDApIHsK
ICAgICAgICB2b2lkKiBfX3IgPSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAgICAg
cmV0dXJuIF9fcjsKICAgIH0KICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2Zy
ZWVfbGlzdF9saW5rOwogICAgcmV0dXJuIChfX3Jlc3VsdCk7CiAgfTsKCgogIHN0YXRpYyB2b2lk
IGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogIHsKICAgIF9PYmoqIF9fcSA9IChf
T2JqKilfX3A7CiAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CgogICAgaWYgKF9f
biA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgICBtYWxsb2NfYWxsb2M6OmRlYWxsb2Nh
dGUoX19wLCBfX24pOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIF9fbXlfZnJlZV9saXN0ID0g
X1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgoKICAgICAgICBfTG9jayBf
X2xvY2tfaW5zdGFuY2U7CgogICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJl
ZV9saXN0OwogICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOwoKICB9CgogIHN0YXRpYyB2b2lkKiBy
ZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwoK
fSA7Cgp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPiBhbGxvYzsKdHlw
ZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+IHNpbmdsZV9jbGllbnRfYWxs
b2M7CgoKCgoKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqCl9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9j
KHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCYgX19ub2JqcykKewogICAgY2hhciogX19yZXN1bHQ7CiAg
ICBzaXplX3QgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICBzaXplX3QgX19i
eXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBfU19zdGFydF9mcmVlOwoKICAgIGlmIChfX2J5dGVz
X2xlZnQgPj0gX190b3RhbF9ieXRlcykgewogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJl
ZTsKICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJu
KF9fcmVzdWx0KTsKICAgIH0gZWxzZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkgewogICAg
ICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsKICAgICAgICBfX3RvdGFs
X2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2Zy
ZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVy
bihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgewogICAgICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9
CiAgICAgICAgICAyICogX190b3RhbF9ieXRlcyArIF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+
PiA0KTsKCiAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApIHsKICAgICAgICAgICAgX09iaiog
dm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0KICAgICAgICAgICAgICAgICAgICAgICAgX1NfZnJl
ZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICgo
X09iaiopX1Nfc3RhcnRfZnJlZSkgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xp
c3Q7CiAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOwog
ICAgICAgIH0KICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKW1hbGxvYyhfX2J5dGVzX3Rv
X2dldCk7CiAgICAgICAgaWYgKDAgPT0gX1Nfc3RhcnRfZnJlZSkgewogICAgICAgICAgICBzaXpl
X3QgX19pOwogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAg
ICAgICAgIF9PYmoqIF9fcDsKCgoKICAgICAgICAgICAgZm9yIChfX2kgPSBfX3NpemU7IF9faSA8
PSBfTUFYX0JZVEVTOyBfX2kgKz0gX0FMSUdOKSB7CiAgICAgICAgICAgICAgICBfX215X2ZyZWVf
bGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAg
ICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3Ap
IHsKICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9s
aXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7
CiAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwog
ICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMp
KTsKCgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIF9TX2VuZF9m
cmVlID0gMDsKICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKiltYWxsb2NfYWxsb2M6
OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKCgoKICAgICAgICB9CiAgICAgICAgX1NfaGVhcF9z
aXplICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJl
ZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUs
IF9fbm9ianMpKTsKICAgIH0KfQoKCgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9f
aW5zdD4Kdm9pZCoKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6
X1NfcmVmaWxsKHNpemVfdCBfX24pCnsKICAgIGludCBfX25vYmpzID0gMjA7CiAgICBjaGFyKiBf
X2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19uLCBfX25vYmpzKTsKICAgIF9PYmoqIHZvbGF0aWxl
KiBfX215X2ZyZWVfbGlzdDsKICAgIF9PYmoqIF9fcmVzdWx0OwogICAgX09iaiogX19jdXJyZW50
X29iajsKICAgIF9PYmoqIF9fbmV4dF9vYmo7CiAgICBpbnQgX19pOwoKICAgIGlmICgxID09IF9f
bm9ianMpIHJldHVybihfX2NodW5rKTsKICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0
ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2No
dW5rOwogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX25leHRfb2JqID0gKF9PYmoqKShfX2NodW5r
ICsgX19uKTsKICAgICAgZm9yIChfX2kgPSAxOyA7IF9faSsrKSB7CiAgICAgICAgX19jdXJyZW50
X29iaiA9IF9fbmV4dF9vYmo7CiAgICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9f
bmV4dF9vYmogKyBfX24pOwogICAgICAgIGlmIChfX25vYmpzIC0gMSA9PSBfX2kpIHsKICAgICAg
ICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAg
IGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01f
ZnJlZV9saXN0X2xpbmsgPSBfX25leHRfb2JqOwogICAgICAgIH0KICAgICAgfQogICAgcmV0dXJu
KF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CnZvaWQqCl9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkKiBf
X3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19vbGRfc3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19uZXdfc3opCnsKICAgIHZvaWQqIF9fcmVzdWx0OwogICAgc2l6
ZV90IF9fY29weV9zejsKCiAgICBpZiAoX19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTICYm
IF9fbmV3X3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIHJldHVybihyZWFsbG9j
KF9fcCwgX19uZXdfc3opKTsKICAgIH0KICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0g
X1Nfcm91bmRfdXAoX19uZXdfc3opKSByZXR1cm4oX19wKTsKICAgIF9fcmVzdWx0ID0gYWxsb2Nh
dGUoX19uZXdfc3opOwogICAgX19jb3B5X3N6ID0gX19uZXdfc3ogPiBfX29sZF9zej8gX19vbGRf
c3ogOiBfX25ld19zejsKICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAg
ZGVhbGxvY2F0ZShfX3AsIF9fb2xkX3N6KTsKICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCgogICAg
dGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgcHRocmVhZF9tdXRleF90
CiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2Rl
X2FsbG9jYXRvcl9sb2NrCiAgICAgICAgPSB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9O
UCwgezAsIDB9fTsKIyA2OTEgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwp0ZW1w
bGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUgPSAwOwoKdGVtcGxhdGUg
PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19lbmRfZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBf
X3RocmVhZHMsIGludCBfX2luc3Q+CnNpemVfdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHJlYWRzLCBfX2luc3Q+OjpfU19oZWFwX3NpemUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJl
YWRzLCBpbnQgX19pbnN0PgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu
c3Q+OjpfT2JqKiB2b2xhdGlsZQpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf
X2luc3Q+IDo6X1NfZnJlZV9saXN0WwogICAgX05GUkVFTElTVFMKXSA9IHswLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCB9OwoKCgoKIyA3MjggIi91c3IvaW5j
bHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBhbGxv
Y2F0b3IgewogIHR5cGVkZWYgYWxsb2MgX0FsbG9jOwpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qg
c2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBl
ZGVmIF9UcCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7
CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVj
dCByZWJpbmQgewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKCiAgYWxs
b2NhdG9yKCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikge30KICB0ZW1wbGF0ZSA8
Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHt9CiAgfmFsbG9j
YXRvcigpIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVy
biAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNv
bnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNv
bnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4o
X0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAg
OiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikK
ICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNp
emVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9m
KF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwp
IHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBf
X3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gewogIHR5
cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5
cGU7CiAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3Rf
cG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9U
cDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAg
fTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICBy
ZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4m
KQp7CiAgcmV0dXJuIGZhbHNlOwp9CiMgODAzICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9j
LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX19hbGxvY2F0
b3IgewogIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVf
dHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAq
IHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBf
VHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5
cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmVi
aW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9OwoK
ICBfX2FsbG9jYXRvcigpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9fYSkK
ICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgdGVt
cGxhdGUgPGNsYXNzIF9UcDE+CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwg
X0FsbG9jPiYgX19hKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19h
bGxvYykge30KICB+X19hbGxvY2F0b3IoKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNl
IF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25z
dF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKICBfVHAqIGFsbG9jYXRl
KHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAg
ICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19u
ICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9p
bnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9j
YXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNv
bnN0CiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25z
dHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFs
KTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPiB7CiAg
dHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf
dHlwZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25z
dF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxv
Yz4gb3RoZXI7CiAgfTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBf
X2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5
aW5nX2FsbG9jOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIp
CnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5fX3VuZGVybHlpbmdf
YWxsb2M7Cn0KCgoKCgoKdGVtcGxhdGUgPGludCBpbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1
ZTsKfQoKCnRlbXBsYXRlIDxpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNl
Owp9CgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu
c3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLCBfX2luc3Q+JikKewogIHJldHVybiB0cnVlOwp9CgoKdGVtcGxhdGUgPGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z
dD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gdHJ1ZTsK
fQoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
ZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdf
YWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KIyA5NTcgIi91c3IvaW5jbHVkZS9n
KystMy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9y
PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2Vs
ZXNzID0gZmFsc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjogcmViaW5kPF9UcD46
Om90aGVyCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0
b3I+OjpfU19pbnN0YW5jZWxlc3M7CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+
CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBj
b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8
X1RwLCBhbGxvYz4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0
b3JfdHlwZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50IF9faW5zdD4Kc3RydWN0IF9B
bGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4KewogIHN0
YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVf
YWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7
CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z
dD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBib29sIF9fdGhy
ZWFkcywgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlZmF1bHRfYWxs
b2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9T
X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190
eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBk
ZWJ1Z19hbGxvYzxfQWxsb2M+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVz
cyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+
ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIGRlYnVnX2FsbG9jPF9B
bGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9UcDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAg
ICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlw
ZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4g
X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0
czxfVHAsCiAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLCBf
X2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsK
ICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro
cixfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8
X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBh
bGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFz
cyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgZGVi
dWdfYWxsb2M8X0FsbG9jPiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVz
cyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+
ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIGRlYnVnX2FsbG9jPF9B
bGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCgoKCgojIDIyICIvdXNyL2luY2x1ZGUvZysr
LTMvYWxsb2MuaCIgMiAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIg
MiAzCgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFtOwoKCiMgMzIg
Ii91c3IvaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9nKyst
My9zdGxfcmVsb3BzLmgiIDEgMwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuICEoX194
ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yPihj
b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IF9UcCYgX194
LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9U
cCYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKIyAzMiAiL3Vzci9pbmNsdWRlL2cr
Ky0zL2l0ZXJhdG9yIiAyIDMKCgoKCgoKCiMgMzQgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfaXRl
cmF0b3IuaCIgMSAzCgoKc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IG91dHB1
dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBp
bnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6
IHB1YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRl
cmF0b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwoKCgoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRv
ciB7CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlw
ZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnN0
cnVjdCBvdXRwdXRfaXRlcmF0b3IgewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVy
YXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQg
ZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCBy
ZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVj
dCBmb3J3YXJkX2l0ZXJhdG9yIHsKICB0eXBlZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJh
dG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFu
Y2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1Rw
JiByZWZlcmVuY2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBz
dHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0
ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRl
cjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvciB7CiAgdHlwZWRlZiBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9U
cCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl
ZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9DYXRlZ29yeSwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3Qs
CiAgICAgICAgICBjbGFzcyBfUG9pbnRlciA9IF9UcCosIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAm
PgpzdHJ1Y3QgaXRlcmF0b3IgewogIHR5cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5j
ZV90eXBlOwogIHR5cGVkZWYgX1BvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2Ug
cmVmZXJlbmNlOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpzdHJ1Y3QgaXRlcmF0
b3JfdHJhaXRzIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdv
cnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVl
X3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5j
ZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9p
bnRlciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVm
ZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxf
VHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl
cmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJl
bmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25z
dCBfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNv
bnN0IF9UcCYgcmVmZXJlbmNlOwp9OwojIDEzNCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9pdGVy
YXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cl9faXRlcmF0b3JfY2F0ZWdvcnkoY29u
c3QgX0l0ZXImKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojpp
dGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9DYXRlZ29yeSgpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUqCl9fZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYpCnsKICByZXR1
cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5j
ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdCBfSXRl
ciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
Pjo6dmFsdWVfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQppdGVyYXRvcl9j
YXRlZ29yeShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f
aSk7IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXIm
IF9faSkgeyByZXR1cm4gX19kaXN0YW5jZV90eXBlKF9faSk7IH0KCnRlbXBsYXRlIDxjbGFzcyBf
SXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUq
CnZhbHVlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX192YWx1ZV90eXBlKF9faSk7
IH0KCiMgMjU5ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fZGlz
dGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsK
ICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsgKytfX2ZpcnN0OyArK19fbjsgfQp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGlu
ZSB2b2lkIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsK
ICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX0Rp
c3RhbmNlJiBfX24pCnsKICBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uLCBpdGVyYXRv
cl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlCl9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICB3aGlsZSAoX19m
aXJzdCAhPSBfX2xhc3QpIHsKICAgICsrX19maXJzdDsgKytfX247CiAgfQogIHJldHVybiBfX247
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
Cl9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsK
ICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlm
ZmVyZW5jZV90eXBlCmRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9DYXRlZ29yeTsKICByZXR1cm4gX19kaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0lucHV0
SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAo
X19uLS0pICsrX19pOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0
b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFs
SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgaWYgKF9fbiA+PSAwKQogICAgd2hpbGUgKF9fbi0t
KSArK19faTsKICBlbHNlCiAgICB3aGlsZSAoX19uKyspIC0tX19pOwp9CgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9p
ZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAg
ICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9faSAr
PSBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNl
PgppbmxpbmUgdm9pZCBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24p
IHsKICBfX2FkdmFuY2UoX19pLCBfX24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3Igewpwcm90
ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFp
bmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRv
cl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlm
ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZl
cmVuY2U7CgogIGV4cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkg
OiBjb250YWluZXIoJl9feCkge30KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYK
ICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1
ZSkgewogICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJl
dHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRv
cisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07CgojIDM3OCAiL3Vzci9pbmNs
dWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpp
bmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gYmFja19pbnNlcnRlcihfQ29u
dGFpbmVyJiBfX3gpIHsKICByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4o
X194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9p
dGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0
eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5
cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlw
ZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9D
b250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBmcm9udF9pbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZh
bHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsK
ICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0K
fTsKCiMgNDE3ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUg
PGNsYXNzIF9Db250YWluZXI+CmlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4gZnJvbnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGZyb250X2luc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5l
cj4KY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRh
aW5lcjsKICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwpwdWJsaWM6CiAgdHlw
ZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9y
X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVk
ZWYgdm9pZCByZWZlcmVuY2U7CgogIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5
cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgIDogY29udGFpbmVyKCZfX3gpLCBp
dGVyKF9faSkge30KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNv
bnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGl0ZXIg
PSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICsraXRlcjsKICAgIHJldHVy
biAqdGhpczsKICB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7
IHJldHVybiAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3Ir
KygpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVy
YXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCiMgNDU5ICIvdXNyL2luY2x1ZGUvZysr
LTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9J
dGVyYXRvcj4KaW5saW5lCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29u
dGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWlu
ZXI6Oml0ZXJhdG9yIF9faXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
KF9feCwgX19pdGVyKF9faSkpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCYsCiAgICAgICAgICBjbGFz
cyBfRGlzdGFuY2UgPSBwdHJkaWZmX3Q+CgoKCgpjbGFzcyByZXZlcnNlX2JpZGlyZWN0aW9uYWxf
aXRlcmF0b3IgewogIHR5cGVkZWYgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaWRp
cmVjdGlvbmFsSXRlcmF0b3IsIF9UcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+IF9TZWxmOwpwcm90ZWN0ZWQ6CiAgX0JpZGly
ZWN0aW9uYWxJdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl
OwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9p
bnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNlOwoKICByZXZlcnNlX2JpZGlyZWN0
aW9uYWxfaXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9feCkKICAgIDogY3VycmVudChfX3gpIHt9CiAg
X0JpZGlyZWN0aW9uYWxJdGVyYXRvciBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQog
IF9SZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRv
ciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQoKICBwb2ludGVyIG9w
ZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBfU2VsZiYgb3Bl
cmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYg
b3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLWN1cnJlbnQ7
CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgKytjdXJy
ZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAg
X1NlbGYgX190bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9
Cn07CgojIDU1MCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRl
IDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsCiAgICAgICAgICBjbGFzcyBf
RGlzdGFuY2U+CmlubGluZSBib29sIG9wZXJhdG9yPT0oCiAgICBjb25zdCByZXZlcnNlX2JpZGly
ZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3gsCiAg
ICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVm
LCBfRGlzdGFuY2U+JiBfX3kpCnsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9
CgojIDU2NyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxj
bGFzcyBfSXRlcmF0b3I+CmNsYXNzIHJldmVyc2VfaXRlcmF0b3IKewpwcm90ZWN0ZWQ6CiAgX0l0
ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgaXRlcmF0b3JfY2F0ZWdv
cnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVf
dHlwZQogICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIGRpZmZlcmVuY2VfdHlw
ZTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVy
CiAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
dGVyYXRvcj46OnJlZmVyZW5jZQogICAgICAgICAgcmVmZXJlbmNlOwoKICB0eXBlZGVmIF9JdGVy
YXRvciBpdGVyYXRvcl90eXBlOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
IF9TZWxmOwoKcHVibGljOgogIHJldmVyc2VfaXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0IHJldmVy
c2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3VycmVudChfX3gpIHt9CgogIHJldmVy
c2VfaXRlcmF0b3IoY29uc3QgX1NlbGYmIF9feCkgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7fQoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgOiBjdXJyZW50KF9feC5iYXNlKCkpIHt9CgoKICBp
dGVyYXRvcl90eXBlIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CiAgcmVmZXJlbmNl
IG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICBy
ZXR1cm4gKi0tX190bXA7CiAgfQoKICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biAmKG9wZXJhdG9yKigpKTsgfQoKCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJl
bnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBf
U2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0K
ICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsK
ICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAg
ICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBfU2VsZiBvcGVyYXRvcisoZGlm
ZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQgLSBfX24p
OwogIH0KICBfU2VsZiYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJy
ZW50IC09IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItKGRpZmZl
cmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2VsZihjdXJyZW50ICsgX19uKTsK
ICB9CiAgX1NlbGYmIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9fbikgewogICAgY3VycmVu
dCArPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRp
ZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBfX24pOyB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feC5iYXNl
KCkgPT0gX195LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kp
IHsKICByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3gsCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkg
ewogIHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
dGVyYXRvcj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgpvcGVyYXRvcisodHlw
ZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAog
ICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpIHsKICByZXR1
cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOwp9CgojIDgw
OCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9EaXN0ID0gcHRyZGlmZl90PgpjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09IDw+IChjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0
ZXJhdG9yJik7CnByb3RlY3RlZDoKICBpc3RyZWFtKiBfTV9zdHJlYW07CiAgX1RwIF9NX3ZhbHVl
OwogIGJvb2wgX01fZW5kX21hcmtlcjsKICB2b2lkIF9NX3JlYWQoKSB7CiAgICBfTV9lbmRfbWFy
a2VyID0gKCpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogICAgaWYgKF9NX2VuZF9tYXJrZXIp
ICpfTV9zdHJlYW0gPj4gX01fdmFsdWU7CiAgICBfTV9lbmRfbWFya2VyID0gKCpfTV9zdHJlYW0p
ID8gdHJ1ZSA6IGZhbHNlOwogIH0KcHVibGljOgogIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFn
IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBf
RGlzdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgdHlw
ZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKCiAgaXN0cmVhbV9pdGVyYXRvcigpIDogX01fc3Ry
ZWFtKCZjaW4pLCBfTV9lbmRfbWFya2VyKGZhbHNlKSB7fQogIGlzdHJlYW1faXRlcmF0b3IoaXN0
cmVhbSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSB7IF9NX3JlYWQoKTsgfQogIHJlZmVyZW5jZSBv
cGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQoKICBwb2ludGVyIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBpc3RyZWFtX2l0ZXJhdG9y
PF9UcCwgX0Rpc3Q+JiBvcGVyYXRvcisrKCkgewogICAgX01fcmVhZCgpOwogICAgcmV0dXJuICp0
aGlzOwogIH0KICBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+IG9wZXJhdG9yKysoaW50KSB7
CiAgICBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+IF9fdG1wID0gKnRoaXM7CiAgICBfTV9y
ZWFkKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKIyA4NjQgIi91c3IvaW5jbHVkZS9nKyst
My9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+
CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0
YW5jZT4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9y
PF9UcCwgX0Rpc3RhbmNlPiYgX195KSB7CiAgcmV0dXJuIChfX3guX01fc3RyZWFtID09IF9feS5f
TV9zdHJlYW0gJiYKICAgICAgICAgIF9feC5fTV9lbmRfbWFya2VyID09IF9feS5fTV9lbmRfbWFy
a2VyKSB8fAogICAgICAgICBfX3guX01fZW5kX21hcmtlciA9PSBmYWxzZSAmJiBfX3kuX01fZW5k
X21hcmtlciA9PSBmYWxzZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3Mgb3N0cmVhbV9p
dGVyYXRvciB7CnByb3RlY3RlZDoKICBvc3RyZWFtKiBfTV9zdHJlYW07CiAgY29uc3QgY2hhciog
X01fc3RyaW5nOwpwdWJsaWM6CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9y
X2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZm
ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVy
ZW5jZTsKCiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtJiBfX3MpIDogX01fc3RyZWFtKCZfX3Mp
LCBfTV9zdHJpbmcoMCkge30KICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW0mIF9fcywgY29uc3Qg
Y2hhciogX19jKQogICAgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpIHt9CiAgb3N0
cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgICAq
X01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9N
X3N0cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBv
cGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3Bl
cmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVy
YXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCiMgOTA3ICIvdXNyL2luY2x1ZGUvZysr
LTMvc3RsX2l0ZXJhdG9yLmgiIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2crKy0zL2l0ZXJhdG9yIiAy
IDMKIyA0NSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKIyA1OSAiL3Vz
ci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAzCiMgNyAiL3Vzci9pbmNsdWRlL2crKy0z
L2Nhc3NlcnQiIDEgMwojIDU4ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwpleHRlcm4gIkMi
IHsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9u
LCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJy
b3JfZmFpbCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3Nl
cnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xp
bmUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0KCiMg
NyAiL3Vzci9pbmNsdWRlL2crKy0zL2Nhc3NlcnQiIDIgMwojIDU5ICIvdXNyL2luY2x1ZGUvZysr
LTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzID0gc3RyaW5nX2NoYXJfdHJhaXRzPGNoYXJUPiwKICAgICAgICAgIGNsYXNzIEFsbG9j
YXRvciA9IGFsbG9jID4KY2xhc3MgYmFzaWNfc3RyaW5nCnsKcHJpdmF0ZToKICBzdHJ1Y3QgUmVw
IHsKICAgIHNpemVfdCBsZW4sIHJlcywgcmVmOwogICAgYm9vbCBzZWxmaXNoOwoKICAgIGNoYXJU
KiBkYXRhICgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhclQgKj4odGhpcyArIDEpOyB9
CiAgICBjaGFyVCYgb3BlcmF0b3JbXSAoc2l6ZV90IHMpIHsgcmV0dXJuIGRhdGEgKCkgW3NdOyB9
CiAgICBjaGFyVCogZ3JhYiAoKSB7IGlmIChzZWxmaXNoKSByZXR1cm4gY2xvbmUgKCk7ICsrcmVm
OyByZXR1cm4gZGF0YSAoKTsgfQojIDExNCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmlu
Zy5oIiAzCiAgICB2b2lkIHJlbGVhc2UgKCkgeyBpZiAoLS1yZWYgPT0gMCkgZGVsZXRlIHRoaXM7
IH0KCgogICAgaW5saW5lIHN0YXRpYyB2b2lkICogb3BlcmF0b3IgbmV3IChzaXplX3QsIHNpemVf
dCk7CiAgICBpbmxpbmUgc3RhdGljIHZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICopOwogICAg
aW5saW5lIHN0YXRpYyBSZXAqIGNyZWF0ZSAoc2l6ZV90KTsKICAgIGNoYXJUKiBjbG9uZSAoKTsK
CiAgICBpbmxpbmUgdm9pZCBjb3B5IChzaXplX3QsIGNvbnN0IGNoYXJUICosIHNpemVfdCk7CiAg
ICBpbmxpbmUgdm9pZCBtb3ZlIChzaXplX3QsIGNvbnN0IGNoYXJUICosIHNpemVfdCk7CiAgICBp
bmxpbmUgdm9pZCBzZXQgKHNpemVfdCwgY29uc3QgY2hhclQsIHNpemVfdCk7CgogICAgaW5saW5l
IHN0YXRpYyBib29sIGV4Y2Vzc19zbG9wIChzaXplX3QsIHNpemVfdCk7CiAgICBpbmxpbmUgc3Rh
dGljIHNpemVfdCBmcm9iX3NpemUgKHNpemVfdCk7CgogIHByaXZhdGU6CiAgICBSZXAgJm9wZXJh
dG9yPSAoY29uc3QgUmVwICYpOwogIH07CgpwdWJsaWM6CgogIHR5cGVkZWYgdHJhaXRzIHRyYWl0
c190eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzOjpjaGFyX3R5cGUgdmFsdWVfdHlwZTsK
ICB0eXBlZGVmIEFsbG9jYXRvciBhbGxvY2F0b3JfdHlwZTsKCiAgdHlwZWRlZiBzaXplX3Qgc2l6
ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNo
YXJUJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBjaGFyVCYgY29uc3RfcmVmZXJlbmNlOwog
IHR5cGVkZWYgY2hhclQqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBjaGFyVCogY29uc3RfcG9p
bnRlcjsKICB0eXBlZGVmIHBvaW50ZXIgaXRlcmF0b3I7CiAgdHlwZWRlZiBjb25zdF9wb2ludGVy
IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiBy
ZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJh
dG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBv
cyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpOwoKcHJpdmF0ZToKICBSZXAgKnJlcCAoKSBj
b25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFJlcCAqPihkYXQpIC0gMTsgfQogIHZvaWQg
cmVwdXAgKFJlcCAqcCkgeyByZXAgKCktPnJlbGVhc2UgKCk7IGRhdCA9IHAtPmRhdGEgKCk7IH0K
CnB1YmxpYzoKICBjb25zdCBjaGFyVCogZGF0YSAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgp
LT5kYXRhKCk7IH0KICBzaXplX3R5cGUgbGVuZ3RoICgpIGNvbnN0CiAgICB7IHJldHVybiByZXAg
KCktPmxlbjsgfQogIHNpemVfdHlwZSBzaXplICgpIGNvbnN0CiAgICB7IHJldHVybiByZXAgKCkt
PmxlbjsgfQogIHNpemVfdHlwZSBjYXBhY2l0eSAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgp
LT5yZXM7IH0KICBzaXplX3R5cGUgbWF4X3NpemUgKCkgY29uc3QKICAgIHsgcmV0dXJuIChucG9z
IC0gMSkvc2l6ZW9mIChjaGFyVCk7IH0KICBib29sIGVtcHR5ICgpIGNvbnN0CiAgICB7IHJldHVy
biBzaXplICgpID09IDA7IH0KCgogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjb25zdCBiYXNp
Y19zdHJpbmcmIHN0cikKICAgIHsKICAgICAgaWYgKCZzdHIgIT0gdGhpcykgeyByZXAgKCktPnJl
bGVhc2UgKCk7IGRhdCA9IHN0ci5yZXAgKCktPmdyYWIgKCk7IH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICBleHBsaWNpdCBiYXNpY19zdHJpbmcgKCk6IGRhdCAobmlsUmVwLmdyYWIgKCkp
IHsgfQogIGJhc2ljX3N0cmluZyAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIpOiBkYXQgKHN0ci5y
ZXAgKCktPmdyYWIgKCkpIHsgfQogIGJhc2ljX3N0cmluZyAoY29uc3QgYmFzaWNfc3RyaW5nJiBz
dHIsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuID0gbnBvcykKICAgIDogZGF0IChuaWxSZXAu
Z3JhYiAoKSkgeyBhc3NpZ24gKHN0ciwgcG9zLCBuKTsgfQogIGJhc2ljX3N0cmluZyAoY29uc3Qg
Y2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2ln
biAocywgbik7IH0KICBiYXNpY19zdHJpbmcgKGNvbnN0IGNoYXJUKiBzKQogICAgOiBkYXQgKG5p
bFJlcC5ncmFiICgpKSB7IGFzc2lnbiAocyk7IH0KICBiYXNpY19zdHJpbmcgKHNpemVfdHlwZSBu
LCBjaGFyVCBjKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAobiwgYyk7IH0K
CiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAgIGJhc2ljX3N0cmluZyhJbnB1dEl0
ZXJhdG9yIF9fYmVnaW4sIElucHV0SXRlcmF0b3IgX19lbmQpCgoKCiAgICA6IGRhdCAobmlsUmVw
LmdyYWIgKCkpIHsgYXNzaWduIChfX2JlZ2luLCBfX2VuZCk7IH0KCiAgfmJhc2ljX3N0cmluZyAo
KQogICAgeyByZXAgKCktPnJlbGVhc2UgKCk7IH0KCiAgdm9pZCBzd2FwIChiYXNpY19zdHJpbmcg
JnMpIHsgY2hhclQgKmQgPSBkYXQ7IGRhdCA9IHMuZGF0OyBzLmRhdCA9IGQ7IH0KCiAgYmFzaWNf
c3RyaW5nJiBhcHBlbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0g
MCwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIG4gPSBucG9zKQogICAgeyByZXR1
cm4gcmVwbGFjZSAobGVuZ3RoICgpLCAwLCBzdHIsIHBvcywgbik7IH0KICBiYXNpY19zdHJpbmcm
IGFwcGVuZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFj
ZSAobGVuZ3RoICgpLCAwLCBzLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgYXBwZW5kIChjb25zdCBj
aGFyVCogcykKICAgIHsgcmV0dXJuIGFwcGVuZCAocywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQog
IGJhc2ljX3N0cmluZyYgYXBwZW5kIChzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJu
IHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgbiwgYyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJ
dGVyYXRvcj4KICAgIGJhc2ljX3N0cmluZyYgYXBwZW5kKElucHV0SXRlcmF0b3IgZmlyc3QsIElu
cHV0SXRlcmF0b3IgbGFzdCkKCgoKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGllbmQgKCksIGllbmQg
KCksIGZpcnN0LCBsYXN0KTsgfQoKICB2b2lkIHB1c2hfYmFjayhjaGFyVCBfX2MpCiAgeyBhcHBl
bmQoMSwgX19jKTsgfQoKICBiYXNpY19zdHJpbmcmIGFzc2lnbiAoY29uc3QgYmFzaWNfc3RyaW5n
JiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5
cGUgbiA9IG5wb3MpCiAgICB7IHJldHVybiByZXBsYWNlICgwLCBucG9zLCBzdHIsIHBvcywgbik7
IH0KICBiYXNpY19zdHJpbmcmIGFzc2lnbiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQog
ICAgeyByZXR1cm4gcmVwbGFjZSAoMCwgbnBvcywgcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFz
c2lnbiAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhc3NpZ24gKHMsIHRyYWl0czo6bGVu
Z3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcmIGFzc2lnbiAoc2l6ZV90eXBlIG4sIGNoYXJUIGMp
CiAgICB7IHJldHVybiByZXBsYWNlICgwLCBucG9zLCBuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFz
cyBJbnB1dEl0ZXJhdG9yPgogICAgYmFzaWNfc3RyaW5nJiBhc3NpZ24oSW5wdXRJdGVyYXRvciBm
aXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KQoKCgogICAgeyByZXR1cm4gcmVwbGFjZSAoaWJlZ2lu
ICgpLCBpZW5kICgpLCBmaXJzdCwgbGFzdCk7IH0KCiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcj0g
KGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gYXNzaWduIChzKTsgfQogIGJhc2ljX3N0cmlu
ZyYgb3BlcmF0b3I9IChjaGFyVCBjKQogICAgeyByZXR1cm4gYXNzaWduICgxLCBjKTsgfQoKICBi
YXNpY19zdHJpbmcmIG9wZXJhdG9yKz0gKGNvbnN0IGJhc2ljX3N0cmluZyYgcmhzKQogICAgeyBy
ZXR1cm4gYXBwZW5kIChyaHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChjb25zdCBj
aGFyVCogcykKICAgIHsgcmV0dXJuIGFwcGVuZCAocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJh
dG9yKz0gKGNoYXJUIGMpCiAgICB7IHJldHVybiBhcHBlbmQgKDEsIGMpOyB9CgogIGJhc2ljX3N0
cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBwb3MyID0gMCwgc2l6ZV90eXBlIG4gPSBu
cG9zKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zMSwgMCwgc3RyLCBwb3MyLCBuKTsgfQogIGJh
c2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zLCBjb25zdCBjaGFyVCogcywgc2l6ZV90
eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIDAsIHMsIG4pOyB9CiAgYmFzaWNfc3Ry
aW5nJiBpbnNlcnQgKHNpemVfdHlwZSBwb3MsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4g
aW5zZXJ0IChwb3MsIHMsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcmIGlu
c2VydCAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiBy
ZXBsYWNlIChwb3MsIDAsIG4sIGMpOyB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHAsIGNo
YXJUIGMpCiAgICB7IHNpemVfdHlwZSBfX28gPSBwIC0gaWJlZ2luICgpOwogICAgICBpbnNlcnQg
KHAgLSBpYmVnaW4gKCksIDEsIGMpOyBzZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJlZ2luICgp
ICsgX19vOyB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHAsIHNpemVfdHlwZSBuLCBjaGFy
VCBjKQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGliZWdpbiAoKTsKICAgICAgaW5zZXJ0IChw
IC0gaWJlZ2luICgpLCBuLCBjKTsgc2VsZmlzaCAoKTsKICAgICAgcmV0dXJuIGliZWdpbiAoKSAr
IF9fbzsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBpbnNlcnQo
aXRlcmF0b3IgcCwgSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KQoKCgog
ICAgeyByZXBsYWNlIChwLCBwLCBmaXJzdCwgbGFzdCk7IH0KCiAgYmFzaWNfc3RyaW5nJiBlcmFz
ZSAoc2l6ZV90eXBlIHBvcyA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJl
cGxhY2UgKHBvcywgbiwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7IH0KICBpdGVyYXRvciBlcmFz
ZShpdGVyYXRvciBwKQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGJlZ2luKCk7CiAgICAgIHJl
cGxhY2UgKF9fbywgMSwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7IHNlbGZpc2ggKCk7CiAgICAg
IHJldHVybiBpYmVnaW4oKSArIF9fbzsgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIGYsIGl0
ZXJhdG9yIGwpCiAgICB7IHNpemVfdHlwZSBfX28gPSBmIC0gaWJlZ2luKCk7CiAgICAgIHJlcGxh
Y2UgKF9fbywgbC1mLCAoc2l6ZV90eXBlKTAsIChjaGFyVCkwKTtzZWxmaXNoICgpOwogICAgICBy
ZXR1cm4gaWJlZ2luKCkgKyBfX287IH0KCiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5
cGUgcG9zMSwgc2l6ZV90eXBlIG4xLCBjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdHlwZSBwb3MyID0gMCwgc2l6ZV90eXBlIG4yID0gbnBvcyk7
CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIGNv
bnN0IGNoYXJUKiBzLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIG4yKTsKICBi
YXNpY19zdHJpbmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgY29uc3Qg
Y2hhclQqIHMpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4xLCBzLCB0cmFpdHM6Omxlbmd0
aCAocykpOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5
cGUgbjEsIHNpemVfdHlwZSBuMiwgY2hhclQgYyk7CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChz
aXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2Ug
KHBvcywgbiwgMSwgYyk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBp
dGVyYXRvciBpMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIpCiAgICB7IHJldHVybiByZXBsYWNl
IChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgc3RyKTsgfQogIGJhc2ljX3N0cmluZyYgcmVwbGFj
ZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4p
CiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgcywgbik7IH0K
ICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwgY29uc3Qg
Y2hhclQqIHMpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwg
cyk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwg
c2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAo
KSwgaTIgLSBpMSwgbiwgYyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAg
IGJhc2ljX3N0cmluZyYgcmVwbGFjZShpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW5wdXRJdGVyYXRvciBqMSwgSW5wdXRJdGVyYXRvciBqMik7CgoK
CgoKcHJpdmF0ZToKICBzdGF0aWMgY2hhclQgZW9zICgpIHsgcmV0dXJuIHRyYWl0czo6ZW9zICgp
OyB9CiAgdm9pZCB1bmlxdWUgKCkgeyBpZiAocmVwICgpLT5yZWYgPiAxKSBhbGxvYyAobGVuZ3Ro
ICgpLCB0cnVlKTsgfQogIHZvaWQgc2VsZmlzaCAoKSB7IHVuaXF1ZSAoKTsgcmVwICgpLT5zZWxm
aXNoID0gdHJ1ZTsgfQoKcHVibGljOgogIGNoYXJUIG9wZXJhdG9yW10gKHNpemVfdHlwZSBwb3Mp
IGNvbnN0CiAgICB7CiAgICAgIGlmIChwb3MgPT0gbGVuZ3RoICgpKQogICAgICAgIHJldHVybiBl
b3MgKCk7CiAgICAgIHJldHVybiBkYXRhICgpW3Bvc107CiAgICB9CgogIHJlZmVyZW5jZSBvcGVy
YXRvcltdIChzaXplX3R5cGUgcG9zKQogICAgeyBzZWxmaXNoICgpOyByZXR1cm4gKCpyZXAgKCkp
W3Bvc107IH0KCiAgcmVmZXJlbmNlIGF0IChzaXplX3R5cGUgcG9zKQogICAgewogICAgICAoKHZv
aWQpICgoIShwb3MgPj0gbGVuZ3RoICgpKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIhKHBvcyA+
PSBsZW5ndGggKCkpIiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIsIDMyOCwg
X19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgIHJldHVybiAoKnRoaXMpW3Bvc107CiAg
ICB9CiAgY29uc3RfcmVmZXJlbmNlIGF0IChzaXplX3R5cGUgcG9zKSBjb25zdAogICAgewogICAg
ICAoKHZvaWQpICgoIShwb3MgPj0gbGVuZ3RoICgpKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIh
KHBvcyA+PSBsZW5ndGggKCkpIiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIs
IDMzMywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgIHJldHVybiBkYXRhICgpW3Bv
c107CiAgICB9Cgpwcml2YXRlOgogIHZvaWQgdGVybWluYXRlICgpIGNvbnN0CiAgICB7IHRyYWl0
czo6YXNzaWduICgoKnJlcCAoKSlbbGVuZ3RoICgpXSwgZW9zICgpKTsgfQoKcHVibGljOgogIGNv
bnN0IGNoYXJUKiBjX3N0ciAoKSBjb25zdAogICAgeyBpZiAobGVuZ3RoICgpID09IDApIHJldHVy
biAiIjsgdGVybWluYXRlICgpOyByZXR1cm4gZGF0YSAoKTsgfQogIHZvaWQgcmVzaXplIChzaXpl
X3R5cGUgbiwgY2hhclQgYyk7CiAgdm9pZCByZXNpemUgKHNpemVfdHlwZSBuKQogICAgeyByZXNp
emUgKG4sIGVvcyAoKSk7IH0KICB2b2lkIHJlc2VydmUgKHNpemVfdHlwZSkgeyB9CgogIHNpemVf
dHlwZSBjb3B5IChjaGFyVCogcywgc2l6ZV90eXBlIG4sIHNpemVfdHlwZSBwb3MgPSAwKSBjb25z
dDsKCiAgc2l6ZV90eXBlIGZpbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUg
cG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmQgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxl
bmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBv
cywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kIChjb25zdCBjaGFyVCogcywg
c2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kIChzLCBwb3MsIHRyYWl0
czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBv
cyA9IDApIGNvbnN0OwoKICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3Ry
LCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChzdHIuZGF0
YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGNoYXJU
KiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIHJmaW5k
IChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVy
biByZmluZCAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIHJmaW5k
IChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3Q7CgogIHNpemVfdHlwZSBmaW5k
X2ZpcnN0X29mIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNv
bnN0CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X29mIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5n
dGgoKSk7IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVf
dHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAo
Y29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmlu
ZF9maXJzdF9vZiAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZp
bmRfZmlyc3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1
cm4gZmluZCAoYywgcG9zKTsgfQoKICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25zdCBiYXNp
Y19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBm
aW5kX2xhc3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlw
ZSBmaW5kX2xhc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUg
bikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVf
dHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X29mIChzLCBwb3Ms
IHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjaGFyVCBj
LCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChjLCBwb3Mp
OyB9CgogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBz
dHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJzdF9ub3Rf
b2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2Zp
cnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBj
b25zdDsKICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXpl
X3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfbm90X29mIChzLCBw
b3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2Yg
KGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsKCiAgc2l6ZV90eXBlIGZpbmRfbGFz
dF9ub3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBvcykg
Y29uc3QKICAgIHsgcmV0dXJuIGZpbmRfbGFzdF9ub3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3Ry
Lmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFyVCog
cywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2xh
c3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAg
ICB7IHJldHVybiBmaW5kX2xhc3Rfbm90X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7
IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9
IG5wb3MpIGNvbnN0OwoKICBiYXNpY19zdHJpbmcgc3Vic3RyIChzaXplX3R5cGUgcG9zID0gMCwg
c2l6ZV90eXBlIG4gPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gYmFzaWNfc3RyaW5nICgqdGhp
cywgcG9zLCBuKTsgfQoKICBpbnQgY29tcGFyZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNp
emVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpIGNvbnN0OwoKICBpbnQgY29tcGFy
ZSAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBp
bnQgY29tcGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAg
eyByZXR1cm4gY29tcGFyZSAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CgogIGl0ZXJh
dG9yIGJlZ2luICgpIHsgc2VsZmlzaCAoKTsgcmV0dXJuICYoKnRoaXMpWzBdOyB9CiAgaXRlcmF0
b3IgZW5kICgpIHsgc2VsZmlzaCAoKTsgcmV0dXJuICYoKnRoaXMpW2xlbmd0aCAoKV07IH0KCnBy
aXZhdGU6CiAgaXRlcmF0b3IgaWJlZ2luICgpIGNvbnN0IHsgcmV0dXJuICYoKnJlcCAoKSlbMF07
IH0KICBpdGVyYXRvciBpZW5kICgpIGNvbnN0IHsgcmV0dXJuICYoKnJlcCAoKSlbbGVuZ3RoICgp
XTsgfQoKcHVibGljOgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0IHsgcmV0dXJuIGli
ZWdpbiAoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCAoKSBjb25zdCB7IHJldHVybiBpZW5kICgp
OyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRv
ciAoZW5kICgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAg
IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgKGVuZCAoKSk7IH0KICByZXZlcnNlX2l0
ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yIChiZWdpbiAoKSk7IH0KICBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvciAoYmVnaW4gKCkpOyB9Cgpwcml2YXRlOgogIHZvaWQgYWxsb2MgKHNpemVf
dHlwZSBzaXplLCBib29sIHNhdmUpOwogIHN0YXRpYyBzaXplX3R5cGUgX2ZpbmQgKGNvbnN0IGNo
YXJUKiBwdHIsIGNoYXJUIGMsIHNpemVfdHlwZSB4cG9zLCBzaXplX3R5cGUgbGVuKTsKICBpbmxp
bmUgYm9vbCBjaGVja19yZWFsbG9jIChzaXplX3R5cGUgcykgY29uc3Q7CgogIHN0YXRpYyBSZXAg
bmlsUmVwOwogIGNoYXJUICpkYXQ7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0
cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CmJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGky
LCBJbnB1dEl0ZXJhdG9yIGoxLCBJbnB1dEl0ZXJhdG9yIGoyKQoKCgoKCnsKICBjb25zdCBzaXpl
X3R5cGUgbGVuID0gbGVuZ3RoICgpOwogIHNpemVfdHlwZSBwb3MgPSBpMSAtIGliZWdpbiAoKTsK
ICBzaXplX3R5cGUgbjEgPSBpMiAtIGkxOwogIHNpemVfdHlwZSBuMiA9IGoyIC0gajE7CgogICgo
dm9pZCkgKCghKHBvcyA+IGxlbikpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShwb3MgPiBsZW4p
IiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIsIDQ0NiwgX19QUkVUVFlfRlVO
Q1RJT05fXyksIDApKSk7CiAgaWYgKG4xID4gbGVuIC0gcG9zKQogICAgbjEgPSBsZW4gLSBwb3M7
CiAgKCh2b2lkKSAoKCEobGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yKSkgPyAwIDogKF9fYXNz
ZXJ0X2ZhaWwgKCIhKGxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMikiLCAiL3Vzci9pbmNsdWRl
L2crKy0zL3N0ZC9iYXN0cmluZy5oIiwgNDQ5LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsK
ICBzaXplX3QgbmV3bGVuID0gbGVuIC0gbjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5l
d2xlbikpCiAgICB7CiAgICAgIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBw
LT5jb3B5ICgwLCBkYXRhICgpLCBwb3MpOwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAo
KSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoyOyAr
K2oxLCArK3BvcykKICAgICAgICB0cmFpdHM6OmFzc2lnbiAoKCpwKVtwb3NdLCAqajEpOwogICAg
ICByZXB1cCAocCk7CiAgICB9CiAgZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyAr
IG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICBmb3IgKDsg
ajEgIT0gajI7ICsrajEsICsrcG9zKQogICAgICAgIHRyYWl0czo6YXNzaWduICgoKnJlcCAoKSlb
cG9zXSwgKmoxKTsKICAgIH0KICByZXAgKCktPmxlbiA9IG5ld2xlbjsKCiAgcmV0dXJuICp0aGlz
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9y
KyAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCiAg
ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBy
aHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3RyIChsaHMp
OwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNo
YXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGNoYXJUKiBsaHMsIGNv
bnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhzKTsKICBzdHIuYXBw
ZW5kIChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjaGFyVCBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAoMSwgbGhzKTsKICBzdHIuYXBwZW5kIChyaHMpOwogIHJl
dHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4K
b3BlcmF0b3IrIChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4m
IGxocywgY29uc3QgY2hhclQqIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAocmhzKTsKICByZXR1cm4gc3RyOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp
bmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAo
Y29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNoYXJU
IHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKGxo
cyk7CiAgc3RyLmFwcGVuZCAoMSwgcmhzKTsKICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVy
YXRvcj09IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxo
cywKICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID09IDApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9v
bApvcGVyYXRvcj09IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykg
PT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv
Y2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChs
aHMuY29tcGFyZSAocmhzKSA9PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0
cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPSAoY29uc3QgY2hh
clQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBy
aHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpICE9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVy
YXRvciE9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxo
cywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgIT0gMCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+
CmlubGluZSBib29sCm9wZXJhdG9yPCAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+JiBsaHMsCiAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8
IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMu
Y29tcGFyZSAobGhzKSA+IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0IGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7
CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj4g
KGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA8IDApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg
Ym9vbApvcGVyYXRvcj4gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhz
KSA+IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs
b2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAo
cmhzLmNvbXBhcmUgKGxocykgPj0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0IGJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCog
cmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8PSAwKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3Bl
cmF0b3I+PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpIDw9IDAp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNv
bXBhcmUgKHJocykgPj0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRz
LCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAogICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAo
bGhzLmNvbXBhcmUgKHJocykgIT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPiAoY29uc3QgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCiAgICAgICAgICAgY29u
c3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1
cm4gKGxocy5jb21wYXJlIChyaHMpID4gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh
c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAogICAgICAgICAg
ICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewog
IHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPD0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy
VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPj0g
KGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAogICAg
ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJo
cykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPj0gMCk7Cn0KCmNsYXNzIGlzdHJlYW07
IGNsYXNzIG9zdHJlYW07CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+IGlzdHJlYW0mCm9wZXJhdG9yPj4gKGlzdHJlYW0mLCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mKTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gb3N0cmVhbSYKb3BlcmF0b3I8PCAob3N0cmVhbSYs
IGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYpOwp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBpc3RyZWFtJgpn
ZXRsaW5lIChpc3RyZWFtJiwgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
JiwgY2hhclQgZGVsaW0gPSAnXG4nKTsKCn0KCgojIDI4ICIvdXNyL2luY2x1ZGUvZysrLTMvc3Rk
L2Jhc3RyaW5nLmNjIiAxIDMKZXh0ZXJuICJDKysiIHsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj
bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgKiBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6Cm9wZXJhdG9yIG5ldyAoc2l6ZV90IHMs
IHNpemVfdCBleHRyYSkKewogIHJldHVybiBBbGxvY2F0b3I6OmFsbG9jYXRlKHMgKyBleHRyYSAq
IHNpemVvZiAoY2hhclQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjpSZXA6OgpvcGVyYXRvciBkZWxldGUgKHZvaWQgKiBwdHIpCnsKICBBbGxv
Y2F0b3I6OmRlYWxsb2NhdGUocHRyLCBzaXplb2YoUmVwKSArCiAgICAgICAgICAgICAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UmVwICo+KHB0ciktPnJlcyAqCiAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVvZiAoY2hhclQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0
cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHNpemVfdCBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmZyb2Jfc2l6ZSAoc2l6ZV90IHMpCnsKICBzaXpl
X3QgaSA9IDE2OwogIHdoaWxlIChpIDwgcykgaSAqPSAyOwogIHJldHVybiBpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXAgKgpiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmNyZWF0ZSAoc2l6ZV90IGV4dHJhKQp7
CiAgZXh0cmEgPSBmcm9iX3NpemUgKGV4dHJhICsgMSk7CiAgUmVwICpwID0gbmV3IChleHRyYSkg
UmVwOwogIHAtPnJlcyA9IGV4dHJhOwogIHAtPnJlZiA9IDE7CiAgcC0+c2VsZmlzaCA9IGZhbHNl
OwogIHJldHVybiBwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh
c3MgQWxsb2NhdG9yPgpjaGFyVCAqIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPjo6UmVwOjoKY2xvbmUgKCkKewogIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChsZW4pOwogIHAt
PmNvcHkgKDAsIGRhdGEgKCksIGxlbik7CiAgcC0+bGVuID0gbGVuOwogIHJldHVybiBwLT5kYXRh
ICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgppbmxpbmUgYm9vbCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
OlJlcDo6CmV4Y2Vzc19zbG9wIChzaXplX3Qgcywgc2l6ZV90IHIpCnsKICByZXR1cm4gMiAqIChz
IDw9IDE2ID8gMTYgOiBzKSA8IHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh
aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPjo6CmNoZWNrX3JlYWxsb2MgKGJhc2ljX3N0cmluZzo6c2l6ZV90eXBl
IHMpIGNvbnN0CnsKICBzICs9IHNpemVvZiAoY2hhclQpOwogIHJlcCAoKS0+c2VsZmlzaCA9IGZh
bHNlOwogIHJldHVybiAocmVwICgpLT5yZWYgPiAxCiAgICAgICAgICB8fCBzID4gY2FwYWNpdHkg
KCkKICAgICAgICAgIHx8IFJlcDo6ZXhjZXNzX3Nsb3AgKHMsIGNhcGFjaXR5ICgpKSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CnZvaWQg
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKYWxsb2MgKGJhc2ljX3N0
cmluZzo6c2l6ZV90eXBlIF9fc2l6ZSwgYm9vbCBfX3NhdmUpCnsKICBpZiAoISBjaGVja19yZWFs
bG9jIChfX3NpemUpKQogICAgcmV0dXJuOwoKICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAoX19zaXpl
KTsKCiAgaWYgKF9fc2F2ZSkKICAgIHsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgbGVuZ3Ro
ICgpKTsKICAgICAgcC0+bGVuID0gbGVuZ3RoICgpOwogICAgfQogIGVsc2UKICAgIHAtPmxlbiA9
IDA7CgogIHJlcHVwIChwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
JgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChzaXpl
X3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLAogICAgICAgICBjb25zdCBiYXNpY19zdHJpbmcmIHN0
ciwgc2l6ZV90eXBlIHBvczIsIHNpemVfdHlwZSBuMikKewogIGNvbnN0IHNpemVfdCBsZW4yID0g
c3RyLmxlbmd0aCAoKTsKCiAgaWYgKHBvczEgPT0gMCAmJiBuMSA+PSBsZW5ndGggKCkgJiYgcG9z
MiA9PSAwICYmIG4yID49IGxlbjIpCiAgICByZXR1cm4gb3BlcmF0b3I9IChzdHIpOwoKICAoKHZv
aWQpICgoIShwb3MyID4gbGVuMikpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShwb3MyID4gbGVu
MikiLCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIsIDEyNiwgX19QUkVUVFlf
RlVOQ1RJT05fXyksIDApKSk7CgogIGlmIChuMiA+IGxlbjIgLSBwb3MyKQogICAgbjIgPSBsZW4y
IC0gcG9zMjsKCiAgcmV0dXJuIHJlcGxhY2UgKHBvczEsIG4xLCBzdHIuZGF0YSAoKSArIHBvczIs
IG4yKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
OjpSZXA6Ogpjb3B5IChzaXplX3QgcG9zLCBjb25zdCBjaGFyVCAqcywgc2l6ZV90IG4pCnsKICBp
ZiAobikKICAgIHRyYWl0czo6Y29weSAoZGF0YSAoKSArIHBvcywgcywgbik7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSB2b2lk
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKbW92ZSAoc2l6
ZV90IHBvcywgY29uc3QgY2hhclQgKnMsIHNpemVfdCBuKQp7CiAgaWYgKG4pCiAgICB0cmFpdHM6
Om1vdmUgKGRhdGEgKCkgKyBwb3MsIHMsIG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj4mCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJl
cGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQqIHMsIHNpemVf
dHlwZSBuMikKewogIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBsZW5ndGggKCk7CiAgKCh2b2lkKSAo
KCEocG9zID4gbGVuKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIhKHBvcyA+IGxlbikiLCAiL3Vz
ci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIsIDE1NiwgX19QUkVUVFlfRlVOQ1RJT05f
XyksIDApKSk7CiAgaWYgKG4xID4gbGVuIC0gcG9zKQogICAgbjEgPSBsZW4gLSBwb3M7CiAgKCh2
b2lkKSAoKCEobGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yKSkgPyAwIDogKF9fYXNzZXJ0X2Zh
aWwgKCIhKGxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMikiLCAiL3Vzci9pbmNsdWRlL2crKy0z
L3N0ZC9iYXN0cmluZy5jYyIsIDE1OSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgc2l6
ZV90IG5ld2xlbiA9IGxlbiAtIG4xICsgbjI7CgogIGlmIChjaGVja19yZWFsbG9jIChuZXdsZW4p
KQogICAgewogICAgICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAobmV3bGVuKTsKICAgICAgcC0+Y29w
eSAoMCwgZGF0YSAoKSwgcG9zKTsKICAgICAgcC0+Y29weSAocG9zICsgbjIsIGRhdGEgKCkgKyBw
b3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIHAtPmNvcHkgKHBvcywgcywgbjIpOwog
ICAgICByZXB1cCAocCk7CiAgICB9CiAgZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBv
cyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICByZXAg
KCktPmNvcHkgKHBvcywgcywgbjIpOwogICAgfQogIHJlcCAoKS0+bGVuID0gbmV3bGVuOwoKICBy
ZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+CmlubGluZSB2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6UmVwOjoKc2V0IChzaXplX3QgcG9zLCBjb25zdCBjaGFyVCBjLCBzaXplX3QgbikK
ewogIHRyYWl0czo6c2V0IChkYXRhICgpICsgcG9zLCBjLCBuKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj46OgpyZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIHNpemVfdHlwZSBu
MiwgY2hhclQgYykKewogIGNvbnN0IHNpemVfdCBsZW4gPSBsZW5ndGggKCk7CiAgKCh2b2lkKSAo
KCEocG9zID4gbGVuKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIhKHBvcyA+IGxlbikiLCAiL3Vz
ci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIsIDE5MiwgX19QUkVUVFlfRlVOQ1RJT05f
XyksIDApKSk7CiAgaWYgKG4xID4gbGVuIC0gcG9zKQogICAgbjEgPSBsZW4gLSBwb3M7CiAgKCh2
b2lkKSAoKCEobGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yKSkgPyAwIDogKF9fYXNzZXJ0X2Zh
aWwgKCIhKGxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMikiLCAiL3Vzci9pbmNsdWRlL2crKy0z
L3N0ZC9iYXN0cmluZy5jYyIsIDE5NSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgc2l6
ZV90IG5ld2xlbiA9IGxlbiAtIG4xICsgbjI7CgogIGlmIChjaGVja19yZWFsbG9jIChuZXdsZW4p
KQogICAgewogICAgICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAobmV3bGVuKTsKICAgICAgcC0+Y29w
eSAoMCwgZGF0YSAoKSwgcG9zKTsKICAgICAgcC0+Y29weSAocG9zICsgbjIsIGRhdGEgKCkgKyBw
b3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIHAtPnNldCAocG9zLCBjLCBuMik7CiAg
ICAgIHJlcHVwIChwKTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHJlcCAoKS0+bW92ZSAocG9z
ICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIHJlcCAo
KS0+c2V0IChwb3MsIGMsIG4yKTsKICAgIH0KICByZXAgKCktPmxlbiA9IG5ld2xlbjsKCiAgcmV0
dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgp2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6
CnJlc2l6ZSAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCnsKICAoKHZvaWQpICgoIShuID4gbWF4X3Np
emUgKCkpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiEobiA+IG1heF9zaXplICgpKSIsICIvdXNy
L2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmNjIiwgMjIwLCBfX1BSRVRUWV9GVU5DVElPTl9f
KSwgMCkpKTsKCiAgaWYgKG4gPiBsZW5ndGggKCkpCiAgICBhcHBlbmQgKG4gLSBsZW5ndGggKCks
IGMpOwogIGVsc2UKICAgIGVyYXNlIChuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+OjoKY29weSAoY2hhclQqIHMsIHNpemVfdHlwZSBuLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7
CiAgKCh2b2lkKSAoKCEocG9zID4gbGVuZ3RoICgpKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIh
KHBvcyA+IGxlbmd0aCAoKSkiLCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIs
IDIzMywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogIGlmIChuID4gbGVuZ3RoICgpIC0g
cG9zKQogICAgbiA9IGxlbmd0aCAoKSAtIHBvczsKCiAgdHJhaXRzOjpjb3B5IChzLCBkYXRhICgp
ICsgcG9zLCBuKTsKICByZXR1cm4gbjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0
cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv
Y2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
OjoKZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25z
dAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgKyBuIDw9IGxlbmd0aCAoKTsg
Kyt4cG9zKQogICAgaWYgKHRyYWl0czo6ZXEgKGRhdGEgKCkgW3hwb3NdLCAqcykKICAgICAgICAm
JiB0cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyB4cG9zLCBzLCBuKSA9PSAwKQogICAgICByZXR1
cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0
cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0
cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6Cl9maW5kIChjb25zdCBjaGFyVCogcHRyLCBjaGFyVCBjLCBzaXplX3R5cGUgeHBv
cywgc2l6ZV90eXBlIGxlbikKewogIGZvciAoOyB4cG9zIDwgbGVuOyArK3hwb3MpCiAgICBpZiAo
dHJhaXRzOjplcSAocHRyIFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBu
cG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kIChjaGFyVCBjLCBz
aXplX3R5cGUgcG9zKSBjb25zdAp7CiAgcmV0dXJuIF9maW5kIChkYXRhICgpLCBjLCBwb3MsIGxl
bmd0aCAoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90
eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJmaW5kIChjb25z
dCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBpZiAobiA+
IGxlbmd0aCAoKSkKICAgIHJldHVybiBucG9zOwoKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAoKSAt
IG47CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwoKICBmb3IgKCsreHBvczsgeHBv
cy0tID4gMDsgKQogICAgaWYgKHRyYWl0czo6ZXEgKGRhdGEgKCkgW3hwb3NdLCAqcykKICAgICAg
ICAmJiB0cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyB4cG9zLCBzLCBuKSA9PSAwKQogICAgICBy
ZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+OjoKcmZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsKICBpZiAoMSA+IGxl
bmd0aCAoKSkKICAgIHJldHVybiBucG9zOwoKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7
CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwoKICBmb3IgKCsreHBvczsgeHBvcy0t
ID4gMDsgKQogICAgaWYgKHRyYWl0czo6ZXEgKGRhdGEgKCkgW3hwb3NdLCBjKSkKICAgICAgcmV0
dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
Pjo6CmZpbmRfZmlyc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5
cGUgbikgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwogIGZvciAoOyB4cG9zIDwgbGVuZ3Ro
ICgpOyArK3hwb3MpCiAgICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAwLCBuKSAhPSBu
cG9zKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+OjoKZmluZF9sYXN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBl
IHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkgPT0gMCkKICAgIHJldHVy
biBucG9zOwogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykK
ICAgIHhwb3MgPSBwb3M7CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7KQogICAgaWYgKF9maW5k
IChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgIT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAg
cmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6
ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfZmly
c3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNv
bnN0CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBmb3IgKDsgeHBvcyA8IGxlbmd0aCAoKTsgKyt4
cG9zKQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgPT0gbnBvcykKICAg
ICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwg
Y2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0
cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6CmZpbmRfZmlyc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25z
dAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgPCBsZW5ndGggKCk7ICsreHBv
cykKICAgIGlmICh0cmFpdHM6Om5lIChkYXRhICgpIFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4
cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Ogpm
aW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBl
IG4pIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkgPT0gMCkKICAgIHJldHVybiBucG9zOwogIHNpemVf
dCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7
CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7KQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4
cG9zXSwgMCwgbikgPT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfbGFzdF9ub3Rfb2YgKGNoYXJU
IGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkgPT0gMCkKICAgIHJldHVy
biBucG9zOwogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykK
ICAgIHhwb3MgPSBwb3M7CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7KQogICAgaWYgKHRyYWl0
czo6bmUgKGRhdGEgKCkgW3hwb3NdLCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5w
b3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0
b3I+CmludCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Ogpjb21wYXJl
IChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNv
bnN0CnsKICAoKHZvaWQpICgoIShwb3MgPiBsZW5ndGggKCkpKSA/IDAgOiAoX19hc3NlcnRfZmFp
bCAoIiEocG9zID4gbGVuZ3RoICgpKSIsICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5n
LmNjIiwgMzk5LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKCiAgc2l6ZV90IHJsZW4gPSBs
ZW5ndGggKCkgLSBwb3M7CiAgaWYgKHJsZW4gPiBuKQogICAgcmxlbiA9IG47CiAgaWYgKHJsZW4g
PiBzdHIubGVuZ3RoICgpKQogICAgcmxlbiA9IHN0ci5sZW5ndGggKCk7CiAgaW50IHIgPSB0cmFp
dHM6OmNvbXBhcmUgKGRhdGEgKCkgKyBwb3MsIHN0ci5kYXRhICgpLCBybGVuKTsKICBpZiAociAh
PSAwKQogICAgcmV0dXJuIHI7CiAgaWYgKHJsZW4gPT0gbikKICAgIHJldHVybiAwOwogIHJldHVy
biAobGVuZ3RoICgpIC0gcG9zKSAtIHN0ci5sZW5ndGggKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBj
aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmludCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Ogpjb21wYXJlIChjb25zdCBjaGFyVCogcywgc2l6ZV90
eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICAoKHZvaWQpICgoIShwb3MgPiBsZW5ndGgg
KCkpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiEocG9zID4gbGVuZ3RoICgpKSIsICIvdXNyL2lu
Y2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmNjIiwgNDE4LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwg
MCkpKTsKCiAgc2l6ZV90IHJsZW4gPSBsZW5ndGggKCkgLSBwb3M7CiAgaWYgKHJsZW4gPiBuKQog
ICAgcmxlbiA9IG47CiAgaW50IHIgPSB0cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyBwb3MsIHMs
IHJsZW4pOwogIGlmIChyICE9IDApCiAgICByZXR1cm4gcjsKICByZXR1cm4gKGxlbmd0aCAoKSAt
IHBvcykgLSBuOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+CmlzdHJlYW0gJgpvcGVyYXRvcj4+IChpc3RyZWFtICZpcywgYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ICZzKQp7CiAgaW50IHcgPSBpcy53aWR0aCAo
MCk7CiAgaWYgKGlzLmlwZngwICgpKQogICAgewogICAgICByZWdpc3RlciBzdHJlYW1idWYgKnNi
ID0gaXMucmRidWYgKCk7CiAgICAgIHMucmVzaXplICgwKTsKICAgICAgd2hpbGUgKDEpCiAgICAg
ICAgewogICAgICAgICAgaW50IGNoID0gc2ItPnNidW1wYyAoKTsKICAgICAgICAgIGlmIChjaCA9
PSAoLTEpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaXMuc2V0c3RhdGUgKGlvczo6ZW9m
Yml0KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBp
ZiAodHJhaXRzOjppc19kZWwgKGNoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNiLT5z
dW5nZXRjICgpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBz
ICs9IHN0YXRpY19jYXN0PGNoYXJUPiAoY2gpOwogICAgICAgICAgaWYgKC0tdyA9PSAxKQogICAg
ICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogIGlzLmlzZnggKCk7CiAgaWYgKHMubGVu
Z3RoICgpID09IDApCiAgICBpcy5zZXRzdGF0ZSAoaW9zOjpmYWlsYml0KTsKCiAgcmV0dXJuIGlz
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
Pgpvc3RyZWFtICYKb3BlcmF0b3I8PCAob3N0cmVhbSAmbywgY29uc3QgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBzKQp7CiAgcmV0dXJuIG8ud3JpdGUgKHMuZGF0YSAo
KSwgcy5sZW5ndGggKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg
Y2xhc3MgQWxsb2NhdG9yPgppc3RyZWFtJgpnZXRsaW5lIChpc3RyZWFtICZpcywgYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBzLCBjaGFyVCBkZWxpbSkKewogIGlmIChp
cy5pcGZ4MSAoKSkKICAgIHsKICAgICAgc2l6ZV90IGNvdW50ID0gMDsKICAgICAgc3RyZWFtYnVm
ICpzYiA9IGlzLnJkYnVmICgpOwogICAgICBzLnJlc2l6ZSAoMCk7CgogICAgICB3aGlsZSAoMSkK
ICAgICAgICB7CiAgICAgICAgICBpbnQgY2ggPSBzYi0+c2J1bXBjICgpOwogICAgICAgICAgaWYg
KGNoID09ICgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpcy5zZXRzdGF0ZSAoY291
bnQgPT0gMAogICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpb3M6OmZhaWxiaXR8aW9zOjpl
b2ZiaXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW9zOjplb2ZiaXQpOwogICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgogICAgICAgICAgKytjb3VudDsKCiAgICAgICAg
ICBpZiAoY2ggPT0gZGVsaW0pCiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgIHMgKz0gc3Rh
dGljX2Nhc3Q8Y2hhclQ+IChjaCk7CgogICAgICAgICAgaWYgKHMubGVuZ3RoICgpID09IHMubnBv
cyAtIDEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpcy5zZXRzdGF0ZSAoaW9zOjpmYWls
Yml0KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0K
CgoKICBpcy5pc2Z4ICgpOwoKICByZXR1cm4gaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwg
Y2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0
cywgQWxsb2NhdG9yPjo6UmVwCmJhc2ljX3N0cmluZzxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
OjpuaWxSZXAgPSB7IDAsIDAsIDEsIGZhbHNlIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj46Om5wb3M7Cgp9CiMgNjYxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3Ry
aW5nLmgiIDIgMwojIDcgIi91c3IvaW5jbHVkZS9nKystMy9zdHJpbmciIDIgMwoKZXh0ZXJuICJD
KysiIHsKdHlwZWRlZiBiYXNpY19zdHJpbmcgPGNoYXI+IHN0cmluZzsKCn0KCiMgMjUgImdwc19k
YXRhLmgiIDIKCiMgMzEgIi91c3IvaW5jbHVkZS9nKystMy92ZWN0b3IiIDEgMwojIDQzICIvdXNy
L2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvZysr
LTMvc3RsX3BhaXIuaCIgMSAzCgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1
Y3QgcGFpciB7CiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRf
dHlwZTsKCiAgX1QxIGZpcnN0OwogIF9UMiBzZWNvbmQ7CiAgcGFpcigpIDogZmlyc3QoX1QxKCkp
LCBzZWNvbmQoX1QyKCkpIHt9CiAgcGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2Ip
IDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCgogIHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNs
YXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBfX3ApIDogZmlyc3QoX19wLmZp
cnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9Cgp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xh
c3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gs
IGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5m
aXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEs
IGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBf
X3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0IDwgX195
LmZpcnN0IHx8CiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29u
ZCA8IF9feS5zZWNvbmQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGlu
ZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoY29uc3QgX1QxJiBfX3gsIGNvbnN0IF9UMiYgX195
KQp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsKfQoKIyA0MyAiL3Vzci9pbmNs
dWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgoKIyA1NSAiL3Vzci9pbmNsdWRlL2crKy0z
L3R5cGVfdHJhaXRzLmgiIDEgMwpzdHJ1Y3QgX190cnVlX3R5cGUgewp9OwoKc3RydWN0IF9fZmFs
c2VfdHlwZSB7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsK
IyA4MSAiL3Vzci9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2Zh
bHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2Zh
bHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNl
X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNl
X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNf
UE9EX3R5cGU7Cn07CgoKCgoKCgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9v
bD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90
cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf
X3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9E
X3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8
c2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl
X3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGludD4gewogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf
UE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNp
Z25lZCBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X190eXBlX3RyYWl0czxsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8
ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlw
ZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAqPiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf
dHlwZTsKfTsKCiMgMzAxICIvdXNyL2luY2x1ZGUvZysrLTMvdHlwZV90cmFpdHMuaCIgMwp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxzZV90
eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8
dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx3Y2hhcl90PiB7CiAgdHlwZWRlZiBfX3RydWVf
dHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu
dGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl
cjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRl
bXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxv
bmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiBz
dHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50
ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxv
bmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCiMgNDYgIi91c3IvaW5j
bHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCgojIDEyICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgOCAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvc3lzbGltaXRzLmgiIDEg
MwojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUv
bGltaXRzLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEyNyAiL3Vz
ci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMv
bG9jYWxfbGltLmgiIDEgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAy
IDMKIyAzMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKCiMgMTMxICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgOCAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvc3lzbGltaXRz
LmgiIDIgMwojIDEyICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5j
bHVkZS9saW1pdHMuaCIgMiAzCiMgNTAgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2Uu
aCIgMiAzCgoKCiMgMzQgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9p
bmNsdWRlL25ldy5oIiAxIDMKIyAzMyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51
eC8yLjk2L2luY2x1ZGUvbmV3IiAxIDMKI3ByYWdtYSBpbnRlcmZhY2UgIm5ldyIKIyAzMyAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvbmV3IiAzCgoKCiMg
MzMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL2V4Y2Vw
dGlvbiIgMSAzCiNwcmFnbWEgaW50ZXJmYWNlICJleGNlcHRpb24iCiMgMzMgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL2V4Y2VwdGlvbiIgMwoKCmV4dGVy
biAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkIHsKCmNsYXNzIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBl
eGNlcHRpb24gKCkgeyB9CiAgdmlydHVhbCB+ZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgY29u
c3QgY2hhciogd2hhdCAoKSBjb25zdDsKfTsKCmNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMg
ZXhjZXB0aW9uIHsKcHVibGljOgogIGJhZF9leGNlcHRpb24gKCkgeyB9CiAgdmlydHVhbCB+YmFk
X2V4Y2VwdGlvbiAoKSB7IH0KfTsKCnR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAo
KTsKdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCnRlcm1pbmF0ZV9oYW5k
bGVyIHNldF90ZXJtaW5hdGUgKHRlcm1pbmF0ZV9oYW5kbGVyKTsKdm9pZCB0ZXJtaW5hdGUgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwp1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3Vu
ZXhwZWN0ZWQgKHVuZXhwZWN0ZWRfaGFuZGxlcik7CnZvaWQgdW5leHBlY3RlZCAoKSBfX2F0dHJp
YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CmJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uICgpOwoKfQoK
fQoKIyAzNiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUv
bmV3IiAyIDMKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkIHsKCiAgY2xhc3MgYmFkX2Fs
bG9jIDogcHVibGljIGV4Y2VwdGlvbiB7CiAgcHVibGljOgogICAgdmlydHVhbCBjb25zdCBjaGFy
KiB3aGF0KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiAiYmFkX2FsbG9jIjsgfQogIH07CgogIHN0
cnVjdCBub3Rocm93X3Qge307CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwogIHR5
cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxl
ciAobmV3X2hhbmRsZXIpOwoKfQoKCnZvaWQgKm9wZXJhdG9yIG5ldyAoc2l6ZV90KSB0aHJvdyAo
c3RkOjpiYWRfYWxsb2MpOwp2b2lkICpvcGVyYXRvciBuZXdbXSAoc2l6ZV90KSB0aHJvdyAoc3Rk
OjpiYWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKSB0aHJvdygpOwp2b2lk
IG9wZXJhdG9yIGRlbGV0ZVtdICh2b2lkICopIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ldyAo
c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5l
d1tdIChzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRv
ciBkZWxldGUgKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9w
ZXJhdG9yIGRlbGV0ZVtdICh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsK
CgppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkg
eyByZXR1cm4gcGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHNpemVfdCwgdm9p
ZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KfQoKIyAzNCAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvbmV3LmgiIDIgMwoKdXNpbmcgc3Rk
OjpuZXdfaGFuZGxlcjsKdXNpbmcgc3RkOjpzZXRfbmV3X2hhbmRsZXI7CgojIDUzICIvdXNyL2lu
Y2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgoKCgoKCgoKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5saW5lIHZv
aWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBfVHAq
KSB7CiAgX1RwIF9fdG1wID0gKl9fYTsKICAqX19hID0gKl9fYjsKICAqX19iID0gX190bXA7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxp
bmUgdm9pZCBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKSB7
CiAgX19pdGVyX3N3YXAoX19hLCBfX2IsIF9fdmFsdWVfdHlwZShfX2EpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgc3dhcChfVHAmIF9fYSwgX1RwJiBfX2IpIHsKICBfVHAg
X190bXAgPSBfX2E7CiAgX19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9CgoKCgoKCgoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CmlubGluZSBjb25zdCBfVHAmIG1pbihjb25zdCBfVHAmIF9fYSwgY29u
c3QgX1RwJiBfX2IpIHsKICByZXR1cm4gX19iIDwgX19hID8gX19iIDogX19hOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0
IF9UcCYgX19iKSB7CiAgcmV0dXJuIF9fYSA8IF9fYiA/IF9fYiA6IF9fYTsKfQoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0
IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJuIF9f
Y29tcChfX2IsIF9fYSkgPyBfX2IgOiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9U
cCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19jb21wKF9fYSwgX19iKSA/IF9f
YiA6IF9fYTsKfQojIDEyMyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAzCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3Rh
bmNlPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnLCBfRGlzdGFu
Y2UqKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0
KQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlz
dGFuY2U+CmlubGluZSBfT3V0cHV0SXRlcgpfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs
IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFu
Y2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pIHsKICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJu
IF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKgpfX2NvcHlfdHJp
dmlhbChjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0
KSB7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0g
X19maXJzdCkpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9Cb29s
VHlwZT4Kc3RydWN0IF9fY29weV9kaXNwYXRjaCB7CiAgc3RhdGljIF9PdXRwdXRJdGVyIGNvcHko
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNl
X3R5cGUgX0Rpc3RhbmNlOwogICAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LCBfQ2F0ZWdvcnkoKSwgKF9EaXN0YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CnN0cnVjdCBfX2NvcHlfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsK
ICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3Qs
IF9UcCogX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5
X2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCog
Y29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0
KSB7CiAgICByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7
CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgpp
bmxpbmUgX091dHB1dEl0ZXIgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9U
cDsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29weV9kaXNw
YXRjaDxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlciwgX1RyaXZpYWw+CiAgICA6OmNvcHkoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCiMgMjE4ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2Fs
Z29iYXNlLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9C
aWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlk
aXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICB3aGlsZSAo
X19maXJzdCAhPSBfX2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICByZXR1cm4g
X19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAt
IF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAg
cmV0dXJuIF9fcmVzdWx0Owp9CgoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQm9vbFR5
cGU+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gKewogIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjppdGVyYXRvcl9jYXRlZ29yeQog
ICAgICAgICAgX0NhdDsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJl
Y3Rpb25hbEl0ZXIxPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2U7CgogIHN0
YXRpYyBfQmlkaXJlY3Rpb25hbEl0ZXIyIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIyIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFz
dCwgX19yZXN1bHQsIF9DYXQoKSwgKF9EaXN0YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190
cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3Qg
X1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVtID0g
X19sYXN0IC0gX19maXJzdDsKICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBz
aXplb2YoX1RwKSAqIF9OdW0pOwogICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNvbnN0
IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAq
IF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4g
X19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgICA6
OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9CSTEsIGNsYXNzIF9CSTI+CmlubGluZSBfQkkyIGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0
LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBl
X3RyYWl0czx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAg
ICAgICAgICAgICAgICAgICAgIDo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAg
ICAgICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBf
QkkyLCBfVHJpdmlhbD4KICAgICAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCk7Cn0KCiMgMzA4ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDMKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4K
cGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1fX2NvdW50
KSB7CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1
bHQ7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2ZpcnN0LCBf
X3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3Mg
X091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihf
UkFJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0LAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIgX19s
YXN0ID0gX19maXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1dEl0
ZXI+KF9fbGFzdCwgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGlu
ZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmly
c3QsIF9TaXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29w
eV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfX2l0ZXJh
dG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091
dHB1dEl0ZXI+CmNvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRw
dXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9f
cmVzdWx0KTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4K
dm9pZCBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25z
dCBfVHAmIF9fdmFsdWUpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp
CiAgICAqX19maXJzdCA9IF9fdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0SXRlciwg
Y2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgZmlsbF9uKF9PdXRwdXRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgZm9yICggOyBfX24gPiAw
OyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogIHJldHVybiBfX2Zp
cnN0Owp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIy
PgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRlcjEgX19m
aXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcjIgX19maXJzdDIpIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAqX19maXJz
dDEgPT0gKl9fZmlyc3QyKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAg
cmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFz
cyBfQmluYXJ5UHJlZGljYXRlPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0
Y2goX0lucHV0SXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmly
c3QyKSkgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBwYWly
PF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW5saW5lIGJvb2wgZXF1
YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xh
c3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCpfX2ZpcnN0MSAhPSAqX19maXJz
dDIpCiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4K
aW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfQmluYXJ5UHJlZGlj
YXRlIF9fYmluYXJ5X3ByZWQpIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19m
aXJzdDEsICsrX19maXJzdDIpCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19m
aXJzdDIpKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpib29sIGxleGljb2dyYXBo
aWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ
dGVyMiBfX2xhc3QyKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy
ICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmICgq
X19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCpfX2ZpcnN0
MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gX19maXJzdDEg
PT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBsZXhpY29n
cmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s
YXN0MgogICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgaWYgKF9fY29tcCgq
X19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKF9fY29tcCgq
X19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9f
Zmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKaW5saW5lIGJvb2wK
bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQp7CiAgY29uc3Qg
c2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICBjb25zdCBzaXplX3QgX19sZW4y
ID0gX19sYXN0MiAtIF9fZmlyc3QyOwogIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2Zp
cnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOwogIHJldHVybiBfX3Jlc3VsdCAh
PSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOwp9CgppbmxpbmUgYm9vbCBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19m
aXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9j
b21wYXJlKChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7
CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+
CmludCBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX0lucHV0SXRlcjEgX19maXJzdDEs
IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICBpZiAoKl9fZmly
c3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gLTE7CiAgICBpZiAoKl9fZmlyc3QyIDwgKl9f
Zmlyc3QxKQogICAgICByZXR1cm4gMTsKICAgICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwog
IH0KICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikgewogICAgcmV0dXJuICEoX19maXJzdDEgPT0g
X19sYXN0MSk7CiAgfQogIGVsc2UgewogICAgcmV0dXJuIC0xOwogIH0KfQoKaW5saW5lIGludApf
X2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hh
ciogX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBfX2xhc3QyKQp7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMSA9IF9fbGFzdDEgLSBf
X2ZpcnN0MTsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwog
IGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xl
bjEsIF9fbGVuMikpOwogIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQKICAgICAgICAg
ICAgICAgICAgICAgICA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChfX2xlbjEgPCBfX2xlbjIg
PyAtMSA6IDEpKTsKfQoKaW5saW5lIGludApfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXko
Y29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0
MikKewoKICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19m
aXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFy
KikgX19sYXN0Mik7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg
X0lucHV0SXRlcjI+CmludCBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewogIHJl
dHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEsIF9fbGFzdDEsIF9f
Zmlyc3QyLCBfX2xhc3QyKTsKfQoKIyAzMSAiL3Vzci9pbmNsdWRlL2crKy0zL3ZlY3RvciIgMiAz
CgoKIyAzNiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCgoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgZGVzdHJveShfVHAqIF9fcG9pbnRlcikgewog
IF9fcG9pbnRlci0+fl9UcCgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+Cmlu
bGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7CiAgbmV3
IChfX3ApIF9UMShfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZvaWQg
Y29uc3RydWN0KF9UMSogX19wKSB7CiAgbmV3IChfX3ApIF9UMSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQKX19kZXN0cm95X2F1eChfRm9yd2FyZEl0
ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCnsK
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBkZXN0cm95KCYqX19m
aXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBf
X2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3IsIF9fdHJ1ZV90
eXBlKSB7fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KaW5s
aW5lIHZvaWQKX19kZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy
YXRvciBfX2xhc3QsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1Rw
Pjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgX1RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX1RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIGRlc3Ryb3ko
X0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewogIF9f
ZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCmlubGlu
ZSB2b2lkIGRlc3Ryb3koY2hhciosIGNoYXIqKSB7fQppbmxpbmUgdm9pZCBkZXN0cm95KHdjaGFy
X3QqLCB3Y2hhcl90Kikge30KCiMgMzMgIi91c3IvaW5jbHVkZS9nKystMy92ZWN0b3IiIDIgMwoK
IyAzNCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwoKCgoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0Zv
cndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCnsKICByZXR1cm4g
Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9j
b3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgX19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiB7
CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAg
IGNvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICByZXR1cm4gX19jdXI7CiAgfQo7Cn0K
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
VHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fcmVzdWx0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9U
cD46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1
eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCiAg
dW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIHJldHVybiBf
X3VuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19yZXN1bHQpKTsKfQoKaW5saW5lIGNo
YXIqIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogX19yZXN1bHQpIHsK
ICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICByZXR1cm4g
X19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB3Y2hhcl90Kgp1bmluaXRp
YWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0
LAogICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpCnsKICBtZW1tb3ZlKF9fcmVz
dWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJl
dHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KcGFpcjxfSW5wdXRJ
dGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2Zp
cnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBf
Rm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKIHsKICAgIGZvciAoIDsgX19jb3VudCA+IDAg
OyAtLV9fY291bnQsICsrX19maXJzdCwgKytfX2N1cikKICAgICAgY29uc3RydWN0KCYqX19jdXIs
ICpfX2ZpcnN0KTsKICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19m
aXJzdCwgX19jdXIpOwogIH0KOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9SYW5kb21BY2Nl
c3NJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcpIHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19j
b3VudDsKICByZXR1cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPigKICAg
ICAgICAgICAgICAgICBfX2xhc3QsCiAgICAgICAgICAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0
ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmly
c3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl
c3VsdCkgewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQs
IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0
ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Np
emUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJ
dGVyPgp1bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291
bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewogIHJldHVy
biBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkp
Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZv
aWQKX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9f
dHJ1ZV90eXBlKQp7CiAgZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4Kdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9h
dXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJ
dGVyIF9fY3VyID0gX19maXJzdDsKIHsKICAgIGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyArK19f
Y3VyKQogICAgICBjb25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICB9CjsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgdm9pZCBfX3Vu
aW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gsIF9UcDEq
KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBf
SXNfUE9EOwogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwg
X0lzX1BPRCgpKTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4K
aW5saW5lIHZvaWQgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgX191bmluaXRpYWxpemVk
X2ZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCgoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5s
aW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9feCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4K
X0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194
LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogewogICAg
Zm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgY29uc3RydWN0KCYqX19jdXIs
IF9feCk7CiAgICByZXR1cm4gX19jdXI7CiAgfQo7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CmlubGluZSBfRm9yd2Fy
ZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUg
X19uLCBjb25zdCBfVHAmIF9feCwgX1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90
cmFpdHM8X1RwMT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXpl
ZF9maWxsX25fYXV4KF9fZmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgppbmxpbmUgX0Zvcndh
cmRJdGVyCnVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBf
X24sIGNvbnN0IF9UcCYgX194KQp7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX24oX19m
aXJzdCwgX19uLCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KIyAyMjggIi91c3IvaW5j
bHVkZS9nKystMy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3
YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf
SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIF9Gb3J3YXJkSXRlciBfX21pZCA9IHVuaW5pdGlh
bGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogewogICAgcmV0dXJuIHVu
aW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOwogIH0KOwp9CgoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9JbnB1dEl0ZXI+
CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0
ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfVHAmIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQp7CiAgdW5pbml0aWFsaXplZF9maWxsKF9fcmVzdWx0
LCBfX21pZCwgX194KTsKIHsKICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwg
X19sYXN0LCBfX21pZCk7CiAgfQo7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxpemVk
X2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIg
X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIF9G
b3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEs
IF9fZmlyc3QyKTsKIHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX21pZDIsIF9fbGFzdDIsIF9f
eCk7CiAgfQo7Cn0KCiMgMzQgIi91c3IvaW5jbHVkZS9nKystMy92ZWN0b3IiIDIgMwoKIyAzNCAi
L3Vzci9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIgMSAzCiMgNTAgIi91c3IvaW5jbHVkZS9n
KystMy9zdGxfdmVjdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRv
ciwgYm9vbCBfSXNTdGF0aWM+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0
eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9y
X3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxv
Y2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICBfVmVjdG9yX2Fs
bG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0
b3IoX19hKSwgX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkK
ICB7fQoKcHJvdGVjdGVkOgogIGFsbG9jYXRvcl90eXBlIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9U
cCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsK
CiAgX1RwKiBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01fZGF0YV9hbGxv
Y2F0b3IuYWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6
ZV90IF9fbikKICAgIHsgaWYgKF9fcCkgX01fZGF0YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3As
IF9fbik7IH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY2xh
c3MgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRv
cl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxs
b2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfVmVjdG9yX2Fs
bG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgwKSwgX01fZmlu
aXNoKDApLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKQogIHt9Cgpwcm90ZWN0ZWQ6CiAgX1RwKiBfTV9z
dGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2VuZF9vZl9zdG9yYWdlOwoKICB0eXBl
ZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUg
X0FsbG9jX3R5cGU7CiAgX1RwKiBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4g
X0FsbG9jX3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBf
X3AsIHNpemVfdCBfX24pCiAgICB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgX19uKTt9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfVmVjdG9yX2Jh
c2UKICA6IHB1YmxpYyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5j
ZWxlc3M+CnsKICB0eXBlZGVmIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5z
dGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxs
b2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9WZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0
b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICBfVmVjdG9yX2Jhc2Uoc2l6ZV90IF9fbiwg
Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHsKICAgIF9NX3N0YXJ0ID0g
X01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0OwogICAgX01fZW5kX29m
X3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICB9CgogIH5fVmVjdG9yX2Jhc2UoKSB7IF9NX2Rl
YWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOyB9Cn07Cgoj
IDE1MiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CmNsYXNzIHZlY3RvciA6IHByb3Rl
Y3RlZCBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+CnsKcHJpdmF0ZToKICB0eXBlZGVmIF9WZWN0
b3JfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVmIF9UcCB2YWx1ZV90
eXBlOwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVl
X3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBpdGVyYXRvcjsKICB0
eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVf
dHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJl
bmNlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm
ZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFs
bG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJl
dHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0
b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZl
cnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKCgoKCgoKcHJvdGVjdGVk
OgoKICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2RlYWxsb2Nh
dGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX3N0YXJ0OwogIHVzaW5nIF9CYXNlOjpfTV9maW5pc2g7CiAg
dXNpbmcgX0Jhc2U6Ol9NX2VuZF9vZl9zdG9yYWdlOwoKCnByb3RlY3RlZDoKICB2b2lkIF9NX2lu
c2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgX01f
aW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uKTsKCnB1YmxpYzoKICBpdGVyYXRvciBiZWdp
bigpIHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBfTV9zdGFydDsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsg
fQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQoKICBy
ZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVu
ZCgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0
dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciBy
ZW5kKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcihiZWdpbigpKTsgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVy
biBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNv
bnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KICBzaXplX3R5
cGUgY2FwYWNpdHkoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9y
YWdlIC0gYmVnaW4oKSk7IH0KICBib29sIGVtcHR5KCkgY29uc3QKICAgIHsgcmV0dXJuIGJlZ2lu
KCkgPT0gZW5kKCk7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgeyBy
ZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNp
emVfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KCiAgZXhwbGlj
aXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQog
ICAgOiBfQmFzZShfX2EpIHt9CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9f
dmFsdWUsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlw
ZSgpKQogICAgOiBfQmFzZShfX24sIF9fYSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXpl
ZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGljaXQgdmVjdG9yKHNp
emVfdHlwZSBfX24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01f
ZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9Cgog
IHZlY3Rvcihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgICA6IF9CYXNlKF9feC5z
aXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6
ZWRfY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7IH0KCgoKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f
YSA9IGFsbG9jYXRvcl90eXBlKCkpIDogX0Jhc2UoX19hKSB7CiAgICB0eXBlZGVmIHR5cGVuYW1l
IF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9N
X2luaXRpYWxpemVfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVt
cGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0ludGVnZXIg
X19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3RydWVfdHlwZSkgewogICAgX01fc3RhcnQgPSBfTV9h
bGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAg
IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUp
OwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlh
bGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbml0
aWFsaXplKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAg
fQoKCgoKCgoKCiAgfnZlY3RvcigpIHsgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsgfQoK
ICB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9j
PiYgX194KTsKICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikgewogICAgaWYgKGNhcGFjaXR5
KCkgPCBfX24pIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAg
ICAgIGl0ZXJhdG9yIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwg
X01fZmluaXNoKTsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01f
ZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAg
IF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2ZpbmlzaCA9IF9fdG1wICsgX19vbGRfc2l6ZTsK
ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIH0KICB9CgoKCgoK
CiAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgoKCiAgdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBf
SXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9h
c3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIg
X19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICB7IGFzc2lnbigoc2l6ZV90eXBl
KSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICB2
b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBf
X2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf
dGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9hc3Np
Z25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCgoKICByZWZlcmVu
Y2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgp
IGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAq
KGVuZCgpIC0gMSk7IH0KICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICoo
ZW5kKCkgLSAxKTsgfQoKICB2b2lkIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkgewogICAgaWYg
KF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICBjb25zdHJ1Y3QoX01fZmlu
aXNoLCBfX3gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5z
ZXJ0X2F1eChlbmQoKSwgX194KTsKICB9CiAgdm9pZCBwdXNoX2JhY2soKSB7CiAgICBpZiAoX01f
ZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gp
OwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChl
bmQoKSk7CiAgfQogIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpIHsKOjpzd2Fw
KF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwo6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNo
KTsKOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogIH0K
CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KSB7
CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmlu
aXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAg
Y29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBl
bHNlCiAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgX194KTsKICAgIHJldHVybiBiZWdp
bigpICsgX19uOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikgewog
ICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2Zpbmlz
aCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNv
bnN0cnVjdChfTV9maW5pc2gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAg
ICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uKTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwog
IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVy
YXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0lu
dGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwg
X19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAg
dm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0lu
dGVnZXIgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAg
IGluc2VydChfX3BvcywgKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7CiAgfQoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRl
cmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9f
ZmFsc2VfdHlwZSkgewogICAgX01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3Qs
IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogIH0KCgoKCgogIHZvaWQgaW5zZXJ0IChp
dGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwoKICB2b2lkIHBv
cF9iYWNrKCkgewogICAgLS1fTV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgfQog
IGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIGlmIChfX3Bvc2l0aW9u
ICsgMSAhPSBlbmQoKSkKICAgICAgY29weShfX3Bvc2l0aW9uICsgMSwgX01fZmluaXNoLCBfX3Bv
c2l0aW9uKTsKICAgIC0tX01fZmluaXNoOwogICAgZGVzdHJveShfTV9maW5pc2gpOwogICAgcmV0
dXJuIF9fcG9zaXRpb247CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0
ZXJhdG9yIF9fbGFzdCkgewogICAgaXRlcmF0b3IgX19pID0gY29weShfX2xhc3QsIF9NX2Zpbmlz
aCwgX19maXJzdCk7CiAgICBkZXN0cm95KF9faSwgX01fZmluaXNoKTsKICAgIF9NX2ZpbmlzaCA9
IF9NX2ZpbmlzaCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBfX2ZpcnN0OwogIH0K
CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IF9UcCYgX194KSB7CiAg
ICBpZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkKICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbmV3X3Np
emUsIGVuZCgpKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6
ZSgpLCBfX3gpOwogIH0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkgeyByZXNp
emUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CiAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVnaW4oKSwg
ZW5kKCkpOyB9Cgpwcm90ZWN0ZWQ6CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv
cj4KICBpdGVyYXRvciBfTV9hbGxvY2F0ZV9hbmRfY29weShzaXplX3R5cGUgX19uLCBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCnsKICAgIGl0ZXJhdG9yIF9fcmVzdWx0
ID0gX01fYWxsb2NhdGUoX19uKTsKIHsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3Qs
IF9fbGFzdCwgX19yZXN1bHQpOwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CjsKICB9CiMg
NDQ0ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAzCiAgdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xh
c3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0
OyArK19fZmlyc3QpCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgfQoKCiAgdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3
YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogIHsKICAgIHNpemVfdHlwZSBf
X24gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAgX01fc3RhcnQg
PSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9f
bjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9N
X3N0YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9N
X3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgoK
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0
b3I9PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9B
bGxvYz4mIF9feSkKewogIHJldHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAg
ICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPChjb25zdCB2
ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkK
ewogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgp
KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3
YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsK
ICBfX3guc3dhcChfX3kpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
dmVjdG9yPF9UcCxfQWxsb2M+Jgp2ZWN0b3I8X1RwLF9BbGxvYz46Om9wZXJhdG9yPShjb25zdCB2
ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCnsKICBpZiAoJl9feCAhPSB0aGlzKSB7CiAgICBjb25z
dCBzaXplX3R5cGUgX194bGVuID0gX194LnNpemUoKTsKICAgIGlmIChfX3hsZW4gPiBjYXBhY2l0
eSgpKSB7CiAgICAgIGl0ZXJhdG9yIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVu
LCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmlu
aXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBf
TV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdl
ID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9CiAgICBlbHNlIGlmIChzaXplKCkgPj0gX194bGVu
KSB7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVn
aW4oKSk7CiAgICAgIGRlc3Ryb3koX19pLCBfTV9maW5pc2gpOwogICAgfQogICAgZWxzZSB7CiAg
ICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5iZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7CiAg
ICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4oKSArIHNpemUoKSwgX194LmVuZCgpLCBf
TV9maW5pc2gpOwogICAgfQogICAgX01fZmluaXNoID0gX01fc3RhcnQgKyBfX3hsZW47CiAgfQog
IHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lk
IHZlY3RvcjxfVHAsIF9BbGxvYz46OmFzc2lnbihzaXplX3QgX19uLCBjb25zdCB2YWx1ZV90eXBl
JiBfX3ZhbCkgewogIGlmIChfX24gPiBjYXBhY2l0eSgpKSB7CiAgICB2ZWN0b3I8X1RwLCBfQWxs
b2M+IF9fdG1wKF9fbiwgX192YWwsIGdldF9hbGxvY2F0b3IoKSk7CiAgICBfX3RtcC5zd2FwKCp0
aGlzKTsKICB9CiAgZWxzZSBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICBmaWxsKGJlZ2luKCksIGVu
ZCgpLCBfX3ZhbCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9maW5p
c2gsIF9fbiAtIHNpemUoKSwgX192YWwpOwogIH0KICBlbHNlCiAgICBlcmFzZShmaWxsX24oYmVn
aW4oKSwgX19uLCBfX3ZhbCksIGVuZCgpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkIHZlY3RvcjxfVHAsIF9B
bGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y
X3RhZykgewogIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsKICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAgICAqX19jdXIg
PSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFzZShfX2N1ciwgZW5k
KCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
Pgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5cGUgX19sZW4gPSAwOwogIGRp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwoKICBpZiAoX19sZW4gPiBjYXBhY2l0eSgp
KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBfX2Zp
cnN0LCBfX2xhc3QpOwogICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgIF9NX2Rl
YWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01f
c3RhcnQgPSBfX3RtcDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fZmluaXNoID0gX01fc3Rh
cnQgKyBfX2xlbjsKICB9CiAgZWxzZSBpZiAoc2l6ZSgpID49IF9fbGVuKSB7CiAgICBpdGVyYXRv
ciBfX25ld19maW5pc2ggPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogICAgZGVz
dHJveShfX25ld19maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5p
c2g7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJzdDsKICAgIGFk
dmFuY2UoX19taWQsIHNpemUoKSk7CiAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfTV9zdGFydCk7
CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmlu
aXNoKTsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCnZl
Y3RvcjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29u
c3QgX1RwJiBfX3gpCnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAg
ICBjb25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNo
OwogICAgX1RwIF9feF9jb3B5ID0gX194OwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBf
TV9maW5pc2ggLSAyLCBfTV9maW5pc2ggLSAxKTsKICAgICpfX3Bvc2l0aW9uID0gX194X2NvcHk7
CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAg
ICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6
ZSA6IDE7CiAgICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsKICAg
IGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogewogICAgICBfX25ld19maW5p
c2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0
KTsKICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaCwgX194KTsKICAgICAgKytfX25ld19maW5p
c2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBf
TV9maW5pc2gsIF9fbmV3X2ZpbmlzaCk7CiAgICB9Cgo7CiAgICBkZXN0cm95KGJlZ2luKCksIGVu
ZCgpKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01f
c3RhcnQpOwogICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3
X2ZpbmlzaDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZAp2ZWN0b3I8X1RwLCBf
QWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pCnsKICBpZiAoX01fZmlu
aXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCAqKF9N
X2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0
aW9uLCBfTV9maW5pc2ggLSAyLCBfTV9maW5pc2ggLSAxKTsKICAgICpfX3Bvc2l0aW9uID0gX1Rw
KCk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7
CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRf
c2l6ZSA6IDE7CiAgICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsK
ICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogewogICAgICBfX25ld19m
aW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0
YXJ0KTsKICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaCk7CiAgICAgICsrX19uZXdfZmluaXNo
OwogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX01f
ZmluaXNoLCBfX25ld19maW5pc2gpOwogICAgfQoKOwogICAgZGVzdHJveShiZWdpbigpLCBlbmQo
KSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0
YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19m
aW5pc2g7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0Fs
bG9jPjo6aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9fbiAhPSAw
KSB7CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBf
X24pIHsKICAgICAgX1RwIF9feF9jb3B5ID0gX194OwogICAgICBjb25zdCBzaXplX3R5cGUgX19l
bGVtc19hZnRlciA9IF9NX2ZpbmlzaCAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xk
X2ZpbmlzaCA9IF9NX2ZpbmlzaDsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAg
ICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2Zp
bmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9f
cG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBmaWxs
KF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBfX24sIF9feF9jb3B5KTsKICAgICAgfQogICAgICBl
bHNlIHsKICAgICAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIF9fZWxl
bXNfYWZ0ZXIsIF9feF9jb3B5KTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19h
ZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRfZmluaXNo
LCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwogICAgICAg
IGZpbGwoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfX3hfY29weSk7CiAgICAgIH0KICAgIH0K
ICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAg
ICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBf
X24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsKICAg
ICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiB7CiAgICAgICAgX19uZXdf
ZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25ld19z
dGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX19uZXdf
ZmluaXNoLCBfX24sIF9feCk7CiAgICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5p
dGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3X2ZpbmlzaCk7CiAgICAg
IH0KCjsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxv
Y2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0
YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAg
X01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogICAgfQogIH0KfQoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRlcmF0
b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
YXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5w
dXRfaXRlcmF0b3JfdGFnKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
KSB7CiAgICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgKytfX3BvczsKICB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcmF0b3I+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0
KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QgIT0gX19s
YXN0KSB7CiAgICBzaXplX3R5cGUgX19uID0gMDsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFz
dCwgX19uKTsKICAgIGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2gp
ID49IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IF9NX2Zpbmlz
aCAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaCA9IF9NX2ZpbmlzaDsK
ICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRpYWxpemVkX2Nv
cHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmlu
aXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xkX2Zpbmlz
aCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19w
b3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBf
X21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgX19lbGVtc19hZnRlcik7CiAg
ICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAgICAg
ICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0aWFsaXpl
ZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9m
aW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfX3Bv
c2l0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
X29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9z
aXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0g
X01fYWxsb2NhdGUoX19sZW4pOwogICAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfX25ld19z
dGFydDsKIHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX01fc3Rh
cnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmlu
aXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX25ld19maW5pc2gpOwogICAgICAgIF9f
bmV3X2ZpbmlzaAogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX01f
ZmluaXNoLCBfX25ld19maW5pc2gpOwogICAgICB9Cgo7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQs
IF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9y
YWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgICBfTV9m
aW5pc2ggPSBfX25ld19maW5pc2g7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3Rh
cnQgKyBfX2xlbjsKICAgIH0KICB9Cn0KCiMgODE3ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX3Zl
Y3Rvci5oIiAzCiMgMzUgIi91c3IvaW5jbHVkZS9nKystMy92ZWN0b3IiIDIgMwoKIyAzNCAiL3Vz
ci9pbmNsdWRlL2crKy0zL3N0bF9idmVjdG9yLmgiIDEgMwoKCnN0YXRpYyBjb25zdCBpbnQgX19X
T1JEX0JJVCA9IGludCg4KnNpemVvZih1bnNpZ25lZCBpbnQpKTsKCgoKCgoKc3RydWN0IF9CaXRf
cmVmZXJlbmNlIHsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX21hc2s7
CiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAg
ICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHt9CgpwdWJsaWM6CiAgX0JpdF9yZWZlcmVuY2Uo
KSA6IF9NX3AoMCksIF9NX21hc2soMCkge30KICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gISghKCpfTV9wICYgX01fbWFzaykpOyB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShi
b29sIF9feCkKICB7CiAgICBpZiAoX194KSAqX01fcCB8PSBfTV9tYXNrOwogICAgZWxzZSAqX01f
cCAmPSB+X01fbWFzazsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX0JpdF9yZWZlcmVuY2UmIG9w
ZXJhdG9yPShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KQogICAgeyByZXR1cm4gKnRoaXMgPSBi
b29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPT0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkg
Y29uc3QKICAgIHsgcmV0dXJuIGJvb2woKnRoaXMpID09IGJvb2woX194KTsgfQogIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhYm9v
bCgqdGhpcykgJiYgYm9vbChfX3gpOwogIH0KICB2b2lkIGZsaXAoKSB7ICpfTV9wIF49IF9NX21h
c2s7IH0KfTsKCmlubGluZSB2b2lkIHN3YXAoX0JpdF9yZWZlcmVuY2UgX194LCBfQml0X3JlZmVy
ZW5jZSBfX3kpCnsKICBib29sIF9fdG1wID0gX194OwogIF9feCA9IF9feTsKICBfX3kgPSBfX3Rt
cDsKfQoKc3RydWN0IF9CaXRfaXRlcmF0b3IgOiBwdWJsaWMgcmFuZG9tX2FjY2Vzc19pdGVyYXRv
cjxib29sLCBwdHJkaWZmX3Q+IHsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsK
ICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9pdGVyYXRv
ciBpdGVyYXRvcjsKCiAgdW5zaWduZWQgaW50KiBfTV9wOwogIHVuc2lnbmVkIGludCBfTV9vZmZz
ZXQ7CiAgdm9pZCBidW1wX3VwKCkgewogICAgaWYgKF9NX29mZnNldCsrID09IF9fV09SRF9CSVQg
LSAxKSB7CiAgICAgIF9NX29mZnNldCA9IDA7CiAgICAgICsrX01fcDsKICAgIH0KICB9CiAgdm9p
ZCBidW1wX2Rvd24oKSB7CiAgICBpZiAoX01fb2Zmc2V0LS0gPT0gMCkgewogICAgICBfTV9vZmZz
ZXQgPSBfX1dPUkRfQklUIC0gMTsKICAgICAgLS1fTV9wOwogICAgfQogIH0KCiAgX0JpdF9pdGVy
YXRvcigpIDogX01fcCgwKSwgX01fb2Zmc2V0KDApIHt9CiAgX0JpdF9pdGVyYXRvcih1bnNpZ25l
ZCBpbnQqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX01fcChfX3gpLCBfTV9vZmZzZXQo
X195KSB7fQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiByZWZlcmVuY2Uo
X01fcCwgMVUgPDwgX01fb2Zmc2V0KTsgfQogIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAg
YnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvcisrKGlu
dCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIGJ1bXBfdXAoKTsKICAgIHJldHVy
biBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBidW1wX2Rvd24oKTsK
ICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGl0
ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBidW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsK
ICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgZGlm
ZmVyZW5jZV90eXBlIF9fbiA9IF9faSArIF9NX29mZnNldDsKICAgIF9NX3AgKz0gX19uIC8gX19X
T1JEX0JJVDsKICAgIF9fbiA9IF9fbiAlIF9fV09SRF9CSVQ7CiAgICBpZiAoX19uIDwgMCkgewog
ICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX24gKyBfX1dPUkRfQklUOwogICAgICAt
LV9NX3A7CiAgICB9IGVsc2UKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uOwog
ICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5
cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVy
YXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0b3Ig
X190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQogIGl0ZXJhdG9yIG9w
ZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9
ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9CiAgZGlmZmVyZW5jZV90eXBlIG9w
ZXJhdG9yLShpdGVyYXRvciBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX1dPUkRfQklUICogKF9N
X3AgLSBfX3guX01fcCkgKyBfTV9vZmZzZXQgLSBfX3guX01fb2Zmc2V0OwogIH0KICByZWZlcmVu
Y2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7IHJldHVybiAqKCp0aGlzICsgX19p
KTsgfQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgX194KSBjb25zdCB7CiAgICBy
ZXR1cm4gX01fcCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQgPT0gX194Ll9NX29mZnNldDsKICB9
CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy
biBfTV9wICE9IF9feC5fTV9wIHx8IF9NX29mZnNldCAhPSBfX3guX01fb2Zmc2V0OwogIH0KICBi
b29sIG9wZXJhdG9yPChpdGVyYXRvciBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wIDwgX194
Ll9NX3AgfHwgKF9NX3AgPT0gX194Ll9NX3AgJiYgX01fb2Zmc2V0IDwgX194Ll9NX29mZnNldCk7
CiAgfQp9OwoKc3RydWN0IF9CaXRfY29uc3RfaXRlcmF0b3IKICA6IHB1YmxpYyByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4KewogIHR5cGVkZWYgYm9vbCByZWZlcmVuY2U7
CiAgdHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IGJvb2wqIHBv
aW50ZXI7CiAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICB1
bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX29mZnNldDsKICB2b2lkIGJ1bXBf
dXAoKSB7CiAgICBpZiAoX01fb2Zmc2V0KysgPT0gX19XT1JEX0JJVCAtIDEpIHsKICAgICAgX01f
b2Zmc2V0ID0gMDsKICAgICAgKytfTV9wOwogICAgfQogIH0KICB2b2lkIGJ1bXBfZG93bigpIHsK
ICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7CiAgICAgIF9NX29mZnNldCA9IF9fV09SRF9CSVQg
LSAxOwogICAgICAtLV9NX3A7CiAgICB9CiAgfQoKICBfQml0X2NvbnN0X2l0ZXJhdG9yKCkgOiBf
TV9wKDApLCBfTV9vZmZzZXQoMCkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKHVuc2lnbmVkIGlu
dCogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kp
IHt9CiAgX0JpdF9jb25zdF9pdGVyYXRvcihjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gpCiAgICA6
IF9NX3AoX194Ll9NX3ApLCBfTV9vZmZzZXQoX194Ll9NX29mZnNldCkge30KICBjb25zdF9yZWZl
cmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgcmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3As
IDFVIDw8IF9NX29mZnNldCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewog
ICAgYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVy
YXRvcisrKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIGJ1bXBf
dXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLS0o
KSB7CiAgICBidW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0
b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAg
ICBidW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9w
ZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9
IF9faSArIF9NX29mZnNldDsKICAgIF9NX3AgKz0gX19uIC8gX19XT1JEX0JJVDsKICAgIF9fbiA9
IF9fbiAlIF9fV09SRF9CSVQ7CiAgICBpZiAoX19uIDwgMCkgewogICAgICBfTV9vZmZzZXQgPSAo
dW5zaWduZWQgaW50KSBfX24gKyBfX1dPUkRfQklUOwogICAgICAtLV9NX3A7CiAgICB9IGVsc2UK
ICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uOwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAg
ICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBv
cGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3Ig
X190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQogIGNvbnN0X2l0ZXJh
dG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVy
YXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9CiAgZGlmZmVy
ZW5jZV90eXBlIG9wZXJhdG9yLShjb25zdF9pdGVyYXRvciBfX3gpIGNvbnN0IHsKICAgIHJldHVy
biBfX1dPUkRfQklUICogKF9NX3AgLSBfX3guX01fcCkgKyBfTV9vZmZzZXQgLSBfX3guX01fb2Zm
c2V0OwogIH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19p
KSB7CiAgICByZXR1cm4gKigqdGhpcyArIF9faSk7CiAgfQogIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBjb25zdF9pdGVyYXRvciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA9PSBfX3guX01f
cCAmJiBfTV9vZmZzZXQgPT0gX194Ll9NX29mZnNldDsKICB9CiAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IGNvbnN0X2l0ZXJhdG9yJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wICE9IF9feC5f
TV9wIHx8IF9NX29mZnNldCAhPSBfX3guX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yPChj
b25zdF9pdGVyYXRvciBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wIDwgX194Ll9NX3AgfHwg
KF9NX3AgPT0gX194Ll9NX3AgJiYgX01fb2Zmc2V0IDwgX194Ll9NX29mZnNldCk7CiAgfQp9OwoK
CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX19pc19zdGF0aWM+CmNsYXNz
IF9CdmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2Nf
dHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2Nh
dG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
IF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2Nh
dG9yX3R5cGUmIF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0b3IoX19hKSwgX01fc3RhcnQoKSwg
X01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdW5zaWdu
ZWQgaW50KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxs
b2NhdG9yLmFsbG9jYXRlKChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVCk7IH0KICB2
b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fcCkKICAgICAgX01fZGF0
YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfQoK
ICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPHVuc2lnbmVkIGludCwgX0FsbG9jYXRvcj46OmFsbG9j
YXRvcl90eXBlCiAgICAgICAgICBfTV9kYXRhX2FsbG9jYXRvcjsKICBfQml0X2l0ZXJhdG9yIF9N
X3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIHVuc2lnbmVkIGludCogX01fZW5k
X29mX3N0b3JhZ2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9CdmVj
dG9yX2FsbG9jX2Jhc2U8X0FsbG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBl
bmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAg
ICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNv
bnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShj
b25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9l
bmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVkOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j
X3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAg
X0FsbG9jX3R5cGU7CgogIHVuc2lnbmVkIGludCogX01fYml0X2FsbG9jKHNpemVfdCBfX24pCiAg
ICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9f
X1dPUkRfQklUKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5f
TV9wKQogICAgICBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3Ap
OwogIH0KCiAgX0JpdF9pdGVyYXRvciBfTV9zdGFydDsKICBfQml0X2l0ZXJhdG9yIF9NX2Zpbmlz
aDsKICB1bnNpZ25lZCBpbnQqIF9NX2VuZF9vZl9zdG9yYWdlOwp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9BbGxvYz4KY2xhc3MgX0J2ZWN0b3JfYmFzZQogIDogcHVibGljIF9CdmVjdG9yX2FsbG9jX2Jh
c2U8X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxi
b29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CnsKICB0eXBlZGVmIF9CdmVjdG9yX2FsbG9j
X2Jhc2U8X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRz
PGJvb2wsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwpwdWJsaWM6
CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7
CgogIF9CdmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2Ep
IHt9CiAgfl9CdmVjdG9yX2Jhc2UoKSB7IF9CYXNlOjpfTV9kZWFsbG9jYXRlKCk7IH0KfTsKCiMg
MzY0ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2J2ZWN0b3IuaCIgMwoKCgp0ZW1wbGF0ZTxjbGFz
cyBfQWxsb2M+IGNsYXNzIHZlY3Rvcjxib29sLF9BbGxvYz4KICA6IHB1YmxpYyBfQnZlY3Rvcl9i
YXNlPF9BbGxvYz4KCgoKCnsKCiAgdHlwZWRlZiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4gX0Jhc2U7
CgoKCnB1YmxpYzoKICB0eXBlZGVmIGJvb2wgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHNpemVfdCBz
aXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg
X0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7
CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IGJvb2wq
IGNvbnN0X3BvaW50ZXI7CgogIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKICB0eXBl
ZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgoKICB0eXBlZGVmIHJldmVy
c2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlw
ZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKCgoKCgoK
ICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsK
ICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6Omdl
dF9hbGxvY2F0b3IoKTsgfQoKcHJvdGVjdGVkOgojIDQxMyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0
bF9idmVjdG9yLmgiIDMKcHJvdGVjdGVkOgogIHZvaWQgX01faW5pdGlhbGl6ZShzaXplX3R5cGUg
X19uKSB7CiAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAgX01f
ZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7
CiAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFy
dCArIGRpZmZlcmVuY2VfdHlwZShfX24pOwogIH0KICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0
b3IgX19wb3NpdGlvbiwgYm9vbCBfX3gpIHsKICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9l
bmRfb2Zfc3RvcmFnZSkgewogICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9NX2Zpbmlz
aCwgX01fZmluaXNoICsgMSk7CiAgICAgICpfX3Bvc2l0aW9uID0gX194OwogICAgICArK19NX2Zp
bmlzaDsKICAgIH0KICAgIGVsc2UgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgPyAy
ICogc2l6ZSgpIDogX19XT1JEX0JJVDsKICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRf
YWxsb2MoX19sZW4pOwogICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRp
b24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAqX19pKysgPSBfX3g7CiAgICAgIF9NX2Zpbmlz
aCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgIF9NX2RlYWxsb2NhdGUoKTsK
ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0gMSkv
X19XT1JEX0JJVDsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgfQogIH0K
CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luaXRpYWxpemVf
cmFuZ2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIF9NX3N0YXJ0
ID0gaXRlcmF0b3IoKTsKICAgIF9NX2ZpbmlzaCA9IGl0ZXJhdG9yKCk7CiAgICBfTV9lbmRfb2Zf
c3RvcmFnZSA9IDA7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg
ICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvcj4KICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFu
Y2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3BvcywKICAgICAg
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAgICAgX19wb3MgPSBpbnNl
cnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICAgKytfX3BvczsKICAgIH0KICB9CgogIHRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9y
IF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3
YXJkX2l0ZXJhdG9yX3RhZykgewogICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgIHNp
emVfdHlwZSBfX24gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAg
ICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikgewogICAgICAgIGNvcHlfYmFja3dh
cmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsK
ICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAgICAgX01fZmlu
aXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAg
IHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAgICAgdW5z
aWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9yIF9f
aSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAg
X19pID0gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9faSk7CiAgICAgICAgX01fZmluaXNoID0gY29w
eShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAg
ICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19X
T1JEX0JJVDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0KICAg
IH0KICB9CgoKCnB1YmxpYzoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX3N0YXJ0OyB9
CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9zdGFydDsgfQogIGl0
ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigp
IHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVy
YXRvciByYmVnaW4oKSBjb25zdCB7CiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihl
bmQoKSk7CiAgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRl
cmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7
CiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKICB9CgogIHNpemVf
dHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0K
ICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAg
c2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QgewogICAgcmV0dXJuIHNpemVfdHlwZShjb25zdF9p
dGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSwgMCkgLSBiZWdpbigpKTsKICB9CiAgYm9vbCBlbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KICByZWZlcmVuY2Ugb3BlcmF0
b3JbXShzaXplX3R5cGUgX19uKSB7CiAgICByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90
eXBlKF9fbikpOwogIH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19u
KSBjb25zdCB7CiAgICByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwog
IH0KCiAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0
b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpIHt9CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBi
b29sIF9fdmFsdWUsCiAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxv
Y2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpCiAgewogICAgX01faW5pdGlhbGl6ZShfX24p
OwogICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX192YWx1ZSA/IH4w
IDogMCk7CiAgfQoKICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgIDogX0Jhc2Uo
YWxsb2NhdG9yX3R5cGUoKSkKICB7CiAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICBmaWxsKF9N
X3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsKICB9CgogIHZlY3Rvcihjb25zdCB2
ZWN0b3ImIF9feCkgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKSB7CiAgICBfTV9pbml0aWFs
aXplKF9feC5zaXplKCkpOwogICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFy
dCk7CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IoX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICBj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2Uo
X19hKQogIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+
OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0
LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4K
ICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gs
IF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICBmaWxsKF9NX3N0YXJ0
Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogIH0KCiAgdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgX01faW5pdGlhbGl6ZV9yYW5nZShf
X2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogIH0KIyA1ODkg
Ii91c3IvaW5jbHVkZS9nKystMy9zdGxfYnZlY3Rvci5oIiAzCiAgfnZlY3RvcigpIHsgfQoKICB2
ZWN0b3ImIG9wZXJhdG9yPShjb25zdCB2ZWN0b3ImIF9feCkgewogICAgaWYgKCZfX3ggPT0gdGhp
cykgcmV0dXJuICp0aGlzOwogICAgaWYgKF9feC5zaXplKCkgPiBjYXBhY2l0eSgpKSB7CiAgICAg
IF9NX2RlYWxsb2NhdGUoKTsKICAgICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgIH0K
ICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICBfTV9maW5pc2gg
PSBiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9feC5zaXplKCkpOwogICAgcmV0dXJuICp0aGlz
OwogIH0KCgoKCgoKICB2b2lkIGFzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgewogICAgaWYg
KF9fbiA+IHNpemUoKSkgewogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9y
YWdlLCBfX3ggPyB+MCA6IDApOwogICAgICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX194
KTsKICAgIH0KICAgIGVsc2UgewogICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7CiAg
ICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7
CiAgICB9CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGFz
c2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAg
IHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwg
X0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVn
cmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNzaWdu
X2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAg
eyBhc3NpZ24oKHNpemVfdCkgX19uLCAoYm9vbCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgX01fYXNzaWduX2F1eChf
X2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CgogIHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsKICAg
IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsr
X19maXJzdCkKICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpCiAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQo
KSwgX19maXJzdCwgX19sYXN0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh
dG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y
X3RhZykgewogICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9f
bGFzdCwgX19sZW4pOwogICAgaWYgKF9fbGVuIDwgc2l6ZSgpKQogICAgICBlcmFzZShjb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgYmVnaW4oKSksIGVuZCgpKTsKICAgIGVsc2UgewogICAgICBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsK
ICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgIGluc2VydChlbmQoKSwg
X19taWQsIF9fbGFzdCk7CiAgICB9CiAgfQoKCgogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19u
KSB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9
IF9NX2JpdF9hbGxvYyhfX24pOwogICAgICBfTV9maW5pc2ggPSBjb3B5KGJlZ2luKCksIGVuZCgp
LCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICBfTV9zdGFy
dCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9f
biArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgfQogIH0KCiAgcmVmZXJlbmNlIGZy
b250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25z
dCB7IHJldHVybiAqYmVnaW4oKTsgfQogIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQo
KSAtIDEpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgp
IC0gMSk7IH0KICB2b2lkIHB1c2hfYmFjayhib29sIF9feCkgewogICAgaWYgKF9NX2ZpbmlzaC5f
TV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKQogICAgICAqX01fZmluaXNoKysgPSBfX3g7CiAgICBl
bHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgfQogIHZvaWQgc3dhcCh2ZWN0
b3ImIF9feCkgewo6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7Cjo6c3dhcChfTV9maW5p
c2gsIF9feC5fTV9maW5pc2gpOwo6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRf
b2Zfc3RvcmFnZSk7CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBi
b29sIF9feCA9IGJvb2woKSkgewogICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9fcG9zaXRpb24g
LSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlICYm
IF9fcG9zaXRpb24gPT0gZW5kKCkpCiAgICAgICpfTV9maW5pc2grKyA9IF9feDsKICAgIGVsc2UK
ICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOwogICAgcmV0dXJuIGJlZ2luKCkg
KyBfX247CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGlu
c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf
aW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbnNl
cnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAg
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2go
aXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LAogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKSB7CiAgICBpbnNlcnQoX19wb3MsIChzaXplX3R5cGUp
IF9fbiwgKGJvb2wpIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgX01faW5zZXJ0
X3JhbmdlKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
dCkpOwogIH0KIyA3NjMgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYnZlY3Rvci5oIiAzCiAgdm9p
ZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsK
ICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOwogICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0g
X19uKSB7CiAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCAr
IGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9u
ICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7CiAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJl
bmNlX3R5cGUoX19uKTsKICAgIH0KICAgIGVsc2UgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBz
aXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2Jp
dF9hbGxvYyhfX2xlbik7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3Np
dGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgIGZpbGxfbihfX2ksIF9fbiwgX194KTsKICAg
ICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pICsgZGlmZmVyZW5jZV90
eXBlKF9fbikpOwogICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdl
ID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgIF9NX3N0
YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgIH0KICB9CgogIHZvaWQgcG9wX2JhY2soKSB7IC0t
X01fZmluaXNoOyB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAg
aWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBl
bmQoKSwgX19wb3NpdGlvbik7CiAgICAgIC0tX01fZmluaXNoOwogICAgcmV0dXJuIF9fcG9zaXRp
b247CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFz
dCkgewogICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KTsKICAgIHJl
dHVybiBfX2ZpcnN0OwogIH0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgYm9v
bCBfX3ggPSBib29sKCkpIHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAgICBlcmFz
ZShiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbmV3X3NpemUpLCBlbmQoKSk7CiAgICBlbHNl
CiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICB9CiAgdm9p
ZCBjbGVhcigpIHsgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9Cn07CgoKCnR5cGVkZWYgdmVjdG9y
PGJvb2wsIGFsbG9jPiBiaXRfdmVjdG9yOwoKIyA4MzIgIi91c3IvaW5jbHVkZS9nKystMy9zdGxf
YnZlY3Rvci5oIiAzCiMgMzYgIi91c3IvaW5jbHVkZS9nKystMy92ZWN0b3IiIDIgMwojIDI2ICJn
cHNfZGF0YS5oIiAyCgoKc3RydWN0IHBvc2l0aW9uCnsKICAgICAgICBkb3VibGUgbGF0OwogICAg
ICAgIGRvdWJsZSBsb247CiAgICAgICAgZmxvYXQgYWx0OwoKICAgICAgICBpbnQgaG91cjsKICAg
ICAgICBpbnQgbWluOwogICAgICAgIGludCBzZWM7CiAgICAgICAgcG9zaXRpb246OnBvc2l0aW9u
KHZvaWQpOwp9OwoKCgpzdHJ1Y3Qgd2F5cG9pbnQKewogICAgICAgIGRvdWJsZSBsYXQ7CiAgICAg
ICAgZG91YmxlIGxvbjsKICAgICAgICBmbG9hdCBhbHQ7CiAgICAgICAgc3RyaW5nIG5hbWU7CiAg
ICAgICAgc3RyaW5nIGNvbW1lbnQ7CiAgICAgICAgc3RyaW5nIHN5bWJvbDsKICAgICAgICBzdHJp
bmcgZGlzcGxheV9vcHRpb247CgogICAgICAgIGJvb2wgc3RhdHVzOwoKICAgICAgICB3YXlwb2lu
dDo6d2F5cG9pbnQodm9pZCk7CiAgICAgICAgdm9pZCBjbGVhcih2b2lkKTsKfTsKCnR5cGVkZWYg
dmVjdG9yPHdheXBvaW50PiB3YXlwb2ludHM7CgoKCnN0cnVjdCByb3V0ZQp7CiAgICAgICAgaW50
IG51bWJlcjsKICAgICAgICBzdHJpbmcgbmFtZTsKCiAgICAgICAgdmVjdG9yPHdheXBvaW50PiBy
cDsKCiAgICAgICAgcm91dGU6OnJvdXRlKHZvaWQpOwogICAgICAgIHZvaWQgcm91dGU6OmNsZWFy
KHZvaWQpOwp9OwoKCnR5cGVkZWYgdmVjdG9yPHJvdXRlPiByb3V0ZXM7CgoKCnN0cnVjdCB0cmFj
a3BvaW50CnsKICAgICAgICBkb3VibGUgbGF0OwogICAgICAgIGRvdWJsZSBsb247CiAgICAgICAg
ZmxvYXQgYWx0OwogICAgICAgIGxvbmcgdW5peHRpbWU7CiAgICAgICAgYm9vbCBuZXdfc2VnbWVu
dDsKfTsKCgpzdHJ1Y3QgdHJhY2sKewogICAgICAgIHN0cmluZyBuYW1lOwogICAgICAgIGludCBu
dW1iZXI7CgogICAgICAgIHZlY3Rvcjx0cmFja3BvaW50PiB0cDsKfTsKCnR5cGVkZWYgdmVjdG9y
PHRyYWNrPiB0cmFja3M7CgojIDI0ICJmaWxlX2lvLmgiIDIKCgojIDI4ICIvdXNyL2luY2x1ZGUv
ZysrLTMvZnN0cmVhbS5oIiAxIDMKI3ByYWdtYSBpbnRlcmZhY2UKIyAyOCAiL3Vzci9pbmNsdWRl
L2crKy0zL2ZzdHJlYW0uaCIgMwoKCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgZnN0cmVhbWJhc2Ug
OiB2aXJ0dWFsIHB1YmxpYyBpb3MgewoKICAgIG11dGFibGUgZmlsZWJ1ZiBfX215X2ZiOwoKICAg
IHZvaWQgX19mYl9pbml0ICgpOwogIHB1YmxpYzoKICAgIGZzdHJlYW1iYXNlKCk7CiAgICBmc3Ry
ZWFtYmFzZShpbnQgZmQpOwogICAgZnN0cmVhbWJhc2UoaW50IGZkLCBjaGFyICpwLCBpbnQgbCk7
CiAgICBmc3RyZWFtYmFzZShjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZSwgaW50IHByb3Q9MDY2
NCk7CiAgICB2b2lkIGNsb3NlKCk7CgogICAgZmlsZWJ1ZiogcmRidWYoKSBjb25zdCB7IHJldHVy
biAmX19teV9mYjsgfQoKCgogICAgdm9pZCBvcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2Rl
LCBpbnQgcHJvdD0wNjY0KTsKICAgIGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4gcmRidWYo
KS0+aXNfb3BlbigpOyB9CiAgICB2b2lkIHNldGJ1ZihjaGFyICpwdHIsIGludCBsZW4pIHsgcmRi
dWYoKS0+c2V0YnVmKHB0ciwgbGVuKTsgfQogICAgdm9pZCBhdHRhY2goaW50IGZkKTsKCgoKCn07
CgpjbGFzcyBpZnN0cmVhbSA6IHB1YmxpYyBmc3RyZWFtYmFzZSwgcHVibGljIGlzdHJlYW0gewog
IHB1YmxpYzoKICAgIGlmc3RyZWFtKCkgOiBmc3RyZWFtYmFzZSgpIHsgfQogICAgaWZzdHJlYW0o
aW50IGZkKSA6IGZzdHJlYW1iYXNlKGZkKSB7IH0KICAgIGlmc3RyZWFtKGludCBmZCwgY2hhciAq
cCwgaW50IGwpIDogZnN0cmVhbWJhc2UoZmQsIHAsIGwpIHsgfQogICAgaWZzdHJlYW0oY29uc3Qg
Y2hhciAqbmFtZSwgaW50IG1vZGU9aW9zOjppbiwgaW50IHByb3Q9MDY2NCkKICAgICAgICA6IGZz
dHJlYW1iYXNlKG5hbWUsIG1vZGUgfCBpb3M6OmluLCBwcm90KSB7IH0KICAgIHZvaWQgb3Blbihj
b25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZT1pb3M6OmluLCBpbnQgcHJvdD0wNjY0KQogICAgICAg
IHsgZnN0cmVhbWJhc2U6Om9wZW4obmFtZSwgbW9kZSB8IGlvczo6aW4sIHByb3QpOyB9Cn07Cgpj
bGFzcyBvZnN0cmVhbSA6IHB1YmxpYyBmc3RyZWFtYmFzZSwgcHVibGljIG9zdHJlYW0gewogIHB1
YmxpYzoKICAgIG9mc3RyZWFtKCkgOiBmc3RyZWFtYmFzZSgpIHsgfQogICAgb2ZzdHJlYW0oaW50
IGZkKSA6IGZzdHJlYW1iYXNlKGZkKSB7IH0KICAgIG9mc3RyZWFtKGludCBmZCwgY2hhciAqcCwg
aW50IGwpIDogZnN0cmVhbWJhc2UoZmQsIHAsIGwpIHsgfQogICAgb2ZzdHJlYW0oY29uc3QgY2hh
ciAqbmFtZSwgaW50IG1vZGU9aW9zOjpvdXQsIGludCBwcm90PTA2NjQpCiAgICAgICAgOiBmc3Ry
ZWFtYmFzZShuYW1lLCBtb2RlIHwgaW9zOjpvdXQsIHByb3QpIHsgfQogICAgdm9pZCBvcGVuKGNv
bnN0IGNoYXIgKm5hbWUsIGludCBtb2RlPWlvczo6b3V0LCBpbnQgcHJvdD0wNjY0KQogICAgICAg
IHsgZnN0cmVhbWJhc2U6Om9wZW4obmFtZSwgbW9kZSB8IGlvczo6b3V0LCBwcm90KTsgfQp9OwoK
Y2xhc3MgZnN0cmVhbSA6IHB1YmxpYyBmc3RyZWFtYmFzZSwgcHVibGljIGlvc3RyZWFtIHsKICBw
dWJsaWM6CiAgICBmc3RyZWFtKCkgOiBmc3RyZWFtYmFzZSgpIHsgfQogICAgZnN0cmVhbShpbnQg
ZmQpIDogZnN0cmVhbWJhc2UoZmQpIHsgfQogICAgZnN0cmVhbShjb25zdCBjaGFyICpuYW1lLCBp
bnQgbW9kZSwgaW50IHByb3Q9MDY2NCkKICAgICAgICA6IGZzdHJlYW1iYXNlKG5hbWUsIG1vZGUs
IHByb3QpIHsgfQogICAgZnN0cmVhbShpbnQgZmQsIGNoYXIgKnAsIGludCBsKSA6IGZzdHJlYW1i
YXNlKGZkLCBwLCBsKSB7IH0KICAgIHZvaWQgb3Blbihjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9k
ZSwgaW50IHByb3Q9MDY2NCkKICAgICAgICB7IGZzdHJlYW1iYXNlOjpvcGVuKG5hbWUsIG1vZGUs
IHByb3QpOyB9Cn07Cn0KIyAyNiAiZmlsZV9pby5oIiAyCgojIDI3ICIvdXNyL2luY2x1ZGUvZysr
LTMvaW9tYW5pcC5oIiAxIDMKI3ByYWdtYSBpbnRlcmZhY2UKIyAyNyAiL3Vzci9pbmNsdWRlL2cr
Ky0zL2lvbWFuaXAuaCIgMwoKCgoKCgpleHRlcm4gIkMrKyIgewojIDQyICIvdXNyL2luY2x1ZGUv
ZysrLTMvaW9tYW5pcC5oIiAzCnRlbXBsYXRlPGNsYXNzIFRQPiBjbGFzcyBzbWFuaXA7Cgp0ZW1w
bGF0ZTxjbGFzcyBUUD4gY2xhc3Mgc2FwcCB7CiAgICBpb3MmICgqX2YpKGlvcyYsIFRQKTsKcHVi
bGljOgogICAgc2FwcChpb3MmICgqZikoaW9zJiwgVFApKSA6IF9mKGYpIHt9CgogICAgc21hbmlw
PFRQPiBvcGVyYXRvcigpKFRQIGEpCiAgICAgIHsgcmV0dXJuIHNtYW5pcDxUUD4oX2YsIGEpOyB9
Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUUD4KaW5saW5lIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVh
bSYgaSwgY29uc3Qgc21hbmlwPFRQPiYgbSk7CnRlbXBsYXRlPGNsYXNzIFRQPgppbmxpbmUgb3N0
cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvLCBjb25zdCBzbWFuaXA8VFA+JiBtKTsKCnRlbXBs
YXRlIDxjbGFzcyBUUD4gY2xhc3Mgc21hbmlwIHsKICAgIGlvcyYgKCpfZikoaW9zJiwgVFApOwog
ICAgVFAgX2E7CnB1YmxpYzoKICAgIHNtYW5pcChpb3MmICgqZikoaW9zJiwgVFApLCBUUCBhKSA6
IF9mKGYpLCBfYShhKSB7fQoKICAgIGZyaWVuZAogICAgICBpc3RyZWFtJiBvcGVyYXRvcj4+IDw+
KGlzdHJlYW0mIGksIGNvbnN0IHNtYW5pcDxUUD4mIG0pOwogICAgZnJpZW5kCiAgICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwgPD4ob3N0cmVhbSYgbywgY29uc3Qgc21hbmlwPFRQPiYgbSk7Cn07CgoK
X19leHRlbnNpb25fXyBleHRlcm4gdGVtcGxhdGUgY2xhc3Mgc21hbmlwPGludD47Cl9fZXh0ZW5z
aW9uX18gZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHNtYW5pcDxpb3M6OmZtdGZsYWdzPjsKCgp0ZW1w
bGF0ZTxjbGFzcyBUUD4KaW5saW5lIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYgaSwgY29u
c3Qgc21hbmlwPFRQPiYgbSkKeyAoKm0uX2YpKGksIG0uX2EpOyByZXR1cm4gaTsgfQoKdGVtcGxh
dGU8Y2xhc3MgVFA+CmlubGluZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG8sIGNvbnN0
IHNtYW5pcDxUUD4mIG0pCnsgKCptLl9mKShvLCBtLl9hKTsgcmV0dXJuIG87fQoKCl9fZXh0ZW5z
aW9uX18gZXh0ZXJuCnRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNvbnN0
IHNtYW5pcDxpbnQ+Jik7Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuCnRlbXBsYXRlIGlzdHJlYW0mIG9w
ZXJhdG9yPj4oaXN0cmVhbSYsIGNvbnN0IHNtYW5pcDxpb3M6OmZtdGZsYWdzPiYpOwpfX2V4dGVu
c2lvbl9fIGV4dGVybgp0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25z
dCBzbWFuaXA8aW50PiYpOwpfX2V4dGVuc2lvbl9fIGV4dGVybgp0ZW1wbGF0ZSBvc3RyZWFtJiBv
cGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBzbWFuaXA8aW9zOjpmbXRmbGFncz4mKTsKCgoKCgoK
dGVtcGxhdGU8Y2xhc3MgVFA+IGNsYXNzIGltYW5pcDsKCnRlbXBsYXRlPGNsYXNzIFRQPiBjbGFz
cyBpYXBwIHsKICAgIGlzdHJlYW0mICgqX2YpKGlzdHJlYW0mLCBUUCk7CnB1YmxpYzoKICAgIGlh
cHAoaXN0cmVhbSYgKCpmKShpc3RyZWFtJixUUCkpIDogX2YoZikge30KCiAgICBpbWFuaXA8VFA+
IG9wZXJhdG9yKCkoVFAgYSkKICAgICAgIHsgcmV0dXJuIGltYW5pcDxUUD4oX2YsIGEpOyB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVFA+CmlubGluZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0m
LCBjb25zdCBpbWFuaXA8VFA+Jik7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVFA+IGNsYXNzIGltYW5pcCB7
CiAgICBpc3RyZWFtJiAoKl9mKShpc3RyZWFtJiwgVFApOwogICAgVFAgX2E7CnB1YmxpYzoKICAg
IGltYW5pcChpc3RyZWFtJiAoKmYpKGlzdHJlYW0mLCBUUCksIFRQIGEpIDogX2YoZiksIF9hKGEp
IHt9CgogICAgZnJpZW5kCiAgICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4gPD4oaXN0cmVhbSYgaSwg
Y29uc3QgaW1hbmlwPFRQPiYgbSk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVFA+CmlubGluZSBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mIGksIGNvbnN0IGltYW5pcDxUUD4mIG0pCnsgcmV0dXJu
ICgqbS5fZikoIGksIG0uX2EpOyB9CgoKCgoKdGVtcGxhdGU8Y2xhc3MgVFA+IGNsYXNzIG9tYW5p
cDsKCnRlbXBsYXRlPGNsYXNzIFRQPiBjbGFzcyBvYXBwIHsKICAgIG9zdHJlYW0mICgqX2YpKG9z
dHJlYW0mLCBUUCk7CnB1YmxpYzoKICAgIG9hcHAob3N0cmVhbSYgKCpmKShvc3RyZWFtJixUUCkp
IDogX2YoZikge30KCiAgICBvbWFuaXA8VFA+IG9wZXJhdG9yKCkoVFAgYSkKICAgICAgeyByZXR1
cm4gb21hbmlwPFRQPihfZiwgYSk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4KaW5saW5lIG9z
dHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IG9tYW5pcDxUUD4mKTsKCnRlbXBsYXRl
IDxjbGFzcyBUUD4gY2xhc3Mgb21hbmlwIHsKICAgIG9zdHJlYW0mICgqX2YpKG9zdHJlYW0mLCBU
UCk7CiAgICBUUCBfYTsKcHVibGljOgogICAgb21hbmlwKG9zdHJlYW0mICgqZikob3N0cmVhbSYs
IFRQKSwgVFAgYSkgOiBfZihmKSwgX2EoYSkge30KCiAgICBmcmllbmQKICAgICAgb3N0cmVhbSYg
b3BlcmF0b3I8PCA8Pihvc3RyZWFtJiBvLCBjb25zdCBvbWFuaXA8VFA+JiBtKTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBUUD4KaW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgbywgY29u
c3Qgb21hbmlwPFRQPiYgbSkKeyByZXR1cm4gKCptLl9mKShvLCBtLl9hKTsgfQojIDE2NiAiL3Vz
ci9pbmNsdWRlL2crKy0zL2lvbWFuaXAuaCIgMwoKCgoKCmV4dGVybiBpb3MmIF9faW9tYW5pcF9z
ZXRiYXNlIChpb3MmLCBpbnQpOyBpbmxpbmUgc21hbmlwPGludD4gc2V0YmFzZSAoaW50IG4pIHsg
cmV0dXJuIHNtYW5pcDxpbnQ+IChfX2lvbWFuaXBfc2V0YmFzZSwgbik7IH0KZXh0ZXJuIGlvcyYg
X19pb21hbmlwX3NldGZpbGwgKGlvcyYsIGludCk7IGlubGluZSBzbWFuaXA8aW50PiBzZXRmaWxs
IChpbnQgbikgeyByZXR1cm4gc21hbmlwPGludD4gKF9faW9tYW5pcF9zZXRmaWxsLCBuKTsgfQpl
eHRlcm4gaW9zJiBfX2lvbWFuaXBfc2V0cHJlY2lzaW9uIChpb3MmLCBpbnQpOyBpbmxpbmUgc21h
bmlwPGludD4gc2V0cHJlY2lzaW9uIChpbnQgbikgeyByZXR1cm4gc21hbmlwPGludD4gKF9faW9t
YW5pcF9zZXRwcmVjaXNpb24sIG4pOyB9CmV4dGVybiBpb3MmIF9faW9tYW5pcF9zZXR3IChpb3Mm
LCBpbnQpOyBpbmxpbmUgc21hbmlwPGludD4gc2V0dyAoaW50IG4pIHsgcmV0dXJuIHNtYW5pcDxp
bnQ+IChfX2lvbWFuaXBfc2V0dywgbik7IH0KCmV4dGVybiBpb3MmIF9faW9tYW5pcF9yZXNldGlv
c2ZsYWdzIChpb3MmLCBpb3M6OmZtdGZsYWdzKTsgaW5saW5lIHNtYW5pcDxpb3M6OmZtdGZsYWdz
PiByZXNldGlvc2ZsYWdzIChpb3M6OmZtdGZsYWdzIG4pIHsgcmV0dXJuIHNtYW5pcDxpb3M6OmZt
dGZsYWdzPiAoX19pb21hbmlwX3Jlc2V0aW9zZmxhZ3MsIG4pOyB9CmV4dGVybiBpb3MmIF9faW9t
YW5pcF9zZXRpb3NmbGFncyAoaW9zJiwgaW9zOjpmbXRmbGFncyk7IGlubGluZSBzbWFuaXA8aW9z
OjpmbXRmbGFncz4gc2V0aW9zZmxhZ3MgKGlvczo6Zm10ZmxhZ3MgbikgeyByZXR1cm4gc21hbmlw
PGlvczo6Zm10ZmxhZ3M+IChfX2lvbWFuaXBfc2V0aW9zZmxhZ3MsIG4pOyB9Cn0KCiMgMjcgImZp
bGVfaW8uaCIgMgoKCiMgMzAgIi91c3IvaW5jbHVkZS9nKystMy9zdHJzdHJlYW0uaCIgMSAzCiNw
cmFnbWEgaW50ZXJmYWNlCiMgMzAgIi91c3IvaW5jbHVkZS9nKystMy9zdHJzdHJlYW0uaCIgMwoK
CgoKIyAzOSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmZpbGUuaCIgMSAzCnR5cGVkZWYgdm9pZCAq
KCpfSU9fYWxsb2NfdHlwZSkgKHNpemVfdCk7CnR5cGVkZWYgdm9pZCAoKl9JT19mcmVlX3R5cGUp
ICh2b2lkKik7CgpzdHJ1Y3QgX0lPX3N0cl9maWVsZHMKewogIF9JT19hbGxvY190eXBlIF9hbGxv
Y2F0ZV9idWZmZXI7CiAgX0lPX2ZyZWVfdHlwZSBfZnJlZV9idWZmZXI7Cn07CgoKCgoKCnN0cnVj
dCBfSU9fc3RyZWFtYnVmCnsKICBzdHJ1Y3QgX0lPX0ZJTEUgX2Y7CiAgY29uc3Qgdm9pZCAqX3Z0
YWJsZTsKfTsKCnR5cGVkZWYgc3RydWN0IF9JT19zdHJmaWxlXwp7CiAgc3RydWN0IF9JT19zdHJl
YW1idWYgX3NiZjsKICBzdHJ1Y3QgX0lPX3N0cl9maWVsZHMgX3M7Cn0gX0lPX3N0cmZpbGU7CgoK
CiMgMzQgIi91c3IvaW5jbHVkZS9nKystMy9zdHJzdHJlYW0uaCIgMiAzCgpleHRlcm4gIkMrKyIg
ewpjbGFzcyBzdHJzdHJlYW1idWYgOiBwdWJsaWMgc3RyZWFtYnVmCnsKICBzdHJ1Y3QgX0lPX3N0
cl9maWVsZHMgX3M7CiAgZnJpZW5kIGNsYXNzIGlzdHJzdHJlYW07CgogICAgdm9pZCBpbml0X2R5
bmFtaWMoX0lPX2FsbG9jX3R5cGUgYWxsb2MsIF9JT19mcmVlX3R5cGUgZnJlZSwKICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbml0aWFsX3NpemUgPSAwKTsKICAgIHZvaWQgaW5pdF9zdGF0aWMo
Y2hhciAqcHRyLCBpbnQgc2l6ZSwgY2hhciAqcHN0YXJ0KTsKICAgIHZvaWQgaW5pdF9yZWFkb25s
eShjb25zdCBjaGFyICpwdHIsIGludCBzaXplKTsKICBwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIGlu
dCBvdmVyZmxvdyhpbnQgPSAoLTEpKTsKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOwogICAg
dmlydHVhbCBpbnQgcGJhY2tmYWlsKGludCBjKTsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5zdHJz
dHJlYW1idWYoKTsKICAgIHN0cnN0cmVhbWJ1ZigpIHsgaW5pdF9keW5hbWljKDAsIDApOyB9CiAg
ICBzdHJzdHJlYW1idWYoaW50IGluaXRpYWxfc2l6ZSkgeyBpbml0X2R5bmFtaWMoMCwgMCwgaW5p
dGlhbF9zaXplKTsgfQogICAgc3Ryc3RyZWFtYnVmKHZvaWQgKigqX19hbGxvYykoc2l6ZV90KSwg
dm9pZCAoKl9fZnJlZSkodm9pZCopKQogICAgICAgIHsgaW5pdF9keW5hbWljKF9fYWxsb2MsIF9f
ZnJlZSk7IH0KICAgIHN0cnN0cmVhbWJ1ZihjaGFyICpwdHIsIGludCBzaXplLCBjaGFyICpwc3Rh
cnQgPSBfX251bGwpCiAgICAgICAgeyBpbml0X3N0YXRpYyhwdHIsIHNpemUsIHBzdGFydCk7IH0K
ICAgIHN0cnN0cmVhbWJ1Zih1bnNpZ25lZCBjaGFyICpwdHIsIGludCBzaXplLCB1bnNpZ25lZCBj
aGFyICpwc3RhcnQgPSBfX251bGwpCiAgICAgICAgeyBpbml0X3N0YXRpYygoY2hhciopcHRyLCBz
aXplLCAoY2hhciopcHN0YXJ0KTsgfQogICAgc3Ryc3RyZWFtYnVmKGNvbnN0IGNoYXIgKnB0ciwg
aW50IHNpemUpCiAgICAgICAgeyBpbml0X3JlYWRvbmx5KHB0ciwgc2l6ZSk7IH0KICAgIHN0cnN0
cmVhbWJ1Zihjb25zdCB1bnNpZ25lZCBjaGFyICpwdHIsIGludCBzaXplKQogICAgICAgIHsgaW5p
dF9yZWFkb25seSgoY29uc3QgY2hhciopcHRyLCBzaXplKTsgfQogICAgc3Ryc3RyZWFtYnVmKHNp
Z25lZCBjaGFyICpwdHIsIGludCBzaXplLCBzaWduZWQgY2hhciAqcHN0YXJ0ID0gX19udWxsKQog
ICAgICAgIHsgaW5pdF9zdGF0aWMoKGNoYXIqKXB0ciwgc2l6ZSwgKGNoYXIqKXBzdGFydCk7IH0K
ICAgIHN0cnN0cmVhbWJ1Zihjb25zdCBzaWduZWQgY2hhciAqcHRyLCBpbnQgc2l6ZSkKICAgICAg
ICB7IGluaXRfcmVhZG9ubHkoKGNvbnN0IGNoYXIqKXB0ciwgc2l6ZSk7IH0KCiAgICBpbnQgZnJv
emVuKCkgeyByZXR1cm4gX2ZsYWdzICYgMSA/IDEgOiAwOyB9CiAgICB2b2lkIGZyZWV6ZShpbnQg
bj0xKQogICAgICAgIHsgaWYgKCgodGhpcyktPl9zLl9hbGxvY2F0ZV9idWZmZXIgIT0gKF9JT19h
bGxvY190eXBlKTApKQogICAgICAgICAgICB7IGlmIChuKSBfZmxhZ3MgfD0gMTsgZWxzZSBfZmxh
Z3MgJj0gfjE7IH0gfQogICAgX19zc2l6ZV90IHBjb3VudCgpOwogICAgY2hhciAqc3RyKCk7CiAg
ICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9k
ZT1pb3M6OmlufGlvczo6b3V0KTsKfTsKCmNsYXNzIHN0cnN0cmVhbWJhc2UgOiB2aXJ0dWFsIHB1
YmxpYyBpb3MgewogIHByb3RlY3RlZDoKICAgIHN0cnN0cmVhbWJ1ZiBfX215X3NiOwogIHB1Ymxp
YzoKICAgIHN0cnN0cmVhbWJ1ZiogcmRidWYoKSB7IHJldHVybiAmX19teV9zYjsgfQogIHByb3Rl
Y3RlZDoKICAgIHN0cnN0cmVhbWJhc2UoKSB7IGluaXQgKCZfX215X3NiKTsgfQogICAgc3Ryc3Ry
ZWFtYmFzZShjaGFyICpjcCwgaW50IG4sIGludCBtb2RlPWlvczo6b3V0KTsKfTsKCmNsYXNzIGlz
dHJzdHJlYW0gOiBwdWJsaWMgc3Ryc3RyZWFtYmFzZSwgcHVibGljIGlzdHJlYW0gewogIHB1Ymxp
YzoKICAgIGlzdHJzdHJlYW0oY29uc3QgY2hhciosIGludD0wKTsKfTsKCmNsYXNzIG9zdHJzdHJl
YW0gOiBwdWJsaWMgc3Ryc3RyZWFtYmFzZSwgcHVibGljIG9zdHJlYW0gewogIHB1YmxpYzoKICAg
IG9zdHJzdHJlYW0oKSB7IH0KICAgIG9zdHJzdHJlYW0oY2hhciAqY3AsIGludCBuLCBpbnQgbW9k
ZT1pb3M6Om91dCkgOnN0cnN0cmVhbWJhc2UoY3Asbixtb2RlKXt9CiAgICBfX3NzaXplX3QgcGNv
dW50KCkgeyByZXR1cm4gKChzdHJzdHJlYW1idWYqKV9zdHJidWYpLT5wY291bnQoKTsgfQogICAg
Y2hhciAqc3RyKCkgeyByZXR1cm4gKChzdHJzdHJlYW1idWYqKV9zdHJidWYpLT5zdHIoKTsgfQog
ICAgdm9pZCBmcmVlemUoaW50IG4gPSAxKSB7ICgoc3Ryc3RyZWFtYnVmKilfc3RyYnVmKS0+ZnJl
ZXplKG4pOyB9CiAgICBpbnQgZnJvemVuKCkgeyByZXR1cm4gKChzdHJzdHJlYW1idWYqKV9zdHJi
dWYpLT5mcm96ZW4oKTsgfQp9OwoKY2xhc3Mgc3Ryc3RyZWFtIDogcHVibGljIHN0cnN0cmVhbWJh
c2UsIHB1YmxpYyBpb3N0cmVhbSB7CiAgcHVibGljOgogIHN0cnN0cmVhbSgpIHsgfQogICAgc3Ry
c3RyZWFtKGNoYXIgKmNwLCBpbnQgbiwgaW50IG1vZGU9aW9zOjpvdXQpIDpzdHJzdHJlYW1iYXNl
KGNwLG4sbW9kZSl7fQogICAgX19zc2l6ZV90IHBjb3VudCgpIHsgcmV0dXJuICgoc3Ryc3RyZWFt
YnVmKilfc3RyYnVmKS0+cGNvdW50KCk7IH0KICAgIGNoYXIgKnN0cigpIHsgcmV0dXJuICgoc3Ry
c3RyZWFtYnVmKilfc3RyYnVmKS0+c3RyKCk7IH0KICAgIHZvaWQgZnJlZXplKGludCBuID0gMSkg
eyAoKHN0cnN0cmVhbWJ1ZiopX3N0cmJ1ZiktPmZyZWV6ZShuKTsgfQogICAgaW50IGZyb3plbigp
IHsgcmV0dXJuICgoc3Ryc3RyZWFtYnVmKilfc3RyYnVmKS0+ZnJvemVuKCk7IH0KfTsKfQoKIyAy
OSAiZmlsZV9pby5oIiAyCgoKCgoKIyAzMCAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAxIDMKCmV4
dGVybiAiQyIgewoKCgojIDUxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKc3RydWN0IGxjb252
CnsKCgogIGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgY2hhciAqdGhvdXNhbmRzX3NlcDsKCgoKCgog
IGNoYXIgKmdyb3VwaW5nOwoKCgoKCiAgY2hhciAqaW50X2N1cnJfc3ltYm9sOwogIGNoYXIgKmN1
cnJlbmN5X3N5bWJvbDsKICBjaGFyICptb25fZGVjaW1hbF9wb2ludDsKICBjaGFyICptb25fdGhv
dXNhbmRzX3NlcDsKICBjaGFyICptb25fZ3JvdXBpbmc7CiAgY2hhciAqcG9zaXRpdmVfc2lnbjsK
ICBjaGFyICpuZWdhdGl2ZV9zaWduOwogIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwogIGNoYXIgZnJh
Y19kaWdpdHM7CgogIGNoYXIgcF9jc19wcmVjZWRlczsKCiAgY2hhciBwX3NlcF9ieV9zcGFjZTsK
CiAgY2hhciBuX2NzX3ByZWNlZGVzOwoKICBjaGFyIG5fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNo
YXIgcF9zaWduX3Bvc247CiAgY2hhciBuX3NpZ25fcG9zbjsKCiAgY2hhciBpbnRfcF9jc19wcmVj
ZWRlczsKCiAgY2hhciBpbnRfcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgaW50X25fY3NfcHJlY2Vk
ZXM7CgogIGNoYXIgaW50X25fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgaW50X3Bfc2lnbl9w
b3NuOwogIGNoYXIgaW50X25fc2lnbl9wb3NuOwp9OwoKCgpleHRlcm4gY2hhciAqc2V0bG9jYWxl
IChpbnQgX19jYXRlZ29yeSwgX19jb25zdCBjaGFyICpfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIHN0cnVjdCBsY29udiAqbG9jYWxlY29udiAodm9pZCkgdGhyb3cgKCk7CgojIDE1MSAiL3Vz
ci9pbmNsdWRlL2xvY2FsZS5oIiAzCn0KCiMgMzQgImZpbGVfaW8uaCIgMgoKCmNsYXNzIGZpbGVf
aW8KewogICAgICAgIHByaXZhdGU6CgogICAgICAgICAgICAgICAgc3RyaW5nIGxpbmU7CgogICAg
ICAgICAgICAgICAgdm9pZCBnZXRsaW5lKGlmc3RyZWFtICopOwoKICAgICAgICAgICAgICAgIHN0
cmluZyBnZXQoc3RyaW5nIG4pIGNvbnN0OwoKICAgICAgICAgICAgICAgIGRvdWJsZSBzMmQoc3Ry
aW5nKSBjb25zdDsKCgogICAgICAgIHB1YmxpYzoKCgogICAgICAgICAgICAgICAgdm9pZCB3cml0
ZUhlYWRlcihvZnN0cmVhbSAqZm91dCk7CiAgICAgICAgICAgICAgICB2b2lkIHdyaXRlVHJhY2tz
X2Zvcl9tYXRsYWIodHJhY2tzICwgb2ZzdHJlYW0gKiApOwogICAgICAgICAgICAgICAgdm9pZCB3
cml0ZVdheXBvaW50cyh3YXlwb2ludHMgLCBvZnN0cmVhbSAqICk7CiAgICAgICAgICAgICAgICB2
b2lkIHdyaXRlUm91dGVzKHJvdXRlcyAsIG9mc3RyZWFtICogKTsKICAgICAgICAgICAgICAgIHZv
aWQgd3JpdGVUcmFja3ModHJhY2tzICwgb2ZzdHJlYW0gKiApOwoKICAgICAgICAgICAgICAgIHdh
eXBvaW50cyByZWFkV2F5cG9pbnRzKGlmc3RyZWFtICopOwogICAgICAgICAgICAgICAgcm91dGVz
IHJlYWRSb3V0ZXMoaWZzdHJlYW0gKik7CiAgICAgICAgICAgICAgICB0cmFja3MgcmVhZFRyYWNr
cyhpZnN0cmVhbSAqKTsKCiAgICAgICAgICAgICAgICBzdHJpbmcgZ2V0X2NvbmZpZyhzdHJpbmcp
Owp9OwoKCgojIDIyICJmaWxlX2lvLmNwcCIgMgpleHRlcm4gc3RyaW5nIGZpbGVuYW1lOwpleHRl
cm4gc3RyaW5nIGdwc0RldmljZUluZm87CmV4dGVybiBkb3VibGUgcHJvZ3JhbXZlcnNpb247CgoK
CgoKdm9pZCBmaWxlX2lvOjp3cml0ZUhlYWRlcihvZnN0cmVhbSAqZm91dCkKewoKCigqZm91dCkK
ICAgPDwgIiMiIDw8IGVuZGwKICAgPDwgIiMgIEdQU1BPSU5UIERBVEEgRklMRSIgPDwgZW5kbAog
ICA8PCAiI1x0Z3BzcG9pbnQgdmVyc2lvbjogIiA8PCBzZXRwcmVjaXNpb24oNykgPDwgcHJvZ3Jh
bXZlcnNpb24gPDwgZW5kbAogICA8PCAiI1x0aHR0cDovL3NjYW1waS5waHlzaWsudW5pLWtvbnN0
YW56LmRlL350c2NoYW5rL2dwc3BvaW50IiA8PCBlbmRsCiAgIDw8ICIjIiA8PCBlbmRsCiAgIDw8
ICIjXHRHUFMgRGV2aWNlIDogIiA8PCBncHNEZXZpY2VJbmZvIDw8IGVuZGwKICAgPDwgIiMiIDw8
IGVuZGw7CgogICAgdGltZV90IHQgPSB0aW1lKF9fbnVsbCk7CiAgIGNoYXIgemVpdFsyNTZdOwog
ICBzdHJmdGltZSh6ZWl0LDI1NSwiJUEgJWQgJUIgJVkgJUg6JU0gIixsb2NhbHRpbWUoJnQpKTsK
CiAgICgqZm91dCkgPDwgIiNcdGRvd25sb2FkIHRpbWUgKGxvY2FsKSA6ICIgPDwgemVpdCA8PCBl
bmRsOwojIDYyICJmaWxlX2lvLmNwcCIKfQoKCgoKCgp2b2lkIGZpbGVfaW86OndyaXRlVHJhY2tz
X2Zvcl9tYXRsYWIodHJhY2tzIHQsIG9mc3RyZWFtICpmb3V0KQp7CiMgOTggImZpbGVfaW8uY3Bw
Igp9CgoKCgoKCgp2b2lkIGZpbGVfaW86OndyaXRlVHJhY2tzKHRyYWNrcyB0LCBvZnN0cmVhbSAq
Zm91dCkKewogICBjb3V0IDw8ICJXcml0aW5nIFRyYWNrcyB0byAiIDw8IGZpbGVuYW1lIDw8ICIs
Ijw8IGZsdXNoOwogICAoKmZvdXQpCiAgICAgIDw8ICJcbiNcbiMgVHJhY2tzIFxuIyBcbiBcbiIg
OwogICBmb3IoaW50IGk9MDsgaTxpbnQodC5zaXplKCkpO2krKykKICAgewogICAgICAoKmZvdXQp
CiAgICAgICAgIDw8ICJcblxudHlwZT1cInRyYWNrXCIgIiA8PCAidHJhY2tuYW1lPVwiIiA8PCB0
W2ldLm5hbWUgPDwiXCJcblxuIjsKICAgICAgZm9yKGludCBqPTA7IGo8aW50KHRbaV0udHAuc2l6
ZSgpKTtqKyspCiAgICAgIHsKICAgICAgICAoKmZvdXQpLnByZWNpc2lvbig3KTsKICAgICAgICAo
KmZvdXQpLnNldGYoIGlvczo6Zml4ZWQgLCBpb3M6OmZsb2F0ZmllbGQgKSA7CiAgICAgICAgICgq
Zm91dCkKICAgICAgICAgICAgPDwgInR5cGU9XCJ0cmFja3BvaW50XCIgIgogICAgICAgICAgICA8
PCAibGF0aXR1ZGU9XCIiIDw8dFtpXS50cFtqXS5sYXQgPDwgIlwiICIKICAgICAgICAgICAgPDwg
ImxvbmdpdHVkZT1cIiIgPDx0W2ldLnRwW2pdLmxvbiA8PCAiXCIgIjsKICAgICAgICAgKCpmb3V0
KS5zZXRmKCAwICwgaW9zOjpmbG9hdGZpZWxkICkgOwogICAgICAgICBpZiggdFtpXS50cFtqXS5h
bHQgIT0gZmxvYXQoMS4wZTI1KSkKICAgICAgICAgICAgKCpmb3V0KSA8PCAiYWx0aXR1ZGU9XCIi
PDwgaW50KCB0W2ldLnRwW2pdLmFsdCArIC40OTk5OTk5OTk5OTk5KSA8PCAiXCIgIjsKICAgICAg
ICAgaWYoIHRbaV0udHBbal0udW5peHRpbWUgPj0gNjMxMDY1NjAwKzI0KjM2MDApCiAgICAgICAg
IHsKICAgICAgICAgICAgKCpmb3V0KSA8PCAidW5peHRpbWU9XCIiPDwgdFtpXS50cFtqXS51bml4
dGltZSA8PCAiXCIgIjsKICAgICAgICAgICAgY2hhciB6ZWl0WzI1Nl07CiAgICAgICAgICAgIHN0
cmZ0aW1lKHplaXQsMjU1LCIlWS8lbS8lZCAlSDolTTolUyIsbG9jYWx0aW1lKCZ0W2ldLnRwW2pd
LnVuaXh0aW1lKSk7CiAgICAgICAgICAgICgqZm91dCkgPDwgImxvY2FsdGltZT1cIiI8PHplaXQ8
PCJcIiAgIjsKICAgICAgICAgfQogICAgICAgICBpZih0W2ldLnRwW2pdLm5ld19zZWdtZW50ID09
IHRydWUpCiAgICAgICAgICAgICgqZm91dCkgPDwgIm5ld3NlZ21lbnQ9XCJ5ZXNcIiI7CiAgICAg
ICAgICgqZm91dCkgPDwgZW5kbDsKICAgICAgfQogICB9CiAgIGNvdXQgPDwgIiBkb25lICIgPDwg
ZW5kbDsKfQoKCgoKCgp2b2lkIGZpbGVfaW86OndyaXRlV2F5cG9pbnRzKHdheXBvaW50cyB3LCBv
ZnN0cmVhbSAqZm91dCkKewoKICAgY291dCA8PCAiV3JpdGluZyBXYXlwb2ludHMgdG8gIiA8PCBm
aWxlbmFtZSA8PCAiLCI8PCBmbHVzaDsKCiAgICgqZm91dCkgPDwgIlxuIyBcbiMgIHdheXBvaW50
cyBcbiNcblxuIiA7CgogICBmb3IoaW50IGk9MDtpPGludCh3LnNpemUoKSk7aSsrKQogICB7CiAg
ICAgIGlmKGklNT09MCkgKCpmb3V0KTw8IlxuIjsKICAgICAgKCpmb3V0KS5wcmVjaXNpb24oNyk7
CiAgICAgICgqZm91dCkuc2V0ZiggaW9zOjpmaXhlZCAsIGlvczo6ZmxvYXRmaWVsZCApIDsKICAg
ICAgKCpmb3V0KSA8PCAidHlwZT1cIndheXBvaW50XCIgIgogICAgICAgICAgICA8PCAibGF0aXR1
ZGU9XCIiIDw8IHdbaV0ubGF0IDw8ICJcIiAgIgogICAgICAgICAgICA8PCAibG9uZ2l0dWRlPVwi
IiA8PCB3W2ldLmxvbiA8PCAiXCIgICI7CiAgICAgICAgICgqZm91dCkuc2V0ZiggMCAsIGlvczo6
ZmxvYXRmaWVsZCApIDsKICAgICAgaWYod1tpXS5hbHQhPWZsb2F0KDEuMGUyNSkpCiAgICAgICAg
ICgqZm91dCkgPDwgImFsdGl0dWRlPVwiIiA8PCBpbnQoIHdbaV0uYWx0ICsgLjQ5OTk5OTk5OTk5
OTk5OTk5OSkgPDwiXCIgICI7CiAgICAgIGlmKHdbaV0ubmFtZSE9IiIpCiAgICAgICAgICgqZm91
dCkgPDwgIm5hbWU9XCIiIDw8IHdbaV0ubmFtZSA8PCAiXCIgICI7CiAgICAgIGlmKHdbaV0uY29t
bWVudCE9IiIpCiAgICAgICAgICgqZm91dCkgPDwgImNvbW1lbnQ9XCIiIDw8IHdbaV0uY29tbWVu
dCA8PCAiXCIgICI7CiAgICAgIGlmKHdbaV0uc3ltYm9sIT0iIikKICAgICAgICAgKCpmb3V0KSA8
PCAic3ltYm9sPVwiIiA8PCB3W2ldLnN5bWJvbDw8ICJcIiAgIjsKICAgICAgaWYod1tpXS5kaXNw
bGF5X29wdGlvbiE9IiIpCiAgICAgICAgICgqZm91dCkgPDwgImRpc3BsYXlfb3B0aW9uPVwiIiA8
PCB3W2ldLmRpc3BsYXlfb3B0aW9uPDwgIlwiICAiOwogICAgICAoKmZvdXQpPDwgZW5kbDsKCiAg
IH0KICAgY291dCA8PCAiIGRvbmUgIiA8PCBlbmRsOwoKfQoKCgoKdm9pZCBmaWxlX2lvOjp3cml0
ZVdheXBvaW50c19mb3JfbWF0bGFiKHdheXBvaW50cyB3LCBvZnN0cmVhbSAqZm91dCkKewoKCgoK
CiAgIGZvcihpbnQgaT0wO2k8aW50KHcuc2l6ZSgpKTtpKyspCiAgIHsKICAgICAgaWYoaSU1PT0w
KSAoKmZvdXQpPDwiXG4iOwogICAgICAoKmZvdXQpLnByZWNpc2lvbig3KTsKICAgICAgKCpmb3V0
KS5zZXRmKCBpb3M6OmZpeGVkICwgaW9zOjpmbG9hdGZpZWxkICkgOwogICAgICAoKmZvdXQpIDw8
ICJ0eXBlPVwid2F5cG9pbnRcIiAiCiAgICAgICAgICAgIDw8ICJsYXRpdHVkZT1cIiIgPDwgd1tp
XS5sYXQgPDwgIlwiICAiCiAgICAgICAgICAgIDw8ICJsb25naXR1ZGU9XCIiIDw8IHdbaV0ubG9u
IDw8ICJcIiAgIjsKICAgICAgICAgKCpmb3V0KS5zZXRmKCAwICwgaW9zOjpmbG9hdGZpZWxkICkg
OwogICAgICBpZih3W2ldLmFsdCE9ZmxvYXQoMS4wZTI1KSkKICAgICAgICAgKCpmb3V0KSA8PCAi
YWx0aXR1ZGU9XCIiIDw8IGludCggd1tpXS5hbHQgKyAuNDk5OTk5OTk5OTk5OTk5OTk5KSA8PCJc
IiAgIjsKICAgICAgaWYod1tpXS5uYW1lIT0iIikKICAgICAgICAgKCpmb3V0KSA8PCAibmFtZT1c
IiIgPDwgd1tpXS5uYW1lIDw8ICJcIiAgIjsKICAgICAgaWYod1tpXS5jb21tZW50IT0iIikKICAg
ICAgICAgKCpmb3V0KSA8PCAiY29tbWVudD1cIiIgPDwgd1tpXS5jb21tZW50IDw8ICJcIiAgIjsK
ICAgICAgaWYod1tpXS5zeW1ib2whPSIiKQogICAgICAgICAoKmZvdXQpIDw8ICJzeW1ib2w9XCIi
IDw8IHdbaV0uc3ltYm9sPDwgIlwiICAiOwogICAgICBpZih3W2ldLmRpc3BsYXlfb3B0aW9uIT0i
IikKICAgICAgICAgKCpmb3V0KSA8PCAiZGlzcGxheV9vcHRpb249XCIiIDw8IHdbaV0uZGlzcGxh
eV9vcHRpb248PCAiXCIgICI7CiAgICAgICgqZm91dCk8PCBlbmRsOwoKICAgfQogICBjb3V0IDw8
ICIgZG9uZSAiIDw8IGVuZGw7Cgp9CgoKCgoKCnZvaWQgZmlsZV9pbzo6d3JpdGVSb3V0ZXMocm91
dGVzIHIsIG9mc3RyZWFtICogZm91dCkKewogICBjb3V0IDw8ICJXcml0aW5nIFJvdXRlcyB0byAi
IDw8IGZpbGVuYW1lIDw8ICIsIjw8IGZsdXNoOwoKICAgKCpmb3V0KQogICAgICA8PCAiXG4jXG4j
ICBSb3V0ZXMgXG4jXG5cbiIgOwogICBmb3IoaW50IGk9MDsgaTxpbnQoci5zaXplKCkpO2krKykK
ICAgewogICAgICAoKmZvdXQpCiAgICAgICAgIDw8ICJcbnR5cGU9XCJyb3V0ZVwiICIgPDwgInJv
dXRlbmFtZT1cIiIgPDwgcltpXS5uYW1lIDw8IlwiICIKICAgICAgICAgPDwgInJvdXRlbnVtYmVy
PVwiIiA8PCByW2ldLm51bWJlciA8PCAiXCIgIgogICAgICAgICA8PCBlbmRsOwoKICAgICAgZm9y
KGludCBqPTA7IGo8KGludChyW2ldLnJwLnNpemUoKSkpOyBqKyspCiAgICAgIHsKICAgICAgICAg
ICAoKmZvdXQpLnByZWNpc2lvbig3KTsKICAgICAgICAgKCpmb3V0KS5zZXRmKCBpb3M6OmZpeGVk
ICwgaW9zOjpmbG9hdGZpZWxkICkgOwogICAgICAgICAoKmZvdXQpCiAgICAgICAgICAgIDw8ICJ0
eXBlPVwicm91dGVwb2ludFwiICIKICAgICAgICAgICAgPDwgImxhdGl0dWRlPVwiIiA8PCByW2ld
LnJwW2pdLmxhdCA8PCAiXCIgICIKICAgICAgICAgICAgPDwgImxvbmdpdHVkZT1cIiIgPDwgcltp
XS5ycFtqXS5sb24gPDwgIlwiICAiOwogICAgICAgICAoKmZvdXQpLnNldGYoIDAgLCBpb3M6OmZs
b2F0ZmllbGQgKSA7CiAgICAgICAgIGlmKHJbaV0ucnBbal0uYWx0IT1mbG9hdCgxLjBlMjUpKQog
ICAgICAgICAgICAoKmZvdXQpIDw8ICJhbHRpdHVkZT1cIiIgPDwgaW50KCByW2ldLnJwW2pdLmFs
dCArIC40OTk5OTk5OTk5OTk5OSkgPDwiXCIgICI7CiAgICAgICAgIGlmKHJbaV0ucnBbal0ubmFt
ZSE9IiIpCiAgICAgICAgICAgICgqZm91dCkgPDwgIm5hbWU9XCIiIDw8IHJbaV0ucnBbal0ubmFt
ZSA8PCAiXCIgICI7CiAgICAgICAgIGlmKHJbaV0ucnBbal0uY29tbWVudCE9IiIpCiAgICAgICAg
ICAgICgqZm91dCkgPDwgImNvbW1lbnQ9XCIiIDw8IHJbaV0ucnBbal0uY29tbWVudCA8PCAiXCIg
ICI7CiAgICAgICAgIGlmKHJbaV0ucnBbal0uc3ltYm9sIT0iIikKICAgICAgICAgICAgKCpmb3V0
KSA8PCAic3ltYm9sPVwiIiA8PCByW2ldLnJwW2pdLnN5bWJvbDw8ICJcIiAgIjsKICAgICAgICAg
aWYocltpXS5ycFtqXS5kaXNwbGF5X29wdGlvbiE9IiIpCiAgICAgICAgICAgICgqZm91dCkgPDwg
ImRpc3BsYXlfb3B0aW9uPVwiIiA8PCByW2ldLnJwW2pdLmRpc3BsYXlfb3B0aW9uPDwgIlwiICAi
OwogICAgICAgICAoKmZvdXQpPDwgZW5kbDsKICAgICAgfQogICB9CiAgIGNvdXQgPDwgIiBkb25l
ICIgPDwgZW5kbDsKfQoKCgoKc3RyaW5nIGZpbGVfaW86OmdldF9jb25maWcoc3RyaW5nIGNvbmZp
Z19uYW1lKQp7CiAgIHN0cmluZyBjb25maWdfdmFsdWU7CiAgIHN0cmluZyBjb25maWdfZmlsZT1n
ZXRlbnYoIkhPTUUiKTsKICAgY29uZmlnX2ZpbGUrPSIvLmdwc3BvaW50cmMiOwogICBpZnN0cmVh
bSBmaW4oY29uZmlnX2ZpbGUuY19zdHIoKSk7CiAgIHdoaWxlKCBmaW4ucGVlaygpICE9ICgtMSkp
CiAgIHsKICAgICAgZ2V0bGluZSgmZmluKTsKICAgICAgY29uZmlnX3ZhbHVlPWdldChjb25maWdf
bmFtZSk7CiAgICAgIGlmKGNvbmZpZ192YWx1ZSE9IiIpCiAgICAgIHsKICAgICAgICAgZmluLmNs
b3NlKCk7CiAgICAgICAgIHJldHVybiBjb25maWdfdmFsdWU7CiAgICAgIH0KICAgfQogICBmaW4u
Y2xvc2UoKTsKICAgcmV0dXJuIGNvbmZpZ192YWx1ZTsKfQoKCgoKCgp2b2lkIGZpbGVfaW86Omdl
dGxpbmUoaWZzdHJlYW0gKmZpbikKewogICBjb25zdCBpbnQgTElORUJVRkZFUlNJWkU9NTAwOwog
ICBjaGFyIGxpbmVidWZmZXJbTElORUJVRkZFUlNJWkVdOwoKICAgKCpmaW4pLmdldGxpbmUobGlu
ZWJ1ZmZlcixMSU5FQlVGRkVSU0laRSk7CiAgIGxpbmUgPSBzdHJpbmcobGluZWJ1ZmZlcik7Cgog
ICB3aGlsZShsaW5lYnVmZmVyWzBdPT0nIycgJiYgKCpmaW4pLnBlZWsoKSAhPSAoLTEpICkKICAg
ewogICAgICAoKmZpbikuZ2V0bGluZShsaW5lYnVmZmVyLExJTkVCVUZGRVJTSVpFKTsKICAgICAg
bGluZSA9IHN0cmluZyhsaW5lYnVmZmVyKTsKICAgfQoKfQoKCgoKc3RyaW5nIGZpbGVfaW86Omdl
dChzdHJpbmcgbikgY29uc3QKewoKICAgc3RyaW5nIHMoIiIpOwoKICAgc3RyaW5nIHNlYXJjaChu
Kyc9JysnIicpOwogICBzaXplX3QgcGE9c3RyaW5nOjpucG9zLAogICAgICAgICAgICAgICAgICAg
ICBwZT1zdHJpbmc6Om5wb3M7CgogICBwYT1saW5lLmZpbmQoc2VhcmNoKTsKICAgaWYocGEhPXN0
cmluZzo6bnBvcykKICAgewogICAgICBwYT1wYStzZWFyY2gubGVuZ3RoKCk7CiAgICAgIHBlPWxp
bmUuZmluZF9maXJzdF9vZignIicscGEpOwogICAgICBpZihwZSE9c3RyaW5nOjpucG9zKQogICAg
ICB7CiAgICAgICAgIHM9bGluZS5zdWJzdHIocGEscGUtcGEpOwogICAgICB9CiAgIH0KCiAgIHJl
dHVybiBzOwp9CgoKCgoKCmRvdWJsZSBmaWxlX2lvOjpzMmQoc3RyaW5nIHMpIGNvbnN0CnsKCiAg
IGRvdWJsZSBkPTEuMGUyNTsKICAgaWYocz09IiIpIHJldHVybiBkOwoKICAgaXN0cnN0cmVhbSBp
c3Mocy5jX3N0cigpLHMubGVuZ3RoKCkpOwogICBpc3MgPj4gZDsKCiAgIHJldHVybiBkOwp9CgoK
CgoKCndheXBvaW50cyBmaWxlX2lvOjpyZWFkV2F5cG9pbnRzKGlmc3RyZWFtICpmaW4pCnsKCiAg
IGNvdXQgPDwgIiBSZWFkaW5nIFdheXBvaW50cyBmcm9tICIgPDwgZmlsZW5hbWUgPDwiLCIgPDwg
Zmx1c2g7CiAgIHdheXBvaW50cyB3OwoKCiAgIHdoaWxlKCAoKmZpbikucGVlaygpICE9ICgtMSkp
CiAgIHsKICAgICAgZ2V0bGluZShmaW4pOwoKICAgICAgaWYoIChnZXQoInR5cGUiKT09IndheXBv
aW50IikKICAgICAgICAgJiYgKGdldCgiZGF0dW0iKT09IiIgfHwgZ2V0KCJkYXR1bSIpPT0iV0dT
ODQiKQogICAgICAgICAmJiAoZ2V0KCJwb3NpdGlvbl9mb3JtYXQiKT09IiIgfHwgZ2V0KCJwb3Np
dGlvbl9mb3JtYXQiKT09IkhERCIpCiAgICAgICkKICAgICAgewogICAgICAgICB3YXlwb2ludCB3
cDsKICAgICAgICAgd3AubGF0ID1zMmQoZ2V0KCJsYXRpdHVkZSIpKTsKICAgICAgICAgd3AubG9u
ID1zMmQoZ2V0KCJsb25naXR1ZGUiKSk7CiAgICAgICAgIHdwLmFsdCA9ZmxvYXQoczJkKGdldCgi
YWx0aXR1ZGUiKSkpOwogICAgICAgICB3cC5uYW1lID0gZ2V0KCJuYW1lIik7CiAgICAgICAgIHdw
LmNvbW1lbnQgPSBnZXQoImNvbW1lbnQiKTsKICAgICAgICAgd3Auc3ltYm9sPWdldCgic3ltYm9s
Iik7CiAgICAgICAgIHdwLmRpc3BsYXlfb3B0aW9uPWdldCgiZGlzcGxheV9vcHRpb24iKTsKCiAg
ICAgICAgIHcucHVzaF9iYWNrKHdwKTsKICAgICAgfQogICB9CgogICBjb3V0IDw8ICIgZG9uZSAi
IDw8IGVuZGw7CgogICByZXR1cm4gdzsKfQoKCgoKCnJvdXRlcyBmaWxlX2lvOjpyZWFkUm91dGVz
KGlmc3RyZWFtICpmaW4pCnsKCiAgIGNvdXQgPDwgIiBSZWFkaW5nIFJvdXRlcyBmcm9tICIgPDwg
ZmlsZW5hbWUgPDwiLCIgPDwgZmx1c2g7CgogICByb3V0ZXMgcjsKICAgaW50IGN1cnJlbnRfcm91
dGU9LTE7CgogICB3aGlsZSggKCpmaW4pLnBlZWsoKSAhPSAoLTEpKQogICB7CiAgICAgIGdldGxp
bmUoZmluKTsKICAgICAgaWYoZ2V0KCJ0eXBlIik9PSJyb3V0ZSIpCiAgICAgIHsKICAgICAgICAg
cm91dGUgcnQ7CiAgICAgICAgIHJ0Lm5hbWUgPSBnZXQoInJvdXRlbmFtZSIpOwogICAgICAgICBy
dC5udW1iZXIgPSBpbnQoczJkKGdldCgicm91dGVudW1iZXIiKSkpOwoKICAgICAgICAgci5wdXNo
X2JhY2socnQpOwogICAgICAgICBjdXJyZW50X3JvdXRlID0gci5zaXplKCktMTsKICAgICAgfQoK
ICAgICAgaWYoZ2V0KCJ0eXBlIik9PSJyb3V0ZXBvaW50IgogICAgICAgICAmJiAoZ2V0KCJkYXR1
bSIpPT0iIiB8fCBnZXQoImRhdHVtIik9PSJXR1M4NCIpCiAgICAgICAgICYmIChnZXQoInBvc2l0
aW9uX2Zvcm1hdCIpPT0iIiB8fCBnZXQoInBvc2l0aW9uX2Zvcm1hdCIpPT0iSEREIikKICAgICAg
ICAgJiYgY3VycmVudF9yb3V0ZSA+PSAwCiAgICAgICAgICkKICAgICAgewogICAgICAgICB3YXlw
b2ludCB3cDsKICAgICAgICAgd3AubGF0ID1zMmQoZ2V0KCJsYXRpdHVkZSIpKTsKICAgICAgICAg
d3AubG9uID1zMmQoZ2V0KCJsb25naXR1ZGUiKSk7CiAgICAgICAgIHdwLmFsdCA9ZmxvYXQoczJk
KGdldCgiYWx0aXR1ZGUiKSkpOwogICAgICAgICB3cC5uYW1lID0gZ2V0KCJuYW1lIik7CiAgICAg
ICAgIHdwLmNvbW1lbnQgPSBnZXQoImNvbW1lbnQiKTsKICAgICAgICAgd3Auc3ltYm9sPWdldCgi
c3ltYm9sIik7CiAgICAgICAgIHdwLmRpc3BsYXlfb3B0aW9uPWdldCgiZGlzcGxheV9vcHRpb24i
KTsKCiAgICAgICAgIHJbY3VycmVudF9yb3V0ZV0ucnAucHVzaF9iYWNrKHdwKTsKICAgICAgfQog
ICB9CgogICBjb3V0IDw8ICIgZG9uZSAiIDw8IGVuZGw7CiAgIHJldHVybiByOwp9CgoKCgp0cmFj
a3MgZmlsZV9pbzo6cmVhZFRyYWNrcyhpZnN0cmVhbSAqZmluKQp7CgogICBjb3V0IDw8ICIgUmVh
ZGluZyBUcmFja3MgZnJvbSAiIDw8IGZpbGVuYW1lIDw8IiwiIDw8IGZsdXNoOwoKICAgdHJhY2tz
IHQ7CiAgIGludCBjdXJyZW50X3RyYWNrPS0xOwoKICAgd2hpbGUoICgqZmluKS5wZWVrKCkgIT0g
KC0xKSkKICAgewogICAgICBnZXRsaW5lKGZpbik7CiAgICAgIGlmKGdldCgidHlwZSIpPT0idHJh
Y2siKQogICAgICB7CiAgICAgICAgIHRyYWNrIHRyOwogICAgICAgICB0ci5uYW1lPWdldCgidHJh
Y2tuYW1lIik7CiAgICAgICAgIHQucHVzaF9iYWNrKHRyKTsKICAgICAgICAgY3VycmVudF90cmFj
az10LnNpemUoKS0xOwogICAgICB9CiAgICAgIGlmKGdldCgidHlwZSIpPT0idHJhY2twb2ludCIK
ICAgICAgICAgJiYgKGdldCgiZGF0dW0iKT09IiIgfHwgZ2V0KCJkYXR1bSIpPT0iV0dTODQiKQog
ICAgICAgICAmJiAoZ2V0KCJwb3NpdGlvbl9mb3JtYXQiKT09IiIgfHwgZ2V0KCJwb3NpdGlvbl9m
b3JtYXQiKT09IkhERCIpCiAgICAgICAgICYmIGN1cnJlbnRfdHJhY2s+PSAwCiAgICAgICAgICkK
ICAgICAgewogICAgICAgICB0cmFja3BvaW50IHRwOwogICAgICAgICB0cC5sYXQgPXMyZChnZXQo
ImxhdGl0dWRlIikpOwogICAgICAgICB0cC5sb24gPXMyZChnZXQoImxvbmdpdHVkZSIpKTsKICAg
ICAgICAgdHAuYWx0ID1mbG9hdChzMmQoZ2V0KCJhbHRpdHVkZSIpKSk7CiAgICAgICAgIHRwLnVu
aXh0aW1lID1sb25nKHMyZChnZXQoInVuaXh0aW1lIikpKTsKICAgICAgICAgc3RyaW5nIG5ld3Nl
Z21lbnQgPSBnZXQoIm5ld3NlZ21lbnQiKTsKICAgICAgICAgaWYobmV3c2VnbWVudD09InllcyIp
IHRwLm5ld19zZWdtZW50ID0gdHJ1ZTsKICAgICAgICAgZWxzZSB0cC5uZXdfc2VnbWVudCA9IGZh
bHNlOwogICAgICAgICBpZiAodFtjdXJyZW50X3RyYWNrXS50cC5zaXplKCk9PTApCiAgICAgICAg
ICAgIHRwLm5ld19zZWdtZW50ID0gdHJ1ZTsKICAgICAgICAgdFtjdXJyZW50X3RyYWNrXS50cC5w
dXNoX2JhY2sodHApOwogICAgICB9CiAgIH0KCiAgIGNvdXQgPDwgIiBkb25lICIgPDwgZW5kbDsK
ICAgcmV0dXJuIHQ7Cn0K


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