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


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

c++/2501: GCC segfaults on certain errors



>Number:         2501
>Category:       c++
>Synopsis:       GCC segfaults on certain errors
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Apr 05 21:26:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     jholla14@calvin.edu
>Release:        gcc version 2.96 20000731 (Red Hat Linux 7.0)
>Organization:
>Environment:
Red Hat Linux 7.0 on a AMD K6-2, no special settings for GCC or anything related
>Description:
gcc: save-temps: No such file or directory
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs
gcc: unrecognized option `-02'
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) -Wall -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__tune_i386__ prod_list.cpp /tmp/ccb3v3ef.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 (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 /tmp/ccb3v3ef.ii -quiet -dumpbase prod_list.cpp -Wall -version -o /tmp/cc5LG2mA.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).
prod_list.cpp:35: no `void ProductionList::GetProduction ()' member
function declared in class `ProductionList'
prod_list.cpp:35: declaration of `void ProductionList::GetProduction
()' outside of class is not definition
prod_list.cpp:36: parse error before `{'
prod_list.cpp:39: syntax error before `!='
prod_list.cpp:39: syntax error before `++'
prod_list.cpp:44: 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:
just a good old compile of the sources, there is ofcourse errors in my code, but thats what causes the GCC fault it seems.
>Fix:

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

IyAxICJwcm9kX2xpc3QuY3BwIgojIDEyICJwcm9kX2xpc3QuY3BwIgojIDE1ICJwcm9kX2xpc3Qu
aCIgMQojIDE0ICJwcm9kdWN0aW9uLmgiIDEKIyAxNSAiZ3JhbV9zeW1ib2wuaCIgMQojIDcgIi91
c3IvaW5jbHVkZS9nKystMy9zdHJpbmciIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZysrLTMvc3Rk
L2Jhc3RyaW5nLmgiIDEgMwojcHJhZ21hIGludGVyZmFjZQojIDMyICIvdXNyL2luY2x1ZGUvZysr
LTMvc3RkL2Jhc3RyaW5nLmgiIDMKCgoKCiMgNyAiL3Vzci9pbmNsdWRlL2crKy0zL2NzdGRkZWYi
IDEgMwojIDE0NyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMgMTk5ICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVm
IHVuc2lnbmVkIGludCBzaXplX3Q7CiMgNyAiL3Vzci9pbmNsdWRlL2crKy0zL2NzdGRkZWYiIDIg
MwojIDM2ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKIyAzMyAiL3Vz
ci9pbmNsdWRlL2crKy0zL3N0ZC9zdHJhaXRzLmgiIDEgMwojcHJhZ21hIGludGVyZmFjZSAic3Rk
L3N0cmFpdHMuaCIKIyAzMyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9zdHJhaXRzLmgiIDMKCgoK
CgpleHRlcm4gIkMrKyIgewp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQ+CnN0cnVjdCBzdHJpbmdfY2hh
cl90cmFpdHMgewogIHR5cGVkZWYgY2hhclQgY2hhcl90eXBlOwoKCgogIHN0YXRpYyB2b2lkIGFz
c2lnbiAoY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgYzEgPSBjMjsg
fQogIHN0YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUm
IGMyKQogICAgeyByZXR1cm4gKGMxID09IGMyKTsgfQogIHN0YXRpYyBib29sIG5lIChjb25zdCBj
aGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gIShjMSA9PSBj
Mik7IH0KICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90
eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA8IGMyKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUgZW9z
ICgpIHsgcmV0dXJuIGNoYXJfdHlwZSgpOyB9CiAgc3RhdGljIGJvb2wgaXNfZGVsKGNoYXJfdHlw
ZSBhKSB7IHJldHVybiAwOyB9CgoKCgogIHN0YXRpYyBpbnQgY29tcGFyZSAoY29uc3QgY2hhcl90
eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7CiAgICAgIHNpemVf
dCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQogICAgICAgIGlmIChuZSAoczFbaV0s
IHMyW2ldKSkKICAgICAgICAgIHJldHVybiBsdCAoczFbaV0sIHMyW2ldKSA/IC0xIDogMTsKCiAg
ICAgIHJldHVybiAwOwogICAgfQoKICBzdGF0aWMgc2l6ZV90IGxlbmd0aCAoY29uc3QgY2hhcl90
eXBlKiBzKQogICAgewogICAgICBzaXplX3QgbCA9IDA7CiAgICAgIHdoaWxlIChuZSAoKnMrKywg
ZW9zICgpKSkKICAgICAgICArK2w7CiAgICAgIHJldHVybiBsOwogICAgfQoKICBzdGF0aWMgY2hh
cl90eXBlKiBjb3B5IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3Qg
bikKICAgIHsKICAgICAgZm9yICg7IG4tLTsgKQogICAgICAgIGFzc2lnbiAoczFbbl0sIHMyW25d
KTsKICAgICAgcmV0dXJuIHMxOwogICAgfQoKICBzdGF0aWMgY2hhcl90eXBlKiBtb3ZlIChjaGFy
X3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsKICAgICAgY2hh
cl90eXBlIGFbbl07CiAgICAgIHNpemVfdCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytp
KQogICAgICAgIGFzc2lnbiAoYVtpXSwgczJbaV0pOwogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsg
KytpKQogICAgICAgIGFzc2lnbiAoczFbaV0sIGFbaV0pOwogICAgICByZXR1cm4gczE7CiAgICB9
CgogIHN0YXRpYyBjaGFyX3R5cGUqIHNldCAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBl
JiBjLCBzaXplX3QgbikKICAgIHsKICAgICAgZm9yICg7IG4tLTsgKQogICAgICAgIGFzc2lnbiAo
czFbbl0sIGMpOwogICAgICByZXR1cm4gczE7CiAgICB9Cn07CgpjbGFzcyBpc3RyZWFtOwpjbGFz
cyBvc3RyZWFtOwoKIyA3ICIvdXNyL2luY2x1ZGUvZysrLTMvY2N0eXBlIiAxIDMKIyAyNyAiL3Vz
ci9pbmNsdWRlL2N0eXBlLmgiIDEgMwojIDI4MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEg
MwojIDMxMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2N0
eXBlLmgiIDIgMwoKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCgoKdHlwZWRl
ZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9y
dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9f
dV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191
X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMg
NDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2lu
dDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hv
cnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsK
dHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50
MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0
X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0
X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19k
ZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0
eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRl
ZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9f
cXVhZF90IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXpl
X3Q7CnR5cGVkZWYgX191X2xvbmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02
NF90Owp0eXBlZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQg
X192YWxbMl07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYg
Y2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2ln
bmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlw
ZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0
eXBlZGVmIGludCBfX2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCnR5cGVk
ZWYgdW5zaWduZWQgbG9uZyBpbnQgX19mZF9tYXNrOwoKCiMgMTA5ICIvdXNyL2luY2x1ZGUvYml0
cy90eXBlcy5oIiAzCnR5cGVkZWYgc3RydWN0CiAgewoKCgoKCgogICAgX19mZF9tYXNrIF9fZmRz
X2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKICB9IF9fZmRfc2V0OwoK
CnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNf
cGlkX3Q7CgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcg
aW50IF9fYmxrY250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYg
X191X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7
CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2Zz
ZmlsY250NjRfdDsKCgp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19s
b2ZmX3QgX19vZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJf
dDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKCgoKCgojIDI0ICIvdXNyL2lu
Y2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9iaXRzL3Nj
aGVkLmgiIDEgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBzY2hlZF9wcmlvcml0
eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoKc3Ry
dWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlu
bG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJl
YWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2RldGFjaHN0YXRlOwogIGlu
dCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBp
bnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwog
IGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3Rh
Y2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9w
dGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9
IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRo
cmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoK
CgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsK
ICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRo
cmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3Ry
dWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRl
ZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKIyAxNDAgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0
eXBlcy5oIiAzCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwoKIyAxNjYgIi91
c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDI4ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIg
MiAzCgpleHRlcm4gIkMiIHsKCiMgNDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMzggIi91
c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMK
CgoKCgoKZW51bQp7CiAgX0lTdXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDog
KCgxIDw8ICgwKSkgPj4gOCkpLAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8
PCA4KSA6ICgoMSA8PCAoMSkpID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8
ICgyKSkgPDwgOCkgOiAoKDEgPDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/
ICgoMSA8PCAoMykpIDw8IDgpIDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgo
NCkgPCA4ID8gKCgxIDw8ICg0KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3Bh
Y2UgPSAoKDUpIDwgOCA/ICgoMSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAog
IF9JU3ByaW50ID0gKCg2KSA8IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+
IDgpKSwKICBfSVNncmFwaCA9ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwg
KDcpKSA+PiA4KSksCiAgX0lTYmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDog
KCgxIDw8ICg4KSkgPj4gOCkpLAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8
PCA4KSA6ICgoMSA8PCAoOSkpID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8
PCAoMTApKSA8PCA4KSA6ICgoMSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8
IDggPyAoKDEgPDwgKDExKSkgPDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgNzUgIi91
c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAq
X19jdHlwZV9iOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsKZXh0
ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvdXBwZXI7CgojIDkxICIvdXNyL2luY2x1
ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IGlzYWxudW0gKGludCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgaXNhbHBoYSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2NudHJsIChpbnQpIHRocm93
ICgpOwpleHRlcm4gaW50IGlzZGlnaXQgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNsb3dl
ciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2dyYXBoIChpbnQpIHRocm93ICgpOwpleHRl
cm4gaW50IGlzcHJpbnQgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwdW5jdCAoaW50KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBpc3NwYWNlIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlz
dXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN4ZGlnaXQgKGludCkgdGhyb3cgKCk7
CgoKCgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAo
aW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX3Rv
bG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMjc3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwp9Cgoj
IDcgIi91c3IvaW5jbHVkZS9nKystMy9jY3R5cGUiIDIgMwojIDEwNiAiL3Vzci9pbmNsdWRlL2cr
Ky0zL3N0ZC9zdHJhaXRzLmgiIDIgMwoKIyA4ICIvdXNyL2luY2x1ZGUvZysrLTMvY3N0cmluZyIg
MSAzCiMgMjggIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCmV4dGVybiAiQyIgewoKCgoKCgoK
CmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9p
ZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgKm1l
bWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3Qg
X19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3Mx
LCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpf
X3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKIyA3NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpz
dHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0
cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNo
YXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAg
ICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rl
c3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIg
Kl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2Nv
bnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f
Y29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKCiMgMTIwICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNo
YXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X21hbGxvY19fKSk7CiMgMTU1ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIg
KnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19z
LCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCiMgMTY3ICIv
dXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNo
YXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpf
X3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9f
Y29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9f
Y29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgojIDE4OSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJ0
b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxp
bSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9fcmVz
dHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAqX19yZXN0
cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwojIDIyMCAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNo
YXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgojIDIzMSAiL3Vz
ci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVt
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBj
aGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cmVy
cm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cg
KCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93
ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19k
ZXN0LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19z
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAq
X19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFy
ICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4
dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBfX2ZmcyAoaW50IF9faSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CmV4dGVybiBpbnQgZmZzIChpbnQgX19p
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKIyAyNzYgIi91c3IvaW5jbHVk
ZS9zdHJpbmcuaCIgMwpleHRlcm4gaW50IF9fc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3Mx
LCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0
IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
ZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg
Kl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CiMgMzAwICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cnNlcCAo
Y2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CiMgMzY5ICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDMKfQoKIyA4ICIvdXNyL2luY2x1ZGUvZysrLTMvY3N0cmluZyIgMiAzCiMgMTA3
ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAzCgpzdHJ1Y3Qgc3RyaW5nX2No
YXJfdHJhaXRzIDxjaGFyPiB7CiAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgc3RhdGljIHZv
aWQgYXNzaWduIChjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyBjMSA9
IGMyOyB9CiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0IGNoYXJfdHlwZSAmIGMxLCBjb25zdCBjaGFy
X3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxID09IGMyKTsgfQogIHN0YXRpYyBib29sIG5lIChj
b25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMx
ICE9IGMyKTsgfQogIHN0YXRpYyBib29sIGx0IChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBj
aGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxIDwgYzIpOyB9CiAgc3RhdGljIGNoYXJfdHlw
ZSBlb3MgKCkgeyByZXR1cm4gMDsgfQogIHN0YXRpYyBib29sIGlzX2RlbChjaGFyX3R5cGUgYSkg
eyByZXR1cm4gKF9fY3R5cGVfYlsoaW50KSAoKGEpKV0gJiAodW5zaWduZWQgc2hvcnQgaW50KSBf
SVNzcGFjZSk7IH0KCiAgc3RhdGljIGludCBjb21wYXJlIChjb25zdCBjaGFyX3R5cGUqIHMxLCBj
b25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsgcmV0dXJuIG1lbWNtcCAoczEsIHMy
LCBuKTsgfQogIHN0YXRpYyBzaXplX3QgbGVuZ3RoIChjb25zdCBjaGFyX3R5cGUqIHMpCiAgICB7
IHJldHVybiBzdHJsZW4gKHMpOyB9CiAgc3RhdGljIGNoYXJfdHlwZSogY29weSAoY2hhcl90eXBl
KiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7IHJldHVybiAoY2hhcl90
eXBlKikgbWVtY3B5IChzMSwgczIsIG4pOyB9CiAgc3RhdGljIGNoYXJfdHlwZSogbW92ZSAoY2hh
cl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7IHJldHVybiAo
Y2hhcl90eXBlKikgbWVtbW92ZSAoczEsIHMyLCBuKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUqIHNl
dCAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlJiBjLCBzaXplX3QgbikKICAgIHsgcmV0
dXJuIChjaGFyX3R5cGUqKSBtZW1zZXQgKHMxLCBjLCBuKTsgfQp9OwoKIyAxNjAgIi91c3IvaW5j
bHVkZS9nKystMy9zdGQvc3RyYWl0cy5oIiAzCn0KIyAzNyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0
ZC9iYXN0cmluZy5oIiAyIDMKCgoKIyAxOSAiL3Vzci9pbmNsdWRlL2crKy0zL2FsbG9jLmgiIDEg
MwojIDE1MiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMSAzCiMgMTUgIi91c3Iv
aW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMgMzEyICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVk
aGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCnR5cGVkZWYgdW5zaWduZWQgaW50
IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKIyAyNSAiL3Vzci9p
bmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgNDYgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA2
MiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50
OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBf
X3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIg
MwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0
ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19t
YnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2Nv
bmZpZy5oIiAzCiMgMjkgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyA0NiAiL3Vzci9pbmNs
dWRlL3djaGFyLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKCgoKCgpl
bnVtCnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIs
CiAgX19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExf
T1VUUFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5Q
VVQsCgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJS
T1IKfTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdO
T1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19n
Y29udl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2dj
b252X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19n
Y29udl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNo
YXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVf
dCAqLCBpbnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0
IF9fZ2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0
IF9fZ2NvbnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0
cnVjdCBfX2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYg
aW50ICgqX19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHN0cnVjdCBfX2djb252X3RyYW5zX2Rh
dGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1
bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBp
bnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNo
YXIgKioqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICop
OwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0
IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7
CgpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFu
c19mY3Q7CiAgX19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0Owog
IF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwog
IHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZf
c3RlcAp7CiAgc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAg
X19jb25zdCBjaGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIF9fY29uc3QgY2hh
ciAqX19mcm9tX25hbWU7CiAgX19jb25zdCBjaGFyICpfX3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0
IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2djb252X2VuZF9mY3Qg
X19lbmRfZmN0OwoKCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVk
X2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKCiAg
aW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3Rl
cF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25lZCBjaGFyICpfX291
dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7
CgoKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19t
YnN0YXRlX3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX3RyYW5z
Owp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVfdCBfX25zdGVwczsK
ICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9f
Z2NvbnZfc3RlcF9kYXRhIF9fZGF0YVswXTsKfSAqX19nY29udl90OwoKIyA0NSAiL3Vzci9pbmNs
dWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5m
byBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0
cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252
X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19I
SV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
X19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3Qg
X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CgojIDE1MiAiL3Vzci9pbmNsdWRl
L2crKy0zL3N0bF9jb25maWcuaCIgMiAzCiMgMTkgIi91c3IvaW5jbHVkZS9nKystMy9hbGxvYy5o
IiAyIDMKCgoKIyA0NiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAxIDMKIyAyNyAi
L3Vzci9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDEgMwojcHJhZ21hIGludGVyZmFjZQojIDI3
ICIvdXNyL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMwoKCgoKCiMgMjggIi91c3IvaW5jbHVk
ZS9nKystMy9zdHJlYW1idWYuaCIgMSAzCiNwcmFnbWEgaW50ZXJmYWNlCiMgMjggIi91c3IvaW5j
bHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCgoKCgoKZXh0ZXJuICJDIiB7CgojIDUyICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgNDMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQt
bGludXgvMi45Ni9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlz
dCBfX2dudWNfdmFfbGlzdDsKIyA1MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE1NyAi
L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklM
RTsKCgoKCgoKCgoKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJr
ZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVm
OwoKCgogIGludCBfcG9zOwojIDE5MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCgplbnVt
IF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFydGlhbCwK
ICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9OwoKIyAyNjIgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hh
ciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9i
YXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hh
ciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9l
bmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNo
YXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1
Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9f
b2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2ln
bmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xv
Y2tfdCAqX2xvY2s7CiMgMzA2ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBf
b2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2Rl
OwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAq
KV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklM
RV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJf
MV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwoj
IDM0NSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFk
X2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoK
Cgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25z
dCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f
bik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29m
ZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lk
ICpfX2Nvb2tpZSk7CgoKIyAzOTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiAiQyIg
ewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4g
aW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cg
KF9JT19GSUxFICosIGludCkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dW5kZXJmbG93IChf
SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJTEUgKikg
dGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkg
dGhyb3cgKCk7CgojIDQyNyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9f
Z2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChpbnQg
X19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19G
SUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19m
cCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2Zw
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSB0
aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCiMg
NDUzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9f
RklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAg
ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpf
X3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93
ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVf
dCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICos
IHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklM
RSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9f
c2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZv
aWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwoKIyA0OTUgIi91
c3IvaW5jbHVkZS9saWJpby5oIiAzCn0KIyAzNyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1
Zi5oIiAyIDMKfQoKCgojIDExMCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8y
Ljk2L2luY2x1ZGUvc3RkYXJnLmgiIDEgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7
CiMgNDEgIi91c3IvaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMiAzCiMgNjUgIi91c3IvaW5j
bHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOwpj
bGFzcyBvc3RyZWFtOyBjbGFzcyBzdHJlYW1idWY7CgoKCgoKCnR5cGVkZWYgX19vZmY2NF90IHN0
cmVhbW9mZjsKdHlwZWRlZiBfX29mZjY0X3Qgc3RyZWFtcG9zOwoKCgoKdHlwZWRlZiBfX3NzaXpl
X3Qgc3RyZWFtc2l6ZTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2ZtdGZsYWdzOwp0eXBlZGVm
IHVuc2lnbmVkIGNoYXIgX19pb3N0YXRlOwoKc3RydWN0IF9pb3NfZmllbGRzCnsKICAgIHN0cmVh
bWJ1ZiAqX3N0cmJ1ZjsKICAgIG9zdHJlYW0qIF90aWU7CiAgICBpbnQgX3dpZHRoOwogICAgX19m
bXRmbGFncyBfZmxhZ3M7CiAgICB3Y2hhcl90IF9maWxsOwogICAgX19pb3N0YXRlIF9zdGF0ZTsK
ICAgIF9faW9zdGF0ZSBfZXhjZXB0aW9uczsKICAgIGludCBfcHJlY2lzaW9uOwoKICAgIHZvaWQg
Kl9hcnJheXM7Cn07CgojIDEyNiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAzCmNs
YXNzIGlvcyA6IHB1YmxpYyBfaW9zX2ZpZWxkcyB7CiAgaW9zJiBvcGVyYXRvcj0oaW9zJik7CiAg
aW9zIChjb25zdCBpb3MmKTsKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9fZm10ZmxhZ3MgZm10Zmxh
Z3M7CiAgICB0eXBlZGVmIGludCBpb3N0YXRlOwogICAgdHlwZWRlZiBpbnQgb3Blbm1vZGU7CiAg
ICB0eXBlZGVmIF9fc3NpemVfdCBzdHJlYW1zaXplOwogICAgZW51bSBpb19zdGF0ZSB7CiAgICAg
ICAgZ29vZGJpdCA9IDAsCiAgICAgICAgZW9mYml0ID0gMSwKICAgICAgICBmYWlsYml0ID0gMiwK
ICAgICAgICBiYWRiaXQgPSA0IH07CiAgICBlbnVtIG9wZW5fbW9kZSB7CiAgICAgICAgaW4gPSAx
LAogICAgICAgIG91dCA9IDIsCiAgICAgICAgYXRlID0gNCwKICAgICAgICBhcHAgPSA4LAogICAg
ICAgIHRydW5jID0gMTYsCiAgICAgICAgbm9jcmVhdGUgPSAzMiwKICAgICAgICBub3JlcGxhY2Ug
PSA2NCwKICAgICAgICBiaW4gPSAxMjgsCiAgICAgICAgYmluYXJ5ID0gMTI4IH07CiAgICBlbnVt
IHNlZWtfZGlyIHsgYmVnLCBjdXIsIGVuZH07CiAgICB0eXBlZGVmIGVudW0gc2Vla19kaXIgc2Vl
a2RpcjsKCiAgICBlbnVtIHsgc2tpcHdzPTAxLAogICAgICAgICAgIGxlZnQ9MDIsIHJpZ2h0PTA0
LCBpbnRlcm5hbD0wMTAsCiAgICAgICAgICAgZGVjPTAyMCwgb2N0PTA0MCwgaGV4PTAxMDAsCiAg
ICAgICAgICAgc2hvd2Jhc2U9MDIwMCwgc2hvd3BvaW50PTA0MDAsCiAgICAgICAgICAgdXBwZXJj
YXNlPTAxMDAwLCBzaG93cG9zPTAyMDAwLAogICAgICAgICAgIHNjaWVudGlmaWM9MDQwMDAsIGZp
eGVkPTAxMDAwMCwKICAgICAgICAgICB1bml0YnVmPTAyMDAwMCwgc3RkaW89MDQwMDAwCgoKCiAg
ICAgICAgICAgfTsKICAgIGVudW0gewogICAgICAgIGJhc2VmaWVsZD1kZWMrb2N0K2hleCwKICAg
ICAgICBmbG9hdGZpZWxkID0gc2NpZW50aWZpYytmaXhlZCwKICAgICAgICBhZGp1c3RmaWVsZCA9
IGxlZnQrcmlnaHQraW50ZXJuYWwKICAgIH07CgojIDE3OSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0
cmVhbWJ1Zi5oIiAzCiAgICBvc3RyZWFtKiB0aWUoKSBjb25zdCB7IHJldHVybiBfdGllOyB9CiAg
ICBvc3RyZWFtKiB0aWUob3N0cmVhbSogdmFsKSB7IG9zdHJlYW0qIHNhdmU9X3RpZTsgX3RpZT12
YWw7IHJldHVybiBzYXZlOyB9CgoKICAgIHdjaGFyX3QgZmlsbCgpIGNvbnN0IHsgcmV0dXJuIF9m
aWxsOyB9CiAgICB3Y2hhcl90IGZpbGwod2NoYXJfdCBuZXdmKQogICAgICAgIHt3Y2hhcl90IG9s
ZGYgPSBfZmlsbDsgX2ZpbGwgPSBuZXdmOyByZXR1cm4gb2xkZjt9CiAgICBmbXRmbGFncyBmbGFn
cygpIGNvbnN0IHsgcmV0dXJuIF9mbGFnczsgfQogICAgZm10ZmxhZ3MgZmxhZ3MoZm10ZmxhZ3Mg
bmV3X3ZhbCkgewogICAgICAgIGZtdGZsYWdzIG9sZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5l
d192YWw7IHJldHVybiBvbGRfdmFsOyB9CiAgICBpbnQgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1
cm4gX3ByZWNpc2lvbjsgfQogICAgaW50IHByZWNpc2lvbihpbnQgbmV3cCkgewogICAgICAgIHVu
c2lnbmVkIHNob3J0IG9sZHAgPSBfcHJlY2lzaW9uOyBfcHJlY2lzaW9uID0gKHVuc2lnbmVkIHNo
b3J0KW5ld3A7CiAgICAgICAgcmV0dXJuIG9sZHA7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10Zmxh
Z3MgdmFsKSB7CiAgICAgICAgZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKICAgICAgICBfZmxh
Z3MgfD0gdmFsOyByZXR1cm4gb2xkYml0czsgfQogICAgZm10ZmxhZ3Mgc2V0ZihmbXRmbGFncyB2
YWwsIGZtdGZsYWdzIG1hc2spIHsKICAgICAgICBmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwog
ICAgICAgIF9mbGFncyA9IChfZmxhZ3MgJiB+bWFzaykgfCAodmFsICYgbWFzayk7IHJldHVybiBv
bGRiaXRzOyB9CiAgICBmbXRmbGFncyB1bnNldGYoZm10ZmxhZ3MgbWFzaykgewogICAgICAgIGZt
dGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7CiAgICAgICAgX2ZsYWdzICY9IH5tYXNrOyByZXR1cm4g
b2xkYml0czsgfQogICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX3dpZHRoOyB9CiAgICBp
bnQgd2lkdGgoaW50IHZhbCkgeyBpbnQgc2F2ZSA9IF93aWR0aDsgX3dpZHRoID0gdmFsOyByZXR1
cm4gc2F2ZTsgfQoKCgoKICAgIHZvaWQgX3Rocm93X2ZhaWx1cmUoKSBjb25zdCB7IH0KCiAgICB2
b2lkIGNsZWFyKGlvc3RhdGUgc3RhdGUgPSAwKSB7CiAgICAgICAgX3N0YXRlID0gX3N0cmJ1ZiA/
IHN0YXRlIDogc3RhdGV8YmFkYml0OwogICAgICAgIGlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykg
X3Rocm93X2ZhaWx1cmUoKTsgfQogICAgdm9pZCBzZXQoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8
PSBmbGFnOwogICAgICAgIGlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUo
KTsgfQogICAgdm9pZCBzZXRzdGF0ZShpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7CiAg
ICAgICAgaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICBp
bnQgZ29vZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSA9PSAwOyB9CiAgICBpbnQgZW9mKCkgY29u
c3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjplb2ZiaXQ7IH0KICAgIGludCBmYWlsKCkgY29uc3Qg
eyByZXR1cm4gX3N0YXRlICYgKGlvczo6YmFkYml0fGlvczo6ZmFpbGJpdCk7IH0KICAgIGludCBi
YWQoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmJhZGJpdDsgfQogICAgaW9zdGF0ZSBy
ZHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlOyB9CiAgICBvcGVyYXRvciB2b2lkKigpIGNv
bnN0IHsgcmV0dXJuIGZhaWwoKSA/ICh2b2lkKikwIDogKHZvaWQqKSgtMSk7IH0KICAgIGludCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBmYWlsKCk7IH0KICAgIGlvc3RhdGUgZXhjZXB0aW9u
cygpIGNvbnN0IHsgcmV0dXJuIF9leGNlcHRpb25zOyB9CiAgICB2b2lkIGV4Y2VwdGlvbnMoaW9z
dGF0ZSBlbmFibGUpIHsKICAgICAgICBfZXhjZXB0aW9ucyA9IGVuYWJsZTsKICAgICAgICBpZiAo
X3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KCiAgICBzdHJlYW1idWYq
IHJkYnVmKCkgY29uc3QgeyByZXR1cm4gX3N0cmJ1ZjsgfQogICAgc3RyZWFtYnVmKiByZGJ1Zihz
dHJlYW1idWYgKl9zKSB7CiAgICAgIHN0cmVhbWJ1ZiAqX29sZCA9IF9zdHJidWY7IF9zdHJidWYg
PSBfczsgY2xlYXIgKCk7IHJldHVybiBfb2xkOyB9CgogICAgc3RhdGljIGludCBzeW5jX3dpdGhf
c3RkaW8oaW50IG9uKTsKICAgIHN0YXRpYyB2b2lkIHN5bmNfd2l0aF9zdGRpbygpIHsgc3luY193
aXRoX3N0ZGlvKDEpOyB9CiAgICBzdGF0aWMgZm10ZmxhZ3MgYml0YWxsb2MoKTsKICAgIHN0YXRp
YyBpbnQgeGFsbG9jKCk7CiAgICB2b2lkKiYgcHdvcmQoaW50KTsKICAgIHZvaWQqIHB3b3JkKGlu
dCkgY29uc3Q7CiAgICBsb25nJiBpd29yZChpbnQpOwogICAgbG9uZyBpd29yZChpbnQpIGNvbnN0
OwoKIyAyNTEgIi91c3IvaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwogICAgY2xhc3MgSW5p
dCB7CiAgICBwdWJsaWM6CiAgICAgIEluaXQgKCkgeyB9CiAgICB9OwoKICBwcm90ZWN0ZWQ6CiAg
ICBpbmxpbmUgaW9zKHN0cmVhbWJ1Ziogc2IgPSAwLCBvc3RyZWFtKiB0aWVfdG8gPSAwKTsKICAg
IGlubGluZSB2aXJ0dWFsIH5pb3MoKTsKICAgIGlubGluZSB2b2lkIGluaXQoc3RyZWFtYnVmKiBz
Yiwgb3N0cmVhbSogdGllID0gMCk7Cn07CgoKCgp0eXBlZGVmIGlvczo6c2Vla19kaXIgX3NlZWtf
ZGlyOwojIDI3NiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAzCmNsYXNzIHN0cmVh
bW1hcmtlciA6IHByaXZhdGUgX0lPX21hcmtlciB7CiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtYnVm
OwogICAgdm9pZCBzZXRfb2Zmc2V0KGludCBvZmZzZXQpIHsgX3BvcyA9IG9mZnNldDsgfQogIHB1
YmxpYzoKICAgIHN0cmVhbW1hcmtlcihzdHJlYW1idWYgKnNiKTsKICAgIH5zdHJlYW1tYXJrZXIo
KTsKICAgIGludCBzYXZpbmcoKSB7IHJldHVybiAxOyB9CiAgICBpbnQgZGVsdGEoc3RyZWFtbWFy
a2VyJik7CiAgICBpbnQgZGVsdGEoKTsKfTsKCnN0cnVjdCBzdHJlYW1idWYgOiBwdWJsaWMgX0lP
X0ZJTEUgewogICAgZnJpZW5kIGNsYXNzIGlvczsKICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtOwog
ICAgZnJpZW5kIGNsYXNzIG9zdHJlYW07CiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtbWFya2VyOwog
ICAgY29uc3Qgdm9pZCAqJl92dGFibGUoKSB7IHJldHVybiAqKGNvbnN0IHZvaWQqKikoKF9JT19G
SUxFKil0aGlzICsgMSk7IH0KICBwcm90ZWN0ZWQ6CiAgICBzdGF0aWMgc3RyZWFtYnVmKiBfbGlz
dF9hbGw7CiAgICBfSU9fRklMRSomIHhjaGFpbigpIHsgcmV0dXJuIF9jaGFpbjsgfQogICAgdm9p
ZCBfdW5fbGluaygpOwogICAgdm9pZCBfbGlua19pbigpOwogICAgY2hhciogZ3B0cigpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9mbGFncyAmIDB4MTAwID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFk
X3B0cjsgfQogICAgY2hhciogcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9wdHI7IH0K
ICAgIGNoYXIqIGVncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgPyBf
SU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgIGNoYXIqIGVwcHRyKCkgY29uc3QgeyBy
ZXR1cm4gX0lPX3dyaXRlX2VuZDsgfQogICAgY2hhciogcGJhc2UoKSBjb25zdCB7IHJldHVybiBf
SU9fd3JpdGVfYmFzZTsgfQogICAgY2hhciogZWJhY2soKSBjb25zdAogICAgICB7IHJldHVybiBf
ZmxhZ3MgJiAweDEwMCA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9iYXNlO30KICAgIGNoYXIq
IGJhc2UoKSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2Jhc2U7IH0KICAgIGNoYXIqIGVidWYoKSBj
b25zdCB7IHJldHVybiBfSU9fYnVmX2VuZDsgfQogICAgaW50IGJsZW4oKSBjb25zdCB7IHJldHVy
biBfSU9fYnVmX2VuZCAtIF9JT19idWZfYmFzZTsgfQogICAgdm9pZCB4cHV0X2NoYXIoY2hhciBj
KSB7ICpfSU9fd3JpdGVfcHRyKysgPSBjOyB9CiAgICBpbnQgeGZsYWdzKCkgeyByZXR1cm4gX2Zs
YWdzOyB9CiAgICBpbnQgeGZsYWdzKGludCBmKSB7aW50IGZsID0gX2ZsYWdzOyBfZmxhZ3MgPSBm
OyByZXR1cm4gZmw7fQogICAgdm9pZCB4c2V0ZmxhZ3MoaW50IGYpIHsgX2ZsYWdzIHw9IGY7IH0K
ICAgIHZvaWQgeHNldGZsYWdzKGludCBmLCBpbnQgbWFzaykKICAgICAgeyBfZmxhZ3MgPSAoX2Zs
YWdzICYgfm1hc2spIHwgKGYgJiBtYXNrKTsgfQogICAgdm9pZCBnYnVtcChpbnQgbikKICAgICAg
eyBfZmxhZ3MgJiAweDEwMCA/IChfSU9fc2F2ZV9iYXNlKz1uKTooX0lPX3JlYWRfcHRyKz1uKTt9
CiAgICB2b2lkIHBidW1wKGludCBuKSB7IF9JT193cml0ZV9wdHIgKz0gbjsgfQogICAgdm9pZCBz
ZXRiKGNoYXIqIGIsIGNoYXIqIGViLCBpbnQgYT0wKTsKICAgIHZvaWQgc2V0cChjaGFyKiBwLCBj
aGFyKiBlcCkKICAgICAgeyBfSU9fd3JpdGVfYmFzZT1fSU9fd3JpdGVfcHRyPXA7IF9JT193cml0
ZV9lbmQ9ZXA7IH0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hhciogZywgY2hhciAqZWcpIHsK
ICAgICAgaWYgKF9mbGFncyAmIDB4MTAwKSBfSU9fZnJlZV9iYWNrdXBfYXJlYSh0aGlzKTsKICAg
ICAgX0lPX3JlYWRfYmFzZSA9IGViOyBfSU9fcmVhZF9wdHIgPSBnOyBfSU9fcmVhZF9lbmQgPSBl
ZzsgfQogICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBfc2hvcnRidWY7IH0KCiAgICBpbnQg
aW5fYmFja3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDA7IH0KCiAgICBjaGFyICpHYmFzZSgp
IHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7IH0K
CiAgICBjaGFyICplR3B0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfZW5kIDog
X0lPX3JlYWRfZW5kOyB9CgogICAgY2hhciAqQmJhc2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/
IF9JT19yZWFkX2Jhc2UgOiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICpCcHRyKCkgeyByZXR1
cm4gX0lPX2JhY2t1cF9iYXNlOyB9CgogICAgY2hhciAqZUJwdHIoKSB7IHJldHVybiBpbl9iYWNr
dXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19zYXZlX2VuZDsgfQogICAgY2hhciAqTmJhc2UoKSB7
IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICplTnB0cigpIHsgcmV0dXJuIF9JT19z
YXZlX2VuZDsgfQogICAgaW50IGhhdmVfYmFja3VwKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFzZSAh
PSBfX251bGw7IH0KICAgIGludCBoYXZlX21hcmtlcnMoKSB7IHJldHVybiBfbWFya2VycyAhPSBf
X251bGw7IH0KICAgIHZvaWQgZnJlZV9iYWNrdXBfYXJlYSgpOwogICAgdm9pZCB1bnNhdmVfbWFy
a2VycygpOwogICAgaW50IHB1dF9tb2RlKCkgeyByZXR1cm4gX2ZsYWdzICYgMHg4MDA7IH0KICAg
IGludCBzd2l0Y2hfdG9fZ2V0X21vZGUoKTsKCiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwog
IHB1YmxpYzoKICAgIHN0YXRpYyBpbnQgZmx1c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVz
aF9hbGxfbGluZWJ1ZmZlcmVkKCk7CiAgICB2aXJ0dWFsIH5zdHJlYW1idWYoKTsKICAgIHZpcnR1
YWwgaW50IG92ZXJmbG93KGludCBjID0gKC0xKSk7CiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3co
KTsKICAgIHZpcnR1YWwgaW50IHVmbG93KCk7CiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50
IGMpOwoKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFt
c2l6ZSBuKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6
ZSBuKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIs
IGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla3Bv
cyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwoKICAgIHN0cmVh
bXBvcyBwdWJzZWVrb2ZmKHN0cmVhbW9mZiBvLCBfc2Vla19kaXIgZCwgaW50IG1vZGU9aW9zOjpp
bnxpb3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtvZmYgKHRoaXMsIG8sIGQsIG1vZGUp
OyB9CiAgICBzdHJlYW1wb3MgcHVic2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlv
czo6aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrcG9zICh0aGlzLCBwb3MsIG1v
ZGUpOyB9CiAgICBzdHJlYW1wb3Mgc3NlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBt
b2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgc3RyZWFtcG9zIHNzZWVrcG9zKHN0cmVhbXBvcyBw
b3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbWJ1Ziog
c2V0YnVmKGNoYXIqIHAsIGludCBsZW4pOwogICAgdmlydHVhbCBpbnQgc3luYygpOwogICAgdmly
dHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwoKICAgIGludCBzZWVrbWFyayhzdHJlYW1tYXJrZXImIG1h
cmssIGludCBkZWx0YSA9IDApOwogICAgaW50IHNwdXRiYWNrYyhjaGFyIGMpOwogICAgaW50IHN1
bmdldGMoKTsKICAgIGludCB1bmJ1ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMiA/IDEgOiAw
OyB9CiAgICBpbnQgbGluZWJ1ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgyMDAgPyAxIDog
MDsgfQogICAgdm9pZCB1bmJ1ZmZlcmVkKGludCBpKQogICAgICAgIHsgaWYgKGkpIF9mbGFncyB8
PSAyOyBlbHNlIF9mbGFncyAmPSB+MjsgfQogICAgdm9pZCBsaW5lYnVmZmVyZWQoaW50IGkpCiAg
ICAgICAgeyBpZiAoaSkgX2ZsYWdzIHw9IDB4MjAwOyBlbHNlIF9mbGFncyAmPSB+MHgyMDA7IH0K
ICAgIGludCBhbGxvY2F0ZSgpIHsKICAgICAgICBpZiAoYmFzZSgpIHx8IHVuYnVmZmVyZWQoKSkg
cmV0dXJuIDA7CiAgICAgICAgZWxzZSByZXR1cm4gZG9hbGxvY2F0ZSgpOyB9CgogICAgdm9pZCBh
bGxvY2J1ZigpIHsgaWYgKGJhc2UoKSA9PSBfX251bGwpIGRvYWxsb2NidWYoKTsgfQogICAgdm9p
ZCBkb2FsbG9jYnVmKCk7CiAgICBpbnQgaW5fYXZhaWwoKSB7IHJldHVybiBfSU9fcmVhZF9lbmQg
LSBfSU9fcmVhZF9wdHI7IH0KICAgIGludCBvdXRfd2FpdGluZygpIHsgcmV0dXJuIF9JT193cml0
ZV9wdHIgLSBfSU9fd3JpdGVfYmFzZTsgfQogICAgc3RyZWFtc2l6ZSBzcHV0bihjb25zdCBjaGFy
KiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIHhzcHV0bihzLCBuKTsgfQogICAgc3RyZWFtc2l6
ZSBwYWRuKGNoYXIgcGFkLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19wYWRuKHRoaXMsIHBh
ZCwgbik7IH0KICAgIHN0cmVhbXNpemUgc2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKSB7IHJl
dHVybiBfSU9fc2dldG4odGhpcywgcywgbik7IH0KICAgIGludCBpZ25vcmUoaW50KTsKICAgIGlu
dCBnZXRfY29sdW1uKCk7CiAgICBpbnQgc2V0X2NvbHVtbihpbnQpOwogICAgbG9uZyBzZ2V0bGlu
ZShjaGFyKiBidWYsIHNpemVfdCBuLCBjaGFyIGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7CiAg
ICBpbnQgc3B1dGMoaW50IGMpIHsgcmV0dXJuIF9JT19wdXRjKGMsIHRoaXMpOyB9CiAgICBpbnQg
c2J1bXBjKCkgeyByZXR1cm4gX0lPX2dldGModGhpcyk7IH0KICAgIGludCBzZ2V0YygpIHsgcmV0
dXJuICgodGhpcyktPl9JT19yZWFkX3B0ciA+PSAodGhpcyktPl9JT19yZWFkX2VuZCAmJiBfX3Vu
ZGVyZmxvdyAodGhpcykgPT0gKC0xKSA/ICgtMSkgOiAqKHVuc2lnbmVkIGNoYXIgKikgKHRoaXMp
LT5fSU9fcmVhZF9wdHIpOyB9CiAgICBpbnQgc25leHRjKCkgewogICAgICAgIGlmIChfSU9fcmVh
ZF9wdHIgPj0gX0lPX3JlYWRfZW5kICYmIF9fdW5kZXJmbG93KHRoaXMpID09ICgtMSkpCiAgICAg
ICAgICByZXR1cm4gKC0xKTsKICAgICAgICBlbHNlIHJldHVybiBfSU9fcmVhZF9wdHIrKywgc2dl
dGMoKTsgfQogICAgdm9pZCBzdG9zc2MoKSB7IGlmIChfSU9fcmVhZF9wdHIgPCBfSU9fcmVhZF9l
bmQpIF9JT19yZWFkX3B0cisrOyB9CiAgICBpbnQgdnNjYW4oY2hhciBjb25zdCAqZm10MCwgX19n
bnVjX3ZhX2xpc3QgYXAsIGlvcyogc3RyZWFtID0gX19udWxsKTsKICAgIGludCBzY2FuKGNoYXIg
Y29uc3QgKmZtdDAgLi4uKTsKICAgIGludCB2Zm9ybShjaGFyIGNvbnN0ICpmbXQwLCBfX2dudWNf
dmFfbGlzdCBhcCk7CiAgICBpbnQgZm9ybShjaGFyIGNvbnN0ICpmbXQwIC4uLik7CgoKCgogICAg
dmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFtc2l6ZSBzaXplKTsK
ICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0cmVhbXNpemUp
OwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwog
ICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lk
Kik7CgogICAgdmlydHVhbCBpbnQgc2hvd21hbnljKCk7CiAgICB2aXJ0dWFsIHZvaWQgaW1idWUo
dm9pZCAqKTsKCn07CgoKCgpjbGFzcyBmaWxlYnVmIDogcHVibGljIHN0cmVhbWJ1ZiB7CiAgcHJv
dGVjdGVkOgogICAgdm9pZCBpbml0KCk7CiAgcHVibGljOgogICAgc3RhdGljIGNvbnN0IGludCBv
cGVucHJvdDsKICAgIGZpbGVidWYoKTsKICAgIGZpbGVidWYoaW50IGZkKTsKICAgIGZpbGVidWYo
aW50IGZkLCBjaGFyKiBwLCBpbnQgbGVuKTsKCgoKICAgIH5maWxlYnVmKCk7CiAgICBmaWxlYnVm
KiBhdHRhY2goaW50IGZkKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUs
IGNvbnN0IGNoYXIgKm1vZGUpOwogICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFt
ZSwgaW9zOjpvcGVubW9kZSBtb2RlLCBpbnQgcHJvdCA9IDA2NjQpOwogICAgdmlydHVhbCBpbnQg
dW5kZXJmbG93KCk7CiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkpOwogICAg
aW50IGlzX29wZW4oKSBjb25zdCB7IHJldHVybiBfZmlsZW5vID49IDA7IH0KICAgIGludCBmZCgp
IGNvbnN0IHsgcmV0dXJuIGlzX29wZW4oKSA/IF9maWxlbm8gOiAoLTEpOyB9CiAgICBmaWxlYnVm
KiBjbG9zZSgpOwogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwogICAgdmlydHVhbCBzdHJl
YW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6
Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGludCBsZW4pOwog
ICAgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHN0
cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIGludCBz
eW5jKCk7CiAgcHJvdGVjdGVkOgoKICAgIGludCBpc19yZWFkaW5nKCkgeyByZXR1cm4gZWJhY2so
KSAhPSBlZ3B0cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyByZXR1cm4gaXNfcmVhZGluZygp
ID8gZ3B0cigpIDogcHB0cigpOyB9CgogICAgY2hhciogZmlsZV9wdHIoKSB7IHJldHVybiBlR3B0
cigpOyB9CgogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFt
c2l6ZSBzaXplKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0cmVhbW9mZiwgX3Nl
ZWtfZGlyKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0
cmVhbXNpemUpOwogICAgdmlydHVhbCBpbnQgc3lzX3N0YXQodm9pZCopOwogICAgdmlydHVhbCBp
bnQgc3lzX2Nsb3NlKCk7CgoKCgp9OwoKaW5saW5lIHZvaWQgaW9zOjppbml0KHN0cmVhbWJ1Ziog
c2IsIG9zdHJlYW0qIHRpZV90bykgewogICAgICAgICAgICAgICAgX3N0YXRlID0gc2IgPyBpb3M6
Omdvb2RiaXQgOiBpb3M6OmJhZGJpdDsgX2V4Y2VwdGlvbnM9MDsKICAgICAgICAgICAgICAgIF9z
dHJidWY9c2I7IF90aWUgPSB0aWVfdG87IF93aWR0aD0wOyBfZmlsbD0nICc7CgogICAgICAgICAg
ICAgICAgX2ZsYWdzPWlvczo6c2tpcHdzfGlvczo6ZGVjOwoKCgogICAgICAgICAgICAgICAgX3By
ZWNpc2lvbj02OyBfYXJyYXlzID0gMDsgfQoKaW5saW5lIGlvczo6aW9zKHN0cmVhbWJ1Ziogc2Is
IG9zdHJlYW0qIHRpZV90bykgeyBpbml0KHNiLCB0aWVfdG8pOyB9CgppbmxpbmUgaW9zOjp+aW9z
KCkgewoKCgoKCiAgICBvcGVyYXRvciBkZWxldGVbXSAoX2FycmF5cyk7Cn0KfQojIDMyICIvdXNy
L2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMiAzCgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3Ry
ZWFtOyBjbGFzcyBvc3RyZWFtOwp0eXBlZGVmIGlvcyYgKCpfX21hbmlwKShpb3MmKTsKdHlwZWRl
ZiBpc3RyZWFtJiAoKl9faW1hbmlwKShpc3RyZWFtJik7CnR5cGVkZWYgb3N0cmVhbSYgKCpfX29t
YW5pcCkob3N0cmVhbSYpOwoKZXh0ZXJuIGlzdHJlYW0mIHdzKGlzdHJlYW0mIGlucyk7CmV4dGVy
biBvc3RyZWFtJiBmbHVzaChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIGVuZGwob3N0
cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiBlbmRzKG9zdHJlYW0mIG91dHMpOwoKY2xhc3Mg
b3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGlvcwp7CgogICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVi
bGljOgogICAgb3N0cmVhbSgpIHsgfQogICAgb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFt
KiB0aWVkPV9fbnVsbCk7CiAgICBpbnQgb3BmeCgpIHsKICAgICAgICBpZiAoIWdvb2QoKSkgcmV0
dXJuIDA7CiAgICAgICAgZWxzZSB7IGlmIChfdGllKSBfdGllLT5mbHVzaCgpOzsgcmV0dXJuIDE7
fSB9CiAgICB2b2lkIG9zZngoKSB7OwogICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MoKSAmIChp
b3M6OnVuaXRidWZ8aW9zOjpzdGRpbykpCiAgICAgICAgICAgICAgICAgICAgICBkb19vc2Z4KCk7
IH0KICAgIG9zdHJlYW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9zdHJi
dWYtPnNwdXRjKGMpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgogICAgb3N0cmVhbSYgd3JpdGUoY29u
c3QgY2hhciAqcywgc3RyZWFtc2l6ZSBuKTsKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHVuc2ln
bmVkIGNoYXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNo
YXIqKXMsIG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHNpZ25lZCBjaGFyICpzLCBzdHJl
YW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBv
c3RyZWFtJiB3cml0ZShjb25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJu
IHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1wb3Mp
OwogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9z
IHRlbGxwKCk7CiAgICBvc3RyZWFtJiBmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAg
b3N0cmVhbSYgdmZvcm0oY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcmdzKTsK
CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
KHVuc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3Ry
ZWFtJiBvcGVyYXRvcjw8KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIp
YzsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJlYW0m
IG9wZXJhdG9yPDwoY29uc3QgdW5zaWduZWQgY2hhciAqcykKICAgICAgICB7IHJldHVybiAoKnRo
aXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHNp
Z25lZCBjaGFyICpzKQogICAgICAgIHsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7
IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgdm9pZCAqcCk7CiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IG4p
OwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PCh1bnNpZ25lZCBsb25nIG4pOwoKICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8
PChsb25nIGxvbmcgbik7CiAgICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5z
aWduZWQgbG9uZyBsb25nIG4pOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2hvcnQgbikge3Jl
dHVybiBvcGVyYXRvcjw8KChpbnQpbik7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25l
ZCBzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKHVuc2lnbmVkIGludCluKTt9CgogICAgb3N0
cmVhbSYgb3BlcmF0b3I8PChib29sIGIpIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGludCliKTsgfQoK
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZG91YmxlIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PChmbG9hdCBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0KCiAgICBvc3RyZWFt
JiBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIG4pOwoKCgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChf
X29tYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQogICAgb3N0cmVhbSYgb3Bl
cmF0b3I8PChfX21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwoc3RyZWFtYnVmKik7CgoKCn07CgpjbGFzcyBpc3RyZWFtIDog
dmlydHVhbCBwdWJsaWMgaW9zCnsKCnByb3RlY3RlZDoKICAgIHNpemVfdCBfZ2NvdW50OwoKICAg
IGludCBfc2tpcF93cygpOwogIHB1YmxpYzoKICAgIGlzdHJlYW0oKTogX2djb3VudCAoMCkgeyB9
CiAgICBpc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD1fX251bGwpOwogICAgaXN0
cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0
cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicp
CiAgICAgICAgeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3Ry
ZWFtJiBnZXQoY2hhciYgYyk7CiAgICBpc3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciYgYykgeyBy
ZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVhbSYgZ2V0bGluZShjaGFyKiBwdHIsIGlu
dCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldGxpbmUodW5zaWduZWQg
Y2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKICAgICAgICB7IHJldHVybiBn
ZXRsaW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVk
IGNoYXImIGMpIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0KICAgIGlzdHJlYW0mIGdldChzaWdu
ZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKICAgICAgICB7IHJldHVy
biBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoc2ln
bmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCiAgICAgICAgeyByZXR1
cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChj
aGFyICpwdHIsIHN0cmVhbXNpemUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIg
KnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9
CiAgICBpc3RyZWFtJiByZWFkKHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAg
eyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpw
dHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQog
ICAgaXN0cmVhbSYgZ2V0KHN0cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlz
dHJlYW0mIGdldHMoY2hhciAqKnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGlu
dCBuZWVkID0gMCkgewogICAgICAgIGlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyBy
ZXR1cm4gMDsgfQogICAgICAgIGVsc2Ugewo7CiAgICAgICAgICBpZiAoX3RpZSAmJiAobmVlZCA9
PSAwIHx8IHJkYnVmKCktPmluX2F2YWlsKCkgPCBuZWVkKSkgX3RpZS0+Zmx1c2goKTsKICAgICAg
ICAgIGlmICghbmVlZCAmJiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSkgcmV0dXJuIF9za2lwX3dz
KCk7CiAgICAgICAgICBlbHNlIHJldHVybiAxOwogICAgICAgIH0KICAgIH0KICAgIGludCBpcGZ4
MCgpIHsKICAgICAgICBpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7
IH0KICAgICAgICBlbHNlIHsKOwogICAgICAgICAgaWYgKF90aWUpIF90aWUtPmZsdXNoKCk7CiAg
ICAgICAgICBpZiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBfd3MoKTsKICAg
ICAgICAgIGVsc2UgcmV0dXJuIDE7CiAgICAgICAgfQogICAgfQogICAgaW50IGlwZngxKCkgewog
ICAgICAgIGlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQogICAg
ICAgIGVsc2Ugewo7CiAgICAgICAgICBpZiAoX3RpZSAmJiByZGJ1ZigpLT5pbl9hdmFpbCgpID09
IDApIF90aWUtPmZsdXNoKCk7CiAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICB9CiAg
ICB2b2lkIGlzZngoKSB7OyB9CiAgICBpbnQgZ2V0KCkgeyBpZiAoIWlwZngxKCkpIHJldHVybiAo
LTEpOwogICAgICAgICAgICAgICAgZWxzZSB7IGludCBjaCA9IF9zdHJidWYtPnNidW1wYygpOwog
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAoLTEpKSBzZXQoaW9zOjplb2ZiaXQpOwog
ICAgICAgICAgICAgICAgICAgICAgIGlzZngoKTsKICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY2g7CiAgICAgICAgICAgICAgICAgICAgIH0gfQogICAgaW50IHBlZWsoKTsKICAgIHNpemVf
dCBnY291bnQoKSB7IHJldHVybiBfZ2NvdW50OyB9CiAgICBpc3RyZWFtJiBpZ25vcmUoaW50IG49
MSwgaW50IGRlbGltID0gKC0xKSk7CiAgICBpbnQgc3luYyAoKTsKICAgIGlzdHJlYW0mIHNlZWtn
KHN0cmVhbXBvcyk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAg
ICBzdHJlYW1wb3MgdGVsbGcoKTsKICAgIGlzdHJlYW0mIHB1dGJhY2soY2hhciBjaCkgewogICAg
ICAgIGlmIChnb29kKCkgJiYgX3N0cmJ1Zi0+c3B1dGJhY2tjKGNoKSA9PSAoLTEpKSBjbGVhcihp
b3M6OmJhZGJpdCk7CiAgICAgICAgcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHVuZ2V0KCkg
ewogICAgICAgIGlmIChnb29kKCkgJiYgX3N0cmJ1Zi0+c3VuZ2V0YygpID09ICgtMSkpIGNsZWFy
KGlvczo6YmFkYml0KTsKICAgICAgICByZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgc2Nhbihj
b25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIGlzdHJlYW0mIHZzY2FuKGNvbnN0IGNoYXIgKmZv
cm1hdCwgX19nbnVjX3ZhX2xpc3QgYXJncyk7CgoKCgoKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+
KGNoYXIqKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hhciogcCkgeyByZXR1
cm4gb3BlcmF0b3I+PigoY2hhciopcCk7IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVk
IGNoYXIqcCkgeyByZXR1cm4gb3BlcmF0b3I+PigoY2hhciopcCk7IH0KICAgIGlzdHJlYW0mIG9w
ZXJhdG9yPj4oY2hhciYgYyk7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXIm
IGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+
PihzaWduZWQgY2hhciYgYykge3JldHVybiBvcGVyYXRvcj4+KChjaGFyJiljKTt9CiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KGludCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nJik7Cgog
ICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgbG9uZyYpOwogICAgX19l
eHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYpOwoKICAg
IGlzdHJlYW0mIG9wZXJhdG9yPj4oc2hvcnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5z
aWduZWQgaW50Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmKTsKICAg
IGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmKTsKCiAgICBpc3RyZWFtJiBvcGVy
YXRvcj4+KGJvb2wmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGZsb2F0Jik7CiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nIGRv
dWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+PiggX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgq
dGhpcyk7IHJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KF9faW1hbmlwIGZ1
bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHN0
cmVhbWJ1ZiopOwp9OwoKY2xhc3MgaW9zdHJlYW0gOiBwdWJsaWMgaXN0cmVhbSwgcHVibGljIG9z
dHJlYW0KewogIHB1YmxpYzoKICAgIGlvc3RyZWFtKCkgeyB9CiAgICBpb3N0cmVhbShzdHJlYW1i
dWYqIHNiLCBvc3RyZWFtKnRpZWQ9X19udWxsKTsKfTsKCmNsYXNzIF9JT19pc3RyZWFtX3dpdGhh
c3NpZ24gOiBwdWJsaWMgaXN0cmVhbSB7CnB1YmxpYzoKICBfSU9faXN0cmVhbV93aXRoYXNzaWdu
JiBvcGVyYXRvcj0oaXN0cmVhbSYpOwogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9y
PShfSU9faXN0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0
YXRpY19jYXN0PGlzdHJlYW0mPiAocmhzKSk7IH0KfTsKCmNsYXNzIF9JT19vc3RyZWFtX3dpdGhh
c3NpZ24gOiBwdWJsaWMgb3N0cmVhbSB7CnB1YmxpYzoKICBfSU9fb3N0cmVhbV93aXRoYXNzaWdu
JiBvcGVyYXRvcj0ob3N0cmVhbSYpOwogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9y
PShfSU9fb3N0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0
YXRpY19jYXN0PG9zdHJlYW0mPiAocmhzKSk7IH0KfTsKCmV4dGVybiBfSU9faXN0cmVhbV93aXRo
YXNzaWduIGNpbjsKCmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNvdXQsIGNlcnI7Cgpl
eHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjbG9nCgoKCjsKCmV4dGVybiBpc3RyZWFtJiBs
b2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBpc3RyZWFtJiB1bmxvY2soaXN0cmVhbSYgaW5zKTsK
ZXh0ZXJuIG9zdHJlYW0mIGxvY2sob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiB1bmxv
Y2sob3N0cmVhbSYgb3V0cyk7CgpzdHJ1Y3QgSW9zdHJlYW1faW5pdCB7IH0gOwoKaW5saW5lIGlv
cyYgZGVjKGlvcyYgaSkKeyBpLnNldGYoaW9zOjpkZWMsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6
b2N0KTsgcmV0dXJuIGk7IH0KaW5saW5lIGlvcyYgaGV4KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpo
ZXgsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KaW5saW5lIGlvcyYg
b2N0KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpvY3QsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0
KTsgcmV0dXJuIGk7IH0KfQoKIyA0NiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAy
IDMKIyA1NCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgojIDM0ICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDEgMwoKZXh0ZXJuICJDIiB7CgojIDk0ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAg
fSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9u
ZyBpbnQgcmVtOwogIH0gbGRpdl90OwojIDEzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4
dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4
dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0
cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQg
YXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2Nv
bnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhy
b3cgKCk7CgojIDE2MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBsb25nIGludCBz
dHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsK
CmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9u
X18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgoKCl9fZXh0ZW5zaW9u
X18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5z
aWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwojIDI1MCAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAo
KTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91
YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dy
b3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1
bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpf
X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cg
KCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0
b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKIyAzODUgIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAo
KTsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDEgMwpleHRlcm4gIkMiIHsKCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVm
IF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xv
bmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVf
cXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZf
dDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwojIDU4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDMKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoK
CgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190
OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsK
IyA5NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19waWRfdCBwaWRfdDsK
CgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoK
CgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsK
CgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEyNyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o
IiAzCiMgNzEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwp0eXBlZGVmIF9fdGltZV90IHRpbWVf
dDsKCiMgODIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9j
a2lkX3Q7CgojIDkzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX190aW1lcl90IHRp
bWVyX3Q7CgojIDEyNyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKIyAxNDEgIi91c3Iv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25n
Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50
IHVpbnQ7CiMgMTg0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50
OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQx
Nl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQz
Ml90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2
NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWdu
ZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBl
ZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJ
X18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwoKCgoKIyAyMTAgIi91c3IvaW5jbHVk
ZS9zeXMvdHlwZXMuaCIgMwojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKCgoK
IyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwp0eXBlZGVmIGludCBfX3NpZ19h
dG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192
YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdz
ZXRfdDsKCiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgoKIyAxMDUgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDEgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBsb25nIGludCB0
dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CgojIDM5ICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCnN0cnVjdCB0aW1ldmFsOwoKdHlwZWRl
ZiBfX2ZkX21hc2sgZmRfbWFzazsKCgp0eXBlZGVmIF9fZmRfc2V0IGZkX3NldDsKCgojIDc0ICIv
dXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRz
LCBfX2ZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICBfX2Zk
X3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgX19mZF9zZXQg
Kl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZh
bCAqX19yZXN0cmljdCBfX3RpbWVvdXQpIHRocm93ICgpOwoKIyA5MiAiL3Vzci9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMwp9CgojIDIxMCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoK
IyAyMjQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250X3QgYmxr
Y250X3Q7CgoKCnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19m
c2ZpbGNudF90IGZzZmlsY250X3Q7CiMgMjU2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMK
fQoKIyAzOTIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCmV4dGVybiBpbnQzMl90
IHJhbmRvbSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQg
aW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWdu
ZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNo
YXIgKl9fc3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewog
ICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsK
ICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAg
ICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFu
ZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
Kl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVu
c2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpOwoK
ZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0
cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxl
biwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0
IF9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmlj
dCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAq
X19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0
aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAoKTsK
CgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBkb3Vi
bGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4
dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5y
YW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4g
bG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4
ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQg
c3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNo
b3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAo
KTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIHRo
cm93ICgpOwoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQg
eFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBhWzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50
IGM7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgb2xkX3hbM107CiAgICBpbnQgaW5pdDsKICB9OwoK
CgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBf
X2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3Vs
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194
c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVz
dHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0
OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBp
bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IG5yYW5kNDhfciAo
dW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAg
ICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
bXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAg
ICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp
OwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm
ZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWwsIHN0
cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBz
ZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwKICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAogICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwojIDUyNiAi
L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3Np
emUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAq
Y2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lk
ICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j
X18pKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKCiMgMjYgIi91c3IvaW5jbHVk
ZS9hbGxvY2EuaCIgMSAzCgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4gdm9pZCAqYWxsb2NhIChz
aXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CgojIDU0NiAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgNTYwICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDMKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lk
KSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9fb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGlu
dCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICB0aHJvdyAoKTsKZXh0
ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2Fy
ZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGlu
dCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKIyA1
ODggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0
IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYg
KF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAo
Y2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0
IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAg
IHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIHRocm93ICgpOwojIDYy
NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9f
dGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVt
cGxhdGUpIHRocm93ICgpOwojIDY0MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBj
aGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
c3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKIyA2NjIgIi91c3Iv
aW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmlj
dCBfX3Jlc29sdmVkKSB0aHJvdyAoKTsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90
KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgoKCgoKCgpleHRlcm4gdm9pZCAq
YnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJf
Zm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVf
dCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5f
dCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA3MDAgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMwpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20p
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90
IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDcxOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQg
Kl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBf
X3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBp
bnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAg
aW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAo
ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCmV4
dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAg
ICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3Qg
X19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVl
LCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVj
cHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWdjdnQg
KGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBp
bnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj
dCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXpl
X3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGlu
dCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBp
bnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAg
ICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcWVjdnRfciAobG9u
ZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAq
X19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAg
ICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4
dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAg
ICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3Qg
X19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVf
dCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAq
X19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAq
X19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFy
ICpfX3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93
Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVy
biBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQog
ICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0IGNoYXIgKl9f
cmVzcG9uc2UpIHRocm93ICgpOwojIDg0MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVy
biBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cg
KCk7CgoKCgoKfQoKIyA1NSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKCgoj
IDU4ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9p
ZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIg
Kl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwg
X19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9f
ZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIg
Kl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0KCiMgNTcgIi91c3IvaW5jbHVk
ZS9nKystMy9zdGxfYWxsb2MuaCIgMiAzCiMgNzIgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxs
b2MuaCIgMwojIDIxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAxIDMKIyAzMCAiL3Vzci9pbmNs
dWRlL3NjaGVkLmgiIDEgMwoKCgojIDQ3ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMK
c3RydWN0IHNjaGVkX3BhcmFtCiAgewogICAgaW50IHNjaGVkX3ByaW9yaXR5OwogIH07CgpleHRl
cm4gIkMiIHsKCgoKZXh0ZXJuIGludCBjbG9uZSAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwg
dm9pZCAqX19jaGlsZF9zdGFjaywKICAgICAgICAgICAgICAgICAgaW50IF9fZmxhZ3MsIHZvaWQg
Kl9fYXJnKSB0aHJvdyAoKTsKCgp9CgojIDMzICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgpl
eHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IHNjaGVkX3NldHBhcmFtIChfX3BpZF90IF9fcGlkLCBf
X2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0g
Kl9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyIChfX3Bp
ZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBzY2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgc2NoZWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0X3By
aW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVk
X2dldF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQsIHN0cnVjdCB0aW1lc3BlYyAq
X190KSB0aHJvdyAoKTsKCn0KCiMgMjEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKIyAz
MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgojIDYw
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgojIDEx
NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50
IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGlu
dCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsK
CgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoK
CgoKc3RydWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7
CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7Cgoj
IDE2MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gY2xvY2tfdCBjbG9jayAodm9pZCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lICh0aW1lX3QgKl9fdGltZXIpIHRocm93ICgp
OwoKCmV4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1l
MCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIHRp
bWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVf
dCBzdHJmdGltZSAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkg
dGhyb3cgKCk7CgojIDE5MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gc3RydWN0IHRt
ICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0
cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoK
CgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3Qg
X190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmlj
dCBfX3RwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29u
c3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh
ciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBj
aGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAog
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsK
CgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1l
ciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4
dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoK
ZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0
OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25z
dCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMgMjcwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz
CmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVy
biB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf
X3JlcXVlc3RlZF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpf
X3JlbWFpbmluZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lk
X3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3JlcykgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVj
ICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBf
X2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkKICAgICB0aHJvdyAoKTsK
CiMgMzA4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChj
bG9ja2lkX3QgX19jbG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdl
dmVudCAqX19yZXN0cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3Qg
Kl9fcmVzdHJpY3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0
ZSAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGlt
ZSAodGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1
ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJp
ZCwgc3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCB0aW1lcl9nZXRvdmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CiMgMzYxICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAzCn0KCiMgMjIgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIg
MwoKCgojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDEgMwpleHRlcm4gIkMiIHsKCgojIDQ5
ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90Owoj
IDM3MyAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCn0KCiMgMjUgIi91c3IvaW5jbHVkZS9wdGhy
ZWFkLmgiIDIgMwoKCgpleHRlcm4gIkMiIHsKCgoKIyA1OCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQu
aCIgMwplbnVtCnsKICBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSwKCiAgUFRIUkVBRF9DUkVBVEVf
REVUQUNIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX0lOSEVSSVRfU0NIRUQsCgogIFBUSFJFQURf
RVhQTElDSVRfU0NIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX1NDT1BFX1NZU1RFTSwKCiAgUFRI
UkVBRF9TQ09QRV9QUk9DRVNTCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwK
ICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tf
TlAsCiAgUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAojIDk5ICIvdXNyL2luY2x1ZGUvcHRocmVh
ZC5oIiAzCn07CgplbnVtCnsKICBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKCiAgUFRIUkVBRF9Q
Uk9DRVNTX1NIQVJFRAoKfTsKCiMgMTMwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCnN0cnVj
dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKik7
CiAgdm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xl
YW51cF9idWZmZXIgKl9fcHJldjsKfTsKCgoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxF
LAoKICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9E
RUZFUlJFRCwKCiAgUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCgp9OwojIDE2MiAiL3Vzci9p
bmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlIChwdGhyZWFkX3Qg
Kl9fcmVzdHJpY3QgX190aHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
cHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICooKl9fc3RhcnRfcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKl9fcmVzdHJpY3QgX19hcmcpIHRocm93ICgpOwoKCmV4dGVybiBwdGhy
ZWFkX3QgcHRocmVhZF9zZWxmICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf
ZXF1YWwgKHB0aHJlYWRfdCBfX3RocmVhZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIpIHRocm93ICgp
OwoKCmV4dGVybiB2b2lkIHB0aHJlYWRfZXhpdCAodm9pZCAqX19yZXR2YWwpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFk
X2pvaW4gKHB0aHJlYWRfdCBfX3RoLCB2b2lkICoqX190aHJlYWRfcmV0dXJuKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoIChwdGhyZWFkX3QgX190aCkgdGhyb3cgKCk7
CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9pbml0IChwdGhyZWFkX2F0dHJfdCAqX19h
dHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95IChwdGhyZWFk
X2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRk
ZXRhY2hzdGF0ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBfX2RldGFjaHN0YXRlKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq
X19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2Rl
dGFjaHN0YXRlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBh
cmFtIChwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3Ry
aWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcGFyYW0pIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0gKF9fY29uc3QgcHRo
cmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAocHRocmVhZF9hdHRyX3QgKl9fYXR0
ciwgaW50IF9fcG9saWN5KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X2dldHNjaGVkcG9saWN5IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmlj
dCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRp
bmhlcml0c2NoZWQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IF9faW5oZXJpdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpf
X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRy
LCBpbnQgKl9fcmVzdHJpY3QgX19pbmhlcml0KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9hdHRyX3NldHNjb3BlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19zY29w
ZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY29wZSAoX19j
b25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zY29wZSkgdGhyb3cgKCk7CgojIDI1
OSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRz
dGFja2FkZHIgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqX19zdGFja2FkZHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9hdHRyX2dldHN0YWNrYWRkciAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0
cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgdm9pZCAq
Kl9fcmVzdHJpY3QgX19zdGFja2FkZHIpCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0
aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUgKF9fY29uc3QgcHRocmVh
ZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6ZSkKICAgICB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0
X3RocmVhZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wb2xp
Y3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0g
Kl9fcmVzdHJpY3QgX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCiMgMzEyICIvdXNyL2luY2x1ZGUv
cHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9pbml0IChwdGhyZWFkX211dGV4
X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19tdXRleF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf
bXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9tdXRleF90
ICpfX211dGV4KSB0aHJvdyAoKTsKCiMgMzMzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4
dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5pdCAocHRocmVh
ZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0
ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRf
bXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
cmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93
ICgpOwoKIyAzNzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFk
X2NvbmRfaW5pdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqX19yZXN0cmlj
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbmRfYXR0cikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfZGVzdHJveSAocHRocmVhZF9jb25kX3QgKl9fY29uZCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfc2lnbmFsIChwdGhyZWFkX2NvbmRf
dCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3Qg
KHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRf
Y29uZF93YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4KSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQgKHB0aHJlYWRf
Y29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdCAocHRocmVhZF9jb25kYXR0cl90ICpf
X2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChw
dGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X2NvbmRhdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNo
YXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQg
KHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKIyA1MzcgIi91c3IvaW5jbHVk
ZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5
X3QgKl9fa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fZGVzdHJf
ZnVuY3Rpb24pICh2b2lkICopKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2Rl
bGV0ZSAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X3NldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19wb2ludGVyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9p
ZCAqcHRocmVhZF9nZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CiMg
NTU3ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChw
dGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQg
cHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAoaW50IF9fc3RhdGUsIGludCAqX19vbGRzdGF0ZSkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlIChpbnQgX190eXBlLCBp
bnQgKl9fb2xkdHlwZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAocHRo
cmVhZF90IF9fdGhyZWFkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNh
bmNlbCAodm9pZCkgdGhyb3cgKCk7CiMgNTg3ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCgoK
CgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2ggKHN0cnVjdCBfcHRocmVhZF9jbGVh
bnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRf
Y2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19leGVjdXRlKSB0aHJvdyAoKTsK
CgoKCiMgNjM3ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCiMgMzEgIi91c3IvaW5jbHVkZS9i
aXRzL3NpZ3RocmVhZC5oIiAxIDMKZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21hc2sgKGludCBfX2hv
dywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgX19zaWdzZXRfdCAqX19yZXN0
cmljdCBfX25ld21hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NpZ3NldF90ICpf
X3Jlc3RyaWN0IF9fb2xkbWFzayl0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbCAo
cHRocmVhZF90IF9fdGhyZWFkLCBpbnQgX19zaWdubykgdGhyb3cgKCk7CgojIDYzNyAiL3Vzci9p
bmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgNjUyICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4
dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIHZvaWQgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgKHZvaWQpIHRocm93ICgpOwoK
CgpleHRlcm4gdm9pZCBfX3B0aHJlYWRfaW5pdGlhbGl6ZSAodm9pZCkgdGhyb3cgKCk7Cgp9Cgoj
IDcyICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwojIDEyNCAiL3Vzci9pbmNs
dWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCiMgMTQxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2Fs
bG9jLmgiIDMKdGVtcGxhdGUgPGludCBfX2luc3Q+CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBs
YXRlIHsKCnByaXZhdGU6CgogIHN0YXRpYyB2b2lkKiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAg
c3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXplX3QpOwoKCiAgc3RhdGljIHZv
aWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7CgoKcHVibGljOgoKICBzdGF0aWMg
dm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxv
YyhfX24pOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhf
X24pOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2
b2lkKiBfX3AsIHNpemVfdCApCiAgewogICAgZnJlZShfX3ApOwogIH0KCiAgc3RhdGljIHZvaWQq
IHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgLCBzaXplX3QgX19uZXdfc3opCiAgewogICAg
dm9pZCogX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgaWYgKDAgPT0gX19y
ZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICByZXR1
cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2
b2lkICgqX19mKSgpKSkoKQogIHsKICAgIHZvaWQgKCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxv
Y19vb21faGFuZGxlcjsKICAgIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOwogICAg
cmV0dXJuKF9fb2xkKTsKICB9Cgp9OwoKCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQgKCog
X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRs
ZXIpKCkgPSAwOwoKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKgpfX21hbGxvY19hbGxvY190
ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCog
X19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzsp
IHsKICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRs
ZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBjZXJyIDw8ICJvdXQg
b2YgbWVtb3J5IiA8PCBlbmRsOyBleGl0KDEpOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5k
bGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYgKF9fcmVz
dWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9p
ZCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Modm9pZCog
X19wLCBzaXplX3QgX19uKQp7CiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAg
ICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9tYWxsb2NfaGFu
ZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIGlmICgwID09IF9fbXlf
bWFsbG9jX2hhbmRsZXIpIHsgY2VyciA8PCAib3V0IG9mIG1lbW9yeSIgPDwgZW5kbDsgZXhpdCgx
KTsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICBfX3Jlc3VsdCA9
IHJlYWxsb2MoX19wLCBfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0
KTsKICAgIH0KfQoKdHlwZWRlZiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTwwPiBtYWxsb2NfYWxs
b2M7Cgp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xhc3Mgc2ltcGxlX2FsbG9j
IHsKCnB1YmxpYzoKICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsg
cmV0dXJuIDAgPT0gX19uID8gMCA6IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVv
ZiAoX1RwKSk7IH0KICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHZvaWQpCiAgICAgIHsgcmV0dXJu
IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lk
IGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsgaWYgKDAgIT0gX19uKSBf
QWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMg
dm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3As
IHNpemVvZiAoX1RwKSk7IH0KfTsKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3Mg
ZGVidWdfYWxsb2MgewoKcHJpdmF0ZToKCiAgZW51bSB7X1NfZXh0cmEgPSA4fTsKCgoKcHVibGlj
OgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3Jl
c3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIF9TX2V4dHJhKTsKICAgICooc2l6
ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVybiBfX3Jlc3VsdCArIF9TX2V4dHJhOwogIH0K
CiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgewogICAg
Y2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0cmE7CiAgICAoKHZvaWQpICgoKihz
aXplX3QqKV9fcmVhbF9wID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCop
X19yZWFsX3AgPT0gX19uIiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIsIDI2Mywg
X19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19yZWFs
X3AsIF9fbiArIF9TX2V4dHJhKTsKICB9CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQq
IF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opCiAgewogICAgY2hhciogX19y
ZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0cmE7CiAgICAoKHZvaWQpICgoKihzaXplX3QqKV9f
cmVhbF9wID09IF9fb2xkX3N6KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3Jl
YWxfcCA9PSBfX29sZF9zeiIsICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiLCAyNzAs
IF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgY2hhciogX19yZXN1bHQgPSAoY2hhciop
CiAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyBfU19leHRyYSwg
X19uZXdfc3ogKyBfU19leHRyYSk7CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsK
ICAgIHJldHVybiBfX3Jlc3VsdCArIF9TX2V4dHJhOwogIH0KCn07CgoKIyAzMTkgIi91c3IvaW5j
bHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBpbnQgaW5z
dD4KY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CgoKCiAgICBlbnVt
IHtfQUxJR04gPSA4fTsKICAgIGVudW0ge19NQVhfQllURVMgPSAxMjh9OwogICAgZW51bSB7X05G
UkVFTElTVFMgPSBfTUFYX0JZVEVTL19BTElHTn07CgogIHN0YXRpYyBzaXplX3QKICBfU19yb3Vu
ZF91cChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEp
ICYgfihfQUxJR04gLSAxKSk7IH0KCnByaXZhdGU6CiAgdW5pb24gX09iaiB7CiAgICAgICAgdW5p
b24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsx
XTsKICB9Owpwcml2YXRlOgoKCgoKICAgIHN0YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xp
c3RbX05GUkVFTElTVFNdOwoKICBzdGF0aWMgc2l6ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVf
dCBfX2J5dGVzKSB7CiAgICAgICAgcmV0dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEpL19BTElH
TiAtIDEpOwogIH0KCgogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CgoKICBz
dGF0aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsK
CgogIHN0YXRpYyBjaGFyKiBfU19zdGFydF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJl
ZTsKICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCgoKCgoKCgogICAgc3RhdGljIHB0aHJl
YWRfbXV0ZXhfdCBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOwojIDM5MSAiL3Vzci9pbmNsdWRlL2cr
Ky0zL3N0bF9hbGxvYy5oIiAzCiAgICBjbGFzcyBfTG9jayB7CiAgICAgICAgcHVibGljOgogICAg
ICAgICAgICBfTG9jaygpIHsgaWYgKHRocmVhZHMpIHB0aHJlYWRfbXV0ZXhfbG9jaygmX1Nfbm9k
ZV9hbGxvY2F0b3JfbG9jayk7IH0KICAgICAgICAgICAgfl9Mb2NrKCkgeyBpZiAodGhyZWFkcykg
cHRocmVhZF9tdXRleF91bmxvY2soJl9TX25vZGVfYWxsb2NhdG9yX2xvY2spOyB9CiAgICB9Owog
ICAgZnJpZW5kIGNsYXNzIF9Mb2NrOwoKcHVibGljOgoKCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRl
KHNpemVfdCBfX24pCiAgewogICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAg
X09iaiogX19yZXN1bHQ7CgogICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAg
ICAgICByZXR1cm4obWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX24pKTsKICAgIH0KICAgIF9fbXlf
ZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgoKCgog
ICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKCiAgICBfX3Jlc3VsdCA9ICpfX215X2ZyZWVf
bGlzdDsKICAgIGlmIChfX3Jlc3VsdCA9PSAwKSB7CiAgICAgICAgdm9pZCogX19yID0gX1NfcmVm
aWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAgICAgIHJldHVybiBfX3I7CiAgICB9CiAgICAqX19t
eV9mcmVlX2xpc3QgPSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgIHJldHVybiAo
X19yZXN1bHQpOwogIH07CgoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6
ZV90IF9fbikKICB7CiAgICBfT2JqKiBfX3EgPSAoX09iaiopX19wOwogICAgX09iaiogdm9sYXRp
bGUqIF9fbXlfZnJlZV9saXN0OwoKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7
CiAgICAgICAgbWFsbG9jX2FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgICAgICByZXR1
cm47CiAgICB9CiAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0
X2luZGV4KF9fbik7CgoKCiAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwoKICAgIF9fcSAt
PiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICpfX215X2ZyZWVfbGlz
dCA9IF9fcTsKCiAgfQoKICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVf
dCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsKCn0gOwoKdHlwZWRlZiBfX2RlZmF1bHRfYWxs
b2NfdGVtcGxhdGU8dHJ1ZSwgMD4gYWxsb2M7CnR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOwoKCgoKCgoKdGVtcGxhdGUgPGJvb2wg
X190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHJlYWRzLCBfX2luc3Q+OjpfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9f
bm9ianMpCnsKICAgIGNoYXIqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBf
X3NpemUgKiBfX25vYmpzOwogICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC0g
X1Nfc3RhcnRfZnJlZTsKCiAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsK
ICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSAr
PSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgaWYg
KF9fYnl0ZXNfbGVmdCA+PSBfX3NpemUpIHsKICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRl
c19sZWZ0L19fc2l6ZSk7CiAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7
CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUg
Kz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIHsK
ICAgICAgICBzaXplX3QgX19ieXRlc190b19nZXQgPQogICAgICAgICAgMiAqIF9fdG90YWxfYnl0
ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CgogICAgICAgIGlmIChfX2J5dGVz
X2xlZnQgPiAwKSB7CiAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9
CiAgICAgICAgICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4
KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2ZyZWUpIC0+IF9N
X2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAqX19teV9mcmVl
X2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICB9CiAgICAgICAgX1Nfc3RhcnRf
ZnJlZSA9IChjaGFyKiltYWxsb2MoX19ieXRlc190b19nZXQpOwogICAgICAgIGlmICgwID09IF9T
X3N0YXJ0X2ZyZWUpIHsKICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgX09iaiog
dm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICBfT2JqKiBfX3A7CgoKCiAgICAg
ICAgICAgIGZvciAoX19pID0gX19zaXplOyBfX2kgPD0gX01BWF9CWVRFUzsgX19pICs9IF9BTElH
TikgewogICAgICAgICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19m
cmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0
OwogICAgICAgICAgICAgICAgaWYgKDAgIT0gX19wKSB7CiAgICAgICAgICAgICAgICAgICAgKl9f
bXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAg
ICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAgICAgICAgICAgICAgICAgIF9TX2Vu
ZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4o
X1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CgoKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfQogICAgICAgICAgICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgIF9TX3N0
YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7
CgoKCiAgICAgICAgfQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAg
ICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAg
ICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICB9Cn0KCgoKCgp0
ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQp7CiAg
ICBpbnQgX19ub2JqcyA9IDIwOwogICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9f
biwgX19ub2Jqcyk7CiAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICBfT2Jq
KiBfX3Jlc3VsdDsKICAgIF9PYmoqIF9fY3VycmVudF9vYmo7CiAgICBfT2JqKiBfX25leHRfb2Jq
OwogICAgaW50IF9faTsKCiAgICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4oX19jaHVuayk7CiAg
ICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7
CgoKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0
ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0g
MTsgOyBfX2krKykgewogICAgICAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAg
IF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBp
ZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01f
ZnJlZV9saXN0X2xpbmsgPSAwOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29i
ajsKICAgICAgICB9CiAgICAgIH0KICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxi
b29sIHRocmVhZHMsIGludCBpbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dGhy
ZWFkcywgaW5zdD46OnJlYWxsb2NhdGUodm9pZCogX19wLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2xkX3N6LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6
KQp7CiAgICB2b2lkKiBfX3Jlc3VsdDsKICAgIHNpemVfdCBfX2NvcHlfc3o7CgogICAgaWYgKF9f
b2xkX3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25ld19zeiA+IChzaXplX3QpIF9NQVhf
QllURVMpIHsKICAgICAgICByZXR1cm4ocmVhbGxvYyhfX3AsIF9fbmV3X3N6KSk7CiAgICB9CiAg
ICBpZiAoX1Nfcm91bmRfdXAoX19vbGRfc3opID09IF9TX3JvdW5kX3VwKF9fbmV3X3N6KSkgcmV0
dXJuKF9fcCk7CiAgICBfX3Jlc3VsdCA9IGFsbG9jYXRlKF9fbmV3X3N6KTsKICAgIF9fY29weV9z
eiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19uZXdfc3o7CiAgICBtZW1jcHko
X19yZXN1bHQsIF9fcCwgX19jb3B5X3N6KTsKICAgIGRlYWxsb2NhdGUoX19wLCBfX29sZF9zeik7
CiAgICByZXR1cm4oX19yZXN1bHQpOwp9CgoKICAgIHRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywg
aW50IF9faW5zdD4KICAgIHB0aHJlYWRfbXV0ZXhfdAogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfbm9kZV9hbGxvY2F0b3JfbG9jawogICAgICAgID0g
ezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURfTlAsIHswLCAwfX07CiMgNjkxICIvdXNyL2lu
Y2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQg
X19pbnN0PgpjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+
OjpfU19zdGFydF9mcmVlID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5z
dD4KY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nf
ZW5kX2ZyZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzaXpl
X3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9z
aXplID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X09iaiogdm9sYXRpbGUKX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA6Ol9TX2ZyZWVfbGlzdFsKICAg
IF9ORlJFRUxJU1RTCl0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgfTsKCgoKCiMgNzI4ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMK
dGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgYWxsb2NhdG9yIHsKICB0eXBlZGVmIGFsbG9jIF9B
bGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRp
ZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBj
b25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBl
ZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7
CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxs
b2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFsbG9jYXRvcigpIHt9CiAgYWxsb2NhdG9yKGNv
bnN0IGFsbG9jYXRvciYpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IGFsbG9jYXRvcihjb25z
dCBhbGxvY2F0b3I8X1RwMT4mKSB7fQogIH5hbGxvY2F0b3IoKSB7fQoKICBwb2ludGVyIGFkZHJl
c3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIg
YWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKCiAg
X1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVy
biBfX24gIT0gMCA/IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6
ZW9mKF9UcCkpKQogICAgICAgICAgICAgICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2Nh
dGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShf
X3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdAog
ICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0
KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0K
ICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRl
PD4KY2xhc3MgYWxsb2NhdG9yPHZvaWQ+IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAg
dHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRl
cjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZh
bHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5
cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U
MSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+
JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0
b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiBmYWxzZTsKfQojIDgw
MyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yIHsKICBfQWxsb2MgX191bmRlcmx5aW5n
X2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3Qg
ZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qg
X1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBj
b25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2Nh
dG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19hbGxvY2F0b3IoKSB7fQogIF9fYWxs
b2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yJiBfX2EpCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhf
X2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxs
b2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkKICAgIDogX191bmRl
cmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkg
e30KCiAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7
IH0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyBy
ZXR1cm4gJl9feDsgfQoKCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lk
KiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMAogICAgICAgID8gc3RhdGljX2Nhc3Q8X1RwKj4o
X191bmRlcmx5aW5nX2FsbG9jLmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSkKICAgICAgICA6
IDA7CiAgfQoKCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQog
ICAgeyBfX3VuZGVybHlpbmdfYWxsb2MuZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHAp
KTsgfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90KC0x
KSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBf
VHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3kocG9pbnRl
ciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNz
IF9fYWxsb2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK
ICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiBwb2lu
dGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQg
dmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAg
dHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
X19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5k
ZXJseWluZ19hbGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2Fs
bG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5
aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKCnRlbXBsYXRlIDxp
bnQgaW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1w
bGF0ZTxpbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8aW50IF9faW5z
dD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf
X2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1w
bGF0ZTxfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3Ro
cmVhZHMsIGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsK
ICByZXR1cm4gdHJ1ZTsKfQoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4K
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGRl
YnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2Fs
bG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9j
PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJu
IGZhbHNlOwp9CiMgOTU3ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewog
IHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jYXRvcjo6IHJlYmluZDxfVHA+OjpvdGhlcgogICAgICAgICAgYWxsb2NhdG9y
X3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjb25zdCBi
b29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAs
IGFsbG9jYXRvcjxfVHAxPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3Mg
PSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgYWxsb2M+IF9BbGxvY190eXBlOwog
IHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19tYWxsb2Nf
YWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5j
ZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw
LCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnN0cnVjdCBf
QWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
bnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5
cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk
cywgX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9y
PF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAg
ICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsKICBz
dGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxl
X2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYg
X19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBpbnQgX19pbnN0PgpzdHJ1Y3Qg
X0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEs
IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9v
bCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19h
bGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9y
X3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3Rociwg
aW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAg
ICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25z
dCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1Rw
LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxs
b2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3Ry
YWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CnsKICBz
dGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxl
X2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYg
X19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07
CgoKCgoKCgoKIyAyMiAiL3Vzci9pbmNsdWRlL2crKy0zL2FsbG9jLmgiIDIgMwojIDQwICIvdXNy
L2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKZXh0ZXJuICJDKysiIHsKY2xhc3Mg
aXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKCgojIDMyICIvdXNyL2luY2x1ZGUvZysrLTMvaXRlcmF0
b3IiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX3JlbG9wcy5oIiAxIDMKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg
X195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5l
IGJvb2wgb3BlcmF0b3I8PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1
cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA8
IF9feSk7Cn0KCiMgMzIgIi91c3IvaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMiAzCgoKCgoKCgoj
IDM0ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDEgMwoKCnN0cnVjdCBpbnB1
dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qg
Zm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1
Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90
YWcge307CnN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVj
dGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0Rpc3RhbmNlPiBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3IgewogIHR5cGVkZWYgaW5wdXRfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlw
ZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwog
IHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07CgpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yIHsKICB0
eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2
b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvciB7CiAgdHlw
ZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9U
cCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl
ZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0
b3IgewogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv
cnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5j
ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3IgewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcg
aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9E
aXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRl
ZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQ2F0ZWdvcnksIGNsYXNzIF9U
cCwgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAgICAgICAgY2xhc3MgX1BvaW50ZXIg
PSBfVHAqLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJj4Kc3RydWN0IGl0ZXJhdG9yIHsKICB0eXBl
ZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl
OwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9Qb2ludGVy
IHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKfTsKCgoKdGVtcGxhdGUg
PGNsYXNzIF9JdGVyYXRvcj4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5
cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5
cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogIHR5cGVkZWYgcmFuZG9tX2Fj
Y2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVf
dHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAq
IHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gewogIHR5cGVkZWYgcmFuZG9t
X2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFs
dWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBj
b25zdCBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKfTsKIyAx
MzQgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3Mg
X0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9j
YXRlZ29yeQpfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikKewogIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0NhdGVnb3J5
OwogIHJldHVybiBfQ2F0ZWdvcnkoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpfX2Rpc3Rh
bmNlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1
ZV90eXBlKgpfX3ZhbHVlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0
PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqPigwKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
Pjo6aXRlcmF0b3JfY2F0ZWdvcnkKaXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImIF9faSkg
eyByZXR1cm4gX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpOyB9CgoKdGVtcGxhdGUgPGNsYXNzIF9J
dGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90
eXBlKgpkaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fZGlzdGFuY2Vf
dHlwZShfX2kpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgp2YWx1ZV90eXBlKGNvbnN0IF9JdGVyJiBf
X2kpIHsgcmV0dXJuIF9fdmFsdWVfdHlwZShfX2kpOyB9CgojIDI1OSAiL3Vzci9pbmNsdWRlL2cr
Ky0zL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu
Y2UmIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
KSB7ICsrX19maXJzdDsgKytfX247IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24s
IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgX19uICs9IF9fbGFzdCAtIF9fZmlyc3Q7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxp
bmUgdm9pZCBkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9EaXN0YW5jZSYgX19uKQp7CiAgX19kaXN0YW5j
ZShfX2ZpcnN0LCBfX2xhc3QsIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoK
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3Jf
dGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlIF9fbiA9IDA7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19f
Zmlyc3Q7ICsrX19uOwogIH0KICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg
IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpkaXN0YW5jZShfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5
CiAgICBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfQ2F0
ZWdvcnkoKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5j
ZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwg
aW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKF9fbi0tKSArK19faTsKfQoKCgoKCnRlbXBs
YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGlu
ZSB2b2lkIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBf
X24sCiAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewog
IGlmIChfX24gPj0gMCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUg
KF9fbisrKSAtLV9faTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAgICAgICAgICAgcmFuZG9t
X2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICBfX2kgKz0gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgYWR2YW5jZShfSW5w
dXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKSB7CiAgX19hZHZhbmNlKF9faSwgX19uLCBp
dGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNs
YXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRh
aW5lcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKICB0eXBl
ZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lk
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZv
aWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBiYWNrX2lu
c2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgYmFj
a19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1l
IF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGNvbnRhaW5lci0+cHVzaF9i
YWNrKF9fdmFsdWUpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBiYWNrX2luc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAg
YmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVy
biAqdGhpczsgfQp9OwoKIyAzNzggIi91c3IvaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIg
Mwp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJh
Y2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Q29udGFpbmVyPgpjbGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0Nv
bnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5l
cl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
ICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBl
OwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4
cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVy
KCZfX3gpIHt9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9y
PShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBj
b250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGZy
b250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRo
aXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7
IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3Bl
cmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07CgojIDQxNyAiL3Vzci9pbmNsdWRlL2cr
Ky0zL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUg
ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWlu
ZXImIF9feCkgewogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGluc2VydF9pdGVyYXRvciB7
CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5l
cjo6aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJf
dHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
dHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBpbnNl
cnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRv
ciBfX2kpCiAgICA6IGNvbnRhaW5lcigmX194KSwgaXRlcihfX2kpIHt9CiAgaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2
YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwg
X192YWx1ZSk7CiAgICArK2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGluc2VydF9pdGVy
YXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGlu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlz
OyB9Cn07CgojIDQ1OSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBs
YXRlIDxjbGFzcyBfQ29udGFpbmVyLCBjbGFzcyBfSXRlcmF0b3I+CmlubGluZQppbnNlcnRfaXRl
cmF0b3I8X0NvbnRhaW5lcj4gaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19p
KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2l0ZXI7CiAgcmV0
dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsIF9faXRlcihfX2kpKTsKfQoKCnRl
bXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9S
ZWZlcmVuY2UgPSBfVHAmLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90PgoK
CgoKY2xhc3MgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJldmVy
c2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBfVHAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JlZmVyZW5jZSwgX0Rpc3Rh
bmNlPiBfU2VsZjsKcHJvdGVjdGVkOgogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgY3VycmVudDsK
cHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0
ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZm
ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNl
IHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBleHBs
aWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJdGVyYXRv
ciBfX3gpCiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFz
ZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv
bnN0IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0
dXJuICotLV9fdG1wOwogIH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
JihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7
CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2Vs
ZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBf
U2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAr
K2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKIyA1NTAgIi91c3IvaW5jbHVkZS9n
KystMy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0JpSXRlciwgY2xhc3MgX1Rw
LCBjbGFzcyBfUmVmLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVy
YXRvcj09KAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIs
IF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX194LAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQp7CiAgcmV0
dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKIyA1NjcgIi91c3IvaW5jbHVkZS9nKyst
My9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpjbGFzcyByZXZl
cnNlX2l0ZXJhdG9yCnsKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6CiAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0
ZWdvcnkKICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIHZhbHVlX3R5cGU7
CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5j
ZV90eXBlCiAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsKICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UKICAgICAg
ICAgIHJlZmVyZW5jZTsKCiAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICB0eXBl
ZGVmIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsKCnB1YmxpYzoKICByZXZlcnNl
X2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUg
X194KSA6IGN1cnJlbnQoX194KSB7fQoKICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9TZWxmJiBf
X3gpIDogY3VycmVudChfX3guY3VycmVudCkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgog
IHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAg
IDogY3VycmVudChfX3guYmFzZSgpKSB7fQoKCiAgaXRlcmF0b3JfdHlwZSBiYXNlKCkgY29uc3Qg
eyByZXR1cm4gY3VycmVudDsgfQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICBf
SXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KCiAgcG9p
bnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCgogIF9T
ZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0K
ICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0t
Y3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAg
ICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50
KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9f
dG1wOwogIH0KCiAgX1NlbGYgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsK
ICAgIHJldHVybiBfU2VsZihjdXJyZW50IC0gX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yKz0o
ZGlmZmVyZW5jZV90eXBlIF9fbikgewogICAgY3VycmVudCAtPSBfX247CiAgICByZXR1cm4gKnRo
aXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAg
ICByZXR1cm4gX1NlbGYoY3VycmVudCArIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvci09KGRp
ZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgKz0gX19uOwogICAgcmV0dXJuICp0aGlz
OwogIH0KICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7
IHJldHVybiAqKCp0aGlzICsgX19uKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4K
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4mIF9feSkgewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgPCBf
X3guYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUg
cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKb3BlcmF0b3ItKGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSAtIF9f
eC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4Kb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRl
cmF0b3I8X0l0ZXJhdG9yPiYgX194KSB7CiAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPihfX3guYmFzZSgpIC0gX19uKTsKfQoKIyA4MDggIi91c3IvaW5jbHVkZS9nKystMy9zdGxf
aXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdCA9IHB0cmRpZmZf
dD4KY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSA8PiAo
Y29uc3QgaXN0cmVhbV9pdGVyYXRvciYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvciYpOwpwcm90ZWN0ZWQ6CiAgaXN0
cmVhbSogX01fc3RyZWFtOwogIF9UcCBfTV92YWx1ZTsKICBib29sIF9NX2VuZF9tYXJrZXI7CiAg
dm9pZCBfTV9yZWFkKCkgewogICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUg
OiBmYWxzZTsKICAgIGlmIChfTV9lbmRfbWFya2VyKSAqX01fc3RyZWFtID4+IF9NX3ZhbHVlOwog
ICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICB9CnB1Ymxp
YzoKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl
ZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3QgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgY29uc3QgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7
CgogIGlzdHJlYW1faXRlcmF0b3IoKSA6IF9NX3N0cmVhbSgmY2luKSwgX01fZW5kX21hcmtlcihm
YWxzZSkge30KICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW0mIF9fcykgOiBfTV9zdHJlYW0oJl9f
cykgeyBfTV9yZWFkKCk7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4g
X01fdmFsdWU7IH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVy
YXRvciooKSk7IH0KCiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiYgb3BlcmF0b3IrKygp
IHsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXN0cmVhbV9pdGVyYXRv
cjxfVHAsIF9EaXN0PiBvcGVyYXRvcisrKGludCkgewogICAgaXN0cmVhbV9pdGVyYXRvcjxfVHAs
IF9EaXN0PiBfX3RtcCA9ICp0aGlzOwogICAgX01fcmVhZCgpOwogICAgcmV0dXJuIF9fdG1wOwog
IH0KfTsKCiMgODY0ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JiBfX3gsCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feSkgewog
IHJldHVybiAoX194Ll9NX3N0cmVhbSA9PSBfX3kuX01fc3RyZWFtICYmCiAgICAgICAgICBfX3gu
X01fZW5kX21hcmtlciA9PSBfX3kuX01fZW5kX21hcmtlcikgfHwKICAgICAgICAgX194Ll9NX2Vu
ZF9tYXJrZXIgPT0gZmFsc2UgJiYgX195Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2U7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CmNsYXNzIG9zdHJlYW1faXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgb3N0
cmVhbSogX01fc3RyZWFtOwogIGNvbnN0IGNoYXIqIF9NX3N0cmluZzsKcHVibGljOgogIHR5cGVk
ZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQg
dmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9p
ZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIG9zdHJlYW1faXRlcmF0b3Io
b3N0cmVhbSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9CiAgb3N0cmVh
bV9pdGVyYXRvcihvc3RyZWFtJiBfX3MsIGNvbnN0IGNoYXIqIF9fYykKICAgIDogX01fc3RyZWFt
KCZfX3MpLCBfTV9zdHJpbmcoX19jKSB7fQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0
b3I9KGNvbnN0IF9UcCYgX192YWx1ZSkgewogICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVlOwogICAg
aWYgKF9NX3N0cmluZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7
IH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsg
fQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlz
OyB9Cn07CgojIDkwNyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCiMgMzkg
Ii91c3IvaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMiAzCiMgNDUgIi91c3IvaW5jbHVkZS9nKyst
My9zdGQvYmFzdHJpbmcuaCIgMiAzCiMgNTkgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJp
bmcuaCIgMwojIDcgIi91c3IvaW5jbHVkZS9nKystMy9jYXNzZXJ0IiAxIDMKIyA1OCAiL3Vzci9p
bmNsdWRlL2Fzc2VydC5oIiAxIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRf
ZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hh
ciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19j
b25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgX19saW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0
dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICpfX2Fzc2VydGlv
biwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX25vcmV0dXJuX18pKTsKCgp9CgojIDcgIi91c3IvaW5jbHVkZS9nKystMy9jYXNz
ZXJ0IiAyIDMKIyA1OSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cyA9IHN0cmluZ19jaGFyX3RyYWl0
czxjaGFyVD4sCiAgICAgICAgICBjbGFzcyBBbGxvY2F0b3IgPSBhbGxvYyA+CmNsYXNzIGJhc2lj
X3N0cmluZwp7CnByaXZhdGU6CiAgc3RydWN0IFJlcCB7CiAgICBzaXplX3QgbGVuLCByZXMsIHJl
ZjsKICAgIGJvb2wgc2VsZmlzaDsKCiAgICBjaGFyVCogZGF0YSAoKSB7IHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXJUICo+KHRoaXMgKyAxKTsgfQogICAgY2hhclQmIG9wZXJhdG9yW10gKHNp
emVfdCBzKSB7IHJldHVybiBkYXRhICgpIFtzXTsgfQogICAgY2hhclQqIGdyYWIgKCkgeyBpZiAo
c2VsZmlzaCkgcmV0dXJuIGNsb25lICgpOyArK3JlZjsgcmV0dXJuIGRhdGEgKCk7IH0KIyAxMTQg
Ii91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMwogICAgdm9pZCByZWxlYXNlICgp
IHsgaWYgKC0tcmVmID09IDApIGRlbGV0ZSB0aGlzOyB9CgoKICAgIGlubGluZSBzdGF0aWMgdm9p
ZCAqIG9wZXJhdG9yIG5ldyAoc2l6ZV90LCBzaXplX3QpOwogICAgaW5saW5lIHN0YXRpYyB2b2lk
IG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKTsKICAgIGlubGluZSBzdGF0aWMgUmVwKiBjcmVhdGUg
KHNpemVfdCk7CiAgICBjaGFyVCogY2xvbmUgKCk7CgogICAgaW5saW5lIHZvaWQgY29weSAoc2l6
ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgbW92ZSAoc2l6ZV90
LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgc2V0IChzaXplX3QsIGNv
bnN0IGNoYXJULCBzaXplX3QpOwoKICAgIGlubGluZSBzdGF0aWMgYm9vbCBleGNlc3Nfc2xvcCAo
c2l6ZV90LCBzaXplX3QpOwogICAgaW5saW5lIHN0YXRpYyBzaXplX3QgZnJvYl9zaXplIChzaXpl
X3QpOwoKICBwcml2YXRlOgogICAgUmVwICZvcGVyYXRvcj0gKGNvbnN0IFJlcCAmKTsKICB9OwoK
cHVibGljOgoKICB0eXBlZGVmIHRyYWl0cyB0cmFpdHNfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1l
IHRyYWl0czo6Y2hhcl90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBBbGxvY2F0b3IgYWxsb2Nh
dG9yX3R5cGU7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZf
dCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOwogIHR5cGVkZWYg
Y29uc3QgY2hhclQmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJUKiBwb2ludGVyOwog
IHR5cGVkZWYgY29uc3QgY2hhclQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBwb2ludGVyIGl0
ZXJhdG9yOwogIHR5cGVkZWYgY29uc3RfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVm
IDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVm
IDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cjsKICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+
KC0xKTsKCnByaXZhdGU6CiAgUmVwICpyZXAgKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxSZXAgKj4oZGF0KSAtIDE7IH0KICB2b2lkIHJlcHVwIChSZXAgKnApIHsgcmVwICgpLT5y
ZWxlYXNlICgpOyBkYXQgPSBwLT5kYXRhICgpOyB9CgpwdWJsaWM6CiAgY29uc3QgY2hhclQqIGRh
dGEgKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+ZGF0YSgpOyB9CiAgc2l6ZV90eXBlIGxl
bmd0aCAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgc2l6
ZSAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgY2FwYWNp
dHkgKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+cmVzOyB9CiAgc2l6ZV90eXBlIG1heF9z
aXplICgpIGNvbnN0CiAgICB7IHJldHVybiAobnBvcyAtIDEpL3NpemVvZiAoY2hhclQpOyB9CiAg
Ym9vbCBlbXB0eSAoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZSAoKSA9PSAwOyB9CgoKICBiYXNp
Y19zdHJpbmcmIG9wZXJhdG9yPSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIpCiAgICB7CiAgICAg
IGlmICgmc3RyICE9IHRoaXMpIHsgcmVwICgpLT5yZWxlYXNlICgpOyBkYXQgPSBzdHIucmVwICgp
LT5ncmFiICgpOyB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgZXhwbGljaXQgYmFzaWNf
c3RyaW5nICgpOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IH0KICBiYXNpY19zdHJpbmcgKGNvbnN0
IGJhc2ljX3N0cmluZyYgc3RyKTogZGF0IChzdHIucmVwICgpLT5ncmFiICgpKSB7IH0KICBiYXNp
Y19zdHJpbmcgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5
cGUgbiA9IG5wb3MpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChzdHIsIHBv
cywgbik7IH0KICBiYXNpY19zdHJpbmcgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAg
IDogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5n
IChjb25zdCBjaGFyVCogcykKICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKHMp
OyB9CiAgYmFzaWNfc3RyaW5nIChzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIDogZGF0IChuaWxS
ZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKG4sIGMpOyB9CgogIHRlbXBsYXRlPGNsYXNzIElucHV0SXRl
cmF0b3I+CiAgICBiYXNpY19zdHJpbmcoSW5wdXRJdGVyYXRvciBfX2JlZ2luLCBJbnB1dEl0ZXJh
dG9yIF9fZW5kKQoKCgogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoX19iZWdp
biwgX19lbmQpOyB9CgogIH5iYXNpY19zdHJpbmcgKCkKICAgIHsgcmVwICgpLT5yZWxlYXNlICgp
OyB9CgogIHZvaWQgc3dhcCAoYmFzaWNfc3RyaW5nICZzKSB7IGNoYXJUICpkID0gZGF0OyBkYXQg
PSBzLmRhdDsgcy5kYXQgPSBkOyB9CgogIGJhc2ljX3N0cmluZyYgYXBwZW5kIChjb25zdCBiYXNp
Y19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwg
c3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKGNvbnN0IGNoYXJUKiBzLCBz
aXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgcywgbik7IH0K
ICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhcHBl
bmQgKHMsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoc2l6
ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChsZW5ndGggKCksIDAsIG4s
IGMpOyB9CgogIHRlbXBsYXRlPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcm
IGFwcGVuZChJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpCgoKCiAgICB7
IHJldHVybiByZXBsYWNlIChpZW5kICgpLCBpZW5kICgpLCBmaXJzdCwgbGFzdCk7IH0KCiAgdm9p
ZCBwdXNoX2JhY2soY2hhclQgX19jKQogIHsgYXBwZW5kKDEsIF9fYyk7IH0KCiAgYmFzaWNfc3Ry
aW5nJiBhc3NpZ24gKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwK
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIG4gPSBucG9zKQogICAgeyByZXR1cm4g
cmVwbGFjZSAoMCwgbnBvcywgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24g
KGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJlcGxhY2UgKDAsIG5w
b3MsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGNoYXJUKiBzKQogICAg
eyByZXR1cm4gYXNzaWduIChzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5n
JiBhc3NpZ24gKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFjZSAoMCwg
bnBvcywgbiwgYyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAgIGJhc2lj
X3N0cmluZyYgYXNzaWduKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCkK
CgoKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGliZWdpbiAoKSwgaWVuZCAoKSwgZmlyc3QsIGxhc3Qp
OyB9CgogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjb25zdCBjaGFyVCogcykKICAgIHsgcmV0
dXJuIGFzc2lnbiAocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAoY2hhclQgYykKICAg
IHsgcmV0dXJuIGFzc2lnbiAoMSwgYyk7IH0KCiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChj
b25zdCBiYXNpY19zdHJpbmcmIHJocykKICAgIHsgcmV0dXJuIGFwcGVuZCAocmhzKTsgfQogIGJh
c2ljX3N0cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhcHBl
bmQgKHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChjaGFyVCBjKQogICAgeyByZXR1
cm4gYXBwZW5kICgxLCBjKTsgfQoKICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBv
czEsIGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3R5cGUgcG9zMiA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2Ug
KHBvczEsIDAsIHN0ciwgcG9zMiwgbik7IH0KICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90
eXBlIHBvcywgY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFj
ZSAocG9zLCAwLCBzLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9z
LCBjb25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIGluc2VydCAocG9zLCBzLCB0cmFpdHM6Omxl
bmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBwb3MsIHNpemVf
dHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCAwLCBuLCBjKTsgfQog
IGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwLCBjaGFyVCBjKQogICAgeyBzaXplX3R5cGUgX19v
ID0gcCAtIGliZWdpbiAoKTsKICAgICAgaW5zZXJ0IChwIC0gaWJlZ2luICgpLCAxLCBjKTsgc2Vs
ZmlzaCAoKTsKICAgICAgcmV0dXJuIGliZWdpbiAoKSArIF9fbzsgfQogIGl0ZXJhdG9yIGluc2Vy
dChpdGVyYXRvciBwLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgc2l6ZV90eXBlIF9fbyA9
IHAgLSBpYmVnaW4gKCk7CiAgICAgIGluc2VydCAocCAtIGliZWdpbiAoKSwgbiwgYyk7IHNlbGZp
c2ggKCk7CiAgICAgIHJldHVybiBpYmVnaW4gKCkgKyBfX287IH0KCiAgdGVtcGxhdGU8Y2xhc3Mg
SW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIHAsIElucHV0SXRlcmF0b3Ig
Zmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCkKCgoKICAgIHsgcmVwbGFjZSAocCwgcCwgZmlyc3Qs
IGxhc3QpOyB9CgogIGJhc2ljX3N0cmluZyYgZXJhc2UgKHNpemVfdHlwZSBwb3MgPSAwLCBzaXpl
X3R5cGUgbiA9IG5wb3MpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4sIChzaXplX3R5cGUp
MCwgKGNoYXJUKTApOyB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgcCkKICAgIHsgc2l6ZV90
eXBlIF9fbyA9IHAgLSBiZWdpbigpOwogICAgICByZXBsYWNlIChfX28sIDEsIChzaXplX3R5cGUp
MCwgKGNoYXJUKTApOyBzZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJlZ2luKCkgKyBfX287IH0K
ICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBmLCBpdGVyYXRvciBsKQogICAgeyBzaXplX3R5cGUg
X19vID0gZiAtIGliZWdpbigpOwogICAgICByZXBsYWNlIChfX28sIGwtZiwgKHNpemVfdHlwZSkw
LCAoY2hhclQpMCk7c2VsZmlzaCAoKTsKICAgICAgcmV0dXJuIGliZWdpbigpICsgX19vOyB9Cgog
IGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSwgY29u
c3QgYmFzaWNfc3RyaW5nJiBzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUg
cG9zMiA9IDAsIHNpemVfdHlwZSBuMiA9IG5wb3MpOwogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAo
c2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBjb25zdCBjaGFyVCogcywKICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdHlwZSBuMik7CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXpl
X3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gcmVw
bGFjZSAocG9zLCBuMSwgcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0cmluZyYg
cmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBzaXplX3R5cGUgbjIsIGNoYXJU
IGMpOwogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4s
IGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4sIDEsIGMpOyB9CiAgYmFzaWNf
c3RyaW5nJiByZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGJhc2ljX3N0
cmluZyYgc3RyKQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEs
IHN0cik7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBp
MiwgY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEg
LSBpYmVnaW4gKCksIGkyIC0gaTEsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChp
dGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gcmVw
bGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIHMpOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBs
YWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAg
eyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIG4sIGMpOyB9CgogIHRl
bXBsYXRlPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcmIHJlcGxhY2UoaXRl
cmF0b3IgaTEsIGl0ZXJhdG9yIGkyLAogICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0SXRl
cmF0b3IgajEsIElucHV0SXRlcmF0b3IgajIpOwoKCgoKCnByaXZhdGU6CiAgc3RhdGljIGNoYXJU
IGVvcyAoKSB7IHJldHVybiB0cmFpdHM6OmVvcyAoKTsgfQogIHZvaWQgdW5pcXVlICgpIHsgaWYg
KHJlcCAoKS0+cmVmID4gMSkgYWxsb2MgKGxlbmd0aCAoKSwgdHJ1ZSk7IH0KICB2b2lkIHNlbGZp
c2ggKCkgeyB1bmlxdWUgKCk7IHJlcCAoKS0+c2VsZmlzaCA9IHRydWU7IH0KCnB1YmxpYzoKICBj
aGFyVCBvcGVyYXRvcltdIChzaXplX3R5cGUgcG9zKSBjb25zdAogICAgewogICAgICBpZiAocG9z
ID09IGxlbmd0aCAoKSkKICAgICAgICByZXR1cm4gZW9zICgpOwogICAgICByZXR1cm4gZGF0YSAo
KVtwb3NdOwogICAgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXSAoc2l6ZV90eXBlIHBvcykKICAg
IHsgc2VsZmlzaCAoKTsgcmV0dXJuICgqcmVwICgpKVtwb3NdOyB9CgogIHJlZmVyZW5jZSBhdCAo
c2l6ZV90eXBlIHBvcykKICAgIHsKICAgICAgKCh2b2lkKSAoKCEocG9zID49IGxlbmd0aCAoKSkp
ID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShwb3MgPj0gbGVuZ3RoICgpKSIsICIvdXNyL2luY2x1
ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiLCAzMjgsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkp
OwogICAgICByZXR1cm4gKCp0aGlzKVtwb3NdOwogICAgfQogIGNvbnN0X3JlZmVyZW5jZSBhdCAo
c2l6ZV90eXBlIHBvcykgY29uc3QKICAgIHsKICAgICAgKCh2b2lkKSAoKCEocG9zID49IGxlbmd0
aCAoKSkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShwb3MgPj0gbGVuZ3RoICgpKSIsICIvdXNy
L2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiLCAzMzMsIF9fUFJFVFRZX0ZVTkNUSU9OX18p
LCAwKSkpOwogICAgICByZXR1cm4gZGF0YSAoKVtwb3NdOwogICAgfQoKcHJpdmF0ZToKICB2b2lk
IHRlcm1pbmF0ZSAoKSBjb25zdAogICAgeyB0cmFpdHM6OmFzc2lnbiAoKCpyZXAgKCkpW2xlbmd0
aCAoKV0sIGVvcyAoKSk7IH0KCnB1YmxpYzoKICBjb25zdCBjaGFyVCogY19zdHIgKCkgY29uc3QK
ICAgIHsgaWYgKGxlbmd0aCAoKSA9PSAwKSByZXR1cm4gIiI7IHRlcm1pbmF0ZSAoKTsgcmV0dXJu
IGRhdGEgKCk7IH0KICB2b2lkIHJlc2l6ZSAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpOwogIHZvaWQg
cmVzaXplIChzaXplX3R5cGUgbikKICAgIHsgcmVzaXplIChuLCBlb3MgKCkpOyB9CiAgdm9pZCBy
ZXNlcnZlIChzaXplX3R5cGUpIHsgfQoKICBzaXplX3R5cGUgY29weSAoY2hhclQqIHMsIHNpemVf
dHlwZSBuLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3Q7CgogIHNpemVfdHlwZSBmaW5kIChjb25z
dCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVy
biBmaW5kIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgZmlu
ZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBz
aXplX3R5cGUgZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAog
ICAgeyByZXR1cm4gZmluZCAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90
eXBlIGZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsKCiAgc2l6ZV90eXBl
IHJmaW5kIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNv
bnN0CiAgICB7IHJldHVybiByZmluZCAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9
CiAgc2l6ZV90eXBlIHJmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90
eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSByZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlw
ZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gcmZpbmQgKHMsIHBvcywgdHJhaXRzOjps
ZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSByZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9
IG5wb3MpIGNvbnN0OwoKICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY29uc3QgYmFzaWNfc3Ry
aW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJz
dF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRf
Zmlyc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29u
c3Q7CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUg
cG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfb2YgKHMsIHBvcywgdHJhaXRz
OjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjaGFyVCBjLCBzaXpl
X3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmQgKGMsIHBvcyk7IH0KCiAgc2l6
ZV90eXBlIGZpbmRfbGFzdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBw
b3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X29mIChzdHIuZGF0YSgpLCBw
b3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25zdCBjaGFy
VCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5k
X2xhc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAg
IHsgcmV0dXJuIGZpbmRfbGFzdF9vZiAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAg
c2l6ZV90eXBlIGZpbmRfbGFzdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNv
bnN0CiAgICB7IHJldHVybiByZmluZCAoYywgcG9zKTsgfQoKICBzaXplX3R5cGUgZmluZF9maXJz
dF9ub3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCkgY29u
c3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfbm90X29mIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5s
ZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBz
LCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmRfZmly
c3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7
IHJldHVybiBmaW5kX2ZpcnN0X25vdF9vZiAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9
CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0g
MCkgY29uc3Q7CgogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25zdCBiYXNpY19zdHJp
bmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2xh
c3Rfbm90X29mIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUg
ZmluZF9sYXN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlw
ZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMs
IHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X25vdF9v
ZiAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9u
b3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdDsKCiAgYmFzaWNfc3Ry
aW5nIHN1YnN0ciAoc2l6ZV90eXBlIHBvcyA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykgY29uc3QK
ICAgIHsgcmV0dXJuIGJhc2ljX3N0cmluZyAoKnRoaXMsIHBvcywgbik7IH0KCiAgaW50IGNvbXBh
cmUgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwgc2l6ZV90eXBl
IG4gPSBucG9zKSBjb25zdDsKCiAgaW50IGNvbXBhcmUgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5
cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgaW50IGNvbXBhcmUgKGNvbnN0IGNoYXJUKiBz
LCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbXBhcmUgKHMsIHBvcywg
dHJhaXRzOjpsZW5ndGggKHMpKTsgfQoKICBpdGVyYXRvciBiZWdpbiAoKSB7IHNlbGZpc2ggKCk7
IHJldHVybiAmKCp0aGlzKVswXTsgfQogIGl0ZXJhdG9yIGVuZCAoKSB7IHNlbGZpc2ggKCk7IHJl
dHVybiAmKCp0aGlzKVtsZW5ndGggKCldOyB9Cgpwcml2YXRlOgogIGl0ZXJhdG9yIGliZWdpbiAo
KSBjb25zdCB7IHJldHVybiAmKCpyZXAgKCkpWzBdOyB9CiAgaXRlcmF0b3IgaWVuZCAoKSBjb25z
dCB7IHJldHVybiAmKCpyZXAgKCkpW2xlbmd0aCAoKV07IH0KCnB1YmxpYzoKICBjb25zdF9pdGVy
YXRvciBiZWdpbiAoKSBjb25zdCB7IHJldHVybiBpYmVnaW4gKCk7IH0KICBjb25zdF9pdGVyYXRv
ciBlbmQgKCkgY29uc3QgeyByZXR1cm4gaWVuZCAoKTsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJi
ZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IgKGVuZCAoKSk7IH0KICBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yIChlbmQgKCkpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2
ZXJzZV9pdGVyYXRvciAoYmVnaW4gKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5k
KCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgKGJlZ2luICgpKTsg
fQoKcHJpdmF0ZToKICB2b2lkIGFsbG9jIChzaXplX3R5cGUgc2l6ZSwgYm9vbCBzYXZlKTsKICBz
dGF0aWMgc2l6ZV90eXBlIF9maW5kIChjb25zdCBjaGFyVCogcHRyLCBjaGFyVCBjLCBzaXplX3R5
cGUgeHBvcywgc2l6ZV90eXBlIGxlbik7CiAgaW5saW5lIGJvb2wgY2hlY2tfcmVhbGxvYyAoc2l6
ZV90eXBlIHMpIGNvbnN0OwoKICBzdGF0aWMgUmVwIG5pbFJlcDsKICBjaGFyVCAqZGF0Owp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+IHRl
bXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj4mIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJl
cGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwgSW5wdXRJdGVyYXRvciBqMSwgSW5wdXRJ
dGVyYXRvciBqMikKCgoKCgp7CiAgY29uc3Qgc2l6ZV90eXBlIGxlbiA9IGxlbmd0aCAoKTsKICBz
aXplX3R5cGUgcG9zID0gaTEgLSBpYmVnaW4gKCk7CiAgc2l6ZV90eXBlIG4xID0gaTIgLSBpMTsK
ICBzaXplX3R5cGUgbjIgPSBqMiAtIGoxOwoKICAoKHZvaWQpICgoIShwb3MgPiBsZW4pKSA/IDAg
OiAoX19hc3NlcnRfZmFpbCAoIiEocG9zID4gbGVuKSIsICIvdXNyL2luY2x1ZGUvZysrLTMvc3Rk
L2Jhc3RyaW5nLmgiLCA0NDYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIGlmIChuMSA+
IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogICgodm9pZCkgKCghKGxlbiAtIG4xID4g
bWF4X3NpemUgKCkgLSBuMikpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShsZW4gLSBuMSA+IG1h
eF9zaXplICgpIC0gbjIpIiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIsIDQ0
OSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgc2l6ZV90IG5ld2xlbiA9IGxlbiAtIG4x
ICsgbjI7CgogIGlmIChjaGVja19yZWFsbG9jIChuZXdsZW4pKQogICAgewogICAgICBSZXAgKnAg
PSBSZXA6OmNyZWF0ZSAobmV3bGVuKTsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgcG9zKTsK
ICAgICAgcC0+Y29weSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyAr
IG4xKSk7CiAgICAgIGZvciAoOyBqMSAhPSBqMjsgKytqMSwgKytwb3MpCiAgICAgICAgdHJhaXRz
Ojphc3NpZ24gKCgqcClbcG9zXSwgKmoxKTsKICAgICAgcmVwdXAgKHApOwogICAgfQogIGVsc2UK
ICAgIHsKICAgICAgcmVwICgpLT5tb3ZlIChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBs
ZW4gLSAocG9zICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoyOyArK2oxLCArK3BvcykKICAg
ICAgICB0cmFpdHM6OmFzc2lnbiAoKCpyZXAgKCkpW3Bvc10sICpqMSk7CiAgICB9CiAgcmVwICgp
LT5sZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAogICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhzKTsKICBzdHIuYXBwZW5kIChyaHMpOwogIHJl
dHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4K
b3BlcmF0b3IrIChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAocmhzKTsKICByZXR1cm4gc3RyOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp
bmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAo
Y2hhclQgbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4m
IHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKDEs
IGxocyk7CiAgc3RyLmFwcGVuZCAocmhzKTsKICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAoY29uc3QgYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsK
ICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3RyIChsaHMpOwogIHN0
ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj
bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjaGFyVCByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3RyIChsaHMpOwogIHN0ci5hcHBlbmQgKDEsIHJocyk7
CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAoY29uc3QgYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCiAgICAgICAgICAgIGNvbnN0IGJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMu
Y29tcGFyZSAocmhzKSA9PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAoY29uc3QgY2hhclQq
IGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMp
CnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpID09IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRv
cj09IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywg
Y29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPT0gMCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cmlu
bGluZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFy
ZSAobGhzKSAhPSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPSAoY29uc3QgYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICBy
ZXR1cm4gKGxocy5jb21wYXJlIChyaHMpICE9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs
IGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjwgKGNv
bnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAogICAgICAg
ICAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykK
ewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNo
YXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8
IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPiAwKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5l
IGJvb2wKb3BlcmF0b3I8IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJo
cykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAo
cmhzLmNvbXBhcmUgKGxocykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0
cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+IChjb25zdCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJo
cykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0
b3I8PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpID49IDApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp
bmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBh
cmUgKHJocykgPD0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPj0gKGNvbnN0IGNoYXJUKiBsaHMs
IGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAg
cmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA8PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PSAo
Y29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0
IGNoYXJUKiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID49IDApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg
Ym9vbApvcGVyYXRvciE9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIGxocywKICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpICE9IDApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp
bmxpbmUgYm9vbApvcGVyYXRvcj4gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiYgbGhzLAogICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA+IDAp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj4mIGxocywKICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMp
IDw9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs
b2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJl
IChyaHMpID49IDApOwp9CgpjbGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFtOwp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBpc3RyZWFtJgpvcGVy
YXRvcj4+IChpc3RyZWFtJiwgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
Jik7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+
IG9zdHJlYW0mCm9wZXJhdG9yPDwgKG9zdHJlYW0mLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj4mKTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4gaXN0cmVhbSYKZ2V0bGluZSAoaXN0cmVhbSYsIGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYsIGNoYXJUIGRlbGltID0gJ1xuJyk7Cgp9
CgoKIyAyOCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIgMSAzCmV4dGVybiAi
QysrIiB7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0
b3I+CmlubGluZSB2b2lkICogYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
OjpSZXA6OgpvcGVyYXRvciBuZXcgKHNpemVfdCBzLCBzaXplX3QgZXh0cmEpCnsKICByZXR1cm4g
QWxsb2NhdG9yOjphbGxvY2F0ZShzICsgZXh0cmEgKiBzaXplb2YgKGNoYXJUKSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSB2
b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKb3BlcmF0
b3IgZGVsZXRlICh2b2lkICogcHRyKQp7CiAgQWxsb2NhdG9yOjpkZWFsbG9jYXRlKHB0ciwgc2l6
ZW9mKFJlcCkgKwogICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PFJlcCAq
PihwdHIpLT5yZXMgKgogICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKGNoYXJUKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cmlu
bGluZSBzaXplX3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6
Ogpmcm9iX3NpemUgKHNpemVfdCBzKQp7CiAgc2l6ZV90IGkgPSAxNjsKICB3aGlsZSAoaSA8IHMp
IGkgKj0gMjsKICByZXR1cm4gaTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPjo6UmVwICoKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
OjpSZXA6OgpjcmVhdGUgKHNpemVfdCBleHRyYSkKewogIGV4dHJhID0gZnJvYl9zaXplIChleHRy
YSArIDEpOwogIFJlcCAqcCA9IG5ldyAoZXh0cmEpIFJlcDsKICBwLT5yZXMgPSBleHRyYTsKICBw
LT5yZWYgPSAxOwogIHAtPnNlbGZpc2ggPSBmYWxzZTsKICByZXR1cm4gcDsKfQoKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KY2hhclQgKiBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmNsb25lICgpCnsKICBS
ZXAgKnAgPSBSZXA6OmNyZWF0ZSAobGVuKTsKICBwLT5jb3B5ICgwLCBkYXRhICgpLCBsZW4pOwog
IHAtPmxlbiA9IGxlbjsKICByZXR1cm4gcC0+ZGF0YSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNo
YXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wgYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpleGNlc3Nfc2xvcCAoc2l6ZV90
IHMsIHNpemVfdCByKQp7CiAgcmV0dXJuIDIgKiAocyA8PSAxNiA/IDE2IDogcykgPCByOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxp
bmUgYm9vbCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpjaGVja19y
ZWFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVfdHlwZSBzKSBjb25zdAp7CiAgcyArPSBzaXplb2Yg
KGNoYXJUKTsKICByZXAgKCktPnNlbGZpc2ggPSBmYWxzZTsKICByZXR1cm4gKHJlcCAoKS0+cmVm
ID4gMQogICAgICAgICAgfHwgcyA+IGNhcGFjaXR5ICgpCiAgICAgICAgICB8fCBSZXA6OmV4Y2Vz
c19zbG9wIChzLCBjYXBhY2l0eSAoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz
IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgp2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0
cywgQWxsb2NhdG9yPjo6CmFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVfdHlwZSBfX3NpemUsIGJv
b2wgX19zYXZlKQp7CiAgaWYgKCEgY2hlY2tfcmVhbGxvYyAoX19zaXplKSkKICAgIHJldHVybjsK
CiAgUmVwICpwID0gUmVwOjpjcmVhdGUgKF9fc2l6ZSk7CgogIGlmIChfX3NhdmUpCiAgICB7CiAg
ICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIGxlbmd0aCAoKSk7CiAgICAgIHAtPmxlbiA9IGxlbmd0
aCAoKTsKICAgIH0KICBlbHNlCiAgICBwLT5sZW4gPSAwOwoKICByZXB1cCAocCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSwK
ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MyLCBzaXplX3R5
cGUgbjIpCnsKICBjb25zdCBzaXplX3QgbGVuMiA9IHN0ci5sZW5ndGggKCk7CgogIGlmIChwb3Mx
ID09IDAgJiYgbjEgPj0gbGVuZ3RoICgpICYmIHBvczIgPT0gMCAmJiBuMiA+PSBsZW4yKQogICAg
cmV0dXJuIG9wZXJhdG9yPSAoc3RyKTsKCiAgKCh2b2lkKSAoKCEocG9zMiA+IGxlbjIpKSA/IDAg
OiAoX19hc3NlcnRfZmFpbCAoIiEocG9zMiA+IGxlbjIpIiwgIi91c3IvaW5jbHVkZS9nKystMy9z
dGQvYmFzdHJpbmcuY2MiLCAxMjYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICBpZiAo
bjIgPiBsZW4yIC0gcG9zMikKICAgIG4yID0gbGVuMiAtIHBvczI7CgogIHJldHVybiByZXBsYWNl
IChwb3MxLCBuMSwgc3RyLmRhdGEgKCkgKyBwb3MyLCBuMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBj
aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSB2b2lkIGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKY29weSAoc2l6ZV90IHBvcywg
Y29uc3QgY2hhclQgKnMsIHNpemVfdCBuKQp7CiAgaWYgKG4pCiAgICB0cmFpdHM6OmNvcHkgKGRh
dGEgKCkgKyBwb3MsIHMsIG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj46OlJlcDo6Cm1vdmUgKHNpemVfdCBwb3MsIGNvbnN0IGNoYXJUICpzLCBz
aXplX3QgbikKewogIGlmIChuKQogICAgdHJhaXRzOjptb3ZlIChkYXRhICgpICsgcG9zLCBzLCBu
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JgpiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXpl
X3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbjIpCnsKICBjb25zdCBzaXplX3R5
cGUgbGVuID0gbGVuZ3RoICgpOwogICgodm9pZCkgKCghKHBvcyA+IGxlbikpID8gMCA6IChfX2Fz
c2VydF9mYWlsICgiIShwb3MgPiBsZW4pIiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJp
bmcuY2MiLCAxNTYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIGlmIChuMSA+IGxlbiAt
IHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogICgodm9pZCkgKCghKGxlbiAtIG4xID4gbWF4X3Np
emUgKCkgLSBuMikpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShsZW4gLSBuMSA+IG1heF9zaXpl
ICgpIC0gbjIpIiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2MiLCAxNTksIF9f
UFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIHNpemVfdCBuZXdsZW4gPSBsZW4gLSBuMSArIG4y
OwoKICBpZiAoY2hlY2tfcmVhbGxvYyAobmV3bGVuKSkKICAgIHsKICAgICAgUmVwICpwID0gUmVw
OjpjcmVhdGUgKG5ld2xlbik7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIHBvcyk7CiAgICAg
IHAtPmNvcHkgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkp
OwogICAgICBwLT5jb3B5IChwb3MsIHMsIG4yKTsKICAgICAgcmVwdXAgKHApOwogICAgfQogIGVs
c2UKICAgIHsKICAgICAgcmVwICgpLT5tb3ZlIChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4x
LCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgcmVwICgpLT5jb3B5IChwb3MsIHMsIG4yKTsKICAg
IH0KICByZXAgKCktPmxlbiA9IG5ld2xlbjsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CnNldCAoc2l6ZV90
IHBvcywgY29uc3QgY2hhclQgYywgc2l6ZV90IG4pCnsKICB0cmFpdHM6OnNldCAoZGF0YSAoKSAr
IHBvcywgYywgbik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBl
IHBvcywgc2l6ZV90eXBlIG4xLCBzaXplX3R5cGUgbjIsIGNoYXJUIGMpCnsKICBjb25zdCBzaXpl
X3QgbGVuID0gbGVuZ3RoICgpOwogICgodm9pZCkgKCghKHBvcyA+IGxlbikpID8gMCA6IChfX2Fz
c2VydF9mYWlsICgiIShwb3MgPiBsZW4pIiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJp
bmcuY2MiLCAxOTIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIGlmIChuMSA+IGxlbiAt
IHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogICgodm9pZCkgKCghKGxlbiAtIG4xID4gbWF4X3Np
emUgKCkgLSBuMikpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShsZW4gLSBuMSA+IG1heF9zaXpl
ICgpIC0gbjIpIiwgIi91c3IvaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2MiLCAxOTUsIF9f
UFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogIHNpemVfdCBuZXdsZW4gPSBsZW4gLSBuMSArIG4y
OwoKICBpZiAoY2hlY2tfcmVhbGxvYyAobmV3bGVuKSkKICAgIHsKICAgICAgUmVwICpwID0gUmVw
OjpjcmVhdGUgKG5ld2xlbik7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIHBvcyk7CiAgICAg
IHAtPmNvcHkgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkp
OwogICAgICBwLT5zZXQgKHBvcywgYywgbjIpOwogICAgICByZXB1cCAocCk7CiAgICB9CiAgZWxz
ZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEs
IGxlbiAtIChwb3MgKyBuMSkpOwogICAgICByZXAgKCktPnNldCAocG9zLCBjLCBuMik7CiAgICB9
CiAgcmVwICgpLT5sZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNs
YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kdm9pZCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXNpemUgKHNpemVfdHlwZSBuLCBjaGFy
VCBjKQp7CiAgKCh2b2lkKSAoKCEobiA+IG1heF9zaXplICgpKSkgPyAwIDogKF9fYXNzZXJ0X2Zh
aWwgKCIhKG4gPiBtYXhfc2l6ZSAoKSkiLCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmlu
Zy5jYyIsIDIyMCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogIGlmIChuID4gbGVuZ3Ro
ICgpKQogICAgYXBwZW5kIChuIC0gbGVuZ3RoICgpLCBjKTsKICBlbHNlCiAgICBlcmFzZSAobik7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+
CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNvcHkgKGNoYXJUKiBzLCBzaXpl
X3R5cGUgbiwgc2l6ZV90eXBlIHBvcykgY29uc3QKewogICgodm9pZCkgKCghKHBvcyA+IGxlbmd0
aCAoKSkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiIShwb3MgPiBsZW5ndGggKCkpIiwgIi91c3Iv
aW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2MiLCAyMzMsIF9fUFJFVFRZX0ZVTkNUSU9OX18p
LCAwKSkpOwoKICBpZiAobiA+IGxlbmd0aCAoKSAtIHBvcykKICAgIG4gPSBsZW5ndGggKCkgLSBw
b3M7CgogIHRyYWl0czo6Y29weSAocywgZGF0YSAoKSArIHBvcywgbik7CiAgcmV0dXJuIG47Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBz
aXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwog
IGZvciAoOyB4cG9zICsgbiA8PSBsZW5ndGggKCk7ICsreHBvcykKICAgIGlmICh0cmFpdHM6OmVx
IChkYXRhICgpIFt4cG9zXSwgKnMpCiAgICAgICAgJiYgdHJhaXRzOjpjb21wYXJlIChkYXRhICgp
ICsgeHBvcywgcywgbikgPT0gMCkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cmlu
bGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpfZmluZCAoY29uc3QgY2hh
clQqIHB0ciwgY2hhclQgYywgc2l6ZV90eXBlIHhwb3MsIHNpemVfdHlwZSBsZW4pCnsKICBmb3Ig
KDsgeHBvcyA8IGxlbjsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6ZXEgKHB0ciBbeHBvc10sIGMp
KQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNo
YXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwg
dHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjoKZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIHJl
dHVybiBfZmluZCAoZGF0YSAoKSwgYywgcG9zLCBsZW5ndGggKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj46OgpyZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3Ms
IHNpemVfdHlwZSBuKSBjb25zdAp7CiAgaWYgKG4gPiBsZW5ndGggKCkpCiAgICByZXR1cm4gbnBv
czsKCiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSBuOwogIGlmICh4cG9zID4gcG9zKQogICAg
eHBvcyA9IHBvczsKCiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7ICkKICAgIGlmICh0cmFpdHM6
OmVxIChkYXRhICgpIFt4cG9zXSwgKnMpCiAgICAgICAgJiYgdHJhaXRzOjpjb21wYXJlIChkYXRh
ICgpICsgeHBvcywgcywgbikgPT0gMCkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+
CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJmaW5kIChjaGFyVCBjLCBzaXpl
X3R5cGUgcG9zKSBjb25zdAp7CiAgaWYgKDEgPiBsZW5ndGggKCkpCiAgICByZXR1cm4gbnBvczsK
CiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOwogIGlmICh4cG9zID4gcG9zKQogICAgeHBv
cyA9IHBvczsKCiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7ICkKICAgIGlmICh0cmFpdHM6OmVx
IChkYXRhICgpIFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19z
dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X29mIChjb25zdCBj
aGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3QgeHBv
cyA9IHBvczsKICBmb3IgKDsgeHBvcyA8IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKF9maW5k
IChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgIT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAg
cmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6
ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfbGFz
dF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7
CiAgaWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxl
bmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4
cG9zOyB4cG9zLS0gPiAwOykKICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4p
ICE9IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMs
IHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7
CiAgZm9yICg7IHhwb3MgPCBsZW5ndGggKCk7ICsreHBvcykKICAgIGlmIChfZmluZCAocywgZGF0
YSAoKSBbeHBvc10sIDAsIG4pID09IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBu
cG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X25vdF9v
ZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwog
IGZvciAoOyB4cG9zIDwgbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAodHJhaXRzOjpuZSAoZGF0
YSAoKSBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9sYXN0X25vdF9vZiAoY29uc3QgY2hh
clQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgp
ID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAg
aWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAw
OykKICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pID09IG5wb3MpCiAgICAg
IHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj46OgpmaW5kX2xhc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7
CiAgaWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxl
bmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4
cG9zOyB4cG9zLS0gPiAwOykKICAgIGlmICh0cmFpdHM6Om5lIChkYXRhICgpIFt4cG9zXSwgYykp
CiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbnQgYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKY29tcGFyZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIs
IHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgKCh2b2lkKSAoKCEocG9zID4g
bGVuZ3RoICgpKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIhKHBvcyA+IGxlbmd0aCAoKSkiLCAi
L3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIsIDM5OSwgX19QUkVUVFlfRlVOQ1RJ
T05fXyksIDApKSk7CgogIHNpemVfdCBybGVuID0gbGVuZ3RoICgpIC0gcG9zOwogIGlmIChybGVu
ID4gbikKICAgIHJsZW4gPSBuOwogIGlmIChybGVuID4gc3RyLmxlbmd0aCAoKSkKICAgIHJsZW4g
PSBzdHIubGVuZ3RoICgpOwogIGludCByID0gdHJhaXRzOjpjb21wYXJlIChkYXRhICgpICsgcG9z
LCBzdHIuZGF0YSAoKSwgcmxlbik7CiAgaWYgKHIgIT0gMCkKICAgIHJldHVybiByOwogIGlmIChy
bGVuID09IG4pCiAgICByZXR1cm4gMDsKICByZXR1cm4gKGxlbmd0aCAoKSAtIHBvcykgLSBzdHIu
bGVuZ3RoICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgppbnQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoK
Y29tcGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25z
dAp7CiAgKCh2b2lkKSAoKCEocG9zID4gbGVuZ3RoICgpKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwg
KCIhKHBvcyA+IGxlbmd0aCAoKSkiLCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5j
YyIsIDQxOCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogIHNpemVfdCBybGVuID0gbGVu
Z3RoICgpIC0gcG9zOwogIGlmIChybGVuID4gbikKICAgIHJsZW4gPSBuOwogIGludCByID0gdHJh
aXRzOjpjb21wYXJlIChkYXRhICgpICsgcG9zLCBzLCBybGVuKTsKICBpZiAociAhPSAwKQogICAg
cmV0dXJuIHI7CiAgcmV0dXJuIChsZW5ndGggKCkgLSBwb3MpIC0gbjsKfQoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppc3RyZWFtICYKb3Bl
cmF0b3I+PiAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPiAmcykKewogIGludCB3ID0gaXMud2lkdGggKDApOwogIGlmIChpcy5pcGZ4MCAoKSkKICAg
IHsKICAgICAgcmVnaXN0ZXIgc3RyZWFtYnVmICpzYiA9IGlzLnJkYnVmICgpOwogICAgICBzLnJl
c2l6ZSAoMCk7CiAgICAgIHdoaWxlICgxKQogICAgICAgIHsKICAgICAgICAgIGludCBjaCA9IHNi
LT5zYnVtcGMgKCk7CiAgICAgICAgICBpZiAoY2ggPT0gKC0xKSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGlzLnNldHN0YXRlIChpb3M6OmVvZmJpdCk7CiAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKHRyYWl0czo6aXNfZGVsIChjaCkpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBzYi0+c3VuZ2V0YyAoKTsKICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgcyArPSBzdGF0aWNfY2FzdDxjaGFyVD4gKGNo
KTsKICAgICAgICAgIGlmICgtLXcgPT0gMSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQog
ICAgfQoKICBpcy5pc2Z4ICgpOwogIGlmIChzLmxlbmd0aCAoKSA9PSAwKQogICAgaXMuc2V0c3Rh
dGUgKGlvczo6ZmFpbGJpdCk7CgogIHJldHVybiBpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kb3N0cmVhbSAmCm9wZXJhdG9yPDwgKG9z
dHJlYW0gJm8sIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYg
cykKewogIHJldHVybiBvLndyaXRlIChzLmRhdGEgKCksIHMubGVuZ3RoICgpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaXN0cmVhbSYK
Z2V0bGluZSAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPiYgcywgY2hhclQgZGVsaW0pCnsKICBpZiAoaXMuaXBmeDEgKCkpCiAgICB7CiAgICAgIHNp
emVfdCBjb3VudCA9IDA7CiAgICAgIHN0cmVhbWJ1ZiAqc2IgPSBpcy5yZGJ1ZiAoKTsKICAgICAg
cy5yZXNpemUgKDApOwoKICAgICAgd2hpbGUgKDEpCiAgICAgICAgewogICAgICAgICAgaW50IGNo
ID0gc2ItPnNidW1wYyAoKTsKICAgICAgICAgIGlmIChjaCA9PSAoLTEpKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaXMuc2V0c3RhdGUgKGNvdW50ID09IDAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPyAoaW9zOjpmYWlsYml0fGlvczo6ZW9mYml0KQogICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IGlvczo6ZW9mYml0KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
fQoKICAgICAgICAgICsrY291bnQ7CgogICAgICAgICAgaWYgKGNoID09IGRlbGltKQogICAgICAg
ICAgICBicmVhazsKCiAgICAgICAgICBzICs9IHN0YXRpY19jYXN0PGNoYXJUPiAoY2gpOwoKICAg
ICAgICAgIGlmIChzLmxlbmd0aCAoKSA9PSBzLm5wb3MgLSAxKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgaXMuc2V0c3RhdGUgKGlvczo6ZmFpbGJpdCk7CiAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKCiAgaXMuaXNmeCAoKTsKCiAgcmV0dXJu
IGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcApiYXNpY19z
dHJpbmc8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6bmlsUmVwID0geyAwLCAwLCAxLCBmYWxz
ZSB9OwoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4KY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5
cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpucG9zOwoKfQojIDY2
MSAiL3Vzci9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKIyA3ICIvdXNyL2luY2x1
ZGUvZysrLTMvc3RyaW5nIiAyIDMKCmV4dGVybiAiQysrIiB7CnR5cGVkZWYgYmFzaWNfc3RyaW5n
IDxjaGFyPiBzdHJpbmc7Cgp9CgojIDE1ICJncmFtX3N5bWJvbC5oIiAyCgpjbGFzcyBHcmFtbWFy
U3ltYm9sCnsKcHVibGljOgoKCgoKR3JhbW1hclN5bWJvbCgpCnsgfQoKCgoKCgoKR3JhbW1hclN5
bWJvbChzdHJpbmcgJiBzdHIpOwoKCgoKCgp2b2lkIFByaW50KG9zdHJlYW0gJiBvdXQpIGNvbnN0
OwoKCgoKCnN0cmluZyBHZXRUZXh0KCkKewogICAgICAgIHJldHVybiBtX3N0clRleHQ7Cn0KCnBy
aXZhdGU6CgpzdHJpbmcgbV9zdHJUZXh0OwoKfTsKCmlubGluZSBvc3RyZWFtICYgb3BlcmF0b3I8
PChvc3RyZWFtICYgb3V0LCBjb25zdCBHcmFtbWFyU3ltYm9sICYgZ3JhbW1hcikKewogICAgICAg
IGdyYW1tYXIuUHJpbnQob3V0KTsKICAgICAgICByZXR1cm4gb3V0Owp9CgojIDE0ICJwcm9kdWN0
aW9uLmgiIDIKCiMgMzEgIi91c3IvaW5jbHVkZS9nKystMy9saXN0IiAxIDMKIyA0MyAiL3Vzci9p
bmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy0z
L3N0bF9wYWlyLmgiIDEgMwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0
IHBhaXIgewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5
cGU7CgogIF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwogIHBhaXIoKSA6IGZpcnN0KF9UMSgpKSwg
c2Vjb25kKF9UMigpKSB7fQogIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6
IGZpcnN0KF9fYSksIHNlY29uZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFz
cyBfVTI+CiAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJz
dCksIHNlY29uZChfX3Auc2Vjb25kKSB7fQoKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz
IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBj
b25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmly
c3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj
bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194
LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5m
aXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQg
PCBfX3kuc2Vjb25kKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUg
cGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKGNvbnN0IF9UMSYgX194LCBjb25zdCBfVDImIF9feSkK
ewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCiMgNDMgIi91c3IvaW5jbHVk
ZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgNTUgIi91c3IvaW5jbHVkZS9nKystMy90
eXBlX3RyYWl0cy5oIiAxIDMKc3RydWN0IF9fdHJ1ZV90eXBlIHsKfTsKCnN0cnVjdCBfX2ZhbHNl
X3R5cGUgewp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHMgewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVfZmlyc3Q7CiMg
ODEgIi91c3IvaW5jbHVkZS9nKystMy90eXBlX3RyYWl0cy5oIiAzCiAgIHR5cGVkZWYgX19mYWxz
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxz
ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90
eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGlzX1BP
RF90eXBlOwp9OwoKCgoKCgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190
eXBlX3RyYWl0czxzaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90
eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNo
b3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90
cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP
RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWdu
ZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8bG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q
T0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRv
dWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf
dHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7Cn07CgojIDMwMSAiL3Vzci9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgiIDMKdGVtcGxh
dGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlw
ZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsK
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X0lzX2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVu
c2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRl
Z3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8
dW5zaWduZWQgaW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1w
bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBf
SW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25n
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25n
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgojIDQ2ICIvdXNyL2luY2x1
ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgoKIyAxMiAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDggIi91c3IvbGli
L2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N5c2xpbWl0cy5oIiAxIDMK
IyAxMzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL2xp
bWl0cy5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMjcgIi91c3Iv
aW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9iaXRzL2xv
Y2FsX2xpbS5oIiAxIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMiAz
CiMgMzEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCgojIDEzMSAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDggIi91
c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N5c2xpbWl0cy5o
IiAyIDMKIyAxMiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1
ZGUvbGltaXRzLmgiIDIgMwojIDUwICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgi
IDIgMwoKCgojIDM0ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5j
bHVkZS9uZXcuaCIgMSAzCiMgMzMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgv
Mi45Ni9pbmNsdWRlL25ldyIgMSAzCiNwcmFnbWEgaW50ZXJmYWNlICJuZXciCiMgMzMgIi91c3Iv
bGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL25ldyIgMwoKCgojIDMz
ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9leGNlcHRp
b24iIDEgMwojcHJhZ21hIGludGVyZmFjZSAiZXhjZXB0aW9uIgojIDMzICIvdXNyL2xpYi9nY2Mt
bGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9leGNlcHRpb24iIDMKCgpleHRlcm4g
IkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgpjbGFzcyBleGNlcHRpb24gewpwdWJsaWM6CiAgZXhj
ZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmV4Y2VwdGlvbiAoKSB7IH0KICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHdoYXQgKCkgY29uc3Q7Cn07CgpjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4
Y2VwdGlvbiB7CnB1YmxpYzoKICBiYWRfZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmJhZF9l
eGNlcHRpb24gKCkgeyB9Cn07Cgp0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7
CnR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7Cgp0ZXJtaW5hdGVfaGFuZGxl
ciBzZXRfdGVybWluYXRlICh0ZXJtaW5hdGVfaGFuZGxlcik7CnZvaWQgdGVybWluYXRlICgpIF9f
YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4
cGVjdGVkICh1bmV4cGVjdGVkX2hhbmRsZXIpOwp2b2lkIHVuZXhwZWN0ZWQgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwpib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbiAoKTsKCn0KCn0K
CiMgMzYgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL25l
dyIgMiAzCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgogIGNsYXNzIGJhZF9hbGxv
YyA6IHB1YmxpYyBleGNlcHRpb24gewogIHB1YmxpYzoKICAgIHZpcnR1YWwgY29uc3QgY2hhciog
d2hhdCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gImJhZF9hbGxvYyI7IH0KICB9OwoKICBzdHJ1
Y3Qgbm90aHJvd190IHt9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKICB0eXBl
ZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIg
KG5ld19oYW5kbGVyKTsKCn0KCgp2b2lkICpvcGVyYXRvciBuZXcgKHNpemVfdCkgdGhyb3cgKHN0
ZDo6YmFkX2FsbG9jKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10gKHNpemVfdCkgdGhyb3cgKHN0ZDo6
YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQgKikgdGhyb3coKTsKdm9pZCBv
cGVyYXRvciBkZWxldGVbXSAodm9pZCAqKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXcgKHNp
emVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXdb
XSAoc2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3Ig
ZGVsZXRlICh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVy
YXRvciBkZWxldGVbXSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgoK
aW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsg
cmV0dXJuIHBsYWNlOyB9CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQg
KnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9Cn0KCiMgMzQgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL25ldy5oIiAyIDMKCnVzaW5nIHN0ZDo6
bmV3X2hhbmRsZXI7CnVzaW5nIHN0ZDo6c2V0X25ld19oYW5kbGVyOwoKIyA1MyAiL3Vzci9pbmNs
dWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgoKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lk
IF9faXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYiwgX1RwKikg
ewogIF9UcCBfX3RtcCA9ICpfX2E7CiAgKl9fYSA9ICpfX2I7CiAgKl9fYiA9IF9fdG1wOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KaW5saW5l
IHZvaWQgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikgewog
IF9faXRlcl9zd2FwKF9fYSwgX19iLCBfX3ZhbHVlX3R5cGUoX19hKSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CmlubGluZSB2b2lkIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19iKSB7CiAgX1RwIF9f
dG1wID0gX19hOwogIF9fYSA9IF9fYjsKICBfX2IgPSBfX3RtcDsKfQoKCgoKCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0
IF9UcCYgX19iKSB7CiAgcmV0dXJuIF9fYiA8IF9fYSA/IF9fYiA6IF9fYTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBf
VHAmIF9fYikgewogIHJldHVybiBfX2EgPCBfX2IgPyBfX2IgOiBfX2E7Cn0KCgoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmIG1pbihjb25zdCBf
VHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkgewogIHJldHVybiBfX2Nv
bXAoX19iLCBfX2EpID8gX19iIDogX19hOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
Q29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAm
IF9fYiwgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJuIF9fY29tcChfX2EsIF9fYikgPyBfX2Ig
OiBfX2E7Cn0KIyAxMjMgIi91c3IvaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMwp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5j
ZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNl
KikKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkK
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3Rh
bmNlPgppbmxpbmUgX091dHB1dEl0ZXIKX19jb3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNl
IF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAgICAqX19yZXN1bHQg
PSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBf
X3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIF9UcCoKX19jb3B5X3RyaXZp
YWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkg
ewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9f
Zmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfQm9vbFR5
cGU+CnN0cnVjdCBfX2NvcHlfZGlzcGF0Y2ggewogIHN0YXRpYyBfT3V0cHV0SXRlciBjb3B5KF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90
eXBlIF9EaXN0YW5jZTsKICAgIHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCwgX0NhdGVnb3J5KCksIChfRGlzdGFuY2UqKSAwKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAg
c3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBf
VHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9k
aXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNv
cHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkg
ewogICAgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwog
IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5s
aW5lIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfVHA7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogIHJldHVybiBfX2NvcHlfZGlzcGF0
Y2g8X0lucHV0SXRlciwgX091dHB1dEl0ZXIsIF9Ucml2aWFsPgogICAgOjpjb3B5KF9fZmlyc3Qs
IF9fbGFzdCwgX19yZXN1bHQpOwp9CgojIDIxOCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGdv
YmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlk
aXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGly
ZWN0aW9uYWxJdGVyMiBfX2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgd2hpbGUgKF9f
Zmlyc3QgIT0gX19sYXN0KQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9f
cmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZSopCnsKICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBf
X2ZpcnN0OyBfX24gPiAwOyAtLV9fbikKICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogIHJl
dHVybiBfX3Jlc3VsdDsKfQoKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0
ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Jvb2xUeXBl
PgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAg
ICAgICAgIF9DYXQ7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0
aW9uYWxJdGVyMT46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwoKICBzdGF0
aWMgX0JpZGlyZWN0aW9uYWxJdGVyMiBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
MiBfX3Jlc3VsdCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1
ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9U
cCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9f
bGFzdCAtIF9fZmlyc3Q7CiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0gX051bSwgX19maXJzdCwgc2l6
ZW9mKF9UcCkgKiBfTnVtKTsKICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBf
VHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBf
X2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgcmV0dXJuIF9f
Y29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgICAgOjpj
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBf
QkkxLCBjbGFzcyBfQkkyPgppbmxpbmUgX0JJMiBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwg
X0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90
cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTI+Ojp2YWx1ZV90eXBlPgogICAgICAg
ICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAg
ICAgIF9Ucml2aWFsOwogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJ
MiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQpOwp9CgojIDMwOCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAzCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CnBh
aXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+IF9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwg
X1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGZvciAoIDsgX19jb3VudCA+IDA7IC0tX19jb3VudCkg
ewogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgICArK19fcmVzdWx0
OwogIH0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4oX19maXJzdCwgX19y
ZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JBSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9P
dXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfUkFJdGVyLCBfT3V0cHV0SXRlcj4KX19jb3B5X24oX1JB
SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwKICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICBfUkFJdGVyIF9fbGFz
dCA9IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVy
PihfX2xhc3QsIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUg
cGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBfX2NvcHlf
bihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX19pdGVyYXRv
cl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRw
dXRJdGVyPgpjb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0
SXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBfX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jl
c3VsdCk7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZv
aWQgZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3Qg
X1RwJiBfX3ZhbHVlKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog
ICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNs
YXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2Zp
cnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsgX19uID4gMDsg
LS1fX24sICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICByZXR1cm4gX19maXJz
dDsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4K
cGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmly
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXIyIF9fZmlyc3QyKSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmlyc3Qx
ID09ICpfX2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJl
dHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3Mg
X0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNo
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgd2hpbGUg
KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0
MikpIHsKICAgICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICByZXR1cm4gcGFpcjxf
SW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmlubGluZSBib29sIGVxdWFs
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0
MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICgqX19maXJzdDEgIT0gKl9fZmlyc3Qy
KQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cmlu
bGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0
ZSBfX2JpbmFyeV9wcmVkKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmly
c3QxLCArK19fZmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmly
c3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhpY29ncmFwaGlj
YWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl
cjIgX19sYXN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh
PSBfX2xhc3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICBpZiAoKl9f
Zmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICgqX19maXJzdDIg
PCAqX19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxID09
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgbGV4aWNvZ3Jh
cGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1
dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j
b21wKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFz
dDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9f
Zmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChfX2NvbXAoKl9f
Zmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2Zp
cnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCmlubGluZSBib29sCmxl
eGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHNp
emVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9
IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJz
dDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0g
MCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNv
Z3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmly
c3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29t
cGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoK
CgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpp
bnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf
SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CiAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0
MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIC0xOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2Zp
cnN0MSkKICAgICAgcmV0dXJuIDE7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9
CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpIHsKICAgIHJldHVybiAhKF9fZmlyc3QxID09IF9f
bGFzdDEpOwogIH0KICBlbHNlIHsKICAgIHJldHVybiAtMTsKICB9Cn0KCmlubGluZSBpbnQKX19s
ZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
Y2hhciogX19sYXN0MikKewogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19m
aXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBj
b25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4x
LCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0CiAgICAgICAgICAg
ICAgICAgICAgICAgOiAoX19sZW4xID09IF9fbGVuMiA/IDAgOiAoX19sZW4xIDwgX19sZW4yID8g
LTEgOiAxKSk7Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNv
bnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIp
CnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmly
c3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciop
IF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J
bnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKICByZXR1
cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2Zp
cnN0MiwgX19sYXN0Mik7Cn0KCiMgMzEgIi91c3IvaW5jbHVkZS9nKystMy9saXN0IiAyIDMKCgoj
IDM2ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX19w
b2ludGVyLT5+X1RwKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5l
IHZvaWQgY29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKICBuZXcgKF9f
cCkgX1QxKF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBjb25z
dHJ1Y3QoX1QxKiBfX3ApIHsKICBuZXcgKF9fcCkgX1QxKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZApfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0
b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKewogIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGRlc3Ryb3koJipfX2ZpcnN0
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIF9fZGVz
dHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUp
IHt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgppbmxpbmUg
dm9pZApfX2Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9y
IF9fbGFzdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+Ojpo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICBfVHJpdmlhbF9kZXN0cnVjdG9yOwogIF9f
ZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfVHJpdmlhbF9kZXN0cnVjdG9yKCkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgZGVzdHJveShfRm9y
d2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgX19kZXN0
cm95KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKaW5saW5lIHZv
aWQgZGVzdHJveShjaGFyKiwgY2hhciopIHt9CmlubGluZSB2b2lkIGRlc3Ryb3kod2NoYXJfdCos
IHdjaGFyX3QqKSB7fQoKIyAzMyAiL3Vzci9pbmNsdWRlL2crKy0zL2xpc3QiIDIgMwoKIyAzNCAi
L3Vzci9pbmNsdWRlL2crKy0zL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwoKCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJ
dGVyCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCnsKICByZXR1cm4gY29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1
eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg
X19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiB7CiAgICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgIGNvbnN0
cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICByZXR1cm4gX19jdXI7CiAgfQo7Cn0KCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+Cmlu
bGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omlz
X1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCiAgdW5pbml0
aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIHJldHVybiBfX3VuaW5p
dGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19yZXN1bHQpKTsKfQoKaW5saW5lIGNoYXIqIHVu
aW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogX19yZXN1bHQpIHsKICBtZW1t
b3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1
bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB3Y2hhcl90Kgp1bmluaXRpYWxpemVk
X2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpCnsKICBtZW1tb3ZlKF9fcmVzdWx0LCBf
X2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBf
X3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KcGFpcjxfSW5wdXRJdGVyLCBf
Rm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBf
U2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3Vs
dCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBfRm9yd2Fy
ZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKIHsKICAgIGZvciAoIDsgX19jb3VudCA+IDAgOyAtLV9f
Y291bnQsICsrX19maXJzdCwgKytfX2N1cikKICAgICAgY29uc3RydWN0KCYqX19jdXIsICpfX2Zp
cnN0KTsKICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwg
X19jdXIpOwogIH0KOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9SYW5kb21BY2Nlc3NJdGVy
LCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRv
cl90YWcpIHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsK
ICByZXR1cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPigKICAgICAgICAg
ICAgICAgICBfX2xhc3QsCiAgICAgICAgICAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9G
b3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9T
aXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkg
ewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnko
X19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNs
YXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgp1
bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAg
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBfX3Vu
aW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoK
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191
bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90
eXBlKQp7CiAgZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4Kdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9f
Y3VyID0gX19maXJzdDsKIHsKICAgIGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyArK19fY3VyKQog
ICAgICBjb25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICB9CjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgdm9pZCBfX3VuaW5pdGlh
bGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9E
OwogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BP
RCgpKTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5l
IHZvaWQgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgX191bmluaXRpYWxpemVkX2ZpbGwo
X19maXJzdCwgX19sYXN0LCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9G
b3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwg
X190cnVlX3R5cGUpCnsKICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KX0Zvcndh
cmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
U2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2Zh
bHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogewogICAgZm9yICgg
OyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgY29uc3RydWN0KCYqX19jdXIsIF9feCk7
CiAgICByZXR1cm4gX19jdXI7CiAgfQo7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CmlubGluZSBfRm9yd2FyZEl0ZXIK
X191bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBj
b25zdCBfVHAmIF9feCwgX1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8
X1RwMT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxs
X25fYXV4KF9fZmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVy
CnVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNv
bnN0IF9UcCYgX194KQp7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX24oX19maXJzdCwg
X19uLCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KIyAyMjggIi91c3IvaW5jbHVkZS9n
KystMy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg
Y2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRl
cgpfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlciBfX3Jlc3VsdCkKewogIF9Gb3J3YXJkSXRlciBfX21pZCA9IHVuaW5pdGlhbGl6ZWRf
Y29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogewogICAgcmV0dXJuIHVuaW5pdGlh
bGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOwogIH0KOwp9CgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9JbnB1dEl0ZXI+CmlubGlu
ZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19y
ZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfVHAmIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0KQp7CiAgdW5pbml0aWFsaXplZF9maWxsKF9fcmVzdWx0LCBfX21p
ZCwgX194KTsKIHsKICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0
LCBfX21pZCk7CiAgfQo7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxpemVkX2NvcHlf
ZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIF9Gb3J3YXJk
SXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmly
c3QyKTsKIHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAg
fQo7Cn0KCiMgMzQgIi91c3IvaW5jbHVkZS9nKystMy9saXN0IiAyIDMKCiMgMzQgIi91c3IvaW5j
bHVkZS9nKystMy9zdGxfbGlzdC5oIiAxIDMKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0
cnVjdCBfTGlzdF9ub2RlIHsKICB0eXBlZGVmIHZvaWQqIF9Wb2lkX3BvaW50ZXI7CiAgX1ZvaWRf
cG9pbnRlciBfTV9uZXh0OwogIF9Wb2lkX3BvaW50ZXIgX01fcHJldjsKICBfVHAgX01fZGF0YTsK
fTsKCnRlbXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4Kc3RydWN0IF9M
aXN0X2l0ZXJhdG9yIHsKICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0
ZXJhdG9yOwogIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLGNvbnN0IF9UcCYsY29uc3QgX1Rw
Kj4gY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1JlZixfUHRy
PiBfU2VsZjsKCiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX1B0ciBwb2ludGVy
OwogIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgdHlwZWRlZiBfTGlzdF9ub2RlPF9UcD4gX05v
ZGU7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl
cmVuY2VfdHlwZTsKCiAgX05vZGUqIF9NX25vZGU7CgogIF9MaXN0X2l0ZXJhdG9yKF9Ob2RlKiBf
X3gpIDogX01fbm9kZShfX3gpIHt9CiAgX0xpc3RfaXRlcmF0b3IoKSB7fQogIF9MaXN0X2l0ZXJh
dG9yKGNvbnN0IGl0ZXJhdG9yJiBfX3gpIDogX01fbm9kZShfX3guX01fbm9kZSkge30KCiAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IF9TZWxmJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGUgPT0g
X194Ll9NX25vZGU7IH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX1NlbGYmIF9feCkgY29uc3Qg
eyByZXR1cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsgfQogIHJlZmVyZW5jZSBvcGVyYXRvcioo
KSBjb25zdCB7IHJldHVybiAoKl9NX25vZGUpLl9NX2RhdGE7IH0KCgogIHBvaW50ZXIgb3BlcmF0
b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKICBfU2VsZiYgb3BlcmF0
b3IrKygpIHsKICAgIF9NX25vZGUgPSAoX05vZGUqKShfTV9ub2RlLT5fTV9uZXh0KTsKICAgIHJl
dHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1w
ID0gKnRoaXM7CiAgICArKyp0aGlzOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3Bl
cmF0b3ItLSgpIHsKICAgIF9NX25vZGUgPSAoX05vZGUqKShfTV9ub2RlLT5fTV9wcmV2KTsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9f
dG1wID0gKnRoaXM7CiAgICAtLSp0aGlzOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCiMgMTMz
ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2xpc3QuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX0xpc3RfYWxsb2NfYmFzZSB7
CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9y
Pjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90
eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTm9kZV9hbGxvY2F0b3I7IH0KCiAg
X0xpc3RfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9Ob2RlX2FsbG9j
YXRvcihfX2EpIHt9Cgpwcm90ZWN0ZWQ6CiAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9nZXRfbm9kZSgp
CiAgIHsgcmV0dXJuIF9Ob2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0
X25vZGUoX0xpc3Rfbm9kZTxfVHA+KiBfX3ApCiAgICB7IF9Ob2RlX2FsbG9jYXRvci5kZWFsbG9j
YXRlKF9fcCwgMSk7IH0KCnByb3RlY3RlZDoKICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9MaXN0
X25vZGU8X1RwPiwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICAgX05vZGVf
YWxsb2NhdG9yOwogIF9MaXN0X25vZGU8X1RwPiogX01fbm9kZTsKfTsKCgoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9B
bGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0
czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5
cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9j
YXRvcl90eXBlKCk7IH0KCiAgX0xpc3RfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYp
IHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9MaXN0X25v
ZGU8X1RwPiwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsK
ICBfTGlzdF9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFs
bG9jYXRlKDEpOyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9fcCkgeyBf
QWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cgpwcm90ZWN0ZWQ6CiAgX0xpc3Rfbm9k
ZTxfVHA+KiBfTV9ub2RlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpj
bGFzcyBfTGlzdF9iYXNlCiAgOiBwdWJsaWMgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+Ojpf
U19pbnN0YW5jZWxlc3M+CnsKcHVibGljOgogIHR5cGVkZWYgX0xpc3RfYWxsb2NfYmFzZTxfVHAs
IF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9B
bGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5h
bWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfTGlzdF9iYXNlKGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9ub2RlID0gX01f
Z2V0X25vZGUoKTsKICAgIF9NX25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogICAgX01fbm9kZS0+
X01fcHJldiA9IF9NX25vZGU7CiAgfQogIH5fTGlzdF9iYXNlKCkgewogICAgY2xlYXIoKTsKICAg
IF9NX3B1dF9ub2RlKF9NX25vZGUpOwogIH0KCiAgdm9pZCBjbGVhcigpOwp9OwoKIyAyMzEgIi91
c3IvaW5jbHVkZS9nKystMy9zdGxfbGlzdC5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4Kdm9pZApfTGlzdF9iYXNlPF9UcCxfQWxsb2M+OjpjbGVhcigpCnsKICBfTGlzdF9u
b2RlPF9UcD4qIF9fY3VyID0gKF9MaXN0X25vZGU8X1RwPiopIF9NX25vZGUtPl9NX25leHQ7CiAg
d2hpbGUgKF9fY3VyICE9IF9NX25vZGUpIHsKICAgIF9MaXN0X25vZGU8X1RwPiogX190bXAgPSBf
X2N1cjsKICAgIF9fY3VyID0gKF9MaXN0X25vZGU8X1RwPiopIF9fY3VyLT5fTV9uZXh0OwogICAg
ZGVzdHJveSgmX190bXAtPl9NX2RhdGEpOwogICAgX01fcHV0X25vZGUoX190bXApOwogIH0KICBf
TV9ub2RlLT5fTV9uZXh0ID0gX01fbm9kZTsKICBfTV9ub2RlLT5fTV9wcmV2ID0gX01fbm9kZTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgpj
bGFzcyBsaXN0IDogcHJvdGVjdGVkIF9MaXN0X2Jhc2U8X1RwLCBfQWxsb2M+IHsKICB0eXBlZGVm
IF9MaXN0X2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOwpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB2b2lk
KiBfVm9pZF9wb2ludGVyOwoKcHVibGljOgogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlw
ZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29u
c3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNv
bnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9MaXN0X25vZGU8X1Rw
PiBfTm9kZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3Qg
ZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlw
ZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qg
eyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKcHVibGljOgogIHR5cGVkZWYgX0xp
c3RfaXRlcmF0b3I8X1RwLF9UcCYsX1RwKj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfTGlzdF9pdGVy
YXRvcjxfVHAsY29uc3QgX1RwJixjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKCgogIHR5cGVk
ZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7
CiMgMjgxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2xpc3QuaCIgMwpwcm90ZWN0ZWQ6CgogIHVz
aW5nIF9CYXNlOjpfTV9ub2RlOwogIHVzaW5nIF9CYXNlOjpfTV9wdXRfbm9kZTsKICB1c2luZyBf
QmFzZTo6X01fZ2V0X25vZGU7CgoKcHJvdGVjdGVkOgogIF9Ob2RlKiBfTV9jcmVhdGVfbm9kZShj
b25zdCBfVHAmIF9feCkKICB7CiAgICBfTm9kZSogX19wID0gX01fZ2V0X25vZGUoKTsKIHsKICAg
ICAgY29uc3RydWN0KCZfX3AtPl9NX2RhdGEsIF9feCk7CiAgICB9CjsKICAgIHJldHVybiBfX3A7
CiAgfQoKICBfTm9kZSogX01fY3JlYXRlX25vZGUoKQogIHsKICAgIF9Ob2RlKiBfX3AgPSBfTV9n
ZXRfbm9kZSgpOwogewogICAgICBjb25zdHJ1Y3QoJl9fcC0+X01fZGF0YSk7CiAgICB9CjsKICAg
IHJldHVybiBfX3A7CiAgfQoKcHVibGljOgogIGV4cGxpY2l0IGxpc3QoY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIDogX0Jhc2UoX19hKSB7fQoKICBpdGVyYXRv
ciBiZWdpbigpIHsgcmV0dXJuIChfTm9kZSopKF9NX25vZGUtPl9NX25leHQpOyB9CiAgY29uc3Rf
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiAoX05vZGUqKShfTV9ub2RlLT5fTV9uZXh0
KTsgfQoKICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9ub2RlOyB9CiAgY29uc3RfaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZTsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJi
ZWdpbigpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IoZW5kKCkpOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpCiAgICB7IHJldHVy
biByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBy
ZW5kKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7
IH0KCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGUtPl9NX25leHQgPT0gX01f
bm9kZTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgewogICAgc2l6ZV90eXBlIF9fcmVzdWx0
ID0gMDsKICAgIGRpc3RhbmNlKGJlZ2luKCksIGVuZCgpLCBfX3Jlc3VsdCk7CiAgICByZXR1cm4g
X19yZXN1bHQ7CiAgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVf
dHlwZSgtMSk7IH0KCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICBj
b25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQogIHJlZmVy
ZW5jZSBiYWNrKCkgeyByZXR1cm4gKigtLWVuZCgpKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNr
KCkgY29uc3QgeyByZXR1cm4gKigtLWVuZCgpKTsgfQoKICB2b2lkIHN3YXAobGlzdDxfVHAsIF9B
bGxvYz4mIF9feCkgezo6c3dhcChfTV9ub2RlLCBfX3guX01fbm9kZSk7IH0KCiAgaXRlcmF0b3Ig
aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KSB7CiAgICBfTm9kZSog
X190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gpOwogICAgX190bXAtPl9NX25leHQgPSBfX3Bvc2l0
aW9uLl9NX25vZGU7CiAgICBfX3RtcC0+X01fcHJldiA9IF9fcG9zaXRpb24uX01fbm9kZS0+X01f
cHJldjsKICAgICgoX05vZGUqKSAoX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2KSktPl9NX25l
eHQgPSBfX3RtcDsKICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAg
cmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikg
eyByZXR1cm4gaW5zZXJ0KF9fcG9zaXRpb24sIF9UcCgpKTsgfQoKCgogIHRlbXBsYXRlPGNsYXNz
IF9JbnRlZ2VyPgogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50
ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVf
dHlwZSkgewogICAgaW5zZXJ0KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9feCk7CiAg
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlz
cGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fZmFsc2VfdHlwZSk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9J
bnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luc2VydF9kaXNwYXRj
aChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKCgoKCgogIHZvaWQg
aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7Cgog
IHZvaWQgcHVzaF9mcm9udChjb25zdCBfVHAmIF9feCkgeyBpbnNlcnQoYmVnaW4oKSwgX194KTsg
fQogIHZvaWQgcHVzaF9mcm9udCgpIHtpbnNlcnQoYmVnaW4oKSk7fQogIHZvaWQgcHVzaF9iYWNr
KGNvbnN0IF9UcCYgX194KSB7IGluc2VydChlbmQoKSwgX194KTsgfQogIHZvaWQgcHVzaF9iYWNr
KCkge2luc2VydChlbmQoKSk7fQoKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9u
KSB7CiAgICBfTm9kZSogX19uZXh0X25vZGUgPSAoX05vZGUqKSAoX19wb3NpdGlvbi5fTV9ub2Rl
LT5fTV9uZXh0KTsKICAgIF9Ob2RlKiBfX3ByZXZfbm9kZSA9IChfTm9kZSopIChfX3Bvc2l0aW9u
Ll9NX25vZGUtPl9NX3ByZXYpOwogICAgX19wcmV2X25vZGUtPl9NX25leHQgPSBfX25leHRfbm9k
ZTsKICAgIF9fbmV4dF9ub2RlLT5fTV9wcmV2ID0gX19wcmV2X25vZGU7CiAgICBkZXN0cm95KCZf
X3Bvc2l0aW9uLl9NX25vZGUtPl9NX2RhdGEpOwogICAgX01fcHV0X25vZGUoX19wb3NpdGlvbi5f
TV9ub2RlKTsKICAgIHJldHVybiBpdGVyYXRvcihfX25leHRfbm9kZSk7CiAgfQogIGl0ZXJhdG9y
IGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7CiAgdm9pZCBjbGVhcigp
IHsgX0Jhc2U6OmNsZWFyKCk7IH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUs
IGNvbnN0IF9UcCYgX194KTsKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkgeyBy
ZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CgogIHZvaWQgcG9wX2Zyb250KCkgeyBlcmFzZShi
ZWdpbigpKTsgfQogIHZvaWQgcG9wX2JhY2soKSB7CiAgICBpdGVyYXRvciBfX3RtcCA9IGVuZCgp
OwogICAgZXJhc2UoLS1fX3RtcCk7CiAgfQogIGxpc3Qoc2l6ZV90eXBlIF9fbiwgY29uc3QgX1Rw
JiBfX3ZhbHVlLAogICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90
eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkKICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9fbiwgX192YWx1
ZSk7IH0KICBleHBsaWNpdCBsaXN0KHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKGFsbG9jYXRv
cl90eXBlKCkpCiAgICB7IGluc2VydChiZWdpbigpLCBfX24sIF9UcCgpKTsgfQoKCgoKCiAgdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIGxpc3QoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f
YSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkKICAgIHsgaW5zZXJ0KGJlZ2lu
KCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiMgNDM0ICIvdXNyL2luY2x1ZGUvZysrLTMvc3RsX2xp
c3QuaCIgMwogIGxpc3QoY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCkgOiBfQmFzZShfX3gu
Z2V0X2FsbG9jYXRvcigpKQogICAgeyBpbnNlcnQoYmVnaW4oKSwgX194LmJlZ2luKCksIF9feC5l
bmQoKSk7IH0KCiAgfmxpc3QoKSB7IH0KCiAgbGlzdDxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShj
b25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194KTsKCnB1YmxpYzoKCgoKCgogIHZvaWQgYXNzaWdu
KHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpOwoKCgogIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lu
cHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNo
KF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J
bnRlZ2VyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIg
X192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBhc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBf
X3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNz
aWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpOwoKCgpwcm90ZWN0ZWQ6
CiAgdm9pZCB0cmFuc2ZlcihpdGVyYXRvciBfX3Bvc2l0aW9uLCBpdGVyYXRvciBfX2ZpcnN0LCBp
dGVyYXRvciBfX2xhc3QpIHsKICAgIGlmIChfX3Bvc2l0aW9uICE9IF9fbGFzdCkgewoKICAgICAg
KChfTm9kZSopIChfX2xhc3QuX01fbm9kZS0+X01fcHJldikpLT5fTV9uZXh0ID0gX19wb3NpdGlv
bi5fTV9ub2RlOwogICAgICAoKF9Ob2RlKikgKF9fZmlyc3QuX01fbm9kZS0+X01fcHJldikpLT5f
TV9uZXh0ID0gX19sYXN0Ll9NX25vZGU7CiAgICAgICgoX05vZGUqKSAoX19wb3NpdGlvbi5fTV9u
b2RlLT5fTV9wcmV2KSktPl9NX25leHQgPSBfX2ZpcnN0Ll9NX25vZGU7CgoKICAgICAgX05vZGUq
IF9fdG1wID0gKF9Ob2RlKikgKF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldik7CiAgICAgIF9f
cG9zaXRpb24uX01fbm9kZS0+X01fcHJldiA9IF9fbGFzdC5fTV9ub2RlLT5fTV9wcmV2OwogICAg
ICBfX2xhc3QuX01fbm9kZS0+X01fcHJldiA9IF9fZmlyc3QuX01fbm9kZS0+X01fcHJldjsKICAg
ICAgX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2ID0gX190bXA7CiAgICB9CiAgfQoKcHVibGljOgog
IHZvaWQgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCkgewogICAgaWYgKCFf
X3guZW1wdHkoKSkKICAgICAgdHJhbnNmZXIoX19wb3NpdGlvbiwgX194LmJlZ2luKCksIF9feC5l
bmQoKSk7CiAgfQogIHZvaWQgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmLCBpdGVy
YXRvciBfX2kpIHsKICAgIGl0ZXJhdG9yIF9faiA9IF9faTsKICAgICsrX19qOwogICAgaWYgKF9f
cG9zaXRpb24gPT0gX19pIHx8IF9fcG9zaXRpb24gPT0gX19qKSByZXR1cm47CiAgICB0cmFuc2Zl
cihfX3Bvc2l0aW9uLCBfX2ksIF9faik7CiAgfQogIHZvaWQgc3BsaWNlKGl0ZXJhdG9yIF9fcG9z
aXRpb24sIGxpc3QmLCBpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIGlm
IChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgdHJhbnNmZXIoX19wb3NpdGlvbiwgX19maXJzdCwg
X19sYXN0KTsKICB9CiAgdm9pZCByZW1vdmUoY29uc3QgX1RwJiBfX3ZhbHVlKTsKICB2b2lkIHVu
aXF1ZSgpOwogIHZvaWQgbWVyZ2UobGlzdCYgX194KTsKICB2b2lkIHJldmVyc2UoKTsKICB2b2lk
IHNvcnQoKTsKCgogIHRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPiB2b2lkIHJlbW92ZV9pZihf
UHJlZGljYXRlKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4gdm9pZCB1bmlx
dWUoX0JpbmFyeVByZWRpY2F0ZSk7CiAgdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJp
bmc+IHZvaWQgbWVyZ2UobGlzdCYsIF9TdHJpY3RXZWFrT3JkZXJpbmcpOwogIHRlbXBsYXRlIDxj
bGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPiB2b2lkIHNvcnQoX1N0cmljdFdlYWtPcmRlcmluZyk7
CgoKICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IDw+ICgKICAgIGNvbnN0IGxpc3QmIF9feCwgY29u
c3QgbGlzdCYgX195KTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gsCiAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQp7CiAgdHlwZWRlZiB0
eXBlbmFtZSBsaXN0PF9UcCxfQWxsb2M+OjpfTm9kZSBfTm9kZTsKICBfTm9kZSogX19lMSA9IF9f
eC5fTV9ub2RlOwogIF9Ob2RlKiBfX2UyID0gX195Ll9NX25vZGU7CiAgX05vZGUqIF9fbjEgPSAo
X05vZGUqKSBfX2UxLT5fTV9uZXh0OwogIF9Ob2RlKiBfX24yID0gKF9Ob2RlKikgX19lMi0+X01f
bmV4dDsKICBmb3IgKCA7IF9fbjEgIT0gX19lMSAmJiBfX24yICE9IF9fZTIgOwogICAgICAgICAg
X19uMSA9IChfTm9kZSopIF9fbjEtPl9NX25leHQsIF9fbjIgPSAoX05vZGUqKSBfX24yLT5fTV9u
ZXh0KQogICAgaWYgKF9fbjEtPl9NX2RhdGEgIT0gX19uMi0+X01fZGF0YSkKICAgICAgcmV0dXJu
IGZhbHNlOwogIHJldHVybiBfX24xID09IF9fZTEgJiYgX19uMiA9PSBfX2UyOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBs
aXN0PF9UcCxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0PF9U
cCxfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJl
Z2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJl
Z2luKCksIF9feS5lbmQoKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PgppbmxpbmUgdm9pZApzd2FwKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gsIGxpc3Q8X1RwLCBfQWxs
b2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZApsaXN0PF9UcCwg
X0FsbG9jPjo6X01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNl
X3R5cGUpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNl
cnQoX19wb3NpdGlvbiwgKl9fZmlyc3QpOwp9CgojIDU4NCAiL3Vzci9pbmNsdWRlL2crKy0zL3N0
bF9saXN0LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCmxpc3Q8
X1RwLCBfQWxsb2M+OjppbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwg
Y29uc3QgX1RwJiBfX3gpCnsKICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uKQogICAgaW5zZXJ0KF9f
cG9zaXRpb24sIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KbGlz
dDxfVHAsX0FsbG9jPjo6aXRlcmF0b3IgbGlzdDxfVHAsIF9BbGxvYz46OmVyYXNlKGl0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpdGVyYXRvciBfX2xhc3QpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICBl
cmFzZShfX2ZpcnN0KyspOwogIHJldHVybiBfX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBf
X25ld19zaXplLCBjb25zdCBfVHAmIF9feCkKewogIGl0ZXJhdG9yIF9faSA9IGJlZ2luKCk7CiAg
c2l6ZV90eXBlIF9fbGVuID0gMDsKICBmb3IgKCA7IF9faSAhPSBlbmQoKSAmJiBfX2xlbiA8IF9f
bmV3X3NpemU7ICsrX19pLCArK19fbGVuKQogICAgOwogIGlmIChfX2xlbiA9PSBfX25ld19zaXpl
KQogICAgZXJhc2UoX19pLCBlbmQoKSk7CiAgZWxzZQogICAgaW5zZXJ0KGVuZCgpLCBfX25ld19z
aXplIC0gX19sZW4sIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
bGlzdDxfVHAsIF9BbGxvYz4mIGxpc3Q8X1RwLCBfQWxsb2M+OjpvcGVyYXRvcj0oY29uc3QgbGlz
dDxfVHAsIF9BbGxvYz4mIF9feCkKewogIGlmICh0aGlzICE9ICZfX3gpIHsKICAgIGl0ZXJhdG9y
IF9fZmlyc3QxID0gYmVnaW4oKTsKICAgIGl0ZXJhdG9yIF9fbGFzdDEgPSBlbmQoKTsKICAgIGNv
bnN0X2l0ZXJhdG9yIF9fZmlyc3QyID0gX194LmJlZ2luKCk7CiAgICBjb25zdF9pdGVyYXRvciBf
X2xhc3QyID0gX194LmVuZCgpOwogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m
aXJzdDIgIT0gX19sYXN0MikKICAgICAgKl9fZmlyc3QxKysgPSAqX19maXJzdDIrKzsKICAgIGlm
IChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICBlcmFzZShfX2ZpcnN0MSwgX19sYXN0MSk7CiAg
ICBlbHNlCiAgICAgIGluc2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgfQogIHJl
dHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxp
c3Q8X1RwLCBfQWxsb2M+Ojphc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkg
ewogIGl0ZXJhdG9yIF9faSA9IGJlZ2luKCk7CiAgZm9yICggOyBfX2kgIT0gZW5kKCkgJiYgX19u
ID4gMDsgKytfX2ksIC0tX19uKQogICAgKl9faSA9IF9fdmFsOwogIGlmIChfX24gPiAwKQogICAg
aW5zZXJ0KGVuZCgpLCBfX24sIF9fdmFsKTsKICBlbHNlCiAgICBlcmFzZShfX2ksIGVuZCgpKTsK
fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyPgp2b2lkCmxpc3Q8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fZGlzcGF0Y2goX0lu
cHV0SXRlciBfX2ZpcnN0MiwgX0lucHV0SXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKewogIGl0ZXJhdG9yIF9fZmlyc3QxID0g
YmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgZm9yICggOyBfX2ZpcnN0MSAh
PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7ICsrX19maXJzdDEsICsrX19maXJzdDIp
CiAgICAqX19maXJzdDEgPSAqX19maXJzdDI7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAg
ICBlcmFzZShfX2ZpcnN0MSwgX19sYXN0MSk7CiAgZWxzZQogICAgaW5zZXJ0KF9fbGFzdDEsIF9f
Zmlyc3QyLCBfX2xhc3QyKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnJlbW92ZShjb25zdCBfVHAmIF9fdmFsdWUpCnsKICBp
dGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICB3
aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7
CiAgICArK19fbmV4dDsKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKSBlcmFzZShfX2ZpcnN0
KTsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnVuaXF1ZSgpCnsKICBpdGVyYXRvciBf
X2ZpcnN0ID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpIHJldHVybjsKICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxl
ICgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAg
ICBlcmFzZShfX25leHQpOwogICAgZWxzZQogICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgX19u
ZXh0ID0gX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
dm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6bWVyZ2UobGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKewog
IGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7
CiAgaXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QyID0g
X194LmVuZCgpOwogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDIpCiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgIGl0ZXJhdG9yIF9f
bmV4dCA9IF9fZmlyc3QyOwogICAgICB0cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19u
ZXh0KTsKICAgICAgX19maXJzdDIgPSBfX25leHQ7CiAgICB9CiAgICBlbHNlCiAgICAgICsrX19m
aXJzdDE7CiAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIpIHRyYW5zZmVyKF9fbGFzdDEsIF9fZmly
c3QyLCBfX2xhc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lk
IGxpc3Q8X1RwLCBfQWxsb2M+OjpyZXZlcnNlKCkKewoKICBpZiAoX01fbm9kZS0+X01fbmV4dCAh
PSBfTV9ub2RlICYmCiAgICAgICgoX05vZGUqKSAoX01fbm9kZS0+X01fbmV4dCkpLT5fTV9uZXh0
ICE9IF9NX25vZGUpIHsKICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogICAgKytfX2Zp
cnN0OwogICAgd2hpbGUgKF9fZmlyc3QgIT0gZW5kKCkpIHsKICAgICAgaXRlcmF0b3IgX19vbGQg
PSBfX2ZpcnN0OwogICAgICArK19fZmlyc3Q7CiAgICAgIHRyYW5zZmVyKGJlZ2luKCksIF9fb2xk
LCBfX2ZpcnN0KTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6c29ydCgpCnsKCiAgaWYgKF9NX25vZGUtPl9NX25l
eHQgIT0gX01fbm9kZSAmJgogICAgICAoKF9Ob2RlKikgKF9NX25vZGUtPl9NX25leHQpKS0+X01f
bmV4dCAhPSBfTV9ub2RlKSB7CiAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5OwogICAgbGlz
dDxfVHAsIF9BbGxvYz4gX19jb3VudGVyWzY0XTsKICAgIGludCBfX2ZpbGwgPSAwOwogICAgd2hp
bGUgKCFlbXB0eSgpKSB7CiAgICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRo
aXMsIGJlZ2luKCkpOwogICAgICBpbnQgX19pID0gMDsKICAgICAgd2hpbGUoX19pIDwgX19maWxs
ICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAgICAgX19jb3VudGVyW19faV0ubWVy
Z2UoX19jYXJyeSk7CiAgICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2krK10pOwogICAg
ICB9CiAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7CiAgICAgIGlmIChfX2kgPT0g
X19maWxsKSArK19fZmlsbDsKICAgIH0KCiAgICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2Zp
bGw7ICsrX19pKQogICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NvdW50ZXJbX19pLTFdKTsK
ICAgIHN3YXAoX19jb3VudGVyW19fZmlsbC0xXSk7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CnZvaWQgbGlzdDxf
VHAsIF9BbGxvYz46OnJlbW92ZV9pZihfUHJlZGljYXRlIF9fcHJlZCkKewogIGl0ZXJhdG9yIF9f
Zmlyc3QgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogIHdoaWxlIChfX2Zp
cnN0ICE9IF9fbGFzdCkgewogICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICsrX19u
ZXh0OwogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIGVyYXNlKF9fZmlyc3QpOwogICAgX19maXJz
dCA9IF9fbmV4dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVt
cGxhdGUgPGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnVu
aXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKICBpdGVyYXRvciBfX2ZpcnN0
ID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpIHJldHVybjsKICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19f
bmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0
KSkKICAgICAgZXJhc2UoX19uZXh0KTsKICAgIGVsc2UKICAgICAgX19maXJzdCA9IF9fbmV4dDsK
ICAgIF9fbmV4dCA9IF9fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgp2b2lkIGxpc3Q8X1Rw
LCBfQWxsb2M+OjptZXJnZShsaXN0PF9UcCwgX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKewogIGl0ZXJhdG9yIF9f
Zmlyc3QxID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgaXRlcmF0b3Ig
X19maXJzdDIgPSBfX3guYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwog
IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBp
ZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICBpdGVyYXRvciBfX25leHQg
PSBfX2ZpcnN0MjsKICAgICAgdHJhbnNmZXIoX19maXJzdDEsIF9fZmlyc3QyLCArK19fbmV4dCk7
CiAgICAgIF9fZmlyc3QyID0gX19uZXh0OwogICAgfQogICAgZWxzZQogICAgICArK19fZmlyc3Qx
OwogIGlmIChfX2ZpcnN0MiAhPSBfX2xhc3QyKSB0cmFuc2ZlcihfX2xhc3QxLCBfX2ZpcnN0Miwg
X19sYXN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUg
PGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnNvcnQo
X1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKCiAgaWYgKF9NX25vZGUtPl9NX25leHQgIT0g
X01fbm9kZSAmJgogICAgICAoKF9Ob2RlKikgKF9NX25vZGUtPl9NX25leHQpKS0+X01fbmV4dCAh
PSBfTV9ub2RlKSB7CiAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5OwogICAgbGlzdDxfVHAs
IF9BbGxvYz4gX19jb3VudGVyWzY0XTsKICAgIGludCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFl
bXB0eSgpKSB7CiAgICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJl
Z2luKCkpOwogICAgICBpbnQgX19pID0gMDsKICAgICAgd2hpbGUoX19pIDwgX19maWxsICYmICFf
X2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAgICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19j
YXJyeSwgX19jb21wKTsKICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faSsrXSk7CiAg
ICAgIH0KICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsKICAgICAgaWYgKF9faSA9
PSBfX2ZpbGwpICsrX19maWxsOwogICAgfQoKICAgIGZvciAoaW50IF9faSA9IDE7IF9faSA8IF9f
ZmlsbDsgKytfX2kpCiAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltfX2ktMV0s
IF9fY29tcCk7CiAgICBzd2FwKF9fY291bnRlcltfX2ZpbGwtMV0pOwogIH0KfQoKCgoKCgoKCiMg
MzUgIi91c3IvaW5jbHVkZS9nKystMy9saXN0IiAyIDMKIyAxNSAicHJvZHVjdGlvbi5oIiAyCgpj
bGFzcyBQcm9kdWN0aW9uIDogcHVibGljIGxpc3Q8R3JhbW1hclN5bWJvbD4KewoKcHVibGljOgoK
CgoKUHJvZHVjdGlvbigpCnsgfQojIDM0ICJwcm9kdWN0aW9uLmgiClByb2R1Y3Rpb24oR3JhbW1h
clN5bWJvbCAmIGdyYW0pOwojIDQzICJwcm9kdWN0aW9uLmgiCnZvaWQgQWRkKEdyYW1tYXJTeW1i
b2wgJiBncmFtKTsKCgoKCgoKdm9pZCBQcmludChvc3RyZWFtICYgb3V0KSBjb25zdCA7CgoKcHJp
dmF0ZToKCkdyYW1tYXJTeW1ib2wgbV9MZWZ0OwoKCn07CgppbmxpbmUgb3N0cmVhbSAmIG9wZXJh
dG9yPDwob3N0cmVhbSAmIG91dCwgY29uc3QgUHJvZHVjdGlvbiAmIHByb2R1Y3Rpb24pCnsKICAg
ICAgICBwcm9kdWN0aW9uLlByaW50KG91dCk7CiAgICAgICAgcmV0dXJuIG91dDsKfQoKIyAxNSAi
cHJvZF9saXN0LmgiIDIKCgpjbGFzcyBQcm9kdWN0aW9uTGlzdCA6IHB1YmxpYyBsaXN0PFByb2R1
Y3Rpb24+CnsKCnB1YmxpYzoKCgoKClByb2R1Y3Rpb25MaXN0KCkKeyB9CgoKCgpQcm9kdWN0aW9u
TGlzdChQcm9kdWN0aW9uICYgcHJvZCk7CgoKCgoKCgp2b2lkIEFkZChQcm9kdWN0aW9uICYgcHJv
ZCk7CgoKCgoKCgp2b2lkIFByaW50KG9zdHJlYW0gJiBvdXQpIGNvbnN0IDsKCgoKCgoKCnZvaWQg
U2V0Rmlyc3QoUHJvZHVjdGlvbiAqIHBQcm9kKTsKCgoKCgoKCnZvaWQgU2V0Rm9sbG93KFByb2R1
Y3Rpb24gKiBwUHJvZCk7Cgpwcml2YXRlOgoKUHJvZHVjdGlvbiAqIG1fcEZvbGxvdzsKUHJvZHVj
dGlvbiAqIG1fcEZpcnN0OwoKfTsKCmlubGluZSBvc3RyZWFtICYgb3BlcmF0b3I8PChvc3RyZWFt
ICYgb3V0LCBjb25zdCBQcm9kdWN0aW9uTGlzdCAmIHByb2RsaXN0KQp7CiAgICAgICAgcHJvZGxp
c3QuUHJpbnQob3V0KTsKICAgICAgICByZXR1cm4gb3V0Owp9CgojIDEyICJwcm9kX2xpc3QuY3Bw
IiAyCgoKUHJvZHVjdGlvbkxpc3Q6OlByb2R1Y3Rpb25MaXN0KFByb2R1Y3Rpb24gJiBwcm9kKQp7
CiAgICAgICAgKCp0aGlzKS5wdXNoX2JhY2socHJvZCk7Cn0KCnZvaWQgUHJvZHVjdGlvbkxpc3Q6
OkFkZChQcm9kdWN0aW9uICYgcHJvZCkKewoKICAgICAgICAoKnRoaXMpLnB1c2hfYmFjayhwcm9k
KTsKfQoKdm9pZCBQcm9kdWN0aW9uTGlzdDo6U2V0Rmlyc3QoUHJvZHVjdGlvbiAqIHBQcm9kKQp7
CiAgICAgICAgbV9wRm9sbG93ID0gcFByb2Q7Cn0KCnZvaWQgUHJvZHVjdGlvbkxpc3Q6OlNldEZv
bGxvdyhQcm9kdWN0aW9uICogcFByb2QpCnsKICAgICAgICBtX3BGaXJzdCA9IHBQcm9kOwp9Cgp2
b2lkIFByb2R1Y3Rpb25MaXN0OjpHZXRQcm9kdWN0aW9uKCk7CnsKICAgICAgICBsaXN0PFByb2R1
Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciBpdDsKCiAgICAgICAgZm9yKGl0ID0gKCp0aGlzKS5iZWdp
bigpOyBpdCAhPSAoKnRoaXMpLmVuZCgpOyBpdCsrKQogICAgICAgIHsKICAgICAgICAgICAgICAg
IG91dCA8PCAoKml0KSA8PCBlbmRsOwp9Cgp2b2lkIFByb2R1Y3Rpb25MaXN0OjpQcmludChvc3Ry
ZWFtICYgb3V0KSBjb25zdAp7CiAgICAgICAgbGlzdDxQcm9kdWN0aW9uPjo6Y29uc3RfaXRlcmF0
b3IgaXQ7CgogICAgICAgIG91dCA8PCAiUHJvZHVjdGlvbiBMaXN0OiAgIiA8PCBlbmRsIDw8IGVu
ZGw7CiAgICAgICAgZm9yKGl0ID0gKCp0aGlzKS5iZWdpbigpOyBpdCAhPSAoKnRoaXMpLmVuZCgp
OyBpdCsrKQogICAgICAgIHsKICAgICAgICAgICAgICAgIG91dCA8PCAoKml0KSA8PCBlbmRsOwog
ICAgICAgIH0KCiAgICAgICAgb3V0IDw8ICJGaXJzdDogIiA8PCBlbmRsIDw8IGVuZGw7CiAgICAg
ICAgaWYobV9wRmlyc3QgIT0gX19udWxsKQogICAgICAgICAgICAgICAgb3V0IDw8ICgqbV9wRmly
c3QpIDw8IGVuZGw7CgogICAgICAgIG91dCA8PCAiRm9sbG93OiAiIDw8IGVuZGwgPDwgZW5kbDsK
ICAgICAgICBpZihtX3BGb2xsb3cgIT0gX19udWxsKQogICAgICAgICAgICAgICAgb3V0IDw8ICgq
bV9wRm9sbG93KSA8PCBlbmRsOwoKfQo=


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