public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/4305: optimizer ICE on seemingly unrelated code changes
@ 2001-09-11 23:16 jikes
  0 siblings, 0 replies; only message in thread
From: jikes @ 2001-09-11 23:16 UTC (permalink / raw)
  To: gcc-gnats; +Cc: jikes-dev

>Number:         4305
>Category:       c++
>Synopsis:       optimizer ICE on seemingly unrelated code changes
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Tue Sep 11 23:16:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Jikes project
>Release:        gcc version 2.95.3 20010315 (SuSE)
>Organization:
>Environment:
Stock SuSE 7.2 x86 install running on SMP Pentium II system, kernel updated to 2.4.9 preview kernel from SuSE. We have intermittent reports of the same failure from Cygwin users as well:
Fails: Win98, cygwin 1.3.2-1, gcc 2.95.3-5
Does not fail: WinNT, cygwin 1.3.1-1, gcc 2.95.3-4
>Description:
Seemingly unrelated changes commited to our cvs tree cause an internal compiler error as such:

g++ -v -save-temps -DHAVE_CONFIG_H -I. -I../../jikes/src -I.
 -g -O2 -c -o expr.o ../../jikes/src/expr.cpp
Reading specs from /usr/lib/gcc-lib/i486-suse-linux/2.95.3/specs
gcc version 2.95.3 20010315 (SuSE)
 /usr/lib/gcc-lib/i486-suse-linux/2.95.3/cpp0 -lang-c++ -v -I. -I../../jikes/src -I. -D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=95 -D__cplusplus -D__ELF__ -Dunix -D__i386__ -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__linux -Asystem(posix) -D__EXCEPTIONS -D__OPTIMIZE__ -g -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -Di486 -D__i486 -D__i486__ -DHAVE_CONFIG_H ../../jikes/src/expr.cpp expr.ii
GNU CPP version 2.95.3 20010315 (SuSE) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
 .
 ../../jikes/src
 .
 /usr/include/g++
 /usr/local/include
 /usr/lib/gcc-lib/i486-suse-linux/2.95.3/include
 /usr/include
End of search list.
The following default directories have been omitted from the search path:
 /usr/lib/gcc-lib/i486-suse-linux/2.95.3/../../../../i486-suse-linux/include
End of omitted list.
 /usr/lib/gcc-lib/i486-suse-linux/2.95.3/cc1plus expr.ii -quiet -dumpbase expr.cc -g -O2 -version -o expr.s
GNU C++ version 2.95.3 20010315 (SuSE) (i486-suse-linux) compiled by GNU C version 2.95.3 20010315 (SuSE).
In file included from ../../jikes/src/expr.cpp:14:
../../jikes/src/tuple.h: In method `void Tuple<Tuple<AstExpression *> >::AllocateMoreSpace()':
../../jikes/src/tuple.h:194:   instantiated from `Tuple<Tuple<AstExpression *> >::NextIndex()'
../../jikes/src/tuple.h:208:   instantiated from `Tuple<Tuple<AstExpression *> >::Next()'
../../jikes/src/semantic.h:186:   instantiated from here
../../jikes/src/tuple.h:94: Internal compiler error.
../../jikes/src/tuple.h:94: Please submit a full bug report.
../../jikes/src/tuple.h:94: See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.

Reducing the optimization to -O1 prevents the problem, similarly some additional commits which don't appear to be related to the point of failure also correct/bypass the failure.

cvs timestamps of relevance:
good : "sep 8 05:00:00 utc"
bad  : "sep 8 06:00:00 utc"
good : "sep 8 21:00:00 utc"
We've not found anything in the changes that seem to interact with the code that is failing.
>How-To-Repeat:
1. recreation from attached .ii:
cc1plus expr.ii -quiet -dumpbase expr.cc -g -O2 -version -o expr.s

2. recreation from sources:
full sources from cvs can be used to recreate this, but given the attached .ii file I doubt anyone will want to do that. If so either pull from cvs or ask for a tarball and we'll produce one.

cvs root :pserver:anoncvs@www-214.ibm.com:/usr/cvs/jikes
password: anoncvs
module: jikes
directions: checkout module, ./configure && make
>Fix:
use -O1 instead of -O2, or apply seemingly unrelated changes that either undo a set of previous changes or apply a new set. The second of these leaves open a possibility for this to reappear at any unexpected moment.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="expr.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="expr.ii"

IyAxICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiCiAKIAogCiAKIAogCiAKIAogCgojIDEgIi4u
Ly4uL2ppa2VzL3NyYy9wbGF0Zm9ybS5oIiAxCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCgoKIyAxICJjb25m
aWcuaCIgMQogCiAKCiAKCgoKCgoKIAoKCiAKCgogCgoKIAogCgogCgoKIAoKCiAKIAoKIAogCgog
CgoKIAoKCiAKCgoKCiAKCiAKCiAKCgogCgoKIAoKCiAKCgogCiAKCiAKCgogCiAKCiAKCgogCiAK
CiAKCgogCiAKCiAKIAoKIAogCgogCiAKCiAKCgogCgoKIAogCgogCgoKIAoKCiAKCgogCgoKIAoK
CiAKCgogCiAKCiAKCgogCiAKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCiAKCiAKCgog
CgoKIAoKCiAKCgogCgoKIAogCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAogCgogCiAK
CiAKCgogCiAKCiAKCgoKIAoKIAoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCiAK
CiAKCiAKIyA0MiAiLi4vLi4vamlrZXMvc3JjL3BsYXRmb3JtLmgiIDIKCgogCgoKCgoKCgoKIAoK
IyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKIAoKCgoKCgoKIAoj
IDE0MiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKCgogCgoKCgoKCgoKCiAKCgoKCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjA4ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgogCgoKIAoKCgoKCgoK
CiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCiAKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMu
aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCgoKCiAKCgoKCgogCgoKCgoK
CgoKIAoKCgojIDY1ICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDMKCgogCgoKCgoKIAoKCgoK
IAoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoK
CiAKCgoKCgoKCiAKCgoKCiAKCgoKCgoKIyAyODMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAy
IDMKCgoKIAoKCgoKCgoKCiAKCgoKCiAKCiAKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nbnUv
c3R1YnMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzExICIvdXNy
L2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCgoKCgojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p
NDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAx
OSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVm
LmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2Ut
bGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4
LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIu
OTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1z
dXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3Iv
bGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi
IDIgMwoKCiAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1
bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBp
bnQgX19xdWFkX3Q7CiMgNDggIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKCnR5cGVkZWYg
c2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5
cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
aW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5z
aWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcg
bG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBs
b25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRl
ZiBfX3VfcXVhZF90IF9fZGV2X3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX3VpZF90OwkJIAp0eXBl
ZGVmIF9fdV9pbnQgX19naWRfdDsJCSAKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190OwkJIAp0eXBl
ZGVmIF9fdV9pbnQgX19tb2RlX3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7IAkJIAp0
eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CQkgCnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CQkg
CnR5cGVkZWYgaW50IF9fcGlkX3Q7CQkJIAp0eXBlZGVmIGludCBfX3NzaXplX3Q7CQkJIAp0eXBl
ZGVmIF9fdV9sb25nIF9fcmxpbV90OwkJIAp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsJ
CSAKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsJCQkgCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGlu
dCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwkJCQkgCgogCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsJ
CQkgCnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0
eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNl
Y29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7CQkgCgwKdHlwZWRlZiBsb25nIGlu
dCBfX2Nsb2NrX3Q7CgogCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKIAp0eXBlZGVmIGludCBf
X3RpbWVyX3Q7CgoKIAoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKIAp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IGludCBfX2lwY19waWRfdDsKCgogCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7
CgogCgogCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Js
a2NudDY0X3Q7CgogCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9x
dWFkX3QgX19mc2Jsa2NudDY0X3Q7CgogCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0
eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgogCnR5cGVkZWYgX191X3F1YWRfdCBf
X2lubzY0X3Q7CgogCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKIAp0eXBlZGVmIGxvbmcg
aW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90
OwoKIAp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKIAp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Nv
Y2tsZW5fdDsKCgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L3NjaGVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDYyICIvdXNyL2luY2x1ZGUvYml0
cy9zY2hlZC5oIiAzCgoKCgoKIApzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3Nj
aGVkX3ByaW9yaXR5OwogIH07CgoKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz
LmgiIDIgMwoKCiAKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1
czsgICAgCiAgaW50IF9fc3BpbmxvY2s7ICAgICAgIAoKfTsKCgogCnR5cGVkZWYgc3RydWN0IF9w
dGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgogCnR5cGVkZWYgc3RydWN0
IF9fcHRocmVhZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9s
aWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0
c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNr
YWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0
aHJlYWRfYXR0cl90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0
bG9jayBfX2NfbG9jazsgIAogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOyAgICAgICAgIAp9
IHB0aHJlYWRfY29uZF90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0
aHJlYWRfY29uZGF0dHJfdDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsK
CgogCiAKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOyAgICAgICAgICAgICAg
ICAKICBpbnQgX19tX2NvdW50OyAgICAgICAgICAgICAgICAgICAKICBfcHRocmVhZF9kZXNjciBf
X21fb3duZXI7ICAgICAgICAKICBpbnQgX19tX2tpbmQ7ICAgICAgICAgICAgICAgICAgICAKICBz
dHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7ICAKfSBwdGhyZWFkX211dGV4X3Q7CgoK
IAp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRy
X3Q7CgoKIAp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgojIDExNyAiL3Vzci9pbmNsdWRl
L2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKCgojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVh
ZHR5cGVzLmgiIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKCgoj
IDE0MyAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKCgojIDMwICIvdXNyL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBf
X3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25n
IHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1
YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7
CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKCgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2
X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVf
dDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlk
X3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoKCgoKCgoKCnR5cGVkZWYgX19waWRf
dCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBz
c2l6ZV90OwoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3Qg
Y2FkZHJfdDsKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwoKCgoKCgoKCgojIDEgIi91c3IvaW5j
bHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiMgNTEg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgojIDYxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoK
CgoKCgoKIAp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKCgoKCgoKCgoKCiAKdHlwZWRlZiBfX2Ns
b2NraWRfdCBjbG9ja2lkX3Q7CgoKCgoKCgoKCgogCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7
CgoKCgoKIyAxMTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKCiMgMzY0ICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAzCgoKCiMgMTI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMg
MTM3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGli
L2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgoj
IDE5ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3Vz
ZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGlu
dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2dj
Yy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoK
CgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNs
dWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4
LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1s
aWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiMgMTQwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgog
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
aW50IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKCgogCgojIDE3NCAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzCgoKIAoKCgoKCgoKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoICBfX1FJX18gKSkpIDsKdHlwZWRlZiBpbnQgaW50MTZfdCBf
X2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19ISV9fICkpKSA7CnR5cGVkZWYgaW50IGludDMy
X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fU0lfXyApKSkgOwp0eXBlZGVmIGludCBp
bnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX0RJX18gKSkpIDsKCgp0eXBlZGVm
IHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19RSV9f
ICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKCAgX19ISV9fICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19TSV9fICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50
IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19ESV9fICkpKSA7Cgp0eXBl
ZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7
CgoKIAoKCgoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4u
aCIgMSAzCiAKCgoKCgoKIyAzNyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKCgogCgoKCgoK
CgoKCgoKCgoKCgoKCgojIDIwNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgogCiMg
MSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgogCgoKIAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDMKCgoK
CgoKCgoKCgoKIyA1NiAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDMKCiMgNzIgIi91c3Iv
aW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAzCgojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o
IiAyIDMKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKIAoKCnR5cGVkZWYgc3Ry
dWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAo
dW5zaWduZWQgbG9uZyBpbnQpKSkgXTsKICB9IF9fc2lnc2V0X3Q7CgoKCgogCgoKCgoKIyAxMjUg
Ii91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCgojIDM0ICIvdXNyL2luY2x1ZGUvc3lzL3Nl
bGVjdC5oIiAyIDMKCgoKCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgogCgojIDEgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CiMgNTEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgojIDYxICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAzCgoKCiMgNzIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA4NCAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMwoKCgojIDk2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgoKCgoKIAoKc3Ry
dWN0IHRpbWVzcGVjCiAgewogICAgbG9uZyBpbnQgdHZfc2VjOwkJIAogICAgbG9uZyBpbnQgdHZf
bnNlYzsJCSAKICB9OwoKCgoKCiMgMzY0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgNDMg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
dGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiMgNTcgIi91c3IvaW5jbHVkZS9i
aXRzL3RpbWUuaCIgMwoKCgoKCgoKCiAKCnN0cnVjdCB0aW1ldmFsCiAgewogICAgX190aW1lX3Qg
dHZfc2VjOwkJIAogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwkgCiAgfTsKCgojIDQ1ICIvdXNy
L2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoKIAp0eXBlZGVmIGxvbmcgaW50IF9fZmRfbWFz
azsKCiAKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICAgCgoKCgoKICAgIF9fZmRfbWFzayBf
X2Zkc19iaXRzWzEwMjQgIC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpIF07CgoKICB9IGZkX3Nl
dDsKCiAKCgoKIAp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoKIAoKCgoKIAoKCgoKCgpleHRl
cm4gIkMiIHsgCgogCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpf
X3Jlc3RyaWN0IF9fcmVhZGZkcywKCQkgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywK
CQkgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCgkJICAgc3RydWN0IHRpbWV2YWwg
Kl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKSA7CgojIDExMCAiL3Vzci9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMwoKCn0gCgoKIyAyMDkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAz
CgoKIAojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCgojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAz
CgoKCiMgMjEyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKCgoKCgogCgoKdHlw
ZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwkgIAoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Js
a2NudF90OyAgCgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7ICAKCgojIDI0OCAi
L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgoKCgoKCgoKfSAKCgojIDU1ICIuLi8uLi9qaWtl
cy9zcmMvcGxhdGZvcm0uaCIgMgoKIAojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiMgNzggIi91c3IvaW5jbHVkZS9zeXMvc3Rh
dC5oIiAzCgoKIyA5NCAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKCgpleHRlcm4gIkMiIHsg
CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0YXQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCgogCgoKCgoKc3RydWN0IHN0YXQKICB7CiAgICBfX2Rldl90IHN0X2RldjsJCQkg
CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19wYWQxOwoKICAgIF9faW5vX3Qgc3RfaW5vOwkJCSAK
CgoKICAgIF9fbW9kZV90IHN0X21vZGU7CQkJIAogICAgX19ubGlua190IHN0X25saW5rOwkJCSAK
ICAgIF9fdWlkX3Qgc3RfdWlkOwkJCSAKICAgIF9fZ2lkX3Qgc3RfZ2lkOwkJCSAKICAgIF9fZGV2
X3Qgc3RfcmRldjsJCQkgCiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19wYWQyOwoKICAgIF9fb2Zm
X3Qgc3Rfc2l6ZTsJCQkgCgoKCiAgICBfX2Jsa3NpemVfdCBzdF9ibGtzaXplOwkJIAoKCiAgICBf
X2Jsa2NudF90IHN0X2Jsb2NrczsJCSAKCgoKICAgIF9fdGltZV90IHN0X2F0aW1lOwkJCSAKICAg
IHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMTsKICAgIF9fdGltZV90IHN0X210aW1lOwkJCSAK
ICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMjsKICAgIF9fdGltZV90IHN0X2N0aW1lOwkJ
CSAKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMzsKCiAgICB1bnNpZ25lZCBsb25nIGlu
dCBfX3VudXNlZDQ7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDU7CgoKCiAgfTsKCiMg
MTAyICIvdXNyL2luY2x1ZGUvYml0cy9zdGF0LmgiIDMKCgogCgoKCiAKCgoKIAoKCgoKCgoKCiAK
CgoKCiAKCgoKCgoKCiMgOTggIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAyIDMKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCiAK
CgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgogCgoKCgogCgoKCgoKCgoKCiAKZXh0ZXJuIGludCBz
dGF0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlLAoJCSBzdHJ1Y3Qgc3RhdCAqX19y
ZXN0cmljdCBfX2J1ZikgdGhyb3cgKCkgOwoKIAoKZXh0ZXJuIGludCBmc3RhdCAoaW50IF9fZmQs
IHN0cnVjdCBzdGF0ICpfX2J1ZikgdGhyb3cgKCkgOwojIDIxNyAiL3Vzci9pbmNsdWRlL3N5cy9z
dGF0LmgiIDMKCgoKCgoKCgoKIAoKZXh0ZXJuIGludCBsc3RhdCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZmlsZSwKCQkgIHN0cnVjdCBzdGF0ICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAo
KSA7CiMgMjM5ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwoKCgoKCgoKIAoKCmV4dGVybiBp
bnQgY2htb2QgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX21vZGVfdCBfX21vZGUpIHRocm93ICgp
IDsKCiAKCmV4dGVybiBpbnQgZmNobW9kIChpbnQgX19mZCwgX19tb2RlX3QgX19tb2RlKSB0aHJv
dyAoKSA7CgoKCiAKCmV4dGVybiBfX21vZGVfdCB1bWFzayAoX19tb2RlX3QgX19tYXNrKSB0aHJv
dyAoKSA7CgoKCgoKCgogCmV4dGVybiBpbnQgbWtkaXIgKF9fY29uc3QgY2hhciAqX19wYXRoLCBf
X21vZGVfdCBfX21vZGUpIHRocm93ICgpIDsKCiAKCgoKZXh0ZXJuIGludCBta25vZCAoX19jb25z
dCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSwgX19kZXZfdCBfX2RldikKICAgICB0aHJv
dyAoKSA7CgoKCiAKZXh0ZXJuIGludCBta2ZpZm8gKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21v
ZGVfdCBfX21vZGUpIHRocm93ICgpIDsKDAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCmV4dGVy
biBpbnQgX19meHN0YXQgKGludCBfX3ZlciwgaW50IF9fZmlsZGVzLCBzdHJ1Y3Qgc3RhdCAqX19z
dGF0X2J1ZikgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9feHN0YXQgKGludCBfX3ZlciwgX19jb25z
dCBjaGFyICpfX2ZpbGVuYW1lLAoJCSAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0X2J1ZikgdGhyb3cg
KCkgOwpleHRlcm4gaW50IF9fbHhzdGF0IChpbnQgX192ZXIsIF9fY29uc3QgY2hhciAqX19maWxl
bmFtZSwKCQkgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSB0aHJvdyAoKSA7CiMgMzI3ICIv
dXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwoKCgoKCgoKCgoKZXh0ZXJuIGludCBfX3hta25vZCAo
aW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlLAoJCSAgICAg
X19kZXZfdCAqX19kZXYpIHRocm93ICgpIDsKCgogCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgc3Rh
dCAoX19jb25zdCBjaGFyICpfX3BhdGgsCgkJCSAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0YnVmKSB0
aHJvdyAoKSAKewogIHJldHVybiBfX3hzdGF0ICgzICAsIF9fcGF0aCwgX19zdGF0YnVmKTsKfQoK
CmV4dGVybiBfX2lubGluZV9fIGludCBsc3RhdCAoX19jb25zdCBjaGFyICpfX3BhdGgsCgkJCSAg
ICAgc3RydWN0IHN0YXQgKl9fc3RhdGJ1ZikgdGhyb3cgKCkgCnsKICByZXR1cm4gX19seHN0YXQg
KDMgICwgX19wYXRoLCBfX3N0YXRidWYpOwp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IGZzdGF0
IChpbnQgX19mZCwgc3RydWN0IHN0YXQgKl9fc3RhdGJ1ZikgdGhyb3cgKCkgCnsKICByZXR1cm4g
X19meHN0YXQgKDMgICwgX19mZCwgX19zdGF0YnVmKTsKfQoKCmV4dGVybiBfX2lubGluZV9fIGlu
dCBta25vZCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSwKCQkJICAgICBf
X2Rldl90IF9fZGV2KSB0aHJvdyAoKSAKewogIHJldHVybiBfX3hta25vZCAoMSAgLCBfX3BhdGgs
IF9fbW9kZSwgJl9fZGV2KTsKfQoKCiMgMzkxICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwoK
CgoKfSAKCgoKIyA1NyAiLi4vLi4vamlrZXMvc3JjL3BsYXRmb3JtLmgiIDIKCgojIDEgIi91c3Iv
aW5jbHVkZS9zdGRsaWIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoK
IyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRk
ZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51
eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNy
L2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIv
Z2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgog
CgoKIyAxODggIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRl
L3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI4MyAiL3Vzci9s
aWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgog
CgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1
ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzMyAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAyIDMKCgpleHRlcm4gIkMiIHsgCgoKCgojIDkxICIvdXNyL2luY2x1ZGUv
c3RkbGliLmgiIDMKCgogCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CQkJIAogICAg
aW50IHJlbTsJCQkgCiAgfSBkaXZfdDsKCiAKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBp
bnQgcXVvdDsJCSAKICAgIGxvbmcgaW50IHJlbTsJCSAKICB9IGxkaXZfdDsKCgoKIyAxMTggIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgogCgoKCiAKCgoKCgogCgpleHRlcm4gc2l6ZV90IF9f
Y3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIHRocm93ICgpIDsKCgogCmV4dGVybiBkb3VibGUg
YXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpICAgOwogCmV4dGVybiBpbnQgYXRv
aSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpICAgOwogCmV4dGVybiBsb25nIGludCBh
dG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgICA7CgoKIApfX2V4dGVuc2lvbl9f
IGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0
aHJvdyAoKSAgIDsKCgogCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAoJCSAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAo
KSA7CgoKCgoKCgoKCgogCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCgkJCWNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl
KSB0aHJvdyAoKSA7CiAKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpIDsKCgogCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKSA7CiAK
X19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpIDsKCgoKIAoKIApfX2V4dGVuc2lv
bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCgkJCSAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl
KSB0aHJvdyAoKSA7CiAKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu
dCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQljaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKSA7CgoKCiMgMjQ0
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKIAoKCmV4dGVybiBkb3VibGUgX19zdHJ0b2Rf
aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpIDsKZXh0ZXJuIGZs
b2F0IF9fc3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJ
CQkJY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgp
IDsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
CQkJCSAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCkgOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3Ry
dG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkg
dGhyb3cgKCkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFs
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJCSAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCgkJCQkJICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cg
KCkgOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50
ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLAoJCQkJCSBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCkg
OwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91
bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCgkJCQkJCSAgIF9fcmVzdHJpY3QgX19ucHRyLAoJ
CQkJCQkgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkJICAgaW50IF9fYmFzZSwg
aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCkgOwoKCgoKCgogCgpleHRlcm4gX19pbmxpbmUgZG91
YmxlCnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIpIHRocm93ICgpIAp7CiAgcmV0dXJuIF9fc3RydG9kX2ludGVybmFsIChf
X25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKc3RydG9sIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKCWludCBfX2Jhc2UpIHRocm93ICgpIAp7CiAgcmV0dXJuIF9fc3RydG9sX2ludGVybmFsIChf
X25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBs
b25nIGludApzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwKCSBpbnQgX19iYXNlKSB0aHJvdyAoKSAKewogIHJldHVybiBf
X3N0cnRvdWxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCiMgMzIz
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxp
bmUgbG9uZyBsb25nIGludApzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJaW50IF9fYmFzZSkgdGhyb3cgKCkgCnsKICBy
ZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9
Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3Ry
dG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsCgkgaW50IF9fYmFzZSkgdGhyb3cgKCkgCnsKICByZXR1cm4gX19zdHJ0b3VsbF9p
bnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9f
IGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJIGludCBfX2Jhc2Up
IHRocm93ICgpIAp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0
ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBs
b25nIGxvbmcgaW50CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkgIGludCBfX2Jhc2UpIHRocm93ICgpIAp7CiAg
cmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7
Cn0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCmF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0
aHJvdyAoKSAKewogIHJldHVybiBzdHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCApOwp9
CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgp
IAp7CiAgcmV0dXJuIChpbnQpIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgX19udWxsICwgMTAp
Owp9CmV4dGVybiBfX2lubGluZSBsb25nIGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg
dGhyb3cgKCkgCnsKICByZXR1cm4gc3RydG9sIChfX25wdHIsIChjaGFyICoqKSBfX251bGwgLCAx
MCk7Cn0KCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CmF0b2xs
IChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgCnsKICByZXR1cm4gc3RydG9sbCAoX19u
cHRyLCAoY2hhciAqKikgX19udWxsICwgMTApOwp9CgoKCgoKIAoKCmV4dGVybiBjaGFyICpsNjRh
IChsb25nIGludCBfX24pIHRocm93ICgpIDsKCiAKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29u
c3QgY2hhciAqX19zKSB0aHJvdyAoKSAgIDsKCgoKCiAKCgoKIApleHRlcm4gbG9uZyBpbnQgcmFu
ZG9tICh2b2lkKSB0aHJvdyAoKSA7CgogCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGlu
dCBfX3NlZWQpIHRocm93ICgpIDsKCiAKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWdu
ZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKCQkJc2l6ZV90IF9fc3RhdGVsZW4pIHRo
cm93ICgpIDsKCiAKCmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhy
b3cgKCkgOwoKCgogCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7
CQkgCiAgICBpbnQzMl90ICpycHRyOwkJIAogICAgaW50MzJfdCAqc3RhdGU7CQkgCiAgICBpbnQg
cmFuZF90eXBlOwkJIAogICAgaW50IHJhbmRfZGVnOwkJIAogICAgaW50IHJhbmRfc2VwOwkJIAog
ICAgaW50MzJfdCAqZW5kX3B0cjsJCSAKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0
IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAoJCSAgICAgaW50MzJfdCAqX19yZXN0cmlj
dCBfX3Jlc3VsdCkgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGlu
dCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpIDsKCmV4dGVybiBp
bnQgaW5pdHN0YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3QgX19z
dGF0ZWJ1ZiwKCQkJc2l6ZV90IF9fc3RhdGVsZW4sCgkJCXN0cnVjdCByYW5kb21fZGF0YSAqX19y
ZXN0cmljdCBfX2J1ZikgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpf
X3Jlc3RyaWN0IF9fc3RhdGVidWYsCgkJICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0
cmljdCBfX2J1ZikgdGhyb3cgKCkgOwoKCgoKIApleHRlcm4gaW50IHJhbmQgKHZvaWQpIHRocm93
ICgpIDsKIApleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCkg
OwoKCiAKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAoKSA7
CgoKCgogCgogCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCkgOwpleHRlcm4g
ZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKSA7
CgogCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKSA7CmV4dGVybiBsb25n
IGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCkgOwoK
IApleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCkgOwpleHRlcm4gbG9uZyBp
bnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpIDsKCiAK
ZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKSA7CmV4dGVy
biB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2
dlszXSkgdGhyb3cgKCkgOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg
X19wYXJhbVs3XSkgdGhyb3cgKCkgOwoKCiAKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAg
dW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsJIAogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xk
X3hbM107ICAKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2M7CSAKICAgIHVuc2lnbmVkIHNob3J0
IGludCBfX2luaXQ7CSAKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19hOwkgCiAgfTsKCiAK
ZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i
dWZmZXIsCgkJICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKSA7CmV4
dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKCQkgICAg
ICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCSAgICAgIGRvdWJs
ZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IGxyYW5kNDhf
ciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKCQkgICAgICBsb25n
IGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCkgOwpleHRlcm4gaW50IG5yYW5kNDhf
ciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCgkJICAgICAgc3RydWN0IGRyYW5kNDhf
ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKCQkgICAgICBsb25nIGludCAqX19yZXN0cmljdCBf
X3Jlc3VsdCkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5k
NDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKCQkgICAgICBsb25nIGludCAqX19yZXN0cmlj
dCBfX3Jlc3VsdCkgdGhyb3cgKCkgOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hv
cnQgaW50IF9feHN1YmlbM10sCgkJICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmlj
dCBfX2J1ZmZlciwKCQkgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cg
KCkgOwoKIApleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3Qg
ZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHNlZWQ0
OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAoJCSAgICAgc3RydWN0IGRyYW5k
NDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpIDsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNp
Z25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKCQkgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X2J1ZmZlcikgdGhyb3cgKCkgOwoKCgoKCgoKIApleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3Qg
X19zaXplKSB0aHJvdyAoKSAgIDsKIApleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVt
Yiwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSAgIDsKCgoKIAoKZXh0ZXJuIHZvaWQgKnJl
YWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSAgIDsKIApleHRlcm4g
dm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIHZvaWQgY2ZyZWUg
KHZvaWQgKl9fcHRyKSB0aHJvdyAoKSA7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1
c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vz
ci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMK
CgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgv
Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUu
My9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k0
ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCiMg
MjcxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCiMgMjgzICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYt
c3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgojIDI1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKCmV4dGVybiAiQyIgeyAK
CiAKCgogCmV4dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIDsKCgoK
Cgp9IAoKCiMgNTQ3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKIApleHRlcm4gdm9p
ZCAqdmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKSAgIDsKCgoKCgoKCgogCmV4dGVybiB2
b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp
OwoKCiAKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgdGhyb3cgKCkg
OwoKCiAKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywg
dm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKIAoKCmV4dGVybiB2
b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChfX25vcmV0
dXJuX18pKTsKCgoKCgoKCgogCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19u
YW1lKSB0aHJvdyAoKSA7CgogCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0
IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCkgOwoKCiAKIAoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIg
Kl9fc3RyaW5nKSB0aHJvdyAoKSA7CgoKCiAKCmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0IGNo
YXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAgIHRo
cm93ICgpIDsKCiAKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRo
cm93ICgpIDsKCgoKIAoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIHRocm93ICgpIDsKCgoK
CiAKCgoKZXh0ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCkgOwoK
IAoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCkgOwoK
CgoKCgoKCgoKCgoKIAoKCgoKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUp
IHRocm93ICgpIDsKCgoKIApleHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1h
bmQpIHRocm93ICgpIDsKCgoKCgoKCgoKCiAKCgoKCgpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCgkJICAgICAgIGNoYXIgKl9fcmVzdHJpY3Qg
X19yZXNvbHZlZCkgdGhyb3cgKCkgOwoKCgogCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90
KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgoKCgoKIAoKZXh0ZXJuIHZvaWQg
KmJzZWFyY2ggKF9fY29uc3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAoJCSAg
ICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFy
KTsKCiAKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBz
aXplX3QgX19zaXplLAoJCSAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCiAKZXh0ZXJuIGlu
dCBhYnMgKGludCBfX3gpIHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4
dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93ICgpICBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKCgoKCiAKCiAKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIs
IGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkK
ICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKCiAKCgog
CgoKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAq
X19yZXN0cmljdCBfX2RlY3B0LAoJCSAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgp
IDsKCiAKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwg
aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCgkJICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhy
b3cgKCkgOwoKIAoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCkgOwoKCgogCmV4dGVybiBjaGFyICpxZWN2dCAobG9u
ZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAoJCSAgICBpbnQgKl9fcmVzdHJpY3QgX19k
ZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCkgOwpleHRlcm4gY2hhciAqcWZj
dnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKCQkgICAgaW50ICpfX3Jlc3Ry
aWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpIDsKZXh0ZXJuIGNo
YXIgKnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVm
KSB0aHJvdyAoKSA7CgoKIAoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQg
X19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAoJCSAgIGludCAqX19yZXN0cmljdCBf
X3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCgkJICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAo
KSA7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQg
Kl9fcmVzdHJpY3QgX19kZWNwdCwKCQkgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpf
X3Jlc3RyaWN0IF9fYnVmLAoJCSAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCkgOwoKZXh0ZXJuIGlu
dCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCgkJICAgIGludCAq
X19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAoJCSAgICBjaGFyICpf
X3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpIDsKZXh0ZXJuIGludCBxZmN2
dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCgkJICAgIGludCAqX19yZXN0
cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAoJCSAgICBjaGFyICpfX3Jlc3Ry
aWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpIDsKCgoKCiAKCmV4dGVybiBpbnQgbWJs
ZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKSA7CiAKCmV4dGVybiBp
bnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAoJCSAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpIDsKIAoKZXh0ZXJuIGludCB3Y3Rv
bWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKSA7CgoKIApleHRlcm4gc2l6
ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0ICBfX3B3Y3MsCgkJCV9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpIDsKIApleHRlcm4gc2l6ZV90
IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkJX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSA7CgoKCiAKCgoKZXh0ZXJu
IGludCBycG1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpIDsKCgoKIyA4
MTIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgoKCgoKCgogCgoKCgoKCiMgODQzICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDMKCgojIDg1MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoK
CiAKCgpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVs
ZW0pIHRocm93ICgpIDsKCgoKCgp9IAoKCiMgNTkgIi4uLy4uL2ppa2VzL3NyYy9wbGF0Zm9ybS5o
IiAyCgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCgoKCgoKIAoKIAoKCgoKIAoKCiAKCgoKCgogCgoKIyA2
MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVm
LmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CgoKCgoKCgoKCiAKCgoKCiAKCiAKCgoj
IDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNl
LWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCgoKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgIHdpbnRfdDsKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYt
c3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoK
IAoKCgoKCgoKIyA2MCAiLi4vLi4vamlrZXMvc3JjL3BsYXRmb3JtLmgiIDIKCgoKCgoKCgoKCgoK
IyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCmV4dGVybiAiQyIgeyAKCiAKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxp
bnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGli
L2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAK
CgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUu
My9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CiAKCiAKCgojIDEyNiAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIv
aTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoK
CiMgMjY5ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9z
dGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIv
aTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoK
CgoKCgogCgoKCgoKCgojIDMzICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgogCmV4dGVy
biB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAoJCSAgICAgX19jb25zdCB2
b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKSA7CiAKCmV4dGVybiB2
b2lkICptZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBf
X24pCiAgICAgdGhyb3cgKCkgOwoKIAoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19y
ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKCQkgICAgICBp
bnQgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIDsKCgoKIApleHRlcm4gdm9pZCAqbWVt
c2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpIDsKCiAKZXh0ZXJu
IGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpICAgOwoKIApleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0
IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgICA7CgojIDcz
ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKIApleHRlcm4gY2hhciAqc3RyY3B5IChjaGFy
ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAg
IHRocm93ICgpIDsKIApleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rl
c3QsCgkJICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0
aHJvdyAoKSA7CgogCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0
LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCkgOwogCmV4dGVy
biBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fc3JjLAoJCSAgICAgIHNpemVfdCBfX24pIHRocm93ICgpIDsKCiAKZXh0ZXJu
IGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAg
IHRocm93ICgpICAgOwogCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBf
X2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgICA7CgogCmV4dGVy
biBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAg
ICAgdGhyb3cgKCkgICA7CiAKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jlc3RyaWN0
IF9fZGVzdCwKCQkgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg
X19uKSB0aHJvdyAoKSA7CgojIDExNiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoKCiAKZXh0
ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpICAgOwoKCiAKCgoK
CgoKCiMgMTUyICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgogCmV4dGVybiBjaGFyICpzdHJj
aHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSAgIDsKIApleHRlcm4gY2hh
ciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpICAgOwoKCgoK
CgoKIAoKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBj
aGFyICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSAgIDsKIAoKZXh0ZXJuIHNpemVfdCBzdHJzcG4g
KF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgp
ICAgOwogCmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBj
aGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSAgIDsKIApleHRlcm4gY2hhciAqc3Ryc3RyIChf
X2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhy
b3cgKCkgICA7CgoKCgoKCgogCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3Qg
X19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0aHJvdyAoKSA7Cgog
CgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCgkJCSBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKCQkJIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2
ZV9wdHIpIHRocm93ICgpIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAqX19yZXN0cmlj
dCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAoJCSAgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKSA7CgoKIyAyMTQgIi91c3IvaW5jbHVkZS9z
dHJpbmcuaCIgMwoKCgogCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykg
dGhyb3cgKCkgICA7CgoKCgoKCgoKCiAKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJu
dW0pIHRocm93ICgpIDsKCiAKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0s
IGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpIDsKCgogCgpleHRlcm4gdm9p
ZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpIDsKCgogCmV4dGVybiB2
b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24p
IHRocm93ICgpIDsKCiAKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikg
dGhyb3cgKCkgOwoKIApleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25z
dCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpICAgOwoKIApleHRlcm4gY2hh
ciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSAgIDsKCiAKZXh0
ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpICAg
OwoKIAoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgo
Y29uc3QpKTsKCiAKCgoKCgoKCgoKIApleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hh
ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpICAgOwoKIApleHRlcm4g
aW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwg
c2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSAgIDsKCgojIDI4OSAiL3Vzci9pbmNsdWRlL3N0cmlu
Zy5oIiAzCgoKCiAKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3Ry
aW5ncCwKCQkgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAoKSA7
CgoKIyAzMzIgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgoKIyAzNjAgIi91c3IvaW5jbHVk
ZS9zdHJpbmcuaCIgMwoKCgp9IAoKCiMgNzIgIi4uLy4uL2ppa2VzL3NyYy9wbGF0Zm9ybS5oIiAy
CgoKCgoKCgogCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMSAzCiAKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKZXh0ZXJuICJDIiB7IAoKIAoKCiAKCgoKIAoKCiAKCgogCgoK
IAoKCgogCgoKCiAKCgoKIAoKCgogCgoKCgoKCiAKCgogCgoKCgogCgoKIAoKCiAKCgoKIAoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9v
cHQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoK
IAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKIAoK
CiAKCgogCgoKIAoKCiAKCgogCgogCgoKIAoKCiAKCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoK
CiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCgojIDE3NSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAy
IDMKCgogCgoKCgogCgoKCgoKIAoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYt
c3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIv
dXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg
MwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51
eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgogCgogCgoKIyAxMjYgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIu
OTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9n
Y2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAK
CgoKCiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9n
Y2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKIyAxOTkgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoK
IyAyMzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwoKCgoKdHlwZWRlZiBfX2ludHB0cl90IGlu
dHB0cl90OwoKCgoKCgp0eXBlZGVmIF9fc29ja2xlbl90IHNvY2tsZW5fdDsKCgoKCiAKCgoKCgoK
IApleHRlcm4gaW50IGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpIHRo
cm93ICgpIDsKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCiAKCgoKCgpleHRlcm4gX19vZmZfdCBs
c2VlayAoaW50IF9fZmQsIF9fb2ZmX3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgdGhyb3cgKCkg
OwojIDMwMCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCgoKCgoKIApleHRlcm4gaW50IGNsb3Nl
IChpbnQgX19mZCkgdGhyb3cgKCkgOwoKIAoKZXh0ZXJuIHNzaXplX3QgcmVhZCAoaW50IF9fZmQs
IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpIHRocm93ICgpIDsKCiAKZXh0ZXJuIHNzaXpl
X3Qgd3JpdGUgKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uKSB0aHJv
dyAoKSA7CgojIDM0NyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCgoKIAoKCgpleHRlcm4gaW50
IHBpcGUgKGludCBfX3BpcGVkZXNbMl0pIHRocm93ICgpIDsKCiAKCgoKCgoKZXh0ZXJuIHVuc2ln
bmVkIGludCBhbGFybSAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgdGhyb3cgKCkgOwoKIAoKCgoK
CgpleHRlcm4gdW5zaWduZWQgaW50IHNsZWVwICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSB0aHJv
dyAoKSA7CgoKIAoKCgpleHRlcm4gX191c2Vjb25kc190IHVhbGFybSAoX191c2Vjb25kc190IF9f
dmFsdWUsIF9fdXNlY29uZHNfdCBfX2ludGVydmFsKQogICAgIHRocm93ICgpIDsKCiAKCmV4dGVy
biBpbnQgdXNsZWVwIChfX3VzZWNvbmRzX3QgX191c2Vjb25kcykgdGhyb3cgKCkgOwoKCgogCgpl
eHRlcm4gaW50IHBhdXNlICh2b2lkKSB0aHJvdyAoKSA7CgoKIApleHRlcm4gaW50IGNob3duIChf
X2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApCiAg
ICAgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIGludCBmY2hvd24gKGludCBfX2ZkLCBfX3VpZF90IF9f
b3duZXIsIF9fZ2lkX3QgX19ncm91cCkgdGhyb3cgKCkgOwoKCiAKCmV4dGVybiBpbnQgbGNob3du
IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXAp
CiAgICAgdGhyb3cgKCkgOwoKCgogCmV4dGVybiBpbnQgY2hkaXIgKF9fY29uc3QgY2hhciAqX19w
YXRoKSB0aHJvdyAoKSA7CgoKIApleHRlcm4gaW50IGZjaGRpciAoaW50IF9fZmQpIHRocm93ICgp
IDsKCgogCgoKCgoKCmV4dGVybiBjaGFyICpnZXRjd2QgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19z
aXplKSB0aHJvdyAoKSA7CgoKCgoKCgoKCiAKCgpleHRlcm4gY2hhciAqZ2V0d2QgKGNoYXIgKl9f
YnVmKSB0aHJvdyAoKSA7CgoKCiAKZXh0ZXJuIGludCBkdXAgKGludCBfX2ZkKSB0aHJvdyAoKSA7
CgogCmV4dGVybiBpbnQgZHVwMiAoaW50IF9fZmQsIGludCBfX2ZkMikgdGhyb3cgKCkgOwoKIApl
eHRlcm4gY2hhciAqKl9fZW52aXJvbjsKCgoKCgogCgpleHRlcm4gaW50IGV4ZWN2ZSAoX19jb25z
dCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10sCgkJICAgY2hhciAqX19jb25z
dCBfX2VudnBbXSkgdGhyb3cgKCkgOwoKCgoKCgoKCgogCmV4dGVybiBpbnQgZXhlY3YgKF9fY29u
c3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSB0aHJvdyAoKSA7CgogCgpl
eHRlcm4gaW50IGV4ZWNsZSAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19h
cmcsIC4uLikgdGhyb3cgKCkgOwoKIAoKZXh0ZXJuIGludCBleGVjbCAoX19jb25zdCBjaGFyICpf
X3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgdGhyb3cgKCkgOwoKIAoKZXh0ZXJuIGlu
dCBleGVjdnAgKF9fY29uc3QgY2hhciAqX19maWxlLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSB0
aHJvdyAoKSA7CgogCgoKZXh0ZXJuIGludCBleGVjbHAgKF9fY29uc3QgY2hhciAqX19maWxlLCBf
X2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pIHRocm93ICgpIDsKCgoKIApleHRlcm4gaW50IG5pY2Ug
KGludCBfX2luYykgdGhyb3cgKCkgOwoKCgogCmV4dGVybiB2b2lkIF9leGl0IChpbnQgX19zdGF0
dXMpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogCgoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9jb25mbmFtZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAplbnVtCiAg
ewogICAgX1BDX0xJTktfTUFYLAoKICAgIF9QQ19NQVhfQ0FOT04sCgogICAgX1BDX01BWF9JTlBV
VCwKCiAgICBfUENfTkFNRV9NQVgsCgogICAgX1BDX1BBVEhfTUFYLAoKICAgIF9QQ19QSVBFX0JV
RiwKCiAgICBfUENfQ0hPV05fUkVTVFJJQ1RFRCwKCiAgICBfUENfTk9fVFJVTkMsCgogICAgX1BD
X1ZESVNBQkxFLAoKICAgIF9QQ19TWU5DX0lPLAoKICAgIF9QQ19BU1lOQ19JTywKCiAgICBfUENf
UFJJT19JTywKCiAgICBfUENfU09DS19NQVhCVUYsCgogICAgX1BDX0ZJTEVTSVpFQklUUywKCiAg
ICBfUENfUkVDX0lOQ1JfWEZFUl9TSVpFLAoKICAgIF9QQ19SRUNfTUFYX1hGRVJfU0laRSwKCiAg
ICBfUENfUkVDX01JTl9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19YRkVSX0FMSUdOCgogIH07Cgog
CmVudW0KICB7CiAgICBfU0NfQVJHX01BWCwKCiAgICBfU0NfQ0hJTERfTUFYLAoKICAgIF9TQ19D
TEtfVENLLAoKICAgIF9TQ19OR1JPVVBTX01BWCwKCiAgICBfU0NfT1BFTl9NQVgsCgogICAgX1ND
X1NUUkVBTV9NQVgsCgogICAgX1NDX1RaTkFNRV9NQVgsCgogICAgX1NDX0pPQl9DT05UUk9MLAoK
ICAgIF9TQ19TQVZFRF9JRFMsCgogICAgX1NDX1JFQUxUSU1FX1NJR05BTFMsCgogICAgX1NDX1BS
SU9SSVRZX1NDSEVEVUxJTkcsCgogICAgX1NDX1RJTUVSUywKCiAgICBfU0NfQVNZTkNIUk9OT1VT
X0lPLAoKICAgIF9TQ19QUklPUklUSVpFRF9JTywKCiAgICBfU0NfU1lOQ0hST05JWkVEX0lPLAoK
ICAgIF9TQ19GU1lOQywKCiAgICBfU0NfTUFQUEVEX0ZJTEVTLAoKICAgIF9TQ19NRU1MT0NLLAoK
ICAgIF9TQ19NRU1MT0NLX1JBTkdFLAoKICAgIF9TQ19NRU1PUllfUFJPVEVDVElPTiwKCiAgICBf
U0NfTUVTU0FHRV9QQVNTSU5HLAoKICAgIF9TQ19TRU1BUEhPUkVTLAoKICAgIF9TQ19TSEFSRURf
TUVNT1JZX09CSkVDVFMsCgogICAgX1NDX0FJT19MSVNUSU9fTUFYLAoKICAgIF9TQ19BSU9fTUFY
LAoKICAgIF9TQ19BSU9fUFJJT19ERUxUQV9NQVgsCgogICAgX1NDX0RFTEFZVElNRVJfTUFYLAoK
ICAgIF9TQ19NUV9PUEVOX01BWCwKCiAgICBfU0NfTVFfUFJJT19NQVgsCgogICAgX1NDX1ZFUlNJ
T04sCgogICAgX1NDX1BBR0VTSVpFLAoKCiAgICBfU0NfUlRTSUdfTUFYLAoKICAgIF9TQ19TRU1f
TlNFTVNfTUFYLAoKICAgIF9TQ19TRU1fVkFMVUVfTUFYLAoKICAgIF9TQ19TSUdRVUVVRV9NQVgs
CgogICAgX1NDX1RJTUVSX01BWCwKCgogICAgIAoKICAgIF9TQ19CQ19CQVNFX01BWCwKCiAgICBf
U0NfQkNfRElNX01BWCwKCiAgICBfU0NfQkNfU0NBTEVfTUFYLAoKICAgIF9TQ19CQ19TVFJJTkdf
TUFYLAoKICAgIF9TQ19DT0xMX1dFSUdIVFNfTUFYLAoKICAgIF9TQ19FUVVJVl9DTEFTU19NQVgs
CgogICAgX1NDX0VYUFJfTkVTVF9NQVgsCgogICAgX1NDX0xJTkVfTUFYLAoKICAgIF9TQ19SRV9E
VVBfTUFYLAoKICAgIF9TQ19DSEFSQ0xBU1NfTkFNRV9NQVgsCgoKICAgIF9TQ18yX1ZFUlNJT04s
CgogICAgX1NDXzJfQ19CSU5ELAoKICAgIF9TQ18yX0NfREVWLAoKICAgIF9TQ18yX0ZPUlRfREVW
LAoKICAgIF9TQ18yX0ZPUlRfUlVOLAoKICAgIF9TQ18yX1NXX0RFViwKCiAgICBfU0NfMl9MT0NB
TEVERUYsCgoKICAgIF9TQ19QSUksCgogICAgX1NDX1BJSV9YVEksCgogICAgX1NDX1BJSV9TT0NL
RVQsCgogICAgX1NDX1BJSV9JTlRFUk5FVCwKCiAgICBfU0NfUElJX09TSSwKCiAgICBfU0NfUE9M
TCwKCiAgICBfU0NfU0VMRUNULAoKICAgIF9TQ19VSU9fTUFYSU9WLAoKICAgIF9TQ19JT1ZfTUFY
ID0gX1NDX1VJT19NQVhJT1YgLAoKICAgIF9TQ19QSUlfSU5URVJORVRfU1RSRUFNLAoKICAgIF9T
Q19QSUlfSU5URVJORVRfREdSQU0sCgogICAgX1NDX1BJSV9PU0lfQ09UUywKCiAgICBfU0NfUElJ
X09TSV9DTFRTLAoKICAgIF9TQ19QSUlfT1NJX00sCgogICAgX1NDX1RfSU9WX01BWCwKCgogICAg
IAogICAgX1NDX1RIUkVBRFMsCgogICAgX1NDX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUywKCiAgICBf
U0NfR0VUR1JfUl9TSVpFX01BWCwKCiAgICBfU0NfR0VUUFdfUl9TSVpFX01BWCwKCiAgICBfU0Nf
TE9HSU5fTkFNRV9NQVgsCgogICAgX1NDX1RUWV9OQU1FX01BWCwKCiAgICBfU0NfVEhSRUFEX0RF
U1RSVUNUT1JfSVRFUkFUSU9OUywKCiAgICBfU0NfVEhSRUFEX0tFWVNfTUFYLAoKICAgIF9TQ19U
SFJFQURfU1RBQ0tfTUlOLAoKICAgIF9TQ19USFJFQURfVEhSRUFEU19NQVgsCgogICAgX1NDX1RI
UkVBRF9BVFRSX1NUQUNLQUREUiwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFLAoKICAg
IF9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORywKCiAgICBfU0NfVEhSRUFEX1BSSU9fSU5I
RVJJVCwKCiAgICBfU0NfVEhSRUFEX1BSSU9fUFJPVEVDVCwKCiAgICBfU0NfVEhSRUFEX1BST0NF
U1NfU0hBUkVELAoKCiAgICBfU0NfTlBST0NFU1NPUlNfQ09ORiwKCiAgICBfU0NfTlBST0NFU1NP
UlNfT05MTiwKCiAgICBfU0NfUEhZU19QQUdFUywKCiAgICBfU0NfQVZQSFlTX1BBR0VTLAoKICAg
IF9TQ19BVEVYSVRfTUFYLAoKICAgIF9TQ19QQVNTX01BWCwKCgogICAgX1NDX1hPUEVOX1ZFUlNJ
T04sCgogICAgX1NDX1hPUEVOX1hDVV9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9VTklYLAoKICAg
IF9TQ19YT1BFTl9DUllQVCwKCiAgICBfU0NfWE9QRU5fRU5IX0kxOE4sCgogICAgX1NDX1hPUEVO
X1NITSwKCgogICAgX1NDXzJfQ0hBUl9URVJNLAoKICAgIF9TQ18yX0NfVkVSU0lPTiwKCiAgICBf
U0NfMl9VUEUsCgoKICAgIF9TQ19YT1BFTl9YUEcyLAoKICAgIF9TQ19YT1BFTl9YUEczLAoKICAg
IF9TQ19YT1BFTl9YUEc0LAoKCiAgICBfU0NfQ0hBUl9CSVQsCgogICAgX1NDX0NIQVJfTUFYLAoK
ICAgIF9TQ19DSEFSX01JTiwKCiAgICBfU0NfSU5UX01BWCwKCiAgICBfU0NfSU5UX01JTiwKCiAg
ICBfU0NfTE9OR19CSVQsCgogICAgX1NDX1dPUkRfQklULAoKICAgIF9TQ19NQl9MRU5fTUFYLAoK
ICAgIF9TQ19OWkVSTywKCiAgICBfU0NfU1NJWkVfTUFYLAoKICAgIF9TQ19TQ0hBUl9NQVgsCgog
ICAgX1NDX1NDSEFSX01JTiwKCiAgICBfU0NfU0hSVF9NQVgsCgogICAgX1NDX1NIUlRfTUlOLAoK
ICAgIF9TQ19VQ0hBUl9NQVgsCgogICAgX1NDX1VJTlRfTUFYLAoKICAgIF9TQ19VTE9OR19NQVgs
CgogICAgX1NDX1VTSFJUX01BWCwKCgogICAgX1NDX05MX0FSR01BWCwKCiAgICBfU0NfTkxfTEFO
R01BWCwKCiAgICBfU0NfTkxfTVNHTUFYLAoKICAgIF9TQ19OTF9OTUFYLAoKICAgIF9TQ19OTF9T
RVRNQVgsCgogICAgX1NDX05MX1RFWFRNQVgsCgoKICAgIF9TQ19YQlM1X0lMUDMyX09GRjMyLAoK
ICAgIF9TQ19YQlM1X0lMUDMyX09GRkJJRywKCiAgICBfU0NfWEJTNV9MUDY0X09GRjY0LAoKICAg
IF9TQ19YQlM1X0xQQklHX09GRkJJRywKCgogICAgX1NDX1hPUEVOX0xFR0FDWSwKCiAgICBfU0Nf
WE9QRU5fUkVBTFRJTUUsCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMsCgoKICAgIF9T
Q19BRFZJU09SWV9JTkZPLAoKICAgIF9TQ19CQVJSSUVSUywKCiAgICBfU0NfQkFTRSwKCiAgICBf
U0NfQ19MQU5HX1NVUFBPUlQsCgogICAgX1NDX0NfTEFOR19TVVBQT1JUX1IsCgogICAgX1NDX0NM
T0NLX1NFTEVDVElPTiwKCiAgICBfU0NfQ1BVVElNRSwKCiAgICBfU0NfVEhSRUFEX0NQVVRJTUUs
CgogICAgX1NDX0RFVklDRV9JTywKCiAgICBfU0NfREVWSUNFX1NQRUNJRklDLAoKICAgIF9TQ19E
RVZJQ0VfU1BFQ0lGSUNfUiwKCiAgICBfU0NfRkRfTUdNVCwKCiAgICBfU0NfRklGTywKCiAgICBf
U0NfUElQRSwKCiAgICBfU0NfRklMRV9BVFRSSUJVVEVTLAoKICAgIF9TQ19GSUxFX0xPQ0tJTkcs
CgogICAgX1NDX0ZJTEVfU1lTVEVNLAoKICAgIF9TQ19NT05PVE9OSUNfQ0xPQ0ssCgogICAgX1ND
X01VTFRJUExFX1BST0NFU1MsCgogICAgX1NDX1NJTkdMRV9QUk9DRVNTLAoKICAgIF9TQ19ORVRX
T1JLSU5HLAoKICAgIF9TQ19SRUFERVJfV1JJVEVSX0xPQ0tTLAoKICAgIF9TQ19TUElOX0xPQ0tT
LAoKICAgIF9TQ19SRUdFWFAsCgogICAgX1NDX1JFR0VYX1ZFUlNJT04sCgogICAgX1NDX1NIRUxM
LAoKICAgIF9TQ19TSUdOQUxTLAoKICAgIF9TQ19TUEFXTiwKCiAgICBfU0NfU1BPUkFESUNfU0VS
VkVSLAoKICAgIF9TQ19USFJFQURfU1BPUkFESUNfU0VSVkVSLAoKICAgIF9TQ19TWVNURU1fREFU
QUJBU0UsCgogICAgX1NDX1NZU1RFTV9EQVRBQkFTRV9SLAoKICAgIF9TQ19USU1FT1VUUywKCiAg
ICBfU0NfVFlQRURfTUVNT1JZX09CSkVDVFMsCgogICAgX1NDX1VTRVJfR1JPVVBTLAoKICAgIF9T
Q19VU0VSX0dST1VQU19SLAoKICAgIF9TQ18yX1BCUywKCiAgICBfU0NfMl9QQlNfQUNDT1VOVElO
RywKCiAgICBfU0NfMl9QQlNfTE9DQVRFLAoKICAgIF9TQ18yX1BCU19NRVNTQUdFLAoKICAgIF9T
Q18yX1BCU19UUkFDSywKCiAgICBfU0NfU1lNTE9PUCwKCiAgICBfU0NfU1RSRUFNUywKCiAgICBf
U0NfMl9QQlNfQ0hFQ0tQT0lOVAoKICB9OwoKCgoKIAplbnVtCiAgewogICAgX0NTX1BBVEgJCQkg
CgoKIyA0NjkgIi91c3IvaW5jbHVkZS9iaXRzL2NvbmZuYW1lLmgiIDMKCgojIDUwNSAiL3Vzci9p
bmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMwoKICB9OwoKIyA1MDAgIi91c3IvaW5jbHVkZS91bmlz
dGQuaCIgMiAzCgoKIApleHRlcm4gbG9uZyBpbnQgcGF0aGNvbmYgKF9fY29uc3QgY2hhciAqX19w
YXRoLCBpbnQgX19uYW1lKSB0aHJvdyAoKSA7CgogCmV4dGVybiBsb25nIGludCBmcGF0aGNvbmYg
KGludCBfX2ZkLCBpbnQgX19uYW1lKSB0aHJvdyAoKSA7CgogCmV4dGVybiBsb25nIGludCBzeXNj
b25mIChpbnQgX19uYW1lKSB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CiAKZXh0ZXJuIHNpemVfdCBjb25mc3RyIChpbnQgX19uYW1lLCBjaGFyICpfX2J1Ziwgc2l6ZV90
IF9fbGVuKSB0aHJvdyAoKSA7CgoKCiAKZXh0ZXJuIF9fcGlkX3QgZ2V0cGlkICh2b2lkKSB0aHJv
dyAoKSA7CgogCmV4dGVybiBfX3BpZF90IGdldHBwaWQgKHZvaWQpIHRocm93ICgpIDsKCiAKCgpl
eHRlcm4gX19waWRfdCBnZXRwZ3JwICh2b2lkKSB0aHJvdyAoKSA7CgoKCgoKCgoKIApleHRlcm4g
X19waWRfdCBfX2dldHBnaWQgKF9fcGlkX3QgX19waWQpIHRocm93ICgpIDsKCgoKCgogCgoKZXh0
ZXJuIGludCBzZXRwZ2lkIChfX3BpZF90IF9fcGlkLCBfX3BpZF90IF9fcGdpZCkgdGhyb3cgKCkg
OwoKCiAKCgoKCgoKCgoKCgogCgpleHRlcm4gaW50IHNldHBncnAgKHZvaWQpIHRocm93ICgpIDsK
CiMgNTc0ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKCgoKIAoKCmV4dGVybiBfX3BpZF90IHNl
dHNpZCAodm9pZCkgdGhyb3cgKCkgOwoKCgoKCgogCmV4dGVybiBfX3VpZF90IGdldHVpZCAodm9p
ZCkgdGhyb3cgKCkgOwoKIApleHRlcm4gX191aWRfdCBnZXRldWlkICh2b2lkKSB0aHJvdyAoKSA7
CgogCmV4dGVybiBfX2dpZF90IGdldGdpZCAodm9pZCkgdGhyb3cgKCkgOwoKIApleHRlcm4gX19n
aWRfdCBnZXRlZ2lkICh2b2lkKSB0aHJvdyAoKSA7CgogCgoKZXh0ZXJuIGludCBnZXRncm91cHMg
KGludCBfX3NpemUsIF9fZ2lkX3QgX19saXN0W10pIHRocm93ICgpIDsKCgoKCgoKIAoKCgpleHRl
cm4gaW50IHNldHVpZCAoX191aWRfdCBfX3VpZCkgdGhyb3cgKCkgOwoKCiAKCmV4dGVybiBpbnQg
c2V0cmV1aWQgKF9fdWlkX3QgX19ydWlkLCBfX3VpZF90IF9fZXVpZCkgdGhyb3cgKCkgOwoKCgog
CmV4dGVybiBpbnQgc2V0ZXVpZCAoX191aWRfdCBfX3VpZCkgdGhyb3cgKCkgOwoKCiAKCgoKZXh0
ZXJuIGludCBzZXRnaWQgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpIDsKCgogCgpleHRlcm4gaW50
IHNldHJlZ2lkIChfX2dpZF90IF9fcmdpZCwgX19naWRfdCBfX2VnaWQpIHRocm93ICgpIDsKCgoK
IApleHRlcm4gaW50IHNldGVnaWQgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpIDsKCgoKIAoKCmV4
dGVybiBfX3BpZF90IGZvcmsgKHZvaWQpIHRocm93ICgpIDsKCgogCgoKCmV4dGVybiBfX3BpZF90
IHZmb3JrICh2b2lkKSB0aHJvdyAoKSA7CgoKCiAKCmV4dGVybiBjaGFyICp0dHluYW1lIChpbnQg
X19mZCkgdGhyb3cgKCkgOwoKIAoKZXh0ZXJuIGludCB0dHluYW1lX3IgKGludCBfX2ZkLCBjaGFy
ICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKSA7CgogCgpleHRlcm4gaW50IGlzYXR0
eSAoaW50IF9fZmQpIHRocm93ICgpIDsKCgoKIAoKZXh0ZXJuIGludCB0dHlzbG90ICh2b2lkKSB0
aHJvdyAoKSA7CgoKCiAKZXh0ZXJuIGludCBsaW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19j
b25zdCBjaGFyICpfX3RvKSB0aHJvdyAoKSA7CgoKIApleHRlcm4gaW50IHN5bWxpbmsgKF9fY29u
c3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pIHRocm93ICgpIDsKCiAKCgpleHRl
cm4gaW50IHJlYWRsaW5rIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXRoLCBjaGFyICpf
X3Jlc3RyaWN0IF9fYnVmLAoJCSAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKSA7CgoKIApleHRl
cm4gaW50IHVubGluayAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpIDsKCiAKZXh0ZXJu
IGludCBybWRpciAoX19jb25zdCBjaGFyICpfX3BhdGgpIHRocm93ICgpIDsKCgogCmV4dGVybiBf
X3BpZF90IHRjZ2V0cGdycCAoaW50IF9fZmQpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCB0Y3Nl
dHBncnAgKGludCBfX2ZkLCBfX3BpZF90IF9fcGdycF9pZCkgdGhyb3cgKCkgOwoKCiAKZXh0ZXJu
IGNoYXIgKmdldGxvZ2luICh2b2lkKSB0aHJvdyAoKSA7CgoKCgoKCgoKIApleHRlcm4gaW50IHNl
dGxvZ2luIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCkgOwoKCgoKIAoKCgojIDEgIi91
c3IvaW5jbHVkZS9nZXRvcHQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgpleHRlcm4gY2hhciAqb3B0YXJnOwoKIAoKCgoK
CgoKCgoKCmV4dGVybiBpbnQgb3B0aW5kOwoKIAoKCmV4dGVybiBpbnQgb3B0ZXJyOwoKIAoKZXh0
ZXJuIGludCBvcHRvcHQ7CgojIDExMyAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCgoKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgpleHRlcm4gaW50IGdldG9wdCAoaW50IF9fYXJnYywg
Y2hhciAqY29uc3QgKl9fYXJndiwgY29uc3QgY2hhciAqX19zaG9ydG9wdHMpOwoKCgoKIyAxNjIg
Ii91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwoKIyAxNzEgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIg
MwoKCgp9CgoKIAoKCgojIDcyNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgoKCgoKIAoK
CmV4dGVybiBpbnQgZ2V0aG9zdG5hbWUgKGNoYXIgKl9fbmFtZSwgc29ja2xlbl90IF9fbGVuKSB0
aHJvdyAoKSA7CgogCgpleHRlcm4gaW50IHNldGhvc3RuYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFt
ZSwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKSA7CgogCgpleHRlcm4gaW50IHNldGhvc3RpZCAobG9u
ZyBpbnQgX19pZCkgdGhyb3cgKCkgOwoKCiAKCgpleHRlcm4gaW50IGdldGRvbWFpbm5hbWUgKGNo
YXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgc2V0ZG9tYWlu
bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCkgOwoKCiAK
CgpleHRlcm4gaW50IHZoYW5ndXAgKHZvaWQpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCByZXZv
a2UgKF9fY29uc3QgY2hhciAqX19maWxlKSB0aHJvdyAoKSA7CgoKIAoKCgoKZXh0ZXJuIGludCBw
cm9maWwgKHVuc2lnbmVkIHNob3J0IGludCAqX19zYW1wbGVfYnVmZmVyLCBzaXplX3QgX19zaXpl
LAoJCSAgIHNpemVfdCBfX29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpIHRocm93ICgpIDsK
CgogCgoKZXh0ZXJuIGludCBhY2N0IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCkgOwoK
CiAKZXh0ZXJuIGNoYXIgKmdldHVzZXJzaGVsbCAodm9pZCkgdGhyb3cgKCkgOwpleHRlcm4gdm9p
ZCBlbmR1c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgpIDsgIApleHRlcm4gdm9pZCBzZXR1c2Vyc2hl
bGwgKHZvaWQpIHRocm93ICgpIDsgIAoKCiAKCgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9j
aGRpciwgaW50IF9fbm9jbG9zZSkgdGhyb3cgKCkgOwoKCgoKCiAKCmV4dGVybiBpbnQgY2hyb290
IChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgdGhyb3cgKCkgOwoKIAoKZXh0ZXJuIGNoYXIgKmdldHBh
c3MgKF9fY29uc3QgY2hhciAqX19wcm9tcHQpIHRocm93ICgpIDsKCgoKCiAKZXh0ZXJuIGludCBm
c3luYyAoaW50IF9fZmQpIHRocm93ICgpIDsKCgoKCgogCmV4dGVybiBsb25nIGludCBnZXRob3N0
aWQgKHZvaWQpIHRocm93ICgpIDsKCiAKZXh0ZXJuIHZvaWQgc3luYyAodm9pZCkgdGhyb3cgKCkg
OwoKCiAKCmV4dGVybiBpbnQgZ2V0cGFnZXNpemUgKHZvaWQpICB0aHJvdyAoKSAgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCiAKCmV4dGVybiBpbnQgdHJ1bmNhdGUgKF9fY29uc3QgY2hh
ciAqX19maWxlLCBfX29mZl90IF9fbGVuZ3RoKSB0aHJvdyAoKSA7CiMgODMzICIvdXNyL2luY2x1
ZGUvdW5pc3RkLmgiIDMKCgoKCgogCgpleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQsIF9f
b2ZmX3QgX19sZW5ndGgpIHRocm93ICgpIDsKCgoKCgoKCgoKCgoKCiAKCmV4dGVybiBpbnQgZ2V0
ZHRhYmxlc2l6ZSAodm9pZCkgdGhyb3cgKCkgOwoKCgoKCgogCgpleHRlcm4gaW50IGJyayAodm9p
ZCAqX19hZGRyKSB0aHJvdyAoKSA7CgogCgoKCmV4dGVybiB2b2lkICpzYnJrIChpbnRwdHJfdCBf
X2RlbHRhKSB0aHJvdyAoKSA7CgoKCgogCgoKCgoKCgoKCmV4dGVybiBsb25nIGludCBzeXNjYWxs
IChsb25nIGludCBfX3N5c25vLCAuLi4pIHRocm93ICgpIDsKCgoKCgogCgoKCiAKCgoKCgoKCgoK
ZXh0ZXJuIGludCBsb2NrZiAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmZfdCBfX2xlbikgdGhy
b3cgKCkgOwoKCgoKCgoKCgoKCgoKCiMgOTMyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKCgoK
IAoKZXh0ZXJuIGludCBmZGF0YXN5bmMgKGludCBfX2ZpbGRlcykgdGhyb3cgKCkgOwoKCgogCgoj
IDk1OCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCgoKCiAKCgoKCgoKCgogCgogCgoKCgoKCgoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKCQkJ
ICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCgkJCSAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkp
IHRocm93ICgpIDsKCgp9IAoKCiMgODcgIi4uLy4uL2ppa2VzL3NyYy9wbGF0Zm9ybS5oIiAyCgoK
CgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgoKCiMgNDUgIi91c3IvaW5jbHVkZS9kaXJlbnQu
aCIgMwoKCiAKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2RpcmVudC5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgZGlyZW50CiAgewoKICAgIF9faW5vX3Qg
ZF9pbm87CiAgICBfX29mZl90IGRfb2ZmOwoKCgoKICAgIHVuc2lnbmVkIHNob3J0IGludCBkX3Jl
Y2xlbjsKICAgIHVuc2lnbmVkIGNoYXIgZF90eXBlOwogICAgY2hhciBkX25hbWVbMjU2XTsJCSAK
ICB9OwoKIyA0NiAiL3Vzci9pbmNsdWRlL2JpdHMvZGlyZW50LmgiIDMKCgoKCgoKCgojIDYyICIv
dXNyL2luY2x1ZGUvZGlyZW50LmgiIDIgMwoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgogCmVudW0KICB7CiAgICBEVF9VTktOT1dOID0gMCwKCiAgICBEVF9GSUZPID0gMSwKCiAg
ICBEVF9DSFIgPSAyLAoKICAgIERUX0RJUiA9IDQsCgogICAgRFRfQkxLID0gNiwKCiAgICBEVF9S
RUcgPSA4LAoKICAgIERUX0xOSyA9IDEwLAoKICAgIERUX1NPQ0sgPSAxMiwKCiAgICBEVF9XSFQg
PSAxNAoKICB9OwoKIAoKCgoKCiAKCnR5cGVkZWYgc3RydWN0IF9fZGlyc3RyZWFtIERJUjsKCiAK
CmV4dGVybiBESVIgKm9wZW5kaXIgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKSA7Cgog
CgpleHRlcm4gaW50IGNsb3NlZGlyIChESVIgKl9fZGlycCkgdGhyb3cgKCkgOwoKIAoKCgoKCgoK
ZXh0ZXJuIHN0cnVjdCBkaXJlbnQgKnJlYWRkaXIgKERJUiAqX19kaXJwKSB0aHJvdyAoKSA7CgoK
CgoKCgoKCgoKCgogCgoKZXh0ZXJuIGludCByZWFkZGlyX3IgKERJUiAqX19yZXN0cmljdCBfX2Rp
cnAsCgkJICAgICAgc3RydWN0IGRpcmVudCAqX19yZXN0cmljdCBfX2VudHJ5LAoJCSAgICAgIHN0
cnVjdCBkaXJlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKSA7CiMgMTc2ICIvdXNy
L2luY2x1ZGUvZGlyZW50LmgiIDMKCgoKCgoKCgoKIApleHRlcm4gdm9pZCByZXdpbmRkaXIgKERJ
UiAqX19kaXJwKSB0aHJvdyAoKSA7CgoKCgogCmV4dGVybiB2b2lkIHNlZWtkaXIgKERJUiAqX19k
aXJwLCBsb25nIGludCBfX3BvcykgdGhyb3cgKCkgOwoKIApleHRlcm4gbG9uZyBpbnQgdGVsbGRp
ciAoRElSICpfX2RpcnApIHRocm93ICgpIDsKCgoKCiAKZXh0ZXJuIGludCBkaXJmZCAoRElSICpf
X2RpcnApIHRocm93ICgpIDsKCgoKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9s
aW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiAKCiAKCgogCgoKIAoKCiAK
CgogCgoKIAoKCiAKCgogCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKCiAKCgogCgoKIAoKCiAKCgog
CgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCgogCgoKIAoKCiAKCgogCgoKIAoKCgogCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxIDMK
CgoKCgoKCgoKCgoKCgoKCgoKCiMgMzYgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAy
IDMKCgogCgoKCgogCgoKCgogCgoKCgoKIAoKIAoKCiAKCiAKCgogCgogCgoKIAoKCgogCgoKIAoK
IyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMiAzCgoKCgoKCgoKIAoKCgoK
CgoKIyAyMDkgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMiAzCgoKIAoKCgoKCgoKCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4z
L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2Nj
LWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCiMgMTI2ICIvdXNyL2xpYi9nY2MtbGli
L2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCiAKCiAK
CgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1z
dXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCgoKCgoKCgogCgog
CgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMgMjIwICIvdXNyL2luY2x1
ZGUvZGlyZW50LmgiIDIgMwoKCiAKCgoKCmV4dGVybiBpbnQgc2NhbmRpciAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZGlyLAoJCSAgICBzdHJ1Y3QgZGlyZW50ICoqKl9fcmVzdHJpY3QgX19u
YW1lbGlzdCwKCQkgICAgaW50ICgqX19zZWxlY3RvcikgKF9fY29uc3Qgc3RydWN0IGRpcmVudCAq
KSwKCQkgICAgaW50ICgqX19jbXApIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopKSB0
aHJvdyAoKSA7CiMgMjQyICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKCgoKCgoKCgoKCgogCgpl
eHRlcm4gaW50IGFscGhhc29ydCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9f
ZTIpCiAgICAgdGhyb3cgKCkgICA7CiMgMjY2ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKCgoK
CgoKCiMgMjkzICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKCgogCgoKCgpleHRlcm4gX19zc2l6
ZV90IGdldGRpcmVudHJpZXMgKGludCBfX2ZkLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAoJCQkJ
c2l6ZV90IF9fbmJ5dGVzLAoJCQkJX19vZmZfdCAqX19yZXN0cmljdCBfX2Jhc2VwKSB0aHJvdyAo
KSA7CiMgMzEzICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKCgoKCgoKCgoKCn0gCgoKIyA5OSAi
Li4vLi4vamlrZXMvc3JjL3BsYXRmb3JtLmgiIDIKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
d2NoYXIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCiAKCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiMgMzgg
Ii91c3IvaW5jbHVkZS9zdGRpby5oIiAzCgoKCgoKCgoKCgoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3Qg
X0lPX0ZJTEUgX19GSUxFOwoKCgoKCgojIDYzNCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoK
IyAzNyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIAoKIyAxICIvdXNyL2xpYi9nY2MtbGli
L2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKdHlwZWRlZiB2b2lkICpfX2dudWNfdmFfbGlzdDsKCgoKIAoKIyAxMjIgIi91c3IvbGli
L2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIyAyMDkgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIu
OTUuMy9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoKCgojIDQwICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MiAzCgoKIAoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4z
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9p
NDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgog
CgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCiMg
MTI2ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCiAKCgoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2Ut
bGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91
c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2Ut
bGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3djaGFyLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDUwICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMiAzCgoKIAoKCgoKCgoKCgoKCgoKIAp0eXBlZGVmIHN0cnVjdAp7CiAg
aW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2No
Yls0XTsKICB9IF9fdmFsdWU7CQkgCn0gX19tYnN0YXRlX3Q7CgoKCgogCgoKCiAKdHlwZWRlZiBf
X21ic3RhdGVfdCBtYnN0YXRlX3Q7CgoKIAoKCgoKCgoKCiAKCgoKCgogCgpzdHJ1Y3QgdG07CgoK
ZXh0ZXJuICJDIiB7IAoKIApleHRlcm4gd2NoYXJfdCAqd2NzY3B5ICh3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fZGVzdCwKCQkJX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAo
KSA7CiAKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0
LAoJCQkgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAg
IHRocm93ICgpIDsKCiAKZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX2Rlc3QsCgkJCV9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCkg
OwogCmV4dGVybiB3Y2hhcl90ICp3Y3NuY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwK
CQkJIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKICAgICB0
aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgd2NzY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9f
Y29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAoKSAgIDsKIApleHRlcm4gaW50IHdjc25j
bXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpICAgOwoKIyAxNTAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoK
IAoKZXh0ZXJuIGludCB3Y3Njb2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2No
YXJfdCAqX19zMikgdGhyb3cgKCkgOwogCgoKZXh0ZXJuIHNpemVfdCB3Y3N4ZnJtICh3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fczEsCgkJICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKSA7CgojIDE3NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDMKCgogCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdj
aGFyX3QgX193YykKICAgICB0aHJvdyAoKSAgIDsKIApleHRlcm4gd2NoYXJfdCAqd2NzcmNociAo
X19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpICAgOwoK
CgoKCgoKCiAKCmV4dGVybiBzaXplX3Qgd2NzY3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywg
X19jb25zdCB3Y2hhcl90ICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSAgIDsKIAoKZXh0ZXJuIHNp
emVfdCB3Y3NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19h
Y2NlcHQpCiAgICAgdGhyb3cgKCkgICA7CiAKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9fY29u
c3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhyb3cg
KCkgICA7CiAKZXh0ZXJuIHdjaGFyX3QgKndjc3N0ciAoX19jb25zdCB3Y2hhcl90ICpfX2hheXN0
YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIHRocm93ICgpICAgOwoKCgoKCgoK
IApleHRlcm4gd2NoYXJfdCAqd2NzdG9rICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKCQkJX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVsaW0sCgkJCXdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fcHRyKSB0aHJvdyAoKSA7CgogCmV4dGVybiBzaXplX3Qgd2NzbGVuIChfX2NvbnN0IHdjaGFy
X3QgKl9fcykgdGhyb3cgKCkgICA7CgoKCgoKCgoKIApleHRlcm4gd2NoYXJfdCAqd21lbWNociAo
X19jb25zdCB3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93
ICgpICAgOwoKIApleHRlcm4gaW50IHdtZW1jbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX3MxLAoJCSAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9f
bikKICAgICB0aHJvdyAoKSAgIDsKCiAKZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19zMSwKCQkJIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBz
aXplX3QgX19uKSB0aHJvdyAoKSA7CgogCgpleHRlcm4gd2NoYXJfdCAqd21lbW1vdmUgKHdjaGFy
X3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo
KSA7CgogCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19j
LCBzaXplX3QgX19uKSB0aHJvdyAoKSA7CgoKCgoKCgoKCgogCgpleHRlcm4gd2ludF90IGJ0b3dj
IChpbnQgX19jKSB0aHJvdyAoKSA7CgogCgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0
aHJvdyAoKSA7CgogCgpleHRlcm4gaW50IG1ic2luaXQgKF9fY29uc3QgbWJzdGF0ZV90ICpfX3Bz
KSB0aHJvdyAoKSA7CgogCgpleHRlcm4gc2l6ZV90IG1icnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19wd2MsCgkJICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBf
X24sCgkJICAgICAgIG1ic3RhdGVfdCAqX19wKSB0aHJvdyAoKSA7CgogCmV4dGVybiBzaXplX3Qg
d2NydG9tYiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHdjaGFyX3QgX193YywKCQkgICAgICAgbWJz
dGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpIDsKCiAKZXh0ZXJuIHNpemVfdCBfX21i
cmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKCQkJbWJzdGF0
ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpIDsKZXh0ZXJuIHNpemVfdCBtYnJsZW4gKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCgkJICAgICAgbWJzdGF0ZV90
ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpIDsKCgoKIApleHRlcm4gX19pbmxpbmUgc2l6ZV90
IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKCQkJICAg
ICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKSAKeyByZXR1cm4gKF9fcHMg
IT0gX19udWxsIAoJICA/IG1icnRvd2MgKF9fbnVsbCAsIF9fcywgX19uLCBfX3BzKSA6IF9fbWJy
bGVuIChfX3MsIF9fbiwgX19udWxsICkpOyB9CgoKIAoKZXh0ZXJuIHNpemVfdCBtYnNydG93Y3Mg
KHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCgkJCSBfX2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0
IF9fc3JjLCBzaXplX3QgX19sZW4sCgkJCSBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhy
b3cgKCkgOwoKIAoKZXh0ZXJuIHNpemVfdCB3Y3NydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19k
c3QsCgkJCSBfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19sZW4s
CgkJCSBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCkgOwoKCiMgMzIyICIvdXNy
L2luY2x1ZGUvd2NoYXIuaCIgMwoKCgogCgoKCgoKCgoKCgogCgpleHRlcm4gZG91YmxlIHdjc3Rv
ZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkgICAgICB3Y2hhcl90ICoq
X19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkgOwoKCgoKCgoKCgoKIAoKZXh0ZXJuIGxvbmcg
aW50IHdjc3RvbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJd2NoYXJf
dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpIDsKCiAKCmV4dGVy
biB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLAoJCQkJICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkK
ICAgICB0aHJvdyAoKSA7CgojIDM3NSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCgojIDM5MSAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCgojIDQ0MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMK
CgoKIAoKZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fZ3JvdXApCiAgICAgdGhyb3cgKCkgOwpleHRlcm4gZmxvYXQgX193Y3N0b2ZfaW50ZXJuYWwg
KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCgkJCQl3Y2hhcl90ICoqX19yZXN0
cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCkgOwpleHRlcm4gbG9uZyBk
b3VibGUgX193Y3N0b2xkX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19u
cHRyLAoJCQkJICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJICAgICAg
IGludCBfX2dyb3VwKSB0aHJvdyAoKSA7CgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2ludGVy
bmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICAgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhy
b3cgKCkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2ludGVybmFsIChf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHQsCgkJCQkJICAgICB3Y2hhcl90ICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJv
dyAoKSA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2lu
dGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJCSB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRo
cm93ICgpIDsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBf
X3djc3RvdWxsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKgoJCQkJCQkgICBfX3Jlc3RyaWN0
IF9fbnB0ciwKCQkJCQkJICAgd2NoYXJfdCAqKgoJCQkJCQkgICBfX3Jlc3RyaWN0IF9fZW5kcHRy
LAoJCQkJCQkgICBpbnQgX19iYXNlLAoJCQkJCQkgICBpbnQgX19ncm91cCkgdGhyb3cgKCkgOwoK
CgoKCiAKCmV4dGVybiBfX2lubGluZSBkb3VibGUgd2NzdG9kIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLAoJCQkgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIp
IHRocm93ICgpIAp7IHJldHVybiBfX3djc3RvZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg
MCk7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50IHdjc3RvbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJf
dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkgaW50IF9fYmFzZSkgdGhyb3cgKCkgCnsgcmV0
dXJuIF9fd2NzdG9sX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CmV4
dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJICAgaW50IF9fYmFzZSkg
dGhyb3cgKCkgCnsgcmV0dXJuIF9fd2NzdG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg
X19iYXNlLCAwKTsgfQoKIyA1MjIgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoKCgojIDUzNSAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCgoKIAojIDU4NSAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDMKCgojIDYwMiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCgoKIApleHRlcm4gd2ludF90IGZn
ZXR3YyAoX19GSUxFICpfX3N0cmVhbSk7CmV4dGVybiB3aW50X3QgZ2V0d2MgKF9fRklMRSAqX19z
dHJlYW0pOwoKIApleHRlcm4gd2ludF90IGdldHdjaGFyICh2b2lkKTsKCgogCmV4dGVybiB3aW50
X3QgZnB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pOwpleHRlcm4gd2ludF90
IHB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pOwoKIApleHRlcm4gd2ludF90
IHB1dHdjaGFyICh3Y2hhcl90IF9fd2MpOwoKCiAKCmV4dGVybiB3Y2hhcl90ICpmZ2V0d3MgKHdj
aGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9fbiwKCQkJX19GSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtKTsKCiAKZXh0ZXJuIGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX3dzLAoJCSAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSk7CgoKIApleHRlcm4gd2lu
dF90IHVuZ2V0d2MgKHdpbnRfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKTsKCgojIDY2MCAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDMKCgoKIAoKCmV4dGVybiBzaXplX3Qgd2NzZnRpbWUgKHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAoJCQlfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsCgkJCV9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9f
dHApOwoKIAoKCgoKCgoKCgoKfSAKCgoKCiMgMTA4ICIuLi8uLi9qaWtlcy9zcmMvcGxhdGZvcm0u
aCIgMgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCgogCgoKCgoKCgoKCgoKCgoKZW51bQp7CiAgX0lT
dXBwZXIgPSAoKCAwICkgPCA4ID8gKCgxIDw8ICggMCApKSA8PCA4KSA6ICgoMSA8PCAoIDAgKSkg
Pj4gOCkpICwJIAogIF9JU2xvd2VyID0gKCggMSApIDwgOCA/ICgoMSA8PCAoIDEgKSkgPDwgOCkg
OiAoKDEgPDwgKCAxICkpID4+IDgpKSAsCSAKICBfSVNhbHBoYSA9ICgoIDIgKSA8IDggPyAoKDEg
PDwgKCAyICkpIDw8IDgpIDogKCgxIDw8ICggMiApKSA+PiA4KSkgLAkgCiAgX0lTZGlnaXQgPSAo
KCAzICkgPCA4ID8gKCgxIDw8ICggMyApKSA8PCA4KSA6ICgoMSA8PCAoIDMgKSkgPj4gOCkpICwJ
IAogIF9JU3hkaWdpdCA9ICgoIDQgKSA8IDggPyAoKDEgPDwgKCA0ICkpIDw8IDgpIDogKCgxIDw8
ICggNCApKSA+PiA4KSkgLAkgCiAgX0lTc3BhY2UgPSAoKCA1ICkgPCA4ID8gKCgxIDw8ICggNSAp
KSA8PCA4KSA6ICgoMSA8PCAoIDUgKSkgPj4gOCkpICwJIAogIF9JU3ByaW50ID0gKCggNiApIDwg
OCA/ICgoMSA8PCAoIDYgKSkgPDwgOCkgOiAoKDEgPDwgKCA2ICkpID4+IDgpKSAsCSAKICBfSVNn
cmFwaCA9ICgoIDcgKSA8IDggPyAoKDEgPDwgKCA3ICkpIDw8IDgpIDogKCgxIDw8ICggNyApKSA+
PiA4KSkgLAkgCiAgX0lTYmxhbmsgPSAoKCA4ICkgPCA4ID8gKCgxIDw8ICggOCApKSA8PCA4KSA6
ICgoMSA8PCAoIDggKSkgPj4gOCkpICwJIAogIF9JU2NudHJsID0gKCggOSApIDwgOCA/ICgoMSA8
PCAoIDkgKSkgPDwgOCkgOiAoKDEgPDwgKCA5ICkpID4+IDgpKSAsCSAKICBfSVNwdW5jdCA9ICgo
IDEwICkgPCA4ID8gKCgxIDw8ICggMTAgKSkgPDwgOCkgOiAoKDEgPDwgKCAxMCApKSA+PiA4KSkg
LAkgCiAgX0lTYWxudW0gPSAoKCAxMSApIDwgOCA/ICgoMSA8PCAoIDExICkpIDw8IDgpIDogKCgx
IDw8ICggMTEgKSkgPj4gOCkpIAkgCn07CgoKIAoKCgoKCgoKCgoKZXh0ZXJuIF9fY29uc3QgdW5z
aWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CSAKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpf
X2N0eXBlX3RvbG93ZXI7ICAKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvdXBw
ZXI7ICAKCgoKCgoKCgoKIAoKCgpleHRlcm4gaW50ICBpc2FsbnVtICAoaW50KSB0aHJvdyAoKSAg
OwpleHRlcm4gaW50ICBpc2FscGhhICAoaW50KSB0aHJvdyAoKSAgOwpleHRlcm4gaW50ICBpc2Nu
dHJsICAoaW50KSB0aHJvdyAoKSAgOwpleHRlcm4gaW50ICBpc2RpZ2l0ICAoaW50KSB0aHJvdyAo
KSAgOwpleHRlcm4gaW50ICBpc2xvd2VyICAoaW50KSB0aHJvdyAoKSAgOwpleHRlcm4gaW50ICBp
c2dyYXBoICAoaW50KSB0aHJvdyAoKSAgOwpleHRlcm4gaW50ICBpc3ByaW50ICAoaW50KSB0aHJv
dyAoKSAgOwpleHRlcm4gaW50ICBpc3B1bmN0ICAoaW50KSB0aHJvdyAoKSAgOwpleHRlcm4gaW50
ICBpc3NwYWNlICAoaW50KSB0aHJvdyAoKSAgOwpleHRlcm4gaW50ICBpc3VwcGVyICAoaW50KSB0
aHJvdyAoKSAgOwpleHRlcm4gaW50ICBpc3hkaWdpdCAgKGludCkgdGhyb3cgKCkgIDsKCgoKCgoK
IApleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCB0
b3VwcGVyIChpbnQgX19jKSB0aHJvdyAoKSA7CgoKCgogCgpleHRlcm4gaW50IGlzYXNjaWkgKGlu
dCBfX2MpIHRocm93ICgpIDsKCiAKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cg
KCkgOwoKIAoKZXh0ZXJuIGludCAgX3RvdXBwZXIgIChpbnQpIHRocm93ICgpICA7CmV4dGVybiBp
bnQgIF90b2xvd2VyICAoaW50KSB0aHJvdyAoKSAgOwoKCiAKCiMgMTQ4ICIvdXNyL2luY2x1ZGUv
Y3R5cGUuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBfX2lubGluZSBpbnQKdG9sb3dl
ciAoaW50IF9fYykgdGhyb3cgKCkgCnsKICByZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwgMjU2
ID8gX19jdHlwZV90b2xvd2VyW19fY10gOiBfX2M7Cn0KCmV4dGVybiBfX2lubGluZSBpbnQKdG91
cHBlciAoaW50IF9fYykgdGhyb3cgKCkgCnsKICByZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwg
MjU2ID8gX19jdHlwZV90b3VwcGVyW19fY10gOiBfX2M7Cn0KCgoKCgoKCgoKCgoKCgoKCgoKIyAy
NzUgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCgoKfSAKCgojIDExMiAiLi4vLi4vamlrZXMvc3Jj
L3BsYXRmb3JtLmgiIDIKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMKIAoKCgoK
CgoKCgoKCgoKCgoKCiAKCgoKIyAzMyAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCgoKCgoKCgoK
CgoKIAoKCgoKIyA2MyAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCgoKZXh0ZXJuICJDIiB7IAoK
IApleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBf
X2NvbnN0IGNoYXIgKl9fZmlsZSwKCQkJICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25zdCBj
aGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy
bl9fKSk7CgogCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0s
IF9fY29uc3QgY2hhciAqX19maWxlLAoJCQkJICB1bnNpZ25lZCBpbnQgX19saW5lLAoJCQkJICBf
X2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKCgogCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19h
c3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSAg
X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0gCgoKCgoKCgoKCgoKCgogCgoKCgoK
CgoKCgoKCgoKCiMgMTE2ICIuLi8uLi9qaWtlcy9zcmMvcGxhdGZvcm0uaCIgMgoKCgoKIyAxICIv
dXNyL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCmV4
dGVybiAiQyIgeyAKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1
LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGli
L2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoK
CiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVk
ZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoK
IyAxMjYgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3Vz
ZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2OSAi
L3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgi
IDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3Vz
ZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKIyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKCgoKCgoKIAp0eXBlZGVm
IHN0cnVjdCBfSU9fRklMRSBGSUxFOwoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1
ZGUvbGliaW8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIAoKCgoKCiAKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2Mt
bGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAK
CgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9z
dGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYt
c3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgogCgogCgoKIyAxMjYgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNl
LWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIv
dXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg
MwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgv
Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIv
dXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg
MwoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIyAxNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZp
Zy5oIiAyIDMKCgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAg
X19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29m
ZjY0X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKCgoKCgoK
CgojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1
c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2
MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVm
LmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCiMgMTI2ICIv
dXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg
MwoKCiAKCgoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgv
Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3IvbGli
L2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoK
CgoKCgoKCgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgv
Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMg
MzAgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgogCgoKIAplbnVtCnsKICBfX0dDT05WX09L
ID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9OT01FTSwK
CiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9fR0NPTlZf
SUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NPTlZfSUxM
RUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IKfTsKCgogCmVudW0Kewog
IF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAw
MDIKfTsKCgogCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsK
c3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsK
CgogCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosIHN0
cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAoJCQkgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoq
LCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKCQkJICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVf
dCAqLCBpbnQsIGludCk7CgogCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVj
dCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVj
dCBfX2djb252X3N0ZXAgKik7CgoKIAp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAo
c3RydWN0IF9fZ2NvbnZfc3RlcCAqLAoJCQkJICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwg
dm9pZCAqLAoJCQkJICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKCQkJCSAgX19jb25zdCB1bnNp
Z25lZCBjaGFyICoqLAoJCQkJICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hh
ciAqKiwKCQkJCSAgc2l6ZV90ICopOwoKIAp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29u
dGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAoJCQkJCSAgX19jb25z
dCB1bnNpZ25lZCBjaGFyICosCgkJCQkJICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIg
Kik7CgogCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNo
YXIgKiwgX19jb25zdCBjaGFyICoqKiwKCQkJCQlzaXplX3QgKik7CgogCnR5cGVkZWYgaW50ICgq
X19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7CnR5cGVkZWYg
dm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19nY29udl90
cmFuc19kYXRhCnsKICAgCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAgX19nY29u
dl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNf
ZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBfX2djb252
X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgogCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVj
dCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hhciAq
X19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBjaGFy
ICpfX3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19p
bml0X2ZjdDsKICBfX2djb252X2VuZF9mY3QgX19lbmRfZmN0OwoKICAgCgogIGludCBfX21pbl9u
ZWVkZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90
bzsKICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKICAgCiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQg
Kl9fZGF0YTsJCSAKfTsKCiAKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQg
Y2hhciAqX19vdXRidWY7ICAgICAKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVuZDsgIAoKCiAg
IAogIGludCBfX2ZsYWdzOwoKICAgCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCiAgIAoK
ICBpbnQgX19pbnRlcm5hbF91c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3Rh
dGVfdCBfX3N0YXRlOwkgCgoKICAgCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFu
czsKfTsKCgogCnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBz
OwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3Qg
X19nY29udl9zdGVwX2RhdGEgX19kYXRhIFswXSA7Cn0gKl9fZ2NvbnZfdDsKCgojIDQ0ICIvdXNy
L2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2Nv
bnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsK
ICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9H
X2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJp
YnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWlu
dDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CgoKCgogCgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgojIDMwICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMiAzCgogCgoKCgoKCgoKCgoKCgoKCgoKIAoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYt
c3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
CgoKCiAKCiMgMTIyICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5j
bHVkZS9zdGRhcmcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjA5ICIvdXNyL2xpYi9nY2Mt
bGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKIyA1MSAi
L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwoKCgoKCgoKIyA3MCAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMKCgogCgoKCgoKCgoKCgoKCgoKCgoKIyAxMDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAz
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKc3RydWN0IF9JT19qdW1wX3Q7ICBzdHJ1Y3QgX0lPX0ZJTEU7CgogCgoKCgoKCgp0eXBlZGVm
IHZvaWQgX0lPX2xvY2tfdDsKCgoKIAoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9f
bWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwogICAKCiAgIAogIGludCBf
cG9zOwojIDE5MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCn07CgogCmVudW0gX19jb2RlY3Z0
X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2
dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252Cn07CgojIDI1NyAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMKCgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CQkgCgoKICAgCiAgIAogIGNo
YXIqIF9JT19yZWFkX3B0cjsJIAogIGNoYXIqIF9JT19yZWFkX2VuZDsJIAogIGNoYXIqIF9JT19y
ZWFkX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsJIAogIGNoYXIqIF9JT193cml0ZV9w
dHI7CSAKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwkgCiAgY2hhciogX0lPX2J1Zl9iYXNlOwkgCiAg
Y2hhciogX0lPX2J1Zl9lbmQ7CSAKICAgCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsgIAogIGNoYXIg
Kl9JT19iYWNrdXBfYmFzZTsgICAKICBjaGFyICpfSU9fc2F2ZV9lbmQ7ICAKCiAgc3RydWN0IF9J
T19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9m
aWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgICBfb2xkX29mZnNldDsgIAoKCiAgIAog
IHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0
OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKICAgCgogIF9JT19sb2NrX3QgKl9sb2NrOwoKCgoKCgoK
CiAgX19vZmY2NF90ICAgX29mZnNldDsKCgoKCgogIHZvaWQgKl9fcGFkMTsKICB2b2lkICpfX3Bh
ZDI7CgogIGludCBfbW9kZTsKICAgCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAt
IDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4
dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBf
SU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVz
IF9JT18yXzFfc3RkZXJyXzsKCgoKCgoKCgoKCgogCgogCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lv
X3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsK
CiAKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwg
X19jb25zdCBjaGFyICpfX2J1ZiwKCQkJCSBzaXplX3QgX19uKTsKCiAKCgoKCgp0eXBlZGVmIGlu
dCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgICAqX19wb3MsIGludCBf
X3cpOwoKIAp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKIyAz
ODcgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50
IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgX191ZmxvdyAo
X0lPX0ZJTEUgKikgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICos
IGludCkgdGhyb3cgKCkgOwpleHRlcm4gd2ludF90ICAgX193dW5kZXJmbG93IChfSU9fRklMRSAq
KSB0aHJvdyAoKSA7CmV4dGVybiB3aW50X3QgICBfX3d1ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cg
KCkgOwpleHRlcm4gd2ludF90ICAgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCAgKSB0
aHJvdyAoKSA7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgX0lPX2dldGMgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19GSUxFICpf
X2ZwKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRo
cm93ICgpIDsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApIHRo
cm93ICgpIDsKCiAKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhy
b3cgKCkgOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgp
IDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKSA7CgoK
CgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJp
Y3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAoJCQlfX2dudWNfdmFfbGlzdCAsIGludCAqX19y
ZXN0cmljdCkgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9f
cmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCgkJCSBfX2dudWNfdmFfbGlzdCApIHRo
cm93ICgpIDsKZXh0ZXJuIF9fc3NpemVfdCAgIF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9f
c3NpemVfdCAgKSB0aHJvdyAoKSA7CmV4dGVybiBzaXplX3QgICBfSU9fc2dldG4gKF9JT19GSUxF
ICosIHZvaWQgKiwgc2l6ZV90ICApIHRocm93ICgpIDsKCmV4dGVybiBfX29mZjY0X3QgICBfSU9f
c2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90ICAsIGludCwgaW50KSB0aHJvdyAoKSA7CmV4
dGVybiBfX29mZjY0X3QgICBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90ICAsIGlu
dCkgdGhyb3cgKCkgOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxF
ICopIHRocm93ICgpIDsKCiMgNTA3ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoKCgp9CgoKCiMg
NjQgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgojIDc1ICIvdXNyL2luY2x1ZGUvc3RkaW8u
aCIgMwoKCiAKCnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsKCgoKCgoKCiAKCgoKCgogCgoKCgoK
IAoKCgoKCgogCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z
dGRpb19saW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiMgMTI4ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCiAKZXh0ZXJuIEZJTEUgKnN0ZGlu
OwkJIApleHRlcm4gRklMRSAqc3Rkb3V0OwkJIApleHRlcm4gRklMRSAqc3RkZXJyOwkJIAogCgoK
CgogCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgp
IDsKIApleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFy
ICpfX25ldykgdGhyb3cgKCkgOwoKCiAKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSB0aHJv
dyAoKSA7CgoKCgoKCgoKCgogCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cg
KCkgOwoKCiAKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSB0aHJvdyAoKSA7CgoK
CgogCgoKCgoKCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2Nv
bnN0IGNoYXIgKl9fcGZ4KQogICAgIHRocm93ICgpICAgOwoKCgogCmV4dGVybiBpbnQgZmNsb3Nl
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCgoKCgoKCiAKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKCQkgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbW9kZXMpIHRocm93ICgpIDsKIApleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCgkJICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbW9kZXMsCgkJICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg
KCkgOwojIDIxOSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKCgoKCgoKCiAKZXh0ZXJuIEZJ
TEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCkgOwoK
CiMgMjQ4ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgogCgpleHRlcm4gdm9pZCBzZXRidWYg
KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93
ICgpIDsKIAoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwg
Y2hhciAqX19yZXN0cmljdCBfX2J1ZiwKCQkgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRo
cm93ICgpIDsKCgogCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCgkJICAgICAgIHNpemVfdCBfX3NpemUpIHRo
cm93ICgpIDsKCiAKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpIDsKCgoKIApleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s
CgkJICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKSA7
CiAKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg
Li4uKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywKCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgp
IDsKCiAKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKCQkgICAgIF9fZ251Y192YV9saXN0ICBfX2FyZykg
dGhyb3cgKCkgOwogCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCAgX19hcmcpCiAgICAgdGhyb3cgKCkgOwogCmV4dGVy
biBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsCgkJICAgICBfX2dudWNfdmFfbGlzdCAgX19hcmcpIHRocm93ICgpIDsK
CgogCmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19t
YXhsZW4sCgkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAg
ICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQp
KSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBf
X21heGxlbiwKCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251
Y192YV9saXN0ICBfX2FyZykKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0
X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CgoKIyAzMjAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAz
CgoKCiAKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCgkJICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpIDsKIApleHRl
cm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhy
b3cgKCkgOwogCmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
LAoJCSAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKSA7
CgojIDM0NiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKIApleHRlcm4gaW50IGZnZXRjIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgZ2V0Y2hhciAodm9pZCkgdGhyb3cgKCkgOwoKIAoK
CgoKIApleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7
CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCkgOwoKCgogCmV4dGVy
biBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCiAKZXh0
ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKZXh0ZXJu
IGludCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKIApleHRlcm4g
aW50IHB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpIDsKCiAKCgoKCiAKZXh0ZXJuIGludCBmcHV0
Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKCgoKIApleHRl
cm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7
CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCkgOwoKCgoKIApl
eHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQg
cHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKCgoKIApleHRlcm4gY2hh
ciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKQogICAgIHRocm93ICgpIDsKCgoKCgoKCiAKCmV4dGVybiBjaGFyICpnZXRzIChj
aGFyICpfX3MpIHRocm93ICgpIDsKCgojIDQzNiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoK
IApleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpIDsKCgoKCgoKCiAKZXh0ZXJuIGludCBw
dXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIGludCB1bmdldGMg
KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKIApleHRlcm4gc2l6ZV90IGZy
ZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAoJCSAgICAgc2l6ZV90
IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCkgOwogCmV4dGVybiBzaXpl
X3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs
CgkJICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpIDsKCgog
CmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNp
emVfdCBfX3NpemUsCgkJCSAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pIHRocm93ICgpIDsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9p
ZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKCQkJICAgICAgIHNpemVfdCBfX24s
IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpIDsKCgoKIApleHRlcm4gaW50IGZz
ZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cg
KCkgOwogCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsK
IApleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgogCgoKCgoK
CgoKCgoKCiAKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBm
cG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQgZnNl
dHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cgKCkgOwoj
IDUxOSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKCgoKCgoKCiAKZXh0ZXJuIHZvaWQgY2xl
YXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGludCBmZW9mIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpIDsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKSA7CgoKCiAKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9fcykg
dGhyb3cgKCkgOwoKIAoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIg
Kl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgoKCgoKCgogCmV4dGVybiBpbnQgZmlsZW5vIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCgogCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCgoKCiAKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2Nv
bnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKSA7Cgog
CmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCgoKIApleHRl
cm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0aHJvdyAoKSA7CgoKCgoKCgoKCiMgNjAxICIv
dXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgoKIAoKIApleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgogCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpIDsKCiAKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCgoKCgoKCgogCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9zdGRpby5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIApp
bmxpbmUgIGludAp2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9fZ251
Y192YV9saXN0ICBfX2FyZykgdGhyb3cgKCkgCnsKICByZXR1cm4gdmZwcmludGYgKHN0ZG91dCAs
IF9fZm10LCBfX2FyZyk7Cn0KCiAKaW5saW5lICBpbnQKZ2V0Y2hhciAodm9pZCkgdGhyb3cgKCkg
CnsKICByZXR1cm4gX0lPX2dldGMgKHN0ZGluICk7Cn0KCgoKIAppbmxpbmUgIGludApnZXRjX3Vu
bG9ja2VkIChGSUxFICpfX2ZwKSB0aHJvdyAoKSAKewogIHJldHVybiAoKCBfX2ZwICktPl9JT19y
ZWFkX3B0ciA+PSAoIF9fZnAgKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoIF9fZnAgKSA6ICoo
dW5zaWduZWQgY2hhciAqKSAoIF9fZnAgKS0+X0lPX3JlYWRfcHRyKyspIDsKfQoKIAppbmxpbmUg
IGludApnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKSAKewogIHJldHVybiAoKCBzdGRp
biAgKS0+X0lPX3JlYWRfcHRyID49ICggc3RkaW4gICktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cg
KCBzdGRpbiAgKSA6ICoodW5zaWduZWQgY2hhciAqKSAoIHN0ZGluICApLT5fSU9fcmVhZF9wdHIr
KykgOwp9CgoKCiAKaW5saW5lICBpbnQKcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCkgCnsKICBy
ZXR1cm4gX0lPX3B1dGMgKF9fYywgc3Rkb3V0ICk7Cn0KCgoKIAppbmxpbmUgIGludApmcHV0Y191
bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpIAp7CiAgcmV0dXJuICgo
KCAgX19zdHJlYW0gKS0+X0lPX3dyaXRlX3B0ciA+PSAoICBfX3N0cmVhbSApLT5fSU9fd3JpdGVf
ZW5kKSA/IF9fb3ZlcmZsb3cgKCAgX19zdHJlYW0gLCAodW5zaWduZWQgY2hhcikgKCBfX2MgKSkg
OiAodW5zaWduZWQgY2hhcikgKCooICBfX3N0cmVhbSApLT5fSU9fd3JpdGVfcHRyKysgPSAoIF9f
YyApKSkgOwp9CgoKCgogCmlubGluZSAgaW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKSAKewogIHJldHVybiAoKCggIF9fc3RyZWFtICktPl9JT193cml0
ZV9wdHIgPj0gKCAgX19zdHJlYW0gKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93ICggIF9f
c3RyZWFtICwgKHVuc2lnbmVkIGNoYXIpICggX19jICkpIDogKHVuc2lnbmVkIGNoYXIpICgqKCAg
X19zdHJlYW0gKS0+X0lPX3dyaXRlX3B0cisrID0gKCBfX2MgKSkpIDsKfQoKIAppbmxpbmUgIGlu
dApwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKSAKewogIHJldHVybiAoKCggIHN0
ZG91dCAgKS0+X0lPX3dyaXRlX3B0ciA+PSAoICBzdGRvdXQgICktPl9JT193cml0ZV9lbmQpID8g
X19vdmVyZmxvdyAoICBzdGRvdXQgICwgKHVuc2lnbmVkIGNoYXIpICggX19jICkpIDogKHVuc2ln
bmVkIGNoYXIpICgqKCAgc3Rkb3V0ICApLT5fSU9fd3JpdGVfcHRyKysgPSAoIF9fYyApKSkgOwp9
CgoKCgoKCgoKCgoKCgoKIAppbmxpbmUgIGludApmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCkgCnsKICByZXR1cm4gKCgoIF9fc3RyZWFtICktPl9mbGFncyAmIDB4MTAgKSAh
PSAwKSA7Cn0KCiAKaW5saW5lICBpbnQKZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCkgCnsKICByZXR1cm4gKCgoIF9fc3RyZWFtICktPl9mbGFncyAmIDB4MjAgKSAhPSAw
KSA7Cn0KCgoKCgoKIAoKIyAxNTYgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDMKCgojIDE3
MiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMwoKCiAKCiMgNjI5ICIvdXNyL2luY2x1ZGUv
c3RkaW8uaCIgMiAzCgoKCn0gCgoKCgojIDEyMCAiLi4vLi4vamlrZXMvc3JjL3BsYXRmb3JtLmgi
IDIKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1
ZGUvbGltaXRzLmgiIDEgMwogCgoKIAoKCgoKCiAKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYt
c3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzCiAKCgoKCgojIDEgIi91
c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL2xpbWl0cy5oIiAx
IDMKIAoKCiAKCiMgMTE0ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMv
aW5jbHVkZS9saW1pdHMuaCIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiAK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCgogCgojIDExMyAiL3Vzci9pbmNsdWRl
L2xpbWl0cy5oIiAzCgoKCgogIAoKCgoKIyAxNDAgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwoK
CgogCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiAKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgogCgoKIAoKCiAKCgogCgoKIAoKCgogCgoKCiAKCgogCgoKCiAK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIyAxNDggIi91c3IvaW5jbHVk
ZS9saW1pdHMuaCIgMiAzCgoKCgoKCiMgMTE3ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1s
aW51eC8yLjk1LjMvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCgojIDcgIi91c3IvbGliL2djYy1s
aWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKCgojIDEx
ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9saW1pdHMu
aCIgMiAzCgoKCgoKIAoKCgogCgoKCiAKCgoKCiAKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKIAoK
IAoKCgoKIAoKCgogCgoKCgoKCgoKIAoKCgogCgoKCgoKCgoKCgoKCgogCgoKCiMgMTA3ICIvdXNy
L2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9saW1pdHMuaCIgMwoK
CgoKIAoKCgoKCgoKCgojIDEyNCAiLi4vLi4vamlrZXMvc3JjL3BsYXRmb3JtLmgiIDIKCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CmV4dGVybiAiQyIgeyAKCiAKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgogCgojIDgxICIv
dXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAzCgojIDMzICIvdXNyL2luY2x1ZGUvbWF0aC5o
IiAyIDMKCgogCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDEgMwogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiMgNDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMwoK
IyA0MCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIApleHRlcm4gICBkb3VibGUgICAg
ICAgICAgYWNvcyAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAg
IGRvdWJsZSAgICAgICAgIF9fYWNvcyAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgp
ICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYXNpbiAgICAgICAgICAoZG91YmxlICBf
X3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYXNpbiAgICAgICAg
ICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAg
ICAgYXRhbiAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRv
dWJsZSAgICAgICAgIF9fYXRhbiAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAg
IDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYXRhbjIgICAgICAgICAgKGRvdWJsZSAgX195
LCBkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19h
dGFuMiAgICAgICAgICAoZG91YmxlICBfX3ksIGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7
CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBjb3MgICAgICAgICAgKGRvdWJsZSAgX194KSAg
ICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2NvcyAgICAgICAgICAoZG91
YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgc2lu
ICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAg
ICAgICAgX19zaW4gICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0
ZXJuICAgZG91YmxlICAgICAgICAgIHRhbiAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93
ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fdGFuICAgICAgICAgIChkb3VibGUgIF9f
eCkgICAgdGhyb3cgKCkgICAgOwoKCgoKCgoKIAoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAg
Y29zaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJs
ZSAgICAgICAgIF9fY29zaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsK
IApleHRlcm4gICBkb3VibGUgICAgICAgICAgc2luaCAgICAgICAgICAoZG91YmxlICBfX3gpICAg
IHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fc2luaCAgICAgICAgICAoZG91
YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgdGFu
aCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAg
ICAgICAgIF9fdGFuaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKCgog
CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBhY29zaCAgICAgICAgICAoZG91YmxlICBfX3gpICAg
IHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYWNvc2ggICAgICAgICAgKGRv
dWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGFz
aW5oICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91Ymxl
ICAgICAgICAgX19hc2luaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsK
IApleHRlcm4gICBkb3VibGUgICAgICAgICAgYXRhbmggICAgICAgICAgKGRvdWJsZSAgX194KSAg
ICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2F0YW5oICAgICAgICAgIChk
b3VibGUgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKCiAKCiAKZXh0ZXJuICAgZG91YmxlICAgICAg
ICAgIGV4cCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRv
dWJsZSAgICAgICAgIF9fZXhwICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgICAg
OwoKCgoKCgoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGZyZXhwICAgICAgICAgIChkb3Vi
bGUgIF9feCwgaW50ICpfX2V4cG9uZW50KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUg
ICAgICAgICBfX2ZyZXhwICAgICAgICAgIChkb3VibGUgIF9feCwgaW50ICpfX2V4cG9uZW50KSAg
ICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBsZGV4cCAgICAgICAg
ICAoZG91YmxlICBfX3gsIGludCBfX2V4cG9uZW50KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBk
b3VibGUgICAgICAgICBfX2xkZXhwICAgICAgICAgIChkb3VibGUgIF9feCwgaW50IF9fZXhwb25l
bnQpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGxvZyAgICAg
ICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAg
IF9fbG9nICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4g
ICBkb3VibGUgICAgICAgICAgbG9nMTAgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAo
KSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2xvZzEwICAgICAgICAgIChkb3VibGUgIF9f
eCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgbW9kZiAgICAg
ICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgKl9faXB0cikgICAgdGhyb3cgKCkgIDsgZXh0ZXJu
ICAgZG91YmxlICAgICAgICAgX19tb2RmICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICAq
X19pcHRyKSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgZXhw
bTEgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUg
ICAgICAgICBfX2V4cG0xICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgICAgOwoK
IApleHRlcm4gICBkb3VibGUgICAgICAgICAgbG9nMXAgICAgICAgICAgKGRvdWJsZSAgX194KSAg
ICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2xvZzFwICAgICAgICAgIChk
b3VibGUgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAg
bG9nYiAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJs
ZSAgICAgICAgIF9fbG9nYiAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsK
CgoKCgoKCgoKCgogCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBwb3cgICAgICAgICAgKGRv
dWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAg
ICAgICAgX19wb3cgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgdGhyb3cg
KCkgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgc3FydCAgICAgICAgICAoZG91Ymxl
ICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fc3FydCAgICAg
ICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKCgogCmV4dGVybiAgIGRvdWJsZSAg
ICAgICAgICBoeXBvdCAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICB0aHJv
dyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2h5cG90ICAgICAgICAgIChkb3VibGUg
IF9feCwgZG91YmxlICBfX3kpICAgIHRocm93ICgpICAgIDsKCgoKIApleHRlcm4gICBkb3VibGUg
ICAgICAgICAgY2JydCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVy
biAgIGRvdWJsZSAgICAgICAgIF9fY2JydCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93
ICgpICAgIDsKCgoKIAoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgY2VpbCAgICAgICAgICAo
ZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fY2Vp
bCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZG91
YmxlICAgICAgICAgIGZhYnMgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgIF9f
YXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAgZG91YmxlICAgICAgICAg
X19mYWJzICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9f
ICggICAgKF9fY29uc3RfXykgICkgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGZsb29y
ICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAg
ICAgICAgX19mbG9vciAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKCiAK
ZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGZtb2QgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3Vi
bGUgIF9feSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19mbW9kICAg
ICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgIHRocm93ICgpICAgIDsKCgogCgpl
eHRlcm4gIGludCAgICAgX19pc2luZiAgICAgIChkb3VibGUgIF9fdmFsdWUpICB0aHJvdyAoKSAg
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuICBpbnQgICAgIF9fZmluaXRl
ICAgICAgKGRvdWJsZSAgX192YWx1ZSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCiAKCmV4dGVybiAgaW50ICAgICBpc2luZiAgICAgIChkb3VibGUgIF9fdmFsdWUp
ICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuICBpbnQg
ICAgIGZpbml0ZSAgICAgIChkb3VibGUgIF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCiAKCgoKCgpleHRlcm4gICBkb3VibGUgICAgICAgICAgaW5mbmFu
ICAgICAgICAgIChpbnQgX19lcnJvcikgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAg
KF9fY29uc3RfXykgICk7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9faW5mbmFuICAgICAgICAg
IChpbnQgX19lcnJvcikgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3Rf
XykgICkgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGRyZW0gICAgICAgICAgKGRvdWJs
ZSAgX194LCBkb3VibGUgIF9feSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAg
ICAgX19kcmVtICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgIHRocm93ICgp
ICAgIDsKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBzaWduaWZpY2FuZCAgICAgICAgICAo
ZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fc2ln
bmlmaWNhbmQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CgoKCiAKZXh0
ZXJuICAgZG91YmxlICAgICAgICAgIGNvcHlzaWduICAgICAgICAgIChkb3VibGUgIF9feCwgZG91
YmxlICBfX3kpICAgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICAp
OyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2NvcHlzaWduICAgICAgICAgIChkb3VibGUgIF9f
eCwgZG91YmxlICBfX3kpICAgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0
X18pICApICA7CgoKCgoKCgoKIApleHRlcm4gIGludCAgICAgX19pc25hbiAgICAgIChkb3VibGUg
IF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgogCmV4
dGVybiAgaW50ICAgICBpc25hbiAgICAgIChkb3VibGUgIF9fdmFsdWUpICB0aHJvdyAoKSAgIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGow
ICAgICAgICAgIChkb3VibGUgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAg
ICBfX2owICAgICAgICAgIChkb3VibGUgKSAgICB0aHJvdyAoKSAgICA7CmV4dGVybiAgIGRvdWJs
ZSAgICAgICAgICBqMSAgICAgICAgICAoZG91YmxlICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAg
ZG91YmxlICAgICAgICAgX19qMSAgICAgICAgICAoZG91YmxlICkgICAgdGhyb3cgKCkgICAgOwpl
eHRlcm4gICBkb3VibGUgICAgICAgICAgam4gICAgICAgICAgKGludCwgZG91YmxlICkgICAgdGhy
b3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19qbiAgICAgICAgICAoaW50LCBkb3Vi
bGUgKSAgICB0aHJvdyAoKSAgICA7CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICB5MCAgICAgICAg
ICAoZG91YmxlICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX195MCAg
ICAgICAgICAoZG91YmxlICkgICAgdGhyb3cgKCkgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAg
ICAgeTEgICAgICAgICAgKGRvdWJsZSApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAg
ICAgICAgIF9feTEgICAgICAgICAgKGRvdWJsZSApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAg
ZG91YmxlICAgICAgICAgIHluICAgICAgICAgIChpbnQsIGRvdWJsZSApICAgIHRocm93ICgpICA7
IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9feW4gICAgICAgICAgKGludCwgZG91YmxlICkgICAg
dGhyb3cgKCkgICAgOwoKCgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgZXJmICAgICAgICAg
IChkb3VibGUgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2VyZiAg
ICAgICAgICAoZG91YmxlICkgICAgdGhyb3cgKCkgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAg
ICAgZXJmYyAgICAgICAgICAoZG91YmxlICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91Ymxl
ICAgICAgICAgX19lcmZjICAgICAgICAgIChkb3VibGUgKSAgICB0aHJvdyAoKSAgICA7CmV4dGVy
biAgIGRvdWJsZSAgICAgICAgICBsZ2FtbWEgICAgICAgICAgKGRvdWJsZSApICAgIHRocm93ICgp
ICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbGdhbW1hICAgICAgICAgIChkb3VibGUgKSAg
ICB0aHJvdyAoKSAgICA7CgoKCgoKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBnYW1tYSAg
ICAgICAgICAoZG91YmxlICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAg
X19nYW1tYSAgICAgICAgICAoZG91YmxlICkgICAgdGhyb3cgKCkgICAgOwoKCgogCgoKZXh0ZXJu
ICAgZG91YmxlICAgICAgICAgIGxnYW1tYV9yICAgICAgICAgICAgICAoZG91YmxlICwgaW50ICpf
X3NpZ25nYW1wKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2xnYW1t
YV9yICAgICAgICAgICAgICAoZG91YmxlICwgaW50ICpfX3NpZ25nYW1wKSAgICB0aHJvdyAoKSAg
ICA7CgoKCgogCgpleHRlcm4gICBkb3VibGUgICAgICAgICAgcmludCAgICAgICAgICAoZG91Ymxl
ICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fcmludCAgICAg
ICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAg
ICAgICAgIG5leHRhZnRlciAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICB0
aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAgZG91
YmxlICAgICAgICAgX19uZXh0YWZ0ZXIgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9f
eSkgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkgIDsKCgoK
CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHJlbWFpbmRlciAgICAgICAgICAoZG91YmxlICBf
X3gsIGRvdWJsZSAgX195KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBf
X3JlbWFpbmRlciAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICB0aHJvdyAo
KSAgICA7CgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgc2NhbGIgICAgICAgICAgKGRvdWJs
ZSAgX194LCBkb3VibGUgIF9fbikgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAg
ICAgX19zY2FsYiAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX19uKSAgICB0aHJvdyAo
KSAgICA7CgoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHNjYWxibiAgICAgICAgICAoZG91
YmxlICBfX3gsIGludCBfX24pICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAg
IF9fc2NhbGJuICAgICAgICAgIChkb3VibGUgIF9feCwgaW50IF9fbikgICAgdGhyb3cgKCkgICAg
OwoKCiAKZXh0ZXJuICAgaW50ICAgICAgICBpbG9nYiAgICAgICAgKGRvdWJsZSAgX194KSAgIHRo
cm93ICgpICA7IGV4dGVybiAgIGludCAgICAgICAgX19pbG9nYiAgICAgICAgKGRvdWJsZSAgX194
KSAgIHRocm93ICgpICAgOwoKCiMgMzQxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIg
MwoKIyA2MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCgoKCgogCgoKCgoKCgoKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgogCmV4dGVybiAgIGZsb2F0ICAgICAg
ICAgIGFjb3NmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBm
bG9hdCAgICAgICAgIF9fYWNvc2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAg
IDsKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBhc2luZiAgICAgICAgIChmbG9hdCAgIF9feCkg
ICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2FzaW5mICAgICAgICAgKGZs
b2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgYXRh
bmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAg
ICAgICAgX19hdGFuZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwogCmV4
dGVybiAgIGZsb2F0ICAgICAgICAgIGF0YW4yZiAgICAgICAgIChmbG9hdCAgIF9feSwgZmxvYXQg
ICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19hdGFuMmYgICAg
ICAgICAoZmxvYXQgICBfX3ksIGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVy
biAgIGZsb2F0ICAgICAgICAgIGNvc2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgp
ICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19jb3NmICAgICAgICAgKGZsb2F0ICAgX194KSAg
ICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgc2luZiAgICAgICAgIChm
bG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3NpbmYg
ICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBmbG9hdCAg
ICAgICAgICB0YW5mICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4g
ICBmbG9hdCAgICAgICAgIF9fdGFuZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkg
ICAgOwoKCgoKCgoKIAoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBjb3NoZiAgICAgICAgIChm
bG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2Nvc2hm
ICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgZmxvYXQg
ICAgICAgICAgc2luaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVy
biAgIGZsb2F0ICAgICAgICAgX19zaW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cg
KCkgICAgOwogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHRhbmhmICAgICAgICAgKGZsb2F0ICAg
X194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fdGFuaGYgICAgICAg
ICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAgIDsKCgogCmV4dGVybiAgIGZsb2F0ICAgICAg
ICAgIGFjb3NoZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAg
ZmxvYXQgICAgICAgICBfX2Fjb3NoZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkg
ICAgOwogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGFzaW5oZiAgICAgICAgIChmbG9hdCAgIF9f
eCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2FzaW5oZiAgICAgICAg
IChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwogCmV4dGVybiAgIGZsb2F0ICAgICAgICAg
IGF0YW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxv
YXQgICAgICAgICBfX2F0YW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAg
OwoKCiAKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZXhwZiAgICAgICAgIChmbG9hdCAgIF9f
eCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2V4cGYgICAgICAgICAo
ZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAgIDsKCgoKCgoKCgogCmV4dGVybiAgIGZsb2F0ICAg
ICAgICAgIGZyZXhwZiAgICAgICAgIChmbG9hdCAgIF9feCwgaW50ICpfX2V4cG9uZW50KSAgICB0
aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZnJleHBmICAgICAgICAgKGZsb2F0
ICAgX194LCBpbnQgKl9fZXhwb25lbnQpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZmxv
YXQgICAgICAgICAgbGRleHBmICAgICAgICAgKGZsb2F0ICAgX194LCBpbnQgX19leHBvbmVudCkg
ICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2xkZXhwZiAgICAgICAgIChm
bG9hdCAgIF9feCwgaW50IF9fZXhwb25lbnQpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAg
ZmxvYXQgICAgICAgICAgbG9nZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsg
ZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2xvZ2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRo
cm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgbG9nMTBmICAgICAgICAgKGZs
b2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbG9nMTBm
ICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGZsb2F0
ICAgICAgICAgIG1vZGZmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgICpfX2lwdHIpICAg
IHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19tb2RmZiAgICAgICAgIChmbG9h
dCAgIF9feCwgZmxvYXQgICAqX19pcHRyKSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBm
bG9hdCAgICAgICAgICBleHBtMWYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7
IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19leHBtMWYgICAgICAgICAoZmxvYXQgICBfX3gpICAg
IHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgbG9nMXBmICAgICAgICAg
KGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbG9n
MXBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGZs
b2F0ICAgICAgICAgIGxvZ2JmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBl
eHRlcm4gICBmbG9hdCAgICAgICAgIF9fbG9nYmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRo
cm93ICgpICAgIDsKCgoKCgoKCgoKCgogCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHBvd2Yg
ICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICB0aHJvdyAoKSAgOyBleHRlcm4g
ICBmbG9hdCAgICAgICAgIF9fcG93ZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kp
ICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgc3FydGYgICAgICAg
ICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19z
cXJ0ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKCiAKZXh0ZXJuICAg
ZmxvYXQgICAgICAgICAgaHlwb3RmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkg
ICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2h5cG90ZiAgICAgICAgIChm
bG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIHRocm93ICgpICAgIDsKCgoKIApleHRlcm4gICBm
bG9hdCAgICAgICAgICBjYnJ0ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsg
ZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2NicnRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0
aHJvdyAoKSAgICA7CgoKCiAKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgY2VpbGYgICAgICAg
ICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19j
ZWlsZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBm
bG9hdCAgICAgICAgICBmYWJzZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICBf
X2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4dGVybiAgIGZsb2F0ICAgICAgICAg
X19mYWJzZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9f
ICggICAgKF9fY29uc3RfXykgICkgIDsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZmxvb3Jm
ICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAg
ICAgIF9fZmxvb3JmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4
dGVybiAgIGZsb2F0ICAgICAgICAgIGZtb2RmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAg
IF9feSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2Ztb2RmICAgICAg
ICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgdGhyb3cgKCkgICAgOwoKCiAKCmV4dGVy
biAgaW50ICAgIF9faXNpbmZmICAgICAoZmxvYXQgICBfX3ZhbHVlKSAgdGhyb3cgKCkgICBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCmV4dGVybiAgaW50ICAgIF9fZmluaXRlZiAgICAg
KGZsb2F0ICAgX192YWx1ZSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCiAKCmV4dGVybiAgaW50ICAgIGlzaW5mZiAgICAgKGZsb2F0ICAgX192YWx1ZSkgIHRocm93
ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4gIGludCAgICBmaW5p
dGVmICAgICAoZmxvYXQgICBfX3ZhbHVlKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgogCgoKCgoKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgaW5mbmFuZiAgICAgICAg
IChpbnQgX19lcnJvcikgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3Rf
XykgICk7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19pbmZuYW5mICAgICAgICAgKGludCBfX2Vy
cm9yKSAgICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoK
IApleHRlcm4gICBmbG9hdCAgICAgICAgICBkcmVtZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxv
YXQgICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19kcmVtZiAg
ICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIHRocm93ICgpICAgIDsKCgogCmV4
dGVybiAgIGZsb2F0ICAgICAgICAgIHNpZ25pZmljYW5kZiAgICAgICAgIChmbG9hdCAgIF9feCkg
ICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3NpZ25pZmljYW5kZiAgICAg
ICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKCgogCmV4dGVybiAgIGZsb2F0ICAg
ICAgICAgIGNvcHlzaWduZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIHRo
cm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBmbG9h
dCAgICAgICAgIF9fY29weXNpZ25mICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkg
ICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkgIDsKCgoKCgoK
CgogCmV4dGVybiAgaW50ICAgIF9faXNuYW5mICAgICAoZmxvYXQgICBfX3ZhbHVlKSAgdGhyb3cg
KCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKIApleHRlcm4gIGludCAgICBpc25h
bmYgICAgIChmbG9hdCAgIF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgajBmICAgICAgICAgKGZsb2F0ICAp
ICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19qMGYgICAgICAgICAoZmxv
YXQgICkgICAgdGhyb3cgKCkgICAgOwpleHRlcm4gICBmbG9hdCAgICAgICAgICBqMWYgICAgICAg
ICAoZmxvYXQgICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2oxZiAg
ICAgICAgIChmbG9hdCAgKSAgICB0aHJvdyAoKSAgICA7CmV4dGVybiAgIGZsb2F0ICAgICAgICAg
IGpuZiAgICAgICAgIChpbnQsIGZsb2F0ICApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0
ICAgICAgICAgX19qbmYgICAgICAgICAoaW50LCBmbG9hdCAgKSAgICB0aHJvdyAoKSAgICA7CmV4
dGVybiAgIGZsb2F0ICAgICAgICAgIHkwZiAgICAgICAgIChmbG9hdCAgKSAgICB0aHJvdyAoKSAg
OyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9feTBmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93
ICgpICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgeTFmICAgICAgICAgKGZsb2F0ICApICAg
IHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX195MWYgICAgICAgICAoZmxvYXQg
ICkgICAgdGhyb3cgKCkgICAgOwpleHRlcm4gICBmbG9hdCAgICAgICAgICB5bmYgICAgICAgICAo
aW50LCBmbG9hdCAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9feW5m
ICAgICAgICAgKGludCwgZmxvYXQgICkgICAgdGhyb3cgKCkgICAgOwoKCgoKIApleHRlcm4gICBm
bG9hdCAgICAgICAgICBlcmZmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICA7IGV4dGVy
biAgIGZsb2F0ICAgICAgICAgX19lcmZmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICAg
IDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZXJmY2YgICAgICAgICAoZmxvYXQgICkgICAgdGhy
b3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2VyZmNmICAgICAgICAgKGZsb2F0ICAp
ICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgbGdhbW1hZiAgICAgICAg
IChmbG9hdCAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbGdhbW1h
ZiAgICAgICAgIChmbG9hdCAgKSAgICB0aHJvdyAoKSAgICA7CgoKCgoKCgogCmV4dGVybiAgIGZs
b2F0ICAgICAgICAgIGdhbW1hZiAgICAgICAgIChmbG9hdCAgKSAgICB0aHJvdyAoKSAgOyBleHRl
cm4gICBmbG9hdCAgICAgICAgIF9fZ2FtbWFmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgp
ICAgIDsKCgoKIAoKCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGxnYW1tYWZfciAgICAgICAgICAg
IChmbG9hdCAgLCBpbnQgKl9fc2lnbmdhbXApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0
ICAgICAgICAgX19sZ2FtbWFmX3IgICAgICAgICAgICAoZmxvYXQgICwgaW50ICpfX3NpZ25nYW1w
KSAgICB0aHJvdyAoKSAgICA7CgoKCgogCgpleHRlcm4gICBmbG9hdCAgICAgICAgICByaW50ZiAg
ICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAg
ICBfX3JpbnRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVy
biAgIGZsb2F0ICAgICAgICAgIG5leHRhZnRlcmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0
ICAgX195KSAgICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKTsg
ZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX25leHRhZnRlcmYgICAgICAgICAoZmxvYXQgICBfX3gs
IGZsb2F0ICAgX195KSAgICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9f
KSAgKSAgOwoKCgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICByZW1haW5kZXJmICAgICAgICAg
KGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQg
ICAgICAgICBfX3JlbWFpbmRlcmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAg
ICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBzY2FsYmYgICAgICAg
ICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX19uKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9h
dCAgICAgICAgIF9fc2NhbGJmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9fbikgICAg
dGhyb3cgKCkgICAgOwoKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHNjYWxibmYgICAgICAg
ICAoZmxvYXQgICBfX3gsIGludCBfX24pICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAg
ICAgICAgX19zY2FsYm5mICAgICAgICAgKGZsb2F0ICAgX194LCBpbnQgX19uKSAgICB0aHJvdyAo
KSAgICA7CgoKIApleHRlcm4gICBpbnQgICAgICAgaWxvZ2JmICAgICAgIChmbG9hdCAgIF9feCkg
ICB0aHJvdyAoKSAgOyBleHRlcm4gICBpbnQgICAgICAgX19pbG9nYmYgICAgICAgKGZsb2F0ICAg
X194KSAgIHRocm93ICgpICAgOwoKCiMgMzQxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMu
aCIgMwoKIyA4MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCgoKIAoKCgoKCgoKCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIApleHRlcm4gICBsb25nIGRvdWJs
ZSAgICAgICAgICBhY29zbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkg
IDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2Fjb3NsICAgICAgICAgKGxvbmcgZG91
YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAg
ICAgYXNpbmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVy
biAgIGxvbmcgZG91YmxlICAgICAgICAgX19hc2lubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9f
eCkgICAgdGhyb3cgKCkgICAgOwogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGF0YW5s
ICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25n
IGRvdWJsZSAgICAgICAgIF9fYXRhbmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRo
cm93ICgpICAgIDsKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBhdGFuMmwgICAgICAg
ICAobG9uZyBkb3VibGUgICBfX3ksIGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgOyBl
eHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fYXRhbjJsICAgICAgICAgKGxvbmcgZG91Ymxl
ICAgX195LCBsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBs
b25nIGRvdWJsZSAgICAgICAgICBjb3NsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0
aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fY29zbCAgICAgICAgIChs
b25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwogCmV4dGVybiAgIGxvbmcgZG91Ymxl
ICAgICAgICAgIHNpbmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7
IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19zaW5sICAgICAgICAgKGxvbmcgZG91Ymxl
ICAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAg
dGFubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAg
bG9uZyBkb3VibGUgICAgICAgICBfX3RhbmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAg
IHRocm93ICgpICAgIDsKCgoKCgoKCiAKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAg
Y29zaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAg
IGxvbmcgZG91YmxlICAgICAgICAgX19jb3NobCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkg
ICAgdGhyb3cgKCkgICAgOwogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHNpbmhsICAg
ICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRv
dWJsZSAgICAgICAgIF9fc2luaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93
ICgpICAgIDsKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICB0YW5obCAgICAgICAgIChs
b25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAg
ICAgICBfX3RhbmhsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7
CgoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBhY29zaGwgICAgICAgICAobG9uZyBk
b3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAg
X19hY29zaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApl
eHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBhc2luaGwgICAgICAgICAobG9uZyBkb3VibGUg
ICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19hc2lu
aGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4g
ICBsb25nIGRvdWJsZSAgICAgICAgICBhdGFuaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gp
ICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19hdGFuaGwgICAg
ICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKCgogCgogCmV4dGVybiAg
IGxvbmcgZG91YmxlICAgICAgICAgIGV4cGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAg
IHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19leHBsICAgICAgICAg
KGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7CgoKCgoKCgoKIApleHRlcm4gICBs
b25nIGRvdWJsZSAgICAgICAgICBmcmV4cGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGlu
dCAqX19leHBvbmVudCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAg
ICBfX2ZyZXhwbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgaW50ICpfX2V4cG9uZW50KSAg
ICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGxkZXhwbCAg
ICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgaW50IF9fZXhwb25lbnQpICAgIHRocm93ICgpICA7
IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19sZGV4cGwgICAgICAgICAobG9uZyBkb3Vi
bGUgICBfX3gsIGludCBfX2V4cG9uZW50KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGxv
bmcgZG91YmxlICAgICAgICAgIGxvZ2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRo
cm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19sb2dsICAgICAgICAgKGxv
bmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91Ymxl
ICAgICAgICAgIGxvZzEwbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkg
IDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2xvZzEwbCAgICAgICAgIChsb25nIGRv
dWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAg
ICAgICBtb2RmbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICAqX19p
cHRyKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fbW9kZmwg
ICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgKl9faXB0cikgICAgdGhy
b3cgKCkgICAgOwoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgZXhwbTFsICAgICAg
ICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJs
ZSAgICAgICAgIF9fZXhwbTFsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAo
KSAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGxvZzFwbCAgICAgICAgIChs
b25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAg
ICAgICBfX2xvZzFwbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAg
OwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBsb2dibCAgICAgICAgIChsb25nIGRv
dWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBf
X2xvZ2JsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7CgoKCgoK
CgoKCgoKIAoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBwb3dsICAgICAgICAgKGxv
bmcgZG91YmxlICAgX194LCBsb25nIGRvdWJsZSAgIF9feSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJu
ICAgbG9uZyBkb3VibGUgICAgICAgICBfX3Bvd2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gs
IGxvbmcgZG91YmxlICAgX195KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91
YmxlICAgICAgICAgIHNxcnRsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAo
KSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fc3FydGwgICAgICAgICAobG9uZyBk
b3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAg
ICAgICAgIGh5cG90bCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBf
X3kpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19oeXBvdGwg
ICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICB0aHJvdyAo
KSAgICA7CgoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgY2JydGwgICAgICAgICAo
bG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAg
ICAgICAgX19jYnJ0bCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAg
OwoKCgogCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGNlaWxsICAgICAgICAgKGxv
bmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAg
ICAgIF9fY2VpbGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsK
CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgZmFic2wgICAgICAgICAobG9uZyBkb3Vi
bGUgICBfX3gpICAgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICAp
OyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fZmFic2wgICAgICAgICAobG9uZyBkb3Vi
bGUgICBfX3gpICAgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICAp
ICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGZsb29ybCAgICAgICAgIChsb25n
IGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAg
ICBfX2Zsb29ybCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoK
IApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBmbW9kbCAgICAgICAgIChsb25nIGRvdWJs
ZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcg
ZG91YmxlICAgICAgICAgX19mbW9kbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBk
b3VibGUgICBfX3kpICAgIHRocm93ICgpICAgIDsKCgogCgpleHRlcm4gIGludCAgICBfX2lzaW5m
bCAgICAgKGxvbmcgZG91YmxlICAgX192YWx1ZSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKIApleHRlcm4gIGludCAgICBfX2Zpbml0ZWwgICAgIChsb25nIGRvdWJs
ZSAgIF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgog
CgpleHRlcm4gIGludCAgICBpc2luZmwgICAgIChsb25nIGRvdWJsZSAgIF9fdmFsdWUpICB0aHJv
dyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuICBpbnQgICAgZmlu
aXRlbCAgICAgKGxvbmcgZG91YmxlICAgX192YWx1ZSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKIAoKCgoKCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGlu
Zm5hbmwgICAgICAgICAoaW50IF9fZXJyb3IpICAgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAo
ICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9faW5mbmFu
bCAgICAgICAgIChpbnQgX19lcnJvcikgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAg
KF9fY29uc3RfXykgICkgIDsKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgZHJlbWwg
ICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICB0aHJvdyAo
KSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fZHJlbWwgICAgICAgICAobG9uZyBk
b3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRl
cm4gICBsb25nIGRvdWJsZSAgICAgICAgICBzaWduaWZpY2FuZGwgICAgICAgICAobG9uZyBkb3Vi
bGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19z
aWduaWZpY2FuZGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsK
CgoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBjb3B5c2lnbmwgICAgICAgICAobG9u
ZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICB0aHJvdyAoKSAgIF9fYXR0cmli
dXRlX18gKCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBf
X2NvcHlzaWdubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kp
ICAgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgoKCgoK
CgoKIApleHRlcm4gIGludCAgICBfX2lzbmFubCAgICAgKGxvbmcgZG91YmxlICAgX192YWx1ZSkg
IHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCiAKZXh0ZXJuICBpbnQg
ICAgaXNuYW5sICAgICAobG9uZyBkb3VibGUgICBfX3ZhbHVlKSAgdGhyb3cgKCkgICBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGow
bCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRv
dWJsZSAgICAgICAgIF9fajBsICAgICAgICAgKGxvbmcgZG91YmxlICApICAgIHRocm93ICgpICAg
IDsKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgajFsICAgICAgICAgKGxvbmcgZG91Ymxl
ICApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19qMWwgICAg
ICAgICAobG9uZyBkb3VibGUgICkgICAgdGhyb3cgKCkgICAgOwpleHRlcm4gICBsb25nIGRvdWJs
ZSAgICAgICAgICBqbmwgICAgICAgICAoaW50LCBsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAg
OyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fam5sICAgICAgICAgKGludCwgbG9uZyBk
b3VibGUgICkgICAgdGhyb3cgKCkgICAgOwpleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICB5
MGwgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBk
b3VibGUgICAgICAgICBfX3kwbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAg
ICA7CmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHkxbCAgICAgICAgIChsb25nIGRvdWJs
ZSAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9feTFsICAg
ICAgICAgKGxvbmcgZG91YmxlICApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgbG9uZyBkb3Vi
bGUgICAgICAgICAgeW5sICAgICAgICAgKGludCwgbG9uZyBkb3VibGUgICkgICAgdGhyb3cgKCkg
IDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3lubCAgICAgICAgIChpbnQsIGxvbmcg
ZG91YmxlICApICAgIHRocm93ICgpICAgIDsKCgoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAg
ICAgICAgZXJmbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4g
ICBsb25nIGRvdWJsZSAgICAgICAgIF9fZXJmbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICB0
aHJvdyAoKSAgICA7CmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGVyZmNsICAgICAgICAg
KGxvbmcgZG91YmxlICApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAg
ICAgX19lcmZjbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgICA7CmV4dGVy
biAgIGxvbmcgZG91YmxlICAgICAgICAgIGxnYW1tYWwgICAgICAgICAobG9uZyBkb3VibGUgICkg
ICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2xnYW1tYWwgICAg
ICAgICAobG9uZyBkb3VibGUgICkgICAgdGhyb3cgKCkgICAgOwoKCgoKCgoKIApleHRlcm4gICBs
b25nIGRvdWJsZSAgICAgICAgICBnYW1tYWwgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgdGhy
b3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2dhbW1hbCAgICAgICAgIChs
b25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgICA7CgoKCiAKCgpleHRlcm4gICBsb25nIGRvdWJs
ZSAgICAgICAgICBsZ2FtbWFsX3IgICAgICAgICAgICAobG9uZyBkb3VibGUgICwgaW50ICpfX3Np
Z25nYW1wKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fbGdh
bW1hbF9yICAgICAgICAgICAgKGxvbmcgZG91YmxlICAsIGludCAqX19zaWduZ2FtcCkgICAgdGhy
b3cgKCkgICAgOwoKCgoKIAoKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgcmludGwgICAg
ICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91
YmxlICAgICAgICAgX19yaW50bCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cg
KCkgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBuZXh0YWZ0ZXJsICAgICAg
ICAgKGxvbmcgZG91YmxlICAgX194LCBsb25nIGRvdWJsZSAgIF9feSkgICAgdGhyb3cgKCkgICBf
X2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4dGVybiAgIGxvbmcgZG91YmxlICAg
ICAgICAgX19uZXh0YWZ0ZXJsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194LCBsb25nIGRvdWJs
ZSAgIF9feSkgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkg
IDsKCgoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgcmVtYWluZGVybCAgICAgICAg
IChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgIHRocm93ICgpICA7IGV4
dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19yZW1haW5kZXJsICAgICAgICAgKGxvbmcgZG91
YmxlICAgX194LCBsb25nIGRvdWJsZSAgIF9feSkgICAgdGhyb3cgKCkgICAgOwoKCiAKZXh0ZXJu
ICAgbG9uZyBkb3VibGUgICAgICAgICAgc2NhbGJsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194
LCBsb25nIGRvdWJsZSAgIF9fbikgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUg
ICAgICAgICBfX3NjYWxibCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUg
ICBfX24pICAgIHRocm93ICgpICAgIDsKCgoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAg
ICBzY2FsYm5sICAgICAgICAgKGxvbmcgZG91YmxlICAgX194LCBpbnQgX19uKSAgICB0aHJvdyAo
KSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fc2NhbGJubCAgICAgICAgIChsb25n
IGRvdWJsZSAgIF9feCwgaW50IF9fbikgICAgdGhyb3cgKCkgICAgOwoKCiAKZXh0ZXJuICAgaW50
ICAgICAgIGlsb2dibCAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgdGhyb3cgKCkgIDsgZXh0
ZXJuICAgaW50ICAgICAgIF9faWxvZ2JsICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICB0aHJv
dyAoKSAgIDsKCgojIDM0MSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKCiMgOTkg
Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCgoKCgoKCgoKCgoKIApleHRlcm4gaW50IHNpZ25n
YW07CgoKCiAKIyAyMzYgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKCgoKIAp0eXBlZGVmIGVudW0K
ewogIF9JRUVFXyA9IC0xLAkgCiAgX1NWSURfLAkgCiAgX1hPUEVOXywJIAogIF9QT1NJWF8sCiAg
X0lTT0NfCSAKfSBfTElCX1ZFUlNJT05fVFlQRTsKCiAKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZ
UEUgX0xJQl9WRVJTSU9OOwoKCgoKIAoKCgoKCnN0cnVjdCBfX2V4Y2VwdGlvbgoKCgogIHsKICAg
IGludCB0eXBlOwogICAgY2hhciAqbmFtZTsKICAgIGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFy
ZzI7CiAgICBkb3VibGUgcmV0dmFsOwogIH07CgoKZXh0ZXJuIGludCBtYXRoZXJyIChzdHJ1Y3Qg
X19leGNlcHRpb24gKl9fZXhjKSB0aHJvdyAoKTsKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgogCgoKIyAzMzggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKCgoK
IAoKCgoKCgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxNDYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhp
bmxpbmUuaCIgMwoKCgogCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjUyICIv
dXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCl9faW5saW5lICAgZG91YmxlICAgICBfX3NnbiAgICggZG91YmxlICkg
dGhyb3cgKCkgOwlfX2lubGluZSAgICBkb3VibGUgICAgICAgIF9fc2duICAgICggIGRvdWJsZSAg
ICAgICAgIF9feCAgICkgdGhyb3cgKCkgCXsJICAgICAgICByZXR1cm4gX194ID09IDAuMCA/IDAu
MCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKSAgIDsJfSAgCV9faW5saW5lICAgZmxvYXQgICAg
ICBfX3NnbmYgICAgKCBmbG9hdCApIHRocm93ICgpIDsJX19pbmxpbmUgICAgZmxvYXQgICAgICAg
ICBfX3NnbmYgICAgICggIGZsb2F0ICAgICAgICAgX194ICAgKSB0aHJvdyAoKSAJewkgICAgICAg
IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApICAgOwl9
ICAJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAgIF9fc2dubCAgICAoIGxvbmcgZG91YmxlICkg
dGhyb3cgKCkgOwlfX2lubGluZSAgICBsb25nIGRvdWJsZSAgICAgICAgIF9fc2dubCAgICAgKCAg
bG9uZyBkb3VibGUgICAgICAgICBfX3ggICApIHRocm93ICgpIAl7CSAgICAgICAgcmV0dXJuIF9f
eCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCkgICA7CX0gICAKCgogCiMg
NDY2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKCgoKCgoKCgoKX19pbmxpbmUg
ICBkb3VibGUgICAgIGF0YW4yICAgKCBkb3VibGUgICAgICBfX3kgICwgIGRvdWJsZSAgICAgIF9f
eCAgKSB0aHJvdyAoKSAgewkgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJX19hc20g
X192b2xhdGlsZV9fCSgiZnBhdGFuIgk6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIg
KF9feSkgOiAic3QoMSkiKTsJcmV0dXJuIF9fdmFsdWUgICA7CX0gCV9faW5saW5lICAgZmxvYXQg
ICAgICBhdGFuMmYgICAgKCBmbG9hdCAgICAgIF9feSAgLCAgZmxvYXQgICAgICBfX3ggICkgdGhy
b3cgKCkgIHsJICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CV9fYXNtIF9fdm9sYXRp
bGVfXwkoImZwYXRhbiIJOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDog
InN0KDEpIik7CXJldHVybiBfX3ZhbHVlICAgOwl9IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAg
ICAgYXRhbjJsICAgICggbG9uZyBkb3VibGUgICAgICBfX3kgICwgIGxvbmcgZG91YmxlICAgICAg
X194ICApIHRocm93ICgpICB7CSAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOwlfX2Fz
bSBfX3ZvbGF0aWxlX18JKCJmcGF0YW4iCTogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1
IiAoX195KSA6ICJzdCgxKSIpOwlyZXR1cm4gX192YWx1ZSAgIDsJfSAgCl9faW5saW5lICAgbG9u
ZyBkb3VibGUgICAgX19hdGFuMmwgICggbG9uZyBkb3VibGUgICAgX195ICwgIGxvbmcgZG91Ymxl
ICAgIF9feCApIHRocm93ICgpICB7CSAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJX19h
c20gX192b2xhdGlsZV9fCSgiZnBhdGFuIgk6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAi
dSIgKF9feSkgOiAic3QoMSkiKTsJcmV0dXJuIF9fdmFsdWUgIDsJfSAKCgpfX2lubGluZSAgIGRv
dWJsZSAgICAgZm1vZCAgICggZG91YmxlICAgICAgX194ICAsICBkb3VibGUgICAgICBfX3kgICkg
dGhyb3cgKCkgIHsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAg
ICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCIxOglmcHJlbVxuXHQiCQkJ
CQkJICAgICAgICAgICAiZm5zdHN3CSUlYXhcblx0IgkJCQkJCSAgICAgICAgICAgInNhaGZcblx0
IgkJCQkJCQkJICAgICAgICAgICAianAJMWIiCQkJCQkJCSAgICAgICAgICAgOiAiPXQiIChfX3Zh
bHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7CQkgICAgICAgIHJldHVy
biBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBmbW9kZiAgICAoIGZsb2F0ICAg
ICAgX194ICAsICBmbG9hdCAgICAgIF9feSAgKSB0aHJvdyAoKSAgewkgICAgICByZWdpc3RlciBs
b25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZV9fCQkJCQkJ
CSAgICAgICAgICAoIjE6CWZwcmVtXG5cdCIJCQkJCQkgICAgICAgICAgICJmbnN0c3cJJSVheFxu
XHQiCQkJCQkJICAgICAgICAgICAic2FoZlxuXHQiCQkJCQkJCQkgICAgICAgICAgICJqcAkxYiIJ
CQkJCQkJICAgICAgICAgICA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkg
OiAiYXgiLCAiY2MiKTsJCSAgICAgICAgcmV0dXJuIF9fdmFsdWUgIDsJfSAJX19pbmxpbmUgICBs
b25nIGRvdWJsZSAgICAgIGZtb2RsICAgICggbG9uZyBkb3VibGUgICAgICBfX3ggICwgIGxvbmcg
ZG91YmxlICAgICAgX195ICApIHRocm93ICgpICB7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fdmFsdWU7CQkJCQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAg
ICgiMToJZnByZW1cblx0IgkJCQkJCSAgICAgICAgICAgImZuc3RzdwklJWF4XG5cdCIJCQkJCQkg
ICAgICAgICAgICJzYWhmXG5cdCIJCQkJCQkJCSAgICAgICAgICAgImpwCTFiIgkJCQkJCQkgICAg
ICAgICAgIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJj
YyIpOwkJICAgICAgICByZXR1cm4gX192YWx1ZSAgOwl9ICAKIyA0ODggIi91c3IvaW5jbHVkZS9i
aXRzL21hdGhpbmxpbmUuaCIgMwoKCl9faW5saW5lICAgIGRvdWJsZSAgICAgICAgc3FydCAgICAo
ICBkb3VibGUgICBfX3gpIHRocm93ICgpIAl7CXJlZ2lzdGVyICAgZG91YmxlICAgX19yZXN1bHQ7
CV9fYXNtIF9fdm9sYXRpbGVfXyAoICAgICAgImZzcXJ0IiAgICA6ICI9dCIgKF9fcmVzdWx0KSA6
ICAgIjAiIChfX3gpICk7CXJldHVybiBfX3Jlc3VsdDsJfSAgCV9faW5saW5lICAgIGZsb2F0ICAg
ICAgICAgc3FydGYgICAgICggIGZsb2F0ICAgX194KSB0aHJvdyAoKSAJewlyZWdpc3RlciAgIGZs
b2F0ICAgX19yZXN1bHQ7CV9fYXNtIF9fdm9sYXRpbGVfXyAoICAgICAgImZzcXJ0IiAgICA6ICI9
dCIgKF9fcmVzdWx0KSA6ICAgIjAiIChfX3gpICk7CXJldHVybiBfX3Jlc3VsdDsJfSAgCV9faW5s
aW5lICAgIGxvbmcgZG91YmxlICAgICAgICAgc3FydGwgICAgICggIGxvbmcgZG91YmxlICAgX194
KSB0aHJvdyAoKSAJewlyZWdpc3RlciAgIGxvbmcgZG91YmxlICAgX19yZXN1bHQ7CV9fYXNtIF9f
dm9sYXRpbGVfXyAoICAgICAgImZzcXJ0IiAgICA6ICI9dCIgKF9fcmVzdWx0KSA6ICAgIjAiIChf
X3gpICk7CXJldHVybiBfX3Jlc3VsdDsJfSAgIApfX2lubGluZSAgICBsb25nIGRvdWJsZSAgICAg
ICBfX3NxcnRsICAgKCAgbG9uZyBkb3VibGUgICBfX3gpIHRocm93ICgpIAl7CXJlZ2lzdGVyICAg
bG9uZyBkb3VibGUgICBfX3Jlc3VsdDsJX19hc20gX192b2xhdGlsZV9fICggICAgImZzcXJ0IiAg
IDogIj10IiAoX19yZXN1bHQpIDogICAiMCIgKF9feCkgKTsJcmV0dXJuIF9fcmVzdWx0Owl9ICAK
CgpfX2lubGluZSAgIGRvdWJsZSAgICBmYWJzICAoIGRvdWJsZSAgICBfX3ggKSB0aHJvdyAoKSAJ
ewkgIHJldHVybiBfX2J1aWx0aW5fZmFicyAoX194KSA7CX0gCl9faW5saW5lICAgZmxvYXQgICAg
ZmFic2YgICggZmxvYXQgICAgX194ICkgdGhyb3cgKCkgCXsJICByZXR1cm4gX19idWlsdGluX2Zh
YnNmIChfX3gpIDsJfSAKX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICBmYWJzbCAgKCBsb25nIGRv
dWJsZSAgICBfX3ggKSB0aHJvdyAoKSAJewkgIHJldHVybiBfX2J1aWx0aW5fZmFic2wgKF9feCkg
Owl9IApfX2lubGluZSAgIGxvbmcgZG91YmxlICAgIF9fZmFic2wgICggbG9uZyBkb3VibGUgICAg
X194ICkgdGhyb3cgKCkgCXsJICByZXR1cm4gX19idWlsdGluX2ZhYnNsIChfX3gpIDsJfSAKCgoK
CgojIDUxNCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCgoKX19pbmxpbmUgICBk
b3VibGUgICAgIGF0YW4gICAoIGRvdWJsZSAgX194KSB0aHJvdyAoKSAJewlyZWdpc3RlciAgZG91
YmxlICBfX3Jlc3VsdDsJX19hc20gX192b2xhdGlsZV9fICggICAgImZsZDE7IGZwYXRhbiIgICA6
ICI9dCIgKF9fcmVzdWx0KSA6ICAgICAiMCIgKF9feCkgOiAic3QoMSkiICApOwlyZXR1cm4gX19y
ZXN1bHQ7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBhdGFuZiAgICAoIGZsb2F0ICBfX3gpIHRo
cm93ICgpIAl7CXJlZ2lzdGVyICBmbG9hdCAgX19yZXN1bHQ7CV9fYXNtIF9fdm9sYXRpbGVfXyAo
ICAgICJmbGQxOyBmcGF0YW4iICAgOiAiPXQiIChfX3Jlc3VsdCkgOiAgICAgIjAiIChfX3gpIDog
InN0KDEpIiAgKTsJcmV0dXJuIF9fcmVzdWx0Owl9IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAg
ICAgYXRhbmwgICAgKCBsb25nIGRvdWJsZSAgX194KSB0aHJvdyAoKSAJewlyZWdpc3RlciAgbG9u
ZyBkb3VibGUgIF9fcmVzdWx0OwlfX2FzbSBfX3ZvbGF0aWxlX18gKCAgICAiZmxkMTsgZnBhdGFu
IiAgIDogIj10IiAoX19yZXN1bHQpIDogICAgICIwIiAoX194KSA6ICJzdCgxKSIgICk7CXJldHVy
biBfX3Jlc3VsdDsJfSAgCgpfX2lubGluZSAgIGxvbmcgZG91YmxlICAgIF9fc2duMWwgICggbG9u
ZyBkb3VibGUgKSB0aHJvdyAoKSA7CV9faW5saW5lICAgIGxvbmcgZG91YmxlICAgICAgIF9fc2du
MWwgICAoICBsb25nIGRvdWJsZSAgICAgICBfX3ggICkgdGhyb3cgKCkgCXsJICAgICAgX19leHRl
bnNpb25fXyB1bmlvbiB7IGxvbmcgZG91YmxlIF9feGxkOyB1bnNpZ25lZCBpbnQgX194aVszXTsg
fSBfX24gPSAgICAgICAgICB7IF9feGxkOiBfX3ggfTsJCQkJCQkJICAgICAgICBfX24uX194aVsy
XSA9IChfX24uX194aVsyXSAmIDB4ODAwMCkgfCAweDNmZmY7CQkJICAgICAgICBfX24uX194aVsx
XSA9IDB4ODAwMDAwMDA7CQkJCQkJICAgICAgICBfX24uX194aVswXSA9IDA7CQkJCQkJCSAgICAg
ICAgcmV0dXJuIF9fbi5fX3hsZCAgOwl9ICAKCgoKCgoKCgojIDU0MCAiL3Vzci9pbmNsdWRlL2Jp
dHMvbWF0aGlubGluZS5oIiAzCgoKX19pbmxpbmUgICBkb3VibGUgICAgIGZsb29yICAgKCBkb3Vi
bGUgICAgICBfX3ggICkgdGhyb3cgKCkgCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192
YWx1ZTsJCQkJCQkgICAgICAgIF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7CQkJ
CQkgICAgICAgIF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7CQkJCSAgICAg
ICAgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7CQkJCSAgICAg
ICAgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgIAkJICAgICAgICBfX2FzbSBf
X3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsJCQkgICAgICAgIF9fYXNt
IF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsJCSAg
ICAgICAgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7CQkJCSAg
ICAgICAgcmV0dXJuIF9fdmFsdWUgIDsJfSAJX19pbmxpbmUgICBmbG9hdCAgICAgIGZsb29yZiAg
ICAoIGZsb2F0ICAgICAgX194ICApIHRocm93ICgpIAl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fdmFsdWU7CQkJCQkJICAgICAgICBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBf
X2N3OwkJCQkJICAgICAgICBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOwkJ
CQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOwkJ
CQkgICAgICAgIF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7ICAJCSAgICAgICAg
X19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7CQkJICAgICAg
ICBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194
KSk7CQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykp
OwkJCQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgbG9uZyBkb3VibGUg
ICAgICBmbG9vcmwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKSB0aHJvdyAoKSAJewkgICAg
ICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJCSAgICAgICAgX192b2xhdGlsZSB1
bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsJCQkJCSAgICAgICAgX192b2xhdGlsZSB1bnNpZ25lZCBz
aG9ydCBpbnQgX19jd3RtcDsJCQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUw
IiA6ICI9bSIgKF9fY3cpKTsJCQkJICAgICAgICBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwg
MHgwNDAwOyAgCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAo
X19jd3RtcCkpOwkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAo
X192YWx1ZSkgOiAiMCIgKF9feCkpOwkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cg
JTAiIDogOiAibSIgKF9fY3cpKTsJCQkJICAgICAgICByZXR1cm4gX192YWx1ZSAgOwl9ICAKIyA1
NTIgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwoKX19pbmxpbmUgICBkb3VibGUg
ICAgIGNlaWwgICAoIGRvdWJsZSAgICAgIF9feCAgKSB0aHJvdyAoKSAJewkgICAgICByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJCSAgICAgICAgX192b2xhdGlsZSB1bnNpZ25lZCBz
aG9ydCBpbnQgX19jdzsJCQkJCSAgICAgICAgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQg
X19jd3RtcDsJCQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIg
KF9fY3cpKTsJCQkJICAgICAgICBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyAg
CQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXAp
KTsJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUp
IDogIjAiIChfX3gpKTsJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDog
Im0iIChfX2N3KSk7CQkJCSAgICAgICAgcmV0dXJuIF9fdmFsdWUgIDsJfSAJX19pbmxpbmUgICBm
bG9hdCAgICAgIGNlaWxmICAgICggZmxvYXQgICAgICBfX3ggICkgdGhyb3cgKCkgCXsJICAgICAg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAgIF9fdm9sYXRpbGUgdW5z
aWduZWQgc2hvcnQgaW50IF9fY3c7CQkJCQkgICAgICAgIF9fdm9sYXRpbGUgdW5zaWduZWQgc2hv
cnQgaW50IF9fY3d0bXA7CQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIg
OiAiPW0iIChfX2N3KSk7CQkJCSAgICAgICAgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4
MDgwMDsgIAkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChf
X2N3dG1wKSk7CQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChf
X3ZhbHVlKSA6ICIwIiAoX194KSk7CQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAl
MCIgOiA6ICJtIiAoX19jdykpOwkJCQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5s
aW5lICAgbG9uZyBkb3VibGUgICAgICBjZWlsbCAgICAoIGxvbmcgZG91YmxlICAgICAgX194ICAp
IHRocm93ICgpIAl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CQkJCQkJICAg
ICAgICBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OwkJCQkJICAgICAgICBfX3Zv
bGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOwkJCQkgICAgICAgIF9fYXNtIF9fdm9s
YXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOwkJCQkgICAgICAgIF9fY3d0bXAgPSAo
X19jdyAmIDB4ZjNmZikgfCAweDA4MDA7ICAJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJm
bGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOwkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAo
ImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOwkJICAgICAgICBfX2FzbSBf
X3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsJCQkJICAgICAgICByZXR1cm4g
X192YWx1ZSAgOwl9ICAKIyA1NjMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwoK
CgoKCgoKCl9faW5saW5lICBkb3VibGUKbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX3kpIHRocm93
ICgpIAp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJX19hc20gX192b2xhdGlsZV9f
CSgiZnNjYWxlIgk6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJs
ZSkgX195KSk7CXJldHVybiBfX3ZhbHVlIDsKfQoKCiAKCgoKCgoKIAoKCgpfX2lubGluZSAgIGRv
dWJsZSAgICAgbG9nMXAgICAoIGRvdWJsZSAgICAgIF9feCAgKSB0aHJvdyAoKSAJewkgICAgICBy
ZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJCSAgICAgICAgaWYgKF9fZmFic2wgKF9f
eCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwgKQkJCQkgICAgICAgICAg
X192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7CQkJCQkJICAgICAgICBlbHNlCQkJCQkJCQkJICAg
ICAgICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgICAoImZsZGxuMlxuXHQi
CQkJCQkJCSAgICAgICAgICAgICAiZnhjaFxuXHQiCQkJCQkJCSAgICAgICAgICAgICAiZnlsMnhw
MSIJCQkJCQkJICAgICAgICAgICAgIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3Qo
MSkiKTsJCQkJICAgICAgICByZXR1cm4gX192YWx1ZSAgOwl9IAlfX2lubGluZSAgIGZsb2F0ICAg
ICAgbG9nMXBmICAgICggZmxvYXQgICAgICBfX3ggICkgdGhyb3cgKCkgCXsJICAgICAgcmVnaXN0
ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAgIGlmIChfX2ZhYnNsIChfX3gpID49
IDEuMCAtIDAuNSAqIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMICkJCQkJICAgICAgICAgIF9fdmFs
dWUgPSBsb2dsICgxLjAgKyBfX3gpOwkJCQkJCSAgICAgICAgZWxzZQkJCQkJCQkJCSAgICAgICAg
ICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICAgKCJmbGRsbjJcblx0IgkJCQkJ
CQkgICAgICAgICAgICAgImZ4Y2hcblx0IgkJCQkJCQkgICAgICAgICAgICAgImZ5bDJ4cDEiCQkJ
CQkJCSAgICAgICAgICAgICA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7
CQkJCSAgICAgICAgcmV0dXJuIF9fdmFsdWUgIDsJfSAJX19pbmxpbmUgICBsb25nIGRvdWJsZSAg
ICAgIGxvZzFwbCAgICAoIGxvbmcgZG91YmxlICAgICAgX194ICApIHRocm93ICgpIAl7CSAgICAg
IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CQkJCQkJICAgICAgICBpZiAoX19mYWJzbCAo
X194KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwTCApCQkJCSAgICAgICAg
ICBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsJCQkJCQkgICAgICAgIGVsc2UJCQkJCQkJCQkg
ICAgICAgICAgX19hc20gX192b2xhdGlsZV9fCQkJCQkJCSAgICAgICAgICAgICgiZmxkbG4yXG5c
dCIJCQkJCQkJICAgICAgICAgICAgICJmeGNoXG5cdCIJCQkJCQkJICAgICAgICAgICAgICJmeWwy
eHAxIgkJCQkJCQkgICAgICAgICAgICAgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJz
dCgxKSIpOwkJCQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7CX0gIAojIDYwMCAiL3Vzci9pbmNs
dWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCgoKIApfX2lubGluZSAgIGRvdWJsZSAgICAgYXNpbmgg
ICAoIGRvdWJsZSAgICAgIF9feCAgKSB0aHJvdyAoKSAJewkgICAgICByZWdpc3RlciBsb25nIGRv
dWJsZSAgX195ID0gX19mYWJzbCAoX194KTsJCQkJICAgICAgICByZXR1cm4gKGxvZzFwbCAoX195
ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KQkgICAgICAJ
ICAqIF9fc2duMWwgKF9feCkpICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBhc2luaGYgICAg
KCBmbG9hdCAgICAgIF9feCAgKSB0aHJvdyAoKSAJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJs
ZSAgX195ID0gX19mYWJzbCAoX194KTsJCQkJICAgICAgICByZXR1cm4gKGxvZzFwbCAoX195ICog
X195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KQkgICAgICAJICAq
IF9fc2duMWwgKF9feCkpICA7CX0gCV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBhc2luaGwg
ICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKSB0aHJvdyAoKSAJewkgICAgICByZWdpc3RlciBs
b25nIGRvdWJsZSAgX195ID0gX19mYWJzbCAoX194KTsJCQkJICAgICAgICByZXR1cm4gKGxvZzFw
bCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KQkg
ICAgICAJICAqIF9fc2duMWwgKF9feCkpICA7CX0gIAoKCgoKX19pbmxpbmUgICBkb3VibGUgICAg
IGFjb3NoICAgKCBkb3VibGUgICAgICBfX3ggICkgdGhyb3cgKCkgCXsJICAgICAgcmV0dXJuIGxv
Z2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKSAgOwl9
IAlfX2lubGluZSAgIGZsb2F0ICAgICAgYWNvc2hmICAgICggZmxvYXQgICAgICBfX3ggICkgdGhy
b3cgKCkgCXsJICAgICAgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBf
X3NxcnRsIChfX3ggKyAxLjApKSAgOwl9IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgYWNv
c2hsICAgICggbG9uZyBkb3VibGUgICAgICBfX3ggICkgdGhyb3cgKCkgCXsJICAgICAgcmV0dXJu
IGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKSAg
Owl9ICAKCgpfX2lubGluZSAgIGRvdWJsZSAgICAgYXRhbmggICAoIGRvdWJsZSAgICAgIF9feCAg
KSB0aHJvdyAoKSAJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChf
X3gpOwkJCQkgICAgICAgIHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4w
ICsgX195KSkgKiBfX3NnbjFsIChfX3gpICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBhdGFu
aGYgICAgKCBmbG9hdCAgICAgIF9feCAgKSB0aHJvdyAoKSAJewkgICAgICByZWdpc3RlciBsb25n
IGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOwkJCQkgICAgICAgIHJldHVybiAtMC41ICogbG9n
MXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpICA7CX0gCV9f
aW5saW5lICAgbG9uZyBkb3VibGUgICAgICBhdGFuaGwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9f
eCAgKSB0aHJvdyAoKSAJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNs
IChfX3gpOwkJCQkgICAgICAgIHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAo
MS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpICA7CX0gIAoKCgogCl9faW5saW5lICAgZG91Ymxl
ICAgICBoeXBvdCAgICggZG91YmxlICAgICAgX194ICAsICBkb3VibGUgICAgICBfX3kgICkgdGhy
b3cgKCkgIHsJICAgIHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpICA7CX0g
CV9faW5saW5lICAgZmxvYXQgICAgICBoeXBvdGYgICAgKCBmbG9hdCAgICAgIF9feCAgLCAgZmxv
YXQgICAgICBfX3kgICkgdGhyb3cgKCkgIHsJICAgIHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3gg
KyBfX3kgKiBfX3kpICA7CX0gCV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBoeXBvdGwgICAg
KCBsb25nIGRvdWJsZSAgICAgIF9feCAgLCAgbG9uZyBkb3VibGUgICAgICBfX3kgICkgdGhyb3cg
KCkgIHsJICAgIHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpICA7CX0gIAoK
X19pbmxpbmUgICBkb3VibGUgICAgIGxvZ2IgICAoIGRvdWJsZSAgICAgIF9feCAgKSB0aHJvdyAo
KSAJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJCSAgICAgICAgcmVn
aXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOwkJCQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZV9f
CQkJCQkJCSAgICAgICAgICAoImZ4dHJhY3Rcblx0IgkJCQkJCQkgICAgICAgICAgIDogIj10IiAo
X19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOwkJCSAgICAgICAgcmV0dXJuIF9f
dmFsdWUgIDsJfSAJX19pbmxpbmUgICBmbG9hdCAgICAgIGxvZ2JmICAgICggZmxvYXQgICAgICBf
X3ggICkgdGhyb3cgKCkgCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJ
CQkgICAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsJCQkJCQkgICAgICAgIF9fYXNt
IF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCJmeHRyYWN0XG5cdCIJCQkJCQkJICAgICAg
ICAgICA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsJCQkgICAg
ICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5lICAgbG9uZyBkb3VibGUgICAgICBsb2di
bCAgICAoIGxvbmcgZG91YmxlICAgICAgX194ICApIHRocm93ICgpIAl7CSAgICAgIHJlZ2lzdGVy
IGxvbmcgZG91YmxlIF9fdmFsdWU7CQkJCQkJICAgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBf
X2p1bms7CQkJCQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgi
Znh0cmFjdFxuXHQiCQkJCQkJCSAgICAgICAgICAgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3Zh
bHVlKSA6ICIwIiAoX194KSk7CQkJICAgICAgICByZXR1cm4gX192YWx1ZSAgOwl9ICAKCgoKCgoK
CgoKIyA2OTcgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwoKCgoKCl9faW5saW5l
ICAgZG91YmxlICAgICBkcmVtICAgKCBkb3VibGUgICAgICBfX3ggICwgIGRvdWJsZSAgICAgIF9f
eSAgKSB0aHJvdyAoKSAgewkgICAgICByZWdpc3RlciBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAg
ICAgIHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsJCQkJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRp
bGVfXwkJCQkJCQkgICAgICAgICAgKCIxOglmcHJlbTFcblx0IgkJCQkJCSAgICAgICAgICAgImZz
dHN3CSUlYXhcblx0IgkJCQkJCSAgICAgICAgICAgInNhaGZcblx0IgkJCQkJCQkJICAgICAgICAg
ICAianAJMWIiCQkJCQkJCSAgICAgICAgICAgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xv
YmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7ICAgICAgcmV0dXJuIF9fdmFs
dWUgIDsJfSAJX19pbmxpbmUgICBmbG9hdCAgICAgIGRyZW1mICAgICggZmxvYXQgICAgICBfX3gg
ICwgIGZsb2F0ICAgICAgX195ICApIHRocm93ICgpICB7CSAgICAgIHJlZ2lzdGVyIGRvdWJsZSBf
X3ZhbHVlOwkJCQkJCSAgICAgICAgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOwkJCQkJCSAgICAg
ICAgX19hc20gX192b2xhdGlsZV9fCQkJCQkJCSAgICAgICAgICAoIjE6CWZwcmVtMVxuXHQiCQkJ
CQkJICAgICAgICAgICAiZnN0c3cJJSVheFxuXHQiCQkJCQkJICAgICAgICAgICAic2FoZlxuXHQi
CQkJCQkJCQkgICAgICAgICAgICJqcAkxYiIJCQkJCQkJICAgICAgICAgICA6ICI9dCIgKF9fdmFs
dWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsg
ICAgICByZXR1cm4gX192YWx1ZSAgOwl9IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgZHJl
bWwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgLCAgbG9uZyBkb3VibGUgICAgICBfX3kgICkg
dGhyb3cgKCkgIHsJICAgICAgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7CQkJCQkJICAgICAgICBy
ZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7CQkJCQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlX18J
CQkJCQkJICAgICAgICAgICgiMToJZnByZW0xXG5cdCIJCQkJCQkgICAgICAgICAgICJmc3Rzdwkl
JWF4XG5cdCIJCQkJCQkgICAgICAgICAgICJzYWhmXG5cdCIJCQkJCQkJCSAgICAgICAgICAgImpw
CTFiIgkJCQkJCQkgICAgICAgICAgIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJl
ZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyAgICAgIHJldHVybiBfX3ZhbHVlICA7
CX0gIAojIDcxMiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCgoKIApfX2lubGlu
ZSAgaW50Cl9fZmluaXRlIChkb3VibGUgX194KSB0aHJvdyAoKSAKewogIHJldHVybiAoX19leHRl
bnNpb25fXwoJICAoKCgoKHVuaW9uIHsgZG91YmxlIF9fZDsgaW50IF9faVsyXTsgfSkge19fZDog
X194fSkuX19pWzFdCgkgICAgIHwgMHg4MDBmZmZmZnUpICsgMSkgPj4gMzEpKTsKfQoKIAojIDcz
MiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCgoKCiAKCgoKCgoKCgoKCiAKIyA3
NTUgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwoKCgojIDM1MCAiL3Vzci9pbmNs
dWRlL21hdGguaCIgMiAzCgoKCgojIDQwOSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwoKCn0gCgoK
CiMgMTI4ICIuLi8uLi9qaWtlcy9zcmMvcGxhdGZvcm0uaCIgMgoKCgoKIyAxICIvdXNyL2xpYi9n
Y2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9mbG9hdC5oIiAxIDMKIAoKCgog
CgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoK
CiAgICAKCgogICAgCgoKICAgIAoKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoK
CiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgoKICAgIAoKCiAgICAKCgogICAgCgoKCnVuaW9u
IF9fY29udmVydF9sb25nX2RvdWJsZSB7CiAgdW5zaWduZWQgX19jb252ZXJ0X2xvbmdfZG91Ymxl
X2lbNF07CiAgbG9uZyBkb3VibGUgX19jb252ZXJ0X2xvbmdfZG91YmxlX2Q7Cn07CgoKICAgIAoK
CiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKCgojIDEzMiAiLi4vLi4vamlrZXMv
c3JjL3BsYXRmb3JtLmgiIDIKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDEgMwog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgogCgoKCmV4dGVybiAiQyIgeyAKCiAKdHlwZWRl
ZiB2b2lkICpubF9jYXRkOwoKIAp0eXBlZGVmIGludCBubF9pdGVtOwoKIApleHRlcm4gbmxfY2F0
ZCBjYXRvcGVuIChfX2NvbnN0IGNoYXIgKl9fY2F0X25hbWUsIGludCBfX2ZsYWcpIHRocm93ICgp
IDsKCiAKCmV4dGVybiBjaGFyICpjYXRnZXRzIChubF9jYXRkIF9fY2F0YWxvZywgaW50IF9fc2V0
LCBpbnQgX19udW1iZXIsCgkJICAgICAgX19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCkg
OwoKIApleHRlcm4gaW50IGNhdGNsb3NlIChubF9jYXRkIF9fY2F0YWxvZykgdGhyb3cgKCkgOwoK
fSAKCgojIDI0ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9sb2NhbGUuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmVudW0Kewog
IF9fTENfQ1RZUEUgPSAwLAogIF9fTENfTlVNRVJJQyA9IDEsCiAgX19MQ19USU1FID0gMiwKICBf
X0xDX0NPTExBVEUgPSAzLAogIF9fTENfTU9ORVRBUlkgPSA0LAogIF9fTENfTUVTU0FHRVMgPSA1
LAogIF9fTENfQUxMID0gNiwKICBfX0xDX1BBUEVSID0gNywKICBfX0xDX05BTUUgPSA4LAogIF9f
TENfQUREUkVTUyA9IDksCiAgX19MQ19URUxFUEhPTkUgPSAxMCwKICBfX0xDX01FQVNVUkVNRU5U
ID0gMTEsCiAgX19MQ19JREVOVElGSUNBVElPTiA9IDEyCn07CgoKIyAyNiAiL3Vzci9pbmNsdWRl
L2xhbmdpbmZvLmgiIDIgMwoKCgpleHRlcm4gIkMiIHsgCgogCgoKCgoKIAoKCgoKIAplbnVtCnsK
ICAgCgogICAKICBBQkRBWV8xID0gKCgoIF9fTENfVElNRSApIDw8IDE2KSB8ICggIDAgKSkgLCAg
CgogIEFCREFZXzIsCgogIEFCREFZXzMsCgogIEFCREFZXzQsCgogIEFCREFZXzUsCgogIEFCREFZ
XzYsCgogIEFCREFZXzcsCgoKICAgCiAgREFZXzEsCQkJIAoKICBEQVlfMiwJCQkgCgogIERBWV8z
LAkJCSAKCiAgREFZXzQsCQkJIAoKICBEQVlfNSwJCQkgCgogIERBWV82LAkJCSAKCiAgREFZXzcs
CQkJIAoKCiAgIAogIEFCTU9OXzEsCQkJIAoKICBBQk1PTl8yLAoKICBBQk1PTl8zLAoKICBBQk1P
Tl80LAoKICBBQk1PTl81LAoKICBBQk1PTl82LAoKICBBQk1PTl83LAoKICBBQk1PTl84LAoKICBB
Qk1PTl85LAoKICBBQk1PTl8xMCwKCiAgQUJNT05fMTEsCgogIEFCTU9OXzEyLAoKCiAgIAogIE1P
Tl8xLAkJCSAKCiAgTU9OXzIsCgogIE1PTl8zLAoKICBNT05fNCwKCiAgTU9OXzUsCgogIE1PTl82
LAoKICBNT05fNywKCiAgTU9OXzgsCgogIE1PTl85LAoKICBNT05fMTAsCgogIE1PTl8xMSwKCiAg
TU9OXzEyLAoKCiAgQU1fU1RSLAkJCSAKCiAgUE1fU1RSLAkJCSAKCgogIERfVF9GTVQsCQkJIAoK
ICBEX0ZNVCwJCQkgCgogIFRfRk1ULAkJCSAKCiAgVF9GTVRfQU1QTSwJCQkgCgoKICBFUkEsCQkJ
CSAKCiAgX19FUkFfWUVBUiwJCQkgCgoKCiAgRVJBX0RfRk1ULAkJCSAKCiAgQUxUX0RJR0lUUywJ
CQkgCgogIEVSQV9EX1RfRk1ULAkJCSAKCiAgRVJBX1RfRk1ULAkJCSAKCgogIF9OTF9USU1FX0VS
QV9OVU1fRU5UUklFUywJIAogIF9OTF9USU1FX0VSQV9FTlRSSUVTLAkJIAoKICBfTkxfV0FCREFZ
XzEsCQkgCiAgX05MX1dBQkRBWV8yLAogIF9OTF9XQUJEQVlfMywKICBfTkxfV0FCREFZXzQsCiAg
X05MX1dBQkRBWV81LAogIF9OTF9XQUJEQVlfNiwKICBfTkxfV0FCREFZXzcsCgogICAKICBfTkxf
V0RBWV8xLAkJIAogIF9OTF9XREFZXzIsCQkgCiAgX05MX1dEQVlfMywJCSAKICBfTkxfV0RBWV80
LAkJIAogIF9OTF9XREFZXzUsCQkgCiAgX05MX1dEQVlfNiwJCSAKICBfTkxfV0RBWV83LAkJIAoK
ICAgCiAgX05MX1dBQk1PTl8xLAkJIAogIF9OTF9XQUJNT05fMiwKICBfTkxfV0FCTU9OXzMsCiAg
X05MX1dBQk1PTl80LAogIF9OTF9XQUJNT05fNSwKICBfTkxfV0FCTU9OXzYsCiAgX05MX1dBQk1P
Tl83LAogIF9OTF9XQUJNT05fOCwKICBfTkxfV0FCTU9OXzksCiAgX05MX1dBQk1PTl8xMCwKICBf
TkxfV0FCTU9OXzExLAogIF9OTF9XQUJNT05fMTIsCgogICAKICBfTkxfV01PTl8xLAkJIAogIF9O
TF9XTU9OXzIsCiAgX05MX1dNT05fMywKICBfTkxfV01PTl80LAogIF9OTF9XTU9OXzUsCiAgX05M
X1dNT05fNiwKICBfTkxfV01PTl83LAogIF9OTF9XTU9OXzgsCiAgX05MX1dNT05fOSwKICBfTkxf
V01PTl8xMCwKICBfTkxfV01PTl8xMSwKICBfTkxfV01PTl8xMiwKCiAgX05MX1dBTV9TVFIsCQkg
CiAgX05MX1dQTV9TVFIsCQkgCgogIF9OTF9XRF9UX0ZNVCwJCSAKICBfTkxfV0RfRk1ULAkJIAog
IF9OTF9XVF9GTVQsCQkgCiAgX05MX1dUX0ZNVF9BTVBNLAkgCgogIF9OTF9XRVJBX1lFQVIsCSAK
ICBfTkxfV0VSQV9EX0ZNVCwJIAogIF9OTF9XQUxUX0RJR0lUUywJIAogIF9OTF9XRVJBX0RfVF9G
TVQsCSAKICBfTkxfV0VSQV9UX0ZNVCwJIAoKICBfTkxfVElNRV9XRUVLX05EQVlTLAogIF9OTF9U
SU1FX1dFRUtfMVNUREFZLAogIF9OTF9USU1FX1dFRUtfMVNUV0VFSywKICBfTkxfVElNRV9GSVJT
VF9XRUVLREFZLAogIF9OTF9USU1FX0ZJUlNUX1dPUktEQVksCiAgX05MX1RJTUVfQ0FMX0RJUkVD
VElPTiwKICBfTkxfVElNRV9USU1FWk9ORSwKCiAgX0RBVEVfRk1ULAkJIAoKICBfTkxfV19EQVRF
X0ZNVCwKCiAgX05MX05VTV9MQ19USU1FLAkgCgogICAKCgogIF9OTF9DT0xMQVRFX05SVUxFUyA9
ICgoKCBfX0xDX0NPTExBVEUgKSA8PCAxNikgfCAoICAwICkpICwKICBfTkxfQ09MTEFURV9SVUxF
U0VUUywKICBfTkxfQ09MTEFURV9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1dFSUdIVE1CLAogIF9O
TF9DT0xMQVRFX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RNQiwKICBfTkxfQ09MTEFU
RV9HQVAxLAogIF9OTF9DT0xMQVRFX0dBUDIsCiAgX05MX0NPTExBVEVfR0FQMywKICBfTkxfQ09M
TEFURV9UQUJMRVdDLAogIF9OTF9DT0xMQVRFX1dFSUdIVFdDLAogIF9OTF9DT0xMQVRFX0VYVFJB
V0MsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RXQywKICBfTkxfQ09MTEFURV9TWU1CX0hBU0hfU0la
RU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQiwKICBfTkxfQ09MTEFURV9TWU1CX0VYVFJB
TUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFXQywKICBf
TkxfTlVNX0xDX0NPTExBVEUsCgogICAKCgogIF9OTF9DVFlQRV9DTEFTUyA9ICgoKCBfX0xDX0NU
WVBFICkgPDwgMTYpIHwgKCAgMCApKSAsCiAgX05MX0NUWVBFX1RPVVBQRVIsCiAgX05MX0NUWVBF
X0dBUDEsCiAgX05MX0NUWVBFX1RPTE9XRVIsCiAgX05MX0NUWVBFX0dBUDIsCiAgX05MX0NUWVBF
X0NMQVNTMzIsCiAgX05MX0NUWVBFX0dBUDMsCiAgX05MX0NUWVBFX0dBUDQsCiAgX05MX0NUWVBF
X0dBUDUsCiAgX05MX0NUWVBFX0dBUDYsCiAgX05MX0NUWVBFX0NMQVNTX05BTUVTLAogIF9OTF9D
VFlQRV9NQVBfTkFNRVMsCiAgX05MX0NUWVBFX1dJRFRILAogIF9OTF9DVFlQRV9NQl9DVVJfTUFY
LAogIF9OTF9DVFlQRV9DT0RFU0VUX05BTUUsCiAgQ09ERVNFVCA9IF9OTF9DVFlQRV9DT0RFU0VU
X05BTUUsCgogIF9OTF9DVFlQRV9UT1VQUEVSMzIsCiAgX05MX0NUWVBFX1RPTE9XRVIzMiwKICBf
TkxfQ1RZUEVfQ0xBU1NfT0ZGU0VULAogIF9OTF9DVFlQRV9NQVBfT0ZGU0VULAogIF9OTF9DVFlQ
RV9JTkRJR0lUU19NQl9MRU4sCiAgX05MX0NUWVBFX0lORElHSVRTMF9NQiwKICBfTkxfQ1RZUEVf
SU5ESUdJVFMxX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzJfTUIsCiAgX05MX0NUWVBFX0lORElH
SVRTM19NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM0X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzVf
TUIsCiAgX05MX0NUWVBFX0lORElHSVRTNl9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM3X01CLAog
IF9OTF9DVFlQRV9JTkRJR0lUUzhfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTOV9NQiwKICBfTkxf
Q1RZUEVfSU5ESUdJVFNfV0NfTEVOLAogIF9OTF9DVFlQRV9JTkRJR0lUUzBfV0MsCiAgX05MX0NU
WVBFX0lORElHSVRTMV9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMyX1dDLAogIF9OTF9DVFlQRV9J
TkRJR0lUUzNfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTNF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJ
VFM1X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzZfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTN19X
QywKICBfTkxfQ1RZUEVfSU5ESUdJVFM4X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzlfV0MsCiAg
X05MX0NUWVBFX09VVERJR0lUMF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQxX01CLAogIF9OTF9D
VFlQRV9PVVRESUdJVDJfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUM19NQiwKICBfTkxfQ1RZUEVf
T1VURElHSVQ0X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDVfTUIsCiAgX05MX0NUWVBFX09VVERJ
R0lUNl9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ3X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDhf
TUIsCiAgX05MX0NUWVBFX09VVERJR0lUOV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQwX1dDLAog
IF9OTF9DVFlQRV9PVVRESUdJVDFfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMl9XQywKICBfTkxf
Q1RZUEVfT1VURElHSVQzX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfV0MsCiAgX05MX0NUWVBF
X09VVERJR0lUNV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ2X1dDLAogIF9OTF9DVFlQRV9PVVRE
SUdJVDdfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUOF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ5
X1dDLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UQUJfU0laRSwKICBfTkxfQ1RZUEVfVFJBTlNMSVRf
RlJPTV9JRFgsCiAgX05MX0NUWVBFX1RSQU5TTElUX0ZST01fVEJMLAogIF9OTF9DVFlQRV9UUkFO
U0xJVF9UT19JRFgsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX1RCTCwKICBfTkxfQ1RZUEVfVFJB
TlNMSVRfREVGQVVMVF9NSVNTSU5HX0xFTiwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9N
SVNTSU5HLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9JR05PUkVfTEVOLAogIF9OTF9DVFlQRV9UUkFO
U0xJVF9JR05PUkUsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xLAogIF9OTF9DVFlQRV9FWFRSQV9N
QVBfMiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzMsCiAgX05MX0NUWVBFX0VYVFJBX01BUF80LAog
IF9OTF9DVFlQRV9FWFRSQV9NQVBfNSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzYsCiAgX05MX0NU
WVBFX0VYVFJBX01BUF83LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOCwKICBfTkxfQ1RZUEVfRVhU
UkFfTUFQXzksCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQ
XzExLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTIsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMywK
ICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzE0LAogIF9OTF9OVU1fTENfQ1RZUEUsCgogICAKCgogIF9f
SU5UX0NVUlJfU1lNQk9MID0gKCgoIF9fTENfTU9ORVRBUlkgKSA8PCAxNikgfCAoICAwICkpICwK
CgoKICBfX0NVUlJFTkNZX1NZTUJPTCwKCgoKICBfX01PTl9ERUNJTUFMX1BPSU5ULAoKCgogIF9f
TU9OX1RIT1VTQU5EU19TRVAsCgoKCiAgX19NT05fR1JPVVBJTkcsCgoKCiAgX19QT1NJVElWRV9T
SUdOLAoKCgogIF9fTkVHQVRJVkVfU0lHTiwKCgoKICBfX0lOVF9GUkFDX0RJR0lUUywKCgoKICBf
X0ZSQUNfRElHSVRTLAoKCgogIF9fUF9DU19QUkVDRURFUywKCgoKICBfX1BfU0VQX0JZX1NQQUNF
LAoKCgogIF9fTl9DU19QUkVDRURFUywKCgoKICBfX05fU0VQX0JZX1NQQUNFLAoKCgogIF9fUF9T
SUdOX1BPU04sCgoKCiAgX19OX1NJR05fUE9TTiwKCgoKICBfTkxfTU9ORVRBUllfQ1JOQ1lTVFIs
CgogIF9fSU5UX1BfQ1NfUFJFQ0VERVMsCgoKCiAgX19JTlRfUF9TRVBfQllfU1BBQ0UsCgoKCiAg
X19JTlRfTl9DU19QUkVDRURFUywKCgoKICBfX0lOVF9OX1NFUF9CWV9TUEFDRSwKCgoKICBfX0lO
VF9QX1NJR05fUE9TTiwKCgoKICBfX0lOVF9OX1NJR05fUE9TTiwKCgoKICBfTkxfTU9ORVRBUllf
RFVPX0lOVF9DVVJSX1NZTUJPTCwKICBfTkxfTU9ORVRBUllfRFVPX0NVUlJFTkNZX1NZTUJPTCwK
ICBfTkxfTU9ORVRBUllfRFVPX0lOVF9GUkFDX0RJR0lUUywKICBfTkxfTU9ORVRBUllfRFVPX0ZS
QUNfRElHSVRTLAogIF9OTF9NT05FVEFSWV9EVU9fUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRB
UllfRFVPX1BfU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fTl9DU19QUkVDRURFUywK
ICBfTkxfTU9ORVRBUllfRFVPX05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fSU5U
X1BfQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9TRVBfQllfU1BBQ0UsCiAg
X05MX01PTkVUQVJZX0RVT19JTlRfTl9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX0lO
VF9OX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX1BfU0lHTl9QT1NOLAogIF9OTF9N
T05FVEFSWV9EVU9fTl9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9TSUdOX1BP
U04sCiAgX05MX01PTkVUQVJZX0RVT19JTlRfTl9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX1VO
T19WQUxJRF9GUk9NLAogIF9OTF9NT05FVEFSWV9VTk9fVkFMSURfVE8sCiAgX05MX01PTkVUQVJZ
X0RVT19WQUxJRF9GUk9NLAogIF9OTF9NT05FVEFSWV9EVU9fVkFMSURfVE8sCiAgX05MX01PTkVU
QVJZX0NPTlZFUlNJT05fUkFURSwKICBfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywKICBf
TkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywKICBfTkxfTlVNX0xDX01PTkVUQVJZLAoKICAg
CgogIF9fREVDSU1BTF9QT0lOVCA9ICgoKCBfX0xDX05VTUVSSUMgKSA8PCAxNikgfCAoICAwICkp
ICwKCgoKICBSQURJWENIQVIgPSBfX0RFQ0lNQUxfUE9JTlQsCgogIF9fVEhPVVNBTkRTX1NFUCwK
CgoKICBUSE9VU0VQID0gX19USE9VU0FORFNfU0VQLAoKICBfX0dST1VQSU5HLAoKCgogIF9OTF9O
VU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsCiAgX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywK
ICBfTkxfTlVNX0xDX05VTUVSSUMsCgogIF9fWUVTRVhQUiA9ICgoKCBfX0xDX01FU1NBR0VTICkg
PDwgMTYpIHwgKCAgMCApKSAsICAKCiAgX19OT0VYUFIsCQkJIAoKICBfX1lFU1NUUiwJCQkgCgoK
CiAgX19OT1NUUiwJCQkgCgoKCiAgX05MX05VTV9MQ19NRVNTQUdFUywKCiAgX05MX1BBUEVSX0hF
SUdIVCA9ICgoKCBfX0xDX1BBUEVSICkgPDwgMTYpIHwgKCAgMCApKSAsCiAgX05MX1BBUEVSX1dJ
RFRILAogIF9OTF9OVU1fTENfUEFQRVIsCgogIF9OTF9OQU1FX05BTUVfRk1UID0gKCgoIF9fTENf
TkFNRSApIDw8IDE2KSB8ICggIDAgKSkgLAogIF9OTF9OQU1FX05BTUVfR0VOLAogIF9OTF9OQU1F
X05BTUVfTVIsCiAgX05MX05BTUVfTkFNRV9NUlMsCiAgX05MX05BTUVfTkFNRV9NSVNTLAogIF9O
TF9OQU1FX05BTUVfTVMsCiAgX05MX05VTV9MQ19OQU1FLAoKICBfTkxfQUREUkVTU19QT1NUQUxf
Rk1UID0gKCgoIF9fTENfQUREUkVTUyApIDw8IDE2KSB8ICggIDAgKSkgLAogIF9OTF9BRERSRVNT
X0NPVU5UUllfTkFNRSwKICBfTkxfQUREUkVTU19DT1VOVFJZX1BPU1QsCiAgX05MX0FERFJFU1Nf
Q09VTlRSWV9BQjIsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9BQjMsCiAgX05MX0FERFJFU1NfQ09V
TlRSWV9DQVIsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9OVU0sCiAgX05MX0FERFJFU1NfQ09VTlRS
WV9JU0JOLAogIF9OTF9BRERSRVNTX0xBTkdfTkFNRSwKICBfTkxfQUREUkVTU19MQU5HX0FCLAog
IF9OTF9BRERSRVNTX0xBTkdfVEVSTSwKICBfTkxfQUREUkVTU19MQU5HX0xJQiwKICBfTkxfTlVN
X0xDX0FERFJFU1MsCgogIF9OTF9URUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAoKCggX19MQ19URUxF
UEhPTkUgKSA8PCAxNikgfCAoICAwICkpICwKICBfTkxfVEVMRVBIT05FX1RFTF9ET01fRk1ULAog
IF9OTF9URUxFUEhPTkVfSU5UX1NFTEVDVCwKICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsCiAg
X05MX05VTV9MQ19URUxFUEhPTkUsCgogIF9OTF9NRUFTVVJFTUVOVF9NRUFTVVJFTUVOVCA9ICgo
KCBfX0xDX01FQVNVUkVNRU5UICkgPDwgMTYpIHwgKCAgMCApKSAsCiAgX05MX05VTV9MQ19NRUFT
VVJFTUVOVCwKCiAgX05MX0lERU5USUZJQ0FUSU9OX1RJVExFID0gKCgoIF9fTENfSURFTlRJRklD
QVRJT04gKSA8PCAxNikgfCAoICAwICkpICwKICBfTkxfSURFTlRJRklDQVRJT05fU09VUkNFLAog
IF9OTF9JREVOVElGSUNBVElPTl9BRERSRVNTLAogIF9OTF9JREVOVElGSUNBVElPTl9DT05UQUNU
LAogIF9OTF9JREVOVElGSUNBVElPTl9FTUFJTCwKICBfTkxfSURFTlRJRklDQVRJT05fVEVMLAog
IF9OTF9JREVOVElGSUNBVElPTl9GQVgsCiAgX05MX0lERU5USUZJQ0FUSU9OX0xBTkdVQUdFLAog
IF9OTF9JREVOVElGSUNBVElPTl9URVJSSVRPUlksCiAgX05MX0lERU5USUZJQ0FUSU9OX0FVRElF
TkNFLAogIF9OTF9JREVOVElGSUNBVElPTl9BUFBMSUNBVElPTiwKICBfTkxfSURFTlRJRklDQVRJ
T05fQUJCUkVWSUFUSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9SRVZJU0lPTiwKICBfTkxfSURF
TlRJRklDQVRJT05fREFURSwKICBfTkxfSURFTlRJRklDQVRJT05fQ0FURUdPUlksCiAgX05MX05V
TV9MQ19JREVOVElGSUNBVElPTiwKCiAgIAogIF9OTF9OVU0KfTsKCgogCgoKCgoKZXh0ZXJuIGNo
YXIgKm5sX2xhbmdpbmZvIChubF9pdGVtIF9faXRlbSkgdGhyb3cgKCkgOwoKCiMgNTc1ICIvdXNy
L2luY2x1ZGUvbGFuZ2luZm8uaCIgMwoKCn0gCgoKIyAxMzYgIi4uLy4uL2ppa2VzL3NyYy9wbGF0
Zm9ybS5oIiAyCgoKCgojIDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgv
Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2Nj
LWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAK
CgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoK
IAoKCiMgMTI2ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVk
ZS9zdGRkZWYuaCIgMwoKCiAKCgoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2
LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAy
NjkgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2
LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCiMgMjkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCgojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL2xvY2FsZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA0NCAiL3Vz
ci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDMKCiMgMzAgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIg
MiAzCgoKZXh0ZXJuICJDIiB7IAoKIAoKCgoKCgoKCgoKCgoKCgoKIApzdHJ1Y3QgbGNvbnYKewog
ICAKCiAgY2hhciAqZGVjaW1hbF9wb2ludDsJCSAKICBjaGFyICp0aG91c2FuZHNfc2VwOwkJIAog
ICAKCgoKCiAgY2hhciAqZ3JvdXBpbmc7CgogICAKCiAgIAoKICBjaGFyICppbnRfY3Vycl9zeW1i
b2w7CiAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwkgCiAgY2hhciAqbW9uX2RlY2ltYWxfcG9pbnQ7
CSAKICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsJIAogIGNoYXIgKm1vbl9ncm91cGluZzsJCSAK
ICBjaGFyICpwb3NpdGl2ZV9zaWduOwkJIAogIGNoYXIgKm5lZ2F0aXZlX3NpZ247CQkgCiAgY2hh
ciBpbnRfZnJhY19kaWdpdHM7CQkgCiAgY2hhciBmcmFjX2RpZ2l0czsJCSAKICAgCiAgY2hhciBw
X2NzX3ByZWNlZGVzOwogICAKICBjaGFyIHBfc2VwX2J5X3NwYWNlOwogICAKICBjaGFyIG5fY3Nf
cHJlY2VkZXM7CiAgIAogIGNoYXIgbl9zZXBfYnlfc3BhY2U7CiAgIAoKCgoKCiAgY2hhciBwX3Np
Z25fcG9zbjsKICBjaGFyIG5fc2lnbl9wb3NuOwojIDExMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5o
IiAzCgogIGNoYXIgX19pbnRfcF9jc19wcmVjZWRlczsKICBjaGFyIF9faW50X3Bfc2VwX2J5X3Nw
YWNlOwogIGNoYXIgX19pbnRfbl9jc19wcmVjZWRlczsKICBjaGFyIF9faW50X25fc2VwX2J5X3Nw
YWNlOwogIGNoYXIgX19pbnRfcF9zaWduX3Bvc247CiAgY2hhciBfX2ludF9uX3NpZ25fcG9zbjsK
Cn07CgoKIApleHRlcm4gY2hhciAqc2V0bG9jYWxlIChpbnQgX19jYXRlZ29yeSwgX19jb25zdCBj
aGFyICpfX2xvY2FsZSkgdGhyb3cgKCkgOwoKIApleHRlcm4gc3RydWN0IGxjb252ICpsb2NhbGVj
b252ICh2b2lkKSB0aHJvdyAoKSA7CgojIDE1OSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCgoK
fSAKCgojIDE0MCAiLi4vLi4vamlrZXMvc3JjL3BsYXRmb3JtLmgiIDIKCgoKIAoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2crKy9pb3N0cmVhbSIgMSAzCiAKIAoKCgojIDEgIi91c3IvaW5jbHVkZS9nKysv
aW9zdHJlYW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJm
YWNlCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9zdHJlYW1idWYuaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCiAgIAoKCgpleHRlcm4gIkMiIHsK
Cn0KIAoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVk
ZS9zdGRhcmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKCnZvaWQgdmFfZW5kIChfX2dudWNfdmFfbGlzdCk7CQkgCgoKIAoKCgogCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKCgoKCgoKCgoKCgoKCiMgMTc1ICIvdXNyL2xp
Yi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCiAK
CgoKCiAKCiAKCiAKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIyA0MCAiL3Vzci9pbmNsdWRlL2crKy9zdHJlYW1idWYuaCIgMiAzCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyAgCmNsYXNz
IG9zdHJlYW07IGNsYXNzIHN0cmVhbWJ1ZjsKCiAKCgoKCnR5cGVkZWYgX19vZmY2NF90ICAgc3Ry
ZWFtb2ZmOwp0eXBlZGVmIF9fb2ZmNjRfdCAgIHN0cmVhbXBvczsKCgoKCnR5cGVkZWYgX19zc2l6
ZV90ICAgc3RyZWFtc2l6ZTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2ZtdGZsYWdzOwp0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgX19pb3N0YXRlOwoKc3RydWN0IF9pb3NfZmllbGRzCnsgIAogICAg
c3RyZWFtYnVmICpfc3RyYnVmOwogICAgb3N0cmVhbSogX3RpZTsKICAgIGludCBfd2lkdGg7CiAg
ICBfX2ZtdGZsYWdzIF9mbGFnczsKICAgIHdjaGFyX3QgICBfZmlsbDsKICAgIF9faW9zdGF0ZSBf
c3RhdGU7CiAgICBfX2lvc3RhdGUgX2V4Y2VwdGlvbnM7CiAgICBpbnQgX3ByZWNpc2lvbjsKCiAg
ICB2b2lkICpfYXJyYXlzOyAgCn07CgoKCgoKCgoKCgoKCgoKCiMgMTI0ICIvdXNyL2luY2x1ZGUv
ZysrL3N0cmVhbWJ1Zi5oIiAzCgoKY2xhc3MgaW9zIDogcHVibGljIF9pb3NfZmllbGRzIHsKICBp
b3MmIG9wZXJhdG9yPShpb3MmKTsgICAKICBpb3MgKGNvbnN0IGlvcyYpOyAgCiAgcHVibGljOgog
ICAgdHlwZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOwogICAgdHlwZWRlZiBpbnQgaW9zdGF0ZTsK
ICAgIHR5cGVkZWYgaW50IG9wZW5tb2RlOwogICAgdHlwZWRlZiBfX3NzaXplX3QgICBzdHJlYW1z
aXplOwogICAgZW51bSBpb19zdGF0ZSB7Cglnb29kYml0ID0gMCAsCgllb2ZiaXQgPSAxICwKCWZh
aWxiaXQgPSAyICwKCWJhZGJpdCA9IDQgIH07CiAgICBlbnVtIG9wZW5fbW9kZSB7CglpbiA9IDEg
LAoJb3V0ID0gMiAsCglhdGUgPSA0ICwKCWFwcCA9IDggLAoJdHJ1bmMgPSAxNiAsCglub2NyZWF0
ZSA9IDMyICwKCW5vcmVwbGFjZSA9IDY0ICwKCWJpbiA9IDEyOCAsICAKCWJpbmFyeSA9IDEyOCAg
fTsKICAgIGVudW0gc2Vla19kaXIgeyBiZWcsIGN1ciwgZW5kfTsKICAgIHR5cGVkZWYgZW51bSBz
ZWVrX2RpciBzZWVrZGlyOwogICAgIAogICAgZW51bSB7IHNraXB3cz0gMDEgLAoJICAgbGVmdD0g
MDIgLCByaWdodD0gMDQgLCBpbnRlcm5hbD0gMDEwICwKCSAgIGRlYz0gMDIwICwgb2N0PSAwNDAg
LCBoZXg9IDAxMDAgLAoJICAgc2hvd2Jhc2U9IDAyMDAgLCBzaG93cG9pbnQ9IDA0MDAgLAoJICAg
dXBwZXJjYXNlPSAwMTAwMCAsIHNob3dwb3M9IDAyMDAwICwKCSAgIHNjaWVudGlmaWM9IDA0MDAw
ICwgZml4ZWQ9IDAxMDAwMCAsCgkgICB1bml0YnVmPSAwMjAwMDAgLCBzdGRpbz0gMDQwMDAwIAoK
CgoJICAgfTsKICAgIGVudW0geyAgCgliYXNlZmllbGQ9ZGVjK29jdCtoZXgsCglmbG9hdGZpZWxk
ID0gc2NpZW50aWZpYytmaXhlZCwKCWFkanVzdGZpZWxkID0gbGVmdCtyaWdodCtpbnRlcm5hbAog
ICAgfTsKCiMgMTc3ICIvdXNyL2luY2x1ZGUvZysrL3N0cmVhbWJ1Zi5oIiAzCgoKICAgIG9zdHJl
YW0qIHRpZSgpIGNvbnN0IHsgcmV0dXJuIF90aWU7IH0KICAgIG9zdHJlYW0qIHRpZShvc3RyZWFt
KiB2YWwpIHsgb3N0cmVhbSogc2F2ZT1fdGllOyBfdGllPXZhbDsgcmV0dXJuIHNhdmU7IH0KCiAg
ICAgCiAgICB3Y2hhcl90ICAgZmlsbCgpIGNvbnN0IHsgcmV0dXJuIF9maWxsOyB9CiAgICB3Y2hh
cl90ICAgZmlsbCh3Y2hhcl90ICAgbmV3ZikKCXt3Y2hhcl90ICAgb2xkZiA9IF9maWxsOyBfZmls
bCA9IG5ld2Y7IHJldHVybiBvbGRmO30KICAgIGZtdGZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1
cm4gX2ZsYWdzOyB9CiAgICBmbXRmbGFncyBmbGFncyhmbXRmbGFncyBuZXdfdmFsKSB7CglmbXRm
bGFncyBvbGRfdmFsID0gX2ZsYWdzOyBfZmxhZ3MgPSBuZXdfdmFsOyByZXR1cm4gb2xkX3ZhbDsg
fQogICAgaW50IHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9wcmVjaXNpb247IH0KICAgIGlu
dCBwcmVjaXNpb24oaW50IG5ld3ApIHsKCXVuc2lnbmVkIHNob3J0IG9sZHAgPSBfcHJlY2lzaW9u
OyBfcHJlY2lzaW9uID0gKHVuc2lnbmVkIHNob3J0KW5ld3A7CglyZXR1cm4gb2xkcDsgfQogICAg
Zm10ZmxhZ3Mgc2V0ZihmbXRmbGFncyB2YWwpIHsKCWZtdGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7
CglfZmxhZ3MgfD0gdmFsOyByZXR1cm4gb2xkYml0czsgfQogICAgZm10ZmxhZ3Mgc2V0ZihmbXRm
bGFncyB2YWwsIGZtdGZsYWdzIG1hc2spIHsKCWZtdGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7Cglf
ZmxhZ3MgPSAoX2ZsYWdzICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOyByZXR1cm4gb2xkYml0czsg
fQogICAgZm10ZmxhZ3MgdW5zZXRmKGZtdGZsYWdzIG1hc2spIHsKCWZtdGZsYWdzIG9sZGJpdHMg
PSBfZmxhZ3M7CglfZmxhZ3MgJj0gfm1hc2s7IHJldHVybiBvbGRiaXRzOyB9CiAgICBpbnQgd2lk
dGgoKSBjb25zdCB7IHJldHVybiBfd2lkdGg7IH0KICAgIGludCB3aWR0aChpbnQgdmFsKSB7IGlu
dCBzYXZlID0gX3dpZHRoOyBfd2lkdGggPSB2YWw7IHJldHVybiBzYXZlOyB9CgoKCgogICAgdm9p
ZCBfdGhyb3dfZmFpbHVyZSgpIGNvbnN0IHsgfQoKICAgIHZvaWQgY2xlYXIoaW9zdGF0ZSBzdGF0
ZSA9IDApIHsKCV9zdGF0ZSA9IF9zdHJidWYgPyBzdGF0ZSA6IHN0YXRlfGJhZGJpdDsKCWlmIChf
c3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgdm9pZCBzZXQoaW9z
dGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFnOwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBf
dGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldHN0YXRlKGlvc3RhdGUgZmxhZykgeyBfc3Rh
dGUgfD0gZmxhZzsgIAoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgp
OyB9CiAgICBpbnQgZ29vZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSA9PSAwOyB9CiAgICBpbnQg
ZW9mKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjplb2ZiaXQ7IH0KICAgIGludCBmYWls
KCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgKGlvczo6YmFkYml0fGlvczo6ZmFpbGJpdCk7IH0K
ICAgIGludCBiYWQoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmJhZGJpdDsgfQogICAg
aW9zdGF0ZSByZHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlOyB9CiAgICBvcGVyYXRvciB2
b2lkKigpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKSA/ICh2b2lkKikwIDogKHZvaWQqKSgtMSk7IH0K
ICAgIGludCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBmYWlsKCk7IH0KICAgIGlvc3RhdGUg
ZXhjZXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIF9leGNlcHRpb25zOyB9CiAgICB2b2lkIGV4Y2Vw
dGlvbnMoaW9zdGF0ZSBlbmFibGUpIHsKCV9leGNlcHRpb25zID0gZW5hYmxlOwoJaWYgKF9zdGF0
ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CgogICAgc3RyZWFtYnVmKiByZGJ1
ZigpIGNvbnN0IHsgcmV0dXJuIF9zdHJidWY7IH0KICAgIHN0cmVhbWJ1ZiogcmRidWYoc3RyZWFt
YnVmICpfcykgewogICAgICBzdHJlYW1idWYgKl9vbGQgPSBfc3RyYnVmOyBfc3RyYnVmID0gX3M7
IGNsZWFyICgpOyByZXR1cm4gX29sZDsgfQoKICAgIHN0YXRpYyBpbnQgc3luY193aXRoX3N0ZGlv
KGludCBvbik7CiAgICBzdGF0aWMgdm9pZCBzeW5jX3dpdGhfc3RkaW8oKSB7IHN5bmNfd2l0aF9z
dGRpbygxKTsgfQogICAgc3RhdGljIGZtdGZsYWdzIGJpdGFsbG9jKCk7CiAgICBzdGF0aWMgaW50
IHhhbGxvYygpOwogICAgdm9pZComIHB3b3JkKGludCk7CiAgICB2b2lkKiBwd29yZChpbnQpIGNv
bnN0OwogICAgbG9uZyYgaXdvcmQoaW50KTsKICAgIGxvbmcgaXdvcmQoaW50KSBjb25zdDsKCgoK
CgoKCgoKICAgICAKICAgIGNsYXNzIEluaXQgewogICAgcHVibGljOgogICAgICBJbml0ICgpIHsg
fQogICAgfTsKCiAgcHJvdGVjdGVkOgogICAgaW5saW5lIGlvcyhzdHJlYW1idWYqIHNiID0gMCwg
b3N0cmVhbSogdGllX3RvID0gMCk7CiAgICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7CiAgICBpbmxp
bmUgdm9pZCBpbml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZSA9IDApOwp9OwoKCgoKdHlw
ZWRlZiBpb3M6OnNlZWtfZGlyIF9zZWVrX2RpcjsKCgogCiAKIAogCiAKCiAKIApjbGFzcyBzdHJl
YW1tYXJrZXIgOiBwcml2YXRlIF9JT19tYXJrZXIgewogICAgZnJpZW5kIGNsYXNzIHN0cmVhbWJ1
ZjsKICAgIHZvaWQgc2V0X29mZnNldChpbnQgb2Zmc2V0KSB7IF9wb3MgPSBvZmZzZXQ7IH0KICBw
dWJsaWM6CiAgICBzdHJlYW1tYXJrZXIoc3RyZWFtYnVmICpzYik7CiAgICB+c3RyZWFtbWFya2Vy
KCk7CiAgICBpbnQgc2F2aW5nKCkgeyByZXR1cm4gIDE7IH0KICAgIGludCBkZWx0YShzdHJlYW1t
YXJrZXImKTsKICAgIGludCBkZWx0YSgpOwp9OwoKc3RydWN0IHN0cmVhbWJ1ZiA6IHB1YmxpYyBf
SU9fRklMRSB7ICAKICAgIGZyaWVuZCBjbGFzcyBpb3M7CiAgICBmcmllbmQgY2xhc3MgaXN0cmVh
bTsKICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIHN0cmVhbW1hcmtl
cjsKICAgIGNvbnN0IHZvaWQgKiZfdnRhYmxlKCkgeyByZXR1cm4gKihjb25zdCB2b2lkKiopKChf
SU9fRklMRSopdGhpcyArIDEpOyB9CiAgcHJvdGVjdGVkOgogICAgc3RhdGljIHN0cmVhbWJ1Ziog
X2xpc3RfYWxsOyAgCiAgICBfSU9fRklMRSomIHhjaGFpbigpIHsgcmV0dXJuIF9jaGFpbjsgfQog
ICAgdm9pZCBfdW5fbGluaygpOwogICAgdm9pZCBfbGlua19pbigpOwogICAgY2hhciogZ3B0cigp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9iYXNlIDog
X0lPX3JlYWRfcHRyOyB9CiAgICBjaGFyKiBwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRl
X3B0cjsgfQogICAgY2hhciogZWdwdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYg
MHgxMDAgID8gX0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICBjaGFyKiBlcHB0cigp
IGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9lbmQ7IH0KICAgIGNoYXIqIHBiYXNlKCkgY29uc3Qg
eyByZXR1cm4gX0lPX3dyaXRlX2Jhc2U7IH0KICAgIGNoYXIqIGViYWNrKCkgY29uc3QKICAgICAg
eyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9iYXNl
O30KICAgIGNoYXIqIGJhc2UoKSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2Jhc2U7IH0KICAgIGNo
YXIqIGVidWYoKSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2VuZDsgfQogICAgaW50IGJsZW4oKSBj
b25zdCB7IHJldHVybiBfSU9fYnVmX2VuZCAtIF9JT19idWZfYmFzZTsgfQogICAgdm9pZCB4cHV0
X2NoYXIoY2hhciBjKSB7ICpfSU9fd3JpdGVfcHRyKysgPSBjOyB9CiAgICBpbnQgeGZsYWdzKCkg
eyByZXR1cm4gX2ZsYWdzIDsgfQogICAgaW50IHhmbGFncyhpbnQgZikge2ludCBmbCA9IF9mbGFn
cyA7IF9mbGFncyAgPSBmOyByZXR1cm4gZmw7fQogICAgdm9pZCB4c2V0ZmxhZ3MoaW50IGYpIHsg
X2ZsYWdzICB8PSBmOyB9CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZiwgaW50IG1hc2spCiAgICAg
IHsgX2ZsYWdzICA9IChfZmxhZ3MgICYgfm1hc2spIHwgKGYgJiBtYXNrKTsgfQogICAgdm9pZCBn
YnVtcChpbnQgbikKICAgICAgeyBfZmxhZ3MgICYgMHgxMDAgID8gKF9JT19zYXZlX2Jhc2UrPW4p
OihfSU9fcmVhZF9wdHIrPW4pO30KICAgIHZvaWQgcGJ1bXAoaW50IG4pIHsgX0lPX3dyaXRlX3B0
ciArPSBuOyB9CiAgICB2b2lkIHNldGIoY2hhciogYiwgY2hhciogZWIsIGludCBhPTApOwogICAg
dm9pZCBzZXRwKGNoYXIqIHAsIGNoYXIqIGVwKQogICAgICB7IF9JT193cml0ZV9iYXNlPV9JT193
cml0ZV9wdHI9cDsgX0lPX3dyaXRlX2VuZD1lcDsgfQogICAgdm9pZCBzZXRnKGNoYXIqIGViLCBj
aGFyKiBnLCBjaGFyICplZykgewogICAgICBpZiAoX2ZsYWdzICAmIDB4MTAwICkgX0lPX2ZyZWVf
YmFja3VwX2FyZWEodGhpcyk7IAogICAgICBfSU9fcmVhZF9iYXNlID0gZWI7IF9JT19yZWFkX3B0
ciA9IGc7IF9JT19yZWFkX2VuZCA9IGVnOyB9CiAgICBjaGFyICpzaG9ydGJ1ZigpIHsgcmV0dXJu
IF9zaG9ydGJ1ZjsgfQoKICAgIGludCBpbl9iYWNrdXAoKSB7IHJldHVybiBfZmxhZ3MgJiAweDEw
MCA7IH0KICAgICAKICAgIGNoYXIgKkdiYXNlKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9f
c2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUdwdHIoKSB7IHJl
dHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2VuZCA6IF9JT19yZWFkX2VuZDsgfQogICAgIAog
ICAgY2hhciAqQmJhc2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2Jhc2UgOiBf
SU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICpCcHRyKCkgeyByZXR1cm4gX0lPX2JhY2t1cF9iYXNl
OyB9CiAgICAgCiAgICBjaGFyICplQnB0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3Jl
YWRfZW5kIDogX0lPX3NhdmVfZW5kOyB9CiAgICBjaGFyICpOYmFzZSgpIHsgcmV0dXJuIF9JT19z
YXZlX2Jhc2U7IH0KICAgIGNoYXIgKmVOcHRyKCkgeyByZXR1cm4gX0lPX3NhdmVfZW5kOyB9CiAg
ICBpbnQgaGF2ZV9iYWNrdXAoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlICE9IF9fbnVsbCA7IH0K
ICAgIGludCBoYXZlX21hcmtlcnMoKSB7IHJldHVybiBfbWFya2VycyAhPSBfX251bGwgOyB9CiAg
ICB2b2lkIGZyZWVfYmFja3VwX2FyZWEoKTsKICAgIHZvaWQgdW5zYXZlX21hcmtlcnMoKTsgIAog
ICAgaW50IHB1dF9tb2RlKCkgeyByZXR1cm4gX2ZsYWdzICYgMHg4MDAgOyB9CiAgICBpbnQgc3dp
dGNoX3RvX2dldF9tb2RlKCk7CiAgICAKICAgIHN0cmVhbWJ1ZihpbnQgZmxhZ3M9MCk7CiAgcHVi
bGljOgogICAgc3RhdGljIGludCBmbHVzaF9hbGwoKTsKICAgIHN0YXRpYyB2b2lkIGZsdXNoX2Fs
bF9saW5lYnVmZmVyZWQoKTsgIAogICAgdmlydHVhbCB+c3RyZWFtYnVmKCk7CiAgICB2aXJ0dWFs
IGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkgKTsgIAogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93
KCk7ICAKICAgIHZpcnR1YWwgaW50IHVmbG93KCk7ICAKICAgIHZpcnR1YWwgaW50IHBiYWNrZmFp
bChpbnQgYyk7CiAKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywg
c3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3Ry
ZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vl
a19kaXIsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mg
c2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwoKICAg
IHN0cmVhbXBvcyBwdWJzZWVrb2ZmKHN0cmVhbW9mZiBvLCBfc2Vla19kaXIgZCwgaW50IG1vZGU9
aW9zOjppbnxpb3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtvZmYgKHRoaXMsIG8sIGQs
IG1vZGUpOyB9CiAgICBzdHJlYW1wb3MgcHVic2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9k
ZSA9IGlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrcG9zICh0aGlzLCBw
b3MsIG1vZGUpOyB9CiAgICBzdHJlYW1wb3Mgc3NlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIs
IGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgc3RyZWFtcG9zIHNzZWVrcG9zKHN0cmVh
bXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVh
bWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGludCBsZW4pOwogICAgdmlydHVhbCBpbnQgc3luYygpOwog
ICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwoKICAgIGludCBzZWVrbWFyayhzdHJlYW1tYXJr
ZXImIG1hcmssIGludCBkZWx0YSA9IDApOwogICAgaW50IHNwdXRiYWNrYyhjaGFyIGMpOwogICAg
aW50IHN1bmdldGMoKTsKICAgIGludCB1bmJ1ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMiAg
PyAxIDogMDsgfQogICAgaW50IGxpbmVidWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MjAw
ICA/IDEgOiAwOyB9CiAgICB2b2lkIHVuYnVmZmVyZWQoaW50IGkpCgl7IGlmIChpKSBfZmxhZ3Mg
fD0gMiA7IGVsc2UgX2ZsYWdzICY9IH4yIDsgfQogICAgdm9pZCBsaW5lYnVmZmVyZWQoaW50IGkp
Cgl7IGlmIChpKSBfZmxhZ3MgfD0gMHgyMDAgOyBlbHNlIF9mbGFncyAmPSB+MHgyMDAgOyB9CiAg
ICBpbnQgYWxsb2NhdGUoKSB7ICAKCWlmIChiYXNlKCkgfHwgdW5idWZmZXJlZCgpKSByZXR1cm4g
MDsKCWVsc2UgcmV0dXJuIGRvYWxsb2NhdGUoKTsgfQogICAgIAogICAgdm9pZCBhbGxvY2J1Zigp
IHsgaWYgKGJhc2UoKSA9PSBfX251bGwgKSBkb2FsbG9jYnVmKCk7IH0KICAgIHZvaWQgZG9hbGxv
Y2J1ZigpOwogICAgaW50IGluX2F2YWlsKCkgeyByZXR1cm4gX0lPX3JlYWRfZW5kIC0gX0lPX3Jl
YWRfcHRyOyB9CiAgICBpbnQgb3V0X3dhaXRpbmcoKSB7IHJldHVybiBfSU9fd3JpdGVfcHRyIC0g
X0lPX3dyaXRlX2Jhc2U7IH0KICAgIHN0cmVhbXNpemUgc3B1dG4oY29uc3QgY2hhciogcywgc3Ry
ZWFtc2l6ZSBuKSB7IHJldHVybiB4c3B1dG4ocywgbik7IH0KICAgIHN0cmVhbXNpemUgcGFkbihj
aGFyIHBhZCwgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiBfSU9fcGFkbih0aGlzLCBwYWQsIG4pOyB9
CiAgICBzdHJlYW1zaXplIHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lP
X3NnZXRuKHRoaXMsIHMsIG4pOyB9CiAgICBpbnQgaWdub3JlKGludCk7CiAgICBpbnQgZ2V0X2Nv
bHVtbigpOwogICAgaW50IHNldF9jb2x1bW4oaW50KTsKICAgIGxvbmcgc2dldGxpbmUoY2hhciog
YnVmLCBzaXplX3QgICBuLCBjaGFyIGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7CiAgICBpbnQg
c3B1dGMoaW50IGMpIHsgcmV0dXJuIF9JT19wdXRjKGMsIHRoaXMpOyB9CiAgICBpbnQgc2J1bXBj
KCkgeyByZXR1cm4gX0lPX2dldGModGhpcyk7IH0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuICgo
ICB0aGlzICApLT5fSU9fcmVhZF9wdHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYmIF9f
dW5kZXJmbG93ICggIHRoaXMgICkgPT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWduZWQgY2hhciAq
KSAoICB0aGlzICApLT5fSU9fcmVhZF9wdHIpICA7IH0KICAgIGludCBzbmV4dGMoKSB7CglpZiAo
X0lPX3JlYWRfcHRyID49IF9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlzKSA9PSAoLTEp
ICkKCSAgcmV0dXJuICgtMSkgOwoJZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRjKCk7
IH0KICAgIHZvaWQgc3Rvc3NjKCkgeyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5kKSBf
SU9fcmVhZF9wdHIrKzsgfQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9fZ251Y192
YV9saXN0ICBhcCwgaW9zKiBzdHJlYW0gPSBfX251bGwgKTsKICAgIGludCBzY2FuKGNoYXIgY29u
c3QgKmZtdDAgLi4uKTsKICAgIGludCB2Zm9ybShjaGFyIGNvbnN0ICpmbXQwLCBfX2dudWNfdmFf
bGlzdCAgYXApOwogICAgaW50IGZvcm0oY2hhciBjb25zdCAqZm10MCAuLi4pOwoKCgoKICAgIHZp
cnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUgc2l6ZSk7CiAg
ICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXplKTsK
ICAgIHZpcnR1YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAg
IHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwogICAgdmlydHVhbCBpbnQgc3lzX3N0YXQodm9pZCop
OyAgCgogICAgdmlydHVhbCBpbnQgc2hvd21hbnljKCk7CiAgICB2aXJ0dWFsIHZvaWQgaW1idWUo
dm9pZCAqKTsKCn07CgogCiAKCmNsYXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFtYnVmIHsKICBw
cm90ZWN0ZWQ6CiAgICB2b2lkIGluaXQoKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgaW50
IG9wZW5wcm90OyAgCiAgICBmaWxlYnVmKCk7CiAgICBmaWxlYnVmKGludCBmZCk7CiAgICBmaWxl
YnVmKGludCBmZCwgY2hhciogcCwgaW50IGxlbik7CgoKCiAgICB+ZmlsZWJ1ZigpOwogICAgZmls
ZWJ1ZiogYXR0YWNoKGludCBmZCk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVu
YW1lLCBjb25zdCBjaGFyICptb2RlKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmls
ZW5hbWUsIGlvczo6b3Blbm1vZGUgbW9kZSwgaW50IHByb3QgPSAwNjY0KTsKICAgIHZpcnR1YWwg
aW50IHVuZGVyZmxvdygpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7
CiAgICBpbnQgaXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsgfQogICAgaW50
IGZkKCkgY29uc3QgeyByZXR1cm4gaXNfb3BlbigpID8gX2ZpbGVubyA6ICgtMSkgOyB9CiAgICBm
aWxlYnVmKiBjbG9zZSgpOwogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwogICAgdmlydHVh
bCBzdHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjpp
bnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGludCBs
ZW4pOwogICAgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKTsK
ICAgIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFs
IGludCBzeW5jKCk7CiAgcHJvdGVjdGVkOiAgCiAKICAgIGludCBpc19yZWFkaW5nKCkgeyByZXR1
cm4gZWJhY2soKSAhPSBlZ3B0cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyByZXR1cm4gaXNf
cmVhZGluZygpID8gIGdwdHIoKSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciogZmlsZV9wdHIo
KSB7IHJldHVybiBlR3B0cigpOyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3Jl
YWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lz
X3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193
cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2
b2lkKik7ICAKICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwoKCgoKfTsKCmlubGluZSB2b2lk
IGlvczo6aW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsKCQlfc3RhdGUgPSBz
YiA/IGlvczo6Z29vZGJpdCA6IGlvczo6YmFkYml0OyBfZXhjZXB0aW9ucz0wOwoJCV9zdHJidWY9
c2I7IF90aWUgPSB0aWVfdG87IF93aWR0aD0wOyBfZmlsbD0nICc7CgoJCV9mbGFncz1pb3M6OnNr
aXB3c3xpb3M6OmRlYzsKCgoKCQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9CgppbmxpbmUg
aW9zOjppb3Moc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7IGluaXQoc2IsIHRpZV90
byk7IH0KCmlubGluZSBpb3M6On5pb3MoKSB7CgoKCiAgICAgCiAgICAgCiAgICBvcGVyYXRvciBk
ZWxldGVbXSAoX2FycmF5cyk7Cn0KfSAgCgojIDMxICIvdXNyL2luY2x1ZGUvZysrL2lvc3RyZWFt
LmgiIDIgMwoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07CnR5
cGVkZWYgaW9zJiAoKl9fbWFuaXApKGlvcyYpOwp0eXBlZGVmIGlzdHJlYW0mICgqX19pbWFuaXAp
KGlzdHJlYW0mKTsKdHlwZWRlZiBvc3RyZWFtJiAoKl9fb21hbmlwKShvc3RyZWFtJik7CgpleHRl
cm4gaXN0cmVhbSYgd3MoaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9zdHJl
YW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9z
dHJlYW0mIGVuZHMob3N0cmVhbSYgb3V0cyk7CgpjbGFzcyBvc3RyZWFtIDogdmlydHVhbCBwdWJs
aWMgaW9zCnsKICAgICAKICAgIHZvaWQgZG9fb3NmeCgpOwogIHB1YmxpYzoKICAgIG9zdHJlYW0o
KSB7IH0KICAgIG9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllZD0gX19udWxsICk7
CiAgICBpbnQgb3BmeCgpIHsKCWlmICghZ29vZCgpKSByZXR1cm4gMDsKCWVsc2UgeyBpZiAoX3Rp
ZSkgX3RpZS0+Zmx1c2goKTsgIDsgcmV0dXJuIDE7fSB9CiAgICB2b2lkIG9zZngoKSB7ICA7CgkJ
ICBpZiAoZmxhZ3MoKSAmIChpb3M6OnVuaXRidWZ8aW9zOjpzdGRpbykpCgkJICAgICAgZG9fb3Nm
eCgpOyB9CiAgICBvc3RyZWFtJiBmbHVzaCgpOwogICAgb3N0cmVhbSYgcHV0KGNoYXIgYykgeyBf
c3RyYnVmLT5zcHV0YyhjKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoKICAgIG9zdHJlYW0mIHdyaXRl
KGNvbnN0IGNoYXIgKnMsIHN0cmVhbXNpemUgbik7CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB1
bnNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25z
dCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hhciAqcywg
c3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQog
ICAgb3N0cmVhbSYgd3JpdGUoY29uc3Qgdm9pZCAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJl
dHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFt
cG9zKTsKICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVh
bXBvcyB0ZWxscCgpOwogICAgb3N0cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsK
ICAgIG9zdHJlYW0mIHZmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIGFy
Z3MpOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY2hhciBjKTsKICAgIG9zdHJlYW0mIG9wZXJh
dG9yPDwodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0KICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwoc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAo
Y2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIgKnMpOwogICAgb3N0
cmVhbSYgb3BlcmF0b3I8PChjb25zdCB1bnNpZ25lZCBjaGFyICpzKQoJeyByZXR1cm4gKCp0aGlz
KSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBzaWdu
ZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7IH0KICAgIG9z
dHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgdm9pZCAqcCk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
KGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IG4pOwogICAgb3N0
cmVhbSYgb3BlcmF0b3I8PChsb25nIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25l
ZCBsb25nIG4pOwoKICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGxv
bmcgbik7CiAgICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9u
ZyBsb25nIG4pOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2hvcnQgbikge3JldHVybiBvcGVy
YXRvcjw8KChpbnQpbik7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBu
KSB7cmV0dXJuIG9wZXJhdG9yPDwoKHVuc2lnbmVkIGludCluKTt9CgogICAgb3N0cmVhbSYgb3Bl
cmF0b3I8PChib29sIGIpIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGludCliKTsgfQoKICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwoZG91YmxlIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChmbG9hdCBu
KSB7IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRv
cjw8KGxvbmcgZG91YmxlIG4pOwoKCgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChfX29tYW5pcCBm
dW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChf
X21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAgIG9zdHJlYW0m
IG9wZXJhdG9yPDwoc3RyZWFtYnVmKik7CgoKCn07CgpjbGFzcyBpc3RyZWFtIDogdmlydHVhbCBw
dWJsaWMgaW9zCnsKICAgICAKcHJvdGVjdGVkOgogICAgc2l6ZV90ICAgX2djb3VudDsKCiAgICBp
bnQgX3NraXBfd3MoKTsKICBwdWJsaWM6CiAgICBpc3RyZWFtKCk6IF9nY291bnQgKDApIHsgfQog
ICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IF9fbnVsbCApOwogICAgaXN0
cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0
cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicp
Cgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdl
dChjaGFyJiBjKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFyJiBjKSB7IHJldHVybiBn
ZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKGNoYXIqIHB0ciwgaW50IGxlbiwg
Y2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0bGluZSh1bnNpZ25lZCBjaGFyKiBw
dHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0bGluZSgoY2hhciop
cHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFyJiBjKSAgeyBy
ZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFyKiBwdHIs
IGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxl
biwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKHNpZ25lZCBjaGFyKiBwdHIsIGludCBs
ZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4s
IGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChjaGFyICpwdHIsIHN0cmVhbXNpemUgbik7CiAg
ICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7
IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiByZWFkKHNpZ25lZCBj
aGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBu
KTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyBy
ZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgZ2V0KHN0cmVhbWJ1ZiYg
c2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldHMoY2hhciAqKnMsIGNoYXIg
ZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGludCBuZWVkID0gMCkgewoJaWYgKCFnb29kKCkp
IHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90
aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1ZigpLT5pbl9hdmFpbCgpIDwgbmVlZCkpIF90aWUtPmZs
dXNoKCk7CgkgIGlmICghbmVlZCAmJiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSkgcmV0dXJuIF9z
a2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICBpbnQgaXBmeDAoKSB7ICAK
CWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7Cgkg
ICA7CgkgIGlmIChfdGllKSBfdGllLT5mbHVzaCgpOwoJICBpZiAoZmxhZ3MoKSAmIGlvczo6c2tp
cHdzKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1cm4gMTsKCX0KICAgIH0KICAgIGlu
dCBpcGZ4MSgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAw
OyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgcmRidWYoKS0+aW5fYXZhaWwoKSA9PSAw
KSBfdGllLT5mbHVzaCgpOwoJICByZXR1cm4gMTsKCX0KICAgIH0KICAgIHZvaWQgaXNmeCgpIHsg
IDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgpKSByZXR1cm4gKC0xKSA7CgkJZWxzZSB7
IGludCBjaCA9IF9zdHJidWYtPnNidW1wYygpOwoJCSAgICAgICBpZiAoY2ggPT0gKC0xKSApIHNl
dChpb3M6OmVvZmJpdCk7CgkJICAgICAgIGlzZngoKTsKCQkgICAgICAgcmV0dXJuIGNoOwoJCSAg
ICAgfSB9CiAgICBpbnQgcGVlaygpOwogICAgc2l6ZV90ICAgZ2NvdW50KCkgeyByZXR1cm4gX2dj
b3VudDsgfQogICAgaXN0cmVhbSYgaWdub3JlKGludCBuPTEsIGludCBkZWxpbSA9ICgtMSkgKTsK
ICAgIGludCBzeW5jICgpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtcG9zKTsKICAgIGlzdHJl
YW0mIHNlZWtnKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxsZygpOwog
ICAgaXN0cmVhbSYgcHV0YmFjayhjaGFyIGNoKSB7CglpZiAoZ29vZCgpICYmIF9zdHJidWYtPnNw
dXRiYWNrYyhjaCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJldHVybiAqdGhpczt9
CiAgICBpc3RyZWFtJiB1bmdldCgpIHsKCWlmIChnb29kKCkgJiYgX3N0cmJ1Zi0+c3VuZ2V0Yygp
ID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7CglyZXR1cm4gKnRoaXM7fQogICAgaXN0cmVh
bSYgc2Nhbihjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIGlzdHJlYW0mIHZzY2FuKGNvbnN0
IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIGFyZ3MpOwoKCgoKCgogICAgaXN0cmVhbSYg
b3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXIq
IHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRv
cj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBp
c3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNp
Z25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0m
IG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7
fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4o
bG9uZyYpOwoKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nIGxvbmcm
KTsKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxv
bmcmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNob3J0Jik7CiAgICBpc3RyZWFtJiBvcGVy
YXRvcj4+KHVuc2lnbmVkIGludCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBs
b25nJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0Jik7CgogICAgaXN0
cmVhbSYgb3BlcmF0b3I+Pihib29sJik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihmbG9hdCYp
OwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9y
Pj4obG9uZyBkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oIF9fbWFuaXAgZnVuYykg
eygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihf
X2ltYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQogICAgaXN0cmVhbSYgb3Bl
cmF0b3I+PihzdHJlYW1idWYqKTsKfTsKCmNsYXNzIGlvc3RyZWFtIDogcHVibGljIGlzdHJlYW0s
IHB1YmxpYyBvc3RyZWFtCnsKICBwdWJsaWM6CiAgICBpb3N0cmVhbSgpIHsgfQogICAgaW9zdHJl
YW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0aWVkPSBfX251bGwgKTsKfTsKCmNsYXNzIF9JT19p
c3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgaXN0cmVhbSB7CnB1YmxpYzoKICBfSU9faXN0cmVh
bV93aXRoYXNzaWduJiBvcGVyYXRvcj0oaXN0cmVhbSYpOwogIF9JT19pc3RyZWFtX3dpdGhhc3Np
Z24mIG9wZXJhdG9yPShfSU9faXN0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBv
cGVyYXRvcj0gKHN0YXRpY19jYXN0PGlzdHJlYW0mPiAocmhzKSk7IH0KfTsKCmNsYXNzIF9JT19v
c3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgb3N0cmVhbSB7CnB1YmxpYzoKICBfSU9fb3N0cmVh
bV93aXRoYXNzaWduJiBvcGVyYXRvcj0ob3N0cmVhbSYpOwogIF9JT19vc3RyZWFtX3dpdGhhc3Np
Z24mIG9wZXJhdG9yPShfSU9fb3N0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBv
cGVyYXRvcj0gKHN0YXRpY19jYXN0PG9zdHJlYW0mPiAocmhzKSk7IH0KfTsKCmV4dGVybiBfSU9f
aXN0cmVhbV93aXRoYXNzaWduIGNpbjsKIApleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2lnbiBj
b3V0LCBjZXJyOwoKZXh0ZXJuIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gY2xvZwoKCgo7CgpleHRl
cm4gaXN0cmVhbSYgbG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gaXN0cmVhbSYgdW5sb2NrKGlz
dHJlYW0mIGlucyk7CmV4dGVybiBvc3RyZWFtJiBsb2NrKG9zdHJlYW0mIG91dHMpOwpleHRlcm4g
b3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0mIG91dHMpOwoKc3RydWN0IElvc3RyZWFtX2luaXQgeyB9
IDsgICAKCmlubGluZSBpb3MmIGRlYyhpb3MmIGkpCnsgaS5zZXRmKGlvczo6ZGVjLCBpb3M6OmRl
Y3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIGhleChpb3MmIGkp
CnsgaS5zZXRmKGlvczo6aGV4LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBp
OyB9CmlubGluZSBpb3MmIG9jdChpb3MmIGkpCnsgaS5zZXRmKGlvczo6b2N0LCBpb3M6OmRlY3xp
b3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9Cn0gIAoKCiMgNiAiL3Vzci9pbmNsdWRlL2cr
Ky9pb3N0cmVhbSIgMiAzCgoKIyAxNDYgIi4uLy4uL2ppa2VzL3NyYy9wbGF0Zm9ybS5oIiAyCgoj
IDEgIi91c3IvaW5jbHVkZS9nKysvZnN0cmVhbSIgMSAzCiAKIAoKCgojIDEgIi91c3IvaW5jbHVk
ZS9nKysvZnN0cmVhbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEg
aW50ZXJmYWNlCgoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGZzdHJlYW1iYXNlIDogdmlydHVhbCBw
dWJsaWMgaW9zIHsKCiAgICBtdXRhYmxlIGZpbGVidWYgX19teV9mYjsgIAoKICAgIHZvaWQgX19m
Yl9pbml0ICgpOwogIHB1YmxpYzoKICAgIGZzdHJlYW1iYXNlKCk7CiAgICBmc3RyZWFtYmFzZShp
bnQgZmQpOwogICAgZnN0cmVhbWJhc2UoaW50IGZkLCBjaGFyICpwLCBpbnQgbCk7ICAKICAgIGZz
dHJlYW1iYXNlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlLCBpbnQgcHJvdD0wNjY0KTsKICAg
IHZvaWQgY2xvc2UoKTsKCiAgICBmaWxlYnVmKiByZGJ1ZigpIGNvbnN0IHsgcmV0dXJuICZfX215
X2ZiOyB9CgoKCiAgICB2b2lkIG9wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IG1vZGUsIGludCBw
cm90PTA2NjQpOwogICAgaW50IGlzX29wZW4oKSBjb25zdCB7IHJldHVybiByZGJ1ZigpLT5pc19v
cGVuKCk7IH0KICAgIHZvaWQgc2V0YnVmKGNoYXIgKnB0ciwgaW50IGxlbikgeyByZGJ1ZigpLT5z
ZXRidWYocHRyLCBsZW4pOyB9CiAgICB2b2lkIGF0dGFjaChpbnQgZmQpOwoKCgoKfTsKCmNsYXNz
IGlmc3RyZWFtIDogcHVibGljIGZzdHJlYW1iYXNlLCBwdWJsaWMgaXN0cmVhbSB7CiAgcHVibGlj
OgogICAgaWZzdHJlYW0oKSA6IGZzdHJlYW1iYXNlKCkgeyB9CiAgICBpZnN0cmVhbShpbnQgZmQp
IDogZnN0cmVhbWJhc2UoZmQpIHsgfQogICAgaWZzdHJlYW0oaW50IGZkLCBjaGFyICpwLCBpbnQg
bCkgOiBmc3RyZWFtYmFzZShmZCwgcCwgbCkgeyB9ICAKICAgIGlmc3RyZWFtKGNvbnN0IGNoYXIg
Km5hbWUsIGludCBtb2RlPWlvczo6aW4sIGludCBwcm90PTA2NjQpCgk6IGZzdHJlYW1iYXNlKG5h
bWUsIG1vZGUgfCBpb3M6OmluLCBwcm90KSB7IH0KICAgIHZvaWQgb3Blbihjb25zdCBjaGFyICpu
YW1lLCBpbnQgbW9kZT1pb3M6OmluLCBpbnQgcHJvdD0wNjY0KQoJeyBmc3RyZWFtYmFzZTo6b3Bl
bihuYW1lLCBtb2RlIHwgaW9zOjppbiwgcHJvdCk7IH0KfTsKCmNsYXNzIG9mc3RyZWFtIDogcHVi
bGljIGZzdHJlYW1iYXNlLCBwdWJsaWMgb3N0cmVhbSB7CiAgcHVibGljOgogICAgb2ZzdHJlYW0o
KSA6IGZzdHJlYW1iYXNlKCkgeyB9CiAgICBvZnN0cmVhbShpbnQgZmQpIDogZnN0cmVhbWJhc2Uo
ZmQpIHsgfQogICAgb2ZzdHJlYW0oaW50IGZkLCBjaGFyICpwLCBpbnQgbCkgOiBmc3RyZWFtYmFz
ZShmZCwgcCwgbCkgeyB9ICAKICAgIG9mc3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2Rl
PWlvczo6b3V0LCBpbnQgcHJvdD0wNjY0KQoJOiBmc3RyZWFtYmFzZShuYW1lLCBtb2RlIHwgaW9z
OjpvdXQsIHByb3QpIHsgfQogICAgdm9pZCBvcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2Rl
PWlvczo6b3V0LCBpbnQgcHJvdD0wNjY0KQoJeyBmc3RyZWFtYmFzZTo6b3BlbihuYW1lLCBtb2Rl
IHwgaW9zOjpvdXQsIHByb3QpOyB9Cn07CgpjbGFzcyBmc3RyZWFtIDogcHVibGljIGZzdHJlYW1i
YXNlLCBwdWJsaWMgaW9zdHJlYW0gewogIHB1YmxpYzoKICAgIGZzdHJlYW0oKSA6IGZzdHJlYW1i
YXNlKCkgeyB9CiAgICBmc3RyZWFtKGludCBmZCkgOiBmc3RyZWFtYmFzZShmZCkgeyB9CiAgICBm
c3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlLCBpbnQgcHJvdD0wNjY0KQoJOiBmc3Ry
ZWFtYmFzZShuYW1lLCBtb2RlLCBwcm90KSB7IH0KICAgIGZzdHJlYW0oaW50IGZkLCBjaGFyICpw
LCBpbnQgbCkgOiBmc3RyZWFtYmFzZShmZCwgcCwgbCkgeyB9ICAKICAgIHZvaWQgb3Blbihjb25z
dCBjaGFyICpuYW1lLCBpbnQgbW9kZSwgaW50IHByb3Q9MDY2NCkKCXsgZnN0cmVhbWJhc2U6Om9w
ZW4obmFtZSwgbW9kZSwgcHJvdCk7IH0KfTsKfSAgCgojIDYgIi91c3IvaW5jbHVkZS9nKysvZnN0
cmVhbSIgMiAzCgoKIyAxNDcgIi4uLy4uL2ppa2VzL3NyYy9wbGF0Zm9ybS5oIiAyCgoKCgoKCiAK
IAogCiAKIAogCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1
LjMvaW5jbHVkZS9uZXciIDEgMwogCiAKCgoKCiNwcmFnbWEgaW50ZXJmYWNlICJuZXciCiMgMSAi
L3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMwojIDM0MiAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1
ZGUvc3RkZGVmLmgiIDMKCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45
NS4zL2luY2x1ZGUvbmV3IiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGlu
dXgvMi45NS4zL2luY2x1ZGUvZXhjZXB0aW9uIiAxIDMKIAogCgoKCgojcHJhZ21hIGludGVyZmFj
ZSAiZXhjZXB0aW9uIgoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQgewoKY2xhc3MgZXhj
ZXB0aW9uIHsKcHVibGljOgogIGV4Y2VwdGlvbiAoKSB7IH0KICB2aXJ0dWFsIH5leGNlcHRpb24g
KCkgeyB9CiAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0ICgpIGNvbnN0Owp9OwoKY2xhc3MgYmFk
X2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNlcHRpb24gewpwdWJsaWM6CiAgYmFkX2V4Y2VwdGlvbiAo
KSB7IH0KICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uICgpIHsgfQp9OwoKdHlwZWRlZiB2b2lkICgq
dGVybWluYXRlX2hhbmRsZXIpICgpOwp0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIp
ICgpOwoKdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSAodGVybWluYXRlX2hhbmRsZXIp
Owp2b2lkIHRlcm1pbmF0ZSAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CnVuZXhw
ZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCAodW5leHBlY3RlZF9oYW5kbGVyKTsKdm9pZCB1
bmV4cGVjdGVkICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKYm9vbCB1bmNhdWdo
dF9leGNlcHRpb24gKCk7Cgp9ICAKCn0gIAoKCiMgOSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1
c2UtbGludXgvMi45NS4zL2luY2x1ZGUvbmV3IiAyIDMKCgpleHRlcm4gIkMrKyIgewoKbmFtZXNw
YWNlIHN0ZCB7CgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRpb24gewogIHB1Ymxp
YzoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4g
ImJhZF9hbGxvYyI7IH0KICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHt9OwogIGV4dGVybiBjb25z
dCBub3Rocm93X3Qgbm90aHJvdzsKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKICBu
ZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIgKG5ld19oYW5kbGVyKTsKCn0gIAoKIAp2b2lkICpv
cGVyYXRvciBuZXcgKHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCAqb3BlcmF0
b3IgbmV3W10gKHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBk
ZWxldGUgKHZvaWQgKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSAodm9pZCAqKSB0
aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXcgKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3Qm
KSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXdbXSAoc2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhy
b3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICosIGNvbnN0IHN0ZDo6
bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSAodm9pZCAqLCBjb25z
dCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgogCmlubGluZSB2b2lkICpvcGVyYXRvciBuZXco
c2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQppbmxpbmUgdm9p
ZCAqb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBw
bGFjZTsgfQp9ICAKCgojIDE2NCAiLi4vLi4vamlrZXMvc3JjL3BsYXRmb3JtLmgiIDIKCgoKCgoK
CgogICB1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCgoKIyAxODUgIi4uLy4uL2ppa2VzL3NyYy9wbGF0
Zm9ybS5oIgoKCgogCiAKIAogCiAKCgoKIAogCiAKCgogCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBs
b25nIHU4OwoKIAp0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaTg7CgoKCiAKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgdTQ7CgogCnR5cGVkZWYgc2lnbmVkIGludCBpNDsKCiAKdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCB1MjsKCiAKdHlwZWRlZiBzaWduZWQgc2hvcnQgaTI7CgogCnR5cGVkZWYgdW5zaWdu
ZWQgY2hhciB1MTsKCiAKdHlwZWRlZiBzaWduZWQgY2hhciBpMTsKCgoKCiAKIAogCiAKIyAyNDMg
Ii4uLy4uL2ppa2VzL3NyYy9wbGF0Zm9ybS5oIgoKCgogCiAKIAojIDEgIi4uLy4uL2ppa2VzL3Ny
Yy90dXBsZS5oIiAxCiAKIAogCiAKIAogCiAKIAogCgoKCiMgMSAiLi4vLi4vamlrZXMvc3JjL2pp
a2VzYXBpLmgiIDEKIAoKCgoKCgpjbGFzcyBKaWtlc09wdGlvbgp7ICAgIAogcHVibGljOgogICAg
CiAgICBjaGFyICpib290Y2xhc3NwYXRoOwogICAgY2hhciAqZXh0ZGlyczsKICAgIGNoYXIgKmNs
YXNzcGF0aDsKICAgIGNoYXIgKnNvdXJjZXBhdGg7CiAgICBjaGFyICpkaXJlY3Rvcnk7CiAgICBj
aGFyICplbmNvZGluZzsKCiAgICAgCiAgICAgCiAgICBpbnQgbm93cml0ZTsKICAgIGludCBkZXBy
ZWNhdGlvbjsKICAgIGludCBPOwogICAgaW50IGc7CiAgICBpbnQgdmVyYm9zZTsKICAgIGludCBk
ZXBlbmQ7CiAgICBpbnQgbm93YXJuOwogICAgaW50IG9sZF9jbGFzc3BhdGhfc2VhcmNoX29yZGVy
OwogICAgaW50IHplcm9fZGVmZWN0OwoKICAgIHZpcnR1YWwgfkppa2VzT3B0aW9uKCk7CgogcHJv
dGVjdGVkOgogICAgCiAgICBKaWtlc09wdGlvbigpOwp9OwoKY2xhc3MgSmlrZXNFcnJvcgp7CiBw
dWJsaWM6CgogICAgZW51bSBKaWtlc0Vycm9yU2V2ZXJpdHkKICAgIHsKICAgICAgICBKSUtFU19F
UlJPUiwKICAgICAgICBKSUtFU19DQVVUSU9OLAogICAgICAgIEpJS0VTX1dBUk5JTkcKICAgIH0g
OwogICAgICAgIAogICAgdmlydHVhbCBKaWtlc0Vycm9yU2V2ZXJpdHkgZ2V0U2V2ZXJpdHkoKSA9
IDAgOwogICAgdmlydHVhbCBjb25zdCBjaGFyICpnZXRGaWxlTmFtZSgpID0gMCA7CiAgICAKICAg
IHZpcnR1YWwgaW50IGdldExlZnRMaW5lTm8gICAgICAoKSA9IDAgOwogICAgdmlydHVhbCBpbnQg
Z2V0TGVmdENvbHVtbk5vICAgICgpID0gMCA7CiAgICB2aXJ0dWFsIGludCBnZXRSaWdodExpbmVO
byAgICAgKCkgPSAwIDsKICAgIHZpcnR1YWwgaW50IGdldFJpZ2h0Q29sdW1uTm8gICAoKSA9IDAg
OwoKICAgICAKCgogICAgdmlydHVhbCBjb25zdCB3Y2hhcl90ICpnZXRFcnJvck1lc3NhZ2UoKSA9
IDA7CgogICAgIAoKCiAgICB2aXJ0dWFsIGNvbnN0IHdjaGFyX3QgKmdldEVycm9yUmVwb3J0KCkg
PSAwOwoKIHByb3RlY3RlZDoKCiAgICBjb25zdCBjaGFyICpnZXRTZXZlcml0eVN0cmluZygpOwp9
OwoKIAoKCmNsYXNzIEppa2VzQVBJCnsKIHB1YmxpYzoKCiAgICBKaWtlc0FQSSgpOwogICAgCiAg
ICB2aXJ0dWFsIH5KaWtlc0FQSSgpOwogICAgICAgCiAgICAgCgoKCgogICAgdmlydHVhbCBKaWtl
c09wdGlvbiAqZ2V0T3B0aW9ucygpOwogICAgCiAgICAgCgoKCgoKCgoKICAgIHZpcnR1YWwgY2hh
cioqIHBhcnNlT3B0aW9ucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpIDsKCiAgICAgCgoKICAgIHZp
cnR1YWwgaW50IGNvbXBpbGUoY2hhciAqKiBmaWxlbmFtZXMpOwoKICAgICAKCgoKICAgIHN0YXRp
YyBKaWtlc0FQSSAqIGdldEluc3RhbmNlKCk7CgogICAgIAoKCiAgICB2aXJ0dWFsIHZvaWQgcmVw
b3J0RXJyb3IoSmlrZXNFcnJvciAqZXJyb3IpOwogICAgCiAgICAKICAgICAKCgoKICAgIGNsYXNz
IEZpbGVSZWFkZXIKICAgICAgICB7CiAgICBwdWJsaWM6CiAgICAgICAgICAgIHZpcnR1YWwgIH5G
aWxlUmVhZGVyKCkgIHt9CiAgICAgICAgICAgIAogICAgICAgICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIgICAgICpnZXRCdWZmZXIoKSAgICAgID0gMDsJIAogICAgICAgICAgICB2aXJ0dWFsICAgICAg
IHNpemVfdCAgICBnZXRCdWZmZXJTaXplKCkgID0gMDsJIAogICAgICAgIH07CgogICAgIAoKCgog
ICAgY2xhc3MgRmlsZVdyaXRlcgogICAgICAgIHsKICAgIHB1YmxpYzoKICAgICAgICAgICAgRmls
ZVdyaXRlcihzaXplX3QgbVMpOiAgIG1heFNpemUobVMpIHt9IAogICAgICAgICAgICB2aXJ0dWFs
ICB+RmlsZVdyaXRlcigpIHt9CiAgICAgICAgICAgIAogICAgICAgICAgICBzaXplX3QgICAgd3Jp
dGUoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpOwogICAgICAgICAgICB2
aXJ0dWFsICBpbnQgICAgICBpc1ZhbGlkKCkgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOwog
ICAgICAgICAgICAKICAgIHByaXZhdGU6CiAgICAgICAgICAgIAogICAgICAgICAgICB2aXJ0dWFs
ICBzaXplX3QgICAgZG9Xcml0ZShjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6
ZSkgICA9IDA7CSAKICAgICAgICAgICAgc2l6ZV90ICAgbWF4U2l6ZTsKICAgICAgICB9OwogICAg
ICAgIAogICAgdmlydHVhbCBpbnQgc3RhdChjb25zdCBjaGFyICpmaWxlbmFtZSwgc3RydWN0IHN0
YXQgKnN0YXR1cyk7CiAgICAKICAgIHZpcnR1YWwgRmlsZVJlYWRlciAgKnJlYWQgIChjb25zdCBj
aGFyICpmaWxlbmFtZSAgICAgICAgICAgICAgKTsKICAgIHZpcnR1YWwgRmlsZVdyaXRlciAgKndy
aXRlIChjb25zdCBjaGFyICpmaWxlbmFtZSwgc2l6ZV90IGJ5dGVzKTsKICAgIAogcHJpdmF0ZToK
CiAgICB2b2lkIGNsZWFudXBPcHRpb25zKCk7ICAKCiAgICBKaWtlc09wdGlvbiAqb3B0aW9uOwog
ICAgY2hhciAqKnBhcnNlZE9wdGlvbnM7CgogICAgc3RhdGljIEppa2VzQVBJICppbnN0YW5jZTsK
fTsKCgojIDEzICIuLi8uLi9qaWtlcy9zcmMvdHVwbGUuaCIgMgoKCgoKCgpjbGFzcyBPdXRwdXRC
dWZmZXI7CgogCiAKIAogCiAKIAogCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgVHVwbGUK
ewpwcm90ZWN0ZWQ6CgogICAgZnJpZW5kIGNsYXNzIE91dHB1dEJ1ZmZlcjsKCiAgICBlbnVtIHsg
REVGQVVMVF9MT0dfQkxLU0laRSA9IDMsIERFRkFVTFRfQkFTRV9JTkNSRU1FTlQgPSA0IH07Cgog
ICAgVCAqKmJhc2U7CiAgICBpbnQgYmFzZV9zaXplLAogICAgICAgIHRvcCwKICAgICAgICBzaXpl
OwoKICAgIGludCBsb2dfYmxrc2l6ZSwKICAgICAgICBiYXNlX2luY3JlbWVudDsKCiAgICBpbmxp
bmUgaW50IEJsa3NpemUoKSB7IHJldHVybiAoMSA8PCBsb2dfYmxrc2l6ZSk7IH0KCiAgICAgCiAg
ICAgCiAgICAgCiAgICBpbmxpbmUgdm9pZCBBbGxvY2F0ZU1vcmVTcGFjZSgpCiAgICB7CiAgICAg
ICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAg
ICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAg
CiAgICAgICAgIAogICAgICAgIGludCBrID0gc2l6ZSA+PiBsb2dfYmxrc2l6ZTsgIAoKICAgICAg
ICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICBpZiAoayA9PSBiYXNlX3NpemUpCiAgICAg
ICAgewogICAgICAgICAgICBpbnQgb2xkX2Jhc2Vfc2l6ZSA9IGJhc2Vfc2l6ZTsKICAgICAgICAg
ICAgVCAqKm9sZF9iYXNlID0gYmFzZTsKCiAgICAgICAgICAgIGJhc2Vfc2l6ZSArPSBiYXNlX2lu
Y3JlbWVudDsKICAgICAgICAgICAgYmFzZSA9IG5ldyBUKltiYXNlX3NpemVdOwoKICAgICAgICAg
ICAgaWYgKG9sZF9iYXNlICE9IF9fbnVsbCApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IG1lbW1vdmUoYmFzZSwgb2xkX2Jhc2UsIG9sZF9iYXNlX3NpemUgKiBzaXplb2YoVCAqKSk7CiAg
ICAgICAgICAgICAgICBkZWxldGUgW10gb2xkX2Jhc2U7CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgbWVtc2V0KCZiYXNlW29sZF9iYXNlX3NpemVdLCAwLCAoYmFzZV9zaXplIC0gb2xkX2Jhc2Vf
c2l6ZSkgKiBzaXplb2YoVCAqKSk7CiAgICAgICAgfQoKICAgICAgICAgCiAgICAgICAgIAogICAg
ICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICBiYXNlW2tdID0gbmV3
IFRbQmxrc2l6ZSgpXTsKICAgICAgICBiYXNlW2tdIC09IHNpemU7CgogICAgICAgICAKICAgICAg
ICAgCiAgICAgICAgIAogICAgICAgIHNpemUgKz0gQmxrc2l6ZSgpOwoKICAgICAgICByZXR1cm47
CiAgICB9CgpwdWJsaWM6CgogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAg
IAogICAgIAogICAgIAogICAgaW5saW5lIHZvaWQgUmVzaXplKGNvbnN0IGludCBuID0gMCkKICAg
IHsKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAg
ICAgIGlmIChuID4gc2l6ZSkKICAgICAgICB7CiAgICAgICAgICAgIGRvCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIEFsbG9jYXRlTW9yZVNwYWNlKCk7CiAgICAgICAgICAgIH0gd2hpbGUg
KG4gPiBzaXplKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAobiA8IHNpemUpCiAgICAgICAg
ewogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgaW50IHNsb3QgPSAobiA8
PSAwID8gLTEgOiAobiAtIDEpID4+IGxvZ19ibGtzaXplKTsKCiAgICAgICAgICAgIGZvciAoaW50
IGsgPSAoc2l6ZSA+PiBsb2dfYmxrc2l6ZSkgLSAxOyBrID4gc2xvdDsgay0tKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICBzaXplIC09IEJsa3NpemUoKTsKICAgICAgICAgICAgICAgIGJh
c2Vba10gKz0gc2l6ZTsKICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBiYXNlW2tdOwogICAgICAg
ICAgICAgICAgYmFzZVtrXSA9IF9fbnVsbCA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlm
IChzbG90IDwgMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZGVsZXRlIFtdIGJhc2U7
CiAgICAgICAgICAgICAgICBiYXNlID0gX19udWxsIDsKICAgICAgICAgICAgICAgIGJhc2Vfc2l6
ZSA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHRvcCAgPSBuOwogICAgfQoK
ICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIGlubGluZSB2b2lkIFJlc2V0
KGNvbnN0IGludCBuID0gMCkKICAgIHsKICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIG4g
Pj0gMCAmJiBuIDw9IHNpemUgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoIm4gPj0gMCAmJiBuIDw9
IHNpemUiICwgIi4uLy4uL2ppa2VzL3NyYy90dXBsZS5oIiwgMTYzLCBfX1BSRVRUWV9GVU5DVElP
Tl9fICksIDApKSkgOwoKICAgICAgICB0b3AgPSBuOwogICAgfQoKICAgICAKICAgICAKICAgICAK
ICAgIGlubGluZSBpbnQgTGVuZ3RoKCkgeyByZXR1cm4gdG9wOyB9CgogICAgIAogICAgIAogICAg
IAogICAgIAogICAgIAogICAgIAogICAgIAogICAgaW5saW5lIFQmIG9wZXJhdG9yW10oY29uc3Qg
aW50IGkpCiAgICB7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBpID49IDAgJiYgaSA8
IHRvcCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiaSA+PSAwICYmIGkgPCB0b3AiICwgIi4uLy4u
L2ppa2VzL3NyYy90dXBsZS5oIiwgMTgyLCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoK
ICAgICAgICByZXR1cm4gYmFzZVtpID4+IGxvZ19ibGtzaXplXVtpXTsKICAgIH0KCiAgICAgCiAg
ICAgCiAgICAgCiAgICBpbmxpbmUgaW50IE5leHRJbmRleCgpCiAgICB7CiAgICAgICAgaW50IGkg
PSB0b3ArKzsKICAgICAgICBpZiAoaSA9PSBzaXplKQogICAgICAgICAgICBBbGxvY2F0ZU1vcmVT
cGFjZSgpOwogICAgICAgIHJldHVybiBpOwogICAgfQoKICAgIGlubGluZSB2b2lkIFB1c2goVCBl
bHQpIHsgdGhpcyAtPiBOZXh0KCkgPSBlbHQ7IH0KICAgICAKICAgICAKICAgIGlubGluZSBUIFBv
cCgpIHsgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCB0b3AhPTAgKSA/IDAgOgkoX19hc3NlcnRfZmFp
bCAoInRvcCE9MCIgLCAiLi4vLi4vamlrZXMvc3JjL3R1cGxlLmgiLCAyMDEsIF9fUFJFVFRZX0ZV
TkNUSU9OX18gKSwgMCkpKSA7IHRvcC0tOyByZXR1cm4gYmFzZVt0b3AgPj4gbG9nX2Jsa3NpemVd
W3RvcF07IH0KICAgIGlubGluZSBUIFRvcCgpIHsgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCB0b3Ah
PTAgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInRvcCE9MCIgLCAiLi4vLi4vamlrZXMvc3JjL3R1
cGxlLmgiLCAyMDIsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7IHJldHVybiAoKnRoaXMp
W3RvcC0xXTsgfQoKICAgICAKICAgICAKICAgICAKICAgICAKICAgIGlubGluZSBUJiBOZXh0KCkg
eyBpbnQgaSA9IE5leHRJbmRleCgpOyByZXR1cm4gYmFzZVtpID4+IGxvZ19ibGtzaXplXVtpXTsg
fQoKICAgICAKICAgICAKICAgICAKICAgIGlubGluZSBUdXBsZTxUPiYgb3BlcmF0b3I9KGNvbnN0
IFR1cGxlPFQ+JiByaHMpCiAgICB7CiAgICAgICAgaWYgKHRoaXMgIT0gJnJocykKICAgICAgICB7
CiAgICAgICAgICAgIFJlc2l6ZShyaHMudG9wKTsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCByaHMudG9wOyBpKyspCiAgICAgICAgICAgICAgICBiYXNlW2kgPj4gbG9nX2Jsa3NpemVd
W2ldID0gcmhzLmJhc2VbaSA+PiBsb2dfYmxrc2l6ZV1baV07CiAgICAgICAgfQoKICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogICAgIAogICAgIAogICAgIAogICAgVHVwbGUodW5zaWduZWQg
ZXN0aW1hdGUgPSAwKQogICAgewogICAgICAgIGlmIChlc3RpbWF0ZSA9PSAwKQogICAgICAgIHsK
ICAgICAgICAgICAgbG9nX2Jsa3NpemUgPSBERUZBVUxUX0xPR19CTEtTSVpFOwogICAgICAgICAg
ICBiYXNlX2luY3JlbWVudCA9IERFRkFVTFRfQkFTRV9JTkNSRU1FTlQ7CiAgICAgICAgfQogICAg
ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGZvciAobG9nX2Jsa3NpemUgPSAxOyAoKCh1
bnNpZ25lZCkgMSA8PCBsb2dfYmxrc2l6ZSkgPCBlc3RpbWF0ZSkgJiYgKGxvZ19ibGtzaXplIDwg
MzEpOyBsb2dfYmxrc2l6ZSsrKQogICAgICAgICAgICAgICAgOwogICAgICAgICAgICBpZiAobG9n
X2Jsa3NpemUgPD0gREVGQVVMVF9MT0dfQkxLU0laRSkKICAgICAgICAgICAgICAgIGJhc2VfaW5j
cmVtZW50ID0gMTsKICAgICAgICAgICAgZWxzZSBpZiAobG9nX2Jsa3NpemUgPCAxMykKICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgYmFzZV9pbmNyZW1lbnQgPSAodW5zaWduZWQpIDEgPDwg
KGxvZ19ibGtzaXplIC0gNCk7CiAgICAgICAgICAgICAgICBsb2dfYmxrc2l6ZSA9IDQ7CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBi
YXNlX2luY3JlbWVudCA9ICh1bnNpZ25lZCkgMSA8PCAobG9nX2Jsa3NpemUgLSA4KTsKICAgICAg
ICAgICAgICAgIGxvZ19ibGtzaXplID0gODsKICAgICAgICAgICAgfQogICAgICAgICAgICBiYXNl
X2luY3JlbWVudCsrOyAgCiAgICAgICAgfQoKICAgICAgICBiYXNlX3NpemUgPSAwOwogICAgICAg
IHNpemUgPSAwOwogICAgICAgIHRvcCA9IDA7CiAgICAgICAgYmFzZSA9IF9fbnVsbCA7CiAgICB9
CgogICAgIAogICAgIAogICAgIAogICAgVHVwbGUoaW50IGxvZ19ibGtzaXplXywgaW50IGJhc2Vf
aW5jcmVtZW50XykgOiBsb2dfYmxrc2l6ZShsb2dfYmxrc2l6ZV8pLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2luY3JlbWVudChiYXNlX2lu
Y3JlbWVudF8pCiAgICB7CiAgICAgICAgYmFzZV9zaXplID0gMDsKICAgICAgICBzaXplID0gMDsK
ICAgICAgICB0b3AgPSAwOwogICAgICAgIGJhc2UgPSBfX251bGwgOwogICAgfQoKICAgICAKICAg
ICAKICAgICAKICAgIFR1cGxlKGNvbnN0IFR1cGxlPFQ+JiByaHMpIDogbG9nX2Jsa3NpemUocmhz
LmxvZ19ibGtzaXplKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9pbmNy
ZW1lbnQocmhzLmJhc2VfaW5jcmVtZW50KQogICAgewogICAgICAgIGJhc2Vfc2l6ZSA9IDA7CiAg
ICAgICAgc2l6ZSA9IDA7CiAgICAgICAgYmFzZSA9IF9fbnVsbCA7CiAgICAgICAgKnRoaXMgPSBy
aHM7CiAgICB9CgogICAgIAogICAgIAogICAgIAogICAgflR1cGxlKCkgeyBSZXNpemUoMCk7IH0K
CiAgICAgCgogICAgIAogICAgIAogICAgIAogICAgaW5saW5lIHNpemVfdCBTcGFjZUFsbG9jYXRl
ZCh2b2lkKQogICAgewogICAgICAgIHJldHVybiAoKGJhc2Vfc2l6ZSAqIHNpemVvZihUICoqKSkg
KyAoc2l6ZSAqIHNpemVvZihUKSkpOwogICAgfQoKICAgICAKICAgICAKICAgICAKICAgIGlubGlu
ZSBzaXplX3QgU3BhY2VVc2VkKHZvaWQpCiAgICB7CiAgICAgICAgcmV0dXJuICgoKHNpemUgPj4g
bG9nX2Jsa3NpemUpICogc2l6ZW9mKFQgKiopKSArICh0b3AgKiBzaXplb2YoVCkpKTsKICAgIH0K
fTsKCgogCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgQ29udmVydGlibGVBcnJheSA6IHB1
YmxpYyBUdXBsZTxUPgp7CnB1YmxpYzoKCiAgICBDb252ZXJ0aWJsZUFycmF5KGludCBlc3RpbWF0
ZSA9IDApIDogVHVwbGU8VD4oZXN0aW1hdGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFycmF5KF9fbnVsbCApCiAgICB7fQoKICAgIENvbnZlcnRpYmxlQXJyYXko
aW50IGxvZ19ibGtzaXplLCBpbnQgYmFzZV9pbmNyZW1lbnQpIDogVHVwbGU8VD4obG9nX2Jsa3Np
emUsIGJhc2VfaW5jcmVtZW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoX19udWxsICkKICAgIHt9CgogICAgfkNvbnZl
cnRpYmxlQXJyYXkoKSB7IGRlbGV0ZSBbXSBhcnJheTsgfQoKICAgICAKICAgICAKICAgICAKICAg
ICAKICAgIGlubGluZSBUIComQXJyYXkoKQogICAgewogICAgICAgIGlmICgoISBhcnJheSkgJiYg
VHVwbGU8VD46OnRvcCA+IDApCiAgICAgICAgewogICAgICAgICAgICBhcnJheSA9IG5ldyBUW1R1
cGxlPFQ+Ojp0b3BdOwoKICAgICAgICAgICAgaW50IGkgPSAwLAogICAgICAgICAgICAgICAgcHJv
Y2Vzc2VkX3NpemUgPSAwLAogICAgICAgICAgICAgICAgbiA9IChUdXBsZTxUPjo6dG9wIC0gMSkg
Pj4gVHVwbGU8VD46OmxvZ19ibGtzaXplOyAgCiAgICAgICAgICAgIHdoaWxlIChpIDwgbikKICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgbWVtbW92ZSgmYXJyYXlbcHJvY2Vzc2VkX3NpemVd
LCBUdXBsZTxUPjo6YmFzZVtpXSArIHByb2Nlc3NlZF9zaXplLCBUdXBsZTxUPjo6Qmxrc2l6ZSgp
ICogc2l6ZW9mKFQpKTsKICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSAoVHVwbGU8VD46OmJhc2Vb
aV0gKyBwcm9jZXNzZWRfc2l6ZSk7CiAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICAg
ICBwcm9jZXNzZWRfc2l6ZSArPSBUdXBsZTxUPjo6Qmxrc2l6ZSgpOwogICAgICAgICAgICB9CiAg
ICAgICAgICAgIG1lbW1vdmUoJmFycmF5W3Byb2Nlc3NlZF9zaXplXSwgVHVwbGU8VD46OmJhc2Vb
bl0gKyBwcm9jZXNzZWRfc2l6ZSwgKFR1cGxlPFQ+Ojp0b3AgLSBwcm9jZXNzZWRfc2l6ZSkgKiBz
aXplb2YoVCkpOwogICAgICAgICAgICBkZWxldGUgW10gKFR1cGxlPFQ+OjpiYXNlW25dICsgcHJv
Y2Vzc2VkX3NpemUpOwogICAgICAgICAgICBkZWxldGUgW10gVHVwbGU8VD46OmJhc2U7CiAgICAg
ICAgICAgIFR1cGxlPFQ+OjpiYXNlID0gX19udWxsIDsKICAgICAgICAgICAgVHVwbGU8VD46OnNp
emUgPSAwOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGFycmF5OwogICAgfQoKICAgIGlubGlu
ZSBUJiBvcGVyYXRvcltdKGNvbnN0IGludCBpKQogICAgewogICAgICAgIChzdGF0aWNfY2FzdDx2
b2lkPiAgKCggaSA+PSAwICYmIGkgPCBUdXBsZTxUPjo6dG9wICkgPyAwIDoJKF9fYXNzZXJ0X2Zh
aWwgKCJpID49IDAgJiYgaSA8IFR1cGxlPFQ+Ojp0b3AiICwgIi4uLy4uL2ppa2VzL3NyYy90dXBs
ZS5oIiwgMzU5LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgICAgICByZXR1cm4g
KGFycmF5ID8gYXJyYXlbaV0gOiBUdXBsZTxUPjo6YmFzZVtpID4+IFR1cGxlPFQ+Ojpsb2dfYmxr
c2l6ZV1baV0pOwogICAgfQoKICAgIGlubGluZSB2b2lkIFJlc2l6ZShjb25zdCBpbnQgbiA9IDAp
IHsgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBmYWxzZSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgi
ZmFsc2UiICwgIi4uLy4uL2ppa2VzL3NyYy90dXBsZS5oIiwgMzY0LCBfX1BSRVRUWV9GVU5DVElP
Tl9fICksIDApKSkgOyB9CiAgICBpbmxpbmUgdm9pZCBSZXNldChjb25zdCBpbnQgbiA9IDApIHsg
KHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBmYWxzZSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiZmFs
c2UiICwgIi4uLy4uL2ppa2VzL3NyYy90dXBsZS5oIiwgMzY1LCBfX1BSRVRUWV9GVU5DVElPTl9f
ICksIDApKSkgOyB9CiAgICBpbmxpbmUgVCYgTmV4dCgpCiAgICB7CiAgICAgICAgKHN0YXRpY19j
YXN0PHZvaWQ+ICAoKCAhIGFycmF5ICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCIhIGFycmF5IiAs
ICIuLi8uLi9qaWtlcy9zcmMvdHVwbGUuaCIsIDM2OCwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAw
KSkpIDsKCiAgICAgICAgaW50IGkgPSBUdXBsZTxUPjo6TmV4dEluZGV4KCk7CiAgICAgICAgcmV0
dXJuIFR1cGxlPFQ+OjpiYXNlW2kgPj4gVHVwbGU8VD46OmxvZ19ibGtzaXplXVtpXTsKICAgIH0K
ICAgIGlubGluZSBUdXBsZTxUPiYgb3BlcmF0b3I9KGNvbnN0IFR1cGxlPFQ+JiByaHMpCiAgICB7
CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBmYWxzZSApID8gMCA6CShfX2Fzc2VydF9m
YWlsICgiZmFsc2UiICwgIi4uLy4uL2ppa2VzL3NyYy90dXBsZS5oIiwgMzc1LCBfX1BSRVRUWV9G
VU5DVElPTl9fICksIDApKSkgOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCnByaXZhdGU6
CgogICAgVCAqYXJyYXk7Cn07CgoKIAogCiAKY2xhc3MgT3V0cHV0QnVmZmVyCnsKcHVibGljOgoK
ICAgIE91dHB1dEJ1ZmZlcihpbnQgbG9nX2Jsa3NpemUgPSAxMywgaW50IGJhc2VfaW5jcmVtZW50
ID0gMTI4KSA6IGJ1ZmZlcihsb2dfYmxrc2l6ZSwgYmFzZV9pbmNyZW1lbnQpIHt9CgogICAgaW5s
aW5lIHZvaWQgUHV0QjEodTEgdSkgeyBidWZmZXIuTmV4dCgpID0gdTsgfQoKICAgIGlubGluZSB2
b2lkIFB1dEIyKHUyIHUpCiAgICB7CiAgICAgICAgYnVmZmVyLk5leHQoKSA9IHUgPj4gODsKICAg
ICAgICBidWZmZXIuTmV4dCgpID0gdSAmIDB4ZmY7CiAgICB9CgogICAgaW5saW5lIHZvaWQgUHV0
QjQodTQgdSkKICAgIHsKICAgICAgICBidWZmZXIuTmV4dCgpID0gdSA+PiAyNDsKICAgICAgICBi
dWZmZXIuTmV4dCgpID0gKHUgPj4gMTYpICYgMHhmZjsKICAgICAgICBidWZmZXIuTmV4dCgpID0g
KHUgPj4gOCkgICYgMHhmZjsKICAgICAgICBidWZmZXIuTmV4dCgpID0gdSAmIDB4ZmY7CiAgICB9
CgogICAgaW5saW5lIHZvaWQgcHV0X24odTEgKnUsIGludCBuKQogICAgewogICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgICAgICBidWZmZXIuTmV4dCgpID0gdVtpXTsK
ICAgIH0KCiAgICBpbmxpbmUgYm9vbCBXcml0ZVRvRmlsZShjaGFyICpmaWxlX25hbWUpCiAgICB7
CiAgICAgICAgSmlrZXNBUEk6OkZpbGVXcml0ZXIgKmZpbGUgPSBKaWtlc0FQSTo6Z2V0SW5zdGFu
Y2UoKS0+d3JpdGUoZmlsZV9uYW1lLGJ1ZmZlci50b3ApOwoKICAgICAgICBpZiAoZmlsZSA9PSBf
X251bGwgKSAgCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgc2l6ZV90IHNpemUg
ID0gMDsKICAgICAgICBpbnQgICAgbiAgICAgPSAoYnVmZmVyLnRvcCAtIDEpID4+IGJ1ZmZlci5s
b2dfYmxrc2l6ZTsgIAoKICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBuOyBpKyspCiAgICAgICAg
ewogICAgICAgICAgICBmaWxlLT53cml0ZShidWZmZXIuYmFzZVtpXSArIHNpemUsIGJ1ZmZlci5C
bGtzaXplKCkpOwogICAgICAgICAgICBzaXplICs9IGJ1ZmZlci5CbGtzaXplKCk7CiAgICAgICAg
fQogICAgICAgIGZpbGUtPndyaXRlKGJ1ZmZlci5iYXNlW25dICsgc2l6ZSwgKGJ1ZmZlci50b3Ag
LSBzaXplKSk7CgogICAgICAgIGRlbGV0ZSBmaWxlOwogICAgICAgCiAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICB9Cgpwcml2YXRlOgoKICAgIFR1cGxlPHUxPiBidWZmZXI7Cn07CgoKCgoKCgojIDI0
OSAiLi4vLi4vamlrZXMvc3JjL3BsYXRmb3JtLmgiIDIKCgoKCgoKCgogCiAKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgogCiAKIAp2b2lkIFNldE5ld0hhbmRsZXIoKTsKCgoKCmV4dGVybiB2
b2lkIE91dE9mTWVtb3J5KCk7CgoKIAogCiAKIAogCmV4dGVybiB2b2lkIEZsb2F0aW5nUG9pbnRD
aGVjaygpOwoKCiAKIAogCiAKZXh0ZXJuIGludCBTeXN0ZW1TdGF0KGNvbnN0IGNoYXIgKm5hbWUs
IHN0cnVjdCBzdGF0ICpzdGF0X3N0cnVjdCk7CmV4dGVybiBGSUxFICpTeXN0ZW1Gb3Blbihjb25z
dCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICptb2RlKTsKZXh0ZXJuIHNpemVfdCBTeXN0ZW1GcmVh
ZChjaGFyICpwdHIsIHNpemVfdCBlbGVtZW50X3NpemUsIHNpemVfdCBjb3VudCwgRklMRSAqc3Ry
ZWFtKTsKZXh0ZXJuIGludCBTeXN0ZW1Jc0RpcmVjdG9yeShjaGFyICpuYW1lKTsKCiAKIAogCiAK
ZXh0ZXJuIGNoYXIgUGF0aFNlcGFyYXRvcigpOwpleHRlcm4gaW50IFN5c3RlbU1rZGlyKGNoYXIg
Kik7CmV4dGVybiBpbnQgU3lzdGVtTWtkaXJoaWVyKGNoYXIgKik7CgpleHRlcm4gY2hhciAqIHN0
cmNhdDMoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBj
aGFyICogd3N0cmluZzJzdHJpbmcod2NoYXJfdCAqIGluKTsKCgoKCiAKIAogCiAKIAogCgoKCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoK
ZW51bSBVX2NoYXJzCnsKICAgIFVfTlVMTCA9IDAsICAgICAgICAgICAgICAgVV9OVSA9IFVfTlVM
TCwgICAgICAgICAgICAgCiAgICBVX0JBQ0tTUEFDRSA9IDgsICAgICAgICAgIFVfQlMgPSBVX0JB
Q0tTUEFDRSwgICAgICAgIAogICAgVV9IT1JJWk9OVEFMX1RBQiA9IDksICAgICBVX0hUID0gVV9I
T1JJWk9OVEFMX1RBQiwgICAKICAgIFVfTElORV9GRUVEID0gMTAsICAgICAgICAgVV9MRiA9IFVf
TElORV9GRUVELCAgICAgICAgCiAgICBVX0ZPUk1fRkVFRCA9IDEyLCAgICAgICAgIFVfRkYgPSBV
X0ZPUk1fRkVFRCwgICAgICAgIAogICAgVV9DQVJSSUFHRV9SRVRVUk4gPSAxMywgICBVX0NSID0g
VV9DQVJSSUFHRV9SRVRVUk4sICAKCiAgICBVX0NUTF9aID0gMjYsCiAgICBVX0VTQ0FQRSA9IDI3
LAoKICAgIFVfU1BBQ0UgPSAzMiwgICAgICAgICAgICAgVV9TUCA9IFVfU1BBQ0UsICAgICAgICAg
ICAgICAKICAgIFVfRVhDTEFNQVRJT04gPSAzMywgICAgICAgVV9FWCA9IFVfRVhDTEFNQVRJT04s
ICAgICAgICAKICAgIFVfRE9VQkxFX1FVT1RFID0gMzQsICAgICAgVV9EUSA9IFVfRE9VQkxFX1FV
T1RFLCAgICAgICAKICAgIFVfUE9VTkQgPSAzNSwgICAgICAgICAgICAgVV9TSCA9IFVfUE9VTkQs
ICAgICAgICAgICAgICAKICAgIFVfRE9MTEFSID0gMzYsICAgICAgICAgICAgVV9EUyA9IFVfRE9M
TEFSLCAgICAgICAgICAgICAKICAgIFVfUEVSQ0VOVCA9IDM3LCAgICAgICAgICAgVV9QRSA9IFVf
UEVSQ0VOVCwgICAgICAgICAgICAKICAgIFVfQU1QRVJTQU5EID0gMzgsICAgICAgICAgVV9BTSA9
IFVfQU1QRVJTQU5ELCAgICAgICAgICAKICAgIFVfU0lOR0xFX1FVT1RFID0gMzksICAgICAgVV9T
USA9IFVfU0lOR0xFX1FVT1RFLCAgICAgICAKICAgIFVfTEVGVF9QQVJFTlRIRVNJUyA9IDQwLCAg
VV9MUCA9IFVfTEVGVF9QQVJFTlRIRVNJUywgICAKICAgIFVfUklHSFRfUEFSRU5USEVTSVMgPSA0
MSwgVV9SUCA9IFVfUklHSFRfUEFSRU5USEVTSVMsICAKICAgIFVfU1RBUiA9IDQyLCAgICAgICAg
ICAgICAgVV9TVCA9IFVfU1RBUiwgICAgICAgICAgICAgICAKICAgIFVfUExVUyA9IDQzLCAgICAg
ICAgICAgICAgVV9QTCA9IFVfUExVUywgICAgICAgICAgICAgICAKICAgIFVfTUlOVVMgPSA0NSwg
ICAgICAgICAgICAgVV9NSSA9IFVfTUlOVVMsICAgICAgICAgICAgICAKICAgIFVfQ09NTUEgPSA0
NCwgICAgICAgICAgICAgVV9DTSA9IFVfQ09NTUEsICAgICAgICAgICAgICAKICAgIFVfRE9UID0g
NDYsICAgICAgICAgICAgICAgVV9ETyA9IFVfRE9ULCAgICAgICAgICAgICAgICAKICAgIFVfU0xB
U0ggPSA0NywgICAgICAgICAgICAgVV9TTCA9IFVfU0xBU0gsICAgICAgICAgICAgICAKCiAgICBV
XzAgPSA0OCwgIAogICAgVV8xID0gNDksICAKICAgIFVfMiA9IDUwLCAgCiAgICBVXzMgPSA1MSwg
IAogICAgVV80ID0gNTIsICAKICAgIFVfNSA9IDUzLCAgCiAgICBVXzYgPSA1NCwgIAogICAgVV83
ID0gNTUsICAKICAgIFVfOCA9IDU2LCAgCiAgICBVXzkgPSA1NywgIAoKICAgIFVfQ09MT04gPSA1
OCwgICAgICAgICAgICAgVV9DTyA9IFVfQ09MT04sICAgICAgCiAgICBVX1NFTUlDT0xPTiA9IDU5
LCAgICAgICAgIFVfU0MgPSBVX1NFTUlDT0xPTiwgIAogICAgVV9MRVNTID0gNjAsICAgICAgICAg
ICAgICBVX0xUID0gVV9MRVNTLCAgICAgICAKICAgIFVfRVFVQUwgPSA2MSwgICAgICAgICAgICAg
VV9FUSA9IFVfRVFVQUwsICAgICAgCiAgICBVX0dSRUFURVIgPSA2MiwgICAgICAgICAgIFVfR1Qg
PSBVX0dSRUFURVIsICAgIAogICAgVV9RVUVTVElPTiA9IDYzLCAgICAgICAgICBVX1FVID0gVV9R
VUVTVElPTiwgICAKICAgIFVfQVQgPSA2NCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCgogICAgVV9BID0gNjUsICAKICAgIFVfQiA9IDY2LCAgCiAgICBVX0MgPSA2NywgIAog
ICAgVV9EID0gNjgsICAKICAgIFVfRSA9IDY5LCAgCiAgICBVX0YgPSA3MCwgIAogICAgVV9HID0g
NzEsICAKICAgIFVfSCA9IDcyLCAgCiAgICBVX0kgPSA3MywgIAogICAgVV9KID0gNzQsICAKICAg
IFVfSyA9IDc1LCAgCiAgICBVX0wgPSA3NiwgIAogICAgVV9NID0gNzcsICAKICAgIFVfTiA9IDc4
LCAgCiAgICBVX08gPSA3OSwgIAogICAgVV9QID0gODAsICAKICAgIFVfUSA9IDgxLCAgCiAgICBV
X1IgPSA4MiwgIAogICAgVV9TID0gODMsICAKICAgIFVfVCA9IDg0LCAgCiAgICBVX1UgPSA4NSwg
IAogICAgVV9WID0gODYsICAKICAgIFVfVyA9IDg3LCAgCiAgICBVX1ggPSA4OCwgIAogICAgVV9Z
ID0gODksICAKICAgIFVfWiA9IDkwLCAgCgogICAgVV9MRUZUX0JSQUNLRVQgPSA5MSwgICAgICBV
X0xCID0gVV9MRUZUX0JSQUNLRVQsICAgCiAgICBVX0JBQ0tTTEFTSCA9IDkyLCAgICAgICAgIFVf
UlMgPSBVX0JBQ0tTTEFTSCwgICAgICAKICAgIFVfUklHSFRfQlJBQ0tFVCA9IDkzLCAgICAgVV9S
QiA9IFVfUklHSFRfQlJBQ0tFVCwgIAogICAgVV9DQVJFVCA9IDk0LCAgICAgICAgICAgICBVX0NB
ID0gVV9DQVJFVCwgICAgICAgICAgCiAgICBVX1VOREVSU0NPUkUgPSA5NSwgICAgICAgIFVfVU4g
PSBVX1VOREVSU0NPUkUsICAgICAKCiAgICBVX2EgPSA5NywgIAogICAgVV9iID0gOTgsICAKICAg
IFVfYyA9IDk5LCAgCiAgICBVX2QgPSAxMDAsICAKICAgIFVfZSA9IDEwMSwgIAogICAgVV9mID0g
MTAyLCAgCiAgICBVX2cgPSAxMDMsICAKICAgIFVfaCA9IDEwNCwgIAogICAgVV9pID0gMTA1LCAg
CiAgICBVX2ogPSAxMDYsICAKICAgIFVfayA9IDEwNywgIAogICAgVV9sID0gMTA4LCAgCiAgICBV
X20gPSAxMDksICAKICAgIFVfbiA9IDExMCwgIAogICAgVV9vID0gMTExLCAgCiAgICBVX3AgPSAx
MTIsICAKICAgIFVfcSA9IDExMywgIAogICAgVV9yID0gMTE0LCAgCiAgICBVX3MgPSAxMTUsICAK
ICAgIFVfdCA9IDExNiwgIAogICAgVV91ID0gMTE3LCAgCiAgICBVX3YgPSAxMTgsICAKICAgIFVf
dyA9IDExOSwgIAogICAgVV94ID0gMTIwLCAgCiAgICBVX3kgPSAxMjEsICAKICAgIFVfeiA9IDEy
MiwgIAoKICAgIFVfTEVGVF9CUkFDRSA9IDEyMywgICAgICAgVV9PUyA9IFVfTEVGVF9CUkFDRSwg
ICAKICAgIFVfQkFSID0gMTI0LCAgICAgICAgICAgICAgVV9CQSA9IFVfQkFSLCAgICAgICAgICAK
ICAgIFVfUklHSFRfQlJBQ0UgPSAxMjUsICAgICAgVV9DUyA9IFVfUklHSFRfQlJBQ0UsICAKICAg
IFVfVElMREUgPSAxMjYsICAgICAgICAgICAgVV9USSA9IFVfVElMREUsICAgICAgICAKCiAgICBV
X0JPTSAgICAgICAgID0gMHhmZWZmLAogICAgVV9SRVZFUlNFX0JPTSA9IDB4ZmZmZQp9OwoKCiAK
IAogCmNsYXNzIFN0cmluZ0NvbnN0YW50CnsKcHVibGljOgogICAgc3RhdGljIHdjaGFyX3QgVVNf
QU5EW10sICAKICAgICAgICAgICAgICAgICAgIFVTX0FORF9BTkRbXSwgIAogICAgICAgICAgICAg
ICAgICAgVVNfQU5EX0VRVUFMW10sICAKICAgICAgICAgICAgICAgICAgIFVTX0NPTE9OW10sICAK
ICAgICAgICAgICAgICAgICAgIFVTX0NPTU1BW10sICAKICAgICAgICAgICAgICAgICAgIFVTX0RJ
VklERVtdLCAgCiAgICAgICAgICAgICAgICAgICBVU19ESVZJREVfRVFVQUxbXSwgIAogICAgICAg
ICAgICAgICAgICAgVVNfRE9UW10sICAKICAgICAgICAgICAgICAgICAgIFVTX0VNUFRZW10sICAK
ICAgICAgICAgICAgICAgICAgIFVTX0VRVUFMW10sICAKICAgICAgICAgICAgICAgICAgIFVTX0VR
VUFMX0VRVUFMW10sICAKICAgICAgICAgICAgICAgICAgIFVTX0dSRUFURVJbXSwgIAogICAgICAg
ICAgICAgICAgICAgVVNfR1JFQVRFUl9FUVVBTFtdLCAgCiAgICAgICAgICAgICAgICAgICBVU19M
QlJBQ0VbXSwgIAogICAgICAgICAgICAgICAgICAgVVNfTEJSQUNLRVRbXSwgIAogICAgICAgICAg
ICAgICAgICAgVVNfTEVGVF9TSElGVFtdLCAgCiAgICAgICAgICAgICAgICAgICBVU19MRUZUX1NI
SUZUX0VRVUFMW10sICAKICAgICAgICAgICAgICAgICAgIFVTX0xFU1NbXSwgIAogICAgICAgICAg
ICAgICAgICAgVVNfTEVTU19FUVVBTFtdLCAgCiAgICAgICAgICAgICAgICAgICBVU19MUEFSRU5b
XSwgIAogICAgICAgICAgICAgICAgICAgVVNfTUlOVVNbXSwgIAogICAgICAgICAgICAgICAgICAg
VVNfTUlOVVNfRVFVQUxbXSwgIAogICAgICAgICAgICAgICAgICAgVVNfTUlOVVNfTUlOVVNbXSwg
IAogICAgICAgICAgICAgICAgICAgVVNfTVVMVElQTFlbXSwgIAogICAgICAgICAgICAgICAgICAg
VVNfTVVMVElQTFlfRVFVQUxbXSwgIAogICAgICAgICAgICAgICAgICAgVVNfTk9UW10sICAKICAg
ICAgICAgICAgICAgICAgIFVTX05PVF9FUVVBTFtdLCAgCiAgICAgICAgICAgICAgICAgICBVU19P
UltdLCAgCiAgICAgICAgICAgICAgICAgICBVU19PUl9FUVVBTFtdLCAgCiAgICAgICAgICAgICAg
ICAgICBVU19PUl9PUltdLCAgCiAgICAgICAgICAgICAgICAgICBVU19QTFVTW10sICAKICAgICAg
ICAgICAgICAgICAgIFVTX1BMVVNfRVFVQUxbXSwgIAogICAgICAgICAgICAgICAgICAgVVNfUExV
U19QTFVTW10sICAKICAgICAgICAgICAgICAgICAgIFVTX1FVRVNUSU9OW10sICAKICAgICAgICAg
ICAgICAgICAgIFVTX1JCUkFDRVtdLCAgCiAgICAgICAgICAgICAgICAgICBVU19SQlJBQ0tFVFtd
LCAgCiAgICAgICAgICAgICAgICAgICBVU19SRU1BSU5ERVJbXSwgIAogICAgICAgICAgICAgICAg
ICAgVVNfUkVNQUlOREVSX0VRVUFMW10sICAKICAgICAgICAgICAgICAgICAgIFVTX1JJR0hUX1NI
SUZUW10sICAKICAgICAgICAgICAgICAgICAgIFVTX1JJR0hUX1NISUZUX0VRVUFMW10sICAKICAg
ICAgICAgICAgICAgICAgIFVTX1JQQVJFTltdLCAgCiAgICAgICAgICAgICAgICAgICBVU19TRU1J
Q09MT05bXSwgIAogICAgICAgICAgICAgICAgICAgVVNfVFdJRERMRVtdLCAgCiAgICAgICAgICAg
ICAgICAgICBVU19VTlNJR05FRF9SSUdIVF9TSElGVFtdLCAgCiAgICAgICAgICAgICAgICAgICBV
U19VTlNJR05FRF9SSUdIVF9TSElGVF9FUVVBTFtdLCAgCiAgICAgICAgICAgICAgICAgICBVU19Y
T1JbXSwgIAogICAgICAgICAgICAgICAgICAgVVNfWE9SX0VRVUFMW10sICAKCiAgICAgICAgICAg
ICAgICAgICBVU19Cb29sZWFuW10sICAKICAgICAgICAgICAgICAgICAgIFVTX0J5dGVbXSwgIAog
ICAgICAgICAgICAgICAgICAgVVNfQ2hhcmFjdGVyW10sICAKICAgICAgICAgICAgICAgICAgIFVT
X0NsYXNzW10sICAKICAgICAgICAgICAgICAgICAgIFVTX0NsYXNzTm90Rm91bmRFeGNlcHRpb25b
XSwgIAogICAgICAgICAgICAgICAgICAgVVNfQ2xvbmVhYmxlW10sICAKICAgICAgICAgICAgICAg
ICAgIFVTX0RvdWJsZVtdLCAgCiAgICAgICAgICAgICAgICAgICBVU19FcnJvcltdLCAgCiAgICAg
ICAgICAgICAgICAgICBVU19FeGNlcHRpb25bXSwgIAogICAgICAgICAgICAgICAgICAgVVNfRmxv
YXRbXSwgICAKICAgICAgICAgICAgICAgICAgIFVTX0ludGVnZXJbXSwgIAogICAgICAgICAgICAg
ICAgICAgVVNfTFtdLCAgCiAgICAgICAgICAgICAgICAgICBVU19Mb25nW10sICAKICAgICAgICAg
ICAgICAgICAgIFVTX05vQ2xhc3NEZWZGb3VuZEVycm9yW10sICAKICAgICAgICAgICAgICAgICAg
IFVTX09iamVjdFtdLCAgCiAgICAgICAgICAgICAgICAgICBVU19QT2JqZWN0W10sICAKICAgICAg
ICAgICAgICAgICAgIFVTX1J1bnRpbWVFeGNlcHRpb25bXSwgIAogICAgICAgICAgICAgICAgICAg
VVNfU2VyaWFsaXphYmxlW10sICAKICAgICAgICAgICAgICAgICAgIFVTX1Nob3J0W10sICAKICAg
ICAgICAgICAgICAgICAgIFVTX1N0cmluZ0J1ZmZlcltdLCAgCiAgICAgICAgICAgICAgICAgICBV
U19TdHJpbmdbXSwgIAogICAgICAgICAgICAgICAgICAgVVNfVFlQRVtdLCAgCiAgICAgICAgICAg
ICAgICAgICBVU19UaHJvd2FibGVbXSwgIAogICAgICAgICAgICAgICAgICAgVVNfVm9pZFtdLCAg
CiAgICAgICAgICAgICAgICAgICBVU19fRE9bXSwgIAogICAgICAgICAgICAgICAgICAgVVNfX0RP
X19ET1tdLCAgCiAgICAgICAgICAgICAgICAgICBVU19fRFNbXSwgIAogICAgICAgICAgICAgICAg
ICAgVVNfX0xCX19SQltdLCAgCiAgICAgICAgICAgICAgICAgICBVU19fTFRfY2xpbml0X0dUW10s
ICAKICAgICAgICAgICAgICAgICAgIFVTX19MVF9pbml0X0dUW10sICAKICAgICAgICAgICAgICAg
ICAgIFVTX19RVV9fUVVbXSwgICAKICAgICAgICAgICAgICAgICAgIFVTX19TQ1tdLCAgCiAgICAg
ICAgICAgICAgICAgICBVU19fU0xbXSwgIAoKICAgICAgICAgICAgICAgICAgIFVTX196aXBbXSwg
IAogICAgICAgICAgICAgICAgICAgVVNfX2phcltdLCAgCgogICAgICAgICAgICAgICAgICAgVVNf
X2FycmF5W10sICAKICAgICAgICAgICAgICAgICAgIFVTX19hY2Nlc3NfRE9MTEFSW10sICAKICAg
ICAgICAgICAgICAgICAgIFVTX19jbGFzc19ET0xMQVJbXSwgIAogICAgICAgICAgICAgICAgICAg
VVNfX2NvbnN0cnVjdG9yX0RPTExBUltdLCAgCiAgICAgICAgICAgICAgICAgICBVU19fdGhpc19E
T0xMQVJbXSwgIAogICAgICAgICAgICAgICAgICAgVVNfX3ZhbF9ET0xMQVJbXSwgIAoKICAgICAg
ICAgICAgICAgICAgIFVTX2Fic3RyYWN0W10sICAKICAgICAgICAgICAgICAgICAgIFVTX2FwcGVu
ZFtdLCAgCiAgICAgICAgICAgICAgICAgICBVU19ibG9ja19ET0xMQVJbXSwgIAogICAgICAgICAg
ICAgICAgICAgVVNfYm9vbGVhbltdLCAgCiAgICAgICAgICAgICAgICAgICBVU19icmVha1tdLCAg
CiAgICAgICAgICAgICAgICAgICBVU19ieXRlW10sICAKICAgICAgICAgICAgICAgICAgIFVTX2Nh
c2VbXSwgIAogICAgICAgICAgICAgICAgICAgVVNfY2F0Y2hbXSwgIAogICAgICAgICAgICAgICAg
ICAgVVNfY2hhcltdLCAgCiAgICAgICAgICAgICAgICAgICBVU19jbGFzc1tdLCAgCiAgICAgICAg
ICAgICAgICAgICBVU19jbG9uZVtdLCAgCiAgICAgICAgICAgICAgICAgICBVU19jb25zdFtdLCAg
CiAgICAgICAgICAgICAgICAgICBVU19jb250aW51ZVtdLCAgCiAgICAgICAgICAgICAgICAgICBV
U19kZWZhdWx0W10sICAKICAgICAgICAgICAgICAgICAgIFVTX2RvW10sICAKICAgICAgICAgICAg
ICAgICAgIFVTX2RvdWJsZVtdLCAgCiAgICAgICAgICAgICAgICAgICBVU19lbHNlW10sICAKICAg
ICAgICAgICAgICAgICAgIFVTX2V4dGVuZHNbXSwgIAogICAgICAgICAgICAgICAgICAgVVNfZmFs
c2VbXSwgIAogICAgICAgICAgICAgICAgICAgVVNfZmluYWxbXSwgIAogICAgICAgICAgICAgICAg
ICAgVVNfZmluYWxseVtdLCAgCiAgICAgICAgICAgICAgICAgICBVU19mbG9hdFtdLCAgCiAgICAg
ICAgICAgICAgICAgICBVU19mb3JbXSwgIAogICAgICAgICAgICAgICAgICAgVVNfZm9yTmFtZVtd
LCAgCiAgICAgICAgICAgICAgICAgICBVU19nZXRNZXNzYWdlW10sICAKICAgICAgICAgICAgICAg
ICAgIFVTX2dvdG9bXSwgIAogICAgICAgICAgICAgICAgICAgVVNfaWZbXSwgIAogICAgICAgICAg
ICAgICAgICAgVVNfaW1wbGVtZW50c1tdLCAgCiAgICAgICAgICAgICAgICAgICBVU19pbXBvcnRb
XSwgIAogICAgICAgICAgICAgICAgICAgVVNfaW5zdGFuY2VvZltdLCAgCiAgICAgICAgICAgICAg
ICAgICBVU19pbnRbXSwgIAogICAgICAgICAgICAgICAgICAgVVNfaW50ZXJmYWNlW10sICAKICAg
ICAgICAgICAgICAgICAgIFVTX2phdmFfU0xfaW9bXSwgIAogICAgICAgICAgICAgICAgICAgVVNf
amF2YV9TTF9sYW5nW10sICAKICAgICAgICAgICAgICAgICAgIFVTX2phdmFfU0xfdXRpbFtdLCAg
CiAgICAgICAgICAgICAgICAgICBVU19sZW5ndGhbXSwgIAogICAgICAgICAgICAgICAgICAgVVNf
bG9uZ1tdLCAgCiAgICAgICAgICAgICAgICAgICBVU19uYXRpdmVbXSwgIAogICAgICAgICAgICAg
ICAgICAgVVNfbmV3W10sICAKICAgICAgICAgICAgICAgICAgIFVTX251bGxbXSwgIAogICAgICAg
ICAgICAgICAgICAgVVNfcGFja2FnZVtdLCAgCiAgICAgICAgICAgICAgICAgICBVU19wcml2YXRl
W10sICAKICAgICAgICAgICAgICAgICAgIFVTX3Byb3RlY3RlZFtdLCAgCiAgICAgICAgICAgICAg
ICAgICBVU19wdWJsaWNbXSwgIAogICAgICAgICAgICAgICAgICAgVVNfcmV0dXJuW10sICAKICAg
ICAgICAgICAgICAgICAgIFVTX3Nob3J0W10sICAKICAgICAgICAgICAgICAgICAgIFVTX3N0YXRp
Y1tdLCAgCiAgICAgICAgICAgICAgICAgICBVU19zdHJpY3RmcFtdLCAgCiAgICAgICAgICAgICAg
ICAgICBVU19zdXBlcltdLCAgCiAgICAgICAgICAgICAgICAgICBVU19zd2l0Y2hbXSwgIAogICAg
ICAgICAgICAgICAgICAgVVNfc3luY2hyb25pemVkW10sICAKICAgICAgICAgICAgICAgICAgIFVT
X3RoaXMwW10sICAKICAgICAgICAgICAgICAgICAgIFVTX3RoaXNbXSwgIAogICAgICAgICAgICAg
ICAgICAgVVNfdGhyb3dbXSwgIAogICAgICAgICAgICAgICAgICAgVVNfdGhyb3dzW10sICAKICAg
ICAgICAgICAgICAgICAgIFVTX3RvU3RyaW5nW10sICAKICAgICAgICAgICAgICAgICAgIFVTX3Ry
YW5zaWVudFtdLCAgCiAgICAgICAgICAgICAgICAgICBVU190cnVlW10sICAKICAgICAgICAgICAg
ICAgICAgIFVTX3RyeVtdLCAgCiAgICAgICAgICAgICAgICAgICBVU192b2lkW10sICAKICAgICAg
ICAgICAgICAgICAgIFVTX3ZvbGF0aWxlW10sICAKICAgICAgICAgICAgICAgICAgIFVTX3doaWxl
W10sICAKCiAgICAgICAgICAgICAgICAgICBVU19FT0ZbXTsgIAoKICAgIHN0YXRpYyB3Y2hhcl90
IFVTX3NtYWxsZXN0X2ludFtdOyAgCgogICAgc3RhdGljIGNoYXIgVThTX2NvbW1hbmRfZm9ybWF0
W107CgogICAgc3RhdGljIGludCBVOFNfQ29uc3RhbnRWYWx1ZV9sZW5ndGgsCiAgICAgICAgICAg
ICAgIFU4U19FeGNlcHRpb25zX2xlbmd0aCwKICAgICAgICAgICAgICAgVThTX0lubmVyQ2xhc3Nl
c19sZW5ndGgsCiAgICAgICAgICAgICAgIFU4U19TeW50aGV0aWNfbGVuZ3RoLAogICAgICAgICAg
ICAgICBVOFNfRGVwcmVjYXRlZF9sZW5ndGgsCiAgICAgICAgICAgICAgIFU4U19MaW5lTnVtYmVy
VGFibGVfbGVuZ3RoLAogICAgICAgICAgICAgICBVOFNfTG9jYWxWYXJpYWJsZVRhYmxlX2xlbmd0
aCwKICAgICAgICAgICAgICAgVThTX0NvZGVfbGVuZ3RoLAogICAgICAgICAgICAgICBVOFNfU291
cmNlZmlsZV9sZW5ndGgsCgogICAgICAgICAgICAgICBVOFNfbnVsbF9sZW5ndGgsCiAgICAgICAg
ICAgICAgIFU4U190aGlzX2xlbmd0aDsKCiAgICBzdGF0aWMgY2hhciBVOFNfQltdLCAgCiAgICAg
ICAgICAgICAgICBVOFNfQ1tdLCAgCiAgICAgICAgICAgICAgICBVOFNfQ29kZVtdLCAgCiAgICAg
ICAgICAgICAgICBVOFNfQ29uc3RhbnRWYWx1ZVtdLCAgCiAgICAgICAgICAgICAgICBVOFNfRFtd
LCAgCiAgICAgICAgICAgICAgICBVOFNfRXhjZXB0aW9uc1tdLCAgCiAgICAgICAgICAgICAgICBV
OFNfRltdLCAgCiAgICAgICAgICAgICAgICBVOFNfSVtdLCAgCiAgICAgICAgICAgICAgICBVOFNf
SW5uZXJDbGFzc2VzW10sICAKICAgICAgICAgICAgICAgIFU4U19KW10sICAgCiAgICAgICAgICAg
ICAgICBVOFNfTFBfTGphdmFfU0xfbGFuZ19TTF9TdHJpbmdfU0NfUlBfTGphdmFfU0xfbGFuZ19T
TF9DbGFzc19TQ1tdLCAgCiAgICAgICAgICAgICAgICBVOFNfTFBfTGphdmFfU0xfbGFuZ19TTF9T
dHJpbmdfU0NfUlBfVltdLCAgCiAgICAgICAgICAgICAgICBVOFNfTFBfUlBfTGphdmFfU0xfbGFu
Z19TTF9TdHJpbmdfU0NbXSwgIAogICAgICAgICAgICAgICAgVThTX0xQX1JQX1ZbXSwgIAogICAg
ICAgICAgICAgICAgVThTX0xpbmVOdW1iZXJUYWJsZVtdLCAgCiAgICAgICAgICAgICAgICBVOFNf
TG9jYWxWYXJpYWJsZVRhYmxlW10sICAKICAgICAgICAgICAgICAgIFU4U19TW10sICAKICAgICAg
ICAgICAgICAgIFU4U19Tb3VyY2VmaWxlW10sICAKICAgICAgICAgICAgICAgIFU4U19TeW50aGV0
aWNbXSwgIAogICAgICAgICAgICAgICAgVThTX0RlcHJlY2F0ZWRbXSwgIAogICAgICAgICAgICAg
ICAgVThTX1ZbXSwgIAogICAgICAgICAgICAgICAgVThTX1pbXSwgIAoKICAgICAgICAgICAgICAg
IFU4U19fRE9bXSwgIAogICAgICAgICAgICAgICAgVThTX19ET19jbGFzc1tdLCAgCiAgICAgICAg
ICAgICAgICBVOFNfX0RPX2phdmFbXSwgIAogICAgICAgICAgICAgICAgVThTX19ET190b2tbXSwg
IAogICAgICAgICAgICAgICAgVThTX19ET191W10sICAKICAgICAgICAgICAgICAgIFU4U19fTFBb
XSwgIAogICAgICAgICAgICAgICAgVThTX19SUFtdLCAgCiAgICAgICAgICAgICAgICBVOFNfX1NM
W10sICAKICAgICAgICAgICAgICAgIFU4U19fU1RbXSwgIAoKICAgICAgICAgICAgICAgIFU4U19j
bGFzc1tdLCAgCiAgICAgICAgICAgICAgICBVOFNfamF2YVtdLCAgCiAgICAgICAgICAgICAgICBV
OFNfamF2YV9TTF9sYW5nX1NMX0NsYXNzTm90Rm91bmRFeGNlcHRpb25bXSwgIAogICAgICAgICAg
ICAgICAgVThTX2phdmFfU0xfbGFuZ19TTF9DbGFzc1tdLCAgCiAgICAgICAgICAgICAgICBVOFNf
amF2YV9TTF9sYW5nX1NMX0ludGVybmFsRXJyb3JbXSwgIAogICAgICAgICAgICAgICAgVThTX2ph
dmFfU0xfbGFuZ19TTF9Ob0NsYXNzRGVmRm91bmRFcnJvcltdLCAgCiAgICAgICAgICAgICAgICBV
OFNfamF2YV9TTF9sYW5nX1NMX1N0cmluZ0J1ZmZlcltdLCAgCiAgICAgICAgICAgICAgICBVOFNf
amF2YV9TTF9sYW5nX1NMX1Rocm93YWJsZVtdLCAgCiAgICAgICAgICAgICAgICBVOFNfbnVsbFtd
LCAgCiAgICAgICAgICAgICAgICBVOFNfcXVpdFtdLCAgCiAgICAgICAgICAgICAgICBVOFNfdGhp
c1tdLCAgCgogICAgICAgICAgICAgICAgVThTX0xQX0xCX0NfUlBfTGphdmFfU0xfbGFuZ19TTF9T
dHJpbmdCdWZmZXJfU0NbXSwgIAogICAgICAgICAgICAgICAgVThTX0xQX0NfUlBfTGphdmFfU0xf
bGFuZ19TTF9TdHJpbmdCdWZmZXJfU0NbXSwgIAogICAgICAgICAgICAgICAgVThTX0xQX1pfUlBf
TGphdmFfU0xfbGFuZ19TTF9TdHJpbmdCdWZmZXJfU0NbXSwgIAogICAgICAgICAgICAgICAgVThT
X0xQX0lfUlBfTGphdmFfU0xfbGFuZ19TTF9TdHJpbmdCdWZmZXJfU0NbXSwgIAogICAgICAgICAg
ICAgICAgVThTX0xQX0pfUlBfTGphdmFfU0xfbGFuZ19TTF9TdHJpbmdCdWZmZXJfU0NbXSwgIAog
ICAgICAgICAgICAgICAgVThTX0xQX0ZfUlBfTGphdmFfU0xfbGFuZ19TTF9TdHJpbmdCdWZmZXJf
U0NbXSwgIAogICAgICAgICAgICAgICAgVThTX0xQX0RfUlBfTGphdmFfU0xfbGFuZ19TTF9TdHJp
bmdCdWZmZXJfU0NbXSwgIAogICAgICAgICAgICAgICAgVThTX0xQX0xqYXZhX1NMX2xhbmdfU0xf
U3RyaW5nX1NDX1JQX0xqYXZhX1NMX2xhbmdfU0xfU3RyaW5nQnVmZmVyX1NDW10sICAKICAgICAg
ICAgICAgICAgIFU4U19MUF9MamF2YV9TTF9sYW5nX1NMX09iamVjdF9TQ19SUF9MamF2YV9TTF9s
YW5nX1NMX1N0cmluZ0J1ZmZlcl9TQ1tdOyAgCgogICAgc3RhdGljIGNoYXIgVThTX3NtYWxsZXN0
X2ludFtdLCAgICAgICAKICAgICAgICAgICAgICAgIFU4U19zbWFsbGVzdF9sb25nX2ludFtdLCAg
CiAgICAgICAgICAgICAgICBVOFNfTmFOW10sICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgVThTX3Bvc19JbmZpbml0eVtdLCAgICAgICAKICAgICAgICAgICAgICAgIFU4U19uZWdfSW5m
aW5pdHlbXSwgICAgICAgCiAgICAgICAgICAgICAgICBVOFNfcG9zX1plcm9bXSwgICAgICAgICAg
IAogICAgICAgICAgICAgICAgVThTX25lZ19aZXJvW107ICAgICAgICAgICAKfTsKCgogCiAKIApj
bGFzcyBJbnRUb1N0cmluZwp7CnB1YmxpYzoKICAgIEludFRvU3RyaW5nKGludCk7CgogICAgY2hh
ciAqU3RyaW5nKCkgeyByZXR1cm4gc3RyOyB9CiAgICBpbnQgTGVuZ3RoKCkgICB7IHJldHVybiAo
JmluZm9bVEFJTF9JTkRFWF0pIC0gc3RyOyB9Cgpwcml2YXRlOgogICAgZW51bSB7IFRBSUxfSU5E
RVggPSAxICsgMTAgfTsgIAoKICAgIGNoYXIgaW5mb1tUQUlMX0lOREVYICsgMV0sICAKICAgICAg
ICAgKnN0cjsKfTsKCgogCiAKIApjbGFzcyBJbnRUb1dzdHJpbmcKewpwdWJsaWM6CiAgICBJbnRU
b1dzdHJpbmcoaW50KTsKCiAgICB3Y2hhcl90ICpTdHJpbmcoKSB7IHJldHVybiB3c3RyOyB9CiAg
ICBpbnQgTGVuZ3RoKCkgICAgICB7IHJldHVybiAoJndpbmZvW1RBSUxfSU5ERVhdKSAtIHdzdHI7
IH0KCnByaXZhdGU6CiAgICBlbnVtIHsgVEFJTF9JTkRFWCA9IDEgKyAxMCB9OyAgCgogICAgd2No
YXJfdCB3aW5mb1tUQUlMX0lOREVYICsgMV0sICAKICAgICAgICAgICAgKndzdHI7Cn07CgoKIAog
CiAKY2xhc3MgVUxvbmdJbnQ7CmNsYXNzIFVMb25nVG9EZWNTdHJpbmcKewpwdWJsaWM6CiAgICBV
TG9uZ1RvRGVjU3RyaW5nKFVMb25nSW50ICYpOwoKICAgIGNoYXIgKlN0cmluZygpIHsgcmV0dXJu
IHN0cjsgfQogICAgaW50IExlbmd0aCgpICAgeyByZXR1cm4gKCZpbmZvW1RBSUxfSU5ERVhdKSAt
IHN0cjsgfQoKcHJpdmF0ZToKICAgIGVudW0geyBUQUlMX0lOREVYID0gMjAgfTsgIAoKICAgIGNo
YXIgaW5mb1tUQUlMX0lOREVYICsgMV0sICAKICAgICAgICAgKnN0cjsKfTsKCgogCiAKIApjbGFz
cyBCYXNlTG9uZzsKY2xhc3MgTG9uZ1RvT2N0U3RyaW5nCnsKcHVibGljOgogICAgTG9uZ1RvT2N0
U3RyaW5nKEJhc2VMb25nICYpOwoKICAgIGNoYXIgKlN0cmluZygpIHsgcmV0dXJuIHN0ciArIDE7
IH0gIAogICAgY2hhciAqU3RyaW5nV2l0aEJhc2UoKSB7IHJldHVybiBzdHI7IH0KICAgIGludCBM
ZW5ndGgoKSAgIHsgcmV0dXJuICgmaW5mb1tUQUlMX0lOREVYXSkgLSBzdHI7IH0KCnByaXZhdGU6
CiAgICBlbnVtIHsgVEFJTF9JTkRFWCA9IDEgKyAyMiB9OyAgCgogICAgY2hhciBpbmZvW1RBSUxf
SU5ERVggKyAxXSwgIAogICAgICAgICAqc3RyOwp9OwoKCiAKIAogCmNsYXNzIExvbmdUb0hleFN0
cmluZwp7CnB1YmxpYzoKICAgIExvbmdUb0hleFN0cmluZyhCYXNlTG9uZyAmKTsKCiAgICBjaGFy
ICpTdHJpbmcoKSB7IHJldHVybiBzdHIgKyAyOyB9ICAKICAgIGNoYXIgKlN0cmluZ1dpdGhCYXNl
KCkgeyByZXR1cm4gc3RyOyB9CiAgICBpbnQgTGVuZ3RoKCkgICB7IHJldHVybiAoJmluZm9bVEFJ
TF9JTkRFWF0pIC0gc3RyOyB9Cgpwcml2YXRlOgogICAgZW51bSB7IFRBSUxfSU5ERVggPSAxICsg
MSArIDE2IH07ICAKCiAgICBjaGFyIGluZm9bVEFJTF9JTkRFWCArIDFdLCAgCiAgICAgICAgICpz
dHI7Cn07CgoKIAogCiAKY2xhc3MgTG9uZ0ludDsKY2xhc3MgTG9uZ1RvRGVjU3RyaW5nCnsKcHVi
bGljOgogICAgTG9uZ1RvRGVjU3RyaW5nKExvbmdJbnQgJik7CgogICAgY2hhciAqU3RyaW5nKCkg
eyByZXR1cm4gc3RyOyB9CiAgICBpbnQgTGVuZ3RoKCkgICB7IHJldHVybiAoJmluZm9bVEFJTF9J
TkRFWF0pIC0gc3RyOyB9Cgpwcml2YXRlOgogICAgZW51bSB7IFRBSUxfSU5ERVggPSAxICsgMTkg
fTsgIAoKICAgIGNoYXIgaW5mb1tUQUlMX0lOREVYICsgMV0sICAKICAgICAgICAgKnN0cjsKfTsK
CiAKIAogCmNsYXNzIElFRUVkb3VibGU7CmNsYXNzIERvdWJsZVRvU3RyaW5nCnsKcHVibGljOgog
ICAgRG91YmxlVG9TdHJpbmcoY29uc3QgSUVFRWRvdWJsZSAmKTsKCiAgICBjb25zdCBjaGFyICpT
dHJpbmcoKSBjb25zdCB7IHJldHVybiBzdHI7IH0KICAgIGludCBMZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBsZW5ndGg7IH0KCnByaXZhdGU6CiAgICB2b2lkIEZvcm1hdChjaGFyICosIGludCwgYm9v
bCk7CgogICAgZW51bQogICAgewogICAgICAgIE1BWElNVU1fUFJFQ0lTSU9OID0gMTcsCiAgICAg
ICAgTUFYSU1VTV9TVFJfTEVOR1RIID0gMSArIE1BWElNVU1fUFJFQ0lTSU9OICsgMSArIDUgIAog
ICAgfTsKCiAgICBjaGFyIHN0cltNQVhJTVVNX1NUUl9MRU5HVEggKyAxXTsgIAogICAgaW50IGxl
bmd0aDsKfTsKCiAKIAogCmNsYXNzIElFRUVmbG9hdDsKY2xhc3MgRmxvYXRUb1N0cmluZwp7CnB1
YmxpYzoKICAgIEZsb2F0VG9TdHJpbmcoY29uc3QgSUVFRWZsb2F0ICYpOwoKICAgIGNvbnN0IGNo
YXIgKlN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHN0cjsgfQogICAgaW50IExlbmd0aCgpIGNvbnN0
ICAgeyByZXR1cm4gbGVuZ3RoOyB9Cgpwcml2YXRlOgogICAgdm9pZCBGb3JtYXQoY2hhciAqLCBp
bnQsIGJvb2wpOwoKICAgIGVudW0KICAgIHsKICAgICAgICBNQVhJTVVNX1BSRUNJU0lPTiA9IDks
CiAgICAgICAgTUFYSU1VTV9TVFJfTEVOR1RIID0gMSArIE1BWElNVU1fUFJFQ0lTSU9OICsgMSAr
IDQgIAogICAgfTsKCiAgICBjaGFyIHN0cltNQVhJTVVNX1NUUl9MRU5HVEggKyAxXTsgIAogICAg
aW50IGxlbmd0aDsKfTsKCgoKY2xhc3MgTG9uZ0ludDsKY2xhc3MgVUxvbmdJbnQ7CiAKIAogCmNs
YXNzIE9zdHJlYW0KewogICAgb3N0cmVhbSAqb3M7CgogICAgYm9vbCBleHBhbmRfd2NoYXI7Cgpw
dWJsaWM6CgogICAgT3N0cmVhbSgpIDogb3MoJmNlcnIpLAogICAgICAgICAgICAgICAgZXhwYW5k
X3djaGFyKGZhbHNlKQogICAge30KCiAgICBPc3RyZWFtKG9zdHJlYW0gKl9vcykgOiBvcyhfb3Mp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kX3djaGFyKGZhbHNlKQogICAge30K
CiAgICB2b2lkIFN0YW5kYXJkT3V0cHV0KCkgeyBvcyA9ICZjb3V0OyB9CiAgICB2b2lkIFN0YW5k
YXJkRXJyb3IoKSB7IG9zID0gJmNlcnI7IH0KICAgIHZvaWQgU2V0RXhwYW5kV2NoYXIoYm9vbCB2
YWwgPSB0cnVlKSB7IGV4cGFuZF93Y2hhciA9IHZhbDsgfQogICAgYm9vbCBFeHBhbmRXY2hhcigp
IHsgcmV0dXJuIGV4cGFuZF93Y2hhcjsgfQoKICAgIE9zdHJlYW0gJm9wZXJhdG9yPDwod2NoYXJf
dCBjaCkKICAgIHsKICAgICAgICBpZiAoY2ggPj4gOCA9PSAwKQogICAgICAgICAgICAqb3MgPDwg
KGNoYXIpIGNoOwogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGlmIChleHBhbmRf
d2NoYXIgPT0gMCkKICAgICAgICAgICAgICAgICpvcyA8PCAoY2hhcikgVV9RVUVTVElPTjsKICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqb3MgPDwgKGNoYXIp
IFVfQkFDS1NMQVNICiAgICAgICAgICAgICAgICAgICAgPDwgKGNoYXIpIFVfdTsKCiAgICAgICAg
ICAgICAgICBjaGFyIHN0cls0XTsKICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAzOyBpID49
IDA7IGktLSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpbnQgZCA9IGNo
ICUgMTY7CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGQpCiAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyW2ldID0gVV9BOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTE6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJbaV0gPSBVX0I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAxMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cltpXSA9IFVfQzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDEzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyW2ld
ID0gVV9EOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMTQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJbaV0gPSBV
X0U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAxNToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cltpXSA9IFVfRjsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyW2ldID0gVV8wICsgZDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICBjaCAvPSAxNjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICpvcyA8PCBzdHJbMF07CiAgICAgICAgICAgICAgICAqb3MgPDwgc3RyWzFdOwogICAg
ICAgICAgICAgICAgKm9zIDw8IHN0clsyXTsKICAgICAgICAgICAgICAgICpvcyA8PCBzdHJbM107
CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
ICBPc3RyZWFtICZvcGVyYXRvcjw8KGNvbnN0IHdjaGFyX3QgKnN0cikKICAgIHsKICAgICAgICBm
b3IgKDsgKnN0cjsgc3RyKyspCiAgICAgICAgICAgICgqdGhpcykgPDwgKnN0cjsKICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgoKICAgIE9zdHJlYW0gJm9wZXJhdG9yPDwoY2hhciBjKQogICAg
ewogICAgICAgICpvcyA8PCBjOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBPc3Ry
ZWFtICZvcGVyYXRvcjw8KHNpZ25lZCBjaGFyIGMpCiAgICB7CiAgICAgICAgKm9zIDw8IGM7CiAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIE9zdHJlYW0gJm9wZXJhdG9yPDwodW5zaWdu
ZWQgY2hhciBjKQogICAgewogICAgICAgICpvcyA8PCBjOwogICAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgICBPc3RyZWFtICZvcGVyYXRvcjw8KGNvbnN0IGNoYXIgKmMpCiAgICB7CiAgICAg
ICAgKm9zIDw8IGM7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIE9zdHJlYW0gJm9w
ZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKmMpCiAgICB7CiAgICAgICAgKm9zIDw8IGM7CiAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIE9zdHJlYW0gJm9wZXJhdG9yPDwoY29uc3Qg
dW5zaWduZWQgY2hhciAqYykKICAgIHsKCgoKCgoKCiAgICAgICAgKm9zIDw8IGM7CgogICAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgICBPc3RyZWFtICZvcGVyYXRvcjw8KGludCBhKQogICAg
ewogICAgICAgICpvcyA8PCBhOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBPc3Ry
ZWFtICZvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBhKQogICAgewogICAgICAgICpvcyA8PCBhOwog
ICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBPc3RyZWFtICZvcGVyYXRvcjw8KExvbmdJ
bnQpOwogICAgT3N0cmVhbSAmb3BlcmF0b3I8PChVTG9uZ0ludCk7CgogICAgT3N0cmVhbSAmb3Bl
cmF0b3I8PChmbG9hdCBmKQogICAgewogICAgICAgICpvcyA8PCBmOwogICAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgICBPc3RyZWFtICZvcGVyYXRvcjw8KGRvdWJsZSBkKQogICAgewogICAg
ICAgICpvcyA8PCBkOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBjaGFyIGZpbGwo
Y2hhciBjKSB7IHJldHVybiBvcyAtPiBmaWxsKGMpOyB9CgogICAgT3N0cmVhbSAmZmx1c2goKQog
ICAgewogICAgICAgIG9zIC0+IGZsdXNoKCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICAgIGludCB3aWR0aChpbnQgdykKICAgIHsKICAgICAgICByZXR1cm4gb3MgLT4gd2lkdGgodyk7
CiAgICB9CgogICAgT3N0cmVhbSAmb3BlcmF0b3I8PChpb3MgJigqZikoaW9zJikpCiAgICB7CiAg
ICAgICAgKCpmKSgqb3MpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBPc3RyZWFt
ICZvcGVyYXRvcjw8KG9zdHJlYW0gJigqZikob3N0cmVhbSYpKQogICAgewogICAgICAgICgqZiko
Km9zKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cn07CgpleHRlcm4gT3N0cmVhbSBDb3V0
cHV0OwoKIAogCiAKIAogCiAKIAoKCgogCiAKIAogCmNsYXNzIEVycm9yU3RyaW5nOiBwdWJsaWMg
Q29udmVydGlibGVBcnJheTx3Y2hhcl90PiAKeyAKIHB1YmxpYzoKICAgIEVycm9yU3RyaW5nKCk7
IAogICAgCiAgICBFcnJvclN0cmluZyAmb3BlcmF0b3I8PChjb25zdCB3Y2hhcl90ICpzKTsKICAg
IEVycm9yU3RyaW5nICZvcGVyYXRvcjw8KGNvbnN0IHdjaGFyX3QgYyApOwogICAgRXJyb3JTdHJp
bmcgJm9wZXJhdG9yPDwoY29uc3QgY2hhciAgICAqcyk7CiAgICBFcnJvclN0cmluZyAmb3BlcmF0
b3I8PChjb25zdCBjaGFyICAgIGMgKTsKICAgIEVycm9yU3RyaW5nICZvcGVyYXRvcjw8KGludCBu
KTsKCiAgICB2b2lkIHdpZHRoKGludCB3KTsKICAgIHZvaWQgZmlsbChjb25zdCBjaGFyIGMpOwog
ICAgCiAgICB3Y2hhcl90ICpBcnJheSgpOwoKIHByaXZhdGU6CgogICAgdm9pZCBkb19maWxsKGlu
dCBuKTsKICAgIGNoYXIgZmlsbF9jaGFyICAgOwogICAgaW50ICBmaWVsZF93aWR0aCA7Cn07CgoK
CgoKCgojIDExICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiIDIKCiMgMSAiLi4vLi4vamlrZXMv
c3JjL2RvdWJsZS5oIiAxCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAoKCgoKCiMgMSAiLi4vLi4vamlrZXMvc3JjL2xvbmcuaCIgMQog
CiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgpjbGFzcyBJRUVFZG91YmxlOwpjbGFzcyBJRUVFZmxv
YXQ7CgpjbGFzcyBMb25nSW50OwpjbGFzcyBVTG9uZ0ludDsKCmNsYXNzIEJhc2VMb25nCnsKcHJv
dGVjdGVkOgogICAgZW51bSAKICAgIHsKICAgICAgICBNQVhfSU5UICAgID0gMHg3RkZGRkZGRiwg
IAogICAgICAgIE1JTl9JTlQgICAgPSAweDgwMDAwMDAwLCAgCiAgICAgICAgU0hPUlRfTUFTSyA9
IDB4RkZGRiwgICAgICAKICAgICAgICBTSUdOX0JJVCAgID0gMHg4MDAwMDAwMCAgCiAgICB9OwoK
ICAgIHVuaW9uCiAgICB7CiAgICAgICAgZG91YmxlIGRvdWJsZV92YWx1ZTsKCgoKICAgICAgICB1
OCB3b3JkczsKCiAgICB9IHZhbHVlOwoKICAgICAKICAgIGlubGluZSB2b2lkIHNldEhpZ2hXb3Jk
KHU0IGhpZ2gpIHsKCgoKCgoKCiAgICAgICAgc2V0SGlnaEFuZExvd1dvcmRzKGhpZ2gsIExvd1dv
cmQoKSk7CgogICAgfQoKICAgICAKICAgIGlubGluZSB2b2lkIHNldExvd1dvcmQodTQgbG93KSB7
CgoKCgoKCgogICAgICAgIHNldEhpZ2hBbmRMb3dXb3JkcyhIaWdoV29yZCgpLCBsb3cpOwoKICAg
IH0KICAgIAogICAgIAogICAgaW5saW5lIHZvaWQgc2V0SGlnaEFuZExvd1dvcmRzKHU0IGhpZ2gs
IHU0IGxvdykgewojIDgyICIuLi8uLi9qaWtlcy9zcmMvbG9uZy5oIgoKICAgICAgICB2YWx1ZS53
b3JkcyA9ICgoKHU4KSBoaWdoKSA8PCAzMikgfCBsb3c7CgogICAgfQoKICAgICAKICAgIGlubGlu
ZSB2b2lkIHNldEhpZ2hBbmRMb3dXb3Jkcyhjb25zdCBCYXNlTG9uZyAmb3ApCiAgICB7CgoKCgog
ICAgICAgIHZhbHVlLndvcmRzID0gb3AudmFsdWUud29yZHM7CgogICAgfQoKcHVibGljOgoKIyAx
MDggIi4uLy4uL2ppa2VzL3NyYy9sb25nLmgiCgogICAgaW5saW5lIHU0IEhpZ2hXb3JkKHZvaWQp
IGNvbnN0IHsgcmV0dXJuICgodTQpICh2YWx1ZS53b3JkcyA+PiAzMikpOyB9CiAgICBpbmxpbmUg
dTQgTG93V29yZCh2b2lkKSBjb25zdCAgeyByZXR1cm4gKCh1NCkgdmFsdWUud29yZHMpOyB9CiAg
ICBpbmxpbmUgdTggV29yZHModm9pZCkgY29uc3QgICAgeyByZXR1cm4gdmFsdWUud29yZHM7IH0K
CgogICAgZG91YmxlIERvdWJsZVZpZXcodm9pZCkgY29uc3QgeyByZXR1cm4gdmFsdWUuZG91Ymxl
X3ZhbHVlOyB9CgogICAgQmFzZUxvbmcodTQgaGlnaCwgdTQgbG93KTsKICAgIEJhc2VMb25nKHU0
IGEpOyAgCiAgICBCYXNlTG9uZyhpNCBhKTsgIAogICAgaW5saW5lIEJhc2VMb25nICh2b2lkKSB7
fSAgCgogICAgaW5saW5lIEJhc2VMb25nKHU4IGEpIHsgdmFsdWUud29yZHMgPSBhOyB9ICAKCgog
ICAgQmFzZUxvbmcgIG9wZXJhdG9yKyAgKGNvbnN0IEJhc2VMb25nKSBjb25zdDsgIAogICAgQmFz
ZUxvbmcgIG9wZXJhdG9yKyAgKHZvaWQpIGNvbnN0OyAgICAgIAogICAgQmFzZUxvbmcgJm9wZXJh
dG9yKz0gKGNvbnN0IEJhc2VMb25nKTsgIAogICAgQmFzZUxvbmcgIG9wZXJhdG9yKysgKGludCk7
ICAgICAgIAogICAgQmFzZUxvbmcgIG9wZXJhdG9yKysgKHZvaWQpOyAgICAgIAoKICAgIEJhc2VM
b25nICBvcGVyYXRvci0gIChjb25zdCBCYXNlTG9uZykgY29uc3Q7ICAKICAgIEJhc2VMb25nICBv
cGVyYXRvci0gICh2b2lkKSBjb25zdDsgICAgICAKICAgIEJhc2VMb25nICZvcGVyYXRvci09IChj
b25zdCBCYXNlTG9uZyk7ICAKICAgIEJhc2VMb25nICBvcGVyYXRvci0tIChpbnQpOyAgICAgICAK
ICAgIEJhc2VMb25nICBvcGVyYXRvci0tICh2b2lkKTsgICAgICAKCiAgICBCYXNlTG9uZyAgb3Bl
cmF0b3IqICAoY29uc3QgQmFzZUxvbmcpIGNvbnN0OyAgCiAgICBCYXNlTG9uZyAmb3BlcmF0b3Iq
PSAoY29uc3QgQmFzZUxvbmcpOyAgCgogICAgIAogICAgIAogICAgIAogICAgIAogICAgQmFzZUxv
bmcgIG9wZXJhdG9yPDwgKGludCkgY29uc3Q7ICAgICAgIAogICAgQmFzZUxvbmcgJm9wZXJhdG9y
PDw9KGludCk7ICAgICAgIAoKICAgIGJvb2wgICAgICBvcGVyYXRvcj09IChjb25zdCBCYXNlTG9u
ZykgY29uc3Q7ICAKICAgIGJvb2wgICAgICBvcGVyYXRvciE9IChjb25zdCBCYXNlTG9uZykgY29u
c3Q7ICAKICAgIGJvb2wgICAgICBvcGVyYXRvciEgICh2b2lkKSBjb25zdDsgICAgICAKCiAgICBC
YXNlTG9uZyAgb3BlcmF0b3J+ICAodm9pZCkgY29uc3Q7ICAgICAgCiAgICBCYXNlTG9uZyAgb3Bl
cmF0b3JeICAoY29uc3QgQmFzZUxvbmcpIGNvbnN0OyAgCiAgICBCYXNlTG9uZyAmb3BlcmF0b3Je
PSAoY29uc3QgQmFzZUxvbmcpOyAgCiAgICBCYXNlTG9uZyAgb3BlcmF0b3J8ICAoY29uc3QgQmFz
ZUxvbmcpIGNvbnN0OyAgCiAgICBCYXNlTG9uZyAmb3BlcmF0b3J8PSAoY29uc3QgQmFzZUxvbmcp
OyAgCiAgICBCYXNlTG9uZyAgb3BlcmF0b3ImICAoY29uc3QgQmFzZUxvbmcpIGNvbnN0OyAgCiAg
ICBCYXNlTG9uZyAmb3BlcmF0b3ImPSAoY29uc3QgQmFzZUxvbmcpOyAgCgogICAgYm9vbCAgICAg
IG9wZXJhdG9yJiYgKGNvbnN0IEJhc2VMb25nKSBjb25zdDsgIAogICAgYm9vbCAgICAgIG9wZXJh
dG9yfHwgKGNvbnN0IEJhc2VMb25nKSBjb25zdDsgIAoKICAgIHN0YXRpYyB2b2lkIERpdmlkZShj
b25zdCBCYXNlTG9uZyAmLCBjb25zdCBCYXNlTG9uZyAmLCBCYXNlTG9uZyAmLCBCYXNlTG9uZyAm
KTsKCiAgICBvcGVyYXRvciBMb25nSW50KHZvaWQpIGNvbnN0OyAgICAgICAgICAgCiAgICBvcGVy
YXRvciBVTG9uZ0ludCh2b2lkKSBjb25zdDsgICAgICAgICAgCgogICAgIAogICAgaW5saW5lIGk0
IGhhc2hDb2RlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChIaWdoV29yZCgpIF4gTG93V29yZCgpKTsg
fQp9OwoKCmNsYXNzIExvbmdJbnQgOiBwdWJsaWMgQmFzZUxvbmcKewpwdWJsaWM6CgogICAgaW5s
aW5lIExvbmdJbnQgKHU0IGEsIHU0IGIpIDogQmFzZUxvbmcgKGEsIGIpIHt9CiAgICBpbmxpbmUg
TG9uZ0ludCAodTQgYSkgOiBCYXNlTG9uZyAoYSkge30gIAogICAgaW5saW5lIExvbmdJbnQgKGk0
IGEpIDogQmFzZUxvbmcgKGEpIHt9ICAKICAgIGlubGluZSBMb25nSW50ICh2b2lkKSA6IEJhc2VM
b25nICgpIHt9ICAKCiAgICBleHBsaWNpdAoKICAgICAgICAgICBMb25nSW50IChjb25zdCBJRUVF
ZG91YmxlICYpOyAgCgoKICAgIGV4cGxpY2l0IAoKICAgICAgICAgICBMb25nSW50IChjb25zdCBJ
RUVFZmxvYXQgJik7ICAKCiAgICBpbmxpbmUgTG9uZ0ludCh1OCBhKSA6IEJhc2VMb25nIChhKSB7
fSAgCgoKICAgICAKICAgICAKICAgICAKICAgICAKICAgIHN0YXRpYyBpbmxpbmUgY29uc3QgTG9u
Z0ludCBNQVhfTE9ORyh2b2lkKQogICAgewogICAgICAgIHJldHVybiBtYXhfbG9uZ19jb25zdCA/
ICptYXhfbG9uZ19jb25zdAogICAgICAgICAgICA6ICoobWF4X2xvbmdfY29uc3QgPSBuZXcgTG9u
Z0ludCgweDdGRkZGRkZGLCAweEZGRkZGRkZGKSk7CiAgICB9CiAgICBzdGF0aWMgaW5saW5lIGNv
bnN0IExvbmdJbnQgTUlOX0xPTkcodm9pZCkKICAgIHsKICAgICAgICByZXR1cm4gbWluX2xvbmdf
Y29uc3QgPyAqbWluX2xvbmdfY29uc3QKICAgICAgICAgICAgOiAqKG1pbl9sb25nX2NvbnN0ID0g
bmV3IExvbmdJbnQoMHg4MDAwMDAwMCwgMHgwMDAwMDAwMCkpOwogICAgfQogICAgc3RhdGljIHZv
aWQgQ29uc3RhbnRDbGVhbnVwKHZvaWQpCiAgICB7CiAgICAgICAgIAogICAgICAgICAKICAgICAg
ICAgCiAgICAgICAgaWYgKG1heF9sb25nX2NvbnN0KQogICAgICAgICAgICBkZWxldGUgKExvbmdJ
bnQqKW1heF9sb25nX2NvbnN0OwogICAgICAgIGlmIChtaW5fbG9uZ19jb25zdCkKICAgICAgICAg
ICAgZGVsZXRlIChMb25nSW50KiltaW5fbG9uZ19jb25zdDsKICAgIH0KCgpwcml2YXRlOgogICAg
c3RhdGljIGNvbnN0IExvbmdJbnQgKm1heF9sb25nX2NvbnN0LCAqbWluX2xvbmdfY29uc3Q7Cgpw
dWJsaWM6CiAgICBMb25nSW50ICBvcGVyYXRvci8gIChjb25zdCBMb25nSW50KSBjb25zdDsgIAog
ICAgTG9uZ0ludCAmb3BlcmF0b3IvPSAoY29uc3QgTG9uZ0ludCk7ICAKCiAgICBMb25nSW50ICBv
cGVyYXRvciUgIChjb25zdCBMb25nSW50KSBjb25zdDsgIAogICAgTG9uZ0ludCAmb3BlcmF0b3Il
PSAoY29uc3QgTG9uZ0ludCk7ICAKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBMb25nSW50
ICBvcGVyYXRvcj4+IChpbnQpIGNvbnN0OyAgICAgIAogICAgTG9uZ0ludCAmb3BlcmF0b3I+Pj0o
aW50KTsgICAgICAKCiAgICBib29sICAgICBvcGVyYXRvcjwgIChjb25zdCBMb25nSW50KSBjb25z
dDsgIAogICAgYm9vbCAgICAgb3BlcmF0b3I+ICAoY29uc3QgTG9uZ0ludCkgY29uc3Q7ICAKICAg
IGJvb2wgICAgIG9wZXJhdG9yPD0gKGNvbnN0IExvbmdJbnQpIGNvbnN0OyAgCiAgICBib29sICAg
ICBvcGVyYXRvcj49IChjb25zdCBMb25nSW50KSBjb25zdDsgIAp9OwoKCmNsYXNzIFVMb25nSW50
IDogcHVibGljIEJhc2VMb25nCnsKcHVibGljOgoKICAgIGlubGluZSBVTG9uZ0ludCAodTQgYSwg
dTQgYikgOiBCYXNlTG9uZyAoYSwgYikge30KICAgIGlubGluZSBVTG9uZ0ludCAodTQgYSkgOiBC
YXNlTG9uZyAoYSkge30gIAogICAgaW5saW5lIFVMb25nSW50IChpNCBhKSA6IEJhc2VMb25nIChh
KSB7fSAgCiAgICBpbmxpbmUgVUxvbmdJbnQgKHZvaWQpIDogQmFzZUxvbmcgKCkge30gIAoKICAg
IGlubGluZSBVTG9uZ0ludCh1OCBhKSA6IEJhc2VMb25nIChhKSB7fSAgCgoKICAgIFVMb25nSW50
ICBvcGVyYXRvci8gIChjb25zdCBVTG9uZ0ludCkgY29uc3Q7ICAKICAgIFVMb25nSW50ICZvcGVy
YXRvci89IChjb25zdCBVTG9uZ0ludCk7ICAKCiAgICBVTG9uZ0ludCAgb3BlcmF0b3IlICAoY29u
c3QgVUxvbmdJbnQpIGNvbnN0OyAgCiAgICBVTG9uZ0ludCAmb3BlcmF0b3IlPSAoY29uc3QgVUxv
bmdJbnQpOyAgCgogICAgIAogICAgIAogICAgIAogICAgIAogICAgVUxvbmdJbnQgIG9wZXJhdG9y
Pj4gKGludCkgY29uc3Q7ICAgICAgIAogICAgVUxvbmdJbnQgJm9wZXJhdG9yPj49KGludCk7ICAg
ICAgIAoKICAgIGJvb2wgICAgICBvcGVyYXRvcjwgIChjb25zdCBVTG9uZ0ludCkgY29uc3Q7ICAK
ICAgIGJvb2wgICAgICBvcGVyYXRvcj4gIChjb25zdCBVTG9uZ0ludCkgY29uc3Q7ICAKICAgIGJv
b2wgICAgICBvcGVyYXRvcjw9IChjb25zdCBVTG9uZ0ludCkgY29uc3Q7ICAKICAgIGJvb2wgICAg
ICBvcGVyYXRvcj49IChjb25zdCBVTG9uZ0ludCkgY29uc3Q7ICAKfTsKCgoKCgoKIyA2NSAiLi4v
Li4vamlrZXMvc3JjL2RvdWJsZS5oIiAyCgoKCgoKCmNsYXNzIExvbmdJbnQ7CmNsYXNzIElFRUVk
b3VibGU7CmNsYXNzIEJpZ0ludDsKCmNsYXNzIElFRUVmbG9hdAp7CiAgICAgCiAgICAgCiAgICAg
CiAgICAgCiAgICAgCiAgICAgCnByaXZhdGU6CiAgICBmcmllbmQgY2xhc3MgRmxvYXRUb1N0cmlu
ZzsKCiAgICB1bmlvbgogICAgewogICAgICAgIGZsb2F0IGZsb2F0X3ZhbHVlOwogICAgICAgIHU0
IHdvcmQ7ICAKICAgICAgICBpNCBpd29yZDsgIAogICAgfSB2YWx1ZTsKCiAgICAgCiAgICAgCiAg
ICAgCiAgICBlbnVtCiAgICB7CiAgICAgICAgRlJBQ1RfU0laRSA9IDIzLCAgICAgICAgICAKICAg
ICAgICBCSUFTICAgICAgID0gMTI3LCAgICAgICAgIAogICAgICAgIE1BWF9ERUNfRVhQID0gMzgs
ICAgICAgICAgCiAgICAgICAgTUFYX0RJR0lUUyA9IEJJQVMgKyBGUkFDVF9TSVpFICsgMSAtIE1B
WF9ERUNfRVhQICAKICAgIH07CiAgICBlbnVtCiAgICB7CiAgICAgICAgU0lHTl9CSVQgICA9IDB4
ODAwMDAwMDAsICAKICAgICAgICBFWFBfQklUUyAgID0gMHg3RjgwMDAwMCwgIAogICAgICAgIEZS
QUNUX0JJVFMgPSAweDAwN0ZGRkZGLCAgCiAgICAgICAgQUJTX0JJVFMgICA9IEVYUF9CSVRTIHwg
RlJBQ1RfQklUUywgIAogICAgICAgIE1BWF9GUkFDVCAgPSAweDAxMDAwMDAwLCAgCiAgICAgICAg
TUlOX0ZSQUNUICA9IDB4MDA4MDAwMDAsICAKICAgICAgICBORUdfWkVSTyAgID0gMHg4MDAwMDAw
MCwgIAogICAgICAgIFBPU19aRVJPICAgPSAweDAwMDAwMDAwLCAgCiAgICAgICAgTkVHX0lORiAg
ICA9IDB4RkY4MDAwMDAsICAKICAgICAgICBQT1NfSU5GICAgID0gMHg3RjgwMDAwMCwgIAogICAg
ICAgIE5BTiAgICAgICAgPSAweDdGQzAwMDAwLCAgCiAgICAgICAgQllURV9NQVNLICA9IDB4MDAw
MDAwRkYsICAKICAgICAgICBNQVhfSU5UICAgID0gMHg3RkZGRkZGRiwgIAogICAgICAgIE1JTl9J
TlQgICAgPSAweDgwMDAwMDAwLCAgCiAgICAgICAgTUlOX0xPTkdfRiA9IDB4REYwMDAwMDAsICAK
ICAgICAgICBNSU5fSU5UX0YgID0gMHhDRjAwMDAwMCAgCiAgICB9OwoKICAgIGlubGluZSB1NCBT
aWduQml0KHZvaWQpIGNvbnN0ICAgeyByZXR1cm4gdmFsdWUud29yZCAmIFNJR05fQklUOyB9CiAg
ICBpbmxpbmUgdTQgRXhwQml0cyh2b2lkKSBjb25zdCAgIHsgcmV0dXJuIHZhbHVlLndvcmQgJiBF
WFBfQklUUzsgfQogICAgaW5saW5lIHU0IEZyYWN0Qml0cyh2b2lkKSBjb25zdCB7IHJldHVybiB2
YWx1ZS53b3JkICYgRlJBQ1RfQklUUzsgfQoKICAgICAKICAgICAKICAgIHN0YXRpYyBJRUVFZmxv
YXQgTm9ybWFsaXplKGludCwgaW50LCB1NCk7CiAgICAgCiAgICAgCiAgICBpbnQgU3BsaXRJbnRv
KHU0ICZmcmFjdGlvbikgY29uc3Q7CgogICAgIAogICAgSUVFRWZsb2F0IFVscCh2b2lkKSBjb25z
dDsKICAgICAKICAgIHN0YXRpYyBJRUVFZmxvYXQgUmF0aW8oY29uc3QgQmlnSW50ICYsIGNvbnN0
IEJpZ0ludCAmKTsKICAgICAKICAgICAKICAgIGJvb2wgQWRqdXN0KGNvbnN0IEJpZ0ludCAmLCBj
b25zdCBCaWdJbnQgJiwgY29uc3QgYm9vbCk7CgoKCgoKCiAgICBzdGF0aWMgY29uc3QgSUVFRWZs
b2F0IHRlbnNbXTsgIAogICAgc3RhdGljIGNvbnN0IElFRUVmbG9hdCBiaWd0ZW5zW107ICAKCgpw
dWJsaWM6CiAgICAgCiAgICAgCiAgICAgCiAgICBpbmxpbmUgdTQgV29yZCh2b2lkKSBjb25zdCB7
IHJldHVybiB2YWx1ZS53b3JkOyB9CgogICAgaW5saW5lIGludCAgU2lnbih2b2lkKSBjb25zdCAg
ICAgeyByZXR1cm4gdmFsdWUud29yZCA+PiAzMTsgfQogICAgaW5saW5lIGludCAgRXhwb25lbnQo
dm9pZCkgY29uc3QgeyByZXR1cm4gKCh2YWx1ZS53b3JkICYgRVhQX0JJVFMpID4+IEZSQUNUX1NJ
WkUpIC0gQklBUzsgfQogICAgaW5saW5lIHU0ICAgRnJhY3Rpb24odm9pZCkgY29uc3QgeyByZXR1
cm4gKHZhbHVlLndvcmQgJiBGUkFDVF9CSVRTKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IChFeHBCaXRzKCkgPyBNSU5fRlJBQ1QgOiAwKTsgfQogICAgc3RhdGlj
IGlubGluZSBpbnQgQmlhcyh2b2lkKSAgICAgIHsgcmV0dXJuIEJJQVM7IH0KICAgIHN0YXRpYyBp
bmxpbmUgaW50IEZyYWN0U2l6ZSh2b2lkKSB7IHJldHVybiBGUkFDVF9TSVpFOyB9CgogICAgaW5s
aW5lIGJvb2wgSXNOYU4odm9pZCkgY29uc3QgICAgICB7IHJldHVybiAodmFsdWUud29yZCAmIEFC
U19CSVRTKSA+IEVYUF9CSVRTOyB9CgogICAgaW5saW5lIGJvb2wgSXNOZWdhdGl2ZSh2b2lkKSBj
b25zdCB7IHJldHVybiAodmFsdWUuaXdvcmQgPCAwKSAmJiAhSXNOYU4oKTsgfQogICAgaW5saW5l
IGJvb2wgSXNQb3NpdGl2ZSh2b2lkKSBjb25zdCB7IHJldHVybiAodmFsdWUuaXdvcmQgPj0gMCkg
JiYgIUlzTmFOKCk7IH0KCiAgICBpbmxpbmUgYm9vbCBJc05lZ2F0aXZlWmVybyh2b2lkKSBjb25z
dCB7IHJldHVybiB2YWx1ZS53b3JkID09IE5FR19aRVJPOyB9CiAgICBpbmxpbmUgYm9vbCBJc1Bv
c2l0aXZlWmVybyh2b2lkKSBjb25zdCB7IHJldHVybiB2YWx1ZS53b3JkID09IFBPU19aRVJPOyB9
CiAgICBpbmxpbmUgYm9vbCBJc1plcm8odm9pZCkgY29uc3QgICAgICAgICB7IHJldHVybiAodmFs
dWUud29yZCAmIEFCU19CSVRTKSA9PSBQT1NfWkVSTzsgfQoKICAgIGlubGluZSBib29sIElzTmVn
YXRpdmVJbmZpbml0eSh2b2lkKSBjb25zdCB7IHJldHVybiB2YWx1ZS53b3JkID09IE5FR19JTkY7
IH0KICAgIGlubGluZSBib29sIElzUG9zaXRpdmVJbmZpbml0eSh2b2lkKSBjb25zdCB7IHJldHVy
biB2YWx1ZS53b3JkID09IFBPU19JTkY7IH0KICAgIGlubGluZSBib29sIElzSW5maW5pdGUodm9p
ZCkgY29uc3QgICAgICAgICB7IHJldHVybiAodmFsdWUud29yZCAmIEFCU19CSVRTKSA9PSBQT1Nf
SU5GOyB9CgoKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAK
ICAgIHN0YXRpYyBpbmxpbmUgY29uc3QgSUVFRWZsb2F0CiAgICAgICAgTmFOKHZvaWQpICAgICAg
ICAgICAgICAgeyByZXR1cm4gSUVFRWZsb2F0KCh1NClOQU4pOyB9CiAgICBzdGF0aWMgaW5saW5l
IGNvbnN0IElFRUVmbG9hdAogICAgICAgIFBPU0lUSVZFX0lORklOSVRZKHZvaWQpIHsgcmV0dXJu
IElFRUVmbG9hdCgodTQpUE9TX0lORik7IH0KICAgIHN0YXRpYyBpbmxpbmUgY29uc3QgSUVFRWZs
b2F0CiAgICAgICAgTkVHQVRJVkVfSU5GSU5JVFkodm9pZCkgeyByZXR1cm4gSUVFRWZsb2F0KCh1
NClORUdfSU5GKTsgfQogICAgc3RhdGljIGlubGluZSBjb25zdCBJRUVFZmxvYXQKICAgICAgICBQ
T1NJVElWRV9aRVJPKHZvaWQpICAgICB7IHJldHVybiBJRUVFZmxvYXQoKHU0KVBPU19aRVJPKTsg
fQogICAgc3RhdGljIGlubGluZSBjb25zdCBJRUVFZmxvYXQKICAgICAgICBORUdBVElWRV9aRVJP
KHZvaWQpICAgICB7IHJldHVybiBJRUVFZmxvYXQoKHU0KU5FR19aRVJPKTsgfQoKICAgICAKICAg
ICAKICAgICAKICAgICAKICAgIGlubGluZSAgIElFRUVmbG9hdChmbG9hdCBmKSB7IHZhbHVlLmZs
b2F0X3ZhbHVlID0gZjsgfQoKICAgICAKICAgICAgICAgICAgIElFRUVmbG9hdChjb25zdCBjaGFy
ICosIGJvb2wgY2hlY2tfaW52YWxpZCA9IGZhbHNlKTsKICAgICAKICAgICAgICAgICAgIElFRUVm
bG9hdChpNCk7CiAgICAgCiAgICAgICAgICAgICBJRUVFZmxvYXQoY29uc3QgTG9uZ0ludCAmKTsK
ICAgICAKCiAgICBleHBsaWNpdAoKICAgICAgICAgICAgIElFRUVmbG9hdChjb25zdCBJRUVFZG91
YmxlICYpOwogICAgIAogICAgaW5saW5lICAgSUVFRWZsb2F0KHZvaWQpIHt9CgogICAgIAogICAg
aW5saW5lICAgSUVFRWZsb2F0KHU0IGJpdHMpIHsgdmFsdWUud29yZCA9IGJpdHM7IH0KCgogICAg
IAogICAgIAogICAgIAogICAgICAgICAgIGk0ICAgICAgICAgSW50VmFsdWUodm9pZCkgY29uc3Q7
CiAgICAgICAgICAgTG9uZ0ludCAgICBMb25nVmFsdWUodm9pZCkgY29uc3Q7CiAgICBpbmxpbmUg
ZmxvYXQgICAgICBGbG9hdFZpZXcodm9pZCkgY29uc3QgeyByZXR1cm4gdmFsdWUuZmxvYXRfdmFs
dWU7IH0KICAgIGlubGluZSBJRUVFZG91YmxlIERvdWJsZVZhbHVlKHZvaWQpIGNvbnN0OwoKCiAg
ICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgICAgICAgSUVFRWZsb2F0ICBvcGVyYXRvcisgIChj
b25zdCBJRUVFZmxvYXQpIGNvbnN0OyAgICAKICAgIGlubGluZSBJRUVFZmxvYXQgIG9wZXJhdG9y
KyAgKHZvaWQpICAgICAgICAgeyByZXR1cm4gKnRoaXM7IH0gIAogICAgaW5saW5lIElFRUVmbG9h
dCAmb3BlcmF0b3IrPSAoY29uc3QgSUVFRWZsb2F0IG9wKSB7IHJldHVybiAqdGhpcyA9ICp0aGlz
ICsgb3A7IH0gIAogICAgaW5saW5lIElFRUVmbG9hdCAgb3BlcmF0b3IrKyAodm9pZCkgICAgICAg
ICB7IHJldHVybiAqdGhpcyArPSAxOyB9ICAKICAgIGlubGluZSBJRUVFZmxvYXQgIG9wZXJhdG9y
KysgKGludCBkdW1teSkKICAgIHsKICAgICAgICBJRUVFZmxvYXQgcmVzdWx0ID0gKnRoaXM7CiAg
ICAgICAgKnRoaXMgKz0gMTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfSAgCgogICAgICAg
ICAgIElFRUVmbG9hdCAgb3BlcmF0b3ItICAodm9pZCkgY29uc3Q7ICAgICAgICAgCiAgICBpbmxp
bmUgSUVFRWZsb2F0ICBvcGVyYXRvci0gIChjb25zdCBJRUVFZmxvYXQgb3ApIGNvbnN0IHsgcmV0
dXJuICp0aGlzICsgKC1vcCk7IH0gIAogICAgaW5saW5lIElFRUVmbG9hdCAmb3BlcmF0b3ItPSAo
Y29uc3QgSUVFRWZsb2F0IG9wKSB7IHJldHVybiAqdGhpcyA9ICp0aGlzIC0gb3A7IH0gIAogICAg
aW5saW5lIElFRUVmbG9hdCAgb3BlcmF0b3ItLSAodm9pZCkgICAgICAgICB7IHJldHVybiAqdGhp
cyAtPSAxOyB9ICAKICAgIGlubGluZSBJRUVFZmxvYXQgIG9wZXJhdG9yLS0gKGludCBkdW1teSkK
ICAgIHsKICAgICAgICBJRUVFZmxvYXQgcmVzdWx0ID0gKnRoaXM7CiAgICAgICAgKnRoaXMgLT0g
MTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfSAgCgogICAgICAgICAgIElFRUVmbG9hdCAg
b3BlcmF0b3IqICAoY29uc3QgSUVFRWZsb2F0KSBjb25zdDsgICAgCiAgICBpbmxpbmUgSUVFRWZs
b2F0ICZvcGVyYXRvcio9IChjb25zdCBJRUVFZmxvYXQgb3ApIHsgcmV0dXJuICp0aGlzID0gKnRo
aXMgKiBvcDsgfSAgCgogICAgICAgICAgIElFRUVmbG9hdCAgb3BlcmF0b3IvICAoY29uc3QgSUVF
RWZsb2F0KSBjb25zdDsgICAgCiAgICBpbmxpbmUgSUVFRWZsb2F0ICZvcGVyYXRvci89IChjb25z
dCBJRUVFZmxvYXQgb3ApIHsgcmV0dXJuICp0aGlzID0gKnRoaXMgLyBvcDsgfSAgCgogICAgICAg
ICAgIElFRUVmbG9hdCAgb3BlcmF0b3IlICAoY29uc3QgSUVFRWZsb2F0KSBjb25zdDsgICAgCiAg
ICBpbmxpbmUgSUVFRWZsb2F0ICZvcGVyYXRvciU9IChjb25zdCBJRUVFZmxvYXQgb3ApIHsgcmV0
dXJuICp0aGlzID0gKnRoaXMgJSBvcDsgfSAgCgogICAgIAogICAgIAogICAgIAogICAgYm9vbCBv
cGVyYXRvcj09IChjb25zdCBJRUVFZmxvYXQpIGNvbnN0OyAgCiAgICBib29sIG9wZXJhdG9yIT0g
KGNvbnN0IElFRUVmbG9hdCkgY29uc3Q7ICAKICAgIGJvb2wgb3BlcmF0b3I8ICAoY29uc3QgSUVF
RWZsb2F0KSBjb25zdDsgIAogICAgYm9vbCBvcGVyYXRvcj4gIChjb25zdCBJRUVFZmxvYXQpIGNv
bnN0OyAgCiAgICBib29sIG9wZXJhdG9yPD0gKGNvbnN0IElFRUVmbG9hdCkgY29uc3Q7ICAKICAg
IGJvb2wgb3BlcmF0b3I+PSAoY29uc3QgSUVFRWZsb2F0KSBjb25zdDsgIAoKICAgICAKICAgICAK
ICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIGlubGluZSBib29s
IGVxdWFscyhjb25zdCBJRUVFZmxvYXQgb3ApIGNvbnN0IHsgcmV0dXJuIHZhbHVlLndvcmQgPT0g
b3AudmFsdWUud29yZDsgfQogICAgaW5saW5lIGk0IGhhc2hDb2RlKHZvaWQpIGNvbnN0IHsgcmV0
dXJuIHZhbHVlLml3b3JkOyB9CiAgICBpbmxpbmUgaW50IGNvbXBhcmVUbyhjb25zdCBJRUVFZmxv
YXQgb3ApIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIElzTmFOKCkgPyAxCiAgICAgICAgICAg
ICAgICAgICAgICAgOiAoSXNaZXJvKCkgJiYgb3AuSXNaZXJvKCkpID8gb3AuU2lnbigpIC0gU2ln
bigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
KCp0aGlzIDwgb3ApID8gLTEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAqdGhpcyA+IG9wOwogICAgfSAgICAgICAgCn07
CgoKY2xhc3MgSUVFRWRvdWJsZSA6IHB1YmxpYyBCYXNlTG9uZwogICAgIAogICAgIAogICAgIAog
ICAgIAogICAgIAogICAgIAp7CnByaXZhdGU6CiAgICBmcmllbmQgY2xhc3MgRG91YmxlVG9TdHJp
bmc7CgogICAgIAogICAgIAogICAgIAogICAgZW51bQogICAgewogICAgICAgIEZSQUNUX1NJWkUg
ICAgPSA1MiwgICAgICAgICAgCiAgICAgICAgRlJBQ1RfU0laRV9ISSA9IEZSQUNUX1NJWkUgLSAz
MiwgIAogICAgICAgIEJJQVMgICAgICAgICAgPSAxMDIzLCAgICAgICAgCiAgICAgICAgTUFYX0RF
Q19FWFAgICA9IDMwOCwgICAgICAgICAKICAgICAgICBNQVhfRElHSVRTICAgID0gQklBUyArIEZS
QUNUX1NJWkUgKyAxIC0gTUFYX0RFQ19FWFAgIAogICAgfTsKICAgIGVudW0KICAgIHsKICAgICAg
ICBFWFBfQklUUyAgICAgID0gMHg3RkYwMDAwMCwgIAogICAgICAgIEZSQUNUX0JJVFMgICAgPSAw
eDAwMEZGRkZGLCAgCiAgICAgICAgQUJTX0JJVFMgICAgICA9IEVYUF9CSVRTIHwgRlJBQ1RfQklU
UywgIAogICAgICAgIE1BWF9GUkFDVCAgICAgPSAweDAwMjAwMDAwLCAgCiAgICAgICAgTUlOX0ZS
QUNUICAgICA9IDB4MDAxMDAwMDAsICAKICAgICAgICBORUdfWkVST19ISSAgID0gMHg4MDAwMDAw
MCwgIAogICAgICAgIFBPU19aRVJPX0hJICAgPSAweDAwMDAwMDAwLCAgCiAgICAgICAgTkVHX0lO
Rl9ISSAgICA9IDB4RkZGMDAwMDAsICAKICAgICAgICBQT1NfSU5GX0hJICAgID0gMHg3RkYwMDAw
MCwgIAogICAgICAgIE5BTl9ISSAgICAgICAgPSAweDdGRjgwMDAwLCAgCiAgICAgICAgWkVST19M
TyAgICAgICA9IDB4MDAwMDAwMDAgIAogICAgfTsKCiAgICBpbmxpbmUgdTQgU2lnbkJpdCh2b2lk
KSBjb25zdCAgIHsgcmV0dXJuIEhpZ2hXb3JkKCkgJiBTSUdOX0JJVDsgfQogICAgaW5saW5lIHU0
IEV4cEJpdHModm9pZCkgY29uc3QgICB7IHJldHVybiBIaWdoV29yZCgpICYgRVhQX0JJVFM7IH0K
ICAgIGlubGluZSB1NCBGcmFjdEJpdHModm9pZCkgY29uc3QgeyByZXR1cm4gSGlnaFdvcmQoKSAm
IEZSQUNUX0JJVFM7IH0KCiAgICAgCiAgICAgCiAgICBzdGF0aWMgSUVFRWRvdWJsZSBOb3JtYWxp
emUoaW50LCBpbnQsIFVMb25nSW50KTsKICAgICAKICAgICAKICAgIGludCBTcGxpdEludG8oQmFz
ZUxvbmcgJmZyYWN0aW9uKSBjb25zdDsKCiAgICAgCiAgICBJRUVFZG91YmxlIFVscCh2b2lkKSBj
b25zdDsKICAgICAKICAgIHN0YXRpYyBJRUVFZG91YmxlIFJhdGlvKGNvbnN0IEJpZ0ludCAmYSwg
Y29uc3QgQmlnSW50ICZiKTsKCgoKCgoKCiAgICBzdGF0aWMgY29uc3QgSUVFRWRvdWJsZSB0ZW5z
W107ICAKICAgIHN0YXRpYyBjb25zdCBJRUVFZG91YmxlIGJpZ3RlbnNbXTsgIAoKCnB1YmxpYzoK
ICAgICAKICAgICAKICAgICAKICAgIGlubGluZSBpbnQgICAgIFNpZ24odm9pZCkgY29uc3QgICAg
IHsgcmV0dXJuIEhpZ2hXb3JkKCkgPj4gMzE7IH0KICAgIGlubGluZSBpbnQgICAgIEV4cG9uZW50
KHZvaWQpIGNvbnN0IHsgcmV0dXJuICgoSGlnaFdvcmQoKSAmIEVYUF9CSVRTKSA+PiAoRlJBQ1Rf
U0laRV9ISSkpIC0gQklBUzsgfQogICAgaW5saW5lIExvbmdJbnQgRnJhY3Rpb24odm9pZCkgY29u
c3QKICAgIHsKICAgICAgICByZXR1cm4gTG9uZ0ludCgoSGlnaFdvcmQoKSAmIEZSQUNUX0JJVFMp
IHwgKEV4cEJpdHMoKSA/IE1JTl9GUkFDVCA6IDApLAogICAgICAgICAgICAgICAgICAgICAgIExv
d1dvcmQoKSk7IAogICAgfQogICAgc3RhdGljIGlubGluZSBpbnQgQmlhcyh2b2lkKSAgICAgIHsg
cmV0dXJuIEJJQVM7IH0KICAgIHN0YXRpYyBpbmxpbmUgaW50IEZyYWN0U2l6ZSh2b2lkKSB7IHJl
dHVybiBGUkFDVF9TSVpFOyB9CgogICAgaW5saW5lIGJvb2wgSXNOYU4odm9pZCkgY29uc3QKICAg
IHsKICAgICAgICAgCiAgICAgICAgdTQgaGlnaCA9IEhpZ2hXb3JkKCksCiAgICAgICAgICAgIGxv
dyA9IExvd1dvcmQoKTsKICAgICAgICByZXR1cm4gKChoaWdoICYgQUJTX0JJVFMpIHwgKChsb3cg
fCAtKGk0KSBsb3cpID4+IDMxKSkgPiBFWFBfQklUUzsKICAgIH0KCiAgICBpbmxpbmUgYm9vbCBJ
c05lZ2F0aXZlKHZvaWQpIGNvbnN0IHsgcmV0dXJuICgoaTQpIEhpZ2hXb3JkKCkgPCAwKSAmJiAh
SXNOYU4oKTsgfQogICAgaW5saW5lIGJvb2wgSXNQb3NpdGl2ZSh2b2lkKSBjb25zdCB7IHJldHVy
biAoKGk0KSBIaWdoV29yZCgpID49IDApICYmICFJc05hTigpOyB9CgogICAgaW5saW5lIGJvb2wg
SXNOZWdhdGl2ZVplcm8odm9pZCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gKEhpZ2hXb3Jk
KCkgPT0gTkVHX1pFUk9fSEkpICYmIChMb3dXb3JkKCkgPT0gWkVST19MTyk7CiAgICB9CiAgICBp
bmxpbmUgYm9vbCBJc1Bvc2l0aXZlWmVybyh2b2lkKSBjb25zdAogICAgewogICAgICAgIHJldHVy
biAoSGlnaFdvcmQoKSA9PSBQT1NfWkVST19ISSkgJiYgKExvd1dvcmQoKSA9PSBaRVJPX0xPKTsK
ICAgIH0KICAgIGlubGluZSBib29sIElzWmVybyh2b2lkKSBjb25zdAogICAgewogICAgICAgIHJl
dHVybiAoKEhpZ2hXb3JkKCkgJiBBQlNfQklUUykgPT0gUE9TX1pFUk9fSEkpICYmIChMb3dXb3Jk
KCkgPT0gWkVST19MTyk7CiAgICB9CgogICAgaW5saW5lIGJvb2wgSXNOZWdhdGl2ZUluZmluaXR5
KHZvaWQpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIChIaWdoV29yZCgpID09IE5FR19JTkZf
SEkpICYmIChMb3dXb3JkKCkgPT0gWkVST19MTyk7CiAgICB9CiAgICBpbmxpbmUgYm9vbCBJc1Bv
c2l0aXZlSW5maW5pdHkodm9pZCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gKEhpZ2hXb3Jk
KCkgPT0gUE9TX0lORl9ISSkgJiYgKExvd1dvcmQoKSA9PSBaRVJPX0xPKTsKICAgIH0KICAgIGlu
bGluZSBib29sIElzSW5maW5pdGUodm9pZCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gKChI
aWdoV29yZCgpICYgQUJTX0JJVFMpID09IFBPU19JTkZfSEkpICYmIChMb3dXb3JkKCkgPT0gWkVS
T19MTyk7CiAgICB9CgoKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIHN0
YXRpYyBpbmxpbmUgY29uc3QgSUVFRWRvdWJsZSBOYU4odm9pZCkgICAgICAgICAgICAgICB7IHJl
dHVybiBJRUVFZG91YmxlKE5BTl9ISSwgWkVST19MTyk7IH0KICAgIHN0YXRpYyBpbmxpbmUgY29u
c3QgSUVFRWRvdWJsZSBQT1NJVElWRV9JTkZJTklUWSh2b2lkKSB7IHJldHVybiBJRUVFZG91Ymxl
KFBPU19JTkZfSEksIFpFUk9fTE8pOyB9CiAgICBzdGF0aWMgaW5saW5lIGNvbnN0IElFRUVkb3Vi
bGUgTkVHQVRJVkVfSU5GSU5JVFkodm9pZCkgeyByZXR1cm4gSUVFRWRvdWJsZShORUdfSU5GX0hJ
LCBaRVJPX0xPKTsgfQogICAgc3RhdGljIGlubGluZSBjb25zdCBJRUVFZG91YmxlIFBPU0lUSVZF
X1pFUk8odm9pZCkgICAgIHsgcmV0dXJuIElFRUVkb3VibGUoUE9TX1pFUk9fSEksIFpFUk9fTE8p
OyB9CiAgICBzdGF0aWMgaW5saW5lIGNvbnN0IElFRUVkb3VibGUgTkVHQVRJVkVfWkVSTyh2b2lk
KSAgICAgeyByZXR1cm4gSUVFRWRvdWJsZShORUdfWkVST19ISSwgWkVST19MTyk7IH0KCgogICAg
IAogICAgIAogICAgIAogICAgIAogICAgaW5saW5lIElFRUVkb3VibGUoZG91YmxlIGQpIHsgdmFs
dWUuZG91YmxlX3ZhbHVlID0gZDsgfQogICAgIAogICAgICAgICAgIElFRUVkb3VibGUoY29uc3Qg
Y2hhciAqLCBib29sIGNoZWNrX2ludmFsaWQgPSBmYWxzZSk7CgogICAgIAogICAgICAgICAgIElF
RUVkb3VibGUoaTQpOwogICAgIAogICAgICAgICAgIElFRUVkb3VibGUoY29uc3QgTG9uZ0ludCAm
KTsKICAgICAKICAgICAgICAgICBJRUVFZG91YmxlKGNvbnN0IElFRUVmbG9hdCAmKTsKICAgICAK
ICAgIGlubGluZSBJRUVFZG91YmxlKHZvaWQpIHt9CiAgICAgCiAgICBpbmxpbmUgSUVFRWRvdWJs
ZSh1NCBoaSwgdTQgbG8pIHsgc2V0SGlnaEFuZExvd1dvcmRzKGhpLCBsbyk7IH0KCiAgICAgCiAg
ICAgCiAgICAgCiAgICAgICAgICAgaTQgICAgICAgIEludFZhbHVlKHZvaWQpIGNvbnN0OwogICAg
ICAgICAgIExvbmdJbnQgICBMb25nVmFsdWUodm9pZCkgY29uc3Q7CiAgICBpbmxpbmUgSUVFRWZs
b2F0IEZsb2F0VmFsdWUodm9pZCkgY29uc3QgeyByZXR1cm4gSUVFRWZsb2F0KCp0aGlzKTsgfQoK
CiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgICAgICAgSUVFRWRvdWJsZSAgb3BlcmF0b3Ir
ICAoY29uc3QgSUVFRWRvdWJsZSkgY29uc3Q7ICAgIAogICAgaW5saW5lIElFRUVkb3VibGUgIG9w
ZXJhdG9yKyAgKHZvaWQpIGNvbnN0ICAgICAgICAgIHsgcmV0dXJuICp0aGlzOyB9ICAKICAgIGlu
bGluZSBJRUVFZG91YmxlICZvcGVyYXRvcis9IChjb25zdCBJRUVFZG91YmxlIG9wKSB7IHJldHVy
biAqdGhpcyA9ICp0aGlzICsgb3A7IH0gIAogICAgaW5saW5lIElFRUVkb3VibGUgIG9wZXJhdG9y
KysgKHZvaWQpICAgICAgICAgIHsgcmV0dXJuICp0aGlzICs9IDE7IH0gIAogICAgaW5saW5lIElF
RUVkb3VibGUgIG9wZXJhdG9yKysgKGludCBkdW1teSkKICAgIHsKICAgICAgICBJRUVFZG91Ymxl
IHJlc3VsdCA9ICp0aGlzOwogICAgICAgICp0aGlzICs9IDE7CiAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgIH0gIAoKICAgICAgICAgICBJRUVFZG91YmxlICBvcGVyYXRvci0gICh2b2lkKSBjb25z
dDsgICAgICAgICAgCiAgICBpbmxpbmUgSUVFRWRvdWJsZSAgb3BlcmF0b3ItICAoY29uc3QgSUVF
RWRvdWJsZSBvcCkgY29uc3QgeyByZXR1cm4gKnRoaXMgKyAoLW9wKTsgfSAgCiAgICBpbmxpbmUg
SUVFRWRvdWJsZSAmb3BlcmF0b3ItPSAoY29uc3QgSUVFRWRvdWJsZSBvcCkgeyByZXR1cm4gKnRo
aXMgPSAqdGhpcyAtIG9wOyB9ICAKICAgIGlubGluZSBJRUVFZG91YmxlICBvcGVyYXRvci0tICh2
b2lkKSAgICAgICAgICB7IHJldHVybiAqdGhpcyAtPSAxOyB9ICAKICAgIGlubGluZSBJRUVFZG91
YmxlICBvcGVyYXRvci0tIChpbnQgZHVtbXkpCiAgICB7CiAgICAgICAgSUVFRWRvdWJsZSByZXN1
bHQgPSAqdGhpczsKICAgICAgICAqdGhpcyAtPSAxOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICB9ICAKCiAgICAgICAgICAgSUVFRWRvdWJsZSAgb3BlcmF0b3IqICAoY29uc3QgSUVFRWRvdWJs
ZSkgY29uc3Q7ICAgIAogICAgaW5saW5lIElFRUVkb3VibGUgJm9wZXJhdG9yKj0gKGNvbnN0IElF
RUVkb3VibGUgb3ApIHsgcmV0dXJuICp0aGlzID0gKnRoaXMgKiBvcDsgfSAgCgogICAgICAgICAg
IElFRUVkb3VibGUgIG9wZXJhdG9yLyAgKGNvbnN0IElFRUVkb3VibGUpIGNvbnN0OyAgICAKICAg
IGlubGluZSBJRUVFZG91YmxlICZvcGVyYXRvci89IChjb25zdCBJRUVFZG91YmxlIG9wKSB7IHJl
dHVybiAqdGhpcyA9ICp0aGlzIC8gb3A7IH0gIAoKICAgICAgICAgICBJRUVFZG91YmxlICBvcGVy
YXRvciUgIChjb25zdCBJRUVFZG91YmxlKSBjb25zdDsgICAgCiAgICBpbmxpbmUgSUVFRWRvdWJs
ZSAmb3BlcmF0b3IlPSAoY29uc3QgSUVFRWRvdWJsZSBvcCkgeyByZXR1cm4gKnRoaXMgPSAqdGhp
cyAlIG9wOyB9ICAKCiAgICAgCiAgICAgCiAgICAgCiAgICBib29sIG9wZXJhdG9yPT0gKGNvbnN0
IElFRUVkb3VibGUpIGNvbnN0OyAgCiAgICBib29sIG9wZXJhdG9yIT0gKGNvbnN0IElFRUVkb3Vi
bGUpIGNvbnN0OyAgCiAgICBib29sIG9wZXJhdG9yPCAgKGNvbnN0IElFRUVkb3VibGUpIGNvbnN0
OyAgCiAgICBib29sIG9wZXJhdG9yPiAgKGNvbnN0IElFRUVkb3VibGUpIGNvbnN0OyAgCiAgICBi
b29sIG9wZXJhdG9yPD0gKGNvbnN0IElFRUVkb3VibGUpIGNvbnN0OyAgCiAgICBib29sIG9wZXJh
dG9yPj0gKGNvbnN0IElFRUVkb3VibGUpIGNvbnN0OyAgCgogICAgIAogICAgIAogICAgIAogICAg
IAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgaW5saW5lIGJvb2wgZXF1YWxzKGNv
bnN0IElFRUVkb3VibGUgb3ApIGNvbnN0IHsgcmV0dXJuIChCYXNlTG9uZykgKnRoaXMgPT0gKEJh
c2VMb25nKSBvcDsgfQogICAgaW5saW5lIGk0IGhhc2hDb2RlKHZvaWQpIGNvbnN0IHsgcmV0dXJu
ICgoQmFzZUxvbmcpICp0aGlzKS5oYXNoQ29kZSgpOyB9CiAgICBpbmxpbmUgaW50IGNvbXBhcmVU
byhjb25zdCBJRUVFZG91YmxlIG9wKSBjb25zdAogICAgewogICAgICAgIHJldHVybiBJc05hTigp
ID8gMQogICAgICAgICAgICAgICAgICAgICAgIDogKElzWmVybygpICYmIG9wLklzWmVybygpKSA/
IG9wLlNpZ24oKSAtIFNpZ24oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6ICgqdGhpcyA8IG9wKSA/IC0xCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKnRoaXMgPiBvcDsK
ICAgIH0gICAgICAgIAp9OwoKCiAKIAogCiAKY2xhc3MgQmlnSW50CnsKcHVibGljOgogICAgIAog
ICAgQmlnSW50KGNvbnN0IElFRUVmbG9hdCAmLCBpbnQgJmV4cCwgaW50ICZiaXRjbnQpOwogICAg
QmlnSW50KGNvbnN0IElFRUVkb3VibGUgJiwgaW50ICZleHAsIGludCAmYml0Y250KTsKICAgICAK
ICAgIGlubGluZSBCaWdJbnQoaW50KTsKICAgICAKICAgICAKICAgICAKICAgICAKICAgIEJpZ0lu
dChjb25zdCBjaGFyICosIGludCBiZWZvcmUsIGludCB0b3RhbCwgdTQgc3RhcnQsIGludCBzdGFy
dHNpemUpOwogICAgIAogICAgQmlnSW50ICZvcGVyYXRvciA9KGNvbnN0IEJpZ0ludCAmKTsKICAg
IEJpZ0ludChjb25zdCBCaWdJbnQgJm9wKSB7ICp0aGlzID0gb3A7IH0KICAgICAKICAgIH5CaWdJ
bnQoKQogICAgewogICAgICAgIGRlbGV0ZSBkYXRhOwogICAgfQoKcHJpdmF0ZToKICAgICAKICAg
IGlubGluZSB2b2lkIHJlc2l6ZShpbnQgayk7CgogICAgIAogICAgc3RhdGljIGludCBoaTBiaXRz
KHU0IHgpOwogICAgIAogICAgIAogICAgc3RhdGljIGludCBsbzBiaXRzKHU0ICZ5KTsKCnB1Ymxp
YzoKICAgICAKICAgIGlubGluZSBpbnQgaGkwYml0cygpIGNvbnN0IHsgKHN0YXRpY19jYXN0PHZv
aWQ+ICAoKCBkYXRhICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJkYXRhIiAsICIuLi8uLi9qaWtl
cy9zcmMvZG91YmxlLmgiLCA1NTUsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7IHJldHVy
biBoaTBiaXRzKGRhdGFbd2RzIC0gMV0pOyB9CgogICAgIAogICAgaW5saW5lIGJvb2wgSXNaZXJv
KCkgY29uc3QgeyAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIGRhdGEgKSA/IDAgOgkoX19hc3NlcnRf
ZmFpbCAoImRhdGEiICwgIi4uLy4uL2ppa2VzL3NyYy9kb3VibGUuaCIsIDU1OCwgX19QUkVUVFlf
RlVOQ1RJT05fXyApLCAwKSkpIDsgcmV0dXJuICEgKGRhdGFbMF0gfHwgd2RzID4gMSk7IH0KCiAg
ICAgCiAgICBpbmxpbmUgYm9vbCBJc05lZ2F0aXZlKCkgY29uc3QgeyByZXR1cm4gbmVnOyB9CiAg
ICAgCiAgICBpbmxpbmUgdm9pZCBJc05lZ2F0aXZlKGJvb2wgdmFsdWUpIHsgbmVnID0gdmFsdWU7
IH0KCiAgICAgCiAgICAgICAgICAgQmlnSW50ICZvcGVyYXRvciArICAoY29uc3QgdW5zaWduZWQg
b3ApIGNvbnN0OwogICAgaW5saW5lIEJpZ0ludCAmb3BlcmF0b3IgKz0gKGNvbnN0IHVuc2lnbmVk
IG9wKSB7IHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3A7IH0KICAgIGlubGluZSBCaWdJbnQgJm9w
ZXJhdG9yICsrICh2b2lkKSB7IHJldHVybiAqdGhpcyArPSAxOyB9ICAKICAgICAgICAgICBCaWdJ
bnQgJm9wZXJhdG9yIC0gIChjb25zdCBCaWdJbnQgJm9wKSBjb25zdDsKICAgICAgICAgICBCaWdJ
bnQgJm9wZXJhdG9yICogIChjb25zdCBCaWdJbnQgJm9wKSBjb25zdDsKICAgICAgICAgICBCaWdJ
bnQgJm9wZXJhdG9yICogICh1bnNpZ25lZCBvcCkgY29uc3Q7CiAgICBpbmxpbmUgQmlnSW50ICZv
cGVyYXRvciAqPSAoY29uc3QgQmlnSW50ICZvcCkgeyByZXR1cm4gKnRoaXMgPSAqdGhpcyAqIG9w
OyB9CiAgICBpbmxpbmUgQmlnSW50ICZvcGVyYXRvciAqPSAodW5zaWduZWQgb3ApIHsgcmV0dXJu
ICp0aGlzID0gKnRoaXMgKiBvcDsgfQogICAgICAgICAgIEJpZ0ludCAmb3BlcmF0b3IgPDwgKHVu
c2lnbmVkIG9wKSBjb25zdDsKICAgIGlubGluZSBCaWdJbnQgJm9wZXJhdG9yIDw8PSh1bnNpZ25l
ZCBvcCkgeyByZXR1cm4gKnRoaXMgPSAqdGhpcyA8PCBvcDsgfQoKICAgICAKICAgIEJpZ0ludCAm
bXVsdGFkZCh1bnNpZ25lZCBtLCB1bnNpZ25lZCBhKTsKICAgICAKICAgIEJpZ0ludCAmcG93NW11
bHQodW5zaWduZWQgayk7CiAgICAgCiAgICBpbnQgY29tcGFyZVRvKGNvbnN0IEJpZ0ludCAmYikg
Y29uc3Q7CiAgICAgCiAgICBpbnQgcXVvcmVtKGNvbnN0IEJpZ0ludCAmUyk7CgogICAgIAogICAg
SUVFRWZsb2F0IEZsb2F0VmFsdWUoKSBjb25zdDsKICAgIElFRUVkb3VibGUgRG91YmxlVmFsdWUo
KSBjb25zdDsKCnByaXZhdGU6CiAgICBmcmllbmQgSUVFRWZsb2F0IElFRUVmbG9hdDo6UmF0aW8o
Y29uc3QgQmlnSW50ICYsIGNvbnN0IEJpZ0ludCAmKTsKICAgIGZyaWVuZCBJRUVFZG91YmxlIElF
RUVkb3VibGU6OlJhdGlvKGNvbnN0IEJpZ0ludCAmLCBjb25zdCBCaWdJbnQgJik7CgogICAgaW50
IGs7ICAgICAgIAogICAgaW50IG1heHdkczsgIAogICAgYm9vbCBuZWc7ICAgIAogICAgaW50IHdk
czsgICAgIAogICAgdTQgKmRhdGE7ICAgIAoKCgoKCiAgICBzdGF0aWMgY29uc3QgdTQgZml2ZXNb
XTsKICAgIHN0YXRpYyBjb25zdCBCaWdJbnQgKmJpZ2ZpdmVzW107CgoKfTsKCgppbmxpbmUgSUVF
RWRvdWJsZSBJRUVFZmxvYXQ6OkRvdWJsZVZhbHVlKCkgY29uc3QKewogICAgcmV0dXJuIElFRUVk
b3VibGUoKnRoaXMpOwp9CgppbmxpbmUgQmlnSW50OjpCaWdJbnQoaW50IGkpIDogZGF0YShfX251
bGwgKQp7CiAgICByZXNpemUoMCk7CiAgICBkYXRhWzBdID0gaTsKICAgIHdkcyA9IDE7CiAgICBu
ZWcgPSBpIDwgMDsKfQoKaW5saW5lIHZvaWQgQmlnSW50OjpyZXNpemUoaW50IGspCnsKICAgIG1h
eHdkcyA9IDEgPDwgazsKICAgIGRlbGV0ZSBkYXRhOwogICAgZGF0YSA9IG5ldyB1NFttYXh3ZHNd
OwogICAgdGhpcyAtPiBrID0gazsKICAgIHdkcyA9IDA7CiAgICBuZWcgPSBmYWxzZTsKfQoKCgoK
CgoKIyAxMiAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiAyCgojIDEgIi4uLy4uL2ppa2VzL3Ny
Yy9wYXJzZXIuaCIgMQogCiAKIAogCiAKIAogCiAKIAoKCgoKIyAxICIuLi8uLi9qaWtlcy9zcmMv
bHBnaW5wdXQuaCIgMQogCiAKIAogCiAKIAogCiAKIAoKCgoKIyAxICIuLi8uLi9qaWtlcy9zcmMv
c3RyZWFtLmgiIDEKIAogCiAKIAogCiAKIAogCiAKCgoKCiMgMSAiLi4vLi4vamlrZXMvc3JjL2ph
dmFkZWYuaCIgMQogCiAKIAogCiAKIAogCiAKIAogCgoKCgoKCgoKZW51bSB7CiAgICAgIEVSUk9S
X1NZTUJPTCAgICAgID0gMTA3LAogICAgICBNQVhfRElTVEFOQ0UgICAgICA9IDMwLAogICAgICBN
SU5fRElTVEFOQ0UgICAgICA9IDMsCiAgICAgIE1BWF9OQU1FX0xFTkdUSCAgID0gMzgsCiAgICAg
IE1BWF9URVJNX0xFTkdUSCAgID0gMzgsCiAgICAgIE5VTV9TVEFURVMgICAgICAgID0gNTU5LAoK
ICAgICAgTlRfT0ZGU0VUICAgICAgICAgPSAxMDgsCiAgICAgIEJVRkZfVUJPVU5EICAgICAgID0g
MzEsCiAgICAgIEJVRkZfU0laRSAgICAgICAgID0gMzIsCiAgICAgIFNUQUNLX1VCT1VORCAgICAg
ID0gMTI3LAogICAgICBTVEFDS19TSVpFICAgICAgICA9IDEyOCwKICAgICAgU0NPUEVfVUJPVU5E
ICAgICAgPSA1NiwKICAgICAgU0NPUEVfU0laRSAgICAgICAgPSA1NywKICAgICAgTEFfU1RBVEVf
T0ZGU0VUICAgPSA1NTk3LAogICAgICBNQVhfTEEgICAgICAgICAgICA9IDIsCiAgICAgIE5VTV9S
VUxFUyAgICAgICAgID0gMzU2LAogICAgICBOVU1fVEVSTUlOQUxTICAgICA9IDEwOCwKICAgICAg
TlVNX05PTl9URVJNSU5BTFMgPSAxNjAsCiAgICAgIE5VTV9TWU1CT0xTICAgICAgID0gMjY4LAog
ICAgICBTVEFSVF9TVEFURSAgICAgICA9IDk4MiwKICAgICAgRU9GVF9TWU1CT0wgICAgICAgPSA5
NiwKICAgICAgRU9MVF9TWU1CT0wgICAgICAgPSAyNywKICAgICAgQUNDRVBUX0FDVElPTiAgICAg
PSA1MjQwLAogICAgICBFUlJPUl9BQ1RJT04gICAgICA9IDUyNDEKICAgICB9OwoKCgoKCgoKIyAx
NCAiLi4vLi4vamlrZXMvc3JjL3N0cmVhbS5oIiAyCgojIDEgIi4uLy4uL2ppa2VzL3NyYy9qYXZh
c3ltLmgiIDEKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCmVudW0gewogICAgICBUS19Cb2R5
TWFya2VyID0gMTAxLAogICAgICBUS19JZGVudGlmaWVyID0gMjgsCiAgICAgIFRLX2Fic3RyYWN0
ID0gNTcsCiAgICAgIFRLX2Jvb2xlYW4gPSAzMiwKICAgICAgVEtfYnJlYWsgPSA3MCwKICAgICAg
VEtfYnl0ZSA9IDMzLAogICAgICBUS19jYXNlID0gODEsCiAgICAgIFRLX2NhdGNoID0gOTcsCiAg
ICAgIFRLX2NoYXIgPSAzNCwKICAgICAgVEtfY2xhc3MgPSA3OSwKICAgICAgVEtfY29uc3QgPSAx
MDUsCiAgICAgIFRLX2NvbnRpbnVlID0gNzEsCiAgICAgIFRLX2RlZmF1bHQgPSA4MiwKICAgICAg
VEtfZG8gPSA3MiwKICAgICAgVEtfZG91YmxlID0gMzUsCiAgICAgIFRLX2Vsc2UgPSA5NCwKICAg
ICAgVEtfZXh0ZW5kcyA9IDk4LAogICAgICBUS19mYWxzZSA9IDQ2LAogICAgICBUS19maW5hbCA9
IDU4LAogICAgICBUS19maW5hbGx5ID0gOTksCiAgICAgIFRLX2Zsb2F0ID0gMzYsCiAgICAgIFRL
X2ZvciA9IDczLAogICAgICBUS19nb3RvID0gMTA2LAogICAgICBUS19pZiA9IDc0LAogICAgICBU
S19pbXBsZW1lbnRzID0gMTAyLAogICAgICBUS19pbXBvcnQgPSAxMDAsCiAgICAgIFRLX2luc3Rh
bmNlb2YgPSAxNywKICAgICAgVEtfaW50ID0gMzcsCiAgICAgIFRLX2ludGVyZmFjZSA9IDk1LAog
ICAgICBUS19sb25nID0gMzgsCiAgICAgIFRLX25hdGl2ZSA9IDU5LAogICAgICBUS19uZXcgPSAz
OSwKICAgICAgVEtfbnVsbCA9IDQ3LAogICAgICBUS19wYWNrYWdlID0gMTAzLAogICAgICBUS19w
cml2YXRlID0gNjAsCiAgICAgIFRLX3Byb3RlY3RlZCA9IDYxLAogICAgICBUS19wdWJsaWMgPSA2
MiwKICAgICAgVEtfcmV0dXJuID0gNzUsCiAgICAgIFRLX3Nob3J0ID0gNDAsCiAgICAgIFRLX3N0
YXRpYyA9IDYzLAogICAgICBUS19zdHJpY3RmcCA9IDY0LAogICAgICBUS19zdXBlciA9IDQxLAog
ICAgICBUS19zd2l0Y2ggPSA3NiwKICAgICAgVEtfc3luY2hyb25pemVkID0gNTUsCiAgICAgIFRL
X3RoaXMgPSA0MywKICAgICAgVEtfdGhyb3cgPSA3NywKICAgICAgVEtfdGhyb3dzID0gMTA0LAog
ICAgICBUS190cmFuc2llbnQgPSA2NSwKICAgICAgVEtfdHJ1ZSA9IDQ4LAogICAgICBUS190cnkg
PSA3OCwKICAgICAgVEtfdm9pZCA9IDQ0LAogICAgICBUS192b2xhdGlsZSA9IDY2LAogICAgICBU
S193aGlsZSA9IDY3LAogICAgICBUS19JbnRlZ2VyTGl0ZXJhbCA9IDQ5LAogICAgICBUS19Mb25n
TGl0ZXJhbCA9IDUwLAogICAgICBUS19GbG9hdGluZ1BvaW50TGl0ZXJhbCA9IDUxLAogICAgICBU
S19Eb3VibGVMaXRlcmFsID0gNTIsCiAgICAgIFRLX0NoYXJhY3RlckxpdGVyYWwgPSA1MywKICAg
ICAgVEtfU3RyaW5nTGl0ZXJhbCA9IDU0LAogICAgICBUS19QTFVTX1BMVVMgPSAxLAogICAgICBU
S19NSU5VU19NSU5VUyA9IDIsCiAgICAgIFRLX0VRVUFMX0VRVUFMID0gMTMsCiAgICAgIFRLX0xF
U1NfRVFVQUwgPSAxOCwKICAgICAgVEtfR1JFQVRFUl9FUVVBTCA9IDE5LAogICAgICBUS19OT1Rf
RVFVQUwgPSAxNCwKICAgICAgVEtfTEVGVF9TSElGVCA9IDEwLAogICAgICBUS19SSUdIVF9TSElG
VCA9IDExLAogICAgICBUS19VTlNJR05FRF9SSUdIVF9TSElGVCA9IDEyLAogICAgICBUS19QTFVT
X0VRVUFMID0gODMsCiAgICAgIFRLX01JTlVTX0VRVUFMID0gODQsCiAgICAgIFRLX01VTFRJUExZ
X0VRVUFMID0gODUsCiAgICAgIFRLX0RJVklERV9FUVVBTCA9IDg2LAogICAgICBUS19BTkRfRVFV
QUwgPSA4NywKICAgICAgVEtfT1JfRVFVQUwgPSA4OCwKICAgICAgVEtfWE9SX0VRVUFMID0gODks
CiAgICAgIFRLX1JFTUFJTkRFUl9FUVVBTCA9IDkwLAogICAgICBUS19MRUZUX1NISUZUX0VRVUFM
ID0gOTEsCiAgICAgIFRLX1JJR0hUX1NISUZUX0VRVUFMID0gOTIsCiAgICAgIFRLX1VOU0lHTkVE
X1JJR0hUX1NISUZUX0VRVUFMID0gOTMsCiAgICAgIFRLX09SX09SID0gMjQsCiAgICAgIFRLX0FO
RF9BTkQgPSAyNSwKICAgICAgVEtfUExVUyA9IDcsCiAgICAgIFRLX01JTlVTID0gOCwKICAgICAg
VEtfTk9UID0gNjgsCiAgICAgIFRLX1JFTUFJTkRFUiA9IDUsCiAgICAgIFRLX1hPUiA9IDE2LAog
ICAgICBUS19BTkQgPSAxNSwKICAgICAgVEtfTVVMVElQTFkgPSA0LAogICAgICBUS19PUiA9IDIz
LAogICAgICBUS19UV0lERExFID0gNjksCiAgICAgIFRLX0RJVklERSA9IDYsCiAgICAgIFRLX0dS
RUFURVIgPSAyMCwKICAgICAgVEtfTEVTUyA9IDIxLAogICAgICBUS19MUEFSRU4gPSAyMiwKICAg
ICAgVEtfUlBBUkVOID0gMjksCiAgICAgIFRLX0xCUkFDRSA9IDQ1LAogICAgICBUS19SQlJBQ0Ug
PSAzMSwKICAgICAgVEtfTEJSQUNLRVQgPSA5LAogICAgICBUS19SQlJBQ0tFVCA9IDU2LAogICAg
ICBUS19TRU1JQ09MT04gPSAyNywKICAgICAgVEtfUVVFU1RJT04gPSAyNiwKICAgICAgVEtfQ09M
T04gPSA0MiwKICAgICAgVEtfQ09NTUEgPSAzMCwKICAgICAgVEtfRE9UID0gMywKICAgICAgVEtf
RVFVQUwgPSA4MCwKICAgICAgVEtfRVJST1IgPSAxMDcsCiAgICAgIFRLX0VPRiA9IDk2LAogICAg
ICBUS19FT0wgPSAxMDgKICAgICB9OwoKCgoKCgojIDE1ICIuLi8uLi9qaWtlcy9zcmMvc3RyZWFt
LmgiIDIKCgojIDEgIi4uLy4uL2ppa2VzL3NyYy90YWIuaCIgMQogCiAKIAogCiAKIAogCiAKIAoK
CgoKCiAKCgoKCgoKCgoKCgpjbGFzcyBUYWIKewpwdWJsaWM6CiAgICBlbnVtIHsgREVGQVVMVF9U
QUJfU0laRSA9IDggfTsKCiAgICBpbmxpbmUgc3RhdGljIGludCBUYWJTaXplKCkgeyByZXR1cm4g
dGFiX3NpemU7IH0KICAgIGlubGluZSBzdGF0aWMgdm9pZCBTZXRUYWJTaXplKGludCB2YWx1ZSkg
eyB0YWJfc2l6ZSA9IHZhbHVlOyB9CgogICAgc3RhdGljIGludCBXY3NsZW4od2NoYXJfdCAqbGlu
ZSwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgaW50IHRhYl9zaXpl
Owp9OwoKCgoKCgoKIyAxNyAiLi4vLi4vamlrZXMvc3JjL3N0cmVhbS5oIiAyCgojIDEgIi4uLy4u
L2ppa2VzL3NyYy9sb29rdXAuaCIgMQogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgojIDEgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKZXh0
ZXJuICJDIiB7IAoKCgoKIAoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgv
Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2Nj
LWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAK
CgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoK
IAoKCiMgMTI2ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVk
ZS9zdGRkZWYuaCIgMwoKCiAKCgoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2
LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAy
NjkgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2
LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCiMgMzggIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCiAKCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoK
IAoKCgoKCiAKCgpleHRlcm4gbG9uZyBpbnQgX19zeXNjb25mIChpbnQpOwoKCgoKIAoKIAoKIAoK
CiAKCgoKCgoKIyA3MyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCgojIDQyICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAyIDMKCgogCgoKCgoKCgoKCgoKCgogCnR5cGVkZWYgX19jbG9ja190IGNs
b2NrX3Q7CgoKCgojIDcyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgODQgIi91c3IvaW5j
bHVkZS90aW1lLmgiIDMKCgoKIyA5NiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKIyAxMTIg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKCgogCnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsJ
CQkgCiAgaW50IHRtX21pbjsJCQkgCiAgaW50IHRtX2hvdXI7CQkJIAogIGludCB0bV9tZGF5OwkJ
CSAKICBpbnQgdG1fbW9uOwkJCSAKICBpbnQgdG1feWVhcjsJCQkgCiAgaW50IHRtX3dkYXk7CQkJ
IAogIGludCB0bV95ZGF5OwkJCSAKICBpbnQgdG1faXNkc3Q7CQkJIAoKCiAgbG9uZyBpbnQgdG1f
Z210b2ZmOwkJIAogIF9fY29uc3QgY2hhciAqdG1fem9uZTsJIAoKCgoKfTsKCgoKIApzdHJ1Y3Qg
aXRpbWVyc3BlYwogIHsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgIHN0cnVj
dCB0aW1lc3BlYyBpdF92YWx1ZTsKICB9OwoKIApzdHJ1Y3Qgc2lnZXZlbnQ7CgoKCgoKCgoKCgoK
IAoKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIHRocm93ICgpIDsKCiAKZXh0ZXJuIHRpbWVf
dCB0aW1lICh0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGRvdWJsZSBkaWZm
dGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQogICAgIHRocm93ICgpICBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCmV4dGVybiB0aW1lX3QgbWt0aW1lIChzdHJ1Y3Qg
dG0gKl9fdHApIHRocm93ICgpIDsKCgogCgoKZXh0ZXJuIHNpemVfdCBzdHJmdGltZSAoY2hhciAq
X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCgkJCV9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwKCQkJX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhy
b3cgKCkgOwoKCgoKCgoKCgoKIAoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRp
bWVfdCAqX190aW1lcikgdGhyb3cgKCkgOwoKIAoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1l
IChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCkgOwoKCiAKCmV4dGVybiBzdHJ1Y3Qg
dG0gKmdtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAoJCQkgICAg
c3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpIDsKCiAKCmV4dGVybiBzdHJ1Y3Qg
dG0gKmxvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAoJCQkg
ICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpIDsKCgogCgpleHRlcm4g
Y2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpIDsKCiAKZXh0
ZXJuIGNoYXIgKmN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCkgOwoKCiAK
CiAKCmV4dGVybiBjaGFyICphc2N0aW1lX3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0
IF9fdHAsCgkJCWNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGNo
YXIgKmN0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCgkJICAgICAg
Y2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCkgOwoKCgogCmV4dGVybiBjaGFyICpfX3R6
bmFtZVsyXTsJIApleHRlcm4gaW50IF9fZGF5bGlnaHQ7CQkgCmV4dGVybiBsb25nIGludCBfX3Rp
bWV6b25lOwkgCgoKCiAKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCiAKCmV4dGVybiB2b2lkIHR6
c2V0ICh2b2lkKSB0aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25n
IGludCB0aW1lem9uZTsKCgoKIAoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3QgKl9f
d2hlbikgdGhyb3cgKCkgOwoKCgogCgoKCgoKCiAKCgogCmV4dGVybiB0aW1lX3QgdGltZWdtIChz
dHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpIDsKCiAKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0
cnVjdCB0bSAqX190cCkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IGR5c2l6ZSAoaW50IF9feWVh
cikgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgogCmV4dGVybiBp
bnQgbmFub3NsZWVwIChfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwK
CQkgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAoKSA7CgoKIApleHRl
cm4gaW50IGNsb2NrX2dldHJlcyAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3Bl
YyAqX19yZXMpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lk
X3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3RwKSB0aHJvdyAoKSA7CgogCmV4dGVy
biBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qgc3RydWN0
IHRpbWVzcGVjICpfX3RwKQogICAgIHRocm93ICgpIDsKCiMgMzA1ICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAzCgoKCiAKZXh0ZXJuIGludCB0aW1lcl9jcmVhdGUgKGNsb2NraWRfdCBfX2Nsb2NrX2lk
LAoJCQkgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9fZXZwLAoJCQkgdGltZXJfdCAqX19y
ZXN0cmljdCBfX3RpbWVyaWQpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUg
KHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgdGltZXJfc2V0dGlt
ZSAodGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAoJCQkgIF9fY29uc3Qgc3RydWN0IGl0
aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKCQkJICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19y
ZXN0cmljdCBfX292YWx1ZSkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHRpbWVyX2dldHRpbWUg
KHRpbWVyX3QgX190aW1lcmlkLCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX192YWx1ZSkKICAgICB0aHJv
dyAoKSA7CgogCmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQp
IHRocm93ICgpIDsKCgoKIyAzNDkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgojIDM1OSAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMwoKCgp9IAoKCgoKIyAxOSAiLi4vLi4vamlrZXMvc3JjL2xvb2t1
cC5oIiAyCgoKCgoKCgoKCgoKY2xhc3MgQ29udHJvbDsKY2xhc3MgU3ltYm9sOwpjbGFzcyBQYWNr
YWdlU3ltYm9sOwpjbGFzcyBUeXBlU3ltYm9sOwpjbGFzcyBNZXRob2RTeW1ib2w7CmNsYXNzIE1l
dGhvZFNoYWRvd1N5bWJvbDsKY2xhc3MgQmxvY2tTeW1ib2w7CmNsYXNzIFZhcmlhYmxlU3ltYm9s
OwpjbGFzcyBWYXJpYWJsZVNoYWRvd1N5bWJvbDsKY2xhc3MgTGFiZWxTeW1ib2w7CmNsYXNzIExp
dGVyYWxTeW1ib2w7CmNsYXNzIE5hbWVTeW1ib2w7CgpjbGFzcyBQYXRoU3ltYm9sOwpjbGFzcyBE
aXJlY3RvcnlTeW1ib2w7CmNsYXNzIEZpbGVTeW1ib2w7CgpjbGFzcyBTaGFkb3dTeW1ib2w7Cgpj
bGFzcyBMaXRlcmFsVmFsdWU7CmNsYXNzIEludExpdGVyYWxWYWx1ZTsKY2xhc3MgTG9uZ0xpdGVy
YWxWYWx1ZTsKY2xhc3MgRmxvYXRMaXRlcmFsVmFsdWU7CmNsYXNzIERvdWJsZUxpdGVyYWxWYWx1
ZTsKY2xhc3MgVXRmOExpdGVyYWxWYWx1ZTsKCmNsYXNzIFV0ZjhMaXRlcmFsVGFibGU7CmNsYXNz
IE5hbWVMb29rdXBUYWJsZTsKY2xhc3MgVHlwZUxvb2t1cFRhYmxlOwpjbGFzcyBMaXRlcmFsTG9v
a3VwVGFibGU7CgpjbGFzcyBBc3RCaW5hcnlFeHByZXNzaW9uOwpjbGFzcyBBc3RFeHByZXNzaW9u
OwoKY2xhc3MgSGFzaAp7CnB1YmxpYzoKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAg
IGlubGluZSBzdGF0aWMgdW5zaWduZWQgRnVuY3Rpb24od2NoYXJfdCAqaGVhZCwgaW50IGxlbikK
ICAgIHsKICAgICAgICB1bnNpZ25lZCBsb25nIGhhc2hfdmFsdWUgPSBoZWFkW2xlbiA+PiAxXTsg
IAogICAgICAgIHdjaGFyX3QgKnRhaWwgPSAmaGVhZFtsZW4gLSAxXTsKCiAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA1ICYmIGhlYWQgPCB0YWlsOyBpKyspCiAgICAgICAgewogICAgICAgICAg
ICB1bnNpZ25lZCBrID0gKnRhaWwtLTsKICAgICAgICAgICAgaGFzaF92YWx1ZSArPSAoKGsgPDwg
NykgKyAqaGVhZCsrKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBoYXNoX3ZhbHVlOwogICAg
fQoKICAgICAKICAgICAKICAgICAKICAgIGlubGluZSBzdGF0aWMgdW5zaWduZWQgRnVuY3Rpb24o
Y29uc3QgY2hhciAqaGVhZCwgaW50IGxlbikKICAgIHsKICAgICAgICB1bnNpZ25lZCBsb25nIGhh
c2hfdmFsdWUgPSBoZWFkW2xlbiA+PiAxXTsgIAogICAgICAgIGNvbnN0IGNoYXIgKnRhaWwgPSAm
aGVhZFtsZW4gLSAxXTsKCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1ICYmIGhlYWQgPCB0
YWlsOyBpKyspCiAgICAgICAgewogICAgICAgICAgICB1bnNpZ25lZCBrID0gKnRhaWwtLTsKICAg
ICAgICAgICAgaGFzaF92YWx1ZSArPSAoKGsgPDwgNykgKyAqaGVhZCsrKTsKICAgICAgICB9Cgog
ICAgICAgIHJldHVybiBoYXNoX3ZhbHVlOwogICAgfQoKICAgIGlubGluZSBzdGF0aWMgdW5zaWdu
ZWQgRnVuY3Rpb24oTG9uZ0ludCB2YWx1ZSkKICAgIHsKICAgICAgICByZXR1cm4gdmFsdWUuaGFz
aENvZGUoKTsKICAgIH0KCiAgICBpbmxpbmUgc3RhdGljIHVuc2lnbmVkIEZ1bmN0aW9uKElFRUVm
bG9hdCB2YWx1ZSkKICAgIHsKICAgICAgICByZXR1cm4gdmFsdWUuaGFzaENvZGUoKTsKICAgIH0K
CiAgICBpbmxpbmUgc3RhdGljIHVuc2lnbmVkIEZ1bmN0aW9uKElFRUVkb3VibGUgdmFsdWUpCiAg
ICB7CiAgICAgICAgcmV0dXJuIHZhbHVlLmhhc2hDb2RlKCk7CiAgICB9Cn07CgoKY2xhc3MgRGly
ZWN0b3J5RW50cnkKewpwdWJsaWM6CiAgICBEaXJlY3RvcnlFbnRyeSAqbmV4dDsKICAgIGNoYXIg
Km5hbWU7CiAgICBpbnQgbGVuZ3RoOwoKICAgIERpcmVjdG9yeUVudHJ5KCkgOiBuZXh0KF9fbnVs
bCApLAogICAgICAgICAgICAgICAgICAgICAgIG5hbWUoX19udWxsICksCiAgICAgICAgICAgICAg
ICAgICAgICAgbGVuZ3RoKDApLAogICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeShfX251
bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICBtdGltZV8oMCkKICAgIHsKICAgICAgICBpbWFn
ZSA9IHRoaXM7CiAgICB9CgogICAgdmlydHVhbCB+RGlyZWN0b3J5RW50cnkoKQogICAgewogICAg
ICAgIGRlbGV0ZSBbXSBuYW1lOwogICAgfQoKCiAgICBpbmxpbmUgdm9pZCBJbml0aWFsaXplKERp
cmVjdG9yeVN5bWJvbCAqZGlyZWN0b3J5XywgY2hhciAqbmFtZV8sIGludCBsZW5ndGhfKQogICAg
ewogICAgICAgIGRpcmVjdG9yeSA9IGRpcmVjdG9yeV87CiAgICAgICAgbGVuZ3RoID0gbGVuZ3Ro
XzsKICAgICAgICBuYW1lID0gbmV3IGNoYXJbbGVuZ3RoICsgMV07CiAgICAgICAgbWVtbW92ZShu
YW1lLCBuYW1lXywgbGVuZ3RoICogc2l6ZW9mKGNoYXIpKTsKICAgICAgICBuYW1lW2xlbmd0aF0g
PSBVX05VTEw7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBJbml0aWFs
aXplKERpcmVjdG9yeUVudHJ5ICplbnRyeSwgY2hhciAqbmFtZV8sIGludCBsZW5ndGhfKQogICAg
ewogICAgICAgIEluaXRpYWxpemUoZW50cnkgLT4gZGlyZWN0b3J5LCBuYW1lXywgbGVuZ3RoXyk7
CiAgICB9CgogICAgdGltZV90IE10aW1lKCk7CgogICAgYm9vbCBJc0R1bW15KCkgeyByZXR1cm4g
dGhpcyAhPSBpbWFnZTsgfQoKICAgICAKICAgICAKICAgICAKICAgIHZpcnR1YWwgRGlyZWN0b3J5
RW50cnkgKkltYWdlKCkgeyByZXR1cm4gdGhpczsgfQoKcHJvdGVjdGVkOgogICAgRGlyZWN0b3J5
U3ltYm9sICpkaXJlY3Rvcnk7CiAgICBEaXJlY3RvcnlFbnRyeSAqaW1hZ2U7CiAgICB0aW1lX3Qg
bXRpbWVfOwp9OwoKCiMgMTg3ICIuLi8uLi9qaWtlcy9zcmMvbG9va3VwLmgiCgoKCmNsYXNzIFN5
c3RlbVRhYmxlCnsKICAgIGVudW0KICAgIHsKICAgICAgICBERUZBVUxUX0hBU0hfU0laRSA9IDEz
LAogICAgICAgIE1BWF9IQVNIX1NJWkUgPSAxMDIxCiAgICB9OwoKcHVibGljOgoKICAgIFN5c3Rl
bVRhYmxlKGludCA9IERFRkFVTFRfSEFTSF9TSVpFKTsKICAgIHZpcnR1YWwgflN5c3RlbVRhYmxl
KCk7CgogICAgRGlyZWN0b3J5U3ltYm9sICpGaW5kRGlyZWN0b3J5U3ltYm9sKGRldl90LCBpbm9f
dCk7CiAgICB2b2lkIEluc2VydERpcmVjdG9yeVN5bWJvbChkZXZfdCwgaW5vX3QsIERpcmVjdG9y
eVN5bWJvbCAqKTsKCnByaXZhdGU6CiAgICBjbGFzcyBFbGVtZW50CiAgICB7CiAgICBwdWJsaWM6
CiAgICAgICAgRWxlbWVudChkZXZfdCBkZXZpY2VfLCBpbm9fdCBpbm9kZV8sIERpcmVjdG9yeVN5
bWJvbCAqZGlyZWN0b3J5X3N5bWJvbF8pIDogZGV2aWNlKGRldmljZV8pLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlub2RlKGlub2RlXyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGly
ZWN0b3J5X3N5bWJvbChkaXJlY3Rvcnlfc3ltYm9sXykKICAgICAgICB7fQoKICAgICAgICBFbGVt
ZW50ICpuZXh0OwogICAgICAgIGRldl90IGRldmljZTsKICAgICAgICBpbm9fdCBpbm9kZTsKICAg
ICAgICBEaXJlY3RvcnlTeW1ib2wgKmRpcmVjdG9yeV9zeW1ib2w7CiAgICB9OwoKICAgIFR1cGxl
PEVsZW1lbnQgKj4gZGlyZWN0b3JpZXM7CgogICAgRWxlbWVudCAqKmJhc2U7CiAgICBpbnQgaGFz
aF9zaXplOwoKICAgIHN0YXRpYyBpbnQgcHJpbWVzW107CiAgICBpbnQgcHJpbWVfaW5kZXg7Cgog
ICAgaW50IGhhc2goZGV2X3QgZGV2aWNlLCBpbm9fdCBpbm9kZSkgeyByZXR1cm4gKGRldmljZSAr
IGlub2RlKSAlIGhhc2hfc2l6ZTsgfQoKICAgIHZvaWQgUmVoYXNoKCk7Cn07CgoKY2xhc3MgRGly
ZWN0b3J5VGFibGUKewpwdWJsaWM6CiAgICBUdXBsZTxEaXJlY3RvcnlFbnRyeSAqPiBlbnRyeV9w
b29sOwoKICAgIERpcmVjdG9yeVRhYmxlKGludCBlc3RpbWF0ZSA9IDEwMjQpOwogICAgfkRpcmVj
dG9yeVRhYmxlKCk7CgogICAgRGlyZWN0b3J5RW50cnkgKkZpbmRFbnRyeShjaGFyICosIGludCk7
CiAgICBEaXJlY3RvcnlFbnRyeSAqSW5zZXJ0RW50cnkoRGlyZWN0b3J5U3ltYm9sICosIGNoYXIg
KiwgaW50KTsKCgoKCgoKCgoKcHJpdmF0ZToKICAgIGVudW0KICAgIHsKICAgICAgICBERUZBVUxU
X0hBU0hfU0laRSA9IDEwMjEsCiAgICAgICAgTUFYX0hBU0hfU0laRSA9IDgxOTEKICAgIH07Cgog
ICAgRGlyZWN0b3J5RW50cnkgKipiYXNlOwogICAgaW50IGhhc2hfc2l6ZTsKCiAgICBzdGF0aWMg
aW50IHByaW1lc1tdOwogICAgaW50IHByaW1lX2luZGV4OwoKICAgIGlubGluZSBzdGF0aWMgdW5z
aWduZWQgSGFzaChjb25zdCBjaGFyICpoZWFkLCBpbnQgbGVuKSB7IHJldHVybiBIYXNoOjpGdW5j
dGlvbihoZWFkLCBsZW4pOyB9CgogICAgdm9pZCBSZWhhc2goKTsKfTsKCgpjbGFzcyBTeW1ib2wK
ewpwdWJsaWM6CiAgICBTeW1ib2wgICpuZXh0OwoKICAgIGVudW0gU3ltYm9sS2luZAogICAgewog
ICAgICAgICBOT05FLAogICAgICAgICBOQU1FLAogICAgICAgICBQQUNLQUdFLAogICAgICAgICBU
WVBFLCAgCiAgICAgICAgIE1FVEhPRCwKICAgICAgICAgQkxPQ0ssCiAgICAgICAgIFZBUklBQkxF
LAogICAgICAgICBMQUJFTCwKICAgICAgICAgTElURVJBTCwKCiAgICAgICAgIFBBVEgsCiAgICAg
ICAgIF9ESVJFQ1RPUlksCiAgICAgICAgIF9GSUxFLAoKICAgICAgICAgX251bV9raW5kcwogICAg
fTsKCiAgICBTeW1ib2xLaW5kIEtpbmQoKSB7IHJldHVybiBfa2luZDsgfQogICAgdmlydHVhbCB3
Y2hhcl90ICpOYW1lKCkgICB7IHJldHVybiAod2NoYXJfdCAqKSBfX251bGwgOyB9CiAgICB2aXJ0
dWFsIHNpemVfdCBOYW1lTGVuZ3RoKCkgeyByZXR1cm4gMDsgfQogICAgdmlydHVhbCBOYW1lU3lt
Ym9sICpJZGVudGl0eSgpIHsgcmV0dXJuIChOYW1lU3ltYm9sICopIF9fbnVsbCA7IH0KCiAgICAg
CiAgICAgCiAgICAgCiAgICAgCiAgICBQYWNrYWdlU3ltYm9sICpQYWNrYWdlQ2FzdCgpOwogICAg
VHlwZVN5bWJvbCAqVHlwZUNhc3QoKTsKICAgIE1ldGhvZFN5bWJvbCAqTWV0aG9kQ2FzdCgpOwog
ICAgQmxvY2tTeW1ib2wgKkJsb2NrQ2FzdCgpOwogICAgVmFyaWFibGVTeW1ib2wgKlZhcmlhYmxl
Q2FzdCgpOwogICAgTGFiZWxTeW1ib2wgKkxhYmVsQ2FzdCgpOwogICAgTGl0ZXJhbFN5bWJvbCAq
TGl0ZXJhbENhc3QoKTsKICAgIE5hbWVTeW1ib2wgKk5hbWVDYXN0KCk7CgogICAgUGF0aFN5bWJv
bCAqUGF0aENhc3QoKTsKICAgIERpcmVjdG9yeVN5bWJvbCAqRGlyZWN0b3J5Q2FzdCgpOwogICAg
RmlsZVN5bWJvbCAqRmlsZUNhc3QoKTsKCiAgICB2aXJ0dWFsIH5TeW1ib2woKSB7fQoKcHJvdGVj
dGVkOgogICAgU3ltYm9sS2luZCBfa2luZDsKfTsKCgpjbGFzcyBMaXRlcmFsVmFsdWUKewpwdWJs
aWM6CiAgICBMaXRlcmFsVmFsdWUgKm5leHQ7CiAgICBpbnQgaW5kZXg7CgogICAgdmlydHVhbCB+
TGl0ZXJhbFZhbHVlKCkge30KfTsKCgpjbGFzcyBJbnRMaXRlcmFsVmFsdWUgOiBwdWJsaWMgTGl0
ZXJhbFZhbHVlCnsKcHVibGljOgogICAgaW50IHZhbHVlOwoKICAgIHZpcnR1YWwgfkludExpdGVy
YWxWYWx1ZSgpIHt9CgogICAgdm9pZCBJbml0aWFsaXplKGludCB2YWx1ZV8sIGludCBpbmRleF8p
CiAgICB7CiAgICAgICAgdmFsdWUgPSB2YWx1ZV87CiAgICAgICAgaW5kZXggPSBpbmRleF87CiAg
ICB9Cn07CgoKY2xhc3MgTG9uZ0xpdGVyYWxWYWx1ZSA6IHB1YmxpYyBMaXRlcmFsVmFsdWUKewpw
dWJsaWM6CiAgICBMb25nSW50IHZhbHVlOwoKICAgIHZpcnR1YWwgfkxvbmdMaXRlcmFsVmFsdWUo
KSB7fQoKICAgIHZvaWQgSW5pdGlhbGl6ZShMb25nSW50IHZhbHVlXywgaW50IGluZGV4XykKICAg
IHsKICAgICAgICB2YWx1ZSA9IHZhbHVlXzsKICAgICAgICBpbmRleCA9IGluZGV4XzsKICAgIH0K
fTsKCgpjbGFzcyBGbG9hdExpdGVyYWxWYWx1ZSA6IHB1YmxpYyBMaXRlcmFsVmFsdWUKewpwdWJs
aWM6CiAgICBJRUVFZmxvYXQgdmFsdWU7CgogICAgdmlydHVhbCB+RmxvYXRMaXRlcmFsVmFsdWUo
KSB7fQoKICAgIHZvaWQgSW5pdGlhbGl6ZShJRUVFZmxvYXQgdmFsdWVfLCBpbnQgaW5kZXhfKQog
ICAgewogICAgICAgIHZhbHVlID0gdmFsdWVfOwogICAgICAgIGluZGV4ID0gaW5kZXhfOwogICAg
fQp9OwoKCmNsYXNzIERvdWJsZUxpdGVyYWxWYWx1ZSA6IHB1YmxpYyBMaXRlcmFsVmFsdWUKewpw
dWJsaWM6CiAgICBJRUVFZG91YmxlIHZhbHVlOwoKICAgIHZpcnR1YWwgfkRvdWJsZUxpdGVyYWxW
YWx1ZSgpIHt9CgogICAgdm9pZCBJbml0aWFsaXplKElFRUVkb3VibGUgdmFsdWVfLCBpbnQgaW5k
ZXhfKQogICAgewogICAgICAgIHZhbHVlID0gdmFsdWVfOwogICAgICAgIGluZGV4ID0gaW5kZXhf
OwogICAgfQp9OwoKCmNsYXNzIFV0ZjhMaXRlcmFsVmFsdWUgOiBwdWJsaWMgTGl0ZXJhbFZhbHVl
CnsKcHVibGljOgogICAgY2hhciAqdmFsdWU7CiAgICBpbnQgIGxlbmd0aDsKCiAgICBVdGY4TGl0
ZXJhbFZhbHVlKCkgOiB2YWx1ZShfX251bGwgKQogICAge30KCiAgICB2aXJ0dWFsIH5VdGY4TGl0
ZXJhbFZhbHVlKCkKICAgIHsKICAgICAgICBkZWxldGUgW10gdmFsdWU7CiAgICB9CgogICAgdm9p
ZCBJbml0aWFsaXplKGNvbnN0IGNoYXIgKnZhbHVlXywgaW50IGxlbmd0aF8sIHVuc2lnbmVkIGhh
c2hfYWRkcmVzc18sIGludCBpbmRleF8pCiAgICB7CiAgICAgICAgbGVuZ3RoID0gbGVuZ3RoXzsK
ICAgICAgICB2YWx1ZSA9IG5ldyBjaGFyW2xlbmd0aCArIDFdOwogICAgICAgIG1lbW1vdmUodmFs
dWUsIHZhbHVlXywgbGVuZ3RoICogc2l6ZW9mKGNoYXIpKTsKICAgICAgICB2YWx1ZVtsZW5ndGhd
ID0gVV9OVUxMOwoKICAgICAgICBoYXNoX2FkZHJlc3MgPSBoYXNoX2FkZHJlc3NfOwogICAgICAg
IGluZGV4ID0gaW5kZXhfOwogICAgfQoKcHJpdmF0ZToKCiAgICBmcmllbmQgY2xhc3MgVXRmOExp
dGVyYWxUYWJsZTsKCiAgICB1bnNpZ25lZCBoYXNoX2FkZHJlc3M7Cn07CgoKY2xhc3MgTmFtZVN5
bWJvbCA6IHB1YmxpYyBTeW1ib2wKewpwdWJsaWM6CiAgICBpbnQgaW5kZXg7CiAgICBVdGY4TGl0
ZXJhbFZhbHVlICpVdGY4X2xpdGVyYWw7CgogICAgdmlydHVhbCB3Y2hhcl90ICpOYW1lKCkgICB7
IHJldHVybiBuYW1lXzsgfQogICAgdmlydHVhbCBzaXplX3QgTmFtZUxlbmd0aCgpIHsgcmV0dXJu
IGxlbmd0aDsgfQogICAgdmlydHVhbCBOYW1lU3ltYm9sICpJZGVudGl0eSgpIHsgcmV0dXJuIHRo
aXM7IH0KICAgIGNoYXIgKlV0ZjhOYW1lKCkgeyByZXR1cm4gKGNoYXIgKikgKFV0ZjhfbGl0ZXJh
bCA/IFV0ZjhfbGl0ZXJhbCAtPiB2YWx1ZSA6IF9fbnVsbCApOyB9CiAgICBpbnQgVXRmOE5hbWVM
ZW5ndGgoKSB7IHJldHVybiAoVXRmOF9saXRlcmFsID8gVXRmOF9saXRlcmFsIC0+IGxlbmd0aCA6
IDApOyB9CgogICAgTmFtZVN5bWJvbCgpIDogbmFtZV8oX19udWxsICkKICAgIHt9CgogICAgdmly
dHVhbCB+TmFtZVN5bWJvbCgpCiAgICB7CiAgICAgICAgZGVsZXRlIFtdIG5hbWVfOwogICAgfQoK
ICAgIGlubGluZSB2b2lkIEluaXRpYWxpemUod2NoYXJfdCAqc3RyLCBpbnQgbGVuZ3RoXywgdW5z
aWduZWQgaGFzaF9hZGRyZXNzXywgaW50IGluZGV4XykKICAgIHsKICAgICAgICBTeW1ib2w6Ol9r
aW5kID0gTkFNRTsKCiAgICAgICAgaGFzaF9hZGRyZXNzID0gaGFzaF9hZGRyZXNzXzsKICAgICAg
ICBpbmRleCA9IGluZGV4XzsKCiAgICAgICAgbGVuZ3RoID0gbGVuZ3RoXzsKICAgICAgICBuYW1l
XyA9IG5ldyB3Y2hhcl90W2xlbmd0aCArIDFdOwogICAgICAgIG1lbW1vdmUobmFtZV8sIHN0ciwg
bGVuZ3RoICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICBuYW1lX1tsZW5ndGhdID0gVV9OVUxM
OwoKICAgICAgICBVdGY4X2xpdGVyYWwgPSBfX251bGwgOwoKICAgICAgICByZXR1cm47CiAgICB9
Cgpwcml2YXRlOgoKICAgIGZyaWVuZCBjbGFzcyBOYW1lTG9va3VwVGFibGU7CgogICAgd2NoYXJf
dCAqbmFtZV87CiAgICBpbnQgbGVuZ3RoOwogICAgdW5zaWduZWQgaGFzaF9hZGRyZXNzOwp9OwoK
CmNsYXNzIE5hbWVMb29rdXBUYWJsZQp7CnB1YmxpYzoKICAgIFR1cGxlPE5hbWVTeW1ib2wgKj4g
c3ltYm9sX3Bvb2w7CgogICAgTmFtZUxvb2t1cFRhYmxlKGludCBlc3RpbWF0ZSA9IDE2Mzg0KTsK
ICAgIH5OYW1lTG9va3VwVGFibGUoKTsKCiAgICBOYW1lU3ltYm9sICpGaW5kT3JJbnNlcnROYW1l
KHdjaGFyX3QgKiwgc2l6ZV90KTsKCnByaXZhdGU6CiAgICBlbnVtCiAgICB7CiAgICAgICAgREVG
QVVMVF9IQVNIX1NJWkUgPSA0MDkzLAogICAgICAgIE1BWF9IQVNIX1NJWkUgPSAzMjc3MQogICAg
fTsKCiAgICBOYW1lU3ltYm9sICoqYmFzZTsKICAgIGludCBoYXNoX3NpemU7CgogICAgc3RhdGlj
IGludCBwcmltZXNbXTsKICAgIGludCBwcmltZV9pbmRleDsKCiAgICBpbmxpbmUgc3RhdGljIHVu
c2lnbmVkIEhhc2god2NoYXJfdCAqaGVhZCwgaW50IGxlbikgeyByZXR1cm4gSGFzaDo6RnVuY3Rp
b24oaGVhZCwgbGVuKTsgfQoKICAgIHZvaWQgUmVoYXNoKCk7Cn07CgoKY2xhc3MgVHlwZUxvb2t1
cFRhYmxlCnsKcHVibGljOgogICAgVHlwZUxvb2t1cFRhYmxlKGludCBlc3RpbWF0ZSA9IDE2Mzg0
KTsKICAgIH5UeXBlTG9va3VwVGFibGUoKTsKCiAgICBUeXBlU3ltYm9sICpGaW5kVHlwZShjb25z
dCBjaGFyICosIGludCk7CiAgICB2b2lkIEluc2VydFR5cGUoVHlwZVN5bWJvbCAqKTsKICAgIHZv
aWQgU2V0RW1wdHkoKTsKCnByaXZhdGU6CiAgICBUdXBsZTxUeXBlU3ltYm9sICo+IHN5bWJvbF9w
b29sOwoKICAgIGVudW0KICAgIHsKICAgICAgICBERUZBVUxUX0hBU0hfU0laRSA9IDQwOTMsCiAg
ICAgICAgTUFYX0hBU0hfU0laRSA9IDMyNzcxCiAgICB9OwoKICAgIFR5cGVTeW1ib2wgKipiYXNl
OwogICAgaW50IGhhc2hfc2l6ZTsKCiAgICBzdGF0aWMgaW50IHByaW1lc1tdOwogICAgaW50IHBy
aW1lX2luZGV4OwoKICAgIGlubGluZSBzdGF0aWMgdW5zaWduZWQgSGFzaChjb25zdCBjaGFyICpo
ZWFkLCBpbnQgbGVuKSB7IHJldHVybiBIYXNoOjpGdW5jdGlvbihoZWFkLCBsZW4pOyB9CgogICAg
dm9pZCBSZWhhc2goKTsKfTsKCgpjbGFzcyBMaXRlcmFsU3ltYm9sIDogcHVibGljIFN5bWJvbAp7
CnB1YmxpYzoKICAgIExpdGVyYWxWYWx1ZSAqdmFsdWU7CgogICAgdmlydHVhbCB3Y2hhcl90ICpO
YW1lKCkgICB7IHJldHVybiBuYW1lXzsgfQogICAgdmlydHVhbCBzaXplX3QgTmFtZUxlbmd0aCgp
IHsgcmV0dXJuIGxlbmd0aDsgfQogICAgdmlydHVhbCBOYW1lU3ltYm9sICpJZGVudGl0eSgpIHsg
cmV0dXJuIChOYW1lU3ltYm9sICopIF9fbnVsbCA7IH0KCiAgICBMaXRlcmFsU3ltYm9sKCkgOiBu
YW1lXyhfX251bGwgKQogICAge30KCiAgICB2aXJ0dWFsIH5MaXRlcmFsU3ltYm9sKCkKICAgIHsK
ICAgICAgICBkZWxldGUgW10gbmFtZV87CiAgICB9CgogICAgdm9pZCBJbml0aWFsaXplKHdjaGFy
X3QgKnN0ciwgdW5zaWduZWQgaGFzaF9hZGRyZXNzXywgaW50IGxlbmd0aF8pCiAgICB7CiAgICAg
ICAgU3ltYm9sOjpfa2luZCA9IExJVEVSQUw7CgogICAgICAgIGhhc2hfYWRkcmVzcyA9IGhhc2hf
YWRkcmVzc187CgogICAgICAgIGxlbmd0aCA9IGxlbmd0aF87CiAgICAgICAgbmFtZV8gPSBuZXcg
d2NoYXJfdFtsZW5ndGggKyAxXTsKICAgICAgICBtZW1tb3ZlKG5hbWVfLCBzdHIsIGxlbmd0aCAq
IHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgbmFtZV9bbGVuZ3RoXSA9IFVfTlVMTDsKCiAgICAg
ICAgdmFsdWUgPSBfX251bGwgOwogICAgfQoKcHJpdmF0ZToKCiAgICBmcmllbmQgY2xhc3MgTGl0
ZXJhbExvb2t1cFRhYmxlOwoKICAgIHdjaGFyX3QgKm5hbWVfOwogICAgaW50IGxlbmd0aDsKICAg
IHVuc2lnbmVkIGhhc2hfYWRkcmVzczsKfTsKCgpjbGFzcyBMaXRlcmFsTG9va3VwVGFibGUKewpw
dWJsaWM6CiAgICBUdXBsZTxMaXRlcmFsU3ltYm9sICo+IHN5bWJvbF9wb29sOwoKICAgIExpdGVy
YWxMb29rdXBUYWJsZSgpOwogICAgfkxpdGVyYWxMb29rdXBUYWJsZSgpOwoKICAgIExpdGVyYWxT
eW1ib2wgKkZpbmRPckluc2VydExpdGVyYWwod2NoYXJfdCAqLCBzaXplX3QpOwoKcHJpdmF0ZToK
ICAgIGVudW0KICAgIHsKICAgICAgICBERUZBVUxUX0hBU0hfU0laRSA9IDEwMjEsCiAgICAgICAg
TUFYX0hBU0hfU0laRSA9IDgxOTEKICAgIH07CgogICAgTGl0ZXJhbFN5bWJvbCAqKmJhc2U7CiAg
ICBpbnQgaGFzaF9zaXplOwoKICAgIHN0YXRpYyBpbnQgcHJpbWVzW107CiAgICBpbnQgcHJpbWVf
aW5kZXg7CgogICAgaW5saW5lIHN0YXRpYyB1bnNpZ25lZCBIYXNoKHdjaGFyX3QgKmhlYWQsIGlu
dCBsZW4pIHsgcmV0dXJuIEhhc2g6OkZ1bmN0aW9uKGhlYWQsIGxlbik7IH0KCiAgICB2b2lkIFJl
aGFzaCgpOwp9OwoKCmNsYXNzIEludExpdGVyYWxUYWJsZQp7CnB1YmxpYzoKICAgIFR1cGxlPElu
dExpdGVyYWxWYWx1ZSAqPiBzeW1ib2xfcG9vbDsKCiAgICBJbnRMaXRlcmFsVGFibGUoTGl0ZXJh
bFZhbHVlICopOwogICAgfkludExpdGVyYWxUYWJsZSgpOwoKICAgIExpdGVyYWxWYWx1ZSAqRmlu
ZE9ySW5zZXJ0TnVsbCgpCiAgICB7CiAgICAgICAgcmV0dXJuIEZpbmRPckluc2VydCgwKTsKICAg
IH0KCiAgICBMaXRlcmFsVmFsdWUgKkZpbmRPckluc2VydENoYXIoTGl0ZXJhbFN5bWJvbCAqKTsK
ICAgIExpdGVyYWxWYWx1ZSAqRmluZE9ySW5zZXJ0SW50KExpdGVyYWxTeW1ib2wgKik7CiAgICBM
aXRlcmFsVmFsdWUgKkZpbmRPckluc2VydEhleEludChMaXRlcmFsU3ltYm9sICopOwogICAgTGl0
ZXJhbFZhbHVlICpGaW5kT3JJbnNlcnRPY3RhbEludChMaXRlcmFsU3ltYm9sICopOwogICAgTGl0
ZXJhbFZhbHVlICpGaW5kT3JJbnNlcnROZWdhdGl2ZUludChMaXRlcmFsU3ltYm9sICopOwoKICAg
IEludExpdGVyYWxWYWx1ZSAqRmluZE9ySW5zZXJ0KGludCk7CiAgICBJbnRMaXRlcmFsVmFsdWUg
KkZpbmQoaW50KTsKCiMgNjM2ICIuLi8uLi9qaWtlcy9zcmMvbG9va3VwLmgiCgoKcHJpdmF0ZToK
ICAgIGVudW0KICAgIHsKICAgICAgICBERUZBVUxUX0hBU0hfU0laRSA9IDQwOTMsCiAgICAgICAg
TUFYX0hBU0hfU0laRSA9IDMyNzcxCiAgICB9OwoKICAgIEludExpdGVyYWxWYWx1ZSAqKmJhc2U7
CiAgICBpbnQgaGFzaF9zaXplOwoKICAgIHN0YXRpYyBpbnQgcHJpbWVzW107CiAgICBpbnQgcHJp
bWVfaW5kZXg7CgogICAgc3RhdGljIGludCBpbnQzMl9saW1pdDsKCiAgICBMaXRlcmFsVmFsdWUg
KmJhZF92YWx1ZTsKCiAgICB2b2lkIFJlaGFzaCgpOwp9OwoKCmNsYXNzIExvbmdMaXRlcmFsVGFi
bGUKewpwdWJsaWM6CiAgICBUdXBsZTxMb25nTGl0ZXJhbFZhbHVlICo+IHN5bWJvbF9wb29sOwoK
ICAgIExvbmdMaXRlcmFsVGFibGUoTGl0ZXJhbFZhbHVlICopOwogICAgfkxvbmdMaXRlcmFsVGFi
bGUoKTsKCiAgICBMaXRlcmFsVmFsdWUgKkZpbmRPckluc2VydExvbmcoTGl0ZXJhbFN5bWJvbCAq
KTsKICAgIExpdGVyYWxWYWx1ZSAqRmluZE9ySW5zZXJ0SGV4TG9uZyhMaXRlcmFsU3ltYm9sICop
OwogICAgTGl0ZXJhbFZhbHVlICpGaW5kT3JJbnNlcnRPY3RhbExvbmcoTGl0ZXJhbFN5bWJvbCAq
KTsKICAgIExpdGVyYWxWYWx1ZSAqRmluZE9ySW5zZXJ0TmVnYXRpdmVMb25nKExpdGVyYWxTeW1i
b2wgKik7CgogICAgTG9uZ0xpdGVyYWxWYWx1ZSAqRmluZE9ySW5zZXJ0KExvbmdJbnQpOwoKCgoK
CgoKCgoKcHJpdmF0ZToKCiAgICBlbnVtCiAgICB7CiAgICAgICAgREVGQVVMVF9IQVNIX1NJWkUg
PSAxMDIxLAogICAgICAgIE1BWF9IQVNIX1NJWkUgPSA4MTkxCiAgICB9OwoKICAgIExvbmdMaXRl
cmFsVmFsdWUgKipiYXNlOwogICAgaW50IGhhc2hfc2l6ZTsKCiAgICBzdGF0aWMgaW50IHByaW1l
c1tdOwogICAgaW50IHByaW1lX2luZGV4OwoKICAgIHN0YXRpYyBMb25nSW50IGludDY0X2xpbWl0
OwoKICAgIExpdGVyYWxWYWx1ZSAqYmFkX3ZhbHVlOwoKICAgIGlubGluZSBzdGF0aWMgdW5zaWdu
ZWQgSGFzaChMb25nSW50IHZhbHVlKSB7IHJldHVybiBIYXNoOjpGdW5jdGlvbih2YWx1ZSk7IH0K
CiAgICB2b2lkIFJlaGFzaCgpOwp9OwoKCmNsYXNzIEZsb2F0TGl0ZXJhbFRhYmxlCnsKcHVibGlj
OgogICAgVHVwbGU8RmxvYXRMaXRlcmFsVmFsdWUgKj4gc3ltYm9sX3Bvb2w7CgogICAgRmxvYXRM
aXRlcmFsVGFibGUoTGl0ZXJhbFZhbHVlICopOwogICAgfkZsb2F0TGl0ZXJhbFRhYmxlKCk7Cgog
ICAgTGl0ZXJhbFZhbHVlICpGaW5kT3JJbnNlcnRGbG9hdChMaXRlcmFsU3ltYm9sICopOwoKICAg
IEZsb2F0TGl0ZXJhbFZhbHVlICpGaW5kT3JJbnNlcnQoSUVFRWZsb2F0KTsKCgoKCgoKCgoKCnBy
aXZhdGU6CgogICAgZW51bQogICAgewogICAgICAgIERFRkFVTFRfSEFTSF9TSVpFID0gMTAyMSwK
ICAgICAgICBNQVhfSEFTSF9TSVpFID0gODE5MQogICAgfTsKCiAgICBGbG9hdExpdGVyYWxWYWx1
ZSAqKmJhc2U7CiAgICBpbnQgaGFzaF9zaXplOwoKICAgIHN0YXRpYyBpbnQgcHJpbWVzW107CiAg
ICBpbnQgcHJpbWVfaW5kZXg7CgogICAgTGl0ZXJhbFZhbHVlICpiYWRfdmFsdWU7CgogICAgaW5s
aW5lIHN0YXRpYyB1bnNpZ25lZCBIYXNoKElFRUVmbG9hdCB2YWx1ZSkgeyByZXR1cm4gSGFzaDo6
RnVuY3Rpb24odmFsdWUpOyB9CgogICAgdm9pZCBSZWhhc2goKTsKfTsKCgpjbGFzcyBEb3VibGVM
aXRlcmFsVGFibGUKewpwdWJsaWM6CiAgICBUdXBsZTxEb3VibGVMaXRlcmFsVmFsdWUgKj4gc3lt
Ym9sX3Bvb2w7CgogICAgRG91YmxlTGl0ZXJhbFRhYmxlKExpdGVyYWxWYWx1ZSAqKTsKICAgIH5E
b3VibGVMaXRlcmFsVGFibGUoKTsKCiAgICBMaXRlcmFsVmFsdWUgKkZpbmRPckluc2VydERvdWJs
ZShMaXRlcmFsU3ltYm9sICopOwoKICAgIERvdWJsZUxpdGVyYWxWYWx1ZSAqRmluZE9ySW5zZXJ0
KElFRUVkb3VibGUpOwoKCgoKCgoKCgoKcHJpdmF0ZToKCiAgICBlbnVtCiAgICB7CiAgICAgICAg
REVGQVVMVF9IQVNIX1NJWkUgPSAxMDIxLAogICAgICAgIE1BWF9IQVNIX1NJWkUgPSA4MTkxCiAg
ICB9OwoKICAgIERvdWJsZUxpdGVyYWxWYWx1ZSAqKmJhc2U7CiAgICBpbnQgaGFzaF9zaXplOwoK
ICAgIHN0YXRpYyBpbnQgcHJpbWVzW107CiAgICBpbnQgcHJpbWVfaW5kZXg7CgogICAgTGl0ZXJh
bFZhbHVlICpiYWRfdmFsdWU7CgogICAgaW5saW5lIHN0YXRpYyB1bnNpZ25lZCBIYXNoKElFRUVk
b3VibGUgdmFsdWUpIHsgcmV0dXJuIEhhc2g6OkZ1bmN0aW9uKHZhbHVlKTsgfQoKICAgIHZvaWQg
UmVoYXNoKCk7Cn07CgoKY2xhc3MgVXRmOExpdGVyYWxUYWJsZQp7CnB1YmxpYzoKICAgIFR1cGxl
PFV0ZjhMaXRlcmFsVmFsdWUgKj4gc3ltYm9sX3Bvb2w7CgogICAgVXRmOExpdGVyYWxUYWJsZShM
aXRlcmFsVmFsdWUgKik7CiAgICB+VXRmOExpdGVyYWxUYWJsZSgpOwoKICAgIExpdGVyYWxWYWx1
ZSAqRmluZE9ySW5zZXJ0U3RyaW5nKExpdGVyYWxTeW1ib2wgKik7CgogICAgVXRmOExpdGVyYWxW
YWx1ZSAqRmluZE9ySW5zZXJ0KGNvbnN0IGNoYXIgKiwgaW50KTsKICAgIFV0ZjhMaXRlcmFsVmFs
dWUgKkZpbmRPckluc2VydCh3Y2hhcl90KTsKCiAgICB2b2lkIENoZWNrU3RyaW5nQ29uc3RhbnQo
QXN0RXhwcmVzc2lvbiAqZXhwcik7Cgpwcml2YXRlOgoKICAgIFR1cGxlPFV0ZjhMaXRlcmFsVmFs
dWUgKj4gKnV0ZjhfbGl0ZXJhbHM7CiAgICB2b2lkIEV2YWx1YXRlQ29uc3RhbnQoQXN0RXhwcmVz
c2lvbiAqLCBpbnQsIGludCk7CiAgICBib29sIElzQ29uc3RhbnQoQXN0RXhwcmVzc2lvbiAqLCBU
eXBlU3ltYm9sICopOwoKICAgIGVudW0KICAgIHsKICAgICAgICBERUZBVUxUX0hBU0hfU0laRSA9
IDQwOTMsCiAgICAgICAgTUFYX0hBU0hfU0laRSA9IDMyNzcxCiAgICB9OwoKICAgIFV0ZjhMaXRl
cmFsVmFsdWUgKipiYXNlOwogICAgaW50IGhhc2hfc2l6ZTsKCiAgICBzdGF0aWMgaW50IHByaW1l
c1tdOwogICAgaW50IHByaW1lX2luZGV4OwoKICAgIExpdGVyYWxWYWx1ZSAqYmFkX3ZhbHVlOwoK
ICAgIGlubGluZSBzdGF0aWMgdW5zaWduZWQgSGFzaChjb25zdCBjaGFyICpoZWFkLCBpbnQgbGVu
KSB7IHJldHVybiBIYXNoOjpGdW5jdGlvbihoZWFkLCBsZW4pOyB9CgogICAgdm9pZCBSZWhhc2go
KTsKfTsKCgoKCgoKIyAxOCAiLi4vLi4vamlrZXMvc3JjL3N0cmVhbS5oIiAyCgoKCiAKCgoKCgoK
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxp
bnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91
c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9s
aWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgog
CgoKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUu
My9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIvdXNyL2xpYi9nY2Mt
bGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoK
CgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUu
My9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDI0ICIv
dXNyL2luY2x1ZGUvaWNvbnYuaCIgMiAzCgoKCmV4dGVybiAiQyIgeyAKCiAKdHlwZWRlZiB2b2lk
ICppY29udl90OwoKCiAKCmV4dGVybiBpY29udl90IGljb252X29wZW4gKF9fY29uc3QgY2hhciAq
X190b2NvZGUsIF9fY29uc3QgY2hhciAqX19mcm9tY29kZSkKICAgICB0aHJvdyAoKSA7CgogCgoK
ZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBfX2NkLCBjaGFyICoqX19yZXN0cmljdCBfX2lu
YnVmLAoJCSAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9faW5ieXRlc2xlZnQsCgkJICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX291dGJ1ZiwKCQkgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX291dGJ5
dGVzbGVmdCk7CgogCmV4dGVybiBpbnQgaWNvbnZfY2xvc2UgKGljb252X3QgX19jZCkgdGhyb3cg
KCkgOwoKfSAKCgojIDMyICIuLi8uLi9qaWtlcy9zcmMvc3RyZWFtLmgiIDIKCgoKCgoKCmNsYXNz
IENvbnRyb2wgICAgOwpjbGFzcyBJbnB1dF9pbmZvIDsKY2xhc3MgU2Nhbm5lciAgICA7CmNsYXNz
IFN5bWJvbCAgICAgOwpjbGFzcyBGaWxlU3ltYm9sIDsKY2xhc3MgWmlwRmlsZSAgICA7CmNsYXNz
IExleFN0cmVhbSAgOwoKY2xhc3MgU3RyZWFtRXJyb3IgOiBwdWJsaWMgSmlrZXNFcnJvcgp7CiAg
ICBmcmllbmQgY2xhc3MgTGV4U3RyZWFtOwoKIHB1YmxpYzoKCiAgICBTdHJlYW1FcnJvcigpOwog
ICAgCiAgICB2aXJ0dWFsIGNvbnN0IHdjaGFyX3QgKmdldEVycm9yTWVzc2FnZSgpOwogICAgdmly
dHVhbCBjb25zdCB3Y2hhcl90ICpnZXRFcnJvclJlcG9ydCgpOwogICAgCiAgICB2aXJ0dWFsIEpp
a2VzRXJyb3JTZXZlcml0eSBnZXRTZXZlcml0eSgpOwogICAgdmlydHVhbCBjb25zdCBjaGFyICpn
ZXRGaWxlTmFtZSgpOwogICAgCiAgICB2aXJ0dWFsIGludCBnZXRMZWZ0TGluZU5vICAgICAgKCk7
CiAgICB2aXJ0dWFsIGludCBnZXRMZWZ0Q29sdW1uTm8gICAgKCk7CiAgICB2aXJ0dWFsIGludCBn
ZXRSaWdodExpbmVObyAgICAgKCk7CiAgICB2aXJ0dWFsIGludCBnZXRSaWdodENvbHVtbk5vICAg
KCk7CiAgICAKICAgIGVudW0gU3RyZWFtRXJyb3JLaW5kCiAgICB7CiAgICAgICAgQkFEX1RPS0VO
LAogICAgICAgIEJBRF9PQ1RBTF9DT05TVEFOVCwKICAgICAgICBFTVBUWV9DSEFSQUNURVJfQ09O
U1RBTlQsCiAgICAgICAgVU5URVJNSU5BVEVEX0NIQVJBQ1RFUl9DT05TVEFOVCwKICAgICAgICBV
TlRFUk1JTkFURURfQ09NTUVOVCwKICAgICAgICBVTlRFUk1JTkFURURfU1RSSU5HX0NPTlNUQU5U
LAogICAgICAgIElOVkFMSURfSEVYX0NPTlNUQU5ULAogICAgICAgIElOVkFMSURfRkxPQVRJTkdf
Q09OU1RBTlRfRVhQT05FTlQsCiAgICAgICAgSU5WQUxJRF9VTklDT0RFX0VTQ0FQRQogICAgfTsK
CiAgICB2b2lkIEluaXRpYWxpemUoU3RyZWFtRXJyb3JLaW5kIGtpbmRfLCB1bnNpZ25lZCBzdGFy
dF9sb2NhdGlvbl8sIHVuc2lnbmVkIGVuZF9sb2NhdGlvbl8sIExleFN0cmVhbSAqKTsKCiBwcm90
ZWN0ZWQ6CgogcHJpdmF0ZToKCiAgICB1bnNpZ25lZCAgICAgICAgc3RhcnRfbG9jYXRpb24gOwog
ICAgdW5zaWduZWQgICAgICAgIGVuZF9sb2NhdGlvbiAgIDsKICAgIFN0cmVhbUVycm9yS2luZCBr
aW5kICAgICAgICAgICA7CiAgICAKICAgIHN0YXRpYyAgYm9vbCAgICBlbWFjc19zdHlsZV9yZXBv
cnQ7CiAgICBMZXhTdHJlYW0gICAgICAqbGV4X3N0cmVhbTsKCiAgICBpbnQgbGVmdF9saW5lX25v
ICAgIDsKICAgIGludCBsZWZ0X2NvbHVtbl9ubyAgOwogICAgaW50IHJpZ2h0X2xpbmVfbm8gICA7
CiAgICBpbnQgcmlnaHRfY29sdW1uX25vIDsKCiAgICB3Y2hhcl90ICpyZWd1bGFyRXJyb3JTdHJp
bmcoKTsKICAgIHdjaGFyX3QgKmVtYWNzRXJyb3JTdHJpbmcoKTsKICAgIAogICAgdm9pZCBQcmlu
dExhcmdlU291cmNlKEVycm9yU3RyaW5nICZzKTsKICAgIHZvaWQgUHJpbnRTbWFsbFNvdXJjZShF
cnJvclN0cmluZyAmcyk7CgogICAgYm9vbCBpbml0aWFsaXplZDsKICAgIAp9OwoKCiAKIAoKY2xh
c3MgU3RyZWFtCnsKcHVibGljOgogIAogICAgU3RyZWFtKCk7CiAgICB+U3RyZWFtKCk7CgogICAg
dm9pZCBEZXN0cm95SW5wdXQoKSB7CiAgICAgICAgZGVsZXRlIFtdIGlucHV0X2J1ZmZlcjsKICAg
ICAgICBpbnB1dF9idWZmZXIgPSBfX251bGwgOwogICAgfQoKICAgIGlubGluZSB3Y2hhcl90KiBJ
bnB1dEJ1ZmZlcigpIHsgcmV0dXJuIGlucHV0X2J1ZmZlcjsgfQogICAgaW5saW5lIHNpemVfdCBJ
bnB1dEJ1ZmZlckxlbmd0aCgpIHsgcmV0dXJuIGlucHV0X2J1ZmZlcl9sZW5ndGg7IH0KCiAgICBp
bmxpbmUgd2NoYXJfdCogQWxsb2NhdGVJbnB1dEJ1ZmZlciggc2l6ZV90IHNpemUgKSB7CiAgICAg
ICAgcmV0dXJuIGlucHV0X2J1ZmZlciA9IG5ldyB3Y2hhcl90W3NpemUgKyA0XTsKICAgIH0KCgog
ICAgc3RhdGljIGJvb2wgSXNTdXBwb3J0ZWRFbmNvZGluZyhjaGFyKiBlbmNvZGluZyk7CiAgICBi
b29sIFNldEVuY29kaW5nKGNoYXIqIGVuY29kaW5nKTsKCgpwcm90ZWN0ZWQ6CgogICAgd2NoYXJf
dCAqaW5wdXRfYnVmZmVyOwogICAgc2l6ZV90IGlucHV0X2J1ZmZlcl9sZW5ndGg7CgogICAgY29u
c3QgY2hhciAqc291cmNlX3B0cjsgICAgIAogICAgY29uc3QgY2hhciAqc291cmNlX3RhaWw7ICAg
IAogICAgY29uc3QgY2hhciAqZGF0YV9idWZmZXI7ICAgIAoKICAgIGJvb2wgIGVycm9yX2RlY29k
ZV9uZXh0X2NoYXJhY3RlcjsKCiAKCgoKCgoKICAgICBpY29udl90IF9kZWNvZGVyOwoKCiAgICB2
b2lkIERlc3Ryb3lFbmNvZGluZygpOwoKICAgICAKICAgICAKICAgICAKCiAgICB3Y2hhcl90IERl
Y29kZU5leHRDaGFyYWN0ZXIoKTsKCiAgICBpbmxpbmUgYm9vbCBFcnJvckRlY29kZU5leHRDaGFy
YWN0ZXIoKSB7CiAgICAgICAgYm9vbCByZXN1bHQgPSBlcnJvcl9kZWNvZGVfbmV4dF9jaGFyYWN0
ZXI7CiAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgZXJyb3JfZGVjb2RlX25leHRfY2hh
cmFjdGVyID0gZmFsc2U7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICAgCgogICAg
aW5saW5lIGJvb2wgSGF2ZURlY29kZXIoKSB7CgoKCiAgICAgICAgcmV0dXJuIChfZGVjb2RlciAh
PSAoaWNvbnZfdCktMSk7CgogICAgfQoKCgogICAgaW5saW5lIHZvaWQgSW5pdGlhbGl6ZURhdGFC
dWZmZXIoY29uc3QgY2hhciAqIGJ1ZmZlciwgbG9uZyBzaXplKSB7CiAgICAgICAgZGF0YV9idWZm
ZXIgPSBidWZmZXI7CiAgICAgICAgc291cmNlX3B0ciA9IGRhdGFfYnVmZmVyOwogICAgICAgIHNv
dXJjZV90YWlsID0gZGF0YV9idWZmZXIgKyBzaXplIC0gMTsKICAgIH0KCiAgICBpbmxpbmUgYm9v
bCBIYXNNb3JlRGF0YSgpIHsKICAgICAgICByZXR1cm4gKHNvdXJjZV9wdHIgPD0gc291cmNlX3Rh
aWwpOwogICAgfQp9OwoKCiAKIAogCiAKY2xhc3MgTGV4U3RyZWFtIDogcHVibGljIFN0cmVhbQp7
CgogICAgZnJpZW5kIGNsYXNzIFN0cmVhbUVycm9yOwogICAgCiBwdWJsaWM6CiAgICAKICAgIHR5
cGVkZWYgaW50IFR5cGVJbmRleDsKICAgIHR5cGVkZWYgaW50IFRva2VuSW5kZXg7CiAgICB0eXBl
ZGVmIGludCBDb21tZW50SW5kZXg7CiAgICBlbnVtIHsgTEVYX0lORklOSVRZID0gMjE0NzQ4MzY0
NyAgIH07ICAKCiAgICBGaWxlU3ltYm9sICpmaWxlX3N5bWJvbDsKCiAgICBpbmxpbmUgVG9rZW5J
bmRleCBOZXh0KFRva2VuSW5kZXggaSkKICAgICAgICAgeyByZXR1cm4gKCsraSA8IHRva2VuX3N0
cmVhbS5MZW5ndGgoKSA/IGkgOiB0b2tlbl9zdHJlYW0uTGVuZ3RoKCkgLSAxKTsgfQoKICAgIGlu
bGluZSBUb2tlbkluZGV4IFByZXZpb3VzKFRva2VuSW5kZXggaSkgeyByZXR1cm4gKGkgPD0gMCA/
IDAgOiBpIC0gMSk7IH0KCiAgICBpbmxpbmUgVG9rZW5JbmRleCBQZWVrKCkgeyByZXR1cm4gTmV4
dChpbmRleCk7IH0KCiAgICBpbmxpbmUgdm9pZCBSZXNldChUb2tlbkluZGV4IGkgPSAxKSB7IGlu
ZGV4ID0gUHJldmlvdXMoaSk7IH0KCiAgICBpbmxpbmUgVG9rZW5JbmRleCBHZXR0b2tlbigpIHsg
cmV0dXJuIGluZGV4ID0gTmV4dChpbmRleCk7IH0KCiAgICBpbmxpbmUgVG9rZW5JbmRleCBHZXR0
b2tlbihUb2tlbkluZGV4IGVuZF90b2tlbikKICAgICAgICAgeyByZXR1cm4gaW5kZXggPSAoaW5k
ZXggPCBlbmRfdG9rZW4gPyBOZXh0KGluZGV4KSA6IHRva2VuX3N0cmVhbS5MZW5ndGgoKSAtIDEp
OyB9CgogICAgaW5saW5lIFRva2VuSW5kZXggQmFkdG9rZW4oKSB7IHJldHVybiAwOyB9CgogICAg
aW5saW5lIHVuc2lnbmVkIEtpbmQoVG9rZW5JbmRleCBpKSB7IHJldHVybiB0b2tlbnNbaV0uS2lu
ZCgpOyB9CgogICAgaW5saW5lIHVuc2lnbmVkIExvY2F0aW9uKFRva2VuSW5kZXggaSkgeyByZXR1
cm4gdG9rZW5zW2ldLkxvY2F0aW9uKCk7IH0KCiAgICBpbmxpbmUgdW5zaWduZWQgTGluZShUb2tl
bkluZGV4IGkpIHsgcmV0dXJuIEZpbmRMaW5lKHRva2Vuc1tpXS5Mb2NhdGlvbigpKTsgfQoKICAg
IGlubGluZSB1bnNpZ25lZCBDb2x1bW4oVG9rZW5JbmRleCBpKSB7IHJldHVybiBjb2x1bW5zID8g
Y29sdW1uc1tpXSA6IChpbnB1dF9idWZmZXIgPyBGaW5kQ29sdW1uKHRva2Vuc1tpXS5Mb2NhdGlv
bigpKSA6IDApOyB9CgogICAgaW5saW5lIGJvb2wgQWZ0ZXJFb2woVG9rZW5JbmRleCBpKSB7IHJl
dHVybiAoaSA8IDEgPyB0cnVlIDogTGluZShpIC0gMSkgPCBMaW5lKGkpKTsgfQoKICAgIGlubGlu
ZSBib29sIElzRGVwcmVjYXRlZChUb2tlbkluZGV4IGkpIHsgcmV0dXJuIHRva2Vuc1tpXS5EZXBy
ZWNhdGVkKCk7IH0KCiAgICBpbmxpbmUgVG9rZW5JbmRleCBNYXRjaGluZ0JyYWNlKFRva2VuSW5k
ZXggaSkgeyByZXR1cm4gdG9rZW5zW2ldLmFkZGl0aW9uYWxfaW5mby5yaWdodF9icmFjZTsgfQoK
ICAgIHdjaGFyX3QgKk5hbWVTdHJpbmcoVG9rZW5JbmRleCBpKQogICAgewogICAgICAgIHJldHVy
biAoTmFtZVN5bWJvbChpKSB8fCBMaXRlcmFsU3ltYm9sKGkpID8gdG9rZW5zW2ldLmFkZGl0aW9u
YWxfaW5mby5zeW1ib2wgLT4gTmFtZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiBLZXl3b3JkTmFtZSh0b2tlbnNbaV0uS2luZCgpKSk7CiAgICB9
CgogICAgaW50IE5hbWVTdHJpbmdMZW5ndGgoVG9rZW5JbmRleCBpKQogICAgewogICAgICAgIHJl
dHVybiAoTmFtZVN5bWJvbChpKSB8fCBMaXRlcmFsU3ltYm9sKGkpID8gdG9rZW5zW2ldLmFkZGl0
aW9uYWxfaW5mby5zeW1ib2wgLT4gTmFtZUxlbmd0aCgpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB3Y3NsZW4oS2V5d29yZE5hbWUodG9rZW5zW2ld
LktpbmQoKSkpKTsKICAgIH0KCiAgICBjbGFzcyBMaXRlcmFsU3ltYm9sICpMaXRlcmFsU3ltYm9s
KFRva2VuSW5kZXgpOwoKICAgIGNsYXNzIE5hbWVTeW1ib2wgKk5hbWVTeW1ib2woVG9rZW5JbmRl
eCk7CgogICAgY2hhciAqRmlsZU5hbWUoKTsKICAgIHNpemVfdCBGaWxlTmFtZUxlbmd0aCgpOwoK
ICAgIGlubGluZSBpbnQgTGluZUxlbmd0aCh1bnNpZ25lZCBsaW5lX25vKSB7IHJldHVybiBsb2Nh
dGlvbnNbbGluZV9ubyArIDFdIC0gbG9jYXRpb25zW2xpbmVfbm9dOyB9CiAgICBpbmxpbmUgaW50
IExpbmVTdGFydCh1bnNpZ25lZCBsaW5lX25vKSAgeyByZXR1cm4gbG9jYXRpb25zW2xpbmVfbm9d
OyB9CiAgICBpbmxpbmUgaW50IExpbmVFbmQodW5zaWduZWQgbGluZV9ubykgICAgeyByZXR1cm4g
bG9jYXRpb25zW2xpbmVfbm8gKyAxXSAtIDE7IH0KCiAgICBpbmxpbmUgaW50IExpbmVTZWdtZW50
TGVuZ3RoKFRva2VuSW5kZXggaSkKICAgICAgICB7IHJldHVybiBUYWI6Oldjc2xlbihpbnB1dF9i
dWZmZXIsIHRva2Vuc1tpXS5Mb2NhdGlvbigpLCBMaW5lRW5kKExpbmUoaSkpKTsgfQoKICAgICAK
ICAgICAKICAgICAKICAgICAKICAgIGlubGluZSBpbnQgV2NoYXJPZmZzZXQoVG9rZW5JbmRleCBz
dGFydCwgVG9rZW5JbmRleCBlbmQpCiAgICB7CiAgICAgICAgaW50IG9mZnNldCA9IDA7CiAgICAg
ICAgZm9yIChUb2tlbkluZGV4IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykKICAgICAgICB7CiAg
ICAgICAgICAgIGZvciAod2NoYXJfdCAqc3RyID0gTmFtZVN0cmluZyhpKTsgKnN0cjsgc3RyKysp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAoKnN0ciA+IDB4ZmYpCiAgICAgICAg
ICAgICAgICAgICAgb2Zmc2V0ICs9IDU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg
IHJldHVybiBvZmZzZXQ7CiAgICB9CgogICAgIAogICAgIAogICAgIAogICAgaW5saW5lIGludCBX
Y2hhck9mZnNldChUb2tlbkluZGV4IGVuZCkKICAgIHsKICAgICAgICBUb2tlbkluZGV4IHN0YXJ0
OwogICAgICAgIHVuc2lnbmVkIHRoZV9saW5lID0gTGluZShlbmQpOwogICAgICAgIGZvciAoc3Rh
cnQgPSBlbmQ7IExpbmUoc3RhcnQpID09IHRoZV9saW5lOyBzdGFydC0tKQogICAgICAgICAgICA7
CiAgICAgICAgc3RhcnQrKzsKCiAgICAgICAgcmV0dXJuIFdjaGFyT2Zmc2V0KHN0YXJ0LCBlbmQp
OwogICAgfQoKICAgIENvbW1lbnRJbmRleCBGaXJzdENvbW1lbnQoVG9rZW5JbmRleCk7CgogICAg
aW5saW5lIGludCBOdW1UeXBlcygpIHsgcmV0dXJuIHR5cGVfaW5kZXguTGVuZ3RoKCk7IH0KICAg
IGlubGluZSBUb2tlbkluZGV4IFR5cGUoaW50IGkpIHsgcmV0dXJuIHR5cGVzW2ldOyB9CgogICAg
aW5saW5lIGludCBOdW1Ub2tlbnMoKSB7IHJldHVybiB0b2tlbl9zdHJlYW0uTGVuZ3RoKCk7IH0K
CiAgICBpbmxpbmUgaW50IE51bUNvbW1lbnRzKCkgeyByZXR1cm4gY29tbWVudF9zdHJlYW0uTGVu
Z3RoKCk7IH0KCiAgICBpbmxpbmUgVG9rZW5JbmRleCBQcmVjZWRpbmdUb2tlbihDb21tZW50SW5k
ZXggaSkgeyByZXR1cm4gY29tbWVudHNbaV0ucHJldmlvdXNfdG9rZW47IH0KCiAgICBpbmxpbmUg
dW5zaWduZWQgQ29tbWVudExvY2F0aW9uKENvbW1lbnRJbmRleCBpKSAgeyByZXR1cm4gY29tbWVu
dHNbaV0ubG9jYXRpb247IH0KCiAgICBpbmxpbmUgd2NoYXJfdCAqQ29tbWVudFN0cmluZyhDb21t
ZW50SW5kZXggaSkgICAgeyByZXR1cm4gY29tbWVudHNbaV0uc3RyaW5nOyB9CgogICAgaW5saW5l
IGludCBDb21tZW50U3RyaW5nTGVuZ3RoKENvbW1lbnRJbmRleCBpKSAgIHsgcmV0dXJuIGNvbW1l
bnRzW2ldLmxlbmd0aDsgfQoKICAgIGlubGluZSBpbnQgTnVtQmFkVG9rZW5zKCkgeyByZXR1cm4g
YmFkX3Rva2Vucy5MZW5ndGgoKTsgfQoKCgoKCiAgICAgCiAgICAgCiAgICAgCiAgICBMZXhTdHJl
YW0oQ29udHJvbCAmY29udHJvbF8sIEZpbGVTeW1ib2wgKmZpbGVfc3ltYm9sXyk7CgogICAgYm9v
bCBDb21wdXRlQ29sdW1ucygpCiAgICB7CiAgICAgICAgUmVyZWFkSW5wdXQoKTsKICAgICAgICBp
ZiAoaW5wdXRfYnVmZmVyKQogICAgICAgICAgICBJbml0aWFsaXplQ29sdW1ucygpOwoKICAgICAg
ICBEZXN0cm95SW5wdXQoKTsKCiAgICAgICAgcmV0dXJuIChjb2x1bW5zICE9IF9fbnVsbCApOwog
ICAgfQoKICAgIHZvaWQgUmVyZWFkSW5wdXQoKTsKICAgIH5MZXhTdHJlYW0oKTsKCgogICAgdm9p
ZCBEZXN0cm95SW5wdXQoKQogICAgewogICAgICAgIFN0cmVhbTo6RGVzdHJveUlucHV0KCk7Cgog
ICAgICAgIGRlbGV0ZSBbXSBjb21tZW50X2J1ZmZlcjsKICAgICAgICBjb21tZW50X2J1ZmZlciA9
IF9fbnVsbCA7CiAgICB9CgogICAgdm9pZCBTb3J0TWVzc2FnZXMoKTsKICAgIHZvaWQgUHJpbnRN
ZXNzYWdlcygpOwoKICAgIHZvaWQgU2V0VXBDb21tZW50cygpCiAgICB7CiAgICAgICAgaWYgKGNv
bW1lbnRfYnVmZmVyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgUmVyZWFkSW5wdXQoKTsK
ICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAg
IGludCBsZW5ndGggPSAwLAogICAgICAgICAgICBpOwoKICAgICAgICBmb3IgKGkgPSAxOyBpIDwg
Y29tbWVudF9zdHJlYW0uTGVuZ3RoKCk7IGkrKykKICAgICAgICAgICAgbGVuZ3RoICs9IChjb21t
ZW50c1tpXS5sZW5ndGggKyAxKTsKICAgICAgICBjb21tZW50X2J1ZmZlciA9IG5ldyB3Y2hhcl90
W2xlbmd0aF07CiAgICAgICAgd2NoYXJfdCAqcHRyID0gY29tbWVudF9idWZmZXI7CiAgICAgICAg
Zm9yIChpID0gMTsgaSA8IGNvbW1lbnRfc3RyZWFtLkxlbmd0aCgpOyBpKyspCiAgICAgICAgewog
ICAgICAgICAgICBtZW1tb3ZlKHB0ciwgJihpbnB1dF9idWZmZXJbY29tbWVudHNbaV0ubG9jYXRp
b25dKSwgY29tbWVudHNbaV0ubGVuZ3RoICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgICAg
Y29tbWVudHNbaV0uc3RyaW5nID0gcHRyOwogICAgICAgICAgICBwdHIgKz0gY29tbWVudHNbaV0u
bGVuZ3RoOwogICAgICAgICAgICAqcHRyKysgPSBVX05VTEw7CiAgICAgICAgfQoKICAgICAgICBy
ZXR1cm47CiAgICB9CgoKCgoKICAgICAKICAgICAKICAgICAKICAgIHNpemVfdCBUb2tlblNwYWNl
QWxsb2NhdGVkKHZvaWQpCiAgICB7CiAgICAgICAgcmV0dXJuIHRva2VuX3N0cmVhbS5MZW5ndGgo
KSAqIHNpemVvZihUb2tlbik7CiAgICB9CgogICAgIAogICAgIAogICAgIAogICAgc2l6ZV90IENv
bW1lbnRTcGFjZUFsbG9jYXRlZCh2b2lkKQogICAgewogICAgICAgIHJldHVybiBjb21tZW50X3N0
cmVhbS5MZW5ndGgoKSAqIHNpemVvZihDb21tZW50KTsKICAgIH0KCnByaXZhdGU6CgogICAgaW50
IGhleHZhbHVlKHdjaGFyX3QgY2gpOwogICAgCgogICAgZW51bSBVbmljb2RlTGV4ZXJTdGF0ZQog
ICAgewogICAgICAgIFNUQVJULAogICAgICAgIFJBVywKICAgICAgICBDUiwKICAgICAgICBRVU9U
RSwKICAgICAgICBVTklDT0RFX0VTQ0FQRSwKICAgICAgICBVTklDT0RFX0VTQ0FQRV9ESUdJVF8w
LAogICAgICAgIFVOSUNPREVfRVNDQVBFX0RJR0lUXzEsCiAgICAgICAgVU5JQ09ERV9FU0NBUEVf
RElHSVRfMgogICAgfTsKCiAgICAKICAgIGZyaWVuZCBjbGFzcyBTY2FubmVyOwoKICAgIGNsYXNz
IFRva2VuCiAgICB7CiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAg
ICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgaW5s
aW5lIHZvaWQgU2V0TG9jYXRpb24odW5zaWduZWQgbG9jYXRpb24pIHsgKHN0YXRpY19jYXN0PHZv
aWQ+ICAoKCBsb2NhdGlvbiA8PSAweDAwRkZGRkZGICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJs
b2NhdGlvbiA8PSAweDAwRkZGRkZGIiAsICIuLi8uLi9qaWtlcy9zcmMvc3RyZWFtLmgiLCA0MzUs
IF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7IGluZm8gPSAoaW5mbyAmIDB4MDAwMDAwN0Yp
IHwgKGxvY2F0aW9uIDw8IDgpOyB9CgogICAgcHVibGljOgogICAgICAgIHVuc2lnbmVkIGluZm87
CiAgICAgICAgdW5pb24KICAgICAgICB7CiAgICAgICAgICAgIFN5bWJvbCAgICpzeW1ib2w7CiAg
ICAgICAgICAgIFRva2VuSW5kZXggcmlnaHRfYnJhY2U7CiAgICAgICAgfSBhZGRpdGlvbmFsX2lu
Zm87CgogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgIGlubGluZSB2b2lkIFJl
c2V0SW5mb0FuZFNldExvY2F0aW9uKHVuc2lnbmVkIGxvY2F0aW9uKQogICAgICAgIHsKICAgICAg
ICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBsb2NhdGlvbiA8PSAweDAwRkZGRkZGICkgPyAw
IDoJKF9fYXNzZXJ0X2ZhaWwgKCJsb2NhdGlvbiA8PSAweDAwRkZGRkZGIiAsICIuLi8uLi9qaWtl
cy9zcmMvc3RyZWFtLmgiLCA0NTAsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgICAg
ICAgICAgIGluZm8gPSAobG9jYXRpb24gPDwgOCk7CiAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5m
by5zeW1ib2wgPSBfX251bGwgOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIHVuc2lnbmVkIExv
Y2F0aW9uKCkgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gKGluZm8gPj4gOCk7IH0KICAgICAg
ICBpbmxpbmUgdm9pZCBTZXRLaW5kKHVuc2lnbmVkIGtpbmQpICAgICAgICAgICB7IChzdGF0aWNf
Y2FzdDx2b2lkPiAgKCgga2luZCA8PSAweDAwMDAwMDdGICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwg
KCJraW5kIDw9IDB4MDAwMDAwN0YiICwgIi4uLy4uL2ppa2VzL3NyYy9zdHJlYW0uaCIsIDQ1Niwg
X19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsgaW5mbyA9IChpbmZvICYgMHhGRkZGRkY4MCkg
fCBraW5kOyB9CiAgICAgICAgaW5saW5lIHVuc2lnbmVkIEtpbmQoKSAgICAgICAgICAgICAgICAg
ICAgICAgeyByZXR1cm4gKGluZm8gJiAweDAwMDAwMDdGKTsgfQogICAgICAgIGlubGluZSB2b2lk
IFNldERlcHJlY2F0ZWQoKSAgICAgICAgICAgICAgICAgIHsgaW5mbyB8PSAweDAwMDAwMDgwOyB9
CiAgICAgICAgaW5saW5lIGJvb2wgRGVwcmVjYXRlZCgpICAgICAgICAgICAgICAgICAgICAgeyBy
ZXR1cm4gKChpbmZvICYgMHgwMDAwMDA4MCkgIT0gMCk7IH0KCiAgICAgICAgaW5saW5lIHZvaWQg
U2V0U3ltYm9sKFN5bWJvbCAqc3ltYm9sKSAgICAgICAgeyBhZGRpdGlvbmFsX2luZm8uc3ltYm9s
ID0gc3ltYm9sOyB9CiAgICAgICAgaW5saW5lIHZvaWQgU2V0UmlnaHRCcmFjZShUb2tlbkluZGV4
IHJicmFjZSkgeyBhZGRpdGlvbmFsX2luZm8ucmlnaHRfYnJhY2UgPSByYnJhY2U7IH0KICAgIH07
CgogICAgVG9rZW5JbmRleCBHZXROZXh0VG9rZW4odW5zaWduZWQgbG9jYXRpb24gPSAwKQogICAg
ewogICAgICAgIFRva2VuSW5kZXggaW5kZXggPSB0b2tlbl9zdHJlYW0uTmV4dEluZGV4KCk7CiAg
ICAgICAgdG9rZW5fc3RyZWFtW2luZGV4XS5SZXNldEluZm9BbmRTZXRMb2NhdGlvbihsb2NhdGlv
bik7CgogICAgICAgIHJldHVybiBpbmRleDsKICAgIH0KCiAgICBjbGFzcyBDb21tZW50CiAgICB7
CiAgICBwdWJsaWM6CiAgICAgICAgVG9rZW5JbmRleCBwcmV2aW91c190b2tlbjsKICAgICAgICB1
bnNpZ25lZCAgIGxvY2F0aW9uOwogICAgICAgIHVuc2lnbmVkICAgbGVuZ3RoOwogICAgICAgIHdj
aGFyX3QgICAqc3RyaW5nOwogICAgfTsKCiAgICBUdXBsZTxTdHJlYW1FcnJvcj4gYmFkX3Rva2Vu
czsKCiAgICBUb2tlbkluZGV4IGluZGV4OwogICAgVG9rZW4gKnRva2VuczsKICAgIHVuc2lnbmVk
IHNob3J0ICpjb2x1bW5zOwogICAgQ29udmVydGlibGVBcnJheTxUb2tlbj4gdG9rZW5fc3RyZWFt
OwogICAgQ29tbWVudCAqY29tbWVudHM7CiAgICBDb252ZXJ0aWJsZUFycmF5PENvbW1lbnQ+IGNv
bW1lbnRfc3RyZWFtOwogICAgdW5zaWduZWQgKmxvY2F0aW9uczsKICAgIENvbnZlcnRpYmxlQXJy
YXk8dW5zaWduZWQ+IGxpbmVfbG9jYXRpb247CiAgICBUb2tlbkluZGV4ICp0eXBlczsKICAgIENv
bnZlcnRpYmxlQXJyYXk8VG9rZW5JbmRleD4gdHlwZV9pbmRleDsKCiAgICB2b2lkIEluaXRpYWxp
emVDb2x1bW5zKCk7CiAgICB2b2lkIENvbXByZXNzU3BhY2UoKTsKCiAgICBib29sIGluaXRpYWxf
cmVhZGluZ19vZl9pbnB1dDsKCiAgICB3Y2hhcl90ICpjb21tZW50X2J1ZmZlcjsKCiAgICBDb250
cm9sICZjb250cm9sOwoKICAgIHZvaWQgUmVhZElucHV0KCk7CiAgICB2b2lkIFByb2Nlc3NJbnB1
dChjb25zdCBjaGFyICosIGxvbmcpOwoKICAgIHZvaWQgUHJvY2Vzc0lucHV0VW5pY29kZShjb25z
dCBjaGFyICosIGxvbmcpOwoKCgoKICAgIHdjaGFyX3QgKktleXdvcmROYW1lKGludCk7CgogICAg
dW5zaWduZWQgRmluZExpbmUodW5zaWduZWQgbG9jYXRpb24pOwoKICAgIHVuc2lnbmVkIEZpbmRD
b2x1bW4odW5zaWduZWQgbG9jYXRpb24pCiAgICB7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+
ICAoKCBsb2NhdGlvbnMgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImxvY2F0aW9ucyIgLCAiLi4v
Li4vamlrZXMvc3JjL3N0cmVhbS5oIiwgNTE4LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkg
OwoKICAgICAgICByZXR1cm4gVGFiOjpXY3NsZW4oaW5wdXRfYnVmZmVyLCBsb2NhdGlvbnNbRmlu
ZExpbmUobG9jYXRpb24pXSwgbG9jYXRpb24pOwogICAgfQp9OwoKCgoKCgoKIyAxNCAiLi4vLi4v
amlrZXMvc3JjL2xwZ2lucHV0LmgiIDIKCgoKCgoKdHlwZWRlZiBMZXhTdHJlYW06OlRva2VuSW5k
ZXggVG9rZW5PYmplY3Q7CnR5cGVkZWYgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExvY2F0aW9uOwoK
aW5saW5lIExvY2F0aW9uIExvYyhUb2tlbk9iamVjdCBpKSB7IHJldHVybiBpOyB9CgoKCgoKCgoj
IDEgIi4uLy4uL2ppa2VzL3NyYy9qYXZhcHJzLmgiIDEKIAogCiAKIAogCiAKIAogCiAKIAoKCgoK
CgoKCgoKCgoKY2xhc3MgTGV4U3RyZWFtOwoKY2xhc3MgamF2YXByc190YWJsZQp7CnB1YmxpYzoK
ICAgIHN0YXRpYyBpbnQgb3JpZ2luYWxfc3RhdGUoaW50IHN0YXRlKSB7IHJldHVybiAtYmFzZV9j
aGVja1tzdGF0ZV07IH0KICAgIHN0YXRpYyBpbnQgYXNpKGludCBzdGF0ZSkgeyByZXR1cm4gYXNi
W29yaWdpbmFsX3N0YXRlKHN0YXRlKV07IH0KICAgIHN0YXRpYyBpbnQgbmFzaShpbnQgc3RhdGUp
IHsgcmV0dXJuIG5hc2Jbb3JpZ2luYWxfc3RhdGUoc3RhdGUpXTsgfQogICAgc3RhdGljIGludCBp
bl9zeW1ib2woaW50IHN0YXRlKSB7IHJldHVybiBpbl9zeW1iW29yaWdpbmFsX3N0YXRlKHN0YXRl
KV07IH0KCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAgcmhzW107CiAgICBzdGF0aWMg
Y29uc3QgICBzaWduZWQgc2hvcnQgY2hlY2tfdGFibGVbXTsKICAgIHN0YXRpYyBjb25zdCAgIHNp
Z25lZCBzaG9ydCAqYmFzZV9jaGVjazsKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBs
aHNbXTsKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCAqYmFzZV9hY3Rpb247CiAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAgdGVybV9jaGVja1tdOwogICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHNob3J0IHRlcm1fYWN0aW9uW107CgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHNob3J0IGFzYltdOwogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgIGFzcltdOwogICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5hc2JbXTsKICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBzaG9ydCBuYXNyW107CiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbmFtZV9z
dGFydFtdOwogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgIG5hbWVfbGVuZ3RoW107CiAg
ICBzdGF0aWMgY29uc3QgICAgICAgICAgY2hhciAgc3RyaW5nX2J1ZmZlcltdOwogICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIHNob3J0IHRlcm1pbmFsX2luZGV4W107CiAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgc2hvcnQgbm9uX3Rlcm1pbmFsX2luZGV4W107CiAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgc2hvcnQgc2NvcGVfcHJlZml4W107CiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hv
cnQgc2NvcGVfc3VmZml4W107CiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2NvcGVf
bGhzW107CiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAgc2NvcGVfbGFbXTsKICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICBzY29wZV9zdGF0ZV9zZXRbXTsKICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBzaG9ydCBzY29wZV9yaHNbXTsKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBzY29wZV9zdGF0ZVtdOwogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGlu
X3N5bWJbXTsKCiAgICBzdGF0aWMgaW50IG50X2FjdGlvbihpbnQgc3RhdGUsIGludCBzeW0pCiAg
ICB7CiAgICAgICAgcmV0dXJuIGJhc2VfYWN0aW9uW3N0YXRlICsgc3ltXTsKICAgIH0KCiAgICBz
dGF0aWMgaW50IHRfYWN0aW9uKGludCBhY3QsIGludCBzeW0sIExleFN0cmVhbSAqc3RyZWFtKQog
ICAgewogICAgICAgIGFjdCA9IGJhc2VfYWN0aW9uW2FjdF07CiAgICAgICAgaW50IGkgPSBhY3Qg
KyBzeW07CgogICAgICAgIGFjdCA9IHRlcm1fYWN0aW9uW3Rlcm1fY2hlY2tbaV0gPT0gc3ltID8g
aSA6IGFjdF07CgogICAgICAgIGlmIChhY3QgPiBMQV9TVEFURV9PRkZTRVQpCiAgICAgICAgewog
ICAgICAgICAgICBmb3IgKFRva2VuT2JqZWN0IHRvayA9IHN0cmVhbSAtPiBQZWVrKCk7CiAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgIHRvayA9IHN0cmVhbSAtPiBOZXh0KHRvaykp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgYWN0IC09IExBX1NUQVRFX09GRlNFVDsKICAg
ICAgICAgICAgICAgc3ltID0gc3RyZWFtIC0+IEtpbmQodG9rKTsKICAgICAgICAgICAgICAgaSA9
IGFjdCArIHN5bTsKICAgICAgICAgICAgICAgYWN0ID0gdGVybV9hY3Rpb25bdGVybV9jaGVja1tp
XSA9PSBzeW0gPyBpIDogYWN0XTsKICAgICAgICAgICAgICAgaWYgKGFjdCA8PSBMQV9TVEFURV9P
RkZTRVQpCiAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfSAKICAgICAgICB9
CgogICAgICAgIHJldHVybiBhY3Q7CiAgICB9Cn07CgoKCgoKCiMgMzEgIi4uLy4uL2ppa2VzL3Ny
Yy9scGdpbnB1dC5oIiAyCgoKCiMgMTQgIi4uLy4uL2ppa2VzL3NyYy9wYXJzZXIuaCIgMgoKCiAK
CgoKCgoKCgoKCgoKCgoKCmNsYXNzIFN0b3JhZ2VQb29sOwpjbGFzcyBBc3RQYWNrYWdlRGVjbGFy
YXRpb247CmNsYXNzIEFzdENvbXBpbGF0aW9uVW5pdDsKY2xhc3MgQXN0Q2xhc3NCb2R5OwpjbGFz
cyBBc3RJbnRlcmZhY2VEZWNsYXJhdGlvbjsKY2xhc3MgQXN0OwpjbGFzcyBBc3RMaXN0Tm9kZTsK
CmVudW0gUGFyc2VFcnJvckNvZGUKewogICAgRVJST1JfQ09ERSwKICAgIEJFRk9SRV9DT0RFLAog
ICAgSU5TRVJUSU9OX0NPREUsCiAgICBJTlZBTElEX0NPREUsCiAgICBTVUJTVElUVVRJT05fQ09E
RSwKICAgIERFTEVUSU9OX0NPREUsCiAgICBNRVJHRV9DT0RFLAogICAgTUlTUExBQ0VEX0NPREUs
CiAgICBTQ09QRV9DT0RFLAogICAgTUFOVUFMX0NPREUsCiAgICBTRUNPTkRBUllfQ09ERSwKICAg
IEVPRl9DT0RFCn07CgpzdHJ1Y3QgUHJpbWFyeVJlcGFpckluZm8KewogICAgUGFyc2VFcnJvckNv
ZGUgY29kZTsKICAgIAogICAgaW50IGRpc3RhbmNlLAogICAgICAgIGJ1ZmZlcl9wb3NpdGlvbiwK
ICAgICAgICBtaXNzcGVsbF9pbmRleCwKICAgICAgICBzeW1ib2w7Cn07CgpzdHJ1Y3QgU2Vjb25k
YXJ5UmVwYWlySW5mbwp7CiAgICBQYXJzZUVycm9yQ29kZSBjb2RlOwogICAgaW50IGRpc3RhbmNl
LAogICAgICAgIGJ1ZmZlcl9wb3NpdGlvbiwKICAgICAgICBzdGFja19wb3NpdGlvbiwKICAgICAg
ICBudW1fZGVsZXRpb25zLAogICAgICAgIHN5bWJvbDsKCiAgICBib29sIHJlY292ZXJ5X29uX25l
eHRfc3RhY2s7Cn07CgpjbGFzcyBQYXJzZXIgOiBwdWJsaWMgamF2YXByc190YWJsZQp7CnB1Ymxp
YzoKCiAgICBQYXJzZXIoKSA6IGFzdF9wb29sKF9fbnVsbCApLAogICAgICAgICAgICAgICBwYXJz
ZV9oZWFkZXJfb25seShmYWxzZSksCiAgICAgICAgICAgICAgIHBhcnNlX3BhY2thZ2VfaGVhZGVy
X29ubHkoZmFsc2UpLAogICAgICAgICAgICAgICBsb2NhdGlvbl9zdGFjayhfX251bGwgKSwKICAg
ICAgICAgICAgICAgcGFyc2Vfc3RhY2soX19udWxsICksCiAgICAgICAgICAgICAgIHN0YWNrX2xl
bmd0aCgwKSwKICAgICAgICAgICAgICAgc3RhY2soX19udWxsICksCiAgICAgICAgICAgICAgIHRl
bXBfc3RhY2soX19udWxsICkKICAgIHsKICAgICAgICBJbml0UnVsZUFjdGlvbigpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICB+UGFyc2VyKCkKICAgIHsKICAgICAgICBkZWxldGUgW10gc3Rh
Y2s7CiAgICAgICAgZGVsZXRlIFtdIGxvY2F0aW9uX3N0YWNrOwogICAgICAgIGRlbGV0ZSBbXSBw
YXJzZV9zdGFjazsKICAgICAgICBkZWxldGUgW10gdGVtcF9zdGFjazsKICAgIH0KCiAgICBBc3RQ
YWNrYWdlRGVjbGFyYXRpb24gKlBhY2thZ2VIZWFkZXJQYXJzZShMZXhTdHJlYW0gKiwgU3RvcmFn
ZVBvb2wgKik7CiAgICBBc3RDb21waWxhdGlvblVuaXQgKkhlYWRlclBhcnNlKExleFN0cmVhbSAq
LCBTdG9yYWdlUG9vbCAqID0gX19udWxsICk7CiAgICBib29sIEluaXRpYWxpemVyUGFyc2UoTGV4
U3RyZWFtICosIEFzdENsYXNzQm9keSAqKTsKICAgIGJvb2wgSW5pdGlhbGl6ZXJQYXJzZShMZXhT
dHJlYW0gKiwgQXN0SW50ZXJmYWNlRGVjbGFyYXRpb24gKik7CiAgICBib29sIEJvZHlQYXJzZShM
ZXhTdHJlYW0gKiwgQXN0Q2xhc3NCb2R5ICopOwogICAgYm9vbCBCb2R5UGFyc2UoTGV4U3RyZWFt
ICosIEFzdEludGVyZmFjZURlY2xhcmF0aW9uICopOwoKcHJvdGVjdGVkOgoKICAgIFRva2VuT2Jq
ZWN0IGJ1ZmZlcltCVUZGX1NJWkVdOwogICAgVG9rZW5PYmplY3QgZW5kX3Rva2VuOwoKICAgIEFz
dCAqSGVhZGVyUGFyc2UoKTsKICAgIGJvb2wgSW5pdGlhbGl6ZXIoQXN0Q2xhc3NCb2R5ICopOwog
ICAgYm9vbCBJbml0aWFsaXplcihBc3RJbnRlcmZhY2VEZWNsYXJhdGlvbiAqKTsKICAgIGJvb2wg
Qm9keShBc3RDbGFzc0JvZHkgKik7CiAgICBib29sIEJvZHkoQXN0SW50ZXJmYWNlRGVjbGFyYXRp
b24gKik7CiAgICBBc3QgKlBhcnNlU2VnbWVudChUb2tlbk9iamVjdCk7CgoKIyAxICIuLi8uLi9q
aWtlcy9zcmMvamF2YWFjdC5oIiAxCiAKIAogCiAKIAogCiAKIAogCiAKCiMgMjEgIi4uLy4uL2pp
a2VzL3NyYy9qYXZhYWN0LmgiCgogICAgdm9pZCBCYWRBY3Rpb24odm9pZCk7CiAgICB2b2lkIE5v
QWN0aW9uKHZvaWQpOwogICAgdm9pZCBOdWxsQWN0aW9uKHZvaWQpOwogICAgdm9pZCBNYWtlQXJy
YXlUeXBlKHZvaWQpOwogICAgdm9pZCBNYWtlU2ltcGxlTmFtZSh2b2lkKTsKICAgIHZvaWQgTWFr
ZUZpZWxkQWNjZXNzKHZvaWQpOwogICAgdm9pZCBNYWtlUXVhbGlmaWVkU3VwZXIodm9pZCk7CiAg
ICB2b2lkIE1ha2VRdWFsaWZpZWROZXcodm9pZCk7CiAgICB2b2lkIFNldFN5bTFUb1N5bTIodm9p
ZCk7CiAgICB2b2lkIE1ha2VFbXB0eVN0YXRlbWVudCh2b2lkKTsKICAgIHZvaWQgTWFrZUxhYmVs
ZWRTdGF0ZW1lbnQodm9pZCk7CiAgICB2b2lkIE1ha2VFeHByZXNzaW9uU3RhdGVtZW50KHZvaWQp
OwogICAgdm9pZCBNYWtlSWZUaGVuRWxzZVN0YXRlbWVudCh2b2lkKTsKICAgIHZvaWQgTWFrZVdo
aWxlU3RhdGVtZW50KHZvaWQpOwogICAgdm9pZCBNYWtlRm9yU3RhdGVtZW50KHZvaWQpOwogICAg
dm9pZCBNYWtlQXJyYXlDcmVhdGlvbkV4cHJlc3Npb24odm9pZCk7CiAgICB2b2lkIE1ha2VTdXBl
ckZpZWxkQWNjZXNzKHZvaWQpOwogICAgdm9pZCBNYWtlU3VwZXJEb3VibGVGaWVsZEFjY2Vzcyh2
b2lkKTsKICAgIHZvaWQgTWFrZUFycmF5QWNjZXNzKHZvaWQpOwogICAgdm9pZCBNYWtlQ2FzdEV4
cHJlc3Npb24odm9pZCk7CgoKCgoKCgoKCiAgICB2b2lkIEFjdDIodm9pZCk7CgoKCgoKICAgIHZv
aWQgQWN0Myh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3Q0KHZvaWQpOwoKCgoKCiAgICB2b2lkIEFj
dDUodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0Nih2b2lkKTsKCgoKCgoKCgoKICAgIHZvaWQgQWN0
OCh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3Q5KHZvaWQpOwoKCgoKCiAgICB2b2lkIEFjdDEwKHZv
aWQpOwoKCgoKCiAgICB2b2lkIEFjdDExKHZvaWQpOwoKCgoKCiAgICB2b2lkIEFjdDEyKHZvaWQp
OwoKCgoKCgoKCgoKCgoKCgoKCiAgICB2b2lkIEFjdDE2KHZvaWQpOwoKCgoKCgoKCgoKCgoKICAg
IHZvaWQgQWN0MTkodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MjAodm9pZCk7CgoKCgoKICAgIHZv
aWQgQWN0MjEodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MjIodm9pZCk7CgoKCgoKICAgIHZvaWQg
QWN0MjModm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MjQodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0
MjUodm9pZCk7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgogICAgdm9pZCBBY3QzNyh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QzOCh2b2lkKTsKCgoKCgog
ICAgdm9pZCBBY3QzOSh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3Q0MCh2b2lkKTsKCgoKCgogICAg
dm9pZCBBY3Q0MSh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3Q0Mih2b2lkKTsKCgoKCgoKCgoKCgoK
CiAgICB2b2lkIEFjdDQ1KHZvaWQpOwoKCgoKCiAgICB2b2lkIEFjdDQ2KHZvaWQpOwoKCgoKCgoK
CgoKCgoKICAgIHZvaWQgQWN0NDkodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0NTAodm9pZCk7CgoK
CgoKICAgIHZvaWQgQWN0NTEodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0NTIodm9pZCk7CgoKCgoK
ICAgIHZvaWQgQWN0NTModm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0NTQodm9pZCk7CgoKCgoKICAg
IHZvaWQgQWN0NTUodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0NTYodm9pZCk7CgoKCgoKICAgIHZv
aWQgQWN0NTcodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0NTgodm9pZCk7CgoKCgoKICAgIHZvaWQg
QWN0NTkodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0NjAodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0
NjEodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0NjIodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0NjMo
dm9pZCk7CgoKCgoKCgoKCgoKCgogICAgdm9pZCBBY3Q2Nih2b2lkKTsKCgoKCgogICAgdm9pZCBB
Y3Q2Nyh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3Q2OCh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3Q2
OSh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3Q3MCh2b2lkKTsKCgoKCgoKCgoKCgoKCgoKCgogICAg
dm9pZCBBY3Q3NCh2b2lkKTsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKICAgIHZvaWQgQWN0Nzkodm9p
ZCk7CgoKCgoKICAgIHZvaWQgQWN0ODAodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0ODEodm9pZCk7
CgoKCgoKICAgIHZvaWQgQWN0ODIodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0ODModm9pZCk7CgoK
CgoKICAgIHZvaWQgQWN0ODQodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0ODUodm9pZCk7CgoKCgoK
CgoKCgoKCgogICAgdm9pZCBBY3Q4OCh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3Q4OSh2b2lkKTsK
CgoKCgogICAgdm9pZCBBY3Q5MCh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3Q5MSh2b2lkKTsKCgoK
CgogICAgdm9pZCBBY3Q5Mih2b2lkKTsKCgoKCgogICAgdm9pZCBBY3Q5Myh2b2lkKTsKCgoKCgog
ICAgdm9pZCBBY3Q5NCh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3Q5NSh2b2lkKTsKCgoKCgoKCgoK
ICAgIHZvaWQgQWN0OTcodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0OTgodm9pZCk7CgoKCgoKCgoK
CgoKCgogICAgdm9pZCBBY3QxMDEodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MTAyKHZvaWQpOwoK
CgoKCiAgICB2b2lkIEFjdDEwMyh2b2lkKTsKCgoKCgoKCgoKICAgIHZvaWQgQWN0MTA1KHZvaWQp
OwoKCgoKCiAgICB2b2lkIEFjdDEwNih2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QxMDcodm9pZCk7
CgoKCgoKCgoKCgoKCgogICAgdm9pZCBBY3QxMTAodm9pZCk7CgoKCgoKCgoKCiAgICB2b2lkIEFj
dDExMih2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QxMTModm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0
MTE0KHZvaWQpOwoKCgoKCgoKCgoKCgoKCgoKCgoKCgogICAgdm9pZCBBY3QxMTkodm9pZCk7CgoK
CgoKCgoKCiAgICB2b2lkIEFjdDEyMSh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QxMjIodm9pZCk7
CgoKCgoKICAgIHZvaWQgQWN0MTIzKHZvaWQpOwoKCgoKCiAgICB2b2lkIEFjdDEyNCh2b2lkKTsK
CgoKCgogICAgdm9pZCBBY3QxMjUodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MTI2KHZvaWQpOwoK
CgoKCiAgICB2b2lkIEFjdDEyNyh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QxMjgodm9pZCk7CgoK
CgoKICAgIHZvaWQgQWN0MTI5KHZvaWQpOwoKCgoKCgoKCgoKCgoKCgoKCiAgICB2b2lkIEFjdDEz
Myh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QxMzQodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MTM1
KHZvaWQpOwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog
ICAgdm9pZCBBY3QxNjEodm9pZCk7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAg
ICB2b2lkIEFjdDE2OSh2b2lkKTsKCgoKCgoKCgoKCgoKCiAgICB2b2lkIEFjdDE3Mih2b2lkKTsK
CgoKCgogICAgdm9pZCBBY3QxNzModm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MTc0KHZvaWQpOwoK
CgoKCiAgICB2b2lkIEFjdDE3NSh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QxNzYodm9pZCk7CgoK
CgoKICAgIHZvaWQgQWN0MTc3KHZvaWQpOwoKCgoKCiAgICB2b2lkIEFjdDE3OCh2b2lkKTsKCgoK
CgogICAgdm9pZCBBY3QxNzkodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MTgwKHZvaWQpOwoKCgoK
CiAgICB2b2lkIEFjdDE4MSh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QxODIodm9pZCk7CgoKCgoK
ICAgIHZvaWQgQWN0MTgzKHZvaWQpOwoKCgoKCgoKCgoKCgoKICAgIHZvaWQgQWN0MTg2KHZvaWQp
OwoKCgoKCgoKCgoKCgoKCgoKCiAgICB2b2lkIEFjdDE5MCh2b2lkKTsKCgoKCgoKCgoKICAgIHZv
aWQgQWN0MTkyKHZvaWQpOwoKCgoKCiAgICB2b2lkIEFjdDE5Myh2b2lkKTsKCgoKCgogICAgdm9p
ZCBBY3QxOTQodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MTk1KHZvaWQpOwoKCgoKCiAgICB2b2lk
IEFjdDE5Nih2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QxOTcodm9pZCk7CgoKCgoKICAgIHZvaWQg
QWN0MTk4KHZvaWQpOwoKCgoKCiAgICB2b2lkIEFjdDE5OSh2b2lkKTsKCgoKCgogICAgdm9pZCBB
Y3QyMDAodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MjAxKHZvaWQpOwoKCgoKCiAgICB2b2lkIEFj
dDIwMih2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QyMDModm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0
MjA0KHZvaWQpOwoKCgoKCiAgICB2b2lkIEFjdDIwNSh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3Qy
MDYodm9pZCk7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAgICB2b2lkIEFjdDIxMSh2b2lkKTsKCgoK
CgogICAgdm9pZCBBY3QyMTIodm9pZCk7CgoKCgoKCgoKCgoKCgogICAgdm9pZCBBY3QyMTUodm9p
ZCk7CgoKCgoKICAgIHZvaWQgQWN0MjE2KHZvaWQpOwoKCgoKCiAgICB2b2lkIEFjdDIxNyh2b2lk
KTsKCgoKCgoKCgoKCgoKCiAgICB2b2lkIEFjdDIyMCh2b2lkKTsKCgoKCgoKCgoKCgoKCiAgICB2
b2lkIEFjdDIyMyh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QyMjQodm9pZCk7CgoKCgoKCgoKCgoK
CgogICAgdm9pZCBBY3QyMjcodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MjI4KHZvaWQpOwoKCgoK
CiAgICB2b2lkIEFjdDIyOSh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QyMzAodm9pZCk7CgoKCgoK
ICAgIHZvaWQgQWN0MjMxKHZvaWQpOwoKCgoKCiAgICB2b2lkIEFjdDIzMih2b2lkKTsKCgoKCgoK
CgoKCgoKCgoKCgogICAgdm9pZCBBY3QyMzYodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MjM3KHZv
aWQpOwoKCgoKCiAgICB2b2lkIEFjdDIzOCh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QyMzkodm9p
ZCk7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAgICB2b2lkIEFjdDI0Nyh2b2lk
KTsKCgoKCgogICAgdm9pZCBBY3QyNDgodm9pZCk7CgoKCgoKCgoKCgoKCgogICAgdm9pZCBBY3Qy
NTEodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MjUyKHZvaWQpOwoKCgoKCgoKCgogICAgdm9pZCBB
Y3QyNTQodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MjU1KHZvaWQpOwoKCgoKCgoKCgogICAgdm9p
ZCBBY3QyNTcodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MjU4KHZvaWQpOwoKCgoKCgoKCgoKCgoK
ICAgIHZvaWQgQWN0MjYxKHZvaWQpOwoKCgoKCgoKCgoKCgoKICAgIHZvaWQgQWN0MjY0KHZvaWQp
OwoKCgoKCiAgICB2b2lkIEFjdDI2NSh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QyNjYodm9pZCk7
CgoKCgoKCgoKCiAgICB2b2lkIEFjdDI2OCh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QyNjkodm9p
ZCk7CgoKCgoKCgoKCiAgICB2b2lkIEFjdDI3MSh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QyNzIo
dm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MjczKHZvaWQpOwoKCgoKCgoKCgogICAgdm9pZCBBY3Qy
NzUodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0Mjc2KHZvaWQpOwoKCgoKCiAgICB2b2lkIEFjdDI3
Nyh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QyNzgodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0Mjc5
KHZvaWQpOwoKCgoKCgoKCgogICAgdm9pZCBBY3QyODEodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0
MjgyKHZvaWQpOwoKCgoKCgoKCgogICAgdm9pZCBBY3QyODQodm9pZCk7CgoKCgoKCgoKCiAgICB2
b2lkIEFjdDI4Nih2b2lkKTsKCgoKCgoKCgoKICAgIHZvaWQgQWN0Mjg4KHZvaWQpOwoKCgoKCgoK
CgogICAgdm9pZCBBY3QyOTAodm9pZCk7CgoKCgoKCgoKCiAgICB2b2lkIEFjdDI5Mih2b2lkKTsK
CgoKCgoKCgoKICAgIHZvaWQgQWN0Mjk0KHZvaWQpOwoKCgoKCgoKCgoKCgoKICAgIHZvaWQgQWN0
Mjk3KHZvaWQpOwoKCgoKCgoKCgoKCgoKCgoKCiAgICB2b2lkIEFjdDMwMSh2b2lkKTsKCgoKCgog
ICAgdm9pZCBBY3QzMDIodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MzAzKHZvaWQpOwoKCgoKCiAg
ICB2b2lkIEFjdDMwNCh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QzMDUodm9pZCk7CgoKCgoKICAg
IHZvaWQgQWN0MzA2KHZvaWQpOwoKCgoKCiAgICB2b2lkIEFjdDMwNyh2b2lkKTsKCgoKCgogICAg
dm9pZCBBY3QzMDgodm9pZCk7CgoKCgoKICAgIHZvaWQgQWN0MzA5KHZvaWQpOwoKCgoKCiAgICB2
b2lkIEFjdDMxMCh2b2lkKTsKCgoKCgogICAgdm9pZCBBY3QzMTEodm9pZCk7CgoKCgoKICAgIHZv
aWQgQWN0MzEyKHZvaWQpOwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAgICB2b2lkIEFjdDM1NSh2b2lkKTsKCgoKCgogICAgdm9pZCBB
Y3QzNTYodm9pZCk7CgoKIyAxODM4ICIuLi8uLi9qaWtlcy9zcmMvamF2YWFjdC5oIgoKIyAxMjQg
Ii4uLy4uL2ppa2VzL3NyYy9wYXJzZXIuaCIgMgoKCiAgICB2b2lkIChQYXJzZXI6OipydWxlX2Fj
dGlvbltOVU1fUlVMRVMgKyAxXSkgKCk7CgogICAgdm9pZCBJbml0UnVsZUFjdGlvbigpOwoKICAg
ICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIGlu
bGluZSBMZXhTdHJlYW06OlRva2VuSW5kZXggVG9rZW4oaW50IGkpCiAgICB7CiAgICAgICAgcmV0
dXJuIGxvY2F0aW9uX3N0YWNrW3N0YXRlX3N0YWNrX3RvcCArIChpIC0gMSldOwogICAgfQoKICAg
ICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIGlubGluZSBB
c3QqJiBTeW0oaW50IGkpIHsgcmV0dXJuIHBhcnNlX3N0YWNrW3N0YXRlX3N0YWNrX3RvcCArIChp
IC0gMSldOyB9CgogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAg
IAogICAgaW5saW5lIHZvaWQgVG9rZW5BY3Rpb24oVG9rZW5PYmplY3QgY3VydG9rKSB7IFN5bSgx
KSA9IF9fbnVsbCA7IH0KCiAgICBMZXhTdHJlYW0gKmxleF9zdHJlYW07CgogICAgU3RvcmFnZVBv
b2wgKmFzdF9wb29sLAogICAgICAgICAgICAgICAgKmJvZHlfcG9vbCwKICAgICAgICAgICAgICAg
ICpsaXN0X25vZGVfcG9vbDsKCiAgICBBc3RMaXN0Tm9kZSAqZnJlZV9saXN0X25vZGVzOwogICAg
QXN0TGlzdE5vZGUgKkFsbG9jYXRlTGlzdE5vZGUoKTsKICAgIHZvaWQgRnJlZUNpcmN1bGFyTGlz
dChBc3RMaXN0Tm9kZSAqKTsKCiAgICBib29sIHBhcnNlX2hlYWRlcl9vbmx5LAogICAgICAgICBw
YXJzZV9wYWNrYWdlX2hlYWRlcl9vbmx5OwoKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAK
ICAgICAKICAgIExvY2F0aW9uICpsb2NhdGlvbl9zdGFjazsKICAgIEFzdCAqKnBhcnNlX3N0YWNr
OwoKICAgIGVudW0geyBTVEFDS19JTkNSRU1FTlQgPSAyNTYgfTsKCiAgICBpbnQgc3RhY2tfbGVu
Z3RoLAogICAgICAgIHN0YXRlX3N0YWNrX3RvcCwKICAgICAgICAqc3RhY2ssCgogICAgICAgIHRl
bXBfc3RhY2tfdG9wLAogICAgICAgICp0ZW1wX3N0YWNrOwoKICAgIHN0YXRpYyBpbmxpbmUgaW50
IE1pbihpbnQgeCwgaW50IHkpIHsgcmV0dXJuICgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpOyB9CiAg
ICBzdGF0aWMgaW5saW5lIGludCBNYXgoaW50IHgsIGludCB5KSB7IHJldHVybiAoKHgpID4gKHkp
ID8gKHgpIDogKHkpKTsgfQoKICAgIHZvaWQgQWxsb2NhdGVFcnJvclN0YWNrcygpOwogICAgdm9p
ZCBSZWFsbG9jYXRlU3RhY2tzKCk7CiAgICB2b2lkIEVycm9yUmVwYWlyKFRva2VuT2JqZWN0IGVy
cm9yX3Rva2VuKTsKICAgIHZvaWQgUmVwYWlyUGFyc2UoVG9rZW5PYmplY3QpOwogICAgU2Vjb25k
YXJ5UmVwYWlySW5mbyBFcnJvclN1cmdlcnkoaW50IHN0YWNrW10sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgc3RhY2tfdG9wLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGxhc3RfaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTZWNvbmRhcnlSZXBhaXJJbmZvIHJlcGFpcik7CiAgICBpbnQgUGFyc2VDaGVj
ayhpbnQgc3RhY2tbXSwgaW50IHN0YWNrX3RvcCwgaW50IGZpcnN0X3Rva2VuLCBpbnQgYnVmZmVy
X3Bvc2l0aW9uKTsKfTsKCgoKCgoKCiMgMTMgIi4uLy4uL2ppa2VzL3NyYy9leHByLmNwcCIgMgoK
IyAxICIuLi8uLi9qaWtlcy9zcmMvc2VtYW50aWMuaCIgMQogCiAKIAogCiAKIAogCiAKIAoKCgoK
IyAxICIuLi8uLi9qaWtlcy9zcmMvYXN0LmgiIDEKIAogCiAKIAogCiAKIAogCiAKCgoKCgoKIyAx
ICIuLi8uLi9qaWtlcy9zcmMvc3ltYm9sLmgiIDEKIAogCiAKIAogCiAKIAogCiAKCgoKCiMgMSAi
Li4vLi4vamlrZXMvc3JjL2NvZGUuaCIgMQogCiAKIAogCiAKIAogCiAKIAogCgoKCgoKCgoKCgpj
bGFzcyBDb2RlCnsKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIGVudW0gewogICAg
ICAgICAgICAgTE9HX0JBU0VfU0laRSAgICAgICA9IDksCiAgICAgICAgICAgICBMT0dfQ09NUExF
TUVOVF9TSVpFID0gNywKICAgICAgICAgICAgIEJBU0VfU0laRSAgICAgICAgICAgPSA1MTIsCiAg
ICAgICAgICAgICBTTE9UX1NJWkUgICAgICAgICAgID0gMTI4LAogICAgICAgICAgICAgU0xPVF9N
QVNLICAgICAgICAgICA9IDEyNywKCiAgICAgICAgICAgICBORVdMSU5FX0NPREUgICAgICAgID0g
MSwKICAgICAgICAgICAgIFNQQUNFX0NPREUgICAgICAgICAgPSAyLAogICAgICAgICAgICAgQkFE
X0NPREUgICAgICAgICAgICA9IDMsCiAgICAgICAgICAgICBESUdJVF9DT0RFICAgICAgICAgID0g
NCwKICAgICAgICAgICAgIE9USEVSX0RJR0lUX0NPREUgICAgPSA1LAogICAgICAgICAgICAgTE9X
RVJfQ09ERSAgICAgICAgICA9IDYsCiAgICAgICAgICAgICBVUFBFUl9DT0RFICAgICAgICAgID0g
NywKICAgICAgICAgICAgIE9USEVSX0xFVFRFUl9DT0RFICAgPSA4CiAgICAgICAgIH07CgogICAg
c3RhdGljIGNoYXIgY29kZVs3OTEyXTsKICAgIHN0YXRpYyBjaGFyICpiYXNlWzUxMl07CgoKcHVi
bGljOgoKICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBTZXRCYWRDb2RlKHdjaGFyX3QgYykKICAgIHsK
ICAgICAgICBiYXNlW2MgPj4gTE9HX0NPTVBMRU1FTlRfU0laRV1bY10gPSBCQURfQ09ERTsKICAg
IH0KCiAgICBzdGF0aWMgaW5saW5lIHZvaWQgQ29kZUNoZWNrKHdjaGFyX3QgYykKICAgIHsKICAg
ICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIGMgPj4gTE9HX0NPTVBMRU1FTlRfU0laRSA8IEJB
U0VfU0laRSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiYyA+PiBMT0dfQ09NUExFTUVOVF9TSVpF
IDwgQkFTRV9TSVpFIiAsICIuLi8uLi9qaWtlcy9zcmMvY29kZS5oIiwgNTgsIF9fUFJFVFRZX0ZV
TkNUSU9OX18gKSwgMCkpKSA7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBiYXNlW2Mg
Pj4gTE9HX0NPTVBMRU1FTlRfU0laRV0gKyBjID49ICgmY29kZVswXSkgKSA/IDAgOgkoX19hc3Nl
cnRfZmFpbCAoImJhc2VbYyA+PiBMT0dfQ09NUExFTUVOVF9TSVpFXSArIGMgPj0gKCZjb2RlWzBd
KSIgLCAiLi4vLi4vamlrZXMvc3JjL2NvZGUuaCIsIDU5LCBfX1BSRVRUWV9GVU5DVElPTl9fICks
IDApKSkgOwogICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggYmFzZVtjID4+IExPR19DT01Q
TEVNRU5UX1NJWkVdICsgYyA8ICgmY29kZVs3OTEyXSkgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAo
ImJhc2VbYyA+PiBMT0dfQ09NUExFTUVOVF9TSVpFXSArIGMgPCAoJmNvZGVbNzkxMl0pIiAsICIu
Li8uLi9qaWtlcy9zcmMvY29kZS5oIiwgNjAsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7
CiAgICB9CgogICAgc3RhdGljIGlubGluZSBib29sIENvZGVDaGVjayh2b2lkKQogICAgewogICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDB4ZmZmZjsgaSsrKQogICAgICAgICAgICBDb2RlQ2hl
Y2soKHdjaGFyX3QpIGkpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHN0YXRpYyBp
bmxpbmUgYm9vbCBJc05ld2xpbmUod2NoYXJfdCBjKSAgCiAgICB7CiAgICAgICAgcmV0dXJuIGMg
PT0gJ1x4MGEnOwogICAgfQoKICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBJc1NwYWNlQnV0Tm90TmV3
bGluZSh3Y2hhcl90IGMpCiAgICB7CiAgICAgICAgcmV0dXJuIGJhc2VbYyA+PiBMT0dfQ09NUExF
TUVOVF9TSVpFXVtjXSA9PSBTUEFDRV9DT0RFOwogICAgfQoKICAgIHN0YXRpYyBpbmxpbmUgYm9v
bCBJc1NwYWNlKHdjaGFyX3QgYykKICAgIHsKICAgICAgICByZXR1cm4gYmFzZVtjID4+IExPR19D
T01QTEVNRU5UX1NJWkVdW2NdIDw9IFNQQUNFX0NPREU7CiAgICB9CgogICAgc3RhdGljIGlubGlu
ZSBib29sIElzRGlnaXQod2NoYXJfdCBjKQogICAgewogICAgICAgIHJldHVybiBiYXNlW2MgPj4g
TE9HX0NPTVBMRU1FTlRfU0laRV1bY10gPT0gRElHSVRfQ09ERTsKICAgIH0KCiAgICBzdGF0aWMg
aW5saW5lIGJvb2wgSXNVcHBlcih3Y2hhcl90IGMpCiAgICB7CiAgICAgICAgcmV0dXJuIGJhc2Vb
YyA+PiBMT0dfQ09NUExFTUVOVF9TSVpFXVtjXSA9PSBVUFBFUl9DT0RFOwogICAgfQoKICAgIHN0
YXRpYyBpbmxpbmUgYm9vbCBJc0xvd2VyKHdjaGFyX3QgYykKICAgIHsKICAgICAgICByZXR1cm4g
YmFzZVtjID4+IExPR19DT01QTEVNRU5UX1NJWkVdW2NdID09IExPV0VSX0NPREU7CiAgICB9Cgog
ICAgc3RhdGljIGlubGluZSBib29sIElzQWxwaGEod2NoYXJfdCBjKQogICAgewogICAgICAgIHJl
dHVybiBiYXNlW2MgPj4gTE9HX0NPTVBMRU1FTlRfU0laRV1bY10gPj0gTE9XRVJfQ09ERTsKICAg
IH0KCiAgICBzdGF0aWMgaW5saW5lIGJvb2wgSXNBbG51bSh3Y2hhcl90IGMpCiAgICB7CiAgICAg
ICAgcmV0dXJuIGJhc2VbYyA+PiBMT0dfQ09NUExFTUVOVF9TSVpFXVtjXSA+PSBESUdJVF9DT0RF
OwogICAgfQoKCn07CgoKCgoKCgojIDE0ICIuLi8uLi9qaWtlcy9zcmMvc3ltYm9sLmgiIDIKCgoj
IDEgIi4uLy4uL2ppa2VzL3NyYy9vcHRpb24uaCIgMQogCiAKIAogCiAKIAogCiAKIAoKCgoKCiMg
MSAiLi4vLi4vamlrZXMvc3JjL2NvZGUuaCIgMQogCiAKIAogCiAKIAogCiAKIAogCgoKCgoKCgoj
IDExMyAiLi4vLi4vamlrZXMvc3JjL2NvZGUuaCIKCgoKCgoKIyAxNSAiLi4vLi4vamlrZXMvc3Jj
L29wdGlvbi5oIiAyCgoKCgogCiAKCgoKCgpjbGFzcyBBcmd1bWVudEV4cGFuZGVyCnsKcHVibGlj
OgoKICAgIGludCBhcmdjOwogICAgY2hhciAqKmFyZ3Y7CgogICAgQXJndW1lbnRFeHBhbmRlcihp
bnQsIGNoYXIgKiopOwoKICAgIEFyZ3VtZW50RXhwYW5kZXIoVHVwbGU8Y2hhcj4gJik7CgogICAg
fkFyZ3VtZW50RXhwYW5kZXIoKQogICAgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJn
YzsgaSsrKQogICAgICAgICAgICBkZWxldGUgW10gYXJndltpXTsKICAgICAgICBkZWxldGUgW10g
YXJndjsKICAgIH0KCiAgICBib29sIEV4cGFuZEF0RmlsZUFyZ3VtZW50KFR1cGxlPGNoYXIgKj4g
JiBhcmd1bWVudHMsIGNoYXIgKiBmaWxlX25hbWUpOwp9OwoKCmNsYXNzIEtleXdvcmRNYXAKewpw
dWJsaWM6CiAgICB3Y2hhcl90ICpuYW1lOwogICAgaW50IGxlbmd0aCwKICAgICAgICBrZXk7Cn07
CgoKY2xhc3MgT3B0aW9uRXJyb3IKewpwdWJsaWM6CiAgICBpbnQga2luZDsKICAgIHdjaGFyX3Qg
Km5hbWU7CgogICAgT3B0aW9uRXJyb3IoaW50IGtpbmRfLCBjaGFyICpzdHIpIDoga2luZChraW5k
XykKICAgIHsKICAgICAgICBpbnQgbGVuZ3RoID0gc3RybGVuKHN0cik7CiAgICAgICAgbmFtZSA9
IG5ldyB3Y2hhcl90W2xlbmd0aCArIDFdOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspCiAgICAgICAgICAgIG5hbWVbaV0gPSBzdHJbaV07CiAgICAgICAgbmFtZVtsZW5n
dGhdID0gVV9OVUxMOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgfk9wdGlvbkVycm9yKCkg
eyBkZWxldGUgW10gbmFtZTsgfQp9OwoKY2xhc3MgT3N0cmVhbTsKCmNsYXNzIE9wdGlvbjogcHVi
bGljIEppa2VzT3B0aW9uCiB7CgojIDExMCAiLi4vLi4vamlrZXMvc3JjL29wdGlvbi5oIgoKCnB1
YmxpYzoKICAgICAgICAgCiAgICBUdXBsZTxLZXl3b3JkTWFwPiBrZXl3b3JkX21hcDsKICAgIFR1
cGxlPE9wdGlvbkVycm9yICo+IGJhZF9vcHRpb25zOwoKICAgIGludCBmaXJzdF9maWxlX2luZGV4
OwoKICAgIGludCBkZWJ1Z190cmFwX29wOwoKICAgIGJvb2wgZGVidWdfZHVtcF9sZXgsCiAgICAg
ICAgIGRlYnVnX2R1bXBfYXN0LAogICAgICAgICBkZWJ1Z191bnBhcnNlX2FzdCwKICAgICAgICAg
ZGVidWdfdW5wYXJzZV9hc3RfZGVidWcsCiAgICAgICAgIGRlYnVnX2R1bXBfY2xhc3MsCiAgICAg
ICAgIG5vY2xlYW51cCwKICAgICAgICAgaW5jcmVtZW50YWwsCiAgICAgICAgIG1ha2VmaWxlLAoJ
IGRlcGVuZGVuY2VfcmVwb3J0LAogICAgICAgICBieXRlY29kZSwKICAgICAgICAgZnVsbF9jaGVj
aywKICAgICAgICAgdW56aXAsCiAgICAgICAgIGR1bXBfZXJyb3JzLAogICAgICAgICBlcnJvcnMs
CiAgICAgICAgIGNvbW1lbnRzLAogICAgICAgICBwZWRhbnRpYzsKCiAgICBjaGFyICpkZXBlbmRl
bmNlX3JlcG9ydF9uYW1lOwoKICAgIE9wdGlvbihBcmd1bWVudEV4cGFuZGVyICYpOwoKICAgIH5P
cHRpb24oKTsKfTsKCgoKCgoKCiMgMTYgIi4uLy4uL2ppa2VzL3NyYy9zeW1ib2wuaCIgMgoKCiMg
MSAiLi4vLi4vamlrZXMvc3JjL2RlcGVuZC5oIiAxCiAKIAogCiAKIAogCiAKIAogCgoKCgogCiAK
CgoKCgpjbGFzcyBTZW1hbnRpYzsKY2xhc3MgVHlwZVN5bWJvbDsKY2xhc3MgRmlsZVN5bWJvbDsK
Y2xhc3MgQXN0Q2xhc3NCb2R5OwpjbGFzcyBBc3RDb25zdHJ1Y3RvckRlY2xhcmF0aW9uOwpjbGFz
cyBTeW1ib2xTZXQ7CmNsYXNzIENvbnRyb2w7CgpjbGFzcyBDeWNsZUNoZWNrZXIKewpwdWJsaWM6
CiAgICBlbnVtIHsgT01FR0EgPSAtMSwgQ1lDTEVfSU5GSU5JVFkgPSAyMTQ3NDgzNjQ3ICAgfTsK
CiAgICBpbmxpbmUgaW50IE1pbihpbnQgeCwgaW50IHkpIHsgcmV0dXJuICh4IDwgeSA/IHggOiB5
KTsgfQp9OwoKY2xhc3MgVHlwZUN5Y2xlQ2hlY2tlciA6IHB1YmxpYyBDeWNsZUNoZWNrZXIKewpw
dWJsaWM6CgogICAgVHlwZUN5Y2xlQ2hlY2tlcihUdXBsZTxUeXBlU3ltYm9sICo+ICZ0eXBlX2xp
c3RfKSA6IHR5cGVfbGlzdCh0eXBlX2xpc3RfKQogICAge30KICAgIHZvaWQgUGFydGlhbE9yZGVy
KFR1cGxlPFNlbWFudGljICo+ICYsIGludCk7CiAgICB2b2lkIFBhcnRpYWxPcmRlcihTeW1ib2xT
ZXQgJik7Cgpwcml2YXRlOgogICAgY2xhc3MgU3RhY2sKICAgIHsKICAgIHB1YmxpYzoKICAgICAg
ICB2b2lkIFB1c2goVHlwZVN5bWJvbCAqdHlwZSkgeyBpbmZvLk5leHQoKSA9IHR5cGU7IH0KICAg
ICAgICB2b2lkIFBvcCgpICAgICAgICAgICAgICAgICAgeyBpZiAoaW5mby5MZW5ndGgoKSA+IDAp
IGluZm8uUmVzZXQoaW5mby5MZW5ndGgoKSAtIDEpOyB9CiAgICAgICAgaW50IFNpemUoKSAgICAg
ICAgICAgICAgICAgIHsgcmV0dXJuIGluZm8uTGVuZ3RoKCk7IH0KICAgICAgICBUeXBlU3ltYm9s
ICpUb3AoKSAgICAgICAgICAgeyByZXR1cm4gKFR5cGVTeW1ib2wgKikgKGluZm8uTGVuZ3RoKCkg
PiAwID8gaW5mb1tpbmZvLkxlbmd0aCgpIC0gMV0gOiBfX251bGwgKTsgfQogICAgcHJpdmF0ZToK
ICAgICAgICBUdXBsZTxUeXBlU3ltYm9sICo+IGluZm87CiAgICB9IHN0YWNrOwoKICAgIFR1cGxl
PFR5cGVTeW1ib2wgKj4gJnR5cGVfbGlzdDsKCiAgICB2b2lkIFByb2Nlc3NTdWJ0eXBlcyhUeXBl
U3ltYm9sICopOwogICAgdm9pZCBSZXZlcnNlVHlwZUxpc3QoKTsKfTsKCgpjbGFzcyBDb25zdHJ1
Y3RvckN5Y2xlQ2hlY2tlciA6IHB1YmxpYyBDeWNsZUNoZWNrZXIKewpwdWJsaWM6CgogICAgQ29u
c3RydWN0b3JDeWNsZUNoZWNrZXIoQXN0Q2xhc3NCb2R5ICopOwoKcHJpdmF0ZToKICAgIGNsYXNz
IFN0YWNrCiAgICB7CiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBQdXNoKEFzdENvbnN0cnVjdG9y
RGVjbGFyYXRpb24gKmNvbnN0cnVjdG9yKSB7IGluZm8uTmV4dCgpID0gY29uc3RydWN0b3I7IH0K
ICAgICAgICB2b2lkIFBvcCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgaWYgKGluZm8uTGVuZ3RoKCkgPiAwKSBpbmZvLlJlc2V0KGluZm8uTGVuZ3RoKCkgLSAxKTsg
fQogICAgICAgIGludCBTaXplKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyByZXR1cm4gaW5mby5MZW5ndGgoKTsgfQogICAgICAgIEFzdENvbnN0cnVjdG9yRGVjbGFy
YXRpb24gKlRvcCgpCiAgICAgICAgICAgeyByZXR1cm4gKEFzdENvbnN0cnVjdG9yRGVjbGFyYXRp
b24gKikgKGluZm8uTGVuZ3RoKCkgPiAwID8gaW5mb1tpbmZvLkxlbmd0aCgpIC0gMV0gOiBfX251
bGwgKTt9CiAgICBwcml2YXRlOgogICAgICAgIFR1cGxlPEFzdENvbnN0cnVjdG9yRGVjbGFyYXRp
b24gKj4gaW5mbzsKICAgIH0gc3RhY2s7CgogICAgdm9pZCBDaGVja0NvbnN0cnVjdG9yQ3ljbGVz
KEFzdENvbnN0cnVjdG9yRGVjbGFyYXRpb24gKik7Cn07CgoKY2xhc3MgVHlwZURlcGVuZGVuY2VD
aGVja2VyIDogcHVibGljIEN5Y2xlQ2hlY2tlcgp7CnB1YmxpYzoKICAgIFR5cGVEZXBlbmRlbmNl
Q2hlY2tlcihDb250cm9sICpjb250cm9sXywgU3ltYm9sU2V0ICZmaWxlX3NldF8sIFR1cGxlPFR5
cGVTeW1ib2wgKj4gJnR5cGVfdHJhc2hfYmluXykKICAgICAgICA6IGZpbGVfc2V0KGZpbGVfc2V0
XyksCiAgICAgICAgICBjb250cm9sKGNvbnRyb2xfKSwKICAgICAgICAgIHR5cGVfdHJhc2hfYmlu
KHR5cGVfdHJhc2hfYmluXykKICAgIHt9CgogICAgflR5cGVEZXBlbmRlbmNlQ2hlY2tlcigpIHt9
CgogICAgdm9pZCBQYXJ0aWFsT3JkZXIoKTsKICAgIHZvaWQgT3V0cHV0RGVwZW5kZW5jZXMoKTsK
CiAgICBUdXBsZTxUeXBlU3ltYm9sICo+ICZUeXBlTGlzdCgpIHsgcmV0dXJuIHR5cGVfbGlzdDsg
fQoKICAgIFN5bWJvbFNldCAmZmlsZV9zZXQ7Cgpwcml2YXRlOgogICAgQ29udHJvbCAqY29udHJv
bDsKICAgIFR1cGxlPFR5cGVTeW1ib2wgKj4gJnR5cGVfdHJhc2hfYmluOwoKICAgIGNsYXNzIFN0
YWNrCiAgICB7CiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBQdXNoKFR5cGVTeW1ib2wgKnR5cGUp
IHsgaW5mby5OZXh0KCkgPSB0eXBlOyB9CiAgICAgICAgdm9pZCBQb3AoKSAgICAgICAgICAgICAg
ICAgIHsgaWYgKGluZm8uTGVuZ3RoKCkgPiAwKSBpbmZvLlJlc2V0KGluZm8uTGVuZ3RoKCkgLSAx
KTsgfQogICAgICAgIGludCBTaXplKCkgICAgICAgICAgICAgICAgICB7IHJldHVybiBpbmZvLkxl
bmd0aCgpOyB9CiAgICAgICAgVHlwZVN5bWJvbCAqVG9wKCkgICAgICAgICAgIHsgcmV0dXJuIChU
eXBlU3ltYm9sICopIChpbmZvLkxlbmd0aCgpID4gMCA/IGluZm9baW5mby5MZW5ndGgoKSAtIDFd
IDogX19udWxsICk7IH0KICAgIHByaXZhdGU6CiAgICAgICAgVHVwbGU8VHlwZVN5bWJvbCAqPiBp
bmZvOwogICAgfSBzdGFjazsKCiAgICB2b2lkIE91dHB1dE1ha2UoRklMRSAqLCBjaGFyICosIFR1
cGxlPEZpbGVTeW1ib2wgKj4gJik7CiAgICB2b2lkIE91dHB1dE1ha2UoRmlsZVN5bWJvbCAqKTsK
CiAgICBUdXBsZTxUeXBlU3ltYm9sICo+IHR5cGVfbGlzdDsKCiAgICB2b2lkIFByb2Nlc3NUeXBl
KFR5cGVTeW1ib2wgKik7Cn07CgoKY2xhc3MgVG9wb2xvZ2ljYWxTb3J0CnsKcHVibGljOgogICAg
VG9wb2xvZ2ljYWxTb3J0KFN5bWJvbFNldCAmLCBUdXBsZTxUeXBlU3ltYm9sICo+ICYpOwogICAg
flRvcG9sb2dpY2FsU29ydCgpOwoKICAgIHZvaWQgU29ydCgpOwoKcHJpdmF0ZToKICAgIHZvaWQg
UHJvY2VzcyhUeXBlU3ltYm9sICopOwoKICAgIFN5bWJvbFNldCAqcGVuZGluZzsKCiAgICBTeW1i
b2xTZXQgJnR5cGVfY29sbGVjdGlvbjsKICAgIFR1cGxlPFR5cGVTeW1ib2wgKj4gJnR5cGVfbGlz
dDsKfTsKCgoKCgoKCiMgMTggIi4uLy4uL2ppa2VzL3NyYy9zeW1ib2wuaCIgMgoKIyAxICIuLi8u
Li9qaWtlcy9zcmMvYWNjZXNzLmgiIDEKIAogCiAKIAogCiAKIAogCiAKCgoKCgoKCgoKCgpjbGFz
cyBBY2Nlc3NGbGFncwp7CnByb3RlY3RlZDoKICAgIHUyIGFjY2Vzc19mbGFnczsKCnB1YmxpYzoK
CiAgICBib29sIEFDQ19QVUJMSUMoKSAgICAgICB7IHJldHVybiAoYWNjZXNzX2ZsYWdzICYgMHgw
MDAxKSAhPSAwOyB9CiAgICBib29sIEFDQ19QUklWQVRFKCkgICAgICB7IHJldHVybiAoYWNjZXNz
X2ZsYWdzICYgMHgwMDAyKSAhPSAwOyB9CiAgICBib29sIEFDQ19QUk9URUNURUQoKSAgICB7IHJl
dHVybiAoYWNjZXNzX2ZsYWdzICYgMHgwMDA0KSAhPSAwOyB9CiAgICBib29sIEFDQ19TVEFUSUMo
KSAgICAgICB7IHJldHVybiAoYWNjZXNzX2ZsYWdzICYgMHgwMDA4KSAhPSAwOyB9CiAgICBib29s
IEFDQ19GSU5BTCgpICAgICAgICB7IHJldHVybiAoYWNjZXNzX2ZsYWdzICYgMHgwMDEwKSAhPSAw
OyB9CiAgICBib29sIEFDQ19TVVBFUigpICAgICAgICB7IHJldHVybiAoYWNjZXNzX2ZsYWdzICYg
MHgwMDIwKSAhPSAwOyB9CiAgICBib29sIEFDQ19TWU5DSFJPTklaRUQoKSB7IHJldHVybiAoYWNj
ZXNzX2ZsYWdzICYgMHgwMDIwKSAhPSAwOyB9CiAgICBib29sIEFDQ19WT0xBVElMRSgpICAgICB7
IHJldHVybiAoYWNjZXNzX2ZsYWdzICYgMHgwMDQwKSAhPSAwOyB9CiAgICBib29sIEFDQ19UUkFO
U0lFTlQoKSAgICB7IHJldHVybiAoYWNjZXNzX2ZsYWdzICYgMHgwMDgwKSAhPSAwOyB9CiAgICBi
b29sIEFDQ19OQVRJVkUoKSAgICAgICB7IHJldHVybiAoYWNjZXNzX2ZsYWdzICYgMHgwMTAwKSAh
PSAwOyB9CiAgICBib29sIEFDQ19JTlRFUkZBQ0UoKSAgICB7IHJldHVybiAoYWNjZXNzX2ZsYWdz
ICYgMHgwMjAwKSAhPSAwOyB9CiAgICBib29sIEFDQ19BQlNUUkFDVCgpICAgICB7IHJldHVybiAo
YWNjZXNzX2ZsYWdzICYgMHgwNDAwKSAhPSAwOyB9CiAgICBib29sIEFDQ19TVFJJQ1RGUCgpICAg
ICB7IHJldHVybiAoYWNjZXNzX2ZsYWdzICYgMHgwODAwKSAhPSAwOyB9CgogICAgdm9pZCBTZXRB
Q0NfUFVCTElDKCkgICAgICAgeyBhY2Nlc3NfZmxhZ3MgfD0gMHgwMDAxOyB9CiAgICB2b2lkIFNl
dEFDQ19QUklWQVRFKCkgICAgICB7IGFjY2Vzc19mbGFncyB8PSAweDAwMDI7IH0KICAgIHZvaWQg
U2V0QUNDX1BST1RFQ1RFRCgpICAgIHsgYWNjZXNzX2ZsYWdzIHw9IDB4MDAwNDsgfQogICAgdm9p
ZCBTZXRBQ0NfU1RBVElDKCkgICAgICAgeyBhY2Nlc3NfZmxhZ3MgfD0gMHgwMDA4OyB9CiAgICB2
b2lkIFNldEFDQ19GSU5BTCgpICAgICAgICB7IGFjY2Vzc19mbGFncyB8PSAweDAwMTA7IH0KICAg
IHZvaWQgU2V0QUNDX1NVUEVSKCkgICAgICAgIHsgYWNjZXNzX2ZsYWdzIHw9IDB4MDAyMDsgfQog
ICAgdm9pZCBTZXRBQ0NfU1lOQ0hST05JWkVEKCkgeyBhY2Nlc3NfZmxhZ3MgfD0gMHgwMDIwOyB9
CiAgICB2b2lkIFNldEFDQ19WT0xBVElMRSgpICAgICB7IGFjY2Vzc19mbGFncyB8PSAweDAwNDA7
IH0KICAgIHZvaWQgU2V0QUNDX1RSQU5TSUVOVCgpICAgIHsgYWNjZXNzX2ZsYWdzIHw9IDB4MDA4
MDsgfQogICAgdm9pZCBTZXRBQ0NfTkFUSVZFKCkgICAgICAgeyBhY2Nlc3NfZmxhZ3MgfD0gMHgw
MTAwOyB9CiAgICB2b2lkIFNldEFDQ19JTlRFUkZBQ0UoKSAgICB7IGFjY2Vzc19mbGFncyB8PSAw
eDAyMDA7IH0KICAgIHZvaWQgU2V0QUNDX0FCU1RSQUNUKCkgICAgIHsgYWNjZXNzX2ZsYWdzIHw9
IDB4MDQwMDsgfQogICAgdm9pZCBTZXRBQ0NfU1RSSUNURlAoKSAgICAgeyBhY2Nlc3NfZmxhZ3Mg
fD0gMHgwODAwOyB9CgogICAgdm9pZCBSZXNldEFDQ19QVUJMSUMoKSAgICAgICB7IGFjY2Vzc19m
bGFncyAmPSAofiAweDAwMDEpOyB9CiAgICB2b2lkIFJlc2V0QUNDX1BSSVZBVEUoKSAgICAgIHsg
YWNjZXNzX2ZsYWdzICY9ICh+IDB4MDAwMik7IH0KICAgIHZvaWQgUmVzZXRBQ0NfUFJPVEVDVEVE
KCkgICAgeyBhY2Nlc3NfZmxhZ3MgJj0gKH4gMHgwMDA0KTsgfQogICAgdm9pZCBSZXNldEFDQ19T
VEFUSUMoKSAgICAgICB7IGFjY2Vzc19mbGFncyAmPSAofiAweDAwMDgpOyB9CiAgICB2b2lkIFJl
c2V0QUNDX0ZJTkFMKCkgICAgICAgIHsgYWNjZXNzX2ZsYWdzICY9ICh+IDB4MDAxMCk7IH0KICAg
IHZvaWQgUmVzZXRBQ0NfU1VQRVIoKSAgICAgICAgeyBhY2Nlc3NfZmxhZ3MgJj0gKH4gMHgwMDIw
KTsgfQogICAgdm9pZCBSZXNldEFDQ19TWU5DSFJPTklaRUQoKSB7IGFjY2Vzc19mbGFncyAmPSAo
fiAweDAwMjApOyB9CiAgICB2b2lkIFJlc2V0QUNDX1ZPTEFUSUxFKCkgICAgIHsgYWNjZXNzX2Zs
YWdzICY9ICh+IDB4MDA0MCk7IH0KICAgIHZvaWQgUmVzZXRBQ0NfVFJBTlNJRU5UKCkgICAgeyBh
Y2Nlc3NfZmxhZ3MgJj0gKH4gMHgwMDgwKTsgfQogICAgdm9pZCBSZXNldEFDQ19OQVRJVkUoKSAg
ICAgICB7IGFjY2Vzc19mbGFncyAmPSAofiAweDAxMDApOyB9CiAgICB2b2lkIFJlc2V0QUNDX0lO
VEVSRkFDRSgpICAgIHsgYWNjZXNzX2ZsYWdzICY9ICh+IDB4MDIwMCk7IH0KICAgIHZvaWQgUmVz
ZXRBQ0NfQUJTVFJBQ1QoKSAgICAgeyBhY2Nlc3NfZmxhZ3MgJj0gKH4gMHgwNDAwKTsgfQogICAg
dm9pZCBSZXNldEFDQ19TVFJJQ1RGUCgpICAgICB7IGFjY2Vzc19mbGFncyAmPSAofiAweDA4MDAp
OyB9CgogICAgdm9pZCBSZXNldEZsYWdzKCkgeyBhY2Nlc3NfZmxhZ3MgPSAwOyB9CiAgICB2b2lk
IFNldEZsYWdzKHUyIGFjY2Vzc19mbGFnc18pIHsgYWNjZXNzX2ZsYWdzID0gYWNjZXNzX2ZsYWdz
XzsgfQogICAgdm9pZCBTZXRGbGFncyhBY2Nlc3NGbGFncyBhZikgIHsgdGhpcyAtPiBhY2Nlc3Nf
ZmxhZ3MgPSBhZi5hY2Nlc3NfZmxhZ3M7IH0KICAgIHUyIEZsYWdzKCkgeyByZXR1cm4gYWNjZXNz
X2ZsYWdzOyB9CgogICAgQWNjZXNzRmxhZ3MoKSA6IGFjY2Vzc19mbGFncygwKSB7fQogICAgQWNj
ZXNzRmxhZ3ModTImIF9hY2Nlc3NfZmxhZ3MpIDogYWNjZXNzX2ZsYWdzKF9hY2Nlc3NfZmxhZ3Mp
IHt9CgojIDk3ICIuLi8uLi9qaWtlcy9zcmMvYWNjZXNzLmgiCgp9OwoKCgoKCgoKIyAxOSAiLi4v
Li4vamlrZXMvc3JjL3N5bWJvbC5oIiAyCgoKIyAxICIuLi8uLi9qaWtlcy9zcmMvY2FzZS5oIiAx
CiAKIAogCiAKIAogCiAKIAogCgoKCgoKCiAKCgoKCgoKCgoKCiAKIAogCiAKIAogCiAKY2xhc3Mg
Q2FzZQp7CiAgICBzdGF0aWMgY2hhciBsb3dlclsxMjhdOwogICAgc3RhdGljIGNoYXIgdXBwZXJb
MTI4XTsKCnB1YmxpYzoKCiAgICBzdGF0aWMgaW5saW5lIGJvb2wgSXNBc2NpaUxvd2VyKGNoYXIg
YykgICAgICAgeyByZXR1cm4gYyA9PSBsb3dlcltjXTsgfQogICAgc3RhdGljIGlubGluZSBjaGFy
IFRvQXNjaWlMb3dlcihjaGFyIGMpICAgICAgIHsgcmV0dXJuIChjICYgKGNoYXIpIDB4ODApID8g
YyA6IGxvd2VyW2NdOyB9CiAgICBzdGF0aWMgaW5saW5lIHdjaGFyX3QgVG9Bc2NpaUxvd2VyKHdj
aGFyX3QgYykgeyByZXR1cm4gKGMgPCAxMjggPyAod2NoYXJfdCkgbG93ZXJbY10gOiBjKTsgfQoK
ICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBJc0FzY2lpVXBwZXIoY2hhciBjKSAgICAgICB7IHJldHVy
biBjID09IHVwcGVyW2NdOyB9CiAgICBzdGF0aWMgaW5saW5lIGNoYXIgVG9Bc2NpaVVwcGVyKGNo
YXIgYykgICAgICAgeyByZXR1cm4gKGMgJiAoY2hhcikgMHg4MCkgPyBjIDogdXBwZXJbY107IH0K
ICAgIHN0YXRpYyBpbmxpbmUgd2NoYXJfdCBUb0FzY2lpVXBwZXIod2NoYXJfdCBjKSB7IHJldHVy
biAoYyA8IDEyOCA/ICh3Y2hhcl90KSB1cHBlcltjXSA6IGMpOyB9CgogICAgc3RhdGljIGlubGlu
ZSBib29sIElzQXNjaWlBbHBoYShjaGFyIGMpICAgIHsgcmV0dXJuIChjID09IGxvd2VyW2NdIHx8
IGMgPT0gdXBwZXJbY10pOyB9CiAgICBzdGF0aWMgaW5saW5lIGJvb2wgSXNBc2NpaUFscGhhKHdj
aGFyX3QgYykgeyByZXR1cm4gKGMgPT0gbG93ZXJbY10gfHwgYyA9PSB1cHBlcltjXSk7IH0KCiAg
ICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBzdGF0aWMgaW5saW5lIGludCBJbmRleChjaGFyICpz
LCB3Y2hhcl90IGMpCiAgICB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7ICpzICE9IFVfTlVMTDsg
aSsrLCBzKyspCiAgICAgICAgewogICAgICAgICAgICBpZiAoKnMgPT0gYykKICAgICAgICAgICAg
ICAgIHJldHVybiBpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgc3Rh
dGljIGlubGluZSBpbnQgSW5kZXgod2NoYXJfdCAqcywgd2NoYXJfdCBjKQogICAgewogICAgICAg
IGZvciAoaW50IGkgPSAwOyAqcyAhPSBVX05VTEw7IGkrKywgcysrKQogICAgICAgIHsKICAgICAg
ICAgICAgaWYgKCpzID09IGMpCiAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICB9CiAg
ICAgICAgcmV0dXJuIC0xOwogICAgfQoKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAg
ICAKICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBTdHJpbmdTZWdtZW50RXF1YWwoY2hhciAqczEsIGNv
bnN0IGNoYXIgKnMyLCBpbnQgbikKICAgIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47
IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChUb0FzY2lpTG93ZXIoczFbaV0pICE9IFRv
QXNjaWlMb3dlcihzMltpXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
fQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBTdHJp
bmdTZWdtZW50RXF1YWwod2NoYXJfdCAqczEsIGNvbnN0IGNoYXIgKnMyLCBpbnQgbikKICAgIHsK
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgICAgICB7CiAgICAgICAgICAg
IGlmIChUb0FzY2lpTG93ZXIoczFbaV0pICE9IFRvQXNjaWlMb3dlcihzMltpXSkpCiAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAg
fQoKICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBTdHJpbmdTZWdtZW50RXF1YWwoY2hhciAqczEsIGNv
bnN0IHdjaGFyX3QgKnMyLCBpbnQgbikKICAgIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG47IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChUb0FzY2lpTG93ZXIoczFbaV0pICE9
IFRvQXNjaWlMb3dlcihzMltpXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBT
dHJpbmdTZWdtZW50RXF1YWwod2NoYXJfdCAqczEsIGNvbnN0IHdjaGFyX3QgKnMyLCBpbnQgbikK
ICAgIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgICAgICB7CiAgICAg
ICAgICAgIGlmIChUb0FzY2lpTG93ZXIoczFbaV0pICE9IFRvQXNjaWlMb3dlcihzMltpXSkpCiAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVl
OwogICAgfQoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBzdGF0aWMgaW5saW5lIGJvb2wg
U3RyaW5nRXF1YWwoY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQogICAgewogICAgICAgIGludCBp
OwogICAgICAgIGZvciAoaSA9IDA7IHMxW2ldICYmIHMyW2ldOyBpKyspCiAgICAgICAgewogICAg
ICAgICAgICBpZiAoVG9Bc2NpaUxvd2VyKHMxW2ldKSAhPSBUb0FzY2lpTG93ZXIoczJbaV0pKQog
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKHMx
W2ldID09IHMyW2ldKTsKICAgIH0KCiAgICBzdGF0aWMgaW5saW5lIGJvb2wgU3RyaW5nRXF1YWwo
d2NoYXJfdCAqczEsIGNvbnN0IGNoYXIgKnMyKQogICAgewogICAgICAgIGludCBpOwogICAgICAg
IGZvciAoaSA9IDA7IHMxW2ldICYmIHMyW2ldOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBp
ZiAoVG9Bc2NpaUxvd2VyKHMxW2ldKSAhPSBUb0FzY2lpTG93ZXIoczJbaV0pKQogICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKHMxW2ldID09IHMy
W2ldKTsKICAgIH0KCiAgICBzdGF0aWMgaW5saW5lIGJvb2wgU3RyaW5nRXF1YWwoY2hhciAqczEs
IGNvbnN0IHdjaGFyX3QgKnMyKQogICAgewogICAgICAgIGludCBpOwogICAgICAgIGZvciAoaSA9
IDA7IHMxW2ldICYmIHMyW2ldOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBpZiAoVG9Bc2Np
aUxvd2VyKHMxW2ldKSAhPSBUb0FzY2lpTG93ZXIoczJbaV0pKQogICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKHMxW2ldID09IHMyW2ldKTsKICAg
IH0KCiAgICBzdGF0aWMgaW5saW5lIGJvb2wgU3RyaW5nRXF1YWwod2NoYXJfdCAqczEsIGNvbnN0
IHdjaGFyX3QgKnMyKQogICAgewogICAgICAgIGludCBpOwogICAgICAgIGZvciAoaSA9IDA7IHMx
W2ldICYmIHMyW2ldOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBpZiAoVG9Bc2NpaUxvd2Vy
KHMxW2ldKSAhPSBUb0FzY2lpTG93ZXIoczJbaV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKHMxW2ldID09IHMyW2ldKTsKICAgIH0KCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKfTsKCgoKCgoKCiMgMjEgIi4uLy4uL2ppa2VzL3NyYy9z
eW1ib2wuaCIgMgoKCgoKCgpjbGFzcyBTZW1hbnRpYzsKY2xhc3MgU2VtYW50aWNFbnZpcm9ubWVu
dDsKY2xhc3MgQXN0OwpjbGFzcyBBc3RDb21waWxhdGlvblVuaXQ7CmNsYXNzIEFzdE1ldGhvZERl
Y2xhcmF0b3I7CmNsYXNzIEFzdEJsb2NrOwpjbGFzcyBBc3RMaXN0OwpjbGFzcyBBc3RFeHByZXNz
aW9uOwpjbGFzcyBBc3RWYXJpYWJsZURlY2xhcmF0b3I7CmNsYXNzIEV4cGFuZGVkVHlwZVRhYmxl
OwpjbGFzcyBFeHBhbmRlZEZpZWxkVGFibGU7CmNsYXNzIEV4cGFuZGVkTWV0aG9kVGFibGU7CmNs
YXNzIFN5bWJvbFRhYmxlOwpjbGFzcyBTeW1ib2xTZXQ7CmNsYXNzIFN5bWJvbE1hcDsKY2xhc3Mg
WmlwOwoKY2xhc3MgUGFja2FnZVN5bWJvbDsKCmNsYXNzIFBhdGhTeW1ib2wgOiBwdWJsaWMgU3lt
Ym9sCnsKcHVibGljOgogICAgTmFtZVN5bWJvbCAqbmFtZV9zeW1ib2w7CiAgICBaaXAgKnppcGZp
bGU7CgogICAgUGF0aFN5bWJvbChOYW1lU3ltYm9sICopOwogICAgdmlydHVhbCB+UGF0aFN5bWJv
bCgpOwoKICAgIHZpcnR1YWwgd2NoYXJfdCAqTmFtZSgpIHsgcmV0dXJuIG5hbWVfc3ltYm9sIC0+
IE5hbWUoKTsgfQogICAgdmlydHVhbCBzaXplX3QgTmFtZUxlbmd0aCgpIHsgcmV0dXJuIG5hbWVf
c3ltYm9sIC0+IE5hbWVMZW5ndGgoKTsgfQogICAgdmlydHVhbCBOYW1lU3ltYm9sICpJZGVudGl0
eSgpIHsgcmV0dXJuIG5hbWVfc3ltYm9sOyB9CiAgICBjaGFyICpVdGY4TmFtZSgpIHsgcmV0dXJu
IChjaGFyICopIChuYW1lX3N5bWJvbCAtPiBVdGY4X2xpdGVyYWwgPyBuYW1lX3N5bWJvbCAtPiBV
dGY4X2xpdGVyYWwgLT4gdmFsdWUgOiBfX251bGwgKTsgfQogICAgaW50IFV0ZjhOYW1lTGVuZ3Ro
KCkgeyByZXR1cm4gKG5hbWVfc3ltYm9sIC0+IFV0ZjhfbGl0ZXJhbCA/IG5hbWVfc3ltYm9sIC0+
IFV0ZjhfbGl0ZXJhbCAtPiBsZW5ndGggOiAwKTsgfQoKICAgIGlubGluZSBib29sIElzWmlwKCkg
eyByZXR1cm4gemlwZmlsZSAhPSBfX251bGwgOyB9CgogICAgaW5saW5lIERpcmVjdG9yeVN5bWJv
bCAqUm9vdERpcmVjdG9yeSgpIHsgcmV0dXJuIHJvb3RfZGlyZWN0b3J5OyB9Cgpwcml2YXRlOgog
ICAgZnJpZW5kIGNsYXNzIFN5bWJvbFRhYmxlOwogICAgRGlyZWN0b3J5U3ltYm9sICpyb290X2Rp
cmVjdG9yeTsKfTsKCgpjbGFzcyBEaXJlY3RvcnlTeW1ib2wgOiBwdWJsaWMgU3ltYm9sCnsKcHVi
bGljOgogICAgU3ltYm9sICpvd25lcjsKICAgIE5hbWVTeW1ib2wgKm5hbWVfc3ltYm9sOwoKICAg
IFR1cGxlPERpcmVjdG9yeVN5bWJvbCAqPiBzdWJkaXJlY3RvcmllczsKCiAgICBEaXJlY3RvcnlT
eW1ib2woTmFtZVN5bWJvbCAqLCBTeW1ib2wgKiwgYm9vbCBzb3VyY2VfZGlyX29ubHkpOwogICAg
dmlydHVhbCB+RGlyZWN0b3J5U3ltYm9sKCk7CgogICAgdmlydHVhbCB3Y2hhcl90ICpOYW1lKCkg
eyByZXR1cm4gbmFtZV9zeW1ib2wgLT4gTmFtZSgpOyB9CiAgICB2aXJ0dWFsIHNpemVfdCBOYW1l
TGVuZ3RoKCkgeyByZXR1cm4gbmFtZV9zeW1ib2wgLT4gTmFtZUxlbmd0aCgpOyB9CiAgICB2aXJ0
dWFsIE5hbWVTeW1ib2wgKklkZW50aXR5KCkgeyByZXR1cm4gbmFtZV9zeW1ib2w7IH0KICAgIGNo
YXIgKlV0ZjhOYW1lKCkgeyByZXR1cm4gKGNoYXIgKikgKG5hbWVfc3ltYm9sIC0+IFV0ZjhfbGl0
ZXJhbCA/IG5hbWVfc3ltYm9sIC0+IFV0ZjhfbGl0ZXJhbCAtPiB2YWx1ZSA6IF9fbnVsbCApOyB9
CiAgICBpbnQgVXRmOE5hbWVMZW5ndGgoKSB7IHJldHVybiAobmFtZV9zeW1ib2wgLT4gVXRmOF9s
aXRlcmFsID8gbmFtZV9zeW1ib2wgLT4gVXRmOF9saXRlcmFsIC0+IGxlbmd0aCA6IDApOyB9CiAg
ICBib29sIElzU291cmNlRGlyZWN0b3J5KCkgeyByZXR1cm4gc291cmNlX2Rpcl9vbmx5OyB9Cgog
ICAgRGlyZWN0b3J5RW50cnkgKkZpbmRFbnRyeShjaGFyICpuYW1lLCBpbnQgbGVuKSB7IHJldHVy
biAoZW50cmllcyA/IGVudHJpZXMgLT4gRmluZEVudHJ5KG5hbWUsIGxlbikgOiAoRGlyZWN0b3J5
RW50cnkgKikgX19udWxsICk7IH0KCiMgMTA2ICIuLi8uLi9qaWtlcy9zcmMvc3ltYm9sLmgiCgoK
ICAgIFBhdGhTeW1ib2wgKlBhdGhTeW0oKQogICAgewogICAgICAgIHJldHVybiAob3duZXIgLT4g
UGF0aENhc3QoKSA/IChQYXRoU3ltYm9sICopIG93bmVyIDogKChEaXJlY3RvcnlTeW1ib2wgKikg
b3duZXIpIC0+IFBhdGhTeW0oKSk7CiAgICB9CgogICAgaW5saW5lIGJvb2wgSXNaaXAoKSB7IHJl
dHVybiBQYXRoU3ltKCkgLT4gSXNaaXAoKTsgfQoKICAgIHZvaWQgU2V0RGlyZWN0b3J5TmFtZSgp
OwogICAgaW5saW5lIGNoYXIgKkRpcmVjdG9yeU5hbWUoKQogICAgewogICAgICAgIGlmICghIGRp
cmVjdG9yeV9uYW1lKQogICAgICAgICAgICBTZXREaXJlY3RvcnlOYW1lKCk7CiAgICAgICAgcmV0
dXJuIGRpcmVjdG9yeV9uYW1lOwogICAgfQogICAgaW5saW5lIHNpemVfdCBEaXJlY3RvcnlOYW1l
TGVuZ3RoKCkKICAgIHsKICAgICAgICBpZiAoISBkaXJlY3RvcnlfbmFtZSkKICAgICAgICAgICAg
U2V0RGlyZWN0b3J5TmFtZSgpOwogICAgICAgIHJldHVybiBkaXJlY3RvcnlfbmFtZV9sZW5ndGg7
CiAgICB9CgogICAgaW5saW5lIERpcmVjdG9yeVN5bWJvbCAqSW5zZXJ0RGlyZWN0b3J5U3ltYm9s
KE5hbWVTeW1ib2wgKiwgYm9vbCk7CiAgICBpbmxpbmUgRGlyZWN0b3J5U3ltYm9sICpGaW5kRGly
ZWN0b3J5U3ltYm9sKE5hbWVTeW1ib2wgKik7CgogICAgaW5saW5lIEZpbGVTeW1ib2wgKkluc2Vy
dEZpbGVTeW1ib2woTmFtZVN5bWJvbCAqKTsKICAgIGlubGluZSBGaWxlU3ltYm9sICpGaW5kRmls
ZVN5bWJvbChOYW1lU3ltYm9sICopOwoKICAgIHZvaWQgUmVzZXREaXJlY3RvcnkoKTsKCiAgICB2
b2lkIFJlYWREaXJlY3RvcnkoKTsKCnByaXZhdGU6CgogICAgdGltZV90IG10aW1lOwoKICAgIFN5
bWJvbFRhYmxlICp0YWJsZTsKICAgIGlubGluZSBTeW1ib2xUYWJsZSAqVGFibGUoKTsKCiAgICBE
aXJlY3RvcnlUYWJsZSAqZW50cmllczsKICAgIGNoYXIgKmRpcmVjdG9yeV9uYW1lOwogICAgc2l6
ZV90IGRpcmVjdG9yeV9uYW1lX2xlbmd0aDsKCiAgICBib29sIHNvdXJjZV9kaXJfb25seTsKfTsK
CgpjbGFzcyBGaWxlU3ltYm9sIDogcHVibGljIFN5bWJvbAp7CnByaXZhdGU6CiAgICBlbnVtIEZp
bGVLaW5kCiAgICB7CiAgICAgICAgSkFWQSwKICAgICAgICBDTEFTUywKICAgICAgICBDTEFTU19P
TkxZCiAgICB9OwoKICAgIERpcmVjdG9yeVN5bWJvbCAqb3V0cHV0X2RpcmVjdG9yeTsKICAgIGNo
YXIgKmZpbGVfbmFtZTsKICAgIHNpemVfdCBmaWxlX25hbWVfbGVuZ3RoOwogICAgVXRmOExpdGVy
YWxWYWx1ZSAqZmlsZV9uYW1lX2xpdGVyYWw7CgpwdWJsaWM6CiAgICBOYW1lU3ltYm9sICpuYW1l
X3N5bWJvbDsKICAgIERpcmVjdG9yeVN5bWJvbCAqZGlyZWN0b3J5X3N5bWJvbDsKICAgIFBhY2th
Z2VTeW1ib2wgKnBhY2thZ2U7CiAgICBGaWxlS2luZCBraW5kOwoKICAgICAKICAgICAKICAgICAK
ICAgIHU0IHVuY29tcHJlc3NlZF9zaXplOwogICAgdTQgZGF0ZV90aW1lOwogICAgbG9uZyBvZmZz
ZXQ7CgogICAgIAogICAgIAogICAgIAogICAgdGltZV90IG10aW1lOwoKICAgICAKICAgICAKICAg
ICAKCiAgICAgCiAgICAgCiAgICBjaGFyICpidWZmZXI7CgogICAgTGV4U3RyZWFtICpsZXhfc3Ry
ZWFtOwogICAgQXN0Q29tcGlsYXRpb25Vbml0ICpjb21waWxhdGlvbl91bml0OwogICAgU2VtYW50
aWMgKnNlbWFudGljOwoKICAgIFR1cGxlPFR5cGVTeW1ib2wgKj4gdHlwZXM7CgogICAgRmlsZVN5
bWJvbChOYW1lU3ltYm9sICpuYW1lX3N5bWJvbF8pIDogb3V0cHV0X2RpcmVjdG9yeShfX251bGwg
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZShf
X251bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVf
bmFtZV9saXRlcmFsKF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZV9zeW1ib2wobmFtZV9zeW1ib2xfKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9zeW1ib2woX19udWxsICksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlKF9fbnVsbCApLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRpbWUoMCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIoX19udWxsICksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXhfc3RyZWFtKF9fbnVsbCAp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsYXRpb25f
dW5pdChfX251bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbWFudGljKF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZXMoNCkKICAgIHsKICAgICAgICAgU3ltYm9sOjpfa2luZCA9IF9GSUxFOwogICAg
fQoKICAgIHZpcnR1YWwgfkZpbGVTeW1ib2woKQogICAgewogICAgICAgIGRlbGV0ZSBbXSBmaWxl
X25hbWU7CiAgICAgICAgZGVsZXRlIFtdIGJ1ZmZlcjsKICAgICAgICBkZWxldGUgbGV4X3N0cmVh
bTsKICAgIH0KCiAgICBGaWxlU3ltYm9sICpDbG9uZSgpCiAgICB7CiAgICAgICAgRmlsZVN5bWJv
bCAqY2xvbmUgPSBuZXcgRmlsZVN5bWJvbChuYW1lX3N5bWJvbCk7CgogICAgICAgIGNsb25lIC0+
IGtpbmQgPSBraW5kOwogICAgICAgIGNsb25lIC0+IGRpcmVjdG9yeV9zeW1ib2wgPSBkaXJlY3Rv
cnlfc3ltYm9sOwogICAgICAgIGNsb25lIC0+IG10aW1lID0gbXRpbWU7CgogICAgICAgIHJldHVy
biBjbG9uZTsKICAgIH0KCiAgICB2aXJ0dWFsIHdjaGFyX3QgKk5hbWUoKSB7IHJldHVybiBuYW1l
X3N5bWJvbCAtPiBOYW1lKCk7IH0KICAgIHZpcnR1YWwgc2l6ZV90IE5hbWVMZW5ndGgoKSB7IHJl
dHVybiBuYW1lX3N5bWJvbCAtPiBOYW1lTGVuZ3RoKCk7IH0KICAgIHZpcnR1YWwgTmFtZVN5bWJv
bCAqSWRlbnRpdHkoKSB7IHJldHVybiBuYW1lX3N5bWJvbDsgfQogICAgY2hhciAqVXRmOE5hbWUo
KSB7IHJldHVybiAoY2hhciAqKSAobmFtZV9zeW1ib2wgLT4gVXRmOF9saXRlcmFsID8gbmFtZV9z
eW1ib2wgLT4gVXRmOF9saXRlcmFsIC0+IHZhbHVlIDogX19udWxsICk7IH0KICAgIGludCBVdGY4
TmFtZUxlbmd0aCgpIHsgcmV0dXJuIChuYW1lX3N5bWJvbCAtPiBVdGY4X2xpdGVyYWwgPyBuYW1l
X3N5bWJvbCAtPiBVdGY4X2xpdGVyYWwgLT4gbGVuZ3RoIDogMCk7IH0KCiAgICBpbmxpbmUgdm9p
ZCBTZXRKYXZhKCkgICAgICAgeyBraW5kID0gSkFWQTsgfQogICAgaW5saW5lIHZvaWQgU2V0Q2xh
c3MoKSAgICAgIHsga2luZCA9IENMQVNTOyB9CiAgICBpbmxpbmUgdm9pZCBTZXRDbGFzc09ubHko
KSAgeyBraW5kID0gQ0xBU1NfT05MWTsgfQoKICAgIGlubGluZSBib29sIElzSmF2YSgpICAgICAg
IHsgcmV0dXJuIGtpbmQgPT0gSkFWQTsgfQogICAgaW5saW5lIGJvb2wgSXNDbGFzcygpICAgICAg
eyByZXR1cm4ga2luZCA+PSBDTEFTUzsgfQogICAgaW5saW5lIGJvb2wgSXNDbGFzc09ubHkoKSAg
eyByZXR1cm4ga2luZCA9PSBDTEFTU19PTkxZOyB9CgogICAgUGF0aFN5bWJvbCAqUGF0aFN5bSgp
CiAgICB7CiAgICAgICAgcmV0dXJuIGRpcmVjdG9yeV9zeW1ib2wgLT4gUGF0aFN5bSgpOwogICAg
fQogICAgaW5saW5lIGJvb2wgSXNaaXAoKSB7IHJldHVybiBQYXRoU3ltKCkgLT4gSXNaaXAoKTsg
fQogICAgaW5saW5lIFppcCAqWmlwZmlsZSgpIHsgcmV0dXJuIFBhdGhTeW0oKSAtPiB6aXBmaWxl
OyB9CgogICAgc3RhdGljIGNoYXIgKmphdmFfc3VmZml4OwogICAgc3RhdGljIGludCBqYXZhX3N1
ZmZpeF9sZW5ndGg7CiAgICBzdGF0aWMgY2hhciAqY2xhc3Nfc3VmZml4OwogICAgc3RhdGljIGlu
dCBjbGFzc19zdWZmaXhfbGVuZ3RoOwogICAgc3RhdGljIGlubGluZSBib29sIElzSmF2YVN1ZmZp
eChjaGFyICpwdHIpOwogICAgc3RhdGljIGlubGluZSBib29sIElzQ2xhc3NTdWZmaXgoY2hhciAq
cHRyKTsKCiAgICBpbmxpbmUgY2hhciAqRmlsZU5hbWUoKQogICAgewogICAgICAgIGlmICghIGZp
bGVfbmFtZSkKICAgICAgICAgICAgU2V0RmlsZU5hbWUoKTsKICAgICAgICByZXR1cm4gZmlsZV9u
YW1lOwogICAgfQogICAgaW5saW5lIGludCBGaWxlTmFtZUxlbmd0aCgpCiAgICB7CiAgICAgICAg
aWYgKCEgZmlsZV9uYW1lKQogICAgICAgICAgICBTZXRGaWxlTmFtZSgpOwogICAgICAgIHJldHVy
biBmaWxlX25hbWVfbGVuZ3RoOwogICAgfQoKICAgIGlubGluZSBVdGY4TGl0ZXJhbFZhbHVlICpG
aWxlTmFtZUxpdGVyYWwoKSB7IChzdGF0aWNfY2FzdDx2b2lkPiAgKCggZmlsZV9uYW1lX2xpdGVy
YWwgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImZpbGVfbmFtZV9saXRlcmFsIiAsICIuLi8uLi9q
aWtlcy9zcmMvc3ltYm9sLmgiLCAyNzYsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7IHJl
dHVybiBmaWxlX25hbWVfbGl0ZXJhbDsgfQoKICAgIHZvaWQgU2V0RmlsZU5hbWVMaXRlcmFsKENv
bnRyb2wgKik7CgogICAgRGlyZWN0b3J5U3ltYm9sICpPdXRwdXREaXJlY3RvcnkoKTsKCiAgICB2
b2lkIFNldEZpbGVOYW1lKCk7CgogICAgdm9pZCBDbGVhblVwKCk7CgogICAgdm9pZCBSZXNldCgp
CiAgICB7CiAgICAgICAgQ2xlYW5VcCgpOwoKICAgICAgICBkZWxldGUgW10gZmlsZV9uYW1lOwog
ICAgICAgIGZpbGVfbmFtZSA9IF9fbnVsbCA7CiAgICAgICAgdHlwZXMuUmVzZXQoKTsKICAgIH0K
fTsKCgpjbGFzcyBGaWxlTG9jYXRpb24KewpwdWJsaWM6CiAgICB3Y2hhcl90ICpsb2NhdGlvbjsK
CiAgICBGaWxlTG9jYXRpb24gKExleFN0cmVhbSAqbGV4X3N0cmVhbSwgTGV4U3RyZWFtOjpUb2tl
bkluZGV4IHRva2VuX2luZGV4KQogICAgewogICAgICAgIGNoYXIgKmZpbGVfbmFtZSA9IGxleF9z
dHJlYW0gLT4gRmlsZU5hbWUoKTsKICAgICAgICBpbnQgbGVuZ3RoID0gbGV4X3N0cmVhbSAtPiBG
aWxlTmFtZUxlbmd0aCgpOwogICAgICAgIGxvY2F0aW9uID0gbmV3IHdjaGFyX3RbbGVuZ3RoICsg
MTNdOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAg
ICAgbG9jYXRpb25baV0gPSAod2NoYXJfdCkgZmlsZV9uYW1lW2ldOwogICAgICAgIH0KICAgICAg
ICBsb2NhdGlvbltsZW5ndGgrK10gPSBVX0NPTE9OOwoKICAgICAgICBJbnRUb1dzdHJpbmcgbGlu
ZV9ubyhsZXhfc3RyZWFtIC0+IExpbmUodG9rZW5faW5kZXgpKTsKCiAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPCBsaW5lX25vLkxlbmd0aCgpOyBqKyspCiAgICAgICAgICAgIGxvY2F0aW9uW2xl
bmd0aCsrXSA9IGxpbmVfbm8uU3RyaW5nKClbal07CiAgICAgICAgbG9jYXRpb25bbGVuZ3RoXSA9
IFVfTlVMTDsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIEZpbGVMb2NhdGlvbiAoRmlsZVN5
bWJvbCAqZmlsZV9zeW1ib2wpCiAgICB7CiAgICAgICAgY2hhciAqZmlsZV9uYW1lID0gZmlsZV9z
eW1ib2wgLT4gRmlsZU5hbWUoKTsKICAgICAgICBpbnQgbGVuZ3RoID0gZmlsZV9zeW1ib2wgLT4g
RmlsZU5hbWVMZW5ndGgoKTsKICAgICAgICBsb2NhdGlvbiA9IG5ldyB3Y2hhcl90W2xlbmd0aCAr
IDEzXTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAg
ICAgIGxvY2F0aW9uW2ldID0gKHdjaGFyX3QpIGZpbGVfbmFtZVtpXTsKICAgICAgICB9CiAgICAg
ICAgbG9jYXRpb25bbGVuZ3RoXSA9IFVfTlVMTDsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAg
IH5GaWxlTG9jYXRpb24oKQogICAgewogICAgICAgIGRlbGV0ZSBbXSBsb2NhdGlvbjsKICAgIH0K
fTsKCgpjbGFzcyBQYWNrYWdlU3ltYm9sIDogcHVibGljIFN5bWJvbAp7CnB1YmxpYzoKICAgIFR1
cGxlPERpcmVjdG9yeVN5bWJvbCAqPiBkaXJlY3Rvcnk7CiAgICBQYWNrYWdlU3ltYm9sICpvd25l
cjsKCiAgICBQYWNrYWdlU3ltYm9sKE5hbWVTeW1ib2wgKm5hbWVfc3ltYm9sXywgUGFja2FnZVN5
bWJvbCAqb3duZXJfKSA6IGRpcmVjdG9yeSg0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIob3duZXJfKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZV9zeW1ib2wobmFtZV9zeW1ib2xfKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUo
X19udWxsICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfbmFtZShfX251bGwgKQogICAgewogICAgICAg
IFN5bWJvbDo6X2tpbmQgPSBQQUNLQUdFOwogICAgfQoKICAgIHZpcnR1YWwgflBhY2thZ2VTeW1i
b2woKTsKCiAgICB2aXJ0dWFsIHdjaGFyX3QgKk5hbWUoKSB7IHJldHVybiBuYW1lX3N5bWJvbCAt
PiBOYW1lKCk7IH0KICAgIHZpcnR1YWwgc2l6ZV90IE5hbWVMZW5ndGgoKSB7IHJldHVybiBuYW1l
X3N5bWJvbCAtPiBOYW1lTGVuZ3RoKCk7IH0KICAgIHZpcnR1YWwgTmFtZVN5bWJvbCAqSWRlbnRp
dHkoKSB7IHJldHVybiBuYW1lX3N5bWJvbDsgfQogICAgY2hhciAqVXRmOE5hbWUoKSB7IHJldHVy
biAoY2hhciAqKSAobmFtZV9zeW1ib2wgLT4gVXRmOF9saXRlcmFsID8gbmFtZV9zeW1ib2wgLT4g
VXRmOF9saXRlcmFsIC0+IHZhbHVlIDogX19udWxsICk7IH0KICAgIGludCBVdGY4TmFtZUxlbmd0
aCgpIHsgcmV0dXJuIChuYW1lX3N5bWJvbCAtPiBVdGY4X2xpdGVyYWwgPyBuYW1lX3N5bWJvbCAt
PiBVdGY4X2xpdGVyYWwgLT4gbGVuZ3RoIDogMCk7IH0KICAgICAKCiAgICB2b2lkIFNldFBhY2th
Z2VOYW1lKCk7CiAgICAgCiAgICB3Y2hhcl90ICpQYWNrYWdlTmFtZSgpCiAgICB7CiAgICAgICAg
aWYgKCEgcGFja2FnZV9uYW1lKQogICAgICAgICAgICBTZXRQYWNrYWdlTmFtZSgpOwogICAgICAg
IHJldHVybiBwYWNrYWdlX25hbWU7CiAgICB9CiAgICBpbnQgUGFja2FnZU5hbWVMZW5ndGgoKQog
ICAgewogICAgICAgIGlmICghIHBhY2thZ2VfbmFtZSkKICAgICAgICAgICAgU2V0UGFja2FnZU5h
bWUoKTsKICAgICAgICByZXR1cm4gcGFja2FnZV9uYW1lX2xlbmd0aDsKICAgIH0KCiAgICBpbmxp
bmUgUGFja2FnZVN5bWJvbCAqRmluZFBhY2thZ2VTeW1ib2woTmFtZVN5bWJvbCAqKTsKICAgIGlu
bGluZSBQYWNrYWdlU3ltYm9sICpJbnNlcnRQYWNrYWdlU3ltYm9sKE5hbWVTeW1ib2wgKik7Cgog
ICAgaW5saW5lIFR5cGVTeW1ib2wgKkZpbmRUeXBlU3ltYm9sKE5hbWVTeW1ib2wgKik7CiAgICBp
bmxpbmUgVHlwZVN5bWJvbCAqSW5zZXJ0U3lzdGVtVHlwZVN5bWJvbChOYW1lU3ltYm9sICopOwog
ICAgaW5saW5lIFR5cGVTeW1ib2wgKkluc2VydE91dGVyVHlwZVN5bWJvbChOYW1lU3ltYm9sICop
OwogICAgaW5saW5lIHZvaWQgRGVsZXRlVHlwZVN5bWJvbChUeXBlU3ltYm9sICopOwoKcHJpdmF0
ZToKCiAgICBOYW1lU3ltYm9sICpuYW1lX3N5bWJvbDsKICAgIFN5bWJvbFRhYmxlICp0YWJsZTsK
ICAgIGlubGluZSBTeW1ib2xUYWJsZSAqVGFibGUoKTsKCiAgICB3Y2hhcl90ICpwYWNrYWdlX25h
bWU7CiAgICBzaXplX3QgcGFja2FnZV9uYW1lX2xlbmd0aDsKfTsKCgpjbGFzcyBNZXRob2RTeW1i
b2wgOiBwdWJsaWMgU3ltYm9sLCBwdWJsaWMgQWNjZXNzRmxhZ3MKewpwdWJsaWM6CiAgICBBc3Qg
Km1ldGhvZF9vcl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbjsgIAogICAgTmFtZVN5bWJvbCAqbmFt
ZV9zeW1ib2w7CiAgICBUeXBlU3ltYm9sICpjb250YWluaW5nX3R5cGU7CiAgICBCbG9ja1N5bWJv
bCAqYmxvY2tfc3ltYm9sOwogICAgTWV0aG9kU3ltYm9sICpuZXh0X21ldGhvZDsKICAgIFV0ZjhM
aXRlcmFsVmFsdWUgKnNpZ25hdHVyZTsKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAg
ICAgCiAgICBpbnQgTnVtSW5pdGlhbGl6ZXJDb25zdHJ1Y3RvcnMoKQogICAgewogICAgICAgIHJl
dHVybiAoaW5pdGlhbGl6ZXJfY29uc3RydWN0b3JzID8gaW5pdGlhbGl6ZXJfY29uc3RydWN0b3Jz
IC0+IExlbmd0aCgpIDogMCk7CiAgICB9CiAgICBNZXRob2RTeW1ib2wgKkluaXRpYWxpemVyQ29u
c3RydWN0b3IoaW50IGkpCiAgICB7CiAgICAgICAgcmV0dXJuICgqaW5pdGlhbGl6ZXJfY29uc3Ry
dWN0b3JzKVtpXTsKICAgIH0KICAgIHZvaWQgQWRkSW5pdGlhbGl6ZXJDb25zdHJ1Y3RvcihNZXRo
b2RTeW1ib2wgKm1ldGhvZCkKICAgIHsKICAgICAgICBpZiAoISBpbml0aWFsaXplcl9jb25zdHJ1
Y3RvcnMpCiAgICAgICAgICAgIGluaXRpYWxpemVyX2NvbnN0cnVjdG9ycyA9IG5ldyBUdXBsZTxN
ZXRob2RTeW1ib2wgKj4oOCk7CiAgICAgICAgaW5pdGlhbGl6ZXJfY29uc3RydWN0b3JzIC0+IE5l
eHQoKSA9IG1ldGhvZDsKICAgIH0KCiAgICBpbnQgbWF4X2Jsb2NrX2RlcHRoOwoKICAgICAKICAg
ICAKICAgICAKICAgICAKICAgIFN5bWJvbCAqYWNjZXNzZWRfbWVtYmVyOwoKICAgIHZpcnR1YWwg
d2NoYXJfdCAqTmFtZSgpIHsgcmV0dXJuIG5hbWVfc3ltYm9sIC0+IE5hbWUoKTsgfQogICAgdmly
dHVhbCBzaXplX3QgTmFtZUxlbmd0aCgpIHsgcmV0dXJuIG5hbWVfc3ltYm9sIC0+IE5hbWVMZW5n
dGgoKTsgfQogICAgdmlydHVhbCBOYW1lU3ltYm9sICpJZGVudGl0eSgpIHsgcmV0dXJuIG5hbWVf
c3ltYm9sOyB9CiAgICBjaGFyICpVdGY4TmFtZSgpIHsgcmV0dXJuIChjaGFyICopIChuYW1lX3N5
bWJvbCAtPiBVdGY4X2xpdGVyYWwgPyBuYW1lX3N5bWJvbCAtPiBVdGY4X2xpdGVyYWwgLT4gdmFs
dWUgOiBfX251bGwgKTsgfQogICAgaW50IFV0ZjhOYW1lTGVuZ3RoKCkgeyByZXR1cm4gKG5hbWVf
c3ltYm9sIC0+IFV0ZjhfbGl0ZXJhbCA/IG5hbWVfc3ltYm9sIC0+IFV0ZjhfbGl0ZXJhbCAtPiBs
ZW5ndGggOiAwKTsgfQoKICAgIE1ldGhvZFN5bWJvbChOYW1lU3ltYm9sICpuYW1lX3N5bWJvbF8p
IDogbWV0aG9kX29yX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uKF9fbnVsbCApLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3N5bWJvbChuYW1lX3N5bWJv
bF8pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlu
aW5nX3R5cGUoX19udWxsICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJsb2NrX3N5bWJvbChfX251bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV4dF9tZXRob2QoX19udWxsICksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZShfX251bGwgKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2Jsb2NrX2RlcHRoKDEpLCAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
Y2Nlc3NlZF9tZW1iZXIoX19udWxsICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4dGVybmFsX25hbWVfc3ltYm9sKF9fbnVsbCApLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMoMCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcihfX251bGwgKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV8oX19udWxsICksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJz
KF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aHJvd3MoX19udWxsICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93c19zaWduYXR1cmVzKF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplcl9jb25zdHJ1Y3RvcnMoX19udWxsICksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2NvbnN0cnVj
dG9yKF9fbnVsbCApCiAgICB7CiAgICAgICAgU3ltYm9sOjpfa2luZCA9IE1FVEhPRDsKICAgIH0K
CiAgICB2aXJ0dWFsIH5NZXRob2RTeW1ib2woKTsKCiAgICBib29sIElzRmluYWwoKTsKCiAgICBi
b29sIElzVHlwZWQoKQogICAgewogICAgICAgIHJldHVybiB0eXBlXyAhPSBfX251bGwgOwogICAg
fQoKICAgIHZvaWQgU2V0VHlwZShUeXBlU3ltYm9sICpfdHlwZSkKICAgIHsKICAgICAgICB0eXBl
XyA9IF90eXBlOwogICAgfQoKICAgIHZvaWQgUHJvY2Vzc01ldGhvZFNpZ25hdHVyZShTZW1hbnRp
YyAqLCBMZXhTdHJlYW06OlRva2VuSW5kZXgpOwogICAgdm9pZCBQcm9jZXNzTWV0aG9kVGhyb3dz
KFNlbWFudGljICosIExleFN0cmVhbTo6VG9rZW5JbmRleCk7CgogICAgVHlwZVN5bWJvbCAqVHlw
ZSgpCiAgICB7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCB0eXBlXyApID8gMCA6CShf
X2Fzc2VydF9mYWlsICgidHlwZV8iICwgIi4uLy4uL2ppa2VzL3NyYy9zeW1ib2wuaCIsIDQ4NSwg
X19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsgIAogICAgICAgICAgICAgICAgICAgICAgICAK
CiAgICAgICAgcmV0dXJuIHR5cGVfOwogICAgfQoKICAgIGludCBOdW1Gb3JtYWxQYXJhbWV0ZXJz
KCkKICAgIHsKICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIHR5cGVfICkgPyAwIDoJKF9f
YXNzZXJ0X2ZhaWwgKCJ0eXBlXyIgLCAiLi4vLi4vamlrZXMvc3JjL3N5bWJvbC5oIiwgNDkzLCBf
X1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgICAgICByZXR1cm4gKGZvcm1hbF9wYXJh
bWV0ZXJzID8gZm9ybWFsX3BhcmFtZXRlcnMgLT4gTGVuZ3RoKCkgOiAwKTsKICAgIH0KICAgIFZh
cmlhYmxlU3ltYm9sICpGb3JtYWxQYXJhbWV0ZXIoaW50IGkpCiAgICB7CiAgICAgICAgcmV0dXJu
ICgqZm9ybWFsX3BhcmFtZXRlcnMpW2ldOwogICAgfQogICAgdm9pZCBBZGRGb3JtYWxQYXJhbWV0
ZXIoVmFyaWFibGVTeW1ib2wgKnZhcmlhYmxlKQogICAgewogICAgICAgIGlmICghIGZvcm1hbF9w
YXJhbWV0ZXJzKQogICAgICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IG5ldyBUdXBsZTxWYXJp
YWJsZVN5bWJvbCAqPig4KTsKICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyAtPiBOZXh0KCkgPSB2
YXJpYWJsZTsKICAgIH0KCiAgICBpbnQgTnVtVGhyb3dzKCkKICAgIHsKICAgICAgICAoc3RhdGlj
X2Nhc3Q8dm9pZD4gICgoICEgdGhyb3dzX3NpZ25hdHVyZXMgKSA/IDAgOgkoX19hc3NlcnRfZmFp
bCAoIiEgdGhyb3dzX3NpZ25hdHVyZXMiICwgIi4uLy4uL2ppa2VzL3NyYy9zeW1ib2wuaCIsIDUx
MCwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICAgICAgcmV0dXJuICh0aHJvd3Mg
PyB0aHJvd3MgLT4gTGVuZ3RoKCkgOiAwKTsKICAgIH0KICAgIFR5cGVTeW1ib2wgKlRocm93cyhp
bnQgaSkKICAgIHsKICAgICAgICByZXR1cm4gKCp0aHJvd3MpW2ldOwogICAgfQogICAgdm9pZCBB
ZGRUaHJvd3MoVHlwZVN5bWJvbCAqZXhjZXB0aW9uKQogICAgewogICAgICAgIGlmICghIHRocm93
cykKICAgICAgICAgICAgdGhyb3dzID0gbmV3IFR1cGxlPFR5cGVTeW1ib2wgKj4oOCk7CiAgICAg
ICAgdGhyb3dzIC0+IE5leHQoKSA9IGV4Y2VwdGlvbjsKICAgIH0KCiAgICBpbnQgTnVtVGhyb3dz
U2lnbmF0dXJlcygpCiAgICB7CiAgICAgICAgcmV0dXJuICh0aHJvd3Nfc2lnbmF0dXJlcyA/IHRo
cm93c19zaWduYXR1cmVzIC0+IExlbmd0aCgpIDogMCk7CiAgICB9CiAgICBjaGFyICpUaHJvd3NT
aWduYXR1cmUoaW50IGkpCiAgICB7CiAgICAgICAgcmV0dXJuICgqdGhyb3dzX3NpZ25hdHVyZXMp
W2ldOwogICAgfQogICAgdm9pZCBBZGRUaHJvd3NTaWduYXR1cmUoY29uc3QgY2hhciAqc2lnbmF0
dXJlXywgaW50IGxlbmd0aCkKICAgIHsKICAgICAgICBjaGFyICpzaWduYXR1cmUgPSBuZXcgY2hh
cltsZW5ndGggKyAxXTsKICAgICAgICBzdHJuY3B5KHNpZ25hdHVyZSwgc2lnbmF0dXJlXywgbGVu
Z3RoKTsKICAgICAgICBzaWduYXR1cmVbbGVuZ3RoXSA9IFVfTlVMTDsKCiAgICAgICAgaWYgKCEg
dGhyb3dzX3NpZ25hdHVyZXMpCiAgICAgICAgICAgIHRocm93c19zaWduYXR1cmVzID0gbmV3IFR1
cGxlPGNoYXIgKj4oOCk7CiAgICAgICAgdGhyb3dzX3NpZ25hdHVyZXMgLT4gTmV4dCgpID0gc2ln
bmF0dXJlOwogICAgfQoKICAgIHZvaWQgU2V0R2VuZXJhdGVkTG9jYWxDb25zdHJ1Y3RvcihNZXRo
b2RTeW1ib2wgKmJhc2VfbWV0aG9kKQogICAgewogICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAg
KCggISBiYXNlX21ldGhvZCAtPiBsb2NhbF9jb25zdHJ1Y3RvciApID8gMCA6CShfX2Fzc2VydF9m
YWlsICgiISBiYXNlX21ldGhvZCAtPiBsb2NhbF9jb25zdHJ1Y3RvciIgLCAiLi4vLi4vamlrZXMv
c3JjL3N5bWJvbC5oIiwgNTQ2LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgICAg
ICBiYXNlX21ldGhvZCAtPiBsb2NhbF9jb25zdHJ1Y3RvciA9IHRoaXM7CiAgICAgICAgdGhpcyAt
PiBsb2NhbF9jb25zdHJ1Y3RvciA9IGJhc2VfbWV0aG9kOwogICAgfQogICAgYm9vbCBJc0dlbmVy
YXRlZExvY2FsQ29uc3RydWN0b3IoKSB7IHJldHVybiAoKGxvY2FsX2NvbnN0cnVjdG9yICE9IF9f
bnVsbCApICYmICh0aGlzIC0+IGV4dGVybmFsX25hbWVfc3ltYm9sID09IF9fbnVsbCApKTsgfQog
ICAgTWV0aG9kU3ltYm9sICpMb2NhbENvbnN0cnVjdG9yKCkgIHsgcmV0dXJuIGxvY2FsX2NvbnN0
cnVjdG9yOyB9CgogICAgdm9pZCBTZXRFeHRlcm5hbElkZW50aXR5KE5hbWVTeW1ib2wgKmV4dGVy
bmFsX25hbWVfc3ltYm9sXykgeyBleHRlcm5hbF9uYW1lX3N5bWJvbCA9IGV4dGVybmFsX25hbWVf
c3ltYm9sXzsgfQogICAgTmFtZVN5bWJvbCAqRXh0ZXJuYWxJZGVudGl0eSgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIChleHRlcm5hbF9uYW1lX3N5bWJvbCA/IGV4dGVybmFsX25hbWVfc3ltYm9sIDog
bmFtZV9zeW1ib2wpOwogICAgfQogICAgd2NoYXJfdCAqRXh0ZXJuYWxOYW1lKCkKICAgIHsKICAg
ICAgICByZXR1cm4gKGV4dGVybmFsX25hbWVfc3ltYm9sID8gZXh0ZXJuYWxfbmFtZV9zeW1ib2wg
LT4gTmFtZSgpIDogbmFtZV9zeW1ib2wgLT4gTmFtZSgpKTsKICAgIH0KICAgIGludCBFeHRlcm5h
bE5hbWVMZW5ndGgoKQogICAgewogICAgICAgIHJldHVybiAoZXh0ZXJuYWxfbmFtZV9zeW1ib2wg
PyBleHRlcm5hbF9uYW1lX3N5bWJvbCAtPiBOYW1lTGVuZ3RoKCkgOiBuYW1lX3N5bWJvbCAtPiBO
YW1lTGVuZ3RoKCkpOwogICAgfQogICAgY2hhciAqRXh0ZXJuYWxVdGY4TmFtZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIChjaGFyICopIChleHRlcm5hbF9uYW1lX3N5bWJvbCA/IGV4dGVybmFsX25h
bWVfc3ltYm9sIC0+IFV0ZjhfbGl0ZXJhbCAtPiB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiAobmFtZV9zeW1ib2wgLT4gVXRmOF9saXRlcmFsID8g
bmFtZV9zeW1ib2wgLT4gVXRmOF9saXRlcmFsIC0+IHZhbHVlIDogX19udWxsICkpOwogICAgfQog
ICAgaW50IEV4dGVybmFsVXRmOE5hbWVMZW5ndGgoKQogICAgewogICAgICAgIHJldHVybiAoZXh0
ZXJuYWxfbmFtZV9zeW1ib2wgPyAoZXh0ZXJuYWxfbmFtZV9zeW1ib2wgLT4gVXRmOF9saXRlcmFs
ID8gZXh0ZXJuYWxfbmFtZV9zeW1ib2wgLT4gVXRmOF9saXRlcmFsIC0+IGxlbmd0aCA6IDApCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChuYW1lX3N5bWJvbCAtPiBVdGY4
X2xpdGVyYWwgPyBuYW1lX3N5bWJvbCAtPiBVdGY4X2xpdGVyYWwgLT4gbGVuZ3RoIDogMCkpOwog
ICAgfQoKICAgIHZvaWQgU2V0Q29udGFpbmluZ1R5cGUoVHlwZVN5bWJvbCAqY29udGFpbmluZ190
eXBlXykgeyBjb250YWluaW5nX3R5cGUgPSBjb250YWluaW5nX3R5cGVfOyB9CiAgICB2b2lkIFNl
dEJsb2NrU3ltYm9sKEJsb2NrU3ltYm9sICpibG9ja19zeW1ib2xfKSB7IGJsb2NrX3N5bWJvbCA9
IGJsb2NrX3N5bWJvbF87IH0KICAgIHZvaWQgU2V0U2lnbmF0dXJlKENvbnRyb2wgJiwgVmFyaWFi
bGVTeW1ib2wgKiA9IF9fbnVsbCApOwogICAgdm9pZCBTZXRTaWduYXR1cmUoVXRmOExpdGVyYWxW
YWx1ZSAqc2lnbmF0dXJlXykgeyBzaWduYXR1cmUgPSBzaWduYXR1cmVfOyB9CiAgICBjaGFyICpT
aWduYXR1cmVTdHJpbmcoKSB7IHJldHVybiBzaWduYXR1cmUgLT4gdmFsdWU7IH0KICAgIHdjaGFy
X3QgKkhlYWRlcigpOwoKICAgIHZvaWQgQ2xlYW5VcCgpOwoKICAgIHZvaWQgTWFya1N5bnRoZXRp
YygpIHsgc3RhdHVzIHw9ICh1bnNpZ25lZCBjaGFyKSAweDA4OyB9CiAgICBib29sIElzU3ludGhl
dGljKCkgICB7IHJldHVybiAoc3RhdHVzICYgKHVuc2lnbmVkIGNoYXIpIDB4MDgpICE9IDA7IH0K
CiAgICB2b2lkIE1hcmtEZXByZWNhdGVkKCkgeyBzdGF0dXMgfD0gKHVuc2lnbmVkIGNoYXIpIDB4
MTA7IH0KICAgIGJvb2wgSXNEZXByZWNhdGVkKCkgICB7IHJldHVybiAoc3RhdHVzICYgKHVuc2ln
bmVkIGNoYXIpIDB4MTApICE9IDA7IH0KCnByaXZhdGU6CiAgICBOYW1lU3ltYm9sICpleHRlcm5h
bF9uYW1lX3N5bWJvbDsKCiAgICB1bnNpZ25lZCBjaGFyIHN0YXR1czsKICAgIHdjaGFyX3QgKmhl
YWRlcjsKCiAgICBUeXBlU3ltYm9sICp0eXBlXzsKICAgIFR1cGxlPFZhcmlhYmxlU3ltYm9sICo+
ICpmb3JtYWxfcGFyYW1ldGVyczsKICAgIFR1cGxlPFR5cGVTeW1ib2wgKj4gKnRocm93czsKICAg
IFR1cGxlPGNoYXIgKj4gKnRocm93c19zaWduYXR1cmVzOwogICAgVHVwbGU8TWV0aG9kU3ltYm9s
ICo+ICppbml0aWFsaXplcl9jb25zdHJ1Y3RvcnM7CgogICAgIAogICAgIAogICAgIAogICAgIAog
ICAgTWV0aG9kU3ltYm9sICpsb2NhbF9jb25zdHJ1Y3RvcjsKCiAgICBib29sIEFDQ19GSU5BTCgp
CiAgICB7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCAhICJ1c2UgdGhlIEFDQ19GSU5B
TCgpIGZsYWcgb24gYSBtZXRob2Qgc3ltYm9sLiBVc2UgdGhlIGZ1bmN0aW9uIElzRmluYWwoKSBp
bnN0ZWFkIiApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiISBcInVzZSB0aGUgQUNDX0ZJTkFMKCkg
ZmxhZyBvbiBhIG1ldGhvZCBzeW1ib2wuIFVzZSB0aGUgZnVuY3Rpb24gSXNGaW5hbCgpIGluc3Rl
YWRcIiIgLCAiLi4vLi4vamlrZXMvc3JjL3N5bWJvbC5oIiwgNjEzLCBfX1BSRVRUWV9GVU5DVElP
Tl9fICksIDApKSkgOwoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn07CgoKY2xhc3MgVHlw
ZVN5bWJvbCA6IHB1YmxpYyBTeW1ib2wsIHB1YmxpYyBBY2Nlc3NGbGFncwp7CnB1YmxpYzoKICAg
IFNlbWFudGljRW52aXJvbm1lbnQgKnNlbWFudGljX2Vudmlyb25tZW50OwogICAgQXN0ICpkZWNs
YXJhdGlvbjsgICAKICAgIEZpbGVTeW1ib2wgKmZpbGVfc3ltYm9sOwogICAgRmlsZUxvY2F0aW9u
ICpmaWxlX2xvY2F0aW9uOwogICAgTmFtZVN5bWJvbCAqbmFtZV9zeW1ib2w7CiAgICBTeW1ib2wg
Km93bmVyOwogICAgVHlwZVN5bWJvbCAqb3V0ZXJtb3N0X3R5cGU7ICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
VHlwZVN5bWJvbCAqc3VwZXIsCiAgICAgICAgICAgICAgICpiYXNlX3R5cGU7ICAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICBpbnQg
aW5kZXgsICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgdW5pdF9pbmRleCwgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgaW5jcmVtZW50YWxfaW5kZXg7ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAg
IGludCBOdW1Mb2NhbENvbnN0cnVjdG9yQ2FsbEVudmlyb25tZW50cygpIHsgcmV0dXJuIChsb2Nh
bF9jb25zdHJ1Y3Rvcl9jYWxsX2Vudmlyb25tZW50cyA/IGxvY2FsX2NvbnN0cnVjdG9yX2NhbGxf
ZW52aXJvbm1lbnRzIC0+IExlbmd0aCgpIDogMCk7IH0KICAgIFNlbWFudGljRW52aXJvbm1lbnQg
KiZMb2NhbENvbnN0cnVjdG9yQ2FsbEVudmlyb25tZW50KGludCBpKSB7IHJldHVybiAoKmxvY2Fs
X2NvbnN0cnVjdG9yX2NhbGxfZW52aXJvbm1lbnRzKVtpXTsgfQogICAgdm9pZCBBZGRMb2NhbENv
bnN0cnVjdG9yQ2FsbEVudmlyb25tZW50KFNlbWFudGljRW52aXJvbm1lbnQgKmVudmlyb25tZW50
KQogICAgewogICAgICAgIGlmICghIGxvY2FsX2NvbnN0cnVjdG9yX2NhbGxfZW52aXJvbm1lbnRz
KQogICAgICAgICAgICBsb2NhbF9jb25zdHJ1Y3Rvcl9jYWxsX2Vudmlyb25tZW50cyA9IG5ldyBU
dXBsZTxTZW1hbnRpY0Vudmlyb25tZW50ICo+KDgpOwogICAgICAgIGxvY2FsX2NvbnN0cnVjdG9y
X2NhbGxfZW52aXJvbm1lbnRzIC0+IE5leHQoKSA9IGVudmlyb25tZW50OwogICAgfQoKICAgIGlu
dCBOdW1Qcml2YXRlQWNjZXNzTWV0aG9kcygpIHsgcmV0dXJuIChwcml2YXRlX2FjY2Vzc19tZXRo
b2RzID8gcHJpdmF0ZV9hY2Nlc3NfbWV0aG9kcyAtPiBMZW5ndGgoKSA6IDApOyB9CiAgICBNZXRo
b2RTeW1ib2wgKiZQcml2YXRlQWNjZXNzTWV0aG9kKGludCBpKSB7IHJldHVybiAoKnByaXZhdGVf
YWNjZXNzX21ldGhvZHMpW2ldOyB9CiAgICB2b2lkIEFkZFByaXZhdGVBY2Nlc3NNZXRob2QoTWV0
aG9kU3ltYm9sICptZXRob2Rfc3ltYm9sKQogICAgewogICAgICAgIGlmICghIHByaXZhdGVfYWNj
ZXNzX21ldGhvZHMpCiAgICAgICAgICAgIHByaXZhdGVfYWNjZXNzX21ldGhvZHMgPSBuZXcgVHVw
bGU8TWV0aG9kU3ltYm9sICo+KDgpOwogICAgICAgIHByaXZhdGVfYWNjZXNzX21ldGhvZHMgLT4g
TmV4dCgpID0gbWV0aG9kX3N5bWJvbDsKICAgIH0KCiAgICBpbnQgTnVtUHJpdmF0ZUFjY2Vzc0Nv
bnN0cnVjdG9ycygpIHsgcmV0dXJuIChwcml2YXRlX2FjY2Vzc19jb25zdHJ1Y3RvcnMgPyBwcml2
YXRlX2FjY2Vzc19jb25zdHJ1Y3RvcnMgLT4gTGVuZ3RoKCkgOiAwKTsgfQogICAgTWV0aG9kU3lt
Ym9sIComUHJpdmF0ZUFjY2Vzc0NvbnN0cnVjdG9yKGludCBpKSB7IHJldHVybiAoKnByaXZhdGVf
YWNjZXNzX2NvbnN0cnVjdG9ycylbaV07IH0KICAgIHZvaWQgQWRkUHJpdmF0ZUFjY2Vzc0NvbnN0
cnVjdG9yKE1ldGhvZFN5bWJvbCAqY29uc3RydWN0b3Jfc3ltYm9sKQogICAgewogICAgICAgIGlm
ICghIHByaXZhdGVfYWNjZXNzX2NvbnN0cnVjdG9ycykKICAgICAgICAgICAgcHJpdmF0ZV9hY2Nl
c3NfY29uc3RydWN0b3JzID0gbmV3IFR1cGxlPE1ldGhvZFN5bWJvbCAqPig4KTsKICAgICAgICBw
cml2YXRlX2FjY2Vzc19jb25zdHJ1Y3RvcnMgLT4gTmV4dCgpID0gY29uc3RydWN0b3Jfc3ltYm9s
OwogICAgfQoKICAgIGludCBOdW1Db25zdHJ1Y3RvclBhcmFtZXRlcnMoKSB7IHJldHVybiAoY29u
c3RydWN0b3JfcGFyYW1ldGVycyA/IGNvbnN0cnVjdG9yX3BhcmFtZXRlcnMgLT4gTGVuZ3RoKCkg
OiAwKTsgfQogICAgVmFyaWFibGVTeW1ib2wgKiZDb25zdHJ1Y3RvclBhcmFtZXRlcihpbnQgaSkg
eyByZXR1cm4gKCpjb25zdHJ1Y3Rvcl9wYXJhbWV0ZXJzKVtpXTsgfQogICAgdm9pZCBBZGRDb25z
dHJ1Y3RvclBhcmFtZXRlcihWYXJpYWJsZVN5bWJvbCAqdmFyaWFibGVfc3ltYm9sKQogICAgewog
ICAgICAgIGlmICghIGNvbnN0cnVjdG9yX3BhcmFtZXRlcnMpCiAgICAgICAgICAgIGNvbnN0cnVj
dG9yX3BhcmFtZXRlcnMgPSBuZXcgVHVwbGU8VmFyaWFibGVTeW1ib2wgKj4oOCk7CiAgICAgICAg
Y29uc3RydWN0b3JfcGFyYW1ldGVycyAtPiBOZXh0KCkgPSB2YXJpYWJsZV9zeW1ib2w7CiAgICB9
CgogICAgaW50IE51bUdlbmVyYXRlZENvbnN0cnVjdG9ycygpIHsgcmV0dXJuIChnZW5lcmF0ZWRf
Y29uc3RydWN0b3JzID8gZ2VuZXJhdGVkX2NvbnN0cnVjdG9ycyAtPiBMZW5ndGgoKSA6IDApOyB9
CiAgICBNZXRob2RTeW1ib2wgKiZHZW5lcmF0ZWRDb25zdHJ1Y3RvcihpbnQgaSkgeyByZXR1cm4g
KCpnZW5lcmF0ZWRfY29uc3RydWN0b3JzKVtpXTsgfQogICAgdm9pZCBBZGRHZW5lcmF0ZWRDb25z
dHJ1Y3RvcihNZXRob2RTeW1ib2wgKmNvbnN0cnVjdG9yX3N5bWJvbCkKICAgIHsKICAgICAgICBp
ZiAoISBnZW5lcmF0ZWRfY29uc3RydWN0b3JzKQogICAgICAgICAgICBnZW5lcmF0ZWRfY29uc3Ry
dWN0b3JzID0gbmV3IFR1cGxlPE1ldGhvZFN5bWJvbCAqPig4KTsKICAgICAgICBnZW5lcmF0ZWRf
Y29uc3RydWN0b3JzIC0+IE5leHQoKSA9IGNvbnN0cnVjdG9yX3N5bWJvbDsKICAgIH0KCiAgICBp
bnQgTnVtRW5jbG9zaW5nSW5zdGFuY2VzKCkgeyByZXR1cm4gKGVuY2xvc2luZ19pbnN0YW5jZXMg
PyBlbmNsb3NpbmdfaW5zdGFuY2VzIC0+IExlbmd0aCgpIDogMCk7IH0KICAgIFZhcmlhYmxlU3lt
Ym9sIComRW5jbG9zaW5nSW5zdGFuY2UoaW50IGkpIHsgcmV0dXJuICgqZW5jbG9zaW5nX2luc3Rh
bmNlcylbaV07IH0KICAgIHZvaWQgQWRkRW5jbG9zaW5nSW5zdGFuY2UoVmFyaWFibGVTeW1ib2wg
Kmluc3RhbmNlX3N5bWJvbCkKICAgIHsKICAgICAgICBpZiAoISBlbmNsb3NpbmdfaW5zdGFuY2Vz
KQogICAgICAgICAgICBlbmNsb3NpbmdfaW5zdGFuY2VzID0gbmV3IFR1cGxlPFZhcmlhYmxlU3lt
Ym9sICo+KDgpOwogICAgICAgIGVuY2xvc2luZ19pbnN0YW5jZXMgLT4gTmV4dCgpID0gaW5zdGFu
Y2Vfc3ltYm9sOwogICAgfQoKICAgIGludCBOdW1DbGFzc0xpdGVyYWxzKCkgeyByZXR1cm4gKGNs
YXNzX2xpdGVyYWxzID8gY2xhc3NfbGl0ZXJhbHMgLT4gTGVuZ3RoKCkgOiAwKTsgfQogICAgVmFy
aWFibGVTeW1ib2wgKiZDbGFzc0xpdGVyYWwoaW50IGkpIHsgcmV0dXJuICgqY2xhc3NfbGl0ZXJh
bHMpW2ldOyB9CiAgICB2b2lkIEFkZENsYXNzTGl0ZXJhbChWYXJpYWJsZVN5bWJvbCAqbGl0ZXJh
bF9zeW1ib2wpCiAgICB7CiAgICAgICAgaWYgKCEgY2xhc3NfbGl0ZXJhbHMpCiAgICAgICAgICAg
IGNsYXNzX2xpdGVyYWxzID0gbmV3IFR1cGxlPFZhcmlhYmxlU3ltYm9sICo+KDgpOwogICAgICAg
IGNsYXNzX2xpdGVyYWxzIC0+IE5leHQoKSA9IGxpdGVyYWxfc3ltYm9sOwogICAgfQoKICAgIGlu
dCBOdW1OZXN0ZWRUeXBlcygpIHsgcmV0dXJuIChuZXN0ZWRfdHlwZXMgPyBuZXN0ZWRfdHlwZXMg
LT4gTGVuZ3RoKCkgOiAwKTsgfQogICAgVHlwZVN5bWJvbCAqJk5lc3RlZFR5cGUoaW50IGkpIHsg
cmV0dXJuICgqbmVzdGVkX3R5cGVzKVtpXTsgfQogICAgdm9pZCBBZGROZXN0ZWRUeXBlKFR5cGVT
eW1ib2wgKnR5cGVfc3ltYm9sKQogICAgewogICAgICAgIGlmICghIG5lc3RlZF90eXBlcykKICAg
ICAgICAgICAgbmVzdGVkX3R5cGVzID0gbmV3IFR1cGxlPFR5cGVTeW1ib2wgKj4oOCk7CiAgICAg
ICAgbmVzdGVkX3R5cGVzIC0+IE5leHQoKSA9IHR5cGVfc3ltYm9sOwogICAgfQoKICAgIGludCBO
dW1JbnRlcmZhY2VzKCkgeyByZXR1cm4gKGludGVyZmFjZXMgPyBpbnRlcmZhY2VzIC0+IExlbmd0
aCgpIDogMCk7IH0KICAgIHZvaWQgUmVzZXRJbnRlcmZhY2VzKCkKICAgIHsKICAgICAgICBkZWxl
dGUgaW50ZXJmYWNlczsKICAgICAgICBpbnRlcmZhY2VzID0gX19udWxsIDsKICAgIH0KICAgIFR5
cGVTeW1ib2wgKkludGVyZmFjZShpbnQgaSkgeyByZXR1cm4gKCppbnRlcmZhY2VzKVtpXTsgfQog
ICAgdm9pZCBBZGRJbnRlcmZhY2UoVHlwZVN5bWJvbCAqdHlwZV9zeW1ib2wpCiAgICB7CiAgICAg
ICAgaWYgKCEgaW50ZXJmYWNlcykKICAgICAgICAgICAgaW50ZXJmYWNlcyA9IG5ldyBUdXBsZTxU
eXBlU3ltYm9sICo+KDgpOwogICAgICAgIGludGVyZmFjZXMgLT4gTmV4dCgpID0gdHlwZV9zeW1i
b2w7CiAgICB9CgogICAgaW50IG51bV9hbm9ueW1vdXNfdHlwZXMoKSB7IHJldHVybiAoYW5vbnlt
b3VzX3R5cGVzID8gYW5vbnltb3VzX3R5cGVzIC0+IExlbmd0aCgpIDogMCk7IH0KICAgIFR5cGVT
eW1ib2wgKiZBbm9ueW1vdXNUeXBlKGludCBpKSB7IHJldHVybiAoKmFub255bW91c190eXBlcylb
aV07IH0KICAgIHZvaWQgQWRkQW5vbnltb3VzVHlwZShUeXBlU3ltYm9sICp0eXBlX3N5bWJvbCkK
ICAgIHsKICAgICAgICBpZiAoISBhbm9ueW1vdXNfdHlwZXMpCiAgICAgICAgICAgIGFub255bW91
c190eXBlcyA9IG5ldyBUdXBsZTxUeXBlU3ltYm9sICo+KDgpOwogICAgICAgIGFub255bW91c190
eXBlcyAtPiBOZXh0KCkgPSB0eXBlX3N5bWJvbDsKICAgIH0KICAgIHZvaWQgRGVsZXRlQW5vbnlt
b3VzVHlwZXMoKTsKCiAgICBTeW1ib2xTZXQgKmxvY2FsLAogICAgICAgICAgICAgICpub25fbG9j
YWw7CgogICAgU3ltYm9sU2V0ICpzdXBlcnR5cGVzX2Nsb3N1cmUsCiAgICAgICAgICAgICAgKnN1
YnR5cGVzLAogICAgICAgICAgICAgICpzdWJ0eXBlc19jbG9zdXJlLAogICAgICAgICAgICAgICpp
bm5lcnR5cGVzX2Nsb3N1cmU7CgogICAgU3ltYm9sU2V0ICpkZXBlbmRlbnRzLAogICAgICAgICAg
ICAgICpwYXJlbnRzLAogICAgICAgICAgICAgICpzdGF0aWNfcGFyZW50cywKICAgICAgICAgICAg
ICAqZGVwZW5kZW50c19jbG9zdXJlLCAgIAogICAgICAgICAgICAgICpwYXJlbnRzX2Nsb3N1cmU7
ICAgICAgCgogICAgaW50IHBvb2xfaW5kZXg7ICAKCiAgICBVdGY4TGl0ZXJhbFZhbHVlICpzaWdu
YXR1cmU7CiAgICBVdGY4TGl0ZXJhbFZhbHVlICpmdWxseV9xdWFsaWZpZWRfbmFtZTsKCiAgICBF
eHBhbmRlZFR5cGVUYWJsZSAqZXhwYW5kZWRfdHlwZV90YWJsZTsKICAgIEV4cGFuZGVkRmllbGRU
YWJsZSAqZXhwYW5kZWRfZmllbGRfdGFibGU7CiAgICBFeHBhbmRlZE1ldGhvZFRhYmxlICpleHBh
bmRlZF9tZXRob2RfdGFibGU7CgogICAgaW50IG51bV9kaW1lbnNpb25zOwoKICAgIE1ldGhvZFN5
bWJvbCAqc3RhdGljX2luaXRpYWxpemVyX21ldGhvZDsKICAgIE1ldGhvZFN5bWJvbCAqYmxvY2tf
aW5pdGlhbGl6ZXJfbWV0aG9kOwoKICAgIHZpcnR1YWwgd2NoYXJfdCAqTmFtZSgpIHsgcmV0dXJu
IG5hbWVfc3ltYm9sIC0+IE5hbWUoKTsgfQogICAgdmlydHVhbCBzaXplX3QgTmFtZUxlbmd0aCgp
IHsgcmV0dXJuIG5hbWVfc3ltYm9sIC0+IE5hbWVMZW5ndGgoKTsgfQogICAgdmlydHVhbCBOYW1l
U3ltYm9sICpJZGVudGl0eSgpIHsgcmV0dXJuIG5hbWVfc3ltYm9sOyB9CiAgICBjaGFyICpVdGY4
TmFtZSgpIHsgcmV0dXJuIChjaGFyICopIChuYW1lX3N5bWJvbCAtPiBVdGY4X2xpdGVyYWwgPyBu
YW1lX3N5bWJvbCAtPiBVdGY4X2xpdGVyYWwgLT4gdmFsdWUgOiBfX251bGwgKTsgfQogICAgaW50
IFV0ZjhOYW1lTGVuZ3RoKCkgeyByZXR1cm4gKG5hbWVfc3ltYm9sIC0+IFV0ZjhfbGl0ZXJhbCA/
IG5hbWVfc3ltYm9sIC0+IFV0ZjhfbGl0ZXJhbCAtPiBsZW5ndGggOiAwKTsgfQoKCiAgICB2b2lk
IFNldEV4dGVybmFsSWRlbnRpdHkoTmFtZVN5bWJvbCAqZXh0ZXJuYWxfbmFtZV9zeW1ib2xfKSB7
IGV4dGVybmFsX25hbWVfc3ltYm9sID0gZXh0ZXJuYWxfbmFtZV9zeW1ib2xfOyB9CiAgICBOYW1l
U3ltYm9sICpFeHRlcm5hbElkZW50aXR5KCkKICAgIHsKICAgICAgICByZXR1cm4gKGV4dGVybmFs
X25hbWVfc3ltYm9sID8gZXh0ZXJuYWxfbmFtZV9zeW1ib2wgOiBuYW1lX3N5bWJvbCk7CiAgICB9
CiAgICB3Y2hhcl90ICpFeHRlcm5hbE5hbWUoKQogICAgewogICAgICAgIHJldHVybiAoZXh0ZXJu
YWxfbmFtZV9zeW1ib2wgPyBleHRlcm5hbF9uYW1lX3N5bWJvbCAtPiBOYW1lKCkgOiBuYW1lX3N5
bWJvbCAtPiBOYW1lKCkpOwogICAgfQogICAgaW50IEV4dGVybmFsTmFtZUxlbmd0aCgpCiAgICB7
CiAgICAgICAgcmV0dXJuIChleHRlcm5hbF9uYW1lX3N5bWJvbCA/IGV4dGVybmFsX25hbWVfc3lt
Ym9sIC0+IE5hbWVMZW5ndGgoKSA6IG5hbWVfc3ltYm9sIC0+IE5hbWVMZW5ndGgoKSk7CiAgICB9
CiAgICBjaGFyICpFeHRlcm5hbFV0ZjhOYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gKGNoYXIg
KikgKGV4dGVybmFsX25hbWVfc3ltYm9sID8gZXh0ZXJuYWxfbmFtZV9zeW1ib2wgLT4gVXRmOF9s
aXRlcmFsIC0+IHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IChuYW1lX3N5bWJvbCAtPiBVdGY4X2xpdGVyYWwgPyBuYW1lX3N5bWJvbCAtPiBVdGY4
X2xpdGVyYWwgLT4gdmFsdWUgOiBfX251bGwgKSk7CiAgICB9CiAgICBpbnQgRXh0ZXJuYWxVdGY4
TmFtZUxlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIChleHRlcm5hbF9uYW1lX3N5bWJvbCA/
IChleHRlcm5hbF9uYW1lX3N5bWJvbCAtPiBVdGY4X2xpdGVyYWwgPyBleHRlcm5hbF9uYW1lX3N5
bWJvbCAtPiBVdGY4X2xpdGVyYWwgLT4gbGVuZ3RoIDogMCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogKG5hbWVfc3ltYm9sIC0+IFV0ZjhfbGl0ZXJhbCA/IG5hbWVfc3lt
Ym9sIC0+IFV0ZjhfbGl0ZXJhbCAtPiBsZW5ndGggOiAwKSk7CiAgICB9CgogICAgVHlwZVN5bWJv
bChOYW1lU3ltYm9sICopOwogICAgdmlydHVhbCB+VHlwZVN5bWJvbCgpOwoKICAgIHZvaWQgUHJv
Y2Vzc1R5cGVIZWFkZXJzKCk7CiAgICB2b2lkIFByb2Nlc3NNZW1iZXJzKCk7CiAgICB2b2lkIENv
bXBsZXRlU3ltYm9sVGFibGUoKTsKICAgIHZvaWQgUHJvY2Vzc0V4ZWN1dGFibGVCb2RpZXMoKTsK
ICAgIHZvaWQgUmVtb3ZlQ29tcGlsYXRpb25SZWZlcmVuY2VzKCk7CgogICAgTmFtZVN5bWJvbCAq
R2V0VGhpc05hbWUoQ29udHJvbCAmLCBpbnQpOwoKICAgIFZhcmlhYmxlU3ltYm9sICpGaW5kVGhp
cyhpbnQgaykKICAgIHsKICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIElzSW5uZXIoKSAp
ID8gMCA6CShfX2Fzc2VydF9mYWlsICgiSXNJbm5lcigpIiAsICIuLi8uLi9qaWtlcy9zcmMvc3lt
Ym9sLmgiLCA4MTMsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgICAgICAgKHN0YXRp
Y19jYXN0PHZvaWQ+ICAoKCBOdW1Db25zdHJ1Y3RvclBhcmFtZXRlcnMoKSA+IDAgKSA/IDAgOgko
X19hc3NlcnRfZmFpbCAoIk51bUNvbnN0cnVjdG9yUGFyYW1ldGVycygpID4gMCIgLCAiLi4vLi4v
amlrZXMvc3JjL3N5bWJvbC5oIiwgODE0LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoK
ICAgICAgICByZXR1cm4gKGsgPT0gMCA/IENvbnN0cnVjdG9yUGFyYW1ldGVyKDApCiAgICAgICAg
ICAgICAgICAgICAgICAgOiAoVmFyaWFibGVTeW1ib2wgKikgKE51bUVuY2xvc2luZ0luc3RhbmNl
cygpID4gayA/IEVuY2xvc2luZ0luc3RhbmNlKGspIDogX19udWxsICkpOwogICAgfQogICAgVmFy
aWFibGVTeW1ib2wgKkluc2VydFRoaXMoaW50IGspOwoKICAgIFR5cGVTeW1ib2wgKkZpbmRPcklu
c2VydENsYXNzTGl0ZXJhbENsYXNzKExleFN0cmVhbTo6VG9rZW5JbmRleCk7CiAgICBUeXBlU3lt
Ym9sICpDbGFzc0xpdGVyYWxDbGFzcygpCiAgICB7CiAgICAgICAgcmV0dXJuIGNsYXNzX2xpdGVy
YWxfY2xhc3M7CiAgICB9CiAgICBNZXRob2RTeW1ib2wgKkZpbmRPckluc2VydENsYXNzTGl0ZXJh
bE1ldGhvZChDb250cm9sICYpOwogICAgTWV0aG9kU3ltYm9sICpDbGFzc0xpdGVyYWxNZXRob2Qo
KQogICAgewogICAgICAgIHJldHVybiBjbGFzc19saXRlcmFsX21ldGhvZDsKICAgIH0KICAgIFV0
ZjhMaXRlcmFsVmFsdWUgKkZpbmRPckluc2VydENsYXNzTGl0ZXJhbE5hbWUoQ29udHJvbCAmKTsK
ICAgIFV0ZjhMaXRlcmFsVmFsdWUgKkNsYXNzTGl0ZXJhbE5hbWUoKQogICAgewogICAgICAgIHJl
dHVybiBjbGFzc19saXRlcmFsX25hbWU7CiAgICB9CiAgICBWYXJpYWJsZVN5bWJvbCAqRmluZE9y
SW5zZXJ0Q2xhc3NMaXRlcmFsKFR5cGVTeW1ib2wgKik7CiAgICBWYXJpYWJsZVN5bWJvbCAqRmlu
ZE9ySW5zZXJ0TG9jYWxTaGFkb3coVmFyaWFibGVTeW1ib2wgKik7CgogICAgTWV0aG9kU3ltYm9s
ICpHZXRSZWFkQWNjZXNzTWV0aG9kKE1ldGhvZFN5bWJvbCAqKTsKICAgIE1ldGhvZFN5bWJvbCAq
R2V0UmVhZEFjY2Vzc01ldGhvZChWYXJpYWJsZVN5bWJvbCAqKTsKICAgIE1ldGhvZFN5bWJvbCAq
R2V0V3JpdGVBY2Nlc3NNZXRob2QoVmFyaWFibGVTeW1ib2wgKik7CgogICAgYm9vbCBJc0FycmF5
KCkgeyByZXR1cm4gKG51bV9kaW1lbnNpb25zID4gMCk7IH0KCiAgICB2b2lkIFNldE93bmVyKFN5
bWJvbCAqb3duZXJfKSB7IG93bmVyID0gb3duZXJfOyB9CiAgICBib29sIElzT3duZXIoVHlwZVN5
bWJvbCAqdHlwZSkKICAgIHsKICAgICAgICBTeW1ib2wgKnN5bSA9IHR5cGUgLT4gb3duZXI7CiAg
ICAgICAgd2hpbGUgKCEgc3ltIC0+IFBhY2thZ2VDYXN0KCkpCiAgICAgICAgewogICAgICAgICAg
ICBpZiAoc3ltID09IHRoaXMpCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKCiAgICAgICAg
ICAgIE1ldGhvZFN5bWJvbCAqbWV0aG9kID0gc3ltIC0+IE1ldGhvZENhc3QoKTsKICAgICAgICAg
ICAgc3ltID0gKG1ldGhvZCA/IG1ldGhvZCAtPiBjb250YWluaW5nX3R5cGUgOiAoKFR5cGVTeW1i
b2wgKikgc3ltKSAtPiBvd25lcik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICB9CgogICAgVHlwZVN5bWJvbCAqQ29udGFpbmluZ1R5cGUoKQogICAgewogICAgICAgIGlmIChv
d25lcikKICAgICAgICB7CiAgICAgICAgICAgIFR5cGVTeW1ib2wgKnR5cGUgPSBvd25lciAtPiBU
eXBlQ2FzdCgpOwogICAgICAgICAgICBpZiAodHlwZSkKICAgICAgICAgICAgICAgIHJldHVybiB0
eXBlOwogICAgICAgICAgICBNZXRob2RTeW1ib2wgKm1ldGhvZCA9IG93bmVyIC0+IE1ldGhvZENh
c3QoKTsKICAgICAgICAgICAgaWYgKG1ldGhvZCkKICAgICAgICAgICAgICAgIHJldHVybiBtZXRo
b2QgLT4gY29udGFpbmluZ190eXBlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIF9fbnVsbCA7
CiAgICB9CgogICAgYm9vbCBDYW5BY2Nlc3MoVHlwZVN5bWJvbCAqKTsKCiAgICBib29sIEhhc1By
b3RlY3RlZEFjY2Vzc1RvKFR5cGVTeW1ib2wgKik7CgogICAgYm9vbCBJc1N1YmNsYXNzKFR5cGVT
eW1ib2wgKnN1cGVyX2NsYXNzKQogICAgewogICAgICAgIHJldHVybiAodGhpcyA9PSBzdXBlcl9j
bGFzcyA/IHRydWUgOiAoc3VwZXIgPT0gX19udWxsICA/IGZhbHNlIDogc3VwZXIgLT4gSXNTdWJj
bGFzcyhzdXBlcl9jbGFzcykpKTsKICAgIH0KCiAgICBib29sIElzU3ViaW50ZXJmYWNlKFR5cGVT
eW1ib2wgKnN1cGVyX2ludGVyZmFjZSkKICAgIHsKICAgICAgICBpZiAodGhpcyA9PSBzdXBlcl9p
bnRlcmZhY2UpCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgTnVtSW50ZXJmYWNlcygpOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBpZiAoSW50
ZXJmYWNlKGkpIC0+IElzU3ViaW50ZXJmYWNlKHN1cGVyX2ludGVyZmFjZSkpCiAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoK
ICAgIGJvb2wgSW1wbGVtZW50cyhUeXBlU3ltYm9sICppbnRlcikKICAgIHsKICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IE51bUludGVyZmFjZXMoKTsgaSsrKQogICAgICAgIHsKICAgICAgICAg
ICAgaWYgKEludGVyZmFjZShpKSAtPiBJc1N1YmludGVyZmFjZShpbnRlcikpCiAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICh0aGlzIC0+IHN1cGVy
ID8gdGhpcyAtPiBzdXBlciAtPiBJbXBsZW1lbnRzKGludGVyKSA6IGZhbHNlKTsKICAgIH0KCiAg
ICB3Y2hhcl90ICpGaWxlTG9jKCkKICAgIHsKICAgICAgICByZXR1cm4gKHdjaGFyX3QgKikgKGZp
bGVfbG9jYXRpb24gPyBmaWxlX2xvY2F0aW9uIC0+IGxvY2F0aW9uIDogX19udWxsICk7CiAgICB9
CgogICAgdm9pZCBTZXRMb2NhdGlvbigpOwoKICAgIFR5cGVTeW1ib2wgKkdldEFycmF5VHlwZShT
ZW1hbnRpYyAqLCBpbnQpOwoKICAgIFR5cGVTeW1ib2wgKkFycmF5U3VidHlwZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIHRoaXMgLT4gYmFzZV90eXBlIC0+IEFycmF5KHRoaXMgLT4gbnVtX2RpbWVu
c2lvbnMgLSAxKTsKICAgIH0KCiAgICB2b2lkIFNldFNpZ25hdHVyZShDb250cm9sICYpOwogICAg
dm9pZCBTZXRTaWduYXR1cmUoVXRmOExpdGVyYWxWYWx1ZSAqc2lnbmF0dXJlXykgeyBzaWduYXR1
cmUgPSBzaWduYXR1cmVfOyB9CiAgICBjaGFyICpTaWduYXR1cmVTdHJpbmcoKSB7IHJldHVybiBz
aWduYXR1cmUgLT4gdmFsdWU7IH0KCiAgICB2b2lkIFNldENsYXNzTGl0ZXJhbE5hbWUoVXRmOExp
dGVyYWxWYWx1ZSAqY2xhc3NfbGl0ZXJhbF9uYW1lXykgeyBjbGFzc19saXRlcmFsX25hbWUgPSBj
bGFzc19saXRlcmFsX25hbWVfOyB9CgogICAgUGFja2FnZVN5bWJvbCAqQ29udGFpbmluZ1BhY2th
Z2UoKSB7IHJldHVybiBvdXRlcm1vc3RfdHlwZSAtPiBvd25lciAtPiBQYWNrYWdlQ2FzdCgpOyB9
CgogICAgYm9vbCBJc05lc3RlZEluKFR5cGVTeW1ib2wgKik7CgogICAgYm9vbCBJc05lc3RlZCgp
IHsgcmV0dXJuIG91dGVybW9zdF90eXBlICE9IHRoaXM7IH0KCiAgICBib29sIElzSW5uZXIoKSB7
IHJldHVybiBJc0xvY2FsKCkgfHwgQW5vbnltb3VzKCkgfHwgKElzTmVzdGVkKCkgJiYgKCEgQUND
X1NUQVRJQygpKSk7IH0KCiAgICBib29sIElzTG9jYWwoKQogICAgewogICAgICAgIGZvciAoU3lt
Ym9sICpzeW0gPSBvd25lcjsgISBzeW0gLT4gUGFja2FnZUNhc3QoKTsgc3ltID0gKChUeXBlU3lt
Ym9sICopIHN5bSkgLT4gb3duZXIpCiAgICAgICAgewogICAgICAgICAgICBpZiAoc3ltIC0+IE1l
dGhvZENhc3QoKSkKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlubGluZSBjaGFyICpDbGFzc05hbWUoKQogICAg
ewogICAgICAgIGlmICghIGNsYXNzX25hbWUpCiAgICAgICAgICAgIFNldENsYXNzTmFtZSgpOwog
ICAgICAgIHJldHVybiBjbGFzc19uYW1lOwogICAgfQoKICAgIHZvaWQgTWFya0NvbnN0cnVjdG9y
TWVtYmVyc1Byb2Nlc3NlZCgpIHsgc3RhdHVzIHw9ICh1bnNpZ25lZCBzaG9ydCkgMHgwMDAxOyB9
CiAgICBib29sIENvbnN0cnVjdG9yTWVtYmVyc1Byb2Nlc3NlZCgpIHsgcmV0dXJuIChzdGF0dXMg
JiAodW5zaWduZWQgc2hvcnQpIDB4MDAwMSkgIT0gMCA7IH0KCiAgICB2b2lkIE1hcmtNZXRob2RN
ZW1iZXJzUHJvY2Vzc2VkKCkgeyBzdGF0dXMgfD0gKHVuc2lnbmVkIHNob3J0KSAweDAwMDI7IH0K
ICAgIGJvb2wgTWV0aG9kTWVtYmVyc1Byb2Nlc3NlZCgpIHsgcmV0dXJuIChzdGF0dXMgJiAodW5z
aWduZWQgc2hvcnQpIDB4MDAwMikgIT0gMDsgfQoKICAgIHZvaWQgTWFya0ZpZWxkTWVtYmVyc1By
b2Nlc3NlZCgpIHsgc3RhdHVzIHw9ICh1bnNpZ25lZCBzaG9ydCkgMHgwMDA0OyB9CiAgICBib29s
IEZpZWxkTWVtYmVyc1Byb2Nlc3NlZCgpIHsgcmV0dXJuIChzdGF0dXMgJiAodW5zaWduZWQgc2hv
cnQpIDB4MDAwNCkgIT0gMDsgfQoKICAgIHZvaWQgTWFya0xvY2FsQ2xhc3NQcm9jZXNzaW5nQ29t
cGxldGVkKCkgeyBzdGF0dXMgfD0gKHVuc2lnbmVkIHNob3J0KSAweDAwMDg7IH0KICAgIGJvb2wg
TG9jYWxDbGFzc1Byb2Nlc3NpbmdDb21wbGV0ZWQoKSB7IHJldHVybiAoc3RhdHVzICYgKHVuc2ln
bmVkIHNob3J0KSAweDAwMDgpICE9IDA7IH0KCiAgICB2b2lkIE1hcmtTb3VyY2VQZW5kaW5nKCkg
eyBzdGF0dXMgfD0gKHVuc2lnbmVkIHNob3J0KSAweDAwMTA7IH0KICAgIHZvaWQgTWFya1NvdXJj
ZU5vTG9uZ2VyUGVuZGluZygpIHsgc3RhdHVzICY9ICh+ICgodW5zaWduZWQgc2hvcnQpIDB4MDAx
MCkpOyB9CiAgICBib29sIFNvdXJjZVBlbmRpbmcoKSB7IHJldHVybiAoc3RhdHVzICYgKHVuc2ln
bmVkIHNob3J0KSAweDAwMTApICE9IDA7IH0KCiAgICB2b2lkIE1hcmtBbm9ueW1vdXMoKSB7IHN0
YXR1cyB8PSAodW5zaWduZWQgc2hvcnQpIDB4MDAyMDsgfQogICAgYm9vbCBBbm9ueW1vdXMoKSB7
IHJldHVybiAoc3RhdHVzICYgKHVuc2lnbmVkIHNob3J0KSAweDAwMjApICE9IDA7IH0KCiAgICB2
b2lkIE1hcmtIZWFkZXJQcm9jZXNzZWQoKSB7IHN0YXR1cyB8PSAodW5zaWduZWQgc2hvcnQpIDB4
MDA0MDsgfQogICAgYm9vbCBIZWFkZXJQcm9jZXNzZWQoKSB7IHJldHVybiAoc3RhdHVzICYgKHVu
c2lnbmVkIHNob3J0KSAweDAwNDApICE9IDA7IH0KCiAgICB2b2lkIE1hcmtQcmltaXRpdmUoKSB7
IHN0YXR1cyB8PSAodW5zaWduZWQgc2hvcnQpIDB4MDA4MDsgfQogICAgYm9vbCBQcmltaXRpdmUo
KSAgICAgeyByZXR1cm4gKHN0YXR1cyAmICh1bnNpZ25lZCBzaG9ydCkgMHgwMDgwKSAhPSAwOyB9
CgogICAgdm9pZCBNYXJrRGVwcmVjYXRlZCgpIHsgc3RhdHVzIHw9ICh1bnNpZ25lZCBzaG9ydCkg
MHgwMTAwOyB9CiAgICBib29sIElzRGVwcmVjYXRlZCgpICAgeyByZXR1cm4gKHN0YXR1cyAmICh1
bnNpZ25lZCBzaG9ydCkgMHgwMTAwKSAhPSAwOyB9CgogICAgdm9pZCBNYXJrQmFkKCkKICAgIHsK
ICAgICAgICBTZXRBQ0NfUFVCTElDKCk7CgogICAgICAgIHN0YXR1cyB8PSAodW5zaWduZWQgc2hv
cnQpIDB4MDIwMDsKCiAgICAgICAgTWFya0hlYWRlclByb2Nlc3NlZCgpOwogICAgICAgIE1hcmtD
b25zdHJ1Y3Rvck1lbWJlcnNQcm9jZXNzZWQoKTsKICAgICAgICBNYXJrTWV0aG9kTWVtYmVyc1By
b2Nlc3NlZCgpOwogICAgICAgIE1hcmtGaWVsZE1lbWJlcnNQcm9jZXNzZWQoKTsKICAgICAgICBN
YXJrTG9jYWxDbGFzc1Byb2Nlc3NpbmdDb21wbGV0ZWQoKTsKICAgICAgICBNYXJrU291cmNlTm9M
b25nZXJQZW5kaW5nKCk7CgogICAgICAgIHJldHVybjsKICAgIH0KICAgIGJvb2wgQmFkKCkgeyBy
ZXR1cm4gKHN0YXR1cyAmICh1bnNpZ25lZCBzaG9ydCkgMHgwMjAwKSAhPSAwOyB9CgogICAgdm9p
ZCBNYXJrQ2lyY3VsYXIoKQogICAgewogICAgICAgIHN0YXR1cyB8PSAodW5zaWduZWQgc2hvcnQp
IDB4MDQwMDsKICAgICAgICBNYXJrQmFkKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgdm9p
ZCBNYXJrTm9uQ2lyY3VsYXIoKSB7IHN0YXR1cyAmPSAofiAoKHVuc2lnbmVkIHNob3J0KSAweDA0
MDApKTsgfQogICAgYm9vbCBDaXJjdWxhcigpIHsgcmV0dXJuIChzdGF0dXMgJiAodW5zaWduZWQg
c2hvcnQpIDB4MDQwMCkgIT0gMDsgfQoKICAgIHZvaWQgUHJvY2Vzc05lc3RlZFR5cGVTaWduYXR1
cmVzKFNlbWFudGljICosIExleFN0cmVhbTo6VG9rZW5JbmRleCk7CgogICAgYm9vbCBOZXN0ZWRU
eXBlc1Byb2Nlc3NlZCgpIHsgcmV0dXJuIG5lc3RlZF90eXBlX3NpZ25hdHVyZXMgPT0gX19udWxs
IDsgfQoKICAgIGludCBOdW1OZXN0ZWRUeXBlU2lnbmF0dXJlcygpCiAgICB7CiAgICAgICAgcmV0
dXJuIChuZXN0ZWRfdHlwZV9zaWduYXR1cmVzID8gbmVzdGVkX3R5cGVfc2lnbmF0dXJlcyAtPiBM
ZW5ndGgoKSA6IDApOwogICAgfQogICAgY2hhciAqTmVzdGVkVHlwZVNpZ25hdHVyZShpbnQgaSkK
ICAgIHsKICAgICAgICByZXR1cm4gKCpuZXN0ZWRfdHlwZV9zaWduYXR1cmVzKVtpXTsKICAgIH0K
ICAgIHZvaWQgQWRkTmVzdGVkVHlwZVNpZ25hdHVyZShjb25zdCBjaGFyICpzaWduYXR1cmVfLCBp
bnQgbGVuZ3RoKQogICAgewogICAgICAgIGNoYXIgKnNpZ25hdHVyZSA9IG5ldyBjaGFyW2xlbmd0
aCArIDFdOwogICAgICAgIHN0cm5jcHkoc2lnbmF0dXJlLCBzaWduYXR1cmVfLCBsZW5ndGgpOwog
ICAgICAgIHNpZ25hdHVyZVtsZW5ndGhdID0gVV9OVUxMOwoKICAgICAgICBpZiAoISBuZXN0ZWRf
dHlwZV9zaWduYXR1cmVzKQogICAgICAgICAgICBuZXN0ZWRfdHlwZV9zaWduYXR1cmVzID0gbmV3
IFR1cGxlPGNoYXIgKj4oOCk7CiAgICAgICAgbmVzdGVkX3R5cGVfc2lnbmF0dXJlcyAtPiBOZXh0
KCkgPSBzaWduYXR1cmU7CiAgICB9CgogICAgaW5saW5lIHZvaWQgU2V0U3ltYm9sVGFibGUoaW50
KTsKICAgIGlubGluZSBTeW1ib2xUYWJsZSAqVGFibGUoKTsKCiAgICBpbnQgTnVtVmFyaWFibGVT
eW1ib2xzKCk7CiAgICBWYXJpYWJsZVN5bWJvbCAqVmFyaWFibGVTeW0oaW50KTsKCiAgICBpbnQg
TnVtTWV0aG9kU3ltYm9scygpOwogICAgTWV0aG9kU3ltYm9sICpNZXRob2RTeW0oaW50KTsKCiAg
ICBpbnQgTnVtVHlwZVN5bWJvbHMoKTsKICAgIFR5cGVTeW1ib2wgKlR5cGVTeW0oaW50KTsKCiAg
ICBpbmxpbmUgVHlwZVN5bWJvbCAqSW5zZXJ0QW5vbnltb3VzVHlwZVN5bWJvbChOYW1lU3ltYm9s
ICopOwogICAgaW5saW5lIFR5cGVTeW1ib2wgKkZpbmRUeXBlU3ltYm9sKE5hbWVTeW1ib2wgKik7
CiAgICBpbmxpbmUgVHlwZVN5bWJvbCAqSW5zZXJ0TmVzdGVkVHlwZVN5bWJvbChOYW1lU3ltYm9s
ICopOwogICAgaW5saW5lIE1ldGhvZFN5bWJvbCAqRmluZENvbnN0cnVjdG9yU3ltYm9sKCk7CiAg
ICBpbmxpbmUgTWV0aG9kU3ltYm9sICpJbnNlcnRDb25zdHJ1Y3RvclN5bWJvbChOYW1lU3ltYm9s
ICopOwogICAgaW5saW5lIHZvaWQgSW5zZXJ0Q29uc3RydWN0b3JTeW1ib2woTWV0aG9kU3ltYm9s
ICopOwogICAgaW5saW5lIE1ldGhvZFN5bWJvbCAqRmluZE1ldGhvZFN5bWJvbChOYW1lU3ltYm9s
ICopOwogICAgaW5saW5lIFZhcmlhYmxlU3ltYm9sICpGaW5kVmFyaWFibGVTeW1ib2woTmFtZVN5
bWJvbCAqKTsKICAgIGlubGluZSBWYXJpYWJsZVN5bWJvbCAqSW5zZXJ0VmFyaWFibGVTeW1ib2wo
TmFtZVN5bWJvbCAqKTsKICAgIGlubGluZSB2b2lkIEluc2VydFZhcmlhYmxlU3ltYm9sKFZhcmlh
YmxlU3ltYm9sICopOwoKICAgIGlubGluZSBNZXRob2RTeW1ib2wgKkluc2VydE1ldGhvZFN5bWJv
bChOYW1lU3ltYm9sICopOwogICAgaW5saW5lIHZvaWQgSW5zZXJ0TWV0aG9kU3ltYm9sKE1ldGhv
ZFN5bWJvbCAqKTsKICAgIGlubGluZSBNZXRob2RTeW1ib2wgKk92ZXJsb2FkKE1ldGhvZFN5bWJv
bCAqKTsKICAgIGlubGluZSB2b2lkIE92ZXJsb2FkKE1ldGhvZFN5bWJvbCAqLCBNZXRob2RTeW1i
b2wgKik7CiAgICBpbmxpbmUgTWV0aG9kU3ltYm9sICpMb2NhbENvbnN0cnVjdG9yT3ZlcmxvYWQo
TWV0aG9kU3ltYm9sICopOwogICAgTWV0aG9kU3ltYm9sICpGaW5kT3ZlcmxvYWRNZXRob2QoTWV0
aG9kU3ltYm9sICosIEFzdE1ldGhvZERlY2xhcmF0b3IgKik7CgogICAgaW5saW5lIHZvaWQgQ29t
cHJlc3NTcGFjZSgpOwoKcHJpdmF0ZToKICAgICAKICAgICAKICAgICAKICAgICAKICAgIGZyaWVu
ZCBjbGFzcyBUeXBlTG9va3VwVGFibGU7CiAgICB1bnNpZ25lZCBoYXNoX2FkZHJlc3M7CiAgICBU
eXBlU3ltYm9sICpuZXh0X3R5cGU7CgogICAgTmFtZVN5bWJvbCAqZXh0ZXJuYWxfbmFtZV9zeW1i
b2w7CgogICAgU3ltYm9sVGFibGUgKnRhYmxlOwogICAgU3ltYm9sTWFwICpsb2NhbF9zaGFkb3df
bWFwOwoKICAgIHVuc2lnbmVkIHNob3J0IHN0YXR1czsKCiAgICBQYWNrYWdlU3ltYm9sICpwYWNr
YWdlOwogICAgY2hhciAqY2xhc3NfbmFtZTsKCiAgICB2b2lkIFNldENsYXNzTmFtZSgpOwoKICAg
IFR5cGVTeW1ib2wgKmNsYXNzX2xpdGVyYWxfY2xhc3M7CiAgICBNZXRob2RTeW1ib2wgKmNsYXNz
X2xpdGVyYWxfbWV0aG9kOwogICAgVXRmOExpdGVyYWxWYWx1ZSAqY2xhc3NfbGl0ZXJhbF9uYW1l
OwoKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIFR1cGxlPFNl
bWFudGljRW52aXJvbm1lbnQgKj4gKmxvY2FsX2NvbnN0cnVjdG9yX2NhbGxfZW52aXJvbm1lbnRz
OwoKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIFR1
cGxlPE1ldGhvZFN5bWJvbCAqPiAqcHJpdmF0ZV9hY2Nlc3NfbWV0aG9kcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAqcHJpdmF0ZV9hY2Nlc3NfY29uc3RydWN0b3JzOwoKICAgIGlubGluZSB2
b2lkIE1hcFN5bWJvbFRvUmVhZE1ldGhvZChTeW1ib2wgKiwgTWV0aG9kU3ltYm9sICopOwogICAg
aW5saW5lIE1ldGhvZFN5bWJvbCAqUmVhZE1ldGhvZChTeW1ib2wgKik7CiAgICBpbmxpbmUgdm9p
ZCBNYXBTeW1ib2xUb1dyaXRlTWV0aG9kKFZhcmlhYmxlU3ltYm9sICosIE1ldGhvZFN5bWJvbCAq
KTsKICAgIGlubGluZSBNZXRob2RTeW1ib2wgKldyaXRlTWV0aG9kKFZhcmlhYmxlU3ltYm9sICop
OwoKICAgIFN5bWJvbE1hcCAqcmVhZF9tZXRob2QsCiAgICAgICAgICAgICAgKndyaXRlX21ldGhv
ZDsKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAg
CiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBUdXBs
ZTxWYXJpYWJsZVN5bWJvbCAqPiAqY29uc3RydWN0b3JfcGFyYW1ldGVyczsKICAgIFR1cGxlPE1l
dGhvZFN5bWJvbCAqPiAqZ2VuZXJhdGVkX2NvbnN0cnVjdG9yczsKICAgIFR1cGxlPFZhcmlhYmxl
U3ltYm9sICo+ICplbmNsb3NpbmdfaW5zdGFuY2VzOwogICAgVHVwbGU8VmFyaWFibGVTeW1ib2wg
Kj4gKmNsYXNzX2xpdGVyYWxzOwoKICAgIFR1cGxlPGNoYXIgKj4gKm5lc3RlZF90eXBlX3NpZ25h
dHVyZXM7CgogICAgIAogICAgIAogICAgIAogICAgVHVwbGU8VHlwZVN5bWJvbCAqPiAqbmVzdGVk
X3R5cGVzOwoKICAgICAKICAgICAKICAgICAKICAgIFR1cGxlPFR5cGVTeW1ib2wgKj4gKmludGVy
ZmFjZXM7CgogICAgIAogICAgIAogICAgIAogICAgVHVwbGU8VHlwZVN5bWJvbCAqPiAqYW5vbnlt
b3VzX3R5cGVzOwoKICAgICAKICAgICAKICAgICAKICAgIFR1cGxlPFR5cGVTeW1ib2wgKj4gKmFy
cmF5OwogICAgaW5saW5lIGludCBOdW1BcnJheXMoKQogICAgewogICAgICAgIHJldHVybiAoYXJy
YXkgPyBhcnJheSAtPiBMZW5ndGgoKSA6IDApOwogICAgfQogICAgaW5saW5lIFR5cGVTeW1ib2wg
KkFycmF5KGludCBpKQogICAgewogICAgICAgIHJldHVybiAoKmFycmF5KVtpXTsKICAgIH0KICAg
IGlubGluZSB2b2lkIEFkZEFycmF5VHlwZShUeXBlU3ltYm9sICp0eXBlX3N5bWJvbCkKICAgIHsK
ICAgICAgICBpZiAoISBhcnJheSkKICAgICAgICAgICAgYXJyYXkgPSBuZXcgVHVwbGU8VHlwZVN5
bWJvbCAqPig0KTsKICAgICAgICBhcnJheSAtPiBOZXh0KCkgPSB0eXBlX3N5bWJvbDsKICAgIH0K
fTsKCgpjbGFzcyBWYXJpYWJsZVN5bWJvbCA6IHB1YmxpYyBTeW1ib2wsIHB1YmxpYyBBY2Nlc3NG
bGFncwp7CnB1YmxpYzoKICAgIEFzdFZhcmlhYmxlRGVjbGFyYXRvciAqZGVjbGFyYXRvcjsKCiAg
ICBOYW1lU3ltYm9sICpuYW1lX3N5bWJvbDsKICAgIFN5bWJvbCAgICAgKm93bmVyOwogICAgTGl0
ZXJhbFZhbHVlICppbml0aWFsX3ZhbHVlOwoKICAgIFZhcmlhYmxlU3ltYm9sICphY2Nlc3NlZF9s
b2NhbDsKCiAgICB2aXJ0dWFsIHdjaGFyX3QgKk5hbWUoKSB7IHJldHVybiBuYW1lX3N5bWJvbCAt
PiBOYW1lKCk7IH0KICAgIHZpcnR1YWwgc2l6ZV90IE5hbWVMZW5ndGgoKSB7IHJldHVybiBuYW1l
X3N5bWJvbCAtPiBOYW1lTGVuZ3RoKCk7IH0KICAgIHZpcnR1YWwgTmFtZVN5bWJvbCAqSWRlbnRp
dHkoKSB7IHJldHVybiBuYW1lX3N5bWJvbDsgfQogICAgY2hhciAqVXRmOE5hbWUoKSB7IHJldHVy
biAoY2hhciAqKSAobmFtZV9zeW1ib2wgLT4gVXRmOF9saXRlcmFsID8gbmFtZV9zeW1ib2wgLT4g
VXRmOF9saXRlcmFsIC0+IHZhbHVlIDogX19udWxsICk7IH0KICAgIGludCBVdGY4TmFtZUxlbmd0
aCgpIHsgcmV0dXJuIChuYW1lX3N5bWJvbCAtPiBVdGY4X2xpdGVyYWwgPyBuYW1lX3N5bWJvbCAt
PiBVdGY4X2xpdGVyYWwgLT4gbGVuZ3RoIDogMCk7IH0KCiAgICB2b2lkIFNldEV4dGVybmFsSWRl
bnRpdHkoTmFtZVN5bWJvbCAqZXh0ZXJuYWxfbmFtZV9zeW1ib2xfKSB7IGV4dGVybmFsX25hbWVf
c3ltYm9sID0gZXh0ZXJuYWxfbmFtZV9zeW1ib2xfOyB9CiAgICBOYW1lU3ltYm9sICpFeHRlcm5h
bElkZW50aXR5KCkKICAgIHsKICAgICAgICByZXR1cm4gKGV4dGVybmFsX25hbWVfc3ltYm9sID8g
ZXh0ZXJuYWxfbmFtZV9zeW1ib2wgOiBuYW1lX3N5bWJvbCk7CiAgICB9CiAgICB3Y2hhcl90ICpF
eHRlcm5hbE5hbWUoKQogICAgewogICAgICAgIHJldHVybiAoZXh0ZXJuYWxfbmFtZV9zeW1ib2wg
PyBleHRlcm5hbF9uYW1lX3N5bWJvbCAtPiBOYW1lKCkgOiBuYW1lX3N5bWJvbCAtPiBOYW1lKCkp
OwogICAgfQogICAgaW50IEV4dGVybmFsTmFtZUxlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJu
IChleHRlcm5hbF9uYW1lX3N5bWJvbCA/IGV4dGVybmFsX25hbWVfc3ltYm9sIC0+IE5hbWVMZW5n
dGgoKSA6IG5hbWVfc3ltYm9sIC0+IE5hbWVMZW5ndGgoKSk7CiAgICB9CiAgICBjaGFyICpFeHRl
cm5hbFV0ZjhOYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gKGNoYXIgKikgKGV4dGVybmFsX25h
bWVfc3ltYm9sID8gZXh0ZXJuYWxfbmFtZV9zeW1ib2wgLT4gVXRmOF9saXRlcmFsIC0+IHZhbHVl
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChuYW1lX3N5
bWJvbCAtPiBVdGY4X2xpdGVyYWwgPyBuYW1lX3N5bWJvbCAtPiBVdGY4X2xpdGVyYWwgLT4gdmFs
dWUgOiBfX251bGwgKSk7CiAgICB9CiAgICBpbnQgRXh0ZXJuYWxVdGY4TmFtZUxlbmd0aCgpCiAg
ICB7CiAgICAgICAgcmV0dXJuIChleHRlcm5hbF9uYW1lX3N5bWJvbCA/IChleHRlcm5hbF9uYW1l
X3N5bWJvbCAtPiBVdGY4X2xpdGVyYWwgPyBleHRlcm5hbF9uYW1lX3N5bWJvbCAtPiBVdGY4X2xp
dGVyYWwgLT4gbGVuZ3RoIDogMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogKG5hbWVfc3ltYm9sIC0+IFV0ZjhfbGl0ZXJhbCA/IG5hbWVfc3ltYm9sIC0+IFV0ZjhfbGl0
ZXJhbCAtPiBsZW5ndGggOiAwKSk7CiAgICB9CgogICAgVmFyaWFibGVTeW1ib2woTmFtZVN5bWJv
bCAqbmFtZV9zeW1ib2xfKSA6IGRlY2xhcmF0b3IoX19udWxsICksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9zeW1ib2wobmFtZV9zeW1ib2xfKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcihfX251
bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0
aWFsX3ZhbHVlKF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFjY2Vzc2VkX2xvY2FsKF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsX25hbWVfc3ltYm9sKF9fbnVsbCApLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cygwKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF92YXJp
YWJsZV9pbmRleF8oLTEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVfKF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpZ25hdHVyZV9zdHJpbmcoX19udWxsICkKICAgIHsKICAgICAgICBTeW1i
b2w6Ol9raW5kID0gVkFSSUFCTEU7CiAgICB9CgogICAgdmlydHVhbCB+VmFyaWFibGVTeW1ib2wo
KSB7IGRlbGV0ZSBbXSBzaWduYXR1cmVfc3RyaW5nOyB9CgogICAgdm9pZCBTZXRPd25lcihTeW1i
b2wgKm93bmVyXykgeyBvd25lciA9IG93bmVyXzsgfQoKICAgIHZvaWQgU2V0TG9jYWxWYXJpYWJs
ZUluZGV4KGludCBpbmRleCkKICAgIHsKICAgICAgICBsb2NhbF92YXJpYWJsZV9pbmRleF8gPSBp
bmRleDsKICAgICAgICBNYXJrQ29tcGxldGUoKTsKICAgIH0KICAgIGludCBMb2NhbFZhcmlhYmxl
SW5kZXgoKSB7IHJldHVybiBsb2NhbF92YXJpYWJsZV9pbmRleF87IH0KCiAgICBib29sIElzVHlw
ZWQoKQogICAgewogICAgICAgIHJldHVybiB0eXBlXyAhPSBfX251bGwgOwogICAgfQoKICAgIHZv
aWQgU2V0VHlwZShUeXBlU3ltYm9sICpfdHlwZSkKICAgIHsKICAgICAgICB0eXBlXyA9IF90eXBl
OwogICAgfQoKICAgIHZvaWQgUHJvY2Vzc1ZhcmlhYmxlU2lnbmF0dXJlKFNlbWFudGljICosIExl
eFN0cmVhbTo6VG9rZW5JbmRleCk7CgogICAgVHlwZVN5bWJvbCAqVHlwZSgpCiAgICB7CiAgICAg
ICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCB0eXBlXyApID8gMCA6CShfX2Fzc2VydF9mYWlsICgi
dHlwZV8iICwgIi4uLy4uL2ppa2VzL3NyYy9zeW1ib2wuaCIsIDEyNTUsIF9fUFJFVFRZX0ZVTkNU
SU9OX18gKSwgMCkpKSA7ICAKICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgIHJldHVy
biB0eXBlXzsKICAgIH0KCiAgICB2b2lkIFNldFNpZ25hdHVyZVN0cmluZyhjb25zdCBjaGFyICpz
aWduYXR1cmVfLCBpbnQgbGVuZ3RoKQogICAgewogICAgICAgIHNpZ25hdHVyZV9zdHJpbmcgPSBu
ZXcgY2hhcltsZW5ndGggKyAxXTsKICAgICAgICBzdHJuY3B5KHNpZ25hdHVyZV9zdHJpbmcsIHNp
Z25hdHVyZV8sIGxlbmd0aCk7CiAgICAgICAgc2lnbmF0dXJlX3N0cmluZ1tsZW5ndGhdID0gVV9O
VUxMOwogICAgfQoKICAgIGJvb2wgSXNMb2NhbCgpICAgICAgICAgICAgICAgICAgICAgeyByZXR1
cm4gb3duZXIgLT4gTWV0aG9kQ2FzdCgpICE9IF9fbnVsbCA7IH0gICAgICAgICAgICAKICAgIGJv
b2wgSXNMb2NhbChNZXRob2RTeW1ib2wgKm1ldGhvZCkgeyByZXR1cm4gb3duZXIgPT0gbWV0aG9k
OyB9ICAKICAgIGJvb2wgSXNGaW5hbChUeXBlU3ltYm9sICp0eXBlKSAgICAgeyByZXR1cm4gKG93
bmVyID09IHR5cGUgJiYgQUNDX0ZJTkFMKCkpOyB9CgogICAgIAogICAgIAogICAgIAogICAgIAog
ICAgdm9pZCBNYXJrSW5jb21wbGV0ZSgpICAgICAgICAgeyBzdGF0dXMgJj0gKH4oKHVuc2lnbmVk
IGNoYXIpIDB4MDEpKTsgfQogICAgdm9pZCBNYXJrQ29tcGxldGUoKSAgICAgICAgICAgeyBzdGF0
dXMgfD0gKHVuc2lnbmVkIGNoYXIpIDB4MDE7IH0KICAgIGJvb2wgSXNEZWNsYXJhdGlvbkNvbXBs
ZXRlKCkgIHsgcmV0dXJuIChzdGF0dXMgJiAodW5zaWduZWQgY2hhcikgMHgwMSkgIT0gMDsgfQoK
ICAgIHZvaWQgTWFya05vdERlZmluaXRlbHlBc3NpZ25lZCgpIHsgc3RhdHVzICY9ICh+KCh1bnNp
Z25lZCBjaGFyKSAweDAyKSk7IH0KICAgIHZvaWQgTWFya0RlZmluaXRlbHlBc3NpZ25lZCgpICAg
IHsgc3RhdHVzIHw9ICh1bnNpZ25lZCBjaGFyKSAweDAyOyB9CiAgICBib29sIElzRGVmaW5pdGVs
eUFzc2lnbmVkKCkgICAgICB7IHJldHVybiAoc3RhdHVzICYgKHVuc2lnbmVkIGNoYXIpIDB4MDIp
ICE9IDA7IH0KCiAgICB2b2lkIE1hcmtQb3NzaWJseUFzc2lnbmVkKCkgeyBzdGF0dXMgfD0gKHVu
c2lnbmVkIGNoYXIpIDB4MDQ7IH0KICAgIGJvb2wgSXNQb3NzaWJseUFzc2lnbmVkKCkgICB7IHJl
dHVybiAoc3RhdHVzICYgKHVuc2lnbmVkIGNoYXIpIDB4MDQpICE9IDA7IH0KCiAgICB2b2lkIE1h
cmtTeW50aGV0aWMoKSB7IHN0YXR1cyB8PSAodW5zaWduZWQgY2hhcikgMHgwODsgfQogICAgYm9v
bCBJc1N5bnRoZXRpYygpICAgeyByZXR1cm4gKHN0YXR1cyAmICh1bnNpZ25lZCBjaGFyKSAweDA4
KSAhPSAwOyB9CgogICAgdm9pZCBNYXJrRGVwcmVjYXRlZCgpIHsgc3RhdHVzIHw9ICh1bnNpZ25l
ZCBjaGFyKSAweDEwOyB9CiAgICBib29sIElzRGVwcmVjYXRlZCgpICAgeyByZXR1cm4gKHN0YXR1
cyAmICh1bnNpZ25lZCBjaGFyKSAweDEwKSAhPSAwOyB9Cgpwcml2YXRlOgogICAgTmFtZVN5bWJv
bCAqZXh0ZXJuYWxfbmFtZV9zeW1ib2w7CgogICAgdW5zaWduZWQgY2hhciBzdGF0dXM7CiAgICBp
bnQgbG9jYWxfdmFyaWFibGVfaW5kZXhfOwogICAgVHlwZVN5bWJvbCAqdHlwZV87CiAgICBjaGFy
ICpzaWduYXR1cmVfc3RyaW5nOwp9OwoKCmNsYXNzIEJsb2NrU3ltYm9sIDogcHVibGljIFN5bWJv
bAp7CnB1YmxpYzoKICAgIGludCBtYXhfdmFyaWFibGVfaW5kZXgsCiAgICAgICAgdHJ5X29yX3N5
bmNocm9uaXplZF92YXJpYWJsZV9pbmRleDsKCiAgICBCbG9ja1N5bWJvbChpbnQgaGFzaF9zaXpl
KTsKICAgIHZpcnR1YWwgfkJsb2NrU3ltYm9sKCk7CgogICAgaW50IE51bVZhcmlhYmxlU3ltYm9s
cygpOwogICAgVmFyaWFibGVTeW1ib2wgKlZhcmlhYmxlU3ltKGludCk7CgogICAgaW5saW5lIFZh
cmlhYmxlU3ltYm9sICpGaW5kVmFyaWFibGVTeW1ib2woTmFtZVN5bWJvbCAqKTsKICAgIGlubGlu
ZSBWYXJpYWJsZVN5bWJvbCAqSW5zZXJ0VmFyaWFibGVTeW1ib2woTmFtZVN5bWJvbCAqKTsKICAg
IGlubGluZSB2b2lkIEluc2VydFZhcmlhYmxlU3ltYm9sKFZhcmlhYmxlU3ltYm9sICopOwogICAg
aW5saW5lIEJsb2NrU3ltYm9sICpJbnNlcnRCbG9ja1N5bWJvbChpbnQpOwoKICAgIGlubGluZSB2
b2lkIENvbXByZXNzU3BhY2UoKTsKCiAgICBpbmxpbmUgU3ltYm9sVGFibGUgKlRhYmxlKCk7Cgpw
cml2YXRlOgoKICAgIFN5bWJvbFRhYmxlICp0YWJsZTsKfTsKCgpjbGFzcyBMYWJlbFN5bWJvbCA6
IHB1YmxpYyBTeW1ib2wKewpwdWJsaWM6CiAgICBBc3RCbG9jayAqYmxvY2s7ICAKICAgIE5hbWVT
eW1ib2wgKm5hbWVfc3ltYm9sOwoKICAgIGludCBuZXN0aW5nX2xldmVsOwoKICAgIHZpcnR1YWwg
d2NoYXJfdCAqTmFtZSgpIHsgcmV0dXJuIG5hbWVfc3ltYm9sIC0+IE5hbWUoKTsgfQogICAgdmly
dHVhbCBzaXplX3QgTmFtZUxlbmd0aCgpIHsgcmV0dXJuIG5hbWVfc3ltYm9sIC0+IE5hbWVMZW5n
dGgoKTsgfQogICAgdmlydHVhbCBOYW1lU3ltYm9sICpJZGVudGl0eSgpIHsgcmV0dXJuIG5hbWVf
c3ltYm9sOyB9CiAgICBjaGFyICpVdGY4TmFtZSgpIHsgcmV0dXJuIChjaGFyICopIChuYW1lX3N5
bWJvbCAtPiBVdGY4X2xpdGVyYWwgPyBuYW1lX3N5bWJvbCAtPiBVdGY4X2xpdGVyYWwgLT4gdmFs
dWUgOiBfX251bGwgKTsgfQogICAgaW50IFV0ZjhOYW1lTGVuZ3RoKCkgeyByZXR1cm4gKG5hbWVf
c3ltYm9sIC0+IFV0ZjhfbGl0ZXJhbCA/IG5hbWVfc3ltYm9sIC0+IFV0ZjhfbGl0ZXJhbCAtPiBs
ZW5ndGggOiAwKTsgfQoKICAgIExhYmVsU3ltYm9sKE5hbWVTeW1ib2wgKm5hbWVfc3ltYm9sXykg
OiBibG9jayhfX251bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuYW1lX3N5bWJvbChuYW1lX3N5bWJvbF8pLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5lc3RpbmdfbGV2ZWwoMCkKICAgIHsKICAgICAgICBTeW1ib2w6
Ol9raW5kID0gTEFCRUw7CiAgICB9CgogICAgdmlydHVhbCB+TGFiZWxTeW1ib2woKSB7fQoKcHJp
dmF0ZToKfTsKCgpjbGFzcyBTeW1ib2xUYWJsZQp7CnB1YmxpYzoKICAgIGVudW0KICAgIHsKICAg
ICAgICBERUZBVUxUX0hBU0hfU0laRSA9IDEzLAogICAgICAgIE1BWF9IQVNIX1NJWkUgPSAxMDIx
CiAgICB9OwoKICAgIGludCBOdW1Bbm9ueW1vdXNTeW1ib2xzKCkKICAgIHsKICAgICAgICByZXR1
cm4gKGFub255bW91c19zeW1ib2xfcG9vbCA/IGFub255bW91c19zeW1ib2xfcG9vbCAtPiBMZW5n
dGgoKSA6IDApOwogICAgfQogICAgVHlwZVN5bWJvbCAqQW5vbnltb3VzU3ltKGludCBpKQogICAg
ewogICAgICAgIHJldHVybiAoKmFub255bW91c19zeW1ib2xfcG9vbClbaV07CiAgICB9CiAgICB2
b2lkIEFkZEFub255bW91c1N5bWJvbChUeXBlU3ltYm9sICpzeW1ib2wpCiAgICB7CiAgICAgICAg
aWYgKCEgYW5vbnltb3VzX3N5bWJvbF9wb29sKQogICAgICAgICAgICBhbm9ueW1vdXNfc3ltYm9s
X3Bvb2wgPSBuZXcgQ29udmVydGlibGVBcnJheTxUeXBlU3ltYm9sICo+KDI1Nik7CiAgICAgICAg
YW5vbnltb3VzX3N5bWJvbF9wb29sIC0+IE5leHQoKSA9IHN5bWJvbDsKICAgIH0KCiAgICBpbnQg
TnVtVHlwZVN5bWJvbHMoKQogICAgewogICAgICAgIHJldHVybiAodHlwZV9zeW1ib2xfcG9vbCA/
IHR5cGVfc3ltYm9sX3Bvb2wgLT4gTGVuZ3RoKCkgOiAwKTsKICAgIH0KICAgIFR5cGVTeW1ib2wg
KiZUeXBlU3ltKGludCBpKQogICAgewogICAgICAgIHJldHVybiAoKnR5cGVfc3ltYm9sX3Bvb2wp
W2ldOwogICAgfQogICAgdm9pZCBBZGRUeXBlU3ltYm9sKFR5cGVTeW1ib2wgKnN5bWJvbCkKICAg
IHsKICAgICAgICBpZiAoISB0eXBlX3N5bWJvbF9wb29sKQogICAgICAgICAgICB0eXBlX3N5bWJv
bF9wb29sID0gbmV3IENvbnZlcnRpYmxlQXJyYXk8VHlwZVN5bWJvbCAqPigyNTYpOwogICAgICAg
IHR5cGVfc3ltYm9sX3Bvb2wgLT4gTmV4dCgpID0gc3ltYm9sOwogICAgfQoKICAgIGludCBOdW1N
ZXRob2RTeW1ib2xzKCkKICAgIHsKICAgICAgICByZXR1cm4gKG1ldGhvZF9zeW1ib2xfcG9vbCA/
IG1ldGhvZF9zeW1ib2xfcG9vbCAtPiBMZW5ndGgoKSA6IDApOwogICAgfQogICAgTWV0aG9kU3lt
Ym9sICpNZXRob2RTeW0oaW50IGkpCiAgICB7CiAgICAgICAgcmV0dXJuICgqbWV0aG9kX3N5bWJv
bF9wb29sKVtpXTsKICAgIH0KICAgIHZvaWQgQWRkTWV0aG9kU3ltYm9sKE1ldGhvZFN5bWJvbCAq
c3ltYm9sKQogICAgewogICAgICAgIGlmICghIG1ldGhvZF9zeW1ib2xfcG9vbCkKICAgICAgICAg
ICAgbWV0aG9kX3N5bWJvbF9wb29sID0gbmV3IENvbnZlcnRpYmxlQXJyYXk8TWV0aG9kU3ltYm9s
ICo+KDI1Nik7CiAgICAgICAgbWV0aG9kX3N5bWJvbF9wb29sIC0+IE5leHQoKSA9IHN5bWJvbDsK
ICAgIH0KCiAgICBpbnQgTnVtVmFyaWFibGVTeW1ib2xzKCkKICAgIHsKICAgICAgICByZXR1cm4g
KHZhcmlhYmxlX3N5bWJvbF9wb29sID8gdmFyaWFibGVfc3ltYm9sX3Bvb2wgLT4gTGVuZ3RoKCkg
OiAwKTsKICAgIH0KICAgIFZhcmlhYmxlU3ltYm9sICpWYXJpYWJsZVN5bShpbnQgaSkKICAgIHsK
ICAgICAgICByZXR1cm4gKCp2YXJpYWJsZV9zeW1ib2xfcG9vbClbaV07CiAgICB9CiAgICB2b2lk
IEFkZFZhcmlhYmxlU3ltYm9sKFZhcmlhYmxlU3ltYm9sICpzeW1ib2wpCiAgICB7CiAgICAgICAg
aWYgKCEgdmFyaWFibGVfc3ltYm9sX3Bvb2wpCiAgICAgICAgICAgIHZhcmlhYmxlX3N5bWJvbF9w
b29sID0gbmV3IENvbnZlcnRpYmxlQXJyYXk8VmFyaWFibGVTeW1ib2wgKj4oMjU2KTsKICAgICAg
ICB2YXJpYWJsZV9zeW1ib2xfcG9vbCAtPiBOZXh0KCkgPSBzeW1ib2w7CiAgICB9CgogICAgaW50
IE51bU90aGVyU3ltYm9scygpCiAgICB7CiAgICAgICAgcmV0dXJuIChvdGhlcl9zeW1ib2xfcG9v
bCA/IG90aGVyX3N5bWJvbF9wb29sIC0+IExlbmd0aCgpIDogMCk7CiAgICB9CiAgICBTeW1ib2wg
Kk90aGVyU3ltKGludCBpKQogICAgewogICAgICAgIHJldHVybiAoKm90aGVyX3N5bWJvbF9wb29s
KVtpXTsKICAgIH0KICAgIHZvaWQgQWRkT3RoZXJTeW1ib2woU3ltYm9sICpzeW1ib2wpCiAgICB7
CiAgICAgICAgaWYgKCEgb3RoZXJfc3ltYm9sX3Bvb2wpCiAgICAgICAgICAgIG90aGVyX3N5bWJv
bF9wb29sID0gbmV3IENvbnZlcnRpYmxlQXJyYXk8U3ltYm9sICo+KDI1Nik7CiAgICAgICAgb3Ro
ZXJfc3ltYm9sX3Bvb2wgLT4gTmV4dCgpID0gc3ltYm9sOwogICAgfQoKICAgIFN5bWJvbFRhYmxl
KGludCBoYXNoX3NpemVfID0gREVGQVVMVF9IQVNIX1NJWkUpOwogICAgflN5bWJvbFRhYmxlKCk7
CgogICAgaW5saW5lIHZvaWQgQ29tcHJlc3NTcGFjZSgpCiAgICB7CiAgICAgICAgaWYgKGFub255
bW91c19zeW1ib2xfcG9vbCkKICAgICAgICAgICAgKHZvaWQpIGFub255bW91c19zeW1ib2xfcG9v
bCAtPiBBcnJheSgpOwogICAgICAgIGlmIChtZXRob2Rfc3ltYm9sX3Bvb2wpCiAgICAgICAgICAg
ICh2b2lkKSBtZXRob2Rfc3ltYm9sX3Bvb2wgLT4gQXJyYXkoKTsKICAgICAgICBpZiAodmFyaWFi
bGVfc3ltYm9sX3Bvb2wpCiAgICAgICAgICAgICh2b2lkKSB2YXJpYWJsZV9zeW1ib2xfcG9vbCAt
PiBBcnJheSgpOwogICAgICAgIGlmIChvdGhlcl9zeW1ib2xfcG9vbCkKICAgICAgICAgICAgKHZv
aWQpIG90aGVyX3N5bWJvbF9wb29sIC0+IEFycmF5KCk7CgogICAgICAgIHJldHVybjsKICAgIH0K
CnByaXZhdGU6CgogICAgVHVwbGU8VHlwZVN5bWJvbCAqPiAqdHlwZV9zeW1ib2xfcG9vbDsgIAoK
ICAgIENvbnZlcnRpYmxlQXJyYXk8VHlwZVN5bWJvbCAqPiAgICAgKmFub255bW91c19zeW1ib2xf
cG9vbDsKICAgIENvbnZlcnRpYmxlQXJyYXk8TWV0aG9kU3ltYm9sICo+ICAgKm1ldGhvZF9zeW1i
b2xfcG9vbDsKICAgIENvbnZlcnRpYmxlQXJyYXk8VmFyaWFibGVTeW1ib2wgKj4gKnZhcmlhYmxl
X3N5bWJvbF9wb29sOwogICAgQ29udmVydGlibGVBcnJheTxTeW1ib2wgKj4gICAgICAgICAqb3Ro
ZXJfc3ltYm9sX3Bvb2w7CgogICAgU3ltYm9sICoqYmFzZTsKICAgIGludCBoYXNoX3NpemU7Cgog
ICAgc3RhdGljIGludCBwcmltZXNbXTsKICAgIGludCBwcmltZV9pbmRleDsKCiAgICBpbnQgU2l6
ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIE51bUFub255bW91c1N5bWJvbHMoKSArCiAgICAgICAg
ICAgICAgIE51bVR5cGVTeW1ib2xzKCkgKwogICAgICAgICAgICAgICBOdW1NZXRob2RTeW1ib2xz
KCkgKwogICAgICAgICAgICAgICBOdW1WYXJpYWJsZVN5bWJvbHMoKSArCiAgICAgICAgICAgICAg
IE51bU90aGVyU3ltYm9scygpOwogICAgfQogICAgdm9pZCBSZWhhc2goKTsKCiAgICBNZXRob2RT
eW1ib2wgKmNvbnN0cnVjdG9yOwoKcHVibGljOgoKICAgIGlubGluZSBQYXRoU3ltYm9sICpJbnNl
cnRQYXRoU3ltYm9sKE5hbWVTeW1ib2wgKiwgRGlyZWN0b3J5U3ltYm9sICopOwogICAgaW5saW5l
IFBhdGhTeW1ib2wgKkZpbmRQYXRoU3ltYm9sKE5hbWVTeW1ib2wgKik7CiAgICBpbmxpbmUgRGly
ZWN0b3J5U3ltYm9sICpJbnNlcnREaXJlY3RvcnlTeW1ib2woTmFtZVN5bWJvbCAqLCBTeW1ib2wg
KiwgYm9vbCBzb3VyY2VfcGF0aCk7CiAgICBpbmxpbmUgRGlyZWN0b3J5U3ltYm9sICpGaW5kRGly
ZWN0b3J5U3ltYm9sKE5hbWVTeW1ib2wgKik7CiAgICBpbmxpbmUgRmlsZVN5bWJvbCAqSW5zZXJ0
RmlsZVN5bWJvbChOYW1lU3ltYm9sICopOwogICAgaW5saW5lIEZpbGVTeW1ib2wgKkZpbmRGaWxl
U3ltYm9sKE5hbWVTeW1ib2wgKik7CiAgICBpbmxpbmUgUGFja2FnZVN5bWJvbCAqSW5zZXJ0UGFj
a2FnZVN5bWJvbChOYW1lU3ltYm9sICosIFBhY2thZ2VTeW1ib2wgKik7CiAgICBpbmxpbmUgUGFj
a2FnZVN5bWJvbCAqRmluZFBhY2thZ2VTeW1ib2woTmFtZVN5bWJvbCAqKTsKICAgIGlubGluZSBU
eXBlU3ltYm9sICpJbnNlcnRBbm9ueW1vdXNUeXBlU3ltYm9sKE5hbWVTeW1ib2wgKik7CiAgICBp
bmxpbmUgVHlwZVN5bWJvbCAqSW5zZXJ0U3lzdGVtVHlwZVN5bWJvbChOYW1lU3ltYm9sICopOwog
ICAgaW5saW5lIFR5cGVTeW1ib2wgKkluc2VydE91dGVyVHlwZVN5bWJvbChOYW1lU3ltYm9sICop
OwogICAgaW5saW5lIFR5cGVTeW1ib2wgKkluc2VydE5lc3RlZFR5cGVTeW1ib2woTmFtZVN5bWJv
bCAqKTsKICAgIGlubGluZSB2b2lkIERlbGV0ZVR5cGVTeW1ib2woVHlwZVN5bWJvbCAqKTsKICAg
IGlubGluZSB2b2lkIERlbGV0ZUFub255bW91c1R5cGVzKCk7CiAgICBpbmxpbmUgVHlwZVN5bWJv
bCAqRmluZFR5cGVTeW1ib2woTmFtZVN5bWJvbCAqKTsKICAgIGlubGluZSBNZXRob2RTeW1ib2wg
Kkluc2VydE1ldGhvZFN5bWJvbChOYW1lU3ltYm9sICopOwogICAgaW5saW5lIE1ldGhvZFN5bWJv
bCAqSW5zZXJ0Q29uc3RydWN0b3JTeW1ib2woTmFtZVN5bWJvbCAqKTsKICAgIGlubGluZSB2b2lk
IEluc2VydE1ldGhvZFN5bWJvbChNZXRob2RTeW1ib2wgKik7CiAgICBpbmxpbmUgdm9pZCBJbnNl
cnRDb25zdHJ1Y3RvclN5bWJvbChNZXRob2RTeW1ib2wgKik7CiAgICBpbmxpbmUgTWV0aG9kU3lt
Ym9sICpGaW5kTWV0aG9kU3ltYm9sKE5hbWVTeW1ib2wgKik7CiAgICBpbmxpbmUgTWV0aG9kU3lt
Ym9sICpGaW5kQ29uc3RydWN0b3JTeW1ib2woKTsKICAgIGlubGluZSBWYXJpYWJsZVN5bWJvbCAq
SW5zZXJ0VmFyaWFibGVTeW1ib2woTmFtZVN5bWJvbCAqKTsKICAgIGlubGluZSB2b2lkIEluc2Vy
dFZhcmlhYmxlU3ltYm9sKFZhcmlhYmxlU3ltYm9sICopOwogICAgaW5saW5lIFZhcmlhYmxlU3lt
Ym9sICpGaW5kVmFyaWFibGVTeW1ib2woTmFtZVN5bWJvbCAqKTsKICAgIGlubGluZSBMYWJlbFN5
bWJvbCAqSW5zZXJ0TGFiZWxTeW1ib2woTmFtZVN5bWJvbCAqKTsKICAgIGlubGluZSBMYWJlbFN5
bWJvbCAqRmluZExhYmVsU3ltYm9sKE5hbWVTeW1ib2wgKik7CiAgICBpbmxpbmUgQmxvY2tTeW1i
b2wgKkluc2VydEJsb2NrU3ltYm9sKGludCk7CgogICAgaW5saW5lIE1ldGhvZFN5bWJvbCAqT3Zl
cmxvYWQoTWV0aG9kU3ltYm9sICopOwogICAgaW5saW5lIHZvaWQgT3ZlcmxvYWQoTWV0aG9kU3lt
Ym9sICosIE1ldGhvZFN5bWJvbCAqKTsKICAgIGlubGluZSBNZXRob2RTeW1ib2wgKkxvY2FsQ29u
c3RydWN0b3JPdmVybG9hZChNZXRob2RTeW1ib2wgKik7CiAgICBNZXRob2RTeW1ib2wgKkZpbmRP
dmVybG9hZE1ldGhvZChNZXRob2RTeW1ib2wgKiwgQXN0TWV0aG9kRGVjbGFyYXRvciAqKTsKfTsK
CgppbmxpbmUgaW50IFR5cGVTeW1ib2w6Ok51bVZhcmlhYmxlU3ltYm9scygpIHsgcmV0dXJuICh0
YWJsZSA/IHRhYmxlIC0+IE51bVZhcmlhYmxlU3ltYm9scygpIDogMCk7IH0KaW5saW5lIFZhcmlh
YmxlU3ltYm9sICpUeXBlU3ltYm9sOjpWYXJpYWJsZVN5bShpbnQgaSkgeyByZXR1cm4gdGFibGUg
LT4gVmFyaWFibGVTeW0oaSk7IH0KCmlubGluZSBpbnQgQmxvY2tTeW1ib2w6Ok51bVZhcmlhYmxl
U3ltYm9scygpIHsgcmV0dXJuICh0YWJsZSA/IHRhYmxlIC0+IE51bVZhcmlhYmxlU3ltYm9scygp
IDogMCk7IH0KaW5saW5lIFZhcmlhYmxlU3ltYm9sICpCbG9ja1N5bWJvbDo6VmFyaWFibGVTeW0o
aW50IGkpIHsgcmV0dXJuIHRhYmxlIC0+IFZhcmlhYmxlU3ltKGkpOyB9CgppbmxpbmUgaW50IFR5
cGVTeW1ib2w6Ok51bU1ldGhvZFN5bWJvbHMoKSB7IHJldHVybiAodGFibGUgPyB0YWJsZSAtPiBO
dW1NZXRob2RTeW1ib2xzKCkgOiAwKTsgfQppbmxpbmUgTWV0aG9kU3ltYm9sICpUeXBlU3ltYm9s
OjpNZXRob2RTeW0oaW50IGkpIHsgcmV0dXJuIHRhYmxlIC0+IE1ldGhvZFN5bShpKTsgfQoKaW5s
aW5lIGludCBUeXBlU3ltYm9sOjpOdW1UeXBlU3ltYm9scygpIHsgcmV0dXJuICh0YWJsZSA/IHRh
YmxlIC0+IE51bVR5cGVTeW1ib2xzKCkgOiAwKTsgfQppbmxpbmUgVHlwZVN5bWJvbCAqVHlwZVN5
bWJvbDo6VHlwZVN5bShpbnQgaSkgeyByZXR1cm4gdGFibGUgLT4gVHlwZVN5bShpKTsgfQoKaW5s
aW5lIHZvaWQgVHlwZVN5bWJvbDo6Q29tcHJlc3NTcGFjZSgpIHsgaWYgKHRhYmxlKSB0YWJsZSAt
PiBDb21wcmVzc1NwYWNlKCk7IH0KaW5saW5lIHZvaWQgQmxvY2tTeW1ib2w6OkNvbXByZXNzU3Bh
Y2UoKSB7IGlmICh0YWJsZSkgdGFibGUgLT4gQ29tcHJlc3NTcGFjZSgpOyB9CgppbmxpbmUgUGF0
aFN5bWJvbCAqU3ltYm9sVGFibGU6Okluc2VydFBhdGhTeW1ib2woTmFtZVN5bWJvbCAqbmFtZV9z
eW1ib2wsIERpcmVjdG9yeVN5bWJvbCAqZGlyZWN0b3J5X3N5bWJvbCkKewogICAgKHN0YXRpY19j
YXN0PHZvaWQ+ICAoKCBiYXNlICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJiYXNlIiAsICIuLi8u
Li9qaWtlcy9zcmMvc3ltYm9sLmgiLCAxNTM5LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkg
OwoKICAgIFBhdGhTeW1ib2wgKnN5bWJvbCA9IG5ldyBQYXRoU3ltYm9sKG5hbWVfc3ltYm9sKTsK
ICAgIGRpcmVjdG9yeV9zeW1ib2wgLT4gb3duZXIgPSBzeW1ib2w7CiAgICBzeW1ib2wgLT4gcm9v
dF9kaXJlY3RvcnkgPSBkaXJlY3Rvcnlfc3ltYm9sOwogICAgQWRkT3RoZXJTeW1ib2woc3ltYm9s
KTsKCiAgICBpbnQgayA9IG5hbWVfc3ltYm9sIC0+IGluZGV4ICUgaGFzaF9zaXplOwogICAgc3lt
Ym9sIC0+IG5leHQgPSBiYXNlW2tdOwogICAgYmFzZVtrXSA9IHN5bWJvbDsKCiAgICAgCiAgICAg
CiAgICAgCiAgICAgCiAgICAgCiAgICBpZiAoKFNpemUoKSA+IChoYXNoX3NpemUgPDwgMSkpICYm
IChoYXNoX3NpemUgPCBNQVhfSEFTSF9TSVpFKSkKICAgICAgICBSZWhhc2goKTsKCiAgICByZXR1
cm4gc3ltYm9sOwp9CgoKaW5saW5lIFBhdGhTeW1ib2wgKlN5bWJvbFRhYmxlOjpGaW5kUGF0aFN5
bWJvbChOYW1lU3ltYm9sICpuYW1lX3N5bWJvbCkKewogICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAo
KCBiYXNlICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJiYXNlIiAsICIuLi8uLi9qaWtlcy9zcmMv
c3ltYm9sLmgiLCAxNTY0LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgIGZvciAo
U3ltYm9sICpzeW1ib2wgPSBiYXNlW25hbWVfc3ltYm9sIC0+IGluZGV4ICUgaGFzaF9zaXplXTsg
c3ltYm9sOyBzeW1ib2wgPSBzeW1ib2wgLT4gbmV4dCkKICAgIHsKICAgICAgICBpZiAobmFtZV9z
eW1ib2wgPT0gc3ltYm9sIC0+IElkZW50aXR5KCkpCiAgICAgICAgICAgIHJldHVybiAoUGF0aFN5
bWJvbCAqKSBzeW1ib2w7CiAgICB9CgogICAgcmV0dXJuIChQYXRoU3ltYm9sICopIF9fbnVsbCA7
Cn0KCgppbmxpbmUgRGlyZWN0b3J5U3ltYm9sICpTeW1ib2xUYWJsZTo6SW5zZXJ0RGlyZWN0b3J5
U3ltYm9sKE5hbWVTeW1ib2wgKm5hbWVfc3ltYm9sLCBTeW1ib2wgKm93bmVyLCBib29sIHNvdXJj
ZV9wYXRoKQp7CiAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIGJhc2UgKSA/IDAgOgkoX19hc3Nl
cnRfZmFpbCAoImJhc2UiICwgIi4uLy4uL2ppa2VzL3NyYy9zeW1ib2wuaCIsIDE1NzgsIF9fUFJF
VFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogICAgRGlyZWN0b3J5U3ltYm9sICpzeW1ib2wgPSBu
ZXcgRGlyZWN0b3J5U3ltYm9sKG5hbWVfc3ltYm9sLCBvd25lciwgc291cmNlX3BhdGgpOwogICAg
QWRkT3RoZXJTeW1ib2woc3ltYm9sKTsKCiAgICBpbnQgayA9IG5hbWVfc3ltYm9sIC0+IGluZGV4
ICUgaGFzaF9zaXplOwogICAgc3ltYm9sIC0+IG5leHQgPSBiYXNlW2tdOwogICAgYmFzZVtrXSA9
IHN5bWJvbDsKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBpZiAoKFNpemUoKSA+
IChoYXNoX3NpemUgPDwgMSkpICYmIChoYXNoX3NpemUgPCBNQVhfSEFTSF9TSVpFKSkKICAgICAg
ICBSZWhhc2goKTsKCiAgICByZXR1cm4gc3ltYm9sOwp9CgoKaW5saW5lIERpcmVjdG9yeVN5bWJv
bCAqRGlyZWN0b3J5U3ltYm9sOjpJbnNlcnREaXJlY3RvcnlTeW1ib2woTmFtZVN5bWJvbCAqbmFt
ZV9zeW1ib2wsIGJvb2wgc291cmNlX2RpcikKewogICAgRGlyZWN0b3J5U3ltYm9sICpzdWJkaXJl
Y3Rvcnlfc3ltYm9sID0gVGFibGUoKSAtPiBJbnNlcnREaXJlY3RvcnlTeW1ib2wobmFtZV9zeW1i
b2wsIHRoaXMsIHNvdXJjZV9kaXIpOwogICAgdGhpcyAtPiBzdWJkaXJlY3Rvcmllcy5OZXh0KCkg
PSBzdWJkaXJlY3Rvcnlfc3ltYm9sOwoKICAgIHJldHVybiBzdWJkaXJlY3Rvcnlfc3ltYm9sOwp9
CgoKaW5saW5lIERpcmVjdG9yeVN5bWJvbCAqU3ltYm9sVGFibGU6OkZpbmREaXJlY3RvcnlTeW1i
b2woTmFtZVN5bWJvbCAqbmFtZV9zeW1ib2wpCnsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCgg
YmFzZSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiYmFzZSIgLCAiLi4vLi4vamlrZXMvc3JjL3N5
bWJvbC5oIiwgMTYxMCwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICBmb3IgKFN5
bWJvbCAqc3ltYm9sID0gYmFzZVtuYW1lX3N5bWJvbCAtPiBpbmRleCAlIGhhc2hfc2l6ZV07IHN5
bWJvbDsgc3ltYm9sID0gc3ltYm9sIC0+IG5leHQpCiAgICB7CiAgICAgICAgaWYgKG5hbWVfc3lt
Ym9sID09IHN5bWJvbCAtPiBJZGVudGl0eSgpKQogICAgICAgIHsKICAgICAgICAgICAgRGlyZWN0
b3J5U3ltYm9sICpkaXJlY3Rvcnlfc3ltYm9sID0gc3ltYm9sIC0+IERpcmVjdG9yeUNhc3QoKTsK
ICAgICAgICAgICAgaWYgKGRpcmVjdG9yeV9zeW1ib2wpCiAgICAgICAgICAgICAgICByZXR1cm4g
ZGlyZWN0b3J5X3N5bWJvbDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIChEaXJlY3RvcnlT
eW1ib2wgKikgX19udWxsIDsKfQoKCmlubGluZSBEaXJlY3RvcnlTeW1ib2wgKkRpcmVjdG9yeVN5
bWJvbDo6RmluZERpcmVjdG9yeVN5bWJvbChOYW1lU3ltYm9sICpuYW1lX3N5bWJvbCkKewogICAg
cmV0dXJuICh0YWJsZSA/IHRhYmxlIC0+IEZpbmREaXJlY3RvcnlTeW1ib2wobmFtZV9zeW1ib2wp
IDogKERpcmVjdG9yeVN5bWJvbCAqKSBfX251bGwgKTsKfQoKCmlubGluZSBGaWxlU3ltYm9sICpT
eW1ib2xUYWJsZTo6SW5zZXJ0RmlsZVN5bWJvbChOYW1lU3ltYm9sICpuYW1lX3N5bWJvbCkKewog
ICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBiYXNlICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJi
YXNlIiAsICIuLi8uLi9qaWtlcy9zcmMvc3ltYm9sLmgiLCAxNjM0LCBfX1BSRVRUWV9GVU5DVElP
Tl9fICksIDApKSkgOwoKICAgIEZpbGVTeW1ib2wgKnN5bWJvbCA9IG5ldyBGaWxlU3ltYm9sKG5h
bWVfc3ltYm9sKTsKICAgIEFkZE90aGVyU3ltYm9sKHN5bWJvbCk7CgogICAgaW50IGsgPSBuYW1l
X3N5bWJvbCAtPiBpbmRleCAlIGhhc2hfc2l6ZTsKICAgIHN5bWJvbCAtPiBuZXh0ID0gYmFzZVtr
XTsKICAgIGJhc2Vba10gPSBzeW1ib2w7CgogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAog
ICAgaWYgKChTaXplKCkgPiAoaGFzaF9zaXplIDw8IDEpKSAmJiAoaGFzaF9zaXplIDwgTUFYX0hB
U0hfU0laRSkpCiAgICAgICAgUmVoYXNoKCk7CgogICAgcmV0dXJuIHN5bWJvbDsKfQoKCmlubGlu
ZSBGaWxlU3ltYm9sICpEaXJlY3RvcnlTeW1ib2w6Okluc2VydEZpbGVTeW1ib2woTmFtZVN5bWJv
bCAqbmFtZV9zeW1ib2wpCnsKICAgIHJldHVybiBUYWJsZSgpIC0+IEluc2VydEZpbGVTeW1ib2wo
bmFtZV9zeW1ib2wpOwp9CgoKaW5saW5lIEZpbGVTeW1ib2wgKlN5bWJvbFRhYmxlOjpGaW5kRmls
ZVN5bWJvbChOYW1lU3ltYm9sICpuYW1lX3N5bWJvbCkKewogICAgKHN0YXRpY19jYXN0PHZvaWQ+
ICAoKCBiYXNlICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJiYXNlIiAsICIuLi8uLi9qaWtlcy9z
cmMvc3ltYm9sLmgiLCAxNjYzLCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgIGZv
ciAoU3ltYm9sICpzeW1ib2wgPSBiYXNlW25hbWVfc3ltYm9sIC0+IGluZGV4ICUgaGFzaF9zaXpl
XTsgc3ltYm9sOyBzeW1ib2wgPSBzeW1ib2wgLT4gbmV4dCkKICAgIHsKICAgICAgICBpZiAobmFt
ZV9zeW1ib2wgPT0gc3ltYm9sIC0+IElkZW50aXR5KCkpCiAgICAgICAgewogICAgICAgICAgICBG
aWxlU3ltYm9sICpmaWxlX3N5bWJvbCA9IHN5bWJvbCAtPiBGaWxlQ2FzdCgpOwogICAgICAgICAg
ICBpZiAoZmlsZV9zeW1ib2wpCiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZV9zeW1ib2w7CiAg
ICAgICAgfQogICAgfQoKICAgIHJldHVybiAoRmlsZVN5bWJvbCAqKSBfX251bGwgOwp9CgoKaW5s
aW5lIEZpbGVTeW1ib2wgKkRpcmVjdG9yeVN5bWJvbDo6RmluZEZpbGVTeW1ib2woTmFtZVN5bWJv
bCAqbmFtZV9zeW1ib2wpCnsKICAgIHJldHVybiAodGFibGUgPyB0YWJsZSAtPiBGaW5kRmlsZVN5
bWJvbChuYW1lX3N5bWJvbCkgOiAoRmlsZVN5bWJvbCAqKSBfX251bGwgKTsKfQoKCmlubGluZSBQ
YWNrYWdlU3ltYm9sICpTeW1ib2xUYWJsZTo6SW5zZXJ0UGFja2FnZVN5bWJvbChOYW1lU3ltYm9s
ICpuYW1lX3N5bWJvbCwgUGFja2FnZVN5bWJvbCAqb3duZXIpCnsKICAgIChzdGF0aWNfY2FzdDx2
b2lkPiAgKCggYmFzZSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiYmFzZSIgLCAiLi4vLi4vamlr
ZXMvc3JjL3N5bWJvbC5oIiwgMTY4NywgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAg
ICBQYWNrYWdlU3ltYm9sICpzeW1ib2wgPSBuZXcgUGFja2FnZVN5bWJvbChuYW1lX3N5bWJvbCwg
b3duZXIpOwogICAgQWRkT3RoZXJTeW1ib2woc3ltYm9sKTsKCiAgICBpbnQgayA9IG5hbWVfc3lt
Ym9sIC0+IGluZGV4ICUgaGFzaF9zaXplOwogICAgc3ltYm9sIC0+IG5leHQgPSBiYXNlW2tdOwog
ICAgYmFzZVtrXSA9IHN5bWJvbDsKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBp
ZiAoKFNpemUoKSA+IChoYXNoX3NpemUgPDwgMSkpICYmIChoYXNoX3NpemUgPCBNQVhfSEFTSF9T
SVpFKSkKICAgICAgICBSZWhhc2goKTsKCiAgICByZXR1cm4gc3ltYm9sOwp9CgoKaW5saW5lIFBh
Y2thZ2VTeW1ib2wgKlBhY2thZ2VTeW1ib2w6Okluc2VydFBhY2thZ2VTeW1ib2woTmFtZVN5bWJv
bCAqbmFtZV9zeW1ib2wpCnsKICAgIHJldHVybiBUYWJsZSgpIC0+IEluc2VydFBhY2thZ2VTeW1i
b2wobmFtZV9zeW1ib2wsIHRoaXMpOwp9CgoKaW5saW5lIFBhY2thZ2VTeW1ib2wgKlN5bWJvbFRh
YmxlOjpGaW5kUGFja2FnZVN5bWJvbChOYW1lU3ltYm9sICpuYW1lX3N5bWJvbCkKewogICAgKHN0
YXRpY19jYXN0PHZvaWQ+ICAoKCBiYXNlICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJiYXNlIiAs
ICIuLi8uLi9qaWtlcy9zcmMvc3ltYm9sLmgiLCAxNzE2LCBfX1BSRVRUWV9GVU5DVElPTl9fICks
IDApKSkgOwoKICAgIGZvciAoU3ltYm9sICpzeW1ib2wgPSBiYXNlW25hbWVfc3ltYm9sIC0+IGlu
ZGV4ICUgaGFzaF9zaXplXTsgc3ltYm9sOyBzeW1ib2wgPSBzeW1ib2wgLT4gbmV4dCkKICAgIHsK
ICAgICAgICBpZiAobmFtZV9zeW1ib2wgPT0gc3ltYm9sIC0+IElkZW50aXR5KCkpCiAgICAgICAg
ewogICAgICAgICAgICBQYWNrYWdlU3ltYm9sICpwYWNrYWdlX3N5bWJvbCA9IHN5bWJvbCAtPiBQ
YWNrYWdlQ2FzdCgpOwogICAgICAgICAgICBpZiAocGFja2FnZV9zeW1ib2wpCiAgICAgICAgICAg
ICAgICByZXR1cm4gcGFja2FnZV9zeW1ib2w7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAo
UGFja2FnZVN5bWJvbCAqKSBfX251bGwgOwp9CgoKaW5saW5lIFBhY2thZ2VTeW1ib2wgKlBhY2th
Z2VTeW1ib2w6OkZpbmRQYWNrYWdlU3ltYm9sKE5hbWVTeW1ib2wgKm5hbWVfc3ltYm9sKQp7CiAg
cmV0dXJuICh0YWJsZSA/IHRhYmxlIC0+IEZpbmRQYWNrYWdlU3ltYm9sKG5hbWVfc3ltYm9sKSA6
IChQYWNrYWdlU3ltYm9sICopIF9fbnVsbCApOwp9CgppbmxpbmUgVHlwZVN5bWJvbCAqU3ltYm9s
VGFibGU6Okluc2VydEFub255bW91c1R5cGVTeW1ib2woTmFtZVN5bWJvbCAqbmFtZV9zeW1ib2wp
CnsKICAgIFR5cGVTeW1ib2wgKnN5bWJvbCA9IG5ldyBUeXBlU3ltYm9sKG5hbWVfc3ltYm9sKTsK
ICAgIEFkZEFub255bW91c1N5bWJvbChzeW1ib2wpOwoKICAgIHJldHVybiBzeW1ib2w7Cn0KCgpp
bmxpbmUgVHlwZVN5bWJvbCAqVHlwZVN5bWJvbDo6SW5zZXJ0QW5vbnltb3VzVHlwZVN5bWJvbChO
YW1lU3ltYm9sICpuYW1lX3N5bWJvbCkKewogICAgcmV0dXJuIFRhYmxlKCkgLT4gSW5zZXJ0QW5v
bnltb3VzVHlwZVN5bWJvbChuYW1lX3N5bWJvbCk7Cn0KCgppbmxpbmUgVHlwZVN5bWJvbCAqU3lt
Ym9sVGFibGU6Okluc2VydFN5c3RlbVR5cGVTeW1ib2woTmFtZVN5bWJvbCAqbmFtZV9zeW1ib2wp
CnsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggYmFzZSApID8gMCA6CShfX2Fzc2VydF9mYWls
ICgiYmFzZSIgLCAiLi4vLi4vamlrZXMvc3JjL3N5bWJvbC5oIiwgMTc1NCwgX19QUkVUVFlfRlVO
Q1RJT05fXyApLCAwKSkpIDsKCiAgICBUeXBlU3ltYm9sICpzeW1ib2wgPSBuZXcgVHlwZVN5bWJv
bChuYW1lX3N5bWJvbCk7CiAgICBzeW1ib2wgLT4gcG9vbF9pbmRleCA9IE51bVR5cGVTeW1ib2xz
KCk7CiAgICBBZGRUeXBlU3ltYm9sKHN5bWJvbCk7CgogICAgaW50IGsgPSBuYW1lX3N5bWJvbCAt
PiBpbmRleCAlIGhhc2hfc2l6ZTsKICAgIHN5bWJvbCAtPiBuZXh0ID0gYmFzZVtrXTsKICAgIGJh
c2Vba10gPSBzeW1ib2w7CgogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgaWYgKChT
aXplKCkgPiAoaGFzaF9zaXplIDw8IDEpKSAmJiAoaGFzaF9zaXplIDwgTUFYX0hBU0hfU0laRSkp
CiAgICAgICAgUmVoYXNoKCk7CgogICAgcmV0dXJuIHN5bWJvbDsKfQoKCmlubGluZSBUeXBlU3lt
Ym9sICpQYWNrYWdlU3ltYm9sOjpJbnNlcnRTeXN0ZW1UeXBlU3ltYm9sKE5hbWVTeW1ib2wgKm5h
bWVfc3ltYm9sKQp7CiAgICByZXR1cm4gVGFibGUoKSAtPiBJbnNlcnRTeXN0ZW1UeXBlU3ltYm9s
KG5hbWVfc3ltYm9sKTsKfQoKCmlubGluZSBUeXBlU3ltYm9sICpTeW1ib2xUYWJsZTo6SW5zZXJ0
T3V0ZXJUeXBlU3ltYm9sKE5hbWVTeW1ib2wgKm5hbWVfc3ltYm9sKQp7CiAgICAoc3RhdGljX2Nh
c3Q8dm9pZD4gICgoIGJhc2UgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImJhc2UiICwgIi4uLy4u
L2ppa2VzL3NyYy9zeW1ib2wuaCIsIDE3ODQsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7
CgogICAgVHlwZVN5bWJvbCAqc3ltYm9sID0gbmV3IFR5cGVTeW1ib2wobmFtZV9zeW1ib2wpOwog
ICAgc3ltYm9sIC0+IHBvb2xfaW5kZXggPSBOdW1UeXBlU3ltYm9scygpOwogICAgQWRkVHlwZVN5
bWJvbChzeW1ib2wpOwoKICAgIGludCBrID0gbmFtZV9zeW1ib2wgLT4gaW5kZXggJSBoYXNoX3Np
emU7CiAgICBzeW1ib2wgLT4gbmV4dCA9IGJhc2Vba107CiAgICBiYXNlW2tdID0gc3ltYm9sOwoK
ICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIGlmICgoU2l6ZSgpID4gKGhhc2hfc2l6
ZSA8PCAxKSkgJiYgKGhhc2hfc2l6ZSA8IE1BWF9IQVNIX1NJWkUpKQogICAgICAgIFJlaGFzaCgp
OwoKICAgIHJldHVybiBzeW1ib2w7Cn0KCgppbmxpbmUgVHlwZVN5bWJvbCAqUGFja2FnZVN5bWJv
bDo6SW5zZXJ0T3V0ZXJUeXBlU3ltYm9sKE5hbWVTeW1ib2wgKm5hbWVfc3ltYm9sKQp7CiAgICBy
ZXR1cm4gVGFibGUoKSAtPiBJbnNlcnRPdXRlclR5cGVTeW1ib2wobmFtZV9zeW1ib2wpOwp9CgoK
aW5saW5lIFR5cGVTeW1ib2wgKlN5bWJvbFRhYmxlOjpJbnNlcnROZXN0ZWRUeXBlU3ltYm9sKE5h
bWVTeW1ib2wgKm5hbWVfc3ltYm9sKQp7CiAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIGJhc2Ug
KSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImJhc2UiICwgIi4uLy4uL2ppa2VzL3NyYy9zeW1ib2wu
aCIsIDE4MTQsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogICAgVHlwZVN5bWJvbCAq
c3ltYm9sID0gbmV3IFR5cGVTeW1ib2wobmFtZV9zeW1ib2wpOwogICAgc3ltYm9sIC0+IHBvb2xf
aW5kZXggPSBOdW1UeXBlU3ltYm9scygpOwogICAgQWRkVHlwZVN5bWJvbChzeW1ib2wpOwoKICAg
IGludCBrID0gbmFtZV9zeW1ib2wgLT4gaW5kZXggJSBoYXNoX3NpemU7CiAgICBzeW1ib2wgLT4g
bmV4dCA9IGJhc2Vba107CiAgICBiYXNlW2tdID0gc3ltYm9sOwoKICAgICAKICAgICAKICAgICAK
ICAgICAKICAgICAKICAgIGlmICgoU2l6ZSgpID4gKGhhc2hfc2l6ZSA8PCAxKSkgJiYgKGhhc2hf
c2l6ZSA8IE1BWF9IQVNIX1NJWkUpKQogICAgICAgIFJlaGFzaCgpOwoKICAgIHJldHVybiBzeW1i
b2w7Cn0KCgppbmxpbmUgVHlwZVN5bWJvbCAqVHlwZVN5bWJvbDo6SW5zZXJ0TmVzdGVkVHlwZVN5
bWJvbChOYW1lU3ltYm9sICpuYW1lX3N5bWJvbCkKewogICAgcmV0dXJuIFRhYmxlKCkgLT4gSW5z
ZXJ0TmVzdGVkVHlwZVN5bWJvbChuYW1lX3N5bWJvbCk7Cn0KCgppbmxpbmUgdm9pZCBTeW1ib2xU
YWJsZTo6RGVsZXRlVHlwZVN5bWJvbChUeXBlU3ltYm9sICp0eXBlKQp7CiAgICAoc3RhdGljX2Nh
c3Q8dm9pZD4gICgoIGJhc2UgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImJhc2UiICwgIi4uLy4u
L2ppa2VzL3NyYy9zeW1ib2wuaCIsIDE4NDQsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7
CgogICAgaW50IGsgPSB0eXBlIC0+IG5hbWVfc3ltYm9sIC0+IGluZGV4ICUgaGFzaF9zaXplOwog
ICAgaWYgKHR5cGUgPT0gYmFzZVtrXSkKICAgICAgICBiYXNlW2tdID0gdHlwZSAtPiBuZXh0Owog
ICAgZWxzZQogICAgewogICAgICAgIFN5bWJvbCAqcHJldmlvdXMgPSBiYXNlW2tdOwogICAgICAg
IGZvciAoU3ltYm9sICpzeW1ib2wgPSBwcmV2aW91cyAtPiBuZXh0OyBzeW1ib2wgIT0gdHlwZTsg
cHJldmlvdXMgPSBzeW1ib2wsIHN5bWJvbCA9IHN5bWJvbCAtPiBuZXh0KQogICAgICAgICAgICA7
CiAgICAgICAgcHJldmlvdXMgLT4gbmV4dCA9IHR5cGUgLT4gbmV4dDsKICAgIH0KCiAgICBpbnQg
bGFzdF9pbmRleCA9IE51bVR5cGVTeW1ib2xzKCkgLSAxOwogICAgaWYgKHR5cGUgLT4gcG9vbF9p
bmRleCAhPSBsYXN0X2luZGV4KQogICAgeyAKICAgICAgICBUeXBlU3ltKGxhc3RfaW5kZXgpIC0+
IHBvb2xfaW5kZXggPSB0eXBlIC0+IHBvb2xfaW5kZXg7CiAgICAgICAgVHlwZVN5bSh0eXBlIC0+
IHBvb2xfaW5kZXgpID0gVHlwZVN5bShsYXN0X2luZGV4KTsKICAgIH0KCiAgICB0eXBlX3N5bWJv
bF9wb29sIC0+IFJlc2V0KGxhc3RfaW5kZXgpOyAgCgogICAgZGVsZXRlIHR5cGU7CgogICAgcmV0
dXJuOwp9CgoKaW5saW5lIHZvaWQgUGFja2FnZVN5bWJvbDo6RGVsZXRlVHlwZVN5bWJvbChUeXBl
U3ltYm9sICp0eXBlKQp7CiAgICBpZiAodGFibGUpCiAgICAgICAgdGFibGUgLT4gRGVsZXRlVHlw
ZVN5bWJvbCh0eXBlKTsKfQoKCmlubGluZSB2b2lkIFN5bWJvbFRhYmxlOjpEZWxldGVBbm9ueW1v
dXNUeXBlcygpCnsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTnVtQW5vbnltb3VzU3ltYm9scygp
OyBpKyspCiAgICAgICAgZGVsZXRlIEFub255bW91c1N5bShpKTsKICAgIGRlbGV0ZSBhbm9ueW1v
dXNfc3ltYm9sX3Bvb2w7CiAgICBhbm9ueW1vdXNfc3ltYm9sX3Bvb2wgPSBfX251bGwgOwoKICAg
IHJldHVybjsKfQoKCmlubGluZSB2b2lkIFR5cGVTeW1ib2w6OkRlbGV0ZUFub255bW91c1R5cGVz
KCkKewogICAgZGVsZXRlIGFub255bW91c190eXBlczsKICAgIGFub255bW91c190eXBlcyA9IF9f
bnVsbCA7CiAgICBpZiAodGFibGUpCiAgICAgICAgdGFibGUgLT4gRGVsZXRlQW5vbnltb3VzVHlw
ZXMoKTsKfQoKaW5saW5lIFR5cGVTeW1ib2wgKlN5bWJvbFRhYmxlOjpGaW5kVHlwZVN5bWJvbChO
YW1lU3ltYm9sICpuYW1lX3N5bWJvbCkKewogICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBiYXNl
ICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJiYXNlIiAsICIuLi8uLi9qaWtlcy9zcmMvc3ltYm9s
LmgiLCAxOTAwLCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgIGZvciAoU3ltYm9s
ICpzeW1ib2wgPSBiYXNlW25hbWVfc3ltYm9sIC0+IGluZGV4ICUgaGFzaF9zaXplXTsgc3ltYm9s
OyBzeW1ib2wgPSBzeW1ib2wgLT4gbmV4dCkKICAgIHsKICAgICAgICBpZiAobmFtZV9zeW1ib2wg
PT0gc3ltYm9sIC0+IElkZW50aXR5KCkpCiAgICAgICAgewogICAgICAgICAgICBUeXBlU3ltYm9s
ICp0eXBlID0gc3ltYm9sIC0+IFR5cGVDYXN0KCk7CiAgICAgICAgICAgIGlmICh0eXBlKQogICAg
ICAgICAgICAgICAgcmV0dXJuIHR5cGU7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAoVHlw
ZVN5bWJvbCAqKSBfX251bGwgOwp9CgoKaW5saW5lIFR5cGVTeW1ib2wgKlBhY2thZ2VTeW1ib2w6
OkZpbmRUeXBlU3ltYm9sKE5hbWVTeW1ib2wgKm5hbWVfc3ltYm9sKQp7CiAgICByZXR1cm4gKHRh
YmxlID8gdGFibGUgLT4gRmluZFR5cGVTeW1ib2wobmFtZV9zeW1ib2wpIDogKFR5cGVTeW1ib2wg
KikgX19udWxsICk7Cn0KCgppbmxpbmUgVHlwZVN5bWJvbCAqVHlwZVN5bWJvbDo6RmluZFR5cGVT
eW1ib2woTmFtZVN5bWJvbCAqbmFtZV9zeW1ib2wpCnsKICAgIHJldHVybiAodGFibGUgPyB0YWJs
ZSAtPiBGaW5kVHlwZVN5bWJvbChuYW1lX3N5bWJvbCkgOiAoVHlwZVN5bWJvbCAqKSBfX251bGwg
KTsKfQoKCmlubGluZSBNZXRob2RTeW1ib2wgKlN5bWJvbFRhYmxlOjpJbnNlcnRNZXRob2RTeW1i
b2woTmFtZVN5bWJvbCAqbmFtZV9zeW1ib2wpCnsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCgg
YmFzZSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiYmFzZSIgLCAiLi4vLi4vamlrZXMvc3JjL3N5
bWJvbC5oIiwgMTkzMCwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICBNZXRob2RT
eW1ib2wgKnN5bWJvbCA9IG5ldyBNZXRob2RTeW1ib2wobmFtZV9zeW1ib2wpOwogICAgQWRkTWV0
aG9kU3ltYm9sKHN5bWJvbCk7CgogICAgaW50IGsgPSBuYW1lX3N5bWJvbCAtPiBpbmRleCAlIGhh
c2hfc2l6ZTsKICAgIHN5bWJvbCAtPiBuZXh0ID0gYmFzZVtrXTsKICAgIGJhc2Vba10gPSBzeW1i
b2w7CgogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgaWYgKChTaXplKCkgPiAoaGFz
aF9zaXplIDw8IDEpKSAmJiAoaGFzaF9zaXplIDwgTUFYX0hBU0hfU0laRSkpCiAgICAgICAgUmVo
YXNoKCk7CgogICAgcmV0dXJuIHN5bWJvbDsKfQoKCmlubGluZSBNZXRob2RTeW1ib2wgKlR5cGVT
eW1ib2w6Okluc2VydE1ldGhvZFN5bWJvbChOYW1lU3ltYm9sICpuYW1lX3N5bWJvbCkKewogICAg
cmV0dXJuIFRhYmxlKCkgLT4gSW5zZXJ0TWV0aG9kU3ltYm9sKG5hbWVfc3ltYm9sKTsKfQoKCmlu
bGluZSBNZXRob2RTeW1ib2wgKlN5bWJvbFRhYmxlOjpJbnNlcnRDb25zdHJ1Y3RvclN5bWJvbChO
YW1lU3ltYm9sICpuYW1lX3N5bWJvbCkKewogICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCAhIGNv
bnN0cnVjdG9yICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCIhIGNvbnN0cnVjdG9yIiAsICIuLi8u
Li9qaWtlcy9zcmMvc3ltYm9sLmgiLCAxOTU5LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkg
OwoKICAgIHRoaXMgLT4gY29uc3RydWN0b3IgPSBJbnNlcnRNZXRob2RTeW1ib2wobmFtZV9zeW1i
b2wpOwogICAgcmV0dXJuIHRoaXMgLT4gY29uc3RydWN0b3I7Cn0KCgppbmxpbmUgTWV0aG9kU3lt
Ym9sICpUeXBlU3ltYm9sOjpJbnNlcnRDb25zdHJ1Y3RvclN5bWJvbChOYW1lU3ltYm9sICpuYW1l
X3N5bWJvbCkKewogICAgcmV0dXJuIFRhYmxlKCkgLT4gSW5zZXJ0Q29uc3RydWN0b3JTeW1ib2wo
bmFtZV9zeW1ib2wpOwp9CgoKaW5saW5lIHZvaWQgU3ltYm9sVGFibGU6Okluc2VydE1ldGhvZFN5
bWJvbChNZXRob2RTeW1ib2wgKm1ldGhvZF9zeW1ib2wpCnsKICAgIChzdGF0aWNfY2FzdDx2b2lk
PiAgKCggYmFzZSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiYmFzZSIgLCAiLi4vLi4vamlrZXMv
c3JjL3N5bWJvbC5oIiwgMTk3NCwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICBB
ZGRNZXRob2RTeW1ib2wobWV0aG9kX3N5bWJvbCk7CgogICAgaW50IGsgPSBtZXRob2Rfc3ltYm9s
IC0+IG5hbWVfc3ltYm9sIC0+IGluZGV4ICUgaGFzaF9zaXplOwogICAgbWV0aG9kX3N5bWJvbCAt
PiBuZXh0ID0gYmFzZVtrXTsKICAgIGJhc2Vba10gPSBtZXRob2Rfc3ltYm9sOwoKICAgICAKICAg
ICAKICAgICAKICAgICAKICAgICAKICAgIGlmICgoU2l6ZSgpID4gKGhhc2hfc2l6ZSA8PCAxKSkg
JiYgKGhhc2hfc2l6ZSA8IE1BWF9IQVNIX1NJWkUpKQogICAgICAgIFJlaGFzaCgpOwoKICAgIHJl
dHVybjsKfQoKCmlubGluZSB2b2lkIFR5cGVTeW1ib2w6Okluc2VydE1ldGhvZFN5bWJvbChNZXRo
b2RTeW1ib2wgKm1ldGhvZF9zeW1ib2wpCnsKICAgIFRhYmxlKCkgLT4gSW5zZXJ0TWV0aG9kU3lt
Ym9sKG1ldGhvZF9zeW1ib2wpOwp9CgoKaW5saW5lIHZvaWQgU3ltYm9sVGFibGU6Okluc2VydENv
bnN0cnVjdG9yU3ltYm9sKE1ldGhvZFN5bWJvbCAqbWV0aG9kX3N5bWJvbCkKewogICAgKHN0YXRp
Y19jYXN0PHZvaWQ+ICAoKCAhIGNvbnN0cnVjdG9yICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCIh
IGNvbnN0cnVjdG9yIiAsICIuLi8uLi9qaWtlcy9zcmMvc3ltYm9sLmgiLCAyMDAyLCBfX1BSRVRU
WV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgIHRoaXMgLT4gY29uc3RydWN0b3IgPSBtZXRob2Rf
c3ltYm9sOwogICAgSW5zZXJ0TWV0aG9kU3ltYm9sKG1ldGhvZF9zeW1ib2wpOwp9CgoKaW5saW5l
IHZvaWQgVHlwZVN5bWJvbDo6SW5zZXJ0Q29uc3RydWN0b3JTeW1ib2woTWV0aG9kU3ltYm9sICpt
ZXRob2Rfc3ltYm9sKQp7CiAgICBUYWJsZSgpIC0+IEluc2VydENvbnN0cnVjdG9yU3ltYm9sKG1l
dGhvZF9zeW1ib2wpOwp9CgoKaW5saW5lIE1ldGhvZFN5bWJvbCAqU3ltYm9sVGFibGU6OkZpbmRN
ZXRob2RTeW1ib2woTmFtZVN5bWJvbCAqbmFtZV9zeW1ib2wpCnsKICAgIChzdGF0aWNfY2FzdDx2
b2lkPiAgKCggYmFzZSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiYmFzZSIgLCAiLi4vLi4vamlr
ZXMvc3JjL3N5bWJvbC5oIiwgMjAxNywgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAg
ICBmb3IgKFN5bWJvbCAqc3ltYm9sID0gYmFzZVtuYW1lX3N5bWJvbCAtPiBpbmRleCAlIGhhc2hf
c2l6ZV07IHN5bWJvbDsgc3ltYm9sID0gc3ltYm9sIC0+IG5leHQpCiAgICB7CiAgICAgICAgaWYg
KG5hbWVfc3ltYm9sID09IHN5bWJvbCAtPiBJZGVudGl0eSgpKQogICAgICAgIHsKICAgICAgICAg
ICAgTWV0aG9kU3ltYm9sICptZXRob2QgPSBzeW1ib2wgLT4gTWV0aG9kQ2FzdCgpOwogICAgICAg
ICAgICBpZiAobWV0aG9kKQogICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZDsKICAgICAgICB9
CiAgICB9CgogICAgcmV0dXJuIChNZXRob2RTeW1ib2wgKikgX19udWxsIDsKfQoKCmlubGluZSBN
ZXRob2RTeW1ib2wgKlR5cGVTeW1ib2w6OkZpbmRNZXRob2RTeW1ib2woTmFtZVN5bWJvbCAqbmFt
ZV9zeW1ib2wpCnsKICAgIHJldHVybiAodGFibGUgPyB0YWJsZSAtPiBGaW5kTWV0aG9kU3ltYm9s
KG5hbWVfc3ltYm9sKSA6IChNZXRob2RTeW1ib2wgKikgX19udWxsICk7Cn0KCgppbmxpbmUgTWV0
aG9kU3ltYm9sICpTeW1ib2xUYWJsZTo6RmluZENvbnN0cnVjdG9yU3ltYm9sKCkKewogICAgcmV0
dXJuIHRoaXMgLT4gY29uc3RydWN0b3I7Cn0KCmlubGluZSBNZXRob2RTeW1ib2wgKlR5cGVTeW1i
b2w6OkZpbmRDb25zdHJ1Y3RvclN5bWJvbCgpCnsKICAgIHJldHVybiAodGFibGUgPyB0YWJsZSAt
PiBGaW5kQ29uc3RydWN0b3JTeW1ib2woKSA6IChNZXRob2RTeW1ib2wgKikgX19udWxsICk7Cn0K
CmlubGluZSBWYXJpYWJsZVN5bWJvbCAqU3ltYm9sVGFibGU6Okluc2VydFZhcmlhYmxlU3ltYm9s
KE5hbWVTeW1ib2wgKm5hbWVfc3ltYm9sKQp7CiAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIGJh
c2UgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImJhc2UiICwgIi4uLy4uL2ppa2VzL3NyYy9zeW1i
b2wuaCIsIDIwNTEsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogICAgVmFyaWFibGVT
eW1ib2wgKnN5bWJvbCA9IG5ldyBWYXJpYWJsZVN5bWJvbChuYW1lX3N5bWJvbCk7CiAgICBBZGRW
YXJpYWJsZVN5bWJvbChzeW1ib2wpOwoKICAgIGludCBrID0gbmFtZV9zeW1ib2wgLT4gaW5kZXgg
JSBoYXNoX3NpemU7CiAgICBzeW1ib2wgLT4gbmV4dCA9IGJhc2Vba107CiAgICBiYXNlW2tdID0g
c3ltYm9sOwoKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIGlmICgoU2l6ZSgpID4g
KGhhc2hfc2l6ZSA8PCAxKSkgJiYgKGhhc2hfc2l6ZSA8IE1BWF9IQVNIX1NJWkUpKQogICAgICAg
IFJlaGFzaCgpOwoKICAgIHJldHVybiBzeW1ib2w7Cn0KCgppbmxpbmUgVmFyaWFibGVTeW1ib2wg
KlR5cGVTeW1ib2w6Okluc2VydFZhcmlhYmxlU3ltYm9sKE5hbWVTeW1ib2wgKm5hbWVfc3ltYm9s
KQp7CiAgICByZXR1cm4gVGFibGUoKSAtPiBJbnNlcnRWYXJpYWJsZVN5bWJvbChuYW1lX3N5bWJv
bCk7Cn0KCgppbmxpbmUgVmFyaWFibGVTeW1ib2wgKkJsb2NrU3ltYm9sOjpJbnNlcnRWYXJpYWJs
ZVN5bWJvbChOYW1lU3ltYm9sICpuYW1lX3N5bWJvbCkKewogICAgcmV0dXJuIFRhYmxlKCkgLT4g
SW5zZXJ0VmFyaWFibGVTeW1ib2wobmFtZV9zeW1ib2wpOwp9CgoKaW5saW5lIHZvaWQgU3ltYm9s
VGFibGU6Okluc2VydFZhcmlhYmxlU3ltYm9sKFZhcmlhYmxlU3ltYm9sICp2YXJpYWJsZV9zeW1i
b2wpCnsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggYmFzZSApID8gMCA6CShfX2Fzc2VydF9m
YWlsICgiYmFzZSIgLCAiLi4vLi4vamlrZXMvc3JjL3N5bWJvbC5oIiwgMjA4NiwgX19QUkVUVFlf
RlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICBBZGRWYXJpYWJsZVN5bWJvbCh2YXJpYWJsZV9zeW1i
b2wpOwoKICAgIGludCBrID0gdmFyaWFibGVfc3ltYm9sIC0+IG5hbWVfc3ltYm9sIC0+IGluZGV4
ICUgaGFzaF9zaXplOwogICAgdmFyaWFibGVfc3ltYm9sIC0+IG5leHQgPSBiYXNlW2tdOwogICAg
YmFzZVtrXSA9IHZhcmlhYmxlX3N5bWJvbDsKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAg
CiAgICBpZiAoKFNpemUoKSA+IChoYXNoX3NpemUgPDwgMSkpICYmIChoYXNoX3NpemUgPCBNQVhf
SEFTSF9TSVpFKSkKICAgICAgICBSZWhhc2goKTsKCiAgICByZXR1cm47Cn0KCgppbmxpbmUgdm9p
ZCBUeXBlU3ltYm9sOjpJbnNlcnRWYXJpYWJsZVN5bWJvbChWYXJpYWJsZVN5bWJvbCAqdmFyaWFi
bGVfc3ltYm9sKQp7CiAgICBUYWJsZSgpIC0+IEluc2VydFZhcmlhYmxlU3ltYm9sKHZhcmlhYmxl
X3N5bWJvbCk7Cn0KCgppbmxpbmUgdm9pZCBCbG9ja1N5bWJvbDo6SW5zZXJ0VmFyaWFibGVTeW1i
b2woVmFyaWFibGVTeW1ib2wgKnZhcmlhYmxlX3N5bWJvbCkKewogICAgVGFibGUoKSAtPiBJbnNl
cnRWYXJpYWJsZVN5bWJvbCh2YXJpYWJsZV9zeW1ib2wpOwp9CgoKaW5saW5lIFZhcmlhYmxlU3lt
Ym9sICpTeW1ib2xUYWJsZTo6RmluZFZhcmlhYmxlU3ltYm9sKE5hbWVTeW1ib2wgKm5hbWVfc3lt
Ym9sKQp7CiAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIGJhc2UgKSA/IDAgOgkoX19hc3NlcnRf
ZmFpbCAoImJhc2UiICwgIi4uLy4uL2ppa2VzL3NyYy9zeW1ib2wuaCIsIDIxMjAsIF9fUFJFVFRZ
X0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogICAgZm9yIChTeW1ib2wgKnN5bWJvbCA9IGJhc2VbbmFt
ZV9zeW1ib2wgLT4gaW5kZXggJSBoYXNoX3NpemVdOyBzeW1ib2w7IHN5bWJvbCA9IHN5bWJvbCAt
PiBuZXh0KQogICAgewogICAgICAgIGlmIChuYW1lX3N5bWJvbCA9PSBzeW1ib2wgLT4gSWRlbnRp
dHkoKSkKICAgICAgICB7CiAgICAgICAgICAgIFZhcmlhYmxlU3ltYm9sICp2YXJpYWJsZV9zeW1i
b2wgPSBzeW1ib2wgLT4gVmFyaWFibGVDYXN0KCk7CiAgICAgICAgICAgIGlmICh2YXJpYWJsZV9z
eW1ib2wpCiAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFibGVfc3ltYm9sOwogICAgICAgIH0K
ICAgIH0KCiAgICByZXR1cm4gKFZhcmlhYmxlU3ltYm9sICopIF9fbnVsbCA7Cn0KCgppbmxpbmUg
VmFyaWFibGVTeW1ib2wgKlR5cGVTeW1ib2w6OkZpbmRWYXJpYWJsZVN5bWJvbChOYW1lU3ltYm9s
ICpuYW1lX3N5bWJvbCkKewogICAgcmV0dXJuICh0YWJsZSA/IHRhYmxlIC0+IEZpbmRWYXJpYWJs
ZVN5bWJvbChuYW1lX3N5bWJvbCkgOiAoVmFyaWFibGVTeW1ib2wgKikgX19udWxsICk7Cn0KCgpp
bmxpbmUgVmFyaWFibGVTeW1ib2wgKkJsb2NrU3ltYm9sOjpGaW5kVmFyaWFibGVTeW1ib2woTmFt
ZVN5bWJvbCAqbmFtZV9zeW1ib2wpCnsKICAgIHJldHVybiAodGFibGUgPyB0YWJsZSAtPiBGaW5k
VmFyaWFibGVTeW1ib2wobmFtZV9zeW1ib2wpIDogKFZhcmlhYmxlU3ltYm9sICopIF9fbnVsbCAp
Owp9CgoKaW5saW5lIExhYmVsU3ltYm9sICpTeW1ib2xUYWJsZTo6SW5zZXJ0TGFiZWxTeW1ib2wo
TmFtZVN5bWJvbCAqbmFtZV9zeW1ib2wpCnsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggYmFz
ZSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiYmFzZSIgLCAiLi4vLi4vamlrZXMvc3JjL3N5bWJv
bC5oIiwgMjE1MCwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICBMYWJlbFN5bWJv
bCAqc3ltYm9sID0gbmV3IExhYmVsU3ltYm9sKG5hbWVfc3ltYm9sKTsKICAgIEFkZE90aGVyU3lt
Ym9sKHN5bWJvbCk7CgogICAgaW50IGsgPSBuYW1lX3N5bWJvbCAtPiBpbmRleCAlIGhhc2hfc2l6
ZTsKICAgIHN5bWJvbCAtPiBuZXh0ID0gYmFzZVtrXTsKICAgIGJhc2Vba10gPSBzeW1ib2w7Cgog
ICAgIAogICAgIAogICAgIAogICAgIAoKICAgIHJldHVybiBzeW1ib2w7Cn0KCgppbmxpbmUgTGFi
ZWxTeW1ib2wgKlN5bWJvbFRhYmxlOjpGaW5kTGFiZWxTeW1ib2woTmFtZVN5bWJvbCAqbmFtZV9z
eW1ib2wpCnsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggYmFzZSApID8gMCA6CShfX2Fzc2Vy
dF9mYWlsICgiYmFzZSIgLCAiLi4vLi4vamlrZXMvc3JjL3N5bWJvbC5oIiwgMjE3MCwgX19QUkVU
VFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICBmb3IgKFN5bWJvbCAqc3ltYm9sID0gYmFzZVtu
YW1lX3N5bWJvbCAtPiBpbmRleCAlIGhhc2hfc2l6ZV07IHN5bWJvbDsgc3ltYm9sID0gc3ltYm9s
IC0+IG5leHQpCiAgICB7CiAgICAgICAgaWYgKG5hbWVfc3ltYm9sID09IHN5bWJvbCAtPiBJZGVu
dGl0eSgpKQogICAgICAgIHsKICAgICAgICAgICAgTGFiZWxTeW1ib2wgKmxhYmVsID0gc3ltYm9s
IC0+IExhYmVsQ2FzdCgpOwogICAgICAgICAgICBpZiAobGFiZWwpCiAgICAgICAgICAgICAgICBy
ZXR1cm4gbGFiZWw7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAoTGFiZWxTeW1ib2wgKikg
X19udWxsIDsKfQoKaW5saW5lIEJsb2NrU3ltYm9sICpTeW1ib2xUYWJsZTo6SW5zZXJ0QmxvY2tT
eW1ib2woaW50IGhhc2hfc2l6ZSA9IDApCnsKICAgIEJsb2NrU3ltYm9sICpzeW1ib2wgPSBuZXcg
QmxvY2tTeW1ib2woaGFzaF9zaXplKTsKICAgIEFkZE90aGVyU3ltYm9sKHN5bWJvbCk7CgogICAg
cmV0dXJuIHN5bWJvbDsKfQoKCmlubGluZSBCbG9ja1N5bWJvbCAqQmxvY2tTeW1ib2w6Okluc2Vy
dEJsb2NrU3ltYm9sKGludCBoYXNoX3NpemUgPSAwKQp7CiAgICByZXR1cm4gVGFibGUoKSAtPiBJ
bnNlcnRCbG9ja1N5bWJvbChoYXNoX3NpemUpOwp9CgoKaW5saW5lIE1ldGhvZFN5bWJvbCAqU3lt
Ym9sVGFibGU6Ok92ZXJsb2FkKE1ldGhvZFN5bWJvbCAqYmFzZV9tZXRob2QpCnsKICAgIE1ldGhv
ZFN5bWJvbCAqb3ZlcmxvYWRfbWV0aG9kID0gbmV3IE1ldGhvZFN5bWJvbChiYXNlX21ldGhvZCAt
PiBJZGVudGl0eSgpKTsKICAgIEFkZE1ldGhvZFN5bWJvbChvdmVybG9hZF9tZXRob2QpOwoKICAg
IG92ZXJsb2FkX21ldGhvZCAtPiBuZXh0ID0gb3ZlcmxvYWRfbWV0aG9kOyAgCiAgICBvdmVybG9h
ZF9tZXRob2QgLT4gbmV4dF9tZXRob2QgPSBiYXNlX21ldGhvZCAtPiBuZXh0X21ldGhvZDsKICAg
IGJhc2VfbWV0aG9kIC0+IG5leHRfbWV0aG9kID0gb3ZlcmxvYWRfbWV0aG9kOwoKICAgIHJldHVy
biBvdmVybG9hZF9tZXRob2Q7Cn0KCgppbmxpbmUgTWV0aG9kU3ltYm9sICpUeXBlU3ltYm9sOjpP
dmVybG9hZChNZXRob2RTeW1ib2wgKmJhc2VfbWV0aG9kKQp7CiAgICAoc3RhdGljX2Nhc3Q8dm9p
ZD4gICgoIHRhYmxlICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJ0YWJsZSIgLCAiLi4vLi4vamlr
ZXMvc3JjL3N5bWJvbC5oIiwgMjIxNSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAg
ICByZXR1cm4gdGFibGUgLT4gT3ZlcmxvYWQoYmFzZV9tZXRob2QpOwp9CgoKaW5saW5lIHZvaWQg
U3ltYm9sVGFibGU6Ok92ZXJsb2FkKE1ldGhvZFN5bWJvbCAqYmFzZV9tZXRob2QsIE1ldGhvZFN5
bWJvbCAqb3ZlcmxvYWRfbWV0aG9kKQp7CiAgICBBZGRNZXRob2RTeW1ib2wob3ZlcmxvYWRfbWV0
aG9kKTsKCiAgICBvdmVybG9hZF9tZXRob2QgLT4gbmV4dCA9IG92ZXJsb2FkX21ldGhvZDsgIAog
ICAgb3ZlcmxvYWRfbWV0aG9kIC0+IG5leHRfbWV0aG9kID0gYmFzZV9tZXRob2QgLT4gbmV4dF9t
ZXRob2Q7CiAgICBiYXNlX21ldGhvZCAtPiBuZXh0X21ldGhvZCA9IG92ZXJsb2FkX21ldGhvZDsK
CiAgICByZXR1cm47Cn0KCmlubGluZSB2b2lkIFR5cGVTeW1ib2w6Ok92ZXJsb2FkKE1ldGhvZFN5
bWJvbCAqYmFzZV9tZXRob2QsIE1ldGhvZFN5bWJvbCAqb3ZlcmxvYWRfbWV0aG9kKQp7CiAgICAo
c3RhdGljX2Nhc3Q8dm9pZD4gICgoIHRhYmxlICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJ0YWJs
ZSIgLCAiLi4vLi4vamlrZXMvc3JjL3N5bWJvbC5oIiwgMjIzNCwgX19QUkVUVFlfRlVOQ1RJT05f
XyApLCAwKSkpIDsKCiAgICB0YWJsZSAtPiBPdmVybG9hZChiYXNlX21ldGhvZCwgb3ZlcmxvYWRf
bWV0aG9kKTsKfQoKCmlubGluZSBNZXRob2RTeW1ib2wgKlN5bWJvbFRhYmxlOjpMb2NhbENvbnN0
cnVjdG9yT3ZlcmxvYWQoTWV0aG9kU3ltYm9sICpiYXNlX21ldGhvZCkKewogICAgTWV0aG9kU3lt
Ym9sICpvdmVybG9hZF9tZXRob2QgPSBuZXcgTWV0aG9kU3ltYm9sKGJhc2VfbWV0aG9kIC0+IElk
ZW50aXR5KCkpOwogICAgQWRkTWV0aG9kU3ltYm9sKG92ZXJsb2FkX21ldGhvZCk7CgogICAgb3Zl
cmxvYWRfbWV0aG9kIC0+IG5leHQgPSBvdmVybG9hZF9tZXRob2Q7ICAKICAgIG92ZXJsb2FkX21l
dGhvZCAtPiBTZXRHZW5lcmF0ZWRMb2NhbENvbnN0cnVjdG9yKGJhc2VfbWV0aG9kKTsKCiAgICBy
ZXR1cm4gb3ZlcmxvYWRfbWV0aG9kOwp9CgoKaW5saW5lIE1ldGhvZFN5bWJvbCAqVHlwZVN5bWJv
bDo6TG9jYWxDb25zdHJ1Y3Rvck92ZXJsb2FkKE1ldGhvZFN5bWJvbCAqYmFzZV9tZXRob2QpCnsK
ICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggdGFibGUgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAo
InRhYmxlIiAsICIuLi8uLi9qaWtlcy9zcmMvc3ltYm9sLmgiLCAyMjU0LCBfX1BSRVRUWV9GVU5D
VElPTl9fICksIDApKSkgOwoKICAgIHJldHVybiB0YWJsZSAtPiBMb2NhbENvbnN0cnVjdG9yT3Zl
cmxvYWQoYmFzZV9tZXRob2QpOwp9CgoKaW5saW5lIE1ldGhvZFN5bWJvbCAqVHlwZVN5bWJvbDo6
RmluZE92ZXJsb2FkTWV0aG9kKE1ldGhvZFN5bWJvbCAqYmFzZV9tZXRob2QsIEFzdE1ldGhvZERl
Y2xhcmF0b3IgKm1ldGhvZF9kZWNsYXJhdG9yKQp7CiAgICByZXR1cm4gKHRhYmxlID8gdGFibGUg
LT4gRmluZE92ZXJsb2FkTWV0aG9kKGJhc2VfbWV0aG9kLCBtZXRob2RfZGVjbGFyYXRvcikgOiAo
TWV0aG9kU3ltYm9sICopIF9fbnVsbCApOwp9CgoKaW5saW5lIFN5bWJvbFRhYmxlICpEaXJlY3Rv
cnlTeW1ib2w6OlRhYmxlKCkKewogICAgcmV0dXJuICh0YWJsZSA/IHRhYmxlIDogdGFibGUgPSBu
ZXcgU3ltYm9sVGFibGUoMTAxKSk7Cn0KCmlubGluZSBTeW1ib2xUYWJsZSAqUGFja2FnZVN5bWJv
bDo6VGFibGUoKQp7CiAgICByZXR1cm4gKHRhYmxlID8gdGFibGUgOiB0YWJsZSA9IG5ldyBTeW1i
b2xUYWJsZSgxMDEpKTsKfQoKaW5saW5lIHZvaWQgVHlwZVN5bWJvbDo6U2V0U3ltYm9sVGFibGUo
aW50IGVzdGltYXRlKQp7CiAgICBpZiAoISB0YWJsZSkgIAogICAgICAgIHRhYmxlID0gbmV3IFN5
bWJvbFRhYmxlKGVzdGltYXRlKTsKfQoKaW5saW5lIFN5bWJvbFRhYmxlICpUeXBlU3ltYm9sOjpU
YWJsZSgpCnsKICAgIHJldHVybiAodGFibGUgPyB0YWJsZSA6IHRhYmxlID0gbmV3IFN5bWJvbFRh
YmxlKCkpOwp9CgppbmxpbmUgU3ltYm9sVGFibGUgKkJsb2NrU3ltYm9sOjpUYWJsZSgpCnsKICAg
IHJldHVybiAodGFibGUgPyB0YWJsZSA6IHRhYmxlID0gbmV3IFN5bWJvbFRhYmxlKCkpOwp9CgoK
ICAgIGlubGluZSBib29sIEZpbGVTeW1ib2w6OklzQ2xhc3NTdWZmaXgoY2hhciAqc3VmZml4KQog
ICAgewogICAgICAgIHJldHVybiAoc3RybmNtcChzdWZmaXgsIGNsYXNzX3N1ZmZpeCwgY2xhc3Nf
c3VmZml4X2xlbmd0aCkgPT0gMCk7CiAgICB9CgogICAgaW5saW5lIGJvb2wgIEZpbGVTeW1ib2w6
OklzSmF2YVN1ZmZpeChjaGFyICpzdWZmaXgpCiAgICB7CiAgICAgICAgcmV0dXJuIChzdHJuY21w
KHN1ZmZpeCwgamF2YV9zdWZmaXgsIGphdmFfc3VmZml4X2xlbmd0aCkgPT0gMCk7CiAgICB9CiMg
MjMxMiAiLi4vLi4vamlrZXMvc3JjL3N5bWJvbC5oIgoKCgoKCgoKCiMgMTYgIi4uLy4uL2ppa2Vz
L3NyYy9hc3QuaCIgMgoKIyAxICIuLi8uLi9qaWtlcy9zcmMvc2V0LmgiIDEKIAogCiAKIAogCiAK
IAogCiAKCgoKCgoKCgoKCmNsYXNzIFNoYWRvd1N5bWJvbAp7CnB1YmxpYzoKICAgIFNoYWRvd1N5
bWJvbCAqbmV4dDsKICAgIFN5bWJvbCAqc3ltYm9sOwogICAgaW50IHBvb2xfaW5kZXg7CgogICAg
aW5saW5lIE5hbWVTeW1ib2wgKklkZW50aXR5KCkgeyByZXR1cm4gc3ltYm9sIC0+IElkZW50aXR5
KCk7IH0KCiAgICBTaGFkb3dTeW1ib2woU3ltYm9sICpzeW1ib2xfKSA6IHN5bWJvbChzeW1ib2xf
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3QoX19udWxsICkK
ICAgIHt9CgogICAgflNoYWRvd1N5bWJvbCgpIHsgZGVsZXRlIGNvbmZsaWN0OyB9CgogICAgU3lt
Ym9sICpDb25mbGljdChpbnQgaSkgeyByZXR1cm4gKCpjb25mbGljdClbaV07IH0KCiAgICBpbmxp
bmUgaW50IE51bUNvbmZsaWN0cygpCiAgICB7CiAgICAgICAgcmV0dXJuIChjb25mbGljdCA/IGNv
bmZsaWN0IC0+IExlbmd0aCgpIDogMCk7CiAgICB9CgogICAgaW5saW5lIHZvaWQgQWRkQ29uZmxp
Y3QoU3ltYm9sICpjb25mbGljdF9zeW1ib2wpCiAgICB7CiAgICAgICAgaWYgKChzeW1ib2wgIT0g
Y29uZmxpY3Rfc3ltYm9sKSAmJiAoISBGaW5kKGNvbmZsaWN0X3N5bWJvbCkpKQogICAgICAgICAg
ICBjb25mbGljdCAtPiBOZXh0KCkgPSBjb25mbGljdF9zeW1ib2w7CiAgICAgICAgcmV0dXJuOwog
ICAgfQoKICAgIGlubGluZSB2b2lkIFJlbW92ZUNvbmZsaWN0KGludCBrKQogICAgewogICAgICAg
IGludCBsYXN0X2luZGV4ID0gY29uZmxpY3QgLT4gTGVuZ3RoKCkgLSAxOwogICAgICAgIGlmIChr
IDwgMCkgIAogICAgICAgICAgICAgc3ltYm9sID0gKCpjb25mbGljdClbbGFzdF9pbmRleF07CiAg
ICAgICAgZWxzZSAoKmNvbmZsaWN0KVtrXSA9ICgqY29uZmxpY3QpW2xhc3RfaW5kZXhdOwogICAg
ICAgIGNvbmZsaWN0IC0+IFJlc2V0KGxhc3RfaW5kZXgpOwogICAgfQoKcHJpdmF0ZToKICAgIFR1
cGxlPFN5bWJvbCAqPiAqY29uZmxpY3Q7CgogICAgYm9vbCBGaW5kKFN5bWJvbCAqY29uZmxpY3Rf
c3ltYm9sKQogICAgewogICAgICAgIGlmICghIGNvbmZsaWN0KQogICAgICAgICAgICBjb25mbGlj
dCA9IG5ldyBUdXBsZTxTeW1ib2wgKj4oNCk7CiAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBj
b25mbGljdCAtPiBMZW5ndGgoKTsgaysrKQogICAgICAgICAgICBpZiAoKCpjb25mbGljdClba10g
PT0gY29uZmxpY3Rfc3ltYm9sKQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgfQp9OwoKCmNsYXNzIFN5bWJvbFNldAp7CnB1YmxpYzoKICAgIGVu
dW0KICAgIHsKICAgICAgICBERUZBVUxUX0hBU0hfU0laRSA9IDEzLAogICAgICAgIE1BWF9IQVNI
X1NJWkUgPSAxMDIxCiAgICB9OwoKICAgIFN5bWJvbFNldChpbnQgaGFzaF9zaXplXyA9IERFRkFV
TFRfSEFTSF9TSVpFKSA6IHN5bWJvbF9wb29sKDI1NiksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluX2luZGV4KDApLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViX2luZGV4KDApCiAgICB7
CiAgICAgICAgaGFzaF9zaXplID0gKGhhc2hfc2l6ZV8gPD0gMCA/IDEgOiBoYXNoX3NpemVfKTsK
CiAgICAgICAgcHJpbWVfaW5kZXggPSAtMTsKICAgICAgICBkbwogICAgICAgIHsKICAgICAgICAg
ICAgaWYgKGhhc2hfc2l6ZSA8IHByaW1lc1twcmltZV9pbmRleCArIDFdKQogICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgIHByaW1lX2luZGV4Kys7CiAgICAgICAgfSB3aGlsZSAocHJp
bWVzW3ByaW1lX2luZGV4XSA8IE1BWF9IQVNIX1NJWkUpOwoKICAgICAgICBiYXNlID0gKFNoYWRv
d1N5bWJvbCAqKikgbWVtc2V0KG5ldyBTaGFkb3dTeW1ib2wgKltoYXNoX3NpemVdLCAwLCBoYXNo
X3NpemUgKiBzaXplb2YoU2hhZG93U3ltYm9sICopKTsKICAgIH0KCiAgICB+U3ltYm9sU2V0KCk7
CgogICAgIAogICAgIAogICAgIAogICAgaW5saW5lIGludCBTaXplKCkKICAgIHsKICAgICAgICBp
bnQgc2l6ZSA9IDA7CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3ltYm9sX3Bvb2wuTGVu
Z3RoKCk7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIFNoYWRvd1N5bWJvbCAqc2hhZG93ID0g
c3ltYm9sX3Bvb2xbaV07CiAgICAgICAgICAgIFN5bWJvbCAqc3ltYm9sID0gc2hhZG93IC0+IHN5
bWJvbDsKICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IHN5bWJvbDsgc3ltYm9sID0gKFN5bWJv
bCAqKSAoayA8IHNoYWRvdyAtPiBOdW1Db25mbGljdHMoKSA/IHNoYWRvdyAtPiBDb25mbGljdChr
KyspIDogX19udWxsICkpCiAgICAgICAgICAgICAgICBzaXplKys7CiAgICAgICAgfQoKICAgICAg
ICByZXR1cm4gc2l6ZTsKICAgIH0KCiAgICAgCiAgICAgCiAgICAgCiAgICBpbmxpbmUgdm9pZCBT
ZXRFbXB0eSgpCiAgICB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzeW1ib2xfcG9vbC5M
ZW5ndGgoKTsgaSsrKQogICAgICAgICAgICBkZWxldGUgc3ltYm9sX3Bvb2xbaV07CiAgICAgICAg
c3ltYm9sX3Bvb2wuUmVzZXQoKTsKICAgICAgICBiYXNlID0gKFNoYWRvd1N5bWJvbCAqKikgbWVt
c2V0KGJhc2UsIDAsIGhhc2hfc2l6ZSAqIHNpemVvZihTaGFkb3dTeW1ib2wgKikpOwogICAgfQoK
ICAgICAKICAgICAKICAgICAKICAgIGJvb2wgSXNFbXB0eSgpIHsgcmV0dXJuIHN5bWJvbF9wb29s
Lkxlbmd0aCgpID09IDA7IH0KCiAgICAgCiAgICAgCiAgICAgCiAgICBTeW1ib2xTZXQgJm9wZXJh
dG9yPShTeW1ib2xTZXQgJnJocykKICAgIHsKICAgICAgICBpZiAodGhpcyAhPSAmcmhzKQogICAg
ICAgIHsKICAgICAgICAgICAgdGhpcyAtPiBTZXRFbXB0eSgpOwogICAgICAgICAgICB0aGlzIC0+
IFVuaW9uKHJocyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAg
IAogICAgIAogICAgIAogICAgYm9vbCBvcGVyYXRvcj09KFN5bWJvbFNldCAmKTsKCiAgICAgCiAg
ICAgCiAgICAgCiAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFN5bWJvbFNldCAmcmhzKQogICAg
ewogICAgICAgIHJldHVybiAhICgqdGhpcyA9PSByaHMpOwogICAgfQoKICAgICAKICAgICAKICAg
ICAKICAgIHZvaWQgVW5pb24oU3ltYm9sU2V0ICYpOwoKICAgICAKICAgICAKICAgICAKICAgIHZv
aWQgSW50ZXJzZWN0aW9uKFN5bWJvbFNldCAmKTsKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAg
ICBib29sIEludGVyc2VjdHMoU3ltYm9sU2V0ICYpOwoKICAgICAKICAgICAKICAgICAKICAgIGlu
bGluZSBpbnQgTmFtZUNvdW50KFN5bWJvbCAqZWxlbWVudCkKICAgIHsKICAgICAgICBOYW1lU3lt
Ym9sICpuYW1lX3N5bWJvbCA9IGVsZW1lbnQgLT4gSWRlbnRpdHkoKTsKICAgICAgICBmb3IgKFNo
YWRvd1N5bWJvbCAqc2hhZG93ID0gYmFzZVtuYW1lX3N5bWJvbCAtPiBpbmRleCAlIGhhc2hfc2l6
ZV07IHNoYWRvdzsgc2hhZG93ID0gc2hhZG93IC0+IG5leHQpCiAgICAgICAgewogICAgICAgICAg
ICBpZiAoc2hhZG93IC0+IElkZW50aXR5KCkgPT0gbmFtZV9zeW1ib2wpCiAgICAgICAgICAgICAg
ICByZXR1cm4gc2hhZG93IC0+IE51bUNvbmZsaWN0cygpICsgMTsKICAgICAgICB9CgogICAgICAg
IHJldHVybiAwOwogICAgfQoKICAgICAKICAgICAKICAgICAKICAgIGlubGluZSBib29sIElzRWxl
bWVudChTeW1ib2wgKmVsZW1lbnQpCiAgICB7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAo
KCBlbGVtZW50ICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJlbGVtZW50IiAsICIuLi8uLi9qaWtl
cy9zcmMvc2V0LmgiLCAxOTgsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogICAgICAg
IE5hbWVTeW1ib2wgKm5hbWVfc3ltYm9sID0gZWxlbWVudCAtPiBJZGVudGl0eSgpOwogICAgICAg
IGZvciAoU2hhZG93U3ltYm9sICpzaGFkb3cgPSBiYXNlW25hbWVfc3ltYm9sIC0+IGluZGV4ICUg
aGFzaF9zaXplXTsgc2hhZG93OyBzaGFkb3cgPSBzaGFkb3cgLT4gbmV4dCkKICAgICAgICB7CiAg
ICAgICAgICAgIGlmIChzaGFkb3cgLT4gSWRlbnRpdHkoKSA9PSBuYW1lX3N5bWJvbCkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgU3ltYm9sICpzeW1ib2wgPSBzaGFkb3cgLT4gc3ltYm9s
OwogICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IHN5bWJvbDsgc3ltYm9sID0gKFN5bWJv
bCAqKSAoayA8IHNoYWRvdyAtPiBOdW1Db25mbGljdHMoKSA/IHNoYWRvdyAtPiBDb25mbGljdChr
KyspIDogX19udWxsICkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYg
KHN5bWJvbCA9PSBlbGVtZW50KQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAgCiAgICAg
CiAgICAgCiAgICBpbmxpbmUgdm9pZCBBZGRFbGVtZW50KFN5bWJvbCAqZWxlbWVudCkKICAgIHsK
ICAgICAgICBOYW1lU3ltYm9sICpuYW1lX3N5bWJvbCA9IGVsZW1lbnQgLT4gSWRlbnRpdHkoKTsK
ICAgICAgICBpbnQgaSA9IG5hbWVfc3ltYm9sIC0+IGluZGV4ICUgaGFzaF9zaXplOwoKICAgICAg
ICBTaGFkb3dTeW1ib2wgKnNoYWRvdzsKICAgICAgICBmb3IgKHNoYWRvdyA9IGJhc2VbaV07IHNo
YWRvdzsgc2hhZG93ID0gc2hhZG93IC0+IG5leHQpCiAgICAgICAgewogICAgICAgICAgICBpZiAo
c2hhZG93IC0+IElkZW50aXR5KCkgPT0gbmFtZV9zeW1ib2wpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIHNoYWRvdyAtPiBBZGRDb25mbGljdChlbGVtZW50KTsKICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgc2hhZG93ID0gbmV3IFNo
YWRvd1N5bWJvbChlbGVtZW50KTsKICAgICAgICBzaGFkb3cgLT4gcG9vbF9pbmRleCA9IHN5bWJv
bF9wb29sLkxlbmd0aCgpOwogICAgICAgIHN5bWJvbF9wb29sLk5leHQoKSA9IHNoYWRvdzsKCiAg
ICAgICAgc2hhZG93IC0+IG5leHQgPSBiYXNlW2ldOwogICAgICAgIGJhc2VbaV0gPSBzaGFkb3c7
CgogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAg
ICAgaWYgKChzeW1ib2xfcG9vbC5MZW5ndGgoKSA+IChoYXNoX3NpemUgPDwgMSkpICYmIChoYXNo
X3NpemUgPCBNQVhfSEFTSF9TSVpFKSkKICAgICAgICAgICAgUmVoYXNoKCk7CgogICAgICAgIHJl
dHVybjsKICAgIH0KCgogICAgdm9pZCBSZW1vdmVFbGVtZW50KFN5bWJvbCAqKTsKCiAgICBTeW1i
b2wqIEZpcnN0RWxlbWVudCgpCiAgICB7CiAgICAgICAgbWFpbl9pbmRleCA9IDA7CiAgICAgICAg
c3ViX2luZGV4ID0gMDsKICAgICAgICByZXR1cm4gKG1haW5faW5kZXggPCBzeW1ib2xfcG9vbC5M
ZW5ndGgoKSA/IHN5bWJvbF9wb29sW21haW5faW5kZXhdIC0+IHN5bWJvbCA6IChTeW1ib2wgKikg
X19udWxsICk7CiAgICB9CgogICAgU3ltYm9sKiBOZXh0RWxlbWVudCgpCiAgICB7CiAgICAgICAg
U3ltYm9sICpzeW1ib2wgPSBfX251bGwgOwoKICAgICAgICBpZiAobWFpbl9pbmRleCA8IHN5bWJv
bF9wb29sLkxlbmd0aCgpKQogICAgICAgIHsKICAgICAgICAgICAgIGlmIChzdWJfaW5kZXggPCBz
eW1ib2xfcG9vbFttYWluX2luZGV4XSAtPiBOdW1Db25mbGljdHMoKSkKICAgICAgICAgICAgICAg
ICAgc3ltYm9sID0gc3ltYm9sX3Bvb2xbbWFpbl9pbmRleF0gLT4gQ29uZmxpY3Qoc3ViX2luZGV4
KyspOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG1h
aW5faW5kZXgrKzsKICAgICAgICAgICAgICAgICBzdWJfaW5kZXggPSAwOwogICAgICAgICAgICAg
ICAgIHN5bWJvbCA9IChtYWluX2luZGV4IDwgc3ltYm9sX3Bvb2wuTGVuZ3RoKCkgPyBzeW1ib2xf
cG9vbFttYWluX2luZGV4XSAtPiBzeW1ib2wgOiAoU3ltYm9sICopIF9fbnVsbCApOwogICAgICAg
ICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHN5bWJvbDsKICAgIH0KCnByb3RlY3Rl
ZDoKCiAgICBUdXBsZTxTaGFkb3dTeW1ib2wgKj4gc3ltYm9sX3Bvb2w7CgogICAgaW50IG1haW5f
aW5kZXgsCiAgICAgICAgc3ViX2luZGV4OwoKICAgIFNoYWRvd1N5bWJvbCAqKmJhc2U7CiAgICBp
bnQgaGFzaF9zaXplOwoKICAgIHN0YXRpYyBpbnQgcHJpbWVzW107CiAgICBpbnQgcHJpbWVfaW5k
ZXg7CgogICAgdm9pZCBSZWhhc2goKTsKfTsKCgogCiAKIApjbGFzcyBOYW1lU3ltYm9sTWFwIDog
cHVibGljIFN5bWJvbFNldAp7CnB1YmxpYzoKICAgIE5hbWVTeW1ib2xNYXAoaW50IGhhc2hfc2l6
ZV8gPSBERUZBVUxUX0hBU0hfU0laRSkgOiBTeW1ib2xTZXQoaGFzaF9zaXplXykKICAgIHt9Cgog
ICAgIAogICAgIAogICAgIAogICAgaW5saW5lIFN5bWJvbCAqSW1hZ2UoTmFtZVN5bWJvbCAqbmFt
ZV9zeW1ib2wpCiAgICB7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBuYW1lX3N5bWJv
bCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgibmFtZV9zeW1ib2wiICwgIi4uLy4uL2ppa2VzL3Ny
Yy9zZXQuaCIsIDMxNSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICAgICAgZm9y
IChTaGFkb3dTeW1ib2wgKnNoYWRvdyA9IGJhc2VbbmFtZV9zeW1ib2wgLT4gaW5kZXggJSBoYXNo
X3NpemVdOyBzaGFkb3c7IHNoYWRvdyA9IHNoYWRvdyAtPiBuZXh0KQogICAgICAgIHsKICAgICAg
ICAgICAgaWYgKHNoYWRvdyAtPiBJZGVudGl0eSgpID09IG5hbWVfc3ltYm9sKQogICAgICAgICAg
ICAgICAgcmV0dXJuIHNoYWRvdyAtPiBzeW1ib2w7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4g
X19udWxsIDsKICAgIH0KCiAgICAgCiAgICAgCiAgICAgCiAgICBpbmxpbmUgdm9pZCBBZGRFbGVt
ZW50KFN5bWJvbCAqZWxlbWVudCkKICAgIHsKICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgo
IGVsZW1lbnQgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImVsZW1lbnQiICwgIi4uLy4uL2ppa2Vz
L3NyYy9zZXQuaCIsIDMzMSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICAgICAg
U2hhZG93U3ltYm9sICpzaGFkb3cgPSBfX251bGwgOwogICAgICAgIGZvciAoc2hhZG93ID0gYmFz
ZVtlbGVtZW50IC0+IElkZW50aXR5KCkgLT4gaW5kZXggJSBoYXNoX3NpemVdOyBzaGFkb3c7IHNo
YWRvdyA9IHNoYWRvdyAtPiBuZXh0KQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHNoYWRvdyAt
PiBJZGVudGl0eSgpID09IGVsZW1lbnQgLT4gSWRlbnRpdHkoKSkKICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgIH0KCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAog
ICAgICAgIGlmIChzaGFkb3cpCiAgICAgICAgICAgICBzaGFkb3cgLT4gc3ltYm9sID0gZWxlbWVu
dDsKICAgICAgICBlbHNlIFN5bWJvbFNldDo6QWRkRWxlbWVudChlbGVtZW50KTsKCiAgICAgICAg
cmV0dXJuOwogICAgfQp9OwoKCiAKIAogCmNsYXNzIFN5bWJvbE1hcAp7CnB1YmxpYzoKICAgIGVu
dW0KICAgIHsKICAgICAgICBERUZBVUxUX0hBU0hfU0laRSA9IDEzLAogICAgICAgIE1BWF9IQVNI
X1NJWkUgPSAxMDIxCiAgICB9OwoKICAgIFN5bWJvbE1hcChpbnQgaGFzaF9zaXplXyA9IERFRkFV
TFRfSEFTSF9TSVpFKTsKICAgIH5TeW1ib2xNYXAoKTsKCiAgICAgCiAgICAgCiAgICAgCiAgICBp
bmxpbmUgU3ltYm9sICpJbWFnZShTeW1ib2wgKnN5bWJvbCkKICAgIHsKICAgICAgICAoc3RhdGlj
X2Nhc3Q8dm9pZD4gICgoIHN5bWJvbCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgic3ltYm9sIiAs
ICIuLi8uLi9qaWtlcy9zcmMvc2V0LmgiLCAzNzMsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkp
KSA7CgogICAgICAgIGludCBrID0gc3ltYm9sIC0+IElkZW50aXR5KCkgLT4gaW5kZXggJSBoYXNo
X3NpemU7CiAgICAgICAgZm9yIChFbGVtZW50ICplbGVtZW50ID0gYmFzZVtrXTsgZWxlbWVudDsg
ZWxlbWVudCA9IGVsZW1lbnQgLT4gbmV4dCkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChlbGVt
ZW50IC0+IGRvbWFpbl9lbGVtZW50ID09IHN5bWJvbCkKICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtZW50IC0+IGltYWdlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIF9fbnVsbCA7CiAgICB9
CgogICAgIAogICAgIAogICAgIAogICAgdm9pZCBNYXAoU3ltYm9sICosIFN5bWJvbCAqKTsKCnBy
aXZhdGU6CgogICAgY2xhc3MgRWxlbWVudAogICAgewogICAgcHVibGljOgogICAgICAgIEVsZW1l
bnQgKm5leHQ7CiAgICAgICAgU3ltYm9sICAqZG9tYWluX2VsZW1lbnQsCiAgICAgICAgICAgICAg
ICAqaW1hZ2U7CiAgICB9OwoKICAgIFR1cGxlPEVsZW1lbnQgKj4gc3ltYm9sX3Bvb2w7CgogICAg
RWxlbWVudCAqKmJhc2U7CiAgICBpbnQgaGFzaF9zaXplOwoKICAgIHN0YXRpYyBpbnQgcHJpbWVz
W107CiAgICBpbnQgcHJpbWVfaW5kZXg7CgogICAgdm9pZCBSZWhhc2goKTsKfTsKCgogCiAKIAog
CiAKIApjbGFzcyBCaXRTZXQKewogICAgdHlwZWRlZiB1bnNpZ25lZCBDRUxMOwoKICAgIENFTEwg
KnM7CiAgICBjb25zdCBpbnQgc2V0X3NpemU7CgpwdWJsaWM6CgogICAgZW51bSB7IEVNUFRZLCBV
TklWRVJTRSwgY2VsbF9zaXplID0gc2l6ZW9mKENFTEwpICogOCAgfTsKCiAgICAgCiAgICAgCiAg
ICAgCiAgICB2b2lkIFNldEVtcHR5KCkKICAgIHsKICAgICAgICBmb3IgKGludCBpID0gKHNldF9z
aXplIC0gMSkgLyBjZWxsX3NpemU7IGkgPj0gMDsgaS0tKQogICAgICAgICAgICBzW2ldID0gMDsK
ICAgIH0KCiAgICAgCiAgICAgCiAgICAgCiAgICB2b2lkIFNldFVuaXZlcnNlKCkKICAgIHsKICAg
ICAgICBmb3IgKGludCBpID0gKHNldF9zaXplIC0gMSkgLyBjZWxsX3NpemU7IGkgPj0gMDsgaS0t
KQogICAgICAgICAgICBzW2ldID0gfigoQ0VMTCkgMCk7CiAgICB9CgogICAgIAogICAgIAogICAg
IAogICAgIAogICAgaW50IEhhc2goaW50IHRhYmxlX3NpemUpCiAgICB7CiAgICAgICAgdW5zaWdu
ZWQgbG9uZyBoYXNoX2FkZHJlc3MgPSAwOwoKICAgICAgICBmb3IgKGludCBpID0gKHNldF9zaXpl
IC0gMSkgLyBjZWxsX3NpemU7IGkgPj0gMDsgaS0tKQogICAgICAgICAgICBoYXNoX2FkZHJlc3Mg
Kz0gc1tpXTsKCiAgICAgICAgcmV0dXJuIGhhc2hfYWRkcmVzcyAlIHRhYmxlX3NpemU7CiAgICB9
CgogICAgIAogICAgIAogICAgIAogICAgQml0U2V0JiBvcGVyYXRvcj0oY29uc3QgQml0U2V0JiBy
aHMpCiAgICB7CiAgICAgICAgZm9yIChpbnQgaSA9IChzZXRfc2l6ZSAtIDEpIC8gY2VsbF9zaXpl
OyBpID49IDA7IGktLSkKICAgICAgICAgICAgc1tpXSA9IHJocy5zW2ldOwoKICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogICAgIAogICAgIAogICAgIAogICAgQml0U2V0KGludCBzZXRfc2l6
ZV8pIDogc2V0X3NpemUoc2V0X3NpemVfKQogICAgewogICAgICAgICAKICAgICAgICAgCiAgICAg
ICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgcyA9IG5ldyBDRUxMWyhzZXRfc2l6ZSAr
IGNlbGxfc2l6ZSAgKSAvIGNlbGxfc2l6ZV07CiAgICB9CgogICAgIAogICAgIAogICAgIAogICAg
Qml0U2V0KGludCBzZXRfc2l6ZV8sIGludCBpbml0KSA6IHNldF9zaXplKHNldF9zaXplXykKICAg
IHsKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAg
ICAgIHMgPSBuZXcgQ0VMTFsoc2V0X3NpemUgKyBjZWxsX3NpemUgICkgLyBjZWxsX3NpemVdOwog
ICAgICAgIGlmIChpbml0ID09IFVOSVZFUlNFKQogICAgICAgICAgICAgU2V0VW5pdmVyc2UoKTsK
ICAgICAgICBlbHNlIFNldEVtcHR5KCk7CiAgICB9CgogICAgIAogICAgIAogICAgIAogICAgQml0
U2V0KGNvbnN0IEJpdFNldCYgcmhzKSA6IHNldF9zaXplKHJocy5zZXRfc2l6ZSkKICAgIHsKICAg
ICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgIHMg
PSBuZXcgQ0VMTFsoc2V0X3NpemUgKyBjZWxsX3NpemUgICkgLyBjZWxsX3NpemVdOwogICAgICAg
IGZvciAoaW50IGkgPSAoc2V0X3NpemUgLSAxKSAvIGNlbGxfc2l6ZTsgaSA+PSAwOyBpLS0pCiAg
ICAgICAgICAgIHNbaV0gPSByaHMuc1tpXTsKICAgIH0KCiAgICAgCiAgICAgCiAgICAgCiAgICB+
Qml0U2V0KCkgeyBkZWxldGUgW10gczsgfQoKICAgICAKICAgICAKICAgICAKICAgIGludCBTaXpl
KCkgeyByZXR1cm4gc2V0X3NpemU7IH0KCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBib29s
IG9wZXJhdG9yW10oY29uc3QgaW50IGkpCiAgICB7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+
ICAoKCBpID49IDAgJiYgaSA8IHNldF9zaXplICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJpID49
IDAgJiYgaSA8IHNldF9zaXplIiAsICIuLi8uLi9qaWtlcy9zcmMvc2V0LmgiLCA1MzIsIF9fUFJF
VFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogICAgICAgIHJldHVybiAoc1tpIC8gY2VsbF9zaXpl
XSAmCiAgICAgICAgICAgICAgICAoKGkgKyBjZWxsX3NpemUpICUgY2VsbF9zaXplCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgPyAoQ0VMTCkgMSA8PCAoKGkgKyBjZWxsX3NpemUpICUgY2VsbF9z
aXplKQogICAgICAgICAgICAgICAgICAgICAgICAgIDogKENFTEwpIDEpKSAhPSAwOwogICAgfQoK
ICAgICAKICAgICAKICAgICAKICAgIHZvaWQgQWRkRWxlbWVudChpbnQgaSkKICAgIHsKICAgICAg
ICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIGkgPj0gMCAmJiBpIDwgc2V0X3NpemUgKSA/IDAgOgko
X19hc3NlcnRfZmFpbCAoImkgPj0gMCAmJiBpIDwgc2V0X3NpemUiICwgIi4uLy4uL2ppa2VzL3Ny
Yy9zZXQuaCIsIDU0NSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICAgICAgc1tp
IC8gY2VsbF9zaXplXSB8PSAoKGkgKyBjZWxsX3NpemUpICUgY2VsbF9zaXplCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKENFTEwpIDEgPDwgKChpICsgY2Vs
bF9zaXplKSAlIGNlbGxfc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiAoQ0VMTCkgMSk7CiAgICB9CgogICAgIAogICAgIAogICAgIAogICAgdm9pZCBS
ZW1vdmVFbGVtZW50KGludCBpKQogICAgewogICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCgg
aSA+PSAwICYmIGkgPCBzZXRfc2l6ZSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiaSA+PSAwICYm
IGkgPCBzZXRfc2l6ZSIgLCAiLi4vLi4vamlrZXMvc3JjL3NldC5oIiwgNTU3LCBfX1BSRVRUWV9G
VU5DVElPTl9fICksIDApKSkgOwoKICAgICAgICBzW2kgLyBjZWxsX3NpemVdICY9IH4oKGkgKyBj
ZWxsX3NpemUpICUgY2VsbF9zaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA/IChDRUxMKSAxIDw8ICgoaSArIGNlbGxfc2l6ZSkgJSBjZWxsX3NpemUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChDRUxMKSAxKTsK
ICAgIH0KCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBpbnQgb3BlcmF0b3I9PShjb25zdCBC
aXRTZXQmIHJocykKICAgIHsKICAgICAgICBmb3IgKGludCBpID0gKHNldF9zaXplIC0gMSkgLyBj
ZWxsX3NpemU7IGkgPj0gMDsgaS0tKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHNbaV0gIT0g
cmhzLnNbaV0pCiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICAgIHJl
dHVybiAxOwogICAgfQoKICAgICAKICAgICAKICAgICAKICAgICAKICAgIGludCBvcGVyYXRvciE9
KGNvbnN0IEJpdFNldCYgcmhzKQogICAgewogICAgICAgIHJldHVybiAhICgqdGhpcyA9PSByaHMp
OwogICAgfQoKICAgICAKICAgICAKICAgICAKICAgIEJpdFNldCBvcGVyYXRvcisoY29uc3QgQml0
U2V0JiByaHMpCiAgICB7CiAgICAgICAgQml0U2V0IHJlc3VsdChzZXRfc2l6ZSk7CgogICAgICAg
IGZvciAoaW50IGkgPSAoc2V0X3NpemUgLSAxKSAvIGNlbGxfc2l6ZTsgaSA+PSAwOyBpLS0pCiAg
ICAgICAgICAgIHJlc3VsdC5zW2ldID0gc1tpXSB8IHJocy5zW2ldOwoKICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgfQoKICAgICAKICAgICAKICAgICAKICAgIEJpdFNldCYgb3BlcmF0b3IrPShj
b25zdCBCaXRTZXQmIHJocykKICAgIHsKICAgICAgICBmb3IgKGludCBpID0gKHNldF9zaXplIC0g
MSkgLyBjZWxsX3NpemU7IGkgPj0gMDsgaS0tKQogICAgICAgICAgICBzW2ldIHw9IHJocy5zW2ld
OwoKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgIAogICAgIAogICAgIAogICAgQml0
U2V0IG9wZXJhdG9yKihjb25zdCBCaXRTZXQmIHJocykKICAgIHsKICAgICAgICBCaXRTZXQgcmVz
dWx0KHNldF9zaXplKTsKCiAgICAgICAgZm9yIChpbnQgaSA9IChzZXRfc2l6ZSAtIDEpIC8gY2Vs
bF9zaXplOyBpID49IDA7IGktLSkKICAgICAgICAgICAgcmVzdWx0LnNbaV0gPSBzW2ldICYgcmhz
LnNbaV07CgogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgIAogICAgIAogICAgIAog
ICAgQml0U2V0JiBvcGVyYXRvcio9KGNvbnN0IEJpdFNldCYgcmhzKQogICAgewogICAgICAgIGZv
ciAoaW50IGkgPSAoc2V0X3NpemUgLSAxKSAvIGNlbGxfc2l6ZTsgaSA+PSAwOyBpLS0pCiAgICAg
ICAgICAgIHNbaV0gJj0gcmhzLnNbaV07CgogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
ICAgCiAgICAgCiAgICAgCiAgICBCaXRTZXQgb3BlcmF0b3ItKGNvbnN0IEJpdFNldCYgcmhzKQog
ICAgewogICAgICAgIEJpdFNldCByZXN1bHQoc2V0X3NpemUpOwoKICAgICAgICBmb3IgKGludCBp
ID0gKHNldF9zaXplIC0gMSkgLyBjZWxsX3NpemU7IGkgPj0gMDsgaS0tKQogICAgICAgICAgICBy
ZXN1bHQuc1tpXSA9IHNbaV0gJiAofiByaHMuc1tpXSk7CgogICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICB9CgogICAgIAogICAgIAogICAgIAogICAgQml0U2V0JiBvcGVyYXRvci09KGNvbnN0IEJp
dFNldCYgcmhzKQogICAgewogICAgICAgIGZvciAoaW50IGkgPSAoc2V0X3NpemUgLSAxKSAvIGNl
bGxfc2l6ZTsgaSA+PSAwOyBpLS0pCiAgICAgICAgICAgIHNbaV0gJj0gKH4gcmhzLnNbaV0pOwoK
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cn07CgpjbGFzcyBEZWZpbml0ZUFzc2lnbm1lbnRT
ZXQKewpwdWJsaWM6CiAgICBpbnQgc2V0X3NpemU7CgogICAgQml0U2V0IHRydWVfc2V0LAogICAg
ICAgICAgIGZhbHNlX3NldDsKCiAgICBEZWZpbml0ZUFzc2lnbm1lbnRTZXQoaW50IHNldF9zaXpl
XykgOiBzZXRfc2l6ZShzZXRfc2l6ZV8pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ1ZV9zZXQoc2V0X3NpemUpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmFsc2Vfc2V0KHNldF9zaXplKQogICAge30KfTsKCgoKCgoKCiMg
MTcgIi4uLy4uL2ppa2VzL3NyYy9hc3QuaCIgMgoKCgoKCgoKY2xhc3MgUGFyc2VyOwpjbGFzcyBT
ZW1hbnRpY0Vudmlyb25tZW50OwpjbGFzcyBTdG9yYWdlUG9vbDsKCmNsYXNzIFZhcmlhYmxlU3lt
Ym9sQXJyYXkKewogICAgdHlwZWRlZiBWYXJpYWJsZVN5bWJvbCAqIFQ7CgogICAgVCAqKmJhc2U7
CiAgICBzaXplX3QgYmFzZV9zaXplOwogICAgaW50IHRvcCwKICAgICAgICBzaXplOwogICAgU3Rv
cmFnZVBvb2wgKnBvb2w7CiAgICB1bnNpZ25lZCBzaG9ydCBsb2dfYmxrc2l6ZSwKICAgICAgICAg
ICAgICAgICAgIGJhc2VfaW5jcmVtZW50OwoKICAgIGlubGluZSBzaXplX3QgQmxrc2l6ZSgpIHsg
cmV0dXJuICgxIDw8IGxvZ19ibGtzaXplKTsgfQoKICAgICAKICAgICAKICAgICAKICAgIHZvaWQg
QWxsb2NhdGVNb3JlU3BhY2UoKTsKCnB1YmxpYzoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAg
ICAgCiAgICAgCiAgICB2b2lkIFJlc2V0KGNvbnN0IGludCBuID0gMCkKICAgIHsKICAgICAgICBp
ZiAobiA8IDAgfHwgbiA+IHNpemUpCiAgICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCgg
ZmFsc2UgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImZhbHNlIiAsICIuLi8uLi9qaWtlcy9zcmMv
YXN0LmgiLCA1OCwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgICAgICB0b3AgPSBu
OwogICAgfQoKICAgICAKICAgICAKICAgICAKICAgIGludCBMZW5ndGgoKSB7IHJldHVybiB0b3A7
IH0KCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBUJiBvcGVy
YXRvcltdKGNvbnN0IGludCBpKSB7IHJldHVybiBiYXNlW2kgPj4gbG9nX2Jsa3NpemVdW2ldOyB9
CgogICAgIAogICAgIAogICAgIAogICAgaW50IE5leHRJbmRleCgpCiAgICB7CiAgICAgICAgaW50
IGkgPSB0b3ArKzsKICAgICAgICBpZiAoaSA9PSBzaXplKQogICAgICAgICAgICBBbGxvY2F0ZU1v
cmVTcGFjZSgpOwogICAgICAgIHJldHVybiBpOwogICAgfQoKICAgICAKICAgICAKICAgICAKICAg
ICAKICAgIFQmIE5leHQoKSB7IGludCBpID0gTmV4dEluZGV4KCk7IHJldHVybiBiYXNlW2kgPj4g
bG9nX2Jsa3NpemVdW2ldOyB9CgogICAgIAogICAgIAogICAgIAogICAgVmFyaWFibGVTeW1ib2xB
cnJheShTdG9yYWdlUG9vbCAqLCB1bnNpZ25lZCk7CgogICAgIAogICAgIAogICAgIAogICAgflZh
cmlhYmxlU3ltYm9sQXJyYXkoKSB7IChzdGF0aWNfY2FzdDx2b2lkPiAgKCggZmFsc2UgKSA/IDAg
OgkoX19hc3NlcnRfZmFpbCAoImZhbHNlIiAsICIuLi8uLi9qaWtlcy9zcmMvYXN0LmgiLCAxMDEs
IF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7IH0KfTsKCgogCiAKIAogCiAKIAogCgogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAKIAogCiAKY2xhc3MgQXN0OwpjbGFz
cyBBc3RMaXN0Tm9kZTsKY2xhc3MgQXN0U3RhdGVtZW50OwpjbGFzcyBBc3RFeHByZXNzaW9uOwpj
bGFzcyBBc3RQcmltaXRpdmVUeXBlOwpjbGFzcyBBc3RBcnJheVR5cGU7CmNsYXNzIEFzdFNpbXBs
ZU5hbWU7CmNsYXNzIEFzdFBhY2thZ2VEZWNsYXJhdGlvbjsKY2xhc3MgQXN0SW1wb3J0RGVjbGFy
YXRpb247CmNsYXNzIEFzdENvbXBpbGF0aW9uVW5pdDsKY2xhc3MgQXN0TW9kaWZpZXI7CmNsYXNz
IEFzdEVtcHR5RGVjbGFyYXRpb247CmNsYXNzIEFzdENsYXNzRGVjbGFyYXRpb247CmNsYXNzIEFz
dENsYXNzQm9keTsKY2xhc3MgQXN0QXJyYXlJbml0aWFsaXplcjsKY2xhc3MgQXN0QnJhY2tldHM7
CmNsYXNzIEFzdFZhcmlhYmxlRGVjbGFyYXRvcklkOwpjbGFzcyBBc3RWYXJpYWJsZURlY2xhcmF0
b3I7CmNsYXNzIEFzdEZpZWxkRGVjbGFyYXRpb247CmNsYXNzIEFzdEZvcm1hbFBhcmFtZXRlcjsK
Y2xhc3MgQXN0TWV0aG9kRGVjbGFyYXRvcjsKY2xhc3MgQXN0TWV0aG9kRGVjbGFyYXRpb247CmNs
YXNzIEFzdFN0YXRpY0luaXRpYWxpemVyOwpjbGFzcyBBc3RUaGlzQ2FsbDsKY2xhc3MgQXN0U3Vw
ZXJDYWxsOwpjbGFzcyBBc3RDb25zdHJ1Y3RvckJsb2NrOwpjbGFzcyBBc3RDb25zdHJ1Y3RvckRl
Y2xhcmF0aW9uOwpjbGFzcyBBc3RJbnRlcmZhY2VEZWNsYXJhdGlvbjsKY2xhc3MgQXN0QmxvY2s7
CmNsYXNzIEFzdExvY2FsVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudDsKY2xhc3MgQXN0SWZT
dGF0ZW1lbnQ7CmNsYXNzIEFzdEVtcHR5U3RhdGVtZW50OwpjbGFzcyBBc3RFeHByZXNzaW9uU3Rh
dGVtZW50OwpjbGFzcyBBc3RDYXNlTGFiZWw7CmNsYXNzIEFzdERlZmF1bHRMYWJlbDsKY2xhc3Mg
QXN0U3dpdGNoQmxvY2tTdGF0ZW1lbnQ7CmNsYXNzIEFzdFN3aXRjaFN0YXRlbWVudDsKY2xhc3Mg
QXN0V2hpbGVTdGF0ZW1lbnQ7CmNsYXNzIEFzdERvU3RhdGVtZW50OwpjbGFzcyBBc3RGb3JTdGF0
ZW1lbnQ7CmNsYXNzIEFzdEJyZWFrU3RhdGVtZW50OwpjbGFzcyBBc3RDb250aW51ZVN0YXRlbWVu
dDsKY2xhc3MgQXN0UmV0dXJuU3RhdGVtZW50OwpjbGFzcyBBc3RUaHJvd1N0YXRlbWVudDsKY2xh
c3MgQXN0U3luY2hyb25pemVkU3RhdGVtZW50OwpjbGFzcyBBc3RDYXRjaENsYXVzZTsKY2xhc3Mg
QXN0RmluYWxseUNsYXVzZTsKY2xhc3MgQXN0VHJ5U3RhdGVtZW50OwpjbGFzcyBBc3RJbnRlZ2Vy
TGl0ZXJhbDsKY2xhc3MgQXN0TG9uZ0xpdGVyYWw7CmNsYXNzIEFzdEZsb2F0aW5nUG9pbnRMaXRl
cmFsOwpjbGFzcyBBc3REb3VibGVMaXRlcmFsOwpjbGFzcyBBc3RUcnVlTGl0ZXJhbDsKY2xhc3Mg
QXN0RmFsc2VMaXRlcmFsOwpjbGFzcyBBc3RTdHJpbmdMaXRlcmFsOwpjbGFzcyBBc3RDaGFyYWN0
ZXJMaXRlcmFsOwpjbGFzcyBBc3ROdWxsTGl0ZXJhbDsKY2xhc3MgQXN0VGhpc0V4cHJlc3Npb247
CmNsYXNzIEFzdFN1cGVyRXhwcmVzc2lvbjsKY2xhc3MgQXN0UGFyZW50aGVzaXplZEV4cHJlc3Np
b247CmNsYXNzIEFzdENsYXNzSW5zdGFuY2VDcmVhdGlvbkV4cHJlc3Npb247CmNsYXNzIEFzdERp
bUV4cHI7CmNsYXNzIEFzdEFycmF5Q3JlYXRpb25FeHByZXNzaW9uOwpjbGFzcyBBc3RGaWVsZEFj
Y2VzczsKY2xhc3MgQXN0TWV0aG9kSW52b2NhdGlvbjsKY2xhc3MgQXN0QXJyYXlBY2Nlc3M7CmNs
YXNzIEFzdFBvc3RVbmFyeUV4cHJlc3Npb247CmNsYXNzIEFzdFByZVVuYXJ5RXhwcmVzc2lvbjsK
Y2xhc3MgQXN0Q2FzdEV4cHJlc3Npb247CmNsYXNzIEFzdEJpbmFyeUV4cHJlc3Npb247CmNsYXNz
IEFzdFR5cGVFeHByZXNzaW9uOwpjbGFzcyBBc3RDb25kaXRpb25hbEV4cHJlc3Npb247CmNsYXNz
IEFzdEFzc2lnbm1lbnRFeHByZXNzaW9uOwoKY2xhc3MgQ2FzZUVsZW1lbnQ7CgogCiAKIApjbGFz
cyBBc3QKewpwdWJsaWM6CiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBlbnVtIEFzdFRhZwog
ICAgewogICAgICAgIE5PX1RBRywKICAgICAgICBQUklNSVRJVkVfVFlQRSwKICAgICAgICBTVEFU
RU1FTlQsCiAgICAgICAgRVhQUkVTU0lPTiwKICAgICAgICBNT0RJRklFUiwKICAgICAgICBTVEFU
SUNfRklFTEQsCiAgICAgICAgVU5QQVJTRUQsCgogICAgICAgIF9udW1fdGFncyA9IE1PRElGSUVS
CiAgICB9OwoKICAgICAKICAgICAKICAgICAKICAgIGVudW0gQXN0S2luZAogICAgewogICAgICAg
IEFTVCwKICAgICAgICBJREVOVElGSUVSLAogICAgICAgIERPVCwKICAgICAgICBJTlRFR0VSX0xJ
VEVSQUwsCiAgICAgICAgTE9OR19MSVRFUkFMLAogICAgICAgIEZMT0FUSU5HX1BPSU5UX0xJVEVS
QUwsCiAgICAgICAgRE9VQkxFX0xJVEVSQUwsCiAgICAgICAgVFJVRV9MSVRFUkFMLAogICAgICAg
IEZBTFNFX0xJVEVSQUwsCiAgICAgICAgU1RSSU5HX0xJVEVSQUwsCiAgICAgICAgQ0hBUkFDVEVS
X0xJVEVSQUwsCiAgICAgICAgTlVMTF9MSVRFUkFMLAogICAgICAgIEFSUkFZX0FDQ0VTUywKICAg
ICAgICBDQUxMLAogICAgICAgIFRISVNfRVhQUkVTU0lPTiwKICAgICAgICBTVVBFUl9FWFBSRVNT
SU9OLAogICAgICAgIFBBUkVOVEhFU0laRURfRVhQUkVTU0lPTiwKICAgICAgICBDTEFTU19DUkVB
VElPTiwKICAgICAgICBBUlJBWV9DUkVBVElPTiwKICAgICAgICBQT1NUX1VOQVJZLAogICAgICAg
IFBSRV9VTkFSWSwKICAgICAgICBDQVNULAogICAgICAgIENIRUNLX0FORF9DQVNULAogICAgICAg
IEJJTkFSWSwKICAgICAgICBUWVBFLAogICAgICAgIENPTkRJVElPTkFMLAogICAgICAgIEFTU0lH
Tk1FTlQsCgogICAgICAgIF9udW1fZXhwcmVzc2lvbl9raW5kcywKCiAgICAgICAgRElNID0gX251
bV9leHByZXNzaW9uX2tpbmRzLAogICAgICAgIExJU1RfTk9ERSwKICAgICAgICBJTlQsCiAgICAg
ICAgRE9VQkxFLAogICAgICAgIENIQVIsCiAgICAgICAgTE9ORywKICAgICAgICBGTE9BVCwKICAg
ICAgICBCWVRFLAogICAgICAgIFNIT1JULAogICAgICAgIEJPT0xFQU4sCiAgICAgICAgVk9JRF9U
WVBFLAogICAgICAgIEFSUkFZLAogICAgICAgIENPTVBJTEFUSU9OLAogICAgICAgIEJBRF9DT01Q
SUxBVElPTiwKICAgICAgICBFTVBUWV9DT01QSUxBVElPTiwKICAgICAgICBQQUNLQUdFX0NPTVBP
TkVOVCwKICAgICAgICBQQUNLQUdFX05BTUUsCiAgICAgICAgUEFDS0FHRSwKICAgICAgICBJTVBP
UlQsCiAgICAgICAgRU1QVFlfREVDTEFSQVRJT04sCiAgICAgICAgQ0xBU1MsCiAgICAgICAgQ0xB
U1NfQk9EWSwKICAgICAgICBQVUJMSUMsCiAgICAgICAgUFJPVEVDVEVELAogICAgICAgIFBSSVZB
VEUsCiAgICAgICAgU1RBVElDLAogICAgICAgIEFCU1RSQUNULAogICAgICAgIEZJTkFMLAogICAg
ICAgIE5BVElWRSwKICAgICAgICBTVFJJQ1RGUCwKICAgICAgICBTWU5DSFJPTklaRUQsCiAgICAg
ICAgVFJBTlNJRU5ULAogICAgICAgIFZPTEFUSUxFLAogICAgICAgIEZJRUxELAogICAgICAgIFZB
UklBQkxFX0RFQ0xBUkFUT1IsCiAgICAgICAgVkFSSUFCTEVfREVDTEFSQVRPUl9OQU1FLAogICAg
ICAgIEJSQUNLRVRTLAogICAgICAgIE1FVEhPRCwKICAgICAgICBNRVRIT0RfREVDTEFSQVRPUiwK
ICAgICAgICBQQVJBTUVURVIsCiAgICAgICAgQ09OU1RSVUNUT1IsCiAgICAgICAgSU5URVJGQUNF
LAogICAgICAgIEFSUkFZX0lOSVRJQUxJWkVSLAogICAgICAgIFNUQVRJQ19JTklUSUFMSVpFUiwK
ICAgICAgICBUSElTX0NBTEwsCiAgICAgICAgU1VQRVJfQ0FMTCwKICAgICAgICBCTE9DSywKICAg
ICAgICBDT05TVFJVQ1RPUl9CTE9DSywKICAgICAgICBMT0NBTF9WQVJJQUJMRV9ERUNMQVJBVElP
TiwKICAgICAgICBJRiwKICAgICAgICBFTVBUWV9TVEFURU1FTlQsCiAgICAgICAgRVhQUkVTU0lP
Tl9TVEFURU1FTlQsCiAgICAgICAgU1dJVENILAogICAgICAgIFNXSVRDSF9CTE9DSywKICAgICAg
ICBDQVNFLAogICAgICAgIERFRkFVTFQsCiAgICAgICAgV0hJTEUsCiAgICAgICAgRE8sCiAgICAg
ICAgRk9SLAogICAgICAgIEJSRUFLLAogICAgICAgIENPTlRJTlVFLAogICAgICAgIFJFVFVSTiwK
ICAgICAgICBUSFJPVywKICAgICAgICBTWU5DSFJPTklaRURfU1RBVEVNRU5ULAogICAgICAgIFRS
WSwKICAgICAgICBDQVRDSCwKICAgICAgICBGSU5BTExZLAoKICAgICAgICBfbnVtX2tpbmRzCiAg
ICB9OwoKCgoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IEtpbmQ7CiAgICB0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgIFRhZzsKCgogICAgS2luZCAga2luZDsgICAgICAgCiAgICBUYWcgICBjbGFz
c190YWc7ICAKICAgIGJvb2wgIGdlbmVyYXRlZDsgIAogICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAKCgoKCgoKCgoKCiAgICB2aXJ0dWFsIH5Bc3QoKTsKCgoKCgoK
ICAgICAKICAgICAKICAgICAKICAgIGJvb2wgSXNOYW1lKCk7CiAgICBib29sIElzU2ltcGxlTmFt
ZU9yRmllbGRBY2Nlc3MoKTsKICAgIGJvb2wgSXNTdXBlckV4cHJlc3Npb24oKTsKICAgIGJvb2wg
SXNMZWZ0SGFuZFNpZGUoKTsKICAgIGJvb2wgSXNHZW5lcmF0ZWQoKTsKCiAgICAgCiAgICAgCiAg
ICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAg
CiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAg
ICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAg
CiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgogICAgIAogICAgIAog
ICAgIAogICAgIAogICAgIAogICAgaW5saW5lIEFzdFN0YXRlbWVudCAqU3RhdGVtZW50Q2FzdCgp
OwogICAgaW5saW5lIEFzdEV4cHJlc3Npb24gKkV4cHJlc3Npb25DYXN0KCk7CiAgICBpbmxpbmUg
QXN0UHJpbWl0aXZlVHlwZSAqUHJpbWl0aXZlVHlwZUNhc3QoKTsKICAgIGlubGluZSBBc3RNb2Rp
ZmllciAqTW9kaWZpZXJDYXN0KCk7CiAgICBpbmxpbmUgQXN0RmllbGREZWNsYXJhdGlvbiAqU3Rh
dGljRmllbGRDYXN0KCk7CiAgICBpbmxpbmUgQXN0Q2xhc3NCb2R5ICpVbnBhcnNlZENsYXNzQm9k
eUNhc3QoKTsKICAgIGlubGluZSBBc3RJbnRlcmZhY2VEZWNsYXJhdGlvbiAqVW5wYXJzZWRJbnRl
cmZhY2VCb2R5Q2FzdCgpOwoKICAgICAKICAgICAKICAgICAKICAgICAKICAgIGlubGluZSBBc3RM
aXN0Tm9kZSAqTGlzdE5vZGVDYXN0KCk7CiAgICBpbmxpbmUgQXN0QXJyYXlUeXBlICpBcnJheVR5
cGVDYXN0KCk7CiAgICBpbmxpbmUgQXN0U2ltcGxlTmFtZSAqU2ltcGxlTmFtZUNhc3QoKTsKICAg
IGlubGluZSBBc3RQYWNrYWdlRGVjbGFyYXRpb24gKlBhY2thZ2VEZWNsYXJhdGlvbkNhc3QoKTsK
ICAgIGlubGluZSBBc3RJbXBvcnREZWNsYXJhdGlvbiAqSW1wb3J0RGVjbGFyYXRpb25DYXN0KCk7
CiAgICBpbmxpbmUgQXN0Q29tcGlsYXRpb25Vbml0ICpDb21waWxhdGlvblVuaXRDYXN0KCk7CiAg
ICBpbmxpbmUgQXN0Q29tcGlsYXRpb25Vbml0ICpCYWRDb21waWxhdGlvblVuaXRDYXN0KCk7CiAg
ICBpbmxpbmUgQXN0Q29tcGlsYXRpb25Vbml0ICpFbXB0eUNvbXBpbGF0aW9uVW5pdENhc3QoKTsK
ICAgIGlubGluZSBBc3RFbXB0eURlY2xhcmF0aW9uICpFbXB0eURlY2xhcmF0aW9uQ2FzdCgpOwog
ICAgaW5saW5lIEFzdENsYXNzRGVjbGFyYXRpb24gKkNsYXNzRGVjbGFyYXRpb25DYXN0KCk7CiAg
ICBpbmxpbmUgQXN0QXJyYXlJbml0aWFsaXplciAqQXJyYXlJbml0aWFsaXplckNhc3QoKTsKICAg
IGlubGluZSBBc3RCcmFja2V0cyAqQnJhY2tldHNDYXN0KCk7CiAgICBpbmxpbmUgQXN0VmFyaWFi
bGVEZWNsYXJhdG9ySWQgKlZhcmlhYmxlRGVjbGFyYXRvcklkQ2FzdCgpOwogICAgaW5saW5lIEFz
dFZhcmlhYmxlRGVjbGFyYXRvciAqVmFyaWFibGVEZWNsYXJhdG9yQ2FzdCgpOwogICAgaW5saW5l
IEFzdEZpZWxkRGVjbGFyYXRpb24gKkZpZWxkRGVjbGFyYXRpb25DYXN0KCk7CiAgICBpbmxpbmUg
QXN0Rm9ybWFsUGFyYW1ldGVyICpGb3JtYWxQYXJhbWV0ZXJDYXN0KCk7CiAgICBpbmxpbmUgQXN0
TWV0aG9kRGVjbGFyYXRvciAqTWV0aG9kRGVjbGFyYXRvckNhc3QoKTsKICAgIGlubGluZSBBc3RN
ZXRob2REZWNsYXJhdGlvbiAqTWV0aG9kRGVjbGFyYXRpb25DYXN0KCk7CiAgICBpbmxpbmUgQXN0
U3RhdGljSW5pdGlhbGl6ZXIgKlN0YXRpY0luaXRpYWxpemVyQ2FzdCgpOwogICAgaW5saW5lIEFz
dFRoaXNDYWxsICpUaGlzQ2FsbENhc3QoKTsKICAgIGlubGluZSBBc3RTdXBlckNhbGwgKlN1cGVy
Q2FsbENhc3QoKTsKICAgIGlubGluZSBBc3RDb25zdHJ1Y3RvckJsb2NrICpDb25zdHJ1Y3RvckJs
b2NrQ2FzdCgpOwogICAgaW5saW5lIEFzdENvbnN0cnVjdG9yRGVjbGFyYXRpb24gKkNvbnN0cnVj
dG9yRGVjbGFyYXRpb25DYXN0KCk7CiAgICBpbmxpbmUgQXN0SW50ZXJmYWNlRGVjbGFyYXRpb24g
KkludGVyZmFjZURlY2xhcmF0aW9uQ2FzdCgpOwogICAgaW5saW5lIEFzdEJsb2NrICpCbG9ja0Nh
c3QoKTsKICAgIGlubGluZSBBc3RMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQgKkxv
Y2FsVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudENhc3QoKTsKICAgIGlubGluZSBBc3RJZlN0
YXRlbWVudCAqSWZTdGF0ZW1lbnRDYXN0KCk7CiAgICBpbmxpbmUgQXN0RW1wdHlTdGF0ZW1lbnQg
KkVtcHR5U3RhdGVtZW50Q2FzdCgpOwogICAgaW5saW5lIEFzdEV4cHJlc3Npb25TdGF0ZW1lbnQg
KkV4cHJlc3Npb25TdGF0ZW1lbnRDYXN0KCk7CiAgICBpbmxpbmUgQXN0Q2FzZUxhYmVsICpDYXNl
TGFiZWxDYXN0KCk7CiAgICBpbmxpbmUgQXN0RGVmYXVsdExhYmVsICpEZWZhdWx0TGFiZWxDYXN0
KCk7CiAgICBpbmxpbmUgQXN0U3dpdGNoQmxvY2tTdGF0ZW1lbnQgKlN3aXRjaEJsb2NrU3RhdGVt
ZW50Q2FzdCgpOwogICAgaW5saW5lIEFzdFN3aXRjaFN0YXRlbWVudCAqU3dpdGNoU3RhdGVtZW50
Q2FzdCgpOwogICAgaW5saW5lIEFzdFdoaWxlU3RhdGVtZW50ICpXaGlsZVN0YXRlbWVudENhc3Qo
KTsKICAgIGlubGluZSBBc3REb1N0YXRlbWVudCAqRG9TdGF0ZW1lbnRDYXN0KCk7CiAgICBpbmxp
bmUgQXN0Rm9yU3RhdGVtZW50ICpGb3JTdGF0ZW1lbnRDYXN0KCk7CiAgICBpbmxpbmUgQXN0QnJl
YWtTdGF0ZW1lbnQgKkJyZWFrU3RhdGVtZW50Q2FzdCgpOwogICAgaW5saW5lIEFzdENvbnRpbnVl
U3RhdGVtZW50ICpDb250aW51ZVN0YXRlbWVudENhc3QoKTsKICAgIGlubGluZSBBc3RSZXR1cm5T
dGF0ZW1lbnQgKlJldHVyblN0YXRlbWVudENhc3QoKTsKICAgIGlubGluZSBBc3RUaHJvd1N0YXRl
bWVudCAqVGhyb3dTdGF0ZW1lbnRDYXN0KCk7CiAgICBpbmxpbmUgQXN0U3luY2hyb25pemVkU3Rh
dGVtZW50ICpTeW5jaHJvbml6ZWRTdGF0ZW1lbnRDYXN0KCk7CiAgICBpbmxpbmUgQXN0Q2F0Y2hD
bGF1c2UgKkNhdGNoQ2xhdXNlQ2FzdCgpOwogICAgaW5saW5lIEFzdEZpbmFsbHlDbGF1c2UgKkZp
bmFsbHlDbGF1c2VDYXN0KCk7CiAgICBpbmxpbmUgQXN0VHJ5U3RhdGVtZW50ICpUcnlTdGF0ZW1l
bnRDYXN0KCk7CiAgICBpbmxpbmUgQXN0SW50ZWdlckxpdGVyYWwgKkludGVnZXJMaXRlcmFsQ2Fz
dCgpOwogICAgaW5saW5lIEFzdExvbmdMaXRlcmFsICpMb25nTGl0ZXJhbENhc3QoKTsKICAgIGlu
bGluZSBBc3RGbG9hdGluZ1BvaW50TGl0ZXJhbCAqRmxvYXRpbmdQb2ludExpdGVyYWxDYXN0KCk7
CiAgICBpbmxpbmUgQXN0RG91YmxlTGl0ZXJhbCAqRG91YmxlTGl0ZXJhbENhc3QoKTsKICAgIGlu
bGluZSBBc3RUcnVlTGl0ZXJhbCAqVHJ1ZUxpdGVyYWxDYXN0KCk7CiAgICBpbmxpbmUgQXN0RmFs
c2VMaXRlcmFsICpGYWxzZUxpdGVyYWxDYXN0KCk7CiAgICBpbmxpbmUgQXN0U3RyaW5nTGl0ZXJh
bCAqU3RyaW5nTGl0ZXJhbENhc3QoKTsKICAgIGlubGluZSBBc3RDaGFyYWN0ZXJMaXRlcmFsICpD
aGFyYWN0ZXJMaXRlcmFsQ2FzdCgpOwogICAgaW5saW5lIEFzdE51bGxMaXRlcmFsICpOdWxsTGl0
ZXJhbENhc3QoKTsKICAgIGlubGluZSBBc3RUaGlzRXhwcmVzc2lvbiAqVGhpc0V4cHJlc3Npb25D
YXN0KCk7CiAgICBpbmxpbmUgQXN0U3VwZXJFeHByZXNzaW9uICpTdXBlckV4cHJlc3Npb25DYXN0
KCk7CiAgICBpbmxpbmUgQXN0UGFyZW50aGVzaXplZEV4cHJlc3Npb24gKlBhcmVudGhlc2l6ZWRF
eHByZXNzaW9uQ2FzdCgpOwogICAgaW5saW5lIEFzdENsYXNzSW5zdGFuY2VDcmVhdGlvbkV4cHJl
c3Npb24gKkNsYXNzSW5zdGFuY2VDcmVhdGlvbkV4cHJlc3Npb25DYXN0KCk7CiAgICBpbmxpbmUg
QXN0RGltRXhwciAqRGltRXhwckNhc3QoKTsKICAgIGlubGluZSBBc3RBcnJheUNyZWF0aW9uRXhw
cmVzc2lvbiAqQXJyYXlDcmVhdGlvbkV4cHJlc3Npb25DYXN0KCk7CiAgICBpbmxpbmUgQXN0Rmll
bGRBY2Nlc3MgKkZpZWxkQWNjZXNzQ2FzdCgpOwogICAgaW5saW5lIEFzdE1ldGhvZEludm9jYXRp
b24gKk1ldGhvZEludm9jYXRpb25DYXN0KCk7CiAgICBpbmxpbmUgQXN0QXJyYXlBY2Nlc3MgKkFy
cmF5QWNjZXNzQ2FzdCgpOwogICAgaW5saW5lIEFzdFBvc3RVbmFyeUV4cHJlc3Npb24gKlBvc3RV
bmFyeUV4cHJlc3Npb25DYXN0KCk7CiAgICBpbmxpbmUgQXN0UHJlVW5hcnlFeHByZXNzaW9uICpQ
cmVVbmFyeUV4cHJlc3Npb25DYXN0KCk7CiAgICBpbmxpbmUgQXN0Q2FzdEV4cHJlc3Npb24gKkNh
c3RFeHByZXNzaW9uQ2FzdCgpOwogICAgaW5saW5lIEFzdEJpbmFyeUV4cHJlc3Npb24gKkJpbmFy
eUV4cHJlc3Npb25DYXN0KCk7CiAgICBpbmxpbmUgQXN0VHlwZUV4cHJlc3Npb24gKlR5cGVFeHBy
ZXNzaW9uQ2FzdCgpOwogICAgaW5saW5lIEFzdENvbmRpdGlvbmFsRXhwcmVzc2lvbiAqQ29uZGl0
aW9uYWxFeHByZXNzaW9uQ2FzdCgpOwogICAgaW5saW5lIEFzdEFzc2lnbm1lbnRFeHByZXNzaW9u
ICpBc3NpZ25tZW50RXhwcmVzc2lvbkNhc3QoKTsKCiAgICB2aXJ0dWFsIEFzdCAqQ2xvbmUoU3Rv
cmFnZVBvb2wgKik7CgogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggTGVmdFRva2Vu
KCkgIHsgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCAwICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCIw
IiAsICIuLi8uLi9qaWtlcy9zcmMvYXN0LmgiLCA1MzcsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwg
MCkpKSA7IHJldHVybiAwOyB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBSaWdo
dFRva2VuKCkgeyAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIDAgKSA/IDAgOgkoX19hc3NlcnRfZmFp
bCAoIjAiICwgIi4uLy4uL2ppa2VzL3NyYy9hc3QuaCIsIDUzOCwgX19QUkVUVFlfRlVOQ1RJT05f
XyApLCAwKSkpIDsgcmV0dXJuIDA7IH0KfTsKCgogCiAKIAogCiAKIAogCiAKIAp0ZW1wbGF0ZSA8
Y2xhc3MgVD4KY2xhc3MgQXN0QXJyYXkKewogICAgVCAqKmJhc2U7CiAgICBzaXplX3QgYmFzZV9z
aXplOwogICAgaW50IHRvcCwKICAgICAgICBzaXplOwogICAgU3RvcmFnZVBvb2wgKnBvb2w7CiAg
ICB1bnNpZ25lZCBzaG9ydCBsb2dfYmxrc2l6ZSwKICAgICAgICAgICAgICAgICAgIGJhc2VfaW5j
cmVtZW50OwoKICAgIGlubGluZSBzaXplX3QgQmxrc2l6ZSgpIHsgcmV0dXJuICgxIDw8IGxvZ19i
bGtzaXplKTsgfQoKICAgICAKICAgICAKICAgICAKICAgIHZvaWQgQWxsb2NhdGVNb3JlU3BhY2Uo
KTsKCnB1YmxpYzoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICB2b2lk
IFJlc2V0KGNvbnN0IGludCBuID0gMCkKICAgIHsKICAgICAgICBpZiAobiA8IDAgfHwgbiA+IHNp
emUpCiAgICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggZmFsc2UgKSA/IDAgOgkoX19h
c3NlcnRfZmFpbCAoImZhbHNlIiAsICIuLi8uLi9qaWtlcy9zcmMvYXN0LmgiLCA1ODAsIF9fUFJF
VFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgICAgICAgdG9wID0gbjsKICAgIH0KCiAgICAgCiAg
ICAgCiAgICAgCiAgICBpbnQgTGVuZ3RoKCkgeyByZXR1cm4gdG9wOyB9CgogICAgIAogICAgIAog
ICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgVCYgb3BlcmF0b3JbXShjb25zdCBpbnQg
aSkgeyByZXR1cm4gYmFzZVtpID4+IGxvZ19ibGtzaXplXVtpXTsgfQoKICAgICAKICAgICAKICAg
ICAKICAgIGludCBOZXh0SW5kZXgoKQogICAgewogICAgICAgIGludCBpID0gdG9wKys7CiAgICAg
ICAgaWYgKGkgPT0gc2l6ZSkKICAgICAgICAgICAgQWxsb2NhdGVNb3JlU3BhY2UoKTsKICAgICAg
ICByZXR1cm4gaTsKICAgIH0KCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBUJiBOZXh0KCkg
eyBpbnQgaSA9IE5leHRJbmRleCgpOyByZXR1cm4gYmFzZVtpID4+IGxvZ19ibGtzaXplXVtpXTsg
fQoKICAgIGlubGluZSB2b2lkIFB1c2goVCBlbHQpIHsgdGhpcyAtPiBOZXh0KCkgPSBlbHQ7IH0K
ICAgICAKICAgICAKICAgIGlubGluZSBUIFBvcCgpIHsgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCB0
b3AhPTAgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInRvcCE9MCIgLCAiLi4vLi4vamlrZXMvc3Jj
L2FzdC5oIiwgNjE4LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOyB0b3AtLTsgcmV0dXJu
IGJhc2VbdG9wID4+IGxvZ19ibGtzaXplXVt0b3BdOyB9CiAgICBpbmxpbmUgVCBUb3AoKSB7IChz
dGF0aWNfY2FzdDx2b2lkPiAgKCggdG9wIT0wICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJ0b3Ah
PTAiICwgIi4uLy4uL2ppa2VzL3NyYy9hc3QuaCIsIDYxOSwgX19QUkVUVFlfRlVOQ1RJT05fXyAp
LCAwKSkpIDsgcmV0dXJuICgqdGhpcylbdG9wLTFdOyB9CgogICAgIAogICAgIAogICAgIAogICAg
QXN0QXJyYXkoU3RvcmFnZVBvb2wgKiwgdW5zaWduZWQpOwoKICAgICAKICAgICAKICAgICAKICAg
IH5Bc3RBcnJheSgpIHsgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBmYWxzZSApID8gMCA6CShfX2Fz
c2VydF9mYWlsICgiZmFsc2UiICwgIi4uLy4uL2ppa2VzL3NyYy9hc3QuaCIsIDYyOSwgX19QUkVU
VFlfRlVOQ1RJT05fXyApLCAwKSkpIDsgfQp9OwoKCiAKIAogCmNsYXNzIEFzdExpc3ROb2RlIDog
cHVibGljIEFzdAp7CnB1YmxpYzoKICAgIEFzdExpc3ROb2RlICpuZXh0OwogICAgQXN0ICplbGVt
ZW50OwogICAgdW5zaWduZWQgaW5kZXg7CgogICAgQXN0TGlzdE5vZGUoKQogICAgewogICAgICAg
IEFzdDo6a2luZCA9IEFzdDo6TElTVF9OT0RFOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0
OjpOT19UQUc7CiAgICAgICAgQXN0OjpnZW5lcmF0ZWQgPSAwOwoKCgogICAgfQoKICAgIH5Bc3RM
aXN0Tm9kZSgpIHt9CgogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggTGVmdFRva2Vu
KCkgIHsgcmV0dXJuIGVsZW1lbnQgLT4gTGVmdFRva2VuKCk7IH0KICAgIHZpcnR1YWwgTGV4U3Ry
ZWFtOjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVybiBlbGVtZW50IC0+IFJpZ2h0VG9r
ZW4oKTsgfQp9OwoKCmNsYXNzIEFzdFN0YXRlbWVudCA6IHB1YmxpYyBBc3QKewpwcm90ZWN0ZWQ6
CgogICAgU3RvcmFnZVBvb2wgKnBvb2w7CiAgICBWYXJpYWJsZVN5bWJvbEFycmF5ICpkZWZpbmVk
X3ZhcmlhYmxlczsKCnB1YmxpYzoKCiAgICBib29sIGlzX3JlYWNoYWJsZSwKICAgICAgICAgY2Fu
X2NvbXBsZXRlX25vcm1hbGx5OwoKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAK
ICAgICAKICAgIHZpcnR1YWwgfkFzdFN0YXRlbWVudCgpOwoKICAgIHZpcnR1YWwgQXN0ICpDbG9u
ZShTdG9yYWdlUG9vbCAqKSB7IHJldHVybiAoQXN0ICopIF9fbnVsbCA7IH0KCiAgICBpbmxpbmUg
VmFyaWFibGVTeW1ib2wgKiZEZWZpbmVkVmFyaWFibGUoaW50IGkpIHsgcmV0dXJuICgqZGVmaW5l
ZF92YXJpYWJsZXMpW2ldOyB9CiAgICBpbmxpbmUgaW50IE51bURlZmluZWRWYXJpYWJsZXMoKSB7
IHJldHVybiAoZGVmaW5lZF92YXJpYWJsZXMgPyBkZWZpbmVkX3ZhcmlhYmxlcyAtPiBMZW5ndGgo
KSA6IDApOyB9CiAgICBpbmxpbmUgdm9pZCBBbGxvY2F0ZURlZmluZWRWYXJpYWJsZXMoaW50IGVz
dGltYXRlID0gMCk7CiAgICBpbmxpbmUgdm9pZCBBZGREZWZpbmVkVmFyaWFibGUoVmFyaWFibGVT
eW1ib2wgKik7CgogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggTGVmdFRva2VuKCkg
IHsgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCAwICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCIwIiAs
ICIuLi8uLi9qaWtlcy9zcmMvYXN0LmgiLCA2ODgsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkp
KSA7IHJldHVybiAwOyB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBSaWdodFRv
a2VuKCkgeyAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIDAgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAo
IjAiICwgIi4uLy4uL2ppa2VzL3NyYy9hc3QuaCIsIDY4OSwgX19QUkVUVFlfRlVOQ1RJT05fXyAp
LCAwKSkpIDsgcmV0dXJuIDA7IH0KfTsKCgpjbGFzcyBBc3RFeHByZXNzaW9uIDogcHVibGljIEFz
dAp7CnB1YmxpYzoKICAgIExpdGVyYWxWYWx1ZSAqdmFsdWU7CiAgICBTeW1ib2wgKnN5bWJvbDsK
CiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgog
ICAgdmlydHVhbCB+QXN0RXhwcmVzc2lvbigpOwoKICAgIGJvb2wgSXNDb25zdGFudCgpIHsgcmV0
dXJuICh2YWx1ZSAhPSBfX251bGwgKTsgfQoKICAgIFR5cGVTeW1ib2wgKlR5cGUoKQogICAgewog
ICAgICAgIHJldHVybiAoVHlwZVN5bWJvbCAqKQogICAgICAgICAgICAgICAoc3ltYm9sID8gKHN5
bWJvbCAtPiBLaW5kKCkgPT0gU3ltYm9sOjpUWVBFCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA/IChUeXBlU3ltYm9sICopIHN5bWJvbAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiAoc3ltYm9sIC0+IEtpbmQoKSA9PSBTeW1ib2w6OlZBUklBQkxFCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKChWYXJpYWJsZVN5bWJvbCAq
KSBzeW1ib2wpIC0+IFR5cGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IChzeW1ib2wgLT4gS2luZCgpID09IFN5bWJvbDo6TUVUSE9ECiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoKE1ldGhvZFN5
bWJvbCAqKSBzeW1ib2wpIC0+IFR5cGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogX19udWxsICkpKQogICAgICAgICAgICAgICAgICAg
ICAgIDogX19udWxsICk7CiAgICB9CgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29s
ICopIHsgcmV0dXJuIChBc3QgKikgX19udWxsIDsgfQoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpU
b2tlbkluZGV4IExlZnRUb2tlbigpICB7IChzdGF0aWNfY2FzdDx2b2lkPiAgKCggMCApID8gMCA6
CShfX2Fzc2VydF9mYWlsICgiMCIgLCAiLi4vLi4vamlrZXMvc3JjL2FzdC5oIiwgNzI4LCBfX1BS
RVRUWV9GVU5DVElPTl9fICksIDApKSkgOyByZXR1cm4gMDsgfQogICAgdmlydHVhbCBMZXhTdHJl
YW06OlRva2VuSW5kZXggUmlnaHRUb2tlbigpIHsgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCAwICkg
PyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCIwIiAsICIuLi8uLi9qaWtlcy9zcmMvYXN0LmgiLCA3Mjks
IF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7IHJldHVybiAwOyB9Cn07CgoKIAogCiAKIAog
CiAKY2xhc3MgQXN0QmxvY2sgOiBwdWJsaWMgQXN0U3RhdGVtZW50CnsKcHJpdmF0ZToKCiAgICBB
c3RBcnJheTxMZXhTdHJlYW06OlRva2VuSW5kZXg+ICpsYWJlbHM7CiAgICBBc3RBcnJheTxBc3Qg
Kj4gKmJsb2NrX3N0YXRlbWVudHM7CiAgICBWYXJpYWJsZVN5bWJvbEFycmF5ICpsb2NhbGx5X2Rl
ZmluZWRfdmFyaWFibGVzOwoKcHVibGljOgogICAgZW51bSBCbG9ja1RhZwogICAgewogICAgICAg
IE5PTkUsCiAgICAgICAgVFJZX0NMQVVTRV9XSVRIX0ZJTkFMTFksCiAgICAgICAgRklOQUxMWSwK
ICAgICAgICBTWU5DSFJPTklaRUQKICAgIH07CiAgICBCbG9ja1RhZyBibG9ja190YWc7CgogICAg
QmxvY2tTeW1ib2wgKmJsb2NrX3N5bWJvbDsKCiAgICBpbnQgbmVzdGluZ19sZXZlbDsKICAgIExl
eFN0cmVhbTo6VG9rZW5JbmRleCBsZWZ0X2JyYWNlX3Rva2VuOwogICAgTGV4U3RyZWFtOjpUb2tl
bkluZGV4IHJpZ2h0X2JyYWNlX3Rva2VuOwoKICAgIGJvb2wgbm9fYnJhY2VzOwoKICAgIEFzdEJs
b2NrKFN0b3JhZ2VQb29sICpwb29sXykgOiBsYWJlbHMoX19udWxsICksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmxvY2tfc3RhdGVtZW50cyhfX251bGwgKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGx5X2RlZmluZWRfdmFyaWFibGVzKF9fbnVs
bCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrX3RhZyhOT05FKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja19zeW1ib2woX19udWxsICks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGluZ19sZXZlbCgwKSwKICAg
ICAgICAgICAgICAgICAgIG5vX2JyYWNlcyhmYWxzZSkKICAgIHsKICAgICAgICBBc3Q6OmtpbmQg
PSBBc3Q6OkJMT0NLOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpTVEFURU1FTlQ7CiAg
ICAgICAgQXN0OjpnZW5lcmF0ZWQgPSAwOwogICAgICAgIEFzdFN0YXRlbWVudDo6cG9vbCA9IHBv
b2xfOwogICAgICAgIEFzdFN0YXRlbWVudDo6aXNfcmVhY2hhYmxlID0gZmFsc2U7CiAgICAgICAg
QXN0U3RhdGVtZW50OjpjYW5fY29tcGxldGVfbm9ybWFsbHkgPSBmYWxzZTsKICAgICAgICBBc3RT
dGF0ZW1lbnQ6OmRlZmluZWRfdmFyaWFibGVzID0gX19udWxsIDsKICAgIH0KCiAgICB2aXJ0dWFs
IH5Bc3RCbG9jaygpOwoKICAgIGlubGluZSBBc3QgKiZTdGF0ZW1lbnQoaW50IGkpIHsgcmV0dXJu
ICgqYmxvY2tfc3RhdGVtZW50cylbaV07IH0KICAgIGlubGluZSBpbnQgTnVtU3RhdGVtZW50cygp
IHsgcmV0dXJuIChibG9ja19zdGF0ZW1lbnRzID8gYmxvY2tfc3RhdGVtZW50cyAtPiBMZW5ndGgo
KSA6IDApOyB9CiAgICBpbmxpbmUgdm9pZCBBbGxvY2F0ZUJsb2NrU3RhdGVtZW50cyhpbnQgZXN0
aW1hdGUgPSAwKTsKICAgIGlubGluZSB2b2lkIEFkZFN0YXRlbWVudChBc3QgKik7CgogICAgaW5s
aW5lIExleFN0cmVhbTo6VG9rZW5JbmRleCAmTGFiZWwoaW50IGkpIHsgcmV0dXJuICgqbGFiZWxz
KVtpXTsgfQogICAgaW5saW5lIGludCBOdW1MYWJlbHMoKSB7IHJldHVybiAobGFiZWxzID8gbGFi
ZWxzIC0+IExlbmd0aCgpIDogMCk7IH0KICAgIGlubGluZSB2b2lkIEFsbG9jYXRlTGFiZWxzKGlu
dCBlc3RpbWF0ZSA9IDQpOwogICAgaW5saW5lIHZvaWQgQWRkTGFiZWwoTGV4U3RyZWFtOjpUb2tl
bkluZGV4KTsKCiAgICBpbmxpbmUgVmFyaWFibGVTeW1ib2wgKiZMb2NhbGx5RGVmaW5lZFZhcmlh
YmxlKGludCBpKSB7IHJldHVybiAoKmxvY2FsbHlfZGVmaW5lZF92YXJpYWJsZXMpW2ldOyB9CiAg
ICBpbmxpbmUgaW50IE51bUxvY2FsbHlEZWZpbmVkVmFyaWFibGVzKCkgeyByZXR1cm4gKGxvY2Fs
bHlfZGVmaW5lZF92YXJpYWJsZXMgPyBsb2NhbGx5X2RlZmluZWRfdmFyaWFibGVzIC0+IExlbmd0
aCgpIDogMCk7IH0KICAgIGlubGluZSB2b2lkIEFsbG9jYXRlTG9jYWxseURlZmluZWRWYXJpYWJs
ZXMoaW50IGVzdGltYXRlID0gMCk7CiAgICBpbmxpbmUgdm9pZCBBZGRMb2NhbGx5RGVmaW5lZFZh
cmlhYmxlKFZhcmlhYmxlU3ltYm9sICopOwoKICAgIGlubGluZSB2b2lkIFRyYW5zZmVyTG9jYWxs
eURlZmluZWRWYXJpYWJsZXNUbyhBc3RTd2l0Y2hCbG9ja1N0YXRlbWVudCAqKTsKCgoKCgoKICAg
IHZpcnR1YWwgQXN0ICpDbG9uZShTdG9yYWdlUG9vbCAqKTsKCiAgICB2aXJ0dWFsIExleFN0cmVh
bTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4oKSAgeyByZXR1cm4gbGVmdF9icmFjZV90b2tlbjsgfQog
ICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggUmlnaHRUb2tlbigpIHsgcmV0dXJuIHJp
Z2h0X2JyYWNlX3Rva2VuOyB9Cn07CgogCiAKIAogCiAKIAogCiAKIAogCiAKY2xhc3MgQXN0UHJp
bWl0aXZlVHlwZSA6IHB1YmxpYyBBc3QKewpwdWJsaWM6CiAgICBMZXhTdHJlYW06OlRva2VuSW5k
ZXggcHJpbWl0aXZlX2tpbmRfdG9rZW47CgogICAgQXN0UHJpbWl0aXZlVHlwZShBc3Q6OktpbmQg
a2luZF8sIExleFN0cmVhbTo6VG9rZW5JbmRleCB0b2tlbl8pIDogcHJpbWl0aXZlX2tpbmRfdG9r
ZW4odG9rZW5fKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IGtpbmRfOwogICAgICAgIEFzdDo6
Y2xhc3NfdGFnID0gQXN0OjpQUklNSVRJVkVfVFlQRTsKICAgICAgICBBc3Q6OmdlbmVyYXRlZCA9
IDA7CiAgICB9CgogICAgdmlydHVhbCB+QXN0UHJpbWl0aXZlVHlwZSgpOwoKCgoKCgogICAgdmly
dHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpU
b2tlbkluZGV4IExlZnRUb2tlbigpICB7IHJldHVybiBwcmltaXRpdmVfa2luZF90b2tlbjsgfQog
ICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggUmlnaHRUb2tlbigpIHsgcmV0dXJuIHBy
aW1pdGl2ZV9raW5kX3Rva2VuOyB9Cn07CgoKIAogCiAKY2xhc3MgQXN0QnJhY2tldHMgOiBwdWJs
aWMgQXN0CnsKcHVibGljOgogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IGxlZnRfYnJhY2tldF90
b2tlbjsKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCByaWdodF9icmFja2V0X3Rva2VuOwoKICAg
IEFzdEJyYWNrZXRzKExleFN0cmVhbTo6VG9rZW5JbmRleCBsZWZ0XywgTGV4U3RyZWFtOjpUb2tl
bkluZGV4IHJpZ2h0XykgOiBsZWZ0X2JyYWNrZXRfdG9rZW4obGVmdF8pLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJpZ2h0X2JyYWNrZXRfdG9rZW4ocmlnaHRfKQogICAgewogICAgICAgIEFzdDo6a2lu
ZCA9IEFzdDo6QlJBQ0tFVFM7CiAgICAgICAgQXN0OjpjbGFzc190YWcgPSBBc3Q6Ok5PX1RBRzsK
ICAgICAgICBBc3Q6OmdlbmVyYXRlZCA9IDA7CiAgICB9CgogICAgdmlydHVhbCB+QXN0QnJhY2tl
dHMoKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0ICpDbG9uZShTdG9yYWdlUG9vbCAqKTsKCiAgICB2
aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4oKSAgeyByZXR1cm4gbGVmdF9i
cmFja2V0X3Rva2VuOyB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBSaWdodFRv
a2VuKCkgeyByZXR1cm4gcmlnaHRfYnJhY2tldF90b2tlbjsgfQp9OwoKCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCmNsYXNzIEFzdEFycmF5VHlwZSA6IHB1YmxpYyBBc3QKewpwcml2YXRlOgoKICAg
IFN0b3JhZ2VQb29sICpwb29sOwogICAgQXN0QXJyYXk8QXN0QnJhY2tldHMgKj4gKmJyYWNrZXRz
OwoKcHVibGljOgogICAgQXN0ICp0eXBlOwoKICAgIEFzdEFycmF5VHlwZShTdG9yYWdlUG9vbCAq
cG9vbF8pIDogcG9vbChwb29sXyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyYWNrZXRzKF9fbnVsbCApCiAgICB7CiAgICAgICAgQXN0OjpraW5kID0gQXN0OjpBUlJB
WTsKICAgICAgICBBc3Q6OmNsYXNzX3RhZyA9IEFzdDo6Tk9fVEFHOwogICAgICAgIEFzdDo6Z2Vu
ZXJhdGVkID0gMDsKICAgIH0KCiAgICB2aXJ0dWFsIH5Bc3RBcnJheVR5cGUoKTsKCiAgICBpbmxp
bmUgQXN0QnJhY2tldHMgKiZCcmFja2V0cyhpbnQgaSkgeyByZXR1cm4gKCpicmFja2V0cylbaV07
IH0KICAgIGlubGluZSBpbnQgTnVtQnJhY2tldHMoKSB7IHJldHVybiAoYnJhY2tldHMgPyBicmFj
a2V0cyAtPiBMZW5ndGgoKSA6IDApOyB9CiAgICBpbmxpbmUgdm9pZCBBbGxvY2F0ZUJyYWNrZXRz
KGludCBlc3RpbWF0ZSA9IDApOwogICAgaW5saW5lIHZvaWQgQWRkQnJhY2tldHMoQXN0QnJhY2tl
dHMgKik7CgoKCgoKCiAgICB2aXJ0dWFsIEFzdCAqQ2xvbmUoU3RvcmFnZVBvb2wgKik7CgogICAg
dmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggTGVmdFRva2VuKCkgIHsgcmV0dXJuIHR5cGUg
LT4gTGVmdFRva2VuKCk7IH0KICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IFJpZ2h0
VG9rZW4oKSB7IHJldHVybiBCcmFja2V0cyhOdW1CcmFja2V0cygpIC0gMSkgLT4gUmlnaHRUb2tl
bigpOyB9Cn07CgoKIAogCiAKIAogCiAKY2xhc3MgQXN0U2ltcGxlTmFtZSA6IHB1YmxpYyBBc3RF
eHByZXNzaW9uCnsKcHVibGljOgogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IGlkZW50aWZpZXJf
dG9rZW47CgogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgQXN0RXhwcmVzc2lvbiAq
cmVzb2x1dGlvbl9vcHQ7CgogICAgQXN0U2ltcGxlTmFtZShMZXhTdHJlYW06OlRva2VuSW5kZXgg
dG9rZW5fKSA6IGlkZW50aWZpZXJfdG9rZW4odG9rZW5fKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9uX29wdChfX251bGwgKQogICAg
ewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6SURFTlRJRklFUjsKICAgICAgICBBc3Q6OmNsYXNz
X3RhZyA9IEFzdDo6RVhQUkVTU0lPTjsKICAgICAgICBBc3Q6OmdlbmVyYXRlZCA9IDA7CiAgICAg
ICAgQXN0RXhwcmVzc2lvbjo6dmFsdWUgPSBfX251bGwgOwogICAgICAgIEFzdEV4cHJlc3Npb246
OnN5bWJvbCA9IF9fbnVsbCA7CiAgICB9CgogICAgdmlydHVhbCB+QXN0U2ltcGxlTmFtZSgpOwoK
CgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29sICopOwoKICAgIHZpcnR1YWwg
TGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigpICB7IHJldHVybiBpZGVudGlmaWVyX3Rv
a2VuOyB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBSaWdodFRva2VuKCkgeyBy
ZXR1cm4gaWRlbnRpZmllcl90b2tlbjsgfQp9OwoKIAogCiAKY2xhc3MgQXN0UGFja2FnZURlY2xh
cmF0aW9uIDogcHVibGljIEFzdAp7CnB1YmxpYzoKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBw
YWNrYWdlX3Rva2VuOwogICAgQXN0RXhwcmVzc2lvbiAqbmFtZTsKICAgIExleFN0cmVhbTo6VG9r
ZW5JbmRleCBzZW1pY29sb25fdG9rZW47CgogICAgQXN0UGFja2FnZURlY2xhcmF0aW9uKCkKICAg
IHsKICAgICAgICBBc3Q6OmtpbmQgPSBBc3Q6OlBBQ0tBR0U7CiAgICAgICAgQXN0OjpjbGFzc190
YWcgPSBBc3Q6Ok5PX1RBRzsKICAgICAgICBBc3Q6OmdlbmVyYXRlZCA9IDA7CiAgICB9CgogICAg
dmlydHVhbCB+QXN0UGFja2FnZURlY2xhcmF0aW9uKCk7CgoKCgoKCiAgICB2aXJ0dWFsIEFzdCAq
Q2xvbmUoU3RvcmFnZVBvb2wgKik7CgogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXgg
TGVmdFRva2VuKCkgIHsgcmV0dXJuIHBhY2thZ2VfdG9rZW47IH0KICAgIHZpcnR1YWwgTGV4U3Ry
ZWFtOjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVybiBzZW1pY29sb25fdG9rZW47IH0K
fTsKCiAKIAogCmNsYXNzIEFzdEltcG9ydERlY2xhcmF0aW9uIDogcHVibGljIEFzdAp7CnB1Ymxp
YzoKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBpbXBvcnRfdG9rZW47CiAgICBBc3RFeHByZXNz
aW9uICpuYW1lOwogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IHN0YXJfdG9rZW5fb3B0OyAgICAg
ICAgCiAgICBMZXhTdHJlYW06OlRva2VuSW5kZXggc2VtaWNvbG9uX3Rva2VuOwoKICAgIEFzdElt
cG9ydERlY2xhcmF0aW9uKCkKICAgIHsKICAgICAgICBBc3Q6OmtpbmQgPSBBc3Q6OklNUE9SVDsK
ICAgICAgICBBc3Q6OmNsYXNzX3RhZyA9IEFzdDo6Tk9fVEFHOwogICAgICAgIEFzdDo6Z2VuZXJh
dGVkID0gMDsKICAgIH0KCiAgICB2aXJ0dWFsIH5Bc3RJbXBvcnREZWNsYXJhdGlvbigpOwoKCgoK
CgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4
U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigpICB7IHJldHVybiBpbXBvcnRfdG9rZW47IH0K
ICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVybiBz
ZW1pY29sb25fdG9rZW47IH0KfTsKCiAKIAogCiAKIApjbGFzcyBBc3RDb21waWxhdGlvblVuaXQg
OiBwdWJsaWMgQXN0CnsKcHJpdmF0ZToKCiAgICBTdG9yYWdlUG9vbCAqcG9vbDsKICAgIEFzdEFy
cmF5PEFzdEltcG9ydERlY2xhcmF0aW9uICo+ICppbXBvcnRfZGVjbGFyYXRpb25zOwogICAgQXN0
QXJyYXk8QXN0ICo+ICp0eXBlX2RlY2xhcmF0aW9uczsKCnB1YmxpYzoKICAgIFN0b3JhZ2VQb29s
ICphc3RfcG9vbDsKCiAgICBBc3RQYWNrYWdlRGVjbGFyYXRpb24gKnBhY2thZ2VfZGVjbGFyYXRp
b25fb3B0OwoKICAgIEFzdENvbXBpbGF0aW9uVW5pdChTdG9yYWdlUG9vbCAqcG9vbF8pIDogcG9v
bChwb29sXyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlt
cG9ydF9kZWNsYXJhdGlvbnMoX19udWxsICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVfZGVjbGFyYXRpb25zKF9fbnVsbCApCiAgICB7CiAgICAgICAg
QXN0OjpraW5kID0gQXN0OjpDT01QSUxBVElPTjsKICAgICAgICBBc3Q6OmNsYXNzX3RhZyA9IEFz
dDo6Tk9fVEFHOwogICAgICAgIEFzdDo6Z2VuZXJhdGVkID0gMDsKICAgIH0KCiAgICB2aXJ0dWFs
IH5Bc3RDb21waWxhdGlvblVuaXQoKTsKCiAgICB2b2lkIEZyZWVBc3QoKTsKCiAgICBpbmxpbmUg
QXN0SW1wb3J0RGVjbGFyYXRpb24gKiZJbXBvcnREZWNsYXJhdGlvbihpbnQgaSkgeyByZXR1cm4g
KCppbXBvcnRfZGVjbGFyYXRpb25zKVtpXTsgfQogICAgaW5saW5lIGludCBOdW1JbXBvcnREZWNs
YXJhdGlvbnMoKSB7IHJldHVybiAoaW1wb3J0X2RlY2xhcmF0aW9ucyA/IGltcG9ydF9kZWNsYXJh
dGlvbnMgLT4gTGVuZ3RoKCkgOiAwKTsgfQogICAgaW5saW5lIHZvaWQgQWxsb2NhdGVJbXBvcnRE
ZWNsYXJhdGlvbnMoaW50IGVzdGltYXRlID0gMCk7CiAgICBpbmxpbmUgdm9pZCBBZGRJbXBvcnRE
ZWNsYXJhdGlvbihBc3RJbXBvcnREZWNsYXJhdGlvbiAqKTsKCiAgICBpbmxpbmUgdm9pZCBSZXNl
dFR5cGVEZWNsYXJhdGlvbnMoaW50IG4pIHsgaWYgKHR5cGVfZGVjbGFyYXRpb25zKSB0eXBlX2Rl
Y2xhcmF0aW9ucyAtPiBSZXNldChuKTsgfQogICAgaW5saW5lIEFzdCAqJlR5cGVEZWNsYXJhdGlv
bihpbnQgaSkgeyByZXR1cm4gKCp0eXBlX2RlY2xhcmF0aW9ucylbaV07IH0KICAgIGlubGluZSBp
bnQgTnVtVHlwZURlY2xhcmF0aW9ucygpIHsgcmV0dXJuICh0eXBlX2RlY2xhcmF0aW9ucyA/IHR5
cGVfZGVjbGFyYXRpb25zIC0+IExlbmd0aCgpIDogMCk7IH0KICAgIGlubGluZSB2b2lkIEFsbG9j
YXRlVHlwZURlY2xhcmF0aW9ucyhpbnQgZXN0aW1hdGUgPSAwKTsKICAgIGlubGluZSB2b2lkIEFk
ZFR5cGVEZWNsYXJhdGlvbihBc3QgKik7CgoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0
b3JhZ2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tl
bigpCiAgICB7CiAgICAgICAgaWYgKHBhY2thZ2VfZGVjbGFyYXRpb25fb3B0KQogICAgICAgICAg
ICAgcmV0dXJuIHBhY2thZ2VfZGVjbGFyYXRpb25fb3B0IC0+IExlZnRUb2tlbigpOwogICAgICAg
IGVsc2UgaWYgKE51bUltcG9ydERlY2xhcmF0aW9ucygpID4gMCkKICAgICAgICAgICAgIHJldHVy
biBJbXBvcnREZWNsYXJhdGlvbigwKSAtPiBMZWZ0VG9rZW4oKTsKICAgICAgICBlbHNlIGlmIChO
dW1UeXBlRGVjbGFyYXRpb25zKCkgPiAwKQogICAgICAgICAgICAgcmV0dXJuIFR5cGVEZWNsYXJh
dGlvbigwKSAtPiBMZWZ0VG9rZW4oKTsKCiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgdmly
dHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggUmlnaHRUb2tlbigpCiAgICB7CiAgICAgICAgaWYg
KE51bVR5cGVEZWNsYXJhdGlvbnMoKSA+IDApCiAgICAgICAgICAgICByZXR1cm4gVHlwZURlY2xh
cmF0aW9uKE51bVR5cGVEZWNsYXJhdGlvbnMoKSAtIDEpIC0+IFJpZ2h0VG9rZW4oKTsKICAgICAg
ICBlbHNlIGlmIChOdW1JbXBvcnREZWNsYXJhdGlvbnMoKSA+IDApCiAgICAgICAgICAgICByZXR1
cm4gSW1wb3J0RGVjbGFyYXRpb24oTnVtSW1wb3J0RGVjbGFyYXRpb25zKCkgLSAxKSAtPiBSaWdo
dFRva2VuKCk7CiAgICAgICAgZWxzZSBpZiAocGFja2FnZV9kZWNsYXJhdGlvbl9vcHQpCiAgICAg
ICAgICAgICByZXR1cm4gcGFja2FnZV9kZWNsYXJhdGlvbl9vcHQgLT4gUmlnaHRUb2tlbigpOwoK
ICAgICAgICByZXR1cm4gMDsKICAgIH0KfTsKCgogCiAKIAogCiAKIAogCiAKIApjbGFzcyBBc3RN
b2RpZmllciA6IHB1YmxpYyBBc3QKewpwdWJsaWM6CiAgICBMZXhTdHJlYW06OlRva2VuSW5kZXgg
bW9kaWZpZXJfa2luZF90b2tlbjsKCiAgICBBc3RNb2RpZmllcihBc3Q6OktpbmQga2luZF8sIExl
eFN0cmVhbTo6VG9rZW5JbmRleCB0b2tlbl8pIDogbW9kaWZpZXJfa2luZF90b2tlbih0b2tlbl8p
CiAgICB7CiAgICAgICAgQXN0OjpraW5kID0ga2luZF87CiAgICAgICAgQXN0OjpjbGFzc190YWcg
PSBBc3Q6Ok1PRElGSUVSOwogICAgICAgIEFzdDo6Z2VuZXJhdGVkID0gMDsKICAgIH0KCiAgICB2
aXJ0dWFsIH5Bc3RNb2RpZmllcigpOwoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3Jh
Z2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigp
ICB7IHJldHVybiBtb2RpZmllcl9raW5kX3Rva2VuOyB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6
VG9rZW5JbmRleCBSaWdodFRva2VuKCkgeyByZXR1cm4gbW9kaWZpZXJfa2luZF90b2tlbjsgfQp9
OwoKCiAKIAogCmNsYXNzIEFzdEVtcHR5RGVjbGFyYXRpb24gOiBwdWJsaWMgQXN0CnsKcHVibGlj
OgogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IHNlbWljb2xvbl90b2tlbjsKCiAgICBBc3RFbXB0
eURlY2xhcmF0aW9uKExleFN0cmVhbTo6VG9rZW5JbmRleCB0b2tlbl8pIDogc2VtaWNvbG9uX3Rv
a2VuKHRva2VuXykKICAgIHsKICAgICAgICBBc3Q6OmtpbmQgPSBBc3Q6OkVNUFRZX0RFQ0xBUkFU
SU9OOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpOT19UQUc7CiAgICAgICAgQXN0Ojpn
ZW5lcmF0ZWQgPSAwOwogICAgfQoKICAgIHZpcnR1YWwgfkFzdEVtcHR5RGVjbGFyYXRpb24oKTsK
CgoKCgoKICAgIHZpcnR1YWwgQXN0ICpDbG9uZShTdG9yYWdlUG9vbCAqKTsKCiAgICB2aXJ0dWFs
IExleFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4oKSB7IHJldHVybiBzZW1pY29sb25fdG9r
ZW47IH0KICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJl
dHVybiBzZW1pY29sb25fdG9rZW47IH0KfTsKCiAKIAogCmNsYXNzIEFzdENsYXNzQm9keSA6IHB1
YmxpYyBBc3QKewpwcml2YXRlOgogICAgZnJpZW5kIGNsYXNzIFBhcnNlcjsKCiAgICBTdG9yYWdl
UG9vbCAqcG9vbDsKICAgIEFzdEFycmF5PEFzdCAqPiAqY2xhc3NfYm9keV9kZWNsYXJhdGlvbnM7
CgogICAgQXN0QXJyYXk8QXN0RmllbGREZWNsYXJhdGlvbiAqPiAqaW5zdGFuY2VfdmFyaWFibGVz
OwogICAgQXN0QXJyYXk8QXN0RmllbGREZWNsYXJhdGlvbiAqPiAqY2xhc3NfdmFyaWFibGVzOwog
ICAgQXN0QXJyYXk8QXN0TWV0aG9kRGVjbGFyYXRpb24gKj4gKm1ldGhvZHM7CiAgICBBc3RBcnJh
eTxBc3RDb25zdHJ1Y3RvckRlY2xhcmF0aW9uICo+ICpjb25zdHJ1Y3RvcnM7CiAgICBBc3RBcnJh
eTxBc3RTdGF0aWNJbml0aWFsaXplciAqPiAqc3RhdGljX2luaXRpYWxpemVyczsKICAgIEFzdEFy
cmF5PEFzdENsYXNzRGVjbGFyYXRpb24gKj4gKmlubmVyX2NsYXNzZXM7CiAgICBBc3RBcnJheTxB
c3RJbnRlcmZhY2VEZWNsYXJhdGlvbiAqPiAqaW5uZXJfaW50ZXJmYWNlczsKICAgIEFzdEFycmF5
PEFzdEJsb2NrICo+ICpibG9ja3M7CiAgICBBc3RBcnJheTxBc3RFbXB0eURlY2xhcmF0aW9uICo+
ICplbXB0eV9kZWNsYXJhdGlvbnM7CgpwdWJsaWM6CgogICAgQXN0Q29uc3RydWN0b3JEZWNsYXJh
dGlvbiAqZGVmYXVsdF9jb25zdHJ1Y3RvcjsKCiAgICBBc3RCbG9jayAqdGhpc19ibG9jazsgIAoK
ICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBsZWZ0X2JyYWNlX3Rva2VuOwogICAgTGV4U3RyZWFt
OjpUb2tlbkluZGV4IHJpZ2h0X2JyYWNlX3Rva2VuOwoKICAgIGlubGluZSB2b2lkIG1hcmtfdW5w
YXJzZWQoKSB7IEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpVTlBBUlNFRDsgfQogICAgaW5saW5lIHZv
aWQgbWFya19wYXJzZWQoKSAgIHsgQXN0OjpjbGFzc190YWcgPSBBc3Q6Ok5PX1RBRzsgfQoKICAg
IEFzdENsYXNzQm9keShTdG9yYWdlUG9vbCAqcG9vbF8pIDogcG9vbChwb29sXyksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX2JvZHlfZGVjbGFyYXRpb25zKF9f
bnVsbCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZV92
YXJpYWJsZXMoX19udWxsICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzX3ZhcmlhYmxlcyhfX251bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWV0aG9kcyhfX251bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3RydWN0b3JzKF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfaW5pdGlhbGl6ZXJzKF9fbnVsbCApLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lcl9jbGFzc2VzKF9fbnVsbCApLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lcl9pbnRlcmZhY2VzKF9fbnVsbCAp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3MoX19udWxsICks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5X2RlY2xhcmF0aW9u
cyhfX251bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dF9jb25zdHJ1Y3RvcihfX251bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpc19ibG9jayhfX251bGwgKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6
Q0xBU1NfQk9EWTsKICAgICAgICBBc3Q6OmNsYXNzX3RhZyA9IEFzdDo6Tk9fVEFHOwogICAgICAg
IEFzdDo6Z2VuZXJhdGVkID0gMDsKICAgIH0KCiAgICB2aXJ0dWFsIH5Bc3RDbGFzc0JvZHkoKTsK
CiAgICBpbmxpbmUgQXN0IComQ2xhc3NCb2R5RGVjbGFyYXRpb24oaW50IGkpIHsgcmV0dXJuICgq
Y2xhc3NfYm9keV9kZWNsYXJhdGlvbnMpW2ldOyB9CiAgICBpbmxpbmUgaW50IE51bUNsYXNzQm9k
eURlY2xhcmF0aW9ucygpIHsgcmV0dXJuIChjbGFzc19ib2R5X2RlY2xhcmF0aW9ucyA/IGNsYXNz
X2JvZHlfZGVjbGFyYXRpb25zIC0+IExlbmd0aCgpIDogMCk7IH0KICAgIGlubGluZSB2b2lkIEFs
bG9jYXRlQ2xhc3NCb2R5RGVjbGFyYXRpb25zKGludCBlc3RpbWF0ZSA9IDApOwogICAgaW5saW5l
IHZvaWQgQWRkQ2xhc3NCb2R5RGVjbGFyYXRpb24oQXN0ICopOwogICAgaW5saW5lIHZvaWQgQWRk
Q2xhc3NCb2R5RGVjbGFyYXRpb25OaWNlbHkoQXN0ICopOwoKICAgIGlubGluZSBBc3RGaWVsZERl
Y2xhcmF0aW9uIComSW5zdGFuY2VWYXJpYWJsZShpbnQgaSkgeyByZXR1cm4gKCppbnN0YW5jZV92
YXJpYWJsZXMpW2ldOyB9CiAgICBpbmxpbmUgaW50IE51bUluc3RhbmNlVmFyaWFibGVzKCkgeyBy
ZXR1cm4gKGluc3RhbmNlX3ZhcmlhYmxlcyA/IGluc3RhbmNlX3ZhcmlhYmxlcyAtPiBMZW5ndGgo
KSA6IDApOyB9CiAgICBpbmxpbmUgdm9pZCBBbGxvY2F0ZUluc3RhbmNlVmFyaWFibGVzKGludCBl
c3RpbWF0ZSA9IDApOwogICAgaW5saW5lIHZvaWQgQWRkSW5zdGFuY2VWYXJpYWJsZShBc3RGaWVs
ZERlY2xhcmF0aW9uICopOwoKICAgIGlubGluZSBBc3RGaWVsZERlY2xhcmF0aW9uIComQ2xhc3NW
YXJpYWJsZShpbnQgaSkgeyByZXR1cm4gKCpjbGFzc192YXJpYWJsZXMpW2ldOyB9CiAgICBpbmxp
bmUgaW50IE51bUNsYXNzVmFyaWFibGVzKCkgeyByZXR1cm4gKGNsYXNzX3ZhcmlhYmxlcyA/IGNs
YXNzX3ZhcmlhYmxlcyAtPiBMZW5ndGgoKSA6IDApOyB9CiAgICBpbmxpbmUgdm9pZCBBbGxvY2F0
ZUNsYXNzVmFyaWFibGVzKGludCBlc3RpbWF0ZSA9IDApOwogICAgaW5saW5lIHZvaWQgQWRkQ2xh
c3NWYXJpYWJsZShBc3RGaWVsZERlY2xhcmF0aW9uICopOwoKICAgIGlubGluZSBBc3RNZXRob2RE
ZWNsYXJhdGlvbiAqJk1ldGhvZChpbnQgaSkgeyByZXR1cm4gKCptZXRob2RzKVtpXTsgfQogICAg
aW5saW5lIGludCBOdW1NZXRob2RzKCkgeyByZXR1cm4gKG1ldGhvZHMgPyBtZXRob2RzIC0+IExl
bmd0aCgpIDogMCk7IH0KICAgIGlubGluZSB2b2lkIEFsbG9jYXRlTWV0aG9kcyhpbnQgZXN0aW1h
dGUgPSAwKTsKICAgIGlubGluZSB2b2lkIEFkZE1ldGhvZChBc3RNZXRob2REZWNsYXJhdGlvbiAq
KTsKCiAgICBpbmxpbmUgQXN0Q29uc3RydWN0b3JEZWNsYXJhdGlvbiAqJkNvbnN0cnVjdG9yKGlu
dCBpKSB7IHJldHVybiAoKmNvbnN0cnVjdG9ycylbaV07IH0KICAgIGlubGluZSBpbnQgTnVtQ29u
c3RydWN0b3JzKCkgeyByZXR1cm4gKGNvbnN0cnVjdG9ycyA/IGNvbnN0cnVjdG9ycyAtPiBMZW5n
dGgoKSA6IDApOyB9CiAgICBpbmxpbmUgdm9pZCBBbGxvY2F0ZUNvbnN0cnVjdG9ycyhpbnQgZXN0
aW1hdGUgPSAwKTsKICAgIGlubGluZSB2b2lkIEFkZENvbnN0cnVjdG9yKEFzdENvbnN0cnVjdG9y
RGVjbGFyYXRpb24gKik7CgogICAgaW5saW5lIEFzdFN0YXRpY0luaXRpYWxpemVyIComU3RhdGlj
SW5pdGlhbGl6ZXIoaW50IGkpIHsgcmV0dXJuICgqc3RhdGljX2luaXRpYWxpemVycylbaV07IH0K
ICAgIGlubGluZSBpbnQgTnVtU3RhdGljSW5pdGlhbGl6ZXJzKCkgeyByZXR1cm4gKHN0YXRpY19p
bml0aWFsaXplcnMgPyBzdGF0aWNfaW5pdGlhbGl6ZXJzIC0+IExlbmd0aCgpIDogMCk7IH0KICAg
IGlubGluZSB2b2lkIEFsbG9jYXRlU3RhdGljSW5pdGlhbGl6ZXJzKGludCBlc3RpbWF0ZSA9IDAp
OwogICAgaW5saW5lIHZvaWQgQWRkU3RhdGljSW5pdGlhbGl6ZXIoQXN0U3RhdGljSW5pdGlhbGl6
ZXIgKik7CgogICAgaW5saW5lIEFzdENsYXNzRGVjbGFyYXRpb24gKiZOZXN0ZWRDbGFzcyhpbnQg
aSkgeyByZXR1cm4gKCppbm5lcl9jbGFzc2VzKVtpXTsgfQogICAgaW5saW5lIGludCBOdW1OZXN0
ZWRDbGFzc2VzKCkgeyByZXR1cm4gKGlubmVyX2NsYXNzZXMgPyBpbm5lcl9jbGFzc2VzIC0+IExl
bmd0aCgpIDogMCk7IH0KICAgIGlubGluZSB2b2lkIEFsbG9jYXRlTmVzdGVkQ2xhc3NlcyhpbnQg
ZXN0aW1hdGUgPSAwKTsKICAgIGlubGluZSB2b2lkIEFkZE5lc3RlZENsYXNzKEFzdENsYXNzRGVj
bGFyYXRpb24gKik7CgogICAgaW5saW5lIEFzdEludGVyZmFjZURlY2xhcmF0aW9uIComTmVzdGVk
SW50ZXJmYWNlKGludCBpKSB7IHJldHVybiAoKmlubmVyX2ludGVyZmFjZXMpW2ldOyB9CiAgICBp
bmxpbmUgaW50IE51bU5lc3RlZEludGVyZmFjZXMoKSB7IHJldHVybiAoaW5uZXJfaW50ZXJmYWNl
cyA/IGlubmVyX2ludGVyZmFjZXMgLT4gTGVuZ3RoKCkgOiAwKTsgfQogICAgaW5saW5lIHZvaWQg
QWxsb2NhdGVOZXN0ZWRJbnRlcmZhY2VzKGludCBlc3RpbWF0ZSA9IDApOwogICAgaW5saW5lIHZv
aWQgQWRkTmVzdGVkSW50ZXJmYWNlKEFzdEludGVyZmFjZURlY2xhcmF0aW9uICopOwoKICAgIGlu
bGluZSBBc3RCbG9jayAqJkJsb2NrKGludCBpKSB7IHJldHVybiAoKmJsb2NrcylbaV07IH0KICAg
IGlubGluZSBpbnQgTnVtQmxvY2tzKCkgeyByZXR1cm4gKGJsb2NrcyA/IGJsb2NrcyAtPiBMZW5n
dGgoKSA6IDApOyB9CiAgICBpbmxpbmUgdm9pZCBBbGxvY2F0ZUJsb2NrcyhpbnQgZXN0aW1hdGUg
PSAwKTsKICAgIGlubGluZSB2b2lkIEFkZEJsb2NrKEFzdEJsb2NrICopOwoKICAgIGlubGluZSBB
c3RFbXB0eURlY2xhcmF0aW9uIComRW1wdHlEZWNsYXJhdGlvbihpbnQgaSkgeyByZXR1cm4gKCpl
bXB0eV9kZWNsYXJhdGlvbnMpW2ldOyB9CiAgICBpbmxpbmUgaW50IE51bUVtcHR5RGVjbGFyYXRp
b25zKCkgeyByZXR1cm4gKGVtcHR5X2RlY2xhcmF0aW9ucyA/IGVtcHR5X2RlY2xhcmF0aW9ucyAt
PiBMZW5ndGgoKSA6IDApOyB9CiAgICBpbmxpbmUgdm9pZCBBbGxvY2F0ZUVtcHR5RGVjbGFyYXRp
b25zKGludCBlc3RpbWF0ZSA9IDApOwogICAgaW5saW5lIHZvaWQgQWRkRW1wdHlEZWNsYXJhdGlv
bihBc3RFbXB0eURlY2xhcmF0aW9uICopOwoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0
b3JhZ2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tl
bigpIHsgcmV0dXJuIGxlZnRfYnJhY2VfdG9rZW47IH0KICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpU
b2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVybiByaWdodF9icmFjZV90b2tlbjsgfQp9OwoK
CgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIApjbGFzcyBBc3RDbGFzc0RlY2xh
cmF0aW9uIDogcHVibGljIEFzdFN0YXRlbWVudAp7CiAgICBBc3RBcnJheTxBc3RNb2RpZmllciAq
PiAqY2xhc3NfbW9kaWZpZXJzOwogICAgQXN0QXJyYXk8QXN0RXhwcmVzc2lvbiAqPiAqaW50ZXJm
YWNlczsKCnB1YmxpYzoKICAgIFNlbWFudGljRW52aXJvbm1lbnQgKnNlbWFudGljX2Vudmlyb25t
ZW50OwoKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBjbGFzc190b2tlbjsKICAgIExleFN0cmVh
bTo6VG9rZW5JbmRleCBpZGVudGlmaWVyX3Rva2VuOwogICAgQXN0ICpzdXBlcl9vcHQ7CiAgICBB
c3RDbGFzc0JvZHkgKmNsYXNzX2JvZHk7CgogICAgQXN0Q2xhc3NEZWNsYXJhdGlvbihTdG9yYWdl
UG9vbCAqcG9vbF8pIDogY2xhc3NfbW9kaWZpZXJzKF9fbnVsbCApLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlcyhfX251bGwgKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljX2Vudmlyb25t
ZW50KF9fbnVsbCApCiAgICB7CiAgICAgICAgQXN0OjpraW5kID0gQXN0OjpDTEFTUzsKICAgICAg
ICBBc3Q6OmNsYXNzX3RhZyA9IEFzdDo6Tk9fVEFHOwogICAgICAgIEFzdDo6Z2VuZXJhdGVkID0g
MDsKICAgIEFzdFN0YXRlbWVudDo6cG9vbCA9IHBvb2xfOwogICAgfQoKICAgIHZpcnR1YWwgfkFz
dENsYXNzRGVjbGFyYXRpb24oKTsKCiAgICBib29sIElzVmFsaWQoKSB7IHJldHVybiBzZW1hbnRp
Y19lbnZpcm9ubWVudCAhPSBfX251bGwgOyB9CgogICAgaW5saW5lIHZvaWQgTWFya0xvY2FsKCkK
ICAgIHsKICAgICAgICBBc3Q6OmNsYXNzX3RhZyA9IEFzdDo6U1RBVEVNRU5UOwogICAgICAgIEFz
dFN0YXRlbWVudDo6aXNfcmVhY2hhYmxlID0gdHJ1ZTsKICAgICAgICBBc3RTdGF0ZW1lbnQ6OmNh
bl9jb21wbGV0ZV9ub3JtYWxseSA9IHRydWU7CiAgICAgICAgQXN0U3RhdGVtZW50OjpkZWZpbmVk
X3ZhcmlhYmxlcyA9IF9fbnVsbCA7CiAgICB9CgogICAgaW5saW5lIEFzdE1vZGlmaWVyIComQ2xh
c3NNb2RpZmllcihpbnQgaSkgeyByZXR1cm4gKCpjbGFzc19tb2RpZmllcnMpW2ldOyB9CiAgICBp
bmxpbmUgaW50IE51bUNsYXNzTW9kaWZpZXJzKCkgeyByZXR1cm4gKGNsYXNzX21vZGlmaWVycyA/
IGNsYXNzX21vZGlmaWVycyAtPiBMZW5ndGgoKSA6IDApOyB9CiAgICBpbmxpbmUgdm9pZCBBbGxv
Y2F0ZUNsYXNzTW9kaWZpZXJzKGludCBlc3RpbWF0ZSA9IDApOwogICAgaW5saW5lIHZvaWQgQWRk
Q2xhc3NNb2RpZmllcihBc3RNb2RpZmllciAqKTsKCiAgICBpbmxpbmUgQXN0RXhwcmVzc2lvbiAq
JkludGVyZmFjZShpbnQgaSkgeyByZXR1cm4gKCppbnRlcmZhY2VzKVtpXTsgfQogICAgaW5saW5l
IGludCBOdW1JbnRlcmZhY2VzKCkgeyByZXR1cm4gKGludGVyZmFjZXMgPyBpbnRlcmZhY2VzIC0+
IExlbmd0aCgpIDogMCk7IH0KICAgIGlubGluZSB2b2lkIEFsbG9jYXRlSW50ZXJmYWNlcyhpbnQg
ZXN0aW1hdGUgPSAwKTsKICAgIGlubGluZSB2b2lkIEFkZEludGVyZmFjZShBc3RFeHByZXNzaW9u
ICopOwoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29sICopOwoKICAgIHZp
cnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigpCiAgICB7CiAgICAgICAgcmV0
dXJuIChOdW1DbGFzc01vZGlmaWVycygpID4gMCA/ICgqY2xhc3NfbW9kaWZpZXJzKVswXSAtPiBM
ZWZ0VG9rZW4oKSA6IGNsYXNzX3Rva2VuKTsKICAgIH0KICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpU
b2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVybiBjbGFzc19ib2R5IC0+IFJpZ2h0VG9rZW4o
KTsgfQp9OwoKCiAKIAogCiAKIAogCmNsYXNzIEFzdEFycmF5SW5pdGlhbGl6ZXIgOiBwdWJsaWMg
QXN0CnsKcHJpdmF0ZToKCiAgICBTdG9yYWdlUG9vbCAqcG9vbDsKICAgIEFzdEFycmF5PEFzdCAq
PiAqdmFyaWFibGVfaW5pdGlhbGl6ZXJzOwoKcHVibGljOgogICAgTGV4U3RyZWFtOjpUb2tlbklu
ZGV4IGxlZnRfYnJhY2VfdG9rZW47CiAgICBMZXhTdHJlYW06OlRva2VuSW5kZXggcmlnaHRfYnJh
Y2VfdG9rZW47CgogICAgQXN0QXJyYXlJbml0aWFsaXplcihTdG9yYWdlUG9vbCAqcG9vbF8pIDog
cG9vbChwb29sXyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZV9pbml0aWFsaXplcnMoX19udWxsICkKICAgIHsKICAgICAgICBBc3Q6OmtpbmQg
PSBBc3Q6OkFSUkFZX0lOSVRJQUxJWkVSOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpO
T19UQUc7CiAgICAgICAgQXN0OjpnZW5lcmF0ZWQgPSAwOwogICAgfQoKICAgIHZpcnR1YWwgfkFz
dEFycmF5SW5pdGlhbGl6ZXIoKTsKCiAgICBpbmxpbmUgQXN0IComVmFyaWFibGVJbml0aWFsaXpl
cihpbnQgaSkgeyByZXR1cm4gKCp2YXJpYWJsZV9pbml0aWFsaXplcnMpW2ldOyB9CiAgICBpbmxp
bmUgaW50IE51bVZhcmlhYmxlSW5pdGlhbGl6ZXJzKCkgeyByZXR1cm4gKHZhcmlhYmxlX2luaXRp
YWxpemVycyA/IHZhcmlhYmxlX2luaXRpYWxpemVycyAtPiBMZW5ndGgoKSA6IDApOyB9CiAgICBp
bmxpbmUgdm9pZCBBbGxvY2F0ZVZhcmlhYmxlSW5pdGlhbGl6ZXJzKGludCBlc3RpbWF0ZSA9IDAp
OwogICAgaW5saW5lIHZvaWQgQWRkVmFyaWFibGVJbml0aWFsaXplcihBc3QgKik7CgoKCgoKCiAg
ICB2aXJ0dWFsIEFzdCAqQ2xvbmUoU3RvcmFnZVBvb2wgKik7CgogICAgdmlydHVhbCBMZXhTdHJl
YW06OlRva2VuSW5kZXggTGVmdFRva2VuKCkgeyByZXR1cm4gbGVmdF9icmFjZV90b2tlbjsgfQog
ICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggUmlnaHRUb2tlbigpIHsgcmV0dXJuIHJp
Z2h0X2JyYWNlX3Rva2VuOyB9Cn07CgoKIAogCiAKY2xhc3MgQXN0VmFyaWFibGVEZWNsYXJhdG9y
SWQgOiBwdWJsaWMgQXN0CnsKcHJpdmF0ZToKCiAgICBTdG9yYWdlUG9vbCAqcG9vbDsKICAgIEFz
dEFycmF5PEFzdEJyYWNrZXRzICo+ICpicmFja2V0czsKCnB1YmxpYzoKCiAgICBMZXhTdHJlYW06
OlRva2VuSW5kZXggaWRlbnRpZmllcl90b2tlbjsKCiAgICBBc3RWYXJpYWJsZURlY2xhcmF0b3JJ
ZChTdG9yYWdlUG9vbCAqcG9vbF8pIDogcG9vbChwb29sXyksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2tldHMoX19udWxsICkKICAgIHsKICAg
ICAgICBBc3Q6OmtpbmQgPSBBc3Q6OlZBUklBQkxFX0RFQ0xBUkFUT1JfTkFNRTsKICAgICAgICBB
c3Q6OmNsYXNzX3RhZyA9IEFzdDo6Tk9fVEFHOwogICAgICAgIEFzdDo6Z2VuZXJhdGVkID0gMDsK
ICAgIH0KCiAgICB2aXJ0dWFsIH5Bc3RWYXJpYWJsZURlY2xhcmF0b3JJZCgpOwoKICAgIGlubGlu
ZSBBc3RCcmFja2V0cyAqJkJyYWNrZXRzKGludCBpKSB7IHJldHVybiAoKmJyYWNrZXRzKVtpXTsg
fQogICAgaW5saW5lIGludCBOdW1CcmFja2V0cygpIHsgcmV0dXJuIChicmFja2V0cyA/IGJyYWNr
ZXRzIC0+IExlbmd0aCgpIDogMCk7IH0KICAgIGlubGluZSB2b2lkIEFsbG9jYXRlQnJhY2tldHMo
aW50IGVzdGltYXRlID0gMCk7CiAgICBpbmxpbmUgdm9pZCBBZGRCcmFja2V0cyhBc3RCcmFja2V0
cyAqKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0ICpDbG9uZShTdG9yYWdlUG9vbCAqKTsKCiAgICB2
aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4oKSAgeyByZXR1cm4gaWRlbnRp
Zmllcl90b2tlbjsgfQogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggUmlnaHRUb2tl
bigpCiAgICB7CiAgICAgICAgcmV0dXJuIChOdW1CcmFja2V0cygpID4gMCA/ICgqYnJhY2tldHMp
W051bUJyYWNrZXRzKCkgLSAxXSAtPiBSaWdodFRva2VuKCkgOiBpZGVudGlmaWVyX3Rva2VuKTsK
ICAgIH0KfTsKCgogCiAKIApjbGFzcyBBc3RWYXJpYWJsZURlY2xhcmF0b3IgOiBwdWJsaWMgQXN0
CnsKcHVibGljOgogICAgVmFyaWFibGVTeW1ib2wgKnN5bWJvbDsKICAgIGJvb2wgcGVuZGluZzsg
IAoKICAgIEFzdFZhcmlhYmxlRGVjbGFyYXRvcklkICp2YXJpYWJsZV9kZWNsYXJhdG9yX25hbWU7
CiAgICBBc3QgKnZhcmlhYmxlX2luaXRpYWxpemVyX29wdDsKCiAgICBBc3RWYXJpYWJsZURlY2xh
cmF0b3IoKSA6IHN5bWJvbChfX251bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGVuZGluZyhmYWxzZSkKICAgIHsKICAgICAgICBBc3Q6OmtpbmQgPSBBc3Q6OlZBUklBQkxFX0RF
Q0xBUkFUT1I7CiAgICAgICAgQXN0OjpjbGFzc190YWcgPSBBc3Q6Ok5PX1RBRzsKICAgICAgICBB
c3Q6OmdlbmVyYXRlZCA9IDA7CiAgICB9CgogICAgdmlydHVhbCB+QXN0VmFyaWFibGVEZWNsYXJh
dG9yKCk7CgoKCgoKCiAgICB2aXJ0dWFsIEFzdCAqQ2xvbmUoU3RvcmFnZVBvb2wgKik7CgogICAg
dmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggTGVmdFRva2VuKCkgeyByZXR1cm4gdmFyaWFi
bGVfZGVjbGFyYXRvcl9uYW1lIC0+IExlZnRUb2tlbigpOyB9CgogICAgdmlydHVhbCBMZXhTdHJl
YW06OlRva2VuSW5kZXggUmlnaHRUb2tlbigpCiAgICB7CiAgICAgICAgcmV0dXJuICh2YXJpYWJs
ZV9pbml0aWFsaXplcl9vcHQgPwogICAgICAgICAgICAgICAgdmFyaWFibGVfaW5pdGlhbGl6ZXJf
b3B0IC0+IFJpZ2h0VG9rZW4oKSA6CiAgICAgICAgICAgICAgICB2YXJpYWJsZV9kZWNsYXJhdG9y
X25hbWUgLT4gUmlnaHRUb2tlbigpKTsKICAgIH0KfTsKCgogCiAKIAogCiAKY2xhc3MgQXN0Rmll
bGREZWNsYXJhdGlvbiA6IHB1YmxpYyBBc3QKewogICAgU3RvcmFnZVBvb2wgKnBvb2w7CiAgICBB
c3RBcnJheTxBc3RNb2RpZmllciAqPiAqdmFyaWFibGVfbW9kaWZpZXJzOwogICAgQXN0QXJyYXk8
QXN0VmFyaWFibGVEZWNsYXJhdG9yICo+ICp2YXJpYWJsZV9kZWNsYXJhdG9yczsKCnB1YmxpYzoK
CiAgICBBc3QgKnR5cGU7CiAgICBMZXhTdHJlYW06OlRva2VuSW5kZXggc2VtaWNvbG9uX3Rva2Vu
OwoKICAgIEFzdEZpZWxkRGVjbGFyYXRpb24oU3RvcmFnZVBvb2wgKnBvb2xfKSA6IHBvb2wocG9v
bF8pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGVfbW9kaWZpZXJzKF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGVfZGVjbGFyYXRvcnMoX19udWxsICkKICAgIHsKICAgICAgICBB
c3Q6OmtpbmQgPSBBc3Q6OkZJRUxEOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpOT19U
QUc7CiAgICAgICAgQXN0OjpnZW5lcmF0ZWQgPSAwOwogICAgfQoKICAgIHZpcnR1YWwgfkFzdEZp
ZWxkRGVjbGFyYXRpb24oKTsKCiAgICBpbmxpbmUgdm9pZCBNYXJrU3RhdGljKCkgeyBBc3Q6OmNs
YXNzX3RhZyA9IEFzdDo6U1RBVElDX0ZJRUxEOyB9CgogICAgaW5saW5lIEFzdE1vZGlmaWVyICom
VmFyaWFibGVNb2RpZmllcihpbnQgaSkgeyByZXR1cm4gKCp2YXJpYWJsZV9tb2RpZmllcnMpW2ld
OyB9CiAgICBpbmxpbmUgaW50IE51bVZhcmlhYmxlTW9kaWZpZXJzKCkgeyByZXR1cm4gKHZhcmlh
YmxlX21vZGlmaWVycyA/IHZhcmlhYmxlX21vZGlmaWVycyAtPiBMZW5ndGgoKSA6IDApOyB9CiAg
ICBpbmxpbmUgdm9pZCBBbGxvY2F0ZVZhcmlhYmxlTW9kaWZpZXJzKGludCBlc3RpbWF0ZSA9IDAp
OwogICAgaW5saW5lIHZvaWQgQWRkVmFyaWFibGVNb2RpZmllcihBc3RNb2RpZmllciAqKTsKCiAg
ICBpbmxpbmUgQXN0VmFyaWFibGVEZWNsYXJhdG9yIComVmFyaWFibGVEZWNsYXJhdG9yKGludCBp
KSB7IHJldHVybiAoKnZhcmlhYmxlX2RlY2xhcmF0b3JzKVtpXTsgfQogICAgaW5saW5lIGludCBO
dW1WYXJpYWJsZURlY2xhcmF0b3JzKCkgeyByZXR1cm4gKHZhcmlhYmxlX2RlY2xhcmF0b3JzID8g
dmFyaWFibGVfZGVjbGFyYXRvcnMgLT4gTGVuZ3RoKCkgOiAwKTsgfQogICAgaW5saW5lIHZvaWQg
QWxsb2NhdGVWYXJpYWJsZURlY2xhcmF0b3JzKGludCBlc3RpbWF0ZSA9IDApOwogICAgaW5saW5l
IHZvaWQgQWRkVmFyaWFibGVEZWNsYXJhdG9yKEFzdFZhcmlhYmxlRGVjbGFyYXRvciAqKTsKCgoK
CgoKICAgIHZpcnR1YWwgQXN0ICpDbG9uZShTdG9yYWdlUG9vbCAqKTsKCiAgICB2aXJ0dWFsIExl
eFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4oKQogICAgewogICAgICAgIHJldHVybiAoTnVt
VmFyaWFibGVNb2RpZmllcnMoKSA+IDAgPyAoKnZhcmlhYmxlX21vZGlmaWVycylbMF0gLT4gTGVm
dFRva2VuKCkgOiB0eXBlIC0+IExlZnRUb2tlbigpKTsKICAgIH0KCiAgICB2aXJ0dWFsIExleFN0
cmVhbTo6VG9rZW5JbmRleCBSaWdodFRva2VuKCkgeyByZXR1cm4gc2VtaWNvbG9uX3Rva2VuOyB9
Cn07CgoKIAogCiAKY2xhc3MgQXN0Rm9ybWFsUGFyYW1ldGVyIDogcHVibGljIEFzdAp7CiAgICBT
dG9yYWdlUG9vbCAqcG9vbDsKICAgIEFzdEFycmF5PEFzdE1vZGlmaWVyICo+ICpwYXJhbWV0ZXJf
bW9kaWZpZXJzOwoKcHVibGljOgoKICAgIEFzdCAqdHlwZTsKICAgIEFzdFZhcmlhYmxlRGVjbGFy
YXRvciAqZm9ybWFsX2RlY2xhcmF0b3I7CgogICAgQXN0Rm9ybWFsUGFyYW1ldGVyKFN0b3JhZ2VQ
b29sICpwb29sXykgOiBwb29sKHBvb2xfKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX21vZGlmaWVycyhfX251bGwgKQogICAgewogICAgICAg
IEFzdDo6a2luZCA9IEFzdDo6UEFSQU1FVEVSOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0
OjpOT19UQUc7CiAgICAgICAgQXN0OjpnZW5lcmF0ZWQgPSAwOwogICAgfQoKICAgIHZpcnR1YWwg
fkFzdEZvcm1hbFBhcmFtZXRlcigpOwoKICAgIGlubGluZSBBc3RNb2RpZmllciAqJlBhcmFtZXRl
ck1vZGlmaWVyKGludCBpKSB7IHJldHVybiAoKnBhcmFtZXRlcl9tb2RpZmllcnMpW2ldOyB9CiAg
ICBpbmxpbmUgaW50IE51bVBhcmFtZXRlck1vZGlmaWVycygpIHsgcmV0dXJuIChwYXJhbWV0ZXJf
bW9kaWZpZXJzID8gcGFyYW1ldGVyX21vZGlmaWVycyAtPiBMZW5ndGgoKSA6IDApOyB9CiAgICBp
bmxpbmUgdm9pZCBBbGxvY2F0ZVBhcmFtZXRlck1vZGlmaWVycyhpbnQgZXN0aW1hdGUgPSAwKTsK
ICAgIGlubGluZSB2b2lkIEFkZFBhcmFtZXRlck1vZGlmaWVyKEFzdE1vZGlmaWVyICopOwoKCgoK
CgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4
U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigpCiAgICB7CiAgICAgICByZXR1cm4gKE51bVBh
cmFtZXRlck1vZGlmaWVycygpID4gMCA/ICgqcGFyYW1ldGVyX21vZGlmaWVycylbMF0gLT4gTGVm
dFRva2VuKCkgOiB0eXBlIC0+IExlZnRUb2tlbigpKTsKICAgIH0KICAgIHZpcnR1YWwgTGV4U3Ry
ZWFtOjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVybiBmb3JtYWxfZGVjbGFyYXRvciAt
PiBSaWdodFRva2VuKCk7IH0KfTsKCgogCiAKIApjbGFzcyBBc3RNZXRob2REZWNsYXJhdG9yIDog
cHVibGljIEFzdAp7CnByaXZhdGU6CgogICAgU3RvcmFnZVBvb2wgKnBvb2w7CiAgICBBc3RBcnJh
eTxBc3RCcmFja2V0cyAqPiAqYnJhY2tldHM7CiAgICBBc3RBcnJheTxBc3RGb3JtYWxQYXJhbWV0
ZXIgKj4gKmZvcm1hbF9wYXJhbWV0ZXJzOwoKcHVibGljOgogICAgTGV4U3RyZWFtOjpUb2tlbklu
ZGV4IGlkZW50aWZpZXJfdG9rZW47CiAgICBMZXhTdHJlYW06OlRva2VuSW5kZXggbGVmdF9wYXJl
bnRoZXNpc190b2tlbjsKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCByaWdodF9wYXJlbnRoZXNp
c190b2tlbjsKCiAgICBBc3RNZXRob2REZWNsYXJhdG9yKFN0b3JhZ2VQb29sICpwb29sXykgOiBw
b29sKHBvb2xfKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyYWNrZXRzKF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMoX19udWxsICkKICAgIHsKICAgICAgICBBc3Q6Omtp
bmQgPSBBc3Q6Ok1FVEhPRF9ERUNMQVJBVE9SOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0
OjpOT19UQUc7CiAgICAgICAgQXN0OjpnZW5lcmF0ZWQgPSAwOwogICAgfQoKICAgIHZpcnR1YWwg
fkFzdE1ldGhvZERlY2xhcmF0b3IoKTsKCiAgICBpbmxpbmUgQXN0QnJhY2tldHMgKiZCcmFja2V0
cyhpbnQgaSkgeyByZXR1cm4gKCpicmFja2V0cylbaV07IH0KICAgIGlubGluZSBpbnQgTnVtQnJh
Y2tldHMoKSB7IHJldHVybiAoYnJhY2tldHMgPyBicmFja2V0cyAtPiBMZW5ndGgoKSA6IDApOyB9
CiAgICBpbmxpbmUgdm9pZCBBbGxvY2F0ZUJyYWNrZXRzKGludCBlc3RpbWF0ZSA9IDApOwogICAg
aW5saW5lIHZvaWQgQWRkQnJhY2tldHMoQXN0QnJhY2tldHMgKik7CgogICAgaW5saW5lIEFzdEZv
cm1hbFBhcmFtZXRlciAqJkZvcm1hbFBhcmFtZXRlcihpbnQgaSkgeyByZXR1cm4gKCpmb3JtYWxf
cGFyYW1ldGVycylbaV07IH0KICAgIGlubGluZSBpbnQgTnVtRm9ybWFsUGFyYW1ldGVycygpIHsg
cmV0dXJuIChmb3JtYWxfcGFyYW1ldGVycyA/IGZvcm1hbF9wYXJhbWV0ZXJzIC0+IExlbmd0aCgp
IDogMCk7IH0KICAgIGlubGluZSB2b2lkIEFsbG9jYXRlRm9ybWFsUGFyYW1ldGVycyhpbnQgZXN0
aW1hdGUgPSAwKTsKICAgIGlubGluZSB2b2lkIEFkZEZvcm1hbFBhcmFtZXRlcihBc3RGb3JtYWxQ
YXJhbWV0ZXIgKik7CgoKCgoKCiAgICB2aXJ0dWFsIEFzdCAqQ2xvbmUoU3RvcmFnZVBvb2wgKik7
CgogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggTGVmdFRva2VuKCkgeyByZXR1cm4g
aWRlbnRpZmllcl90b2tlbjsgfQoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IFJp
Z2h0VG9rZW4oKQogICAgewogICAgICAgIHJldHVybiAoTnVtQnJhY2tldHMoKSA/IEJyYWNrZXRz
KE51bUJyYWNrZXRzKCkgLSAxKSAtPiBSaWdodFRva2VuKCkgOiByaWdodF9wYXJlbnRoZXNpc190
b2tlbik7CiAgICB9Cn07CgoKIAogCiAKIAogCiAKIAogCiAKIApjbGFzcyBBc3RNZXRob2REZWNs
YXJhdGlvbiA6IHB1YmxpYyBBc3QKewogICAgU3RvcmFnZVBvb2wgKnBvb2w7CiAgICBBc3RBcnJh
eTxBc3RNb2RpZmllciAqPiAqbWV0aG9kX21vZGlmaWVyczsKICAgIEFzdEFycmF5PEFzdEV4cHJl
c3Npb24gKj4gKnRocm93czsKCnB1YmxpYzoKICAgIE1ldGhvZFN5bWJvbCAqbWV0aG9kX3N5bWJv
bDsKCiAgICBBc3QgKnR5cGU7CiAgICBBc3RNZXRob2REZWNsYXJhdG9yICptZXRob2RfZGVjbGFy
YXRvcjsKICAgIEFzdFN0YXRlbWVudCAqbWV0aG9kX2JvZHk7CgogICAgQXN0TWV0aG9kRGVjbGFy
YXRpb24oU3RvcmFnZVBvb2wgKnBvb2xfKSA6IHBvb2wocG9vbF8pLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9tb2RpZmllcnMoX19udWxsICks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzKF9f
bnVsbCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1l
dGhvZF9zeW1ib2woX19udWxsICkKICAgIHsKICAgICAgICBBc3Q6OmtpbmQgPSBBc3Q6Ok1FVEhP
RDsKICAgICAgICBBc3Q6OmNsYXNzX3RhZyA9IEFzdDo6Tk9fVEFHOwogICAgICAgIEFzdDo6Z2Vu
ZXJhdGVkID0gMDsKICAgIH0KCiAgICB2aXJ0dWFsIH5Bc3RNZXRob2REZWNsYXJhdGlvbigpOwoK
ICAgIGJvb2wgSXNWYWxpZCgpIHsgcmV0dXJuIG1ldGhvZF9zeW1ib2wgIT0gX19udWxsIDsgfQoK
ICAgIGJvb2wgSXNTaWduYXR1cmUoKSB7IHJldHVybiAobWV0aG9kX2JvZHkgLT4gRW1wdHlTdGF0
ZW1lbnRDYXN0KCkgIT0gX19udWxsICk7IH0KCiAgICBpbmxpbmUgQXN0TW9kaWZpZXIgKiZNZXRo
b2RNb2RpZmllcihpbnQgaSkgeyByZXR1cm4gKCptZXRob2RfbW9kaWZpZXJzKVtpXTsgfQogICAg
aW5saW5lIGludCBOdW1NZXRob2RNb2RpZmllcnMoKSB7IHJldHVybiAobWV0aG9kX21vZGlmaWVy
cyA/IG1ldGhvZF9tb2RpZmllcnMgLT4gTGVuZ3RoKCkgOiAwKTsgfQogICAgaW5saW5lIHZvaWQg
QWxsb2NhdGVNZXRob2RNb2RpZmllcnMoaW50IGVzdGltYXRlID0gMCk7CiAgICBpbmxpbmUgdm9p
ZCBBZGRNZXRob2RNb2RpZmllcihBc3RNb2RpZmllciAqKTsKCiAgICBpbmxpbmUgQXN0RXhwcmVz
c2lvbiAqJlRocm93KGludCBpKSB7IHJldHVybiAoKnRocm93cylbaV07IH0KICAgIGlubGluZSBp
bnQgTnVtVGhyb3dzKCkgeyByZXR1cm4gKHRocm93cyA/IHRocm93cyAtPiBMZW5ndGgoKSA6IDAp
OyB9CiAgICBpbmxpbmUgdm9pZCBBbGxvY2F0ZVRocm93cyhpbnQgZXN0aW1hdGUgPSAwKTsKICAg
IGlubGluZSB2b2lkIEFkZFRocm93KEFzdEV4cHJlc3Npb24gKik7CgoKCgoKCiAgICB2aXJ0dWFs
IEFzdCAqQ2xvbmUoU3RvcmFnZVBvb2wgKik7CgogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2Vu
SW5kZXggTGVmdFRva2VuKCkKICAgIHsKICAgICAgICByZXR1cm4gKE51bU1ldGhvZE1vZGlmaWVy
cygpID4gMCA/ICgqbWV0aG9kX21vZGlmaWVycylbMF0gLT4gTGVmdFRva2VuKCkgOiB0eXBlIC0+
IExlZnRUb2tlbigpKTsKICAgIH0KICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IFJp
Z2h0VG9rZW4oKSB7IHJldHVybiBtZXRob2RfYm9keSAtPiBSaWdodFRva2VuKCk7IH0KfTsKCiAK
IAogCmNsYXNzIEFzdFN0YXRpY0luaXRpYWxpemVyIDogcHVibGljIEFzdAp7CnB1YmxpYzoKICAg
IExleFN0cmVhbTo6VG9rZW5JbmRleCBzdGF0aWNfdG9rZW47CiAgICBBc3RCbG9jayAqYmxvY2s7
CgogICAgQXN0U3RhdGljSW5pdGlhbGl6ZXIoKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFz
dDo6U1RBVElDX0lOSVRJQUxJWkVSOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpOT19U
QUc7CiAgICAgICAgQXN0OjpnZW5lcmF0ZWQgPSAwOwogICAgfQoKICAgIHZpcnR1YWwgfkFzdFN0
YXRpY0luaXRpYWxpemVyKCk7CgoKCgoKCiAgICB2aXJ0dWFsIEFzdCAqQ2xvbmUoU3RvcmFnZVBv
b2wgKik7CgogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggTGVmdFRva2VuKCkgeyBy
ZXR1cm4gc3RhdGljX3Rva2VuOyB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBS
aWdodFRva2VuKCkgeyByZXR1cm4gYmxvY2sgLT4gUmlnaHRUb2tlbigpOyB9Cn07CgoKIAogCiAK
IAogCmNsYXNzIEFzdFRoaXNDYWxsIDogcHVibGljIEFzdFN0YXRlbWVudAp7CnByaXZhdGU6Cgog
ICAgQXN0QXJyYXk8QXN0RXhwcmVzc2lvbiAqPiAqYXJndW1lbnRzOwogICAgQXN0QXJyYXk8QXN0
RXhwcmVzc2lvbiAqPiAqbG9jYWxfYXJndW1lbnRzX29wdDsgIAoKcHVibGljOgogICAgTWV0aG9k
U3ltYm9sICpzeW1ib2w7CgogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IHRoaXNfdG9rZW47CiAg
ICBMZXhTdHJlYW06OlRva2VuSW5kZXggbGVmdF9wYXJlbnRoZXNpc190b2tlbjsKICAgIExleFN0
cmVhbTo6VG9rZW5JbmRleCByaWdodF9wYXJlbnRoZXNpc190b2tlbjsKICAgIExleFN0cmVhbTo6
VG9rZW5JbmRleCBzZW1pY29sb25fdG9rZW47CgogICAgQXN0VGhpc0NhbGwoU3RvcmFnZVBvb2wg
KnBvb2xfKSA6IGFyZ3VtZW50cyhfX251bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhbF9hcmd1bWVudHNfb3B0KF9fbnVsbCApLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbChfX251bGwgKQogICAgewogICAgICAgIEFzdDo6
a2luZCA9IEFzdDo6VEhJU19DQUxMOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpTVEFU
RU1FTlQ7CiAgICAgICAgQXN0OjpnZW5lcmF0ZWQgPSAwOwogICAgICAgIEFzdFN0YXRlbWVudDo6
cG9vbCA9IHBvb2xfOwogICAgICAgIEFzdFN0YXRlbWVudDo6aXNfcmVhY2hhYmxlID0gZmFsc2U7
CiAgICAgICAgQXN0U3RhdGVtZW50OjpjYW5fY29tcGxldGVfbm9ybWFsbHkgPSBmYWxzZTsKICAg
ICAgICBBc3RTdGF0ZW1lbnQ6OmRlZmluZWRfdmFyaWFibGVzID0gX19udWxsIDsKICAgIH0KCiAg
ICB2aXJ0dWFsIH5Bc3RUaGlzQ2FsbCgpOwoKICAgIGlubGluZSBBc3RFeHByZXNzaW9uIComQXJn
dW1lbnQoaW50IGkpIHsgcmV0dXJuICgqYXJndW1lbnRzKVtpXTsgfQogICAgaW5saW5lIGludCBO
dW1Bcmd1bWVudHMoKSB7IHJldHVybiAoYXJndW1lbnRzID8gYXJndW1lbnRzIC0+IExlbmd0aCgp
IDogMCk7IH0KICAgIGlubGluZSB2b2lkIEFsbG9jYXRlQXJndW1lbnRzKGludCBlc3RpbWF0ZSA9
IDApOwogICAgaW5saW5lIHZvaWQgQWRkQXJndW1lbnQoQXN0RXhwcmVzc2lvbiAqKTsKCiAgICBp
bmxpbmUgQXN0RXhwcmVzc2lvbiAqJkxvY2FsQXJndW1lbnQoaW50IGkpIHsgcmV0dXJuICgqbG9j
YWxfYXJndW1lbnRzX29wdClbaV07IH0KICAgIGlubGluZSBpbnQgTnVtTG9jYWxBcmd1bWVudHMo
KSB7IHJldHVybiAobG9jYWxfYXJndW1lbnRzX29wdCA/IGxvY2FsX2FyZ3VtZW50c19vcHQgLT4g
TGVuZ3RoKCkgOiAwKTsgfQogICAgaW5saW5lIHZvaWQgQWxsb2NhdGVMb2NhbEFyZ3VtZW50cyhp
bnQgZXN0aW1hdGUgPSAwKTsKICAgIGlubGluZSB2b2lkIEFkZExvY2FsQXJndW1lbnQoQXN0RXhw
cmVzc2lvbiAqKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0ICpDbG9uZShTdG9yYWdlUG9vbCAqKTsK
CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4oKSB7IHJldHVybiB0
aGlzX3Rva2VuOyB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBSaWdodFRva2Vu
KCkgeyByZXR1cm4gc2VtaWNvbG9uX3Rva2VuOyB9Cn07CgoKIAogCiAKIApjbGFzcyBBc3RTdXBl
ckNhbGwgOiBwdWJsaWMgQXN0U3RhdGVtZW50CnsKcHJpdmF0ZToKCiAgICBBc3RBcnJheTxBc3RF
eHByZXNzaW9uICo+ICphcmd1bWVudHM7CiAgICBBc3RBcnJheTxBc3RFeHByZXNzaW9uICo+ICps
b2NhbF9hcmd1bWVudHNfb3B0OyAgCgogICAgYm9vbCBhZGRfbnVsbF9hcmd1bWVudDsKCnB1Ymxp
YzoKICAgIE1ldGhvZFN5bWJvbCAqc3ltYm9sOwoKICAgIEFzdEV4cHJlc3Npb24gKmJhc2Vfb3B0
OwogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IGRvdF90b2tlbl9vcHQ7CiAgICBMZXhTdHJlYW06
OlRva2VuSW5kZXggc3VwZXJfdG9rZW47CiAgICBMZXhTdHJlYW06OlRva2VuSW5kZXggbGVmdF9w
YXJlbnRoZXNpc190b2tlbjsKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCByaWdodF9wYXJlbnRo
ZXNpc190b2tlbjsKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBzZW1pY29sb25fdG9rZW47Cgog
ICAgQXN0U3VwZXJDYWxsKFN0b3JhZ2VQb29sICpwb29sXykgOiBhcmd1bWVudHMoX19udWxsICks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FyZ3VtZW50c19v
cHQoX19udWxsICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9u
dWxsX2FyZ3VtZW50KGZhbHNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3ltYm9sKF9fbnVsbCApCiAgICB7CiAgICAgICAgQXN0OjpraW5kID0gQXN0OjpTVVBFUl9D
QUxMOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpTVEFURU1FTlQ7CiAgICAgICAgQXN0
OjpnZW5lcmF0ZWQgPSAwOwogICAgICAgIEFzdFN0YXRlbWVudDo6cG9vbCA9IHBvb2xfOwogICAg
ICAgIEFzdFN0YXRlbWVudDo6aXNfcmVhY2hhYmxlID0gZmFsc2U7CiAgICAgICAgQXN0U3RhdGVt
ZW50OjpjYW5fY29tcGxldGVfbm9ybWFsbHkgPSBmYWxzZTsKICAgICAgICBBc3RTdGF0ZW1lbnQ6
OmRlZmluZWRfdmFyaWFibGVzID0gX19udWxsIDsKICAgIH0KCiAgICB2aXJ0dWFsIH5Bc3RTdXBl
ckNhbGwoKTsKCiAgICBpbmxpbmUgQXN0RXhwcmVzc2lvbiAqJkFyZ3VtZW50KGludCBpKSB7IHJl
dHVybiAoKmFyZ3VtZW50cylbaV07IH0KICAgIGlubGluZSBpbnQgTnVtQXJndW1lbnRzKCkgeyBy
ZXR1cm4gKGFyZ3VtZW50cyA/IGFyZ3VtZW50cyAtPiBMZW5ndGgoKSA6IDApOyB9CiAgICBpbmxp
bmUgdm9pZCBBbGxvY2F0ZUFyZ3VtZW50cyhpbnQgZXN0aW1hdGUgPSAwKTsKICAgIGlubGluZSB2
b2lkIEFkZEFyZ3VtZW50KEFzdEV4cHJlc3Npb24gKik7CgogICAgaW5saW5lIEFzdEV4cHJlc3Np
b24gKiZMb2NhbEFyZ3VtZW50KGludCBpKSB7IHJldHVybiAoKmxvY2FsX2FyZ3VtZW50c19vcHQp
W2ldOyB9CiAgICBpbmxpbmUgaW50IE51bUxvY2FsQXJndW1lbnRzKCkgeyByZXR1cm4gKGxvY2Fs
X2FyZ3VtZW50c19vcHQgPyBsb2NhbF9hcmd1bWVudHNfb3B0IC0+IExlbmd0aCgpIDogMCk7IH0K
ICAgIGlubGluZSB2b2lkIEFsbG9jYXRlTG9jYWxBcmd1bWVudHMoaW50IGVzdGltYXRlID0gMCk7
CiAgICBpbmxpbmUgdm9pZCBBZGRMb2NhbEFyZ3VtZW50KEFzdEV4cHJlc3Npb24gKik7CgogICAg
aW5saW5lIHZvaWQgQWRkTnVsbEFyZ3VtZW50KCkgeyBhZGRfbnVsbF9hcmd1bWVudCA9IHRydWU7
IH0KICAgIGlubGluZSBib29sIE5lZWRzRXh0cmFOdWxsQXJndW1lbnQoKSB7IHJldHVybiBhZGRf
bnVsbF9hcmd1bWVudDsgfQoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29s
ICopOwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigpIHsgcmV0
dXJuIChiYXNlX29wdCA/IGJhc2Vfb3B0IC0+IExlZnRUb2tlbigpIDogc3VwZXJfdG9rZW4pOyB9
CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBSaWdodFRva2VuKCkgeyByZXR1cm4g
c2VtaWNvbG9uX3Rva2VuOyB9Cn07CgoKIAogCiAKIAogCiAKIAogCiAKIAogCmNsYXNzIEFzdENv
bnN0cnVjdG9yQmxvY2sgOiBwdWJsaWMgQXN0U3RhdGVtZW50CnsKcHJpdmF0ZToKCiAgICBBc3RB
cnJheTxBc3RTdGF0ZW1lbnQgKj4gKmxvY2FsX2luaXRfc3RhdGVtZW50czsKCnB1YmxpYzoKICAg
IEJsb2NrU3ltYm9sICpibG9ja19zeW1ib2w7CgogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IGxl
ZnRfYnJhY2VfdG9rZW47CiAgICBBc3QgKmV4cGxpY2l0X2NvbnN0cnVjdG9yX2ludm9jYXRpb25f
b3B0OwogICAgQXN0QmxvY2sgKmJsb2NrOwogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IHJpZ2h0
X2JyYWNlX3Rva2VuOwoKICAgIEFzdEV4cHJlc3Npb25TdGF0ZW1lbnQgKm9yaWdpbmFsX2NvbnN0
cnVjdG9yX2ludm9jYXRpb247CgogICAgQXN0Q29uc3RydWN0b3JCbG9jayhTdG9yYWdlUG9vbCAq
cG9vbF8pIDogbG9jYWxfaW5pdF9zdGF0ZW1lbnRzKF9fbnVsbCApLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfc3ltYm9sKF9fbnVsbCApLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxfY29uc3Ry
dWN0b3JfaW52b2NhdGlvbihfX251bGwgKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6
Q09OU1RSVUNUT1JfQkxPQ0s7CiAgICAgICAgQXN0OjpjbGFzc190YWcgPSBBc3Q6OlNUQVRFTUVO
VDsKICAgICAgICBBc3Q6OmdlbmVyYXRlZCA9IDA7CiAgICAgICAgQXN0U3RhdGVtZW50Ojpwb29s
ID0gcG9vbF87CiAgICAgICAgQXN0U3RhdGVtZW50Ojppc19yZWFjaGFibGUgPSBmYWxzZTsKICAg
ICAgICBBc3RTdGF0ZW1lbnQ6OmNhbl9jb21wbGV0ZV9ub3JtYWxseSA9IGZhbHNlOwogICAgICAg
IEFzdFN0YXRlbWVudDo6ZGVmaW5lZF92YXJpYWJsZXMgPSBfX251bGwgOwogICAgfQoKICAgIHZp
cnR1YWwgfkFzdENvbnN0cnVjdG9yQmxvY2soKTsKCiAgICBpbmxpbmUgQXN0U3RhdGVtZW50ICom
TG9jYWxJbml0U3RhdGVtZW50KGludCBpKSB7IHJldHVybiAoKmxvY2FsX2luaXRfc3RhdGVtZW50
cylbaV07IH0KICAgIGlubGluZSBpbnQgTnVtTG9jYWxJbml0U3RhdGVtZW50cygpIHsgcmV0dXJu
IChsb2NhbF9pbml0X3N0YXRlbWVudHMgPyBsb2NhbF9pbml0X3N0YXRlbWVudHMgLT4gTGVuZ3Ro
KCkgOiAwKTsgfQogICAgaW5saW5lIHZvaWQgQWxsb2NhdGVMb2NhbEluaXRTdGF0ZW1lbnRzKGlu
dCBlc3RpbWF0ZSA9IDApOwogICAgaW5saW5lIHZvaWQgQWRkTG9jYWxJbml0U3RhdGVtZW50KEFz
dFN0YXRlbWVudCAqKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0ICpDbG9uZShTdG9yYWdlUG9vbCAq
KTsKCiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4oKSAgeyByZXR1
cm4gbGVmdF9icmFjZV90b2tlbjsgIH0KICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4
IFJpZ2h0VG9rZW4oKSB7IHJldHVybiByaWdodF9icmFjZV90b2tlbjsgfQp9OwoKCmNsYXNzIEFz
dENvbnN0cnVjdG9yRGVjbGFyYXRpb24gOiBwdWJsaWMgQXN0CnsKICAgIFN0b3JhZ2VQb29sICpw
b29sOwogICAgQXN0QXJyYXk8QXN0TW9kaWZpZXIgKj4gKmNvbnN0cnVjdG9yX21vZGlmaWVyczsK
ICAgIEFzdEFycmF5PEFzdEV4cHJlc3Npb24gKj4gKnRocm93czsKCnB1YmxpYzoKICAgIE1ldGhv
ZFN5bWJvbCAqY29uc3RydWN0b3Jfc3ltYm9sOwogICAgaW50IGluZGV4OwoKICAgIEFzdE1ldGhv
ZERlY2xhcmF0b3IgKmNvbnN0cnVjdG9yX2RlY2xhcmF0b3I7CiAgICBBc3RDb25zdHJ1Y3RvckJs
b2NrICpjb25zdHJ1Y3Rvcl9ib2R5OwoKICAgIEFzdENvbnN0cnVjdG9yRGVjbGFyYXRpb24oU3Rv
cmFnZVBvb2wgKnBvb2xfKSA6IHBvb2wocG9vbF8pLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3JfbW9kaWZpZXJzKF9fbnVsbCAp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhy
b3dzKF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3RydWN0b3Jfc3ltYm9sKF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgoQ3ljbGVDaGVja2VyOjpPTUVH
QSkKICAgIHsKICAgICAgICBBc3Q6OmtpbmQgPSBBc3Q6OkNPTlNUUlVDVE9SOwogICAgICAgIEFz
dDo6Y2xhc3NfdGFnID0gQXN0OjpOT19UQUc7CiAgICAgICAgQXN0OjpnZW5lcmF0ZWQgPSAwOwog
ICAgfQoKICAgIHZpcnR1YWwgfkFzdENvbnN0cnVjdG9yRGVjbGFyYXRpb24oKTsKCiAgICBib29s
IElzVmFsaWQoKSB7IHJldHVybiBjb25zdHJ1Y3Rvcl9zeW1ib2wgIT0gX19udWxsIDsgfQoKICAg
IGlubGluZSBBc3RNb2RpZmllciAqJkNvbnN0cnVjdG9yTW9kaWZpZXIoaW50IGkpIHsgcmV0dXJu
ICgqY29uc3RydWN0b3JfbW9kaWZpZXJzKVtpXTsgfQogICAgaW5saW5lIGludCBOdW1Db25zdHJ1
Y3Rvck1vZGlmaWVycygpIHsgcmV0dXJuIChjb25zdHJ1Y3Rvcl9tb2RpZmllcnMgPyBjb25zdHJ1
Y3Rvcl9tb2RpZmllcnMgLT4gTGVuZ3RoKCkgOiAwKTsgfQogICAgaW5saW5lIHZvaWQgQWxsb2Nh
dGVDb25zdHJ1Y3Rvck1vZGlmaWVycyhpbnQgZXN0aW1hdGUgPSAwKTsKICAgIGlubGluZSB2b2lk
IEFkZENvbnN0cnVjdG9yTW9kaWZpZXIoQXN0TW9kaWZpZXIgKik7CgogICAgaW5saW5lIEFzdEV4
cHJlc3Npb24gKiZUaHJvdyhpbnQgaSkgeyByZXR1cm4gKCp0aHJvd3MpW2ldOyB9CiAgICBpbmxp
bmUgaW50IE51bVRocm93cygpIHsgcmV0dXJuICh0aHJvd3MgPyB0aHJvd3MgLT4gTGVuZ3RoKCkg
OiAwKTsgfQogICAgaW5saW5lIHZvaWQgQWxsb2NhdGVUaHJvd3MoaW50IGVzdGltYXRlID0gMCk7
CiAgICBpbmxpbmUgdm9pZCBBZGRUaHJvdyhBc3RFeHByZXNzaW9uICopOwoKCgoKCgogICAgdmly
dHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpU
b2tlbkluZGV4IExlZnRUb2tlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIChOdW1Db25zdHJ1Y3Rv
ck1vZGlmaWVycygpID4gMCA/ICgqY29uc3RydWN0b3JfbW9kaWZpZXJzKVswXSAtPiBMZWZ0VG9r
ZW4oKSA6IGNvbnN0cnVjdG9yX2RlY2xhcmF0b3IgLT4gTGVmdFRva2VuKCkpOwogICAgfQogICAg
dmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggUmlnaHRUb2tlbigpIHsgcmV0dXJuIGNvbnN0
cnVjdG9yX2JvZHkgLT4gUmlnaHRUb2tlbigpOyB9Cn07CgoKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCmNsYXNzIEFzdEludGVyZmFjZURlY2xhcmF0aW9uIDogcHVibGlj
IEFzdAp7CnByaXZhdGU6CiAgICBmcmllbmQgY2xhc3MgUGFyc2VyOwoKICAgIFN0b3JhZ2VQb29s
ICpwb29sOwogICAgQXN0QXJyYXk8QXN0TW9kaWZpZXIgKj4gKmludGVyZmFjZV9tb2RpZmllcnM7
CiAgICBBc3RBcnJheTxBc3RFeHByZXNzaW9uICo+ICpleHRlbmRzX2ludGVyZmFjZXM7CiAgICBB
c3RBcnJheTxBc3QgKj4gKmludGVyZmFjZV9tZW1iZXJfZGVjbGFyYXRpb25zOwoKICAgIEFzdEFy
cmF5PEFzdEZpZWxkRGVjbGFyYXRpb24gKj4gKmNsYXNzX3ZhcmlhYmxlczsKICAgIEFzdEFycmF5
PEFzdE1ldGhvZERlY2xhcmF0aW9uICo+ICptZXRob2RzOwogICAgQXN0QXJyYXk8QXN0Q2xhc3NE
ZWNsYXJhdGlvbiAqPiAqaW5uZXJfY2xhc3NlczsKICAgIEFzdEFycmF5PEFzdEludGVyZmFjZURl
Y2xhcmF0aW9uICo+ICppbm5lcl9pbnRlcmZhY2VzOwogICAgQXN0QXJyYXk8QXN0RW1wdHlEZWNs
YXJhdGlvbiAqPiAqZW1wdHlfZGVjbGFyYXRpb25zOwoKcHVibGljOgoKICAgIFNlbWFudGljRW52
aXJvbm1lbnQgKnNlbWFudGljX2Vudmlyb25tZW50OwoKICAgIExleFN0cmVhbTo6VG9rZW5JbmRl
eCBpbnRlcmZhY2VfdG9rZW47CiAgICBMZXhTdHJlYW06OlRva2VuSW5kZXggaWRlbnRpZmllcl90
b2tlbjsKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBsZWZ0X2JyYWNlX3Rva2VuOwogICAgTGV4
U3RyZWFtOjpUb2tlbkluZGV4IHJpZ2h0X2JyYWNlX3Rva2VuOwoKICAgIGlubGluZSB2b2lkIG1h
cmtfdW5wYXJzZWQoKSB7IEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpVTlBBUlNFRDsgfQogICAgaW5s
aW5lIHZvaWQgbWFya19wYXJzZWQoKSAgIHsgQXN0OjpjbGFzc190YWcgPSBBc3Q6Ok5PX1RBRzsg
fQoKICAgIEFzdEludGVyZmFjZURlY2xhcmF0aW9uKFN0b3JhZ2VQb29sICpwb29sXykgOiBwb29s
KHBvb2xfKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnRlcmZhY2VfbW9kaWZpZXJzKF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZHNfaW50ZXJmYWNlcyhfX251bGwgKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2Vf
bWVtYmVyX2RlY2xhcmF0aW9ucyhfX251bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbGFzc192YXJpYWJsZXMoX19udWxsICksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcyhfX251bGwg
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5l
cl9jbGFzc2VzKF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlubmVyX2ludGVyZmFjZXMoX19udWxsICksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlfZGVjbGFyYXRpb25zKF9fbnVs
bCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bWFudGljX2Vudmlyb25tZW50KF9fbnVsbCApCiAgICB7CiAgICAgICAgQXN0OjpraW5kID0gQXN0
OjpJTlRFUkZBQ0U7CiAgICAgICAgQXN0OjpjbGFzc190YWcgPSBBc3Q6Ok5PX1RBRzsKICAgICAg
ICBBc3Q6OmdlbmVyYXRlZCA9IDA7CiAgICB9CgogICAgdmlydHVhbCB+QXN0SW50ZXJmYWNlRGVj
bGFyYXRpb24oKTsKCiAgICBib29sIElzVmFsaWQoKSB7IHJldHVybiBzZW1hbnRpY19lbnZpcm9u
bWVudCAhPSBfX251bGwgOyB9CgogICAgaW5saW5lIEFzdE1vZGlmaWVyIComSW50ZXJmYWNlTW9k
aWZpZXIoaW50IGkpIHsgcmV0dXJuICgqaW50ZXJmYWNlX21vZGlmaWVycylbaV07IH0KICAgIGlu
bGluZSBpbnQgTnVtSW50ZXJmYWNlTW9kaWZpZXJzKCkgeyByZXR1cm4gKGludGVyZmFjZV9tb2Rp
ZmllcnMgPyBpbnRlcmZhY2VfbW9kaWZpZXJzIC0+IExlbmd0aCgpIDogMCk7IH0KICAgIGlubGlu
ZSB2b2lkIEFsbG9jYXRlSW50ZXJmYWNlTW9kaWZpZXJzKGludCBlc3RpbWF0ZSA9IDApOwogICAg
aW5saW5lIHZvaWQgQWRkSW50ZXJmYWNlTW9kaWZpZXIoQXN0TW9kaWZpZXIgKik7CgogICAgaW5s
aW5lIEFzdEV4cHJlc3Npb24gKiZFeHRlbmRzSW50ZXJmYWNlKGludCBpKSB7IHJldHVybiAoKmV4
dGVuZHNfaW50ZXJmYWNlcylbaV07IH0KICAgIGlubGluZSBpbnQgTnVtRXh0ZW5kc0ludGVyZmFj
ZXMoKSB7IHJldHVybiAoZXh0ZW5kc19pbnRlcmZhY2VzID8gZXh0ZW5kc19pbnRlcmZhY2VzIC0+
IExlbmd0aCgpIDogMCk7IH0KICAgIGlubGluZSB2b2lkIEFsbG9jYXRlRXh0ZW5kc0ludGVyZmFj
ZXMoaW50IGVzdGltYXRlID0gMCk7CiAgICBpbmxpbmUgdm9pZCBBZGRFeHRlbmRzSW50ZXJmYWNl
KEFzdEV4cHJlc3Npb24gKik7CgogICAgaW5saW5lIEFzdCAqJkludGVyZmFjZU1lbWJlckRlY2xh
cmF0aW9uKGludCBpKSB7IHJldHVybiAoKmludGVyZmFjZV9tZW1iZXJfZGVjbGFyYXRpb25zKVtp
XTsgfQogICAgaW5saW5lIGludCBOdW1JbnRlcmZhY2VNZW1iZXJEZWNsYXJhdGlvbnMoKQogICAg
ICAgICAgICAgICB7IHJldHVybiAoaW50ZXJmYWNlX21lbWJlcl9kZWNsYXJhdGlvbnMgPyBpbnRl
cmZhY2VfbWVtYmVyX2RlY2xhcmF0aW9ucyAtPiBMZW5ndGgoKSA6IDApOyB9CiAgICBpbmxpbmUg
dm9pZCBBbGxvY2F0ZUludGVyZmFjZU1lbWJlckRlY2xhcmF0aW9ucyhpbnQgZXN0aW1hdGUgPSAw
KTsKICAgIGlubGluZSB2b2lkIEFkZEludGVyZmFjZU1lbWJlckRlY2xhcmF0aW9uKEFzdCAqKTsK
CiAgICBpbmxpbmUgQXN0RmllbGREZWNsYXJhdGlvbiAqJkNsYXNzVmFyaWFibGUoaW50IGkpIHsg
cmV0dXJuICgqY2xhc3NfdmFyaWFibGVzKVtpXTsgfQogICAgaW5saW5lIGludCBOdW1DbGFzc1Zh
cmlhYmxlcygpIHsgcmV0dXJuIChjbGFzc192YXJpYWJsZXMgPyBjbGFzc192YXJpYWJsZXMgLT4g
TGVuZ3RoKCkgOiAwKTsgfQogICAgaW5saW5lIHZvaWQgQWxsb2NhdGVDbGFzc1ZhcmlhYmxlcyhp
bnQgZXN0aW1hdGUgPSAwKTsKICAgIGlubGluZSB2b2lkIEFkZENsYXNzVmFyaWFibGUoQXN0Rmll
bGREZWNsYXJhdGlvbiAqKTsKCiAgICBpbmxpbmUgQXN0TWV0aG9kRGVjbGFyYXRpb24gKiZNZXRo
b2QoaW50IGkpIHsgcmV0dXJuICgqbWV0aG9kcylbaV07IH0KICAgIGlubGluZSBpbnQgTnVtTWV0
aG9kcygpIHsgcmV0dXJuIChtZXRob2RzID8gbWV0aG9kcyAtPiBMZW5ndGgoKSA6IDApOyB9CiAg
ICBpbmxpbmUgdm9pZCBBbGxvY2F0ZU1ldGhvZHMoaW50IGVzdGltYXRlID0gMCk7CiAgICBpbmxp
bmUgdm9pZCBBZGRNZXRob2QoQXN0TWV0aG9kRGVjbGFyYXRpb24gKik7CgogICAgaW5saW5lIEFz
dENsYXNzRGVjbGFyYXRpb24gKiZOZXN0ZWRDbGFzcyhpbnQgaSkgeyByZXR1cm4gKCppbm5lcl9j
bGFzc2VzKVtpXTsgfQogICAgaW5saW5lIGludCBOdW1OZXN0ZWRDbGFzc2VzKCkgeyByZXR1cm4g
KGlubmVyX2NsYXNzZXMgPyBpbm5lcl9jbGFzc2VzIC0+IExlbmd0aCgpIDogMCk7IH0KICAgIGlu
bGluZSB2b2lkIEFsbG9jYXRlTmVzdGVkQ2xhc3NlcyhpbnQgZXN0aW1hdGUgPSAwKTsKICAgIGlu
bGluZSB2b2lkIEFkZE5lc3RlZENsYXNzKEFzdENsYXNzRGVjbGFyYXRpb24gKik7CgogICAgaW5s
aW5lIEFzdEludGVyZmFjZURlY2xhcmF0aW9uIComTmVzdGVkSW50ZXJmYWNlKGludCBpKSB7IHJl
dHVybiAoKmlubmVyX2ludGVyZmFjZXMpW2ldOyB9CiAgICBpbmxpbmUgaW50IE51bU5lc3RlZElu
dGVyZmFjZXMoKSB7IHJldHVybiAoaW5uZXJfaW50ZXJmYWNlcyA/IGlubmVyX2ludGVyZmFjZXMg
LT4gTGVuZ3RoKCkgOiAwKTsgfQogICAgaW5saW5lIHZvaWQgQWxsb2NhdGVOZXN0ZWRJbnRlcmZh
Y2VzKGludCBlc3RpbWF0ZSA9IDApOwogICAgaW5saW5lIHZvaWQgQWRkTmVzdGVkSW50ZXJmYWNl
KEFzdEludGVyZmFjZURlY2xhcmF0aW9uICopOwoKICAgIGlubGluZSBBc3RFbXB0eURlY2xhcmF0
aW9uIComRW1wdHlEZWNsYXJhdGlvbihpbnQgaSkgeyByZXR1cm4gKCplbXB0eV9kZWNsYXJhdGlv
bnMpW2ldOyB9CiAgICBpbmxpbmUgaW50IE51bUVtcHR5RGVjbGFyYXRpb25zKCkgeyByZXR1cm4g
KGVtcHR5X2RlY2xhcmF0aW9ucyA/IGVtcHR5X2RlY2xhcmF0aW9ucyAtPiBMZW5ndGgoKSA6IDAp
OyB9CiAgICBpbmxpbmUgdm9pZCBBbGxvY2F0ZUVtcHR5RGVjbGFyYXRpb25zKGludCBlc3RpbWF0
ZSA9IDApOwogICAgaW5saW5lIHZvaWQgQWRkRW1wdHlEZWNsYXJhdGlvbihBc3RFbXB0eURlY2xh
cmF0aW9uICopOwoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29sICopOwoK
ICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigpCiAgICB7CiAgICAg
ICAgcmV0dXJuIChOdW1JbnRlcmZhY2VNb2RpZmllcnMoKSA+IDAgPyAoKmludGVyZmFjZV9tb2Rp
ZmllcnMpWzBdIC0+IExlZnRUb2tlbigpIDogaW50ZXJmYWNlX3Rva2VuKTsKICAgIH0KICAgIHZp
cnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVybiByaWdodF9i
cmFjZV90b2tlbjsgfQp9OwoKCiAKIAogCmNsYXNzIEFzdExvY2FsVmFyaWFibGVEZWNsYXJhdGlv
blN0YXRlbWVudCA6IHB1YmxpYyBBc3RTdGF0ZW1lbnQKewogICAgQXN0QXJyYXk8QXN0TW9kaWZp
ZXIgKj4gKmxvY2FsX21vZGlmaWVyczsKICAgIEFzdEFycmF5PEFzdFZhcmlhYmxlRGVjbGFyYXRv
ciAqPiAqdmFyaWFibGVfZGVjbGFyYXRvcnM7CgpwdWJsaWM6CiAgICBBc3QgKnR5cGU7CiAgICBM
ZXhTdHJlYW06OlRva2VuSW5kZXggc2VtaWNvbG9uX3Rva2VuX29wdDsKCiAgICBBc3RMb2NhbFZh
cmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQoU3RvcmFnZVBvb2wgKnBvb2xfKSA6IGxvY2FsX21v
ZGlmaWVycyhfX251bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVfZGVjbGFyYXRvcnMoX19udWxsICkKICAg
IHsKICAgICAgICBBc3Q6OmtpbmQgPSBBc3Q6OkxPQ0FMX1ZBUklBQkxFX0RFQ0xBUkFUSU9OOwog
ICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpTVEFURU1FTlQ7CiAgICAgICAgQXN0OjpnZW5l
cmF0ZWQgPSAwOwogICAgICAgIEFzdFN0YXRlbWVudDo6cG9vbCA9IHBvb2xfOwogICAgICAgIEFz
dFN0YXRlbWVudDo6aXNfcmVhY2hhYmxlID0gZmFsc2U7CiAgICAgICAgQXN0U3RhdGVtZW50Ojpj
YW5fY29tcGxldGVfbm9ybWFsbHkgPSBmYWxzZTsKICAgICAgICBBc3RTdGF0ZW1lbnQ6OmRlZmlu
ZWRfdmFyaWFibGVzID0gX19udWxsIDsKICAgIH0KCiAgICB2aXJ0dWFsIH5Bc3RMb2NhbFZhcmlh
YmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQoKTsKCiAgICBpbmxpbmUgQXN0TW9kaWZpZXIgKiZMb2Nh
bE1vZGlmaWVyKGludCBpKSB7IHJldHVybiAoKmxvY2FsX21vZGlmaWVycylbaV07IH0KICAgIGlu
bGluZSBpbnQgTnVtTG9jYWxNb2RpZmllcnMoKSB7IHJldHVybiAobG9jYWxfbW9kaWZpZXJzID8g
bG9jYWxfbW9kaWZpZXJzIC0+IExlbmd0aCgpIDogMCk7IH0KICAgIGlubGluZSB2b2lkIEFsbG9j
YXRlTG9jYWxNb2RpZmllcnMoaW50IGVzdGltYXRlID0gMCk7CiAgICBpbmxpbmUgdm9pZCBBZGRM
b2NhbE1vZGlmaWVyKEFzdE1vZGlmaWVyICopOwoKICAgIGlubGluZSBBc3RWYXJpYWJsZURlY2xh
cmF0b3IgKiZWYXJpYWJsZURlY2xhcmF0b3IoaW50IGkpIHsgcmV0dXJuICgqdmFyaWFibGVfZGVj
bGFyYXRvcnMpW2ldOyB9CiAgICBpbmxpbmUgaW50IE51bVZhcmlhYmxlRGVjbGFyYXRvcnMoKSB7
IHJldHVybiAodmFyaWFibGVfZGVjbGFyYXRvcnMgPyB2YXJpYWJsZV9kZWNsYXJhdG9ycyAtPiBM
ZW5ndGgoKSA6IDApOyB9CiAgICBpbmxpbmUgdm9pZCBBbGxvY2F0ZVZhcmlhYmxlRGVjbGFyYXRv
cnMoaW50IGVzdGltYXRlID0gMCk7CiAgICBpbmxpbmUgdm9pZCBBZGRWYXJpYWJsZURlY2xhcmF0
b3IoQXN0VmFyaWFibGVEZWNsYXJhdG9yICopOwoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25l
KFN0b3JhZ2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRU
b2tlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIChOdW1Mb2NhbE1vZGlmaWVycygpID4gMCA/ICgq
bG9jYWxfbW9kaWZpZXJzKVswXSAtPiBMZWZ0VG9rZW4oKSA6IHR5cGUgLT4gTGVmdFRva2VuKCkp
OwogICAgfQogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggUmlnaHRUb2tlbigpCiAg
ICB7CiAgICAgICAgcmV0dXJuIChzZW1pY29sb25fdG9rZW5fb3B0ID8gc2VtaWNvbG9uX3Rva2Vu
X29wdCA6IFZhcmlhYmxlRGVjbGFyYXRvcihOdW1WYXJpYWJsZURlY2xhcmF0b3JzKCkgLSAxKSAt
PiBSaWdodFRva2VuKCkpOwogICAgfQp9OwoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKY2xhc3MgQXN0SWZTdGF0ZW1lbnQgOiBwdWJsaWMgQXN0U3RhdGVt
ZW50CnsKcHVibGljOgogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IGlmX3Rva2VuOwogICAgQXN0
RXhwcmVzc2lvbiAqZXhwcmVzc2lvbjsKICAgIEFzdFN0YXRlbWVudCAqdHJ1ZV9zdGF0ZW1lbnQ7
CiAgICBBc3RTdGF0ZW1lbnQgKmZhbHNlX3N0YXRlbWVudF9vcHQ7CgogICAgQXN0SWZTdGF0ZW1l
bnQoU3RvcmFnZVBvb2wgKnBvb2xfKSA6IGV4cHJlc3Npb24oX19udWxsICkKICAgIHsKICAgICAg
ICBBc3Q6OmtpbmQgPSBBc3Q6OklGOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpTVEFU
RU1FTlQ7CiAgICAgICAgQXN0OjpnZW5lcmF0ZWQgPSAwOwogICAgICAgIEFzdFN0YXRlbWVudDo6
cG9vbCA9IHBvb2xfOwogICAgICAgIEFzdFN0YXRlbWVudDo6aXNfcmVhY2hhYmxlID0gZmFsc2U7
CiAgICAgICAgQXN0U3RhdGVtZW50OjpjYW5fY29tcGxldGVfbm9ybWFsbHkgPSBmYWxzZTsKICAg
ICAgICBBc3RTdGF0ZW1lbnQ6OmRlZmluZWRfdmFyaWFibGVzID0gX19udWxsIDsKICAgIH0KCiAg
ICB2aXJ0dWFsIH5Bc3RJZlN0YXRlbWVudCgpOwoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25l
KFN0b3JhZ2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRU
b2tlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIGlmX3Rva2VuOwogICAgfQogICAgdmlydHVhbCBM
ZXhTdHJlYW06OlRva2VuSW5kZXggUmlnaHRUb2tlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIChm
YWxzZV9zdGF0ZW1lbnRfb3B0ID8gZmFsc2Vfc3RhdGVtZW50X29wdCAtPiBSaWdodFRva2VuKCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0cnVlX3N0YXRlbWVudCAtPiBS
aWdodFRva2VuKCkpOwogICAgfQp9OwoKCiAKIAogCmNsYXNzIEFzdEVtcHR5U3RhdGVtZW50IDog
cHVibGljIEFzdFN0YXRlbWVudAp7CnB1YmxpYzoKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBz
ZW1pY29sb25fdG9rZW47CgogICAgQXN0RW1wdHlTdGF0ZW1lbnQoU3RvcmFnZVBvb2wgKnBvb2xf
LCBMZXhTdHJlYW06OlRva2VuSW5kZXggdG9rZW5fKSA6IHNlbWljb2xvbl90b2tlbih0b2tlbl8p
CiAgICB7CiAgICAgICAgQXN0OjpraW5kID0gQXN0OjpFTVBUWV9TVEFURU1FTlQ7CiAgICAgICAg
QXN0OjpjbGFzc190YWcgPSBBc3Q6OlNUQVRFTUVOVDsKICAgICAgICBBc3Q6OmdlbmVyYXRlZCA9
IDA7CiAgICAgICAgQXN0U3RhdGVtZW50Ojpwb29sID0gcG9vbF87CiAgICAgICAgQXN0U3RhdGVt
ZW50Ojppc19yZWFjaGFibGUgPSBmYWxzZTsKICAgICAgICBBc3RTdGF0ZW1lbnQ6OmNhbl9jb21w
bGV0ZV9ub3JtYWxseSA9IGZhbHNlOwogICAgICAgIEFzdFN0YXRlbWVudDo6ZGVmaW5lZF92YXJp
YWJsZXMgPSBfX251bGwgOwogICAgfQoKICAgIHZpcnR1YWwgfkFzdEVtcHR5U3RhdGVtZW50KCk7
CgoKCgoKCiAgICB2aXJ0dWFsIEFzdCAqQ2xvbmUoU3RvcmFnZVBvb2wgKik7CgogICAgdmlydHVh
bCBMZXhTdHJlYW06OlRva2VuSW5kZXggTGVmdFRva2VuKCkKICAgIHsKICAgICAgICByZXR1cm4g
c2VtaWNvbG9uX3Rva2VuOwogICAgfQogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXgg
UmlnaHRUb2tlbigpIHsgcmV0dXJuIHNlbWljb2xvbl90b2tlbjsgfQp9OwoKCiAKIAogCmNsYXNz
IEFzdEV4cHJlc3Npb25TdGF0ZW1lbnQgOiBwdWJsaWMgQXN0U3RhdGVtZW50CnsKcHVibGljOgog
ICAgQXN0RXhwcmVzc2lvbiAqZXhwcmVzc2lvbjsKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBz
ZW1pY29sb25fdG9rZW5fb3B0OwoKICAgIEFzdEV4cHJlc3Npb25TdGF0ZW1lbnQoU3RvcmFnZVBv
b2wgKnBvb2xfKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6RVhQUkVTU0lPTl9TVEFU
RU1FTlQ7CiAgICAgICAgQXN0OjpjbGFzc190YWcgPSBBc3Q6OlNUQVRFTUVOVDsKICAgICAgICBB
c3Q6OmdlbmVyYXRlZCA9IDA7CiAgICAgICAgQXN0U3RhdGVtZW50Ojpwb29sID0gcG9vbF87CiAg
ICAgICAgQXN0U3RhdGVtZW50Ojppc19yZWFjaGFibGUgPSBmYWxzZTsKICAgICAgICBBc3RTdGF0
ZW1lbnQ6OmNhbl9jb21wbGV0ZV9ub3JtYWxseSA9IGZhbHNlOwogICAgICAgIEFzdFN0YXRlbWVu
dDo6ZGVmaW5lZF92YXJpYWJsZXMgPSBfX251bGwgOwogICAgfQoKICAgIHZpcnR1YWwgfkFzdEV4
cHJlc3Npb25TdGF0ZW1lbnQoKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0ICpDbG9uZShTdG9yYWdl
UG9vbCAqKTsKCiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4oKQog
ICAgewogICAgICAgIHJldHVybiBleHByZXNzaW9uIC0+IExlZnRUb2tlbigpOwogICAgfQogICAg
dmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggUmlnaHRUb2tlbigpCiAgICB7CiAgICAgICAg
cmV0dXJuIChzZW1pY29sb25fdG9rZW5fb3B0ID8gc2VtaWNvbG9uX3Rva2VuX29wdCA6IGV4cHJl
c3Npb24gLT4gUmlnaHRUb2tlbigpKTsKICAgIH0KfTsKCgogCiAKIAogCiAKIApjbGFzcyBBc3RD
YXNlTGFiZWwgOiBwdWJsaWMgQXN0CnsKcHVibGljOgogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4
IGNhc2VfdG9rZW47CiAgICBBc3RFeHByZXNzaW9uICpleHByZXNzaW9uOwogICAgTGV4U3RyZWFt
OjpUb2tlbkluZGV4IGNvbG9uX3Rva2VuOwogICAgaW50IG1hcF9pbmRleDsKCiAgICBBc3RDYXNl
TGFiZWwoKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6Q0FTRTsKICAgICAgICBBc3Q6
OmNsYXNzX3RhZyA9IEFzdDo6Tk9fVEFHOwogICAgICAgIEFzdDo6Z2VuZXJhdGVkID0gMDsKICAg
IH0KCiAgICB2aXJ0dWFsIH5Bc3RDYXNlTGFiZWwoKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0ICpD
bG9uZShTdG9yYWdlUG9vbCAqKTsKCiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBM
ZWZ0VG9rZW4oKSB7IHJldHVybiBjYXNlX3Rva2VuOyB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6
VG9rZW5JbmRleCBSaWdodFRva2VuKCkgeyByZXR1cm4gY29sb25fdG9rZW47IH0KfTsKCgogCiAK
IApjbGFzcyBBc3REZWZhdWx0TGFiZWwgOiBwdWJsaWMgQXN0CnsKcHVibGljOgogICAgTGV4U3Ry
ZWFtOjpUb2tlbkluZGV4IGRlZmF1bHRfdG9rZW47CiAgICBMZXhTdHJlYW06OlRva2VuSW5kZXgg
Y29sb25fdG9rZW47CgogICAgQXN0RGVmYXVsdExhYmVsKCkKICAgIHsKICAgICAgICBBc3Q6Omtp
bmQgPSBBc3Q6OkRFRkFVTFQ7CiAgICAgICAgQXN0OjpjbGFzc190YWcgPSBBc3Q6Ok5PX1RBRzsK
ICAgICAgICBBc3Q6OmdlbmVyYXRlZCA9IDA7CiAgICB9CgogICAgdmlydHVhbCB+QXN0RGVmYXVs
dExhYmVsKCk7CgoKCgoKCiAgICB2aXJ0dWFsIEFzdCAqQ2xvbmUoU3RvcmFnZVBvb2wgKik7Cgog
ICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggTGVmdFRva2VuKCkgeyByZXR1cm4gZGVm
YXVsdF90b2tlbjsgfQogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggUmlnaHRUb2tl
bigpIHsgcmV0dXJuIGNvbG9uX3Rva2VuOyB9Cn07CgoKIAogCiAKY2xhc3MgQXN0U3dpdGNoQmxv
Y2tTdGF0ZW1lbnQgOiBwdWJsaWMgQXN0CnsKcHJpdmF0ZToKICAgIFN0b3JhZ2VQb29sICpwb29s
OwoKICAgIEFzdEFycmF5PEFzdFN0YXRlbWVudCAqPiAqYmxvY2tfc3RhdGVtZW50czsKICAgIEFz
dEFycmF5PEFzdCAqPiAqc3dpdGNoX2xhYmVsczsKICAgIFZhcmlhYmxlU3ltYm9sQXJyYXkgKmxv
Y2FsbHlfZGVmaW5lZF92YXJpYWJsZXM7CgogICAgZnJpZW5kIGNsYXNzIEFzdEJsb2NrOwoKcHVi
bGljOgogICAgQXN0U3dpdGNoQmxvY2tTdGF0ZW1lbnQoU3RvcmFnZVBvb2wgKnBvb2xfKSA6IHBv
b2wocG9vbF8pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJsb2NrX3N0YXRlbWVudHMoX19udWxsICksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoX2xhYmVscyhfX251bGwgKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGx5X2RlZmluZWRf
dmFyaWFibGVzKF9fbnVsbCApCiAgICB7CiAgICAgICAgQXN0OjpraW5kID0gQXN0OjpTV0lUQ0hf
QkxPQ0s7CiAgICAgICAgQXN0OjpjbGFzc190YWcgPSBBc3Q6Ok5PX1RBRzsKICAgICAgICBBc3Q6
OmdlbmVyYXRlZCA9IDA7CiAgICB9CgogICAgdmlydHVhbCB+QXN0U3dpdGNoQmxvY2tTdGF0ZW1l
bnQoKTsKCiAgICBpbmxpbmUgQXN0U3RhdGVtZW50IComU3RhdGVtZW50KGludCBpKSB7IHJldHVy
biAoKmJsb2NrX3N0YXRlbWVudHMpW2ldOyB9CiAgICBpbmxpbmUgaW50IE51bVN0YXRlbWVudHMo
KSB7IHJldHVybiAoYmxvY2tfc3RhdGVtZW50cyA/IGJsb2NrX3N0YXRlbWVudHMgLT4gTGVuZ3Ro
KCkgOiAwKTsgfQogICAgaW5saW5lIHZvaWQgQWxsb2NhdGVCbG9ja1N0YXRlbWVudHMoaW50IGVz
dGltYXRlID0gMCk7CiAgICBpbmxpbmUgdm9pZCBBZGRTdGF0ZW1lbnQoQXN0U3RhdGVtZW50ICop
OwoKICAgIGlubGluZSBBc3QgKiZTd2l0Y2hMYWJlbChpbnQgaSkgeyByZXR1cm4gKCpzd2l0Y2hf
bGFiZWxzKVtpXTsgfQogICAgaW5saW5lIGludCBOdW1Td2l0Y2hMYWJlbHMoKSB7IHJldHVybiAo
c3dpdGNoX2xhYmVscyA/IHN3aXRjaF9sYWJlbHMgLT4gTGVuZ3RoKCkgOiAwKTsgfQogICAgaW5s
aW5lIHZvaWQgQWxsb2NhdGVTd2l0Y2hMYWJlbHMoaW50IGVzdGltYXRlID0gMCk7CiAgICBpbmxp
bmUgdm9pZCBBZGRTd2l0Y2hMYWJlbChBc3QgKik7CgogICAgaW5saW5lIFZhcmlhYmxlU3ltYm9s
IComTG9jYWxseURlZmluZWRWYXJpYWJsZShpbnQgaSkgeyByZXR1cm4gKCpsb2NhbGx5X2RlZmlu
ZWRfdmFyaWFibGVzKVtpXTsgfQogICAgaW5saW5lIGludCBOdW1Mb2NhbGx5RGVmaW5lZFZhcmlh
YmxlcygpIHsgcmV0dXJuIChsb2NhbGx5X2RlZmluZWRfdmFyaWFibGVzID8gbG9jYWxseV9kZWZp
bmVkX3ZhcmlhYmxlcyAtPiBMZW5ndGgoKSA6IDApOyB9CgoKCgoKCiAgICB2aXJ0dWFsIEFzdCAq
Q2xvbmUoU3RvcmFnZVBvb2wgKik7CgogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXgg
TGVmdFRva2VuKCkKICAgIHsKICAgICAgICByZXR1cm4gU3dpdGNoTGFiZWwoMCkgLT4gTGVmdFRv
a2VuKCk7CiAgICB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBSaWdodFRva2Vu
KCkKICAgIHsKICAgICAgICByZXR1cm4gU3RhdGVtZW50KE51bVN0YXRlbWVudHMoKSAtIDEpIC0+
IFJpZ2h0VG9rZW4oKTsKICAgIH0KfTsKCgpjbGFzcyBDYXNlRWxlbWVudAp7CnB1YmxpYzoKICAg
IEFzdFN3aXRjaEJsb2NrU3RhdGVtZW50ICpzd2l0Y2hfYmxvY2tfc3RhdGVtZW50OwogICAgQXN0
RXhwcmVzc2lvbiAqZXhwcmVzc2lvbjsKICAgIGludCBpbmRleDsKCiAgICBpbnQgVmFsdWUoKSB7
IHJldHVybiAoKEludExpdGVyYWxWYWx1ZSAqKSAoZXhwcmVzc2lvbiAtPiB2YWx1ZSkpIC0+IHZh
bHVlOyB9Cn07CgogCiAKIApjbGFzcyBBc3RTd2l0Y2hTdGF0ZW1lbnQgOiBwdWJsaWMgQXN0U3Rh
dGVtZW50CnsKICAgIEFzdEFycmF5PENhc2VFbGVtZW50ICo+ICpjYXNlczsKCnB1YmxpYzoKICAg
IENhc2VFbGVtZW50IGRlZmF1bHRfY2FzZTsKCiAgICBMZXhTdHJlYW06OlRva2VuSW5kZXggc3dp
dGNoX3Rva2VuOwogICAgQXN0RXhwcmVzc2lvbiAqZXhwcmVzc2lvbjsKICAgIEFzdEJsb2NrICpz
d2l0Y2hfYmxvY2s7CgogICAgQXN0U3dpdGNoU3RhdGVtZW50KFN0b3JhZ2VQb29sICpwb29sXykg
OiBjYXNlcyhfX251bGwgKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6U1dJVENIOwog
ICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpTVEFURU1FTlQ7CiAgICAgICAgQXN0OjpnZW5l
cmF0ZWQgPSAwOwogICAgICAgIEFzdFN0YXRlbWVudDo6cG9vbCA9IHBvb2xfOwogICAgICAgIEFz
dFN0YXRlbWVudDo6aXNfcmVhY2hhYmxlID0gZmFsc2U7CiAgICAgICAgQXN0U3RhdGVtZW50Ojpj
YW5fY29tcGxldGVfbm9ybWFsbHkgPSBmYWxzZTsKICAgICAgICBBc3RTdGF0ZW1lbnQ6OmRlZmlu
ZWRfdmFyaWFibGVzID0gX19udWxsIDsKICAgIH0KCiAgICB2aXJ0dWFsIH5Bc3RTd2l0Y2hTdGF0
ZW1lbnQoKTsKCiAgICBpbmxpbmUgQ2FzZUVsZW1lbnQgKiZDYXNlKGludCBpKSB7IHJldHVybiAo
KmNhc2VzKVtpXTsgfQogICAgaW5saW5lIGludCBOdW1DYXNlcygpIHsgcmV0dXJuIChjYXNlcyA/
IGNhc2VzIC0+IExlbmd0aCgpIDogMCk7IH0KICAgIGlubGluZSB2b2lkIEFsbG9jYXRlQ2FzZXMo
aW50IGVzdGltYXRlID0gMCk7CiAgICBpbmxpbmUgdm9pZCBBZGRDYXNlKENhc2VFbGVtZW50ICop
OwoKICAgIHZvaWQgU29ydENhc2VzKCk7CgoKCgoKCiAgICB2aXJ0dWFsIEFzdCAqQ2xvbmUoU3Rv
cmFnZVBvb2wgKik7CgogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggTGVmdFRva2Vu
KCkKICAgIHsKICAgICAgICByZXR1cm4gc3dpdGNoX3Rva2VuOwogICAgfQogICAgdmlydHVhbCBM
ZXhTdHJlYW06OlRva2VuSW5kZXggUmlnaHRUb2tlbigpIHsgcmV0dXJuIHN3aXRjaF9ibG9jayAt
PiBSaWdodFRva2VuKCk7IH0KfTsKCgogCiAKIApjbGFzcyBBc3RXaGlsZVN0YXRlbWVudCA6IHB1
YmxpYyBBc3RTdGF0ZW1lbnQKewpwdWJsaWM6CiAgICBMZXhTdHJlYW06OlRva2VuSW5kZXggd2hp
bGVfdG9rZW47CiAgICBBc3RFeHByZXNzaW9uICpleHByZXNzaW9uOwogICAgQXN0U3RhdGVtZW50
ICpzdGF0ZW1lbnQ7CgogICAgQXN0V2hpbGVTdGF0ZW1lbnQoU3RvcmFnZVBvb2wgKnBvb2xfKQog
ICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6V0hJTEU7CiAgICAgICAgQXN0OjpjbGFzc190
YWcgPSBBc3Q6OlNUQVRFTUVOVDsKICAgICAgICBBc3Q6OmdlbmVyYXRlZCA9IDA7CiAgICAgICAg
QXN0U3RhdGVtZW50Ojpwb29sID0gcG9vbF87CiAgICAgICAgQXN0U3RhdGVtZW50Ojppc19yZWFj
aGFibGUgPSBmYWxzZTsKICAgICAgICBBc3RTdGF0ZW1lbnQ6OmNhbl9jb21wbGV0ZV9ub3JtYWxs
eSA9IGZhbHNlOwogICAgICAgIEFzdFN0YXRlbWVudDo6ZGVmaW5lZF92YXJpYWJsZXMgPSBfX251
bGwgOwogICAgfQoKICAgIHZpcnR1YWwgfkFzdFdoaWxlU3RhdGVtZW50KCk7CgoKCgoKCiAgICB2
aXJ0dWFsIEFzdCAqQ2xvbmUoU3RvcmFnZVBvb2wgKik7CgogICAgdmlydHVhbCBMZXhTdHJlYW06
OlRva2VuSW5kZXggTGVmdFRva2VuKCkKICAgIHsKICAgICAgICByZXR1cm4gd2hpbGVfdG9rZW47
CiAgICB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBSaWdodFRva2VuKCkgeyBy
ZXR1cm4gc3RhdGVtZW50IC0+IFJpZ2h0VG9rZW4oKTsgfQp9OwoKCiAKIAogCmNsYXNzIEFzdERv
U3RhdGVtZW50IDogcHVibGljIEFzdFN0YXRlbWVudAp7CnB1YmxpYzoKICAgIExleFN0cmVhbTo6
VG9rZW5JbmRleCBkb190b2tlbjsKICAgIEFzdFN0YXRlbWVudCAqc3RhdGVtZW50OwogICAgTGV4
U3RyZWFtOjpUb2tlbkluZGV4IHdoaWxlX3Rva2VuOwogICAgQXN0RXhwcmVzc2lvbiAqZXhwcmVz
c2lvbjsKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBzZW1pY29sb25fdG9rZW47CgogICAgQXN0
RG9TdGF0ZW1lbnQoU3RvcmFnZVBvb2wgKnBvb2xfKQogICAgewogICAgICAgIEFzdDo6a2luZCA9
IEFzdDo6RE87CiAgICAgICAgQXN0OjpjbGFzc190YWcgPSBBc3Q6OlNUQVRFTUVOVDsKICAgICAg
ICBBc3Q6OmdlbmVyYXRlZCA9IDA7CiAgICAgICAgQXN0U3RhdGVtZW50Ojpwb29sID0gcG9vbF87
CiAgICAgICAgQXN0U3RhdGVtZW50Ojppc19yZWFjaGFibGUgPSBmYWxzZTsKICAgICAgICBBc3RT
dGF0ZW1lbnQ6OmNhbl9jb21wbGV0ZV9ub3JtYWxseSA9IGZhbHNlOwogICAgICAgIEFzdFN0YXRl
bWVudDo6ZGVmaW5lZF92YXJpYWJsZXMgPSBfX251bGwgOwogICAgfQoKICAgIHZpcnR1YWwgfkFz
dERvU3RhdGVtZW50KCk7CgoKCgoKCiAgICB2aXJ0dWFsIEFzdCAqQ2xvbmUoU3RvcmFnZVBvb2wg
Kik7CgogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggTGVmdFRva2VuKCkKICAgIHsK
ICAgICAgICByZXR1cm4gZG9fdG9rZW47CiAgICB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9r
ZW5JbmRleCBSaWdodFRva2VuKCkgeyByZXR1cm4gc2VtaWNvbG9uX3Rva2VuOyB9Cn07CgoKIAog
CiAKIAogCiAKIAogCmNsYXNzIEFzdEZvclN0YXRlbWVudCA6IHB1YmxpYyBBc3RTdGF0ZW1lbnQK
ewpwcml2YXRlOgoKICAgIEFzdEFycmF5PEFzdFN0YXRlbWVudCAqPiAqZm9yX2luaXRfc3RhdGVt
ZW50czsKICAgIEFzdEFycmF5PEFzdEV4cHJlc3Npb25TdGF0ZW1lbnQgKj4gKmZvcl91cGRhdGVf
c3RhdGVtZW50czsKCnB1YmxpYzoKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBmb3JfdG9rZW47
CiAgICBBc3RFeHByZXNzaW9uICplbmRfZXhwcmVzc2lvbl9vcHQ7CiAgICBBc3RTdGF0ZW1lbnQg
KnN0YXRlbWVudDsKCiAgICBBc3RGb3JTdGF0ZW1lbnQoU3RvcmFnZVBvb2wgKnBvb2xfKSA6IGZv
cl9pbml0X3N0YXRlbWVudHMoX19udWxsICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvcl91cGRhdGVfc3RhdGVtZW50cyhfX251bGwgKQogICAgewogICAgICAg
IEFzdDo6a2luZCA9IEFzdDo6Rk9SOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpTVEFU
RU1FTlQ7CiAgICAgICAgQXN0OjpnZW5lcmF0ZWQgPSAwOwogICAgICAgIEFzdFN0YXRlbWVudDo6
cG9vbCA9IHBvb2xfOwogICAgICAgIEFzdFN0YXRlbWVudDo6aXNfcmVhY2hhYmxlID0gZmFsc2U7
CiAgICAgICAgQXN0U3RhdGVtZW50OjpjYW5fY29tcGxldGVfbm9ybWFsbHkgPSBmYWxzZTsKICAg
ICAgICBBc3RTdGF0ZW1lbnQ6OmRlZmluZWRfdmFyaWFibGVzID0gX19udWxsIDsKICAgIH0KCiAg
ICB2aXJ0dWFsIH5Bc3RGb3JTdGF0ZW1lbnQoKTsKCiAgICBpbmxpbmUgQXN0U3RhdGVtZW50ICom
Rm9ySW5pdFN0YXRlbWVudChpbnQgaSkgeyByZXR1cm4gKCpmb3JfaW5pdF9zdGF0ZW1lbnRzKVtp
XTsgfQogICAgaW5saW5lIGludCBOdW1Gb3JJbml0U3RhdGVtZW50cygpIHsgcmV0dXJuIChmb3Jf
aW5pdF9zdGF0ZW1lbnRzID8gZm9yX2luaXRfc3RhdGVtZW50cyAtPiBMZW5ndGgoKSA6IDApOyB9
CiAgICBpbmxpbmUgdm9pZCBBbGxvY2F0ZUZvckluaXRTdGF0ZW1lbnRzKGludCBlc3RpbWF0ZSA9
IDApOwogICAgaW5saW5lIHZvaWQgQWRkRm9ySW5pdFN0YXRlbWVudChBc3RTdGF0ZW1lbnQgKik7
CgogICAgaW5saW5lIEFzdEV4cHJlc3Npb25TdGF0ZW1lbnQgKiZGb3JVcGRhdGVTdGF0ZW1lbnQo
aW50IGkpIHsgcmV0dXJuICgqZm9yX3VwZGF0ZV9zdGF0ZW1lbnRzKVtpXTsgfQogICAgaW5saW5l
IGludCBOdW1Gb3JVcGRhdGVTdGF0ZW1lbnRzKCkgeyByZXR1cm4gKGZvcl91cGRhdGVfc3RhdGVt
ZW50cyA/IGZvcl91cGRhdGVfc3RhdGVtZW50cyAtPiBMZW5ndGgoKSA6IDApOyB9CiAgICBpbmxp
bmUgdm9pZCBBbGxvY2F0ZUZvclVwZGF0ZVN0YXRlbWVudHMoaW50IGVzdGltYXRlID0gMCk7CiAg
ICBpbmxpbmUgdm9pZCBBZGRGb3JVcGRhdGVTdGF0ZW1lbnQoQXN0RXhwcmVzc2lvblN0YXRlbWVu
dCAqKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0ICpDbG9uZShTdG9yYWdlUG9vbCAqKTsKCiAgICB2
aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4oKQogICAgewogICAgICAgIHJl
dHVybiBmb3JfdG9rZW47CiAgICB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBS
aWdodFRva2VuKCkgeyByZXR1cm4gc3RhdGVtZW50IC0+IFJpZ2h0VG9rZW4oKTsgfQp9OwoKCiAK
IAogCmNsYXNzIEFzdEJyZWFrU3RhdGVtZW50IDogcHVibGljIEFzdFN0YXRlbWVudAp7CnB1Ymxp
YzoKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBicmVha190b2tlbjsKICAgIExleFN0cmVhbTo6
VG9rZW5JbmRleCBpZGVudGlmaWVyX3Rva2VuX29wdDsKICAgIExleFN0cmVhbTo6VG9rZW5JbmRl
eCBzZW1pY29sb25fdG9rZW47CiAgICBpbnQgbmVzdGluZ19sZXZlbDsKCiAgICBBc3RCcmVha1N0
YXRlbWVudChTdG9yYWdlUG9vbCAqcG9vbF8pCiAgICB7CiAgICAgICAgQXN0OjpraW5kID0gQXN0
OjpCUkVBSzsKICAgICAgICBBc3Q6OmNsYXNzX3RhZyA9IEFzdDo6U1RBVEVNRU5UOwogICAgICAg
IEFzdDo6Z2VuZXJhdGVkID0gMDsKICAgICAgICBBc3RTdGF0ZW1lbnQ6OnBvb2wgPSBwb29sXzsK
ICAgICAgICBBc3RTdGF0ZW1lbnQ6OmlzX3JlYWNoYWJsZSA9IGZhbHNlOwogICAgICAgIEFzdFN0
YXRlbWVudDo6Y2FuX2NvbXBsZXRlX25vcm1hbGx5ID0gZmFsc2U7CiAgICAgICAgQXN0U3RhdGVt
ZW50OjpkZWZpbmVkX3ZhcmlhYmxlcyA9IF9fbnVsbCA7CiAgICB9CgogICAgdmlydHVhbCB+QXN0
QnJlYWtTdGF0ZW1lbnQoKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0ICpDbG9uZShTdG9yYWdlUG9v
bCAqKTsKCiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4oKQogICAg
ewogICAgICAgIHJldHVybiBicmVha190b2tlbjsKICAgIH0KICAgIHZpcnR1YWwgTGV4U3RyZWFt
OjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVybiBzZW1pY29sb25fdG9rZW47IH0KfTsK
CiAKIAogCmNsYXNzIEFzdENvbnRpbnVlU3RhdGVtZW50IDogcHVibGljIEFzdFN0YXRlbWVudAp7
CnB1YmxpYzoKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBjb250aW51ZV90b2tlbjsKICAgIExl
eFN0cmVhbTo6VG9rZW5JbmRleCBpZGVudGlmaWVyX3Rva2VuX29wdDsKICAgIExleFN0cmVhbTo6
VG9rZW5JbmRleCBzZW1pY29sb25fdG9rZW47CiAgICBpbnQgbmVzdGluZ19sZXZlbDsKCiAgICBB
c3RDb250aW51ZVN0YXRlbWVudChTdG9yYWdlUG9vbCAqcG9vbF8pCiAgICB7CiAgICAgICAgQXN0
OjpraW5kID0gQXN0OjpDT05USU5VRTsKICAgICAgICBBc3Q6OmNsYXNzX3RhZyA9IEFzdDo6U1RB
VEVNRU5UOwogICAgICAgIEFzdDo6Z2VuZXJhdGVkID0gMDsKICAgICAgICBBc3RTdGF0ZW1lbnQ6
OnBvb2wgPSBwb29sXzsKICAgICAgICBBc3RTdGF0ZW1lbnQ6OmlzX3JlYWNoYWJsZSA9IGZhbHNl
OwogICAgICAgIEFzdFN0YXRlbWVudDo6Y2FuX2NvbXBsZXRlX25vcm1hbGx5ID0gZmFsc2U7CiAg
ICAgICAgQXN0U3RhdGVtZW50OjpkZWZpbmVkX3ZhcmlhYmxlcyA9IF9fbnVsbCA7CiAgICB9Cgog
ICAgdmlydHVhbCB+QXN0Q29udGludWVTdGF0ZW1lbnQoKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0
ICpDbG9uZShTdG9yYWdlUG9vbCAqKTsKCiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRl
eCBMZWZ0VG9rZW4oKQogICAgewogICAgICAgIHJldHVybiBjb250aW51ZV90b2tlbjsKICAgIH0K
ICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVybiBz
ZW1pY29sb25fdG9rZW47IH0KfTsKCgogCiAKIApjbGFzcyBBc3RSZXR1cm5TdGF0ZW1lbnQgOiBw
dWJsaWMgQXN0U3RhdGVtZW50CnsKcHVibGljOgogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IHJl
dHVybl90b2tlbjsKICAgIEFzdEV4cHJlc3Npb24gKmV4cHJlc3Npb25fb3B0OwogICAgTGV4U3Ry
ZWFtOjpUb2tlbkluZGV4IHNlbWljb2xvbl90b2tlbjsKCiAgICBBc3RSZXR1cm5TdGF0ZW1lbnQo
U3RvcmFnZVBvb2wgKnBvb2xfKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6UkVUVVJO
OwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpTVEFURU1FTlQ7CiAgICAgICAgQXN0Ojpn
ZW5lcmF0ZWQgPSAwOwogICAgICAgIEFzdFN0YXRlbWVudDo6cG9vbCA9IHBvb2xfOwogICAgICAg
IEFzdFN0YXRlbWVudDo6aXNfcmVhY2hhYmxlID0gZmFsc2U7CiAgICAgICAgQXN0U3RhdGVtZW50
OjpjYW5fY29tcGxldGVfbm9ybWFsbHkgPSBmYWxzZTsKICAgICAgICBBc3RTdGF0ZW1lbnQ6OmRl
ZmluZWRfdmFyaWFibGVzID0gX19udWxsIDsKICAgIH0KCiAgICB2aXJ0dWFsIH5Bc3RSZXR1cm5T
dGF0ZW1lbnQoKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0ICpDbG9uZShTdG9yYWdlUG9vbCAqKTsK
CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4oKQogICAgewogICAg
ICAgIHJldHVybiByZXR1cm5fdG9rZW47CiAgICB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9r
ZW5JbmRleCBSaWdodFRva2VuKCkgeyByZXR1cm4gc2VtaWNvbG9uX3Rva2VuOyB9Cn07CgoKIAog
CiAKY2xhc3MgQXN0VGhyb3dTdGF0ZW1lbnQgOiBwdWJsaWMgQXN0U3RhdGVtZW50CnsKcHVibGlj
OgogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IHRocm93X3Rva2VuOwogICAgQXN0RXhwcmVzc2lv
biAqZXhwcmVzc2lvbjsKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBzZW1pY29sb25fdG9rZW47
CgogICAgQXN0VGhyb3dTdGF0ZW1lbnQoU3RvcmFnZVBvb2wgKnBvb2xfKQogICAgewogICAgICAg
IEFzdDo6a2luZCA9IEFzdDo6VEhST1c7CiAgICAgICAgQXN0OjpjbGFzc190YWcgPSBBc3Q6OlNU
QVRFTUVOVDsKICAgICAgICBBc3Q6OmdlbmVyYXRlZCA9IDA7CiAgICAgICAgQXN0U3RhdGVtZW50
Ojpwb29sID0gcG9vbF87CiAgICAgICAgQXN0U3RhdGVtZW50Ojppc19yZWFjaGFibGUgPSBmYWxz
ZTsKICAgICAgICBBc3RTdGF0ZW1lbnQ6OmNhbl9jb21wbGV0ZV9ub3JtYWxseSA9IGZhbHNlOwog
ICAgICAgIEFzdFN0YXRlbWVudDo6ZGVmaW5lZF92YXJpYWJsZXMgPSBfX251bGwgOwogICAgfQoK
ICAgIHZpcnR1YWwgfkFzdFRocm93U3RhdGVtZW50KCk7CgoKCgoKCiAgICB2aXJ0dWFsIEFzdCAq
Q2xvbmUoU3RvcmFnZVBvb2wgKik7CgogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXgg
TGVmdFRva2VuKCkKICAgIHsKICAgICAgICByZXR1cm4gdGhyb3dfdG9rZW47CiAgICB9CiAgICB2
aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBSaWdodFRva2VuKCkgeyByZXR1cm4gc2VtaWNv
bG9uX3Rva2VuOyB9Cn07CgoKIAogCiAKY2xhc3MgQXN0U3luY2hyb25pemVkU3RhdGVtZW50IDog
cHVibGljIEFzdFN0YXRlbWVudAp7CnB1YmxpYzoKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBz
eW5jaHJvbml6ZWRfdG9rZW47CiAgICBBc3RFeHByZXNzaW9uICpleHByZXNzaW9uOwogICAgQXN0
QmxvY2sgKmJsb2NrOwoKICAgIEFzdFN5bmNocm9uaXplZFN0YXRlbWVudChTdG9yYWdlUG9vbCAq
cG9vbF8pCiAgICB7CiAgICAgICAgQXN0OjpraW5kID0gQXN0OjpTWU5DSFJPTklaRURfU1RBVEVN
RU5UOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpTVEFURU1FTlQ7CiAgICAgICAgQXN0
OjpnZW5lcmF0ZWQgPSAwOwogICAgICAgIEFzdFN0YXRlbWVudDo6cG9vbCA9IHBvb2xfOwogICAg
ICAgIEFzdFN0YXRlbWVudDo6aXNfcmVhY2hhYmxlID0gZmFsc2U7CiAgICAgICAgQXN0U3RhdGVt
ZW50OjpjYW5fY29tcGxldGVfbm9ybWFsbHkgPSBmYWxzZTsKICAgICAgICBBc3RTdGF0ZW1lbnQ6
OmRlZmluZWRfdmFyaWFibGVzID0gX19udWxsIDsKICAgIH0KCiAgICB2aXJ0dWFsIH5Bc3RTeW5j
aHJvbml6ZWRTdGF0ZW1lbnQoKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0ICpDbG9uZShTdG9yYWdl
UG9vbCAqKTsKCiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4oKQog
ICAgewogICAgICAgIHJldHVybiBzeW5jaHJvbml6ZWRfdG9rZW47CiAgICB9CiAgICB2aXJ0dWFs
IExleFN0cmVhbTo6VG9rZW5JbmRleCBSaWdodFRva2VuKCkgeyByZXR1cm4gYmxvY2sgLT4gUmln
aHRUb2tlbigpOyB9Cn07CgoKIAogCiAKY2xhc3MgQXN0Q2F0Y2hDbGF1c2UgOiBwdWJsaWMgQXN0
CnsKcHVibGljOgogICAgVmFyaWFibGVTeW1ib2wgKnBhcmFtZXRlcl9zeW1ib2w7CgogICAgTGV4
U3RyZWFtOjpUb2tlbkluZGV4IGNhdGNoX3Rva2VuOwogICAgQXN0Rm9ybWFsUGFyYW1ldGVyICpm
b3JtYWxfcGFyYW1ldGVyOwogICAgQXN0QmxvY2sgKmJsb2NrOwoKICAgIEFzdENhdGNoQ2xhdXNl
KCkgOiBwYXJhbWV0ZXJfc3ltYm9sKF9fbnVsbCApCiAgICB7CiAgICAgICAgQXN0OjpraW5kID0g
QXN0OjpDQVRDSDsKICAgICAgICBBc3Q6OmNsYXNzX3RhZyA9IEFzdDo6Tk9fVEFHOwogICAgICAg
IEFzdDo6Z2VuZXJhdGVkID0gMDsKICAgIH0KCiAgICB2aXJ0dWFsIH5Bc3RDYXRjaENsYXVzZSgp
OwoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29sICopOwoKICAgIHZpcnR1
YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigpIHsgcmV0dXJuIGNhdGNoX3Rva2Vu
OyB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBSaWdodFRva2VuKCkgeyByZXR1
cm4gYmxvY2sgLT4gUmlnaHRUb2tlbigpOyB9Cn07CgoKIAogCiAKY2xhc3MgQXN0RmluYWxseUNs
YXVzZSA6IHB1YmxpYyBBc3QKewpwdWJsaWM6CiAgICBMZXhTdHJlYW06OlRva2VuSW5kZXggZmlu
YWxseV90b2tlbjsKICAgIEFzdEJsb2NrICpibG9jazsKCiAgICBBc3RGaW5hbGx5Q2xhdXNlKCkK
ICAgIHsKICAgICAgICBBc3Q6OmtpbmQgPSBBc3Q6OkZJTkFMTFk7CiAgICAgICAgQXN0OjpjbGFz
c190YWcgPSBBc3Q6Ok5PX1RBRzsKICAgICAgICBBc3Q6OmdlbmVyYXRlZCA9IDA7CiAgICB9Cgog
ICAgdmlydHVhbCB+QXN0RmluYWxseUNsYXVzZSgpOwoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNs
b25lKFN0b3JhZ2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExl
ZnRUb2tlbigpIHsgcmV0dXJuIGZpbmFsbHlfdG9rZW47IH0KICAgIHZpcnR1YWwgTGV4U3RyZWFt
OjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVybiBibG9jayAtPiBSaWdodFRva2VuKCk7
IH0KfTsKCgogCiAKIApjbGFzcyBBc3RUcnlTdGF0ZW1lbnQgOiBwdWJsaWMgQXN0U3RhdGVtZW50
CnsKcHJpdmF0ZToKCiAgICBBc3RBcnJheTxBc3RDYXRjaENsYXVzZSAqPiAqY2F0Y2hfY2xhdXNl
czsKCnB1YmxpYzoKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCB0cnlfdG9rZW47CiAgICBBc3RC
bG9jayAqYmxvY2s7CiAgICBBc3RGaW5hbGx5Q2xhdXNlICpmaW5hbGx5X2NsYXVzZV9vcHQ7Cgog
ICAgQXN0VHJ5U3RhdGVtZW50KFN0b3JhZ2VQb29sICpwb29sXykgOiBjYXRjaF9jbGF1c2VzKF9f
bnVsbCApCiAgICB7CiAgICAgICAgQXN0OjpraW5kID0gQXN0OjpUUlk7CiAgICAgICAgQXN0Ojpj
bGFzc190YWcgPSBBc3Q6OlNUQVRFTUVOVDsKICAgICAgICBBc3Q6OmdlbmVyYXRlZCA9IDA7CiAg
ICAgICAgQXN0U3RhdGVtZW50Ojpwb29sID0gcG9vbF87CiAgICAgICAgQXN0U3RhdGVtZW50Ojpp
c19yZWFjaGFibGUgPSBmYWxzZTsKICAgICAgICBBc3RTdGF0ZW1lbnQ6OmNhbl9jb21wbGV0ZV9u
b3JtYWxseSA9IGZhbHNlOwogICAgICAgIEFzdFN0YXRlbWVudDo6ZGVmaW5lZF92YXJpYWJsZXMg
PSBfX251bGwgOwogICAgfQoKICAgIHZpcnR1YWwgfkFzdFRyeVN0YXRlbWVudCgpOwoKICAgIGlu
bGluZSBBc3RDYXRjaENsYXVzZSAqJkNhdGNoQ2xhdXNlKGludCBpKSB7IHJldHVybiAoKmNhdGNo
X2NsYXVzZXMpW2ldOyB9CiAgICBpbmxpbmUgaW50IE51bUNhdGNoQ2xhdXNlcygpIHsgcmV0dXJu
IChjYXRjaF9jbGF1c2VzID8gY2F0Y2hfY2xhdXNlcyAtPiBMZW5ndGgoKSA6IDApOyB9CiAgICBp
bmxpbmUgdm9pZCBBbGxvY2F0ZUNhdGNoQ2xhdXNlcyhpbnQgZXN0aW1hdGUgPSAwKTsKICAgIGlu
bGluZSB2b2lkIEFkZENhdGNoQ2xhdXNlKEFzdENhdGNoQ2xhdXNlICopOwoKCgoKCgogICAgdmly
dHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpU
b2tlbkluZGV4IExlZnRUb2tlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIHRyeV90b2tlbjsKICAg
IH0KICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKQogICAgewog
ICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgIHJldHVybiAoZmluYWxseV9jbGF1
c2Vfb3B0ID8gZmluYWxseV9jbGF1c2Vfb3B0IC0+IFJpZ2h0VG9rZW4oKSA6IENhdGNoQ2xhdXNl
KE51bUNhdGNoQ2xhdXNlcygpIC0gMSkgLT4gUmlnaHRUb2tlbigpKTsKICAgIH0KfTsKCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAog
CiAKY2xhc3MgQXN0SW50ZWdlckxpdGVyYWwgOiBwdWJsaWMgQXN0RXhwcmVzc2lvbgp7CnB1Ymxp
YzoKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBpbnRlZ2VyX2xpdGVyYWxfdG9rZW47CgogICAg
QXN0SW50ZWdlckxpdGVyYWwoTGV4U3RyZWFtOjpUb2tlbkluZGV4IHRva2VuXykgOiBpbnRlZ2Vy
X2xpdGVyYWxfdG9rZW4odG9rZW5fKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6SU5U
RUdFUl9MSVRFUkFMOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpFWFBSRVNTSU9OOwog
ICAgICAgIEFzdDo6Z2VuZXJhdGVkID0gMDsKICAgICAgICBBc3RFeHByZXNzaW9uOjp2YWx1ZSA9
IF9fbnVsbCA7CiAgICAgICAgQXN0RXhwcmVzc2lvbjo6c3ltYm9sID0gX19udWxsIDsKICAgIH0K
CiAgICB2aXJ0dWFsIH5Bc3RJbnRlZ2VyTGl0ZXJhbCgpOwoKCgoKCgogICAgdmlydHVhbCBBc3Qg
KkNsb25lKFN0b3JhZ2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4
IExlZnRUb2tlbigpICB7IHJldHVybiBpbnRlZ2VyX2xpdGVyYWxfdG9rZW47IH0KICAgIHZpcnR1
YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVybiBpbnRlZ2VyX2xp
dGVyYWxfdG9rZW47IH0KfTsKCgogCiAKIApjbGFzcyBBc3RMb25nTGl0ZXJhbCA6IHB1YmxpYyBB
c3RFeHByZXNzaW9uCnsKcHVibGljOgogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IGxvbmdfbGl0
ZXJhbF90b2tlbjsKCiAgICBBc3RMb25nTGl0ZXJhbChMZXhTdHJlYW06OlRva2VuSW5kZXggdG9r
ZW5fKSA6IGxvbmdfbGl0ZXJhbF90b2tlbih0b2tlbl8pCiAgICB7CiAgICAgICAgQXN0OjpraW5k
ID0gQXN0OjpMT05HX0xJVEVSQUw7CiAgICAgICAgQXN0OjpjbGFzc190YWcgPSBBc3Q6OkVYUFJF
U1NJT047CiAgICAgICAgQXN0OjpnZW5lcmF0ZWQgPSAwOwogICAgICAgIEFzdEV4cHJlc3Npb246
OnZhbHVlID0gX19udWxsIDsKICAgICAgICBBc3RFeHByZXNzaW9uOjpzeW1ib2wgPSBfX251bGwg
OwogICAgfQoKICAgIHZpcnR1YWwgfkFzdExvbmdMaXRlcmFsKCk7CgoKCgoKCiAgICB2aXJ0dWFs
IEFzdCAqQ2xvbmUoU3RvcmFnZVBvb2wgKik7CgogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2Vu
SW5kZXggTGVmdFRva2VuKCkgIHsgcmV0dXJuIGxvbmdfbGl0ZXJhbF90b2tlbjsgfQogICAgdmly
dHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggUmlnaHRUb2tlbigpIHsgcmV0dXJuIGxvbmdfbGl0
ZXJhbF90b2tlbjsgfQp9OwoKCiAKIAogCmNsYXNzIEFzdEZsb2F0aW5nUG9pbnRMaXRlcmFsIDog
cHVibGljIEFzdEV4cHJlc3Npb24KewpwdWJsaWM6CiAgICBMZXhTdHJlYW06OlRva2VuSW5kZXgg
ZmxvYXRpbmdfcG9pbnRfbGl0ZXJhbF90b2tlbjsKCiAgICBBc3RGbG9hdGluZ1BvaW50TGl0ZXJh
bChMZXhTdHJlYW06OlRva2VuSW5kZXggdG9rZW5fKSA6IGZsb2F0aW5nX3BvaW50X2xpdGVyYWxf
dG9rZW4odG9rZW5fKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6RkxPQVRJTkdfUE9J
TlRfTElURVJBTDsKICAgICAgICBBc3Q6OmNsYXNzX3RhZyA9IEFzdDo6RVhQUkVTU0lPTjsKICAg
ICAgICBBc3Q6OmdlbmVyYXRlZCA9IDA7CiAgICAgICAgQXN0RXhwcmVzc2lvbjo6dmFsdWUgPSBf
X251bGwgOwogICAgICAgIEFzdEV4cHJlc3Npb246OnN5bWJvbCA9IF9fbnVsbCA7CiAgICB9Cgog
ICAgdmlydHVhbCB+QXN0RmxvYXRpbmdQb2ludExpdGVyYWwoKTsKCgoKCgoKICAgIHZpcnR1YWwg
QXN0ICpDbG9uZShTdG9yYWdlUG9vbCAqKTsKCiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5J
bmRleCBMZWZ0VG9rZW4oKSAgeyByZXR1cm4gZmxvYXRpbmdfcG9pbnRfbGl0ZXJhbF90b2tlbjsg
fQogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggUmlnaHRUb2tlbigpIHsgcmV0dXJu
IGZsb2F0aW5nX3BvaW50X2xpdGVyYWxfdG9rZW47IH0KfTsKCiAKIAogCmNsYXNzIEFzdERvdWJs
ZUxpdGVyYWwgOiBwdWJsaWMgQXN0RXhwcmVzc2lvbgp7CnB1YmxpYzoKICAgIExleFN0cmVhbTo6
VG9rZW5JbmRleCBkb3VibGVfbGl0ZXJhbF90b2tlbjsKCiAgICBBc3REb3VibGVMaXRlcmFsKExl
eFN0cmVhbTo6VG9rZW5JbmRleCB0b2tlbl8pIDogZG91YmxlX2xpdGVyYWxfdG9rZW4odG9rZW5f
KQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6RE9VQkxFX0xJVEVSQUw7CiAgICAgICAg
QXN0OjpjbGFzc190YWcgPSBBc3Q6OkVYUFJFU1NJT047CiAgICAgICAgQXN0OjpnZW5lcmF0ZWQg
PSAwOwogICAgICAgIEFzdEV4cHJlc3Npb246OnZhbHVlID0gX19udWxsIDsKICAgICAgICBBc3RF
eHByZXNzaW9uOjpzeW1ib2wgPSBfX251bGwgOwogICAgfQoKICAgIHZpcnR1YWwgfkFzdERvdWJs
ZUxpdGVyYWwoKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0ICpDbG9uZShTdG9yYWdlUG9vbCAqKTsK
CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4oKSAgeyByZXR1cm4g
ZG91YmxlX2xpdGVyYWxfdG9rZW47IH0KICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4
IFJpZ2h0VG9rZW4oKSB7IHJldHVybiBkb3VibGVfbGl0ZXJhbF90b2tlbjsgfQp9OwoKIAogCiAK
Y2xhc3MgQXN0VHJ1ZUxpdGVyYWwgOiBwdWJsaWMgQXN0RXhwcmVzc2lvbgp7CnB1YmxpYzoKICAg
IExleFN0cmVhbTo6VG9rZW5JbmRleCB0cnVlX2xpdGVyYWxfdG9rZW47CgogICAgQXN0VHJ1ZUxp
dGVyYWwoTGV4U3RyZWFtOjpUb2tlbkluZGV4IHRva2VuXykgOiB0cnVlX2xpdGVyYWxfdG9rZW4o
dG9rZW5fKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6VFJVRV9MSVRFUkFMOwogICAg
ICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpFWFBSRVNTSU9OOwogICAgICAgIEFzdDo6Z2VuZXJh
dGVkID0gMDsKICAgICAgICBBc3RFeHByZXNzaW9uOjp2YWx1ZSA9IF9fbnVsbCA7CiAgICAgICAg
QXN0RXhwcmVzc2lvbjo6c3ltYm9sID0gX19udWxsIDsKICAgIH0KCiAgICB2aXJ0dWFsIH5Bc3RU
cnVlTGl0ZXJhbCgpOwoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29sICop
OwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigpICB7IHJldHVy
biB0cnVlX2xpdGVyYWxfdG9rZW47IH0KICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4
IFJpZ2h0VG9rZW4oKSB7IHJldHVybiB0cnVlX2xpdGVyYWxfdG9rZW47IH0KfTsKCiAKIAogCmNs
YXNzIEFzdEZhbHNlTGl0ZXJhbCA6IHB1YmxpYyBBc3RFeHByZXNzaW9uCnsKcHVibGljOgogICAg
TGV4U3RyZWFtOjpUb2tlbkluZGV4IGZhbHNlX2xpdGVyYWxfdG9rZW47CgogICAgQXN0RmFsc2VM
aXRlcmFsKExleFN0cmVhbTo6VG9rZW5JbmRleCB0b2tlbl8pIDogZmFsc2VfbGl0ZXJhbF90b2tl
bih0b2tlbl8pCiAgICB7CiAgICAgICAgQXN0OjpraW5kID0gQXN0OjpGQUxTRV9MSVRFUkFMOwog
ICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpFWFBSRVNTSU9OOwogICAgICAgIEFzdDo6Z2Vu
ZXJhdGVkID0gMDsKICAgICAgICBBc3RFeHByZXNzaW9uOjp2YWx1ZSA9IF9fbnVsbCA7CiAgICAg
ICAgQXN0RXhwcmVzc2lvbjo6c3ltYm9sID0gX19udWxsIDsKICAgIH0KCiAgICB2aXJ0dWFsIH5B
c3RGYWxzZUxpdGVyYWwoKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0ICpDbG9uZShTdG9yYWdlUG9v
bCAqKTsKCiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4oKSAgeyBy
ZXR1cm4gZmFsc2VfbGl0ZXJhbF90b2tlbjsgfQogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2Vu
SW5kZXggUmlnaHRUb2tlbigpIHsgcmV0dXJuIGZhbHNlX2xpdGVyYWxfdG9rZW47IH0KfTsKCiAK
IAogCmNsYXNzIEFzdFN0cmluZ0xpdGVyYWwgOiBwdWJsaWMgQXN0RXhwcmVzc2lvbgp7CnB1Ymxp
YzoKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBzdHJpbmdfbGl0ZXJhbF90b2tlbjsKCiAgICBB
c3RTdHJpbmdMaXRlcmFsKExleFN0cmVhbTo6VG9rZW5JbmRleCB0b2tlbl8pIDogc3RyaW5nX2xp
dGVyYWxfdG9rZW4odG9rZW5fKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6U1RSSU5H
X0xJVEVSQUw7CiAgICAgICAgQXN0OjpjbGFzc190YWcgPSBBc3Q6OkVYUFJFU1NJT047CiAgICAg
ICAgQXN0OjpnZW5lcmF0ZWQgPSAwOwogICAgICAgIEFzdEV4cHJlc3Npb246OnZhbHVlID0gX19u
dWxsIDsKICAgICAgICBBc3RFeHByZXNzaW9uOjpzeW1ib2wgPSBfX251bGwgOwogICAgfQoKICAg
IHZpcnR1YWwgfkFzdFN0cmluZ0xpdGVyYWwoKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0ICpDbG9u
ZShTdG9yYWdlUG9vbCAqKTsKCiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0
VG9rZW4oKSAgeyByZXR1cm4gc3RyaW5nX2xpdGVyYWxfdG9rZW47IH0KICAgIHZpcnR1YWwgTGV4
U3RyZWFtOjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVybiBzdHJpbmdfbGl0ZXJhbF90
b2tlbjsgfQp9OwoKIAogCiAKY2xhc3MgQXN0Q2hhcmFjdGVyTGl0ZXJhbCA6IHB1YmxpYyBBc3RF
eHByZXNzaW9uCnsKcHVibGljOgogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IGNoYXJhY3Rlcl9s
aXRlcmFsX3Rva2VuOwoKICAgIEFzdENoYXJhY3RlckxpdGVyYWwoTGV4U3RyZWFtOjpUb2tlbklu
ZGV4IHRva2VuXykgOiBjaGFyYWN0ZXJfbGl0ZXJhbF90b2tlbih0b2tlbl8pCiAgICB7CiAgICAg
ICAgQXN0OjpraW5kID0gQXN0OjpDSEFSQUNURVJfTElURVJBTDsKICAgICAgICBBc3Q6OmNsYXNz
X3RhZyA9IEFzdDo6RVhQUkVTU0lPTjsKICAgICAgICBBc3Q6OmdlbmVyYXRlZCA9IDA7CiAgICAg
ICAgQXN0RXhwcmVzc2lvbjo6dmFsdWUgPSBfX251bGwgOwogICAgICAgIEFzdEV4cHJlc3Npb246
OnN5bWJvbCA9IF9fbnVsbCA7CiAgICB9CgogICAgdmlydHVhbCB+QXN0Q2hhcmFjdGVyTGl0ZXJh
bCgpOwoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29sICopOwoKICAgIHZp
cnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigpICB7IHJldHVybiBjaGFyYWN0
ZXJfbGl0ZXJhbF90b2tlbjsgfQogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggUmln
aHRUb2tlbigpIHsgcmV0dXJuIGNoYXJhY3Rlcl9saXRlcmFsX3Rva2VuOyB9Cn07CgogCiAKIApj
bGFzcyBBc3ROdWxsTGl0ZXJhbCA6IHB1YmxpYyBBc3RFeHByZXNzaW9uCnsKcHVibGljOgogICAg
TGV4U3RyZWFtOjpUb2tlbkluZGV4IG51bGxfdG9rZW47CgogICAgQXN0TnVsbExpdGVyYWwoTGV4
U3RyZWFtOjpUb2tlbkluZGV4IHRva2VuXykgOiBudWxsX3Rva2VuKHRva2VuXykKICAgIHsKICAg
ICAgICBBc3Q6OmtpbmQgPSBBc3Q6Ok5VTExfTElURVJBTDsKICAgICAgICBBc3Q6OmNsYXNzX3Rh
ZyA9IEFzdDo6RVhQUkVTU0lPTjsKICAgICAgICBBc3Q6OmdlbmVyYXRlZCA9IDA7CiAgICAgICAg
QXN0RXhwcmVzc2lvbjo6dmFsdWUgPSBfX251bGwgOwogICAgICAgIEFzdEV4cHJlc3Npb246OnN5
bWJvbCA9IF9fbnVsbCA7CiAgICB9CgogICAgdmlydHVhbCB+QXN0TnVsbExpdGVyYWwoKTsKCgoK
CgoKICAgIHZpcnR1YWwgQXN0ICpDbG9uZShTdG9yYWdlUG9vbCAqKTsKCiAgICB2aXJ0dWFsIExl
eFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4oKSAgeyByZXR1cm4gbnVsbF90b2tlbjsgfQog
ICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggUmlnaHRUb2tlbigpIHsgcmV0dXJuIG51
bGxfdG9rZW47IH0KfTsKCiAKIAogCmNsYXNzIEFzdFRoaXNFeHByZXNzaW9uIDogcHVibGljIEFz
dEV4cHJlc3Npb24KewpwdWJsaWM6CiAgICBMZXhTdHJlYW06OlRva2VuSW5kZXggdGhpc190b2tl
bjsKCiAgICBBc3RUaGlzRXhwcmVzc2lvbihMZXhTdHJlYW06OlRva2VuSW5kZXggdG9rZW5fKSA6
IHRoaXNfdG9rZW4odG9rZW5fKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6VEhJU19F
WFBSRVNTSU9OOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpFWFBSRVNTSU9OOwogICAg
ICAgIEFzdDo6Z2VuZXJhdGVkID0gMDsKICAgICAgICBBc3RFeHByZXNzaW9uOjp2YWx1ZSA9IF9f
bnVsbCA7CiAgICAgICAgQXN0RXhwcmVzc2lvbjo6c3ltYm9sID0gX19udWxsIDsKICAgIH0KCiAg
ICB2aXJ0dWFsIH5Bc3RUaGlzRXhwcmVzc2lvbigpOwoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNs
b25lKFN0b3JhZ2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExl
ZnRUb2tlbigpICB7IHJldHVybiB0aGlzX3Rva2VuOyB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6
VG9rZW5JbmRleCBSaWdodFRva2VuKCkgeyByZXR1cm4gdGhpc190b2tlbjsgfQp9OwoKCiAKIAog
CmNsYXNzIEFzdFN1cGVyRXhwcmVzc2lvbiA6IHB1YmxpYyBBc3RFeHByZXNzaW9uCnsKcHVibGlj
OgogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IHN1cGVyX3Rva2VuOwoKICAgIEFzdFN1cGVyRXhw
cmVzc2lvbihMZXhTdHJlYW06OlRva2VuSW5kZXggdG9rZW5fKSA6IHN1cGVyX3Rva2VuKHRva2Vu
XykKICAgIHsKICAgICAgICBBc3Q6OmtpbmQgPSBBc3Q6OlNVUEVSX0VYUFJFU1NJT047CiAgICAg
ICAgQXN0OjpjbGFzc190YWcgPSBBc3Q6OkVYUFJFU1NJT047CiAgICAgICAgQXN0OjpnZW5lcmF0
ZWQgPSAwOwogICAgICAgIEFzdEV4cHJlc3Npb246OnZhbHVlID0gX19udWxsIDsKICAgICAgICBB
c3RFeHByZXNzaW9uOjpzeW1ib2wgPSBfX251bGwgOwogICAgfQoKICAgIHZpcnR1YWwgfkFzdFN1
cGVyRXhwcmVzc2lvbigpOwoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29s
ICopOwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigpICB7IHJl
dHVybiBzdXBlcl90b2tlbjsgfQogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggUmln
aHRUb2tlbigpIHsgcmV0dXJuIHN1cGVyX3Rva2VuOyB9Cn07CgoKIAogCiAKY2xhc3MgQXN0UGFy
ZW50aGVzaXplZEV4cHJlc3Npb24gOiBwdWJsaWMgQXN0RXhwcmVzc2lvbgp7CnB1YmxpYzoKICAg
IExleFN0cmVhbTo6VG9rZW5JbmRleCBsZWZ0X3BhcmVudGhlc2lzX3Rva2VuOwogICAgQXN0RXhw
cmVzc2lvbiAqZXhwcmVzc2lvbjsKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCByaWdodF9wYXJl
bnRoZXNpc190b2tlbjsKCiAgICBBc3RQYXJlbnRoZXNpemVkRXhwcmVzc2lvbigpCiAgICB7CiAg
ICAgICAgQXN0OjpraW5kID0gQXN0OjpQQVJFTlRIRVNJWkVEX0VYUFJFU1NJT047CiAgICAgICAg
QXN0OjpjbGFzc190YWcgPSBBc3Q6OkVYUFJFU1NJT047CiAgICAgICAgQXN0OjpnZW5lcmF0ZWQg
PSAwOwogICAgICAgIEFzdEV4cHJlc3Npb246OnZhbHVlID0gX19udWxsIDsKICAgICAgICBBc3RF
eHByZXNzaW9uOjpzeW1ib2wgPSBfX251bGwgOwogICAgfQoKICAgIHZpcnR1YWwgfkFzdFBhcmVu
dGhlc2l6ZWRFeHByZXNzaW9uKCk7CgoKCgoKCiAgICB2aXJ0dWFsIEFzdCAqQ2xvbmUoU3RvcmFn
ZVBvb2wgKik7CgogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggTGVmdFRva2VuKCkg
IHsgcmV0dXJuIGxlZnRfcGFyZW50aGVzaXNfdG9rZW47IH0KICAgIHZpcnR1YWwgTGV4U3RyZWFt
OjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVybiByaWdodF9wYXJlbnRoZXNpc190b2tl
bjsgfQp9OwoKCiAKIAogCmNsYXNzIEFzdFR5cGVFeHByZXNzaW9uIDogcHVibGljIEFzdEV4cHJl
c3Npb24KewpwdWJsaWM6CiAgICBBc3QgKnR5cGU7CgogICAgQXN0VHlwZUV4cHJlc3Npb24oQXN0
ICp0eXBlXykgOiB0eXBlKHR5cGVfKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6VFlQ
RTsKICAgICAgICBBc3Q6OmNsYXNzX3RhZyA9IEFzdDo6RVhQUkVTU0lPTjsKICAgICAgICBBc3Q6
OmdlbmVyYXRlZCA9IDA7CiAgICAgICAgQXN0RXhwcmVzc2lvbjo6dmFsdWUgPSBfX251bGwgOwog
ICAgICAgIEFzdEV4cHJlc3Npb246OnN5bWJvbCA9IF9fbnVsbCA7CiAgICB9CgogICAgdmlydHVh
bCB+QXN0VHlwZUV4cHJlc3Npb24oKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0ICpDbG9uZShTdG9y
YWdlUG9vbCAqKTsKCiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4o
KSAgeyByZXR1cm4gdHlwZSAtPiBMZWZ0VG9rZW4oKTsgfQogICAgdmlydHVhbCBMZXhTdHJlYW06
OlRva2VuSW5kZXggUmlnaHRUb2tlbigpIHsgcmV0dXJuIHR5cGUgLT4gUmlnaHRUb2tlbigpOyB9
Cn07CgoKIAogCiAKIAogCiAKIApjbGFzcyBBc3RDbGFzc0luc3RhbmNlQ3JlYXRpb25FeHByZXNz
aW9uIDogcHVibGljIEFzdEV4cHJlc3Npb24Kewpwcml2YXRlOgoKICAgIFN0b3JhZ2VQb29sICpw
b29sOwogICAgQXN0QXJyYXk8QXN0RXhwcmVzc2lvbiAqPiAqYXJndW1lbnRzOwogICAgQXN0QXJy
YXk8QXN0RXhwcmVzc2lvbiAqPiAqbG9jYWxfYXJndW1lbnRzX29wdDsgIAoKICAgIGJvb2wgYWRk
X251bGxfYXJndW1lbnQ7CgpwdWJsaWM6CiAgICBBc3RFeHByZXNzaW9uICpiYXNlX29wdDsKICAg
IExleFN0cmVhbTo6VG9rZW5JbmRleCBkb3RfdG9rZW5fb3B0OwogICAgTGV4U3RyZWFtOjpUb2tl
bkluZGV4IG5ld190b2tlbjsKICAgIEFzdFR5cGVFeHByZXNzaW9uICpjbGFzc190eXBlOwogICAg
TGV4U3RyZWFtOjpUb2tlbkluZGV4IGxlZnRfcGFyZW50aGVzaXNfdG9rZW47CiAgICBMZXhTdHJl
YW06OlRva2VuSW5kZXggcmlnaHRfcGFyZW50aGVzaXNfdG9rZW47CiAgICBBc3RDbGFzc0JvZHkg
KmNsYXNzX2JvZHlfb3B0OwoKICAgIEFzdENsYXNzSW5zdGFuY2VDcmVhdGlvbkV4cHJlc3Npb24o
U3RvcmFnZVBvb2wgKnBvb2xfKSA6IHBvb2wocG9vbF8pLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzKF9fbnVsbCAp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jYWxfYXJndW1lbnRzX29wdChfX251bGwgKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9udWxsX2FyZ3VtZW50
KGZhbHNlKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6Q0xBU1NfQ1JFQVRJT047CiAg
ICAgICAgQXN0OjpjbGFzc190YWcgPSBBc3Q6OkVYUFJFU1NJT047CiAgICAgICAgQXN0OjpnZW5l
cmF0ZWQgPSAwOwogICAgICAgIEFzdEV4cHJlc3Npb246OnZhbHVlID0gX19udWxsIDsKICAgICAg
ICBBc3RFeHByZXNzaW9uOjpzeW1ib2wgPSBfX251bGwgOwogICAgfQoKICAgIHZpcnR1YWwgfkFz
dENsYXNzSW5zdGFuY2VDcmVhdGlvbkV4cHJlc3Npb24oKTsKCiAgICBpbmxpbmUgQXN0RXhwcmVz
c2lvbiAqJkFyZ3VtZW50KGludCBpKSB7IHJldHVybiAoKmFyZ3VtZW50cylbaV07IH0KICAgIGlu
bGluZSBpbnQgTnVtQXJndW1lbnRzKCkgeyByZXR1cm4gKGFyZ3VtZW50cyA/IGFyZ3VtZW50cyAt
PiBMZW5ndGgoKSA6IDApOyB9CiAgICBpbmxpbmUgdm9pZCBBbGxvY2F0ZUFyZ3VtZW50cyhpbnQg
ZXN0aW1hdGUgPSAwKTsKICAgIGlubGluZSB2b2lkIEFkZEFyZ3VtZW50KEFzdEV4cHJlc3Npb24g
Kik7CgogICAgaW5saW5lIEFzdEV4cHJlc3Npb24gKiZMb2NhbEFyZ3VtZW50KGludCBpKSB7IHJl
dHVybiAoKmxvY2FsX2FyZ3VtZW50c19vcHQpW2ldOyB9CiAgICBpbmxpbmUgaW50IE51bUxvY2Fs
QXJndW1lbnRzKCkgeyByZXR1cm4gKGxvY2FsX2FyZ3VtZW50c19vcHQgPyBsb2NhbF9hcmd1bWVu
dHNfb3B0IC0+IExlbmd0aCgpIDogMCk7IH0KICAgIGlubGluZSB2b2lkIEFsbG9jYXRlTG9jYWxB
cmd1bWVudHMoaW50IGVzdGltYXRlID0gMCk7CiAgICBpbmxpbmUgdm9pZCBBZGRMb2NhbEFyZ3Vt
ZW50KEFzdEV4cHJlc3Npb24gKik7CgogICAgaW5saW5lIHZvaWQgQWRkTnVsbEFyZ3VtZW50KCkg
eyBhZGRfbnVsbF9hcmd1bWVudCA9IHRydWU7IH0KICAgIGlubGluZSBib29sIE5lZWRzRXh0cmFO
dWxsQXJndW1lbnQoKSB7IHJldHVybiBhZGRfbnVsbF9hcmd1bWVudDsgfQoKCgoKCgogICAgdmly
dHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpU
b2tlbkluZGV4IExlZnRUb2tlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIChiYXNlX29wdCA/IGJh
c2Vfb3B0IC0+IExlZnRUb2tlbigpIDogbmV3X3Rva2VuKTsKICAgIH0KICAgIHZpcnR1YWwgTGV4
U3RyZWFtOjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVybiAoY2xhc3NfYm9keV9vcHQg
PyBjbGFzc19ib2R5X29wdCAtPiBSaWdodFRva2VuKCkgOiByaWdodF9wYXJlbnRoZXNpc190b2tl
bik7IH0KfTsKCgogCiAKIApjbGFzcyBBc3REaW1FeHByIDogcHVibGljIEFzdAp7CnB1YmxpYzoK
ICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBsZWZ0X2JyYWNrZXRfdG9rZW47CiAgICBBc3RFeHBy
ZXNzaW9uICpleHByZXNzaW9uOwogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IHJpZ2h0X2JyYWNr
ZXRfdG9rZW47CgogICAgQXN0RGltRXhwcigpCiAgICB7CiAgICAgICAgQXN0OjpraW5kID0gQXN0
OjpESU07CiAgICAgICAgQXN0OjpjbGFzc190YWcgPSBBc3Q6Ok5PX1RBRzsKICAgICAgICBBc3Q6
OmdlbmVyYXRlZCA9IDA7CiAgICB9CgogICAgdmlydHVhbCB+QXN0RGltRXhwcigpOwoKCgoKCgog
ICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4U3Ry
ZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigpICB7IHJldHVybiBsZWZ0X2JyYWNrZXRfdG9rZW47
IH0KICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVy
biByaWdodF9icmFja2V0X3Rva2VuOyB9Cn07CgoKIAogCiAKY2xhc3MgQXN0QXJyYXlDcmVhdGlv
bkV4cHJlc3Npb24gOiBwdWJsaWMgQXN0RXhwcmVzc2lvbgp7CnByaXZhdGU6CgogICAgU3RvcmFn
ZVBvb2wgKnBvb2w7CiAgICBBc3RBcnJheTxBc3RCcmFja2V0cyAqPiAqYnJhY2tldHM7CiAgICBB
c3RBcnJheTxBc3REaW1FeHByICo+ICpkaW1fZXhwcnM7CgpwdWJsaWM6CiAgICBMZXhTdHJlYW06
OlRva2VuSW5kZXggbmV3X3Rva2VuOwogICAgQXN0ICphcnJheV90eXBlOwogICAgQXN0QXJyYXlJ
bml0aWFsaXplciAqYXJyYXlfaW5pdGlhbGl6ZXJfb3B0OwoKICAgIEFzdEFycmF5Q3JlYXRpb25F
eHByZXNzaW9uKFN0b3JhZ2VQb29sICpwb29sXykgOiBwb29sKHBvb2xfKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFja2V0cyhfX251bGwg
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aW1fZXhwcnMoX19udWxsICkKICAgIHsKICAgICAgICBBc3Q6OmtpbmQgPSBBc3Q6OkFSUkFZX0NS
RUFUSU9OOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpFWFBSRVNTSU9OOwogICAgICAg
IEFzdDo6Z2VuZXJhdGVkID0gMDsKICAgICAgICBBc3RFeHByZXNzaW9uOjp2YWx1ZSA9IF9fbnVs
bCA7CiAgICAgICAgQXN0RXhwcmVzc2lvbjo6c3ltYm9sID0gX19udWxsIDsKICAgIH0KCiAgICB2
aXJ0dWFsIH5Bc3RBcnJheUNyZWF0aW9uRXhwcmVzc2lvbigpOwoKICAgIGlubGluZSBBc3RCcmFj
a2V0cyAqJkJyYWNrZXRzKGludCBpKSB7IHJldHVybiAoKmJyYWNrZXRzKVtpXTsgfQogICAgaW5s
aW5lIGludCBOdW1CcmFja2V0cygpIHsgcmV0dXJuIChicmFja2V0cyA/IGJyYWNrZXRzIC0+IExl
bmd0aCgpIDogMCk7IH0KICAgIGlubGluZSB2b2lkIEFsbG9jYXRlQnJhY2tldHMoaW50IGVzdGlt
YXRlID0gMCk7CiAgICBpbmxpbmUgdm9pZCBBZGRCcmFja2V0cyhBc3RCcmFja2V0cyAqKTsKCiAg
ICBpbmxpbmUgQXN0RGltRXhwciAqJkRpbUV4cHIoaW50IGkpIHsgcmV0dXJuICgqZGltX2V4cHJz
KVtpXTsgfQogICAgaW5saW5lIGludCBOdW1EaW1FeHBycygpIHsgcmV0dXJuIChkaW1fZXhwcnMg
PyBkaW1fZXhwcnMgLT4gTGVuZ3RoKCkgOiAwKTsgfQogICAgaW5saW5lIHZvaWQgQWxsb2NhdGVE
aW1FeHBycyhpbnQgZXN0aW1hdGUgPSAwKTsKICAgIGlubGluZSB2b2lkIEFkZERpbUV4cHIoQXN0
RGltRXhwciAqKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0ICpDbG9uZShTdG9yYWdlUG9vbCAqKTsK
CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBMZWZ0VG9rZW4oKSAgeyByZXR1cm4g
bmV3X3Rva2VuOyB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBSaWdodFRva2Vu
KCkKICAgIHsKICAgICAgICByZXR1cm4gKGFycmF5X2luaXRpYWxpemVyX29wdCA/IGFycmF5X2lu
aXRpYWxpemVyX29wdCAtPiBSaWdodFRva2VuKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IChOdW1CcmFja2V0cygpID4gMCA/IEJyYWNrZXRzKE51bUJyYWNrZXRzKCkg
LSAxKSAtPiBSaWdodFRva2VuKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IERpbUV4cHIoTnVtRGltRXhwcnMoKSAtIDEpIC0+IFJp
Z2h0VG9rZW4oKSkpOwogICAgfQp9OwoKCiAKIAogCiAKIAogCiAKIAogCiAKY2xhc3MgQXN0Rmll
bGRBY2Nlc3MgOiBwdWJsaWMgQXN0RXhwcmVzc2lvbgp7CnB1YmxpYzoKICAgIGVudW0gRmllbGRB
Y2Nlc3NUYWcKICAgIHsKICAgICAgICBOT05FLAogICAgICAgIENMQVNTX1RBRywKICAgICAgICBU
SElTX1RBRywKICAgICAgICBTVVBFUl9UQUcsCgogICAgICAgIF9udW1fa2luZHMKICAgIH07Cgog
ICAgQXN0RXhwcmVzc2lvbiAqYmFzZTsKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBkb3RfdG9r
ZW47CiAgICBMZXhTdHJlYW06OlRva2VuSW5kZXggaWRlbnRpZmllcl90b2tlbjsKCiAgICAgCiAg
ICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAg
CiAgICAgCiAgICAgCiAgICAgCiAgICBBc3RFeHByZXNzaW9uICpyZXNvbHV0aW9uX29wdDsKCiAg
ICBBc3RGaWVsZEFjY2VzcyhGaWVsZEFjY2Vzc1RhZyB0YWcgPSBOT05FKSA6IHJlc29sdXRpb25f
b3B0KF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaWVsZF9hY2Nlc3NfdGFnKHRhZykKICAgIHsKICAgICAgICBBc3Q6OmtpbmQgPSBBc3Q6
OkRPVDsKICAgICAgICBBc3Q6OmNsYXNzX3RhZyA9IEFzdDo6RVhQUkVTU0lPTjsKICAgICAgICBB
c3Q6OmdlbmVyYXRlZCA9IDA7CiAgICAgICAgQXN0RXhwcmVzc2lvbjo6dmFsdWUgPSBfX251bGwg
OwogICAgICAgIEFzdEV4cHJlc3Npb246OnN5bWJvbCA9IF9fbnVsbCA7CiAgICB9CgogICAgdmly
dHVhbCB+QXN0RmllbGRBY2Nlc3MoKTsKCiAgICBib29sIElzTmFtZUFjY2VzcygpICB7IHJldHVy
biBmaWVsZF9hY2Nlc3NfdGFnID09IE5PTkU7IH0KICAgIGJvb2wgSXNUaGlzQWNjZXNzKCkgIHsg
cmV0dXJuIGZpZWxkX2FjY2Vzc190YWcgPT0gVEhJU19UQUc7IH0KICAgIGJvb2wgSXNTdXBlckFj
Y2VzcygpIHsgcmV0dXJuIGZpZWxkX2FjY2Vzc190YWcgPT0gU1VQRVJfVEFHOyB9CiAgICBib29s
IElzQ2xhc3NBY2Nlc3MoKSB7IHJldHVybiBmaWVsZF9hY2Nlc3NfdGFnID09IENMQVNTX1RBRzsg
fQoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29sICopOwoKICAgIHZpcnR1
YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigpICB7IHJldHVybiBiYXNlIC0+IExl
ZnRUb2tlbigpOyB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBSaWdodFRva2Vu
KCkgeyByZXR1cm4gaWRlbnRpZmllcl90b2tlbjsgfQoKcHJpdmF0ZToKICAgIEZpZWxkQWNjZXNz
VGFnIGZpZWxkX2FjY2Vzc190YWc7Cn07CgoKIAogCiAKIAogCiAKY2xhc3MgQXN0TWV0aG9kSW52
b2NhdGlvbiA6IHB1YmxpYyBBc3RFeHByZXNzaW9uCnsKcHJpdmF0ZToKCiAgICBTdG9yYWdlUG9v
bCAqcG9vbDsKICAgIEFzdEFycmF5PEFzdEV4cHJlc3Npb24gKj4gKmFyZ3VtZW50czsKCnB1Ymxp
YzoKICAgIEFzdEV4cHJlc3Npb24gKm1ldGhvZDsKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBs
ZWZ0X3BhcmVudGhlc2lzX3Rva2VuOwogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IHJpZ2h0X3Bh
cmVudGhlc2lzX3Rva2VuOwoKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIEFzdEV4
cHJlc3Npb24gKnJlc29sdXRpb25fb3B0OwoKICAgIEFzdE1ldGhvZEludm9jYXRpb24oU3RvcmFn
ZVBvb2wgKnBvb2xfKSA6IHBvb2wocG9vbF8pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJndW1lbnRzKF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbl9vcHQoX19udWxsICkKICAgIHsK
ICAgICAgICBBc3Q6OmtpbmQgPSBBc3Q6OkNBTEw7CiAgICAgICAgQXN0OjpjbGFzc190YWcgPSBB
c3Q6OkVYUFJFU1NJT047CiAgICAgICAgQXN0OjpnZW5lcmF0ZWQgPSAwOwogICAgICAgIEFzdEV4
cHJlc3Npb246OnZhbHVlID0gX19udWxsIDsKICAgICAgICBBc3RFeHByZXNzaW9uOjpzeW1ib2wg
PSBfX251bGwgOwogICAgfQoKICAgIHZpcnR1YWwgfkFzdE1ldGhvZEludm9jYXRpb24oKTsKCiAg
ICBpbmxpbmUgQXN0RXhwcmVzc2lvbiAqJkFyZ3VtZW50KGludCBpKSB7IHJldHVybiAoKmFyZ3Vt
ZW50cylbaV07IH0KICAgIGlubGluZSBpbnQgTnVtQXJndW1lbnRzKCkgeyByZXR1cm4gKGFyZ3Vt
ZW50cyA/IGFyZ3VtZW50cyAtPiBMZW5ndGgoKSA6IDApOyB9CiAgICBpbmxpbmUgdm9pZCBBbGxv
Y2F0ZUFyZ3VtZW50cyhpbnQgZXN0aW1hdGUgPSAwKTsKICAgIGlubGluZSB2b2lkIEFkZEFyZ3Vt
ZW50KEFzdEV4cHJlc3Npb24gKik7CgoKCgoKCiAgICB2aXJ0dWFsIEFzdCAqQ2xvbmUoU3RvcmFn
ZVBvb2wgKik7CgogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggTGVmdFRva2VuKCkg
eyByZXR1cm4gbWV0aG9kIC0+IExlZnRUb2tlbigpOyB9CiAgICB2aXJ0dWFsIExleFN0cmVhbTo6
VG9rZW5JbmRleCBSaWdodFRva2VuKCkgeyByZXR1cm4gcmlnaHRfcGFyZW50aGVzaXNfdG9rZW47
IH0KfTsKCgogCiAKIApjbGFzcyBBc3RBcnJheUFjY2VzcyA6IHB1YmxpYyBBc3RFeHByZXNzaW9u
CnsKcHVibGljOgogICAgQXN0RXhwcmVzc2lvbiAqYmFzZTsKICAgIExleFN0cmVhbTo6VG9rZW5J
bmRleCBsZWZ0X2JyYWNrZXRfdG9rZW47CiAgICBBc3RFeHByZXNzaW9uICpleHByZXNzaW9uOwog
ICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IHJpZ2h0X2JyYWNrZXRfdG9rZW47CgogICAgQXN0QXJy
YXlBY2Nlc3MoKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6QVJSQVlfQUNDRVNTOwog
ICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpFWFBSRVNTSU9OOwogICAgICAgIEFzdDo6Z2Vu
ZXJhdGVkID0gMDsKICAgICAgICBBc3RFeHByZXNzaW9uOjp2YWx1ZSA9IF9fbnVsbCA7CiAgICAg
ICAgQXN0RXhwcmVzc2lvbjo6c3ltYm9sID0gX19udWxsIDsKICAgIH0KCiAgICB2aXJ0dWFsIH5B
c3RBcnJheUFjY2VzcygpOwoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29s
ICopOwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigpIHsgcmV0
dXJuIGJhc2UgLT4gTGVmdFRva2VuKCk7IH0KICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbklu
ZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVybiByaWdodF9icmFja2V0X3Rva2VuOyB9Cn07CgoKIAog
CiAKIAogCiAKIAogCiAKIAogCmNsYXNzIEFzdFBvc3RVbmFyeUV4cHJlc3Npb24gOiBwdWJsaWMg
QXN0RXhwcmVzc2lvbgp7CnB1YmxpYzoKICAgIGVudW0gUG9zdFVuYXJ5RXhwcmVzc2lvblRhZwog
ICAgewogICAgICAgIE5PTkUsCiAgICAgICAgUExVU1BMVVMsCiAgICAgICAgTUlOVVNNSU5VUywK
CiAgICAgICAgX251bV9raW5kcwogICAgfTsKCiAgICBQb3N0VW5hcnlFeHByZXNzaW9uVGFnIHBv
c3RfdW5hcnlfdGFnOwogICAgQXN0RXhwcmVzc2lvbiAqZXhwcmVzc2lvbjsKICAgIExleFN0cmVh
bTo6VG9rZW5JbmRleCBwb3N0X29wZXJhdG9yX3Rva2VuOwoKICAgICAKICAgICAKICAgICAKICAg
ICAKICAgICAKICAgIE1ldGhvZFN5bWJvbCAqd3JpdGVfbWV0aG9kOwoKICAgIEFzdFBvc3RVbmFy
eUV4cHJlc3Npb24oUG9zdFVuYXJ5RXhwcmVzc2lvblRhZyB0YWdfKSA6IHBvc3RfdW5hcnlfdGFn
KHRhZ18pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd3JpdGVfbWV0aG9kKF9fbnVsbCApCiAgICB7CiAgICAgICAgQXN0OjpraW5kID0g
QXN0OjpQT1NUX1VOQVJZOwogICAgICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpFWFBSRVNTSU9O
OwogICAgICAgIEFzdDo6Z2VuZXJhdGVkID0gMDsKICAgICAgICBBc3RFeHByZXNzaW9uOjp2YWx1
ZSA9IF9fbnVsbCA7CiAgICAgICAgQXN0RXhwcmVzc2lvbjo6c3ltYm9sID0gX19udWxsIDsKICAg
IH0KCiAgICB2aXJ0dWFsIH5Bc3RQb3N0VW5hcnlFeHByZXNzaW9uKCk7CgoKCgoKCiAgICB2aXJ0
dWFsIEFzdCAqQ2xvbmUoU3RvcmFnZVBvb2wgKik7CgogICAgdmlydHVhbCBMZXhTdHJlYW06OlRv
a2VuSW5kZXggTGVmdFRva2VuKCkgIHsgcmV0dXJuIGV4cHJlc3Npb24gLT4gTGVmdFRva2VuKCk7
IH0KICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVy
biBwb3N0X29wZXJhdG9yX3Rva2VuOyB9Cn07CgoKIAogCiAKIAogCiAKIApjbGFzcyBBc3RQcmVV
bmFyeUV4cHJlc3Npb24gOiBwdWJsaWMgQXN0RXhwcmVzc2lvbgp7CnB1YmxpYzoKICAgIGVudW0g
UHJlVW5hcnlFeHByZXNzaW9uVGFnCiAgICB7CiAgICAgICAgTk9ORSwKICAgICAgICBQTFVTUExV
UywKICAgICAgICBNSU5VU01JTlVTLAogICAgICAgIFBMVVMsCiAgICAgICAgTUlOVVMsCiAgICAg
ICAgVFdJRERMRSwKICAgICAgICBOT1QsCgogICAgICAgIF9udW1fa2luZHMKICAgIH07CgogICAg
UHJlVW5hcnlFeHByZXNzaW9uVGFnIHByZV91bmFyeV90YWc7CiAgICBMZXhTdHJlYW06OlRva2Vu
SW5kZXggcHJlX29wZXJhdG9yX3Rva2VuOwogICAgQXN0RXhwcmVzc2lvbiAqZXhwcmVzc2lvbjsK
CiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBNZXRob2RTeW1ib2wgKndyaXRlX21l
dGhvZDsKCiAgICBBc3RQcmVVbmFyeUV4cHJlc3Npb24oUHJlVW5hcnlFeHByZXNzaW9uVGFnIHRh
Z18pIDogcHJlX3VuYXJ5X3RhZyh0YWdfKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV9tZXRob2QoX19udWxsICkKICAgIHsKICAg
ICAgICBBc3Q6OmtpbmQgPSBBc3Q6OlBSRV9VTkFSWTsKICAgICAgICBBc3Q6OmNsYXNzX3RhZyA9
IEFzdDo6RVhQUkVTU0lPTjsKICAgICAgICBBc3Q6OmdlbmVyYXRlZCA9IDA7CiAgICAgICAgQXN0
RXhwcmVzc2lvbjo6dmFsdWUgPSBfX251bGwgOwogICAgICAgIEFzdEV4cHJlc3Npb246OnN5bWJv
bCA9IF9fbnVsbCA7CiAgICB9CgogICAgdmlydHVhbCB+QXN0UHJlVW5hcnlFeHByZXNzaW9uKCk7
CgoKCgoKCiAgICB2aXJ0dWFsIEFzdCAqQ2xvbmUoU3RvcmFnZVBvb2wgKik7CgogICAgdmlydHVh
bCBMZXhTdHJlYW06OlRva2VuSW5kZXggTGVmdFRva2VuKCkgIHsgcmV0dXJuIHByZV9vcGVyYXRv
cl90b2tlbjsgfQogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggUmlnaHRUb2tlbigp
IHsgcmV0dXJuIGV4cHJlc3Npb24gLT4gUmlnaHRUb2tlbigpOyB9Cn07CgoKIAogCiAKIAogCiAK
IAogCiAKY2xhc3MgQXN0Q2FzdEV4cHJlc3Npb24gOiBwdWJsaWMgQXN0RXhwcmVzc2lvbgp7CnBy
aXZhdGU6CgogICAgU3RvcmFnZVBvb2wgKnBvb2w7CiAgICBBc3RBcnJheTxBc3RCcmFja2V0cyAq
PiAqYnJhY2tldHM7CgpwdWJsaWM6CiAgICBMZXhTdHJlYW06OlRva2VuSW5kZXggbGVmdF9wYXJl
bnRoZXNpc190b2tlbl9vcHQ7CiAgICBBc3QgKnR5cGVfb3B0OwogICAgTGV4U3RyZWFtOjpUb2tl
bkluZGV4IHJpZ2h0X3BhcmVudGhlc2lzX3Rva2VuX29wdDsKICAgIEFzdEV4cHJlc3Npb24gKmV4
cHJlc3Npb247CgogICAgQXN0Q2FzdEV4cHJlc3Npb24oU3RvcmFnZVBvb2wgKnBvb2xfKSA6IHBv
b2wocG9vbF8pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
YWNrZXRzKF9fbnVsbCApCiAgICB7CiAgICAgICAgQXN0OjpraW5kID0gQXN0OjpDQVNUOwogICAg
ICAgIEFzdDo6Y2xhc3NfdGFnID0gQXN0OjpFWFBSRVNTSU9OOwogICAgICAgIEFzdDo6Z2VuZXJh
dGVkID0gMDsKICAgICAgICBBc3RFeHByZXNzaW9uOjp2YWx1ZSA9IF9fbnVsbCA7CiAgICAgICAg
QXN0RXhwcmVzc2lvbjo6c3ltYm9sID0gX19udWxsIDsKICAgIH0KCiAgICB2aXJ0dWFsIH5Bc3RD
YXN0RXhwcmVzc2lvbigpOwoKICAgIGlubGluZSBBc3RCcmFja2V0cyAqJkJyYWNrZXRzKGludCBp
KSB7IHJldHVybiAoKmJyYWNrZXRzKVtpXTsgfQogICAgaW5saW5lIGludCBOdW1CcmFja2V0cygp
IHsgcmV0dXJuIChicmFja2V0cyA/IGJyYWNrZXRzIC0+IExlbmd0aCgpIDogMCk7IH0KICAgIGlu
bGluZSB2b2lkIEFsbG9jYXRlQnJhY2tldHMoaW50IGVzdGltYXRlID0gMCk7CiAgICBpbmxpbmUg
dm9pZCBBZGRCcmFja2V0cyhBc3RCcmFja2V0cyAqKTsKCgoKCgoKICAgIHZpcnR1YWwgQXN0ICpD
bG9uZShTdG9yYWdlUG9vbCAqKTsKCiAgICB2aXJ0dWFsIExleFN0cmVhbTo6VG9rZW5JbmRleCBM
ZWZ0VG9rZW4oKQogICAgewogICAgICAgIHJldHVybiAobGVmdF9wYXJlbnRoZXNpc190b2tlbl9v
cHQgPyBsZWZ0X3BhcmVudGhlc2lzX3Rva2VuX29wdCA6IGV4cHJlc3Npb24gLT4gTGVmdFRva2Vu
KCkpOwogICAgfQogICAgdmlydHVhbCBMZXhTdHJlYW06OlRva2VuSW5kZXggUmlnaHRUb2tlbigp
IHsgcmV0dXJuIGV4cHJlc3Npb24gLT4gUmlnaHRUb2tlbigpOyB9Cn07CgoKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIApjbGFzcyBBc3RCaW5hcnlFeHByZXNzaW9uIDogcHVibGljIEFz
dEV4cHJlc3Npb24KewpwdWJsaWM6CiAgICBlbnVtIEJpbmFyeUV4cHJlc3Npb25UYWcKICAgIHsK
ICAgICAgICBOT05FLAogICAgICAgIFNUQVIsCiAgICAgICAgU0xBU0gsCiAgICAgICAgTU9ELAog
ICAgICAgIFBMVVMsCiAgICAgICAgTUlOVVMsCiAgICAgICAgTEVGVF9TSElGVCwKICAgICAgICBS
SUdIVF9TSElGVCwKICAgICAgICBVTlNJR05FRF9SSUdIVF9TSElGVCwKICAgICAgICBJTlNUQU5D
RU9GLAogICAgICAgIExFU1MsCiAgICAgICAgR1JFQVRFUiwKICAgICAgICBBTkQsCiAgICAgICAg
WE9SLAogICAgICAgIElPUiwKICAgICAgICBBTkRfQU5ELAogICAgICAgIE9SX09SLAoKICAgICAg
ICBMRVNTX0VRVUFMLAogICAgICAgIEdSRUFURVJfRVFVQUwsCiAgICAgICAgRVFVQUxfRVFVQUws
CiAgICAgICAgTk9UX0VRVUFMLAoKICAgICAgICBfbnVtX2tpbmRzCiAgICB9OwoKICAgIEJpbmFy
eUV4cHJlc3Npb25UYWcgYmluYXJ5X3RhZzsKICAgIEFzdEV4cHJlc3Npb24gKmxlZnRfZXhwcmVz
c2lvbjsKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBiaW5hcnlfb3BlcmF0b3JfdG9rZW47CiAg
ICBBc3RFeHByZXNzaW9uICpyaWdodF9leHByZXNzaW9uOwoKICAgIEFzdEJpbmFyeUV4cHJlc3Np
b24oQmluYXJ5RXhwcmVzc2lvblRhZyB0YWdfKSA6IGJpbmFyeV90YWcodGFnXykKICAgIHsKICAg
ICAgICBBc3Q6OmtpbmQgPSBBc3Q6OkJJTkFSWTsKICAgICAgICBBc3Q6OmNsYXNzX3RhZyA9IEFz
dDo6RVhQUkVTU0lPTjsKICAgICAgICBBc3Q6OmdlbmVyYXRlZCA9IDA7CiAgICAgICAgQXN0RXhw
cmVzc2lvbjo6dmFsdWUgPSBfX251bGwgOwogICAgICAgIEFzdEV4cHJlc3Npb246OnN5bWJvbCA9
IF9fbnVsbCA7CiAgICB9CgogICAgdmlydHVhbCB+QXN0QmluYXJ5RXhwcmVzc2lvbigpOwoKCgoK
CgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4
U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigpICB7IHJldHVybiBsZWZ0X2V4cHJlc3Npb24g
LT4gTGVmdFRva2VuKCk7IH0KICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IFJpZ2h0
VG9rZW4oKSB7IHJldHVybiByaWdodF9leHByZXNzaW9uIC0+IFJpZ2h0VG9rZW4oKTsgfQp9OwoK
CiAKIAogCmNsYXNzIEFzdENvbmRpdGlvbmFsRXhwcmVzc2lvbiA6IHB1YmxpYyBBc3RFeHByZXNz
aW9uCnsKcHVibGljOgogICAgQXN0RXhwcmVzc2lvbiAqdGVzdF9leHByZXNzaW9uOwogICAgTGV4
U3RyZWFtOjpUb2tlbkluZGV4IHF1ZXN0aW9uX3Rva2VuOwogICAgQXN0RXhwcmVzc2lvbiAqdHJ1
ZV9leHByZXNzaW9uOwogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IGNvbG9uX3Rva2VuOwogICAg
QXN0RXhwcmVzc2lvbiAqZmFsc2VfZXhwcmVzc2lvbjsKCiAgICBBc3RDb25kaXRpb25hbEV4cHJl
c3Npb24oKQogICAgewogICAgICAgIEFzdDo6a2luZCA9IEFzdDo6Q09ORElUSU9OQUw7CiAgICAg
ICAgQXN0OjpjbGFzc190YWcgPSBBc3Q6OkVYUFJFU1NJT047CiAgICAgICAgQXN0OjpnZW5lcmF0
ZWQgPSAwOwogICAgICAgIEFzdEV4cHJlc3Npb246OnZhbHVlID0gX19udWxsIDsKICAgICAgICBB
c3RFeHByZXNzaW9uOjpzeW1ib2wgPSBfX251bGwgOwogICAgfQoKICAgIHZpcnR1YWwgfkFzdENv
bmRpdGlvbmFsRXhwcmVzc2lvbigpOwoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3Jh
Z2VQb29sICopOwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigp
ICB7IHJldHVybiB0ZXN0X2V4cHJlc3Npb24gLT4gTGVmdFRva2VuKCk7IH0KICAgIHZpcnR1YWwg
TGV4U3RyZWFtOjpUb2tlbkluZGV4IFJpZ2h0VG9rZW4oKSB7IHJldHVybiBmYWxzZV9leHByZXNz
aW9uIC0+IFJpZ2h0VG9rZW4oKTsgfQp9OwoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKY2xhc3MgQXN0QXNzaWdubWVudEV4cHJlc3Npb24gOiBwdWJsaWMgQXN0RXhwcmVz
c2lvbgp7CnB1YmxpYzoKICAgIGVudW0gQXNzaWdubWVudEV4cHJlc3Npb25UYWcKICAgIHsKICAg
ICAgICBOT05FLAogICAgICAgIFNJTVBMRV9FUVVBTCwKICAgICAgICBERUZJTklURV9FUVVBTCwK
ICAgICAgICBTVEFSX0VRVUFMLAogICAgICAgIFNMQVNIX0VRVUFMLAogICAgICAgIE1PRF9FUVVB
TCwKICAgICAgICBQTFVTX0VRVUFMLAogICAgICAgIE1JTlVTX0VRVUFMLAogICAgICAgIExFRlRf
U0hJRlRfRVFVQUwsCiAgICAgICAgUklHSFRfU0hJRlRfRVFVQUwsCiAgICAgICAgVU5TSUdORURf
UklHSFRfU0hJRlRfRVFVQUwsCgoKICAgICAgICBBTkRfRVFVQUwsCiAgICAgICAgWE9SX0VRVUFM
LAogICAgICAgIElPUl9FUVVBTCwKCiAgICAgICAgX251bV9raW5kcwogICAgfTsKCiAgICAgCiAg
ICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBNZXRob2RTeW1ib2wgKndyaXRlX21ldGhvZDsKCiAg
ICBBc3NpZ25tZW50RXhwcmVzc2lvblRhZyBhc3NpZ25tZW50X3RhZzsKICAgIEFzdEV4cHJlc3Np
b24gKmxlZnRfaGFuZF9zaWRlOwogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IGFzc2lnbm1lbnRf
b3BlcmF0b3JfdG9rZW47CiAgICBBc3RFeHByZXNzaW9uICpleHByZXNzaW9uOwoKICAgIEFzdEFz
c2lnbm1lbnRFeHByZXNzaW9uKEFzc2lnbm1lbnRFeHByZXNzaW9uVGFnIHRhZ18sIExleFN0cmVh
bTo6VG9rZW5JbmRleCB0b2tlbl8pIDogd3JpdGVfbWV0aG9kKF9fbnVsbCApLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50X3RhZyh0YWdfKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudF9vcGVyYXRvcl90b2tlbih0b2tlbl8pCiAg
ICB7CiAgICAgICAgQXN0OjpraW5kID0gQXN0OjpBU1NJR05NRU5UOwogICAgICAgIEFzdDo6Y2xh
c3NfdGFnID0gQXN0OjpFWFBSRVNTSU9OOwogICAgICAgIEFzdDo6Z2VuZXJhdGVkID0gMDsKICAg
ICAgICBBc3RFeHByZXNzaW9uOjp2YWx1ZSA9IF9fbnVsbCA7CiAgICAgICAgQXN0RXhwcmVzc2lv
bjo6c3ltYm9sID0gX19udWxsIDsKICAgIH0KCiAgICB2aXJ0dWFsIH5Bc3RBc3NpZ25tZW50RXhw
cmVzc2lvbigpOwoKICAgIGlubGluZSBib29sIFNpbXBsZUFzc2lnbm1lbnQoKSB7IHJldHVybiAo
YXNzaWdubWVudF90YWcgPT0gU0lNUExFX0VRVUFMIHx8IGFzc2lnbm1lbnRfdGFnID09IERFRklO
SVRFX0VRVUFMKTsgfQoKCgoKCgogICAgdmlydHVhbCBBc3QgKkNsb25lKFN0b3JhZ2VQb29sICop
OwoKICAgIHZpcnR1YWwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IExlZnRUb2tlbigpICB7IHJldHVy
biBsZWZ0X2hhbmRfc2lkZSAtPiBMZWZ0VG9rZW4oKTsgfQogICAgdmlydHVhbCBMZXhTdHJlYW06
OlRva2VuSW5kZXggUmlnaHRUb2tlbigpIHsgcmV0dXJuIGV4cHJlc3Npb24gLT4gUmlnaHRUb2tl
bigpOyB9Cn07CgoKIAogCiAKaW5saW5lIGJvb2wgQXN0OjpJc05hbWUoKQp7CiAgICBBc3QgKm5h
bWUgPSB0aGlzOwogICAgZm9yIChBc3RGaWVsZEFjY2VzcyAqZmllbGRfYWNjZXNzID0gbmFtZSAt
PiBGaWVsZEFjY2Vzc0Nhc3QoKTsgZmllbGRfYWNjZXNzICYmIGZpZWxkX2FjY2VzcyAtPiBJc05h
bWVBY2Nlc3MoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyA9IG5hbWUgLT4gRmllbGRBY2Nlc3ND
YXN0KCkpCiAgICAgICAgbmFtZSA9IGZpZWxkX2FjY2VzcyAtPiBiYXNlOwogICAgcmV0dXJuIChu
YW1lIC0+IFNpbXBsZU5hbWVDYXN0KCkgIT0gX19udWxsICk7Cn0KCgogCiAKIAogCmlubGluZSBi
b29sIEFzdDo6SXNTaW1wbGVOYW1lT3JGaWVsZEFjY2VzcygpCnsKICAgIEFzdCAqbmFtZSA9IHRo
aXM7CiAgICBmb3IgKEFzdEZpZWxkQWNjZXNzICpmaWVsZF9hY2Nlc3MgPSBuYW1lIC0+IEZpZWxk
QWNjZXNzQ2FzdCgpOyBmaWVsZF9hY2Nlc3M7IGZpZWxkX2FjY2VzcyA9IG5hbWUgLT4gRmllbGRB
Y2Nlc3NDYXN0KCkpCiAgICAgICAgbmFtZSA9IGZpZWxkX2FjY2VzcyAtPiBiYXNlOwogICAgcmV0
dXJuIChuYW1lIC0+IFNpbXBsZU5hbWVDYXN0KCkgfHwgbmFtZSAtPiBUeXBlRXhwcmVzc2lvbkNh
c3QoKSk7Cn0KCgogCiAKIAppbmxpbmUgYm9vbCBBc3Q6OklzU3VwZXJFeHByZXNzaW9uKCkKewog
ICAgcmV0dXJuICh0aGlzIC0+IFN1cGVyRXhwcmVzc2lvbkNhc3QoKSB8fCAodGhpcyAtPiBGaWVs
ZEFjY2Vzc0Nhc3QoKSAmJiB0aGlzIC0+IEZpZWxkQWNjZXNzQ2FzdCgpIC0+IElzU3VwZXJBY2Nl
c3MoKSkpOwoKfQoKIAogCiAKaW5saW5lIGJvb2wgQXN0OjpJc0xlZnRIYW5kU2lkZSgpCnsKICAg
IHJldHVybiAodGhpcyAtPiBTaW1wbGVOYW1lQ2FzdCgpIHx8IHRoaXMgLT4gRmllbGRBY2Nlc3ND
YXN0KCkgfHwgdGhpcyAtPiBBcnJheUFjY2Vzc0Nhc3QoKSk7Cn0KCgogCiAKIAppbmxpbmUgYm9v
bCBBc3Q6OklzR2VuZXJhdGVkKCkKewogICAgcmV0dXJuIChnZW5lcmF0ZWQgPT0gMSk7Cn0KCgog
CiAKIAogCiAKY2xhc3MgU3RvcmFnZVBvb2wKewpwdWJsaWM6CgogICAgdHlwZWRlZiB2b2lkICpD
ZWxsOwoKICAgIGlubGluZSBzaXplX3QgQmxrc2l6ZSgpIHsgcmV0dXJuICgxIDw8IGxvZ19ibGtz
aXplKTsgfQoKcHJpdmF0ZToKCiAgICBDZWxsICoqYmFzZTsKICAgIHNpemVfdCBiYXNlX3NpemU7
CiAgICBpbnQgdG9wLAogICAgICAgIHNpemU7CgogICAgc2l6ZV90IGxvZ19ibGtzaXplLAogICAg
ICAgICAgIGJhc2VfaW5jcmVtZW50OwoKICAgICAKICAgICAKICAgICAKICAgIHZvaWQgQWxsb2Nh
dGVNb3JlU3BhY2UoKQogICAgewogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAg
ICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAg
ICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICBzaXplX3QgayA9IHNp
emUgPj4gbG9nX2Jsa3NpemU7ICAKCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAg
ICAgaWYgKGsgPT0gYmFzZV9zaXplKQogICAgICAgIHsKICAgICAgICAgICAgaW50IG9sZF9iYXNl
X3NpemUgPSBiYXNlX3NpemU7CiAgICAgICAgICAgIENlbGwgKipvbGRfYmFzZSA9IGJhc2U7Cgog
ICAgICAgICAgICBiYXNlX3NpemUgKz0gYmFzZV9pbmNyZW1lbnQ7CiAgICAgICAgICAgIGJhc2Ug
PSBuZXcgQ2VsbCpbYmFzZV9zaXplXTsKCiAgICAgICAgICAgIGlmIChvbGRfYmFzZSAhPSBfX251
bGwgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBtZW1tb3ZlKGJhc2UsIG9sZF9iYXNl
LCBvbGRfYmFzZV9zaXplICogc2l6ZW9mKENlbGwgKikpOwogICAgICAgICAgICAgICAgZGVsZXRl
IFtdIG9sZF9iYXNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1lbXNldCgmYmFzZVtvbGRf
YmFzZV9zaXplXSwgMCwgKGJhc2Vfc2l6ZSAtIG9sZF9iYXNlX3NpemUpICogc2l6ZW9mKENlbGwg
KikpOwogICAgICAgIH0KCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAog
ICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgIGlmIChiYXNlW2tdID09IF9fbnVs
bCApCiAgICAgICAgewogICAgICAgICAgICBiYXNlW2tdID0gbmV3IENlbGxbQmxrc2l6ZSgpXTsK
ICAgICAgICAgICAgYmFzZVtrXSAtPSBzaXplOwogICAgICAgIH0KCiAgICAgICAgIAogICAgICAg
ICAKICAgICAgICAgCiAgICAgICAgc2l6ZSArPSBCbGtzaXplKCk7CgogICAgICAgIHJldHVybjsK
ICAgIH0KCnB1YmxpYzoKCiAgICAgCiAgICAgCiAgICAgCiAgICBTdG9yYWdlUG9vbChzaXplX3Qg
bnVtX3Rva2VucykKICAgIHsKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAg
CiAgICAgICAgIAogICAgICAgICAKICAgICAgICBzaXplX3QgZXN0aW1hdGUgPSBudW1fdG9rZW5z
ICogMTA7ICAKCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAg
IGZvciAobG9nX2Jsa3NpemUgPSA4OyAoKCh1bnNpZ25lZCkgMSA8PCBsb2dfYmxrc2l6ZSkgPCBl
c3RpbWF0ZSkgJiYgKGxvZ19ibGtzaXplIDwgMzEpOyBsb2dfYmxrc2l6ZSsrKQogICAgICAgICAg
ICA7CgogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAg
ICAgICAgIAogICAgICAgICAKICAgICAgICBpZiAobG9nX2Jsa3NpemUgPCA4KQogICAgICAgIHsK
ICAgICAgICAgICAgYmFzZV9pbmNyZW1lbnQgPSAxOwogICAgICAgICAgICBsb2dfYmxrc2l6ZSA9
IDg7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGxvZ19ibGtzaXplIDwgMTMpCiAgICAgICAg
ewogICAgICAgICAgICBiYXNlX2luY3JlbWVudCA9ICh1bnNpZ25lZCkgMSA8PCAobG9nX2Jsa3Np
emUgLSA4KTsKICAgICAgICAgICAgbG9nX2Jsa3NpemUgPSA4OwogICAgICAgIH0KICAgICAgICBl
bHNlIGlmIChsb2dfYmxrc2l6ZSA8IDE3KQogICAgICAgIHsKICAgICAgICAgICAgYmFzZV9pbmNy
ZW1lbnQgPSAodW5zaWduZWQpIDEgPDwgKGxvZ19ibGtzaXplIC0gMTApOwogICAgICAgICAgICBs
b2dfYmxrc2l6ZSA9IDEwOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAg
ICAgICBiYXNlX2luY3JlbWVudCA9ICh1bnNpZ25lZCkgMSA8PCAobG9nX2Jsa3NpemUgLSAxMik7
ICAKICAgICAgICAgICAgbG9nX2Jsa3NpemUgPSAxMjsKICAgICAgICB9CgogICAgICAgICAKICAg
ICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgYmFzZV9pbmNyZW1l
bnQgPSAoYmFzZV9pbmNyZW1lbnQgPDwgMSkgKyAzOwoKICAgICAgICBiYXNlX3NpemUgPSAwOwog
ICAgICAgIHNpemUgPSAwOwogICAgICAgIHRvcCA9IDA7CiAgICAgICAgYmFzZSA9IF9fbnVsbCA7
CiAgICB9CgogICAgIAogICAgIAogICAgIAogICAgflN0b3JhZ2VQb29sKCkKICAgIHsKICAgICAg
ICBmb3IgKGludCBrID0gKHNpemUgPj4gbG9nX2Jsa3NpemUpIC0gMTsgayA+PSAwOyBrLS0pCiAg
ICAgICAgewogICAgICAgICAgICBzaXplIC09IEJsa3NpemUoKTsKICAgICAgICAgICAgYmFzZVtr
XSArPSBzaXplOwogICAgICAgICAgICBkZWxldGUgW10gYmFzZVtrXTsKICAgICAgICB9CgogICAg
ICAgIGRlbGV0ZSBbXSBiYXNlOwogICAgfQoKICAgICAKICAgICAKICAgICAKICAgICAKICAgIGlu
bGluZSB2b2lkICpBbGxvYyhzaXplX3QgbikKICAgIHsKICAgICAgICBzaXplX3QgaSA9IHRvcCwK
ICAgICAgICAgICAgICAgY2h1bmtfc2l6ZSA9ICgobiArIHNpemVvZihDZWxsKSAtIDEpIC8gc2l6
ZW9mKENlbGwpKTsKICAgICAgICB0b3AgKz0gY2h1bmtfc2l6ZTsKICAgICAgICBpZiAodG9wID4g
c2l6ZSkKICAgICAgICB7CiAgICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggY2h1bmtf
c2l6ZSA8PSBCbGtzaXplKCkgJiYgIndlIGNhbm5vdCBhbGxvY2F0ZSBhIGNodW5rIG9mIHN0b3Jh
Z2UgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgYmxvY2sgISIgKSA/IDAgOgkoX19hc3NlcnRfZmFp
bCAoImNodW5rX3NpemUgPD0gQmxrc2l6ZSgpICYmIFwid2UgY2Fubm90IGFsbG9jYXRlIGEgY2h1
bmsgb2Ygc3RvcmFnZSB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBibG9jayAhXCIiICwgIi4uLy4u
L2ppa2VzL3NyYy9hc3QuaCIsIDQyNDgsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7Cgog
ICAgICAgICAgICBpID0gc2l6ZTsKICAgICAgICAgICAgdG9wID0gc2l6ZSArIGNodW5rX3NpemU7
CiAgICAgICAgICAgIEFsbG9jYXRlTW9yZVNwYWNlKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1
cm4gKCh2b2lkICopICYoYmFzZVtpID4+IGxvZ19ibGtzaXplXSBbaV0pKTsKICAgIH0KCiAgICAg
CiAgICAgCiAgICAgCiAgICBpbmxpbmUgc2l6ZV90IExlbmd0aCgpIHsgcmV0dXJuIHRvcDsgfQoK
ICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIGlubGluZSB2b2lkIFJlc2V0KGNvbnN0
IGludCBuID0gMCkKICAgIHsKICAgICAgICBpZiAobiA8IDAgfHwgbiA+IHNpemUpCiAgICAgICAg
ICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggZmFsc2UgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAo
ImZhbHNlIiAsICIuLi8uLi9qaWtlcy9zcmMvYXN0LmgiLCA0MjcxLCBfX1BSRVRUWV9GVU5DVElP
Tl9fICksIDApKSkgOwogICAgICAgIHRvcCA9IG47CiAgICB9CgogICAgIAogICAgIAogICAgIAog
ICAgIAogICAgaW5saW5lIHZvaWQgRGVzdHJveSgpCiAgICB7CiAgICAgICAgZm9yIChpbnQgayA9
IChzaXplID4+IGxvZ19ibGtzaXplKSAtIDE7IGsgPj0gMDsgay0tKQogICAgICAgIHsKICAgICAg
ICAgICAgc2l6ZSAtPSBCbGtzaXplKCk7CiAgICAgICAgICAgIGJhc2Vba10gKz0gc2l6ZTsKICAg
ICAgICAgICAgZGVsZXRlIFtdIGJhc2Vba107CiAgICAgICAgICAgIGJhc2Vba10gPSBfX251bGwg
OwogICAgICAgIH0KCiAgICAgICAgZGVsZXRlIFtdIGJhc2U7CiAgICAgICAgYmFzZSA9IF9fbnVs
bCA7CiAgICAgICAgYmFzZV9zaXplID0gMDsKCiAgICAgICAgUmVzZXQoKTsKCiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgICAKCiAgICBpbmxpbmUgVmFyaWFibGVTeW1ib2xBcnJheSAqTmV3VmFy
aWFibGVTeW1ib2xBcnJheSh1bnNpZ25lZCBzaXplID0gMCkKICAgIHsKICAgICAgICByZXR1cm4g
bmV3IChBbGxvYyhzaXplb2YoVmFyaWFibGVTeW1ib2xBcnJheSkpKSBWYXJpYWJsZVN5bWJvbEFy
cmF5KChTdG9yYWdlUG9vbCAqKSB0aGlzLCBzaXplKTsKICAgIH0KCiAgICBpbmxpbmUgQXN0QXJy
YXk8TGV4U3RyZWFtOjpUb2tlbkluZGV4PiAqTmV3VG9rZW5JbmRleEFycmF5KHVuc2lnbmVkIHNp
emUgPSAwKQogICAgewogICAgICAgIHJldHVybiBuZXcgKEFsbG9jKHNpemVvZihBc3RBcnJheTxM
ZXhTdHJlYW06OlRva2VuSW5kZXg+KSkpIEFzdEFycmF5PExleFN0cmVhbTo6VG9rZW5JbmRleD4o
KFN0b3JhZ2VQb29sICopIHRoaXMsIHNpemUpOwogICAgfQoKICAgIGlubGluZSBBc3RBcnJheTxB
c3QgKj4gKk5ld0FzdEFycmF5KHVuc2lnbmVkIHNpemUgPSAwKQogICAgewogICAgICAgIHJldHVy
biBuZXcgKEFsbG9jKHNpemVvZihBc3RBcnJheTxBc3QgKj4pKSkgQXN0QXJyYXk8QXN0ICo+KChT
dG9yYWdlUG9vbCAqKSB0aGlzLCBzaXplKTsKICAgIH0KCiAgICBpbmxpbmUgQXN0QXJyYXk8Q2Fz
ZUVsZW1lbnQgKj4gKk5ld0Nhc2VFbGVtZW50QXJyYXkodW5zaWduZWQgc2l6ZSA9IDApCiAgICB7
CiAgICAgICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdEFycmF5PENhc2VFbGVtZW50ICo+
KSkpIEFzdEFycmF5PENhc2VFbGVtZW50ICo+KChTdG9yYWdlUG9vbCAqKSB0aGlzLCBzaXplKTsK
ICAgIH0KCiAgICBpbmxpbmUgQXN0TGlzdE5vZGUgKk5ld0xpc3ROb2RlKCkKICAgIHsKICAgICAg
ICByZXR1cm4gbmV3IChBbGxvYyhzaXplb2YoQXN0TGlzdE5vZGUpKSkgQXN0TGlzdE5vZGUoKTsK
ICAgIH0KCiAgICBpbmxpbmUgQXN0QmxvY2sgKk5ld0Jsb2NrKCkKICAgIHsKICAgICAgICByZXR1
cm4gbmV3IChBbGxvYyhzaXplb2YoQXN0QmxvY2spKSkgQXN0QmxvY2soKFN0b3JhZ2VQb29sICop
IHRoaXMpOwogICAgfQoKICAgIGlubGluZSBBc3RQcmltaXRpdmVUeXBlICpOZXdQcmltaXRpdmVU
eXBlKEFzdDo6S2luZCBraW5kLCBMZXhTdHJlYW06OlRva2VuSW5kZXggdG9rZW4pCiAgICB7CiAg
ICAgICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdFByaW1pdGl2ZVR5cGUpKSkgQXN0UHJp
bWl0aXZlVHlwZShraW5kLCB0b2tlbik7CiAgICB9CgogICAgaW5saW5lIEFzdEFycmF5VHlwZSAq
TmV3QXJyYXlUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IChBbGxvYyhzaXplb2YoQXN0
QXJyYXlUeXBlKSkpIEFzdEFycmF5VHlwZSgoU3RvcmFnZVBvb2wgKikgdGhpcyk7CiAgICB9Cgog
ICAgaW5saW5lIEFzdFNpbXBsZU5hbWUgKk5ld1NpbXBsZU5hbWUoTGV4U3RyZWFtOjpUb2tlbklu
ZGV4IHRva2VuKQogICAgewogICAgICAgIHJldHVybiBuZXcgKEFsbG9jKHNpemVvZihBc3RTaW1w
bGVOYW1lKSkpIEFzdFNpbXBsZU5hbWUodG9rZW4pOwogICAgfQoKICAgIGlubGluZSBBc3RQYWNr
YWdlRGVjbGFyYXRpb24gKk5ld1BhY2thZ2VEZWNsYXJhdGlvbigpCiAgICB7CiAgICAgICAgcmV0
dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdFBhY2thZ2VEZWNsYXJhdGlvbikpKSBBc3RQYWNrYWdl
RGVjbGFyYXRpb24oKTsKICAgIH0KCiAgICBpbmxpbmUgQXN0SW1wb3J0RGVjbGFyYXRpb24gKk5l
d0ltcG9ydERlY2xhcmF0aW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IChBbGxvYyhzaXpl
b2YoQXN0SW1wb3J0RGVjbGFyYXRpb24pKSkgQXN0SW1wb3J0RGVjbGFyYXRpb24oKTsKICAgIH0K
CiAgICBpbmxpbmUgQXN0Q29tcGlsYXRpb25Vbml0ICpOZXdDb21waWxhdGlvblVuaXQoKQogICAg
ewogICAgICAgIHJldHVybiBuZXcgKEFsbG9jKHNpemVvZihBc3RDb21waWxhdGlvblVuaXQpKSkg
QXN0Q29tcGlsYXRpb25Vbml0KChTdG9yYWdlUG9vbCAqKSB0aGlzKTsKICAgIH0KCiAgICBpbmxp
bmUgQXN0TW9kaWZpZXIgKk5ld01vZGlmaWVyKEFzdDo6S2luZCBraW5kLCBMZXhTdHJlYW06OlRv
a2VuSW5kZXggdG9rZW4pCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFz
dE1vZGlmaWVyKSkpIEFzdE1vZGlmaWVyKGtpbmQsIHRva2VuKTsKICAgIH0KCiAgICBpbmxpbmUg
QXN0RW1wdHlEZWNsYXJhdGlvbiAqTmV3RW1wdHlEZWNsYXJhdGlvbihMZXhTdHJlYW06OlRva2Vu
SW5kZXggdG9rZW4pCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdEVt
cHR5RGVjbGFyYXRpb24pKSkgQXN0RW1wdHlEZWNsYXJhdGlvbih0b2tlbik7CiAgICB9CgogICAg
aW5saW5lIEFzdENsYXNzQm9keSAqTmV3Q2xhc3NCb2R5KCkKICAgIHsKICAgICAgICByZXR1cm4g
bmV3IChBbGxvYyhzaXplb2YoQXN0Q2xhc3NCb2R5KSkpIEFzdENsYXNzQm9keSgoU3RvcmFnZVBv
b2wgKikgdGhpcyk7CiAgICB9CgogICAgaW5saW5lIEFzdENsYXNzRGVjbGFyYXRpb24gKk5ld0Ns
YXNzRGVjbGFyYXRpb24oKQogICAgewogICAgICAgIHJldHVybiBuZXcgKEFsbG9jKHNpemVvZihB
c3RDbGFzc0RlY2xhcmF0aW9uKSkpIEFzdENsYXNzRGVjbGFyYXRpb24oKFN0b3JhZ2VQb29sICop
IHRoaXMpOwogICAgfQoKICAgIGlubGluZSBBc3RBcnJheUluaXRpYWxpemVyICpOZXdBcnJheUlu
aXRpYWxpemVyKCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IChBbGxvYyhzaXplb2YoQXN0QXJy
YXlJbml0aWFsaXplcikpKSBBc3RBcnJheUluaXRpYWxpemVyKChTdG9yYWdlUG9vbCAqKSB0aGlz
KTsKICAgIH0KCiAgICBpbmxpbmUgQXN0QnJhY2tldHMgKk5ld0JyYWNrZXRzKExleFN0cmVhbTo6
VG9rZW5JbmRleCBsZWZ0LCBMZXhTdHJlYW06OlRva2VuSW5kZXggcmlnaHQpCiAgICB7CiAgICAg
ICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdEJyYWNrZXRzKSkpIEFzdEJyYWNrZXRzKGxl
ZnQsIHJpZ2h0KTsKICAgIH0KCiAgICBpbmxpbmUgQXN0VmFyaWFibGVEZWNsYXJhdG9ySWQgKk5l
d1ZhcmlhYmxlRGVjbGFyYXRvcklkKCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IChBbGxvYyhz
aXplb2YoQXN0VmFyaWFibGVEZWNsYXJhdG9ySWQpKSkgQXN0VmFyaWFibGVEZWNsYXJhdG9ySWQo
KFN0b3JhZ2VQb29sICopIHRoaXMpOwogICAgfQoKICAgIGlubGluZSBBc3RWYXJpYWJsZURlY2xh
cmF0b3IgKk5ld1ZhcmlhYmxlRGVjbGFyYXRvcigpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyAo
QWxsb2Moc2l6ZW9mKEFzdFZhcmlhYmxlRGVjbGFyYXRvcikpKSBBc3RWYXJpYWJsZURlY2xhcmF0
b3IoKTsKICAgIH0KCiAgICBpbmxpbmUgQXN0RmllbGREZWNsYXJhdGlvbiAqTmV3RmllbGREZWNs
YXJhdGlvbigpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdEZpZWxk
RGVjbGFyYXRpb24pKSkgQXN0RmllbGREZWNsYXJhdGlvbigoU3RvcmFnZVBvb2wgKikgdGhpcyk7
CiAgICB9CgogICAgaW5saW5lIEFzdEZvcm1hbFBhcmFtZXRlciAqTmV3Rm9ybWFsUGFyYW1ldGVy
KCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IChBbGxvYyhzaXplb2YoQXN0Rm9ybWFsUGFyYW1l
dGVyKSkpIEFzdEZvcm1hbFBhcmFtZXRlcigoU3RvcmFnZVBvb2wgKikgdGhpcyk7CiAgICB9Cgog
ICAgaW5saW5lIEFzdE1ldGhvZERlY2xhcmF0b3IgKk5ld01ldGhvZERlY2xhcmF0b3IoKQogICAg
ewogICAgICAgIHJldHVybiBuZXcgKEFsbG9jKHNpemVvZihBc3RNZXRob2REZWNsYXJhdG9yKSkp
IEFzdE1ldGhvZERlY2xhcmF0b3IoKFN0b3JhZ2VQb29sICopIHRoaXMpOwogICAgfQoKICAgIGlu
bGluZSBBc3RNZXRob2REZWNsYXJhdGlvbiAqTmV3TWV0aG9kRGVjbGFyYXRpb24oKQogICAgewog
ICAgICAgIHJldHVybiBuZXcgKEFsbG9jKHNpemVvZihBc3RNZXRob2REZWNsYXJhdGlvbikpKSBB
c3RNZXRob2REZWNsYXJhdGlvbigoU3RvcmFnZVBvb2wgKikgdGhpcyk7CiAgICB9CgogICAgaW5s
aW5lIEFzdFN0YXRpY0luaXRpYWxpemVyICpOZXdTdGF0aWNJbml0aWFsaXplcigpCiAgICB7CiAg
ICAgICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdFN0YXRpY0luaXRpYWxpemVyKSkpIEFz
dFN0YXRpY0luaXRpYWxpemVyKCk7CiAgICB9CgogICAgaW5saW5lIEFzdFRoaXNDYWxsICpOZXdU
aGlzQ2FsbCgpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdFRoaXND
YWxsKSkpIEFzdFRoaXNDYWxsKChTdG9yYWdlUG9vbCAqKSB0aGlzKTsKICAgIH0KCiAgICBpbmxp
bmUgQXN0U3VwZXJDYWxsICpOZXdTdXBlckNhbGwoKQogICAgewogICAgICAgIHJldHVybiBuZXcg
KEFsbG9jKHNpemVvZihBc3RTdXBlckNhbGwpKSkgQXN0U3VwZXJDYWxsKChTdG9yYWdlUG9vbCAq
KSB0aGlzKTsKICAgIH0KCiAgICBpbmxpbmUgQXN0Q29uc3RydWN0b3JCbG9jayAqTmV3Q29uc3Ry
dWN0b3JCbG9jaygpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdENv
bnN0cnVjdG9yQmxvY2spKSkgQXN0Q29uc3RydWN0b3JCbG9jaygoU3RvcmFnZVBvb2wgKikgdGhp
cyk7CiAgICB9CgogICAgaW5saW5lIEFzdENvbnN0cnVjdG9yRGVjbGFyYXRpb24gKk5ld0NvbnN0
cnVjdG9yRGVjbGFyYXRpb24oKQogICAgewogICAgICAgIHJldHVybiBuZXcgKEFsbG9jKHNpemVv
ZihBc3RDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKSkpIEFzdENvbnN0cnVjdG9yRGVjbGFyYXRpb24o
KFN0b3JhZ2VQb29sICopIHRoaXMpOwogICAgfQoKICAgIGlubGluZSBBc3RJbnRlcmZhY2VEZWNs
YXJhdGlvbiAqTmV3SW50ZXJmYWNlRGVjbGFyYXRpb24oKQogICAgewogICAgICAgIHJldHVybiBu
ZXcgKEFsbG9jKHNpemVvZihBc3RJbnRlcmZhY2VEZWNsYXJhdGlvbikpKSBBc3RJbnRlcmZhY2VE
ZWNsYXJhdGlvbigoU3RvcmFnZVBvb2wgKikgdGhpcyk7CiAgICB9CgogICAgaW5saW5lIEFzdExv
Y2FsVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCAqTmV3TG9jYWxWYXJpYWJsZURlY2xhcmF0
aW9uU3RhdGVtZW50KCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IChBbGxvYyhzaXplb2YoQXN0
TG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uU3RhdGVtZW50KSkpIEFzdExvY2FsVmFyaWFibGVEZWNs
YXJhdGlvblN0YXRlbWVudCgoU3RvcmFnZVBvb2wgKikgdGhpcyk7CiAgICB9CgogICAgaW5saW5l
IEFzdElmU3RhdGVtZW50ICpOZXdJZlN0YXRlbWVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuIG5l
dyAoQWxsb2Moc2l6ZW9mKEFzdElmU3RhdGVtZW50KSkpIEFzdElmU3RhdGVtZW50KChTdG9yYWdl
UG9vbCAqKSB0aGlzKTsKICAgIH0KCiAgICBpbmxpbmUgQXN0RW1wdHlTdGF0ZW1lbnQgKk5ld0Vt
cHR5U3RhdGVtZW50KExleFN0cmVhbTo6VG9rZW5JbmRleCB0b2tlbikKICAgIHsKICAgICAgICBy
ZXR1cm4gbmV3IChBbGxvYyhzaXplb2YoQXN0RW1wdHlTdGF0ZW1lbnQpKSkgQXN0RW1wdHlTdGF0
ZW1lbnQoKFN0b3JhZ2VQb29sICopIHRoaXMsIHRva2VuKTsKICAgIH0KCiAgICBpbmxpbmUgQXN0
RXhwcmVzc2lvblN0YXRlbWVudCAqTmV3RXhwcmVzc2lvblN0YXRlbWVudCgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdEV4cHJlc3Npb25TdGF0ZW1lbnQpKSkgQXN0
RXhwcmVzc2lvblN0YXRlbWVudCgoU3RvcmFnZVBvb2wgKikgdGhpcyk7CiAgICB9CgogICAgaW5s
aW5lIEFzdENhc2VMYWJlbCAqTmV3Q2FzZUxhYmVsKCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3
IChBbGxvYyhzaXplb2YoQXN0Q2FzZUxhYmVsKSkpIEFzdENhc2VMYWJlbCgpOwogICAgfQoKICAg
IGlubGluZSBBc3REZWZhdWx0TGFiZWwgKk5ld0RlZmF1bHRMYWJlbCgpCiAgICB7CiAgICAgICAg
cmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdERlZmF1bHRMYWJlbCkpKSBBc3REZWZhdWx0TGFi
ZWwoKTsKICAgIH0KCiAgICBpbmxpbmUgQXN0U3dpdGNoQmxvY2tTdGF0ZW1lbnQgKk5ld1N3aXRj
aEJsb2NrU3RhdGVtZW50KCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IChBbGxvYyhzaXplb2Yo
QXN0U3dpdGNoQmxvY2tTdGF0ZW1lbnQpKSkgQXN0U3dpdGNoQmxvY2tTdGF0ZW1lbnQoKFN0b3Jh
Z2VQb29sICopIHRoaXMpOwogICAgfQoKICAgIGlubGluZSBBc3RTd2l0Y2hTdGF0ZW1lbnQgKk5l
d1N3aXRjaFN0YXRlbWVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9m
KEFzdFN3aXRjaFN0YXRlbWVudCkpKSBBc3RTd2l0Y2hTdGF0ZW1lbnQoKFN0b3JhZ2VQb29sICop
IHRoaXMpOwogICAgfQoKICAgIGlubGluZSBBc3RXaGlsZVN0YXRlbWVudCAqTmV3V2hpbGVTdGF0
ZW1lbnQoKQogICAgewogICAgICAgIHJldHVybiBuZXcgKEFsbG9jKHNpemVvZihBc3RXaGlsZVN0
YXRlbWVudCkpKSBBc3RXaGlsZVN0YXRlbWVudCgoU3RvcmFnZVBvb2wgKikgdGhpcyk7CiAgICB9
CgogICAgaW5saW5lIEFzdERvU3RhdGVtZW50ICpOZXdEb1N0YXRlbWVudCgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdERvU3RhdGVtZW50KSkpIEFzdERvU3RhdGVt
ZW50KChTdG9yYWdlUG9vbCAqKSB0aGlzKTsKICAgIH0KCiAgICBpbmxpbmUgQXN0Rm9yU3RhdGVt
ZW50ICpOZXdGb3JTdGF0ZW1lbnQoKQogICAgewogICAgICAgIHJldHVybiBuZXcgKEFsbG9jKHNp
emVvZihBc3RGb3JTdGF0ZW1lbnQpKSkgQXN0Rm9yU3RhdGVtZW50KChTdG9yYWdlUG9vbCAqKSB0
aGlzKTsKICAgIH0KCiAgICBpbmxpbmUgQXN0QnJlYWtTdGF0ZW1lbnQgKk5ld0JyZWFrU3RhdGVt
ZW50KCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IChBbGxvYyhzaXplb2YoQXN0QnJlYWtTdGF0
ZW1lbnQpKSkgQXN0QnJlYWtTdGF0ZW1lbnQoKFN0b3JhZ2VQb29sICopIHRoaXMpOwogICAgfQoK
ICAgIGlubGluZSBBc3RDb250aW51ZVN0YXRlbWVudCAqTmV3Q29udGludWVTdGF0ZW1lbnQoKQog
ICAgewogICAgICAgIHJldHVybiBuZXcgKEFsbG9jKHNpemVvZihBc3RDb250aW51ZVN0YXRlbWVu
dCkpKSBBc3RDb250aW51ZVN0YXRlbWVudCgoU3RvcmFnZVBvb2wgKikgdGhpcyk7CiAgICB9Cgog
ICAgaW5saW5lIEFzdFJldHVyblN0YXRlbWVudCAqTmV3UmV0dXJuU3RhdGVtZW50KCkKICAgIHsK
ICAgICAgICByZXR1cm4gbmV3IChBbGxvYyhzaXplb2YoQXN0UmV0dXJuU3RhdGVtZW50KSkpIEFz
dFJldHVyblN0YXRlbWVudCgoU3RvcmFnZVBvb2wgKikgdGhpcyk7CiAgICB9CgogICAgaW5saW5l
IEFzdFRocm93U3RhdGVtZW50ICpOZXdUaHJvd1N0YXRlbWVudCgpCiAgICB7CiAgICAgICAgcmV0
dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdFRocm93U3RhdGVtZW50KSkpIEFzdFRocm93U3RhdGVt
ZW50KChTdG9yYWdlUG9vbCAqKSB0aGlzKTsKICAgIH0KCiAgICBpbmxpbmUgQXN0U3luY2hyb25p
emVkU3RhdGVtZW50ICpOZXdTeW5jaHJvbml6ZWRTdGF0ZW1lbnQoKQogICAgewogICAgICAgIHJl
dHVybiBuZXcgKEFsbG9jKHNpemVvZihBc3RTeW5jaHJvbml6ZWRTdGF0ZW1lbnQpKSkgQXN0U3lu
Y2hyb25pemVkU3RhdGVtZW50KChTdG9yYWdlUG9vbCAqKSB0aGlzKTsKICAgIH0KCiAgICBpbmxp
bmUgQXN0Q2F0Y2hDbGF1c2UgKk5ld0NhdGNoQ2xhdXNlKCkKICAgIHsKICAgICAgICByZXR1cm4g
bmV3IChBbGxvYyhzaXplb2YoQXN0Q2F0Y2hDbGF1c2UpKSkgQXN0Q2F0Y2hDbGF1c2UoKTsKICAg
IH0KCiAgICBpbmxpbmUgQXN0RmluYWxseUNsYXVzZSAqTmV3RmluYWxseUNsYXVzZSgpCiAgICB7
CiAgICAgICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdEZpbmFsbHlDbGF1c2UpKSkgQXN0
RmluYWxseUNsYXVzZSgpOwogICAgfQoKICAgIGlubGluZSBBc3RUcnlTdGF0ZW1lbnQgKk5ld1Ry
eVN0YXRlbWVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdFRy
eVN0YXRlbWVudCkpKSBBc3RUcnlTdGF0ZW1lbnQoKFN0b3JhZ2VQb29sICopIHRoaXMpOwogICAg
fQoKICAgIGlubGluZSBBc3RJbnRlZ2VyTGl0ZXJhbCAqTmV3SW50ZWdlckxpdGVyYWwoTGV4U3Ry
ZWFtOjpUb2tlbkluZGV4IHRva2VuKQogICAgewogICAgICAgIHJldHVybiBuZXcgKEFsbG9jKHNp
emVvZihBc3RJbnRlZ2VyTGl0ZXJhbCkpKSBBc3RJbnRlZ2VyTGl0ZXJhbCh0b2tlbik7CiAgICB9
CgogICAgaW5saW5lIEFzdExvbmdMaXRlcmFsICpOZXdMb25nTGl0ZXJhbChMZXhTdHJlYW06OlRv
a2VuSW5kZXggdG9rZW4pCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFz
dExvbmdMaXRlcmFsKSkpIEFzdExvbmdMaXRlcmFsKHRva2VuKTsKICAgIH0KCiAgICBpbmxpbmUg
QXN0RmxvYXRpbmdQb2ludExpdGVyYWwgKk5ld0Zsb2F0aW5nUG9pbnRMaXRlcmFsKExleFN0cmVh
bTo6VG9rZW5JbmRleCB0b2tlbikKICAgIHsKICAgICAgICByZXR1cm4gbmV3IChBbGxvYyhzaXpl
b2YoQXN0RmxvYXRpbmdQb2ludExpdGVyYWwpKSkgQXN0RmxvYXRpbmdQb2ludExpdGVyYWwodG9r
ZW4pOwogICAgfQoKICAgIGlubGluZSBBc3REb3VibGVMaXRlcmFsICpOZXdEb3VibGVMaXRlcmFs
KExleFN0cmVhbTo6VG9rZW5JbmRleCB0b2tlbikKICAgIHsKICAgICAgICByZXR1cm4gbmV3IChB
bGxvYyhzaXplb2YoQXN0RG91YmxlTGl0ZXJhbCkpKSBBc3REb3VibGVMaXRlcmFsKHRva2VuKTsK
ICAgIH0KCiAgICBpbmxpbmUgQXN0VHJ1ZUxpdGVyYWwgKk5ld1RydWVMaXRlcmFsKExleFN0cmVh
bTo6VG9rZW5JbmRleCB0b2tlbikKICAgIHsKICAgICAgICByZXR1cm4gbmV3IChBbGxvYyhzaXpl
b2YoQXN0VHJ1ZUxpdGVyYWwpKSkgQXN0VHJ1ZUxpdGVyYWwodG9rZW4pOwogICAgfQoKICAgIGlu
bGluZSBBc3RGYWxzZUxpdGVyYWwgKk5ld0ZhbHNlTGl0ZXJhbChMZXhTdHJlYW06OlRva2VuSW5k
ZXggdG9rZW4pCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdEZhbHNl
TGl0ZXJhbCkpKSBBc3RGYWxzZUxpdGVyYWwodG9rZW4pOwogICAgfQoKICAgIGlubGluZSBBc3RT
dHJpbmdMaXRlcmFsICpOZXdTdHJpbmdMaXRlcmFsKExleFN0cmVhbTo6VG9rZW5JbmRleCB0b2tl
bikKICAgIHsKICAgICAgICByZXR1cm4gbmV3IChBbGxvYyhzaXplb2YoQXN0U3RyaW5nTGl0ZXJh
bCkpKSBBc3RTdHJpbmdMaXRlcmFsKHRva2VuKTsKICAgIH0KCiAgICBpbmxpbmUgQXN0Q2hhcmFj
dGVyTGl0ZXJhbCAqTmV3Q2hhcmFjdGVyTGl0ZXJhbChMZXhTdHJlYW06OlRva2VuSW5kZXggdG9r
ZW4pCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdENoYXJhY3Rlckxp
dGVyYWwpKSkgQXN0Q2hhcmFjdGVyTGl0ZXJhbCh0b2tlbik7CiAgICB9CgogICAgaW5saW5lIEFz
dE51bGxMaXRlcmFsICpOZXdOdWxsTGl0ZXJhbChMZXhTdHJlYW06OlRva2VuSW5kZXggdG9rZW4p
CiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdE51bGxMaXRlcmFsKSkp
IEFzdE51bGxMaXRlcmFsKHRva2VuKTsKICAgIH0KCiAgICBpbmxpbmUgQXN0VGhpc0V4cHJlc3Np
b24gKk5ld1RoaXNFeHByZXNzaW9uKExleFN0cmVhbTo6VG9rZW5JbmRleCB0b2tlbikKICAgIHsK
ICAgICAgICByZXR1cm4gbmV3IChBbGxvYyhzaXplb2YoQXN0VGhpc0V4cHJlc3Npb24pKSkgQXN0
VGhpc0V4cHJlc3Npb24odG9rZW4pOwogICAgfQoKICAgIGlubGluZSBBc3RTdXBlckV4cHJlc3Np
b24gKk5ld1N1cGVyRXhwcmVzc2lvbihMZXhTdHJlYW06OlRva2VuSW5kZXggdG9rZW4pCiAgICB7
CiAgICAgICAgcmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdFN1cGVyRXhwcmVzc2lvbikpKSBB
c3RTdXBlckV4cHJlc3Npb24odG9rZW4pOwogICAgfQoKICAgIGlubGluZSBBc3RQYXJlbnRoZXNp
emVkRXhwcmVzc2lvbiAqTmV3UGFyZW50aGVzaXplZEV4cHJlc3Npb24oKQogICAgewogICAgICAg
IHJldHVybiBuZXcgKEFsbG9jKHNpemVvZihBc3RQYXJlbnRoZXNpemVkRXhwcmVzc2lvbikpKSBB
c3RQYXJlbnRoZXNpemVkRXhwcmVzc2lvbigpOwogICAgfQoKICAgIGlubGluZSBBc3RUeXBlRXhw
cmVzc2lvbiAqTmV3VHlwZUV4cHJlc3Npb24oQXN0ICp0eXBlKQogICAgewogICAgICAgIHJldHVy
biBuZXcgKEFsbG9jKHNpemVvZihBc3RUeXBlRXhwcmVzc2lvbikpKSBBc3RUeXBlRXhwcmVzc2lv
bih0eXBlKTsKICAgIH0KCiAgICBpbmxpbmUgQXN0Q2xhc3NJbnN0YW5jZUNyZWF0aW9uRXhwcmVz
c2lvbiAqTmV3Q2xhc3NJbnN0YW5jZUNyZWF0aW9uRXhwcmVzc2lvbigpCiAgICB7CiAgICAgICAg
cmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdENsYXNzSW5zdGFuY2VDcmVhdGlvbkV4cHJlc3Np
b24pKSkgQXN0Q2xhc3NJbnN0YW5jZUNyZWF0aW9uRXhwcmVzc2lvbigoU3RvcmFnZVBvb2wgKikg
dGhpcyk7CiAgICB9CgogICAgaW5saW5lIEFzdERpbUV4cHIgKk5ld0RpbUV4cHIoKQogICAgewog
ICAgICAgIHJldHVybiBuZXcgKEFsbG9jKHNpemVvZihBc3REaW1FeHByKSkpIEFzdERpbUV4cHIo
KTsKICAgIH0KCiAgICBpbmxpbmUgQXN0QXJyYXlDcmVhdGlvbkV4cHJlc3Npb24gKk5ld0FycmF5
Q3JlYXRpb25FeHByZXNzaW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IChBbGxvYyhzaXpl
b2YoQXN0QXJyYXlDcmVhdGlvbkV4cHJlc3Npb24pKSkgQXN0QXJyYXlDcmVhdGlvbkV4cHJlc3Np
b24oKFN0b3JhZ2VQb29sICopIHRoaXMpOwogICAgfQoKICAgIGlubGluZSBBc3RGaWVsZEFjY2Vz
cyAqTmV3RmllbGRBY2Nlc3MoQXN0RmllbGRBY2Nlc3M6OkZpZWxkQWNjZXNzVGFnIHRhZyA9IEFz
dEZpZWxkQWNjZXNzOjpOT05FKQogICAgewogICAgICAgIHJldHVybiBuZXcgKEFsbG9jKHNpemVv
ZihBc3RGaWVsZEFjY2VzcykpKSBBc3RGaWVsZEFjY2Vzcyh0YWcpOwogICAgfQoKICAgIGlubGlu
ZSBBc3RNZXRob2RJbnZvY2F0aW9uICpOZXdNZXRob2RJbnZvY2F0aW9uKCkKICAgIHsKICAgICAg
ICByZXR1cm4gbmV3IChBbGxvYyhzaXplb2YoQXN0TWV0aG9kSW52b2NhdGlvbikpKSBBc3RNZXRo
b2RJbnZvY2F0aW9uKChTdG9yYWdlUG9vbCAqKSB0aGlzKTsKICAgIH0KCiAgICBpbmxpbmUgQXN0
QXJyYXlBY2Nlc3MgKk5ld0FycmF5QWNjZXNzKCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IChB
bGxvYyhzaXplb2YoQXN0QXJyYXlBY2Nlc3MpKSkgQXN0QXJyYXlBY2Nlc3MoKTsKICAgIH0KCiAg
ICBpbmxpbmUgQXN0UG9zdFVuYXJ5RXhwcmVzc2lvbiAqTmV3UG9zdFVuYXJ5RXhwcmVzc2lvbihB
c3RQb3N0VW5hcnlFeHByZXNzaW9uOjpQb3N0VW5hcnlFeHByZXNzaW9uVGFnIHRhZykKICAgIHsK
ICAgICAgICByZXR1cm4gbmV3IChBbGxvYyhzaXplb2YoQXN0UG9zdFVuYXJ5RXhwcmVzc2lvbikp
KSBBc3RQb3N0VW5hcnlFeHByZXNzaW9uKHRhZyk7CiAgICB9CgogICAgaW5saW5lIEFzdFByZVVu
YXJ5RXhwcmVzc2lvbiAqTmV3UHJlVW5hcnlFeHByZXNzaW9uKEFzdFByZVVuYXJ5RXhwcmVzc2lv
bjo6UHJlVW5hcnlFeHByZXNzaW9uVGFnIHRhZykKICAgIHsKICAgICAgICByZXR1cm4gbmV3IChB
bGxvYyhzaXplb2YoQXN0UHJlVW5hcnlFeHByZXNzaW9uKSkpIEFzdFByZVVuYXJ5RXhwcmVzc2lv
bih0YWcpOwogICAgfQoKICAgIGlubGluZSBBc3RDYXN0RXhwcmVzc2lvbiAqTmV3Q2FzdEV4cHJl
c3Npb24oKQogICAgewogICAgICAgIHJldHVybiBuZXcgKEFsbG9jKHNpemVvZihBc3RDYXN0RXhw
cmVzc2lvbikpKSBBc3RDYXN0RXhwcmVzc2lvbigoU3RvcmFnZVBvb2wgKikgdGhpcyk7CiAgICB9
CgogICAgaW5saW5lIEFzdEJpbmFyeUV4cHJlc3Npb24gKk5ld0JpbmFyeUV4cHJlc3Npb24oQXN0
QmluYXJ5RXhwcmVzc2lvbjo6QmluYXJ5RXhwcmVzc2lvblRhZyB0YWcpCiAgICB7CiAgICAgICAg
cmV0dXJuIG5ldyAoQWxsb2Moc2l6ZW9mKEFzdEJpbmFyeUV4cHJlc3Npb24pKSkgQXN0QmluYXJ5
RXhwcmVzc2lvbih0YWcpOwogICAgfQoKICAgIGlubGluZSBBc3RDb25kaXRpb25hbEV4cHJlc3Np
b24gKk5ld0NvbmRpdGlvbmFsRXhwcmVzc2lvbigpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyAo
QWxsb2Moc2l6ZW9mKEFzdENvbmRpdGlvbmFsRXhwcmVzc2lvbikpKSBBc3RDb25kaXRpb25hbEV4
cHJlc3Npb24oKTsKICAgIH0KCiAgICBpbmxpbmUgQXN0QXNzaWdubWVudEV4cHJlc3Npb24gKk5l
d0Fzc2lnbm1lbnRFeHByZXNzaW9uKEFzdEFzc2lnbm1lbnRFeHByZXNzaW9uOjpBc3NpZ25tZW50
RXhwcmVzc2lvblRhZyB0YWcsIExleFN0cmVhbTo6VG9rZW5JbmRleCB0b2tlbikKICAgIHsKICAg
ICAgICByZXR1cm4gbmV3IChBbGxvYyhzaXplb2YoQXN0QXNzaWdubWVudEV4cHJlc3Npb24pKSkg
QXN0QXNzaWdubWVudEV4cHJlc3Npb24odGFnLCB0b2tlbik7CiAgICB9CgogICAgIAoKICAgICAK
ICAgICAKICAgICAKICAgICAKICAgICAKICAgIGlubGluZSBDYXNlRWxlbWVudCAqR2VuQ2FzZUVs
ZW1lbnQoKQogICAgewogICAgICAgIHJldHVybiBuZXcgKEFsbG9jKHNpemVvZihDYXNlRWxlbWVu
dCkpKSBDYXNlRWxlbWVudCgpOwogICAgfQoKICAgIGlubGluZSBBc3RCbG9jayAqR2VuQmxvY2so
KQogICAgewogICAgICAgIEFzdEJsb2NrICpwID0gTmV3QmxvY2soKTsKICAgICAgICBwIC0+IGdl
bmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9CgogICAgaW5saW5lIEFzdFByaW1p
dGl2ZVR5cGUgKkdlblByaW1pdGl2ZVR5cGUoQXN0OjpLaW5kIGtpbmQsIExleFN0cmVhbTo6VG9r
ZW5JbmRleCB0b2tlbikKICAgIHsKICAgICAgICBBc3RQcmltaXRpdmVUeXBlICpwID0gTmV3UHJp
bWl0aXZlVHlwZShraW5kLCB0b2tlbik7CiAgICAgICAgcCAtPiBnZW5lcmF0ZWQgPSAxOwogICAg
ICAgIHJldHVybiBwOwogICAgfQoKICAgIGlubGluZSBBc3RBcnJheVR5cGUgKkdlbkFycmF5VHlw
ZSgpCiAgICB7CiAgICAgICAgQXN0QXJyYXlUeXBlICpwID0gTmV3QXJyYXlUeXBlKCk7CiAgICAg
ICAgcCAtPiBnZW5lcmF0ZWQgPSAxOwogICAgICAgIHJldHVybiBwOwogICAgfQoKICAgIGlubGlu
ZSBBc3RTaW1wbGVOYW1lICpHZW5TaW1wbGVOYW1lKExleFN0cmVhbTo6VG9rZW5JbmRleCB0b2tl
bikKICAgIHsKICAgICAgICBBc3RTaW1wbGVOYW1lICpwID0gTmV3U2ltcGxlTmFtZSh0b2tlbik7
CiAgICAgICAgcCAtPiBnZW5lcmF0ZWQgPSAxOwogICAgICAgIHJldHVybiBwOwogICAgfQoKICAg
IGlubGluZSBBc3RQYWNrYWdlRGVjbGFyYXRpb24gKkdlblBhY2thZ2VEZWNsYXJhdGlvbigpCiAg
ICB7CiAgICAgICAgQXN0UGFja2FnZURlY2xhcmF0aW9uICpwID0gTmV3UGFja2FnZURlY2xhcmF0
aW9uKCk7CiAgICAgICAgcCAtPiBnZW5lcmF0ZWQgPSAxOwogICAgICAgIHJldHVybiBwOwogICAg
fQoKICAgIGlubGluZSBBc3RJbXBvcnREZWNsYXJhdGlvbiAqR2VuSW1wb3J0RGVjbGFyYXRpb24o
KQogICAgewogICAgICAgIEFzdEltcG9ydERlY2xhcmF0aW9uICpwID0gTmV3SW1wb3J0RGVjbGFy
YXRpb24oKTsKICAgICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAg
ICB9CgogICAgaW5saW5lIEFzdENvbXBpbGF0aW9uVW5pdCAqR2VuQ29tcGlsYXRpb25Vbml0KCkK
ICAgIHsKICAgICAgICBBc3RDb21waWxhdGlvblVuaXQgKnAgPSBOZXdDb21waWxhdGlvblVuaXQo
KTsKICAgICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9Cgog
ICAgaW5saW5lIEFzdE1vZGlmaWVyICpHZW5Nb2RpZmllcihBc3Q6OktpbmQga2luZCwgTGV4U3Ry
ZWFtOjpUb2tlbkluZGV4IHRva2VuKQogICAgewogICAgICAgIEFzdE1vZGlmaWVyICpwID0gTmV3
TW9kaWZpZXIoa2luZCwgdG9rZW4pOwogICAgICAgIHAgLT4gZ2VuZXJhdGVkID0gMTsKICAgICAg
ICByZXR1cm4gcDsKICAgIH0KCiAgICBpbmxpbmUgQXN0RW1wdHlEZWNsYXJhdGlvbiAqR2VuRW1w
dHlEZWNsYXJhdGlvbihMZXhTdHJlYW06OlRva2VuSW5kZXggdG9rZW4pCiAgICB7CiAgICAgICAg
QXN0RW1wdHlEZWNsYXJhdGlvbiAqcCA9IE5ld0VtcHR5RGVjbGFyYXRpb24odG9rZW4pOwogICAg
ICAgIHAgLT4gZ2VuZXJhdGVkID0gMTsKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAgICBpbmxp
bmUgQXN0Q2xhc3NCb2R5ICpHZW5DbGFzc0JvZHkoKQogICAgewogICAgICAgIEFzdENsYXNzQm9k
eSAqcCA9IE5ld0NsYXNzQm9keSgpOwogICAgICAgIHAgLT4gZ2VuZXJhdGVkID0gMTsKICAgICAg
ICByZXR1cm4gcDsKICAgIH0KCiAgICBpbmxpbmUgQXN0Q2xhc3NEZWNsYXJhdGlvbiAqR2VuQ2xh
c3NEZWNsYXJhdGlvbigpCiAgICB7CiAgICAgICAgQXN0Q2xhc3NEZWNsYXJhdGlvbiAqcCA9IE5l
d0NsYXNzRGVjbGFyYXRpb24oKTsKICAgICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAg
cmV0dXJuIHA7CiAgICB9CgogICAgaW5saW5lIEFzdEFycmF5SW5pdGlhbGl6ZXIgKkdlbkFycmF5
SW5pdGlhbGl6ZXIoKQogICAgewogICAgICAgIEFzdEFycmF5SW5pdGlhbGl6ZXIgKnAgPSBOZXdB
cnJheUluaXRpYWxpemVyKCk7CiAgICAgICAgcCAtPiBnZW5lcmF0ZWQgPSAxOwogICAgICAgIHJl
dHVybiBwOwogICAgfQoKICAgIGlubGluZSBBc3RCcmFja2V0cyAqR2VuQnJhY2tldHMoTGV4U3Ry
ZWFtOjpUb2tlbkluZGV4IGxlZnQsIExleFN0cmVhbTo6VG9rZW5JbmRleCByaWdodCkKICAgIHsK
ICAgICAgICBBc3RCcmFja2V0cyAqcCA9IE5ld0JyYWNrZXRzKGxlZnQsIHJpZ2h0KTsKICAgICAg
ICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9CgogICAgaW5saW5l
IEFzdFZhcmlhYmxlRGVjbGFyYXRvcklkICpHZW5WYXJpYWJsZURlY2xhcmF0b3JJZCgpCiAgICB7
CiAgICAgICAgQXN0VmFyaWFibGVEZWNsYXJhdG9ySWQgKnAgPSBOZXdWYXJpYWJsZURlY2xhcmF0
b3JJZCgpOwogICAgICAgIHAgLT4gZ2VuZXJhdGVkID0gMTsKICAgICAgICByZXR1cm4gcDsKICAg
IH0KCiAgICBpbmxpbmUgQXN0VmFyaWFibGVEZWNsYXJhdG9yICpHZW5WYXJpYWJsZURlY2xhcmF0
b3IoKQogICAgewogICAgICAgIEFzdFZhcmlhYmxlRGVjbGFyYXRvciAqcCA9IE5ld1ZhcmlhYmxl
RGVjbGFyYXRvcigpOwogICAgICAgIHAgLT4gZ2VuZXJhdGVkID0gMTsKICAgICAgICByZXR1cm4g
cDsKICAgIH0KCiAgICBpbmxpbmUgQXN0RmllbGREZWNsYXJhdGlvbiAqR2VuRmllbGREZWNsYXJh
dGlvbigpCiAgICB7CiAgICAgICAgQXN0RmllbGREZWNsYXJhdGlvbiAqcCA9IE5ld0ZpZWxkRGVj
bGFyYXRpb24oKTsKICAgICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7
CiAgICB9CgogICAgaW5saW5lIEFzdEZvcm1hbFBhcmFtZXRlciAqR2VuRm9ybWFsUGFyYW1ldGVy
KCkKICAgIHsKICAgICAgICBBc3RGb3JtYWxQYXJhbWV0ZXIgKnAgPSBOZXdGb3JtYWxQYXJhbWV0
ZXIoKTsKICAgICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9
CgogICAgaW5saW5lIEFzdE1ldGhvZERlY2xhcmF0b3IgKkdlbk1ldGhvZERlY2xhcmF0b3IoKQog
ICAgewogICAgICAgIEFzdE1ldGhvZERlY2xhcmF0b3IgKnAgPSBOZXdNZXRob2REZWNsYXJhdG9y
KCk7CiAgICAgICAgcCAtPiBnZW5lcmF0ZWQgPSAxOwogICAgICAgIHJldHVybiBwOwogICAgfQoK
ICAgIGlubGluZSBBc3RNZXRob2REZWNsYXJhdGlvbiAqR2VuTWV0aG9kRGVjbGFyYXRpb24oKQog
ICAgewogICAgICAgIEFzdE1ldGhvZERlY2xhcmF0aW9uICpwID0gTmV3TWV0aG9kRGVjbGFyYXRp
b24oKTsKICAgICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9
CgogICAgaW5saW5lIEFzdFN0YXRpY0luaXRpYWxpemVyICpHZW5TdGF0aWNJbml0aWFsaXplcigp
CiAgICB7CiAgICAgICAgQXN0U3RhdGljSW5pdGlhbGl6ZXIgKnAgPSBOZXdTdGF0aWNJbml0aWFs
aXplcigpOwogICAgICAgIHAgLT4gZ2VuZXJhdGVkID0gMTsKICAgICAgICByZXR1cm4gcDsKICAg
IH0KCiAgICBpbmxpbmUgQXN0VGhpc0NhbGwgKkdlblRoaXNDYWxsKCkKICAgIHsKICAgICAgICBB
c3RUaGlzQ2FsbCAqcCA9IE5ld1RoaXNDYWxsKCk7CiAgICAgICAgcCAtPiBnZW5lcmF0ZWQgPSAx
OwogICAgICAgIHJldHVybiBwOwogICAgfQoKICAgIGlubGluZSBBc3RTdXBlckNhbGwgKkdlblN1
cGVyQ2FsbCgpCiAgICB7CiAgICAgICAgQXN0U3VwZXJDYWxsICpwID0gTmV3U3VwZXJDYWxsKCk7
CiAgICAgICAgcCAtPiBnZW5lcmF0ZWQgPSAxOwogICAgICAgIHJldHVybiBwOwogICAgfQoKICAg
IGlubGluZSBBc3RDb25zdHJ1Y3RvckJsb2NrICpHZW5Db25zdHJ1Y3RvckJsb2NrKCkKICAgIHsK
ICAgICAgICBBc3RDb25zdHJ1Y3RvckJsb2NrICpwID0gTmV3Q29uc3RydWN0b3JCbG9jaygpOwog
ICAgICAgIHAgLT4gZ2VuZXJhdGVkID0gMTsKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAgICBp
bmxpbmUgQXN0Q29uc3RydWN0b3JEZWNsYXJhdGlvbiAqR2VuQ29uc3RydWN0b3JEZWNsYXJhdGlv
bigpCiAgICB7CiAgICAgICAgQXN0Q29uc3RydWN0b3JEZWNsYXJhdGlvbiAqcCA9IE5ld0NvbnN0
cnVjdG9yRGVjbGFyYXRpb24oKTsKICAgICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAg
cmV0dXJuIHA7CiAgICB9CgogICAgaW5saW5lIEFzdEludGVyZmFjZURlY2xhcmF0aW9uICpHZW5J
bnRlcmZhY2VEZWNsYXJhdGlvbigpCiAgICB7CiAgICAgICAgQXN0SW50ZXJmYWNlRGVjbGFyYXRp
b24gKnAgPSBOZXdJbnRlcmZhY2VEZWNsYXJhdGlvbigpOwogICAgICAgIHAgLT4gZ2VuZXJhdGVk
ID0gMTsKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAgICBpbmxpbmUgQXN0TG9jYWxWYXJpYWJs
ZURlY2xhcmF0aW9uU3RhdGVtZW50ICpHZW5Mb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1l
bnQoKQogICAgewogICAgICAgIEFzdExvY2FsVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCAq
cCA9IE5ld0xvY2FsVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCgpOwogICAgICAgIHAgLT4g
Z2VuZXJhdGVkID0gMTsKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAgICBpbmxpbmUgQXN0SWZT
dGF0ZW1lbnQgKkdlbklmU3RhdGVtZW50KCkKICAgIHsKICAgICAgICBBc3RJZlN0YXRlbWVudCAq
cCA9IE5ld0lmU3RhdGVtZW50KCk7CiAgICAgICAgcCAtPiBnZW5lcmF0ZWQgPSAxOwogICAgICAg
IHJldHVybiBwOwogICAgfQoKICAgIGlubGluZSBBc3RFbXB0eVN0YXRlbWVudCAqR2VuRW1wdHlT
dGF0ZW1lbnQoTGV4U3RyZWFtOjpUb2tlbkluZGV4IHRva2VuKQogICAgewogICAgICAgIEFzdEVt
cHR5U3RhdGVtZW50ICpwID0gTmV3RW1wdHlTdGF0ZW1lbnQodG9rZW4pOwogICAgICAgIHAgLT4g
Z2VuZXJhdGVkID0gMTsKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAgICBpbmxpbmUgQXN0RXhw
cmVzc2lvblN0YXRlbWVudCAqR2VuRXhwcmVzc2lvblN0YXRlbWVudCgpCiAgICB7CiAgICAgICAg
QXN0RXhwcmVzc2lvblN0YXRlbWVudCAqcCA9IE5ld0V4cHJlc3Npb25TdGF0ZW1lbnQoKTsKICAg
ICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9CgogICAgaW5s
aW5lIEFzdENhc2VMYWJlbCAqR2VuQ2FzZUxhYmVsKCkKICAgIHsKICAgICAgICBBc3RDYXNlTGFi
ZWwgKnAgPSBOZXdDYXNlTGFiZWwoKTsKICAgICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAg
ICAgcmV0dXJuIHA7CiAgICB9CgogICAgaW5saW5lIEFzdERlZmF1bHRMYWJlbCAqR2VuRGVmYXVs
dExhYmVsKCkKICAgIHsKICAgICAgICBBc3REZWZhdWx0TGFiZWwgKnAgPSBOZXdEZWZhdWx0TGFi
ZWwoKTsKICAgICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9
CgogICAgaW5saW5lIEFzdFN3aXRjaEJsb2NrU3RhdGVtZW50ICpHZW5Td2l0Y2hCbG9ja1N0YXRl
bWVudCgpCiAgICB7CiAgICAgICAgQXN0U3dpdGNoQmxvY2tTdGF0ZW1lbnQgKnAgPSBOZXdTd2l0
Y2hCbG9ja1N0YXRlbWVudCgpOwogICAgICAgIHAgLT4gZ2VuZXJhdGVkID0gMTsKICAgICAgICBy
ZXR1cm4gcDsKICAgIH0KCiAgICBpbmxpbmUgQXN0U3dpdGNoU3RhdGVtZW50ICpHZW5Td2l0Y2hT
dGF0ZW1lbnQoKQogICAgewogICAgICAgIEFzdFN3aXRjaFN0YXRlbWVudCAqcCA9IE5ld1N3aXRj
aFN0YXRlbWVudCgpOwogICAgICAgIHAgLT4gZ2VuZXJhdGVkID0gMTsKICAgICAgICByZXR1cm4g
cDsKICAgIH0KCiAgICBpbmxpbmUgQXN0V2hpbGVTdGF0ZW1lbnQgKkdlbldoaWxlU3RhdGVtZW50
KCkKICAgIHsKICAgICAgICBBc3RXaGlsZVN0YXRlbWVudCAqcCA9IE5ld1doaWxlU3RhdGVtZW50
KCk7CiAgICAgICAgcCAtPiBnZW5lcmF0ZWQgPSAxOwogICAgICAgIHJldHVybiBwOwogICAgfQoK
ICAgIGlubGluZSBBc3REb1N0YXRlbWVudCAqR2VuRG9TdGF0ZW1lbnQoKQogICAgewogICAgICAg
IEFzdERvU3RhdGVtZW50ICpwID0gTmV3RG9TdGF0ZW1lbnQoKTsKICAgICAgICBwIC0+IGdlbmVy
YXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9CgogICAgaW5saW5lIEFzdEZvclN0YXRl
bWVudCAqR2VuRm9yU3RhdGVtZW50KCkKICAgIHsKICAgICAgICBBc3RGb3JTdGF0ZW1lbnQgKnAg
PSBOZXdGb3JTdGF0ZW1lbnQoKTsKICAgICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAg
cmV0dXJuIHA7CiAgICB9CgogICAgaW5saW5lIEFzdEJyZWFrU3RhdGVtZW50ICpHZW5CcmVha1N0
YXRlbWVudCgpCiAgICB7CiAgICAgICAgQXN0QnJlYWtTdGF0ZW1lbnQgKnAgPSBOZXdCcmVha1N0
YXRlbWVudCgpOwogICAgICAgIHAgLT4gZ2VuZXJhdGVkID0gMTsKICAgICAgICByZXR1cm4gcDsK
ICAgIH0KCiAgICBpbmxpbmUgQXN0Q29udGludWVTdGF0ZW1lbnQgKkdlbkNvbnRpbnVlU3RhdGVt
ZW50KCkKICAgIHsKICAgICAgICBBc3RDb250aW51ZVN0YXRlbWVudCAqcCA9IE5ld0NvbnRpbnVl
U3RhdGVtZW50KCk7CiAgICAgICAgcCAtPiBnZW5lcmF0ZWQgPSAxOwogICAgICAgIHJldHVybiBw
OwogICAgfQoKICAgIGlubGluZSBBc3RSZXR1cm5TdGF0ZW1lbnQgKkdlblJldHVyblN0YXRlbWVu
dCgpCiAgICB7CiAgICAgICAgQXN0UmV0dXJuU3RhdGVtZW50ICpwID0gTmV3UmV0dXJuU3RhdGVt
ZW50KCk7CiAgICAgICAgcCAtPiBnZW5lcmF0ZWQgPSAxOwogICAgICAgIHJldHVybiBwOwogICAg
fQoKICAgIGlubGluZSBBc3RUaHJvd1N0YXRlbWVudCAqR2VuVGhyb3dTdGF0ZW1lbnQoKQogICAg
ewogICAgICAgIEFzdFRocm93U3RhdGVtZW50ICpwID0gTmV3VGhyb3dTdGF0ZW1lbnQoKTsKICAg
ICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9CgogICAgaW5s
aW5lIEFzdFN5bmNocm9uaXplZFN0YXRlbWVudCAqR2VuU3luY2hyb25pemVkU3RhdGVtZW50KCkK
ICAgIHsKICAgICAgICBBc3RTeW5jaHJvbml6ZWRTdGF0ZW1lbnQgKnAgPSBOZXdTeW5jaHJvbml6
ZWRTdGF0ZW1lbnQoKTsKICAgICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJu
IHA7CiAgICB9CgogICAgaW5saW5lIEFzdENhdGNoQ2xhdXNlICpHZW5DYXRjaENsYXVzZSgpCiAg
ICB7CiAgICAgICAgQXN0Q2F0Y2hDbGF1c2UgKnAgPSBOZXdDYXRjaENsYXVzZSgpOwogICAgICAg
IHAgLT4gZ2VuZXJhdGVkID0gMTsKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAgICBpbmxpbmUg
QXN0RmluYWxseUNsYXVzZSAqR2VuRmluYWxseUNsYXVzZSgpCiAgICB7CiAgICAgICAgQXN0Rmlu
YWxseUNsYXVzZSAqcCA9IE5ld0ZpbmFsbHlDbGF1c2UoKTsKICAgICAgICBwIC0+IGdlbmVyYXRl
ZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9CgogICAgaW5saW5lIEFzdFRyeVN0YXRlbWVu
dCAqR2VuVHJ5U3RhdGVtZW50KCkKICAgIHsKICAgICAgICBBc3RUcnlTdGF0ZW1lbnQgKnAgPSBO
ZXdUcnlTdGF0ZW1lbnQoKTsKICAgICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0
dXJuIHA7CiAgICB9CgogICAgaW5saW5lIEFzdEludGVnZXJMaXRlcmFsICpHZW5JbnRlZ2VyTGl0
ZXJhbChMZXhTdHJlYW06OlRva2VuSW5kZXggdG9rZW4pCiAgICB7CiAgICAgICAgQXN0SW50ZWdl
ckxpdGVyYWwgKnAgPSBOZXdJbnRlZ2VyTGl0ZXJhbCh0b2tlbik7CiAgICAgICAgcCAtPiBnZW5l
cmF0ZWQgPSAxOwogICAgICAgIHJldHVybiBwOwogICAgfQoKICAgIGlubGluZSBBc3RMb25nTGl0
ZXJhbCAqR2VuTG9uZ0xpdGVyYWwoTGV4U3RyZWFtOjpUb2tlbkluZGV4IHRva2VuKQogICAgewog
ICAgICAgIEFzdExvbmdMaXRlcmFsICpwID0gTmV3TG9uZ0xpdGVyYWwodG9rZW4pOwogICAgICAg
IHAgLT4gZ2VuZXJhdGVkID0gMTsKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAgICBpbmxpbmUg
QXN0RmxvYXRpbmdQb2ludExpdGVyYWwgKkdlbkZsb2F0aW5nUG9pbnRMaXRlcmFsKExleFN0cmVh
bTo6VG9rZW5JbmRleCB0b2tlbikKICAgIHsKICAgICAgICBBc3RGbG9hdGluZ1BvaW50TGl0ZXJh
bCAqcCA9IE5ld0Zsb2F0aW5nUG9pbnRMaXRlcmFsKHRva2VuKTsKICAgICAgICBwIC0+IGdlbmVy
YXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9CgogICAgaW5saW5lIEFzdERvdWJsZUxp
dGVyYWwgKkdlbkRvdWJsZUxpdGVyYWwoTGV4U3RyZWFtOjpUb2tlbkluZGV4IHRva2VuKQogICAg
ewogICAgICAgIEFzdERvdWJsZUxpdGVyYWwgKnAgPSBOZXdEb3VibGVMaXRlcmFsKHRva2VuKTsK
ICAgICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9CgogICAg
aW5saW5lIEFzdFRydWVMaXRlcmFsICpHZW5UcnVlTGl0ZXJhbChMZXhTdHJlYW06OlRva2VuSW5k
ZXggdG9rZW4pCiAgICB7CiAgICAgICAgQXN0VHJ1ZUxpdGVyYWwgKnAgPSBOZXdUcnVlTGl0ZXJh
bCh0b2tlbik7CiAgICAgICAgcCAtPiBnZW5lcmF0ZWQgPSAxOwogICAgICAgIHJldHVybiBwOwog
ICAgfQoKICAgIGlubGluZSBBc3RGYWxzZUxpdGVyYWwgKkdlbkZhbHNlTGl0ZXJhbChMZXhTdHJl
YW06OlRva2VuSW5kZXggdG9rZW4pCiAgICB7CiAgICAgICAgQXN0RmFsc2VMaXRlcmFsICpwID0g
TmV3RmFsc2VMaXRlcmFsKHRva2VuKTsKICAgICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAg
ICAgcmV0dXJuIHA7CiAgICB9CgogICAgaW5saW5lIEFzdFN0cmluZ0xpdGVyYWwgKkdlblN0cmlu
Z0xpdGVyYWwoTGV4U3RyZWFtOjpUb2tlbkluZGV4IHRva2VuKQogICAgewogICAgICAgIEFzdFN0
cmluZ0xpdGVyYWwgKnAgPSBOZXdTdHJpbmdMaXRlcmFsKHRva2VuKTsKICAgICAgICBwIC0+IGdl
bmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9CgogICAgaW5saW5lIEFzdENoYXJh
Y3RlckxpdGVyYWwgKkdlbkNoYXJhY3RlckxpdGVyYWwoTGV4U3RyZWFtOjpUb2tlbkluZGV4IHRv
a2VuKQogICAgewogICAgICAgIEFzdENoYXJhY3RlckxpdGVyYWwgKnAgPSBOZXdDaGFyYWN0ZXJM
aXRlcmFsKHRva2VuKTsKICAgICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJu
IHA7CiAgICB9CgogICAgaW5saW5lIEFzdE51bGxMaXRlcmFsICpHZW5OdWxsTGl0ZXJhbChMZXhT
dHJlYW06OlRva2VuSW5kZXggdG9rZW4pCiAgICB7CiAgICAgICAgQXN0TnVsbExpdGVyYWwgKnAg
PSBOZXdOdWxsTGl0ZXJhbCh0b2tlbik7CiAgICAgICAgcCAtPiBnZW5lcmF0ZWQgPSAxOwogICAg
ICAgIHJldHVybiBwOwogICAgfQoKICAgIGlubGluZSBBc3RUaGlzRXhwcmVzc2lvbiAqR2VuVGhp
c0V4cHJlc3Npb24oTGV4U3RyZWFtOjpUb2tlbkluZGV4IHRva2VuKQogICAgewogICAgICAgIEFz
dFRoaXNFeHByZXNzaW9uICpwID0gTmV3VGhpc0V4cHJlc3Npb24odG9rZW4pOwogICAgICAgIHAg
LT4gZ2VuZXJhdGVkID0gMTsKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAgICBpbmxpbmUgQXN0
U3VwZXJFeHByZXNzaW9uICpHZW5TdXBlckV4cHJlc3Npb24oTGV4U3RyZWFtOjpUb2tlbkluZGV4
IHRva2VuKQogICAgewogICAgICAgIEFzdFN1cGVyRXhwcmVzc2lvbiAqcCA9IE5ld1N1cGVyRXhw
cmVzc2lvbih0b2tlbik7CiAgICAgICAgcCAtPiBnZW5lcmF0ZWQgPSAxOwogICAgICAgIHJldHVy
biBwOwogICAgfQoKICAgIGlubGluZSBBc3RQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiAqR2VuUGFy
ZW50aGVzaXplZEV4cHJlc3Npb24oKQogICAgewogICAgICAgIEFzdFBhcmVudGhlc2l6ZWRFeHBy
ZXNzaW9uICpwID0gTmV3UGFyZW50aGVzaXplZEV4cHJlc3Npb24oKTsKICAgICAgICBwIC0+IGdl
bmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9CgogICAgaW5saW5lIEFzdFR5cGVF
eHByZXNzaW9uICpHZW5UeXBlRXhwcmVzc2lvbihBc3QgKnR5cGUpCiAgICB7CiAgICAgICAgQXN0
VHlwZUV4cHJlc3Npb24gKnAgPSBOZXdUeXBlRXhwcmVzc2lvbih0eXBlKTsKICAgICAgICBwIC0+
IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9CgogICAgaW5saW5lIEFzdENs
YXNzSW5zdGFuY2VDcmVhdGlvbkV4cHJlc3Npb24gKkdlbkNsYXNzSW5zdGFuY2VDcmVhdGlvbkV4
cHJlc3Npb24oKQogICAgewogICAgICAgIEFzdENsYXNzSW5zdGFuY2VDcmVhdGlvbkV4cHJlc3Np
b24gKnAgPSBOZXdDbGFzc0luc3RhbmNlQ3JlYXRpb25FeHByZXNzaW9uKCk7CiAgICAgICAgcCAt
PiBnZW5lcmF0ZWQgPSAxOwogICAgICAgIHJldHVybiBwOwogICAgfQoKICAgIGlubGluZSBBc3RE
aW1FeHByICpHZW5EaW1FeHByKCkKICAgIHsKICAgICAgICBBc3REaW1FeHByICpwID0gTmV3RGlt
RXhwcigpOwogICAgICAgIHAgLT4gZ2VuZXJhdGVkID0gMTsKICAgICAgICByZXR1cm4gcDsKICAg
IH0KCiAgICBpbmxpbmUgQXN0QXJyYXlDcmVhdGlvbkV4cHJlc3Npb24gKkdlbkFycmF5Q3JlYXRp
b25FeHByZXNzaW9uKCkKICAgIHsKICAgICAgICBBc3RBcnJheUNyZWF0aW9uRXhwcmVzc2lvbiAq
cCA9IE5ld0FycmF5Q3JlYXRpb25FeHByZXNzaW9uKCk7CiAgICAgICAgcCAtPiBnZW5lcmF0ZWQg
PSAxOwogICAgICAgIHJldHVybiBwOwogICAgfQoKICAgIGlubGluZSBBc3RGaWVsZEFjY2VzcyAq
R2VuRmllbGRBY2Nlc3MoQXN0RmllbGRBY2Nlc3M6OkZpZWxkQWNjZXNzVGFnIHRhZyA9IEFzdEZp
ZWxkQWNjZXNzOjpOT05FKQogICAgewogICAgICAgIEFzdEZpZWxkQWNjZXNzICpwID0gTmV3Rmll
bGRBY2Nlc3ModGFnKTsKICAgICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJu
IHA7CiAgICB9CgogICAgaW5saW5lIEFzdE1ldGhvZEludm9jYXRpb24gKkdlbk1ldGhvZEludm9j
YXRpb24oKQogICAgewogICAgICAgIEFzdE1ldGhvZEludm9jYXRpb24gKnAgPSBOZXdNZXRob2RJ
bnZvY2F0aW9uKCk7CiAgICAgICAgcCAtPiBnZW5lcmF0ZWQgPSAxOwogICAgICAgIHJldHVybiBw
OwogICAgfQoKICAgIGlubGluZSBBc3RBcnJheUFjY2VzcyAqR2VuQXJyYXlBY2Nlc3MoKQogICAg
ewogICAgICAgIEFzdEFycmF5QWNjZXNzICpwID0gTmV3QXJyYXlBY2Nlc3MoKTsKICAgICAgICBw
IC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9CgogICAgaW5saW5lIEFz
dFBvc3RVbmFyeUV4cHJlc3Npb24gKkdlblBvc3RVbmFyeUV4cHJlc3Npb24oQXN0UG9zdFVuYXJ5
RXhwcmVzc2lvbjo6UG9zdFVuYXJ5RXhwcmVzc2lvblRhZyB0YWcpCiAgICB7CiAgICAgICAgQXN0
UG9zdFVuYXJ5RXhwcmVzc2lvbiAqcCA9IE5ld1Bvc3RVbmFyeUV4cHJlc3Npb24odGFnKTsKICAg
ICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9CgogICAgaW5s
aW5lIEFzdFByZVVuYXJ5RXhwcmVzc2lvbiAqR2VuUHJlVW5hcnlFeHByZXNzaW9uKEFzdFByZVVu
YXJ5RXhwcmVzc2lvbjo6UHJlVW5hcnlFeHByZXNzaW9uVGFnIHRhZykKICAgIHsKICAgICAgICBB
c3RQcmVVbmFyeUV4cHJlc3Npb24gKnAgPSBOZXdQcmVVbmFyeUV4cHJlc3Npb24odGFnKTsKICAg
ICAgICBwIC0+IGdlbmVyYXRlZCA9IDE7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9CgogICAgaW5s
aW5lIEFzdENhc3RFeHByZXNzaW9uICpHZW5DYXN0RXhwcmVzc2lvbigpCiAgICB7CiAgICAgICAg
QXN0Q2FzdEV4cHJlc3Npb24gKnAgPSBOZXdDYXN0RXhwcmVzc2lvbigpOwogICAgICAgIHAgLT4g
Z2VuZXJhdGVkID0gMTsKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAgICBpbmxpbmUgQXN0Qmlu
YXJ5RXhwcmVzc2lvbiAqR2VuQmluYXJ5RXhwcmVzc2lvbihBc3RCaW5hcnlFeHByZXNzaW9uOjpC
aW5hcnlFeHByZXNzaW9uVGFnIHRhZykKICAgIHsKICAgICAgICBBc3RCaW5hcnlFeHByZXNzaW9u
ICpwID0gTmV3QmluYXJ5RXhwcmVzc2lvbih0YWcpOwogICAgICAgIHAgLT4gZ2VuZXJhdGVkID0g
MTsKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAgICBpbmxpbmUgQXN0Q29uZGl0aW9uYWxFeHBy
ZXNzaW9uICpHZW5Db25kaXRpb25hbEV4cHJlc3Npb24oKQogICAgewogICAgICAgIEFzdENvbmRp
dGlvbmFsRXhwcmVzc2lvbiAqcCA9IE5ld0NvbmRpdGlvbmFsRXhwcmVzc2lvbigpOwogICAgICAg
IHAgLT4gZ2VuZXJhdGVkID0gMTsKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAgICBpbmxpbmUg
QXN0QXNzaWdubWVudEV4cHJlc3Npb24gKkdlbkFzc2lnbm1lbnRFeHByZXNzaW9uKEFzdEFzc2ln
bm1lbnRFeHByZXNzaW9uOjpBc3NpZ25tZW50RXhwcmVzc2lvblRhZyB0YWcsIExleFN0cmVhbTo6
VG9rZW5JbmRleCB0b2tlbikKICAgIHsKICAgICAgICBBc3RBc3NpZ25tZW50RXhwcmVzc2lvbiAq
cCA9IE5ld0Fzc2lnbm1lbnRFeHByZXNzaW9uKHRhZywgdG9rZW4pOwogICAgICAgIHAgLT4gZ2Vu
ZXJhdGVkID0gMTsKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAgICAgCgogICAgIAogICAgIAog
ICAgIAogICAgc2l6ZV90IFNwYWNlQWxsb2NhdGVkKHZvaWQpCiAgICB7CiAgICAgICAgcmV0dXJu
ICgoYmFzZV9zaXplICogc2l6ZW9mKENlbGwgKiopKSArIChzaXplICogc2l6ZW9mKENlbGwpKSk7
CiAgICB9CgogICAgIAogICAgIAogICAgIAogICAgc2l6ZV90IFNwYWNlVXNlZCh2b2lkKQogICAg
ewogICAgICAgIHJldHVybiAoKChzaXplID4+IGxvZ19ibGtzaXplKSAqIHNpemVvZihDZWxsICoq
KSkgKyAodG9wICogc2l6ZW9mKENlbGwpKSk7CiAgICB9Cn07CgoKIAogCiAKIAogCiAKIAogCiAK
IAoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUTywgY2xhc3MgRlJPTT4KVE8gRFlOQU1JQ19DQVNUKEZS
T00gZikgewoKCgogICAgIAogICAgaWYgKCFmKSByZXR1cm4gKFRPKSBfX251bGwgOwogICAgVE8g
cHRyID0gZHluYW1pY19jYXN0PFRPPiAoZik7CgogICAgaWYgKCEgcHRyKSB7CgoKCgoKICAgICAg
ICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIHB0ciAmJiAiRmFpbGVkIGR5bmFtaWNfY2FzdDw+IGlu
IERZTkFNSUNfQ0FTVCIgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInB0ciAmJiBcIkZhaWxlZCBk
eW5hbWljX2Nhc3Q8PiBpbiBEWU5BTUlDX0NBU1RcIiIgLCAiLi4vLi4vamlrZXMvc3JjL2FzdC5o
IiwgNTIxNSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgIH0KICAgIHJldHVybiBw
dHI7Cgp9CgoKIAogCiAKCmlubGluZSBBc3RTdGF0ZW1lbnQgKkFzdDo6U3RhdGVtZW50Q2FzdCgp
CnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8QXN0U3RhdGVtZW50ICosIEFzdCAqPgogICAgICAg
IChjbGFzc190YWcgPT0gU1RBVEVNRU5UID8gdGhpcyA6IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0
RXhwcmVzc2lvbiAqQXN0OjpFeHByZXNzaW9uQ2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NB
U1Q8QXN0RXhwcmVzc2lvbiAqLCBBc3QgKj4KICAgICAgICAoY2xhc3NfdGFnID09IEVYUFJFU1NJ
T04gPyB0aGlzIDogX19udWxsICk7Cn0KCmlubGluZSBBc3RQcmltaXRpdmVUeXBlICpBc3Q6OlBy
aW1pdGl2ZVR5cGVDYXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNfQ0FTVDxBc3RQcmltaXRpdmVU
eXBlICosIEFzdCAqPgogICAgICAgIChjbGFzc190YWcgPT0gUFJJTUlUSVZFX1RZUEUgPyB0aGlz
IDogX19udWxsICk7Cn0KCmlubGluZSBBc3RNb2RpZmllciAqQXN0OjpNb2RpZmllckNhc3QoKQp7
CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFzdE1vZGlmaWVyICosIEFzdCAqPgogICAgICAgIChj
bGFzc190YWcgPT0gTU9ESUZJRVIgPyB0aGlzIDogX19udWxsICk7Cn0KCmlubGluZSBBc3RGaWVs
ZERlY2xhcmF0aW9uICpBc3Q6OlN0YXRpY0ZpZWxkQ2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlD
X0NBU1Q8QXN0RmllbGREZWNsYXJhdGlvbiAqLCBBc3QgKj4KICAgICAgICAoY2xhc3NfdGFnID09
IFNUQVRJQ19GSUVMRCA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5saW5lIEFzdENsYXNzQm9keSAq
QXN0OjpVbnBhcnNlZENsYXNzQm9keUNhc3QoKQp7CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFz
dENsYXNzQm9keSAqLCBBc3QgKj4KICAgICAgICAoY2xhc3NfdGFnID09IFVOUEFSU0VEID8gdGhp
cyA6IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0SW50ZXJmYWNlRGVjbGFyYXRpb24gKkFzdDo6VW5w
YXJzZWRJbnRlcmZhY2VCb2R5Q2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8QXN0SW50
ZXJmYWNlRGVjbGFyYXRpb24gKiwgQXN0ICo+CiAgICAgICAgKGNsYXNzX3RhZyA9PSBVTlBBUlNF
RCA/IHRoaXMgOiBfX251bGwgKTsKfQoKCiAKIAogCiAKCmlubGluZSBBc3RMaXN0Tm9kZSAqQXN0
OjpMaXN0Tm9kZUNhc3QoKQp7CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFzdExpc3ROb2RlICos
IEFzdCAqPgogICAgICAgIChraW5kID09IExJU1RfTk9ERSA/IHRoaXMgOiBfX251bGwgKTsKfQoK
aW5saW5lIEFzdEFycmF5VHlwZSAqQXN0OjpBcnJheVR5cGVDYXN0KCkKewogICAgcmV0dXJuIERZ
TkFNSUNfQ0FTVDxBc3RBcnJheVR5cGUgKiwgQXN0ICo+CiAgICAgICAgKGtpbmQgPT0gQVJSQVkg
PyB0aGlzIDogX19udWxsICk7Cn0KCmlubGluZSBBc3RTaW1wbGVOYW1lICpBc3Q6OlNpbXBsZU5h
bWVDYXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNfQ0FTVDxBc3RTaW1wbGVOYW1lICosIEFzdCAq
PgogICAgICAgIChraW5kID09IElERU5USUZJRVIgPyB0aGlzIDogX19udWxsICk7Cn0KCmlubGlu
ZSBBc3RQYWNrYWdlRGVjbGFyYXRpb24gKkFzdDo6UGFja2FnZURlY2xhcmF0aW9uQ2FzdCgpCnsK
ICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8QXN0UGFja2FnZURlY2xhcmF0aW9uICosIEFzdCAqPgog
ICAgICAgIChraW5kID09IFBBQ0tBR0UgPyB0aGlzIDogX19udWxsICk7Cn0KCmlubGluZSBBc3RJ
bXBvcnREZWNsYXJhdGlvbiAqQXN0OjpJbXBvcnREZWNsYXJhdGlvbkNhc3QoKQp7CiAgICByZXR1
cm4gRFlOQU1JQ19DQVNUPEFzdEltcG9ydERlY2xhcmF0aW9uICosIEFzdCAqPgogICAgICAgIChr
aW5kID09IElNUE9SVCA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5saW5lIEFzdENvbXBpbGF0aW9u
VW5pdCAqQXN0OjpDb21waWxhdGlvblVuaXRDYXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNfQ0FT
VDxBc3RDb21waWxhdGlvblVuaXQgKiwgQXN0ICo+CiAgICAgICAgKGtpbmQgPT0gQ09NUElMQVRJ
T04gfHwga2luZCA9PSBCQURfQ09NUElMQVRJT04KICAgICAgICAgICAgfHwga2luZCA9PSBFTVBU
WV9DT01QSUxBVElPTiA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5saW5lIEFzdENvbXBpbGF0aW9u
VW5pdCAqQXN0OjpCYWRDb21waWxhdGlvblVuaXRDYXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNf
Q0FTVDxBc3RDb21waWxhdGlvblVuaXQgKiwgQXN0ICo+CiAgICAgICAgKGtpbmQgPT0gQkFEX0NP
TVBJTEFUSU9OID8gdGhpcyA6IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0Q29tcGlsYXRpb25Vbml0
ICpBc3Q6OkVtcHR5Q29tcGlsYXRpb25Vbml0Q2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NB
U1Q8QXN0Q29tcGlsYXRpb25Vbml0ICosIEFzdCAqPgogICAgICAgIChraW5kID09IEVNUFRZX0NP
TVBJTEFUSU9OID8gdGhpcyA6IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0RW1wdHlEZWNsYXJhdGlv
biAqQXN0OjpFbXB0eURlY2xhcmF0aW9uQ2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8
QXN0RW1wdHlEZWNsYXJhdGlvbiAqLCBBc3QgKj4KICAgICAgICAoa2luZCA9PSBFTVBUWV9ERUNM
QVJBVElPTiA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5saW5lIEFzdENsYXNzRGVjbGFyYXRpb24g
KkFzdDo6Q2xhc3NEZWNsYXJhdGlvbkNhc3QoKQp7CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFz
dENsYXNzRGVjbGFyYXRpb24gKiwgQXN0ICo+CiAgICAgICAgKGtpbmQgPT0gQ0xBU1MgPyB0aGlz
IDogX19udWxsICk7Cn0KCmlubGluZSBBc3RBcnJheUluaXRpYWxpemVyICpBc3Q6OkFycmF5SW5p
dGlhbGl6ZXJDYXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNfQ0FTVDxBc3RBcnJheUluaXRpYWxp
emVyICosIEFzdCAqPgogICAgICAgIChraW5kID09IEFSUkFZX0lOSVRJQUxJWkVSID8gdGhpcyA6
IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0QnJhY2tldHMgKkFzdDo6QnJhY2tldHNDYXN0KCkKewog
ICAgcmV0dXJuIERZTkFNSUNfQ0FTVDxBc3RCcmFja2V0cyAqLCBBc3QgKj4KICAgICAgICAoa2lu
ZCA9PSBCUkFDS0VUUyA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5saW5lIEFzdFZhcmlhYmxlRGVj
bGFyYXRvcklkICpBc3Q6OlZhcmlhYmxlRGVjbGFyYXRvcklkQ2FzdCgpCnsKICAgIHJldHVybiBE
WU5BTUlDX0NBU1Q8QXN0VmFyaWFibGVEZWNsYXJhdG9ySWQgKiwgQXN0ICo+CiAgICAgICAgKGtp
bmQgPT0gVkFSSUFCTEVfREVDTEFSQVRPUl9OQU1FID8gdGhpcyA6IF9fbnVsbCApOwp9Cgppbmxp
bmUgQXN0VmFyaWFibGVEZWNsYXJhdG9yICpBc3Q6OlZhcmlhYmxlRGVjbGFyYXRvckNhc3QoKQp7
CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFzdFZhcmlhYmxlRGVjbGFyYXRvciAqLCBBc3QgKj4K
ICAgICAgICAoa2luZCA9PSBWQVJJQUJMRV9ERUNMQVJBVE9SID8gdGhpcyA6IF9fbnVsbCApOwp9
CgppbmxpbmUgQXN0RmllbGREZWNsYXJhdGlvbiAqQXN0OjpGaWVsZERlY2xhcmF0aW9uQ2FzdCgp
CnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8QXN0RmllbGREZWNsYXJhdGlvbiAqLCBBc3QgKj4K
ICAgICAgICAoa2luZCA9PSBGSUVMRCA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5saW5lIEFzdEZv
cm1hbFBhcmFtZXRlciAqQXN0OjpGb3JtYWxQYXJhbWV0ZXJDYXN0KCkKewogICAgcmV0dXJuIERZ
TkFNSUNfQ0FTVDxBc3RGb3JtYWxQYXJhbWV0ZXIgKiwgQXN0ICo+CiAgICAgICAgKGtpbmQgPT0g
UEFSQU1FVEVSID8gdGhpcyA6IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0TWV0aG9kRGVjbGFyYXRv
ciAqQXN0OjpNZXRob2REZWNsYXJhdG9yQ2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8
QXN0TWV0aG9kRGVjbGFyYXRvciAqLCBBc3QgKj4KICAgICAgICAoa2luZCA9PSBNRVRIT0RfREVD
TEFSQVRPUiA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5saW5lIEFzdE1ldGhvZERlY2xhcmF0aW9u
ICpBc3Q6Ok1ldGhvZERlY2xhcmF0aW9uQ2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8
QXN0TWV0aG9kRGVjbGFyYXRpb24gKiwgQXN0ICo+CiAgICAgICAgKGtpbmQgPT0gTUVUSE9EID8g
dGhpcyA6IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0U3RhdGljSW5pdGlhbGl6ZXIgKkFzdDo6U3Rh
dGljSW5pdGlhbGl6ZXJDYXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNfQ0FTVDxBc3RTdGF0aWNJ
bml0aWFsaXplciAqLCBBc3QgKj4KICAgICAgICAoa2luZCA9PSBTVEFUSUNfSU5JVElBTElaRVIg
PyB0aGlzIDogX19udWxsICk7Cn0KCmlubGluZSBBc3RUaGlzQ2FsbCAqQXN0OjpUaGlzQ2FsbENh
c3QoKQp7CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFzdFRoaXNDYWxsICosIEFzdCAqPgogICAg
ICAgIChraW5kID09IFRISVNfQ0FMTCA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5saW5lIEFzdFN1
cGVyQ2FsbCAqQXN0OjpTdXBlckNhbGxDYXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNfQ0FTVDxB
c3RTdXBlckNhbGwgKiwgQXN0ICo+CiAgICAgICAgKGtpbmQgPT0gU1VQRVJfQ0FMTCA/IHRoaXMg
OiBfX251bGwgKTsKfQoKaW5saW5lIEFzdENvbnN0cnVjdG9yQmxvY2sgKkFzdDo6Q29uc3RydWN0
b3JCbG9ja0Nhc3QoKQp7CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFzdENvbnN0cnVjdG9yQmxv
Y2sgKiwgQXN0ICo+CiAgICAgICAgKGtpbmQgPT0gQ09OU1RSVUNUT1JfQkxPQ0sgPyB0aGlzIDog
X19udWxsICk7Cn0KCmlubGluZSBBc3RDb25zdHJ1Y3RvckRlY2xhcmF0aW9uICpBc3Q6OkNvbnN0
cnVjdG9yRGVjbGFyYXRpb25DYXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNfQ0FTVDxBc3RDb25z
dHJ1Y3RvckRlY2xhcmF0aW9uICosIEFzdCAqPgogICAgICAgIChraW5kID09IENPTlNUUlVDVE9S
ID8gdGhpcyA6IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0SW50ZXJmYWNlRGVjbGFyYXRpb24gKkFz
dDo6SW50ZXJmYWNlRGVjbGFyYXRpb25DYXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNfQ0FTVDxB
c3RJbnRlcmZhY2VEZWNsYXJhdGlvbiAqLCBBc3QgKj4KICAgICAgICAoa2luZCA9PSBJTlRFUkZB
Q0UgPyB0aGlzIDogX19udWxsICk7Cn0KCmlubGluZSBBc3RCbG9jayAqQXN0OjpCbG9ja0Nhc3Qo
KQp7CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFzdEJsb2NrICosIEFzdCAqPgogICAgICAgIChr
aW5kID09IEJMT0NLID8gdGhpcyA6IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0TG9jYWxWYXJpYWJs
ZURlY2xhcmF0aW9uU3RhdGVtZW50ICpBc3Q6OkxvY2FsVmFyaWFibGVEZWNsYXJhdGlvblN0YXRl
bWVudENhc3QoKQp7CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFzdExvY2FsVmFyaWFibGVEZWNs
YXJhdGlvblN0YXRlbWVudCAqLCBBc3QgKj4KICAgICAgICAoa2luZCA9PSBMT0NBTF9WQVJJQUJM
RV9ERUNMQVJBVElPTiA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5saW5lIEFzdElmU3RhdGVtZW50
ICpBc3Q6OklmU3RhdGVtZW50Q2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8QXN0SWZT
dGF0ZW1lbnQgKiwgQXN0ICo+CiAgICAgICAgKGtpbmQgPT0gSUYgPyB0aGlzIDogX19udWxsICk7
Cn0KCmlubGluZSBBc3RFbXB0eVN0YXRlbWVudCAqQXN0OjpFbXB0eVN0YXRlbWVudENhc3QoKQp7
CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFzdEVtcHR5U3RhdGVtZW50ICosIEFzdCAqPgogICAg
ICAgIChraW5kID09IEVNUFRZX1NUQVRFTUVOVCA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5saW5l
IEFzdEV4cHJlc3Npb25TdGF0ZW1lbnQgKkFzdDo6RXhwcmVzc2lvblN0YXRlbWVudENhc3QoKQp7
CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFzdEV4cHJlc3Npb25TdGF0ZW1lbnQgKiwgQXN0ICo+
CiAgICAgICAgKGtpbmQgPT0gRVhQUkVTU0lPTl9TVEFURU1FTlQgPyB0aGlzIDogX19udWxsICk7
Cn0KCmlubGluZSBBc3RDYXNlTGFiZWwgKkFzdDo6Q2FzZUxhYmVsQ2FzdCgpCnsKICAgIHJldHVy
biBEWU5BTUlDX0NBU1Q8QXN0Q2FzZUxhYmVsICosIEFzdCAqPgogICAgICAgIChraW5kID09IENB
U0UgPyB0aGlzIDogX19udWxsICk7Cn0KCmlubGluZSBBc3REZWZhdWx0TGFiZWwgKkFzdDo6RGVm
YXVsdExhYmVsQ2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8QXN0RGVmYXVsdExhYmVs
ICosIEFzdCAqPgogICAgICAgIChraW5kID09IERFRkFVTFQgPyB0aGlzIDogX19udWxsICk7Cn0K
CmlubGluZSBBc3RTd2l0Y2hCbG9ja1N0YXRlbWVudCAqQXN0OjpTd2l0Y2hCbG9ja1N0YXRlbWVu
dENhc3QoKQp7CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFzdFN3aXRjaEJsb2NrU3RhdGVtZW50
ICosIEFzdCAqPgogICAgICAgIChraW5kID09IFNXSVRDSF9CTE9DSyA/IHRoaXMgOiBfX251bGwg
KTsKfQoKaW5saW5lIEFzdFN3aXRjaFN0YXRlbWVudCAqQXN0OjpTd2l0Y2hTdGF0ZW1lbnRDYXN0
KCkKewogICAgcmV0dXJuIERZTkFNSUNfQ0FTVDxBc3RTd2l0Y2hTdGF0ZW1lbnQgKiwgQXN0ICo+
CiAgICAgICAgKGtpbmQgPT0gU1dJVENIID8gdGhpcyA6IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0
V2hpbGVTdGF0ZW1lbnQgKkFzdDo6V2hpbGVTdGF0ZW1lbnRDYXN0KCkKewogICAgcmV0dXJuIERZ
TkFNSUNfQ0FTVDxBc3RXaGlsZVN0YXRlbWVudCAqLCBBc3QgKj4KICAgICAgICAoa2luZCA9PSBX
SElMRSA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5saW5lIEFzdERvU3RhdGVtZW50ICpBc3Q6OkRv
U3RhdGVtZW50Q2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8QXN0RG9TdGF0ZW1lbnQg
KiwgQXN0ICo+CiAgICAgICAgKGtpbmQgPT0gRE8gPyB0aGlzIDogX19udWxsICk7Cn0KCmlubGlu
ZSBBc3RGb3JTdGF0ZW1lbnQgKkFzdDo6Rm9yU3RhdGVtZW50Q2FzdCgpCnsKICAgIHJldHVybiBE
WU5BTUlDX0NBU1Q8QXN0Rm9yU3RhdGVtZW50ICosIEFzdCAqPgogICAgICAgIChraW5kID09IEZP
UiA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5saW5lIEFzdEJyZWFrU3RhdGVtZW50ICpBc3Q6OkJy
ZWFrU3RhdGVtZW50Q2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8QXN0QnJlYWtTdGF0
ZW1lbnQgKiwgQXN0ICo+CiAgICAgICAgKGtpbmQgPT0gQlJFQUsgPyB0aGlzIDogX19udWxsICk7
Cn0KCmlubGluZSBBc3RDb250aW51ZVN0YXRlbWVudCAqQXN0OjpDb250aW51ZVN0YXRlbWVudENh
c3QoKQp7CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFzdENvbnRpbnVlU3RhdGVtZW50ICosIEFz
dCAqPgogICAgICAgIChraW5kID09IENPTlRJTlVFID8gdGhpcyA6IF9fbnVsbCApOwp9Cgppbmxp
bmUgQXN0UmV0dXJuU3RhdGVtZW50ICpBc3Q6OlJldHVyblN0YXRlbWVudENhc3QoKQp7CiAgICBy
ZXR1cm4gRFlOQU1JQ19DQVNUPEFzdFJldHVyblN0YXRlbWVudCAqLCBBc3QgKj4KICAgICAgICAo
a2luZCA9PSBSRVRVUk4gPyB0aGlzIDogX19udWxsICk7Cn0KCmlubGluZSBBc3RUaHJvd1N0YXRl
bWVudCAqQXN0OjpUaHJvd1N0YXRlbWVudENhc3QoKQp7CiAgICByZXR1cm4gRFlOQU1JQ19DQVNU
PEFzdFRocm93U3RhdGVtZW50ICosIEFzdCAqPgogICAgICAgIChraW5kID09IFRIUk9XID8gdGhp
cyA6IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0U3luY2hyb25pemVkU3RhdGVtZW50ICpBc3Q6OlN5
bmNocm9uaXplZFN0YXRlbWVudENhc3QoKQp7CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFzdFN5
bmNocm9uaXplZFN0YXRlbWVudCAqLCBBc3QgKj4KICAgICAgICAoa2luZCA9PSBTWU5DSFJPTkla
RURfU1RBVEVNRU5UID8gdGhpcyA6IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0Q2F0Y2hDbGF1c2Ug
KkFzdDo6Q2F0Y2hDbGF1c2VDYXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNfQ0FTVDxBc3RDYXRj
aENsYXVzZSAqLCBBc3QgKj4KICAgICAgICAoa2luZCA9PSBDQVRDSCA/IHRoaXMgOiBfX251bGwg
KTsKfQoKaW5saW5lIEFzdEZpbmFsbHlDbGF1c2UgKkFzdDo6RmluYWxseUNsYXVzZUNhc3QoKQp7
CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFzdEZpbmFsbHlDbGF1c2UgKiwgQXN0ICo+CiAgICAg
ICAgKGtpbmQgPT0gRklOQUxMWSA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5saW5lIEFzdFRyeVN0
YXRlbWVudCAqQXN0OjpUcnlTdGF0ZW1lbnRDYXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNfQ0FT
VDxBc3RUcnlTdGF0ZW1lbnQgKiwgQXN0ICo+CiAgICAgICAgKGtpbmQgPT0gVFJZID8gdGhpcyA6
IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0SW50ZWdlckxpdGVyYWwgKkFzdDo6SW50ZWdlckxpdGVy
YWxDYXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNfQ0FTVDxBc3RJbnRlZ2VyTGl0ZXJhbCAqLCBB
c3QgKj4KICAgICAgICAoa2luZCA9PSBJTlRFR0VSX0xJVEVSQUwgPyB0aGlzIDogX19udWxsICk7
Cn0KCmlubGluZSBBc3RMb25nTGl0ZXJhbCAqQXN0OjpMb25nTGl0ZXJhbENhc3QoKQp7CiAgICBy
ZXR1cm4gRFlOQU1JQ19DQVNUPEFzdExvbmdMaXRlcmFsICosIEFzdCAqPgogICAgICAgIChraW5k
ID09IExPTkdfTElURVJBTCA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5saW5lIEFzdEZsb2F0aW5n
UG9pbnRMaXRlcmFsICpBc3Q6OkZsb2F0aW5nUG9pbnRMaXRlcmFsQ2FzdCgpCnsKICAgIHJldHVy
biBEWU5BTUlDX0NBU1Q8QXN0RmxvYXRpbmdQb2ludExpdGVyYWwgKiwgQXN0ICo+CiAgICAgICAg
KGtpbmQgPT0gRkxPQVRJTkdfUE9JTlRfTElURVJBTCA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5s
aW5lIEFzdERvdWJsZUxpdGVyYWwgKkFzdDo6RG91YmxlTGl0ZXJhbENhc3QoKQp7CiAgICByZXR1
cm4gRFlOQU1JQ19DQVNUPEFzdERvdWJsZUxpdGVyYWwgKiwgQXN0ICo+CiAgICAgICAgKGtpbmQg
PT0gRE9VQkxFX0xJVEVSQUwgPyB0aGlzIDogX19udWxsICk7Cn0KCmlubGluZSBBc3RUcnVlTGl0
ZXJhbCAqQXN0OjpUcnVlTGl0ZXJhbENhc3QoKQp7CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFz
dFRydWVMaXRlcmFsICosIEFzdCAqPgogICAgICAgIChraW5kID09IFRSVUVfTElURVJBTCA/IHRo
aXMgOiBfX251bGwgKTsKfQoKaW5saW5lIEFzdEZhbHNlTGl0ZXJhbCAqQXN0OjpGYWxzZUxpdGVy
YWxDYXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNfQ0FTVDxBc3RGYWxzZUxpdGVyYWwgKiwgQXN0
ICo+CiAgICAgICAgKGtpbmQgPT0gRkFMU0VfTElURVJBTCA/IHRoaXMgOiBfX251bGwgKTsKfQoK
aW5saW5lIEFzdFN0cmluZ0xpdGVyYWwgKkFzdDo6U3RyaW5nTGl0ZXJhbENhc3QoKQp7CiAgICBy
ZXR1cm4gRFlOQU1JQ19DQVNUPEFzdFN0cmluZ0xpdGVyYWwgKiwgQXN0ICo+CiAgICAgICAgKGtp
bmQgPT0gU1RSSU5HX0xJVEVSQUwgPyB0aGlzIDogX19udWxsICk7Cn0KCmlubGluZSBBc3RDaGFy
YWN0ZXJMaXRlcmFsICpBc3Q6OkNoYXJhY3RlckxpdGVyYWxDYXN0KCkKewogICAgcmV0dXJuIERZ
TkFNSUNfQ0FTVDxBc3RDaGFyYWN0ZXJMaXRlcmFsICosIEFzdCAqPgogICAgICAgIChraW5kID09
IENIQVJBQ1RFUl9MSVRFUkFMID8gdGhpcyA6IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0TnVsbExp
dGVyYWwgKkFzdDo6TnVsbExpdGVyYWxDYXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNfQ0FTVDxB
c3ROdWxsTGl0ZXJhbCAqLCBBc3QgKj4KICAgICAgICAoa2luZCA9PSBOVUxMX0xJVEVSQUwgPyB0
aGlzIDogX19udWxsICk7Cn0KCmlubGluZSBBc3RUaGlzRXhwcmVzc2lvbiAqQXN0OjpUaGlzRXhw
cmVzc2lvbkNhc3QoKQp7CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFzdFRoaXNFeHByZXNzaW9u
ICosIEFzdCAqPgogICAgICAgIChraW5kID09IFRISVNfRVhQUkVTU0lPTiA/IHRoaXMgOiBfX251
bGwgKTsKfQoKaW5saW5lIEFzdFN1cGVyRXhwcmVzc2lvbiAqQXN0OjpTdXBlckV4cHJlc3Npb25D
YXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNfQ0FTVDxBc3RTdXBlckV4cHJlc3Npb24gKiwgQXN0
ICo+CiAgICAgICAgKGtpbmQgPT0gU1VQRVJfRVhQUkVTU0lPTiA/IHRoaXMgOiBfX251bGwgKTsK
fQoKaW5saW5lIEFzdFBhcmVudGhlc2l6ZWRFeHByZXNzaW9uICpBc3Q6OlBhcmVudGhlc2l6ZWRF
eHByZXNzaW9uQ2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8QXN0UGFyZW50aGVzaXpl
ZEV4cHJlc3Npb24gKiwgQXN0ICo+CiAgICAgICAgKGtpbmQgPT0gUEFSRU5USEVTSVpFRF9FWFBS
RVNTSU9OID8gdGhpcyA6IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0Q2xhc3NJbnN0YW5jZUNyZWF0
aW9uRXhwcmVzc2lvbiAqQXN0OjpDbGFzc0luc3RhbmNlQ3JlYXRpb25FeHByZXNzaW9uQ2FzdCgp
CnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8QXN0Q2xhc3NJbnN0YW5jZUNyZWF0aW9uRXhwcmVz
c2lvbiAqLCBBc3QgKj4KICAgICAgICAoa2luZCA9PSBDTEFTU19DUkVBVElPTiA/IHRoaXMgOiBf
X251bGwgKTsKfQoKaW5saW5lIEFzdERpbUV4cHIgKkFzdDo6RGltRXhwckNhc3QoKQp7CiAgICBy
ZXR1cm4gRFlOQU1JQ19DQVNUPEFzdERpbUV4cHIgKiwgQXN0ICo+CiAgICAgICAgKGtpbmQgPT0g
RElNID8gdGhpcyA6IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0QXJyYXlDcmVhdGlvbkV4cHJlc3Np
b24gKkFzdDo6QXJyYXlDcmVhdGlvbkV4cHJlc3Npb25DYXN0KCkKewogICAgcmV0dXJuIERZTkFN
SUNfQ0FTVDxBc3RBcnJheUNyZWF0aW9uRXhwcmVzc2lvbiAqLCBBc3QgKj4KICAgICAgICAoa2lu
ZCA9PSBBUlJBWV9DUkVBVElPTiA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5saW5lIEFzdEZpZWxk
QWNjZXNzICpBc3Q6OkZpZWxkQWNjZXNzQ2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8
QXN0RmllbGRBY2Nlc3MgKiwgQXN0ICo+CiAgICAgICAgKGtpbmQgPT0gRE9UID8gdGhpcyA6IF9f
bnVsbCApOwp9CgppbmxpbmUgQXN0TWV0aG9kSW52b2NhdGlvbiAqQXN0OjpNZXRob2RJbnZvY2F0
aW9uQ2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8QXN0TWV0aG9kSW52b2NhdGlvbiAq
LCBBc3QgKj4KICAgICAgICAoa2luZCA9PSBDQUxMID8gdGhpcyA6IF9fbnVsbCApOwp9Cgppbmxp
bmUgQXN0QXJyYXlBY2Nlc3MgKkFzdDo6QXJyYXlBY2Nlc3NDYXN0KCkKewogICAgcmV0dXJuIERZ
TkFNSUNfQ0FTVDxBc3RBcnJheUFjY2VzcyAqLCBBc3QgKj4KICAgICAgICAoa2luZCA9PSBBUlJB
WV9BQ0NFU1MgPyB0aGlzIDogX19udWxsICk7Cn0KCmlubGluZSBBc3RQb3N0VW5hcnlFeHByZXNz
aW9uICpBc3Q6OlBvc3RVbmFyeUV4cHJlc3Npb25DYXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNf
Q0FTVDxBc3RQb3N0VW5hcnlFeHByZXNzaW9uICosIEFzdCAqPgogICAgICAgIChraW5kID09IFBP
U1RfVU5BUlkgPyB0aGlzIDogX19udWxsICk7Cn0KCmlubGluZSBBc3RQcmVVbmFyeUV4cHJlc3Np
b24gKkFzdDo6UHJlVW5hcnlFeHByZXNzaW9uQ2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NB
U1Q8QXN0UHJlVW5hcnlFeHByZXNzaW9uICosIEFzdCAqPgogICAgICAgIChraW5kID09IFBSRV9V
TkFSWSA/IHRoaXMgOiBfX251bGwgKTsKfQoKaW5saW5lIEFzdENhc3RFeHByZXNzaW9uICpBc3Q6
OkNhc3RFeHByZXNzaW9uQ2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8QXN0Q2FzdEV4
cHJlc3Npb24gKiwgQXN0ICo+CiAgICAgICAgKGtpbmQgPT0gQ0FTVCB8fCBraW5kID09IENIRUNL
X0FORF9DQVNUID8gdGhpcyA6IF9fbnVsbCApOwp9CgppbmxpbmUgQXN0QmluYXJ5RXhwcmVzc2lv
biAqQXN0OjpCaW5hcnlFeHByZXNzaW9uQ2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8
QXN0QmluYXJ5RXhwcmVzc2lvbiAqLCBBc3QgKj4KICAgICAgICAoa2luZCA9PSBCSU5BUlkgPyB0
aGlzIDogX19udWxsICk7Cn0KCmlubGluZSBBc3RUeXBlRXhwcmVzc2lvbiAqQXN0OjpUeXBlRXhw
cmVzc2lvbkNhc3QoKQp7CiAgICByZXR1cm4gRFlOQU1JQ19DQVNUPEFzdFR5cGVFeHByZXNzaW9u
ICosIEFzdCAqPgogICAgICAgIChraW5kID09IFRZUEUgPyB0aGlzIDogX19udWxsICk7Cn0KCmlu
bGluZSBBc3RDb25kaXRpb25hbEV4cHJlc3Npb24gKkFzdDo6Q29uZGl0aW9uYWxFeHByZXNzaW9u
Q2FzdCgpCnsKICAgIHJldHVybiBEWU5BTUlDX0NBU1Q8QXN0Q29uZGl0aW9uYWxFeHByZXNzaW9u
ICosIEFzdCAqPgogICAgICAgIChraW5kID09IENPTkRJVElPTkFMID8gdGhpcyA6IF9fbnVsbCAp
Owp9CgppbmxpbmUgQXN0QXNzaWdubWVudEV4cHJlc3Npb24gKkFzdDo6QXNzaWdubWVudEV4cHJl
c3Npb25DYXN0KCkKewogICAgcmV0dXJuIERZTkFNSUNfQ0FTVDxBc3RBc3NpZ25tZW50RXhwcmVz
c2lvbiAqLCBBc3QgKj4KICAgICAgICAoa2luZCA9PSBBU1NJR05NRU5UID8gdGhpcyA6IF9fbnVs
bCApOwp9CgppbmxpbmUgdm9pZCBBc3RDbGFzc0JvZHk6OkFsbG9jYXRlSW5zdGFuY2VWYXJpYWJs
ZXMoaW50IGVzdGltYXRlKQp7CiAgICBpZiAoISBpbnN0YW5jZV92YXJpYWJsZXMpCiAgICAgICAg
aW5zdGFuY2VfdmFyaWFibGVzID0gCgogICAgICAgICAgICByZWludGVycHJldF9jYXN0PEFzdEFy
cmF5PEFzdEZpZWxkRGVjbGFyYXRpb24gKj4gKj4KCgoKICAgICAgICAgICAgKHBvb2wgLT4gTmV3
QXN0QXJyYXkoZXN0aW1hdGUpKTsKfQoKaW5saW5lIHZvaWQgQXN0Q2xhc3NCb2R5OjpBZGRJbnN0
YW5jZVZhcmlhYmxlKEFzdEZpZWxkRGVjbGFyYXRpb24gKmZpZWxkX2RlY2xhcmF0aW9uKQp7CiAg
ICBpZiAoISBpbnN0YW5jZV92YXJpYWJsZXMpCiAgICAgICAgaW5zdGFuY2VfdmFyaWFibGVzID0g
CgogICAgICAgICAgICByZWludGVycHJldF9jYXN0PEFzdEFycmF5PEFzdEZpZWxkRGVjbGFyYXRp
b24gKj4gKj4KCgoKICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoKSk7CiAgICBpbnN0
YW5jZV92YXJpYWJsZXMgLT4gTmV4dCgpID0gZmllbGRfZGVjbGFyYXRpb247Cn0KCmlubGluZSB2
b2lkIEFzdENsYXNzQm9keTo6QWxsb2NhdGVDbGFzc1ZhcmlhYmxlcyhpbnQgZXN0aW1hdGUpCnsK
ICAgIGlmICghIGNsYXNzX3ZhcmlhYmxlcykKICAgICAgICBjbGFzc192YXJpYWJsZXMgPSAKCiAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0RmllbGREZWNsYXJhdGlvbiAq
PiAqPgoKCgogICAgICAgICAgICAocG9vbCAtPiBOZXdBc3RBcnJheShlc3RpbWF0ZSkpOwp9Cgpp
bmxpbmUgdm9pZCBBc3RDbGFzc0JvZHk6OkFkZENsYXNzVmFyaWFibGUoQXN0RmllbGREZWNsYXJh
dGlvbiAqZmllbGRfZGVjbGFyYXRpb24pCnsKICAgIGlmICghIGNsYXNzX3ZhcmlhYmxlcykKICAg
ICAgICBjbGFzc192YXJpYWJsZXMgPSAKCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0
QXJyYXk8QXN0RmllbGREZWNsYXJhdGlvbiAqPiAqPgoKCgogICAgICAgICAgICAocG9vbCAtPiBO
ZXdBc3RBcnJheSgpKTsKICAgIGNsYXNzX3ZhcmlhYmxlcyAtPiBOZXh0KCkgPSBmaWVsZF9kZWNs
YXJhdGlvbjsKfQoKaW5saW5lIHZvaWQgQXN0Q2xhc3NCb2R5OjpBbGxvY2F0ZU1ldGhvZHMoaW50
IGVzdGltYXRlKQp7CiAgICBpZiAoISBtZXRob2RzKQogICAgICAgIG1ldGhvZHMgPSAKCiAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0TWV0aG9kRGVjbGFyYXRpb24gKj4g
Kj4KCgoKICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoZXN0aW1hdGUpKTsKfQoKaW5s
aW5lIHZvaWQgQXN0Q2xhc3NCb2R5OjpBZGRNZXRob2QoQXN0TWV0aG9kRGVjbGFyYXRpb24gKm1l
dGhvZF9kZWNsYXJhdGlvbikKewogICAgaWYgKCEgbWV0aG9kcykKICAgICAgICBtZXRob2RzID0g
CgogICAgICAgICAgICByZWludGVycHJldF9jYXN0PEFzdEFycmF5PEFzdE1ldGhvZERlY2xhcmF0
aW9uICo+ICo+CgoKCiAgICAgICAgICAgIChwb29sIC0+IE5ld0FzdEFycmF5KCkpOwogICAgbWV0
aG9kcyAtPiBOZXh0KCkgPSBtZXRob2RfZGVjbGFyYXRpb247Cn0KCmlubGluZSB2b2lkIEFzdENs
YXNzQm9keTo6QWxsb2NhdGVCbG9ja3MoaW50IGVzdGltYXRlKQp7CiAgICBpZiAoISBibG9ja3Mp
CiAgICAgICAgYmxvY2tzID0gCgogICAgICAgICAgICByZWludGVycHJldF9jYXN0PEFzdEFycmF5
PEFzdEJsb2NrICo+ICo+CgoKCiAgICAgICAgICAgIChwb29sIC0+IE5ld0FzdEFycmF5KGVzdGlt
YXRlKSk7Cn0KCmlubGluZSB2b2lkIEFzdENsYXNzQm9keTo6QWRkQmxvY2soQXN0QmxvY2sgKmJs
b2NrKQp7CiAgICBpZiAoISBibG9ja3MpCiAgICAgICAgYmxvY2tzID0gCgogICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PEFzdEFycmF5PEFzdEJsb2NrICo+ICo+CgoKCiAgICAgICAgICAgIChw
b29sIC0+IE5ld0FzdEFycmF5KCkpOwogICAgYmxvY2tzIC0+IE5leHQoKSA9IGJsb2NrOwp9Cgpp
bmxpbmUgdm9pZCBBc3RDbGFzc0JvZHk6OkFsbG9jYXRlTmVzdGVkSW50ZXJmYWNlcyhpbnQgZXN0
aW1hdGUpCnsKICAgIGlmICghIGlubmVyX2ludGVyZmFjZXMpCiAgICAgICAgaW5uZXJfaW50ZXJm
YWNlcyA9IAoKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxBc3RBcnJheTxBc3RJbnRlcmZh
Y2VEZWNsYXJhdGlvbiAqPiAqPgoKCgogICAgICAgICAgICAocG9vbCAtPiBOZXdBc3RBcnJheShl
c3RpbWF0ZSkpOwp9CgppbmxpbmUgdm9pZCBBc3RDbGFzc0JvZHk6OkFkZE5lc3RlZEludGVyZmFj
ZShBc3RJbnRlcmZhY2VEZWNsYXJhdGlvbiAqaW50ZXJmYWNlX2RlY2xhcmF0aW9uKQp7CiAgICBp
ZiAoISBpbm5lcl9pbnRlcmZhY2VzKQogICAgICAgIGlubmVyX2ludGVyZmFjZXMgPSAKCiAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0SW50ZXJmYWNlRGVjbGFyYXRpb24g
Kj4gKj4KCgoKICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoKSk7CiAgICBpbm5lcl9p
bnRlcmZhY2VzIC0+IE5leHQoKSA9IGludGVyZmFjZV9kZWNsYXJhdGlvbjsKfQoKaW5saW5lIHZv
aWQgQXN0Q2xhc3NCb2R5OjpBbGxvY2F0ZU5lc3RlZENsYXNzZXMoaW50IGVzdGltYXRlKQp7CiAg
ICBpZiAoISBpbm5lcl9jbGFzc2VzKQogICAgICAgIGlubmVyX2NsYXNzZXMgPSAKCiAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0Q2xhc3NEZWNsYXJhdGlvbiAqPiAqPgoK
CgogICAgICAgICAgICAocG9vbCAtPiBOZXdBc3RBcnJheShlc3RpbWF0ZSkpOwp9CgppbmxpbmUg
dm9pZCBBc3RDbGFzc0JvZHk6OkFkZE5lc3RlZENsYXNzKEFzdENsYXNzRGVjbGFyYXRpb24gKmNs
YXNzX2RlY2xhcmF0aW9uKQp7CiAgICBpZiAoISBpbm5lcl9jbGFzc2VzKQogICAgICAgIGlubmVy
X2NsYXNzZXMgPSAKCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0Q2xh
c3NEZWNsYXJhdGlvbiAqPiAqPgoKCgogICAgICAgICAgICAocG9vbCAtPiBOZXdBc3RBcnJheSgp
KTsKICAgIGlubmVyX2NsYXNzZXMgLT4gTmV4dCgpID0gY2xhc3NfZGVjbGFyYXRpb247Cn0KCmlu
bGluZSB2b2lkIEFzdENsYXNzQm9keTo6QWxsb2NhdGVTdGF0aWNJbml0aWFsaXplcnMoaW50IGVz
dGltYXRlKQp7CiAgICBpZiAoISBzdGF0aWNfaW5pdGlhbGl6ZXJzKQogICAgICAgIHN0YXRpY19p
bml0aWFsaXplcnMgPSAKCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0
U3RhdGljSW5pdGlhbGl6ZXIgKj4gKj4KCgoKICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJy
YXkoZXN0aW1hdGUpKTsKfQoKaW5saW5lIHZvaWQgQXN0Q2xhc3NCb2R5OjpBZGRTdGF0aWNJbml0
aWFsaXplcihBc3RTdGF0aWNJbml0aWFsaXplciAqc3RhdGljX2luaXRpYWxpemVyKQp7CiAgICBp
ZiAoISBzdGF0aWNfaW5pdGlhbGl6ZXJzKQogICAgICAgIHN0YXRpY19pbml0aWFsaXplcnMgPSAK
CiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0U3RhdGljSW5pdGlhbGl6
ZXIgKj4gKj4KCgoKICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoKSk7CiAgICBzdGF0
aWNfaW5pdGlhbGl6ZXJzIC0+IE5leHQoKSA9IHN0YXRpY19pbml0aWFsaXplcjsKfQoKaW5saW5l
IHZvaWQgQXN0Q2xhc3NCb2R5OjpBbGxvY2F0ZUNvbnN0cnVjdG9ycyhpbnQgZXN0aW1hdGUpCnsK
ICAgIGlmICghIGNvbnN0cnVjdG9ycykKICAgICAgICBjb25zdHJ1Y3RvcnMgPSAKCiAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0Q29uc3RydWN0b3JEZWNsYXJhdGlvbiAq
PiAqPgoKCgogICAgICAgICAgICAocG9vbCAtPiBOZXdBc3RBcnJheShlc3RpbWF0ZSkpOwp9Cgpp
bmxpbmUgdm9pZCBBc3RDbGFzc0JvZHk6OkFkZENvbnN0cnVjdG9yKEFzdENvbnN0cnVjdG9yRGVj
bGFyYXRpb24gKmNvbnN0cnVjdG9yX2RlY2xhcmF0aW9uKQp7CiAgICBpZiAoISBjb25zdHJ1Y3Rv
cnMpCiAgICAgICAgY29uc3RydWN0b3JzID0gCgogICAgICAgICAgICByZWludGVycHJldF9jYXN0
PEFzdEFycmF5PEFzdENvbnN0cnVjdG9yRGVjbGFyYXRpb24gKj4gKj4KCgoKICAgICAgICAgICAg
KHBvb2wgLT4gTmV3QXN0QXJyYXkoKSk7CiAgICBjb25zdHJ1Y3RvcnMgLT4gTmV4dCgpID0gY29u
c3RydWN0b3JfZGVjbGFyYXRpb247Cn0KCmlubGluZSB2b2lkIEFzdENsYXNzQm9keTo6QWxsb2Nh
dGVFbXB0eURlY2xhcmF0aW9ucyhpbnQgZXN0aW1hdGUpCnsKICAgIGlmICghIGVtcHR5X2RlY2xh
cmF0aW9ucykKICAgICAgICBlbXB0eV9kZWNsYXJhdGlvbnMgPSAKCiAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0RW1wdHlEZWNsYXJhdGlvbiAqPiAqPgoKCgogICAgICAg
ICAgICAocG9vbCAtPiBOZXdBc3RBcnJheShlc3RpbWF0ZSkpOwp9CgppbmxpbmUgdm9pZCBBc3RD
bGFzc0JvZHk6OkFkZEVtcHR5RGVjbGFyYXRpb24oQXN0RW1wdHlEZWNsYXJhdGlvbiAqZW1wdHlf
ZGVjbGFyYXRpb24pCnsKICAgIGlmICghIGVtcHR5X2RlY2xhcmF0aW9ucykKICAgICAgICBlbXB0
eV9kZWNsYXJhdGlvbnMgPSAKCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8
QXN0RW1wdHlEZWNsYXJhdGlvbiAqPiAqPgoKCgogICAgICAgICAgICAocG9vbCAtPiBOZXdBc3RB
cnJheSgpKTsKICAgIGVtcHR5X2RlY2xhcmF0aW9ucyAtPiBOZXh0KCkgPSBlbXB0eV9kZWNsYXJh
dGlvbjsKfQoKaW5saW5lIHZvaWQgQXN0SW50ZXJmYWNlRGVjbGFyYXRpb246OkFsbG9jYXRlTmVz
dGVkSW50ZXJmYWNlcyhpbnQgZXN0aW1hdGUpCnsKICAgIGlmICghIGlubmVyX2ludGVyZmFjZXMp
CiAgICAgICAgaW5uZXJfaW50ZXJmYWNlcyA9IAoKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxBc3RBcnJheTxBc3RJbnRlcmZhY2VEZWNsYXJhdGlvbiAqPiAqPgoKCgogICAgICAgICAgICAo
cG9vbCAtPiBOZXdBc3RBcnJheShlc3RpbWF0ZSkpOwp9CgppbmxpbmUgdm9pZCBBc3RJbnRlcmZh
Y2VEZWNsYXJhdGlvbjo6QWRkTmVzdGVkSW50ZXJmYWNlKEFzdEludGVyZmFjZURlY2xhcmF0aW9u
ICppbnRlcmZhY2VfZGVjbGFyYXRpb24pCnsKICAgIGlmICghIGlubmVyX2ludGVyZmFjZXMpCiAg
ICAgICAgaW5uZXJfaW50ZXJmYWNlcyA9IAoKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxB
c3RBcnJheTxBc3RJbnRlcmZhY2VEZWNsYXJhdGlvbiAqPiAqPgoKCgogICAgICAgICAgICAocG9v
bCAtPiBOZXdBc3RBcnJheSgpKTsKICAgIGlubmVyX2ludGVyZmFjZXMgLT4gTmV4dCgpID0gaW50
ZXJmYWNlX2RlY2xhcmF0aW9uOwp9CgppbmxpbmUgdm9pZCBBc3RJbnRlcmZhY2VEZWNsYXJhdGlv
bjo6QWxsb2NhdGVOZXN0ZWRDbGFzc2VzKGludCBlc3RpbWF0ZSkKewogICAgaWYgKCEgaW5uZXJf
Y2xhc3NlcykKICAgICAgICBpbm5lcl9jbGFzc2VzID0gCgogICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PEFzdEFycmF5PEFzdENsYXNzRGVjbGFyYXRpb24gKj4gKj4KCgoKICAgICAgICAgICAg
KHBvb2wgLT4gTmV3QXN0QXJyYXkoZXN0aW1hdGUpKTsKfQoKaW5saW5lIHZvaWQgQXN0SW50ZXJm
YWNlRGVjbGFyYXRpb246OkFkZE5lc3RlZENsYXNzKEFzdENsYXNzRGVjbGFyYXRpb24gKmNsYXNz
X2RlY2xhcmF0aW9uKQp7CiAgICBpZiAoISBpbm5lcl9jbGFzc2VzKQogICAgICAgIGlubmVyX2Ns
YXNzZXMgPSAKCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0Q2xhc3NE
ZWNsYXJhdGlvbiAqPiAqPgoKCgogICAgICAgICAgICAocG9vbCAtPiBOZXdBc3RBcnJheSgpKTsK
ICAgIGlubmVyX2NsYXNzZXMgLT4gTmV4dCgpID0gY2xhc3NfZGVjbGFyYXRpb247Cn0KCmlubGlu
ZSB2b2lkIEFzdEludGVyZmFjZURlY2xhcmF0aW9uOjpBbGxvY2F0ZU1ldGhvZHMoaW50IGVzdGlt
YXRlKQp7CiAgICBpZiAoISBtZXRob2RzKQogICAgICAgIG1ldGhvZHMgPSAKCiAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0TWV0aG9kRGVjbGFyYXRpb24gKj4gKj4KCgoK
ICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoZXN0aW1hdGUpKTsKfQoKaW5saW5lIHZv
aWQgQXN0SW50ZXJmYWNlRGVjbGFyYXRpb246OkFkZE1ldGhvZChBc3RNZXRob2REZWNsYXJhdGlv
biAqbWV0aG9kX2RlY2xhcmF0aW9uKQp7CiAgICBpZiAoISBtZXRob2RzKQogICAgICAgIG1ldGhv
ZHMgPSAKCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0TWV0aG9kRGVj
bGFyYXRpb24gKj4gKj4KCgoKICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoKSk7CiAg
ICBtZXRob2RzIC0+IE5leHQoKSA9IG1ldGhvZF9kZWNsYXJhdGlvbjsKfQoKaW5saW5lIHZvaWQg
QXN0SW50ZXJmYWNlRGVjbGFyYXRpb246OkFsbG9jYXRlQ2xhc3NWYXJpYWJsZXMoaW50IGVzdGlt
YXRlKQp7CiAgICBpZiAoISBjbGFzc192YXJpYWJsZXMpCiAgICAgICAgY2xhc3NfdmFyaWFibGVz
ID0gCgogICAgICAgICAgICByZWludGVycHJldF9jYXN0PEFzdEFycmF5PEFzdEZpZWxkRGVjbGFy
YXRpb24gKj4gKj4KCgoKICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoZXN0aW1hdGUp
KTsKfQoKaW5saW5lIHZvaWQgQXN0SW50ZXJmYWNlRGVjbGFyYXRpb246OkFkZENsYXNzVmFyaWFi
bGUoQXN0RmllbGREZWNsYXJhdGlvbiAqZmllbGRfZGVjbGFyYXRpb24pCnsKICAgIGlmICghIGNs
YXNzX3ZhcmlhYmxlcykKICAgICAgICBjbGFzc192YXJpYWJsZXMgPSAKCiAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0RmllbGREZWNsYXJhdGlvbiAqPiAqPgoKCgogICAg
ICAgICAgICAocG9vbCAtPiBOZXdBc3RBcnJheSgpKTsKICAgIGNsYXNzX3ZhcmlhYmxlcyAtPiBO
ZXh0KCkgPSBmaWVsZF9kZWNsYXJhdGlvbjsKfQoKaW5saW5lIHZvaWQgQXN0SW50ZXJmYWNlRGVj
bGFyYXRpb246OkFsbG9jYXRlRW1wdHlEZWNsYXJhdGlvbnMoaW50IGVzdGltYXRlKQp7CiAgICBp
ZiAoISBlbXB0eV9kZWNsYXJhdGlvbnMpCiAgICAgICAgZW1wdHlfZGVjbGFyYXRpb25zID0gCgog
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PEFzdEFycmF5PEFzdEVtcHR5RGVjbGFyYXRpb24g
Kj4gKj4KCgoKICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoZXN0aW1hdGUpKTsKfQoK
aW5saW5lIHZvaWQgQXN0SW50ZXJmYWNlRGVjbGFyYXRpb246OkFkZEVtcHR5RGVjbGFyYXRpb24o
QXN0RW1wdHlEZWNsYXJhdGlvbiAqZW1wdHlfZGVjbGFyYXRpb24pCnsKICAgIGlmICghIGVtcHR5
X2RlY2xhcmF0aW9ucykKICAgICAgICBlbXB0eV9kZWNsYXJhdGlvbnMgPSAKCiAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0RW1wdHlEZWNsYXJhdGlvbiAqPiAqPgoKCgog
ICAgICAgICAgICAocG9vbCAtPiBOZXdBc3RBcnJheSgpKTsKICAgIGVtcHR5X2RlY2xhcmF0aW9u
cyAtPiBOZXh0KCkgPSBlbXB0eV9kZWNsYXJhdGlvbjsKfQoKaW5saW5lIHZvaWQgQXN0Q2xhc3NE
ZWNsYXJhdGlvbjo6QWxsb2NhdGVDbGFzc01vZGlmaWVycyhpbnQgZXN0aW1hdGUpCnsKICAgIGlm
ICghIGNsYXNzX21vZGlmaWVycykKICAgICAgICBjbGFzc19tb2RpZmllcnMgPSAKCiAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0TW9kaWZpZXIgKj4gKj4KCgoKICAgICAg
ICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoZXN0aW1hdGUpKTsKfQoKaW5saW5lIHZvaWQgQXN0
Q2xhc3NEZWNsYXJhdGlvbjo6QWRkQ2xhc3NNb2RpZmllcihBc3RNb2RpZmllciAqY2xhc3NfbW9k
aWZpZXIpCnsKICAgIGlmICghIGNsYXNzX21vZGlmaWVycykKICAgICAgICBBbGxvY2F0ZUNsYXNz
TW9kaWZpZXJzKDQpOyAgCiAgICBjbGFzc19tb2RpZmllcnMgLT4gTmV4dCgpID0gY2xhc3NfbW9k
aWZpZXI7Cn0KCmlubGluZSB2b2lkIEFzdEZpZWxkRGVjbGFyYXRpb246OkFsbG9jYXRlVmFyaWFi
bGVNb2RpZmllcnMoaW50IGVzdGltYXRlKQp7CiAgICBpZiAoISB2YXJpYWJsZV9tb2RpZmllcnMp
CiAgICAgICAgdmFyaWFibGVfbW9kaWZpZXJzID0gCgogICAgICAgICAgICByZWludGVycHJldF9j
YXN0PEFzdEFycmF5PEFzdE1vZGlmaWVyICo+ICo+CgoKCiAgICAgICAgICAgIChwb29sIC0+IE5l
d0FzdEFycmF5KGVzdGltYXRlKSk7Cn0KCmlubGluZSB2b2lkIEFzdEZpZWxkRGVjbGFyYXRpb246
OkFkZFZhcmlhYmxlTW9kaWZpZXIoQXN0TW9kaWZpZXIgKnZhcmlhYmxlX21vZGlmaWVyKQp7CiAg
ICBpZiAoISB2YXJpYWJsZV9tb2RpZmllcnMpCiAgICAgICAgQWxsb2NhdGVWYXJpYWJsZU1vZGlm
aWVycyg0KTsgIAogICAgdmFyaWFibGVfbW9kaWZpZXJzIC0+IE5leHQoKSA9IHZhcmlhYmxlX21v
ZGlmaWVyOwp9CgppbmxpbmUgdm9pZCBBc3RGb3JtYWxQYXJhbWV0ZXI6OkFsbG9jYXRlUGFyYW1l
dGVyTW9kaWZpZXJzKGludCBlc3RpbWF0ZSkKewogICAgaWYgKCEgcGFyYW1ldGVyX21vZGlmaWVy
cykKICAgICAgICBwYXJhbWV0ZXJfbW9kaWZpZXJzID0gCgogICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PEFzdEFycmF5PEFzdE1vZGlmaWVyICo+ICo+CgoKCiAgICAgICAgICAgIChwb29sIC0+
IE5ld0FzdEFycmF5KGVzdGltYXRlKSk7Cn0KCmlubGluZSB2b2lkIEFzdEZvcm1hbFBhcmFtZXRl
cjo6QWRkUGFyYW1ldGVyTW9kaWZpZXIoQXN0TW9kaWZpZXIgKnBhcmFtZXRlcl9tb2RpZmllcikK
ewogICAgaWYgKCEgcGFyYW1ldGVyX21vZGlmaWVycykKICAgICAgICBBbGxvY2F0ZVBhcmFtZXRl
ck1vZGlmaWVycyg0KTsgIAogICAgcGFyYW1ldGVyX21vZGlmaWVycyAtPiBOZXh0KCkgPSBwYXJh
bWV0ZXJfbW9kaWZpZXI7Cn0KCmlubGluZSB2b2lkIEFzdE1ldGhvZERlY2xhcmF0aW9uOjpBbGxv
Y2F0ZU1ldGhvZE1vZGlmaWVycyhpbnQgZXN0aW1hdGUpCnsKICAgIGlmICghIG1ldGhvZF9tb2Rp
ZmllcnMpCiAgICAgICAgbWV0aG9kX21vZGlmaWVycyA9IAoKICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxBc3RBcnJheTxBc3RNb2RpZmllciAqPiAqPgoKCgogICAgICAgICAgICAocG9vbCAt
PiBOZXdBc3RBcnJheShlc3RpbWF0ZSkpOwp9CgppbmxpbmUgdm9pZCBBc3RNZXRob2REZWNsYXJh
dGlvbjo6QWRkTWV0aG9kTW9kaWZpZXIoQXN0TW9kaWZpZXIgKm1ldGhvZF9tb2RpZmllcikKewog
ICAgaWYgKCEgbWV0aG9kX21vZGlmaWVycykKICAgICAgICBBbGxvY2F0ZU1ldGhvZE1vZGlmaWVy
cyg0KTsgIAogICAgbWV0aG9kX21vZGlmaWVycyAtPiBOZXh0KCkgPSBtZXRob2RfbW9kaWZpZXI7
Cn0KCmlubGluZSB2b2lkIEFzdENvbnN0cnVjdG9yRGVjbGFyYXRpb246OkFsbG9jYXRlQ29uc3Ry
dWN0b3JNb2RpZmllcnMoaW50IGVzdGltYXRlKQp7CiAgICBpZiAoISBjb25zdHJ1Y3Rvcl9tb2Rp
ZmllcnMpCiAgICAgICAgY29uc3RydWN0b3JfbW9kaWZpZXJzID0gCgogICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PEFzdEFycmF5PEFzdE1vZGlmaWVyICo+ICo+CgoKCiAgICAgICAgICAgIChw
b29sIC0+IE5ld0FzdEFycmF5KGVzdGltYXRlKSk7Cn0KCmlubGluZSB2b2lkIEFzdENvbnN0cnVj
dG9yRGVjbGFyYXRpb246OkFkZENvbnN0cnVjdG9yTW9kaWZpZXIoQXN0TW9kaWZpZXIgKmNvbnN0
cnVjdG9yX21vZGlmaWVyKQp7CiAgICBpZiAoISBjb25zdHJ1Y3Rvcl9tb2RpZmllcnMpCiAgICAg
ICAgQWxsb2NhdGVDb25zdHJ1Y3Rvck1vZGlmaWVycyg0KTsgIAogICAgY29uc3RydWN0b3JfbW9k
aWZpZXJzIC0+IE5leHQoKSA9IGNvbnN0cnVjdG9yX21vZGlmaWVyOwp9CgppbmxpbmUgdm9pZCBB
c3RJbnRlcmZhY2VEZWNsYXJhdGlvbjo6QWxsb2NhdGVJbnRlcmZhY2VNb2RpZmllcnMoaW50IGVz
dGltYXRlKQp7CiAgICBpZiAoISBpbnRlcmZhY2VfbW9kaWZpZXJzKQogICAgICAgIGludGVyZmFj
ZV9tb2RpZmllcnMgPSAKCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0
TW9kaWZpZXIgKj4gKj4KCgoKICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoZXN0aW1h
dGUpKTsKfQoKaW5saW5lIHZvaWQgQXN0SW50ZXJmYWNlRGVjbGFyYXRpb246OkFkZEludGVyZmFj
ZU1vZGlmaWVyKEFzdE1vZGlmaWVyICppbnRlcmZhY2VfbW9kaWZpZXIpCnsKICAgIGlmICghIGlu
dGVyZmFjZV9tb2RpZmllcnMpCiAgICAgICAgQWxsb2NhdGVJbnRlcmZhY2VNb2RpZmllcnMoNCk7
ICAKICAgIGludGVyZmFjZV9tb2RpZmllcnMgLT4gTmV4dCgpID0gaW50ZXJmYWNlX21vZGlmaWVy
Owp9CgppbmxpbmUgdm9pZCBBc3RMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQ6OkFs
bG9jYXRlTG9jYWxNb2RpZmllcnMoaW50IGVzdGltYXRlKQp7CiAgICBpZiAoISBsb2NhbF9tb2Rp
ZmllcnMpCiAgICAgICAgbG9jYWxfbW9kaWZpZXJzID0gCgogICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PEFzdEFycmF5PEFzdE1vZGlmaWVyICo+ICo+CgoKCiAgICAgICAgICAgIChwb29sIC0+
IE5ld0FzdEFycmF5KGVzdGltYXRlKSk7Cn0KCmlubGluZSB2b2lkIEFzdExvY2FsVmFyaWFibGVE
ZWNsYXJhdGlvblN0YXRlbWVudDo6QWRkTG9jYWxNb2RpZmllcihBc3RNb2RpZmllciAqbG9jYWxf
bW9kaWZpZXIpCnsKICAgIGlmICghIGxvY2FsX21vZGlmaWVycykKICAgICAgICBBbGxvY2F0ZUxv
Y2FsTW9kaWZpZXJzKDQpOyAgCiAgICBsb2NhbF9tb2RpZmllcnMgLT4gTmV4dCgpID0gbG9jYWxf
bW9kaWZpZXI7Cn0KCmlubGluZSB2b2lkIEFzdEJsb2NrOjpBbGxvY2F0ZUJsb2NrU3RhdGVtZW50
cyhpbnQgZXN0aW1hdGUpCnsKICAgIGlmICghIGJsb2NrX3N0YXRlbWVudHMpCiAgICAgICAgYmxv
Y2tfc3RhdGVtZW50cyA9IHBvb2wgLT4gTmV3QXN0QXJyYXkoZXN0aW1hdGUpOwp9CgppbmxpbmUg
dm9pZCBBc3RCbG9jazo6QWRkU3RhdGVtZW50KEFzdCAqc3RhdGVtZW50KQp7CiAgICBpZiAoISBi
bG9ja19zdGF0ZW1lbnRzKQogICAgICAgIEFsbG9jYXRlQmxvY2tTdGF0ZW1lbnRzKCk7CiAgICBi
bG9ja19zdGF0ZW1lbnRzIC0+IE5leHQoKSA9IHN0YXRlbWVudDsKfQoKaW5saW5lIHZvaWQgQXN0
QmxvY2s6OkFsbG9jYXRlTGFiZWxzKGludCBlc3RpbWF0ZSkKewogICAgaWYgKCEgbGFiZWxzKQog
ICAgICAgIGxhYmVscyA9IHBvb2wgLT4gTmV3VG9rZW5JbmRleEFycmF5KGVzdGltYXRlKTsKfQoK
aW5saW5lIHZvaWQgQXN0QmxvY2s6OkFkZExhYmVsKExleFN0cmVhbTo6VG9rZW5JbmRleCBsYWJl
bF90b2tlbl9pbmRleCkKewogICAgaWYgKCEgbGFiZWxzKQogICAgICAgIEFsbG9jYXRlTGFiZWxz
KCk7CiAgICBsYWJlbHMgLT4gTmV4dCgpID0gbGFiZWxfdG9rZW5faW5kZXg7Cn0KCmlubGluZSB2
b2lkIEFzdEJsb2NrOjpBbGxvY2F0ZUxvY2FsbHlEZWZpbmVkVmFyaWFibGVzKGludCBlc3RpbWF0
ZSkKewogICAgaWYgKCEgbG9jYWxseV9kZWZpbmVkX3ZhcmlhYmxlcykKICAgICAgICBsb2NhbGx5
X2RlZmluZWRfdmFyaWFibGVzID0gcG9vbCAtPiBOZXdWYXJpYWJsZVN5bWJvbEFycmF5KGVzdGlt
YXRlKTsKfQoKaW5saW5lIHZvaWQgQXN0QmxvY2s6OkFkZExvY2FsbHlEZWZpbmVkVmFyaWFibGUo
VmFyaWFibGVTeW1ib2wgKnZhcmlhYmxlX3N5bWJvbCkKewogICAgaWYgKCEgbG9jYWxseV9kZWZp
bmVkX3ZhcmlhYmxlcykKICAgICAgICBBbGxvY2F0ZUxvY2FsbHlEZWZpbmVkVmFyaWFibGVzKCk7
CiAgICBsb2NhbGx5X2RlZmluZWRfdmFyaWFibGVzIC0+IE5leHQoKSA9IHZhcmlhYmxlX3N5bWJv
bDsKfQoKaW5saW5lIHZvaWQgQXN0QmxvY2s6OlRyYW5zZmVyTG9jYWxseURlZmluZWRWYXJpYWJs
ZXNUbyhBc3RTd2l0Y2hCbG9ja1N0YXRlbWVudCAqc3dpdGNoX2Jsb2NrX3N0YXRlbWVudCkKewog
ICAgc3dpdGNoX2Jsb2NrX3N0YXRlbWVudCAtPiBsb2NhbGx5X2RlZmluZWRfdmFyaWFibGVzID0g
dGhpcyAtPiBsb2NhbGx5X2RlZmluZWRfdmFyaWFibGVzOwogICAgdGhpcyAtPiBsb2NhbGx5X2Rl
ZmluZWRfdmFyaWFibGVzID0gX19udWxsIDsKfQoKaW5saW5lIHZvaWQgQXN0U3RhdGVtZW50OjpB
bGxvY2F0ZURlZmluZWRWYXJpYWJsZXMoaW50IGVzdGltYXRlKQp7CiAgICBpZiAoISBkZWZpbmVk
X3ZhcmlhYmxlcykKICAgICAgICBkZWZpbmVkX3ZhcmlhYmxlcyA9IHBvb2wgLT4gTmV3VmFyaWFi
bGVTeW1ib2xBcnJheShlc3RpbWF0ZSk7Cn0KCmlubGluZSB2b2lkIEFzdFN0YXRlbWVudDo6QWRk
RGVmaW5lZFZhcmlhYmxlKFZhcmlhYmxlU3ltYm9sICp2YXJpYWJsZV9zeW1ib2wpCnsKICAgIGlm
ICghIGRlZmluZWRfdmFyaWFibGVzKQogICAgICAgIEFsbG9jYXRlRGVmaW5lZFZhcmlhYmxlcygp
OwogICAgZGVmaW5lZF92YXJpYWJsZXMgLT4gTmV4dCgpID0gdmFyaWFibGVfc3ltYm9sOwp9Cgpp
bmxpbmUgdm9pZCBBc3RTd2l0Y2hCbG9ja1N0YXRlbWVudDo6QWxsb2NhdGVCbG9ja1N0YXRlbWVu
dHMoaW50IGVzdGltYXRlKQp7CiAgICBpZiAoISBibG9ja19zdGF0ZW1lbnRzKQogICAgICAgIGJs
b2NrX3N0YXRlbWVudHMgPSAKCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8
QXN0U3RhdGVtZW50ICo+ICo+CgoKCiAgICAgICAgICAgIChwb29sIC0+IE5ld0FzdEFycmF5KGVz
dGltYXRlKSk7Cn0KCmlubGluZSB2b2lkIEFzdFN3aXRjaEJsb2NrU3RhdGVtZW50OjpBZGRTdGF0
ZW1lbnQoQXN0U3RhdGVtZW50ICpzdGF0ZW1lbnQpCnsKICAgIGlmICghIGJsb2NrX3N0YXRlbWVu
dHMpCiAgICAgICAgQWxsb2NhdGVCbG9ja1N0YXRlbWVudHMoKTsKICAgIGJsb2NrX3N0YXRlbWVu
dHMgLT4gTmV4dCgpID0gc3RhdGVtZW50Owp9CgppbmxpbmUgdm9pZCBBc3RTd2l0Y2hCbG9ja1N0
YXRlbWVudDo6QWxsb2NhdGVTd2l0Y2hMYWJlbHMoaW50IGVzdGltYXRlKQp7CiAgICBpZiAoISBz
d2l0Y2hfbGFiZWxzKQogICAgICAgIHN3aXRjaF9sYWJlbHMgPSBwb29sIC0+IE5ld0FzdEFycmF5
KGVzdGltYXRlKTsKfQoKaW5saW5lIHZvaWQgQXN0U3dpdGNoQmxvY2tTdGF0ZW1lbnQ6OkFkZFN3
aXRjaExhYmVsKEFzdCAqY2FzZV9vcl9kZWZhdWx0X2xhYmVsKQp7CiAgICBpZiAoISBzd2l0Y2hf
bGFiZWxzKQogICAgICAgIEFsbG9jYXRlU3dpdGNoTGFiZWxzKCk7CiAgICBzd2l0Y2hfbGFiZWxz
IC0+IE5leHQoKSA9IGNhc2Vfb3JfZGVmYXVsdF9sYWJlbDsKfQoKaW5saW5lIHZvaWQgQXN0U3dp
dGNoU3RhdGVtZW50OjpBbGxvY2F0ZUNhc2VzKGludCBlc3RpbWF0ZSkKewogICAgaWYgKCEgY2Fz
ZXMpCiAgICAgICAgY2FzZXMgPSBwb29sIC0+IE5ld0Nhc2VFbGVtZW50QXJyYXkoZXN0aW1hdGUp
Owp9CgppbmxpbmUgdm9pZCBBc3RTd2l0Y2hTdGF0ZW1lbnQ6OkFkZENhc2UoQ2FzZUVsZW1lbnQg
KmNhc2VfZWxlbWVudCkKewogICAgaWYgKCEgY2FzZXMpCiAgICAgICAgQWxsb2NhdGVDYXNlcygp
OwogICAgY2FzZXMgLT4gTmV4dCgpID0gY2FzZV9lbGVtZW50Owp9CgppbmxpbmUgdm9pZCBBc3RD
b25zdHJ1Y3RvckJsb2NrOjpBbGxvY2F0ZUxvY2FsSW5pdFN0YXRlbWVudHMoaW50IGVzdGltYXRl
KQp7CiAgICBpZiAoISBsb2NhbF9pbml0X3N0YXRlbWVudHMpCiAgICAgICAgbG9jYWxfaW5pdF9z
dGF0ZW1lbnRzID0gCgogICAgICAgICAgICByZWludGVycHJldF9jYXN0PEFzdEFycmF5PEFzdFN0
YXRlbWVudCAqPiAqPgoKCgogICAgICAgICAgICAocG9vbCAtPiBOZXdBc3RBcnJheShlc3RpbWF0
ZSkpOwp9CgppbmxpbmUgdm9pZCBBc3RDb25zdHJ1Y3RvckJsb2NrOjpBZGRMb2NhbEluaXRTdGF0
ZW1lbnQoQXN0U3RhdGVtZW50ICpzdGF0ZW1lbnQpCnsKICAgIGlmICghIGxvY2FsX2luaXRfc3Rh
dGVtZW50cykKICAgICAgICBBbGxvY2F0ZUxvY2FsSW5pdFN0YXRlbWVudHMoKTsKICAgIGxvY2Fs
X2luaXRfc3RhdGVtZW50cyAtPiBOZXh0KCkgPSBzdGF0ZW1lbnQ7Cn0KCmlubGluZSB2b2lkIEFz
dFZhcmlhYmxlRGVjbGFyYXRvcklkOjpBbGxvY2F0ZUJyYWNrZXRzKGludCBlc3RpbWF0ZSkKewog
ICAgaWYgKCEgYnJhY2tldHMpCiAgICAgICAgYnJhY2tldHMgPSAKCiAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0QnJhY2tldHMgKj4gKj4KCgoKICAgICAgICAgICAgKHBv
b2wgLT4gTmV3QXN0QXJyYXkoZXN0aW1hdGUpKTsKfQoKaW5saW5lIHZvaWQgQXN0VmFyaWFibGVE
ZWNsYXJhdG9ySWQ6OkFkZEJyYWNrZXRzKEFzdEJyYWNrZXRzICpicmFja2V0KQp7CiAgICBpZiAo
ISBicmFja2V0cykKICAgICAgICBBbGxvY2F0ZUJyYWNrZXRzKCk7CiAgICBicmFja2V0cyAtPiBO
ZXh0KCkgPSBicmFja2V0Owp9CgppbmxpbmUgdm9pZCBBc3RBcnJheVR5cGU6OkFsbG9jYXRlQnJh
Y2tldHMoaW50IGVzdGltYXRlKQp7CiAgICBpZiAoISBicmFja2V0cykKICAgICAgICBicmFja2V0
cyA9IAoKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxBc3RBcnJheTxBc3RCcmFja2V0cyAq
PiAqPgoKCgogICAgICAgICAgICAocG9vbCAtPiBOZXdBc3RBcnJheShlc3RpbWF0ZSkpOwp9Cgpp
bmxpbmUgdm9pZCBBc3RBcnJheVR5cGU6OkFkZEJyYWNrZXRzKEFzdEJyYWNrZXRzICpicmFja2V0
KQp7CiAgICBpZiAoISBicmFja2V0cykKICAgICAgICBBbGxvY2F0ZUJyYWNrZXRzKCk7CiAgICBi
cmFja2V0cyAtPiBOZXh0KCkgPSBicmFja2V0Owp9CgppbmxpbmUgdm9pZCBBc3RNZXRob2REZWNs
YXJhdG9yOjpBbGxvY2F0ZUJyYWNrZXRzKGludCBlc3RpbWF0ZSkKewogICAgaWYgKCEgYnJhY2tl
dHMpCiAgICAgICAgYnJhY2tldHMgPSAKCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0
QXJyYXk8QXN0QnJhY2tldHMgKj4gKj4KCgoKICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJy
YXkoZXN0aW1hdGUpKTsKfQoKaW5saW5lIHZvaWQgQXN0TWV0aG9kRGVjbGFyYXRvcjo6QWRkQnJh
Y2tldHMoQXN0QnJhY2tldHMgKmJyYWNrZXQpCnsKICAgIGlmICghIGJyYWNrZXRzKQogICAgICAg
IEFsbG9jYXRlQnJhY2tldHMoKTsKICAgIGJyYWNrZXRzIC0+IE5leHQoKSA9IGJyYWNrZXQ7Cn0K
CmlubGluZSB2b2lkIEFzdEFycmF5Q3JlYXRpb25FeHByZXNzaW9uOjpBbGxvY2F0ZUJyYWNrZXRz
KGludCBlc3RpbWF0ZSkKewogICAgaWYgKCEgYnJhY2tldHMpCiAgICAgICAgYnJhY2tldHMgPSAK
CiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0QnJhY2tldHMgKj4gKj4K
CgoKICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoZXN0aW1hdGUpKTsKfQoKaW5saW5l
IHZvaWQgQXN0QXJyYXlDcmVhdGlvbkV4cHJlc3Npb246OkFkZEJyYWNrZXRzKEFzdEJyYWNrZXRz
ICpicmFja2V0KQp7CiAgICBpZiAoISBicmFja2V0cykKICAgICAgICBBbGxvY2F0ZUJyYWNrZXRz
KCk7CiAgICBicmFja2V0cyAtPiBOZXh0KCkgPSBicmFja2V0Owp9CgppbmxpbmUgdm9pZCBBc3RD
YXN0RXhwcmVzc2lvbjo6QWxsb2NhdGVCcmFja2V0cyhpbnQgZXN0aW1hdGUpCnsKICAgIGlmICgh
IGJyYWNrZXRzKQogICAgICAgIGJyYWNrZXRzID0gCgogICAgICAgICAgICByZWludGVycHJldF9j
YXN0PEFzdEFycmF5PEFzdEJyYWNrZXRzICo+ICo+CgoKCiAgICAgICAgICAgIChwb29sIC0+IE5l
d0FzdEFycmF5KGVzdGltYXRlKSk7Cn0KCmlubGluZSB2b2lkIEFzdENhc3RFeHByZXNzaW9uOjpB
ZGRCcmFja2V0cyhBc3RCcmFja2V0cyAqYnJhY2tldCkKewogICAgaWYgKCEgYnJhY2tldHMpCiAg
ICAgICAgQWxsb2NhdGVCcmFja2V0cygpOwogICAgYnJhY2tldHMgLT4gTmV4dCgpID0gYnJhY2tl
dDsKfQoKaW5saW5lIHZvaWQgQXN0QXJyYXlDcmVhdGlvbkV4cHJlc3Npb246OkFsbG9jYXRlRGlt
RXhwcnMoaW50IGVzdGltYXRlKQp7CiAgICBpZiAoISBkaW1fZXhwcnMpCiAgICAgICAgZGltX2V4
cHJzID0gCgogICAgICAgICAgICByZWludGVycHJldF9jYXN0PEFzdEFycmF5PEFzdERpbUV4cHIg
Kj4gKj4KCgoKICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoZXN0aW1hdGUpKTsKfQoK
aW5saW5lIHZvaWQgQXN0QXJyYXlDcmVhdGlvbkV4cHJlc3Npb246OkFkZERpbUV4cHIoQXN0RGlt
RXhwciAqZGltX2V4cHIpCnsKICAgIGlmICghIGRpbV9leHBycykKICAgICAgICBBbGxvY2F0ZURp
bUV4cHJzKCk7ICAKICAgIGRpbV9leHBycyAtPiBOZXh0KCkgPSBkaW1fZXhwcjsKfQoKaW5saW5l
IHZvaWQgQXN0VGhpc0NhbGw6OkFsbG9jYXRlQXJndW1lbnRzKGludCBlc3RpbWF0ZSkKewogICAg
aWYgKCEgYXJndW1lbnRzKQogICAgICAgIGFyZ3VtZW50cyA9IAoKICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDxBc3RBcnJheTxBc3RFeHByZXNzaW9uICo+ICo+CgoKCiAgICAgICAgICAgIChw
b29sIC0+IE5ld0FzdEFycmF5KGVzdGltYXRlKSk7Cn0KCmlubGluZSB2b2lkIEFzdFRoaXNDYWxs
OjpBZGRBcmd1bWVudChBc3RFeHByZXNzaW9uICphcmd1bWVudCkKewogICAgaWYgKCEgYXJndW1l
bnRzKQogICAgICAgIEFsbG9jYXRlQXJndW1lbnRzKCk7ICAKICAgIGFyZ3VtZW50cyAtPiBOZXh0
KCkgPSBhcmd1bWVudDsKfQoKaW5saW5lIHZvaWQgQXN0U3VwZXJDYWxsOjpBbGxvY2F0ZUFyZ3Vt
ZW50cyhpbnQgZXN0aW1hdGUpCnsKICAgIGlmICghIGFyZ3VtZW50cykKICAgICAgICBhcmd1bWVu
dHMgPSAKCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0RXhwcmVzc2lv
biAqPiAqPgoKCgogICAgICAgICAgICAocG9vbCAtPiBOZXdBc3RBcnJheShlc3RpbWF0ZSkpOwp9
CgppbmxpbmUgdm9pZCBBc3RTdXBlckNhbGw6OkFkZEFyZ3VtZW50KEFzdEV4cHJlc3Npb24gKmFy
Z3VtZW50KQp7CiAgICBpZiAoISBhcmd1bWVudHMpCiAgICAgICAgQWxsb2NhdGVBcmd1bWVudHMo
KTsgIAogICAgYXJndW1lbnRzIC0+IE5leHQoKSA9IGFyZ3VtZW50Owp9CgppbmxpbmUgdm9pZCBB
c3RDbGFzc0luc3RhbmNlQ3JlYXRpb25FeHByZXNzaW9uOjpBbGxvY2F0ZUFyZ3VtZW50cyhpbnQg
ZXN0aW1hdGUpCnsKICAgIGlmICghIGFyZ3VtZW50cykKICAgICAgICBhcmd1bWVudHMgPSAKCiAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0RXhwcmVzc2lvbiAqPiAqPgoK
CgogICAgICAgICAgICAocG9vbCAtPiBOZXdBc3RBcnJheShlc3RpbWF0ZSkpOwp9CgppbmxpbmUg
dm9pZCBBc3RDbGFzc0luc3RhbmNlQ3JlYXRpb25FeHByZXNzaW9uOjpBZGRBcmd1bWVudChBc3RF
eHByZXNzaW9uICphcmd1bWVudCkKewogICAgaWYgKCEgYXJndW1lbnRzKQogICAgICAgIEFsbG9j
YXRlQXJndW1lbnRzKCk7ICAKICAgIGFyZ3VtZW50cyAtPiBOZXh0KCkgPSBhcmd1bWVudDsKfQoK
aW5saW5lIHZvaWQgQXN0TWV0aG9kSW52b2NhdGlvbjo6QWxsb2NhdGVBcmd1bWVudHMoaW50IGVz
dGltYXRlKQp7CiAgICBpZiAoISBhcmd1bWVudHMpCiAgICAgICAgYXJndW1lbnRzID0gCgogICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PEFzdEFycmF5PEFzdEV4cHJlc3Npb24gKj4gKj4KCgoK
ICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoZXN0aW1hdGUpKTsKfQoKaW5saW5lIHZv
aWQgQXN0TWV0aG9kSW52b2NhdGlvbjo6QWRkQXJndW1lbnQoQXN0RXhwcmVzc2lvbiAqYXJndW1l
bnQpCnsKICAgIGlmICghIGFyZ3VtZW50cykKICAgICAgICBBbGxvY2F0ZUFyZ3VtZW50cygpOyAg
CiAgICBhcmd1bWVudHMgLT4gTmV4dCgpID0gYXJndW1lbnQ7Cn0KCmlubGluZSB2b2lkIEFzdFRo
aXNDYWxsOjpBbGxvY2F0ZUxvY2FsQXJndW1lbnRzKGludCBlc3RpbWF0ZSkKewogICAgaWYgKCEg
bG9jYWxfYXJndW1lbnRzX29wdCkKICAgICAgICBsb2NhbF9hcmd1bWVudHNfb3B0ID0gCgogICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PEFzdEFycmF5PEFzdEV4cHJlc3Npb24gKj4gKj4KCgoK
ICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoZXN0aW1hdGUpKTsKfQoKaW5saW5lIHZv
aWQgQXN0VGhpc0NhbGw6OkFkZExvY2FsQXJndW1lbnQoQXN0RXhwcmVzc2lvbiAqYXJndW1lbnQp
CnsKICAgIGlmICghIGxvY2FsX2FyZ3VtZW50c19vcHQpCiAgICAgICAgQWxsb2NhdGVMb2NhbEFy
Z3VtZW50cygpOwogICAgbG9jYWxfYXJndW1lbnRzX29wdCAtPiBOZXh0KCkgPSBhcmd1bWVudDsK
fQoKaW5saW5lIHZvaWQgQXN0U3VwZXJDYWxsOjpBbGxvY2F0ZUxvY2FsQXJndW1lbnRzKGludCBl
c3RpbWF0ZSkKewogICAgaWYgKCEgbG9jYWxfYXJndW1lbnRzX29wdCkKICAgICAgICBsb2NhbF9h
cmd1bWVudHNfb3B0ID0gCgogICAgICAgICAgICByZWludGVycHJldF9jYXN0PEFzdEFycmF5PEFz
dEV4cHJlc3Npb24gKj4gKj4KCgoKICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoZXN0
aW1hdGUpKTsKfQoKaW5saW5lIHZvaWQgQXN0U3VwZXJDYWxsOjpBZGRMb2NhbEFyZ3VtZW50KEFz
dEV4cHJlc3Npb24gKmFyZ3VtZW50KQp7CiAgICBpZiAoISBsb2NhbF9hcmd1bWVudHNfb3B0KQog
ICAgICAgIEFsbG9jYXRlTG9jYWxBcmd1bWVudHMoKTsKICAgIGxvY2FsX2FyZ3VtZW50c19vcHQg
LT4gTmV4dCgpID0gYXJndW1lbnQ7Cn0KCmlubGluZSB2b2lkIEFzdENsYXNzSW5zdGFuY2VDcmVh
dGlvbkV4cHJlc3Npb246OkFsbG9jYXRlTG9jYWxBcmd1bWVudHMoaW50IGVzdGltYXRlKQp7CiAg
ICBpZiAoISBsb2NhbF9hcmd1bWVudHNfb3B0KQogICAgICAgIGxvY2FsX2FyZ3VtZW50c19vcHQg
PSAKCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0RXhwcmVzc2lvbiAq
PiAqPgoKCgogICAgICAgICAgICAocG9vbCAtPiBOZXdBc3RBcnJheShlc3RpbWF0ZSkpOwp9Cgpp
bmxpbmUgdm9pZCBBc3RDbGFzc0luc3RhbmNlQ3JlYXRpb25FeHByZXNzaW9uOjpBZGRMb2NhbEFy
Z3VtZW50KEFzdEV4cHJlc3Npb24gKmFyZ3VtZW50KQp7CiAgICBpZiAoISBsb2NhbF9hcmd1bWVu
dHNfb3B0KQogICAgICAgIEFsbG9jYXRlTG9jYWxBcmd1bWVudHMoKTsKICAgIGxvY2FsX2FyZ3Vt
ZW50c19vcHQgLT4gTmV4dCgpID0gYXJndW1lbnQ7Cn0KCmlubGluZSB2b2lkIEFzdE1ldGhvZERl
Y2xhcmF0aW9uOjpBbGxvY2F0ZVRocm93cyhpbnQgZXN0aW1hdGUpCnsKICAgIGlmICghIHRocm93
cykKICAgICAgICB0aHJvd3MgPSAKCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJy
YXk8QXN0RXhwcmVzc2lvbiAqPiAqPgoKCgogICAgICAgICAgICAocG9vbCAtPiBOZXdBc3RBcnJh
eShlc3RpbWF0ZSkpOwp9CgppbmxpbmUgdm9pZCBBc3RNZXRob2REZWNsYXJhdGlvbjo6QWRkVGhy
b3coQXN0RXhwcmVzc2lvbiAqZXhjZXB0aW9uKQp7CiAgICBpZiAoISB0aHJvd3MpCiAgICAgICAg
QWxsb2NhdGVUaHJvd3MoKTsKICAgIHRocm93cyAtPiBOZXh0KCkgPSBleGNlcHRpb247Cn0KCmlu
bGluZSB2b2lkIEFzdENvbnN0cnVjdG9yRGVjbGFyYXRpb246OkFsbG9jYXRlVGhyb3dzKGludCBl
c3RpbWF0ZSkKewogICAgaWYgKCEgdGhyb3dzKQogICAgICAgIHRocm93cyA9IAoKICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxBc3RBcnJheTxBc3RFeHByZXNzaW9uICo+ICo+CgoKCiAgICAg
ICAgICAgIChwb29sIC0+IE5ld0FzdEFycmF5KGVzdGltYXRlKSk7Cn0KCmlubGluZSB2b2lkIEFz
dENvbnN0cnVjdG9yRGVjbGFyYXRpb246OkFkZFRocm93KEFzdEV4cHJlc3Npb24gKmV4Y2VwdGlv
bikKewogICAgaWYgKCEgdGhyb3dzKQogICAgICAgIEFsbG9jYXRlVGhyb3dzKCk7CiAgICB0aHJv
d3MgLT4gTmV4dCgpID0gZXhjZXB0aW9uOwp9CgppbmxpbmUgdm9pZCBBc3RNZXRob2REZWNsYXJh
dG9yOjpBbGxvY2F0ZUZvcm1hbFBhcmFtZXRlcnMoaW50IGVzdGltYXRlKQp7CiAgICBpZiAoISBm
b3JtYWxfcGFyYW1ldGVycykKICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IAoKICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxBc3RBcnJheTxBc3RGb3JtYWxQYXJhbWV0ZXIgKj4gKj4KCgoK
ICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoZXN0aW1hdGUpKTsKfQoKaW5saW5lIHZv
aWQgQXN0TWV0aG9kRGVjbGFyYXRvcjo6QWRkRm9ybWFsUGFyYW1ldGVyKEFzdEZvcm1hbFBhcmFt
ZXRlciAqZm9ybWFsX3BhcmFtZXRlcikKewogICAgaWYgKCEgZm9ybWFsX3BhcmFtZXRlcnMpCiAg
ICAgICAgQWxsb2NhdGVGb3JtYWxQYXJhbWV0ZXJzKCk7CiAgICBmb3JtYWxfcGFyYW1ldGVycyAt
PiBOZXh0KCkgPSBmb3JtYWxfcGFyYW1ldGVyOwp9CgppbmxpbmUgdm9pZCBBc3RMb2NhbFZhcmlh
YmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQ6OkFsbG9jYXRlVmFyaWFibGVEZWNsYXJhdG9ycyhpbnQg
ZXN0aW1hdGUpCnsKICAgIGlmICghIHZhcmlhYmxlX2RlY2xhcmF0b3JzKQogICAgICAgIHZhcmlh
YmxlX2RlY2xhcmF0b3JzID0gCgogICAgICAgICAgICByZWludGVycHJldF9jYXN0PEFzdEFycmF5
PEFzdFZhcmlhYmxlRGVjbGFyYXRvciAqPiAqPgoKCgogICAgICAgICAgICAocG9vbCAtPiBOZXdB
c3RBcnJheShlc3RpbWF0ZSkpOwp9CgppbmxpbmUgdm9pZCBBc3RMb2NhbFZhcmlhYmxlRGVjbGFy
YXRpb25TdGF0ZW1lbnQ6OkFkZFZhcmlhYmxlRGVjbGFyYXRvcihBc3RWYXJpYWJsZURlY2xhcmF0
b3IgKnZhcmlhYmxlX2RlY2xhcmF0b3IpCnsKICAgIGlmICghIHZhcmlhYmxlX2RlY2xhcmF0b3Jz
KQogICAgICAgIEFsbG9jYXRlVmFyaWFibGVEZWNsYXJhdG9ycygpOwogICAgdmFyaWFibGVfZGVj
bGFyYXRvcnMgLT4gTmV4dCgpID0gdmFyaWFibGVfZGVjbGFyYXRvcjsKfQoKaW5saW5lIHZvaWQg
QXN0RmllbGREZWNsYXJhdGlvbjo6QWxsb2NhdGVWYXJpYWJsZURlY2xhcmF0b3JzKGludCBlc3Rp
bWF0ZSkKewogICAgaWYgKCEgdmFyaWFibGVfZGVjbGFyYXRvcnMpCiAgICAgICAgdmFyaWFibGVf
ZGVjbGFyYXRvcnMgPSAKCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0
VmFyaWFibGVEZWNsYXJhdG9yICo+ICo+CgoKCiAgICAgICAgICAgIChwb29sIC0+IE5ld0FzdEFy
cmF5KGVzdGltYXRlKSk7Cn0KCmlubGluZSB2b2lkIEFzdEZpZWxkRGVjbGFyYXRpb246OkFkZFZh
cmlhYmxlRGVjbGFyYXRvcihBc3RWYXJpYWJsZURlY2xhcmF0b3IgKnZhcmlhYmxlX2RlY2xhcmF0
b3IpCnsKICAgIGlmICghIHZhcmlhYmxlX2RlY2xhcmF0b3JzKQogICAgICAgIEFsbG9jYXRlVmFy
aWFibGVEZWNsYXJhdG9ycygpOwogICAgdmFyaWFibGVfZGVjbGFyYXRvcnMgLT4gTmV4dCgpID0g
dmFyaWFibGVfZGVjbGFyYXRvcjsKfQoKaW5saW5lIHZvaWQgQXN0Q2xhc3NEZWNsYXJhdGlvbjo6
QWxsb2NhdGVJbnRlcmZhY2VzKGludCBlc3RpbWF0ZSkKewogICAgaWYgKCEgaW50ZXJmYWNlcykK
ICAgICAgICBpbnRlcmZhY2VzID0gCgogICAgICAgICAgICByZWludGVycHJldF9jYXN0PEFzdEFy
cmF5PEFzdEV4cHJlc3Npb24gKj4gKj4KCgoKICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJy
YXkoZXN0aW1hdGUpKTsKfQoKaW5saW5lIHZvaWQgQXN0Q2xhc3NEZWNsYXJhdGlvbjo6QWRkSW50
ZXJmYWNlKEFzdEV4cHJlc3Npb24gKmludGVyZikKewogICAgaWYgKCEgaW50ZXJmYWNlcykKICAg
ICAgICBBbGxvY2F0ZUludGVyZmFjZXMoKTsKICAgIGludGVyZmFjZXMgLT4gTmV4dCgpID0gaW50
ZXJmOwp9CgppbmxpbmUgdm9pZCBBc3RJbnRlcmZhY2VEZWNsYXJhdGlvbjo6QWxsb2NhdGVFeHRl
bmRzSW50ZXJmYWNlcyhpbnQgZXN0aW1hdGUpCnsKICAgIGlmICghIGV4dGVuZHNfaW50ZXJmYWNl
cykKICAgICAgICBleHRlbmRzX2ludGVyZmFjZXMgPSAKCiAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8QXN0QXJyYXk8QXN0RXhwcmVzc2lvbiAqPiAqPgoKCgogICAgICAgICAgICAocG9vbCAt
PiBOZXdBc3RBcnJheShlc3RpbWF0ZSkpOwp9CgppbmxpbmUgdm9pZCBBc3RJbnRlcmZhY2VEZWNs
YXJhdGlvbjo6QWRkRXh0ZW5kc0ludGVyZmFjZShBc3RFeHByZXNzaW9uICppbnRlcmYpCnsKICAg
IGlmICghIGV4dGVuZHNfaW50ZXJmYWNlcykKICAgICAgICBBbGxvY2F0ZUV4dGVuZHNJbnRlcmZh
Y2VzKCk7CiAgICBleHRlbmRzX2ludGVyZmFjZXMgLT4gTmV4dCgpID0gaW50ZXJmOwp9Cgppbmxp
bmUgdm9pZCBBc3RJbnRlcmZhY2VEZWNsYXJhdGlvbjo6QWxsb2NhdGVJbnRlcmZhY2VNZW1iZXJE
ZWNsYXJhdGlvbnMoaW50IGVzdGltYXRlKQp7CiAgICBpZiAoISBpbnRlcmZhY2VfbWVtYmVyX2Rl
Y2xhcmF0aW9ucykKICAgICAgICBpbnRlcmZhY2VfbWVtYmVyX2RlY2xhcmF0aW9ucyA9IHBvb2wg
LT4gTmV3QXN0QXJyYXkoZXN0aW1hdGUpOwp9CgppbmxpbmUgdm9pZCBBc3RJbnRlcmZhY2VEZWNs
YXJhdGlvbjo6QWRkSW50ZXJmYWNlTWVtYmVyRGVjbGFyYXRpb24oQXN0ICptZW1iZXIpCnsKICAg
IGlmICghIGludGVyZmFjZV9tZW1iZXJfZGVjbGFyYXRpb25zKQogICAgICAgIEFsbG9jYXRlSW50
ZXJmYWNlTWVtYmVyRGVjbGFyYXRpb25zKCk7CiAgICBpbnRlcmZhY2VfbWVtYmVyX2RlY2xhcmF0
aW9ucyAtPiBOZXh0KCkgPSBtZW1iZXI7Cn0KCmlubGluZSB2b2lkIEFzdENsYXNzQm9keTo6QWxs
b2NhdGVDbGFzc0JvZHlEZWNsYXJhdGlvbnMoaW50IGVzdGltYXRlKQp7CiAgICBpZiAoISBjbGFz
c19ib2R5X2RlY2xhcmF0aW9ucykKICAgICAgICBjbGFzc19ib2R5X2RlY2xhcmF0aW9ucyA9IHBv
b2wgLT4gTmV3QXN0QXJyYXkoZXN0aW1hdGUpOwp9CgppbmxpbmUgdm9pZCBBc3RDbGFzc0JvZHk6
OkFkZENsYXNzQm9keURlY2xhcmF0aW9uKEFzdCAqbWVtYmVyKQp7CiAgICBpZiAoISBjbGFzc19i
b2R5X2RlY2xhcmF0aW9ucykKICAgICAgICBBbGxvY2F0ZUNsYXNzQm9keURlY2xhcmF0aW9ucygp
OwogICAgY2xhc3NfYm9keV9kZWNsYXJhdGlvbnMgLT4gTmV4dCgpID0gbWVtYmVyOwp9CgogCnZv
aWQgQXN0Q2xhc3NCb2R5OjpBZGRDbGFzc0JvZHlEZWNsYXJhdGlvbk5pY2VseShBc3QgKm1lbWJl
cikKewogICAgQXN0RmllbGREZWNsYXJhdGlvbiAqZmllbGRfZGVjbGFyYXRpb24gPSBtZW1iZXIg
LT4gRmllbGREZWNsYXJhdGlvbkNhc3QoKTsKICAgIEFzdE1ldGhvZERlY2xhcmF0aW9uICptZXRo
b2RfZGVjbGFyYXRpb24gPSBtZW1iZXIgLT4gTWV0aG9kRGVjbGFyYXRpb25DYXN0KCk7CiAgICBB
c3RDb25zdHJ1Y3RvckRlY2xhcmF0aW9uICpjb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbiA9IG1lbWJl
ciAtPiBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uQ2FzdCgpOwogICAgQXN0U3RhdGljSW5pdGlhbGl6
ZXIgKnN0YXRpY19pbml0aWFsaXplciA9IG1lbWJlciAtPiBTdGF0aWNJbml0aWFsaXplckNhc3Qo
KTsKICAgIEFzdENsYXNzRGVjbGFyYXRpb24gKmNsYXNzX2RlY2xhcmF0aW9uID0gbWVtYmVyIC0+
IENsYXNzRGVjbGFyYXRpb25DYXN0KCk7CiAgICBBc3RJbnRlcmZhY2VEZWNsYXJhdGlvbiAqaW50
ZXJmYWNlX2RlY2xhcmF0aW9uID0gbWVtYmVyIC0+IEludGVyZmFjZURlY2xhcmF0aW9uQ2FzdCgp
OwogICAgQXN0QmxvY2sgKmJsb2NrID0gbWVtYmVyIC0+IEJsb2NrQ2FzdCgpOwoKICAgIEFkZENs
YXNzQm9keURlY2xhcmF0aW9uKG1lbWJlcik7CgoKICAgICAKCiAgICBpZiAoZmllbGRfZGVjbGFy
YXRpb24pCiAgICB7CiAgICAgICAgaWYgKGZpZWxkX2RlY2xhcmF0aW9uIC0+IFN0YXRpY0ZpZWxk
Q2FzdCgpKQogICAgICAgICAgICBBZGRDbGFzc1ZhcmlhYmxlKGZpZWxkX2RlY2xhcmF0aW9uKTsK
ICAgICAgICBlbHNlIEFkZEluc3RhbmNlVmFyaWFibGUoZmllbGRfZGVjbGFyYXRpb24pOwogICAg
fQogICAgZWxzZSBpZiAobWV0aG9kX2RlY2xhcmF0aW9uKQogICAgewogICAgICAgIEFkZE1ldGhv
ZChtZXRob2RfZGVjbGFyYXRpb24pOwogICAgfQogICAgZWxzZSBpZiAoY29uc3RydWN0b3JfZGVj
bGFyYXRpb24pCiAgICB7CiAgICAgICAgQWRkQ29uc3RydWN0b3IoY29uc3RydWN0b3JfZGVjbGFy
YXRpb24pOwogICAgfQogICAgZWxzZSBpZiAoc3RhdGljX2luaXRpYWxpemVyKQogICAgewogICAg
ICAgIEFkZFN0YXRpY0luaXRpYWxpemVyKHN0YXRpY19pbml0aWFsaXplcik7CiAgICB9CiAgICBl
bHNlIGlmIChjbGFzc19kZWNsYXJhdGlvbikKICAgIHsKICAgICAgICBBZGROZXN0ZWRDbGFzcyhj
bGFzc19kZWNsYXJhdGlvbik7CiAgICB9CiAgICBlbHNlIGlmIChpbnRlcmZhY2VfZGVjbGFyYXRp
b24pCiAgICB7CiAgICAgICAgQWRkTmVzdGVkSW50ZXJmYWNlKGludGVyZmFjZV9kZWNsYXJhdGlv
bik7CiAgICB9CiAgICBlbHNlIGlmIChibG9jaykKICAgIHsKICAgICAgICBBZGRCbG9jayhibG9j
ayk7CiAgICB9CiAgICBlbHNlICAKICAgIHsKICAgICAgICBBZGRFbXB0eURlY2xhcmF0aW9uKChB
c3RFbXB0eURlY2xhcmF0aW9uICopIG1lbWJlcik7CiAgICB9Cn0KCmlubGluZSB2b2lkIEFzdEZv
clN0YXRlbWVudDo6QWxsb2NhdGVGb3JJbml0U3RhdGVtZW50cyhpbnQgZXN0aW1hdGUpCnsKICAg
IGlmICghIGZvcl9pbml0X3N0YXRlbWVudHMpCiAgICAgICAgZm9yX2luaXRfc3RhdGVtZW50cyA9
IAoKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxBc3RBcnJheTxBc3RTdGF0ZW1lbnQgKj4g
Kj4KCgoKICAgICAgICAgICAgKHBvb2wgLT4gTmV3QXN0QXJyYXkoZXN0aW1hdGUpKTsKfQoKaW5s
aW5lIHZvaWQgQXN0Rm9yU3RhdGVtZW50OjpBZGRGb3JJbml0U3RhdGVtZW50KEFzdFN0YXRlbWVu
dCAqc3RhdGVtZW50KQp7CiAgICBpZiAoISBmb3JfaW5pdF9zdGF0ZW1lbnRzKQogICAgICAgIEFs
bG9jYXRlRm9ySW5pdFN0YXRlbWVudHMoKTsKICAgIGZvcl9pbml0X3N0YXRlbWVudHMgLT4gTmV4
dCgpID0gc3RhdGVtZW50Owp9CgppbmxpbmUgdm9pZCBBc3RGb3JTdGF0ZW1lbnQ6OkFsbG9jYXRl
Rm9yVXBkYXRlU3RhdGVtZW50cyhpbnQgZXN0aW1hdGUpCnsKICAgIGlmICghIGZvcl91cGRhdGVf
c3RhdGVtZW50cykKICAgICAgICBmb3JfdXBkYXRlX3N0YXRlbWVudHMgPSAKCiAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8QXN0QXJyYXk8QXN0RXhwcmVzc2lvblN0YXRlbWVudCAqPiAqPgoK
CgogICAgICAgICAgICAocG9vbCAtPiBOZXdBc3RBcnJheShlc3RpbWF0ZSkpOwp9CgppbmxpbmUg
dm9pZCBBc3RGb3JTdGF0ZW1lbnQ6OkFkZEZvclVwZGF0ZVN0YXRlbWVudChBc3RFeHByZXNzaW9u
U3RhdGVtZW50ICpzdGF0ZW1lbnQpCnsKICAgIGlmICghIGZvcl91cGRhdGVfc3RhdGVtZW50cykK
ICAgICAgICBBbGxvY2F0ZUZvclVwZGF0ZVN0YXRlbWVudHMoKTsKICAgIGZvcl91cGRhdGVfc3Rh
dGVtZW50cyAtPiBOZXh0KCkgPSBzdGF0ZW1lbnQ7Cn0KCmlubGluZSB2b2lkIEFzdEFycmF5SW5p
dGlhbGl6ZXI6OkFsbG9jYXRlVmFyaWFibGVJbml0aWFsaXplcnMoaW50IGVzdGltYXRlKQp7CiAg
ICBpZiAoISB2YXJpYWJsZV9pbml0aWFsaXplcnMpCiAgICAgICAgdmFyaWFibGVfaW5pdGlhbGl6
ZXJzID0gcG9vbCAtPiBOZXdBc3RBcnJheShlc3RpbWF0ZSk7Cn0KCmlubGluZSB2b2lkIEFzdEFy
cmF5SW5pdGlhbGl6ZXI6OkFkZFZhcmlhYmxlSW5pdGlhbGl6ZXIoQXN0ICppbml0aWFsaXplcikK
ewogICAgaWYgKCEgdmFyaWFibGVfaW5pdGlhbGl6ZXJzKQogICAgICAgIEFsbG9jYXRlVmFyaWFi
bGVJbml0aWFsaXplcnMoKTsKICAgIHZhcmlhYmxlX2luaXRpYWxpemVycyAtPiBOZXh0KCkgPSBp
bml0aWFsaXplcjsKfQoKaW5saW5lIHZvaWQgQXN0VHJ5U3RhdGVtZW50OjpBbGxvY2F0ZUNhdGNo
Q2xhdXNlcyhpbnQgZXN0aW1hdGUpCnsKICAgIGlmICghIGNhdGNoX2NsYXVzZXMpCiAgICAgICAg
Y2F0Y2hfY2xhdXNlcyA9IAoKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxBc3RBcnJheTxB
c3RDYXRjaENsYXVzZSAqPiAqPgoKCgogICAgICAgICAgICAocG9vbCAtPiBOZXdBc3RBcnJheShl
c3RpbWF0ZSkpOwp9CgppbmxpbmUgdm9pZCBBc3RUcnlTdGF0ZW1lbnQ6OkFkZENhdGNoQ2xhdXNl
KEFzdENhdGNoQ2xhdXNlICpjYXRjaF9jbGF1c2UpCnsKICAgIGlmICghIGNhdGNoX2NsYXVzZXMp
CiAgICAgICAgQWxsb2NhdGVDYXRjaENsYXVzZXMoKTsKICAgIGNhdGNoX2NsYXVzZXMgLT4gTmV4
dCgpID0gY2F0Y2hfY2xhdXNlOwp9CgppbmxpbmUgdm9pZCBBc3RDb21waWxhdGlvblVuaXQ6OkFs
bG9jYXRlSW1wb3J0RGVjbGFyYXRpb25zKGludCBlc3RpbWF0ZSkKewogICAgaWYgKCEgaW1wb3J0
X2RlY2xhcmF0aW9ucykKICAgICAgICBpbXBvcnRfZGVjbGFyYXRpb25zID0gCgogICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PEFzdEFycmF5PEFzdEltcG9ydERlY2xhcmF0aW9uICo+ICo+CgoK
CiAgICAgICAgICAgIChwb29sIC0+IE5ld0FzdEFycmF5KGVzdGltYXRlKSk7Cn0KCmlubGluZSB2
b2lkIEFzdENvbXBpbGF0aW9uVW5pdDo6QWRkSW1wb3J0RGVjbGFyYXRpb24oQXN0SW1wb3J0RGVj
bGFyYXRpb24gKmltcG9ydF9kZWNsYXJhdGlvbikKewogICAgaWYgKCEgaW1wb3J0X2RlY2xhcmF0
aW9ucykKICAgICAgICBBbGxvY2F0ZUltcG9ydERlY2xhcmF0aW9ucygpOwogICAgaW1wb3J0X2Rl
Y2xhcmF0aW9ucyAtPiBOZXh0KCkgPSBpbXBvcnRfZGVjbGFyYXRpb247Cn0KCmlubGluZSB2b2lk
IEFzdENvbXBpbGF0aW9uVW5pdDo6QWxsb2NhdGVUeXBlRGVjbGFyYXRpb25zKGludCBlc3RpbWF0
ZSkKewogICAgaWYgKCEgdHlwZV9kZWNsYXJhdGlvbnMpCiAgICAgICAgdHlwZV9kZWNsYXJhdGlv
bnMgPSBwb29sIC0+IE5ld0FzdEFycmF5KGVzdGltYXRlKTsKfQoKaW5saW5lIHZvaWQgQXN0Q29t
cGlsYXRpb25Vbml0OjpBZGRUeXBlRGVjbGFyYXRpb24oQXN0ICp0eXBlX2RlY2xhcmF0aW9uKQp7
CiAgICBpZiAoISB0eXBlX2RlY2xhcmF0aW9ucykKICAgICAgICBBbGxvY2F0ZVR5cGVEZWNsYXJh
dGlvbnMoKTsKICAgIHR5cGVfZGVjbGFyYXRpb25zIC0+IE5leHQoKSA9IHR5cGVfZGVjbGFyYXRp
b247Cn0KCgogCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgVD4KICAgIHZvaWQgQXN0QXJyYXk8VD46OkFs
bG9jYXRlTW9yZVNwYWNlKCkKICAgIHsKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAg
ICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAK
ICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAg
IHNpemVfdCBrID0gc2l6ZSA+PiBsb2dfYmxrc2l6ZTsgIAoKICAgICAgICAgCiAgICAgICAgIAog
ICAgICAgICAKICAgICAgICBpZiAoayA9PSBiYXNlX3NpemUpCiAgICAgICAgewogICAgICAgICAg
ICBpbnQgb2xkX2Jhc2Vfc2l6ZSA9IGJhc2Vfc2l6ZTsKICAgICAgICAgICAgVCAqKm9sZF9iYXNl
ID0gYmFzZTsKCiAgICAgICAgICAgIGJhc2Vfc2l6ZSArPSBiYXNlX2luY3JlbWVudDsKCiAgICAg
ICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggYmFzZV9zaXplIDw9IHBvb2wgLT4gQmxrc2l6
ZSgpICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJiYXNlX3NpemUgPD0gcG9vbCAtPiBCbGtzaXpl
KCkiICwgIi4uLy4uL2ppa2VzL3NyYy9hc3QuaCIsIDY4ODcsIF9fUFJFVFRZX0ZVTkNUSU9OX18g
KSwgMCkpKSA7ICAKCiAgICAgICAgICAgIGJhc2UgPSAoVCAqKikgcG9vbCAtPiBBbGxvYyhzaXpl
b2YoVCAqKSAqIGJhc2Vfc2l6ZSk7CgogICAgICAgICAgICBpZiAob2xkX2Jhc2UgIT0gX19udWxs
ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbWVtbW92ZShiYXNlLCBvbGRfYmFzZSwg
b2xkX2Jhc2Vfc2l6ZSAqIHNpemVvZihUICopKTsKIAogCiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgbWVtc2V0KCZiYXNlW29sZF9iYXNlX3NpemVdLCAwLCAoYmFzZV9zaXplIC0gb2xkX2Jhc2Vf
c2l6ZSkgKiBzaXplb2YoVCAqKSk7CiAgICAgICAgfQoKICAgICAgICAgCiAgICAgICAgIAogICAg
ICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAoc3RhdGljX2Nhc3Q8
dm9pZD4gICgoIEJsa3NpemUoKSA8PSBwb29sIC0+IEJsa3NpemUoKSApID8gMCA6CShfX2Fzc2Vy
dF9mYWlsICgiQmxrc2l6ZSgpIDw9IHBvb2wgLT4gQmxrc2l6ZSgpIiAsICIuLi8uLi9qaWtlcy9z
cmMvYXN0LmgiLCA2OTA2LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOyAgCgogICAgICAg
IGJhc2Vba10gPSAoVCAqKSBwb29sIC0+IEFsbG9jKHNpemVvZihUKSAqIEJsa3NpemUoKSk7CiAg
ICAgICAgYmFzZVtrXSAtPSBzaXplOwoKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAg
ICAgICBzaXplICs9IEJsa3NpemUoKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKCnRlbXBsYXRl
IDxjbGFzcyBUPgogICAgIAogICAgIAogICAgIAogICAgQXN0QXJyYXk8VD46OkFzdEFycmF5KFN0
b3JhZ2VQb29sICpwb29sXywgdW5zaWduZWQgZXN0aW1hdGUpIDogcG9vbChwb29sXykKICAgIHsK
ICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIHNpemVvZihUKSA9PSBzaXplb2YoU3RvcmFn
ZVBvb2w6OkNlbGwpICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJzaXplb2YoVCkgPT0gc2l6ZW9m
KFN0b3JhZ2VQb29sOjpDZWxsKSIgLCAiLi4vLi4vamlrZXMvc3JjL2FzdC5oIiwgNjkyNiwgX19Q
UkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsgIAogICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAg
KCggcG9vbCAtPiBCbGtzaXplKCkgPj0gMjU2ICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJwb29s
IC0+IEJsa3NpemUoKSA+PSAyNTYiICwgIi4uLy4uL2ppa2VzL3NyYy9hc3QuaCIsIDY5MjcsIF9f
UFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7ICAKCiAgICAgICAgaWYgKGVzdGltYXRlID09IDAp
CiAgICAgICAgICAgIGxvZ19ibGtzaXplID0gNjsgIAogICAgICAgIGVsc2UKICAgICAgICB7CiAg
ICAgICAgICAgIGZvciAobG9nX2Jsa3NpemUgPSAxOyAoKCh1bnNpZ25lZCkgMSA8PCBsb2dfYmxr
c2l6ZSkgPCBlc3RpbWF0ZSkgJiYgKGxvZ19ibGtzaXplIDwgMzEpOyBsb2dfYmxrc2l6ZSsrKQog
ICAgICAgICAgICAgICAgOwogICAgICAgIH0KCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAg
CiAgICAgICAgIAogICAgICAgICAKICAgICAgICBiYXNlX2luY3JlbWVudCA9IChCbGtzaXplKCkg
PiBwb29sIC0+IEJsa3NpemUoKSA/IEJsa3NpemUoKSAvIHBvb2wgLT4gQmxrc2l6ZSgpIDogMSkg
KiAyOwogICAgICAgIHdoaWxlIChCbGtzaXplKCkgPj0gcG9vbCAtPiBCbGtzaXplKCkpCiAgICAg
ICAgICAgIGxvZ19ibGtzaXplLS07CgogICAgICAgIGJhc2Vfc2l6ZSA9IDA7CiAgICAgICAgc2l6
ZSA9IDA7CiAgICAgICAgdG9wID0gMDsKICAgICAgICBiYXNlID0gX19udWxsIDsKICAgIH0KCgoK
CgoKCiMgMTQgIi4uLy4uL2ppa2VzL3NyYy9zZW1hbnRpYy5oIiAyCgojIDEgIi4uLy4uL2ppa2Vz
L3NyYy9kaWFnbm9zZS5oIiAxCiAKIAogCiAKIAogCiAKIAogCgoKCgoKCgoKCgoKc3RydWN0IFJl
cGFpckNhbmRpZGF0ZQp7CiAgICBpbnQgc3ltYm9sOwogICAgTG9jYXRpb24gbG9jYXRpb247Cn07
CgpzdHJ1Y3QgU3RhdGVJbmZvCnsKICAgIGludCBzdGF0ZSwKICAgICAgICBuZXh0Owp9OwoKY2xh
c3MgUGFyc2VFcnJvckluZm86IHB1YmxpYyBKaWtlc0Vycm9yCnsKICAgIGZyaWVuZCBjbGFzcyBQ
YXJzZUVycm9yOwogICAgCiBwdWJsaWM6CiAgICAKICAgIHZpcnR1YWwgY29uc3Qgd2NoYXJfdCAq
Z2V0RXJyb3JNZXNzYWdlKCk7CiAgICB2aXJ0dWFsIGNvbnN0IHdjaGFyX3QgKmdldEVycm9yUmVw
b3J0KCk7CiAgICAKICAgIHZpcnR1YWwgSmlrZXNFcnJvclNldmVyaXR5IGdldFNldmVyaXR5KCk7
CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKmdldEZpbGVOYW1lKCk7CiAgICAKICAgIHZpcnR1YWwg
aW50IGdldExlZnRMaW5lTm8gICAgICAoKTsKICAgIHZpcnR1YWwgaW50IGdldExlZnRDb2x1bW5O
byAgICAoKTsKICAgIHZpcnR1YWwgaW50IGdldFJpZ2h0TGluZU5vICAgICAoKTsKICAgIHZpcnR1
YWwgaW50IGdldFJpZ2h0Q29sdW1uTm8gICAoKTsKCiBwcm90ZWN0ZWQ6ICAgICAgICAKCiBwcml2
YXRlOgogICAgCiAgICBpbnQgbGVmdF9saW5lX25vICAgIDsKICAgIGludCBsZWZ0X2NvbHVtbl9u
byAgOwogICAgaW50IHJpZ2h0X2xpbmVfbm8gICA7CiAgICBpbnQgcmlnaHRfY29sdW1uX25vIDsK
ICAgIAogICAgc3RhdGljIGJvb2wgZW1hY3Nfc3R5bGVfcmVwb3J0OwogICAgTGV4U3RyZWFtICps
ZXhfc3RyZWFtOwogICAgCiAgICB2b2lkIEluaXRpYWxpemUoTGV4U3RyZWFtICopOwoKICAgIHdj
aGFyX3QgKnJlZ3VsYXJFcnJvclN0cmluZyAoKTsKICAgIHdjaGFyX3QgKmVtYWNzRXJyb3JTdHJp
bmcgICAoKTsKICAgIAogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IGxlZnRfdG9rZW4gIDsKICAg
IExleFN0cmVhbTo6VG9rZW5JbmRleCByaWdodF90b2tlbiA7CiAgICAKICAgIGludCAgICAgICAg
ICAgICAgICAgICBuYW1lX2luZGV4OyAgIAogICAgaW50ICAgICAgICAgICAgICAgICAgIHJpZ2h0
X3N0cmluZ19sZW5ndGg7CiAgICBpbnQgICAgICAgICAgICAgICAgICAgbnVtOwogICAgdW5zaWdu
ZWQgY2hhciAgICAgICAgIG1zZ19sZXZlbDsKICAgIFBhcnNlRXJyb3JDb2RlICAgICAgICBtc2df
Y29kZTsKICAgIHVuc2lnbmVkICAgICAgICAgICAgICBzY29wZV9uYW1lX2luZGV4Owp9OwoKCmNs
YXNzIFBhcnNlRXJyb3IgOiBwdWJsaWMgamF2YXByc190YWJsZQp7CiBwdWJsaWM6CgogICAgdm9p
ZCBSZXBvcnQoaW50IG1zZ19sZXZlbCwgUGFyc2VFcnJvckNvZGUsIGludCBuYW1lX2luZGV4LAog
ICAgICAgICAgICAgICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IGxlZnRfdG9rZW4sIExleFN0cmVh
bTo6VG9rZW5JbmRleCByaWdodF90b2tlbiwKICAgICAgICAgICAgICAgIGludCBzY29wZV9uYW1l
X2luZGV4ID0gMCk7CgogICAgdm9pZCBTb3J0TWVzc2FnZXMoKTsKCiAgICBQYXJzZUVycm9yKENv
bnRyb2wgJmNvbnRyb2xfLCBMZXhTdHJlYW0gKmxleF9zdHJlYW1fKTsKICAgIHZvaWQgUHJpbnRN
ZXNzYWdlcygpOwoKcHJpdmF0ZToKCiAgICBDb250cm9sICZjb250cm9sOwogICAgTGV4U3RyZWFt
ICpsZXhfc3RyZWFtOwoKICAgIFR1cGxlPFBhcnNlRXJyb3JJbmZvPiBlcnJvcnM7CgogICAgdm9p
ZCBQcmludFByaW1hcnlNZXNzYWdlICAgKGludCBrKTsKICAgIHZvaWQgUHJpbnRTZWNvbmRhcnlN
ZXNzYWdlIChpbnQgayk7CiAgICAKfTsKCgpjbGFzcyBEaWFnbm9zZVBhcnNlciA6IHB1YmxpYyBQ
YXJzZXIKewpwdWJsaWM6CgogICAgRGlhZ25vc2VQYXJzZXIoQ29udHJvbCAmY29udHJvbF8sIExl
eFN0cmVhbSAqbGV4X3N0cmVhbV8pIDogbmV4dF9zdGFjayhfX251bGwgKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZf
c3RhY2soX19udWxsICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY29wZV9pbmRleChfX251bGwgKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3Bl
X3Bvc2l0aW9uKF9fbnVsbCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfcG9vbCgyNTYpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Io
Y29udHJvbF8sIGxleF9zdHJlYW1fKQogICAgewogICAgICAgIGxleF9zdHJlYW0gPSBsZXhfc3Ry
ZWFtXzsKICAgICAgICBtZW1zZXQobGlzdCwgMCwgTlVNX1NZTUJPTFMgKiBzaXplb2YoaW50KSk7
CiAgICAgICAgRGlhZ25vc2VQYXJzZSgpOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgfkRp
YWdub3NlUGFyc2VyKCkKICAgIHsKICAgICAgICBkZWxldGUgW10gbmV4dF9zdGFjazsKICAgICAg
ICBkZWxldGUgW10gcHJldl9zdGFjazsKICAgICAgICBkZWxldGUgW10gc2NvcGVfaW5kZXg7CiAg
ICAgICAgZGVsZXRlIFtdIHNjb3BlX3Bvc2l0aW9uOwogICAgfQoKcHJpdmF0ZToKCiAgICBpbnQg
bmV4dF9zdGFja190b3AsCiAgICAgICAgKm5leHRfc3RhY2ssCgogICAgICAgIHByZXZfc3RhY2tf
dG9wLAogICAgICAgICpwcmV2X3N0YWNrLAoKICAgICAgICBzY29wZV9zdGFja190b3AsCiAgICAg
ICAgKnNjb3BlX2luZGV4LAogICAgICAgICpzY29wZV9wb3NpdGlvbjsKCiAgICBpbnQgbGlzdFtO
VU1fU1lNQk9MUyArIDFdOwoKICAgIGVudW0geyBOSUwgPSAtMSB9OwogICAgVHVwbGU8U3RhdGVJ
bmZvPiBzdGF0ZV9wb29sOwogICAgaW50ICpzdGF0ZV9zZWVuOyAgCgogICAgUGFyc2VFcnJvciBl
cnJvcjsKCiAgICB2b2lkIERpYWdub3NlUGFyc2UoKTsKCiAgICB2b2lkIFJlYWxsb2NhdGVTdGFj
a3MoKTsKCiAgICBSZXBhaXJDYW5kaWRhdGUgRXJyb3JSZWNvdmVyeShUb2tlbk9iamVjdCBlcnJv
cl90b2tlbik7CiAgICBSZXBhaXJDYW5kaWRhdGUgUHJpbWFyeVBoYXNlKFRva2VuT2JqZWN0IGVy
cm9yX3Rva2VuKTsKICAgIGludCBNZXJnZUNhbmRpZGF0ZShpbnQgc3RhdGUsIGludCBidWZmZXJf
cG9zaXRpb24pOwogICAgUHJpbWFyeVJlcGFpckluZm8gQ2hlY2tQcmltYXJ5RGlzdGFuY2UoaW50
IHN0YWNrW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
c3RhY2tfdG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJp
bWFyeVJlcGFpckluZm8gcmVwYWlyKTsKICAgIFJlcGFpckNhbmRpZGF0ZSBQcmltYXJ5RGlhZ25v
c2lzKFByaW1hcnlSZXBhaXJJbmZvIHJlcGFpcik7CiAgICBpbnQgR2V0VGVybUluZGV4KGludCBz
dGFja1tdLCBpbnQgc3RhY2tfdG9wLAogICAgICAgICAgICAgICAgICAgICBpbnQgdG9rLCBpbnQg
YnVmZmVyX3Bvc2l0aW9uKTsKICAgIGludCBHZXROdGVybUluZGV4KGludCBzdGFydCwgaW50IHN5
bSwgaW50IGJ1ZmZlcl9wb3NpdGlvbik7CiAgICBpbnQgTWlzc3BlbGwoaW50IHN5bSwgVG9rZW5P
YmplY3QgdG9rKTsKICAgIFJlcGFpckNhbmRpZGF0ZSBTZWNvbmRhcnlQaGFzZShUb2tlbk9iamVj
dCBlcnJvcl90b2tlbik7CiAgICBTZWNvbmRhcnlSZXBhaXJJbmZvIE1pc3BsYWNlbWVudFJlY292
ZXJ5CiAgICAgICAgICAgICAoaW50IHN0YWNrW10sCiAgICAgICAgICAgICAgaW50IHN0YWNrX3Rv
cCwKICAgICAgICAgICAgICBpbnQgbGFzdF9pbmRleCwKICAgICAgICAgICAgICBTZWNvbmRhcnlS
ZXBhaXJJbmZvIG1pc3BsYWNlZCwgYm9vbCBzdGFja19mbGFnKTsKICAgIFNlY29uZGFyeVJlcGFp
ckluZm8gU2Vjb25kYXJ5UmVjb3ZlcnkKICAgICAgICAgICAgIChpbnQgc3RhY2tbXSwKICAgICAg
ICAgICAgICBpbnQgc3RhY2tfdG9wLAogICAgICAgICAgICAgIGludCBsYXN0X2luZGV4LAogICAg
ICAgICAgICAgIFNlY29uZGFyeVJlcGFpckluZm8gcmVwYWlyLCBib29sIHN0YWNrX2ZsYWcpOwog
ICAgdm9pZCBTZWNvbmRhcnlEaWFnbm9zaXMoU2Vjb25kYXJ5UmVwYWlySW5mbyByZXBhaXIpOwoK
ICAgIHZvaWQgUmVwYWlyUGFyc2UoVG9rZW5PYmplY3QpOwoKICAgIFByaW1hcnlSZXBhaXJJbmZv
IFNjb3BlVHJpYWwoaW50IHN0YWNrW10sIGludCBzdGFja190b3AsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFByaW1hcnlSZXBhaXJJbmZvIHJlcGFpcik7CiAgICB2b2lkIFNjb3Bl
VHJpYWxDaGVjayhpbnQgc3RhY2tbXSwgaW50IHN0YWNrX3RvcCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIFByaW1hcnlSZXBhaXJJbmZvJiByZXBhaXIsIGludCBpbmR4KTsKICAgIGJvb2wgU2Vj
b25kYXJ5Q2hlY2soaW50IHN0YWNrW10sIGludCBzdGFja190b3AsCiAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBidWZmZXJfcG9zaXRpb24sIGludCBkaXN0YW5jZSk7Cn07CgoKCgoKCgojIDE1
ICIuLi8uLi9qaWtlcy9zcmMvc2VtYW50aWMuaCIgMgoKIyAxICIuLi8uLi9qaWtlcy9zcmMvZXJy
b3IuaCIgMQogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgoKCgpjbGFzcyBDb250cm9sOwpjbGFz
cyBMZXhTdHJlYW07CmNsYXNzIEFzdF9Db21waWxhdGlvblVuaXQ7CmNsYXNzIFN5bWJvbFNldDsK
Y2xhc3MgU2VtYW50aWM7CmNsYXNzIFNlbWFudGljRXJyb3I7CgpjbGFzcyBFcnJvckluZm8gOiBw
dWJsaWMgSmlrZXNFcnJvcgp7CiAgICBmcmllbmQgY2xhc3MgU2VtYW50aWNFcnJvcjsKICAgIAog
cHVibGljOgogICAgCiAgICB2aXJ0dWFsIGNvbnN0IHdjaGFyX3QgKmdldEVycm9yTWVzc2FnZSgp
OwogICAgdmlydHVhbCBjb25zdCB3Y2hhcl90ICpnZXRFcnJvclJlcG9ydCgpOwoKICAgIHZpcnR1
YWwgSmlrZXNFcnJvclNldmVyaXR5IGdldFNldmVyaXR5KCk7CiAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIgKmdldEZpbGVOYW1lKCk7CgogICAgdmlydHVhbCBpbnQgZ2V0TGVmdExpbmVObyAgICAgICgp
OwogICAgdmlydHVhbCBpbnQgZ2V0TGVmdENvbHVtbk5vICAgICgpOwogICAgdmlydHVhbCBpbnQg
Z2V0UmlnaHRMaW5lTm8gICAgICgpOwogICAgdmlydHVhbCBpbnQgZ2V0UmlnaHRDb2x1bW5ObyAg
ICgpOwoKICAgIEVycm9ySW5mbygpOwogICAgdmlydHVhbCB+RXJyb3JJbmZvKCk7CgogcHJvdGVj
dGVkOgoKIHByaXZhdGU6CiAgICBpbnQgbGVmdF9saW5lX25vICAgIDsKICAgIGludCBsZWZ0X2Nv
bHVtbl9ubyAgOwogICAgaW50IHJpZ2h0X2xpbmVfbm8gICA7CiAgICBpbnQgcmlnaHRfY29sdW1u
X25vIDsKICAgIAogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IGxlZnRfdG9rZW47CiAgICBMZXhT
dHJlYW06OlRva2VuSW5kZXggcmlnaHRfdG9rZW47CiAgICAKICAgIHdjaGFyX3QgKmluc2VydDEs
CiAgICAgICAgKmluc2VydDIsCiAgICAgICAgKmluc2VydDMsCiAgICAgICAgKmluc2VydDQsCiAg
ICAgICAgKmluc2VydDUsCiAgICAgICAgKmluc2VydDYsCiAgICAgICAgKmluc2VydDcsCiAgICAg
ICAgKmluc2VydDgsCiAgICAgICAgKmluc2VydDk7CgogICAgd2NoYXJfdCAgKm1zZzsKICAgIHVu
c2lnbmVkIG51bTsKICAgIHNob3J0ICAgIG1zZ19jb2RlOwogICAgc2hvcnQgICAgcmlnaHRfc3Ry
aW5nX2xlbmd0aDsKICAgIEppa2VzRXJyb3JTZXZlcml0eSBzZXZlcml0eTsKCiAgICBzdGF0aWMg
Ym9vbCBlbWFjc19zdHlsZV9yZXBvcnQ7CiAgICBMZXhTdHJlYW0gKmxleF9zdHJlYW07CgogICAg
d2NoYXJfdCAqcmVndWxhckVycm9yU3RyaW5nICgpOwogICAgd2NoYXJfdCAqZW1hY3NFcnJvclN0
cmluZyAgICgpOwoKICAgIHZvaWQgUHJpbnRMYXJnZVNvdXJjZShFcnJvclN0cmluZyAmcyk7CiAg
ICB2b2lkIFByaW50U21hbGxTb3VyY2UoRXJyb3JTdHJpbmcgJnMpOwoKICAgIHZvaWQgSW5pdGlh
bGl6ZShMZXhTdHJlYW0gKiwgd2NoYXJfdCAqLCBKaWtlc0Vycm9yU2V2ZXJpdHkpOwp9OwoKY2xh
c3MgU2VtYW50aWNFcnJvcgp7CiAgICBmcmllbmQgY2xhc3MgRXJyb3JJbmZvIDsKICAgIGZyaWVu
ZCBjbGFzcyBKaWtlc0FQSSAgOwoKIHB1YmxpYzoKICAgIGVudW0gU2VtYW50aWNFcnJvcktpbmQK
ICAgIHsKICAgICAgICBCQURfRVJST1IsCiAgICAgICAgREVGQVVMVF9FUlJPUiwKCiAgICAgICAg
SU5WQUxJRF9PUFRJT04sCiAgICAgICAgSU5WQUxJRF9LX09QVElPTiwKICAgICAgICBJTlZBTElE
X0tfVEFSR0VULAogICAgICAgIElOVkFMSURfVEFCX1ZBTFVFLAogICAgICAgIElOVkFMSURfRElS
RUNUT1JZLAogICAgICAgIFVOU1VQUE9SVEVEX0VOQ09ESU5HLAogICAgICAgIFVOU1VQUE9SVEVE
X09QVElPTiwKICAgICAgICBESVNBQkxFRF9PUFRJT04sCgogICAgICAgIE5PX0NVUlJFTlRfRElS
RUNUT1JZLAogICAgICAgIENBTk5PVF9PUEVOX1pJUF9GSUxFLAogICAgICAgIENBTk5PVF9PUEVO
X1BBVEhfRElSRUNUT1JZLAogICAgICAgIFBBQ0tBR0VfTk9UX0ZPVU5ELAogICAgICAgIENBTk5P
VF9PUEVOX0RJUkVDVE9SWSwKICAgICAgICBCQURfSU5QVVRfRklMRSwKICAgICAgICBVTlJFQURB
QkxFX0lOUFVUX0ZJTEUsCiAgICAgICAgTk9OX1NUQU5EQVJEX0xJQlJBUllfVFlQRSwKICAgICAg
ICBMSUJSQVJZX01FVEhPRF9OT1RfRk9VTkQsCiAgICAgICAgQ0FOTk9UX1JFT1BFTl9GSUxFLAog
ICAgICAgIENBTk5PVF9XUklURV9GSUxFLAogICAgICAgIENPTlNUQU5UX1BPT0xfT1ZFUkZMT1cs
CiAgICAgICAgSU5URVJGQUNFU19PVkVSRkxPVywKICAgICAgICBNRVRIT0RTX09WRVJGTE9XLAog
ICAgICAgIFNUUklOR19PVkVSRkxPVywKICAgICAgICBQQVJBTUVURVJfT1ZFUkZMT1csCiAgICAg
ICAgQVJSQVlfT1ZFUkZMT1csCiAgICAgICAgRklFTERTX09WRVJGTE9XLAogICAgICAgIExPQ0FM
X1ZBUklBQkxFU19PVkVSRkxPVywKICAgICAgICBTVEFDS19PVkVSRkxPVywKICAgICAgICBDT0RF
X09WRVJGTE9XLAogICAgICAgIENBTk5PVF9DT01QVVRFX0NPTFVNTlMsCiAgICAgICAgRU1QVFlf
REVDTEFSQVRJT04sCiAgICAgICAgUkVEVU5EQU5UX0FCU1RSQUNULAogICAgICAgIFJFRFVOREFO
VF9GSU5BTCwKICAgICAgICBSRURVTkRBTlRfUFVCTElDLAogICAgICAgIFJFRFVOREFOVF9TVEFU
SUMsCiAgICAgICAgT0JTT0xFU0NFTlRfQUJTVFJBQ1QsCiAgICAgICAgT0JTT0xFU0NFTlRfQlJB
Q0tFVFMsCiAgICAgICAgTk9fVFlQRVMsCiAgICAgICAgTVVMVElQTEVfUFVCTElDX1RZUEVTLAog
ICAgICAgIFRZUEVfSU5fTVVMVElQTEVfRklMRVMsCiAgICAgICAgUEFDS0FHRV9UWVBFX0NPTkZM
SUNULAogICAgICAgIERJUkVDVE9SWV9GSUxFX0NPTkZMSUNULAogICAgICAgIEZJTEVfRklMRV9D
T05GTElDVCwKICAgICAgICBNSVNNQVRDSEVEX1RZUEVfQU5EX0ZJTEVfTkFNRVMsCiAgICAgICAg
UkVGRVJFTkNFX1RPX1RZUEVfSU5fTUlTTUFUQ0hFRF9GSUxFLAogICAgICAgIERVUExJQ0FURV9J
Tk5FUl9UWVBFX05BTUUsCiAgICAgICAgRFVQTElDQVRFX1RZUEVfREVDTEFSQVRJT04sCiAgICAg
ICAgVU5ORUNFU1NBUllfVFlQRV9JTVBPUlQsCiAgICAgICAgRFVQTElDQVRFX0FDQ0VTU19NT0RJ
RklFUiwKICAgICAgICBEVVBMSUNBVEVfTU9ESUZJRVIsCiAgICAgICAgRklOQUxfQUJTVFJBQ1Rf
Q0xBU1MsCiAgICAgICAgVk9MQVRJTEVfRklOQUwsCiAgICAgICAgRklOQUxfVk9MQVRJTEUsCiAg
ICAgICAgSU5WQUxJRF9UT1BfTEVWRUxfQ0xBU1NfTU9ESUZJRVIsCiAgICAgICAgSU5WQUxJRF9J
Tk5FUl9DTEFTU19NT0RJRklFUiwKICAgICAgICBJTlZBTElEX1NUQVRJQ19JTk5FUl9DTEFTU19N
T0RJRklFUiwKICAgICAgICBJTlZBTElEX0xPQ0FMX0NMQVNTX01PRElGSUVSLAogICAgICAgIElO
VkFMSURfSU5URVJGQUNFX01PRElGSUVSLAogICAgICAgIElOVkFMSURfRklFTERfTU9ESUZJRVIs
CiAgICAgICAgSU5WQUxJRF9MT0NBTF9NT0RJRklFUiwKICAgICAgICBJTlZBTElEX01FVEhPRF9N
T0RJRklFUiwKICAgICAgICBJTlZBTElEX1NJR05BVFVSRV9NT0RJRklFUiwKICAgICAgICBJTlZB
TElEX0NPTlNUUlVDVE9SX01PRElGSUVSLAogICAgICAgIElOVkFMSURfQ09OU1RBTlRfTU9ESUZJ
RVIsCiAgICAgICAgVU5JTklUSUFMSVpFRF9GSUVMRCwKICAgICAgICBQQVJFTlRfVFlQRV9JTl9V
Tk5BTUVEX1BBQ0tBR0UsCiAgICAgICAgUkVDT01QSUxBVElPTiwKICAgICAgICBUWVBFX05PVF9G
T1VORCwKICAgICAgICBEVVBMSUNBVEVfT05fREVNQU5EX0lNUE9SVCwKICAgICAgICBOT1RfQV9U
WVBFLAogICAgICAgIE5PVF9BX0NMQVNTLAogICAgICAgIE5PVF9BTl9JTlRFUkZBQ0UsCiAgICAg
ICAgU1VQRVJfSVNfRklOQUwsCiAgICAgICAgT0JKRUNUX1dJVEhfU1VQRVJfVFlQRSwKICAgICAg
ICBPQkpFQ1RfSEFTX05PX1NVUEVSX1RZUEUsCiAgICAgICAgRFVQTElDQVRFX0ZJRUxELAogICAg
ICAgIERVUExJQ0FURV9NRVRIT0QsCiAgICAgICAgRFVQTElDQVRFX0NPTlNUUlVDVE9SLAogICAg
ICAgIE1JU01BVENIRURfSU5IRVJJVEVEX01FVEhPRCwKICAgICAgICBNSVNNQVRDSEVEX0lOSEVS
SVRFRF9NRVRIT0RfRVhURVJOQUxMWSwKICAgICAgICBNSVNNQVRDSEVEX0lOSEVSSVRFRF9NRVRI
T0RTX0lOX0JBU0UsCiAgICAgICAgRFVQTElDQVRFX0ZPUk1BTF9QQVJBTUVURVIsCiAgICAgICAg
TUlTTUFUQ0hFRF9DT05TVFJVQ1RPUl9OQU1FLAogICAgICAgIE1FVEhPRF9XSVRIX0NPTlNUUlVD
VE9SX05BTUUsCiAgICAgICAgRFVQTElDQVRFX0xPQ0FMX1ZBUklBQkxFX0RFQ0xBUkFUSU9OLAog
ICAgICAgIERVUExJQ0FURV9MT0NBTF9UWVBFX0RFQ0xBUkFUSU9OLAogICAgICAgIE1VTFRJUExF
X0RFRkFVTFRfTEFCRUwsCiAgICAgICAgVU5ERUNMQVJFRF9MQUJFTCwKICAgICAgICBEVVBMSUNB
VEVfTEFCRUwsCiAgICAgICAgQ0FUQ0hfUFJJTUlUSVZFX1RZUEUsCiAgICAgICAgQ0FUQ0hfQVJS
QVlfVFlQRSwKICAgICAgICBBTUJJR1VPVVNfRklFTEQsCiAgICAgICAgQU1CSUdVT1VTX1RZUEUs
CiAgICAgICAgRklFTERfSVNfVFlQRSwKICAgICAgICBGSUVMRF9OT1RfRk9VTkQsCiAgICAgICAg
RklFTERfTkFNRV9NSVNTUEVMTEVELAogICAgICAgIEZJRUxEX1dJVEhfUFJJVkFURV9BQ0NFU1Nf
Tk9UX0FDQ0VTU0lCTEUsCiAgICAgICAgRklFTERfV0lUSF9ERUZBVUxUX0FDQ0VTU19OT1RfQUND
RVNTSUJMRSwKICAgICAgICBOQU1FX05PVF9GT1VORCwKICAgICAgICBNRVRIT0RfTk9UX0ZJRUxE
LAogICAgICAgIE5BTUVfTk9UX1lFVF9BVkFJTEFCTEUsCiAgICAgICAgTkFNRV9OT1RfVkFSSUFC
TEUsCiAgICAgICAgTkFNRV9OT1RfQ0xBU1NfVkFSSUFCTEUsCiAgICAgICAgTk9UX0FfTlVNRVJJ
Q19WQVJJQUJMRSwKICAgICAgICBNRVRIT0RfTk9UX0ZPVU5ELAogICAgICAgIE1FVEhPRF9OQU1F
X05PVF9GT1VORF9JTl9UWVBFLAogICAgICAgIE1FVEhPRF9OQU1FX01JU1NQRUxMRUQsCiAgICAg
ICAgTUVUSE9EX1dJVEhfUFJJVkFURV9BQ0NFU1NfTk9UX0FDQ0VTU0lCTEUsCiAgICAgICAgTUVU
SE9EX1dJVEhfREVGQVVMVF9BQ0NFU1NfTk9UX0FDQ0VTU0lCTEUsCiAgICAgICAgSElEREVOX01F
VEhPRF9JTl9FTkNMT1NJTkdfQ0xBU1MsCiAgICAgICAgRklFTERfTk9UX01FVEhPRCwKICAgICAg
ICBUWVBFX05PVF9NRVRIT0QsCiAgICAgICAgVFlQRV9OT1RfRklFTEQsCiAgICAgICAgTUVUSE9E
X05PVF9DTEFTU19NRVRIT0QsCiAgICAgICAgQU1CSUdVT1VTX0NPTlNUUlVDVE9SX0lOVk9DQVRJ
T04sCiAgICAgICAgQU1CSUdVT1VTX01FVEhPRF9JTlZPQ0FUSU9OLAogICAgICAgIENPTlNUUlVD
VE9SX05PVF9GT1VORCwKICAgICAgICBNRVRIT0RfRk9VTkRfRk9SX0NPTlNUUlVDVE9SLAogICAg
ICAgIEFCU1RSQUNUX1RZUEVfQ1JFQVRJT04sCiAgICAgICAgSU5WQUxJRF9JTlNUQU5DRU9GX0NP
TlZFUlNJT04sCiAgICAgICAgSU5WQUxJRF9DQVNUX0NPTlZFUlNJT04sCiAgICAgICAgSU5WQUxJ
RF9DQVNUX1RZUEUsCiAgICAgICAgSU5DT01QQVRJQkxFX1RZUEVfRk9SX0lOSVRJQUxJWkFUSU9O
LAogICAgICAgIElOQ09NUEFUSUJMRV9UWVBFX0ZPUl9BU1NJR05NRU5ULAogICAgICAgIElOQ09N
UEFUSUJMRV9UWVBFX0ZPUl9CSU5BUllfRVhQUkVTU0lPTiwKICAgICAgICBJTkNPTVBBVElCTEVf
VFlQRV9GT1JfQ09ORElUSU9OQUxfRVhQUkVTU0lPTiwKICAgICAgICBWT0lEX0FSUkFZLAogICAg
ICAgIFZPSURfVFlQRV9JTl9FUVVBTElUWV9FWFBSRVNTSU9OLAogICAgICAgIFRZUEVfTk9UX1RI
Uk9XQUJMRSwKICAgICAgICBUWVBFX05PVF9QUklNSVRJVkUsCiAgICAgICAgVFlQRV9OT1RfSU5U
RUdSQUwsCiAgICAgICAgVFlQRV9OT1RfTlVNRVJJQywKICAgICAgICBUWVBFX05PVF9JTlRFR0VS
LAogICAgICAgIFRZUEVfTk9UX0JPT0xFQU4sCiAgICAgICAgVFlQRV9OT1RfQVJSQVksCiAgICAg
ICAgVFlQRV9OT1RfUkVGRVJFTkNFLAogICAgICAgIFRZUEVfTk9UX1ZBTElEX0ZPUl9TV0lUQ0gs
CiAgICAgICAgVFlQRV9JU19WT0lELAogICAgICAgIFZBTFVFX05PVF9SRVBSRVNFTlRBQkxFX0lO
X1NXSVRDSF9UWVBFLAogICAgICAgIFRZUEVfTk9UX0NPTlZFUlRJQkxFX1RPX1NXSVRDSF9UWVBF
LAogICAgICAgIERVUExJQ0FURV9DQVNFX1ZBTFVFLAogICAgICAgIE1JU1BMQUNFRF9USElTX0VY
UFJFU1NJT04sCiAgICAgICAgTUlTUExBQ0VEX1NVUEVSX0VYUFJFU1NJT04sCiAgICAgICAgVEFS
R0VUX1ZBUklBQkxFX0lTX0ZJTkFMLAogICAgICAgIEZJTkFMX1ZBUklBQkxFX1RBUkdFVF9JTl9M
T09QLAogICAgICAgIFVOSU5JVElBTElaRURfRklOQUxfVkFSSUFCTEUsCiAgICAgICAgVU5JTklU
SUFMSVpFRF9TVEFUSUNfRklOQUxfVkFSSUFCTEUsCiAgICAgICAgVU5JTklUSUFMSVpFRF9GSU5B
TF9WQVJJQUJMRV9JTl9DT05TVFJVQ1RPUiwKICAgICAgICBJTklUX1NDQUxBUl9XSVRIX0FSUkFZ
LAogICAgICAgIElOSVRfQVJSQVlfV0lUSF9TQ0FMQVIsCiAgICAgICAgSU5WQUxJRF9CWVRFX1ZB
TFVFLAogICAgICAgIElOVkFMSURfU0hPUlRfVkFMVUUsCiAgICAgICAgSU5WQUxJRF9DSEFSQUNU
RVJfVkFMVUUsCiAgICAgICAgSU5WQUxJRF9JTlRfVkFMVUUsCiAgICAgICAgSU5WQUxJRF9MT05H
X1ZBTFVFLAogICAgICAgIElOVkFMSURfRkxPQVRfVkFMVUUsCiAgICAgICAgSU5WQUxJRF9ET1VC
TEVfVkFMVUUsCiAgICAgICAgSU5WQUxJRF9TVFJJTkdfVkFMVUUsCiAgICAgICAgUkVUVVJOX1NU
QVRFTUVOVF9JTl9JTklUSUFMSVpFUiwKICAgICAgICBNSVNQTEFDRURfUkVUVVJOX1dJVEhfRVhQ
UkVTU0lPTiwKICAgICAgICBNSVNQTEFDRURfUkVUVVJOX1dJVEhfTk9fRVhQUkVTU0lPTiwKICAg
ICAgICBNSVNNQVRDSEVEX1JFVFVSTl9BTkRfTUVUSE9EX1RZUEUsCiAgICAgICAgRVhQUkVTU0lP
Tl9OT1RfVEhST1dBQkxFLAogICAgICAgIEJBRF9USFJPV0FCTEVfRVhQUkVTU0lPTl9JTl9UUlks
CiAgICAgICAgQkFEX1RIUk9XQUJMRV9FWFBSRVNTSU9OX0lOX01FVEhPRCwKICAgICAgICBCQURf
VEhST1dBQkxFX0VYUFJFU1NJT04sCiAgICAgICAgTUlTUExBQ0VEX0JSRUFLX1NUQVRFTUVOVCwK
ICAgICAgICBNSVNQTEFDRURfQ09OVElOVUVfU1RBVEVNRU5ULAogICAgICAgIE1JU1BMQUNFRF9F
WFBMSUNJVF9DT05TVFJVQ1RPUl9JTlZPQ0FUSU9OLAogICAgICAgIElOVkFMSURfQ09OVElOVUVf
VEFSR0VULAogICAgICAgIE5PTl9BQlNUUkFDVF9UWVBFX0NPTlRBSU5TX0FCU1RSQUNUX01FVEhP
RCwKICAgICAgICBOT05fQUJTVFJBQ1RfVFlQRV9JTkhFUklUU19BQlNUUkFDVF9NRVRIT0QsCiAg
ICAgICAgTk9OX0FCU1RSQUNUX1RZUEVfSU5IRVJJVFNfQUJTVFJBQ1RfTUVUSE9EX0ZST01fQUJT
VFJBQ1RfQ0xBU1MsCiAgICAgICAgTk9OX0FCU1RSQUNUX1RZUEVfQ0FOTk9UX09WRVJSSURFX0RF
RkFVTFRfQUJTVFJBQ1RfTUVUSE9ELAogICAgICAgIE5PX0FCU1RSQUNUX01FVEhPRF9JTVBMRU1F
TlRBVElPTiwKICAgICAgICBEVVBMSUNBVEVfSU5URVJGQUNFLAogICAgICAgIFVOS05PV05fUVVB
TElGSUVEX05BTUVfQkFTRSwKICAgICAgICBVTktOT1dOX0FNQklHVU9VU19OQU1FLAogICAgICAg
IENJUkNVTEFSX0lOVEVSRkFDRSwKICAgICAgICBDSVJDVUxBUl9DTEFTUywKICAgICAgICBUWVBF
X05PVF9BQ0NFU1NJQkxFLAogICAgICAgIFBSSVZBVEVfRklFTERfTk9UX0FDQ0VTU0lCTEUsCiAg
ICAgICAgUFJPVEVDVEVEX0ZJRUxEX05PVF9BQ0NFU1NJQkxFLAogICAgICAgIERFRkFVTFRfRklF
TERfTk9UX0FDQ0VTU0lCTEUsCiAgICAgICAgUFJJVkFURV9NRVRIT0RfTk9UX0FDQ0VTU0lCTEUs
CiAgICAgICAgUFJPVEVDVEVEX01FVEhPRF9OT1RfQUNDRVNTSUJMRSwKICAgICAgICBERUZBVUxU
X01FVEhPRF9OT1RfQUNDRVNTSUJMRSwKICAgICAgICBQUklWQVRFX0NPTlNUUlVDVE9SX05PVF9B
Q0NFU1NJQkxFLAogICAgICAgIFBST1RFQ1RFRF9DT05TVFJVQ1RPUl9OT1RfQUNDRVNTSUJMRSwK
ICAgICAgICBERUZBVUxUX0NPTlNUUlVDVE9SX05PVF9BQ0NFU1NJQkxFLAogICAgICAgIENPTlNU
UlVDVE9SX0RPRVNfTk9UX1RIUk9XX1RISVNfRVhDRVBUSU9OLAogICAgICAgIENPTlNUUlVDVE9S
X0RPRVNfTk9UX1RIUk9XX1NVUEVSX0VYQ0VQVElPTiwKICAgICAgICBQQVJBTUVURVJfUkVERUNM
QVJFRCwKICAgICAgICBCQURfQUJTVFJBQ1RfTUVUSE9EX01PRElGSUVSLAogICAgICAgIEFCU1RS
QUNUX01FVEhPRF9NT0RJRklFUl9DT05GTElDVCwKICAgICAgICBTVFJJQ1RGUF9OQVRJVkVfTUVU
SE9ELAogICAgICAgIEFCU1RSQUNUX01FVEhPRF9JTlZPQ0FUSU9OLAogICAgICAgIEZJTkFMX01F
VEhPRF9PVkVSUklERSwKICAgICAgICBGSU5BTF9NRVRIT0RfT1ZFUlJJREVfRVhURVJOQUxMWSwK
ICAgICAgICBQUklWQVRFX01FVEhPRF9PVkVSUklERSwKICAgICAgICBQUklWQVRFX01FVEhPRF9P
VkVSUklERV9FWFRFUk5BTExZLAogICAgICAgIElOU1RBTkNFX01FVEhPRF9PVkVSUklERSwKICAg
ICAgICBJTlNUQU5DRV9NRVRIT0RfT1ZFUlJJREVfRVhURVJOQUxMWSwKICAgICAgICBDTEFTU19N
RVRIT0RfT1ZFUlJJREUsCiAgICAgICAgQ0xBU1NfTUVUSE9EX09WRVJSSURFX0VYVEVSTkFMTFks
CiAgICAgICAgTUlTTUFUQ0hFRF9PVkVSUklEREVOX0VYQ0VQVElPTiwKICAgICAgICBNSVNNQVRD
SEVEX09WRVJSSURERU5fRVhDRVBUSU9OX0VYVEVSTkFMTFksCiAgICAgICAgQUJTVFJBQ1RfTUVU
SE9EX1dJVEhfQk9EWSwKICAgICAgICBOT05fQUJTVFJBQ1RfTUVUSE9EX1dJVEhPVVRfQk9EWSwK
ICAgICAgICBCQURfQUNDRVNTX01FVEhPRF9PVkVSUklERSwKICAgICAgICBCQURfQUNDRVNTX01F
VEhPRF9PVkVSUklERV9FWFRFUk5BTExZLAogICAgICAgIFNUQVRJQ19PVkVSUklERV9BQlNUUkFD
VCwKICAgICAgICBTVEFUSUNfT1ZFUlJJREVfQUJTVFJBQ1RfRVhURVJOQUxMWSwKICAgICAgICBD
SVJDVUxBUl9USElTX0NBTEwsCiAgICAgICAgSU5TVEFOQ0VfVkFSSUFCTEVfSU5fRVhQTElDSVRf
Q09OU1RSVUNUT1JfSU5WT0NBVElPTiwKICAgICAgICBJTlNUQU5DRV9NRVRIT0RfSU5fRVhQTElD
SVRfQ09OU1RSVUNUT1JfSU5WT0NBVElPTiwKICAgICAgICBTWU5USEVUSUNfVkFSSUFCTEVfQUND
RVNTLAogICAgICAgIFNZTlRIRVRJQ19NRVRIT0RfSU5WT0NBVElPTiwKICAgICAgICBTWU5USEVU
SUNfQ09OU1RSVUNUT1JfSU5WT0NBVElPTiwKICAgICAgICBUSElTX0lOX0VYUExJQ0lUX0NPTlNU
UlVDVE9SX0lOVk9DQVRJT04sCiAgICAgICAgU1VQRVJfSU5fRVhQTElDSVRfQ09OU1RSVUNUT1Jf
SU5WT0NBVElPTiwKICAgICAgICBJTk5FUl9DT05TVFJVQ1RPUl9JTl9FWFBMSUNJVF9DT05TVFJV
Q1RPUl9JTlZPQ0FUSU9OLAogICAgICAgIEVYUFJFU1NJT05fTk9UX0NPTlNUQU5ULAogICAgICAg
IFVOQ0FUQ0hBQkxFX01FVEhPRF9USFJPV05fQ0hFQ0tFRF9FWENFUFRJT04sCiAgICAgICAgVU5D
QVRDSEFCTEVfQ09OU1RSVUNUT1JfVEhST1dOX0NIRUNLRURfRVhDRVBUSU9OLAogICAgICAgIFVO
UkVBQ0hBQkxFX0NBVENIX0NMQVVTRSwKICAgICAgICBVTlJFQUNIQUJMRV9ERUZBVUxUX0NBVENI
X0NMQVVTRSwKICAgICAgICBVTlJFQUNIQUJMRV9TVEFURU1FTlQsCiAgICAgICAgVU5SRUFDSEFC
TEVfU1RBVEVNRU5UUywKICAgICAgICBVTlJFQUNIQUJMRV9DT05TVFJVQ1RPUl9CT0RZLAogICAg
ICAgIEJMT0NLRURfQ0FUQ0hfQ0xBVVNFLAogICAgICAgIFZBUklBQkxFX05PVF9ERUZJTklURUxZ
X0FTU0lHTkVELAogICAgICAgIFRZUEVEX01FVEhPRF9XSVRIX05PX1JFVFVSTiwKCiAgICAgICAg
REVGQVVMVF9NRVRIT0RfTk9UX09WRVJSSURERU4sCgogICAgICAgIE9ORV9VTk5BTUVEX1BBQ0tB
R0UsCiAgICAgICAgVFlQRV9OT1RfSU5fVU5OQU1FRF9QQUNLQUdFLAogICAgICAgIFRZUEVfSU5f
V1JPTkdfUEFDS0FHRSwKICAgICAgICBUWVBFX05BTUVfTUlTTUFUQ0gsCgogICAgICAgIERFUFJF
Q0FURURfVFlQRSwKICAgICAgICBERVBSRUNBVEVEX0ZJRUxELAogICAgICAgIERFUFJFQ0FURURf
TUVUSE9ELAogICAgICAgIERFUFJFQ0FURURfQ09OU1RSVUNUT1IsCgogICAgICAgIENPTVBSRVNT
RURfWklQX0ZJTEUsCiAgICAgICAgSU5WQUxJRF9DTEFTU19GSUxFLAogICAgICAgIENBTk5PVF9P
UEVOX0NMQVNTX0ZJTEUsCgogICAgICAgIElOVEVSRkFDRV9OT1RfSU5ORVJfQ0xBU1MsCiAgICAg
ICAgU1RBVElDX05PVF9JTk5FUl9DTEFTUywKICAgICAgICBUWVBFX05PVF9JTk5FUl9DTEFTUywK
ICAgICAgICBTVVBFUl9UWVBFX05PVF9JTk5FUl9DTEFTUywKICAgICAgICBTVEFUSUNfRklFTERf
SU5fSU5ORVJfQ0xBU1NfTk9UX0ZJTkFMLAogICAgICAgIFNUQVRJQ19GSUVMRF9JTl9JTk5FUl9D
TEFTU19OT1RfQ09OU1RBTlQsCiAgICAgICAgU1RBVElDX01FVEhPRF9JTl9JTk5FUl9DTEFTUywK
ICAgICAgICBTVEFUSUNfVFlQRV9JTl9JTk5FUl9DTEFTUywKICAgICAgICBTVEFUSUNfSU5JVElB
TElaRVJfSU5fSU5ORVJfQ0xBU1MsCiAgICAgICAgSU5ORVJfQ0xBU1NfUkVGRVJFTkNFX1RPX05P
Tl9GSU5BTF9MT0NBTF9WQVJJQUJMRSwKICAgICAgICBTVEFUSUNfUFJPVEVDVEVEX0ZJRUxEX0FD
Q0VTUywKICAgICAgICBTVEFUSUNfUFJPVEVDVEVEX01FVEhPRF9BQ0NFU1MsCiAgICAgICAgSU5I
RVJJVEFOQ0VfQU5EX0xFWElDQUxfU0NPUElOR19DT05GTElDVF9XSVRIX0xPQ0FMLAogICAgICAg
IElOSEVSSVRBTkNFX0FORF9MRVhJQ0FMX1NDT1BJTkdfQ09ORkxJQ1RfV0lUSF9NRU1CRVIsCiAg
ICAgICAgSUxMRUdBTF9USElTX0ZJRUxEX0FDQ0VTUywKICAgICAgICBDT05TVFJVQ1RPUl9GT1VO
RF9JTl9BTk9OWU1PVVNfQ0xBU1MsCiAgICAgICAgRU5DTE9TSU5HX0lOU1RBTkNFX0FDQ0VTU19G
Uk9NX0NPTlNUUlVDVE9SX0lOVk9DQVRJT04sCiAgICAgICAgRU5DTE9TSU5HX0lOU1RBTkNFX0FD
Q0VTU19BQ1JPU1NfU1RBVElDX1JFR0lPTiwKICAgICAgICBFTkNMT1NJTkdfSU5TVEFOQ0VfTk9U
X0FDQ0VTU0lCTEUsCiAgICAgICAgSU5WQUxJRF9FTkNMT1NJTkdfSU5TVEFOQ0UsCgogICAgICAg
IFpFUk9fRElWSURFX0VSUk9SLAogICAgICAgIFpFUk9fRElWSURFX0NBVVRJT04sCiAgICAgICAg
Vk9JRF9UT19TVFJJTkcsCgogICAgICAgIF9udW1fa2luZHMKICAgIH07CgogICAgc3RhdGljIHZv
aWQgU3RhdGljSW5pdGlhbGl6ZXIoKTsKCiAgICB2b2lkIFJlcG9ydChTZW1hbnRpY0Vycm9yS2lu
ZCwKICAgICAgICAgICAgICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCwKICAgICAgICAgICAgICAg
IExleFN0cmVhbTo6VG9rZW5JbmRleCwKICAgICAgICAgICAgICAgIHdjaGFyX3QgKiA9IF9fbnVs
bCAsCiAgICAgICAgICAgICAgICB3Y2hhcl90ICogPSBfX251bGwgLAogICAgICAgICAgICAgICAg
d2NoYXJfdCAqID0gX19udWxsICwKICAgICAgICAgICAgICAgIHdjaGFyX3QgKiA9IF9fbnVsbCAs
CiAgICAgICAgICAgICAgICB3Y2hhcl90ICogPSBfX251bGwgLAogICAgICAgICAgICAgICAgd2No
YXJfdCAqID0gX19udWxsICwKICAgICAgICAgICAgICAgIHdjaGFyX3QgKiA9IF9fbnVsbCAsCiAg
ICAgICAgICAgICAgICB3Y2hhcl90ICogPSBfX251bGwgLAogICAgICAgICAgICAgICAgd2NoYXJf
dCAqID0gX19udWxsICk7CgogICAgU2VtYW50aWNFcnJvcihDb250cm9sICYsIEZpbGVTeW1ib2wg
Kik7CiAgICB+U2VtYW50aWNFcnJvcigpCiAgICB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBidWZmZXIuTGVuZ3RoKCk7IGkrKykKICAgICAgICAgICAgZGVsZXRlIFtdIGJ1ZmZlcltpXTsK
ICAgIH0KCiAgICBpbnQgbnVtX2Vycm9ycywKICAgICAgICBudW1fd2FybmluZ3M7CgogICAgdm9p
ZCBFbnRlcmluZ0Nsb25lKCkgeyBjbG9uZV9jb3VudCsrOyB9CiAgICB2b2lkIEV4aXRpbmdDbG9u
ZSgpICB7IGNsb25lX2NvdW50LS07IH0KCiAgICBpbnQgUHJpbnRNZXNzYWdlcygpOwoKcHJpdmF0
ZToKICAgIGZyaWVuZCBjbGFzcyBTZW1hbnRpYzsKCiAgICB2b2lkIHJlcG9ydEVycm9yKGludCBr
KTsKCiAgICBDb250cm9sICZjb250cm9sOwogICAgTGV4U3RyZWFtICpsZXhfc3RyZWFtOwoKICAg
IGludCBjbG9uZV9jb3VudDsKCiAgICBUdXBsZTx3Y2hhcl90ICo+IGJ1ZmZlcjsKICAgIFR1cGxl
PEVycm9ySW5mbz4gZXJyb3I7CgogICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgd2FybmluZ1tdOwog
ICAgc3RhdGljIHdjaGFyX3QgKigqcHJpbnRfbWVzc2FnZVtfbnVtX2tpbmRzXSkoRXJyb3JJbmZv
ICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwoKICAgIHN0YXRpYyBib29sIE5vdERvdCh3Y2hh
cl90ICpzdHIpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gc3RyID8KICAgICAgICAgICAg
ICAgICghICh3Y3NsZW4oc3RyKSA9PSAwIHx8IHdjc2NtcChzdHIsIFN0cmluZ0NvbnN0YW50OjpV
U19fRE8pID09IDApKSA6CiAgICAgICAgICAgICAgICBmYWxzZTsKICAgICAgICB9CgogICAgc3Rh
dGljIHdjaGFyX3QgKlByaW50QkFEX0VSUk9SKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29u
dHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludERFRkFVTFRfRVJST1IoRXJyb3JJbmZv
ICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50SU5W
QUxJRF9PUFRJT04oRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3Rh
dGljIHdjaGFyX3QgKlByaW50SU5WQUxJRF9LX09QVElPTihFcnJvckluZm8gJiwgTGV4U3RyZWFt
ICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRJTlZBTElEX0tfVEFSR0VU
KEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90
ICpQcmludElOVkFMSURfVEFCX1ZBTFVFKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJv
bCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludElOVkFMSURfRElSRUNUT1JZKEVycm9ySW5m
byAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludFVO
U1VQUE9SVEVEX0VOQ09ESU5HKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsK
ICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludFVOU1VQUE9SVEVEX09QVElPTihFcnJvckluZm8gJiwg
TGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRESVNBQkxF
RF9PUFRJT04oRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGlj
IHdjaGFyX3QgKlByaW50Tk9fQ1VSUkVOVF9ESVJFQ1RPUlkoRXJyb3JJbmZvICYsIExleFN0cmVh
bSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50Q0FOTk9UX09QRU5fWklQ
X0ZJTEUoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdj
aGFyX3QgKlByaW50Q0FOTk9UX09QRU5fUEFUSF9ESVJFQ1RPUlkoRXJyb3JJbmZvICYsIExleFN0
cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50UEFDS0FHRV9OT1Rf
Rk9VTkQoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdj
aGFyX3QgKlByaW50Q0FOTk9UX09QRU5fRElSRUNUT1JZKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0g
KiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludEJBRF9JTlBVVF9GSUxFKEVy
cm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQ
cmludFVOUkVBREFCTEVfSU5QVVRfRklMRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRy
b2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnROT05fU1RBTkRBUkRfTElCUkFSWV9UWVBF
KEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90
ICpQcmludExJQlJBUllfTUVUSE9EX05PVF9GT1VORChFcnJvckluZm8gJiwgTGV4U3RyZWFtICos
IENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRDQU5OT1RfUkVPUEVOX0ZJTEUo
RXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3Qg
KlByaW50Q0FOTk9UX1dSSVRFX0ZJTEUoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9s
ICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50Q09OU1RBTlRfUE9PTF9PVkVSRkxPVyhFcnJv
ckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJp
bnRJTlRFUkZBQ0VTX09WRVJGTE9XKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAm
KTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludE1FVEhPRFNfT1ZFUkZMT1coRXJyb3JJbmZvICYs
IExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50U1RSSU5H
X09WRVJGTE9XKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRp
YyB3Y2hhcl90ICpQcmludFBBUkFNRVRFUl9PVkVSRkxPVyhFcnJvckluZm8gJiwgTGV4U3RyZWFt
ICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRBUlJBWV9PVkVSRkxPVyhF
cnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAq
UHJpbnRGSUVMRFNfT1ZFUkZMT1coRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYp
OwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50TE9DQUxfVkFSSUFCTEVTX09WRVJGTE9XKEVycm9y
SW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmlu
dFNUQUNLX09WRVJGTE9XKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAg
IHN0YXRpYyB3Y2hhcl90ICpQcmludENPREVfT1ZFUkZMT1coRXJyb3JJbmZvICYsIExleFN0cmVh
bSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50Q0FOTk9UX0NPTVBVVEVf
Q09MVU1OUyhFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMg
d2NoYXJfdCAqUHJpbnRFTVBUWV9ERUNMQVJBVElPTihFcnJvckluZm8gJiwgTGV4U3RyZWFtICos
IENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRSRURVTkRBTlRfQUJTVFJBQ1Qo
RXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3Qg
KlByaW50UkVEVU5EQU5UX0ZJTkFMKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAm
KTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludFJFRFVOREFOVF9QVUJMSUMoRXJyb3JJbmZvICYs
IExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50UkVEVU5E
QU5UX1NUQVRJQyhFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0
aWMgd2NoYXJfdCAqUHJpbnRPQlNPTEVTQ0VOVF9BQlNUUkFDVChFcnJvckluZm8gJiwgTGV4U3Ry
ZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRPQlNPTEVTQ0VOVF9C
UkFDS0VUUyhFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMg
d2NoYXJfdCAqUHJpbnROT19UWVBFUyhFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wg
Jik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRNVUxUSVBMRV9QVUJMSUNfVFlQRVMoRXJyb3JJ
bmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50
VFlQRV9JTl9NVUxUSVBMRV9GSUxFUyhFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wg
Jik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRQQUNLQUdFX1RZUEVfQ09ORkxJQ1QoRXJyb3JJ
bmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50
RElSRUNUT1JZX0ZJTEVfQ09ORkxJQ1QoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9s
ICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50RklMRV9GSUxFX0NPTkZMSUNUKEVycm9ySW5m
byAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludE1J
U01BVENIRURfVFlQRV9BTkRfRklMRV9OQU1FUyhFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENv
bnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRSRUZFUkVOQ0VfVE9fVFlQRV9JTl9N
SVNNQVRDSEVEX0ZJTEUoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAg
c3RhdGljIHdjaGFyX3QgKlByaW50RFVQTElDQVRFX0lOTkVSX1RZUEVfTkFNRShFcnJvckluZm8g
JiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnREVVBM
SUNBVEVfVFlQRV9ERUNMQVJBVElPTihFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wg
Jik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRVTk5FQ0VTU0FSWV9UWVBFX0lNUE9SVChFcnJv
ckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJp
bnREVVBMSUNBVEVfQUNDRVNTX01PRElGSUVSKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29u
dHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludERVUExJQ0FURV9NT0RJRklFUihFcnJv
ckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJp
bnRGSU5BTF9BQlNUUkFDVF9DTEFTUyhFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wg
Jik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRWT0xBVElMRV9GSU5BTChFcnJvckluZm8gJiwg
TGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRGSU5BTF9W
T0xBVElMRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMg
d2NoYXJfdCAqUHJpbnRJTlZBTElEX1RPUF9MRVZFTF9DTEFTU19NT0RJRklFUihFcnJvckluZm8g
JiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRJTlZB
TElEX0lOTkVSX0NMQVNTX01PRElGSUVSKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJv
bCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludElOVkFMSURfU1RBVElDX0lOTkVSX0NMQVNT
X01PRElGSUVSKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRp
YyB3Y2hhcl90ICpQcmludElOVkFMSURfTE9DQUxfQ0xBU1NfTU9ESUZJRVIoRXJyb3JJbmZvICYs
IExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50SU5WQUxJ
RF9JTlRFUkZBQ0VfTU9ESUZJRVIoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYp
OwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50SU5WQUxJRF9GSUVMRF9NT0RJRklFUihFcnJvcklu
Zm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRJ
TlZBTElEX0xPQ0FMX01PRElGSUVSKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAm
KTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludElOVkFMSURfTUVUSE9EX01PRElGSUVSKEVycm9y
SW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmlu
dElOVkFMSURfU0lHTkFUVVJFX01PRElGSUVSKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29u
dHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludElOVkFMSURfQ09OU1RSVUNUT1JfTU9E
SUZJRVIoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdj
aGFyX3QgKlByaW50SU5WQUxJRF9DT05TVEFOVF9NT0RJRklFUihFcnJvckluZm8gJiwgTGV4U3Ry
ZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRVTklOSVRJQUxJWkVE
X0ZJRUxEKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3
Y2hhcl90ICpQcmludFBBUkVOVF9UWVBFX0lOX1VOTkFNRURfUEFDS0FHRShFcnJvckluZm8gJiwg
TGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRSRUNPTVBJ
TEFUSU9OKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3
Y2hhcl90ICpQcmludFRZUEVfTk9UX0ZPVU5EKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29u
dHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludERVUExJQ0FURV9PTl9ERU1BTkRfSU1Q
T1JUKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hh
cl90ICpQcmludE5PVF9BX1RZUEUoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYp
OwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50Tk9UX0FfQ0xBU1MoRXJyb3JJbmZvICYsIExleFN0
cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50Tk9UX0FOX0lOVEVS
RkFDRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2No
YXJfdCAqUHJpbnRTVVBFUl9JU19GSU5BTChFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRy
b2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRPQkpFQ1RfV0lUSF9TVVBFUl9UWVBFKEVy
cm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQ
cmludE9CSkVDVF9IQVNfTk9fU1VQRVJfVFlQRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENv
bnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnREVVBMSUNBVEVfRklFTEQoRXJyb3JJ
bmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50
RFVQTElDQVRFX01FVEhPRChFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAg
ICBzdGF0aWMgd2NoYXJfdCAqUHJpbnREVVBMSUNBVEVfQ09OU1RSVUNUT1IoRXJyb3JJbmZvICYs
IExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50TUlTTUFU
Q0hFRF9JTkhFUklURURfTUVUSE9EKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAm
KTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludE1JU01BVENIRURfSU5IRVJJVEVEX01FVEhPRF9F
WFRFUk5BTExZKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRp
YyB3Y2hhcl90ICpQcmludE1JU01BVENIRURfSU5IRVJJVEVEX01FVEhPRFNfSU5fQkFTRShFcnJv
ckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJp
bnREVVBMSUNBVEVfRk9STUFMX1BBUkFNRVRFUihFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENv
bnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRNSVNNQVRDSEVEX0NPTlNUUlVDVE9S
X05BTUUoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdj
aGFyX3QgKlByaW50TUVUSE9EX1dJVEhfQ09OU1RSVUNUT1JfTkFNRShFcnJvckluZm8gJiwgTGV4
U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnREVVBMSUNBVEVf
TE9DQUxfVkFSSUFCTEVfREVDTEFSQVRJT04oRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250
cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50RFVQTElDQVRFX0xPQ0FMX1RZUEVfREVD
TEFSQVRJT04oRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGlj
IHdjaGFyX3QgKlByaW50TVVMVElQTEVfREVGQVVMVF9MQUJFTChFcnJvckluZm8gJiwgTGV4U3Ry
ZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRVTkRFQ0xBUkVEX0xB
QkVMKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hh
cl90ICpQcmludERVUExJQ0FURV9MQUJFTChFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRy
b2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRDQVRDSF9QUklNSVRJVkVfVFlQRShFcnJv
ckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJp
bnRDQVRDSF9BUlJBWV9UWVBFKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsK
ICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludEFNQklHVU9VU19GSUVMRChFcnJvckluZm8gJiwgTGV4
U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRBTUJJR1VPVVNf
VFlQRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2No
YXJfdCAqUHJpbnRGSUVMRF9JU19UWVBFKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJv
bCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludEZJRUxEX05PVF9GT1VORChFcnJvckluZm8g
JiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRGSUVM
RF9OQU1FX01JU1NQRUxMRUQoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwog
ICAgc3RhdGljIHdjaGFyX3QgKlByaW50RklFTERfV0lUSF9QUklWQVRFX0FDQ0VTU19OT1RfQUND
RVNTSUJMRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMg
d2NoYXJfdCAqUHJpbnRGSUVMRF9XSVRIX0RFRkFVTFRfQUNDRVNTX05PVF9BQ0NFU1NJQkxFKEVy
cm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQ
cmludE5BTUVfTk9UX0ZPVU5EKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsK
ICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludE1FVEhPRF9OT1RfRklFTEQoRXJyb3JJbmZvICYsIExl
eFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50TkFNRV9OT1Rf
WUVUX0FWQUlMQUJMRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBz
dGF0aWMgd2NoYXJfdCAqUHJpbnROQU1FX05PVF9WQVJJQUJMRShFcnJvckluZm8gJiwgTGV4U3Ry
ZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnROQU1FX05PVF9DTEFT
U19WQVJJQUJMRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0
aWMgd2NoYXJfdCAqUHJpbnROT1RfQV9OVU1FUklDX1ZBUklBQkxFKEVycm9ySW5mbyAmLCBMZXhT
dHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludE1FVEhPRF9OT1Rf
Rk9VTkQoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdj
aGFyX3QgKlByaW50TUVUSE9EX05BTUVfTk9UX0ZPVU5EX0lOX1RZUEUoRXJyb3JJbmZvICYsIExl
eFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50TUVUSE9EX05B
TUVfTUlTU1BFTExFRChFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBz
dGF0aWMgd2NoYXJfdCAqUHJpbnRNRVRIT0RfV0lUSF9QUklWQVRFX0FDQ0VTU19OT1RfQUNDRVNT
SUJMRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2No
YXJfdCAqUHJpbnRNRVRIT0RfV0lUSF9ERUZBVUxUX0FDQ0VTU19OT1RfQUNDRVNTSUJMRShFcnJv
ckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJp
bnRISURERU5fTUVUSE9EX0lOX0VOQ0xPU0lOR19DTEFTUyhFcnJvckluZm8gJiwgTGV4U3RyZWFt
ICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRGSUVMRF9OT1RfTUVUSE9E
KEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90
ICpQcmludFRZUEVfTk9UX01FVEhPRChFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wg
Jik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRUWVBFX05PVF9GSUVMRChFcnJvckluZm8gJiwg
TGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRNRVRIT0Rf
Tk9UX0NMQVNTX01FVEhPRChFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAg
ICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRBTUJJR1VPVVNfQ09OU1RSVUNUT1JfSU5WT0NBVElPTihF
cnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAq
UHJpbnRBTUJJR1VPVVNfTUVUSE9EX0lOVk9DQVRJT04oRXJyb3JJbmZvICYsIExleFN0cmVhbSAq
LCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50Q09OU1RSVUNUT1JfTk9UX0ZP
VU5EKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hh
cl90ICpQcmludE1FVEhPRF9GT1VORF9GT1JfQ09OU1RSVUNUT1IoRXJyb3JJbmZvICYsIExleFN0
cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50QUJTVFJBQ1RfVFlQ
RV9DUkVBVElPTihFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0
aWMgd2NoYXJfdCAqUHJpbnRJTlZBTElEX0lOU1RBTkNFT0ZfQ09OVkVSU0lPTihFcnJvckluZm8g
JiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRJTlZB
TElEX0NBU1RfQ09OVkVSU0lPTihFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7
CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRJTlZBTElEX0NBU1RfVFlQRShFcnJvckluZm8gJiwg
TGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRJTkNPTVBB
VElCTEVfVFlQRV9GT1JfSU5JVElBTElaQVRJT04oRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBD
b250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50SU5DT01QQVRJQkxFX1RZUEVfRk9S
X0FTU0lHTk1FTlQoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3Rh
dGljIHdjaGFyX3QgKlByaW50SU5DT01QQVRJQkxFX1RZUEVfRk9SX0JJTkFSWV9FWFBSRVNTSU9O
KEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90
ICpQcmludElOQ09NUEFUSUJMRV9UWVBFX0ZPUl9DT05ESVRJT05BTF9FWFBSRVNTSU9OKEVycm9y
SW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmlu
dFZPSURfQVJSQVkoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3Rh
dGljIHdjaGFyX3QgKlByaW50Vk9JRF9UWVBFX0lOX0VRVUFMSVRZX0VYUFJFU1NJT04oRXJyb3JJ
bmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50
VFlQRV9OT1RfVEhST1dBQkxFKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsK
ICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludFRZUEVfTk9UX1BSSU1JVElWRShFcnJvckluZm8gJiwg
TGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRUWVBFX05P
VF9JTlRFR1JBTChFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0
aWMgd2NoYXJfdCAqUHJpbnRUWVBFX05PVF9OVU1FUklDKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0g
KiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludFRZUEVfTk9UX0lOVEVHRVIo
RXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3Qg
KlByaW50VFlQRV9OT1RfQk9PTEVBTihFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wg
Jik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRUWVBFX05PVF9BUlJBWShFcnJvckluZm8gJiwg
TGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRUWVBFX05P
VF9SRUZFUkVOQ0UoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3Rh
dGljIHdjaGFyX3QgKlByaW50VFlQRV9OT1RfVkFMSURfRk9SX1NXSVRDSChFcnJvckluZm8gJiwg
TGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRUWVBFX0lT
X1ZPSUQoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdj
aGFyX3QgKlByaW50VkFMVUVfTk9UX1JFUFJFU0VOVEFCTEVfSU5fU1dJVENIX1RZUEUoRXJyb3JJ
bmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50
VFlQRV9OT1RfQ09OVkVSVElCTEVfVE9fU1dJVENIX1RZUEUoRXJyb3JJbmZvICYsIExleFN0cmVh
bSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50RFVQTElDQVRFX0NBU0Vf
VkFMVUUoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdj
aGFyX3QgKlByaW50TUlTUExBQ0VEX1RISVNfRVhQUkVTU0lPTihFcnJvckluZm8gJiwgTGV4U3Ry
ZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRNSVNQTEFDRURfU1VQ
RVJfRVhQUkVTU0lPTihFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBz
dGF0aWMgd2NoYXJfdCAqUHJpbnRUQVJHRVRfVkFSSUFCTEVfSVNfRklOQUwoRXJyb3JJbmZvICYs
IExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50RklOQUxf
VkFSSUFCTEVfVEFSR0VUX0lOX0xPT1AoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9s
ICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50VU5JTklUSUFMSVpFRF9GSU5BTF9WQVJJQUJM
RShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJf
dCAqUHJpbnRVTklOSVRJQUxJWkVEX1NUQVRJQ19GSU5BTF9WQVJJQUJMRShFcnJvckluZm8gJiwg
TGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRVTklOSVRJ
QUxJWkVEX0ZJTkFMX1ZBUklBQkxFX0lOX0NPTlNUUlVDVE9SKEVycm9ySW5mbyAmLCBMZXhTdHJl
YW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludElOSVRfU0NBTEFSX1dJ
VEhfQVJSQVkoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGlj
IHdjaGFyX3QgKlByaW50SU5JVF9BUlJBWV9XSVRIX1NDQUxBUihFcnJvckluZm8gJiwgTGV4U3Ry
ZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRJTlZBTElEX0JZVEVf
VkFMVUUoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdj
aGFyX3QgKlByaW50SU5WQUxJRF9TSE9SVF9WQUxVRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICos
IENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRJTlZBTElEX0NIQVJBQ1RFUl9W
QUxVRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2No
YXJfdCAqUHJpbnRJTlZBTElEX0lOVF9WQUxVRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENv
bnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRJTlZBTElEX0xPTkdfVkFMVUUoRXJy
b3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlBy
aW50SU5WQUxJRF9GTE9BVF9WQUxVRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wg
Jik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRJTlZBTElEX0RPVUJMRV9WQUxVRShFcnJvcklu
Zm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRJ
TlZBTElEX1NUUklOR19WQUxVRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7
CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRSRVRVUk5fU1RBVEVNRU5UX0lOX0lOSVRJQUxJWkVS
KEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90
ICpQcmludE1JU1BMQUNFRF9SRVRVUk5fV0lUSF9FWFBSRVNTSU9OKEVycm9ySW5mbyAmLCBMZXhT
dHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludE1JU1BMQUNFRF9S
RVRVUk5fV0lUSF9OT19FWFBSRVNTSU9OKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJv
bCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludE1JU01BVENIRURfUkVUVVJOX0FORF9NRVRI
T0RfVFlQRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMg
d2NoYXJfdCAqUHJpbnRFWFBSRVNTSU9OX05PVF9USFJPV0FCTEUoRXJyb3JJbmZvICYsIExleFN0
cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50QkFEX1RIUk9XQUJM
RV9FWFBSRVNTSU9OX0lOX1RSWShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7
CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRCQURfVEhST1dBQkxFX0VYUFJFU1NJT05fSU5fTUVU
SE9EKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hh
cl90ICpQcmludEJBRF9USFJPV0FCTEVfRVhQUkVTU0lPTihFcnJvckluZm8gJiwgTGV4U3RyZWFt
ICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRNSVNQTEFDRURfQlJFQUtf
U1RBVEVNRU5UKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRp
YyB3Y2hhcl90ICpQcmludE1JU1BMQUNFRF9DT05USU5VRV9TVEFURU1FTlQoRXJyb3JJbmZvICYs
IExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50TUlTUExB
Q0VEX0VYUExJQ0lUX0NPTlNUUlVDVE9SX0lOVk9DQVRJT04oRXJyb3JJbmZvICYsIExleFN0cmVh
bSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50SU5WQUxJRF9DT05USU5V
RV9UQVJHRVQoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGlj
IHdjaGFyX3QgKlByaW50Tk9OX0FCU1RSQUNUX1RZUEVfQ09OVEFJTlNfQUJTVFJBQ1RfTUVUSE9E
KEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90
ICpQcmludE5PTl9BQlNUUkFDVF9UWVBFX0lOSEVSSVRTX0FCU1RSQUNUX01FVEhPRChFcnJvcklu
Zm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRO
T05fQUJTVFJBQ1RfVFlQRV9JTkhFUklUU19BQlNUUkFDVF9NRVRIT0RfRlJPTV9BQlNUUkFDVF9D
TEFTUyhFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2No
YXJfdCAqUHJpbnROT05fQUJTVFJBQ1RfVFlQRV9DQU5OT1RfT1ZFUlJJREVfREVGQVVMVF9BQlNU
UkFDVF9NRVRIT0QoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3Rh
dGljIHdjaGFyX3QgKlByaW50Tk9fQUJTVFJBQ1RfTUVUSE9EX0lNUExFTUVOVEFUSU9OKEVycm9y
SW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmlu
dERVUExJQ0FURV9JTlRFUkZBQ0UoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYp
OwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50VU5LTk9XTl9RVUFMSUZJRURfTkFNRV9CQVNFKEVy
cm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQ
cmludFVOS05PV05fQU1CSUdVT1VTX05BTUUoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250
cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50Q0lSQ1VMQVJfSU5URVJGQUNFKEVycm9y
SW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmlu
dENJUkNVTEFSX0NMQVNTKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAg
IHN0YXRpYyB3Y2hhcl90ICpQcmludFRZUEVfTk9UX0FDQ0VTU0lCTEUoRXJyb3JJbmZvICYsIExl
eFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50UFJJVkFURV9G
SUVMRF9OT1RfQUNDRVNTSUJMRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7
CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRQUk9URUNURURfRklFTERfTk9UX0FDQ0VTU0lCTEUo
RXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3Qg
KlByaW50REVGQVVMVF9GSUVMRF9OT1RfQUNDRVNTSUJMRShFcnJvckluZm8gJiwgTGV4U3RyZWFt
ICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRQUklWQVRFX01FVEhPRF9O
T1RfQUNDRVNTSUJMRShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBz
dGF0aWMgd2NoYXJfdCAqUHJpbnRQUk9URUNURURfTUVUSE9EX05PVF9BQ0NFU1NJQkxFKEVycm9y
SW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmlu
dERFRkFVTFRfTUVUSE9EX05PVF9BQ0NFU1NJQkxFKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwg
Q29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludFBSSVZBVEVfQ09OU1RSVUNUT1Jf
Tk9UX0FDQ0VTU0lCTEUoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAg
c3RhdGljIHdjaGFyX3QgKlByaW50UFJPVEVDVEVEX0NPTlNUUlVDVE9SX05PVF9BQ0NFU1NJQkxF
KEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90
ICpQcmludERFRkFVTFRfQ09OU1RSVUNUT1JfTk9UX0FDQ0VTU0lCTEUoRXJyb3JJbmZvICYsIExl
eFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50Q09OU1RSVUNU
T1JfRE9FU19OT1RfVEhST1dfVEhJU19FWENFUFRJT04oRXJyb3JJbmZvICYsIExleFN0cmVhbSAq
LCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50Q09OU1RSVUNUT1JfRE9FU19O
T1RfVEhST1dfU1VQRVJfRVhDRVBUSU9OKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJv
bCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludFBBUkFNRVRFUl9SRURFQ0xBUkVEKEVycm9y
SW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmlu
dEJBRF9BQlNUUkFDVF9NRVRIT0RfTU9ESUZJRVIoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBD
b250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50QUJTVFJBQ1RfTUVUSE9EX01PRElG
SUVSX0NPTkZMSUNUKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0
YXRpYyB3Y2hhcl90ICpQcmludFNUUklDVEZQX05BVElWRV9NRVRIT0QoRXJyb3JJbmZvICYsIExl
eFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50QUJTVFJBQ1Rf
TUVUSE9EX0lOVk9DQVRJT04oRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwog
ICAgc3RhdGljIHdjaGFyX3QgKlByaW50RklOQUxfTUVUSE9EX09WRVJSSURFKEVycm9ySW5mbyAm
LCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludEZJTkFM
X01FVEhPRF9PVkVSUklERV9FWFRFUk5BTExZKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29u
dHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludFBSSVZBVEVfTUVUSE9EX09WRVJSSURF
KEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90
ICpQcmludFBSSVZBVEVfTUVUSE9EX09WRVJSSURFX0VYVEVSTkFMTFkoRXJyb3JJbmZvICYsIExl
eFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50SU5TVEFOQ0Vf
TUVUSE9EX09WRVJSSURFKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAg
IHN0YXRpYyB3Y2hhcl90ICpQcmludElOU1RBTkNFX01FVEhPRF9PVkVSUklERV9FWFRFUk5BTExZ
KEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90
ICpQcmludENMQVNTX01FVEhPRF9PVkVSUklERShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENv
bnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRDTEFTU19NRVRIT0RfT1ZFUlJJREVf
RVhURVJOQUxMWShFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0
aWMgd2NoYXJfdCAqUHJpbnRNSVNNQVRDSEVEX09WRVJSSURERU5fRVhDRVBUSU9OKEVycm9ySW5m
byAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludE1J
U01BVENIRURfT1ZFUlJJRERFTl9FWENFUFRJT05fRVhURVJOQUxMWShFcnJvckluZm8gJiwgTGV4
U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRBQlNUUkFDVF9N
RVRIT0RfV0lUSF9CT0RZKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAg
IHN0YXRpYyB3Y2hhcl90ICpQcmludE5PTl9BQlNUUkFDVF9NRVRIT0RfV0lUSE9VVF9CT0RZKEVy
cm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQ
cmludEJBRF9BQ0NFU1NfTUVUSE9EX09WRVJSSURFKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwg
Q29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludEJBRF9BQ0NFU1NfTUVUSE9EX09W
RVJSSURFX0VYVEVSTkFMTFkoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwog
ICAgc3RhdGljIHdjaGFyX3QgKlByaW50U1RBVElDX09WRVJSSURFX0FCU1RSQUNUKEVycm9ySW5m
byAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludFNU
QVRJQ19PVkVSUklERV9BQlNUUkFDVF9FWFRFUk5BTExZKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0g
KiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludENJUkNVTEFSX1RISVNfQ0FM
TChFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJf
dCAqUHJpbnRJTlNUQU5DRV9WQVJJQUJMRV9JTl9FWFBMSUNJVF9DT05TVFJVQ1RPUl9JTlZPQ0FU
SU9OKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hh
cl90ICpQcmludElOU1RBTkNFX01FVEhPRF9JTl9FWFBMSUNJVF9DT05TVFJVQ1RPUl9JTlZPQ0FU
SU9OKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hh
cl90ICpQcmludFNZTlRIRVRJQ19WQVJJQUJMRV9BQ0NFU1MoRXJyb3JJbmZvICYsIExleFN0cmVh
bSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50U1lOVEhFVElDX01FVEhP
RF9JTlZPQ0FUSU9OKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0
YXRpYyB3Y2hhcl90ICpQcmludFNZTlRIRVRJQ19DT05TVFJVQ1RPUl9JTlZPQ0FUSU9OKEVycm9y
SW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmlu
dFRISVNfSU5fRVhQTElDSVRfQ09OU1RSVUNUT1JfSU5WT0NBVElPTihFcnJvckluZm8gJiwgTGV4
U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRTVVBFUl9JTl9F
WFBMSUNJVF9DT05TVFJVQ1RPUl9JTlZPQ0FUSU9OKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwg
Q29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludElOTkVSX0NPTlNUUlVDVE9SX0lO
X0VYUExJQ0lUX0NPTlNUUlVDVE9SX0lOVk9DQVRJT04oRXJyb3JJbmZvICYsIExleFN0cmVhbSAq
LCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50RVhQUkVTU0lPTl9OT1RfQ09O
U1RBTlQoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdj
aGFyX3QgKlByaW50VU5DQVRDSEFCTEVfTUVUSE9EX1RIUk9XTl9DSEVDS0VEX0VYQ0VQVElPTihF
cnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAq
UHJpbnRVTkNBVENIQUJMRV9DT05TVFJVQ1RPUl9USFJPV05fQ0hFQ0tFRF9FWENFUFRJT04oRXJy
b3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlBy
aW50VU5SRUFDSEFCTEVfQ0FUQ0hfQ0xBVVNFKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29u
dHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludFVOUkVBQ0hBQkxFX0RFRkFVTFRfQ0FU
Q0hfQ0xBVVNFKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRp
YyB3Y2hhcl90ICpQcmludFVOUkVBQ0hBQkxFX1NUQVRFTUVOVChFcnJvckluZm8gJiwgTGV4U3Ry
ZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRVTlJFQUNIQUJMRV9T
VEFURU1FTlRTKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRp
YyB3Y2hhcl90ICpQcmludFVOUkVBQ0hBQkxFX0NPTlNUUlVDVE9SX0JPRFkoRXJyb3JJbmZvICYs
IExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50QkxPQ0tF
RF9DQVRDSF9DTEFVU0UoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAg
c3RhdGljIHdjaGFyX3QgKlByaW50VkFSSUFCTEVfTk9UX0RFRklOSVRFTFlfQVNTSUdORUQoRXJy
b3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlBy
aW50VFlQRURfTUVUSE9EX1dJVEhfTk9fUkVUVVJOKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwg
Q29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludERFRkFVTFRfTUVUSE9EX05PVF9P
VkVSUklEREVOKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRp
YyB3Y2hhcl90ICpQcmludE9ORV9VTk5BTUVEX1BBQ0tBR0UoRXJyb3JJbmZvICYsIExleFN0cmVh
bSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50VFlQRV9OT1RfSU5fVU5O
QU1FRF9QQUNLQUdFKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0
YXRpYyB3Y2hhcl90ICpQcmludFRZUEVfSU5fV1JPTkdfUEFDS0FHRShFcnJvckluZm8gJiwgTGV4
U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRUWVBFX05BTUVf
TUlTTUFUQ0goRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGlj
IHdjaGFyX3QgKlByaW50REVQUkVDQVRFRF9UWVBFKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwg
Q29udHJvbCAmKTsKICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludERFUFJFQ0FURURfRklFTEQoRXJy
b3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlBy
aW50REVQUkVDQVRFRF9NRVRIT0QoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYp
OwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50REVQUkVDQVRFRF9DT05TVFJVQ1RPUihFcnJvcklu
Zm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRD
T01QUkVTU0VEX1pJUF9GSUxFKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsK
ICAgIHN0YXRpYyB3Y2hhcl90ICpQcmludElOVkFMSURfQ0xBU1NfRklMRShFcnJvckluZm8gJiwg
TGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRDQU5OT1Rf
T1BFTl9DTEFTU19GSUxFKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAg
IHN0YXRpYyB3Y2hhcl90ICpQcmludElOVEVSRkFDRV9OT1RfSU5ORVJfQ0xBU1MoRXJyb3JJbmZv
ICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50U1RB
VElDX05PVF9JTk5FUl9DTEFTUyhFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7
CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRUWVBFX05PVF9JTk5FUl9DTEFTUyhFcnJvckluZm8g
JiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRTVVBF
Ul9UWVBFX05PVF9JTk5FUl9DTEFTUyhFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wg
Jik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRTVEFUSUNfRklFTERfSU5fSU5ORVJfQ0xBU1Nf
Tk9UX0ZJTkFMKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRp
YyB3Y2hhcl90ICpQcmludFNUQVRJQ19GSUVMRF9JTl9JTk5FUl9DTEFTU19OT1RfQ09OU1RBTlQo
RXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3Qg
KlByaW50U1RBVElDX01FVEhPRF9JTl9JTk5FUl9DTEFTUyhFcnJvckluZm8gJiwgTGV4U3RyZWFt
ICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRTVEFUSUNfVFlQRV9JTl9J
Tk5FUl9DTEFTUyhFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0
aWMgd2NoYXJfdCAqUHJpbnRTVEFUSUNfSU5JVElBTElaRVJfSU5fSU5ORVJfQ0xBU1MoRXJyb3JJ
bmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50
SU5ORVJfQ0xBU1NfUkVGRVJFTkNFX1RPX05PTl9GSU5BTF9MT0NBTF9WQVJJQUJMRShFcnJvcklu
Zm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRT
VEFUSUNfUFJPVEVDVEVEX0ZJRUxEX0FDQ0VTUyhFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENv
bnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRTVEFUSUNfUFJPVEVDVEVEX01FVEhP
RF9BQ0NFU1MoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGlj
IHdjaGFyX3QgKlByaW50SU5IRVJJVEFOQ0VfQU5EX0xFWElDQUxfU0NPUElOR19DT05GTElDVF9X
SVRIX0xPQ0FMKEVycm9ySW5mbyAmLCBMZXhTdHJlYW0gKiwgQ29udHJvbCAmKTsKICAgIHN0YXRp
YyB3Y2hhcl90ICpQcmludElOSEVSSVRBTkNFX0FORF9MRVhJQ0FMX1NDT1BJTkdfQ09ORkxJQ1Rf
V0lUSF9NRU1CRVIoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3Rh
dGljIHdjaGFyX3QgKlByaW50SUxMRUdBTF9USElTX0ZJRUxEX0FDQ0VTUyhFcnJvckluZm8gJiwg
TGV4U3RyZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRDT05TVFJV
Q1RPUl9GT1VORF9JTl9BTk9OWU1PVVNfQ0xBU1MoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBD
b250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50RU5DTE9TSU5HX0lOU1RBTkNFX0FD
Q0VTU19GUk9NX0NPTlNUUlVDVE9SX0lOVk9DQVRJT04oRXJyb3JJbmZvICYsIExleFN0cmVhbSAq
LCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50RU5DTE9TSU5HX0lOU1RBTkNF
X0FDQ0VTU19BQ1JPU1NfU1RBVElDX1JFR0lPTihFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENv
bnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRFTkNMT1NJTkdfSU5TVEFOQ0VfTk9U
X0FDQ0VTU0lCTEUoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3Rh
dGljIHdjaGFyX3QgKlByaW50SU5WQUxJRF9FTkNMT1NJTkdfSU5TVEFOQ0UoRXJyb3JJbmZvICYs
IExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3RhdGljIHdjaGFyX3QgKlByaW50WkVST19E
SVZJREVfRVJST1IoRXJyb3JJbmZvICYsIExleFN0cmVhbSAqLCBDb250cm9sICYpOwogICAgc3Rh
dGljIHdjaGFyX3QgKlByaW50WkVST19ESVZJREVfQ0FVVElPTihFcnJvckluZm8gJiwgTGV4U3Ry
ZWFtICosIENvbnRyb2wgJik7CiAgICBzdGF0aWMgd2NoYXJfdCAqUHJpbnRWT0lEX1RPX1NUUklO
RyhFcnJvckluZm8gJiwgTGV4U3RyZWFtICosIENvbnRyb2wgJik7CgogICAgdm9pZCBTb3J0TWVz
c2FnZXMoKTsKfTsKCgoKCgoKCiMgMTYgIi4uLy4uL2ppa2VzL3NyYy9zZW1hbnRpYy5oIiAyCgoK
IyAxICIuLi8uLi9qaWtlcy9zcmMvY29udHJvbC5oIiAxCiAKIAogCiAKIAogCiAKIAogCgoKCgoK
CgoKCiAKCgoKCgoKCgoKY2xhc3MgU3RvcmFnZVBvb2w7CmNsYXNzIFNjYW5uZXI7CmNsYXNzIFBh
cnNlcjsKY2xhc3MgU2VtYW50aWM7CmNsYXNzIExleFN0cmVhbTsKY2xhc3MgQXN0UGFja2FnZURl
Y2xhcmF0aW9uOwoKY2xhc3MgQ29udHJvbCA6IHB1YmxpYyBTdHJpbmdDb25zdGFudAp7CnB1Ymxp
YzoKICAgIGludCByZXR1cm5fY29kZTsKICAgIE9wdGlvbiAmb3B0aW9uOwogICAgU3ltYm9sVGFi
bGUgY2xhc3NwYXRoX3RhYmxlLAogICAgICAgICAgICAgICAgZXh0ZXJuYWxfdGFibGU7CgogICAg
UGFja2FnZVN5bWJvbCAqc3lzdGVtX3BhY2thZ2UsCiAgICAgICAgICAgICAgICAgICpqYXZhX3V0
aWxfcGFja2FnZSwKICAgICAgICAgICAgICAgICAgKnVubmFtZWRfcGFja2FnZTsKICAgIGludCBk
b3RfY2xhc3NwYXRoX2luZGV4OwogICAgVHVwbGU8UGF0aFN5bWJvbCAqPiBjbGFzc3BhdGg7CiAg
ICBUdXBsZTx3Y2hhcl90ICo+IGJhZF9kaXJuYW1lcywKICAgICAgICAgICAgICAgICAgICAgYmFk
X3ppcF9maWxlbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgIGJhZF9pbnB1dF9maWxlbmFtZXMs
CiAgICAgICAgICAgICAgICAgICAgIHVucmVhZGFibGVfaW5wdXRfZmlsZW5hbWVzOwoKICAgIFN5
c3RlbVRhYmxlICpzeXN0ZW1fdGFibGU7CiAgICBUdXBsZTxEaXJlY3RvcnlTeW1ib2wgKj4gc3lz
dGVtX2RpcmVjdG9yaWVzOwoKICAgIFNlbWFudGljICpzeXN0ZW1fc2VtYW50aWM7CiAgICBUdXBs
ZTxTZW1hbnRpYyAqPiBzZW1hbnRpYzsKICAgIFR1cGxlPFR5cGVTeW1ib2wgKj4gbmVlZHNfYm9k
eV93b3JrLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlX3RyYXNoX2JpbjsKCiAgICBOYW1l
U3ltYm9sTWFwIHVubmFtZWRfcGFja2FnZV90eXBlczsKCiAgICBTeW1ib2xTZXQgaW5wdXRfamF2
YV9maWxlX3NldCwKICAgICAgICAgICAgICBpbnB1dF9jbGFzc19maWxlX3NldCwKICAgICAgICAg
ICAgICBleHBpcmVkX2ZpbGVfc2V0LAogICAgICAgICAgICAgIHJlY29tcGlsYXRpb25fZmlsZV9z
ZXQ7CgogICAgUGFyc2VyICpwYXJzZXI7CiAgICBTY2FubmVyICpzY2FubmVyOwoKICAgICAKICAg
ICAKICAgICAKICAgIExpdGVyYWxMb29rdXBUYWJsZSBzdHJpbmdfdGFibGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgaW50X3RhYmxlLAogICAgICAgICAgICAgICAgICAgICAgIGxvbmdfdGFibGUs
CiAgICAgICAgICAgICAgICAgICAgICAgY2hhcl90YWJsZSwKICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdF90YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICBkb3VibGVfdGFibGU7CiAgICBO
YW1lTG9va3VwVGFibGUgbmFtZV90YWJsZTsKICAgIFR5cGVMb29rdXBUYWJsZSB0eXBlX3RhYmxl
OwoKICAgICAKICAgICAKICAgICAKICAgIE5hbWVTeW1ib2wgKmRvdF9uYW1lX3N5bWJvbCwKICAg
ICAgICAgICAgICAgKmRvdF9kb3RfbmFtZV9zeW1ib2wsCiAgICAgICAgICAgICAgICpsZW5ndGhf
bmFtZV9zeW1ib2wsCiAgICAgICAgICAgICAgICppbml0X25hbWVfc3ltYm9sLAogICAgICAgICAg
ICAgICAqY2xpbml0X25hbWVfc3ltYm9sLAogICAgICAgICAgICAgICAqYmxvY2tfaW5pdF9uYW1l
X3N5bWJvbCwKICAgICAgICAgICAgICAgKnRoaXMwX25hbWVfc3ltYm9sLAogICAgICAgICAgICAg
ICAqY2xvbmVfbmFtZV9zeW1ib2wsCiAgICAgICAgICAgICAgICpvYmplY3RfbmFtZV9zeW1ib2ws
CiAgICAgICAgICAgICAgICp0eXBlX25hbWVfc3ltYm9sLAogICAgICAgICAgICAgICAqY2xhc3Nf
bmFtZV9zeW1ib2wsCiAgICAgICAgICAgICAgICp0b1N0cmluZ19uYW1lX3N5bWJvbCwKICAgICAg
ICAgICAgICAgKmFwcGVuZF9uYW1lX3N5bWJvbCwKICAgICAgICAgICAgICAgKmZvck5hbWVfbmFt
ZV9zeW1ib2wsCiAgICAgICAgICAgICAgICpnZXRNZXNzYWdlX25hbWVfc3ltYm9sOwoKICAgICAK
ICAgICAKICAgICAKICAgIFR5cGVTeW1ib2wgKmJ5dGVfdHlwZSwKICAgICAgICAgICAgICAgKnNo
b3J0X3R5cGUsCiAgICAgICAgICAgICAgICppbnRfdHlwZSwKICAgICAgICAgICAgICAgKmxvbmdf
dHlwZSwKICAgICAgICAgICAgICAgKmNoYXJfdHlwZSwKICAgICAgICAgICAgICAgKmZsb2F0X3R5
cGUsCiAgICAgICAgICAgICAgICpkb3VibGVfdHlwZSwKICAgICAgICAgICAgICAgKmJvb2xlYW5f
dHlwZSwKICAgICAgICAgICAgICAgKnZvaWRfdHlwZSwKICAgICAgICAgICAgICAgKm51bGxfdHlw
ZSwKICAgICAgICAgICAgICAgKm5vX3R5cGU7CgogICAgIAogICAgVHlwZVN5bWJvbCAqR2V0VHlw
ZShQYWNrYWdlU3ltYm9sICosIHdjaGFyX3QgKik7CgogICAgaW5saW5lIFR5cGVTeW1ib2wgKlNl
cmlhbGl6YWJsZSgpCiAgICB7CiAgICAgICAgaWYgKCEgU2VyaWFsaXphYmxlX3R5cGUpCiAgICAg
ICAgewogICAgICAgICAgICBQYWNrYWdlU3ltYm9sICppb19wYWNrYWdlID0gUHJvY2Vzc1BhY2th
Z2UoU3RyaW5nQ29uc3RhbnQ6OlVTX2phdmFfU0xfaW8pOwogICAgICAgICAgICBGaW5kUGF0aHNU
b0RpcmVjdG9yeShpb19wYWNrYWdlKTsKICAgICAgICAgICAgU2VyaWFsaXphYmxlX3R5cGUgPSBH
ZXRUeXBlKGlvX3BhY2thZ2UsIFN0cmluZ0NvbnN0YW50OjpVU19TZXJpYWxpemFibGUpOwogICAg
ICAgIH0KCiAgICAgICAgcmV0dXJuIFNlcmlhbGl6YWJsZV90eXBlOwogICAgfQoKICAgIGlubGlu
ZSBUeXBlU3ltYm9sICpPYmplY3QoKQogICAgewogICAgICAgIHJldHVybiAoT2JqZWN0X3R5cGUg
PyBPYmplY3RfdHlwZSA6IE9iamVjdF90eXBlID0gR2V0VHlwZShzeXN0ZW1fcGFja2FnZSwgU3Ry
aW5nQ29uc3RhbnQ6OlVTX09iamVjdCkpOwogICAgfQoKICAgIGlubGluZSBUeXBlU3ltYm9sICpD
bG9uZWFibGUoKQogICAgewogICAgICAgIHJldHVybiAoQ2xvbmVhYmxlX3R5cGUgPyBDbG9uZWFi
bGVfdHlwZSA6IENsb25lYWJsZV90eXBlID0gR2V0VHlwZShzeXN0ZW1fcGFja2FnZSwgU3RyaW5n
Q29uc3RhbnQ6OlVTX0Nsb25lYWJsZSkpOwogICAgfQoKICAgIGlubGluZSBUeXBlU3ltYm9sICpT
dHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAoU3RyaW5nX3R5cGUgPyBTdHJpbmdfdHlwZSA6
IFN0cmluZ190eXBlID0gR2V0VHlwZShzeXN0ZW1fcGFja2FnZSwgU3RyaW5nQ29uc3RhbnQ6OlVT
X1N0cmluZykpOwogICAgfQoKICAgIGlubGluZSBUeXBlU3ltYm9sICpWb2lkKCkKICAgIHsKICAg
ICAgICByZXR1cm4gKFZvaWRfdHlwZSA/IFZvaWRfdHlwZSA6IFZvaWRfdHlwZSA9IEdldFR5cGUo
c3lzdGVtX3BhY2thZ2UsIFN0cmluZ0NvbnN0YW50OjpVU19Wb2lkKSk7CiAgICB9CgogICAgaW5s
aW5lIFR5cGVTeW1ib2wgKkJvb2xlYW4oKQogICAgewogICAgICAgIHJldHVybiAoQm9vbGVhbl90
eXBlID8gQm9vbGVhbl90eXBlIDogQm9vbGVhbl90eXBlID0gR2V0VHlwZShzeXN0ZW1fcGFja2Fn
ZSwgU3RyaW5nQ29uc3RhbnQ6OlVTX0Jvb2xlYW4pKTsKICAgIH0KCiAgICBpbmxpbmUgVHlwZVN5
bWJvbCAqQnl0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIChCeXRlX3R5cGUgPyBCeXRlX3R5cGUg
OiBCeXRlX3R5cGUgPSBHZXRUeXBlKHN5c3RlbV9wYWNrYWdlLCBTdHJpbmdDb25zdGFudDo6VVNf
Qnl0ZSkpOwogICAgfQoKICAgIGlubGluZSBUeXBlU3ltYm9sICpTaG9ydCgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIChTaG9ydF90eXBlID8gU2hvcnRfdHlwZSA6IFNob3J0X3R5cGUgPSBHZXRUeXBl
KHN5c3RlbV9wYWNrYWdlLCBTdHJpbmdDb25zdGFudDo6VVNfU2hvcnQpKTsKICAgIH0KCiAgICBp
bmxpbmUgVHlwZVN5bWJvbCAqQ2hhcmFjdGVyKCkKICAgIHsKICAgICAgICByZXR1cm4gKENoYXJh
Y3Rlcl90eXBlID8gQ2hhcmFjdGVyX3R5cGUgOiBDaGFyYWN0ZXJfdHlwZSA9IEdldFR5cGUoc3lz
dGVtX3BhY2thZ2UsIFN0cmluZ0NvbnN0YW50OjpVU19DaGFyYWN0ZXIpKTsKICAgIH0KCiAgICBp
bmxpbmUgVHlwZVN5bWJvbCAqSW50ZWdlcigpCiAgICB7CiAgICAgICAgcmV0dXJuIChJbnRlZ2Vy
X3R5cGUgPyBJbnRlZ2VyX3R5cGUgOiBJbnRlZ2VyX3R5cGUgPSBHZXRUeXBlKHN5c3RlbV9wYWNr
YWdlLCBTdHJpbmdDb25zdGFudDo6VVNfSW50ZWdlcikpOwogICAgfQoKICAgIGlubGluZSBUeXBl
U3ltYm9sICpMb25nKCkKICAgIHsKICAgICAgICByZXR1cm4gKExvbmdfdHlwZSA/IExvbmdfdHlw
ZSA6IExvbmdfdHlwZSA9IEdldFR5cGUoc3lzdGVtX3BhY2thZ2UsIFN0cmluZ0NvbnN0YW50OjpV
U19Mb25nKSk7CiAgICB9CgogICAgaW5saW5lIFR5cGVTeW1ib2wgKkZsb2F0KCkKICAgIHsKICAg
ICAgICByZXR1cm4gKEZsb2F0X3R5cGUgPyBGbG9hdF90eXBlIDogRmxvYXRfdHlwZSA9IEdldFR5
cGUoc3lzdGVtX3BhY2thZ2UsIFN0cmluZ0NvbnN0YW50OjpVU19GbG9hdCkpOwogICAgfQoKICAg
IGlubGluZSBUeXBlU3ltYm9sICpEb3VibGUoKQogICAgewogICAgICAgIHJldHVybiAoRG91Ymxl
X3R5cGUgPyBEb3VibGVfdHlwZSA6IERvdWJsZV90eXBlID0gR2V0VHlwZShzeXN0ZW1fcGFja2Fn
ZSwgU3RyaW5nQ29uc3RhbnQ6OlVTX0RvdWJsZSkpOwogICAgfQoKICAgIHZvaWQgSW5pdENsYXNz
SW5mbygpOwogICAgaW5saW5lIFR5cGVTeW1ib2wgKkNsYXNzKCkKICAgIHsKICAgICAgICBpZiAo
ISBDbGFzc190eXBlKQogICAgICAgIHsKICAgICAgICAgICAgQ2xhc3NfdHlwZSA9IEdldFR5cGUo
c3lzdGVtX3BhY2thZ2UsIFN0cmluZ0NvbnN0YW50OjpVU19DbGFzcyk7CiAgICAgICAgICAgIElu
aXRDbGFzc0luZm8oKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBDbGFzc190eXBlOwogICAg
fQoKICAgIE1ldGhvZFN5bWJvbCAqQ2xhc3NfZm9yTmFtZU1ldGhvZCgpCiAgICB7CiAgICAgICAg
aWYgKCEgQ2xhc3NfZm9yTmFtZV9tZXRob2QpCiAgICAgICAgICAgICh2b2lkKSBDbGFzcygpOwog
ICAgICAgIHJldHVybiBDbGFzc19mb3JOYW1lX21ldGhvZDsKICAgIH0KCgogICAgdm9pZCBJbml0
VGhyb3dhYmxlSW5mbygpOwogICAgaW5saW5lIFR5cGVTeW1ib2wgKlRocm93YWJsZSgpCiAgICB7
CiAgICAgICAgaWYgKCEgVGhyb3dhYmxlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgICBUaHJv
d2FibGVfdHlwZSA9IEdldFR5cGUoc3lzdGVtX3BhY2thZ2UsIFN0cmluZ0NvbnN0YW50OjpVU19U
aHJvd2FibGUpOwogICAgICAgICAgICBJbml0VGhyb3dhYmxlSW5mbygpOwogICAgICAgIH0KCiAg
ICAgICAgcmV0dXJuIFRocm93YWJsZV90eXBlOwogICAgfQoKICAgIE1ldGhvZFN5bWJvbCAqVGhy
b3dhYmxlX2dldE1lc3NhZ2VNZXRob2QoKQogICAgewogICAgICAgIGlmICghIFRocm93YWJsZV9n
ZXRNZXNzYWdlX21ldGhvZCkKICAgICAgICAgICAgKHZvaWQpIFRocm93YWJsZSgpOwogICAgICAg
IHJldHVybiBUaHJvd2FibGVfZ2V0TWVzc2FnZV9tZXRob2Q7CiAgICB9CgogICAgaW5saW5lIFR5
cGVTeW1ib2wgKkV4Y2VwdGlvbigpCiAgICB7CiAgICAgICAgcmV0dXJuIChFeGNlcHRpb25fdHlw
ZQogICAgICAgICAgICAgICAgICAgICAgID8gRXhjZXB0aW9uX3R5cGUKICAgICAgICAgICAgICAg
ICAgICAgICA6IEV4Y2VwdGlvbl90eXBlID0gR2V0VHlwZShzeXN0ZW1fcGFja2FnZSwgU3RyaW5n
Q29uc3RhbnQ6OlVTX0V4Y2VwdGlvbikpOwogICAgfQoKICAgIGlubGluZSBUeXBlU3ltYm9sICpS
dW50aW1lRXhjZXB0aW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gKFJ1bnRpbWVFeGNlcHRpb25f
dHlwZQogICAgICAgICAgICAgICAgICAgICAgID8gUnVudGltZUV4Y2VwdGlvbl90eXBlCiAgICAg
ICAgICAgICAgICAgICAgICAgOiBSdW50aW1lRXhjZXB0aW9uX3R5cGUgPSBHZXRUeXBlKHN5c3Rl
bV9wYWNrYWdlLCBTdHJpbmdDb25zdGFudDo6VVNfUnVudGltZUV4Y2VwdGlvbikpOwogICAgfQoK
ICAgIGlubGluZSBUeXBlU3ltYm9sICpDbGFzc05vdEZvdW5kRXhjZXB0aW9uKCkKICAgIHsKICAg
ICAgICByZXR1cm4gKENsYXNzTm90Rm91bmRFeGNlcHRpb25fdHlwZQogICAgICAgICAgICAgICAg
ICAgICAgID8gQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbl90eXBlCiAgICAgICAgICAgICAgICAgICAg
ICAgOiBDbGFzc05vdEZvdW5kRXhjZXB0aW9uX3R5cGUgPSBHZXRUeXBlKHN5c3RlbV9wYWNrYWdl
LCBTdHJpbmdDb25zdGFudDo6VVNfQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbikpOwogICAgfQoKICAg
IGlubGluZSBUeXBlU3ltYm9sICpFcnJvcigpCiAgICB7CiAgICAgICAgcmV0dXJuIChFcnJvcl90
eXBlID8gRXJyb3JfdHlwZSA6IEVycm9yX3R5cGUgPSBHZXRUeXBlKHN5c3RlbV9wYWNrYWdlLCBT
dHJpbmdDb25zdGFudDo6VVNfRXJyb3IpKTsKICAgIH0KCiAgICB2b2lkIEluaXROb0NsYXNzRGVm
Rm91bmRFcnJvckluZm8oKTsKICAgIGlubGluZSBUeXBlU3ltYm9sICpOb0NsYXNzRGVmRm91bmRF
cnJvcigpCiAgICB7CiAgICAgICAgaWYgKCEgTm9DbGFzc0RlZkZvdW5kRXJyb3JfdHlwZSkKICAg
ICAgICB7CiAgICAgICAgICAgIE5vQ2xhc3NEZWZGb3VuZEVycm9yX3R5cGUgPSBHZXRUeXBlKHN5
c3RlbV9wYWNrYWdlLCBTdHJpbmdDb25zdGFudDo6VVNfTm9DbGFzc0RlZkZvdW5kRXJyb3IpOwog
ICAgICAgICAgICBJbml0Tm9DbGFzc0RlZkZvdW5kRXJyb3JJbmZvKCk7CiAgICAgICAgfQoKICAg
ICAgICByZXR1cm4gTm9DbGFzc0RlZkZvdW5kRXJyb3JfdHlwZTsKICAgIH0KCiAgICBNZXRob2RT
eW1ib2wgKk5vQ2xhc3NEZWZGb3VuZEVycm9yX0luaXRNZXRob2QoKQogICAgewogICAgICAgIGlm
ICghIE5vQ2xhc3NEZWZGb3VuZEVycm9yX0luaXRXaXRoU3RyaW5nX21ldGhvZCkKICAgICAgICAg
ICAgKHZvaWQpIE5vQ2xhc3NEZWZGb3VuZEVycm9yKCk7CiAgICAgICAgcmV0dXJuIE5vQ2xhc3NE
ZWZGb3VuZEVycm9yX0luaXRXaXRoU3RyaW5nX21ldGhvZDsKICAgIH0KCgogICAgdm9pZCBJbml0
U3RyaW5nQnVmZmVySW5mbygpOwogICAgaW5saW5lIFR5cGVTeW1ib2wgKlN0cmluZ0J1ZmZlcigp
CiAgICB7CiAgICAgICAgaWYgKCEgU3RyaW5nQnVmZmVyX3R5cGUpCiAgICAgICAgewogICAgICAg
ICAgICBTdHJpbmdCdWZmZXJfdHlwZSA9IEdldFR5cGUoc3lzdGVtX3BhY2thZ2UsIFN0cmluZ0Nv
bnN0YW50OjpVU19TdHJpbmdCdWZmZXIpOwogICAgICAgICAgICBJbml0U3RyaW5nQnVmZmVySW5m
bygpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFN0cmluZ0J1ZmZlcl90eXBlOwogICAgfQoK
CiAgICBNZXRob2RTeW1ib2wgKlN0cmluZ0J1ZmZlcl9Jbml0TWV0aG9kKCkKICAgIHsKICAgICAg
ICBpZiAoISBTdHJpbmdCdWZmZXJfSW5pdF9tZXRob2QpCiAgICAgICAgICAgICh2b2lkKSBTdHJp
bmdCdWZmZXIoKTsKICAgICAgICByZXR1cm4gU3RyaW5nQnVmZmVyX0luaXRfbWV0aG9kOwogICAg
fQoKCiAgICBNZXRob2RTeW1ib2wgKlN0cmluZ0J1ZmZlcl9Jbml0V2l0aFN0cmluZ01ldGhvZCgp
CiAgICB7CiAgICAgICAgaWYgKCEgU3RyaW5nQnVmZmVyX0luaXRXaXRoU3RyaW5nX21ldGhvZCkK
ICAgICAgICAgICAgKHZvaWQpIFN0cmluZ0J1ZmZlcigpOwogICAgICAgIHJldHVybiBTdHJpbmdC
dWZmZXJfSW5pdFdpdGhTdHJpbmdfbWV0aG9kOwogICAgfQoKCiAgICBNZXRob2RTeW1ib2wgKlN0
cmluZ0J1ZmZlcl90b1N0cmluZ01ldGhvZCgpCiAgICB7CiAgICAgICAgaWYgKCEgU3RyaW5nQnVm
ZmVyX0luaXRXaXRoU3RyaW5nX21ldGhvZCkKICAgICAgICAgICAgKHZvaWQpIFN0cmluZ0J1ZmZl
cigpOwogICAgICAgIHJldHVybiBTdHJpbmdCdWZmZXJfdG9TdHJpbmdfbWV0aG9kOwogICAgfQoK
CiAgICBNZXRob2RTeW1ib2wgKlN0cmluZ0J1ZmZlcl9hcHBlbmRfY2hhcl9hcnJheU1ldGhvZCgp
CiAgICB7CiAgICAgICAgaWYgKCEgU3RyaW5nQnVmZmVyX0luaXRXaXRoU3RyaW5nX21ldGhvZCkK
ICAgICAgICAgICAgKHZvaWQpIFN0cmluZ0J1ZmZlcigpOwogICAgICAgIHJldHVybiBTdHJpbmdC
dWZmZXJfYXBwZW5kX2NoYXJfYXJyYXlfbWV0aG9kOwogICAgfQoKCiAgICBNZXRob2RTeW1ib2wg
KlN0cmluZ0J1ZmZlcl9hcHBlbmRfY2hhck1ldGhvZCgpCiAgICB7CiAgICAgICAgaWYgKCEgU3Ry
aW5nQnVmZmVyX0luaXRXaXRoU3RyaW5nX21ldGhvZCkKICAgICAgICAgICAgKHZvaWQpIFN0cmlu
Z0J1ZmZlcigpOwogICAgICAgIHJldHVybiBTdHJpbmdCdWZmZXJfYXBwZW5kX2NoYXJfbWV0aG9k
OwogICAgfQoKCiAgICBNZXRob2RTeW1ib2wgKlN0cmluZ0J1ZmZlcl9hcHBlbmRfYm9vbGVhbk1l
dGhvZCgpCiAgICB7CiAgICAgICAgaWYgKCEgU3RyaW5nQnVmZmVyX0luaXRXaXRoU3RyaW5nX21l
dGhvZCkKICAgICAgICAgICAgKHZvaWQpIFN0cmluZ0J1ZmZlcigpOwogICAgICAgIHJldHVybiBT
dHJpbmdCdWZmZXJfYXBwZW5kX2Jvb2xlYW5fbWV0aG9kOwogICAgfQoKCiAgICBNZXRob2RTeW1i
b2wgKlN0cmluZ0J1ZmZlcl9hcHBlbmRfaW50TWV0aG9kKCkKICAgIHsKICAgICAgICBpZiAoISBT
dHJpbmdCdWZmZXJfSW5pdFdpdGhTdHJpbmdfbWV0aG9kKQogICAgICAgICAgICAodm9pZCkgU3Ry
aW5nQnVmZmVyKCk7CiAgICAgICAgcmV0dXJuIFN0cmluZ0J1ZmZlcl9hcHBlbmRfaW50X21ldGhv
ZDsKICAgIH0KCgogICAgTWV0aG9kU3ltYm9sICpTdHJpbmdCdWZmZXJfYXBwZW5kX2xvbmdNZXRo
b2QoKQogICAgewogICAgICAgIGlmICghIFN0cmluZ0J1ZmZlcl9Jbml0V2l0aFN0cmluZ19tZXRo
b2QpCiAgICAgICAgICAgICh2b2lkKSBTdHJpbmdCdWZmZXIoKTsKICAgICAgICByZXR1cm4gU3Ry
aW5nQnVmZmVyX2FwcGVuZF9sb25nX21ldGhvZDsKICAgIH0KCgogICAgTWV0aG9kU3ltYm9sICpT
dHJpbmdCdWZmZXJfYXBwZW5kX2Zsb2F0TWV0aG9kKCkKICAgIHsKICAgICAgICBpZiAoISBTdHJp
bmdCdWZmZXJfSW5pdFdpdGhTdHJpbmdfbWV0aG9kKQogICAgICAgICAgICAodm9pZCkgU3RyaW5n
QnVmZmVyKCk7CiAgICAgICAgcmV0dXJuIFN0cmluZ0J1ZmZlcl9hcHBlbmRfZmxvYXRfbWV0aG9k
OwogICAgfQoKCiAgICBNZXRob2RTeW1ib2wgKlN0cmluZ0J1ZmZlcl9hcHBlbmRfZG91YmxlTWV0
aG9kKCkKICAgIHsKICAgICAgICBpZiAoISBTdHJpbmdCdWZmZXJfSW5pdFdpdGhTdHJpbmdfbWV0
aG9kKQogICAgICAgICAgICAodm9pZCkgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgcmV0dXJuIFN0
cmluZ0J1ZmZlcl9hcHBlbmRfZG91YmxlX21ldGhvZDsKICAgIH0KCgogICAgTWV0aG9kU3ltYm9s
ICpTdHJpbmdCdWZmZXJfYXBwZW5kX3N0cmluZ01ldGhvZCgpCiAgICB7CiAgICAgICAgaWYgKCEg
U3RyaW5nQnVmZmVyX0luaXRXaXRoU3RyaW5nX21ldGhvZCkKICAgICAgICAgICAgKHZvaWQpIFN0
cmluZ0J1ZmZlcigpOwogICAgICAgIHJldHVybiBTdHJpbmdCdWZmZXJfYXBwZW5kX3N0cmluZ19t
ZXRob2Q7CiAgICB9CgoKICAgIE1ldGhvZFN5bWJvbCAqU3RyaW5nQnVmZmVyX2FwcGVuZF9vYmpl
Y3RNZXRob2QoKQogICAgewogICAgICAgIGlmICghIFN0cmluZ0J1ZmZlcl9Jbml0V2l0aFN0cmlu
Z19tZXRob2QpCiAgICAgICAgICAgICh2b2lkKSBTdHJpbmdCdWZmZXIoKTsKICAgICAgICByZXR1
cm4gU3RyaW5nQnVmZmVyX2FwcGVuZF9vYmplY3RfbWV0aG9kOwogICAgfQoKICAgIEludExpdGVy
YWxUYWJsZSAgICBpbnRfcG9vbDsKICAgIExvbmdMaXRlcmFsVGFibGUgICBsb25nX3Bvb2w7CiAg
ICBGbG9hdExpdGVyYWxUYWJsZSAgZmxvYXRfcG9vbDsKICAgIERvdWJsZUxpdGVyYWxUYWJsZSBk
b3VibGVfcG9vbDsKICAgIFV0ZjhMaXRlcmFsVGFibGUgICBVdGY4X3Bvb2w7CgogICAgVXRmOExp
dGVyYWxWYWx1ZSAqQ29uc3RhbnRWYWx1ZV9saXRlcmFsLAogICAgICAgICAgICAgICAgICAgICAq
RXhjZXB0aW9uc19saXRlcmFsLAogICAgICAgICAgICAgICAgICAgICAqSW5uZXJDbGFzc2VzX2xp
dGVyYWwsCiAgICAgICAgICAgICAgICAgICAgICpTeW50aGV0aWNfbGl0ZXJhbCwKICAgICAgICAg
ICAgICAgICAgICAgKkRlcHJlY2F0ZWRfbGl0ZXJhbCwKICAgICAgICAgICAgICAgICAgICAgKkxp
bmVOdW1iZXJUYWJsZV9saXRlcmFsLAogICAgICAgICAgICAgICAgICAgICAqTG9jYWxWYXJpYWJs
ZVRhYmxlX2xpdGVyYWwsCiAgICAgICAgICAgICAgICAgICAgICpDb2RlX2xpdGVyYWwsCiAgICAg
ICAgICAgICAgICAgICAgICpTb3VyY2VmaWxlX2xpdGVyYWwsCgogICAgICAgICAgICAgICAgICAg
ICAqbnVsbF9saXRlcmFsLAogICAgICAgICAgICAgICAgICAgICAqdGhpc19saXRlcmFsOwoKICAg
IENvbnRyb2woY2hhciAqKiwgT3B0aW9uICYpOwogICAgfkNvbnRyb2woKTsKCiAgICBVdGY4TGl0
ZXJhbFZhbHVlICpDb252ZXJ0VW5pY29kZVRvVXRmOCh3Y2hhcl90ICpzb3VyY2UpCiAgICB7CiAg
ICAgICAgY2hhciAqdGFyZ2V0ID0gbmV3IGNoYXJbd2NzbGVuKHNvdXJjZSkgKiAzICsgMV07ICAK
ICAgICAgICBpbnQgbGVuZ3RoID0gQ29udmVydFVuaWNvZGVUb1V0Zjgoc291cmNlLCB0YXJnZXQp
OwogICAgICAgIFV0ZjhMaXRlcmFsVmFsdWUgKmxpdGVyYWwgPSBVdGY4X3Bvb2wuRmluZE9ySW5z
ZXJ0KHRhcmdldCwgbGVuZ3RoKTsKICAgICAgICBkZWxldGUgW10gdGFyZ2V0OwoKICAgICAgICBy
ZXR1cm4gbGl0ZXJhbDsKICAgIH0KCiAgICBzdGF0aWMgaW50IENvbnZlcnRVdGY4VG9Vbmljb2Rl
KHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBpbnQpOwoKICAgIE5hbWVTeW1ib2wgKkNvbnZlcnRV
dGY4VG9Vbmljb2RlKGNvbnN0IGNoYXIgKnNvdXJjZSwgaW50IGxlbmd0aCkKICAgIHsKICAgICAg
ICB3Y2hhcl90ICpuYW1lID0gbmV3IHdjaGFyX3RbbGVuZ3RoICsgMV07CiAgICAgICAgaW50IG5h
bWVfbGVuZ3RoID0gQ29udmVydFV0ZjhUb1VuaWNvZGUobmFtZSwgc291cmNlLCBsZW5ndGgpOwog
ICAgICAgIE5hbWVTeW1ib2wgKm5hbWVfc3ltYm9sID0gRmluZE9ySW5zZXJ0TmFtZShuYW1lLCBu
YW1lX2xlbmd0aCk7CiAgICAgICAgZGVsZXRlIFtdIG5hbWU7CgogICAgICAgIHJldHVybiBuYW1l
X3N5bWJvbDsKICAgIH0KCiAgICB2b2lkIEZpbmRQYXRoc1RvRGlyZWN0b3J5KFBhY2thZ2VTeW1i
b2wgKik7CgogICAgRGlyZWN0b3J5RW50cnkgKkZpbmRJbnB1dEZpbGUoRmlsZVN5bWJvbCAqKTsK
ICAgIHZvaWQgRmluZE1vcmVSZWNlbnRJbnB1dEZpbGVzKFN5bWJvbFNldCAmKTsKICAgIHZvaWQg
UmVtb3ZlVHJhc2hlZFR5cGVzKFN5bWJvbFNldCAmKTsKICAgIHZvaWQgUmVyZWFkRGlyZWN0b3J5
KERpcmVjdG9yeVN5bWJvbCAqKTsKICAgIHZvaWQgUmVyZWFkRGlyZWN0b3JpZXMoKTsKICAgIHZv
aWQgQ29tcHV0ZVJlY29tcGlsYXRpb25TZXQoVHlwZURlcGVuZGVuY2VDaGVja2VyICYpOwogICAg
Ym9vbCBJbmNyZW1lbnRhbFJlY29tcGlsYXRpb24oKTsKCiAgICAgCiAgICAgCiAgICAgCiAgICBM
aXRlcmFsVmFsdWUgKkJhZFZhbHVlKCkgeyByZXR1cm4gJmJhZF92YWx1ZTsgfQoKICAgICAKICAg
ICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIE5hbWVTeW1ib2wgKkZpbmRPckluc2VydE5h
bWUod2NoYXJfdCAqbmFtZSwgaW50IGxlbikKICAgIHsKICAgICAgICBOYW1lU3ltYm9sICpuYW1l
X3N5bWJvbCA9IG5hbWVfdGFibGUuRmluZE9ySW5zZXJ0TmFtZShuYW1lLCBsZW4pOwogICAgICAg
IGlmICghIG5hbWVfc3ltYm9sIC0+IFV0ZjhfbGl0ZXJhbCkKICAgICAgICAgICAgbmFtZV9zeW1i
b2wgLT4gVXRmOF9saXRlcmFsID0gQ29udmVydFVuaWNvZGVUb1V0ZjgobmFtZV9zeW1ib2wgLT4g
TmFtZSgpKTsKCiAgICAgICAgcmV0dXJuIG5hbWVfc3ltYm9sOwogICAgfQoKICAgICAKICAgICAK
ICAgICAKICAgIE5hbWVTeW1ib2wgKk1ha2VQYXJhbWV0ZXIoaW50IG51bSkKICAgIHsKICAgICAg
ICBJbnRUb1dzdHJpbmcgdmFsdWUobnVtKTsKCiAgICAgICAgd2NoYXJfdCBzdHJbMTNdOwogICAg
ICAgIHN0clswXSA9IFVfRE9MTEFSOyAgCiAgICAgICAgd2NzY3B5KCZzdHJbMV0sIHZhbHVlLlN0
cmluZygpKTsKCiAgICAgICAgcmV0dXJuIEZpbmRPckluc2VydE5hbWUoc3RyLCB2YWx1ZS5MZW5n
dGgoKSArIDEpOwogICAgfQoKICAgICAKICAgICAKICAgICAKICAgIHN0YXRpYyBEaXJlY3RvcnlT
eW1ib2wgKkdldE91dHB1dERpcmVjdG9yeShGaWxlU3ltYm9sICopOwogICAgc3RhdGljIEZpbGVT
eW1ib2wgKkdldEphdmFGaWxlKFBhY2thZ2VTeW1ib2wgKiwgTmFtZVN5bWJvbCAqKTsKICAgIHN0
YXRpYyBGaWxlU3ltYm9sICpHZXRGaWxlKENvbnRyb2wgJiwgUGFja2FnZVN5bWJvbCAqLCBOYW1l
U3ltYm9sICopOwogICAgc3RhdGljIEZpbGVTeW1ib2wgKkdldEZpbGVGaXJzdChDb250cm9sICYs
IFBhY2thZ2VTeW1ib2wgKiwgTmFtZVN5bWJvbCAqKTsKICAgIHN0YXRpYyBGaWxlU3ltYm9sICpH
ZXRGaWxlQm90aChDb250cm9sICYsIFBhY2thZ2VTeW1ib2wgKiwgTmFtZVN5bWJvbCAqKTsKCiAg
ICBQYWNrYWdlU3ltYm9sICpGaW5kT3JJbnNlcnRQYWNrYWdlKExleFN0cmVhbSAqLCBBc3RFeHBy
ZXNzaW9uICopOwogICAgdm9pZCBQcm9jZXNzUGFja2FnZURlY2xhcmF0aW9uKEZpbGVTeW1ib2wg
KiwgQXN0UGFja2FnZURlY2xhcmF0aW9uICopOwogICAgdm9pZCBDbGVhblVwKEZpbGVTeW1ib2wg
Kik7CgogICAgaW5saW5lIGJvb2wgSXNTaW1wbGVJbnRlZ2VyVmFsdWVUeXBlKFR5cGVTeW1ib2wg
KnR5cGUpCiAgICB7CiAgICAgICAgcmV0dXJuICh0eXBlID09IGJ5dGVfdHlwZSB8fCB0eXBlID09
IHNob3J0X3R5cGUgfHwgdHlwZSA9PSBpbnRfdHlwZSB8fCB0eXBlID09IGNoYXJfdHlwZSk7CiAg
ICB9CgogICAgaW5saW5lIGJvb2wgSXNJbnRlZ3JhbChUeXBlU3ltYm9sICp0eXBlKQogICAgewog
ICAgICAgIHJldHVybiAoSXNTaW1wbGVJbnRlZ2VyVmFsdWVUeXBlKHR5cGUpIHx8IHR5cGUgPT0g
bG9uZ190eXBlKTsKICAgIH0KCiAgICBpbmxpbmUgYm9vbCBJc0Zsb2F0aW5nUG9pbnQoVHlwZVN5
bWJvbCAqdHlwZSkKICAgIHsKICAgICAgICByZXR1cm4gKHR5cGUgPT0gZmxvYXRfdHlwZSB8fCB0
eXBlID09IGRvdWJsZV90eXBlKTsKICAgIH0KCiAgICBpbmxpbmUgYm9vbCBJc051bWVyaWMoVHlw
ZVN5bWJvbCAqdHlwZSkKICAgIHsKICAgICAgICByZXR1cm4gSXNJbnRlZ3JhbCh0eXBlKSB8fCBJ
c0Zsb2F0aW5nUG9pbnQodHlwZSk7CiAgICB9CgogICAgaW5saW5lIGJvb2wgSXNEb3VibGVXb3Jk
VHlwZShUeXBlU3ltYm9sICp0eXBlKQogICAgewogICAgICAgIHJldHVybiAodHlwZSA9PSBsb25n
X3R5cGUgfHwgdHlwZSA9PSBkb3VibGVfdHlwZSk7CiAgICB9CgogICAgaW5saW5lIGJvb2wgSXNQ
cmltaXRpdmUoVHlwZVN5bWJvbCAqdHlwZSkKICAgIHsKICAgICAgICByZXR1cm4gKElzTnVtZXJp
Yyh0eXBlKSB8fCB0eXBlID09IGJvb2xlYW5fdHlwZSk7CiAgICB9CgogICAgaW5saW5lIHZvaWQg
UHJvY2Vzc0JhZFR5cGUoVHlwZVN5bWJvbCAqdHlwZV9zeW1ib2wpCiAgICB7CiAgICAgICAgdHlw
ZV90cmFzaF9iaW4uTmV4dCgpID0gdHlwZV9zeW1ib2w7CiAgICB9CgogICAgdm9pZCBQcm9jZXNz
SGVhZGVycyhGaWxlU3ltYm9sICopOwoKCgoKCgoKCiAgICBQYWNrYWdlU3ltYm9sICpQcm9jZXNz
UGFja2FnZSh3Y2hhcl90ICopOwoKICAgIERpcmVjdG9yeVN5bWJvbCAqRmluZFN1YmRpcmVjdG9y
eShQYXRoU3ltYm9sICosIHdjaGFyX3QgKiwgaW50KTsKICAgIERpcmVjdG9yeVN5bWJvbCAqUHJv
Y2Vzc1N1YmRpcmVjdG9yaWVzKHdjaGFyX3QgKiwgaW50LCBib29sKTsKCnByaXZhdGU6CgogICAg
TGl0ZXJhbFZhbHVlIGJhZF92YWx1ZTsKCiAgICBUeXBlU3ltYm9sICpTZXJpYWxpemFibGVfdHlw
ZSwKCiAgICAgICAgICAgICAgICpPYmplY3RfdHlwZSwKICAgICAgICAgICAgICAgKkNsb25lYWJs
ZV90eXBlLAogICAgICAgICAgICAgICAqU3RyaW5nX3R5cGUsCiAgICAgICAgICAgICAgICpWb2lk
X3R5cGUsCiAgICAgICAgICAgICAgICpCb29sZWFuX3R5cGUsCiAgICAgICAgICAgICAgICpCeXRl
X3R5cGUsCiAgICAgICAgICAgICAgICpTaG9ydF90eXBlLAogICAgICAgICAgICAgICAqQ2hhcmFj
dGVyX3R5cGUsCiAgICAgICAgICAgICAgICpJbnRlZ2VyX3R5cGUsCiAgICAgICAgICAgICAgICpM
b25nX3R5cGUsCiAgICAgICAgICAgICAgICpGbG9hdF90eXBlLAogICAgICAgICAgICAgICAqRG91
YmxlX3R5cGUsCiAgICAgICAgICAgICAgICpDbGFzc190eXBlLAogICAgICAgICAgICAgICAqVGhy
b3dhYmxlX3R5cGUsCiAgICAgICAgICAgICAgICpFeGNlcHRpb25fdHlwZSwKICAgICAgICAgICAg
ICAgKlJ1bnRpbWVFeGNlcHRpb25fdHlwZSwKICAgICAgICAgICAgICAgKkNsYXNzTm90Rm91bmRF
eGNlcHRpb25fdHlwZSwKICAgICAgICAgICAgICAgKkVycm9yX3R5cGUsCiAgICAgICAgICAgICAg
ICpOb0NsYXNzRGVmRm91bmRFcnJvcl90eXBlLAogICAgICAgICAgICAgICAqU3RyaW5nQnVmZmVy
X3R5cGU7CgogICAgTWV0aG9kU3ltYm9sICpDbGFzc19mb3JOYW1lX21ldGhvZCwKCiAgICAgICAg
ICAgICAgICAgKlRocm93YWJsZV9nZXRNZXNzYWdlX21ldGhvZCwKCiAgICAgICAgICAgICAgICAg
Kk5vQ2xhc3NEZWZGb3VuZEVycm9yX0luaXRXaXRoU3RyaW5nX21ldGhvZCwKCiAgICAgICAgICAg
ICAgICAgKlN0cmluZ0J1ZmZlcl9Jbml0X21ldGhvZCwKICAgICAgICAgICAgICAgICAqU3RyaW5n
QnVmZmVyX0luaXRXaXRoU3RyaW5nX21ldGhvZCwKICAgICAgICAgICAgICAgICAqU3RyaW5nQnVm
ZmVyX3RvU3RyaW5nX21ldGhvZCwKICAgICAgICAgICAgICAgICAqU3RyaW5nQnVmZmVyX2FwcGVu
ZF9jaGFyX2FycmF5X21ldGhvZCwKICAgICAgICAgICAgICAgICAqU3RyaW5nQnVmZmVyX2FwcGVu
ZF9jaGFyX21ldGhvZCwKICAgICAgICAgICAgICAgICAqU3RyaW5nQnVmZmVyX2FwcGVuZF9ib29s
ZWFuX21ldGhvZCwKICAgICAgICAgICAgICAgICAqU3RyaW5nQnVmZmVyX2FwcGVuZF9pbnRfbWV0
aG9kLAogICAgICAgICAgICAgICAgICpTdHJpbmdCdWZmZXJfYXBwZW5kX2xvbmdfbWV0aG9kLAog
ICAgICAgICAgICAgICAgICpTdHJpbmdCdWZmZXJfYXBwZW5kX2Zsb2F0X21ldGhvZCwKICAgICAg
ICAgICAgICAgICAqU3RyaW5nQnVmZmVyX2FwcGVuZF9kb3VibGVfbWV0aG9kLAogICAgICAgICAg
ICAgICAgICpTdHJpbmdCdWZmZXJfYXBwZW5kX3N0cmluZ19tZXRob2QsCiAgICAgICAgICAgICAg
ICAgKlN0cmluZ0J1ZmZlcl9hcHBlbmRfb2JqZWN0X21ldGhvZDsKCiAgICBzdGF0aWMgaW50IENv
bnZlcnRVbmljb2RlVG9VdGY4KHdjaGFyX3QgKiwgY2hhciAqKTsKCiAgICB2b2lkIFByb2Nlc3NH
bG9iYWxzKCk7CiAgICB2b2lkIFByb2Nlc3NVbm5hbWVkUGFja2FnZSgpOwogICAgdm9pZCBQcm9j
ZXNzUGF0aCgpOwogICAgdm9pZCBQcm9jZXNzQm9vdENsYXNzUGF0aCgpOwogICAgdm9pZCBQcm9j
ZXNzRXh0RGlycygpOwogICAgdm9pZCBQcm9jZXNzQ2xhc3NQYXRoKCk7CiAgICB2b2lkIFByb2Nl
c3NTb3VyY2VQYXRoKCk7CiAgICBUeXBlU3ltYm9sICpHZXRQcmltaXRpdmVUeXBlKHdjaGFyX3Qg
KiwgY2hhciAqKTsKICAgIHZvaWQgUHJvY2Vzc1N5c3RlbUluZm9ybWF0aW9uKCk7CgogICAgdm9p
ZCBQcm9jZXNzRmlsZShGaWxlU3ltYm9sICopOwogICAgdm9pZCBQcm9jZXNzTWVtYmVycygpOwog
ICAgdm9pZCBQcm9jZXNzQm9kaWVzKFR5cGVTeW1ib2wgKik7CgogICAgdm9pZCBQcm9jZXNzTmV3
SW5wdXRGaWxlcyhTeW1ib2xTZXQgJiwgY2hhciAqKiwgaW50ID0gMCk7CgogICAgRmlsZVN5bWJv
bCAqRmluZE9ySW5zZXJ0SmF2YUlucHV0RmlsZShEaXJlY3RvcnlTeW1ib2wgKiwgTmFtZVN5bWJv
bCAqKTsKICAgIEZpbGVTeW1ib2wgKkZpbmRPckluc2VydEphdmFJbnB1dEZpbGUod2NoYXJfdCAq
LCBpbnQpOwp9OwoKCgoKCgoKIyAxOCAiLi4vLi4vamlrZXMvc3JjL3NlbWFudGljLmgiIDIKCgoK
CiAKCgoKCgoKCgoKCgpjbGFzcyBjcF9pbmZvOwpjbGFzcyBUeXBlU2hhZG93U3ltYm9sOwoKIAog
CiAKY2xhc3MgU3ltYm9sVGFibGVTdGFjawp7CnB1YmxpYzoKICAgIHZvaWQgUHVzaChTeW1ib2xU
YWJsZSAqc3ltdGFiKSB7IHRhYmxlLk5leHQoKSA9IHN5bXRhYjsgfQogICAgdm9pZCBQb3AoKSAg
ICAgICAgICAgICAgICAgICAgIHsgaWYgKHRhYmxlLkxlbmd0aCgpID4gMCkgdGFibGUuUmVzZXQo
dGFibGUuTGVuZ3RoKCkgLSAxKTsgfQogICAgaW50IFNpemUoKSAgICAgICAgICAgICAgICAgICAg
IHsgcmV0dXJuIHRhYmxlLkxlbmd0aCgpOyB9CiAgICBTeW1ib2xUYWJsZSAqVG9wKCkgICAgICAg
ICAgICAgeyByZXR1cm4gKFN5bWJvbFRhYmxlICopICh0YWJsZS5MZW5ndGgoKSA+IDAgPyB0YWJs
ZVt0YWJsZS5MZW5ndGgoKSAtIDFdIDogX19udWxsICk7IH0KCiAgICBTeW1ib2xUYWJsZSAqb3Bl
cmF0b3JbXShjb25zdCBpbnQgaSkgeyByZXR1cm4gdGFibGVbaV07IH0gIAoKICAgICAKICAgICAK
ICAgICAKICAgICAKICAgIFZhcmlhYmxlU3ltYm9sICpGaW5kVmFyaWFibGVTeW1ib2woTmFtZVN5
bWJvbCAqbmFtZV9zeW1ib2wpCiAgICB7CiAgICAgICAgZm9yIChpbnQgaSA9IHRhYmxlLkxlbmd0
aCgpIC0gMTsgaSA+PSAwOyBpLS0pCiAgICAgICAgewogICAgICAgICAgICBWYXJpYWJsZVN5bWJv
bCAqc3ltYm9sID0gdGFibGVbaV0gLT4gRmluZFZhcmlhYmxlU3ltYm9sKG5hbWVfc3ltYm9sKTsK
ICAgICAgICAgICAgaWYgKHN5bWJvbCkKICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2w7CiAg
ICAgICAgfQogICAgICAgIHJldHVybiAoVmFyaWFibGVTeW1ib2wgKikgX19udWxsIDsKICAgIH0K
CiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBUeXBlU3ltYm9sKiBGaW5kVHlwZVN5bWJvbChO
YW1lU3ltYm9sICpuYW1lX3N5bWJvbCkKICAgIHsKICAgICAgICBmb3IgKGludCBpID0gdGFibGUu
TGVuZ3RoKCkgLSAxOyBpID49IDA7IGktLSkKICAgICAgICB7CiAgICAgICAgICAgIFR5cGVTeW1i
b2wgKnN5bWJvbCA9IHRhYmxlW2ldIC0+IEZpbmRUeXBlU3ltYm9sKG5hbWVfc3ltYm9sKTsKICAg
ICAgICAgICAgaWYgKHN5bWJvbCkKICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2w7CiAgICAg
ICAgfQogICAgICAgIHJldHVybiAoVHlwZVN5bWJvbCAqKSBfX251bGwgOwogICAgfQoKICAgICAK
ICAgICAKICAgICAKICAgICAKICAgIExhYmVsU3ltYm9sKiBGaW5kTGFiZWxTeW1ib2woTmFtZVN5
bWJvbCAqbmFtZV9zeW1ib2wpCiAgICB7CiAgICAgICAgZm9yIChpbnQgaSA9IHRhYmxlLkxlbmd0
aCgpIC0gMTsgaSA+PSAwOyBpLS0pCiAgICAgICAgewogICAgICAgICAgICBMYWJlbFN5bWJvbCAq
bGFiZWwgPSB0YWJsZVtpXSAtPiBGaW5kTGFiZWxTeW1ib2wobmFtZV9zeW1ib2wpOwogICAgICAg
ICAgICBpZiAobGFiZWwpCiAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWw7CiAgICAgICAgfQog
ICAgICAgIHJldHVybiAoTGFiZWxTeW1ib2wgKikgX19udWxsIDsKICAgIH0KCnByaXZhdGU6CiAg
ICBUdXBsZTxTeW1ib2xUYWJsZSAqPiB0YWJsZTsKfTsKCgogCiAKIApjbGFzcyBFeGNlcHRpb25U
YWJsZVN0YWNrCnsKcHVibGljOgogICAgdm9pZCBQdXNoKFN5bWJvbFNldCAqc2V0KSB7IHRhYmxl
Lk5leHQoKSA9IHNldDsgfQogICAgdm9pZCAgICAgICBQb3AoKSAgICAgICAgICB7IGlmICh0YWJs
ZS5MZW5ndGgoKSA+IDApIHRhYmxlLlJlc2V0KHRhYmxlLkxlbmd0aCgpIC0gMSk7IH0KICAgIGlu
dCAgICAgICAgU2l6ZSgpICAgICAgICAgeyByZXR1cm4gdGFibGUuTGVuZ3RoKCk7IH0KICAgIFN5
bWJvbFNldCAqVG9wKCkgICAgICAgICAgeyByZXR1cm4gKFN5bWJvbFNldCAqKSAodGFibGUuTGVu
Z3RoKCkgPiAwID8gdGFibGVbdGFibGUuTGVuZ3RoKCkgLSAxXSA6IF9fbnVsbCApOyB9Cgpwcml2
YXRlOgogICAgVHVwbGU8U3ltYm9sU2V0ICo+IHRhYmxlOwp9OwoKCiAKIAogCmNsYXNzIFN0YXRl
bWVudFN0YWNrCnsKcHVibGljOgogICAgdm9pZCBQdXNoKEFzdCAqc3RtdCkgeyBpbmZvLk5leHQo
KSA9IHN0bXQ7IH0KICAgIHZvaWQgUG9wKCkgICAgICAgICAgIHsgaWYgKGluZm8uTGVuZ3RoKCkg
PiAwKSBpbmZvLlJlc2V0KGluZm8uTGVuZ3RoKCkgLSAxKTsgfQogICAgaW50IFNpemUoKSAgICAg
ICAgICAgeyByZXR1cm4gaW5mby5MZW5ndGgoKTsgfQogICAgQXN0ICpUb3AoKSAgICAgICAgICAg
eyByZXR1cm4gKEFzdCAqKSAoaW5mby5MZW5ndGgoKSA+IDAgPyBpbmZvW2luZm8uTGVuZ3RoKCkg
LSAxXSA6IF9fbnVsbCApOyB9CgogICAgQXN0ICpvcGVyYXRvcltdKGNvbnN0IGludCBpKSB7IHJl
dHVybiBpbmZvW2ldOyB9Cgpwcml2YXRlOgogICAgVHVwbGU8QXN0ICo+IGluZm87Cn07CgoKIAog
CiAKY2xhc3MgQmxvY2tTdGFjawp7CnB1YmxpYzoKICAgIGludCBtYXhfc2l6ZTsKCiAgICB2b2lk
IFB1c2goQXN0QmxvY2sgKmJsb2NrXykKICAgIHsKICAgICAgICBibG9jay5OZXh0KCkgPSBibG9j
a187CiAgICAgICAgaW5kZXguTmV4dCgpID0gMDsKICAgICAgICBpZiAoYmxvY2suTGVuZ3RoKCkg
PiBtYXhfc2l6ZSkKICAgICAgICAgICAgbWF4X3NpemUgPSBibG9jay5MZW5ndGgoKTsKICAgIH0K
CiAgICB2b2lkIFBvcCgpCiAgICB7CiAgICAgICAgaW50IGxlbiA9IGJsb2NrLkxlbmd0aCgpIC0g
MTsKICAgICAgICBpZiAobGVuID49IDApCiAgICAgICAgewogICAgICAgICAgICBibG9jay5SZXNl
dChsZW4pOwogICAgICAgICAgICBpbmRleC5SZXNldChsZW4pOwogICAgICAgIH0KICAgIH0KCiAg
ICBpbnQgU2l6ZSgpIHsgcmV0dXJuIGJsb2NrLkxlbmd0aCgpOyB9CiAgICBBc3RCbG9jayAqVG9w
QmxvY2soKSB7IHJldHVybiAoQXN0QmxvY2sgKikgKGJsb2NrLkxlbmd0aCgpID4gMCA/IGJsb2Nr
W2Jsb2NrLkxlbmd0aCgpIC0gMV0gOiBfX251bGwgKTsgfQoKICAgIEFzdEJsb2NrICpvcGVyYXRv
cltdKGNvbnN0IGludCBpKSB7IHJldHVybiBibG9ja1tpXTsgfQoKICAgIGludCAmVG9wTWF4RW5j
bG9zZWRWYXJpYWJsZUluZGV4KCkKICAgIHsKICAgICAgICBpZiAoaW5kZXguTGVuZ3RoKCkgPD0g
MCkKICAgICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBmYWxzZSApID8gMCA6CShfX2Fz
c2VydF9mYWlsICgiZmFsc2UiICwgIi4uLy4uL2ppa2VzL3NyYy9zZW1hbnRpYy5oIiwgMTY4LCBf
X1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwogICAgICAgIHJldHVybiBpbmRleFtpbmRleC5M
ZW5ndGgoKSAtIDFdOwogICAgfQoKICAgIEJsb2NrU3RhY2soKSA6IG1heF9zaXplKDApIHt9Cgpw
cml2YXRlOgogICAgVHVwbGU8QXN0QmxvY2sgKj4gYmxvY2s7CiAgICBUdXBsZTxpbnQ+IGluZGV4
Owp9OwoKCiAKIAogCmNsYXNzIERlZmluaXRlRmluYWxBc3NpZ25tZW50U3RhY2sKewpwdWJsaWM6
CiAgICB2b2lkIFB1c2goKSB7IGluZm8uTmV4dCgpLlJlc2V0KCk7IH0KICAgIHZvaWQgUG9wKCkg
IHsgaWYgKGluZm8uTGVuZ3RoKCkgPiAwKSBpbmZvLlJlc2V0KGluZm8uTGVuZ3RoKCkgLSAxKTsg
fQogICAgaW50IFNpemUoKSAgeyByZXR1cm4gaW5mby5MZW5ndGgoKTsgfQogICAgVHVwbGUgPEFz
dEV4cHJlc3Npb24gKj4gJlRvcCgpICB7IGlmIChpbmZvLkxlbmd0aCgpID09IDApIChzdGF0aWNf
Y2FzdDx2b2lkPiAgKCggZmFsc2UgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImZhbHNlIiAsICIu
Li8uLi9qaWtlcy9zcmMvc2VtYW50aWMuaCIsIDE4OSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAw
KSkpIDsgcmV0dXJuIGluZm9baW5mby5MZW5ndGgoKSAtIDFdOyB9Cgpwcml2YXRlOgogICAgVHVw
bGU8IFR1cGxlPEFzdEV4cHJlc3Npb24gKj4gPiBpbmZvOwp9OwoKCiAKIAogCmNsYXNzIERlZmlu
aXRlU2V0cwp7CnB1YmxpYzoKICAgIERlZmluaXRlU2V0cyhpbnQgc2V0X3NpemUpIDogYnJlYWtf
c2V0KHNldF9zaXplKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWVf
c2V0KHNldF9zaXplKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3Nl
dChzZXRfc2l6ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93X3NldChz
ZXRfc2l6ZSkKICAgIHt9CgogICAgQml0U2V0IGJyZWFrX3NldCwKICAgICAgICAgICBjb250aW51
ZV9zZXQsCiAgICAgICAgICAgcmV0dXJuX3NldCwKICAgICAgICAgICB0aHJvd19zZXQ7CgogICAg
dm9pZCBVbml2ZXJzZUluaXQoKQogICAgewogICAgICAgIGJyZWFrX3NldC5TZXRVbml2ZXJzZSgp
OwogICAgICAgIGNvbnRpbnVlX3NldC5TZXRVbml2ZXJzZSgpOwogICAgICAgIHJldHVybl9zZXQu
U2V0VW5pdmVyc2UoKTsKICAgICAgICB0aHJvd19zZXQuU2V0VW5pdmVyc2UoKTsKICAgIH0KCiAg
ICB2b2lkIEVtcHR5SW5pdCgpCiAgICB7CiAgICAgICAgYnJlYWtfc2V0LlNldEVtcHR5KCk7CiAg
ICAgICAgY29udGludWVfc2V0LlNldEVtcHR5KCk7CiAgICAgICAgcmV0dXJuX3NldC5TZXRFbXB0
eSgpOwogICAgICAgIHRocm93X3NldC5TZXRFbXB0eSgpOwogICAgfQp9OwoKCiAKIAogCmNsYXNz
IERlZmluaXRlQmxvY2tTdGFjawp7CnB1YmxpYzoKCiAgICB2b2lkIFB1c2goQXN0QmxvY2sgKmJs
b2NrXykKICAgIHsKICAgICAgICBkZWZpbml0ZV9zZXRzW3RvcF9pbmRleF0gLT4gVW5pdmVyc2VJ
bml0KCk7CiAgICAgICAgZmluYWxfc2V0c1t0b3BfaW5kZXhdIC0+IEVtcHR5SW5pdCgpOwoKICAg
ICAgICBpZiAobG9jYWxseV9kZWZpbmVkX3ZhcmlhYmxlcykKICAgICAgICB7CiAgICAgICAgICAg
IGlmICh0b3BfaW5kZXggPT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbWVtc2V0
KGxvY2FsX3ZhcmlhYmxlc1t0b3BfaW5kZXhdLCAwLCBsb2NhbGx5X2RlZmluZWRfdmFyaWFibGVz
W3RvcF9pbmRleF0gLT4gU2l6ZSgpICogc2l6ZW9mKFZhcmlhYmxlU3ltYm9sICopKTsKICAgICAg
ICAgICAgICAgIGxvY2FsbHlfZGVmaW5lZF92YXJpYWJsZXNbdG9wX2luZGV4XSAtPiBTZXRFbXB0
eSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgbWVtbW92ZShsb2NhbF92YXJpYWJsZXNbdG9wX2luZGV4XSwKICAgICAgICAgICAg
ICAgICAgICAgICAgbG9jYWxfdmFyaWFibGVzW3RvcF9pbmRleCAtIDFdLAogICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhbGx5X2RlZmluZWRfdmFyaWFibGVzW3RvcF9pbmRleF0gLT4gU2l6ZSgp
ICogc2l6ZW9mKFZhcmlhYmxlU3ltYm9sICopKTsKICAgICAgICAgICAgICAgICpsb2NhbGx5X2Rl
ZmluZWRfdmFyaWFibGVzW3RvcF9pbmRleF0gPSAqbG9jYWxseV9kZWZpbmVkX3ZhcmlhYmxlc1t0
b3BfaW5kZXggLSAxXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgYmxvY2tbdG9w
X2luZGV4XSA9IGJsb2NrXzsKICAgICAgICB0b3BfaW5kZXgrKzsKICAgIH0KCiAgICB2b2lkIFBv
cCgpCiAgICB7CiAgICAgICAgaWYgKHRvcF9pbmRleCA+IDApCiAgICAgICAgICAgICB0b3BfaW5k
ZXgtLTsKICAgICAgICBlbHNlIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggZmFsc2UgKSA/IDAgOgko
X19hc3NlcnRfZmFpbCAoImZhbHNlIiAsICIuLi8uLi9qaWtlcy9zcmMvc2VtYW50aWMuaCIsIDI2
NywgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgIH0KCiAgICBpbnQgU2l6ZSgpICAg
ICAgICAgICAgICAgICB7IHJldHVybiB0b3BfaW5kZXg7IH0KICAgIEFzdEJsb2NrICpCbG9jayhp
bnQgaSkgICAgIHsgcmV0dXJuIGJsb2NrW2ldOyB9CiAgICBBc3RCbG9jayAqVG9wQmxvY2soKSAg
ICAgICB7IChzdGF0aWNfY2FzdDx2b2lkPiAgKCggdG9wX2luZGV4ID4gMCApID8gMCA6CShfX2Fz
c2VydF9mYWlsICgidG9wX2luZGV4ID4gMCIgLCAiLi4vLi4vamlrZXMvc3JjL3NlbWFudGljLmgi
LCAyNzIsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7IHJldHVybiBibG9ja1t0b3BfaW5k
ZXggLSAxXTsgfQoKICAgIFZhcmlhYmxlU3ltYm9sICoqVG9wTG9jYWxWYXJpYWJsZXMoKSB7IChz
dGF0aWNfY2FzdDx2b2lkPiAgKCggdG9wX2luZGV4ID4gMCAmJiBsb2NhbF92YXJpYWJsZXMgKSA/
IDAgOgkoX19hc3NlcnRfZmFpbCAoInRvcF9pbmRleCA+IDAgJiYgbG9jYWxfdmFyaWFibGVzIiAs
ICIuLi8uLi9qaWtlcy9zcmMvc2VtYW50aWMuaCIsIDI3NCwgX19QUkVUVFlfRlVOQ1RJT05fXyAp
LCAwKSkpIDsgcmV0dXJuIGxvY2FsX3ZhcmlhYmxlc1t0b3BfaW5kZXggLSAxXTsgfQogICAgQml0
U2V0ICpUb3BMb2NhbGx5RGVmaW5lZFZhcmlhYmxlcygpIHsgKHN0YXRpY19jYXN0PHZvaWQ+ICAo
KCB0b3BfaW5kZXggPiAwICYmIGxvY2FsbHlfZGVmaW5lZF92YXJpYWJsZXMgKSA/IDAgOgkoX19h
c3NlcnRfZmFpbCAoInRvcF9pbmRleCA+IDAgJiYgbG9jYWxseV9kZWZpbmVkX3ZhcmlhYmxlcyIg
LCAiLi4vLi4vamlrZXMvc3JjL3NlbWFudGljLmgiLCAyNzUsIF9fUFJFVFRZX0ZVTkNUSU9OX18g
KSwgMCkpKSA7IHJldHVybiBsb2NhbGx5X2RlZmluZWRfdmFyaWFibGVzW3RvcF9pbmRleCAtIDFd
OyB9CgogICAgQml0U2V0ICZCcmVha1NldChpbnQgaSkgICAgeyByZXR1cm4gZGVmaW5pdGVfc2V0
c1tpXSAtPiBicmVha19zZXQ7IH0KICAgIEJpdFNldCAmQ29udGludWVTZXQoaW50IGkpIHsgcmV0
dXJuIGRlZmluaXRlX3NldHNbaV0gLT4gY29udGludWVfc2V0OyB9CiAgICBCaXRTZXQgJlJldHVy
blNldChpbnQgaSkgICB7IHJldHVybiBkZWZpbml0ZV9zZXRzW2ldIC0+IHJldHVybl9zZXQ7IH0K
ICAgIEJpdFNldCAmVGhyb3dTZXQoaW50IGkpICAgIHsgcmV0dXJuIGRlZmluaXRlX3NldHNbaV0g
LT4gdGhyb3dfc2V0OyB9CgogICAgQml0U2V0ICZUb3BCcmVha1NldCgpICAgICAgeyAoc3RhdGlj
X2Nhc3Q8dm9pZD4gICgoIHRvcF9pbmRleCA+IDAgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInRv
cF9pbmRleCA+IDAiICwgIi4uLy4uL2ppa2VzL3NyYy9zZW1hbnRpYy5oIiwgMjgyLCBfX1BSRVRU
WV9GVU5DVElPTl9fICksIDApKSkgOyByZXR1cm4gZGVmaW5pdGVfc2V0c1t0b3BfaW5kZXggLSAx
XSAtPiBicmVha19zZXQ7IH0KICAgIEJpdFNldCAmVG9wQ29udGludWVTZXQoKSAgIHsgKHN0YXRp
Y19jYXN0PHZvaWQ+ICAoKCB0b3BfaW5kZXggPiAwICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJ0
b3BfaW5kZXggPiAwIiAsICIuLi8uLi9qaWtlcy9zcmMvc2VtYW50aWMuaCIsIDI4MywgX19QUkVU
VFlfRlVOQ1RJT05fXyApLCAwKSkpIDsgcmV0dXJuIGRlZmluaXRlX3NldHNbdG9wX2luZGV4IC0g
MV0gLT4gY29udGludWVfc2V0OyB9CiAgICBCaXRTZXQgJlRvcFJldHVyblNldCgpICAgICB7IChz
dGF0aWNfY2FzdDx2b2lkPiAgKCggdG9wX2luZGV4ID4gMCApID8gMCA6CShfX2Fzc2VydF9mYWls
ICgidG9wX2luZGV4ID4gMCIgLCAiLi4vLi4vamlrZXMvc3JjL3NlbWFudGljLmgiLCAyODQsIF9f
UFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7IHJldHVybiBkZWZpbml0ZV9zZXRzW3RvcF9pbmRl
eCAtIDFdIC0+IHJldHVybl9zZXQ7IH0KICAgIEJpdFNldCAmVG9wVGhyb3dTZXQoKSAgICAgIHsg
KHN0YXRpY19jYXN0PHZvaWQ+ICAoKCB0b3BfaW5kZXggPiAwICkgPyAwIDoJKF9fYXNzZXJ0X2Zh
aWwgKCJ0b3BfaW5kZXggPiAwIiAsICIuLi8uLi9qaWtlcy9zcmMvc2VtYW50aWMuaCIsIDI4NSwg
X19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsgcmV0dXJuIGRlZmluaXRlX3NldHNbdG9wX2lu
ZGV4IC0gMV0gLT4gdGhyb3dfc2V0OyB9CgogICAgQml0U2V0ICZUb3BFeGl0U2V0KEJpdFNldCAm
c3RhcnRfc2V0KQogICAgewogICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggdG9wX2luZGV4
ID4gMCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgidG9wX2luZGV4ID4gMCIgLCAiLi4vLi4vamlr
ZXMvc3JjL3NlbWFudGljLmgiLCAyODksIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7Cgog
ICAgICAgIGV4aXRfc2V0ICA9IHN0YXJ0X3NldDsKICAgICAgICBleGl0X3NldCAqPSBUb3BCcmVh
a1NldCgpOwogICAgICAgIGV4aXRfc2V0ICo9IFRvcENvbnRpbnVlU2V0KCk7CiAgICAgICAgZXhp
dF9zZXQgKj0gVG9wUmV0dXJuU2V0KCk7CiAgICAgICAgZXhpdF9zZXQgKj0gVG9wVGhyb3dTZXQo
KTsKCiAgICAgICAgcmV0dXJuIGV4aXRfc2V0OwogICAgfQoKICAgIEJpdFNldCAmRmluYWxCcmVh
a1NldChpbnQgaSkgICAgeyByZXR1cm4gZmluYWxfc2V0c1tpXSAtPiBicmVha19zZXQ7IH0KICAg
IEJpdFNldCAmRmluYWxDb250aW51ZVNldChpbnQgaSkgeyByZXR1cm4gZmluYWxfc2V0c1tpXSAt
PiBjb250aW51ZV9zZXQ7IH0KICAgIEJpdFNldCAmRmluYWxSZXR1cm5TZXQoaW50IGkpICAgeyBy
ZXR1cm4gZmluYWxfc2V0c1tpXSAtPiByZXR1cm5fc2V0OyB9CiAgICBCaXRTZXQgJkZpbmFsVGhy
b3dTZXQoaW50IGkpICAgIHsgcmV0dXJuIGZpbmFsX3NldHNbaV0gLT4gdGhyb3dfc2V0OyB9Cgog
ICAgQml0U2V0ICZUb3BGaW5hbEJyZWFrU2V0KCkgICAgICB7IChzdGF0aWNfY2FzdDx2b2lkPiAg
KCggdG9wX2luZGV4ID4gMCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgidG9wX2luZGV4ID4gMCIg
LCAiLi4vLi4vamlrZXMvc3JjL3NlbWFudGljLmgiLCAzMDUsIF9fUFJFVFRZX0ZVTkNUSU9OX18g
KSwgMCkpKSA7IHJldHVybiBmaW5hbF9zZXRzW3RvcF9pbmRleCAtIDFdIC0+IGJyZWFrX3NldDsg
fQogICAgQml0U2V0ICZUb3BGaW5hbENvbnRpbnVlU2V0KCkgICB7IChzdGF0aWNfY2FzdDx2b2lk
PiAgKCggdG9wX2luZGV4ID4gMCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgidG9wX2luZGV4ID4g
MCIgLCAiLi4vLi4vamlrZXMvc3JjL3NlbWFudGljLmgiLCAzMDYsIF9fUFJFVFRZX0ZVTkNUSU9O
X18gKSwgMCkpKSA7IHJldHVybiBmaW5hbF9zZXRzW3RvcF9pbmRleCAtIDFdIC0+IGNvbnRpbnVl
X3NldDsgfQogICAgQml0U2V0ICZUb3BGaW5hbFJldHVyblNldCgpICAgICB7IChzdGF0aWNfY2Fz
dDx2b2lkPiAgKCggdG9wX2luZGV4ID4gMCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgidG9wX2lu
ZGV4ID4gMCIgLCAiLi4vLi4vamlrZXMvc3JjL3NlbWFudGljLmgiLCAzMDcsIF9fUFJFVFRZX0ZV
TkNUSU9OX18gKSwgMCkpKSA7IHJldHVybiBmaW5hbF9zZXRzW3RvcF9pbmRleCAtIDFdIC0+IHJl
dHVybl9zZXQ7IH0KICAgIEJpdFNldCAmVG9wRmluYWxUaHJvd1NldCgpICAgICAgeyAoc3RhdGlj
X2Nhc3Q8dm9pZD4gICgoIHRvcF9pbmRleCA+IDAgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInRv
cF9pbmRleCA+IDAiICwgIi4uLy4uL2ppa2VzL3NyYy9zZW1hbnRpYy5oIiwgMzA4LCBfX1BSRVRU
WV9GVU5DVElPTl9fICksIDApKSkgOyByZXR1cm4gZmluYWxfc2V0c1t0b3BfaW5kZXggLSAxXSAt
PiB0aHJvd19zZXQ7IH0KCiAgICBCaXRTZXQgJlRvcEZpbmFsRXhpdFNldChCaXRTZXQgJnN0YXJ0
X3NldCkKICAgIHsKICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIHRvcF9pbmRleCA+IDAg
KSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInRvcF9pbmRleCA+IDAiICwgIi4uLy4uL2ppa2VzL3Ny
Yy9zZW1hbnRpYy5oIiwgMzEyLCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgICAg
ICBleGl0X3NldCAgPSBzdGFydF9zZXQ7CiAgICAgICAgZXhpdF9zZXQgKz0gVG9wRmluYWxCcmVh
a1NldCgpOwogICAgICAgIGV4aXRfc2V0ICs9IFRvcEZpbmFsQ29udGludWVTZXQoKTsKICAgICAg
ICBleGl0X3NldCArPSBUb3BGaW5hbFJldHVyblNldCgpOwogICAgICAgIGV4aXRfc2V0ICs9IFRv
cEZpbmFsVGhyb3dTZXQoKTsKCiAgICAgICAgcmV0dXJuIGV4aXRfc2V0OwogICAgfQoKICAgIERl
ZmluaXRlQmxvY2tTdGFjayhDb250cm9sICZjb250cm9sLCBpbnQgc3RhY2tfc2l6ZV8sIGludCBz
ZXRfc2l6ZSkgOiBzdGFja19zaXplKHN0YWNrX3NpemVfKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Bf
aW5kZXgoMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdF9zZXQoc2V0X3NpemUpCiAgICB7CiAgICAg
ICAgYmxvY2sgPSBuZXcgQXN0QmxvY2sqW3N0YWNrX3NpemVdOwogICAgICAgIGRlZmluaXRlX3Nl
dHMgPSBuZXcgRGVmaW5pdGVTZXRzKltzdGFja19zaXplXTsKICAgICAgICBmaW5hbF9zZXRzID0g
bmV3IERlZmluaXRlU2V0cypbc3RhY2tfc2l6ZV07CiAgICAgICAgbG9jYWxfdmFyaWFibGVzID0g
KFZhcmlhYmxlU3ltYm9sICoqKikgKGNvbnRyb2wub3B0aW9uLmcgPyBuZXcgVmFyaWFibGVTeW1i
b2wqKltzdGFja19zaXplXSA6IF9fbnVsbCApOwogICAgICAgIGxvY2FsbHlfZGVmaW5lZF92YXJp
YWJsZXMgPSAoQml0U2V0ICoqKSAoY29udHJvbC5vcHRpb24uZyA/IG5ldyBCaXRTZXQqW3N0YWNr
X3NpemVdIDogX19udWxsICk7CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhY2tfc2l6
ZTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgZGVmaW5pdGVfc2V0c1tpXSA9IG5ldyBEZWZp
bml0ZVNldHMoc2V0X3NpemUpOwogICAgICAgICAgICBmaW5hbF9zZXRzW2ldID0gbmV3IERlZmlu
aXRlU2V0cyhzZXRfc2l6ZSk7CiAgICAgICAgICAgIGlmIChsb2NhbF92YXJpYWJsZXMpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIGxvY2FsX3ZhcmlhYmxlc1tpXSA9IG5ldyBWYXJpYWJs
ZVN5bWJvbCpbc2V0X3NpemVdOwogICAgICAgICAgICAgICAgbG9jYWxseV9kZWZpbmVkX3Zhcmlh
Ymxlc1tpXSA9IG5ldyBCaXRTZXQoc2V0X3NpemUpOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgfQoKICAgIH5EZWZpbml0ZUJsb2NrU3RhY2soKQogICAgewogICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc3RhY2tfc2l6ZTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgZGVsZXRlIGRl
ZmluaXRlX3NldHNbaV07CiAgICAgICAgICAgIGRlbGV0ZSBmaW5hbF9zZXRzW2ldOwogICAgICAg
ICAgICBpZiAobG9jYWxfdmFyaWFibGVzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBk
ZWxldGUgW10gbG9jYWxfdmFyaWFibGVzW2ldOwogICAgICAgICAgICAgICAgZGVsZXRlIGxvY2Fs
bHlfZGVmaW5lZF92YXJpYWJsZXNbaV07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg
IGRlbGV0ZSBbXSBibG9jazsKICAgICAgICBkZWxldGUgW10gZGVmaW5pdGVfc2V0czsKICAgICAg
ICBkZWxldGUgW10gZmluYWxfc2V0czsKICAgICAgICBkZWxldGUgW10gbG9jYWxfdmFyaWFibGVz
OwogICAgICAgIGRlbGV0ZSBbXSBsb2NhbGx5X2RlZmluZWRfdmFyaWFibGVzOwogICAgfQoKcHJp
dmF0ZToKCiAgICBpbnQgc3RhY2tfc2l6ZSwKICAgICAgICB0b3BfaW5kZXg7CiAgICBBc3RCbG9j
ayAqKmJsb2NrOwoKICAgIERlZmluaXRlU2V0cyAqKmRlZmluaXRlX3NldHMsCiAgICAgICAgICAg
ICAgICAgKipmaW5hbF9zZXRzOwoKICAgIEJpdFNldCAqKmxvY2FsbHlfZGVmaW5lZF92YXJpYWJs
ZXM7CiAgICBWYXJpYWJsZVN5bWJvbCAqKipsb2NhbF92YXJpYWJsZXM7CgogICAgQml0U2V0IGV4
aXRfc2V0Owp9OwoKCiAKIAogCmNsYXNzIERlZmluaXRlVHJ5U3RhY2sKewpwdWJsaWM6CgogICAg
dm9pZCBQdXNoKEFzdFRyeVN0YXRlbWVudCAqdHJ5X3N0YXRlbWVudF8pCiAgICB7CiAgICAgICAg
dGhpcyAtPiB0cnlfc3RhdGVtZW50W3RvcF9pbmRleF0gPSB0cnlfc3RhdGVtZW50XzsKICAgICAg
ICB0b3BfaW5kZXgrKzsKICAgIH0KCiAgICB2b2lkIFBvcCgpCiAgICB7CiAgICAgICAgaWYgKHRv
cF9pbmRleCA+IDApCiAgICAgICAgICAgICB0b3BfaW5kZXgtLTsKICAgICAgICBlbHNlIChzdGF0
aWNfY2FzdDx2b2lkPiAgKCggZmFsc2UgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImZhbHNlIiAs
ICIuLi8uLi9qaWtlcy9zcmMvc2VtYW50aWMuaCIsIDM5OCwgX19QUkVUVFlfRlVOQ1RJT05fXyAp
LCAwKSkpIDsKICAgIH0KCiAgICBpbnQgU2l6ZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyByZXR1cm4gdG9wX2luZGV4OyB9CiAgICBBc3RUcnlTdGF0ZW1lbnQgKlRyeVN0YXRlbWVudChp
bnQgaSkgeyByZXR1cm4gdHJ5X3N0YXRlbWVudFtpXTsgfQogICAgQXN0QmxvY2sgKkJsb2NrKGlu
dCBpKSAgICAgICAgICAgICAgIHsgcmV0dXJuIGJsb2NrW2ldOyB9CiAgICBBc3RCbG9jayAqVG9w
QmxvY2soKSAgICAgICAgICAgICAgICAgeyAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIHRvcF9pbmRl
eCA+IDAgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInRvcF9pbmRleCA+IDAiICwgIi4uLy4uL2pp
a2VzL3NyYy9zZW1hbnRpYy5oIiwgNDA0LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOyBy
ZXR1cm4gYmxvY2tbdG9wX2luZGV4IC0gMV07IH0KICAgIHZvaWQgU2V0VG9wQmxvY2soQXN0Qmxv
Y2sgKmJsb2NrXykgICB7IChzdGF0aWNfY2FzdDx2b2lkPiAgKCggdG9wX2luZGV4ID4gMCApID8g
MCA6CShfX2Fzc2VydF9mYWlsICgidG9wX2luZGV4ID4gMCIgLCAiLi4vLi4vamlrZXMvc3JjL3Nl
bWFudGljLmgiLCA0MDUsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7IGJsb2NrW3RvcF9p
bmRleCAtIDFdID0gYmxvY2tfOyB9CgogICAgRGVmaW5pdGVUcnlTdGFjayhpbnQgc3RhY2tfc2l6
ZV8pIDogc3RhY2tfc2l6ZShzdGFja19zaXplXyksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b3BfaW5kZXgoMCkKICAgIHsKICAgICAgICBibG9jayA9IG5ldyBBc3RC
bG9jaypbc3RhY2tfc2l6ZV07CiAgICAgICAgdHJ5X3N0YXRlbWVudCA9IG5ldyBBc3RUcnlTdGF0
ZW1lbnQqW3N0YWNrX3NpemVdOwogICAgfQoKICAgIH5EZWZpbml0ZVRyeVN0YWNrKCkKICAgIHsK
ICAgICAgICBkZWxldGUgW10gYmxvY2s7CiAgICAgICAgZGVsZXRlIFtdIHRyeV9zdGF0ZW1lbnQ7
CiAgICB9Cgpwcml2YXRlOgoKICAgIGludCBzdGFja19zaXplLAogICAgICAgIHRvcF9pbmRleDsK
ICAgIEFzdEJsb2NrICoqYmxvY2s7CiAgICBBc3RUcnlTdGF0ZW1lbnQgKip0cnlfc3RhdGVtZW50
Owp9OwoKCiAKIAogCmNsYXNzIFNlbWFudGljRW52aXJvbm1lbnQKewpwdWJsaWM6CgogICAgU2Vt
YW50aWMgKnNlbTsKICAgIFNlbWFudGljRW52aXJvbm1lbnQgKnByZXZpb3VzOwoKICAgIE1ldGhv
ZFN5bWJvbCAgICp0aGlzX21ldGhvZDsKICAgIFZhcmlhYmxlU3ltYm9sICp0aGlzX3ZhcmlhYmxl
OwogICAgQXN0ICAgICAgICAgICAgKmV4cGxpY2l0X2NvbnN0cnVjdG9yX2ludm9jYXRpb247CiAg
ICBBc3QgICAgICAgICAgICAqYXN0X2NvbnN0cnVjdDsKCiAgICBTeW1ib2xUYWJsZVN0YWNrIHN5
bWJvbF90YWJsZTsgIAogICAgRXhjZXB0aW9uVGFibGVTdGFjayB0cnlfZXhjZXB0aW9uX3RhYmxl
X3N0YWNrOwogICAgU3RhdGVtZW50U3RhY2sgdHJ5X3N0YXRlbWVudF9zdGFjaywKICAgICAgICAg
ICAgICAgICAgIGJyZWFrYWJsZV9zdGF0ZW1lbnRfc3RhY2ssCiAgICAgICAgICAgICAgICAgICBj
b250aW51YWJsZV9zdGF0ZW1lbnRfc3RhY2s7CiAgICBCbG9ja1N0YWNrIGJsb2NrX3N0YWNrOwoK
ICAgIFNlbWFudGljRW52aXJvbm1lbnQoU2VtYW50aWMgKnNlbV8sIFR5cGVTeW1ib2wgKnR5cGVf
LCBTZW1hbnRpY0Vudmlyb25tZW50ICpwcmV2aW91c18gPSBfX251bGwgKQogICAgICAgICAgICA6
IHNlbShzZW1fKSwKICAgICAgICAgICAgICBwcmV2aW91cyhwcmV2aW91c18pLAogICAgICAgICAg
ICAgIHRoaXNfbWV0aG9kKF9fbnVsbCApLAogICAgICAgICAgICAgIHRoaXNfdmFyaWFibGUoX19u
dWxsICksCiAgICAgICAgICAgICAgZXhwbGljaXRfY29uc3RydWN0b3JfaW52b2NhdGlvbihfX251
bGwgKSwKICAgICAgICAgICAgICBhc3RfY29uc3RydWN0KF9fbnVsbCApLAogICAgICAgICAgICAg
IF90eXBlKHR5cGVfKSwKICAgICAgICAgICAgICBuZXh0KF9fbnVsbCApCiAgICB7fQoKCiAgICB+
U2VtYW50aWNFbnZpcm9ubWVudCgpCiAgICB7CiAgICAgICAgZGVsZXRlIG5leHQ7ICAKICAgIH0K
CiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBTZW1hbnRpY0Vudmlyb25t
ZW50ICpHZXRFbnZpcm9ubWVudChBc3QgKmFzdCkKICAgIHsKICAgICAgICBTZW1hbnRpY0Vudmly
b25tZW50ICpjbG9uZSA9IG5ldyBTZW1hbnRpY0Vudmlyb25tZW50KHNlbSwgX3R5cGUsIF9fbnVs
bCApOwogICAgICAgIGNsb25lIC0+IHRoaXNfbWV0aG9kID0gdGhpcyAtPiB0aGlzX21ldGhvZDsK
ICAgICAgICBjbG9uZSAtPiB0aGlzX3ZhcmlhYmxlID0gdGhpcyAtPiB0aGlzX3ZhcmlhYmxlOwog
ICAgICAgIGNsb25lIC0+IGFzdF9jb25zdHJ1Y3QgPSBhc3Q7CiAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCB0aGlzIC0+IHN5bWJvbF90YWJsZS5TaXplKCk7IGkrKykKICAgICAgICAgICAgY2xv
bmUgLT4gc3ltYm9sX3RhYmxlLlB1c2godGhpcyAtPiBzeW1ib2xfdGFibGVbaV0pOwogICAgICAg
IGNsb25lIC0+IG5leHQgPSB0aGlzIC0+IG5leHQ7CiAgICAgICAgdGhpcyAtPiBuZXh0ID0gY2xv
bmU7CgogICAgICAgIHJldHVybiBjbG9uZTsKICAgIH0KCiAgICBUeXBlU3ltYm9sICpUeXBlKCkg
eyByZXR1cm4gX3R5cGU7IH0KCiAgICAgCiAgICAgCiAgICAgCiAgICBpbmxpbmUgYm9vbCBTdGF0
aWNSZWdpb24oKQogICAgewogICAgICAgIHJldHVybiAodGhpc192YXJpYWJsZSAmJiB0aGlzX3Zh
cmlhYmxlIC0+IEFDQ19TVEFUSUMoKSkgfHwKICAgICAgICAgICAgICAgKHRoaXNfbWV0aG9kICAg
JiYgdGhpc19tZXRob2QgLT4gQUNDX1NUQVRJQygpKSAgIHx8CiAgICAgICAgICAgICAgIChfdHlw
ZSAtPiBBQ0NfSU5URVJGQUNFKCkpOwogICAgfQoKcHJpdmF0ZToKCiAgICBUeXBlU3ltYm9sICpf
dHlwZTsKICAgIFNlbWFudGljRW52aXJvbm1lbnQgKm5leHQ7ICAKfTsKCgogCiAKIApjbGFzcyBT
ZW1hbnRpY0Vudmlyb25tZW50U3RhY2sKewpwdWJsaWM6CiAgICB2b2lkIFB1c2goU2VtYW50aWNF
bnZpcm9ubWVudCAqZW52KSB7IGluZm8uTmV4dCgpID0gZW52OyB9CgogICAgdm9pZCBQb3AoKQog
ICAgewogICAgICAgIGlmIChpbmZvLkxlbmd0aCgpID4gMCkKICAgICAgICAgICAgaW5mby5SZXNl
dChpbmZvLkxlbmd0aCgpIC0gMSk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpbnQgU2l6
ZSgpIHsgcmV0dXJuIGluZm8uTGVuZ3RoKCk7IH0KCiAgICBTZW1hbnRpY0Vudmlyb25tZW50ICpU
b3AoKSB7IHJldHVybiAoU2VtYW50aWNFbnZpcm9ubWVudCAqKSAoaW5mby5MZW5ndGgoKSA+IDAg
PyBpbmZvW2luZm8uTGVuZ3RoKCkgLSAxXSA6IF9fbnVsbCApOyB9CgogICAgU2VtYW50aWNFbnZp
cm9ubWVudCAqb3BlcmF0b3JbXShjb25zdCBpbnQgaSkgeyByZXR1cm4gaW5mb1tpXTsgfQoKcHJp
dmF0ZToKICAgIFR1cGxlPFNlbWFudGljRW52aXJvbm1lbnQgKj4gaW5mbzsKfTsKCgpjbGFzcyBT
ZW1hbnRpYwp7CnB1YmxpYzoKICAgICAKICAgICAKICAgICAKICAgIENvbnRyb2wgJmNvbnRyb2w7
CiAgICBGaWxlU3ltYm9sICpzb3VyY2VfZmlsZV9zeW1ib2w7CiAgICBMZXhTdHJlYW0gKmxleF9z
dHJlYW07CiAgICBBc3RDb21waWxhdGlvblVuaXQgKmNvbXBpbGF0aW9uX3VuaXQ7CiAgICBEaXJl
Y3RvcnlTeW1ib2wgKmRpcmVjdG9yeV9zeW1ib2w7CgogICAgU3ltYm9sU2V0IHR5cGVzX3RvX2Jl
X3Byb2Nlc3NlZDsKCiAgICBpbnQgcmV0dXJuX2NvZGU7CgogICAgUGFja2FnZVN5bWJvbCAqUGFj
a2FnZSgpIHsgcmV0dXJuIHRoaXNfcGFja2FnZTsgfQoKICAgIHZvaWQgQ2hlY2tQYWNrYWdlKCk7
CiAgICB2b2lkIFByb2Nlc3NUeXBlTmFtZXMoKTsKICAgIHZvaWQgUHJvY2Vzc0ltcG9ydHMoKTsK
ICAgIHZvaWQgUHJvY2Vzc1N1cGVyVHlwZURlcGVuZGVuY2VzKEFzdENsYXNzRGVjbGFyYXRpb24g
Kik7CiAgICB2b2lkIFByb2Nlc3NTdXBlclR5cGVEZXBlbmRlbmNlcyhBc3RJbnRlcmZhY2VEZWNs
YXJhdGlvbiAqKTsKCiAgICBMaXRlcmFsVmFsdWUgKkNvbXB1dGVGaW5hbFZhbHVlKEFzdFZhcmlh
YmxlRGVjbGFyYXRvciAqKTsKCiAgICBTZW1hbnRpYyhDb250cm9sICZjb250cm9sXywgRmlsZVN5
bWJvbCAqZmlsZV9zeW1ib2xfKSA6IGNvbnRyb2woY29udHJvbF8pLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfZmlsZV9z
eW1ib2woZmlsZV9zeW1ib2xfKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGV4X3N0cmVhbShmaWxlX3N5bWJvbF8gLT4gbGV4X3N0
cmVhbSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXBpbGF0aW9uX3VuaXQoZmlsZV9zeW1ib2xfIC0+IGNvbXBpbGF0aW9uX3Vu
aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkaXJlY3Rvcnlfc3ltYm9sKGZpbGVfc3ltYm9sXyAtPiBkaXJlY3Rvcnlfc3ltYm9s
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuX2NvZGUoMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKF9fbnVsbCApLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzX3BhY2thZ2Uo
ZmlsZV9zeW1ib2xfIC0+IHBhY2thZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0ZWx5X2Fzc2lnbmVkX3ZhcmlhYmxl
cyhfX251bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcG9zc2libHlfYXNzaWduZWRfZmluYWxzKF9fbnVsbCApLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml2
ZXJzZShfX251bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmaW5pdGVfYmxvY2tfc3RhY2soX19udWxsICksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmlu
aXRlX3RyeV9zdGFjayhfX251bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGVfZmluYWxfYXNzaWdubWVudF9zdGFj
ayhfX251bGwgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmaW5pdGVfdmlzaWJsZV92YXJpYWJsZXMoX19udWxsICkKICAgIHsK
ICAgICAgICBQcm9jZXNzRXhwck9yU3RtdFtBc3Q6OkxPQ0FMX1ZBUklBQkxFX0RFQ0xBUkFUSU9O
XSA9ICZTZW1hbnRpYzo6UHJvY2Vzc0xvY2FsVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudDsK
ICAgICAgICBQcm9jZXNzRXhwck9yU3RtdFtBc3Q6OkJMT0NLXSAgICAgICAgICAgICAgICAgICAg
ICA9ICZTZW1hbnRpYzo6UHJvY2Vzc0Jsb2NrOwogICAgICAgIFByb2Nlc3NFeHByT3JTdG10W0Fz
dDo6RVhQUkVTU0lPTl9TVEFURU1FTlRdICAgICAgID0gJlNlbWFudGljOjpQcm9jZXNzRXhwcmVz
c2lvblN0YXRlbWVudDsKICAgICAgICBQcm9jZXNzRXhwck9yU3RtdFtBc3Q6OlNZTkNIUk9OSVpF
RF9TVEFURU1FTlRdICAgICA9ICZTZW1hbnRpYzo6UHJvY2Vzc1N5bmNocm9uaXplZFN0YXRlbWVu
dDsKICAgICAgICBQcm9jZXNzRXhwck9yU3RtdFtBc3Q6OklGXSAgICAgICAgICAgICAgICAgICAg
ICAgICA9ICZTZW1hbnRpYzo6UHJvY2Vzc0lmU3RhdGVtZW50OwogICAgICAgIFByb2Nlc3NFeHBy
T3JTdG10W0FzdDo6V0hJTEVdICAgICAgICAgICAgICAgICAgICAgID0gJlNlbWFudGljOjpQcm9j
ZXNzV2hpbGVTdGF0ZW1lbnQ7CiAgICAgICAgUHJvY2Vzc0V4cHJPclN0bXRbQXN0OjpGT1JdICAg
ICAgICAgICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OlByb2Nlc3NGb3JTdGF0ZW1lbnQ7CiAg
ICAgICAgUHJvY2Vzc0V4cHJPclN0bXRbQXN0OjpTV0lUQ0hdICAgICAgICAgICAgICAgICAgICAg
PSAmU2VtYW50aWM6OlByb2Nlc3NTd2l0Y2hTdGF0ZW1lbnQ7CiAgICAgICAgUHJvY2Vzc0V4cHJP
clN0bXRbQXN0OjpET10gICAgICAgICAgICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OlByb2Nl
c3NEb1N0YXRlbWVudDsKICAgICAgICBQcm9jZXNzRXhwck9yU3RtdFtBc3Q6OkJSRUFLXSAgICAg
ICAgICAgICAgICAgICAgICA9ICZTZW1hbnRpYzo6UHJvY2Vzc0JyZWFrU3RhdGVtZW50OwogICAg
ICAgIFByb2Nlc3NFeHByT3JTdG10W0FzdDo6Q09OVElOVUVdICAgICAgICAgICAgICAgICAgID0g
JlNlbWFudGljOjpQcm9jZXNzQ29udGludWVTdGF0ZW1lbnQ7CiAgICAgICAgUHJvY2Vzc0V4cHJP
clN0bXRbQXN0OjpSRVRVUk5dICAgICAgICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OlByb2Nl
c3NSZXR1cm5TdGF0ZW1lbnQ7CiAgICAgICAgUHJvY2Vzc0V4cHJPclN0bXRbQXN0OjpUSFJPV10g
ICAgICAgICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OlByb2Nlc3NUaHJvd1N0YXRlbWVudDsK
ICAgICAgICBQcm9jZXNzRXhwck9yU3RtdFtBc3Q6OlRSWV0gICAgICAgICAgICAgICAgICAgICAg
ICA9ICZTZW1hbnRpYzo6UHJvY2Vzc1RyeVN0YXRlbWVudDsKICAgICAgICBQcm9jZXNzRXhwck9y
U3RtdFtBc3Q6OkVNUFRZX1NUQVRFTUVOVF0gICAgICAgICAgICA9ICZTZW1hbnRpYzo6UHJvY2Vz
c0VtcHR5U3RhdGVtZW50OwogICAgICAgIFByb2Nlc3NFeHByT3JTdG10W0FzdDo6Q0xBU1NdICAg
ICAgICAgICAgICAgICAgICAgID0gJlNlbWFudGljOjpQcm9jZXNzQ2xhc3NEZWNsYXJhdGlvbjsK
CiAgICAgICAgUHJvY2Vzc0V4cHJPclN0bXRbQXN0OjpJREVOVElGSUVSXSAgICAgICAgICAgICAg
ID0gJlNlbWFudGljOjpQcm9jZXNzU2ltcGxlTmFtZTsKICAgICAgICBQcm9jZXNzRXhwck9yU3Rt
dFtBc3Q6OkRPVF0gICAgICAgICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OlByb2Nlc3NGaWVs
ZEFjY2VzczsKICAgICAgICBQcm9jZXNzRXhwck9yU3RtdFtBc3Q6OklOVEVHRVJfTElURVJBTF0g
ICAgICAgICAgPSAmU2VtYW50aWM6OlByb2Nlc3NJbnRlZ2VyTGl0ZXJhbDsKICAgICAgICBQcm9j
ZXNzRXhwck9yU3RtdFtBc3Q6OkxPTkdfTElURVJBTF0gICAgICAgICAgICAgPSAmU2VtYW50aWM6
OlByb2Nlc3NMb25nTGl0ZXJhbDsKICAgICAgICBQcm9jZXNzRXhwck9yU3RtdFtBc3Q6OkZMT0FU
SU5HX1BPSU5UX0xJVEVSQUxdICAgPSAmU2VtYW50aWM6OlByb2Nlc3NGbG9hdGluZ1BvaW50TGl0
ZXJhbDsKICAgICAgICBQcm9jZXNzRXhwck9yU3RtdFtBc3Q6OkRPVUJMRV9MSVRFUkFMXSAgICAg
ICAgICAgPSAmU2VtYW50aWM6OlByb2Nlc3NEb3VibGVMaXRlcmFsOwogICAgICAgIFByb2Nlc3NF
eHByT3JTdG10W0FzdDo6VFJVRV9MSVRFUkFMXSAgICAgICAgICAgICA9ICZTZW1hbnRpYzo6UHJv
Y2Vzc1RydWVMaXRlcmFsOwogICAgICAgIFByb2Nlc3NFeHByT3JTdG10W0FzdDo6RkFMU0VfTElU
RVJBTF0gICAgICAgICAgICA9ICZTZW1hbnRpYzo6UHJvY2Vzc0ZhbHNlTGl0ZXJhbDsKICAgICAg
ICBQcm9jZXNzRXhwck9yU3RtdFtBc3Q6OlNUUklOR19MSVRFUkFMXSAgICAgICAgICAgPSAmU2Vt
YW50aWM6OlByb2Nlc3NTdHJpbmdMaXRlcmFsOwogICAgICAgIFByb2Nlc3NFeHByT3JTdG10W0Fz
dDo6Q0hBUkFDVEVSX0xJVEVSQUxdICAgICAgICA9ICZTZW1hbnRpYzo6UHJvY2Vzc0NoYXJhY3Rl
ckxpdGVyYWw7CiAgICAgICAgUHJvY2Vzc0V4cHJPclN0bXRbQXN0OjpOVUxMX0xJVEVSQUxdICAg
ICAgICAgICAgID0gJlNlbWFudGljOjpQcm9jZXNzTnVsbExpdGVyYWw7CiAgICAgICAgUHJvY2Vz
c0V4cHJPclN0bXRbQXN0OjpBUlJBWV9BQ0NFU1NdICAgICAgICAgICAgID0gJlNlbWFudGljOjpQ
cm9jZXNzQXJyYXlBY2Nlc3M7CiAgICAgICAgUHJvY2Vzc0V4cHJPclN0bXRbQXN0OjpDQUxMXSAg
ICAgICAgICAgICAgICAgICAgID0gJlNlbWFudGljOjpQcm9jZXNzTWV0aG9kSW52b2NhdGlvbjsK
ICAgICAgICBQcm9jZXNzRXhwck9yU3RtdFtBc3Q6OlRISVNfRVhQUkVTU0lPTl0gICAgICAgICAg
PSAmU2VtYW50aWM6OlByb2Nlc3NUaGlzRXhwcmVzc2lvbjsKICAgICAgICBQcm9jZXNzRXhwck9y
U3RtdFtBc3Q6OlNVUEVSX0VYUFJFU1NJT05dICAgICAgICAgPSAmU2VtYW50aWM6OlByb2Nlc3NT
dXBlckV4cHJlc3Npb247CiAgICAgICAgUHJvY2Vzc0V4cHJPclN0bXRbQXN0OjpQQVJFTlRIRVNJ
WkVEX0VYUFJFU1NJT05dID0gJlNlbWFudGljOjpQcm9jZXNzUGFyZW50aGVzaXplZEV4cHJlc3Np
b247CiAgICAgICAgUHJvY2Vzc0V4cHJPclN0bXRbQXN0OjpDTEFTU19DUkVBVElPTl0gICAgICAg
ICAgID0gJlNlbWFudGljOjpQcm9jZXNzQ2xhc3NJbnN0YW5jZUNyZWF0aW9uRXhwcmVzc2lvbjsK
ICAgICAgICBQcm9jZXNzRXhwck9yU3RtdFtBc3Q6OkFSUkFZX0NSRUFUSU9OXSAgICAgICAgICAg
PSAmU2VtYW50aWM6OlByb2Nlc3NBcnJheUNyZWF0aW9uRXhwcmVzc2lvbjsKICAgICAgICBQcm9j
ZXNzRXhwck9yU3RtdFtBc3Q6OlBPU1RfVU5BUlldICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6
OlByb2Nlc3NQb3N0VW5hcnlFeHByZXNzaW9uOwogICAgICAgIFByb2Nlc3NFeHByT3JTdG10W0Fz
dDo6UFJFX1VOQVJZXSAgICAgICAgICAgICAgICA9ICZTZW1hbnRpYzo6UHJvY2Vzc1ByZVVuYXJ5
RXhwcmVzc2lvbjsKICAgICAgICBQcm9jZXNzRXhwck9yU3RtdFtBc3Q6OkNBU1RdICAgICAgICAg
ICAgICAgICAgICAgPSAmU2VtYW50aWM6OlByb2Nlc3NDYXN0RXhwcmVzc2lvbjsKICAgICAgICBQ
cm9jZXNzRXhwck9yU3RtdFtBc3Q6OkJJTkFSWV0gICAgICAgICAgICAgICAgICAgPSAmU2VtYW50
aWM6OlByb2Nlc3NCaW5hcnlFeHByZXNzaW9uOwogICAgICAgIFByb2Nlc3NFeHByT3JTdG10W0Fz
dDo6VFlQRV0gICAgICAgICAgICAgICAgICAgICA9ICZTZW1hbnRpYzo6UHJvY2Vzc1R5cGVFeHBy
ZXNzaW9uOwogICAgICAgIFByb2Nlc3NFeHByT3JTdG10W0FzdDo6Q09ORElUSU9OQUxdICAgICAg
ICAgICAgICA9ICZTZW1hbnRpYzo6UHJvY2Vzc0NvbmRpdGlvbmFsRXhwcmVzc2lvbjsKICAgICAg
ICBQcm9jZXNzRXhwck9yU3RtdFtBc3Q6OkFTU0lHTk1FTlRdICAgICAgICAgICAgICAgPSAmU2Vt
YW50aWM6OlByb2Nlc3NBc3NpZ25tZW50RXhwcmVzc2lvbjsKCiAgICAgICAgRGVmaW5pdGVTdG10
W0FzdDo6TE9DQUxfVkFSSUFCTEVfREVDTEFSQVRJT05dID0gJlNlbWFudGljOjpEZWZpbml0ZUxv
Y2FsVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudDsKICAgICAgICBEZWZpbml0ZVN0bXRbQXN0
OjpCTE9DS10gICAgICAgICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OkRlZmluaXRlQmxvY2s7
CiAgICAgICAgRGVmaW5pdGVTdG10W0FzdDo6RVhQUkVTU0lPTl9TVEFURU1FTlRdICAgICAgID0g
JlNlbWFudGljOjpEZWZpbml0ZUV4cHJlc3Npb25TdGF0ZW1lbnQ7CiAgICAgICAgRGVmaW5pdGVT
dG10W0FzdDo6U1lOQ0hST05JWkVEX1NUQVRFTUVOVF0gICAgID0gJlNlbWFudGljOjpEZWZpbml0
ZVN5bmNocm9uaXplZFN0YXRlbWVudDsKICAgICAgICBEZWZpbml0ZVN0bXRbQXN0OjpJRl0gICAg
ICAgICAgICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OkRlZmluaXRlSWZTdGF0ZW1lbnQ7CiAg
ICAgICAgRGVmaW5pdGVTdG10W0FzdDo6V0hJTEVdICAgICAgICAgICAgICAgICAgICAgID0gJlNl
bWFudGljOjpEZWZpbml0ZVdoaWxlU3RhdGVtZW50OwogICAgICAgIERlZmluaXRlU3RtdFtBc3Q6
OkZPUl0gICAgICAgICAgICAgICAgICAgICAgICA9ICZTZW1hbnRpYzo6RGVmaW5pdGVGb3JTdGF0
ZW1lbnQ7CiAgICAgICAgRGVmaW5pdGVTdG10W0FzdDo6U1dJVENIXSAgICAgICAgICAgICAgICAg
ICAgID0gJlNlbWFudGljOjpEZWZpbml0ZVN3aXRjaFN0YXRlbWVudDsKICAgICAgICBEZWZpbml0
ZVN0bXRbQXN0OjpET10gICAgICAgICAgICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OkRlZmlu
aXRlRG9TdGF0ZW1lbnQ7CiAgICAgICAgRGVmaW5pdGVTdG10W0FzdDo6QlJFQUtdICAgICAgICAg
ICAgICAgICAgICAgID0gJlNlbWFudGljOjpEZWZpbml0ZUJyZWFrU3RhdGVtZW50OwogICAgICAg
IERlZmluaXRlU3RtdFtBc3Q6OkNPTlRJTlVFXSAgICAgICAgICAgICAgICAgICA9ICZTZW1hbnRp
Yzo6RGVmaW5pdGVDb250aW51ZVN0YXRlbWVudDsKICAgICAgICBEZWZpbml0ZVN0bXRbQXN0OjpS
RVRVUk5dICAgICAgICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OkRlZmluaXRlUmV0dXJuU3Rh
dGVtZW50OwogICAgICAgIERlZmluaXRlU3RtdFtBc3Q6OlRIUk9XXSAgICAgICAgICAgICAgICAg
ICAgICA9ICZTZW1hbnRpYzo6RGVmaW5pdGVUaHJvd1N0YXRlbWVudDsKICAgICAgICBEZWZpbml0
ZVN0bXRbQXN0OjpUUlldICAgICAgICAgICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OkRlZmlu
aXRlVHJ5U3RhdGVtZW50OwogICAgICAgIERlZmluaXRlU3RtdFtBc3Q6OkVNUFRZX1NUQVRFTUVO
VF0gICAgICAgICAgICA9ICZTZW1hbnRpYzo6RGVmaW5pdGVFbXB0eVN0YXRlbWVudDsKICAgICAg
ICBEZWZpbml0ZVN0bXRbQXN0OjpDTEFTU10gICAgICAgICAgICAgICAgICAgICAgPSAmU2VtYW50
aWM6OkRlZmluaXRlQ2xhc3NEZWNsYXJhdGlvbjsKCiAgICAgICAgRGVmaW5pdGVFeHByW0FzdDo6
SURFTlRJRklFUl0gICAgICAgICAgICAgICA9ICZTZW1hbnRpYzo6RGVmaW5pdGVTaW1wbGVOYW1l
OwogICAgICAgIERlZmluaXRlRXhwcltBc3Q6OkRPVF0gICAgICAgICAgICAgICAgICAgICAgPSAm
U2VtYW50aWM6OkRlZmluaXRlRmllbGRBY2Nlc3M7CiAgICAgICAgRGVmaW5pdGVFeHByW0FzdDo6
QVJSQVlfQUNDRVNTXSAgICAgICAgICAgICA9ICZTZW1hbnRpYzo6RGVmaW5pdGVBcnJheUFjY2Vz
czsKICAgICAgICBEZWZpbml0ZUV4cHJbQXN0OjpDQUxMXSAgICAgICAgICAgICAgICAgICAgID0g
JlNlbWFudGljOjpEZWZpbml0ZU1ldGhvZEludm9jYXRpb247CiAgICAgICAgRGVmaW5pdGVFeHBy
W0FzdDo6UEFSRU5USEVTSVpFRF9FWFBSRVNTSU9OXSA9ICZTZW1hbnRpYzo6RGVmaW5pdGVQYXJl
bnRoZXNpemVkRXhwcmVzc2lvbjsKICAgICAgICBEZWZpbml0ZUV4cHJbQXN0OjpDTEFTU19DUkVB
VElPTl0gICAgICAgICAgID0gJlNlbWFudGljOjpEZWZpbml0ZUNsYXNzSW5zdGFuY2VDcmVhdGlv
bkV4cHJlc3Npb247CiAgICAgICAgRGVmaW5pdGVFeHByW0FzdDo6QVJSQVlfQ1JFQVRJT05dICAg
ICAgICAgICA9ICZTZW1hbnRpYzo6RGVmaW5pdGVBcnJheUNyZWF0aW9uRXhwcmVzc2lvbjsKICAg
ICAgICBEZWZpbml0ZUV4cHJbQXN0OjpQT1NUX1VOQVJZXSAgICAgICAgICAgICAgID0gJlNlbWFu
dGljOjpEZWZpbml0ZVBvc3RVbmFyeUV4cHJlc3Npb247CiAgICAgICAgRGVmaW5pdGVFeHByW0Fz
dDo6UFJFX1VOQVJZXSAgICAgICAgICAgICAgICA9ICZTZW1hbnRpYzo6RGVmaW5pdGVQcmVVbmFy
eUV4cHJlc3Npb247CiAgICAgICAgRGVmaW5pdGVFeHByW0FzdDo6Q0FTVF0gICAgICAgICAgICAg
ICAgICAgICA9ICZTZW1hbnRpYzo6RGVmaW5pdGVDYXN0RXhwcmVzc2lvbjsKICAgICAgICBEZWZp
bml0ZUV4cHJbQXN0OjpDSEVDS19BTkRfQ0FTVF0gICAgICAgICAgID0gJlNlbWFudGljOjpEZWZp
bml0ZUNhc3RFeHByZXNzaW9uOwogICAgICAgIERlZmluaXRlRXhwcltBc3Q6OkJJTkFSWV0gICAg
ICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OkRlZmluaXRlQmluYXJ5RXhwcmVzc2lvbjsKICAg
ICAgICBEZWZpbml0ZUV4cHJbQXN0OjpDT05ESVRJT05BTF0gICAgICAgICAgICAgID0gJlNlbWFu
dGljOjpEZWZpbml0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbjsKICAgICAgICBEZWZpbml0ZUV4cHJb
QXN0OjpBU1NJR05NRU5UXSAgICAgICAgICAgICAgID0gJlNlbWFudGljOjpEZWZpbml0ZUFzc2ln
bm1lbnRFeHByZXNzaW9uOwoKICAgICAgICBEZWZpbml0ZUV4cHJbQXN0OjpJTlRFR0VSX0xJVEVS
QUxdICAgICAgICAgID0gJlNlbWFudGljOjpEZWZpbml0ZURlZmF1bHRFeHByZXNzaW9uOwogICAg
ICAgIERlZmluaXRlRXhwcltBc3Q6OkxPTkdfTElURVJBTF0gICAgICAgICAgICAgPSAmU2VtYW50
aWM6OkRlZmluaXRlRGVmYXVsdEV4cHJlc3Npb247CiAgICAgICAgRGVmaW5pdGVFeHByW0FzdDo6
RkxPQVRJTkdfUE9JTlRfTElURVJBTF0gICA9ICZTZW1hbnRpYzo6RGVmaW5pdGVEZWZhdWx0RXhw
cmVzc2lvbjsKICAgICAgICBEZWZpbml0ZUV4cHJbQXN0OjpET1VCTEVfTElURVJBTF0gICAgICAg
ICAgID0gJlNlbWFudGljOjpEZWZpbml0ZURlZmF1bHRFeHByZXNzaW9uOwogICAgICAgIERlZmlu
aXRlRXhwcltBc3Q6OlRSVUVfTElURVJBTF0gICAgICAgICAgICAgPSAmU2VtYW50aWM6OkRlZmlu
aXRlRGVmYXVsdEV4cHJlc3Npb247CiAgICAgICAgRGVmaW5pdGVFeHByW0FzdDo6RkFMU0VfTElU
RVJBTF0gICAgICAgICAgICA9ICZTZW1hbnRpYzo6RGVmaW5pdGVEZWZhdWx0RXhwcmVzc2lvbjsK
ICAgICAgICBEZWZpbml0ZUV4cHJbQXN0OjpTVFJJTkdfTElURVJBTF0gICAgICAgICAgID0gJlNl
bWFudGljOjpEZWZpbml0ZURlZmF1bHRFeHByZXNzaW9uOwogICAgICAgIERlZmluaXRlRXhwcltB
c3Q6OkNIQVJBQ1RFUl9MSVRFUkFMXSAgICAgICAgPSAmU2VtYW50aWM6OkRlZmluaXRlRGVmYXVs
dEV4cHJlc3Npb247CiAgICAgICAgRGVmaW5pdGVFeHByW0FzdDo6TlVMTF9MSVRFUkFMXSAgICAg
ICAgICAgICA9ICZTZW1hbnRpYzo6RGVmaW5pdGVEZWZhdWx0RXhwcmVzc2lvbjsKICAgICAgICBE
ZWZpbml0ZUV4cHJbQXN0OjpUSElTX0VYUFJFU1NJT05dICAgICAgICAgID0gJlNlbWFudGljOjpE
ZWZpbml0ZURlZmF1bHRFeHByZXNzaW9uOwogICAgICAgIERlZmluaXRlRXhwcltBc3Q6OlNVUEVS
X0VYUFJFU1NJT05dICAgICAgICAgPSAmU2VtYW50aWM6OkRlZmluaXRlRGVmYXVsdEV4cHJlc3Np
b247CiAgICAgICAgRGVmaW5pdGVFeHByW0FzdDo6VFlQRV0gICAgICAgICAgICAgICAgICAgICA9
ICZTZW1hbnRpYzo6RGVmaW5pdGVEZWZhdWx0RXhwcmVzc2lvbjsKCiAgICAgICAgRGVmaW5pdGVC
aW5hcnlFeHByW0FzdEJpbmFyeUV4cHJlc3Npb246OlBMVVNdICAgICAgICAgICAgICAgICA9ICZT
ZW1hbnRpYzo6RGVmaW5pdGVEZWZhdWx0QmluYXJ5RXhwcmVzc2lvbjsKICAgICAgICBEZWZpbml0
ZUJpbmFyeUV4cHJbQXN0QmluYXJ5RXhwcmVzc2lvbjo6TEVGVF9TSElGVF0gICAgICAgICAgID0g
JlNlbWFudGljOjpEZWZpbml0ZURlZmF1bHRCaW5hcnlFeHByZXNzaW9uOwogICAgICAgIERlZmlu
aXRlQmluYXJ5RXhwcltBc3RCaW5hcnlFeHByZXNzaW9uOjpSSUdIVF9TSElGVF0gICAgICAgICAg
PSAmU2VtYW50aWM6OkRlZmluaXRlRGVmYXVsdEJpbmFyeUV4cHJlc3Npb247CiAgICAgICAgRGVm
aW5pdGVCaW5hcnlFeHByW0FzdEJpbmFyeUV4cHJlc3Npb246OlVOU0lHTkVEX1JJR0hUX1NISUZU
XSA9ICZTZW1hbnRpYzo6RGVmaW5pdGVEZWZhdWx0QmluYXJ5RXhwcmVzc2lvbjsKICAgICAgICBE
ZWZpbml0ZUJpbmFyeUV4cHJbQXN0QmluYXJ5RXhwcmVzc2lvbjo6TEVTU10gICAgICAgICAgICAg
ICAgID0gJlNlbWFudGljOjpEZWZpbml0ZURlZmF1bHRCaW5hcnlFeHByZXNzaW9uOwogICAgICAg
IERlZmluaXRlQmluYXJ5RXhwcltBc3RCaW5hcnlFeHByZXNzaW9uOjpHUkVBVEVSXSAgICAgICAg
ICAgICAgPSAmU2VtYW50aWM6OkRlZmluaXRlRGVmYXVsdEJpbmFyeUV4cHJlc3Npb247CiAgICAg
ICAgRGVmaW5pdGVCaW5hcnlFeHByW0FzdEJpbmFyeUV4cHJlc3Npb246OkxFU1NfRVFVQUxdICAg
ICAgICAgICA9ICZTZW1hbnRpYzo6RGVmaW5pdGVEZWZhdWx0QmluYXJ5RXhwcmVzc2lvbjsKICAg
ICAgICBEZWZpbml0ZUJpbmFyeUV4cHJbQXN0QmluYXJ5RXhwcmVzc2lvbjo6R1JFQVRFUl9FUVVB
TF0gICAgICAgID0gJlNlbWFudGljOjpEZWZpbml0ZURlZmF1bHRCaW5hcnlFeHByZXNzaW9uOwoK
ICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAg
ICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAg
ICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAog
ICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAg
IAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAg
ICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAg
ICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAg
CiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAg
ICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAg
ICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAK
ICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAg
ICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAg
ICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAog
ICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAg
IAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAg
ICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgRGVmaW5pdGVCaW5hcnlFeHByW0FzdEJp
bmFyeUV4cHJlc3Npb246OkFORF0gICAgICAgICAgICAgICAgICA9ICZTZW1hbnRpYzo6RGVmaW5p
dGVEZWZhdWx0QmluYXJ5RXhwcmVzc2lvbjsgCiAgICAgICAgRGVmaW5pdGVCaW5hcnlFeHByW0Fz
dEJpbmFyeUV4cHJlc3Npb246OlhPUl0gICAgICAgICAgICAgICAgICA9ICZTZW1hbnRpYzo6RGVm
aW5pdGVEZWZhdWx0QmluYXJ5RXhwcmVzc2lvbjsgCiAgICAgICAgRGVmaW5pdGVCaW5hcnlFeHBy
W0FzdEJpbmFyeUV4cHJlc3Npb246OklPUl0gICAgICAgICAgICAgICAgICA9ICZTZW1hbnRpYzo6
RGVmaW5pdGVEZWZhdWx0QmluYXJ5RXhwcmVzc2lvbjsgCgogICAgICAgIERlZmluaXRlQmluYXJ5
RXhwcltBc3RCaW5hcnlFeHByZXNzaW9uOjpFUVVBTF9FUVVBTF0gICAgICAgICAgPSAmU2VtYW50
aWM6OkRlZmluaXRlRGVmYXVsdEJpbmFyeUV4cHJlc3Npb247ICAKICAgICAgICBEZWZpbml0ZUJp
bmFyeUV4cHJbQXN0QmluYXJ5RXhwcmVzc2lvbjo6Tk9UX0VRVUFMXSAgICAgICAgICAgID0gJlNl
bWFudGljOjpEZWZpbml0ZURlZmF1bHRCaW5hcnlFeHByZXNzaW9uOyAgCgogICAgICAgIERlZmlu
aXRlQmluYXJ5RXhwcltBc3RCaW5hcnlFeHByZXNzaW9uOjpBTkRfQU5EXSAgICAgICAgICAgICAg
PSAmU2VtYW50aWM6OkRlZmluaXRlQU5EX0FORDsKICAgICAgICBEZWZpbml0ZUJpbmFyeUV4cHJb
QXN0QmluYXJ5RXhwcmVzc2lvbjo6T1JfT1JdICAgICAgICAgICAgICAgID0gJlNlbWFudGljOjpE
ZWZpbml0ZU9SX09SOwogICAgICAgIERlZmluaXRlQmluYXJ5RXhwcltBc3RCaW5hcnlFeHByZXNz
aW9uOjpTVEFSXSAgICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OkRlZmluaXRlRGVmYXVsdEJp
bmFyeUV4cHJlc3Npb247CiAgICAgICAgRGVmaW5pdGVCaW5hcnlFeHByW0FzdEJpbmFyeUV4cHJl
c3Npb246Ok1JTlVTXSAgICAgICAgICAgICAgICA9ICZTZW1hbnRpYzo6RGVmaW5pdGVEZWZhdWx0
QmluYXJ5RXhwcmVzc2lvbjsKICAgICAgICBEZWZpbml0ZUJpbmFyeUV4cHJbQXN0QmluYXJ5RXhw
cmVzc2lvbjo6U0xBU0hdICAgICAgICAgICAgICAgID0gJlNlbWFudGljOjpEZWZpbml0ZURlZmF1
bHRCaW5hcnlFeHByZXNzaW9uOwogICAgICAgIERlZmluaXRlQmluYXJ5RXhwcltBc3RCaW5hcnlF
eHByZXNzaW9uOjpNT0RdICAgICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OkRlZmluaXRlRGVm
YXVsdEJpbmFyeUV4cHJlc3Npb247CiAgICAgICAgRGVmaW5pdGVCaW5hcnlFeHByW0FzdEJpbmFy
eUV4cHJlc3Npb246OklOU1RBTkNFT0ZdICAgICAgICAgICA9ICZTZW1hbnRpYzo6RGVmaW5pdGVE
ZWZhdWx0QmluYXJ5RXhwcmVzc2lvbjsKCiAgICAgICAgRGVmaW5pdGVQcmVVbmFyeUV4cHJbQXN0
UHJlVW5hcnlFeHByZXNzaW9uOjpQTFVTXSAgICAgICAgICAgICA9ICZTZW1hbnRpYzo6RGVmaW5p
dGVEZWZhdWx0UHJlVW5hcnlFeHByZXNzaW9uOwogICAgICAgIERlZmluaXRlUHJlVW5hcnlFeHBy
W0FzdFByZVVuYXJ5RXhwcmVzc2lvbjo6TUlOVVNdICAgICAgICAgICAgPSAmU2VtYW50aWM6OkRl
ZmluaXRlRGVmYXVsdFByZVVuYXJ5RXhwcmVzc2lvbjsKICAgICAgICBEZWZpbml0ZVByZVVuYXJ5
RXhwcltBc3RQcmVVbmFyeUV4cHJlc3Npb246OlRXSURETEVdICAgICAgICAgID0gJlNlbWFudGlj
OjpEZWZpbml0ZURlZmF1bHRQcmVVbmFyeUV4cHJlc3Npb247CiAgICAgICAgRGVmaW5pdGVQcmVV
bmFyeUV4cHJbQXN0UHJlVW5hcnlFeHByZXNzaW9uOjpOT1RdICAgICAgICAgICAgICA9ICZTZW1h
bnRpYzo6RGVmaW5pdGVOT1Q7CiAgICAgICAgRGVmaW5pdGVQcmVVbmFyeUV4cHJbQXN0UHJlVW5h
cnlFeHByZXNzaW9uOjpQTFVTUExVU10gICAgICAgICA9ICZTZW1hbnRpYzo6RGVmaW5pdGVQTFVT
UExVU09yTUlOVVNNSU5VUzsKICAgICAgICBEZWZpbml0ZVByZVVuYXJ5RXhwcltBc3RQcmVVbmFy
eUV4cHJlc3Npb246Ok1JTlVTTUlOVVNdICAgICAgID0gJlNlbWFudGljOjpEZWZpbml0ZVBMVVNQ
TFVTT3JNSU5VU01JTlVTOwoKICAgICAgICBQcm9jZXNzQmluYXJ5RXhwcltBc3RCaW5hcnlFeHBy
ZXNzaW9uOjpQTFVTXSAgICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OlByb2Nlc3NQTFVTOwog
ICAgICAgIFByb2Nlc3NCaW5hcnlFeHByW0FzdEJpbmFyeUV4cHJlc3Npb246OkxFRlRfU0hJRlRd
ICAgICAgICAgICA9ICZTZW1hbnRpYzo6UHJvY2Vzc0xFRlRfU0hJRlQ7CiAgICAgICAgUHJvY2Vz
c0JpbmFyeUV4cHJbQXN0QmluYXJ5RXhwcmVzc2lvbjo6UklHSFRfU0hJRlRdICAgICAgICAgID0g
JlNlbWFudGljOjpQcm9jZXNzUklHSFRfU0hJRlQ7CiAgICAgICAgUHJvY2Vzc0JpbmFyeUV4cHJb
QXN0QmluYXJ5RXhwcmVzc2lvbjo6VU5TSUdORURfUklHSFRfU0hJRlRdID0gJlNlbWFudGljOjpQ
cm9jZXNzVU5TSUdORURfUklHSFRfU0hJRlQ7CiAgICAgICAgUHJvY2Vzc0JpbmFyeUV4cHJbQXN0
QmluYXJ5RXhwcmVzc2lvbjo6TEVTU10gICAgICAgICAgICAgICAgID0gJlNlbWFudGljOjpQcm9j
ZXNzTEVTUzsKICAgICAgICBQcm9jZXNzQmluYXJ5RXhwcltBc3RCaW5hcnlFeHByZXNzaW9uOjpH
UkVBVEVSXSAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OlByb2Nlc3NHUkVBVEVSOwogICAgICAg
IFByb2Nlc3NCaW5hcnlFeHByW0FzdEJpbmFyeUV4cHJlc3Npb246OkxFU1NfRVFVQUxdICAgICAg
ICAgICA9ICZTZW1hbnRpYzo6UHJvY2Vzc0xFU1NfRVFVQUw7CiAgICAgICAgUHJvY2Vzc0JpbmFy
eUV4cHJbQXN0QmluYXJ5RXhwcmVzc2lvbjo6R1JFQVRFUl9FUVVBTF0gICAgICAgID0gJlNlbWFu
dGljOjpQcm9jZXNzR1JFQVRFUl9FUVVBTDsKICAgICAgICBQcm9jZXNzQmluYXJ5RXhwcltBc3RC
aW5hcnlFeHByZXNzaW9uOjpBTkRdICAgICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OlByb2Nl
c3NBTkQ7CiAgICAgICAgUHJvY2Vzc0JpbmFyeUV4cHJbQXN0QmluYXJ5RXhwcmVzc2lvbjo6WE9S
XSAgICAgICAgICAgICAgICAgID0gJlNlbWFudGljOjpQcm9jZXNzWE9SOwogICAgICAgIFByb2Nl
c3NCaW5hcnlFeHByW0FzdEJpbmFyeUV4cHJlc3Npb246OklPUl0gICAgICAgICAgICAgICAgICA9
ICZTZW1hbnRpYzo6UHJvY2Vzc0lPUjsKICAgICAgICBQcm9jZXNzQmluYXJ5RXhwcltBc3RCaW5h
cnlFeHByZXNzaW9uOjpBTkRfQU5EXSAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OlByb2Nlc3NB
TkRfQU5EOwogICAgICAgIFByb2Nlc3NCaW5hcnlFeHByW0FzdEJpbmFyeUV4cHJlc3Npb246Ok9S
X09SXSAgICAgICAgICAgICAgICA9ICZTZW1hbnRpYzo6UHJvY2Vzc09SX09SOwogICAgICAgIFBy
b2Nlc3NCaW5hcnlFeHByW0FzdEJpbmFyeUV4cHJlc3Npb246OkVRVUFMX0VRVUFMXSAgICAgICAg
ICA9ICZTZW1hbnRpYzo6UHJvY2Vzc0VRVUFMX0VRVUFMOwogICAgICAgIFByb2Nlc3NCaW5hcnlF
eHByW0FzdEJpbmFyeUV4cHJlc3Npb246Ok5PVF9FUVVBTF0gICAgICAgICAgICA9ICZTZW1hbnRp
Yzo6UHJvY2Vzc05PVF9FUVVBTDsKICAgICAgICBQcm9jZXNzQmluYXJ5RXhwcltBc3RCaW5hcnlF
eHByZXNzaW9uOjpTVEFSXSAgICAgICAgICAgICAgICAgPSAmU2VtYW50aWM6OlByb2Nlc3NTVEFS
OwogICAgICAgIFByb2Nlc3NCaW5hcnlFeHByW0FzdEJpbmFyeUV4cHJlc3Npb246Ok1JTlVTXSAg
ICAgICAgICAgICAgICA9ICZTZW1hbnRpYzo6UHJvY2Vzc01JTlVTOwogICAgICAgIFByb2Nlc3NC
aW5hcnlFeHByW0FzdEJpbmFyeUV4cHJlc3Npb246OlNMQVNIXSAgICAgICAgICAgICAgICA9ICZT
ZW1hbnRpYzo6UHJvY2Vzc1NMQVNIOwogICAgICAgIFByb2Nlc3NCaW5hcnlFeHByW0FzdEJpbmFy
eUV4cHJlc3Npb246Ok1PRF0gICAgICAgICAgICAgICAgICA9ICZTZW1hbnRpYzo6UHJvY2Vzc01P
RDsKICAgICAgICBQcm9jZXNzQmluYXJ5RXhwcltBc3RCaW5hcnlFeHByZXNzaW9uOjpJTlNUQU5D
RU9GXSAgICAgICAgICAgPSAmU2VtYW50aWM6OlByb2Nlc3NJTlNUQU5DRU9GOwoKICAgICAgICBQ
cm9jZXNzUHJlVW5hcnlFeHByW0FzdFByZVVuYXJ5RXhwcmVzc2lvbjo6UExVU10gICAgICAgPSAm
U2VtYW50aWM6OlByb2Nlc3NQTFVTOwogICAgICAgIFByb2Nlc3NQcmVVbmFyeUV4cHJbQXN0UHJl
VW5hcnlFeHByZXNzaW9uOjpNSU5VU10gICAgICA9ICZTZW1hbnRpYzo6UHJvY2Vzc01JTlVTOwog
ICAgICAgIFByb2Nlc3NQcmVVbmFyeUV4cHJbQXN0UHJlVW5hcnlFeHByZXNzaW9uOjpUV0lERExF
XSAgICA9ICZTZW1hbnRpYzo6UHJvY2Vzc1RXSURETEU7CiAgICAgICAgUHJvY2Vzc1ByZVVuYXJ5
RXhwcltBc3RQcmVVbmFyeUV4cHJlc3Npb246Ok5PVF0gICAgICAgID0gJlNlbWFudGljOjpQcm9j
ZXNzTk9UOwogICAgICAgIFByb2Nlc3NQcmVVbmFyeUV4cHJbQXN0UHJlVW5hcnlFeHByZXNzaW9u
OjpQTFVTUExVU10gICA9ICZTZW1hbnRpYzo6UHJvY2Vzc1BMVVNQTFVTT3JNSU5VU01JTlVTOwog
ICAgICAgIFByb2Nlc3NQcmVVbmFyeUV4cHJbQXN0UHJlVW5hcnlFeHByZXNzaW9uOjpNSU5VU01J
TlVTXSA9ICZTZW1hbnRpYzo6UHJvY2Vzc1BMVVNQTFVTT3JNSU5VU01JTlVTOwogICAgfQoKICAg
IH5TZW1hbnRpYygpIHsgZGVsZXRlIGVycm9yOyB9CgogICAgdm9pZCBSZXBvcnRTZW1FcnJvcihT
ZW1hbnRpY0Vycm9yOjpTZW1hbnRpY0Vycm9yS2luZCBraW5kLAogICAgICAgICAgICAgICAgICAg
ICAgICBMZXhTdHJlYW06OlRva2VuSW5kZXggbHRvaywKICAgICAgICAgICAgICAgICAgICAgICAg
TGV4U3RyZWFtOjpUb2tlbkluZGV4IHJ0b2ssCiAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFy
X3QgKnMxID0gX19udWxsICwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqczIgPSBf
X251bGwgLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpzMyA9IF9fbnVsbCAsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKnM0ID0gX19udWxsICwKICAgICAgICAgICAg
ICAgICAgICAgICAgd2NoYXJfdCAqczUgPSBfX251bGwgLAogICAgICAgICAgICAgICAgICAgICAg
ICB3Y2hhcl90ICpzNiA9IF9fbnVsbCAsCiAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg
KnM3ID0gX19udWxsICwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqczggPSBfX251
bGwgLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpzOSA9IF9fbnVsbCApCiAgICB7
CiAgICAgICAgaWYgKCEgZXJyb3IpCiAgICAgICAgICAgIGVycm9yID0gbmV3IFNlbWFudGljRXJy
b3IoY29udHJvbCwgc291cmNlX2ZpbGVfc3ltYm9sKTsKICAgICAgICBlcnJvciAtPiBSZXBvcnQo
a2luZCwgbHRvaywgcnRvaywgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcsIHM4LCBzOSk7CiAg
ICB9CgogICAgaW50IE51bUVycm9ycygpIHsgcmV0dXJuIChlcnJvciA/IGVycm9yIC0+IG51bV9l
cnJvcnMgOiAwKTsgfQoKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIHZvaWQgUHJp
bnRNZXNzYWdlcygpCiAgICB7CiAgICAgICAgaWYgKHRoaXMgIT0gY29udHJvbC5zeXN0ZW1fc2Vt
YW50aWMpCiAgICAgICAgewogICAgICAgICAgICBpZiAobGV4X3N0cmVhbSAtPiBOdW1CYWRUb2tl
bnMoKSA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGxleF9zdHJlYW0gLT4gUHJp
bnRNZXNzYWdlcygpOwogICAgICAgICAgICAgICAgcmV0dXJuX2NvZGUgPSAxOwogICAgICAgICAg
ICB9CgogICAgICAgICAgICBpZiAoKCEgY29tcGlsYXRpb25fdW5pdCkgfHwgY29tcGlsYXRpb25f
dW5pdCAtPiBCYWRDb21waWxhdGlvblVuaXRDYXN0KCkpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIERpYWdub3NlUGFyc2VyICpkaWFnbm9zZV9wYXJzZXIgPSBuZXcgRGlhZ25vc2VQYXJz
ZXIoY29udHJvbCwgbGV4X3N0cmVhbSk7CiAgICAgICAgICAgICAgICByZXR1cm5fY29kZSA9IDE7
CiAgICAgICAgICAgICAgICBkZWxldGUgZGlhZ25vc2VfcGFyc2VyOwogICAgICAgICAgICB9Cgog
ICAgICAgICAgICBpZiAoISBjb250cm9sLm9wdGlvbi5ub2NsZWFudXApCiAgICAgICAgICAgIGlm
IChjb21waWxhdGlvbl91bml0KQogICAgICAgICAgICAgICAgQ2xlYW5VcCgpOwogICAgICAgIH0K
CiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yIC0+IGVycm9yLkxlbmd0aCgpID4gMCAmJiBlcnJv
ciAtPiBQcmludE1lc3NhZ2VzKCkgPiByZXR1cm5fY29kZSkKICAgICAgICAgICAgcmV0dXJuX2Nv
ZGUgPSAxOwoKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICBkZWxldGUgZXJy
b3I7CiAgICAgICAgZXJyb3IgPSBfX251bGwgOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
VHlwZVN5bWJvbCAqUHJvY2Vzc1NpZ25hdHVyZShUeXBlU3ltYm9sICosIGNvbnN0IGNoYXIgKiwg
TGV4U3RyZWFtOjpUb2tlbkluZGV4KTsKICAgIFR5cGVTeW1ib2wgKlJlYWRUeXBlKEZpbGVTeW1i
b2wgKiwgUGFja2FnZVN5bWJvbCAqLCBOYW1lU3ltYm9sICosIExleFN0cmVhbTo6VG9rZW5JbmRl
eCk7CiAgICBUeXBlU3ltYm9sICpSZWFkVHlwZUZyb21TaWduYXR1cmUoVHlwZVN5bWJvbCAqLCBj
b25zdCBjaGFyICosIGludCwgTGV4U3RyZWFtOjpUb2tlbkluZGV4KTsKICAgIFR5cGVTeW1ib2wg
KlByb2Nlc3NOZXN0ZWRUeXBlKFR5cGVTeW1ib2wgKiwgTmFtZVN5bWJvbCAqLCBMZXhTdHJlYW06
OlRva2VuSW5kZXgpOwoKcHJpdmF0ZToKICAgIGVudW0KICAgIHsKICAgICAgICBJTlRfU0hJRlRf
TUFTSyA9IDB4MWYsCiAgICAgICAgTE9OR19TSElGVF9NQVNLID0gMHgzZgogICAgfTsKCiAgICBT
ZW1hbnRpY0Vycm9yICplcnJvcjsKCiAgICB2b2lkIENsZWFuVXAoKTsKICAgIHZvaWQgQ2xlYW5V
cFR5cGUoVHlwZVN5bWJvbCAqKTsKCiAgICB2b2lkIFNldERlZmF1bHRTdXBlclR5cGUoQXN0Q2xh
c3NEZWNsYXJhdGlvbiAqKTsKICAgIHZvaWQgU2V0RGVmYXVsdFN1cGVyVHlwZShBc3RJbnRlcmZh
Y2VEZWNsYXJhdGlvbiAqKTsKICAgIHZvaWQgUHJvY2Vzc1R5cGVIZWFkZXIoQXN0Q2xhc3NEZWNs
YXJhdGlvbiAqKTsKICAgIHZvaWQgTWFya0NpcmN1bGFyTmVzdChUeXBlU3ltYm9sICopOwogICAg
dm9pZCBQcm9jZXNzU3VwZXJUeXBlc09mT3V0ZXJUeXBlKFR5cGVTeW1ib2wgKik7CiAgICB2b2lk
IFByb2Nlc3NTdXBlclR5cGVzT2ZJbm5lclR5cGUoVHlwZVN5bWJvbCAqLCBUdXBsZTxUeXBlU3lt
Ym9sICo+ICYpOwogICAgdm9pZCBQcm9jZXNzVHlwZUhlYWRlcnMoQXN0Q2xhc3NEZWNsYXJhdGlv
biAqKTsKICAgIFR5cGVTeW1ib2wgKkZpbmRUeXBlSW5MYXllcihBc3QgKiwgU3ltYm9sU2V0ICYp
OwogICAgdm9pZCBQcm9jZXNzTmVzdGVkU3VwZXJUeXBlcyhUeXBlU3ltYm9sICopOwogICAgdm9p
ZCBQcm9jZXNzTmVzdGVkVHlwZUhlYWRlcnMoVHlwZVN5bWJvbCAqLCBBc3RDbGFzc0JvZHkgKik7
CiAgICB2b2lkIFByb2Nlc3NUeXBlSGVhZGVyKEFzdEludGVyZmFjZURlY2xhcmF0aW9uICopOwog
ICAgdm9pZCBQcm9jZXNzVHlwZUhlYWRlcnMoQXN0SW50ZXJmYWNlRGVjbGFyYXRpb24gKik7CiAg
ICB2b2lkIFByb2Nlc3NOZXN0ZWRUeXBlSGVhZGVycyhBc3RJbnRlcmZhY2VEZWNsYXJhdGlvbiAq
KTsKICAgIHZvaWQgUHJvY2Vzc0NvbnN0cnVjdG9yTWVtYmVycyhBc3RDbGFzc0JvZHkgKik7CiAg
ICB2b2lkIFByb2Nlc3NNZXRob2RNZW1iZXJzKEFzdENsYXNzQm9keSAqKTsKICAgIHZvaWQgUHJv
Y2Vzc0ZpZWxkTWVtYmVycyhBc3RDbGFzc0JvZHkgKik7CiAgICB2b2lkIFByb2Nlc3NNZW1iZXJz
KFNlbWFudGljRW52aXJvbm1lbnQgKiwgQXN0Q2xhc3NCb2R5ICopOwogICAgdm9pZCBDb21wbGV0
ZVN5bWJvbFRhYmxlKFNlbWFudGljRW52aXJvbm1lbnQgKiwgTGV4U3RyZWFtOjpUb2tlbkluZGV4
LCBBc3RDbGFzc0JvZHkgKik7CiAgICB2b2lkIFByb2Nlc3NFeGVjdXRhYmxlQm9kaWVzKFNlbWFu
dGljRW52aXJvbm1lbnQgKiwgQXN0Q2xhc3NCb2R5ICopOwogICAgdm9pZCBQcm9jZXNzRXhlY3V0
YWJsZUJvZGllcyhBc3RJbnRlcmZhY2VEZWNsYXJhdGlvbiAqKTsKCiAgICB2b2lkIFByb2Nlc3NN
ZXRob2RNZW1iZXJzKEFzdEludGVyZmFjZURlY2xhcmF0aW9uICopOwogICAgdm9pZCBQcm9jZXNz
RmllbGRNZW1iZXJzKEFzdEludGVyZmFjZURlY2xhcmF0aW9uICopOwogICAgdm9pZCBQcm9jZXNz
TWVtYmVycyhBc3RJbnRlcmZhY2VEZWNsYXJhdGlvbiAqKTsKICAgIHZvaWQgQ29tcGxldGVTeW1i
b2xUYWJsZShBc3RJbnRlcmZhY2VEZWNsYXJhdGlvbiAqKTsKCiAgICBmcmllbmQgY2xhc3MgVHlw
ZVN5bWJvbDsKCiAgICBUdXBsZTxTeW1ib2wgKj4gaW1wb3J0X29uX2RlbWFuZF9wYWNrYWdlczsK
ICAgIFR1cGxlPFR5cGVTeW1ib2wgKj4gc2luZ2xlX3R5cGVfaW1wb3J0czsKCiAgICAgCiAgICAg
CiAgICAgCiAgICBQYWNrYWdlU3ltYm9sICAqdGhpc19wYWNrYWdlOwoKICAgIFR5cGVTeW1ib2wg
KlRoaXNUeXBlKCkgICAgICAgICAgICAgICAgICAgICAgICB7IChzdGF0aWNfY2FzdDx2b2lkPiAg
KCggc3RhdGVfc3RhY2suU2l6ZSgpICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJzdGF0ZV9zdGFj
ay5TaXplKCkiICwgIi4uLy4uL2ppa2VzL3NyYy9zZW1hbnRpYy5oIiwgOTI2LCBfX1BSRVRUWV9G
VU5DVElPTl9fICksIDApKSkgOyByZXR1cm4gc3RhdGVfc3RhY2suVG9wKCkgLT4gVHlwZSgpOyB9
CiAgICBNZXRob2RTeW1ib2wgKiZUaGlzTWV0aG9kKCkgICAgICAgICAgICAgICAgICAgeyAoc3Rh
dGljX2Nhc3Q8dm9pZD4gICgoIHN0YXRlX3N0YWNrLlNpemUoKSApID8gMCA6CShfX2Fzc2VydF9m
YWlsICgic3RhdGVfc3RhY2suU2l6ZSgpIiAsICIuLi8uLi9qaWtlcy9zcmMvc2VtYW50aWMuaCIs
IDkyNywgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsgcmV0dXJuIHN0YXRlX3N0YWNrLlRv
cCgpIC0+IHRoaXNfbWV0aG9kOyB9CiAgICBWYXJpYWJsZVN5bWJvbCAqJlRoaXNWYXJpYWJsZSgp
ICAgICAgICAgICAgICAgeyAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIHN0YXRlX3N0YWNrLlNpemUo
KSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgic3RhdGVfc3RhY2suU2l6ZSgpIiAsICIuLi8uLi9q
aWtlcy9zcmMvc2VtYW50aWMuaCIsIDkyOCwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsg
cmV0dXJuIHN0YXRlX3N0YWNrLlRvcCgpIC0+IHRoaXNfdmFyaWFibGU7IH0KICAgIEFzdCAqJkV4
cGxpY2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKCkgICAgICAgICB7IChzdGF0aWNfY2FzdDx2b2lk
PiAgKCggc3RhdGVfc3RhY2suU2l6ZSgpICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJzdGF0ZV9z
dGFjay5TaXplKCkiICwgIi4uLy4uL2ppa2VzL3NyYy9zZW1hbnRpYy5oIiwgOTI5LCBfX1BSRVRU
WV9GVU5DVElPTl9fICksIDApKSkgOyByZXR1cm4gc3RhdGVfc3RhY2suVG9wKCkgLT4gZXhwbGlj
aXRfY29uc3RydWN0b3JfaW52b2NhdGlvbjsgfQogICAgU3ltYm9sVGFibGVTdGFjayAmTG9jYWxT
eW1ib2xUYWJsZSgpICAgICAgICAgIHsgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBzdGF0ZV9zdGFj
ay5TaXplKCkgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInN0YXRlX3N0YWNrLlNpemUoKSIgLCAi
Li4vLi4vamlrZXMvc3JjL3NlbWFudGljLmgiLCA5MzAsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwg
MCkpKSA7IHJldHVybiBzdGF0ZV9zdGFjay5Ub3AoKSAtPiBzeW1ib2xfdGFibGU7IH0KICAgIEV4
Y2VwdGlvblRhYmxlU3RhY2sgJlRyeUV4Y2VwdGlvblRhYmxlU3RhY2soKSB7IChzdGF0aWNfY2Fz
dDx2b2lkPiAgKCggc3RhdGVfc3RhY2suU2l6ZSgpICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJz
dGF0ZV9zdGFjay5TaXplKCkiICwgIi4uLy4uL2ppa2VzL3NyYy9zZW1hbnRpYy5oIiwgOTMxLCBf
X1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOyByZXR1cm4gc3RhdGVfc3RhY2suVG9wKCkgLT4g
dHJ5X2V4Y2VwdGlvbl90YWJsZV9zdGFjazsgfQogICAgU3RhdGVtZW50U3RhY2sgJlRyeVN0YXRl
bWVudFN0YWNrKCkgICAgICAgICAgIHsgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBzdGF0ZV9zdGFj
ay5TaXplKCkgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInN0YXRlX3N0YWNrLlNpemUoKSIgLCAi
Li4vLi4vamlrZXMvc3JjL3NlbWFudGljLmgiLCA5MzIsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwg
MCkpKSA7IHJldHVybiBzdGF0ZV9zdGFjay5Ub3AoKSAtPiB0cnlfc3RhdGVtZW50X3N0YWNrOyB9
CiAgICBTdGF0ZW1lbnRTdGFjayAmQnJlYWthYmxlU3RhdGVtZW50U3RhY2soKSAgICAgeyAoc3Rh
dGljX2Nhc3Q8dm9pZD4gICgoIHN0YXRlX3N0YWNrLlNpemUoKSApID8gMCA6CShfX2Fzc2VydF9m
YWlsICgic3RhdGVfc3RhY2suU2l6ZSgpIiAsICIuLi8uLi9qaWtlcy9zcmMvc2VtYW50aWMuaCIs
IDkzMywgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsgcmV0dXJuIHN0YXRlX3N0YWNrLlRv
cCgpIC0+IGJyZWFrYWJsZV9zdGF0ZW1lbnRfc3RhY2s7IH0KICAgIFN0YXRlbWVudFN0YWNrICZD
b250aW51YWJsZVN0YXRlbWVudFN0YWNrKCkgICB7IChzdGF0aWNfY2FzdDx2b2lkPiAgKCggc3Rh
dGVfc3RhY2suU2l6ZSgpICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJzdGF0ZV9zdGFjay5TaXpl
KCkiICwgIi4uLy4uL2ppa2VzL3NyYy9zZW1hbnRpYy5oIiwgOTM0LCBfX1BSRVRUWV9GVU5DVElP
Tl9fICksIDApKSkgOyByZXR1cm4gc3RhdGVfc3RhY2suVG9wKCkgLT4gY29udGludWFibGVfc3Rh
dGVtZW50X3N0YWNrOyB9CiAgICBCbG9ja1N0YWNrICZMb2NhbEJsb2NrU3RhY2soKSAgICAgICAg
ICAgICAgICAgeyAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIHN0YXRlX3N0YWNrLlNpemUoKSApID8g
MCA6CShfX2Fzc2VydF9mYWlsICgic3RhdGVfc3RhY2suU2l6ZSgpIiAsICIuLi8uLi9qaWtlcy9z
cmMvc2VtYW50aWMuaCIsIDkzNSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsgcmV0dXJu
IHN0YXRlX3N0YWNrLlRvcCgpIC0+IGJsb2NrX3N0YWNrOyB9CiAgICBTZW1hbnRpY0Vudmlyb25t
ZW50ICpHZXRFbnZpcm9ubWVudChBc3QgKmFzdCkgeyAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIHN0
YXRlX3N0YWNrLlNpemUoKSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgic3RhdGVfc3RhY2suU2l6
ZSgpIiAsICIuLi8uLi9qaWtlcy9zcmMvc2VtYW50aWMuaCIsIDkzNiwgX19QUkVUVFlfRlVOQ1RJ
T05fXyApLCAwKSkpIDsgcmV0dXJuIHN0YXRlX3N0YWNrLlRvcCgpIC0+IEdldEVudmlyb25tZW50
KGFzdCk7IH0KICAgIGJvb2wgU3RhdGljUmVnaW9uKCkgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7IChzdGF0aWNfY2FzdDx2b2lkPiAgKCggc3RhdGVfc3RhY2suU2l6ZSgpICkgPyAwIDoJKF9f
YXNzZXJ0X2ZhaWwgKCJzdGF0ZV9zdGFjay5TaXplKCkiICwgIi4uLy4uL2ppa2VzL3NyYy9zZW1h
bnRpYy5oIiwgOTM3LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOyByZXR1cm4gc3RhdGVf
c3RhY2suVG9wKCkgLT4gU3RhdGljUmVnaW9uKCk7IH0KCiAgICBTZW1hbnRpY0Vudmlyb25tZW50
U3RhY2sgc3RhdGVfc3RhY2s7CgogICAgQml0U2V0ICpkZWZpbml0ZWx5X2Fzc2lnbmVkX3Zhcmlh
YmxlcywKICAgICAgICAgICAqcG9zc2libHlfYXNzaWduZWRfZmluYWxzLAogICAgICAgICAgICp1
bml2ZXJzZTsKICAgIERlZmluaXRlQmxvY2tTdGFjayAqZGVmaW5pdGVfYmxvY2tfc3RhY2s7CiAg
ICBEZWZpbml0ZVRyeVN0YWNrICpkZWZpbml0ZV90cnlfc3RhY2s7CiAgICBEZWZpbml0ZUZpbmFs
QXNzaWdubWVudFN0YWNrICpkZWZpbml0ZV9maW5hbF9hc3NpZ25tZW50X3N0YWNrOwogICAgU3lt
Ym9sU2V0ICpkZWZpbml0ZV92aXNpYmxlX3ZhcmlhYmxlczsKCiAgICBib29sIElzSW50VmFsdWVS
ZXByZXNlbnRhYmxlSW5UeXBlKEFzdEV4cHJlc3Npb24gKiwgVHlwZVN5bWJvbCAqKTsKCiAgICB2
b2lkIENoZWNrQ2xhc3NNZW1iZXJzKFR5cGVTeW1ib2wgKiwgQXN0Q2xhc3NCb2R5ICopOwogICAg
dm9pZCBDaGVja05lc3RlZFR5cGVEdXBsaWNhdGlvbihTZW1hbnRpY0Vudmlyb25tZW50ICosIExl
eFN0cmVhbTo6VG9rZW5JbmRleCk7CiAgICBUeXBlU3ltYm9sICpQcm9jZXNzTmVzdGVkQ2xhc3NO
YW1lKFR5cGVTeW1ib2wgKiwgQXN0Q2xhc3NEZWNsYXJhdGlvbiAqKTsKICAgIHZvaWQgQ2hlY2tJ
bnRlcmZhY2VNZW1iZXJzKFR5cGVTeW1ib2wgKiwgQXN0SW50ZXJmYWNlRGVjbGFyYXRpb24gKik7
CiAgICBUeXBlU3ltYm9sICpQcm9jZXNzTmVzdGVkSW50ZXJmYWNlTmFtZShUeXBlU3ltYm9sICos
IEFzdEludGVyZmFjZURlY2xhcmF0aW9uICopOwogICAgVHlwZVN5bWJvbCAqRmluZFR5cGVJblNo
YWRvdyhUeXBlU2hhZG93U3ltYm9sICosIExleFN0cmVhbTo6VG9rZW5JbmRleCk7CiAgICB2b2lk
IFJlcG9ydFR5cGVJbmFjY2Vzc2libGUoTGV4U3RyZWFtOjpUb2tlbkluZGV4LCBMZXhTdHJlYW06
OlRva2VuSW5kZXgsIFR5cGVTeW1ib2wgKik7CiAgICB2b2lkIFJlcG9ydFR5cGVJbmFjY2Vzc2li
bGUoQXN0ICphc3QsIFR5cGVTeW1ib2wgKnR5cGUpIHsgUmVwb3J0VHlwZUluYWNjZXNzaWJsZShh
c3QgLT4gTGVmdFRva2VuKCksIGFzdCAtPiBSaWdodFRva2VuKCksIHR5cGUpOyB9CiAgICBUeXBl
U3ltYm9sICpHZXRCYWROZXN0ZWRUeXBlKFR5cGVTeW1ib2wgKiwgTGV4U3RyZWFtOjpUb2tlbklu
ZGV4KTsKICAgIFR5cGVTeW1ib2wgKkZpbmROZXN0ZWRUeXBlKFR5cGVTeW1ib2wgKiwgTGV4U3Ry
ZWFtOjpUb2tlbkluZGV4KTsKICAgIFR5cGVTeW1ib2wgKk11c3RGaW5kTmVzdGVkVHlwZShUeXBl
U3ltYm9sICosIEFzdCAqKTsKICAgIHZvaWQgUHJvY2Vzc0ltcG9ydFF1YWxpZmllZE5hbWUoQXN0
RXhwcmVzc2lvbiAqKTsKICAgIHZvaWQgUHJvY2Vzc1BhY2thZ2VPclR5cGUoQXN0RXhwcmVzc2lv
biAqKTsKICAgIHZvaWQgUHJvY2Vzc1R5cGVJbXBvcnRPbkRlbWFuZERlY2xhcmF0aW9uKEFzdElt
cG9ydERlY2xhcmF0aW9uICopOwogICAgQXN0RXhwcmVzc2lvbiAqRmluZEZpcnN0VHlwZShBc3Qg
Kik7CiAgICBUeXBlU3ltYm9sICpGaW5kU2ltcGxlTmFtZVR5cGUoUGFja2FnZVN5bWJvbCAqLCBM
ZXhTdHJlYW06OlRva2VuSW5kZXgpOwogICAgdm9pZCBQcm9jZXNzU2luZ2xlVHlwZUltcG9ydERl
Y2xhcmF0aW9uKEFzdEltcG9ydERlY2xhcmF0aW9uICopOwogICAgQWNjZXNzRmxhZ3MgUHJvY2Vz
c0NsYXNzTW9kaWZpZXJzKEFzdENsYXNzRGVjbGFyYXRpb24gKik7CiAgICBBY2Nlc3NGbGFncyBQ
cm9jZXNzTG9jYWxDbGFzc01vZGlmaWVycyhBc3RDbGFzc0RlY2xhcmF0aW9uICopOwogICAgQWNj
ZXNzRmxhZ3MgUHJvY2Vzc05lc3RlZENsYXNzTW9kaWZpZXJzKEFzdENsYXNzRGVjbGFyYXRpb24g
Kik7CiAgICBBY2Nlc3NGbGFncyBQcm9jZXNzU3RhdGljTmVzdGVkQ2xhc3NNb2RpZmllcnMoQXN0
Q2xhc3NEZWNsYXJhdGlvbiAqKTsKICAgIEFjY2Vzc0ZsYWdzIFByb2Nlc3NJbnRlcmZhY2VNb2Rp
ZmllcnMoQXN0SW50ZXJmYWNlRGVjbGFyYXRpb24gKik7CiAgICBBY2Nlc3NGbGFncyBQcm9jZXNz
TmVzdGVkSW50ZXJmYWNlTW9kaWZpZXJzKEFzdEludGVyZmFjZURlY2xhcmF0aW9uICopOwogICAg
QWNjZXNzRmxhZ3MgUHJvY2Vzc1N0YXRpY05lc3RlZEludGVyZmFjZU1vZGlmaWVycyhBc3RJbnRl
cmZhY2VEZWNsYXJhdGlvbiAqKTsKICAgIEFjY2Vzc0ZsYWdzIFByb2Nlc3NGaWVsZE1vZGlmaWVy
cyhBc3RGaWVsZERlY2xhcmF0aW9uICopOwogICAgQWNjZXNzRmxhZ3MgUHJvY2Vzc0xvY2FsTW9k
aWZpZXJzKEFzdExvY2FsVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCAqKTsKICAgIEFjY2Vz
c0ZsYWdzIFByb2Nlc3NGb3JtYWxNb2RpZmllcnMoQXN0Rm9ybWFsUGFyYW1ldGVyICopOwogICAg
QWNjZXNzRmxhZ3MgUHJvY2Vzc01ldGhvZE1vZGlmaWVycyhBc3RNZXRob2REZWNsYXJhdGlvbiAq
KTsKICAgIEFjY2Vzc0ZsYWdzIFByb2Nlc3NDb25zdHJ1Y3Rvck1vZGlmaWVycyhBc3RDb25zdHJ1
Y3RvckRlY2xhcmF0aW9uICopOwogICAgQWNjZXNzRmxhZ3MgUHJvY2Vzc0NvbnN0YW50TW9kaWZp
ZXJzKEFzdEZpZWxkRGVjbGFyYXRpb24gKik7CiAgICBBY2Nlc3NGbGFncyBQcm9jZXNzSW50ZXJm
YWNlTWV0aG9kTW9kaWZpZXJzKEFzdE1ldGhvZERlY2xhcmF0aW9uICopOwogICAgdm9pZCBBZGRE
ZWZhdWx0Q29uc3RydWN0b3IoVHlwZVN5bWJvbCAqKTsKICAgIHZvaWQgUHJvY2Vzc0NvbnN0cnVj
dG9yRGVjbGFyYXRpb24oQXN0Q29uc3RydWN0b3JEZWNsYXJhdGlvbiAqKTsKICAgIHZvaWQgUHJv
Y2Vzc01ldGhvZERlY2xhcmF0aW9uKEFzdE1ldGhvZERlY2xhcmF0aW9uICopOwogICAgdm9pZCBQ
cm9jZXNzRmllbGREZWNsYXJhdGlvbihBc3RGaWVsZERlY2xhcmF0aW9uICopOwogICAgdm9pZCBQ
cm9jZXNzRm9ybWFsUGFyYW1ldGVycyhCbG9ja1N5bWJvbCAqLCBBc3RNZXRob2REZWNsYXJhdG9y
ICopOwogICAgVHlwZVN5bWJvbCAqSW1wb3J0VHlwZShMZXhTdHJlYW06OlRva2VuSW5kZXgsIE5h
bWVTeW1ib2wgKik7CiAgICBUeXBlU3ltYm9sICpGaW5kUHJpbWl0aXZlVHlwZShBc3RQcmltaXRp
dmVUeXBlICopOwogICAgVHlwZVN5bWJvbCAqRmluZFR5cGVJbkVudmlyb25tZW50KFNlbWFudGlj
RW52aXJvbm1lbnQgKiwgTmFtZVN5bWJvbCAqKTsKICAgIFR5cGVTeW1ib2wgKkZpbmRUeXBlKExl
eFN0cmVhbTo6VG9rZW5JbmRleCk7CiAgICBUeXBlU3ltYm9sICpNdXN0RmluZFR5cGUoQXN0ICop
OwogICAgdm9pZCBQcm9jZXNzSW50ZXJmYWNlKFR5cGVTeW1ib2wgKiwgQXN0RXhwcmVzc2lvbiAq
KTsKCiAgICB2b2lkIEluaXRpYWxpemVWYXJpYWJsZShBc3RGaWVsZERlY2xhcmF0aW9uICosIFR1
cGxlPFZhcmlhYmxlU3ltYm9sICo+ICYpOwogICAgdm9pZCBQcm9jZXNzSW5pdGlhbGl6ZXIoQXN0
QmxvY2sgKiwgQXN0QmxvY2sgKiwgTWV0aG9kU3ltYm9sICosIFR1cGxlPFZhcmlhYmxlU3ltYm9s
ICo+ICYpOwogICAgYm9vbCBOZWVkc0luaXRpYWxpemF0aW9uTWV0aG9kKEFzdEZpZWxkRGVjbGFy
YXRpb24gKik7CiAgICB2b2lkIFByb2Nlc3NTdGF0aWNJbml0aWFsaXplcnMoQXN0Q2xhc3NCb2R5
ICopOwogICAgdm9pZCBQcm9jZXNzQmxvY2tJbml0aWFsaXplcnMoQXN0Q2xhc3NCb2R5ICopOwoK
ICAgIGJvb2wgQ2FuV2lkZW5pbmdQcmltaXRpdmVDb252ZXJ0KFR5cGVTeW1ib2wgKiwgVHlwZVN5
bWJvbCAqKTsKICAgIGJvb2wgQ2FuTmFycm93aW5nUHJpbWl0aXZlQ29udmVydChUeXBlU3ltYm9s
ICosIFR5cGVTeW1ib2wgKik7CiAgICBib29sIENhbkNhc3RDb252ZXJ0KFR5cGVTeW1ib2wgKiwg
VHlwZVN5bWJvbCAqLCBMZXhTdHJlYW06OlRva2VuSW5kZXgpOwogICAgYm9vbCBDYW5NZXRob2RJ
bnZvY2F0aW9uQ29udmVydChUeXBlU3ltYm9sICosIFR5cGVTeW1ib2wgKik7CiAgICBib29sIENh
bkFzc2lnbm1lbnRDb252ZXJ0KFR5cGVTeW1ib2wgKiwgQXN0RXhwcmVzc2lvbiAqKTsKICAgIGJv
b2wgQ2FuQXNzaWdubWVudENvbnZlcnRSZWZlcmVuY2UoVHlwZVN5bWJvbCAqLCBUeXBlU3ltYm9s
ICopOwogICAgTGl0ZXJhbFZhbHVlICpDYXN0UHJpbWl0aXZlVmFsdWUoVHlwZVN5bWJvbCAqLCBB
c3RFeHByZXNzaW9uICopOwogICAgTGl0ZXJhbFZhbHVlICpDYXN0VmFsdWUoVHlwZVN5bWJvbCAq
LCBBc3RFeHByZXNzaW9uICopOwogICAgQXN0RXhwcmVzc2lvbiAqQ29udmVydFRvVHlwZShBc3RF
eHByZXNzaW9uICosIFR5cGVTeW1ib2wgKik7CiAgICBBc3RFeHByZXNzaW9uICpQcm9tb3RlVW5h
cnlOdW1lcmljRXhwcmVzc2lvbihBc3RFeHByZXNzaW9uICopOwogICAgdm9pZCBCaW5hcnlOdW1l
cmljUHJvbW90aW9uKEFzdEFzc2lnbm1lbnRFeHByZXNzaW9uICopOwogICAgdm9pZCBCaW5hcnlO
dW1lcmljUHJvbW90aW9uKEFzdEJpbmFyeUV4cHJlc3Npb24gKik7CiAgICB2b2lkIEJpbmFyeU51
bWVyaWNQcm9tb3Rpb24oQXN0Q29uZGl0aW9uYWxFeHByZXNzaW9uICopOwoKICAgIHZvaWQgKFNl
bWFudGljOjoqRGVmaW5pdGVTdG10W0FzdDo6X251bV9raW5kc10pKEFzdCAqKTsKICAgIGlubGlu
ZSB2b2lkIERlZmluaXRlU3RhdGVtZW50KEFzdCAqKTsKCiAgICB2b2lkIERlZmluaXRlTG9vcEJv
ZHkoQXN0U3RhdGVtZW50ICopOwoKICAgIHZvaWQgRGVmaW5pdGVCbG9jayhBc3QgKik7CiAgICB2
b2lkIERlZmluaXRlTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uU3RhdGVtZW50KEFzdCAqKTsKICAg
IHZvaWQgRGVmaW5pdGVFeHByZXNzaW9uU3RhdGVtZW50KEFzdCAqKTsKICAgIHZvaWQgRGVmaW5p
dGVTeW5jaHJvbml6ZWRTdGF0ZW1lbnQoQXN0ICopOwogICAgdm9pZCBEZWZpbml0ZUlmU3RhdGVt
ZW50KEFzdCAqKTsKICAgIHZvaWQgRGVmaW5pdGVXaGlsZVN0YXRlbWVudChBc3QgKik7CiAgICB2
b2lkIERlZmluaXRlRm9yU3RhdGVtZW50KEFzdCAqKTsKICAgIHZvaWQgRGVmaW5pdGVTd2l0Y2hT
dGF0ZW1lbnQoQXN0ICopOwogICAgdm9pZCBEZWZpbml0ZURvU3RhdGVtZW50KEFzdCAqKTsKICAg
IHZvaWQgRGVmaW5pdGVCcmVha1N0YXRlbWVudChBc3QgKik7CiAgICB2b2lkIERlZmluaXRlQ29u
dGludWVTdGF0ZW1lbnQoQXN0ICopOwogICAgdm9pZCBEZWZpbml0ZVJldHVyblN0YXRlbWVudChB
c3QgKik7CiAgICB2b2lkIERlZmluaXRlVGhyb3dTdGF0ZW1lbnQoQXN0ICopOwogICAgdm9pZCBE
ZWZpbml0ZVRyeVN0YXRlbWVudChBc3QgKik7CiAgICB2b2lkIERlZmluaXRlRW1wdHlTdGF0ZW1l
bnQoQXN0ICopOwogICAgdm9pZCBEZWZpbml0ZUNsYXNzRGVjbGFyYXRpb24oQXN0ICopOwoKICAg
IFZhcmlhYmxlU3ltYm9sICpEZWZpbml0ZUZpbmFsKEFzdEZpZWxkQWNjZXNzICopOwoKICAgIERl
ZmluaXRlQXNzaWdubWVudFNldCAqKFNlbWFudGljOjoqRGVmaW5pdGVFeHByW0FzdDo6X251bV9l
eHByZXNzaW9uX2tpbmRzXSkoQXN0RXhwcmVzc2lvbiAqLCBCaXRTZXQgJik7CiAgICBEZWZpbml0
ZUFzc2lnbm1lbnRTZXQgKkRlZmluaXRlU2ltcGxlTmFtZShBc3RFeHByZXNzaW9uICosIEJpdFNl
dCAmKTsKICAgIERlZmluaXRlQXNzaWdubWVudFNldCAqRGVmaW5pdGVBcnJheUFjY2VzcyhBc3RF
eHByZXNzaW9uICosIEJpdFNldCAmKTsKICAgIERlZmluaXRlQXNzaWdubWVudFNldCAqRGVmaW5p
dGVNZXRob2RJbnZvY2F0aW9uKEFzdEV4cHJlc3Npb24gKiwgQml0U2V0ICYpOwogICAgRGVmaW5p
dGVBc3NpZ25tZW50U2V0ICpEZWZpbml0ZUNsYXNzSW5zdGFuY2VDcmVhdGlvbkV4cHJlc3Npb24o
QXN0RXhwcmVzc2lvbiAqLCBCaXRTZXQgJik7CiAgICBEZWZpbml0ZUFzc2lnbm1lbnRTZXQgKkRl
ZmluaXRlQXJyYXlDcmVhdGlvbkV4cHJlc3Npb24oQXN0RXhwcmVzc2lvbiAqLCBCaXRTZXQgJik7
CiAgICBEZWZpbml0ZUFzc2lnbm1lbnRTZXQgKkRlZmluaXRlUHJlVW5hcnlFeHByZXNzaW9uKEFz
dEV4cHJlc3Npb24gKiwgQml0U2V0ICYpOwogICAgRGVmaW5pdGVBc3NpZ25tZW50U2V0ICpEZWZp
bml0ZVBvc3RVbmFyeUV4cHJlc3Npb24oQXN0RXhwcmVzc2lvbiAqLCBCaXRTZXQgJik7CiAgICBE
ZWZpbml0ZUFzc2lnbm1lbnRTZXQgKkRlZmluaXRlQmluYXJ5RXhwcmVzc2lvbihBc3RFeHByZXNz
aW9uICosIEJpdFNldCAmKTsKICAgIERlZmluaXRlQXNzaWdubWVudFNldCAqRGVmaW5pdGVDb25k
aXRpb25hbEV4cHJlc3Npb24oQXN0RXhwcmVzc2lvbiAqLCBCaXRTZXQgJik7CiAgICBEZWZpbml0
ZUFzc2lnbm1lbnRTZXQgKkRlZmluaXRlQXNzaWdubWVudEV4cHJlc3Npb24oQXN0RXhwcmVzc2lv
biAqLCBCaXRTZXQgJik7CiAgICBEZWZpbml0ZUFzc2lnbm1lbnRTZXQgKkRlZmluaXRlRGVmYXVs
dEV4cHJlc3Npb24oQXN0RXhwcmVzc2lvbiAqLCBCaXRTZXQgJik7CiAgICBEZWZpbml0ZUFzc2ln
bm1lbnRTZXQgKkRlZmluaXRlRmllbGRBY2Nlc3MoQXN0RXhwcmVzc2lvbiAqLCBCaXRTZXQgJik7
CiAgICBEZWZpbml0ZUFzc2lnbm1lbnRTZXQgKkRlZmluaXRlUGFyZW50aGVzaXplZEV4cHJlc3Np
b24oQXN0RXhwcmVzc2lvbiAqLCBCaXRTZXQgJik7CiAgICBEZWZpbml0ZUFzc2lnbm1lbnRTZXQg
KkRlZmluaXRlQ2FzdEV4cHJlc3Npb24oQXN0RXhwcmVzc2lvbiAqLCBCaXRTZXQgJik7CiAgICBE
ZWZpbml0ZUFzc2lnbm1lbnRTZXQgKkRlZmluaXRlRXhwcmVzc2lvbihBc3RFeHByZXNzaW9uICos
IEJpdFNldCAmKTsKCiAgICBEZWZpbml0ZUFzc2lnbm1lbnRTZXQgKihTZW1hbnRpYzo6KkRlZmlu
aXRlUHJlVW5hcnlFeHByW0FzdFByZVVuYXJ5RXhwcmVzc2lvbjo6X251bV9raW5kc10pKEFzdEV4
cHJlc3Npb24gKiwgQml0U2V0ICYpOwogICAgRGVmaW5pdGVBc3NpZ25tZW50U2V0ICpEZWZpbml0
ZURlZmF1bHRQcmVVbmFyeUV4cHJlc3Npb24oQXN0RXhwcmVzc2lvbiAqLCBCaXRTZXQgJik7CiAg
ICBEZWZpbml0ZUFzc2lnbm1lbnRTZXQgKkRlZmluaXRlTk9UKEFzdEV4cHJlc3Npb24gKiwgQml0
U2V0ICYpOwogICAgRGVmaW5pdGVBc3NpZ25tZW50U2V0ICpEZWZpbml0ZVBMVVNQTFVTT3JNSU5V
U01JTlVTKEFzdEV4cHJlc3Npb24gKiwgQml0U2V0ICYpOwoKICAgIERlZmluaXRlQXNzaWdubWVu
dFNldCAqKFNlbWFudGljOjoqRGVmaW5pdGVCaW5hcnlFeHByW0FzdEJpbmFyeUV4cHJlc3Npb246
Ol9udW1fa2luZHNdKShBc3RCaW5hcnlFeHByZXNzaW9uICosIEJpdFNldCAmKTsKICAgIERlZmlu
aXRlQXNzaWdubWVudFNldCAqRGVmaW5pdGVEZWZhdWx0QmluYXJ5RXhwcmVzc2lvbihBc3RCaW5h
cnlFeHByZXNzaW9uICosIEJpdFNldCAmKTsKICAgIERlZmluaXRlQXNzaWdubWVudFNldCAqRGVm
aW5pdGVBTkQoQXN0QmluYXJ5RXhwcmVzc2lvbiAqLCBCaXRTZXQgJik7CiAgICBEZWZpbml0ZUFz
c2lnbm1lbnRTZXQgKkRlZmluaXRlSU9SKEFzdEJpbmFyeUV4cHJlc3Npb24gKiwgQml0U2V0ICYp
OwogICAgRGVmaW5pdGVBc3NpZ25tZW50U2V0ICpEZWZpbml0ZVhPUihBc3RCaW5hcnlFeHByZXNz
aW9uICosIEJpdFNldCAmKTsKICAgIERlZmluaXRlQXNzaWdubWVudFNldCAqRGVmaW5pdGVBTkRf
QU5EKEFzdEJpbmFyeUV4cHJlc3Npb24gKiwgQml0U2V0ICYpOwogICAgRGVmaW5pdGVBc3NpZ25t
ZW50U2V0ICpEZWZpbml0ZU9SX09SKEFzdEJpbmFyeUV4cHJlc3Npb24gKiwgQml0U2V0ICYpOwog
ICAgRGVmaW5pdGVBc3NpZ25tZW50U2V0ICpEZWZpbml0ZUVRVUFMX0VRVUFMKEFzdEJpbmFyeUV4
cHJlc3Npb24gKiwgQml0U2V0ICYpOwogICAgRGVmaW5pdGVBc3NpZ25tZW50U2V0ICpEZWZpbml0
ZU5PVF9FUVVBTChBc3RCaW5hcnlFeHByZXNzaW9uICosIEJpdFNldCAmKTsKCiAgICBEZWZpbml0
ZUFzc2lnbm1lbnRTZXQgKkRlZmluaXRlQXNzaWdubWVudEFORChUeXBlU3ltYm9sICosIEJpdFNl
dCAqLCBCaXRTZXQgJiwgRGVmaW5pdGVBc3NpZ25tZW50U2V0ICosIERlZmluaXRlQXNzaWdubWVu
dFNldCAqKTsKICAgIERlZmluaXRlQXNzaWdubWVudFNldCAqRGVmaW5pdGVBc3NpZ25tZW50SU9S
KFR5cGVTeW1ib2wgKiwgQml0U2V0ICosIEJpdFNldCAmLCBEZWZpbml0ZUFzc2lnbm1lbnRTZXQg
KiwgRGVmaW5pdGVBc3NpZ25tZW50U2V0ICopOwogICAgRGVmaW5pdGVBc3NpZ25tZW50U2V0ICpE
ZWZpbml0ZUFzc2lnbm1lbnRYT1IoVHlwZVN5bWJvbCAqLCBCaXRTZXQgKiwgQml0U2V0ICYsIERl
ZmluaXRlQXNzaWdubWVudFNldCAqLCBEZWZpbml0ZUFzc2lnbm1lbnRTZXQgKik7CgogICAgdm9p
ZCBEZWZpbml0ZUFycmF5SW5pdGlhbGl6ZXIoQXN0QXJyYXlJbml0aWFsaXplciAqKTsKICAgIHZv
aWQgRGVmaW5pdGVWYXJpYWJsZUluaXRpYWxpemVyKEFzdFZhcmlhYmxlRGVjbGFyYXRvciAqKTsK
ICAgIHZvaWQgRGVmaW5pdGVCbG9ja1N0YXRlbWVudHMoQXN0QmxvY2sgKik7CiAgICB2b2lkIERl
ZmluaXRlTWV0aG9kQm9keShBc3RNZXRob2REZWNsYXJhdGlvbiAqLCBUdXBsZTxWYXJpYWJsZVN5
bWJvbCAqPiAmKTsKICAgIHZvaWQgRGVmaW5pdGVDb25zdHJ1Y3RvckJvZHkoQXN0Q29uc3RydWN0
b3JEZWNsYXJhdGlvbiAqLCBUdXBsZTxWYXJpYWJsZVN5bWJvbCAqPiAmKTsKICAgIHZvaWQgRGVm
aW5pdGVCbG9ja0luaXRpYWxpemVyKEFzdEJsb2NrICosIGludCwgVHVwbGU8VmFyaWFibGVTeW1i
b2wgKj4gJik7CiAgICB2b2lkIERlZmluaXRlVmFyaWFibGVJbml0aWFsaXplcihBc3RWYXJpYWJs
ZURlY2xhcmF0b3IgKiwgVHVwbGU8VmFyaWFibGVTeW1ib2wgKj4gJik7CgogICAgdm9pZCBQcm9j
ZXNzQmxvY2tTdGF0ZW1lbnRzKEFzdEJsb2NrICopOwogICAgdm9pZCBQcm9jZXNzVGhpc0NhbGwo
QXN0VGhpc0NhbGwgKik7CiAgICB2b2lkIFByb2Nlc3NTdXBlckNhbGwoQXN0U3VwZXJDYWxsICop
OwogICAgdm9pZCBDaGVja1Rocm93KEFzdEV4cHJlc3Npb24gKik7CiAgICB2b2lkIFByb2Nlc3NN
ZXRob2RCb2R5KEFzdE1ldGhvZERlY2xhcmF0aW9uICopOwogICAgdm9pZCBQcm9jZXNzQ29uc3Ry
dWN0b3JCb2R5KEFzdENvbnN0cnVjdG9yRGVjbGFyYXRpb24gKiwgYm9vbCk7CiAgICBib29sIENh
dGNoYWJsZUV4Y2VwdGlvbihUeXBlU3ltYm9sICopOwogICAgdm9pZCBSZXBvcnRNZXRob2ROb3RG
b3VuZChBc3QgKmFzdCwgd2NoYXJfdCAqKTsKICAgIE1ldGhvZFN5bWJvbCAqRmluZENvbnN0cnVj
dG9yKFR5cGVTeW1ib2wgKiwgQXN0ICosIExleFN0cmVhbTo6VG9rZW5JbmRleCwgTGV4U3RyZWFt
OjpUb2tlbkluZGV4KTsKICAgIGJvb2wgTW9yZVNwZWNpZmljKE1ldGhvZFN5bWJvbCAqLCBNZXRo
b2RTeW1ib2wgKik7CiAgICBib29sIE1vcmVTcGVjaWZpYyhNZXRob2RTeW1ib2wgKiwgVHVwbGU8
TWV0aG9kU3ltYm9sICo+ICYpOwogICAgYm9vbCBOb01ldGhvZE1vcmVTcGVjaWZpYyhUdXBsZTxN
ZXRob2RTeW1ib2wgKj4gJiwgTWV0aG9kU3ltYm9sICopOwogICAgYm9vbCBJc01ldGhvZEFjY2Vz
c2libGUoQXN0RmllbGRBY2Nlc3MgKiwgVHlwZVN5bWJvbCAqLCBNZXRob2RTeW1ib2wgKik7CiAg
ICB2b2lkIFNlYXJjaEZvck1ldGhvZEluRW52aXJvbm1lbnQoVHVwbGU8TWV0aG9kU3ltYm9sICo+
ICYsIFNlbWFudGljRW52aXJvbm1lbnQgKiYsIFNlbWFudGljRW52aXJvbm1lbnQgKiwgQXN0TWV0
aG9kSW52b2NhdGlvbiAqKTsKICAgIE1ldGhvZFN5bWJvbCAqRmluZE1pc3NwZWxsZWRNZXRob2RO
YW1lKFR5cGVTeW1ib2wgKiwgQXN0TWV0aG9kSW52b2NhdGlvbiAqLCBOYW1lU3ltYm9sICopOwog
ICAgTWV0aG9kU3ltYm9sICpGaW5kTWV0aG9kSW5FbnZpcm9ubWVudChTZW1hbnRpY0Vudmlyb25t
ZW50IComLCBTZW1hbnRpY0Vudmlyb25tZW50ICosIEFzdE1ldGhvZEludm9jYXRpb24gKik7CiAg
ICBNZXRob2RTeW1ib2wgKkZpbmRNZXRob2RJblR5cGUoVHlwZVN5bWJvbCAqLCBBc3RNZXRob2RJ
bnZvY2F0aW9uICosIE5hbWVTeW1ib2wgKiA9IF9fbnVsbCApOwoKICAgIHZvaWQgUmVwb3J0QWNj
ZXNzZWRGaWVsZE5vdEZvdW5kKEFzdEZpZWxkQWNjZXNzICosIFR5cGVTeW1ib2wgKik7CiAgICB2
b2lkIFNlYXJjaEZvclZhcmlhYmxlSW5FbnZpcm9ubWVudChUdXBsZTxWYXJpYWJsZVN5bWJvbCAq
PiAmLCBTZW1hbnRpY0Vudmlyb25tZW50IComLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2VtYW50aWNFbnZpcm9ubWVudCAqLCBOYW1lU3ltYm9sICosIExleFN0cmVh
bTo6VG9rZW5JbmRleCk7CiAgICBWYXJpYWJsZVN5bWJvbCAqRmluZE1pc3NwZWxsZWRWYXJpYWJs
ZU5hbWUoVHlwZVN5bWJvbCAqLCBMZXhTdHJlYW06OlRva2VuSW5kZXgpOwogICAgVmFyaWFibGVT
eW1ib2wgKkZpbmRWYXJpYWJsZUluRW52aXJvbm1lbnQoU2VtYW50aWNFbnZpcm9ubWVudCAqJiwg
U2VtYW50aWNFbnZpcm9ubWVudCAqLCBMZXhTdHJlYW06OlRva2VuSW5kZXgpOwogICAgVmFyaWFi
bGVTeW1ib2wgKkZpbmRWYXJpYWJsZUluVHlwZShUeXBlU3ltYm9sICosIEFzdEZpZWxkQWNjZXNz
ICosIE5hbWVTeW1ib2wgKiA9IF9fbnVsbCApOwogICAgVmFyaWFibGVTeW1ib2wgKkZpbmRJbnN0
YW5jZShUeXBlU3ltYm9sICosIFR5cGVTeW1ib2wgKik7CiAgICBBc3RFeHByZXNzaW9uICpDcmVh
dGVBY2Nlc3NUb1R5cGUoQXN0ICosIFR5cGVTeW1ib2wgKik7CiAgICB2b2lkIENyZWF0ZUFjY2Vz
c1RvU2NvcGVkVmFyaWFibGUoQXN0U2ltcGxlTmFtZSAqLCBUeXBlU3ltYm9sICopOwogICAgdm9p
ZCBDcmVhdGVBY2Nlc3NUb1Njb3BlZE1ldGhvZChBc3RNZXRob2RJbnZvY2F0aW9uICosIFR5cGVT
eW1ib2wgKik7CgogICAgdm9pZCBUeXBlQWNjZXNzQ2hlY2soQXN0ICosIFR5cGVTeW1ib2wgKik7
CiAgICB2b2lkIFR5cGVOZXN0QWNjZXNzQ2hlY2soQXN0RXhwcmVzc2lvbiAqKTsKICAgIHZvaWQg
Q29uc3RydWN0b3JBY2Nlc3NDaGVjayhBc3RDbGFzc0luc3RhbmNlQ3JlYXRpb25FeHByZXNzaW9u
ICosIE1ldGhvZFN5bWJvbCAqKTsKICAgIHZvaWQgTWVtYmVyQWNjZXNzQ2hlY2soQXN0RmllbGRB
Y2Nlc3MgKiwgVHlwZVN5bWJvbCAqLCBTeW1ib2wgKik7CiAgICB2b2lkIFNpbXBsZU5hbWVBY2Nl
c3NDaGVjayhBc3RTaW1wbGVOYW1lICosIFR5cGVTeW1ib2wgKiwgU3ltYm9sICopOwoKICAgIHZv
aWQgKFNlbWFudGljOjoqUHJvY2Vzc1ByZVVuYXJ5RXhwcltBc3RQcmVVbmFyeUV4cHJlc3Npb246
Ol9udW1fa2luZHNdKShBc3RQcmVVbmFyeUV4cHJlc3Npb24gKik7CiAgICB2b2lkIFByb2Nlc3NQ
TFVTKEFzdFByZVVuYXJ5RXhwcmVzc2lvbiAqKTsKICAgIHZvaWQgUHJvY2Vzc01JTlVTKEFzdFBy
ZVVuYXJ5RXhwcmVzc2lvbiAqKTsKICAgIHZvaWQgUHJvY2Vzc1RXSURETEUoQXN0UHJlVW5hcnlF
eHByZXNzaW9uICopOwogICAgdm9pZCBQcm9jZXNzTk9UKEFzdFByZVVuYXJ5RXhwcmVzc2lvbiAq
KTsKICAgIHZvaWQgUHJvY2Vzc1BMVVNQTFVTT3JNSU5VU01JTlVTKEFzdFByZVVuYXJ5RXhwcmVz
c2lvbiAqKTsKCiAgICB2b2lkIChTZW1hbnRpYzo6KlByb2Nlc3NCaW5hcnlFeHByW0FzdEJpbmFy
eUV4cHJlc3Npb246Ol9udW1fa2luZHNdKShBc3RCaW5hcnlFeHByZXNzaW9uICopOwogICAgdm9p
ZCBQcm9jZXNzUExVUyhBc3RCaW5hcnlFeHByZXNzaW9uICopOwogICAgdm9pZCBQcm9jZXNzTEVG
VF9TSElGVChBc3RCaW5hcnlFeHByZXNzaW9uICopOwogICAgdm9pZCBQcm9jZXNzUklHSFRfU0hJ
RlQoQXN0QmluYXJ5RXhwcmVzc2lvbiAqKTsKICAgIHZvaWQgUHJvY2Vzc1VOU0lHTkVEX1JJR0hU
X1NISUZUKEFzdEJpbmFyeUV4cHJlc3Npb24gKik7CiAgICB2b2lkIFByb2Nlc3NMRVNTKEFzdEJp
bmFyeUV4cHJlc3Npb24gKik7CiAgICB2b2lkIFByb2Nlc3NHUkVBVEVSKEFzdEJpbmFyeUV4cHJl
c3Npb24gKik7CiAgICB2b2lkIFByb2Nlc3NMRVNTX0VRVUFMKEFzdEJpbmFyeUV4cHJlc3Npb24g
Kik7CiAgICB2b2lkIFByb2Nlc3NHUkVBVEVSX0VRVUFMKEFzdEJpbmFyeUV4cHJlc3Npb24gKik7
CiAgICB2b2lkIFByb2Nlc3NBTkQoQXN0QmluYXJ5RXhwcmVzc2lvbiAqKTsKICAgIHZvaWQgUHJv
Y2Vzc1hPUihBc3RCaW5hcnlFeHByZXNzaW9uICopOwogICAgdm9pZCBQcm9jZXNzSU9SKEFzdEJp
bmFyeUV4cHJlc3Npb24gKik7CiAgICB2b2lkIFByb2Nlc3NBTkRfQU5EKEFzdEJpbmFyeUV4cHJl
c3Npb24gKik7CiAgICB2b2lkIFByb2Nlc3NPUl9PUihBc3RCaW5hcnlFeHByZXNzaW9uICopOwog
ICAgdm9pZCBQcm9jZXNzRVFVQUxfRVFVQUwoQXN0QmluYXJ5RXhwcmVzc2lvbiAqKTsKICAgIHZv
aWQgUHJvY2Vzc05PVF9FUVVBTChBc3RCaW5hcnlFeHByZXNzaW9uICopOwogICAgdm9pZCBQcm9j
ZXNzU1RBUihBc3RCaW5hcnlFeHByZXNzaW9uICopOwogICAgdm9pZCBQcm9jZXNzTUlOVVMoQXN0
QmluYXJ5RXhwcmVzc2lvbiAqKTsKICAgIHZvaWQgUHJvY2Vzc1NMQVNIKEFzdEJpbmFyeUV4cHJl
c3Npb24gKik7CiAgICB2b2lkIFByb2Nlc3NNT0QoQXN0QmluYXJ5RXhwcmVzc2lvbiAqKTsKICAg
IHZvaWQgUHJvY2Vzc0lOU1RBTkNFT0YoQXN0QmluYXJ5RXhwcmVzc2lvbiAqKTsKCiAgICBNZXRo
b2RTeW1ib2wgKkZpbmRNZXRob2RNZW1iZXIoVHlwZVN5bWJvbCAqLCBUeXBlU3ltYm9sICosIEFz
dE1ldGhvZEludm9jYXRpb24gKik7CiAgICB2b2lkIFByb2Nlc3NNZXRob2ROYW1lKEFzdE1ldGhv
ZEludm9jYXRpb24gKik7CiAgICB2b2lkIChTZW1hbnRpYzo6KlByb2Nlc3NFeHByT3JTdG10W0Fz
dDo6X251bV9raW5kc10pKEFzdCAqKTsKICAgIGlubGluZSB2b2lkIFByb2Nlc3NTdGF0ZW1lbnQo
QXN0U3RhdGVtZW50ICpzdG10KQogICAgewogICAgICAgICh0aGlzIC0+KiBQcm9jZXNzRXhwck9y
U3RtdFtzdG10IC0+IGtpbmRdKShzdG10KTsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBQcm9jZXNz
RXhwcmVzc2lvbihBc3RFeHByZXNzaW9uICpleHByKQogICAgewogICAgICAgICh0aGlzIC0+KiBQ
cm9jZXNzRXhwck9yU3RtdFtleHByIC0+IGtpbmRdKShleHByKTsKICAgIH0KCiAgICBpbmxpbmUg
dm9pZCBQcm9jZXNzRXhwcmVzc2lvbk9yU3RyaW5nQ29uc3RhbnQoQXN0RXhwcmVzc2lvbiAqZXhw
cikKICAgIHsKICAgICAgICAodGhpcyAtPiogUHJvY2Vzc0V4cHJPclN0bXRbZXhwciAtPiBraW5k
XSkoZXhwcik7CiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAg
IGlmIChleHByIC0+IHN5bWJvbCA9PSBjb250cm9sLlN0cmluZygpICYmICghIGV4cHIgLT4gSXND
b25zdGFudCgpKSkKICAgICAgICAgICAgY29udHJvbC5VdGY4X3Bvb2wuQ2hlY2tTdHJpbmdDb25z
dGFudChleHByKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHZvaWQgUHJvY2Vzc0xvY2Fs
VmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudChBc3QgKik7CiAgICB2b2lkIFByb2Nlc3NCbG9j
ayhBc3QgKik7CiAgICB2b2lkIFByb2Nlc3NGb3JTdGF0ZW1lbnQoQXN0ICopOwogICAgdm9pZCBQ
cm9jZXNzU3dpdGNoU3RhdGVtZW50KEFzdCAqKTsKICAgIHZvaWQgUHJvY2Vzc1Rocm93U3RhdGVt
ZW50KEFzdCAqKTsKICAgIHZvaWQgUHJvY2Vzc1RyeVN0YXRlbWVudChBc3QgKik7CiAgICB2b2lk
IFByb2Nlc3NFeHByZXNzaW9uU3RhdGVtZW50KEFzdCAqKTsKICAgIHZvaWQgUHJvY2Vzc1N5bmNo
cm9uaXplZFN0YXRlbWVudChBc3QgKik7CiAgICB2b2lkIFByb2Nlc3NJZlN0YXRlbWVudChBc3Qg
Kik7CiAgICB2b2lkIFByb2Nlc3NXaGlsZVN0YXRlbWVudChBc3QgKik7CiAgICB2b2lkIFByb2Nl
c3NEb1N0YXRlbWVudChBc3QgKik7CiAgICB2b2lkIFByb2Nlc3NCcmVha1N0YXRlbWVudChBc3Qg
Kik7CiAgICB2b2lkIFByb2Nlc3NDb250aW51ZVN0YXRlbWVudChBc3QgKik7CiAgICB2b2lkIFBy
b2Nlc3NSZXR1cm5TdGF0ZW1lbnQoQXN0ICopOwogICAgdm9pZCBQcm9jZXNzRW1wdHlTdGF0ZW1l
bnQoQXN0ICopOwogICAgVHlwZVN5bWJvbCAqR2V0TG9jYWxUeXBlKEFzdENsYXNzRGVjbGFyYXRp
b24gKik7CiAgICB2b2lkIFByb2Nlc3NDbGFzc0RlY2xhcmF0aW9uKEFzdCAqKTsKICAgIHZvaWQg
R2VuZXJhdGVMb2NhbENvbnN0cnVjdG9yKE1ldGhvZFN5bWJvbCAqKTsKCiAgICB2b2lkIENoZWNr
U2ltcGxlTmFtZShBc3RTaW1wbGVOYW1lICosIFNlbWFudGljRW52aXJvbm1lbnQgKndoZXJlX2Zv
dW5kKTsKICAgIHZvaWQgUHJvY2Vzc1NpbXBsZU5hbWUoQXN0ICopOwogICAgdm9pZCBGaW5kVmFy
aWFibGVNZW1iZXIoVHlwZVN5bWJvbCAqLCBUeXBlU3ltYm9sICosIEFzdEZpZWxkQWNjZXNzICop
OwogICAgdm9pZCBQcm9jZXNzQW1iaWd1b3VzTmFtZShBc3QgKik7CiAgICB2b2lkIFByb2Nlc3NG
aWVsZEFjY2VzcyhBc3QgKik7CiAgICB2b2lkIFByb2Nlc3NJbnRlZ2VyTGl0ZXJhbChBc3QgKik7
CiAgICB2b2lkIFByb2Nlc3NMb25nTGl0ZXJhbChBc3QgKik7CiAgICB2b2lkIFByb2Nlc3NGbG9h
dGluZ1BvaW50TGl0ZXJhbChBc3QgKik7CiAgICB2b2lkIFByb2Nlc3NEb3VibGVMaXRlcmFsKEFz
dCAqKTsKICAgIHZvaWQgUHJvY2Vzc1RydWVMaXRlcmFsKEFzdCAqKTsKICAgIHZvaWQgUHJvY2Vz
c0ZhbHNlTGl0ZXJhbChBc3QgKik7CiAgICB2b2lkIFByb2Nlc3NTdHJpbmdMaXRlcmFsKEFzdCAq
KTsKICAgIHZvaWQgUHJvY2Vzc0NoYXJhY3RlckxpdGVyYWwoQXN0ICopOwogICAgdm9pZCBQcm9j
ZXNzQXJyYXlBY2Nlc3MoQXN0ICopOwogICAgdm9pZCBQcm9jZXNzTWV0aG9kSW52b2NhdGlvbihB
c3QgKik7CiAgICB2b2lkIFByb2Nlc3NOdWxsTGl0ZXJhbChBc3QgKik7CiAgICB2b2lkIFByb2Nl
c3NUaGlzRXhwcmVzc2lvbihBc3QgKik7CiAgICB2b2lkIFByb2Nlc3NTdXBlckV4cHJlc3Npb24o
QXN0ICopOwogICAgdm9pZCBQcm9jZXNzUGFyZW50aGVzaXplZEV4cHJlc3Npb24oQXN0ICopOwog
ICAgdm9pZCBVcGRhdGVHZW5lcmF0ZWRMb2NhbENvbnN0cnVjdG9yKE1ldGhvZFN5bWJvbCAqKTsK
ICAgIHZvaWQgVXBkYXRlTG9jYWxDb25zdHJ1Y3RvcnMoVHlwZVN5bWJvbCAqKTsKICAgIHZvaWQg
R2V0QW5vbnltb3VzQ29uc3RydWN0b3IoQXN0Q2xhc3NJbnN0YW5jZUNyZWF0aW9uRXhwcmVzc2lv
biAqLCBUeXBlU3ltYm9sICopOwogICAgVHlwZVN5bWJvbCAqR2V0QW5vbnltb3VzVHlwZShBc3RD
bGFzc0luc3RhbmNlQ3JlYXRpb25FeHByZXNzaW9uICosIFR5cGVTeW1ib2wgKik7CiAgICB2b2lk
IFByb2Nlc3NDbGFzc0luc3RhbmNlQ3JlYXRpb25FeHByZXNzaW9uKEFzdCAqKTsKICAgIHZvaWQg
UHJvY2Vzc0FycmF5Q3JlYXRpb25FeHByZXNzaW9uKEFzdCAqKTsKICAgIHZvaWQgUHJvY2Vzc1Bv
c3RVbmFyeUV4cHJlc3Npb24oQXN0ICopOwogICAgdm9pZCBQcm9jZXNzUHJlVW5hcnlFeHByZXNz
aW9uKEFzdCAqKTsKICAgIHZvaWQgUHJvY2Vzc0Nhc3RFeHByZXNzaW9uKEFzdCAqKTsKICAgIHZv
aWQgUHJvY2Vzc0JpbmFyeUV4cHJlc3Npb24oQXN0ICopOwogICAgdm9pZCBQcm9jZXNzVHlwZUV4
cHJlc3Npb24oQXN0ICopOwogICAgdm9pZCBQcm9jZXNzQ29uZGl0aW9uYWxFeHByZXNzaW9uKEFz
dCAqKTsKICAgIHZvaWQgUHJvY2Vzc0Fzc2lnbm1lbnRFeHByZXNzaW9uKEFzdCAqKTsKCiAgICB2
b2lkIFByb2Nlc3NWYXJpYWJsZUluaXRpYWxpemVyKEFzdFZhcmlhYmxlRGVjbGFyYXRvciAqKTsK
ICAgIHZvaWQgUHJvY2Vzc0FycmF5SW5pdGlhbGl6ZXIoQXN0QXJyYXlJbml0aWFsaXplciAqLCBU
eXBlU3ltYm9sICopOwoKICAgIHZvaWQgQ2hlY2tJbmhlcml0ZWRNZXRob2RUaHJvd3MoQXN0TWV0
aG9kRGVjbGFyYXRpb24gKiwgTWV0aG9kU3ltYm9sICopOwogICAgdm9pZCBDaGVja01ldGhvZE92
ZXJyaWRlKEFzdE1ldGhvZERlY2xhcmF0aW9uICosIE1ldGhvZFN5bWJvbCAqKTsKICAgIHZvaWQg
Q2hlY2tJbmhlcml0ZWRNZXRob2RUaHJvd3MoQXN0Q2xhc3NEZWNsYXJhdGlvbiAqLCBNZXRob2RT
eW1ib2wgKiwgTWV0aG9kU3ltYm9sICopOwogICAgdm9pZCBDaGVja01ldGhvZE92ZXJyaWRlKEFz
dENsYXNzRGVjbGFyYXRpb24gKiwgTWV0aG9kU3ltYm9sICosIE1ldGhvZFN5bWJvbCAqKTsKICAg
IHZvaWQgQWRkSW5oZXJpdGVkVHlwZXMoVHlwZVN5bWJvbCAqLCBUeXBlU3ltYm9sICopOwogICAg
dm9pZCBBZGRJbmhlcml0ZWRGaWVsZHMoVHlwZVN5bWJvbCAqLCBUeXBlU3ltYm9sICopOwogICAg
dm9pZCBBZGRJbmhlcml0ZWRNZXRob2RzKFR5cGVTeW1ib2wgKiwgVHlwZVN5bWJvbCAqLCBMZXhT
dHJlYW06OlRva2VuSW5kZXgpOwogICAgdm9pZCBDb21wdXRlVHlwZXNDbG9zdXJlKFR5cGVTeW1i
b2wgKiwgTGV4U3RyZWFtOjpUb2tlbkluZGV4KTsKICAgIHZvaWQgQ29tcHV0ZUZpZWxkc0Nsb3N1
cmUoVHlwZVN5bWJvbCAqLCBMZXhTdHJlYW06OlRva2VuSW5kZXgpOwogICAgdm9pZCBDb21wdXRl
TWV0aG9kc0Nsb3N1cmUoVHlwZVN5bWJvbCAqLCBMZXhTdHJlYW06OlRva2VuSW5kZXgpOwoKICAg
IGlubGluZSBib29sIEluUmFuZ2UoY29uc3QgY2hhciAqYnVmZmVyX3B0ciwgY29uc3QgY2hhciAq
YnVmZmVyX3RhaWwsIGludCBzaXplKSB7IHJldHVybiAoKGJ1ZmZlcl9wdHIgKyBzaXplKSA8PSBi
dWZmZXJfdGFpbCk7IH0KICAgIFR5cGVTeW1ib2wgKlJldHJpZXZlTmVzdGVkVHlwZXMoVHlwZVN5
bWJvbCAqLCB3Y2hhcl90ICosIExleFN0cmVhbTo6VG9rZW5JbmRleCk7CiAgICBUeXBlU3ltYm9s
ICpHZXRDbGFzc1Bvb2woVHlwZVN5bWJvbCAqLCBUeXBlU3ltYm9sICoqLCBjb25zdCBjaGFyICoq
LCBpbnQsIExleFN0cmVhbTo6VG9rZW5JbmRleCk7CiAgICB2b2lkIFByb2Nlc3NCYWRDbGFzcyhU
eXBlU3ltYm9sICosIExleFN0cmVhbTo6VG9rZW5JbmRleCk7CiAgICBib29sIFByb2Nlc3NDbGFz
c0ZpbGUoVHlwZVN5bWJvbCAqLCBjb25zdCBjaGFyICosIGludCwgTGV4U3RyZWFtOjpUb2tlbklu
ZGV4KTsKICAgIHZvaWQgUmVhZENsYXNzRmlsZShUeXBlU3ltYm9sICosIExleFN0cmVhbTo6VG9r
ZW5JbmRleCk7CgogICAgIAogICAgIAogICAgIAogICAgIAogICAgaW5saW5lIGJvb2wgQ2hlY2tl
ZEV4Y2VwdGlvbihUeXBlU3ltYm9sICpleGNlcHRpb24pCiAgICB7CiAgICAgICAgcmV0dXJuICgh
IChleGNlcHRpb24gLT4gSXNTdWJjbGFzcyhjb250cm9sLlJ1bnRpbWVFeGNlcHRpb24oKSkgfHwg
ZXhjZXB0aW9uIC0+IElzU3ViY2xhc3MoY29udHJvbC5FcnJvcigpKSkpOwogICAgfQoKcHVibGlj
OgoKICAgIHN0YXRpYyBpbmxpbmUgdTEgR2V0VTEoY29uc3QgY2hhciAqKTsKICAgIHN0YXRpYyBp
bmxpbmUgdTIgR2V0VTIoY29uc3QgY2hhciAqKTsKICAgIHN0YXRpYyBpbmxpbmUgdTQgR2V0VTQo
Y29uc3QgY2hhciAqKTsKCiAgICBzdGF0aWMgaW5saW5lIHUxIEdldEFuZFNraXBVMShjb25zdCBj
aGFyIComKTsKICAgIHN0YXRpYyBpbmxpbmUgdTIgR2V0QW5kU2tpcFUyKGNvbnN0IGNoYXIgKiYp
OwogICAgc3RhdGljIGlubGluZSB1NCBHZXRBbmRTa2lwVTQoY29uc3QgY2hhciAqJik7CiAgICBz
dGF0aWMgaW5saW5lIHZvaWQgU2tpcChjb25zdCBjaGFyIComLCBpbnQpOwoKICAgIGlubGluZSB2
b2lkIEFkZERlcGVuZGVuY2UoVHlwZVN5bWJvbCAqLCBUeXBlU3ltYm9sICosIExleFN0cmVhbTo6
VG9rZW5JbmRleCwgYm9vbCA9IGZhbHNlKTsKICAgIGlubGluZSB2b2lkIFNldE9iamVjdFN1cGVy
VHlwZShUeXBlU3ltYm9sICosIExleFN0cmVhbTo6VG9rZW5JbmRleCk7CiAgICBpbmxpbmUgdm9p
ZCBBZGRTdHJpbmdDb252ZXJzaW9uRGVwZW5kZW5jZShUeXBlU3ltYm9sICosIExleFN0cmVhbTo6
VG9rZW5JbmRleCk7Cn07CgoKaW5saW5lIHZvaWQgU2VtYW50aWM6OkFkZERlcGVuZGVuY2UoVHlw
ZVN5bWJvbCAqYmFzZV90eXBlXywgVHlwZVN5bWJvbCAqcGFyZW50X3R5cGVfLCBMZXhTdHJlYW06
OlRva2VuSW5kZXggdG9rLCBib29sIHN0YXRpY19hY2Nlc3MpCnsKICAgIGlmIChiYXNlX3R5cGVf
ICE9IGNvbnRyb2wubm9fdHlwZSkKICAgIHsKICAgICAgICBUeXBlU3ltYm9sICpiYXNlX3R5cGUg
PSBiYXNlX3R5cGVfIC0+IG91dGVybW9zdF90eXBlLAogICAgICAgICAgICAgICAgICAgKnBhcmVu
dF90eXBlID0gcGFyZW50X3R5cGVfIC0+IG91dGVybW9zdF90eXBlOwoKICAgICAgICBwYXJlbnRf
dHlwZSAtPiBkZXBlbmRlbnRzIC0+IEFkZEVsZW1lbnQoYmFzZV90eXBlKTsKICAgICAgICBpZiAo
c3RhdGljX2FjY2VzcykKICAgICAgICAgICAgIGJhc2VfdHlwZSAtPiBzdGF0aWNfcGFyZW50cyAt
PiBBZGRFbGVtZW50KHBhcmVudF90eXBlKTsKICAgICAgICBlbHNlIGJhc2VfdHlwZSAtPiBwYXJl
bnRzIC0+IEFkZEVsZW1lbnQocGFyZW50X3R5cGUpOwoKICAgICAgICBpZiAoY29udHJvbC5vcHRp
b24ucGVkYW50aWMpCiAgICAgICAgewogICAgICAgICAgICBpZiAocGFyZW50X3R5cGUgLT4gQ29u
dGFpbmluZ1BhY2thZ2UoKSA9PSBjb250cm9sLnVubmFtZWRfcGFja2FnZSAmJgogICAgICAgICAg
ICAgICAgYmFzZV90eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgIT0gY29udHJvbC51bm5hbWVk
X3BhY2thZ2UpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNl
bWFudGljRXJyb3I6OlBBUkVOVF9UWVBFX0lOX1VOTkFNRURfUEFDS0FHRSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRvaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF90eXBlXyAtPiBDb250YWlu
aW5nUGFja2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJlbnRfdHlwZV8gLT4gRXh0ZXJuYWxOYW1lKCkpOwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgfQoKICAgIHJldHVybjsKfQoKaW5saW5lIHZvaWQgU2VtYW50aWM6OlNldE9iamVj
dFN1cGVyVHlwZShUeXBlU3ltYm9sICp0eXBlLCBMZXhTdHJlYW06OlRva2VuSW5kZXggdG9rKQp7
CiAgICB0eXBlIC0+IHN1cGVyID0gY29udHJvbC5PYmplY3QoKTsKICAgIEFkZERlcGVuZGVuY2Uo
dHlwZSwgdHlwZSAtPiBzdXBlciwgdG9rKTsKfQoKaW5saW5lIHZvaWQgU2VtYW50aWM6OkFkZFN0
cmluZ0NvbnZlcnNpb25EZXBlbmRlbmNlKFR5cGVTeW1ib2wgKnR5cGUsIExleFN0cmVhbTo6VG9r
ZW5JbmRleCB0b2spCnsKICAgIGlmICh0eXBlID09IGNvbnRyb2wubnVsbF90eXBlKQogICAgICAg
ICA7CiAgICBlbHNlIGlmICh0eXBlID09IGNvbnRyb2wuYm9vbGVhbl90eXBlKQogICAgICAgICBB
ZGREZXBlbmRlbmNlKFRoaXNUeXBlKCksIGNvbnRyb2wuQm9vbGVhbigpLCB0b2spOwogICAgZWxz
ZSBpZiAodHlwZSA9PSBjb250cm9sLmNoYXJfdHlwZSkKICAgICAgICAgQWRkRGVwZW5kZW5jZShU
aGlzVHlwZSgpLCBjb250cm9sLkNoYXJhY3RlcigpLCB0b2spOwogICAgZWxzZSBpZiAodHlwZSA9
PSBjb250cm9sLmludF90eXBlKQogICAgICAgICBBZGREZXBlbmRlbmNlKFRoaXNUeXBlKCksIGNv
bnRyb2wuSW50ZWdlcigpLCB0b2spOwogICAgZWxzZSBpZiAodHlwZSA9PSBjb250cm9sLmxvbmdf
dHlwZSkKICAgICAgICAgQWRkRGVwZW5kZW5jZShUaGlzVHlwZSgpLCBjb250cm9sLkxvbmcoKSwg
dG9rKTsKICAgIGVsc2UgaWYgKHR5cGUgPT0gY29udHJvbC5mbG9hdF90eXBlKQogICAgICAgICBB
ZGREZXBlbmRlbmNlKFRoaXNUeXBlKCksIGNvbnRyb2wuRmxvYXQoKSwgdG9rKTsKICAgIGVsc2Ug
IAogICAgICAgICBBZGREZXBlbmRlbmNlKFRoaXNUeXBlKCksIGNvbnRyb2wuRG91YmxlKCksIHRv
ayk7Cn0KCgoKCgoKCiMgMTQgIi4uLy4uL2ppa2VzL3NyYy9leHByLmNwcCIgMgoKCiMgMSAiLi4v
Li4vamlrZXMvc3JjL3RhYmxlLmgiIDEKIAogCiAKIAogCiAKIAogCiAKCgoKCgoKCgoKCmNsYXNz
IFZhcmlhYmxlU2hhZG93U3ltYm9sCnsKcHVibGljOgogICAgVmFyaWFibGVTeW1ib2wgKnZhcmlh
YmxlX3N5bWJvbDsKCiAgICBWYXJpYWJsZVNoYWRvd1N5bWJvbChWYXJpYWJsZVN5bWJvbCAqdmFy
aWFibGVfc3ltYm9sXykgOiB2YXJpYWJsZV9zeW1ib2wodmFyaWFibGVfc3ltYm9sXyksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25mbGljdChfX251bGwgKQogICAge30KCiAgICB+VmFyaWFibGVTaGFkb3dTeW1ib2woKQogICAg
ewogICAgICAgIGRlbGV0ZSBjb25mbGljdDsKICAgIH0KCiAgICBWYXJpYWJsZVN5bWJvbCAqQ29u
ZmxpY3QoaW50IGkpIHsgcmV0dXJuICgqY29uZmxpY3QpW2ldOyB9CgogICAgaW5saW5lIGludCBO
dW1Db25mbGljdHMoKQogICAgewogICAgICAgIHJldHVybiAoY29uZmxpY3QgPyBjb25mbGljdCAt
PiBMZW5ndGgoKSA6IDApOwogICAgfQogICAgaW5saW5lIHZvaWQgQWRkQ29uZmxpY3QoVmFyaWFi
bGVTeW1ib2wgKmNvbmZsaWN0X3N5bWJvbCkKICAgIHsKICAgICAgICBpZiAoKHZhcmlhYmxlX3N5
bWJvbCAhPSBjb25mbGljdF9zeW1ib2wpICYmICghIEZpbmQoY29uZmxpY3Rfc3ltYm9sKSkpCiAg
ICAgICAgICAgIGNvbmZsaWN0IC0+IE5leHQoKSA9IGNvbmZsaWN0X3N5bWJvbDsKICAgICAgICBy
ZXR1cm47CiAgICB9CiAgICBpbmxpbmUgdm9pZCBDb21wcmVzc1NwYWNlKCkKICAgIHsKICAgICAg
ICBpZiAoY29uZmxpY3QpCiAgICAgICAgICAgICh2b2lkKSBjb25mbGljdCAtPiBBcnJheSgpOwog
ICAgfQoKcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyBFeHBhbmRlZEZpZWxkVGFibGU7CiAgICBW
YXJpYWJsZVNoYWRvd1N5bWJvbCAqbmV4dDsKCiAgICBDb252ZXJ0aWJsZUFycmF5PFZhcmlhYmxl
U3ltYm9sICo+ICpjb25mbGljdDsKCiAgICBib29sIEZpbmQoVmFyaWFibGVTeW1ib2wgKmNvbmZs
aWN0X3N5bWJvbCkKICAgIHsKICAgICAgICBpZiAoISBjb25mbGljdCkKICAgICAgICAgICAgY29u
ZmxpY3QgPSBuZXcgQ29udmVydGlibGVBcnJheTxWYXJpYWJsZVN5bWJvbCAqPig0KTsKICAgICAg
ICBmb3IgKGludCBrID0gMDsgayA8IGNvbmZsaWN0IC0+IExlbmd0aCgpOyBrKyspCiAgICAgICAg
ICAgIGlmICgoKmNvbmZsaWN0KVtrXSA9PSBjb25mbGljdF9zeW1ib2wpCiAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn07CgoKY2xhc3MgTWV0
aG9kU2hhZG93U3ltYm9sCnsKcHVibGljOgogICAgTWV0aG9kU3ltYm9sICptZXRob2Rfc3ltYm9s
OwogICAgTWV0aG9kU2hhZG93U3ltYm9sICpuZXh0X21ldGhvZDsKCiAgICBNZXRob2RTaGFkb3dT
eW1ib2woTWV0aG9kU3ltYm9sICptZXRob2Rfc3ltYm9sXykgOiBtZXRob2Rfc3ltYm9sKG1ldGhv
ZF9zeW1ib2xfKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbmZsaWN0KF9fbnVsbCApCiAgICB7fQoKICAgIH5NZXRob2RTaGFkb3dTeW1i
b2woKQogICAgewogICAgICAgIGRlbGV0ZSBjb25mbGljdDsKICAgIH0KCiAgICBNZXRob2RTeW1i
b2wgKkNvbmZsaWN0KGNvbnN0IGludCBpKSB7IHJldHVybiAoKmNvbmZsaWN0KVtpXTsgfQoKICAg
IGlubGluZSBpbnQgTnVtQ29uZmxpY3RzKCkKICAgIHsKICAgICAgICByZXR1cm4gKGNvbmZsaWN0
ID8gY29uZmxpY3QgLT4gTGVuZ3RoKCkgOiAwKTsKICAgIH0KICAgIGlubGluZSB2b2lkIEFkZENv
bmZsaWN0KE1ldGhvZFN5bWJvbCAqY29uZmxpY3Rfc3ltYm9sKQogICAgewogICAgICAgIGlmICgo
bWV0aG9kX3N5bWJvbCAhPSBjb25mbGljdF9zeW1ib2wpICYmICghIEZpbmQoY29uZmxpY3Rfc3lt
Ym9sKSkpCiAgICAgICAgICAgIGNvbmZsaWN0IC0+IE5leHQoKSA9IGNvbmZsaWN0X3N5bWJvbDsK
ICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbmxpbmUgdm9pZCBSZW1vdmVDb25mbGljdHMoKQog
ICAgewogICAgICAgIGRlbGV0ZSBjb25mbGljdDsKICAgICAgICBjb25mbGljdCA9IF9fbnVsbCA7
CiAgICB9CgogICAgaW5saW5lIHZvaWQgQ29tcHJlc3NTcGFjZSgpCiAgICB7CiAgICAgICAgaWYg
KGNvbmZsaWN0KQogICAgICAgICAgICAodm9pZCkgY29uZmxpY3QgLT4gQXJyYXkoKTsKICAgIH0K
CnByaXZhdGU6CiAgICBmcmllbmQgY2xhc3MgRXhwYW5kZWRNZXRob2RUYWJsZTsKICAgIE1ldGhv
ZFNoYWRvd1N5bWJvbCAqbmV4dDsKCiAgICBDb252ZXJ0aWJsZUFycmF5PE1ldGhvZFN5bWJvbCAq
PiAqY29uZmxpY3Q7CgogICAgYm9vbCBGaW5kKE1ldGhvZFN5bWJvbCAqY29uZmxpY3Rfc3ltYm9s
KQogICAgewogICAgICAgIGlmICghIGNvbmZsaWN0KQogICAgICAgICAgICBjb25mbGljdCA9IG5l
dyBDb252ZXJ0aWJsZUFycmF5PE1ldGhvZFN5bWJvbCAqPig0KTsKICAgICAgICBmb3IgKGludCBr
ID0gMDsgayA8IGNvbmZsaWN0IC0+IExlbmd0aCgpOyBrKyspCiAgICAgICAgICAgIGlmICgoKmNv
bmZsaWN0KVtrXSA9PSBjb25mbGljdF9zeW1ib2wpCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn07CgoKY2xhc3MgVHlwZVNoYWRvd1N5bWJv
bAp7CnB1YmxpYzoKICAgIFR5cGVTeW1ib2wgKnR5cGVfc3ltYm9sOwoKICAgIFR5cGVTaGFkb3dT
eW1ib2woVHlwZVN5bWJvbCAqdHlwZV9zeW1ib2xfKSA6IHR5cGVfc3ltYm9sKHR5cGVfc3ltYm9s
XyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25m
bGljdChfX251bGwgKQogICAge30KCiAgICB+VHlwZVNoYWRvd1N5bWJvbCgpCiAgICB7CiAgICAg
ICAgZGVsZXRlIGNvbmZsaWN0OwogICAgfQoKICAgIFR5cGVTeW1ib2wgKkNvbmZsaWN0KGludCBp
KSB7IHJldHVybiAoKmNvbmZsaWN0KVtpXTsgfQoKICAgIGlubGluZSBpbnQgTnVtQ29uZmxpY3Rz
KCkKICAgIHsKICAgICAgICByZXR1cm4gKGNvbmZsaWN0ID8gY29uZmxpY3QgLT4gTGVuZ3RoKCkg
OiAwKTsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBBZGRDb25mbGljdChUeXBlU3ltYm9sICpjb25m
bGljdF9zeW1ib2wpCiAgICB7CiAgICAgICAgaWYgKCh0eXBlX3N5bWJvbCAhPSBjb25mbGljdF9z
eW1ib2wpICYmICghIEZpbmQoY29uZmxpY3Rfc3ltYm9sKSkpCiAgICAgICAgICAgIGNvbmZsaWN0
IC0+IE5leHQoKSA9IGNvbmZsaWN0X3N5bWJvbDsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
aW5saW5lIHZvaWQgQ29tcHJlc3NTcGFjZSgpCiAgICB7CiAgICAgICAgaWYgKGNvbmZsaWN0KQog
ICAgICAgICAgICAodm9pZCkgY29uZmxpY3QgLT4gQXJyYXkoKTsKICAgIH0KCnByaXZhdGU6CiAg
ICBmcmllbmQgY2xhc3MgRXhwYW5kZWRUeXBlVGFibGU7CiAgICBUeXBlU2hhZG93U3ltYm9sICpu
ZXh0OwoKICAgIENvbnZlcnRpYmxlQXJyYXk8VHlwZVN5bWJvbCAqPiAqY29uZmxpY3Q7CgogICAg
Ym9vbCBGaW5kKFR5cGVTeW1ib2wgKmNvbmZsaWN0X3N5bWJvbCkKICAgIHsKICAgICAgICBpZiAo
ISBjb25mbGljdCkKICAgICAgICAgICAgY29uZmxpY3QgPSBuZXcgQ29udmVydGlibGVBcnJheTxU
eXBlU3ltYm9sICo+KDQpOwogICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgY29uZmxpY3QgLT4g
TGVuZ3RoKCk7IGsrKykKICAgICAgICAgICAgaWYgKCgqY29uZmxpY3QpW2tdID09IGNvbmZsaWN0
X3N5bWJvbCkKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIHJldHVybiBmYWxz
ZTsKICAgIH0KfTsKCgpjbGFzcyBFeHBhbmRlZFR5cGVUYWJsZQp7CnB1YmxpYzoKICAgIGVudW0K
ICAgIHsKICAgICAgICBERUZBVUxUX0hBU0hfU0laRSA9IDI1MSwKICAgICAgICBNQVhfSEFTSF9T
SVpFID0gNTA5CiAgICB9OwoKICAgIENvbnZlcnRpYmxlQXJyYXk8VHlwZVNoYWRvd1N5bWJvbCAq
PiBzeW1ib2xfcG9vbDsKCiAgICBpbmxpbmUgdm9pZCBDb21wcmVzc1NwYWNlKCkKICAgIHsKICAg
ICAgICBoYXNoX3NpemUgPSBzeW1ib2xfcG9vbC5MZW5ndGgoKTsKICAgICAgICBoYXNoX3NpemUg
PSAoaGFzaF9zaXplIDw9IDAgPyAxIDogKGhhc2hfc2l6ZSA+IE1BWF9IQVNIX1NJWkUgPyBNQVhf
SEFTSF9TSVpFIDogaGFzaF9zaXplKSk7CiAgICAgICAgZGVsZXRlIFtdIGJhc2U7CiAgICAgICAg
YmFzZSA9IChUeXBlU2hhZG93U3ltYm9sICoqKSBtZW1zZXQobmV3IFR5cGVTaGFkb3dTeW1ib2wg
KltoYXNoX3NpemVdLCAwLCBoYXNoX3NpemUgKiBzaXplb2YoVHlwZVNoYWRvd1N5bWJvbCAqKSk7
CgogICAgICAgIFR5cGVTaGFkb3dTeW1ib2wgKiphcnJheSA9IHN5bWJvbF9wb29sLkFycmF5KCk7
CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzeW1ib2xfcG9vbC5MZW5ndGgoKTsgaSsrKQog
ICAgICAgIHsKICAgICAgICAgICAgYXJyYXlbaV0gLT4gQ29tcHJlc3NTcGFjZSgpOwoKICAgICAg
ICAgICAgaW50IGsgPSBhcnJheVtpXSAtPiB0eXBlX3N5bWJvbCAtPiBuYW1lX3N5bWJvbCAtPiBp
bmRleCAlIGhhc2hfc2l6ZTsKICAgICAgICAgICAgYXJyYXlbaV0gLT4gbmV4dCA9IGJhc2Vba107
CiAgICAgICAgICAgIGJhc2Vba10gPSBhcnJheVtpXTsKICAgICAgICB9CiAgICB9CgogICAgRXhw
YW5kZWRUeXBlVGFibGUoaW50IGhhc2hfc2l6ZV8gPSBERUZBVUxUX0hBU0hfU0laRSkgOiBzeW1i
b2xfcG9vbCgxMCwgNCkKICAgIHsKICAgICAgICBoYXNoX3NpemUgPSAoaGFzaF9zaXplXyA8PSAw
ID8gMSA6IChoYXNoX3NpemVfID4gTUFYX0hBU0hfU0laRSA/IE1BWF9IQVNIX1NJWkUgOiBoYXNo
X3NpemVfKSk7CiAgICAgICAgYmFzZSA9IChUeXBlU2hhZG93U3ltYm9sICoqKSBtZW1zZXQobmV3
IFR5cGVTaGFkb3dTeW1ib2wgKltoYXNoX3NpemVdLCAwLCBoYXNoX3NpemUgKiBzaXplb2YoVHlw
ZVNoYWRvd1N5bWJvbCAqKSk7CiAgICB9CgogICAgfkV4cGFuZGVkVHlwZVRhYmxlKCkKICAgIHsK
ICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHN5bWJvbF9wb29sLkxlbmd0aCgpOyBrKyspCiAg
ICAgICAgICAgIGRlbGV0ZSBzeW1ib2xfcG9vbFtrXTsKICAgICAgICBkZWxldGUgW10gYmFzZTsK
ICAgIH0KCiAgICBpbmxpbmUgVHlwZVNoYWRvd1N5bWJvbCAqSW5zZXJ0VHlwZVNoYWRvd1N5bWJv
bChUeXBlU3ltYm9sICp0eXBlX3N5bWJvbCkKICAgIHsKICAgICAgICBpbnQgaSA9IHR5cGVfc3lt
Ym9sIC0+IG5hbWVfc3ltYm9sIC0+IGluZGV4ICUgaGFzaF9zaXplOwogICAgICAgIFR5cGVTaGFk
b3dTeW1ib2wgKnAgPSBuZXcgVHlwZVNoYWRvd1N5bWJvbCh0eXBlX3N5bWJvbCk7CiAgICAgICAg
cCAtPiBuZXh0ID0gYmFzZVtpXTsKICAgICAgICBiYXNlW2ldID0gcDsKICAgICAgICBzeW1ib2xf
cG9vbC5OZXh0KCkgPSBwOwoKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAgICBpbmxpbmUgVHlw
ZVNoYWRvd1N5bWJvbCAqRmluZFR5cGVTaGFkb3dTeW1ib2woTmFtZVN5bWJvbCAqbmFtZV9zeW1i
b2wpCiAgICB7CiAgICAgICAgVHlwZVNoYWRvd1N5bWJvbCAqcDsKICAgICAgICBmb3IgKHAgPSBi
YXNlW25hbWVfc3ltYm9sIC0+IGluZGV4ICUgaGFzaF9zaXplXTsgcDsgcCA9IHAgLT4gbmV4dCkK
ICAgICAgICAgICAgIGlmIChwIC0+IHR5cGVfc3ltYm9sIC0+IG5hbWVfc3ltYm9sID09IG5hbWVf
c3ltYm9sKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIHJldHVybiBwOwogICAgfQoK
cHJpdmF0ZToKICAgIFR5cGVTaGFkb3dTeW1ib2wgKipiYXNlOwogICAgaW50IGhhc2hfc2l6ZTsK
fTsKCmNsYXNzIEV4cGFuZGVkRmllbGRUYWJsZQp7CnB1YmxpYzoKICAgIGVudW0KICAgIHsKICAg
ICAgICBERUZBVUxUX0hBU0hfU0laRSA9IDI1MSwKICAgICAgICBNQVhfSEFTSF9TSVpFID0gNTA5
CiAgICB9OwoKICAgIENvbnZlcnRpYmxlQXJyYXk8VmFyaWFibGVTaGFkb3dTeW1ib2wgKj4gc3lt
Ym9sX3Bvb2w7CgogICAgaW5saW5lIHZvaWQgQ29tcHJlc3NTcGFjZSgpCiAgICB7CiAgICAgICAg
aGFzaF9zaXplID0gc3ltYm9sX3Bvb2wuTGVuZ3RoKCk7CiAgICAgICAgaGFzaF9zaXplID0gKGhh
c2hfc2l6ZSA8PSAwID8gMSA6IChoYXNoX3NpemUgPiBNQVhfSEFTSF9TSVpFID8gTUFYX0hBU0hf
U0laRSA6IGhhc2hfc2l6ZSkpOwogICAgICAgIGRlbGV0ZSBbXSBiYXNlOwogICAgICAgIGJhc2Ug
PSAoVmFyaWFibGVTaGFkb3dTeW1ib2wgKiopIG1lbXNldChuZXcgVmFyaWFibGVTaGFkb3dTeW1i
b2wgKltoYXNoX3NpemVdLCAwLCBoYXNoX3NpemUgKiBzaXplb2YoVmFyaWFibGVTaGFkb3dTeW1i
b2wgKikpOwoKICAgICAgICBWYXJpYWJsZVNoYWRvd1N5bWJvbCAqKmFycmF5ID0gc3ltYm9sX3Bv
b2wuQXJyYXkoKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN5bWJvbF9wb29sLkxlbmd0
aCgpOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBhcnJheVtpXSAtPiBDb21wcmVzc1NwYWNl
KCk7CgogICAgICAgICAgICBpbnQgayA9IGFycmF5W2ldIC0+IHZhcmlhYmxlX3N5bWJvbCAtPiBu
YW1lX3N5bWJvbCAtPiBpbmRleCAlIGhhc2hfc2l6ZTsKICAgICAgICAgICAgYXJyYXlbaV0gLT4g
bmV4dCA9IGJhc2Vba107CiAgICAgICAgICAgIGJhc2Vba10gPSBhcnJheVtpXTsKICAgICAgICB9
CiAgICB9CgogICAgRXhwYW5kZWRGaWVsZFRhYmxlKGludCBoYXNoX3NpemVfID0gREVGQVVMVF9I
QVNIX1NJWkUpIDogc3ltYm9sX3Bvb2woMTAsIDQpCiAgICB7CiAgICAgICAgaGFzaF9zaXplID0g
KGhhc2hfc2l6ZV8gPD0gMCA/IDEgOiAoaGFzaF9zaXplXyA+IE1BWF9IQVNIX1NJWkUgPyBNQVhf
SEFTSF9TSVpFIDogaGFzaF9zaXplXykpOwogICAgICAgIGJhc2UgPSAoVmFyaWFibGVTaGFkb3dT
eW1ib2wgKiopIG1lbXNldChuZXcgVmFyaWFibGVTaGFkb3dTeW1ib2wgKltoYXNoX3NpemVdLCAw
LCBoYXNoX3NpemUgKiBzaXplb2YoVmFyaWFibGVTaGFkb3dTeW1ib2wgKikpOwogICAgfQogICAg
fkV4cGFuZGVkRmllbGRUYWJsZSgpCiAgICB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBz
eW1ib2xfcG9vbC5MZW5ndGgoKTsgaSsrKQogICAgICAgICAgICBkZWxldGUgc3ltYm9sX3Bvb2xb
aV07CiAgICAgICAgZGVsZXRlIFtdIGJhc2U7CiAgICB9CgogICAgaW5saW5lIFZhcmlhYmxlU2hh
ZG93U3ltYm9sICpJbnNlcnRWYXJpYWJsZVNoYWRvd1N5bWJvbChWYXJpYWJsZVN5bWJvbCAqdmFy
aWFibGVfc3ltYm9sKQogICAgewogICAgICAgIGludCBpID0gdmFyaWFibGVfc3ltYm9sIC0+IG5h
bWVfc3ltYm9sIC0+IGluZGV4ICUgaGFzaF9zaXplOwogICAgICAgIFZhcmlhYmxlU2hhZG93U3lt
Ym9sICpwID0gbmV3IFZhcmlhYmxlU2hhZG93U3ltYm9sKHZhcmlhYmxlX3N5bWJvbCk7CiAgICAg
ICAgcCAtPiBuZXh0ID0gYmFzZVtpXTsKICAgICAgICBiYXNlW2ldID0gcDsKICAgICAgICBzeW1i
b2xfcG9vbC5OZXh0KCkgPSBwOwoKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAgICBpbmxpbmUg
VmFyaWFibGVTaGFkb3dTeW1ib2wgKkZpbmRWYXJpYWJsZVNoYWRvd1N5bWJvbChOYW1lU3ltYm9s
ICpuYW1lX3N5bWJvbCkKICAgIHsKICAgICAgICBWYXJpYWJsZVNoYWRvd1N5bWJvbCAqcDsKICAg
ICAgICBmb3IgKHAgPSBiYXNlW25hbWVfc3ltYm9sIC0+IGluZGV4ICUgaGFzaF9zaXplXTsgcDsg
cCA9IHAgLT4gbmV4dCkKICAgICAgICAgICAgaWYgKHAgLT4gdmFyaWFibGVfc3ltYm9sIC0+IG5h
bWVfc3ltYm9sID09IG5hbWVfc3ltYm9sKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
cmV0dXJuIHA7CiAgICB9Cgpwcml2YXRlOgogICAgVmFyaWFibGVTaGFkb3dTeW1ib2wgKipiYXNl
OwogICAgaW50IGhhc2hfc2l6ZTsKfTsKCgpjbGFzcyBFeHBhbmRlZE1ldGhvZFRhYmxlCnsKcHVi
bGljOgogICAgZW51bQogICAgewogICAgICAgIERFRkFVTFRfSEFTSF9TSVpFID0gMjUxLAogICAg
ICAgIE1BWF9IQVNIX1NJWkUgPSA1MDkKICAgIH07CgogICAgQ29udmVydGlibGVBcnJheTxNZXRo
b2RTaGFkb3dTeW1ib2wgKj4gc3ltYm9sX3Bvb2w7CgogICAgaW5saW5lIHZvaWQgQ29tcHJlc3NT
cGFjZSgpCiAgICB7CiAgICAgICAgaGFzaF9zaXplID0gc3ltYm9sX3Bvb2wuTGVuZ3RoKCk7CiAg
ICAgICAgaGFzaF9zaXplID0gKGhhc2hfc2l6ZSA8PSAwID8gMSA6IChoYXNoX3NpemUgPiBNQVhf
SEFTSF9TSVpFID8gTUFYX0hBU0hfU0laRSA6IGhhc2hfc2l6ZSkpOwogICAgICAgIGRlbGV0ZSBb
XSBiYXNlOwogICAgICAgIGJhc2UgPSAoTWV0aG9kU2hhZG93U3ltYm9sICoqKSBtZW1zZXQobmV3
IE1ldGhvZFNoYWRvd1N5bWJvbCAqW2hhc2hfc2l6ZV0sIDAsIGhhc2hfc2l6ZSAqIHNpemVvZihN
ZXRob2RTaGFkb3dTeW1ib2wgKikpOwoKICAgICAgICBNZXRob2RTaGFkb3dTeW1ib2wgKiphcnJh
eSA9IHN5bWJvbF9wb29sLkFycmF5KCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzeW1i
b2xfcG9vbC5MZW5ndGgoKTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgYXJyYXlbaV0gLT4g
Q29tcHJlc3NTcGFjZSgpOwoKICAgICAgICAgICAgTmFtZVN5bWJvbCAqbmFtZV9zeW1ib2wgPSBh
cnJheVtpXSAtPiBtZXRob2Rfc3ltYm9sIC0+IG5hbWVfc3ltYm9sOwogICAgICAgICAgICBNZXRo
b2RTaGFkb3dTeW1ib2wgKmJhc2Vfc2hhZG93ID0gRmluZE1ldGhvZFNoYWRvd1N5bWJvbChuYW1l
X3N5bWJvbCk7CiAgICAgICAgICAgIGlmICghIGJhc2Vfc2hhZG93KQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICBpbnQgayA9IG5hbWVfc3ltYm9sIC0+IGluZGV4ICUgaGFzaF9zaXplOwog
ICAgICAgICAgICAgICAgYXJyYXlbaV0gLT4gbmV4dCA9IGJhc2Vba107CiAgICAgICAgICAgICAg
ICBiYXNlW2tdID0gYXJyYXlbaV07CiAgICAgICAgICAgICAgICBhcnJheVtpXSAtPiBuZXh0X21l
dGhvZCA9IF9fbnVsbCA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICBhcnJheVtpXSAtPiBuZXh0X21ldGhvZCA9IGJhc2Vfc2hhZG93
IC0+IG5leHRfbWV0aG9kOwogICAgICAgICAgICAgICAgYmFzZV9zaGFkb3cgLT4gbmV4dF9tZXRo
b2QgPSBhcnJheVtpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBFeHBhbmRl
ZE1ldGhvZFRhYmxlKGludCBoYXNoX3NpemVfID0gREVGQVVMVF9IQVNIX1NJWkUpIDogc3ltYm9s
X3Bvb2woMTAsIDQpCiAgICB7CiAgICAgICAgaGFzaF9zaXplID0gKGhhc2hfc2l6ZV8gPD0gMCA/
IDEgOiAoaGFzaF9zaXplXyA+IE1BWF9IQVNIX1NJWkUgPyBNQVhfSEFTSF9TSVpFIDogaGFzaF9z
aXplXykpOwogICAgICAgIGJhc2UgPSAoTWV0aG9kU2hhZG93U3ltYm9sICoqKSBtZW1zZXQobmV3
IE1ldGhvZFNoYWRvd1N5bWJvbCAqW2hhc2hfc2l6ZV0sIDAsIGhhc2hfc2l6ZSAqIHNpemVvZihN
ZXRob2RTaGFkb3dTeW1ib2wgKikpOwogICAgfQogICAgfkV4cGFuZGVkTWV0aG9kVGFibGUoKQog
ICAgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3ltYm9sX3Bvb2wuTGVuZ3RoKCk7IGkr
KykKICAgICAgICAgICAgZGVsZXRlIHN5bWJvbF9wb29sW2ldOwogICAgICAgZGVsZXRlIFtdIGJh
c2U7CiAgICB9CgogICAgaW5saW5lIE1ldGhvZFNoYWRvd1N5bWJvbCAqRmluZE1ldGhvZFNoYWRv
d1N5bWJvbChOYW1lU3ltYm9sICpuYW1lX3N5bWJvbCkKICAgIHsKICAgICAgICBNZXRob2RTaGFk
b3dTeW1ib2wgKnA7CiAgICAgICAgZm9yIChwID0gYmFzZVtuYW1lX3N5bWJvbCAtPiBpbmRleCAl
IGhhc2hfc2l6ZV07IHA7IHAgPSBwIC0+IG5leHQpCiAgICAgICAgICAgIGlmIChwIC0+IG1ldGhv
ZF9zeW1ib2wgLT4gbmFtZV9zeW1ib2wgPT0gbmFtZV9zeW1ib2wpCiAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBJbnNlcnRNZXRo
b2RTaGFkb3dTeW1ib2woTWV0aG9kU3ltYm9sICptZXRob2Rfc3ltYm9sKQogICAgewogICAgICAg
IGludCBpID0gbWV0aG9kX3N5bWJvbCAtPiBuYW1lX3N5bWJvbCAtPiBpbmRleCAlIGhhc2hfc2l6
ZTsKICAgICAgICBNZXRob2RTaGFkb3dTeW1ib2wgKnAgPSBuZXcgTWV0aG9kU2hhZG93U3ltYm9s
KG1ldGhvZF9zeW1ib2wpOwogICAgICAgIHAgLT4gbmV4dF9tZXRob2QgPSBfX251bGwgOwogICAg
ICAgIHAgLT4gbmV4dCA9IGJhc2VbaV07CiAgICAgICAgYmFzZVtpXSA9IHA7CiAgICAgICAgc3lt
Ym9sX3Bvb2wuTmV4dCgpID0gcDsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlubGluZSB2
b2lkIE92ZXJsb2FkKE1ldGhvZFNoYWRvd1N5bWJvbCAqYmFzZV9zaGFkb3csIE1ldGhvZFN5bWJv
bCAqb3ZlcmxvYWRfbWV0aG9kKQogICAgewogICAgICAgIE1ldGhvZFNoYWRvd1N5bWJvbCAqc2hh
ZG93ID0gbmV3IE1ldGhvZFNoYWRvd1N5bWJvbChvdmVybG9hZF9tZXRob2QpOwogICAgICAgIHN5
bWJvbF9wb29sLk5leHQoKSA9IHNoYWRvdzsKICAgICAgICBzaGFkb3cgLT4gbmV4dF9tZXRob2Qg
PSBiYXNlX3NoYWRvdyAtPiBuZXh0X21ldGhvZDsKICAgICAgICBiYXNlX3NoYWRvdyAtPiBuZXh0
X21ldGhvZCA9IHNoYWRvdzsKICAgIH0KCiAgICBpbmxpbmUgdm9pZCBPdmVybG9hZChNZXRob2RT
eW1ib2wgKm92ZXJsb2FkX21ldGhvZCkKICAgIHsKICAgICAgICBNZXRob2RTaGFkb3dTeW1ib2wg
KmJhc2Vfc2hhZG93ID0gRmluZE1ldGhvZFNoYWRvd1N5bWJvbChvdmVybG9hZF9tZXRob2QgLT4g
bmFtZV9zeW1ib2wpOwogICAgICAgIGlmICghIGJhc2Vfc2hhZG93KQogICAgICAgICAgICAgSW5z
ZXJ0TWV0aG9kU2hhZG93U3ltYm9sKG92ZXJsb2FkX21ldGhvZCk7CiAgICAgICAgZWxzZSBPdmVy
bG9hZChiYXNlX3NoYWRvdywgb3ZlcmxvYWRfbWV0aG9kKTsKICAgIH0KCiAgICBNZXRob2RTaGFk
b3dTeW1ib2wgKkZpbmRPdmVybG9hZE1ldGhvZFNoYWRvdyhNZXRob2RTeW1ib2wgKm92ZXJsb2Fk
X21ldGhvZCwgU2VtYW50aWMgKnNlbSwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IHRvaykKICAgIHsK
ICAgICAgICBpZiAoISBvdmVybG9hZF9tZXRob2QgLT4gSXNUeXBlZCgpKQogICAgICAgICAgICBv
dmVybG9hZF9tZXRob2QgLT4gUHJvY2Vzc01ldGhvZFNpZ25hdHVyZShzZW0sIHRvayk7CgogICAg
ICAgIGZvciAoTWV0aG9kU2hhZG93U3ltYm9sICptZXRob2Rfc2hhZG93ID0gRmluZE1ldGhvZFNo
YWRvd1N5bWJvbChvdmVybG9hZF9tZXRob2QgLT4gbmFtZV9zeW1ib2wpOwogICAgICAgICAgICAg
bWV0aG9kX3NoYWRvdzsKICAgICAgICAgICAgIG1ldGhvZF9zaGFkb3cgPSBtZXRob2Rfc2hhZG93
IC0+IG5leHRfbWV0aG9kKQogICAgICAgIHsKICAgICAgICAgICAgTWV0aG9kU3ltYm9sICptZXRo
b2QgPSBtZXRob2Rfc2hhZG93IC0+IG1ldGhvZF9zeW1ib2w7CgogICAgICAgICAgICBpZiAob3Zl
cmxvYWRfbWV0aG9kID09IG1ldGhvZCkKICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2Rfc2hh
ZG93OwoKICAgICAgICAgICAgaWYgKCEgbWV0aG9kIC0+IElzVHlwZWQoKSkKICAgICAgICAgICAg
ICAgIG1ldGhvZCAtPiBQcm9jZXNzTWV0aG9kU2lnbmF0dXJlKHNlbSwgdG9rKTsKCiAgICAgICAg
ICAgIGlmIChvdmVybG9hZF9tZXRob2QgLT4gTnVtRm9ybWFsUGFyYW1ldGVycygpID09IG1ldGhv
ZCAtPiBOdW1Gb3JtYWxQYXJhbWV0ZXJzKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IGludCBpOwogICAgICAgICAgICAgICAgZm9yIChpID0gbWV0aG9kIC0+IE51bUZvcm1hbFBhcmFt
ZXRlcnMoKSAtIDE7IGkgPj0gMDsgaS0tKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgIGlmIChtZXRob2QgLT4gRm9ybWFsUGFyYW1ldGVyKGkpIC0+IFR5cGUoKSAhPSBvdmVy
bG9hZF9tZXRob2QgLT4gRm9ybWFsUGFyYW1ldGVyKGkpIC0+IFR5cGUoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYg
KGkgPCAwKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2Rfc2hhZG93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKE1ldGhvZFNoYWRvd1N5bWJvbCAqKSBf
X251bGwgOwogICAgfQoKcHJpdmF0ZToKICAgIE1ldGhvZFNoYWRvd1N5bWJvbCAqKmJhc2U7CiAg
ICBpbnQgaGFzaF9zaXplOwp9OwoKCgoKCgoKIyAxNiAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3Bw
IiAyCgoKIyAxICIuLi8uLi9qaWtlcy9zcmMvc3BlbGwuaCIgMQogCiAKIAogCiAKIAogCiAKIAoK
CgoKCgoKCgoKY2xhc3MgU3BlbGwKewogICAgc3RhdGljIGlubGluZSBpbnQgTWluKGludCB4LCBp
bnQgeSkgeyByZXR1cm4gKHggPCB5ID8geCA6IHkpOyB9CgpwdWJsaWM6CiAgICBzdGF0aWMgaW50
IEluZGV4KHdjaGFyX3QgKnN0cjEsIHdjaGFyX3QgKnN0cjIpCiAgICB7CiAgICAgICAgaW50IGxl
bjEgPSB3Y3NsZW4oc3RyMSksCiAgICAgICAgICAgIGxlbjIgPSB3Y3NsZW4oc3RyMik7CgogICAg
ICAgIHdjaGFyX3QgKnMxID0gbmV3IHdjaGFyX3RbbGVuMSArIDFdLAogICAgICAgICAgICAgICAg
KnMyID0gbmV3IHdjaGFyX3RbbGVuMiArIDFdOwoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGxlbjE7IGkrKykKICAgICAgICAgICAgczFbaV0gPSBDYXNlOjpUb0FzY2lpTG93ZXIoc3RyMVtp
XSk7CiAgICAgICAgczFbbGVuMV0gPSBVX05VTEw7CgogICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgbGVuMjsgaisrKQogICAgICAgICAgICBzMltqXSA9IENhc2U6OlRvQXNjaWlMb3dlcihzdHIy
W2pdKTsKICAgICAgICBzMltsZW4yXSA9IFVfTlVMTDsKCiAgICAgICAgaWYgKGxlbjEgPT0gMSAm
JiBsZW4yID09IDEpCiAgICAgICAgewogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAKICAgICAgICAgICAgaWYgKChzMVswXSA9PSBVX1NFTUlDT0xPTiAgICAmJiAgczJbMF0g
PT0gVV9DT01NQSkgIHx8CiAgICAgICAgICAgICAgICAoczFbMF0gPT0gVV9DT01NQSAgICAgICAg
JiYgIHMyWzBdID09IFVfU0VNSUNPTE9OKSAgfHwKICAgICAgICAgICAgICAgIChzMVswXSA9PSBV
X1NFTUlDT0xPTiAgICAmJiAgczJbMF0gPT0gVV9DT0xPTikgIHx8CiAgICAgICAgICAgICAgICAo
czFbMF0gPT0gVV9DT0xPTiAgICAgICAgJiYgIHMyWzBdID09IFVfU0VNSUNPTE9OKSAgfHwKICAg
ICAgICAgICAgICAgIChzMVswXSA9PSBVX0RPVCAgICAgICAgICAmJiAgczJbMF0gPT0gVV9DT01N
QSkgIHx8CiAgICAgICAgICAgICAgICAoczFbMF0gPT0gVV9DT01NQSAgICAgICAgJiYgIHMyWzBd
ID09IFVfRE9UKSAgfHwKICAgICAgICAgICAgICAgIChzMVswXSA9PSBVX1NJTkdMRV9RVU9URSAm
JiAgczJbMF0gPT0gVV9ET1VCTEVfUVVPVEUpICB8fAogICAgICAgICAgICAgICAgKHMxWzBdID09
IFVfRE9VQkxFX1FVT1RFICYmICBzMlswXSA9PSBVX1NJTkdMRV9RVU9URSkpCiAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDM7CiAgICAgICAgfQoKICAgICAgICAgCiAgICAgICAgIAogICAgICAg
ICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAg
ICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgIGludCBjb3VudCA9IDAsCiAgICAgICAg
ICAgIHByZWZpeF9sZW5ndGggPSAwLAogICAgICAgICAgICBudW1fZXJyb3JzID0gMCwKICAgICAg
ICAgICAgaTEgPSAwLAogICAgICAgICAgICBpMiA9IDA7CgogICAgICAgIHdoaWxlICgoaTEgPCBs
ZW4xKSAgJiYgIChpMiA8IGxlbjIpKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHMxW2kxXSA9
PSBzMltpMl0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAg
ICAgICAgICBpMSsrOwogICAgICAgICAgICAgICAgaTIrKzsKICAgICAgICAgICAgICAgIGlmIChu
dW1fZXJyb3JzID09IDApCiAgICAgICAgICAgICAgICAgICAgcHJlZml4X2xlbmd0aCsrOwogICAg
ICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHMxW2kxICsgMV0gPT0gczJbaTJdICAmJiAg
czFbaTFdID09IHMyW2kyICsgMV0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvdW50
ICs9IDI7CiAgICAgICAgICAgICAgICBpMSArPSAyOwogICAgICAgICAgICAgICAgaTIgKz0gMjsK
ICAgICAgICAgICAgICAgIG51bV9lcnJvcnMrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBl
bHNlIGlmIChzMVtpMSArIDFdID09IHMyW2kyICsgMV0pCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIGkxKys7CiAgICAgICAgICAgICAgICBpMisrOwogICAgICAgICAgICAgICAgbnVtX2Vy
cm9ycysrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgaWYgKChsZW4xIC0gaTEpID4gKGxlbjIgLSBpMikpCiAgICAgICAgICAgICAg
ICAgICAgIGkxKys7CiAgICAgICAgICAgICAgICBlbHNlIGlmICgobGVuMiAtIGkyKSA+IChsZW4x
IC0gaTEpKQogICAgICAgICAgICAgICAgICAgICBpMisrOwogICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGkxKys7CiAgICAgICAgICAgICAg
ICAgICAgaTIrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG51bV9lcnJvcnMr
KzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGkxIDwgbGVuMSAgfHwgIGky
IDwgbGVuMikKICAgICAgICAgICAgbnVtX2Vycm9ycysrOwoKICAgICAgICBpZiAobnVtX2Vycm9y
cyA+IChNaW4obGVuMSwgbGVuMikgLyA2ICsgMSkpCiAgICAgICAgICAgICBjb3VudCA9IHByZWZp
eF9sZW5ndGg7CgogICAgICAgIGRlbGV0ZSBbXSBzMTsKICAgICAgICBkZWxldGUgW10gczI7Cgog
ICAgICAgIHJldHVybiAoY291bnQgKiAxMCAvIChsZW4xICsgbnVtX2Vycm9ycykpOwogICAgfQp9
OwoKCgoKCgoKIyAxOCAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiAyCgoKIAoKCgoKCgoKCgoK
Ym9vbCBTZW1hbnRpYzo6SXNJbnRWYWx1ZVJlcHJlc2VudGFibGVJblR5cGUoQXN0RXhwcmVzc2lv
biAqZXhwciwgVHlwZVN5bWJvbCAqdHlwZSkKewogICAgSW50TGl0ZXJhbFZhbHVlICpsaXRlcmFs
ID0gKEludExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHZhbHVlOwoKICAgIHJldHVybiAoZXhwciAt
PiBJc0NvbnN0YW50KCkgJiYKICAgICAgICAgICAgY29udHJvbC5Jc1NpbXBsZUludGVnZXJWYWx1
ZVR5cGUoZXhwciAtPiBUeXBlKCkpICYmCiAgICAgICAgICAgICh0eXBlID09IGNvbnRyb2wuaW50
X3R5cGUgfHwKICAgICAgICAgICAgIHR5cGUgPT0gY29udHJvbC5ub190eXBlICB8fAogICAgICAg
ICAgICAgKHR5cGUgPT0gY29udHJvbC5jaGFyX3R5cGUgJiYgKGxpdGVyYWwgLT4gdmFsdWUgPj0g
MCkgJiYgKGxpdGVyYWwgLT4gdmFsdWUgPD0gNjU1MzUpKSB8fAogICAgICAgICAgICAgKHR5cGUg
PT0gY29udHJvbC5ieXRlX3R5cGUgJiYgKGxpdGVyYWwgLT4gdmFsdWUgPj0gLTEyOCkgJiYgKGxp
dGVyYWwgLT4gdmFsdWUgPD0gMTI3KSkgfHwKICAgICAgICAgICAgICh0eXBlID09IGNvbnRyb2wu
c2hvcnRfdHlwZSAmJiAobGl0ZXJhbCAtPiB2YWx1ZSA+PSAtMzI3NjgpICYmIChsaXRlcmFsIC0+
IHZhbHVlIDw9IDMyNzY3KSkpKTsKfQoKCmlubGluZSBib29sIFNlbWFudGljOjpNb3JlU3BlY2lm
aWMoTWV0aG9kU3ltYm9sICpzb3VyY2VfbWV0aG9kLCBNZXRob2RTeW1ib2wgKnRhcmdldF9tZXRo
b2QpCnsKICAgIGlmICghIENhbk1ldGhvZEludm9jYXRpb25Db252ZXJ0KHRhcmdldF9tZXRob2Qg
LT4gY29udGFpbmluZ190eXBlLCBzb3VyY2VfbWV0aG9kIC0+IGNvbnRhaW5pbmdfdHlwZSkpCiAg
ICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIGZvciAoaW50IGsgPSB0YXJnZXRfbWV0aG9kIC0+IE51
bUZvcm1hbFBhcmFtZXRlcnMoKSAtIDE7IGsgPj0gMDsgay0tKQogICAgewogICAgICAgIGlmICgh
IENhbk1ldGhvZEludm9jYXRpb25Db252ZXJ0KHRhcmdldF9tZXRob2QgLT4gRm9ybWFsUGFyYW1l
dGVyKGspIC0+IFR5cGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzb3VyY2VfbWV0aG9kIC0+IEZvcm1hbFBhcmFtZXRlcihrKSAtPiBUeXBlKCkpKQogICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcmV0dXJuIHRydWU7Cn0KCgppbmxpbmUgYm9v
bCBTZW1hbnRpYzo6TW9yZVNwZWNpZmljKE1ldGhvZFN5bWJvbCAqbWV0aG9kLCBUdXBsZTxNZXRo
b2RTeW1ib2wgKj4gJm1heGltYWxseV9zcGVjaWZpY19tZXRob2QpCnsKICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbWF4aW1hbGx5X3NwZWNpZmljX21ldGhvZC5MZW5ndGgoKTsgaSsrKQogICAgewog
ICAgICAgIGlmICghIE1vcmVTcGVjaWZpYyhtZXRob2QsIG1heGltYWxseV9zcGVjaWZpY19tZXRo
b2RbaV0pKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcmV0dXJuIHRydWU7
Cn0KCgppbmxpbmUgYm9vbCBTZW1hbnRpYzo6Tm9NZXRob2RNb3JlU3BlY2lmaWMoVHVwbGU8TWV0
aG9kU3ltYm9sICo+ICZtYXhpbWFsbHlfc3BlY2lmaWNfbWV0aG9kLCBNZXRob2RTeW1ib2wgKm1l
dGhvZCkKewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhpbWFsbHlfc3BlY2lmaWNfbWV0aG9k
Lkxlbmd0aCgpOyBpKyspCiAgICB7CiAgICAgICAgaWYgKE1vcmVTcGVjaWZpYyhtYXhpbWFsbHlf
c3BlY2lmaWNfbWV0aG9kW2ldLCBtZXRob2QpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICB9CgogICAgcmV0dXJuIHRydWU7Cn0KCgp2b2lkIFNlbWFudGljOjpSZXBvcnRNZXRob2ROb3RG
b3VuZChBc3QgKmFzdCwgd2NoYXJfdCAqbmFtZSkKewogICAgU2VtYW50aWNFcnJvcjo6U2VtYW50
aWNFcnJvcktpbmQga2luZDsKCiAgICBpbnQgbnVtX2FyZ3VtZW50czsKICAgIEFzdEV4cHJlc3Np
b24gKiphcmd1bWVudDsKCiAgICBBc3RNZXRob2RJbnZvY2F0aW9uICptZXRob2RfY2FsbDsKICAg
IGlmICgobWV0aG9kX2NhbGwgPSBhc3QgLT4gTWV0aG9kSW52b2NhdGlvbkNhc3QoKSkpCiAgICB7
CiAgICAgICAga2luZCA9IFNlbWFudGljRXJyb3I6Ok1FVEhPRF9OT1RfRk9VTkQ7CiAgICAgICAg
bnVtX2FyZ3VtZW50cyA9IG1ldGhvZF9jYWxsIC0+IE51bUFyZ3VtZW50cygpOwogICAgICAgIGFy
Z3VtZW50ID0gbmV3IEFzdEV4cHJlc3Npb24qW251bV9hcmd1bWVudHMgKyAxXTsKICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bV9hcmd1bWVudHM7IGkrKykKICAgICAgICAgICAgYXJndW1l
bnRbaV0gPSBtZXRob2RfY2FsbCAtPiBBcmd1bWVudChpKTsKICAgIH0KICAgIGVsc2UKICAgIHsK
ICAgICAgICBraW5kID0gU2VtYW50aWNFcnJvcjo6Q09OU1RSVUNUT1JfTk9UX0ZPVU5EOwoKICAg
ICAgICBBc3RDbGFzc0luc3RhbmNlQ3JlYXRpb25FeHByZXNzaW9uICpjbGFzc19jcmVhdGlvbjsK
ICAgICAgICBBc3RTdXBlckNhbGwgKnN1cGVyX2NhbGw7CgogICAgICAgIGlmICgoY2xhc3NfY3Jl
YXRpb24gPSBhc3QgLT4gQ2xhc3NJbnN0YW5jZUNyZWF0aW9uRXhwcmVzc2lvbkNhc3QoKSkpCiAg
ICAgICAgewogICAgICAgICAgICBudW1fYXJndW1lbnRzID0gY2xhc3NfY3JlYXRpb24gLT4gTnVt
QXJndW1lbnRzKCk7CiAgICAgICAgICAgIGFyZ3VtZW50ID0gbmV3IEFzdEV4cHJlc3Npb24qW251
bV9hcmd1bWVudHMgKyAxXTsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fYXJn
dW1lbnRzOyBpKyspCiAgICAgICAgICAgICAgICBhcmd1bWVudFtpXSA9IGNsYXNzX2NyZWF0aW9u
IC0+IEFyZ3VtZW50KGkpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgoc3VwZXJfY2FsbCA9
IGFzdCAtPiBTdXBlckNhbGxDYXN0KCkpKQogICAgICAgIHsKICAgICAgICAgICAgbnVtX2FyZ3Vt
ZW50cyA9IHN1cGVyX2NhbGwgLT4gTnVtQXJndW1lbnRzKCk7CiAgICAgICAgICAgIGFyZ3VtZW50
ID0gbmV3IEFzdEV4cHJlc3Npb24qW251bV9hcmd1bWVudHMgKyAxXTsKICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBudW1fYXJndW1lbnRzOyBpKyspCiAgICAgICAgICAgICAgICBhcmd1
bWVudFtpXSA9IHN1cGVyX2NhbGwgLT4gQXJndW1lbnQoaSk7CiAgICAgICAgfQogICAgICAgIGVs
c2UKICAgICAgICB7CiAgICAgICAgICAgIEFzdFRoaXNDYWxsICp0aGlzX2NhbGwgPSBhc3QgLT4g
VGhpc0NhbGxDYXN0KCk7CgogICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIHRoaXNf
Y2FsbCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgidGhpc19jYWxsIiAsICIuLi8uLi9qaWtlcy9z
cmMvZXhwci5jcHAiLCAxMjYsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogICAgICAg
ICAgICBudW1fYXJndW1lbnRzID0gdGhpc19jYWxsIC0+IE51bUFyZ3VtZW50cygpOwogICAgICAg
ICAgICBhcmd1bWVudCA9IG5ldyBBc3RFeHByZXNzaW9uKltudW1fYXJndW1lbnRzICsgMV07CiAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2FyZ3VtZW50czsgaSsrKQogICAgICAg
ICAgICAgICAgYXJndW1lbnRbaV0gPSB0aGlzX2NhbGwgLT4gQXJndW1lbnQoaSk7CiAgICAgICAg
fQogICAgfQoKICAgIGludCBsZW5ndGggPSB3Y3NsZW4obmFtZSk7CgogICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1fYXJndW1lbnRzOyBpKyspCiAgICB7CiAgICAgICAgVHlwZVN5bWJvbCAqYXJn
X3R5cGUgPSBhcmd1bWVudFtpXSAtPiBUeXBlKCk7CiAgICAgICAgbGVuZ3RoICs9IGFyZ190eXBl
IC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWVMZW5ndGgoKSArCiAgICAgICAg
ICAgICAgICAgIGFyZ190eXBlIC0+IEV4dGVybmFsTmFtZUxlbmd0aCgpICsgMzsgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIH0K
CiAgICB3Y2hhcl90ICpoZWFkZXIgPSBuZXcgd2NoYXJfdFtsZW5ndGggKyAzXTsgIAogICAgd2No
YXJfdCAqcyA9IGhlYWRlcjsKCiAgICBmb3IgKHdjaGFyX3QgKnMyID0gbmFtZTsgKnMyOyBzMisr
KQogICAgICAgICAqcysrID0gKnMyOwogICAgKnMrKyA9IFVfTEVGVF9QQVJFTlRIRVNJUzsKICAg
IGlmIChudW1fYXJndW1lbnRzID4gMCkKICAgIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bV9hcmd1bWVudHM7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIFR5cGVTeW1ib2wgKmFy
Z190eXBlID0gYXJndW1lbnRbaV0gLT4gVHlwZSgpOwoKICAgICAgICAgICAgUGFja2FnZVN5bWJv
bCAqcGFja2FnZSA9IGFyZ190eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCk7CiAgICAgICAgICAg
IHdjaGFyX3QgKnBhY2thZ2VfbmFtZSA9IHBhY2thZ2UgLT4gUGFja2FnZU5hbWUoKTsKICAgICAg
ICAgICAgaWYgKHBhY2thZ2UgLT4gUGFja2FnZU5hbWVMZW5ndGgoKSA+IDAgJiYgd2NzY21wKHBh
Y2thZ2VfbmFtZSwgU3RyaW5nQ29uc3RhbnQ6OlVTX19ETykgIT0gMCkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgd2hpbGUgKCpwYWNrYWdlX25hbWUpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgKnMrKyA9ICgqcGFja2FnZV9uYW1lID09IFVfU0xBU0ggPyAod2No
YXJfdCkgVV9ET1QgOiAqcGFja2FnZV9uYW1lKTsKICAgICAgICAgICAgICAgICAgICBwYWNrYWdl
X25hbWUrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICpzKysgPSBVX0RPVDsK
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yICh3Y2hhcl90ICpzMiA9IGFyZ190eXBlIC0+
IEV4dGVybmFsTmFtZSgpOyAqczI7IHMyKyspCiAgICAgICAgICAgICAgICAqcysrID0gKCpzMiA9
PSBVX0RPTExBUiA/ICh3Y2hhcl90KSBVX0RPVCA6ICpzMik7CiAgICAgICAgICAgICpzKysgPSBV
X0NPTU1BOwogICAgICAgICAgICAqcysrID0gVV9TUEFDRTsKICAgICAgICB9CgogICAgICAgIHMg
LT0gMjsgIAogICAgfQogICAgKnMrKyA9IFVfUklHSFRfUEFSRU5USEVTSVM7CiAgICAqcyA9IFVf
TlVMTDsKCiAgICBSZXBvcnRTZW1FcnJvcihraW5kLAogICAgICAgICAgICAgICAgICAgYXN0IC0+
IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgYXN0IC0+IFJpZ2h0VG9rZW4oKSwKICAg
ICAgICAgICAgICAgICAgIGhlYWRlcik7CgogICAgZGVsZXRlIFtdIGhlYWRlcjsKICAgIGRlbGV0
ZSBbXSBhcmd1bWVudDsKCiAgICByZXR1cm47Cn0KCgpNZXRob2RTeW1ib2wgKlNlbWFudGljOjpG
aW5kQ29uc3RydWN0b3IoVHlwZVN5bWJvbCAqY29udGFpbmluZ190eXBlLCBBc3QgKmFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExleFN0cmVhbTo6VG9rZW5JbmRl
eCBsZWZ0X3RvaywgTGV4U3RyZWFtOjpUb2tlbkluZGV4IHJpZ2h0X3RvaykKewogICAgVHVwbGU8
TWV0aG9kU3ltYm9sICo+IGNvbnN0cnVjdG9yX3NldCgyKTsKCiAgICBpbnQgbnVtX2FyZ3VtZW50
czsKICAgIEFzdEV4cHJlc3Npb24gKiphcmd1bWVudDsKCiAgICBBc3RDbGFzc0luc3RhbmNlQ3Jl
YXRpb25FeHByZXNzaW9uICpjbGFzc19jcmVhdGlvbjsKICAgIEFzdFN1cGVyQ2FsbCAqc3VwZXJf
Y2FsbDsKCiAgICBpZiAoKGNsYXNzX2NyZWF0aW9uID0gYXN0IC0+IENsYXNzSW5zdGFuY2VDcmVh
dGlvbkV4cHJlc3Npb25DYXN0KCkpKQogICAgewogICAgICAgIG51bV9hcmd1bWVudHMgPSBjbGFz
c19jcmVhdGlvbiAtPiBOdW1Bcmd1bWVudHMoKTsKICAgICAgICBhcmd1bWVudCA9IG5ldyBBc3RF
eHByZXNzaW9uKltudW1fYXJndW1lbnRzICsgMV07CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1fYXJndW1lbnRzOyBpKyspCiAgICAgICAgICAgIGFyZ3VtZW50W2ldID0gY2xhc3NfY3Jl
YXRpb24gLT4gQXJndW1lbnQoaSk7CiAgICB9CiAgICBlbHNlIGlmICgoc3VwZXJfY2FsbCA9IGFz
dCAtPiBTdXBlckNhbGxDYXN0KCkpKQogICAgewogICAgICAgIG51bV9hcmd1bWVudHMgPSBzdXBl
cl9jYWxsIC0+IE51bUFyZ3VtZW50cygpOwogICAgICAgIGFyZ3VtZW50ID0gbmV3IEFzdEV4cHJl
c3Npb24qW251bV9hcmd1bWVudHMgKyAxXTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51
bV9hcmd1bWVudHM7IGkrKykKICAgICAgICAgICAgYXJndW1lbnRbaV0gPSBzdXBlcl9jYWxsIC0+
IEFyZ3VtZW50KGkpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIEFzdFRoaXNDYWxsICp0
aGlzX2NhbGwgPSBhc3QgLT4gVGhpc0NhbGxDYXN0KCk7CgogICAgICAgIChzdGF0aWNfY2FzdDx2
b2lkPiAgKCggdGhpc19jYWxsICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJ0aGlzX2NhbGwiICwg
Ii4uLy4uL2ppa2VzL3NyYy9leHByLmNwcCIsIDIyMSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAw
KSkpIDsKCiAgICAgICAgbnVtX2FyZ3VtZW50cyA9IHRoaXNfY2FsbCAtPiBOdW1Bcmd1bWVudHMo
KTsKICAgICAgICBhcmd1bWVudCA9IG5ldyBBc3RFeHByZXNzaW9uKltudW1fYXJndW1lbnRzICsg
MV07CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fYXJndW1lbnRzOyBpKyspCiAgICAg
ICAgICAgIGFyZ3VtZW50W2ldID0gdGhpc19jYWxsIC0+IEFyZ3VtZW50KGkpOwogICAgfQoKICAg
IChzdGF0aWNfY2FzdDx2b2lkPiAgKCggY29udGFpbmluZ190eXBlIC0+IENvbnN0cnVjdG9yTWVt
YmVyc1Byb2Nlc3NlZCgpICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJjb250YWluaW5nX3R5cGUg
LT4gQ29uc3RydWN0b3JNZW1iZXJzUHJvY2Vzc2VkKCkiICwgIi4uLy4uL2ppa2VzL3NyYy9leHBy
LmNwcCIsIDIyOSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICBmb3IgKE1ldGhv
ZFN5bWJvbCAqY29uc3RydWN0b3IgPSBjb250YWluaW5nX3R5cGUgLT4gRmluZENvbnN0cnVjdG9y
U3ltYm9sKCk7CiAgICAgICAgIGNvbnN0cnVjdG9yOyBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9y
IC0+IG5leHRfbWV0aG9kKQogICAgewogICAgICAgIGlmICghIGNvbnN0cnVjdG9yIC0+IElzVHlw
ZWQoKSkKICAgICAgICAgICAgY29uc3RydWN0b3IgLT4gUHJvY2Vzc01ldGhvZFNpZ25hdHVyZSgo
U2VtYW50aWMgKikgdGhpcywgcmlnaHRfdG9rKTsKCiAgICAgICAgaWYgKG51bV9hcmd1bWVudHMg
PT0gY29uc3RydWN0b3IgLT4gTnVtRm9ybWFsUGFyYW1ldGVycygpKQogICAgICAgIHsKICAgICAg
ICAgICAgaW50IGk7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYXJndW1lbnRzOyBp
KyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmICghIENhbk1ldGhvZEludm9jYXRp
b25Db252ZXJ0KGNvbnN0cnVjdG9yIC0+IEZvcm1hbFBhcmFtZXRlcihpKSAtPiBUeXBlKCksIGFy
Z3VtZW50W2ldIC0+IFR5cGUoKSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgIH0KICAgICAgICAgICAgaWYgKGkgPT0gbnVtX2FyZ3VtZW50cykKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgaWYgKE1vcmVTcGVjaWZpYyhjb25zdHJ1Y3RvciwgY29uc3RydWN0b3Jf
c2V0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvcl9z
ZXQuUmVzZXQoKTsKICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvcl9zZXQuTmV4dCgpID0g
Y29uc3RydWN0b3I7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChO
b01ldGhvZE1vcmVTcGVjaWZpYyhjb25zdHJ1Y3Rvcl9zZXQsIGNvbnN0cnVjdG9yKSkKICAgICAg
ICAgICAgICAgICAgICBjb25zdHJ1Y3Rvcl9zZXQuTmV4dCgpID0gY29uc3RydWN0b3I7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKGNvbnN0cnVjdG9yX3NldC5MZW5ndGgo
KSA9PSAwKQogICAgewogICAgICAgIE1ldGhvZFN5bWJvbCAqbWV0aG9kOwogICAgICAgIGZvciAo
bWV0aG9kID0gY29udGFpbmluZ190eXBlIC0+IEZpbmRNZXRob2RTeW1ib2woY29udGFpbmluZ190
eXBlIC0+IElkZW50aXR5KCkpOyBtZXRob2Q7IG1ldGhvZCA9IG1ldGhvZCAtPiBuZXh0X21ldGhv
ZCkKICAgICAgICB7CiAgICAgICAgICAgIGlmICghIG1ldGhvZCAtPiBJc1R5cGVkKCkpCiAgICAg
ICAgICAgICAgICBtZXRob2QgLT4gUHJvY2Vzc01ldGhvZFNpZ25hdHVyZSgoU2VtYW50aWMgKikg
dGhpcywgcmlnaHRfdG9rKTsKCiAgICAgICAgICAgIGlmIChudW1fYXJndW1lbnRzID09IG1ldGhv
ZCAtPiBOdW1Gb3JtYWxQYXJhbWV0ZXJzKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IGludCBpOwogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9hcmd1bWVudHM7IGkr
KykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoISBDYW5NZXRob2RJ
bnZvY2F0aW9uQ29udmVydChtZXRob2QgLT4gRm9ybWFsUGFyYW1ldGVyKGkpIC0+IFR5cGUoKSwg
YXJndW1lbnRbaV0gLT4gVHlwZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaSA9PSBudW1fYXJndW1lbnRzKQog
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAg
ICBpZiAobWV0aG9kKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKG1ldGhvZCAtPiBtZXRob2Rf
b3JfY29uc3RydWN0b3JfZGVjbGFyYXRpb24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IEFzdE1ldGhvZERlY2xhcmF0aW9uICptZXRob2RfZGVjbGFyYXRpb24gPSAoQXN0TWV0aG9kRGVj
bGFyYXRpb24gKikgbWV0aG9kIC0+IG1ldGhvZF9vcl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbjsK
ICAgICAgICAgICAgICAgIEZpbGVMb2NhdGlvbiBsb2MobWV0aG9kIC0+IGNvbnRhaW5pbmdfdHlw
ZSAtPiBzZW1hbnRpY19lbnZpcm9ubWVudCAtPiBzZW0gLT4gbGV4X3N0cmVhbSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2RlY2xhcmF0aW9uIC0+IG1ldGhvZF9kZWNs
YXJhdG9yIC0+IGlkZW50aWZpZXJfdG9rZW4pOwoKICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVy
cm9yKFNlbWFudGljRXJyb3I6Ok1FVEhPRF9GT1VORF9GT1JfQ09OU1RSVUNUT1IsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0X3RvaywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJpZ2h0X3RvaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5p
bmdfdHlwZSAtPiBOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2MubG9j
YXRpb24pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6TUVUSE9EX0ZPVU5EX0ZP
Ul9DT05TVFJVQ1RPUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRfdG9rLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRfdG9rLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGFpbmluZ190eXBlIC0+IE5hbWUoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1ldGhvZCAtPiBjb250YWluaW5nX3R5cGUgLT4gZmlsZV9sb2NhdGlv
biAtPiBsb2NhdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAo
KCEgY29udGFpbmluZ190eXBlIC0+IEJhZCgpKSB8fCBOdW1FcnJvcnMoKSA9PSAwKQogICAgICAg
ICAgICBSZXBvcnRNZXRob2ROb3RGb3VuZChhc3QsIGNvbnRhaW5pbmdfdHlwZSAtPiBOYW1lKCkp
OwoKICAgICAgICBkZWxldGUgW10gYXJndW1lbnQ7CgogICAgICAgIHJldHVybiAoTWV0aG9kU3lt
Ym9sICopIF9fbnVsbCA7CiAgICB9CiAgICBlbHNlIGlmIChjb25zdHJ1Y3Rvcl9zZXQuTGVuZ3Ro
KCkgPiAxKQogICAgewogICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OkFNQklH
VU9VU19DT05TVFJVQ1RPUl9JTlZPQ0FUSU9OLAogICAgICAgICAgICAgICAgICAgICAgIGxlZnRf
dG9rLAogICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0X3RvaywKICAgICAgICAgICAgICAgICAg
ICAgICBjb250YWluaW5nX3R5cGUgLT4gTmFtZSgpKTsKICAgIH0KCiAgICBkZWxldGUgW10gYXJn
dW1lbnQ7CgogICAgTWV0aG9kU3ltYm9sICpjb25zdHJ1Y3Rvcl9zeW1ib2wgPSBjb25zdHJ1Y3Rv
cl9zZXRbMF07CgogICAgaWYgKGNvbnN0cnVjdG9yX3N5bWJvbCAtPiBJc1N5bnRoZXRpYygpKQog
ICAgewogICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OlNZTlRIRVRJQ19DT05T
VFJVQ1RPUl9JTlZPQ0FUSU9OLAogICAgICAgICAgICAgICAgICAgICAgIGxlZnRfdG9rLAogICAg
ICAgICAgICAgICAgICAgICAgIHJpZ2h0X3RvaywKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dHJ1Y3Rvcl9zeW1ib2wgLT4gSGVhZGVyKCksCiAgICAgICAgICAgICAgICAgICAgICAgY29udGFp
bmluZ190eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAg
ICAgICAgICAgICAgICAgICBjb250YWluaW5nX3R5cGUgLT4gRXh0ZXJuYWxOYW1lKCkpOwogICAg
fQoKICAgICAKICAgICAKICAgICAKICAgIGNvbnN0cnVjdG9yX3N5bWJvbCAtPiBQcm9jZXNzTWV0
aG9kVGhyb3dzKChTZW1hbnRpYyAqKSB0aGlzLCByaWdodF90b2spOwoKICAgIGlmIChjb250cm9s
Lm9wdGlvbi5kZXByZWNhdGlvbiAmJgogICAgICAgIGNvbnN0cnVjdG9yX3N5bWJvbCAtPiBJc0Rl
cHJlY2F0ZWQoKSAmJgogICAgICAgIGNvbnN0cnVjdG9yX3N5bWJvbCAtPiBjb250YWluaW5nX3R5
cGUgLT4gb3V0ZXJtb3N0X3R5cGUgIT0gVGhpc1R5cGUoKSAtPiBvdXRlcm1vc3RfdHlwZSkKICAg
IHsKICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpERVBSRUNBVEVEX01FVEhP
RCwKICAgICAgICAgICAgICAgICAgICAgICBsZWZ0X3RvaywKICAgICAgICAgICAgICAgICAgICAg
ICByaWdodF90b2ssCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3Jfc3ltYm9sIC0+
IEhlYWRlcigpLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yX3N5bWJvbCAtPiBj
b250YWluaW5nX3R5cGUgLT4gQ29udGFpbmluZ1BhY2thZ2UoKSAtPiBQYWNrYWdlTmFtZSgpLAog
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yX3N5bWJvbCAtPiBjb250YWluaW5nX3R5
cGUgLT4gRXh0ZXJuYWxOYW1lKCkpOwogICAgfQoKICAgIHJldHVybiBjb25zdHJ1Y3Rvcl9zeW1i
b2w7Cn0KCgogCiAKIApWYXJpYWJsZVN5bWJvbCAqU2VtYW50aWM6OkZpbmRNaXNzcGVsbGVkVmFy
aWFibGVOYW1lKFR5cGVTeW1ib2wgKnR5cGUsIExleFN0cmVhbTo6VG9rZW5JbmRleCBpZGVudGlm
aWVyX3Rva2VuKQp7CiAgICBWYXJpYWJsZVN5bWJvbCAqbWlzc3BlbGxlZF92YXJpYWJsZSA9IF9f
bnVsbCA7CiAgICBpbnQgaW5kZXggPSAwOwogICAgd2NoYXJfdCAqbmFtZSA9IGxleF9zdHJlYW0g
LT4gTmFtZVN0cmluZyhpZGVudGlmaWVyX3Rva2VuKTsKCiAgICBmb3IgKGludCBrID0gMDsgayA8
IHR5cGUgLT4gZXhwYW5kZWRfZmllbGRfdGFibGUgLT4gc3ltYm9sX3Bvb2wuTGVuZ3RoKCk7IGsr
KykKICAgIHsKICAgICAgICBWYXJpYWJsZVNoYWRvd1N5bWJvbCAqdmFyaWFibGVfc2hhZG93ID0g
dHlwZSAtPiBleHBhbmRlZF9maWVsZF90YWJsZSAtPiBzeW1ib2xfcG9vbFtrXTsKICAgICAgICBW
YXJpYWJsZVN5bWJvbCAqdmFyaWFibGUgPSB2YXJpYWJsZV9zaGFkb3cgLT4gdmFyaWFibGVfc3lt
Ym9sOwogICAgICAgIGlmICghIHZhcmlhYmxlIC0+IElzVHlwZWQoKSkKICAgICAgICAgICAgdmFy
aWFibGUgLT4gUHJvY2Vzc1ZhcmlhYmxlU2lnbmF0dXJlKChTZW1hbnRpYyAqKSB0aGlzLCBpZGVu
dGlmaWVyX3Rva2VuKTsKCiAgICAgICAgaW50IG5ld19pbmRleCA9IFNwZWxsOjpJbmRleChuYW1l
LCB2YXJpYWJsZSAtPiBOYW1lKCkpOwogICAgICAgIGlmIChuZXdfaW5kZXggPiBpbmRleCkKICAg
ICAgICB7CiAgICAgICAgICAgIG1pc3NwZWxsZWRfdmFyaWFibGUgPSB2YXJpYWJsZTsKICAgICAg
ICAgICAgaW5kZXggPSBuZXdfaW5kZXg7CiAgICAgICAgfQogICAgfQoKICAgIGludCBsZW5ndGgg
PSB3Y3NsZW4obmFtZSk7CgogICAgcmV0dXJuICgobGVuZ3RoID09IDMgJiYgaW5kZXggPj0gNSkg
fHwgKGxlbmd0aCA9PSA0ICYmIGluZGV4ID49IDYpIHx8IChsZW5ndGggPj0gNSAmJiBpbmRleCA+
PSA3KQogICAgICAgICAgICAgICAgICAgICAgICAgID8gbWlzc3BlbGxlZF92YXJpYWJsZQogICAg
ICAgICAgICAgICAgICAgICAgICAgIDogKFZhcmlhYmxlU3ltYm9sICopIF9fbnVsbCApOwp9Cgog
CiAKIApNZXRob2RTeW1ib2wgKlNlbWFudGljOjpGaW5kTWlzc3BlbGxlZE1ldGhvZE5hbWUoVHlw
ZVN5bWJvbCAqdHlwZSwgQXN0TWV0aG9kSW52b2NhdGlvbiAqbWV0aG9kX2NhbGwsIE5hbWVTeW1i
b2wgKm5hbWVfc3ltYm9sKQp7CiAgICBNZXRob2RTeW1ib2wgKm1pc3NwZWxsZWRfbWV0aG9kID0g
X19udWxsIDsKICAgIGludCBpbmRleCA9IDA7CiAgICBBc3RTaW1wbGVOYW1lICpzaW1wbGVfbmFt
ZSA9IG1ldGhvZF9jYWxsIC0+IG1ldGhvZCAtPiBTaW1wbGVOYW1lQ2FzdCgpOwogICAgQXN0Rmll
bGRBY2Nlc3MgKmZpZWxkX2FjY2VzcyA9IG1ldGhvZF9jYWxsIC0+IG1ldGhvZCAtPiBGaWVsZEFj
Y2Vzc0Nhc3QoKTsKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBpZGVudGlmaWVyX3Rva2VuID0g
KHNpbXBsZV9uYW1lID8gc2ltcGxlX25hbWUgLT4gaWRlbnRpZmllcl90b2tlbiA6IGZpZWxkX2Fj
Y2VzcyAtPiBpZGVudGlmaWVyX3Rva2VuKTsKCiAgICBmb3IgKGludCBrID0gMDsgayA8IHR5cGUg
LT4gZXhwYW5kZWRfbWV0aG9kX3RhYmxlIC0+IHN5bWJvbF9wb29sLkxlbmd0aCgpOyBrKyspCiAg
ICB7CiAgICAgICAgTWV0aG9kU2hhZG93U3ltYm9sICptZXRob2Rfc2hhZG93ID0gdHlwZSAtPiBl
eHBhbmRlZF9tZXRob2RfdGFibGUgLT4gc3ltYm9sX3Bvb2xba107CiAgICAgICAgTWV0aG9kU3lt
Ym9sICptZXRob2QgPSBtZXRob2Rfc2hhZG93IC0+IG1ldGhvZF9zeW1ib2w7CgogICAgICAgIGlm
ICghIG1ldGhvZCAtPiBJc1R5cGVkKCkpCiAgICAgICAgICAgIG1ldGhvZCAtPiBQcm9jZXNzTWV0
aG9kU2lnbmF0dXJlKChTZW1hbnRpYyAqKSB0aGlzLCBpZGVudGlmaWVyX3Rva2VuKTsKCiAgICAg
ICAgaWYgKG1ldGhvZF9jYWxsIC0+IE51bUFyZ3VtZW50cygpID09IG1ldGhvZCAtPiBOdW1Gb3Jt
YWxQYXJhbWV0ZXJzKCkpCiAgICAgICAgewogICAgICAgICAgICBpbnQgaTsKICAgICAgICAgICAg
Zm9yIChpID0gMDsgaSA8IG1ldGhvZF9jYWxsIC0+IE51bUFyZ3VtZW50cygpOyBpKyspCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIEFzdEV4cHJlc3Npb24gKmV4cHIgPSBtZXRob2RfY2Fs
bCAtPiBBcmd1bWVudChpKTsKICAgICAgICAgICAgICAgIGlmICghIENhbk1ldGhvZEludm9jYXRp
b25Db252ZXJ0KG1ldGhvZCAtPiBGb3JtYWxQYXJhbWV0ZXIoaSkgLT4gVHlwZSgpLCBleHByIC0+
IFR5cGUoKSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgaWYgKGkgPT0gbWV0aG9kX2NhbGwgLT4gTnVtQXJndW1lbnRzKCkpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIGludCBuZXdfaW5kZXggPSBTcGVsbDo6SW5kZXgobmFtZV9zeW1i
b2wgLT4gTmFtZSgpLCBtZXRob2QgLT4gTmFtZSgpKTsKICAgICAgICAgICAgICAgIGlmIChuZXdf
aW5kZXggPiBpbmRleCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBtaXNz
cGVsbGVkX21ldGhvZCA9IG1ldGhvZDsKICAgICAgICAgICAgICAgICAgICBpbmRleCA9IG5ld19p
bmRleDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAg
ICBpbnQgbGVuZ3RoID0gbmFtZV9zeW1ib2wgLT4gTmFtZUxlbmd0aCgpLAogICAgICAgICBudW1f
YXJncyA9IG1ldGhvZF9jYWxsIC0+IE51bUFyZ3VtZW50cygpOwoKICAgICAKICAgICAKICAgICAK
ICAgICAKICAgICAKICAgIHJldHVybiAoaW5kZXggPCAzID8gKE1ldGhvZFN5bWJvbCAqKSBfX251
bGwgCiAgICAgICAgICAgICAgICAgICAgICA6IChsZW5ndGggPT0gMiAmJiAoaW5kZXggPj0gMyB8
fCBudW1fYXJncyA+IDApKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAobGVuZ3RoID09IDMg
JiYgKGluZGV4ID49IDUgfHwgbnVtX2FyZ3MgPiAwKSkgfHwKICAgICAgICAgICAgICAgICAgICAg
ICAgKGxlbmd0aCAgPiAzICYmIChpbmRleCA+PSA2IHx8IChpbmRleCA+PSA1ICYmIG51bV9hcmdz
ID4gMCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtaXNzcGVsbGVk
X21ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoTWV0aG9kU3lt
Ym9sICopIF9fbnVsbCApOwp9CgoKIAogCiAKYm9vbCBTZW1hbnRpYzo6SXNNZXRob2RBY2Nlc3Np
YmxlKEFzdEZpZWxkQWNjZXNzICpmaWVsZF9hY2Nlc3MsIFR5cGVTeW1ib2wgKmJhc2VfdHlwZSwg
TWV0aG9kU3ltYm9sICptZXRob2Rfc3ltYm9sKQp7CiAgICBUeXBlU3ltYm9sICp0aGlzX3R5cGUg
PSBUaGlzVHlwZSgpLAogICAgICAgICAgICAgICAqY29udGFpbmluZ190eXBlID0gbWV0aG9kX3N5
bWJvbCAtPiBjb250YWluaW5nX3R5cGU7CgogICAgcmV0dXJuICh0aGlzX3R5cGUgLT4gb3V0ZXJt
b3N0X3R5cGUgPT0gY29udGFpbmluZ190eXBlIC0+IG91dGVybW9zdF90eXBlKSB8fAogICAgICAg
ICAgICBtZXRob2Rfc3ltYm9sIC0+IEFDQ19QVUJMSUMoKSB8fAogICAgICAgICAgICAoKCEgbWV0
aG9kX3N5bWJvbCAtPiBBQ0NfUFJJVkFURSgpKSAmJiBjb250YWluaW5nX3R5cGUgLT4gQ29udGFp
bmluZ1BhY2thZ2UoKSA9PSB0aGlzX3BhY2thZ2UpIHx8CiAgICAgICAgICAgIChtZXRob2Rfc3lt
Ym9sIC0+IEFDQ19QUk9URUNURUQoKSAmJiAoZmllbGRfYWNjZXNzIC0+IGJhc2UgLT4gSXNTdXBl
ckV4cHJlc3Npb24oKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh0aGlzX3R5cGUgLT4gSGFzUHJvdGVjdGVkQWNjZXNzVG8oY29udGFpbmluZ190
eXBlKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoYmFzZV90eXBlIC0+IElzU3ViY2xhc3ModGhpc190eXBlKSB8fCBiYXNlX3R5cGUgLT4gSXNP
d25lcih0aGlzX3R5cGUpKSkpKTsKfQoKCiAKIAogCiAKIAogCk1ldGhvZFN5bWJvbCAqU2VtYW50
aWM6OkZpbmRNZXRob2RJblR5cGUoVHlwZVN5bWJvbCAqdHlwZSwgQXN0TWV0aG9kSW52b2NhdGlv
biAqbWV0aG9kX2NhbGwsIE5hbWVTeW1ib2wgKm5hbWVfc3ltYm9sKQp7CiAgICBUdXBsZTxNZXRo
b2RTeW1ib2wgKj4gbWV0aG9kX3NldCgyKTsKICAgIEFzdEZpZWxkQWNjZXNzICpmaWVsZF9hY2Nl
c3MgPSBtZXRob2RfY2FsbCAtPiBtZXRob2QgLT4gRmllbGRBY2Nlc3NDYXN0KCk7CiAgICBpZiAo
ISBuYW1lX3N5bWJvbCkKICAgICAgICBuYW1lX3N5bWJvbCA9IGxleF9zdHJlYW0gLT4gTmFtZVN5
bWJvbChmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbik7CgogICAgaWYgKCEgdHlwZSAt
PiBleHBhbmRlZF9tZXRob2RfdGFibGUpCiAgICAgICAgQ29tcHV0ZU1ldGhvZHNDbG9zdXJlKHR5
cGUsIGZpZWxkX2FjY2VzcyAtPiBpZGVudGlmaWVyX3Rva2VuKTsKCiAKIAogCiAKCgoKCgoKCgoK
CiAgICAgICAgVHlwZVN5bWJvbCAqdHlwZV9zeW1ib2wgPSB0eXBlOwoKICAgICAgICBmb3IgKE1l
dGhvZFNoYWRvd1N5bWJvbCAqbWV0aG9kX3NoYWRvdyA9IHR5cGVfc3ltYm9sIC0+IGV4cGFuZGVk
X21ldGhvZF90YWJsZSAtPiBGaW5kTWV0aG9kU2hhZG93U3ltYm9sKG5hbWVfc3ltYm9sKTsKICAg
ICAgICAgICAgIG1ldGhvZF9zaGFkb3c7IG1ldGhvZF9zaGFkb3cgPSBtZXRob2Rfc2hhZG93IC0+
IG5leHRfbWV0aG9kKQogICAgICAgIHsKICAgICAgICAgICAgTWV0aG9kU3ltYm9sICptZXRob2Qg
PSBtZXRob2Rfc2hhZG93IC0+IG1ldGhvZF9zeW1ib2w7CgogICAgICAgICAgICBpZiAoISBtZXRo
b2QgLT4gSXNUeXBlZCgpKQogICAgICAgICAgICAgICAgbWV0aG9kIC0+IFByb2Nlc3NNZXRob2RT
aWduYXR1cmUoKFNlbWFudGljICopIHRoaXMsIGZpZWxkX2FjY2VzcyAtPiBpZGVudGlmaWVyX3Rv
a2VuKTsKCiAgICAgICAgICAgIGlmIChtZXRob2RfY2FsbCAtPiBOdW1Bcmd1bWVudHMoKSA9PSBt
ZXRob2QgLT4gTnVtRm9ybWFsUGFyYW1ldGVycygpICYmCiAgICAgICAgICAgICAgICBJc01ldGhv
ZEFjY2Vzc2libGUoZmllbGRfYWNjZXNzLCB0eXBlX3N5bWJvbCwgbWV0aG9kKSkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgaW50IGk7CiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgbWV0aG9kX2NhbGwgLT4gTnVtQXJndW1lbnRzKCk7IGkrKykKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICBBc3RFeHByZXNzaW9uICpleHByID0gbWV0aG9kX2NhbGwgLT4g
QXJndW1lbnQoaSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEgQ2FuTWV0aG9kSW52b2NhdGlv
bkNvbnZlcnQobWV0aG9kIC0+IEZvcm1hbFBhcmFtZXRlcihpKSAtPiBUeXBlKCksIGV4cHIgLT4g
VHlwZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICBpZiAoaSA9PSBtZXRob2RfY2FsbCAtPiBOdW1Bcmd1bWVudHMoKSkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoTW9yZVNwZWNpZmljKG1l
dGhvZCwgbWV0aG9kX3NldCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICBtZXRob2Rfc2V0LlJlc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhv
ZF9zZXQuTmV4dCgpID0gbWV0aG9kOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChOb01ldGhvZE1vcmVTcGVjaWZpYyhtZXRob2Rfc2V0LCBtZXRob2Qp
KQogICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Rfc2V0Lk5leHQoKSA9IG1ldGhvZDsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAKCgoKCiAgICBpZiAobWV0
aG9kX3NldC5MZW5ndGgoKSA9PSAwKQogICAgewogICAgICAgIGlmICghIHR5cGUgLT4gZXhwYW5k
ZWRfZmllbGRfdGFibGUpCiAgICAgICAgICAgIENvbXB1dGVGaWVsZHNDbG9zdXJlKHR5cGUsIGZp
ZWxkX2FjY2VzcyAtPiBpZGVudGlmaWVyX3Rva2VuKTsKCiAgICAgICAgVmFyaWFibGVTaGFkb3dT
eW1ib2wgKnZhcmlhYmxlX3NoYWRvd19zeW1ib2wgPSB0eXBlIC0+IGV4cGFuZGVkX2ZpZWxkX3Rh
YmxlIC0+IEZpbmRWYXJpYWJsZVNoYWRvd1N5bWJvbChuYW1lX3N5bWJvbCk7CgogICAgICAgIGlm
ICh2YXJpYWJsZV9zaGFkb3dfc3ltYm9sKQogICAgICAgIHsKICAgICAgICAgICAgVmFyaWFibGVT
eW1ib2wgKnZhcmlhYmxlX3N5bWJvbCA9IHZhcmlhYmxlX3NoYWRvd19zeW1ib2wgLT4gdmFyaWFi
bGVfc3ltYm9sOwogICAgICAgICAgICBUeXBlU3ltYm9sICplbmNsb3NpbmdfdHlwZSA9IHZhcmlh
YmxlX3N5bWJvbCAtPiBvd25lciAtPiBUeXBlQ2FzdCgpOwoKICAgICAgICAgICAgKHN0YXRpY19j
YXN0PHZvaWQ+ICAoKCBlbmNsb3NpbmdfdHlwZSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiZW5j
bG9zaW5nX3R5cGUiICwgIi4uLy4uL2ppa2VzL3NyYy9leHByLmNwcCIsIDUzNywgX19QUkVUVFlf
RlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGlj
RXJyb3I6OkZJRUxEX05PVF9NRVRIT0QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhv
ZF9jYWxsIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Rf
Y2FsbCAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxl
X3N5bWJvbCAtPiBOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY2xvc2luZ190
eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5jbG9zaW5nX3R5cGUgLT4gRXh0ZXJuYWxOYW1lKCkpOwogICAgICAg
IH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBUeXBlU3ltYm9sICpzdXBlcl90
eXBlOwogICAgICAgICAgICBNZXRob2RTaGFkb3dTeW1ib2wgKm1ldGhvZF9zaGFkb3c7CgogICAg
ICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICBmb3IgKHN1
cGVyX3R5cGUgPSB0eXBlOyBzdXBlcl90eXBlOyBzdXBlcl90eXBlID0gc3VwZXJfdHlwZSAtPiBz
dXBlcikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChtZXRob2Rfc2hhZG93ID0g
c3VwZXJfdHlwZSAtPiBleHBhbmRlZF9tZXRob2RfdGFibGUgLT4gRmluZE1ldGhvZFNoYWRvd1N5
bWJvbChuYW1lX3N5bWJvbCk7CiAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9zaGFkb3c7IG1l
dGhvZF9zaGFkb3cgPSBtZXRob2Rfc2hhZG93IC0+IG5leHRfbWV0aG9kKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgIE1ldGhvZFN5bWJvbCAqbWV0aG9kID0gbWV0aG9kX3No
YWRvdyAtPiBtZXRob2Rfc3ltYm9sOwogICAgICAgICAgICAgICAgICAgIGlmICghIG1ldGhvZCAt
PiBJc1R5cGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCAtPiBQcm9jZXNzTWV0
aG9kU2lnbmF0dXJlKChTZW1hbnRpYyAqKSB0aGlzLCBmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmll
cl90b2tlbik7CgogICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2RfY2FsbCAtPiBOdW1Bcmd1
bWVudHMoKSA9PSBtZXRob2QgLT4gTnVtRm9ybWFsUGFyYW1ldGVycygpKQogICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBtZXRob2RfY2FsbCAtPiBOdW1Bcmd1bWVudHMoKTsgaSsr
KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
c3RFeHByZXNzaW9uICpleHByID0gbWV0aG9kX2NhbGwgLT4gQXJndW1lbnQoaSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoISBDYW5NZXRob2RJbnZvY2F0aW9uQ29udmVydChtZXRo
b2QgLT4gRm9ybWFsUGFyYW1ldGVyKGkpIC0+IFR5cGUoKSwgZXhwciAtPiBUeXBlKCkpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IG1ldGhvZF9jYWxsIC0+IE51bUFy
Z3VtZW50cygpKSAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKG1ldGhv
ZF9zaGFkb3cpICAKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgaWYgKHN1cGVyX3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFJl
cG9ydFNlbUVycm9yKChtZXRob2Rfc2hhZG93IC0+IG1ldGhvZF9zeW1ib2wgLT4gQUNDX1BSSVZB
VEUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gU2Vt
YW50aWNFcnJvcjo6TUVUSE9EX1dJVEhfUFJJVkFURV9BQ0NFU1NfTk9UX0FDQ0VTU0lCTEUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNlbWFudGljRXJy
b3I6Ok1FVEhPRF9XSVRIX0RFRkFVTFRfQUNDRVNTX05PVF9BQ0NFU1NJQkxFKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IExlZnRUb2tlbigpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2NhbGwgLT4gUmlnaHRUb2tlbigpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3NoYWRvdyAtPiBtZXRob2Rfc3ltYm9s
IC0+IEhlYWRlcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJfdHlwZSAt
PiBDb250YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdXBlcl90eXBlIC0+IEV4dGVybmFsTmFtZSgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVGhpc1R5cGUoKSAtPiBDb250YWluaW5nUGFja2FnZSgpIC0+IFBh
Y2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzVHlwZSgpIC0+
IEV4dGVybmFsTmFtZSgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIGlmIChGaW5kTmVzdGVkVHlwZSh0eXBlLCBmaWVsZF9hY2Nl
c3MgLT4gaWRlbnRpZmllcl90b2tlbikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6VFlQRV9OT1RfTUVUSE9ELAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBpZGVudGlmaWVy
X3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAt
PiBpZGVudGlmaWVyX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5h
bWVfc3ltYm9sIC0+IE5hbWUoKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBl
bHNlIGlmICh0eXBlIC0+IGV4cGFuZGVkX21ldGhvZF90YWJsZSAtPiBGaW5kTWV0aG9kU2hhZG93
U3ltYm9sKG5hbWVfc3ltYm9sKSkKICAgICAgICAgICAgICAgICAgICBSZXBvcnRNZXRob2ROb3RG
b3VuZChtZXRob2RfY2FsbCwgbmFtZV9zeW1ib2wgLT4gTmFtZSgpKTsKICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBNZXRob2RTeW1ib2wg
Km1ldGhvZCA9IEZpbmRNaXNzcGVsbGVkTWV0aG9kTmFtZSh0eXBlLCBtZXRob2RfY2FsbCwgbmFt
ZV9zeW1ib2wpOwogICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpNRVRIT0RfTkFNRV9NSVNT
UEVMTEVELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2Nh
bGwgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtZXRob2RfY2FsbCAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuYW1lX3N5bWJvbCAtPiBOYW1lKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2Fn
ZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgLT4g
RXh0ZXJuYWxOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
ZXRob2QgLT4gTmFtZSgpKTsKICAgICAgICAgICAgICAgICAgICBlbHNlIFJlcG9ydFNlbUVycm9y
KFNlbWFudGljRXJyb3I6Ok1FVEhPRF9OQU1FX05PVF9GT1VORF9JTl9UWVBFLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2NhbGwgLT4gTGVmdFRva2VuKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBS
aWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1l
X3N5bWJvbCAtPiBOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgLT4gRXh0ZXJuYWxOYW1lKCkpOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4g
KE1ldGhvZFN5bWJvbCAqKSBfX251bGwgOwogICAgfQogICAgZWxzZSBpZiAobWV0aG9kX3NldC5M
ZW5ndGgoKSA+IDEpCiAgICB7CiAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6
QU1CSUdVT1VTX01FVEhPRF9JTlZPQ0FUSU9OLAogICAgICAgICAgICAgICAgICAgICAgIG1ldGhv
ZF9jYWxsIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9jYWxs
IC0+IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3N5bWJvbCAtPiBO
YW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3NldFswXSAtPiBIZWFkZXIoKSwK
ICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Rfc2V0WzBdIC0+IGNvbnRhaW5pbmdfdHlwZSAt
PiBDb250YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgbWV0aG9kX3NldFswXSAtPiBjb250YWluaW5nX3R5cGUgLT4gRXh0ZXJuYWxOYW1lKCks
CiAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3NldFsxXSAtPiBIZWFkZXIoKSwKICAgICAg
ICAgICAgICAgICAgICAgICBtZXRob2Rfc2V0WzFdIC0+IGNvbnRhaW5pbmdfdHlwZSAtPiBDb250
YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAg
bWV0aG9kX3NldFsxXSAtPiBjb250YWluaW5nX3R5cGUgLT4gRXh0ZXJuYWxOYW1lKCkpOwogICAg
fQoKICAgIE1ldGhvZFN5bWJvbCAqbWV0aG9kID0gbWV0aG9kX3NldFswXTsKICAgIGlmIChtZXRo
b2QgLT4gSXNTeW50aGV0aWMoKSkKICAgIHsKICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRp
Y0Vycm9yOjpTWU5USEVUSUNfTUVUSE9EX0lOVk9DQVRJT04sCiAgICAgICAgICAgICAgICAgICAg
ICAgbWV0aG9kX2NhbGwgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgbWV0
aG9kX2NhbGwgLT4gUmlnaHRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCAt
PiBIZWFkZXIoKSwKICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgLT4gY29udGFpbmluZ190
eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAg
ICAgICAgICAgICBtZXRob2QgLT4gY29udGFpbmluZ190eXBlIC0+IEV4dGVybmFsTmFtZSgpKTsK
ICAgIH0KCiAgICAgCiAgICAgCiAgICAgCiAgICBtZXRob2QgLT4gUHJvY2Vzc01ldGhvZFRocm93
cygoU2VtYW50aWMgKikgdGhpcywgZmllbGRfYWNjZXNzIC0+IGlkZW50aWZpZXJfdG9rZW4pOwoK
ICAgIGlmIChjb250cm9sLm9wdGlvbi5kZXByZWNhdGlvbiAmJgogICAgICAgIG1ldGhvZCAtPiBJ
c0RlcHJlY2F0ZWQoKSAmJiBtZXRob2QgLT4gY29udGFpbmluZ190eXBlIC0+IG91dGVybW9zdF90
eXBlICE9IFRoaXNUeXBlKCkgLT4gb3V0ZXJtb3N0X3R5cGUpCiAgICB7CiAgICAgICAgUmVwb3J0
U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6REVQUkVDQVRFRF9NRVRIT0QsCiAgICAgICAgICAgICAg
ICAgICAgICAgbWV0aG9kX2NhbGwgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgbWV0aG9kX2NhbGwgLT4gUmlnaHRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgIG1l
dGhvZCAtPiBIZWFkZXIoKSwKICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgLT4gY29udGFp
bmluZ190eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAg
ICAgICAgICAgICAgICAgICBtZXRob2QgLT4gY29udGFpbmluZ190eXBlIC0+IEV4dGVybmFsTmFt
ZSgpKTsKICAgIH0KCiAgICByZXR1cm4gbWV0aG9kOwp9CgoKdm9pZCBTZW1hbnRpYzo6U2VhcmNo
Rm9yTWV0aG9kSW5FbnZpcm9ubWVudChUdXBsZTxNZXRob2RTeW1ib2wgKj4gJm1ldGhvZHNfZm91
bmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VtYW50aWNF
bnZpcm9ubWVudCAqJndoZXJlX2ZvdW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNlbWFudGljRW52aXJvbm1lbnQgKnN0YWNrLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzdE1ldGhvZEludm9jYXRpb24gKm1ldGhvZF9j
YWxsKQp7CiAgICBBc3RTaW1wbGVOYW1lICpzaW1wbGVfbmFtZSA9IG1ldGhvZF9jYWxsIC0+IG1l
dGhvZCAtPiBTaW1wbGVOYW1lQ2FzdCgpOwogICAgTmFtZVN5bWJvbCAqbmFtZV9zeW1ib2wgPSBs
ZXhfc3RyZWFtIC0+IE5hbWVTeW1ib2woc2ltcGxlX25hbWUgLT4gaWRlbnRpZmllcl90b2tlbik7
CgogICAgZm9yIChTZW1hbnRpY0Vudmlyb25tZW50ICplbnYgPSBzdGFjazsgZW52OyBlbnYgPSBl
bnYgLT4gcHJldmlvdXMpCiAgICB7CiAgICAgICAgVHlwZVN5bWJvbCAqdHlwZSA9IGVudiAtPiBU
eXBlKCk7CiAgICAgICAgaWYgKCEgdHlwZSAtPiBleHBhbmRlZF9tZXRob2RfdGFibGUpCiAgICAg
ICAgICAgIENvbXB1dGVNZXRob2RzQ2xvc3VyZSh0eXBlLCBzaW1wbGVfbmFtZSAtPiBpZGVudGlm
aWVyX3Rva2VuKTsKCiAgICAgICAgbWV0aG9kc19mb3VuZC5SZXNldCgpOwogICAgICAgIHdoZXJl
X2ZvdW5kID0gX19udWxsIDsKCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAg
IAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgIE1ldGhvZFNoYWRvd1N5bWJv
bCAqbWV0aG9kX3NoYWRvdyA9IHR5cGUgLT4gZXhwYW5kZWRfbWV0aG9kX3RhYmxlIC0+IEZpbmRN
ZXRob2RTaGFkb3dTeW1ib2wobmFtZV9zeW1ib2wpOwogICAgICAgIGlmIChtZXRob2Rfc2hhZG93
KQogICAgICAgIHsKICAgICAgICAgICAgZm9yICg7IG1ldGhvZF9zaGFkb3c7IG1ldGhvZF9zaGFk
b3cgPSBtZXRob2Rfc2hhZG93IC0+IG5leHRfbWV0aG9kKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICBNZXRob2RTeW1ib2wgKm1ldGhvZCA9IG1ldGhvZF9zaGFkb3cgLT4gbWV0aG9kX3N5
bWJvbDsKCiAgICAgICAgICAgICAgICBpZiAoISBtZXRob2QgLT4gSXNUeXBlZCgpKQogICAgICAg
ICAgICAgICAgICAgIG1ldGhvZCAtPiBQcm9jZXNzTWV0aG9kU2lnbmF0dXJlKChTZW1hbnRpYyAq
KSB0aGlzLCBzaW1wbGVfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2VuKTsKCiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICBpZiAobWV0aG9kX2NhbGwgLT4gTnVtQXJndW1lbnRzKCkgPT0gbWV0
aG9kIC0+IE51bUZvcm1hbFBhcmFtZXRlcnMoKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICBpbnQgaTsKICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWV0
aG9kX2NhbGwgLT4gTnVtQXJndW1lbnRzKCk7IGkrKykKICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIEFzdEV4cHJlc3Npb24gKmV4cHIgPSBtZXRob2RfY2FsbCAt
PiBBcmd1bWVudChpKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEgQ2FuTWV0aG9kSW52
b2NhdGlvbkNvbnZlcnQobWV0aG9kIC0+IEZvcm1hbFBhcmFtZXRlcihpKSAtPiBUeXBlKCksIGV4
cHIgLT4gVHlwZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSBtZXRob2RfY2FsbCAt
PiBOdW1Bcmd1bWVudHMoKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChNb3JlU3BlY2lmaWMobWV0aG9kLCBtZXRob2RzX2ZvdW5kKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kc19mb3Vu
ZC5SZXNldCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kc19mb3VuZC5OZXh0
KCkgPSBtZXRob2Q7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoTm9NZXRob2RNb3JlU3BlY2lmaWMobWV0aG9kc19mb3VuZCwgbWV0aG9k
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHNfZm91bmQuTmV4dCgpID0gbWV0
aG9kOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fQoKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAg
d2hlcmVfZm91bmQgPSAobWV0aG9kc19mb3VuZC5MZW5ndGgoKSA+IDAgPyBlbnYgOiAoU2VtYW50
aWNFbnZpcm9ubWVudCAqKSBfX251bGwgKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQog
ICAgfQoKICAgIHJldHVybjsKfQoKCk1ldGhvZFN5bWJvbCAqU2VtYW50aWM6OkZpbmRNZXRob2RJ
bkVudmlyb25tZW50KFNlbWFudGljRW52aXJvbm1lbnQgKiZ3aGVyZV9mb3VuZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VtYW50aWNFbnZpcm9ubWVu
dCAqc3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFzdE1ldGhvZEludm9jYXRpb24gKm1ldGhvZF9jYWxsKQp7CiAgICBUdXBsZTxNZXRob2RTeW1i
b2wgKj4gbWV0aG9kc19mb3VuZCgyKTsKICAgIFNlYXJjaEZvck1ldGhvZEluRW52aXJvbm1lbnQo
bWV0aG9kc19mb3VuZCwgd2hlcmVfZm91bmQsIHN0YWNrLCBtZXRob2RfY2FsbCk7CgogICAgTWV0
aG9kU3ltYm9sICptZXRob2Rfc3ltYm9sID0gKG1ldGhvZHNfZm91bmQuTGVuZ3RoKCkgPiAwID8g
bWV0aG9kc19mb3VuZFswXSA6IChNZXRob2RTeW1ib2wgKikgX19udWxsICk7CiAgICBpZiAobWV0
aG9kX3N5bWJvbCkKICAgIHsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IG1ldGhvZHNfZm91
bmQuTGVuZ3RoKCk7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNl
bWFudGljRXJyb3I6OkFNQklHVU9VU19NRVRIT0RfSU5WT0NBVElPTiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWV0aG9kX2NhbGwgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWV0aG9kX3N5bWJvbCAtPiBOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1ldGhvZHNfZm91bmRbMF0gLT4gSGVhZGVyKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1ldGhvZF9zeW1ib2wgLT4gY29udGFpbmluZ190eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdl
KCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3N5
bWJvbCAtPiBjb250YWluaW5nX3R5cGUgLT4gRXh0ZXJuYWxOYW1lKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1ldGhvZHNfZm91bmRbaV0gLT4gSGVhZGVyKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1ldGhvZHNfZm91bmRbaV0gLT4gY29udGFpbmluZ190eXBlIC0+IENvbnRh
aW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWV0aG9kc19mb3VuZFtpXSAtPiBjb250YWluaW5nX3R5cGUgLT4gRXh0ZXJuYWxOYW1lKCkp
OwogICAgICAgIH0KCiAgICAgICAgaWYgKG1ldGhvZF9zeW1ib2wgLT4gY29udGFpbmluZ190eXBl
ICE9IHdoZXJlX2ZvdW5kIC0+IFR5cGUoKSkgICAKICAgICAgICB7CiAgICAgICAgICAgIGlmICht
ZXRob2Rfc3ltYm9sIC0+IElzU3ludGhldGljKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OlNZTlRIRVRJQ19NRVRIT0RfSU5WT0NB
VElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IExlZnRU
b2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2NhbGwgLT4gUmln
aHRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3N5bWJvbCAt
PiBIZWFkZXIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9zeW1ib2wg
LT4gY29udGFpbmluZ190eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9zeW1ib2wgLT4gY29udGFp
bmluZ190eXBlIC0+IEV4dGVybmFsTmFtZSgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBl
bHNlIGlmICghIHdoZXJlX2ZvdW5kIC0+IFR5cGUoKSAtPiBBQ0NfU1RBVElDKCkpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIFR1cGxlPE1ldGhvZFN5bWJvbCAqPiBvdGhlcnMoMik7CiAg
ICAgICAgICAgICAgICBTZW1hbnRpY0Vudmlyb25tZW50ICpmb3VuZF9vdGhlciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKnByZXZpb3VzX2VudiA9IHdoZXJlX2ZvdW5kIC0+
IHByZXZpb3VzOwogICAgICAgICAgICAgICAgU2VhcmNoRm9yTWV0aG9kSW5FbnZpcm9ubWVudChv
dGhlcnMsIGZvdW5kX290aGVyLCBwcmV2aW91c19lbnYsIG1ldGhvZF9jYWxsKTsKCiAgICAgICAg
ICAgICAgICBpZiAob3RoZXJzLkxlbmd0aCgpID4gMCAmJiB3aGVyZV9mb3VuZCAtPiBUeXBlKCkg
LT4gQ2FuQWNjZXNzKGZvdW5kX290aGVyIC0+IFR5cGUoKSkpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdGhlcnMuTGVuZ3RoKCk7ICBp
KyspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISAo
b3RoZXJzW2ldID09IG1ldGhvZF9zeW1ib2wgJiYgbWV0aG9kX3N5bWJvbCAtPiBBQ0NfU1RBVElD
KCkpKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpJTkhFUklUQU5DRV9BTkRfTEVYSUNBTF9T
Q09QSU5HX0NPTkZMSUNUX1dJVEhfTUVNQkVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWV0aG9kX2NhbGwgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBSaWdodFRva2VuKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Rfc3ltYm9s
IC0+IE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1l
dGhvZF9zeW1ib2wgLT4gY29udGFpbmluZ190eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4g
UGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1ldGhvZF9zeW1ib2wgLT4gY29udGFpbmluZ190eXBlIC0+IEV4dGVybmFsTmFtZSgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfb3RoZXIgLT4gVHlw
ZSgpIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX290aGVyIC0+IFR5cGUoKSAtPiBF
eHRlcm5hbE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIAogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZQogICAgewogICAgICAg
IEFzdFNpbXBsZU5hbWUgKnNpbXBsZV9uYW1lID0gbWV0aG9kX2NhbGwgLT4gbWV0aG9kIC0+IFNp
bXBsZU5hbWVDYXN0KCk7CiAgICAgICAgTmFtZVN5bWJvbCAqbmFtZV9zeW1ib2wgPSBsZXhfc3Ry
ZWFtIC0+IE5hbWVTeW1ib2woc2ltcGxlX25hbWUgLT4gaWRlbnRpZmllcl90b2tlbik7CiAgICAg
ICAgYm9vbCBzeW1ib2xfZm91bmQgPSBmYWxzZTsKCiAgICAgICAgIAogICAgICAgICAKICAgICAg
ICAgCiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBzdGFjayApID8gMCA6CShfX2Fzc2Vy
dF9mYWlsICgic3RhY2siICwgIi4uLy4uL2ppa2VzL3NyYy9leHByLmNwcCIsIDgxNywgX19QUkVU
VFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgICAgICBmb3IgKFNlbWFudGljRW52aXJvbm1lbnQg
KmVudiA9IHN0YWNrIC0+IHByZXZpb3VzOyBlbnY7IGVudiA9IGVudiAtPiBwcmV2aW91cykKICAg
ICAgICB7CiAgICAgICAgICAgIFR1cGxlPE1ldGhvZFN5bWJvbCAqPiBvdGhlcnMoMik7CiAgICAg
ICAgICAgIFNlbWFudGljRW52aXJvbm1lbnQgKmZvdW5kX290aGVyOwogICAgICAgICAgICBTZWFy
Y2hGb3JNZXRob2RJbkVudmlyb25tZW50KG90aGVycywgZm91bmRfb3RoZXIsIGVudiwgbWV0aG9k
X2NhbGwpOwoKICAgICAgICAgICAgaWYgKG90aGVycy5MZW5ndGgoKSA+IDApCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OkhJRERFTl9N
RVRIT0RfSU5fRU5DTE9TSU5HX0NMQVNTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWV0aG9kX2NhbGwgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtZXRob2RfY2FsbCAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdGhlcnNbMF0gLT4gSGVhZGVyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdGhlcnNbMF0gLT4gY29udGFpbmluZ190eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4g
UGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyc1swXSAt
PiBjb250YWluaW5nX3R5cGUgLT4gRXh0ZXJuYWxOYW1lKCkpOwoKICAgICAgICAgICAgICAgIHN5
bWJvbF9mb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQog
ICAgICAgIH0KCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAg
IGZvciAoU2VtYW50aWNFbnZpcm9ubWVudCAqZW52MiA9IHN0YWNrOyBlbnYyICYmICghIHN5bWJv
bF9mb3VuZCk7IGVudjIgPSBlbnYyIC0+IHByZXZpb3VzKQogICAgICAgIHsKICAgICAgICAgICAg
VHlwZVN5bWJvbCAqdHlwZSA9IGVudjIgLT4gVHlwZSgpOwoKICAgICAgICAgICAgaWYgKCEgdHlw
ZSAtPiBleHBhbmRlZF9maWVsZF90YWJsZSkKICAgICAgICAgICAgICAgIENvbXB1dGVGaWVsZHND
bG9zdXJlKHR5cGUsIHNpbXBsZV9uYW1lIC0+IGlkZW50aWZpZXJfdG9rZW4pOwoKICAgICAgICAg
ICAgVmFyaWFibGVTaGFkb3dTeW1ib2wgKnZhcmlhYmxlX3NoYWRvd19zeW1ib2wgPSB0eXBlIC0+
IGV4cGFuZGVkX2ZpZWxkX3RhYmxlIC0+IEZpbmRWYXJpYWJsZVNoYWRvd1N5bWJvbChuYW1lX3N5
bWJvbCk7CiAgICAgICAgICAgIGlmICh2YXJpYWJsZV9zaGFkb3dfc3ltYm9sKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICBWYXJpYWJsZVN5bWJvbCAqdmFyaWFibGVfc3ltYm9sID0gdmFy
aWFibGVfc2hhZG93X3N5bWJvbCAtPiB2YXJpYWJsZV9zeW1ib2w7CiAgICAgICAgICAgICAgICBU
eXBlU3ltYm9sICplbmNsb3NpbmdfdHlwZSA9IHZhcmlhYmxlX3N5bWJvbCAtPiBvd25lciAtPiBU
eXBlQ2FzdCgpOwoKICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggZW5jbG9z
aW5nX3R5cGUgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImVuY2xvc2luZ190eXBlIiAsICIuLi8u
Li9qaWtlcy9zcmMvZXhwci5jcHAiLCA4NTUsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7
CgogICAgICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6RklFTERfTk9U
X01FVEhPRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IExl
ZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2NhbGwgLT4g
UmlnaHRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVfc3lt
Ym9sIC0+IE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY2xvc2luZ190
eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVuY2xvc2luZ190eXBlIC0+IEV4dGVybmFsTmFtZSgpKTsKICAg
ICAgICAgICAgICAgIHN5bWJvbF9mb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIFR5cGVTeW1ib2wgKnN1cGVyX3R5cGU7CiAgICAgICAgICAgICAgICBNZXRob2RTaGFkb3dT
eW1ib2wgKm1ldGhvZF9zaGFkb3c7CgogICAgICAgICAgICAgICAgZm9yIChzdXBlcl90eXBlID0g
dHlwZSAtPiBzdXBlcjsgc3VwZXJfdHlwZTsgc3VwZXJfdHlwZSA9IHN1cGVyX3R5cGUgLT4gc3Vw
ZXIpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZm9yIChtZXRob2Rfc2hh
ZG93ID0gc3VwZXJfdHlwZSAtPiBleHBhbmRlZF9tZXRob2RfdGFibGUgLT4gRmluZE1ldGhvZFNo
YWRvd1N5bWJvbChuYW1lX3N5bWJvbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Rf
c2hhZG93OyBtZXRob2Rfc2hhZG93ID0gbWV0aG9kX3NoYWRvdyAtPiBuZXh0X21ldGhvZCkKICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIE1ldGhvZFN5bWJvbCAq
bWV0aG9kID0gbWV0aG9kX3NoYWRvdyAtPiBtZXRob2Rfc3ltYm9sOwogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoISBtZXRob2QgLT4gSXNUeXBlZCgpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWV0aG9kIC0+IFByb2Nlc3NNZXRob2RTaWduYXR1cmUoKFNlbWFudGljICopIHRoaXMs
IHNpbXBsZV9uYW1lIC0+IGlkZW50aWZpZXJfdG9rZW4pOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1ldGhvZF9jYWxsIC0+IE51bUFyZ3VtZW50cygpID09IG1ldGhvZCAtPiBOdW1Gb3Jt
YWxQYXJhbWV0ZXJzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0g
MDsgaSA8IG1ldGhvZF9jYWxsIC0+IE51bUFyZ3VtZW50cygpOyBpKyspCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXN0RXhwcmVz
c2lvbiAqZXhwciA9IG1ldGhvZF9jYWxsIC0+IEFyZ3VtZW50KGkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghIENhbk1ldGhvZEludm9jYXRpb25Db252ZXJ0KG1ldGhvZCAt
PiBGb3JtYWxQYXJhbWV0ZXIoaSkgLT4gVHlwZSgpLCBleHByIC0+IFR5cGUoKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gbWV0aG9kX2NhbGwg
LT4gTnVtQXJndW1lbnRzKCkpICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgaWYgKG1ldGhvZF9zaGFkb3cpICAKICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHN1cGVyX3R5
cGUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3Io
KG1ldGhvZF9zaGFkb3cgLT4gbWV0aG9kX3N5bWJvbCAtPiBBQ0NfUFJJVkFURSgpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gU2VtYW50aWNFcnJv
cjo6TUVUSE9EX1dJVEhfUFJJVkFURV9BQ0NFU1NfTk9UX0FDQ0VTU0lCTEUKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTZW1hbnRpY0Vycm9yOjpN
RVRIT0RfV0lUSF9ERUZBVUxUX0FDQ0VTU19OT1RfQUNDRVNTSUJMRSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2NhbGwgLT4gTGVmdFRva2VuKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2NhbGwgLT4gUmlnaHRUb2tlbigpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfc3ltYm9sIC0+IE5hbWUoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBlcl90eXBlIC0+IENvbnRhaW5p
bmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdXBlcl90eXBlIC0+IEV4dGVybmFsTmFtZSgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGUgLT4gQ29udGFpbmluZ1BhY2thZ2UoKSAtPiBQYWNrYWdlTmFt
ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgLT4gRXh0ZXJuYWxO
YW1lKCkpOwogICAgICAgICAgICAgICAgICAgIHN5bWJvbF9mb3VuZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
ICB9CgogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICBpZiAo
ISBzeW1ib2xfZm91bmQpCiAgICAgICAgewogICAgICAgICAgICBUeXBlU3ltYm9sICp0aGlzX3R5
cGUgPSBUaGlzVHlwZSgpOwoKICAgICAgICAgICAgaWYgKEZpbmRUeXBlKHNpbXBsZV9uYW1lIC0+
IGlkZW50aWZpZXJfdG9rZW4pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBSZXBvcnRT
ZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpUWVBFX05PVF9NRVRIT0QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaW1wbGVfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2VuLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2ltcGxlX25hbWUgLT4gaWRlbnRpZmllcl90b2tlbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfc3ltYm9sIC0+IE5hbWUoKSk7CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpc190eXBlIC0+IGV4cGFuZGVkX21ldGhv
ZF90YWJsZSAtPiBGaW5kTWV0aG9kU2hhZG93U3ltYm9sKG5hbWVfc3ltYm9sKSkKICAgICAgICAg
ICAgICAgIFJlcG9ydE1ldGhvZE5vdEZvdW5kKG1ldGhvZF9jYWxsLCBuYW1lX3N5bWJvbCAtPiBO
YW1lKCkpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE1l
dGhvZFN5bWJvbCAqbWV0aG9kID0gRmluZE1pc3NwZWxsZWRNZXRob2ROYW1lKHRoaXNfdHlwZSwg
bWV0aG9kX2NhbGwsIG5hbWVfc3ltYm9sKTsKICAgICAgICAgICAgICAgIGlmIChtZXRob2QpCiAg
ICAgICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6Ok1FVEhPRF9O
QU1FX01JU1NQRUxMRUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhv
ZF9jYWxsIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtZXRob2RfY2FsbCAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbWVfc3ltYm9sIC0+IE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpc190eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5h
bWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc190eXBlIC0+IEV4
dGVybmFsTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Qg
LT4gTmFtZSgpKTsKICAgICAgICAgICAgICAgIGVsc2UgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNF
cnJvcjo6TUVUSE9EX05BTUVfTk9UX0ZPVU5EX0lOX1RZUEUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBSaWdodFRva2VuKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfc3ltYm9sIC0+IE5hbWUoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc190eXBlIC0+IENvbnRhaW5pbmdQ
YWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpc190eXBlIC0+IEV4dGVybmFsTmFtZSgpKTsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgIH0KCiAgICAgCiAgICAgCiAgICAgCiAgICBpZiAobWV0aG9kX3N5bWJvbCkKICAgIHsK
ICAgICAgICBtZXRob2Rfc3ltYm9sIC0+IFByb2Nlc3NNZXRob2RUaHJvd3MoKFNlbWFudGljICop
IHRoaXMsIG1ldGhvZF9jYWxsIC0+IG1ldGhvZCAtPiBSaWdodFRva2VuKCkpOwoKICAgICAgICBp
ZiAoY29udHJvbC5vcHRpb24uZGVwcmVjYXRpb24gJiYKICAgICAgICAgICAgbWV0aG9kX3N5bWJv
bCAtPiBJc0RlcHJlY2F0ZWQoKSAmJiBtZXRob2Rfc3ltYm9sIC0+IGNvbnRhaW5pbmdfdHlwZSAt
PiBvdXRlcm1vc3RfdHlwZSAhPSBUaGlzVHlwZSgpIC0+IG91dGVybW9zdF90eXBlKQogICAgICAg
IHsKICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6REVQUkVDQVRFRF9N
RVRIT0QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IExlZnRUb2tl
bigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBSaWdodFRva2Vu
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9zeW1ib2wgLT4gSGVhZGVyKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9zeW1ib2wgLT4gY29udGFpbmluZ190
eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWV0aG9kX3N5bWJvbCAtPiBjb250YWluaW5nX3R5cGUgLT4gRXh0ZXJu
YWxOYW1lKCkpOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbWV0aG9kX3N5bWJvbDsKfQoK
CgogCiAKIAogCiAKaW5saW5lIFZhcmlhYmxlU3ltYm9sICpTZW1hbnRpYzo6RmluZFZhcmlhYmxl
SW5UeXBlKFR5cGVTeW1ib2wgKnR5cGUsIEFzdEZpZWxkQWNjZXNzICpmaWVsZF9hY2Nlc3MsIE5h
bWVTeW1ib2wgKm5hbWVfc3ltYm9sKQp7CiAgICBpZiAoISBuYW1lX3N5bWJvbCkKICAgICAgICBu
YW1lX3N5bWJvbCA9IGxleF9zdHJlYW0gLT4gTmFtZVN5bWJvbChmaWVsZF9hY2Nlc3MgLT4gaWRl
bnRpZmllcl90b2tlbik7CgogICAgaWYgKCEgdHlwZSAtPiBleHBhbmRlZF9maWVsZF90YWJsZSkK
ICAgICAgICBDb21wdXRlRmllbGRzQ2xvc3VyZSh0eXBlLCBmaWVsZF9hY2Nlc3MgLT4gaWRlbnRp
Zmllcl90b2tlbik7CgogCiAKIAogCgoKCgoKCgoKCgoKCiAgICBWYXJpYWJsZVNoYWRvd1N5bWJv
bCAqdmFyaWFibGVfc2hhZG93X3N5bWJvbCA9IHR5cGUgLT4gZXhwYW5kZWRfZmllbGRfdGFibGUg
LT4gRmluZFZhcmlhYmxlU2hhZG93U3ltYm9sKG5hbWVfc3ltYm9sKTsKCiAgICAgCiAgICAgCiAg
ICAgCiAgICAgCiAgICAgCiAgICBpZiAodmFyaWFibGVfc2hhZG93X3N5bWJvbCkKICAgIHsKICAg
ICAgICBWYXJpYWJsZVN5bWJvbCAqdmFyaWFibGVfc3ltYm9sID0gdmFyaWFibGVfc2hhZG93X3N5
bWJvbCAtPiB2YXJpYWJsZV9zeW1ib2w7CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFy
aWFibGVfc2hhZG93X3N5bWJvbCAtPiBOdW1Db25mbGljdHMoKTsgaSsrKQogICAgICAgIHsKICAg
ICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6QU1CSUdVT1VTX0ZJRUxELAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gTGVmdFRva2VuKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBSaWdodFRva2VuKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfc3ltYm9sIC0+IE5hbWUoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyaWFibGVfc3ltYm9sIC0+IG93bmVyIC0+IFR5cGVDYXN0KCkg
LT4gQ29udGFpbmluZ1BhY2thZ2UoKSAtPiBQYWNrYWdlTmFtZSgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZV9zeW1ib2wgLT4gb3duZXIgLT4gVHlwZUNhc3QoKSAtPiBFeHRl
cm5hbE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVfc2hhZG93X3N5
bWJvbCAtPiBDb25mbGljdChpKSAtPiBvd25lciAtPiBUeXBlQ2FzdCgpIC0+IENvbnRhaW5pbmdQ
YWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
aWFibGVfc2hhZG93X3N5bWJvbCAtPiBDb25mbGljdChpKSAtPiBvd25lciAtPiBUeXBlQ2FzdCgp
IC0+IEV4dGVybmFsTmFtZSgpKTsKICAgICAgICB9CgogICAgICAgIGlmICh2YXJpYWJsZV9zeW1i
b2wgLT4gSXNTeW50aGV0aWMoKSkKICAgICAgICB7CiAgICAgICAgICAgIFJlcG9ydFNlbUVycm9y
KFNlbWFudGljRXJyb3I6OlNZTlRIRVRJQ19WQVJJQUJMRV9BQ0NFU1MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBMZWZ0VG9rZW4oKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmllbGRfYWNjZXNzIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGVfc3ltYm9sIC0+IE5hbWUoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGVfc3ltYm9sIC0+IG93bmVyIC0+IFR5cGVDYXN0KCkgLT4gQ29udGFp
bmluZ1BhY2thZ2UoKSAtPiBQYWNrYWdlTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZV9zeW1ib2wgLT4gb3duZXIgLT4gVHlwZUNhc3QoKSAtPiBFeHRlcm5hbE5hbWUo
KSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoY29udHJvbC5vcHRpb24uZGVwcmVjYXRpb24gJiYK
ICAgICAgICAgICAgdmFyaWFibGVfc3ltYm9sIC0+IElzRGVwcmVjYXRlZCgpICYmCiAgICAgICAg
ICAgIHZhcmlhYmxlX3N5bWJvbCAtPiBvd25lciAtPiBUeXBlQ2FzdCgpIC0+IG91dGVybW9zdF90
eXBlICE9IFRoaXNUeXBlKCkgLT4gb3V0ZXJtb3N0X3R5cGUpCiAgICAgICAgewogICAgICAgICAg
ICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpERVBSRUNBVEVEX0ZJRUxELAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gTGVmdFRva2VuKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBSaWdodFRva2VuKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlX3N5bWJvbCAtPiBOYW1lKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlX3N5bWJvbCAtPiBvd25lciAtPiBUeXBlQ2FzdCgpIC0+
IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGVfc3ltYm9sIC0+IG93bmVyIC0+IFR5cGVDYXN0KCkgLT4gRXh0ZXJu
YWxOYW1lKCkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEgdmFyaWFibGVfc3ltYm9sIC0+IElz
VHlwZWQoKSkKICAgICAgICAgICAgdmFyaWFibGVfc3ltYm9sIC0+IFByb2Nlc3NWYXJpYWJsZVNp
Z25hdHVyZSgoU2VtYW50aWMgKikgdGhpcywgZmllbGRfYWNjZXNzIC0+IGlkZW50aWZpZXJfdG9r
ZW4pOwoKICAgICAgICByZXR1cm4gdmFyaWFibGVfc3ltYm9sOwogICAgfQoKICAgIHJldHVybiAo
VmFyaWFibGVTeW1ib2wgKikgX19udWxsIDsKfQoKCnZvaWQgU2VtYW50aWM6OlJlcG9ydEFjY2Vz
c2VkRmllbGROb3RGb3VuZChBc3RGaWVsZEFjY2VzcyAqZmllbGRfYWNjZXNzLCBUeXBlU3ltYm9s
ICp0eXBlKQp7CiAgICBOYW1lU3ltYm9sICpuYW1lX3N5bWJvbCA9IGxleF9zdHJlYW0gLT4gTmFt
ZVN5bWJvbChmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbik7CiAgICBWYXJpYWJsZVNo
YWRvd1N5bWJvbCAqdmFyaWFibGVfc2hhZG93X3N5bWJvbDsKCiAgICBpZiAoISB0eXBlIC0+IGV4
cGFuZGVkX2ZpZWxkX3RhYmxlKQogICAgICAgIENvbXB1dGVGaWVsZHNDbG9zdXJlKHR5cGUsIGZp
ZWxkX2FjY2VzcyAtPiBiYXNlIC0+IExlZnRUb2tlbigpKTsKICAgIFR5cGVTeW1ib2wgKnN1cGVy
X3R5cGU7CiAgICBmb3IgKHN1cGVyX3R5cGUgPSB0eXBlIC0+IHN1cGVyOyBzdXBlcl90eXBlOyBz
dXBlcl90eXBlID0gc3VwZXJfdHlwZSAtPiBzdXBlcikKICAgIHsKICAgICAgICB2YXJpYWJsZV9z
aGFkb3dfc3ltYm9sID0gc3VwZXJfdHlwZSAtPiBleHBhbmRlZF9maWVsZF90YWJsZSAtPiBGaW5k
VmFyaWFibGVTaGFkb3dTeW1ib2wobmFtZV9zeW1ib2wpOwogICAgICAgIGlmICh2YXJpYWJsZV9z
aGFkb3dfc3ltYm9sKQogICAgICAgICAgICBicmVhazsKICAgIH0KCiAgICBpZiAoc3VwZXJfdHlw
ZSkKICAgIHsKICAgICAgICBWYXJpYWJsZVN5bWJvbCAqdmFyaWFibGVfc3ltYm9sID0gdmFyaWFi
bGVfc2hhZG93X3N5bWJvbCAtPiB2YXJpYWJsZV9zeW1ib2w7CiAgICAgICAgUmVwb3J0U2VtRXJy
b3IoKHZhcmlhYmxlX3N5bWJvbCAtPiBBQ0NfUFJJVkFURSgpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPyBTZW1hbnRpY0Vycm9yOjpGSUVMRF9XSVRIX1BSSVZBVEVf
QUNDRVNTX05PVF9BQ0NFU1NJQkxFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBTZW1hbnRpY0Vycm9yOjpGSUVMRF9XSVRIX0RFRkFVTFRfQUNDRVNTX05PVF9BQ0NF
U1NJQkxFKSwKICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gTGVmdFRva2Vu
KCksCiAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfYWNjZXNzIC0+IFJpZ2h0VG9rZW4oKSwK
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZV9zeW1ib2wgLT4gTmFtZSgpLAogICAgICAg
ICAgICAgICAgICAgICAgIHN1cGVyX3R5cGUgLT4gQ29udGFpbmluZ1BhY2thZ2UoKSAtPiBQYWNr
YWdlTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgIHN1cGVyX3R5cGUgLT4gRXh0ZXJuYWxO
YW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAtPiBDb250YWluaW5nUGFja2FnZSgp
IC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAtPiBFeHRlcm5h
bE5hbWUoKSk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgVmFyaWFibGVTeW1ib2wgKnZh
cmlhYmxlID0gRmluZE1pc3NwZWxsZWRWYXJpYWJsZU5hbWUodHlwZSwgZmllbGRfYWNjZXNzIC0+
IGlkZW50aWZpZXJfdG9rZW4pOwogICAgICAgIGlmICh2YXJpYWJsZSkKICAgICAgICAgICAgIFJl
cG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OkZJRUxEX05BTUVfTUlTU1BFTExFRCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBMZWZ0VG9rZW4oKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBSaWdodFRva2VuKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3N5bWJvbCAtPiBOYW1lKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5h
bWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgLT4gRXh0ZXJuYWxOYW1lKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSAtPiBOYW1lKCkpOwogICAgICAg
IGVsc2UgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6RklFTERfTk9UX0ZPVU5ELAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfYWNjZXNzIC0+IExlZnRUb2tlbigpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfYWNjZXNzIC0+IFJpZ2h0VG9rZW4oKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxleF9zdHJlYW0gLT4gTmFtZVN0cmluZyhmaWVsZF9h
Y2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGUgLT4gRXh0ZXJuYWxOYW1lKCkpOwogICAgfQoKICAgIHJldHVy
bjsKfQoKCnZvaWQgU2VtYW50aWM6OlNlYXJjaEZvclZhcmlhYmxlSW5FbnZpcm9ubWVudChUdXBs
ZTxWYXJpYWJsZVN5bWJvbCAqPiAmdmFyaWFibGVzX2ZvdW5kLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VtYW50aWNFbnZpcm9ubWVudCAqJndoZXJlX2Zv
dW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VtYW50
aWNFbnZpcm9ubWVudCAqc3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOYW1lU3ltYm9sICpuYW1lX3N5bWJvbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBpZGVudGlmaWVy
X3Rva2VuKQp7CiAgICB2YXJpYWJsZXNfZm91bmQuUmVzZXQoKTsKICAgIHdoZXJlX2ZvdW5kID0g
KFNlbWFudGljRW52aXJvbm1lbnQgKikgX19udWxsIDsKCiAgICBmb3IgKFNlbWFudGljRW52aXJv
bm1lbnQgKmVudiA9IHN0YWNrOyBlbnY7IGVudiA9IGVudiAtPiBwcmV2aW91cykKICAgIHsKICAg
ICAgICBWYXJpYWJsZVN5bWJvbCAqdmFyaWFibGVfc3ltYm9sID0gZW52IC0+IHN5bWJvbF90YWJs
ZS5GaW5kVmFyaWFibGVTeW1ib2wobmFtZV9zeW1ib2wpOwogICAgICAgIGlmICh2YXJpYWJsZV9z
eW1ib2wpICAKICAgICAgICB7CiAgICAgICAgICAgIHZhcmlhYmxlc19mb3VuZC5OZXh0KCkgPSB2
YXJpYWJsZV9zeW1ib2w7CiAgICAgICAgICAgIHdoZXJlX2ZvdW5kID0gZW52OwogICAgICAgICAg
ICBicmVhazsKICAgICAgICB9CgogICAgICAgIFR5cGVTeW1ib2wgKnR5cGUgPSBlbnYgLT4gVHlw
ZSgpOwogICAgICAgIGlmICghIHR5cGUgLT4gZXhwYW5kZWRfZmllbGRfdGFibGUpCiAgICAgICAg
ICAgIENvbXB1dGVGaWVsZHNDbG9zdXJlKHR5cGUsIGlkZW50aWZpZXJfdG9rZW4pOwogICAgICAg
IFZhcmlhYmxlU2hhZG93U3ltYm9sICp2YXJpYWJsZV9zaGFkb3dfc3ltYm9sID0gdHlwZSAtPiBl
eHBhbmRlZF9maWVsZF90YWJsZSAtPiBGaW5kVmFyaWFibGVTaGFkb3dTeW1ib2wobmFtZV9zeW1i
b2wpOwogICAgICAgIGlmICh2YXJpYWJsZV9zaGFkb3dfc3ltYm9sKQogICAgICAgIHsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAg
ICAgICB2YXJpYWJsZXNfZm91bmQuTmV4dCgpID0gdmFyaWFibGVfc2hhZG93X3N5bWJvbCAtPiB2
YXJpYWJsZV9zeW1ib2w7CgogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAg
IAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB2YXJpYWJsZV9zaGFkb3dfc3ltYm9sIC0+IE51bUNvbmZsaWN0cygpOyBpKyspCiAgICAg
ICAgICAgICAgICB2YXJpYWJsZXNfZm91bmQuTmV4dCgpID0gdmFyaWFibGVfc2hhZG93X3N5bWJv
bCAtPiBDb25mbGljdChpKTsKICAgICAgICAgICAgd2hlcmVfZm91bmQgPSBlbnY7CiAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0KCgpWYXJpYWJsZVN5bWJv
bCAqU2VtYW50aWM6OkZpbmRWYXJpYWJsZUluRW52aXJvbm1lbnQoU2VtYW50aWNFbnZpcm9ubWVu
dCAqJndoZXJlX2ZvdW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2VtYW50aWNFbnZpcm9ubWVudCAqc3RhY2ssIExleFN0cmVhbTo6VG9rZW5J
bmRleCBpZGVudGlmaWVyX3Rva2VuKQp7CiAgICBUdXBsZTxWYXJpYWJsZVN5bWJvbCAqPiB2YXJp
YWJsZXNfZm91bmQoMik7CiAgICBOYW1lU3ltYm9sICpuYW1lX3N5bWJvbCA9IGxleF9zdHJlYW0g
LT4gTmFtZVN5bWJvbChpZGVudGlmaWVyX3Rva2VuKTsKICAgIFNlYXJjaEZvclZhcmlhYmxlSW5F
bnZpcm9ubWVudCh2YXJpYWJsZXNfZm91bmQsIHdoZXJlX2ZvdW5kLCBzdGFjaywgbmFtZV9zeW1i
b2wsIGlkZW50aWZpZXJfdG9rZW4pOwoKICAgIFZhcmlhYmxlU3ltYm9sICp2YXJpYWJsZV9zeW1i
b2wgPSAoVmFyaWFibGVTeW1ib2wgKikgKHZhcmlhYmxlc19mb3VuZC5MZW5ndGgoKSA+IDAgPyB2
YXJpYWJsZXNfZm91bmRbMF0gOiBfX251bGwgKTsKCiAgICBpZiAodmFyaWFibGVfc3ltYm9sKQog
ICAgewogICAgICAgIGlmICh2YXJpYWJsZV9zeW1ib2wgLT4gSXNMb2NhbCgpKSAgCiAgICAgICAg
ewogICAgICAgICAgICBpZiAod2hlcmVfZm91bmQgIT0gc3RhY2spCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgIFR5cGVTeW1ib2wgKnR5cGUgPSBzdGFjayAtPiBUeXBlKCk7CgogICAgICAg
ICAgICAgICAgaWYgKCEgdmFyaWFibGVfc3ltYm9sIC0+IEFDQ19GSU5BTCgpKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgIE1ldGhvZFN5bWJvbCAqbWV0aG9kID0gdmFyaWFi
bGVfc3ltYm9sIC0+IG93bmVyIC0+IE1ldGhvZENhc3QoKTsKCiAgICAgICAgICAgICAgICAgICAg
UmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6SU5ORVJfQ0xBU1NfUkVGRVJFTkNFX1RPX05P
Tl9GSU5BTF9MT0NBTF9WQVJJQUJMRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZGVudGlmaWVyX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlk
ZW50aWZpZXJfdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAt
PiBDb250YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZSAtPiBFeHRlcm5hbE5hbWUoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsZXhfc3RyZWFtIC0+IE5hbWVTdHJpbmcoaWRlbnRpZmllcl90
b2tlbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1ldGhvZCAtPiBOYW1lKCkpOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIFZhcmlhYmxlU3lt
Ym9sICpsb2NhbF9zaGFkb3cgPSB0eXBlIC0+IEZpbmRPckluc2VydExvY2FsU2hhZG93KHZhcmlh
YmxlX3N5bWJvbCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbG9jYWxfc3ltYm9s
ID0gc3RhY2sgLT4gc3ltYm9sX3RhYmxlLkZpbmRWYXJpYWJsZVN5bWJvbChsb2NhbF9zaGFkb3cg
LT4gSWRlbnRpdHkoKSk7CiAgICAgICAgICAgICAgICB2YXJpYWJsZV9zeW1ib2wgPSAobG9jYWxf
c3ltYm9sID8gbG9jYWxfc3ltYm9sIDogbG9jYWxfc2hhZG93KTsKCiAgICAgICAgICAgICAgICAo
c3RhdGljX2Nhc3Q8dm9pZD4gICgoIHZhcmlhYmxlX3N5bWJvbCApID8gMCA6CShfX2Fzc2VydF9m
YWlsICgidmFyaWFibGVfc3ltYm9sIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCAxMjA3
LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgICAgICAgICAgICAgIHdoZXJlX2Zv
dW5kID0gc3RhY2s7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAodmFy
aWFibGVfc3ltYm9sIC0+IG93bmVyICE9IHdoZXJlX2ZvdW5kIC0+IFR5cGUoKSkgICAKICAgICAg
ICB7CiAgICAgICAgICAgIFR5cGVTeW1ib2wgKnR5cGUgPSAoVHlwZVN5bWJvbCAqKSB2YXJpYWJs
ZV9zeW1ib2wgLT4gb3duZXI7CgogICAgICAgICAgICBpZiAodmFyaWFibGVfc3ltYm9sIC0+IElz
U3ludGhldGljKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9y
KFNlbWFudGljRXJyb3I6OlNZTlRIRVRJQ19WQVJJQUJMRV9BQ0NFU1MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZGVudGlmaWVyX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWRlbnRpZmllcl90b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlX3N5bWJvbCAtPiBOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGUgLT4gRXh0ZXJuYWxOYW1lKCkpOwogICAgICAgICAg
ICB9CiAgICAgICAgICAgIGVsc2UgaWYgKCEgd2hlcmVfZm91bmQgLT4gVHlwZSgpIC0+IEFDQ19T
VEFUSUMoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVHVwbGU8VmFyaWFibGVTeW1i
b2wgKj4gb3RoZXJzKDIpOwogICAgICAgICAgICAgICAgU2VtYW50aWNFbnZpcm9ubWVudCAqZm91
bmRfb3RoZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwcmV2aW91c19l
bnYgPSB3aGVyZV9mb3VuZCAtPiBwcmV2aW91czsKICAgICAgICAgICAgICAgIFNlYXJjaEZvclZh
cmlhYmxlSW5FbnZpcm9ubWVudChvdGhlcnMsIGZvdW5kX290aGVyLCBwcmV2aW91c19lbnYsIG5h
bWVfc3ltYm9sLCBpZGVudGlmaWVyX3Rva2VuKTsKCiAgICAgICAgICAgICAgICBpZiAob3RoZXJz
Lkxlbmd0aCgpID4gMCAmJiB3aGVyZV9mb3VuZCAtPiBUeXBlKCkgLT4gQ2FuQWNjZXNzKGZvdW5k
X290aGVyIC0+IFR5cGUoKSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBvdGhlcnMuTGVuZ3RoKCk7ICBpKyspCiAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISAob3RoZXJzW2ldID09IHZhcmlh
YmxlX3N5bWJvbCAmJiB2YXJpYWJsZV9zeW1ib2wgLT4gQUNDX1NUQVRJQygpKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kU3ltYm9s
ICptZXRob2QgPSBvdGhlcnNbaV0gLT4gb3duZXIgLT4gTWV0aG9kQ2FzdCgpOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50
aWNFcnJvcjo6SU5IRVJJVEFOQ0VfQU5EX0xFWElDQUxfU0NPUElOR19DT05GTElDVF9XSVRIX0xP
Q0FMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50
aWZpZXJfdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWRlbnRpZmllcl90b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsZXhfc3RyZWFtIC0+IE5hbWVTdHJpbmcoaWRlbnRpZmllcl90b2tlbiksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAtPiBDb250
YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAtPiBFeHRlcm5hbE5hbWUoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgLT4gTmFtZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRT
ZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpJTkhFUklUQU5DRV9BTkRfTEVYSUNBTF9TQ09QSU5HX0NP
TkZMSUNUX1dJVEhfTUVNQkVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlkZW50aWZpZXJfdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcl90b2tlbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsZXhfc3RyZWFtIC0+IE5hbWVTdHJpbmcoaWRlbnRp
Zmllcl90b2tlbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZSAtPiBDb250YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAtPiBFeHRlcm5hbE5h
bWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Vu
ZF9vdGhlciAtPiBUeXBlKCkgLT4gQ29udGFpbmluZ1BhY2thZ2UoKSAtPiBQYWNrYWdlTmFtZSgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX290
aGVyIC0+IFR5cGUoKSAtPiBFeHRlcm5hbE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPCB2YXJp
YWJsZXNfZm91bmQuTGVuZ3RoKCk7IGkrKykKICAgIHsKICAgICAgICBSZXBvcnRTZW1FcnJvcihT
ZW1hbnRpY0Vycm9yOjpBTUJJR1VPVVNfRklFTEQsCiAgICAgICAgICAgICAgICAgICAgICAgaWRl
bnRpZmllcl90b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyX3Rva2VuLAog
ICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlX3N5bWJvbCAtPiBOYW1lKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFibGVfc3ltYm9sIC0+IG93bmVyIC0+IFR5cGVDYXN0KCkgLT4g
Q29udGFpbmluZ1BhY2thZ2UoKSAtPiBQYWNrYWdlTmFtZSgpLAogICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhYmxlX3N5bWJvbCAtPiBvd25lciAtPiBUeXBlQ2FzdCgpIC0+IEV4dGVybmFsTmFt
ZSgpLAogICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc19mb3VuZFtpXSAtPiBvd25lciAt
PiBUeXBlQ2FzdCgpIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNfZm91bmRbaV0gLT4gb3duZXIgLT4gVHlwZUNh
c3QoKSAtPiBFeHRlcm5hbE5hbWUoKSk7CiAgICB9CgogICAgaWYgKHZhcmlhYmxlX3N5bWJvbCkK
ICAgIHsKICAgICAgICBpZiAoY29udHJvbC5vcHRpb24uZGVwcmVjYXRpb24gJiYKICAgICAgICAg
ICAgdmFyaWFibGVfc3ltYm9sIC0+IElzRGVwcmVjYXRlZCgpICYmCiAgICAgICAgICAgIHZhcmlh
YmxlX3N5bWJvbCAtPiBvd25lciAtPiBUeXBlQ2FzdCgpIC0+IG91dGVybW9zdF90eXBlICE9IFRo
aXNUeXBlKCkgLT4gb3V0ZXJtb3N0X3R5cGUpCiAgICAgICAgewogICAgICAgICAgICBSZXBvcnRT
ZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpERVBSRUNBVEVEX0ZJRUxELAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZGVudGlmaWVyX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZGVudGlmaWVyX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZV9zeW1i
b2wgLT4gTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZV9zeW1ib2wg
LT4gb3duZXIgLT4gVHlwZUNhc3QoKSAtPiBDb250YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VO
YW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlX3N5bWJvbCAtPiBvd25l
ciAtPiBUeXBlQ2FzdCgpIC0+IEV4dGVybmFsTmFtZSgpKTsKICAgICAgICB9CgogICAgICAgIGlm
ICghIHZhcmlhYmxlX3N5bWJvbCAtPiBJc1R5cGVkKCkpCiAgICAgICAgICAgIHZhcmlhYmxlX3N5
bWJvbCAtPiBQcm9jZXNzVmFyaWFibGVTaWduYXR1cmUoKFNlbWFudGljICopIHRoaXMsIGlkZW50
aWZpZXJfdG9rZW4pOwogICAgfQoKICAgIHJldHVybiB2YXJpYWJsZV9zeW1ib2w7Cn0KCgpWYXJp
YWJsZVN5bWJvbCAqU2VtYW50aWM6OkZpbmRJbnN0YW5jZShUeXBlU3ltYm9sICpiYXNlX3R5cGUs
IFR5cGVTeW1ib2wgKmVudmlyb25tZW50X3R5cGUpCnsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
YmFzZV90eXBlIC0+IE51bUVuY2xvc2luZ0luc3RhbmNlcygpOyBpKyspCiAgICB7CiAgICAgICAg
VmFyaWFibGVTeW1ib2wgKnZhcmlhYmxlID0gYmFzZV90eXBlIC0+IEVuY2xvc2luZ0luc3RhbmNl
KGkpOwogICAgICAgIGlmICh2YXJpYWJsZSAtPiBUeXBlKCkgLT4gSXNTdWJjbGFzcyhlbnZpcm9u
bWVudF90eXBlKSkKICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlOwogICAgfQoKICAgIEFzdENs
YXNzRGVjbGFyYXRpb24gKmNsYXNzX2RlY2xhcmF0aW9uID0gYmFzZV90eXBlIC0+IGRlY2xhcmF0
aW9uIC0+IENsYXNzRGVjbGFyYXRpb25DYXN0KCk7CiAgICBBc3RDbGFzc0luc3RhbmNlQ3JlYXRp
b25FeHByZXNzaW9uICpjbGFzc19jcmVhdGlvbiA9IGJhc2VfdHlwZSAtPiBkZWNsYXJhdGlvbiAt
PiBDbGFzc0luc3RhbmNlQ3JlYXRpb25FeHByZXNzaW9uQ2FzdCgpOwoKICAgIChzdGF0aWNfY2Fz
dDx2b2lkPiAgKCggY2xhc3NfZGVjbGFyYXRpb24gfHwgY2xhc3NfY3JlYXRpb24gKSA/IDAgOgko
X19hc3NlcnRfZmFpbCAoImNsYXNzX2RlY2xhcmF0aW9uIHx8IGNsYXNzX2NyZWF0aW9uIiAsICIu
Li8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCAxMzE2LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDAp
KSkgOwoKICAgIEFzdENsYXNzQm9keSAqY2xhc3NfYm9keSA9IChjbGFzc19kZWNsYXJhdGlvbiA/
IGNsYXNzX2RlY2xhcmF0aW9uIC0+IGNsYXNzX2JvZHkgOiBjbGFzc19jcmVhdGlvbiAtPiBjbGFz
c19ib2R5X29wdCk7CgogICAgTGV4U3RyZWFtOjpUb2tlbkluZGV4IGxvYyA9IGNsYXNzX2JvZHkg
LT4gbGVmdF9icmFjZV90b2tlbjsKICAgIEFzdEJsb2NrICp0aGlzX2Jsb2NrID0gY2xhc3NfYm9k
eSAtPiB0aGlzX2Jsb2NrOwogICAgaWYgKCEgdGhpc19ibG9jaykKICAgIHsKICAgICAgICB0aGlz
X2Jsb2NrID0gY29tcGlsYXRpb25fdW5pdCAtPiBhc3RfcG9vbCAtPiBHZW5CbG9jaygpOwogICAg
ICAgIHRoaXNfYmxvY2sgLT4gbGVmdF9icmFjZV90b2tlbiAgPSBsb2M7CiAgICAgICAgdGhpc19i
bG9jayAtPiByaWdodF9icmFjZV90b2tlbiA9IGxvYzsKCiAgICAgICAgdGhpc19ibG9jayAtPiBp
c19yZWFjaGFibGUgPSB0cnVlOwogICAgICAgIHRoaXNfYmxvY2sgLT4gY2FuX2NvbXBsZXRlX25v
cm1hbGx5ID0gdHJ1ZTsKCiAgICAgICAgY2xhc3NfYm9keSAtPiB0aGlzX2Jsb2NrID0gdGhpc19i
bG9jazsKICAgIH0KCiAgICBpbnQgayA9IGJhc2VfdHlwZSAtPiBOdW1FbmNsb3NpbmdJbnN0YW5j
ZXMoKTsKICAgIGZvciAoVHlwZVN5bWJvbCAqdHlwZSA9IGJhc2VfdHlwZSAtPiBFbmNsb3NpbmdJ
bnN0YW5jZShrIC0gMSkgLT4gVHlwZSgpOyB0eXBlOyB0eXBlID0gdHlwZSAtPiBDb250YWluaW5n
VHlwZSgpLCBrKyspCiAgICB7CiAgICAgICAgQXN0U2ltcGxlTmFtZSAqcGFybSA9IGNvbXBpbGF0
aW9uX3VuaXQgLT4gYXN0X3Bvb2wgLT4gR2VuU2ltcGxlTmFtZShsb2MpOwogICAgICAgIHBhcm0g
LT4gc3ltYm9sID0gYmFzZV90eXBlIC0+IEVuY2xvc2luZ0luc3RhbmNlKGsgLSAxKTsKCiAgICAg
ICAgVmFyaWFibGVTeW1ib2wgKnZhcmlhYmxlX3N5bWJvbCA9IChWYXJpYWJsZVN5bWJvbCAqKSB0
eXBlIC0+IEZpbmRUaGlzKDApOwoKICAgICAgICBBc3RGaWVsZEFjY2VzcyAqbWV0aG9kX25hbWUg
PSBjb21waWxhdGlvbl91bml0IC0+IGFzdF9wb29sIC0+IEdlbkZpZWxkQWNjZXNzKCk7CiAgICAg
ICAgbWV0aG9kX25hbWUgLT4gYmFzZSA9IHBhcm07CiAgICAgICAgbWV0aG9kX25hbWUgLT4gZG90
X3Rva2VuID0gbG9jOwogICAgICAgIG1ldGhvZF9uYW1lIC0+IGlkZW50aWZpZXJfdG9rZW4gPSBs
b2M7CiAgICAgICAgbWV0aG9kX25hbWUgLT4gc3ltYm9sID0gdmFyaWFibGVfc3ltYm9sOyAgCgog
ICAgICAgIEFzdE1ldGhvZEludm9jYXRpb24gKnJocyAgICAgICA9IGNvbXBpbGF0aW9uX3VuaXQg
LT4gYXN0X3Bvb2wgLT4gR2VuTWV0aG9kSW52b2NhdGlvbigpOwogICAgICAgIHJocyAtPiBtZXRo
b2QgICAgICAgICAgICAgICAgICA9IG1ldGhvZF9uYW1lOwogICAgICAgIHJocyAtPiBsZWZ0X3Bh
cmVudGhlc2lzX3Rva2VuICA9IGxvYzsKICAgICAgICByaHMgLT4gcmlnaHRfcGFyZW50aGVzaXNf
dG9rZW4gPSBsb2M7CiAgICAgICAgcmhzIC0+IHN5bWJvbCAgICAgICAgICAgICAgICAgID0gdHlw
ZSAtPiBHZXRSZWFkQWNjZXNzTWV0aG9kKHZhcmlhYmxlX3N5bWJvbCk7CiAgICAgICAgcmhzIC0+
IEFkZEFyZ3VtZW50KHBhcm0pOyAgCgoKICAgICAgICBBc3RTaW1wbGVOYW1lICpsaHMgPSBjb21w
aWxhdGlvbl91bml0IC0+IGFzdF9wb29sIC0+IEdlblNpbXBsZU5hbWUobG9jKTsKICAgICAgICBW
YXJpYWJsZVN5bWJvbCAqdmFyaWFibGUgPSBiYXNlX3R5cGUgLT4gRmluZFRoaXMoayk7CiAgICAg
ICAgbGhzIC0+IHN5bWJvbCA9ICh2YXJpYWJsZSA/IHZhcmlhYmxlIDogYmFzZV90eXBlIC0+IElu
c2VydFRoaXMoaykpOwoKICAgICAgICBBc3RBc3NpZ25tZW50RXhwcmVzc2lvbiAqYXNzaWduID0g
Y29tcGlsYXRpb25fdW5pdCAtPiBhc3RfcG9vbAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IEdlbkFzc2lnbm1lbnRFeHByZXNzaW9u
KEFzdEFzc2lnbm1lbnRFeHByZXNzaW9uOjpTSU1QTEVfRVFVQUwsIGxvYyk7CiAgICAgICAgYXNz
aWduIC0+IGxlZnRfaGFuZF9zaWRlID0gbGhzOwogICAgICAgIGFzc2lnbiAtPiBleHByZXNzaW9u
ICAgICA9IHJoczsKICAgICAgICBhc3NpZ24gLT4gc3ltYm9sICAgICAgICAgPSBsaHMgLT4gVHlw
ZSgpOwoKICAgICAgICBBc3RFeHByZXNzaW9uU3RhdGVtZW50ICpzdG10ICA9IGNvbXBpbGF0aW9u
X3VuaXQgLT4gYXN0X3Bvb2wgLT4gR2VuRXhwcmVzc2lvblN0YXRlbWVudCgpOwogICAgICAgIHN0
bXQgLT4gZXhwcmVzc2lvbiAgICAgICAgICAgID0gYXNzaWduOwogICAgICAgIHN0bXQgLT4gc2Vt
aWNvbG9uX3Rva2VuX29wdCAgID0gbG9jOwogICAgICAgIHN0bXQgLT4gaXNfcmVhY2hhYmxlICAg
ICAgICAgID0gdHJ1ZTsKICAgICAgICBzdG10IC0+IGNhbl9jb21wbGV0ZV9ub3JtYWxseSA9IHRy
dWU7CgogICAgICAgIHRoaXNfYmxvY2sgLT4gQWRkU3RhdGVtZW50KHN0bXQpOwoKICAgICAgICBp
ZiAobGhzIC0+IFR5cGUoKSAtPiBJc1N1YmNsYXNzKGVudmlyb25tZW50X3R5cGUpKQogICAgICAg
ICAgICBicmVhazsKICAgIH0KCiAgICByZXR1cm4gYmFzZV90eXBlIC0+IEVuY2xvc2luZ0luc3Rh
bmNlKGspOwp9CgoKQXN0RXhwcmVzc2lvbiAqU2VtYW50aWM6OkNyZWF0ZUFjY2Vzc1RvVHlwZShB
c3QgKnNvdXJjZSwgVHlwZVN5bWJvbCAqZW52aXJvbm1lbnRfdHlwZSkKewogICAgVHlwZVN5bWJv
bCAqdGhpc190eXBlID0gVGhpc1R5cGUoKTsKCiAgICBMZXhTdHJlYW06OlRva2VuSW5kZXggdG9r
OwoKICAgIEFzdFNpbXBsZU5hbWUgKnNpbXBsZV9uYW1lID0gc291cmNlIC0+IFNpbXBsZU5hbWVD
YXN0KCk7CiAgICBBc3RGaWVsZEFjY2VzcyAqZmllbGRfYWNjZXNzID0gc291cmNlIC0+IEZpZWxk
QWNjZXNzQ2FzdCgpOwogICAgQXN0U3VwZXJDYWxsICpzdXBlcl9jYWxsID0gc291cmNlIC0+IFN1
cGVyQ2FsbENhc3QoKTsKICAgIEFzdFRoaXNDYWxsICp0aGlzX2NhbGwgPSBzb3VyY2UgLT4gVGhp
c0NhbGxDYXN0KCk7CiAgICBBc3RDbGFzc0luc3RhbmNlQ3JlYXRpb25FeHByZXNzaW9uICpjbGFz
c19jcmVhdGlvbiA9IHNvdXJjZSAtPiBDbGFzc0luc3RhbmNlQ3JlYXRpb25FeHByZXNzaW9uQ2Fz
dCgpOwoKICAgIGlmIChzaW1wbGVfbmFtZSkKICAgICAgICAgdG9rID0gc2ltcGxlX25hbWUgLT4g
aWRlbnRpZmllcl90b2tlbjsKICAgIGVsc2UgaWYgKGNsYXNzX2NyZWF0aW9uKQogICAgICAgICB0
b2sgPSBjbGFzc19jcmVhdGlvbiAtPiBuZXdfdG9rZW47CiAgICBlbHNlIGlmIChzdXBlcl9jYWxs
KQogICAgICAgICB0b2sgPSBzdXBlcl9jYWxsIC0+IHN1cGVyX3Rva2VuOwogICAgZWxzZSBpZiAo
dGhpc19jYWxsKQogICAgICAgICB0b2sgPSB0aGlzX2NhbGwgLT4gdGhpc190b2tlbjsKICAgIGVs
c2UgaWYgKGZpZWxkX2FjY2VzcykKICAgICAgICAgdG9rID0gZmllbGRfYWNjZXNzIC0+IGRvdF90
b2tlbjsKICAgIGVsc2UgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBmYWxzZSApID8gMCA6CShfX2Fz
c2VydF9mYWlsICgiZmFsc2UiICwgIi4uLy4uL2ppa2VzL3NyYy9leHByLmNwcCIsIDE0MDQsIF9f
UFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogICAgQXN0RXhwcmVzc2lvbiAqcmVzb2x1dGlv
bjsKCiAgICBpZiAoISB0aGlzX3R5cGUgLT4gQ2FuQWNjZXNzKGVudmlyb25tZW50X3R5cGUpKQog
ICAgewogICAgICAgIGlmIChFeHBsaWNpdENvbnN0cnVjdG9ySW52b2NhdGlvbigpKQogICAgICAg
ICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpFTkNMT1NJTkdfSU5TVEFOQ0VfQUND
RVNTX0ZST01fQ09OU1RSVUNUT1JfSU5WT0NBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGZpZWxkX2FjY2VzcyA/IGZpZWxkX2FjY2VzcyAtPiBiYXNlIC0+IExlZnRUb2tlbigpIDog
dG9rKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkX2FjY2VzcyA/IGZpZWxkX2Fj
Y2VzcyAtPiBiYXNlIC0+IFJpZ2h0VG9rZW4oKSA6IHRvayksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudmlyb25tZW50X3R5cGUgLT4gQ29udGFpbmluZ1BhY2thZ2UoKSAtPiBQYWNrYWdl
TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudF90eXBlIC0+IEV4
dGVybmFsTmFtZSgpKTsKICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBTZW1hbnRp
Y0Vudmlyb25tZW50ICplbnYgPSBzdGF0ZV9zdGFjay5Ub3AoKTsKICAgICAgICAgICAgZm9yICg7
IGVudjsgZW52ID0gZW52IC0+IHByZXZpb3VzKSAgCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIGlmIChlbnYgLT4gU3RhdGljUmVnaW9uKCkgfHwgZW52IC0+IFR5cGUoKSAtPiBBQ0NfU1RB
VElDKCkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgIGlmIChlbnYpCiAgICAgICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJv
cjo6RU5DTE9TSU5HX0lOU1RBTkNFX0FDQ0VTU19BQ1JPU1NfU1RBVElDX1JFR0lPTiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRfYWNjZXNzID8gZmllbGRfYWNjZXNzIC0+
IGJhc2UgLT4gTGVmdFRva2VuKCkgOiB0b2spLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChmaWVsZF9hY2Nlc3MgPyBmaWVsZF9hY2Nlc3MgLT4gYmFzZSAtPiBSaWdodFRva2VuKCkg
OiB0b2spLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50X3R5cGUg
LT4gQ29udGFpbmluZ1BhY2thZ2UoKSAtPiBQYWNrYWdlTmFtZSgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVudmlyb25tZW50X3R5cGUgLT4gRXh0ZXJuYWxOYW1lKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52IC0+IFR5cGUoKSAtPiBDb250YWluaW5nUGFj
a2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZW52IC0+IFR5cGUoKSAtPiBFeHRlcm5hbE5hbWUoKSk7CiAgICAgICAgICAgIGVsc2UgUmVwb3J0
U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6RU5DTE9TSU5HX0lOU1RBTkNFX05PVF9BQ0NFU1NJQkxF
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZF9hY2Nlc3MgPyBmaWVsZF9h
Y2Nlc3MgLT4gYmFzZSAtPiBMZWZ0VG9rZW4oKSA6IHRvayksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGZpZWxkX2FjY2VzcyA/IGZpZWxkX2FjY2VzcyAtPiBiYXNlIC0+IFJpZ2h0
VG9rZW4oKSA6IHRvayksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1l
bnRfdHlwZSAtPiBDb250YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRfdHlwZSAtPiBFeHRlcm5hbE5hbWUo
KSk7CiAgICAgICAgfQoKICAgICAgICByZXNvbHV0aW9uID0gY29tcGlsYXRpb25fdW5pdCAtPiBh
c3RfcG9vbCAtPiBHZW5TaW1wbGVOYW1lKHRvayk7CiAgICAgICAgcmVzb2x1dGlvbiAtPiBzeW1i
b2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICB9CiAgICBlbHNlIGlmIChFeHBsaWNpdENvbnN0cnVj
dG9ySW52b2NhdGlvbigpKQogICAgewogICAgICAgIFZhcmlhYmxlU3ltYm9sICp2YXJpYWJsZSA9
IExvY2FsU3ltYm9sVGFibGUoKS5GaW5kVmFyaWFibGVTeW1ib2woY29udHJvbC50aGlzMF9uYW1l
X3N5bWJvbCk7CgogICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggdmFyaWFibGUgKSA/IDAg
OgkoX19hc3NlcnRfZmFpbCAoInZhcmlhYmxlIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAi
LCAxNDQ3LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgICAgICByZXNvbHV0aW9u
ID0gY29tcGlsYXRpb25fdW5pdCAtPiBhc3RfcG9vbCAtPiBHZW5TaW1wbGVOYW1lKHRvayk7CiAg
ICAgICAgcmVzb2x1dGlvbiAtPiBzeW1ib2wgPSB2YXJpYWJsZTsKCiAgICAgICAgIAogICAgICAg
ICAKICAgICAgICAgCiAgICAgICAgaWYgKEV4cGxpY2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKCkg
LT4gU3VwZXJDYWxsQ2FzdCgpKQogICAgICAgIHsKICAgICAgICAgICAgVHlwZVN5bWJvbCAqY29u
dGFpbmluZ190eXBlID0gdGhpc190eXBlIC0+IENvbnRhaW5pbmdUeXBlKCk7CiAgICAgICAgICAg
IGlmICghIGNvbnRhaW5pbmdfdHlwZSAtPiBJc1N1YmNsYXNzKGVudmlyb25tZW50X3R5cGUpKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXJpYWJsZSA9IEZpbmRJbnN0YW5jZShjb250
YWluaW5nX3R5cGUsIGVudmlyb25tZW50X3R5cGUpOwoKICAgICAgICAgICAgICAgIEFzdEZpZWxk
QWNjZXNzICptZXRob2RfbmFtZSA9IGNvbXBpbGF0aW9uX3VuaXQgLT4gYXN0X3Bvb2wgLT4gR2Vu
RmllbGRBY2Nlc3MoKTsKICAgICAgICAgICAgICAgIG1ldGhvZF9uYW1lIC0+IGJhc2UgPSByZXNv
bHV0aW9uOyAgCiAgICAgICAgICAgICAgICBtZXRob2RfbmFtZSAtPiBkb3RfdG9rZW4gPSB0b2s7
CiAgICAgICAgICAgICAgICBtZXRob2RfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2VuID0gdG9rOwog
ICAgICAgICAgICAgICAgbWV0aG9kX25hbWUgLT4gc3ltYm9sID0gdmFyaWFibGU7CgogICAgICAg
ICAgICAgICAgQXN0TWV0aG9kSW52b2NhdGlvbiAqbWV0aG9kX2NhbGwgICAgICAgPSBjb21waWxh
dGlvbl91bml0IC0+IGFzdF9wb29sIC0+IEdlbk1ldGhvZEludm9jYXRpb24oKTsKICAgICAgICAg
ICAgICAgIG1ldGhvZF9jYWxsIC0+IG1ldGhvZCAgICAgICAgICAgICAgICAgID0gbWV0aG9kX25h
bWU7CiAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBsZWZ0X3BhcmVudGhlc2lzX3Rva2Vu
ICA9IHRvazsKICAgICAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IHJpZ2h0X3BhcmVudGhlc2lz
X3Rva2VuID0gdG9rOwoKICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggY29u
dGFpbmluZ190eXBlID09IHZhcmlhYmxlIC0+IG93bmVyIC0+IFR5cGVDYXN0KCkgKSA/IDAgOgko
X19hc3NlcnRfZmFpbCAoImNvbnRhaW5pbmdfdHlwZSA9PSB2YXJpYWJsZSAtPiBvd25lciAtPiBU
eXBlQ2FzdCgpIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCAxNDczLCBfX1BSRVRUWV9G
VU5DVElPTl9fICksIDApKSkgOwoKICAgICAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IHN5bWJv
bCA9IGNvbnRhaW5pbmdfdHlwZSAtPiBHZXRSZWFkQWNjZXNzTWV0aG9kKHZhcmlhYmxlKTsKICAg
ICAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IEFkZEFyZ3VtZW50KHJlc29sdXRpb24pOwoKICAg
ICAgICAgICAgICAgIHJlc29sdXRpb24gPSBtZXRob2RfY2FsbDsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHRoaXNfdHlwZSAtPiBJc1N1YmNsYXNzKGVudmlyb25t
ZW50X3R5cGUpKQogICAgewogICAgICAgIHJlc29sdXRpb24gPSBjb21waWxhdGlvbl91bml0IC0+
IGFzdF9wb29sIC0+IEdlblRoaXNFeHByZXNzaW9uKHRvayk7CiAgICAgICAgcmVzb2x1dGlvbiAt
PiBzeW1ib2wgPSB0aGlzX3R5cGU7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgcmVzb2x1
dGlvbiA9IGNvbXBpbGF0aW9uX3VuaXQgLT4gYXN0X3Bvb2wgLT4gR2VuU2ltcGxlTmFtZSh0b2sp
OwogICAgICAgIHJlc29sdXRpb24gLT4gc3ltYm9sID0gRmluZEluc3RhbmNlKHRoaXNfdHlwZSwg
ZW52aXJvbm1lbnRfdHlwZSk7CiAgICB9CgogICAgcmV0dXJuICgocmVzb2x1dGlvbiAtPiBzeW1i
b2wgPT0gY29udHJvbC5ub190eXBlKSB8fCAocmVzb2x1dGlvbiAtPiBUeXBlKCkgPT0gZW52aXJv
bm1lbnRfdHlwZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID8gcmVzb2x1dGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiBDb252ZXJ0VG9UeXBlKHJlc29sdXRpb24sIGVudmlyb25t
ZW50X3R5cGUpKTsKfQoKCnZvaWQgU2VtYW50aWM6OkNyZWF0ZUFjY2Vzc1RvU2NvcGVkVmFyaWFi
bGUoQXN0U2ltcGxlTmFtZSAqc2ltcGxlX25hbWUsIFR5cGVTeW1ib2wgKmVudmlyb25tZW50X3R5
cGUpCnsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggZW52aXJvbm1lbnRfdHlwZSAtPiBJc093
bmVyKFRoaXNUeXBlKCkpICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJlbnZpcm9ubWVudF90eXBl
IC0+IElzT3duZXIoVGhpc1R5cGUoKSkiICwgIi4uLy4uL2ppa2VzL3NyYy9leHByLmNwcCIsIDE1
MDEsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogICAgVmFyaWFibGVTeW1ib2wgKnZh
cmlhYmxlX3N5bWJvbCA9IChWYXJpYWJsZVN5bWJvbCAqKSBzaW1wbGVfbmFtZSAtPiBzeW1ib2w7
CgogICAgQXN0RXhwcmVzc2lvbiAqYWNjZXNzX2V4cHJlc3Npb247CiAgICBpZiAodmFyaWFibGVf
c3ltYm9sIC0+IEFDQ19TVEFUSUMoKSkKICAgIHsKICAgICAgICBhY2Nlc3NfZXhwcmVzc2lvbiA9
IGNvbXBpbGF0aW9uX3VuaXQgLT4gYXN0X3Bvb2wgLT4gR2VuU2ltcGxlTmFtZShzaW1wbGVfbmFt
ZSAtPiBpZGVudGlmaWVyX3Rva2VuKTsKICAgICAgICBhY2Nlc3NfZXhwcmVzc2lvbiAtPiBzeW1i
b2wgPSBlbnZpcm9ubWVudF90eXBlOwogICAgfQogICAgZWxzZSBhY2Nlc3NfZXhwcmVzc2lvbiA9
IENyZWF0ZUFjY2Vzc1RvVHlwZShzaW1wbGVfbmFtZSwgZW52aXJvbm1lbnRfdHlwZSk7CgogICAg
aWYgKGFjY2Vzc19leHByZXNzaW9uIC0+IHN5bWJvbCAhPSBjb250cm9sLm5vX3R5cGUpCiAgICB7
CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCB2YXJpYWJsZV9zeW1ib2wgLT4gb3duZXIg
LT4gVHlwZUNhc3QoKSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgidmFyaWFibGVfc3ltYm9sIC0+
IG93bmVyIC0+IFR5cGVDYXN0KCkiICwgIi4uLy4uL2ppa2VzL3NyYy9leHByLmNwcCIsIDE1MTUs
IF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogICAgICAgIGlmICh2YXJpYWJsZV9zeW1i
b2wgLT4gQUNDX1BSSVZBVEUoKSB8fAogICAgICAgICAgICAodmFyaWFibGVfc3ltYm9sIC0+IEFD
Q19QUk9URUNURUQoKSAmJgogICAgICAgICAgICAgdmFyaWFibGVfc3ltYm9sIC0+IG93bmVyIC0+
IFR5cGVDYXN0KCkgLT4gQ29udGFpbmluZ1BhY2thZ2UoKSAhPSBlbnZpcm9ubWVudF90eXBlIC0+
IENvbnRhaW5pbmdQYWNrYWdlKCkpKQogICAgICAgIHsKICAgICAgICAgICAgQXN0RmllbGRBY2Nl
c3MgKm1ldGhvZF9uYW1lICAgICA9IGNvbXBpbGF0aW9uX3VuaXQgLT4gYXN0X3Bvb2wgLT4gR2Vu
RmllbGRBY2Nlc3MoKTsKICAgICAgICAgICAgbWV0aG9kX25hbWUgLT4gYmFzZSAgICAgICAgICAg
ICA9IGFjY2Vzc19leHByZXNzaW9uOwogICAgICAgICAgICBtZXRob2RfbmFtZSAtPiBkb3RfdG9r
ZW4gICAgICAgID0gc2ltcGxlX25hbWUgLT4gaWRlbnRpZmllcl90b2tlbjsKICAgICAgICAgICAg
bWV0aG9kX25hbWUgLT4gaWRlbnRpZmllcl90b2tlbiA9IHNpbXBsZV9uYW1lIC0+IGlkZW50aWZp
ZXJfdG9rZW47CiAgICAgICAgICAgIG1ldGhvZF9uYW1lIC0+IHN5bWJvbCAgICAgICAgICAgPSB2
YXJpYWJsZV9zeW1ib2w7CgogICAgICAgICAgICBBc3RNZXRob2RJbnZvY2F0aW9uICptZXRob2Rf
Y2FsbCAgICAgICA9IGNvbXBpbGF0aW9uX3VuaXQgLT4gYXN0X3Bvb2wgLT4gR2VuTWV0aG9kSW52
b2NhdGlvbigpOwogICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBtZXRob2QgICAgICAgICAgICAg
ICAgICA9IG1ldGhvZF9uYW1lOwogICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBsZWZ0X3BhcmVu
dGhlc2lzX3Rva2VuICA9IHNpbXBsZV9uYW1lIC0+IGlkZW50aWZpZXJfdG9rZW47CiAgICAgICAg
ICAgIG1ldGhvZF9jYWxsIC0+IHJpZ2h0X3BhcmVudGhlc2lzX3Rva2VuID0gc2ltcGxlX25hbWUg
LT4gaWRlbnRpZmllcl90b2tlbjsKICAgICAgICAgICAgbWV0aG9kX2NhbGwgLT4gc3ltYm9sICAg
ICAgICAgICAgICAgICAgPSBlbnZpcm9ubWVudF90eXBlIC0+IEdldFJlYWRBY2Nlc3NNZXRob2Qo
dmFyaWFibGVfc3ltYm9sKTsKCiAgICAgICAgICAgIGlmICghIHZhcmlhYmxlX3N5bWJvbCAtPiBB
Q0NfU1RBVElDKCkpCiAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBBZGRBcmd1bWVudChh
Y2Nlc3NfZXhwcmVzc2lvbik7ICAKCiAgICAgICAgICAgIHNpbXBsZV9uYW1lIC0+IHJlc29sdXRp
b25fb3B0ID0gbWV0aG9kX2NhbGw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAg
ICAgICAgICAgIEFzdEZpZWxkQWNjZXNzICpmaWVsZF9hY2Nlc3MgICAgID0gY29tcGlsYXRpb25f
dW5pdCAtPiBhc3RfcG9vbCAtPiBHZW5GaWVsZEFjY2VzcygpOwogICAgICAgICAgICBmaWVsZF9h
Y2Nlc3MgLT4gYmFzZSAgICAgICAgICAgICA9IGFjY2Vzc19leHByZXNzaW9uOwogICAgICAgICAg
ICBmaWVsZF9hY2Nlc3MgLT4gZG90X3Rva2VuICAgICAgICA9IHNpbXBsZV9uYW1lIC0+IGlkZW50
aWZpZXJfdG9rZW47CiAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBpZGVudGlmaWVyX3Rva2Vu
ID0gc2ltcGxlX25hbWUgLT4gaWRlbnRpZmllcl90b2tlbjsKICAgICAgICAgICAgZmllbGRfYWNj
ZXNzIC0+IHN5bWJvbCAgICAgICAgICAgPSB2YXJpYWJsZV9zeW1ib2w7CgogICAgICAgICAgICBz
aW1wbGVfbmFtZSAtPiByZXNvbHV0aW9uX29wdCA9IGZpZWxkX2FjY2VzczsKICAgICAgICB9CiAg
ICB9CgogICAgcmV0dXJuOwp9CgoKdm9pZCBTZW1hbnRpYzo6Q3JlYXRlQWNjZXNzVG9TY29wZWRN
ZXRob2QoQXN0TWV0aG9kSW52b2NhdGlvbiAqbWV0aG9kX2NhbGwsIFR5cGVTeW1ib2wgKmVudmly
b25tZW50X3R5cGUpCnsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggZW52aXJvbm1lbnRfdHlw
ZSAtPiBJc093bmVyKFRoaXNUeXBlKCkpICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJlbnZpcm9u
bWVudF90eXBlIC0+IElzT3duZXIoVGhpc1R5cGUoKSkiICwgIi4uLy4uL2ppa2VzL3NyYy9leHBy
LmNwcCIsIDE1NTYsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogICAgTWV0aG9kU3lt
Ym9sICptZXRob2QgPSAoTWV0aG9kU3ltYm9sICopIG1ldGhvZF9jYWxsIC0+IHN5bWJvbDsKICAg
IEFzdFNpbXBsZU5hbWUgKnNpbXBsZV9uYW1lID0gKEFzdFNpbXBsZU5hbWUgKikgbWV0aG9kX2Nh
bGwgLT4gbWV0aG9kOwoKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggc2ltcGxlX25hbWUgLT4g
U2ltcGxlTmFtZUNhc3QoKSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgic2ltcGxlX25hbWUgLT4g
U2ltcGxlTmFtZUNhc3QoKSIgLCAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiwgMTU2MSwgX19Q
UkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICBBc3RFeHByZXNzaW9uICphY2Nlc3NfZXhw
cmVzc2lvbjsKICAgIGlmIChtZXRob2QgLT4gQUNDX1NUQVRJQygpKQogICAgewogICAgICAgIGFj
Y2Vzc19leHByZXNzaW9uID0gY29tcGlsYXRpb25fdW5pdCAtPiBhc3RfcG9vbCAtPiBHZW5TaW1w
bGVOYW1lKHNpbXBsZV9uYW1lIC0+IGlkZW50aWZpZXJfdG9rZW4pOwogICAgICAgIGFjY2Vzc19l
eHByZXNzaW9uIC0+IHN5bWJvbCA9IGVudmlyb25tZW50X3R5cGU7CiAgICB9CiAgICBlbHNlIGFj
Y2Vzc19leHByZXNzaW9uID0gQ3JlYXRlQWNjZXNzVG9UeXBlKHNpbXBsZV9uYW1lLCBlbnZpcm9u
bWVudF90eXBlKTsKCiAgICBpZiAoYWNjZXNzX2V4cHJlc3Npb24gLT4gc3ltYm9sICE9IGNvbnRy
b2wubm9fdHlwZSkKICAgIHsKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAg
CiAgICAgICAgIAogICAgICAgIHNpbXBsZV9uYW1lIC0+IHJlc29sdXRpb25fb3B0ID0gYWNjZXNz
X2V4cHJlc3Npb247CiAgICAgICAgaWYgKG1ldGhvZCAtPiBBQ0NfUFJJVkFURSgpIHx8CiAgICAg
ICAgICAgIChtZXRob2QgLT4gQUNDX1BST1RFQ1RFRCgpICYmCiAgICAgICAgICAgICBtZXRob2Qg
LT4gY29udGFpbmluZ190eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgIT0gZW52aXJvbm1lbnRf
dHlwZSAtPiBDb250YWluaW5nUGFja2FnZSgpKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmICht
ZXRob2QgLT4gQUNDX1NUQVRJQygpKQogICAgICAgICAgICAgICAgbWV0aG9kX2NhbGwgLT4gc3lt
Ym9sID0gZW52aXJvbm1lbnRfdHlwZSAtPiBHZXRSZWFkQWNjZXNzTWV0aG9kKG1ldGhvZCk7CiAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQXN0TWV0aG9kSW52
b2NhdGlvbiAqb2xkX21ldGhvZF9jYWxsID0gbWV0aG9kX2NhbGw7CgogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgQXN0
TWV0aG9kSW52b2NhdGlvbiAqbWV0aG9kX2NhbGwgICAgICAgPSBjb21waWxhdGlvbl91bml0IC0+
IGFzdF9wb29sIC0+IEdlbk1ldGhvZEludm9jYXRpb24oKTsKICAgICAgICAgICAgICAgIG1ldGhv
ZF9jYWxsIC0+IG1ldGhvZCAgICAgICAgICAgICAgICAgID0gb2xkX21ldGhvZF9jYWxsIC0+IG1l
dGhvZDsKICAgICAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IGxlZnRfcGFyZW50aGVzaXNfdG9r
ZW4gID0gb2xkX21ldGhvZF9jYWxsIC0+IGxlZnRfcGFyZW50aGVzaXNfdG9rZW47CiAgICAgICAg
ICAgICAgICBtZXRob2RfY2FsbCAtPiByaWdodF9wYXJlbnRoZXNpc190b2tlbiA9IG9sZF9tZXRo
b2RfY2FsbCAtPiByaWdodF9wYXJlbnRoZXNpc190b2tlbjsKICAgICAgICAgICAgICAgIG1ldGhv
ZF9jYWxsIC0+IHN5bWJvbCAgICAgICAgICAgICAgICAgID0gZW52aXJvbm1lbnRfdHlwZSAtPiBH
ZXRSZWFkQWNjZXNzTWV0aG9kKG1ldGhvZCk7CiAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAt
PiBBZGRBcmd1bWVudChhY2Nlc3NfZXhwcmVzc2lvbik7CiAgICAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG9sZF9tZXRob2RfY2FsbCAtPiBOdW1Bcmd1bWVudHMoKTsgaSsrKQogICAg
ICAgICAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IEFkZEFyZ3VtZW50KG9sZF9tZXRob2RfY2Fs
bCAtPiBBcmd1bWVudChpKSk7CgogICAgICAgICAgICAgICAgb2xkX21ldGhvZF9jYWxsIC0+IHN5
bWJvbCA9IG1ldGhvZDsKICAgICAgICAgICAgICAgIG9sZF9tZXRob2RfY2FsbCAtPiByZXNvbHV0
aW9uX29wdCA9IG1ldGhvZF9jYWxsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAg
IHJldHVybjsKfQoKCnZvaWQgU2VtYW50aWM6OkNoZWNrU2ltcGxlTmFtZShBc3RTaW1wbGVOYW1l
ICpzaW1wbGVfbmFtZSwgU2VtYW50aWNFbnZpcm9ubWVudCAqd2hlcmVfZm91bmQpCnsKICAgIFZh
cmlhYmxlU3ltYm9sICp2YXJpYWJsZV9zeW1ib2wgPSBzaW1wbGVfbmFtZSAtPiBzeW1ib2wgLT4g
VmFyaWFibGVDYXN0KCk7CgogICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCB2YXJpYWJsZV9zeW1i
b2wgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInZhcmlhYmxlX3N5bWJvbCIgLCAiLi4vLi4vamlr
ZXMvc3JjL2V4cHIuY3BwIiwgMTYxNSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAg
ICBpZiAoU3RhdGljUmVnaW9uKCkpCiAgICB7CiAgICAgICAgaWYgKCEgKHZhcmlhYmxlX3N5bWJv
bCAtPiBJc0xvY2FsKCkgfHwgdmFyaWFibGVfc3ltYm9sIC0+IEFDQ19TVEFUSUMoKSkpCiAgICAg
ICAgewogICAgICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpOQU1FX05PVF9D
TEFTU19WQVJJQUJMRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlX25hbWUgLT4g
aWRlbnRpZmllcl90b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlX25hbWUg
LT4gaWRlbnRpZmllcl90b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV4X3N0cmVh
bSAtPiBOYW1lU3RyaW5nKHNpbXBsZV9uYW1lIC0+IGlkZW50aWZpZXJfdG9rZW4pKTsKICAgICAg
ICB9CiAgICAgICAgZWxzZSBpZiAoISB2YXJpYWJsZV9zeW1ib2wgLT4gSXNEZWNsYXJhdGlvbkNv
bXBsZXRlKCkpCiAgICAgICAgewogICAgICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vy
cm9yOjpOQU1FX05PVF9ZRVRfQVZBSUxBQkxFLAogICAgICAgICAgICAgICAgICAgICAgICAgICBz
aW1wbGVfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaW1wbGVfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBsZXhfc3RyZWFtIC0+IE5hbWVTdHJpbmcoc2ltcGxlX25hbWUgLT4gaWRlbnRpZmllcl90
b2tlbikpOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKCEgdmFyaWFibGVfc3ltYm9sIC0+
IEFDQ19TVEFUSUMoKSkgIAogICAgewogICAgICAgIFR5cGVTeW1ib2wgKmNvbnRhaW5pbmdfdHlw
ZSA9IHZhcmlhYmxlX3N5bWJvbCAtPiBvd25lciAtPiBUeXBlQ2FzdCgpOyAgCgogICAgICAgIGlm
IChjb250YWluaW5nX3R5cGUpICAKICAgICAgICB7CiAgICAgICAgICAgIGlmIChjb250YWluaW5n
X3R5cGUgPT0gVGhpc1R5cGUoKSAmJiAoISB2YXJpYWJsZV9zeW1ib2wgLT4gSXNEZWNsYXJhdGlv
bkNvbXBsZXRlKCkpKSAgCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVy
cm9yKFNlbWFudGljRXJyb3I6Ok5BTUVfTk9UX1lFVF9BVkFJTEFCTEUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaW1wbGVfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2VuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlX25hbWUgLT4gaWRlbnRpZmllcl90b2tlbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxleF9zdHJlYW0gLT4gTmFtZVN0cmluZyhz
aW1wbGVfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2VuKSk7CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgZWxzZSBpZiAoRXhwbGljaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oKSAmJiB3aGVyZV9mb3Vu
ZCA9PSBzdGF0ZV9zdGFjay5Ub3AoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJv
cjo6SU5TVEFOQ0VfVkFSSUFCTEVfSU5fRVhQTElDSVRfQ09OU1RSVUNUT1JfSU5WT0NBVElPTiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZV9uYW1lIC0+IGlkZW50aWZpZXJf
dG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVfbmFtZSAtPiBpZGVu
dGlmaWVyX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV4X3N0cmVhbSAt
PiBOYW1lU3RyaW5nKHNpbXBsZV9uYW1lIC0+IGlkZW50aWZpZXJfdG9rZW4pLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ190eXBlIC0+IE5hbWUoKSk7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9CgoKdm9pZCBTZW1hbnRpYzo6UHJv
Y2Vzc1NpbXBsZU5hbWUoQXN0ICpleHByKQp7CiAgICBUeXBlU3ltYm9sICp0aGlzX3R5cGUgPSBU
aGlzVHlwZSgpOwoKICAgIEFzdFNpbXBsZU5hbWUgKnNpbXBsZV9uYW1lID0gKEFzdFNpbXBsZU5h
bWUgKikgZXhwcjsKICAgIFNlbWFudGljRW52aXJvbm1lbnQgKndoZXJlX2ZvdW5kOwogICAgVmFy
aWFibGVTeW1ib2wgKnZhcmlhYmxlX3N5bWJvbCA9IEZpbmRWYXJpYWJsZUluRW52aXJvbm1lbnQo
d2hlcmVfZm91bmQsIHN0YXRlX3N0YWNrLlRvcCgpLCBzaW1wbGVfbmFtZSAtPiBpZGVudGlmaWVy
X3Rva2VuKTsKICAgIGlmICh2YXJpYWJsZV9zeW1ib2wpCiAgICB7CiAgICAgICAgc2ltcGxlX25h
bWUgLT4gc3ltYm9sID0gdmFyaWFibGVfc3ltYm9sOwoKICAgICAgICAoc3RhdGljX2Nhc3Q8dm9p
ZD4gICgoIHZhcmlhYmxlX3N5bWJvbCAtPiBJc1R5cGVkKCkgKSA/IDAgOgkoX19hc3NlcnRfZmFp
bCAoInZhcmlhYmxlX3N5bWJvbCAtPiBJc1R5cGVkKCkiICwgIi4uLy4uL2ppa2VzL3NyYy9leHBy
LmNwcCIsIDE2NzgsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogICAgICAgICAKICAg
ICAgICAgCiAgICAgICAgIAogICAgICAgIGlmICh2YXJpYWJsZV9zeW1ib2wgLT4gQUNDX0ZJTkFM
KCkpCiAgICAgICAgewogICAgICAgICAgICBpZiAodmFyaWFibGVfc3ltYm9sIC0+IElzRGVjbGFy
YXRpb25Db21wbGV0ZSgpKQogICAgICAgICAgICAgICAgc2ltcGxlX25hbWUgLT4gdmFsdWUgPSB2
YXJpYWJsZV9zeW1ib2wgLT4gaW5pdGlhbF92YWx1ZTsKICAgICAgICAgICAgZWxzZSBpZiAodmFy
aWFibGVfc3ltYm9sIC0+IGRlY2xhcmF0b3IpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IEFzdFZhcmlhYmxlRGVjbGFyYXRvciAqZGVjbGFyYXRvciA9IHZhcmlhYmxlX3N5bWJvbCAtPiBk
ZWNsYXJhdG9yIC0+IFZhcmlhYmxlRGVjbGFyYXRvckNhc3QoKTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgIGlmIChkZWNsYXJhdG9yICYmCiAgICAgICAgICAgICAgICAgICAgKCEgZGVj
bGFyYXRvciAtPiBwZW5kaW5nKSAmJgogICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0b3IgLT4g
dmFyaWFibGVfaW5pdGlhbGl6ZXJfb3B0ICYmCiAgICAgICAgICAgICAgICAgICAgKCEgZGVjbGFy
YXRvciAtPiB2YXJpYWJsZV9pbml0aWFsaXplcl9vcHQgLT4gQXJyYXlJbml0aWFsaXplckNhc3Qo
KSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZVN5bWJvbCAqdHlw
ZSA9IChUeXBlU3ltYm9sICopIHZhcmlhYmxlX3N5bWJvbCAtPiBvd25lcjsKICAgICAgICAgICAg
ICAgICAgICBTZW1hbnRpYyAqc2VtID0gdHlwZSAtPiBzZW1hbnRpY19lbnZpcm9ubWVudCAtPiBz
ZW07CiAgICAgICAgICAgICAgICAgICAgc2ltcGxlX25hbWUgLT4gdmFsdWUgPSBzZW0gLT4gQ29t
cHV0ZUZpbmFsVmFsdWUoZGVjbGFyYXRvcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0KICAgICAgICB9CgogICAgICAgIENoZWNrU2ltcGxlTmFtZShzaW1wbGVfbmFtZSwgd2hlcmVf
Zm91bmQpOwoKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAg
IAogICAgICAgIGlmICh3aGVyZV9mb3VuZCAhPSBzdGF0ZV9zdGFjay5Ub3AoKSkKICAgICAgICAg
ICAgQ3JlYXRlQWNjZXNzVG9TY29wZWRWYXJpYWJsZShzaW1wbGVfbmFtZSwgd2hlcmVfZm91bmQg
LT4gVHlwZSgpKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICAgCiAgICAgICAgIAogICAg
ICAgICAKICAgICAgICAgCiAgICAgICAgTmFtZVN5bWJvbCAqbmFtZV9zeW1ib2wgPSBsZXhfc3Ry
ZWFtIC0+IE5hbWVTeW1ib2woc2ltcGxlX25hbWUgLT4gaWRlbnRpZmllcl90b2tlbik7CgogICAg
ICAgIE1ldGhvZFNoYWRvd1N5bWJvbCAqbWV0aG9kX3NoYWRvdzsKICAgICAgICBNZXRob2RTeW1i
b2wgKm1ldGhvZDsKCiAgICAgICAgZm9yIChtZXRob2Rfc2hhZG93ID0gdGhpc190eXBlIC0+IGV4
cGFuZGVkX21ldGhvZF90YWJsZSAtPiBGaW5kTWV0aG9kU2hhZG93U3ltYm9sKG5hbWVfc3ltYm9s
KTsKICAgICAgICAgICAgIG1ldGhvZF9zaGFkb3c7IG1ldGhvZF9zaGFkb3cgPSBtZXRob2Rfc2hh
ZG93IC0+IG5leHRfbWV0aG9kKQogICAgICAgIHsKICAgICAgICAgICAgbWV0aG9kID0gbWV0aG9k
X3NoYWRvdyAtPiBtZXRob2Rfc3ltYm9sOwoKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAg
ICAgICAgICAgICAKICAgICAgICAgICAgaWYgKCEgbWV0aG9kIC0+IElzVHlwZWQoKSkKICAgICAg
ICAgICAgICAgIG1ldGhvZCAtPiBQcm9jZXNzTWV0aG9kU2lnbmF0dXJlKChTZW1hbnRpYyAqKSB0
aGlzLCBzaW1wbGVfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2VuKTsKCiAgICAgICAgICAgIGlmICht
ZXRob2QgLT4gTnVtRm9ybWFsUGFyYW1ldGVycygpID09IDApCiAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICB9CgogICAgICAgIGlmIChtZXRob2Rfc2hhZG93KQogICAgICAgIHsKICAgICAg
ICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6Ok1FVEhPRF9OT1RfRklFTEQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2Vu
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlX25hbWUgLT4gaWRlbnRpZmllcl90
b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxleF9zdHJlYW0gLT4gTmFtZVN0cmlu
ZyhzaW1wbGVfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2VuKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1ldGhvZCAtPiBjb250YWluaW5nX3R5cGUgLT4gQ29udGFpbmluZ1BhY2thZ2UoKSAt
PiBQYWNrYWdlTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kIC0+IGNv
bnRhaW5pbmdfdHlwZSAtPiBFeHRlcm5hbE5hbWUoKSk7CiAgICAgICAgfQogICAgICAgIGVsc2Ug
aWYgKEZpbmRUeXBlKHNpbXBsZV9uYW1lIC0+IGlkZW50aWZpZXJfdG9rZW4pKQogICAgICAgIHsK
ICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OlRZUEVfTk9UX0ZJRUxE
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlX25hbWUgLT4gaWRlbnRpZmllcl90
b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZV9uYW1lIC0+IGlkZW50aWZp
ZXJfdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXhfc3RyZWFtIC0+IE5hbWVT
dHJpbmcoc2ltcGxlX25hbWUgLT4gaWRlbnRpZmllcl90b2tlbikpOwogICAgICAgIH0KICAgICAg
ICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBWYXJpYWJsZVN5bWJvbCAqdmFyaWFibGUgPSBG
aW5kTWlzc3BlbGxlZFZhcmlhYmxlTmFtZSh0aGlzX3R5cGUsIHNpbXBsZV9uYW1lIC0+IGlkZW50
aWZpZXJfdG9rZW4pOwogICAgICAgICAgICBpZiAodmFyaWFibGUpCiAgICAgICAgICAgICAgICAg
UmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6RklFTERfTkFNRV9NSVNTUEVMTEVELAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZV9uYW1lIC0+IGlkZW50aWZpZXJfdG9r
ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlX25hbWUgLT4gaWRlbnRp
Zmllcl90b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3N5bWJvbCAt
PiBOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc190eXBlIC0+IENv
bnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzX3R5cGUgLT4gRXh0ZXJuYWxOYW1lKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFibGUgLT4gTmFtZSgpKTsKICAgICAgICAgICAgZWxzZSBSZXBv
cnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpOQU1FX05PVF9GT1VORCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaW1wbGVfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2VuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZV9uYW1lIC0+IGlkZW50aWZpZXJfdG9rZW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV4X3N0cmVhbSAtPiBOYW1lU3RyaW5n
KHNpbXBsZV9uYW1lIC0+IGlkZW50aWZpZXJfdG9rZW4pKTsKICAgICAgICB9CiAgICAgICAgc2lt
cGxlX25hbWUgLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAgfQoKICAgIHJldHVybjsK
fQoKCnZvaWQgU2VtYW50aWM6OlR5cGVBY2Nlc3NDaGVjayhBc3QgKmFzdCwgVHlwZVN5bWJvbCAq
dHlwZSkKewogICAgIAogICAgIAogICAgIAogICAgIAogICAgaWYgKHN0YXRlX3N0YWNrLlNpemUo
KSA+IDApCiAgICB7CiAgICAgICAgVHlwZVN5bWJvbCAqdGhpc190eXBlID0gVGhpc1R5cGUoKTsK
CiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAg
ICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgaWYgKHRoaXNfdHlwZSAt
PiBvdXRlcm1vc3RfdHlwZSAhPSB0eXBlIC0+IG91dGVybW9zdF90eXBlKQogICAgICAgIHsKICAg
ICAgICAgICAgaWYgKHR5cGUgLT4gQUNDX1BSSVZBVEUoKSkKICAgICAgICAgICAgICAgICBSZXBv
cnRUeXBlSW5hY2Nlc3NpYmxlKGFzdCwgdHlwZSk7CiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUg
LT4gQUNDX1BST1RFQ1RFRCgpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoISAodHlwZSAtPiBDb250YWluaW5nUGFja2Fn
ZSgpID09IHRoaXNfcGFja2FnZSB8fCB0aGlzX3R5cGUgLT4gSGFzUHJvdGVjdGVkQWNjZXNzVG8o
dHlwZSkpKQogICAgICAgICAgICAgICAgICAgIFJlcG9ydFR5cGVJbmFjY2Vzc2libGUoYXN0LCB0
eXBlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICghICh0eXBlIC0+IEFDQ19Q
VUJMSUMoKSB8fCB0eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgPT0gdGhpc19wYWNrYWdlKSkK
ICAgICAgICAgICAgICAgICBSZXBvcnRUeXBlSW5hY2Nlc3NpYmxlKGFzdCwgdHlwZSk7CiAgICAg
ICAgfQogICAgfQoKICAgIHJldHVybjsKfQoKCnZvaWQgU2VtYW50aWM6OlR5cGVOZXN0QWNjZXNz
Q2hlY2soQXN0RXhwcmVzc2lvbiAqbmFtZSkKewogICAgQXN0U2ltcGxlTmFtZSAqc2ltcGxlX25h
bWUgPSBuYW1lIC0+IFNpbXBsZU5hbWVDYXN0KCk7CiAgICBBc3RGaWVsZEFjY2VzcyAqZmllbGRf
YWNjZXNzID0gbmFtZSAtPiBGaWVsZEFjY2Vzc0Nhc3QoKTsKCiAgICAoc3RhdGljX2Nhc3Q8dm9p
ZD4gICgoIHNpbXBsZV9uYW1lIHx8IGZpZWxkX2FjY2VzcyApID8gMCA6CShfX2Fzc2VydF9mYWls
ICgic2ltcGxlX25hbWUgfHwgZmllbGRfYWNjZXNzIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5j
cHAiLCAxODI4LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgIGlmIChmaWVsZF9h
Y2Nlc3MpCiAgICAgICAgVHlwZU5lc3RBY2Nlc3NDaGVjayhmaWVsZF9hY2Nlc3MgLT4gYmFzZSk7
CgogICAgVHlwZVN5bWJvbCAqdHlwZSA9IChzaW1wbGVfbmFtZSA/IHNpbXBsZV9uYW1lIC0+IFR5
cGUoKSA6IGZpZWxkX2FjY2VzcyAtPiBUeXBlKCkpOwogICAgaWYgKHR5cGUpCiAgICAgICAgVHlw
ZUFjY2Vzc0NoZWNrKG5hbWUsIHR5cGUpOwoKICAgIHJldHVybjsKfQoKCnZvaWQgU2VtYW50aWM6
OkNvbnN0cnVjdG9yQWNjZXNzQ2hlY2soQXN0Q2xhc3NJbnN0YW5jZUNyZWF0aW9uRXhwcmVzc2lv
biAqY2xhc3NfY3JlYXRpb24sIE1ldGhvZFN5bWJvbCAqY29uc3RydWN0b3IpCnsKICAgIFR5cGVT
eW1ib2wgKnRoaXNfdHlwZSA9IFRoaXNUeXBlKCk7CiAgICBUeXBlU3ltYm9sICpjb250YWluaW5n
X3R5cGUgPSBjb25zdHJ1Y3RvciAtPiBjb250YWluaW5nX3R5cGU7CgogICAgaWYgKHRoaXNfdHlw
ZSAtPiBvdXRlcm1vc3RfdHlwZSAhPSBjb250YWluaW5nX3R5cGUgLT4gb3V0ZXJtb3N0X3R5cGUp
CiAgICB7CiAgICAgICAgaWYgKGNvbnN0cnVjdG9yIC0+IEFDQ19QUklWQVRFKCkpCiAgICAgICAg
ewogICAgICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpQUklWQVRFX0NPTlNU
UlVDVE9SX05PVF9BQ0NFU1NJQkxFLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19j
cmVhdGlvbiAtPiBjbGFzc190eXBlIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbGFzc19jcmVhdGlvbiAtPiByaWdodF9wYXJlbnRoZXNpc190b2tlbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgLT4gSGVhZGVyKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdfdHlwZSAtPiBDb250YWluaW5nUGFja2FnZSgpIC0+
IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdfdHlw
ZSAtPiBFeHRlcm5hbE5hbWUoKSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCEgY2xhc3Nf
Y3JlYXRpb24gLT4gc3ltYm9sIC0+IFR5cGVDYXN0KCkgLT4gQW5vbnltb3VzKCkpCiAgICAgICAg
ewogICAgICAgICAgICBpZiAoY29uc3RydWN0b3IgLT4gQUNDX1BST1RFQ1RFRCgpKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICBpZihjb250YWluaW5nX3R5cGUtPkNvbnRhaW5pbmdQYWNr
YWdlKCkgIT0gdGhpc19wYWNrYWdlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OlBST1RFQ1RFRF9DT05TVFJVQ1RPUl9O
T1RfQUNDRVNTSUJMRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19j
cmVhdGlvbiAtPiBjbGFzc190eXBlIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsYXNzX2NyZWF0aW9uIC0+IHJpZ2h0X3BhcmVudGhlc2lzX3Rva2Vu
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yIC0+IEhlYWRl
cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdfdHlwZSAt
PiBDb250YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGFpbmluZ190eXBlIC0+IEV4dGVybmFsTmFtZSgpKTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICghIChjb25z
dHJ1Y3RvciAtPiBBQ0NfUFVCTElDKCkgfHwgY29udGFpbmluZ190eXBlIC0+IENvbnRhaW5pbmdQ
YWNrYWdlKCkgPT0gdGhpc19wYWNrYWdlKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
UmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6REVGQVVMVF9DT05TVFJVQ1RPUl9OT1RfQUND
RVNTSUJMRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX2NyZWF0aW9uIC0+
IGNsYXNzX3R5cGUgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGFzc19jcmVhdGlvbiAtPiByaWdodF9wYXJlbnRoZXNpc190b2tlbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yIC0+IEhlYWRlcigpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGFpbmluZ190eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkg
LT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5p
bmdfdHlwZSAtPiBFeHRlcm5hbE5hbWUoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9
CgogICAgcmV0dXJuOwp9CgoKdm9pZCBTZW1hbnRpYzo6TWVtYmVyQWNjZXNzQ2hlY2soQXN0Rmll
bGRBY2Nlc3MgKmZpZWxkX2FjY2VzcywgVHlwZVN5bWJvbCAqYmFzZV90eXBlLCBTeW1ib2wgKnN5
bWJvbCkKewogICAgVHlwZVN5bWJvbCAqdGhpc190eXBlID0gVGhpc1R5cGUoKTsKCiAgICBWYXJp
YWJsZVN5bWJvbCAqdmFyaWFibGVfc3ltYm9sID0gc3ltYm9sIC0+IFZhcmlhYmxlQ2FzdCgpOwog
ICAgTWV0aG9kU3ltYm9sICptZXRob2Rfc3ltYm9sID0gc3ltYm9sIC0+IE1ldGhvZENhc3QoKTsK
CiAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIHZhcmlhYmxlX3N5bWJvbCB8fCBtZXRob2Rfc3lt
Ym9sICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJ2YXJpYWJsZV9zeW1ib2wgfHwgbWV0aG9kX3N5
bWJvbCIgLCAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiwgMTg5NCwgX19QUkVUVFlfRlVOQ1RJ
T05fXyApLCAwKSkpIDsKCiAgICBBY2Nlc3NGbGFncyAqZmxhZ3MgPSAodmFyaWFibGVfc3ltYm9s
ID8gKEFjY2Vzc0ZsYWdzICopIHZhcmlhYmxlX3N5bWJvbCA6IChBY2Nlc3NGbGFncyAqKSBtZXRo
b2Rfc3ltYm9sKTsKICAgIFR5cGVTeW1ib2wgKmNvbnRhaW5pbmdfdHlwZSA9ICh2YXJpYWJsZV9z
eW1ib2wgPyB2YXJpYWJsZV9zeW1ib2wgLT4gb3duZXIgLT4gVHlwZUNhc3QoKSA6IG1ldGhvZF9z
eW1ib2wgLT4gY29udGFpbmluZ190eXBlKTsKCiAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIGNv
bnRhaW5pbmdfdHlwZSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiY29udGFpbmluZ190eXBlIiAs
ICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCAxODk5LCBfX1BSRVRUWV9GVU5DVElPTl9fICks
IDApKSkgOwoKICAgIEFzdEV4cHJlc3Npb24gKmJhc2UgPSBmaWVsZF9hY2Nlc3MgLT4gYmFzZTsK
CiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAg
ICAgCiAgICAgCgogICAgaWYgKHRoaXNfdHlwZSAtPiBvdXRlcm1vc3RfdHlwZSAhPSBjb250YWlu
aW5nX3R5cGUgLT4gb3V0ZXJtb3N0X3R5cGUpCiAgICB7CiAgICAgICAgaWYgKGZsYWdzIC0+IEFD
Q19QUklWQVRFKCkpCiAgICAgICAgewogICAgICAgICAgICBSZXBvcnRTZW1FcnJvcigodmFyaWFi
bGVfc3ltYm9sID8gU2VtYW50aWNFcnJvcjo6UFJJVkFURV9GSUVMRF9OT1RfQUNDRVNTSUJMRQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU2VtYW50aWNFcnJv
cjo6UFJJVkFURV9NRVRIT0RfTk9UX0FDQ0VTU0lCTEUpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmllbGRfYWNjZXNzIC0+IGlkZW50aWZpZXJfdG9rZW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxleF9zdHJlYW0gLT4gTmFtZVN0cmluZyhmaWVsZF9hY2Nlc3MgLT4gaWRl
bnRpZmllcl90b2tlbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdfdHlw
ZSAtPiBDb250YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRhaW5pbmdfdHlwZSAtPiBFeHRlcm5hbE5hbWUoKSk7CiAgICAgICAg
fQogICAgICAgIGVsc2UgaWYgKGZsYWdzIC0+IEFDQ19QUk9URUNURUQoKSkKICAgICAgICB7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChmbGFncyAtPiBBQ0NfU1RB
VElDKCkgJiYKICAgICAgICAgICAgICAgIHRoaXNfcGFja2FnZSAhPSBjb250YWluaW5nX3R5cGUg
LT4gQ29udGFpbmluZ1BhY2thZ2UoKSAmJgogICAgICAgICAgICAgICAgdGhpc190eXBlIC0+IElz
U3ViY2xhc3MoY29udGFpbmluZ190eXBlKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgQXN0
RXhwcmVzc2lvbiAqZXhwciA9IGJhc2U7CiAgICAgICAgICAgICAgICB3aGlsZShleHByIC0+IFBh
cmVudGhlc2l6ZWRFeHByZXNzaW9uQ2FzdCgpKQogICAgICAgICAgICAgICAgICAgIGV4cHIgPSBl
eHByIC0+IFBhcmVudGhlc2l6ZWRFeHByZXNzaW9uQ2FzdCgpIC0+IGV4cHJlc3Npb247CgogICAg
ICAgICAgICAgICAgaWYgKCEgKGV4cHIgLT4gVGhpc0V4cHJlc3Npb25DYXN0KCkgfHwgZXhwciAt
PiBTdXBlckV4cHJlc3Npb25DYXN0KCkpKQogICAgICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVy
cm9yKCh2YXJpYWJsZV9zeW1ib2wgPyBTZW1hbnRpY0Vycm9yOjpTVEFUSUNfUFJPVEVDVEVEX0ZJ
RUxEX0FDQ0VTUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBTZW1hbnRpY0Vycm9yOjpTVEFUSUNfUFJPVEVDVEVEX01FVEhPRF9BQ0NFU1MpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBMZWZ0VG9r
ZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4g
UmlnaHRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxleF9zdHJl
YW0gLT4gTmFtZVN0cmluZyhmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbiksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ190eXBlIC0+IENvbnRhaW5p
bmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250YWluaW5nX3R5cGUgLT4gRXh0ZXJuYWxOYW1lKCkpOwogICAgICAgICAgICB9
IGVsc2UKCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAKICAgICAgICAgICAgaWYgKCEgKGJhc2UgLT4gSXNTdXBlckV4cHJlc3Npb24oKSB8fAog
ICAgICAgICAgICAgICAgICAgY29udGFpbmluZ190eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkg
PT0gdGhpc19wYWNrYWdlIHx8CiAgICAgICAgICAgICAgICAgICAodGhpc190eXBlIC0+IEhhc1By
b3RlY3RlZEFjY2Vzc1RvKGNvbnRhaW5pbmdfdHlwZSkgJiYKICAgICAgICAgICAgICAgICAgICAo
YmFzZV90eXBlIC0+IElzU3ViY2xhc3ModGhpc190eXBlKSB8fCBiYXNlX3R5cGUgLT4gSXNPd25l
cih0aGlzX3R5cGUpKSkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBSZXBvcnRTZW1F
cnJvcigodmFyaWFibGVfc3ltYm9sID8gU2VtYW50aWNFcnJvcjo6UFJPVEVDVEVEX0ZJRUxEX05P
VF9BQ0NFU1NJQkxFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogU2VtYW50aWNFcnJvcjo6UFJPVEVDVEVEX01FVEhPRF9OT1RfQUNDRVNTSUJMRSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90
b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBpZGVu
dGlmaWVyX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV4X3N0cmVhbSAt
PiBOYW1lU3RyaW5nKGZpZWxkX2FjY2VzcyAtPiBpZGVudGlmaWVyX3Rva2VuKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdfdHlwZSAtPiBDb250YWluaW5nUGFja2Fn
ZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
YWluaW5nX3R5cGUgLT4gRXh0ZXJuYWxOYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICAgIGVsc2UgaWYgKCEgKGZsYWdzIC0+IEFDQ19QVUJMSUMoKSB8fCBjb250YWluaW5nX3R5
cGUgLT4gQ29udGFpbmluZ1BhY2thZ2UoKSA9PSB0aGlzX3BhY2thZ2UpKQogICAgICAgIHsKICAg
ICAgICAgICAgUmVwb3J0U2VtRXJyb3IoKHZhcmlhYmxlX3N5bWJvbCA/IFNlbWFudGljRXJyb3I6
OkRFRkFVTFRfRklFTERfTk9UX0FDQ0VTU0lCTEUKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IFNlbWFudGljRXJyb3I6OkRFRkFVTFRfTUVUSE9EX05PVF9BQ0NF
U1NJQkxFKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfYWNjZXNzIC0+IGlkZW50
aWZpZXJfdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBp
ZGVudGlmaWVyX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXhfc3RyZWFtIC0+
IE5hbWVTdHJpbmcoZmllbGRfYWNjZXNzIC0+IGlkZW50aWZpZXJfdG9rZW4pLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250YWluaW5nX3R5cGUgLT4gQ29udGFpbmluZ1BhY2thZ2UoKSAt
PiBQYWNrYWdlTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nX3R5
cGUgLT4gRXh0ZXJuYWxOYW1lKCkpOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0KCgp2
b2lkIFNlbWFudGljOjpTaW1wbGVOYW1lQWNjZXNzQ2hlY2soQXN0U2ltcGxlTmFtZSAqc2ltcGxl
X25hbWUsIFR5cGVTeW1ib2wgKmNvbnRhaW5pbmdfdHlwZSwgU3ltYm9sICpzeW1ib2wpCnsKICAg
IFR5cGVTeW1ib2wgKnRoaXNfdHlwZSA9IFRoaXNUeXBlKCk7CgogICAgVmFyaWFibGVTeW1ib2wg
KnZhcmlhYmxlX3N5bWJvbCA9IHN5bWJvbCAtPiBWYXJpYWJsZUNhc3QoKTsKICAgIE1ldGhvZFN5
bWJvbCAqbWV0aG9kX3N5bWJvbCA9IHN5bWJvbCAtPiBNZXRob2RDYXN0KCk7CgogICAgKHN0YXRp
Y19jYXN0PHZvaWQ+ICAoKCB2YXJpYWJsZV9zeW1ib2wgfHwgbWV0aG9kX3N5bWJvbCApID8gMCA6
CShfX2Fzc2VydF9mYWlsICgidmFyaWFibGVfc3ltYm9sIHx8IG1ldGhvZF9zeW1ib2wiICwgIi4u
Ly4uL2ppa2VzL3NyYy9leHByLmNwcCIsIDE5OTcsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkp
KSA7CgogICAgQWNjZXNzRmxhZ3MgKmZsYWdzID0gKHZhcmlhYmxlX3N5bWJvbCA/IChBY2Nlc3NG
bGFncyAqKSB2YXJpYWJsZV9zeW1ib2wgOiAoQWNjZXNzRmxhZ3MgKikgbWV0aG9kX3N5bWJvbCk7
CgogICAgaWYgKCEgKGNvbnRhaW5pbmdfdHlwZSAtPiBBQ0NfUFVCTElDKCkgfHwgdGhpc190eXBl
IC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgPT0gY29udGFpbmluZ190eXBlIC0+IENvbnRhaW5pbmdQ
YWNrYWdlKCkpKQogICAgICAgIFJlcG9ydFR5cGVJbmFjY2Vzc2libGUoc2ltcGxlX25hbWUsIGNv
bnRhaW5pbmdfdHlwZSk7CgogICAgaWYgKHRoaXNfdHlwZSAtPiBvdXRlcm1vc3RfdHlwZSAhPSBj
b250YWluaW5nX3R5cGUgLT4gb3V0ZXJtb3N0X3R5cGUpCiAgICB7CiAgICAgICAgaWYgKGZsYWdz
IC0+IEFDQ19QUklWQVRFKCkpCiAgICAgICAgewogICAgICAgICAgICBSZXBvcnRTZW1FcnJvcigo
dmFyaWFibGVfc3ltYm9sID8gU2VtYW50aWNFcnJvcjo6UFJJVkFURV9GSUVMRF9OT1RfQUNDRVNT
SUJMRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU2VtYW50
aWNFcnJvcjo6UFJJVkFURV9NRVRIT0RfTk9UX0FDQ0VTU0lCTEUpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaW1wbGVfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2VuLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaW1wbGVfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2VuLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBsZXhfc3RyZWFtIC0+IE5hbWVTdHJpbmcoc2ltcGxlX25hbWUgLT4g
aWRlbnRpZmllcl90b2tlbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdf
dHlwZSAtPiBDb250YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdfdHlwZSAtPiBFeHRlcm5hbE5hbWUoKSk7CiAgICAg
ICAgfQogICAgICAgIGVsc2UgaWYgKGZsYWdzIC0+IEFDQ19QUk9URUNURUQoKSkKICAgICAgICB7
CiAgICAgICAgICAgIGlmICghIChjb250YWluaW5nX3R5cGUgLT4gQ29udGFpbmluZ1BhY2thZ2Uo
KSA9PSB0aGlzX3BhY2thZ2UgfHwgdGhpc190eXBlIC0+IElzU3ViY2xhc3MoY29udGFpbmluZ190
eXBlKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKCh2YXJp
YWJsZV9zeW1ib2wgPyBTZW1hbnRpY0Vycm9yOjpQUk9URUNURURfRklFTERfTk9UX0FDQ0VTU0lC
TEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTZW1h
bnRpY0Vycm9yOjpQUk9URUNURURfTUVUSE9EX05PVF9BQ0NFU1NJQkxFKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpbXBsZV9uYW1lIC0+IGlkZW50aWZpZXJfdG9rZW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2Vu
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV4X3N0cmVhbSAtPiBOYW1lU3RyaW5n
KHNpbXBsZV9uYW1lIC0+IGlkZW50aWZpZXJfdG9rZW4pLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGFpbmluZ190eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2Fn
ZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdfdHlwZSAt
PiBFeHRlcm5hbE5hbWUoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBp
ZiAoISAoZmxhZ3MgLT4gQUNDX1BVQkxJQygpIHx8IGNvbnRhaW5pbmdfdHlwZSAtPiBDb250YWlu
aW5nUGFja2FnZSgpID09IHRoaXNfcGFja2FnZSkpCiAgICAgICAgewogICAgICAgICAgICBSZXBv
cnRTZW1FcnJvcigodmFyaWFibGVfc3ltYm9sID8gU2VtYW50aWNFcnJvcjo6REVGQVVMVF9GSUVM
RF9OT1RfQUNDRVNTSUJMRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogU2VtYW50aWNFcnJvcjo6REVGQVVMVF9NRVRIT0RfTk9UX0FDQ0VTU0lCTEUpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2VuLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2Vu
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXhfc3RyZWFtIC0+IE5hbWVTdHJpbmcoc2lt
cGxlX25hbWUgLT4gaWRlbnRpZmllcl90b2tlbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRhaW5pbmdfdHlwZSAtPiBDb250YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VOYW1lKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdfdHlwZSAtPiBFeHRlcm5hbE5h
bWUoKSk7CiAgICAgICAgfQogICAgfQoKCgogICAgcmV0dXJuOwp9CgoKdm9pZCBTZW1hbnRpYzo6
RmluZFZhcmlhYmxlTWVtYmVyKFR5cGVTeW1ib2wgKnR5cGUsIFR5cGVTeW1ib2wgKmVudmlyb25t
ZW50X3R5cGUsIEFzdEZpZWxkQWNjZXNzICpmaWVsZF9hY2Nlc3MpCnsKICAgIFR5cGVTeW1ib2wg
KnRoaXNfdHlwZSA9IFRoaXNUeXBlKCk7CgogICAgIAogICAgIAogICAgIAogICAgIAogICAgYm9v
bCBiYXNlX2lzX3R5cGUgPSBmaWVsZF9hY2Nlc3MgLT4gYmFzZSAtPiBzeW1ib2wgLT4gVHlwZUNh
c3QoKSAhPSBfX251bGwgICYmCiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAt
PiBiYXNlIC0+IElzTmFtZSgpOwoKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIFN5
bWJvbFNldCAqZXhjZXB0aW9uX3NldCA9IFRyeUV4Y2VwdGlvblRhYmxlU3RhY2soKS5Ub3AoKTsK
ICAgIGlmIChleGNlcHRpb25fc2V0ICYmICEgZmllbGRfYWNjZXNzIC0+IGJhc2UgLT4gc3ltYm9s
IC0+IFR5cGVDYXN0KCkpCiAgICAgICAgZXhjZXB0aW9uX3NldCAtPiBBZGRFbGVtZW50KGNvbnRy
b2wuUnVudGltZUV4Y2VwdGlvbigpKTsKCiAgICBpZiAodHlwZSAtPiBCYWQoKSkKICAgIHsKICAg
ICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAK
ICAgICAgICBpZiAoTnVtRXJyb3JzKCkgPT0gMCkKICAgICAgICAgICAgUmVwb3J0QWNjZXNzZWRG
aWVsZE5vdEZvdW5kKGZpZWxkX2FjY2VzcywgdHlwZSk7CiAgICAgICAgZmllbGRfYWNjZXNzIC0+
IHN5bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsKICAgIH0KICAgIGVsc2UgaWYgKHR5cGUgPT0gY29u
dHJvbC5udWxsX3R5cGUgfHwgdHlwZSAtPiBQcmltaXRpdmUoKSkKICAgIHsKICAgICAgICBSZXBv
cnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpUWVBFX05PVF9SRUZFUkVOQ0UsCiAgICAgICAgICAg
ICAgICAgICAgICAgZmllbGRfYWNjZXNzIC0+IGJhc2UgLT4gTGVmdFRva2VuKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgZmllbGRfYWNjZXNzIC0+IGJhc2UgLT4gUmlnaHRUb2tlbigpLAogICAg
ICAgICAgICAgICAgICAgICAgIHR5cGUgLT4gTmFtZSgpKTsKICAgICAgICBmaWVsZF9hY2Nlc3Mg
LT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAgfQogICAgZWxzZQogICAgewogICAgICAg
IFR5cGVBY2Nlc3NDaGVjayhmaWVsZF9hY2Nlc3MgLT4gYmFzZSwgdHlwZSk7CgogICAgICAgIFZh
cmlhYmxlU3ltYm9sICp2YXJpYWJsZV9zeW1ib2wgPSBGaW5kVmFyaWFibGVJblR5cGUodHlwZSwg
ZmllbGRfYWNjZXNzKTsKICAgICAgICBpZiAodmFyaWFibGVfc3ltYm9sKQogICAgICAgIHsKICAg
ICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCB2YXJpYWJsZV9zeW1ib2wgLT4gSXNUeXBl
ZCgpICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJ2YXJpYWJsZV9zeW1ib2wgLT4gSXNUeXBlZCgp
IiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCAyMDk0LCBfX1BSRVRUWV9GVU5DVElPTl9f
ICksIDApKSkgOwoKICAgICAgICAgICAgaWYgKGJhc2VfaXNfdHlwZSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgaWYgKCEgdmFyaWFibGVfc3ltYm9sIC0+IEFDQ19TVEFUSUMoKSkKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRp
Y0Vycm9yOjpOQU1FX05PVF9DTEFTU19WQVJJQUJMRSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXhfc3RyZWFtIC0+IE5hbWVTdHJp
bmcoZmllbGRfYWNjZXNzIC0+IGlkZW50aWZpZXJfdG9rZW4pKTsKICAgICAgICAgICAgICAgICAg
ICBmaWVsZF9hY2Nlc3MgLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZV9zeW1ib2wgLT4gQUNDX0ZJTkFM
KCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBp
ZiAodmFyaWFibGVfc3ltYm9sIC0+IElzRGVjbGFyYXRpb25Db21wbGV0ZSgpKQogICAgICAgICAg
ICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gdmFsdWUgPSB2YXJpYWJsZV9zeW1ib2wgLT4g
aW5pdGlhbF92YWx1ZTsKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZV9zeW1i
b2wgLT4gZGVjbGFyYXRvcikKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIEFzdFZhcmlhYmxlRGVjbGFyYXRvciAqZGVjbGFyYXRvciA9IHZhcmlhYmxlX3N5bWJv
bCAtPiBkZWNsYXJhdG9yIC0+IFZhcmlhYmxlRGVjbGFyYXRvckNhc3QoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZGVjbGFyYXRvciAmJiAoISBkZWNsYXJhdG9yIC0+IHBlbmRpbmcpICYmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdG9yIC0+IHZhcmlhYmxlX2luaXRpYWxpemVyX29w
dCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCEgZGVjbGFyYXRvciAtPiB2YXJpYWJs
ZV9pbml0aWFsaXplcl9vcHQgLT4gQXJyYXlJbml0aWFsaXplckNhc3QoKSkpCiAgICAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVTeW1ib2wgKnZh
cmlhYmxlX3R5cGUgPSAoVHlwZVN5bWJvbCAqKSB2YXJpYWJsZV9zeW1ib2wgLT4gb3duZXI7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTZW1hbnRpYyAqc2VtID0gdmFyaWFibGVfdHlwZSAt
PiBzZW1hbnRpY19lbnZpcm9ubWVudCAtPiBzZW07CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWVsZF9hY2Nlc3MgLT4gdmFsdWUgPSBzZW0gLT4gQ29tcHV0ZUZpbmFsVmFsdWUoZGVjbGFy
YXRvcik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFR5cGVTeW1ib2wgKmNv
bnRhaW5pbmdfdHlwZSA9IChUeXBlU3ltYm9sICopIHZhcmlhYmxlX3N5bWJvbCAtPiBvd25lcjsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgaWYg
KHRoaXNfdHlwZSAhPSBjb250YWluaW5nX3R5cGUgJiYKICAgICAgICAgICAgICAgIHRoaXNfdHlw
ZSAtPiBvdXRlcm1vc3RfdHlwZSA9PSBlbnZpcm9ubWVudF90eXBlIC0+IG91dGVybW9zdF90eXBl
ICYmCiAgICAgICAgICAgICAgICAodmFyaWFibGVfc3ltYm9sIC0+IEFDQ19QUklWQVRFKCkgfHwK
ICAgICAgICAgICAgICAgICAodmFyaWFibGVfc3ltYm9sIC0+IEFDQ19QUk9URUNURUQoKSAmJgog
ICAgICAgICAgICAgICAgICBjb250YWluaW5nX3R5cGUgLT4gQ29udGFpbmluZ1BhY2thZ2UoKSAh
PSBlbnZpcm9ubWVudF90eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkpKSkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCAoISB2YXJpYWJsZV9zeW1i
b2wgLT4gQUNDX1BSSVZBVEUoKSkgfHwgY29udGFpbmluZ190eXBlID09IGVudmlyb25tZW50X3R5
cGUgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoIighIHZhcmlhYmxlX3N5bWJvbCAtPiBBQ0NfUFJJ
VkFURSgpKSB8fCBjb250YWluaW5nX3R5cGUgPT0gZW52aXJvbm1lbnRfdHlwZSIgLCAiLi4vLi4v
amlrZXMvc3JjL2V4cHIuY3BwIiwgMjE1NiwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsK
CiAgICAgICAgICAgICAgICBpZiAoZmllbGRfYWNjZXNzIC0+IElzQ29uc3RhbnQoKSkKICAgICAg
ICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gc3ltYm9sID0gdmFyaWFibGVfc3ltYm9sOwog
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
IEFzdEZpZWxkQWNjZXNzICptZXRob2RfbmFtZSA9IGNvbXBpbGF0aW9uX3VuaXQgLT4gYXN0X3Bv
b2wgLT4gR2VuRmllbGRBY2Nlc3MoKTsKICAgICAgICAgICAgICAgICAgICBtZXRob2RfbmFtZSAt
PiBiYXNlID0gZmllbGRfYWNjZXNzIC0+IGJhc2U7ICAKICAgICAgICAgICAgICAgICAgICBtZXRo
b2RfbmFtZSAtPiBkb3RfdG9rZW4gPSBmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbjsK
ICAgICAgICAgICAgICAgICAgICBtZXRob2RfbmFtZSAtPiBpZGVudGlmaWVyX3Rva2VuID0gZmll
bGRfYWNjZXNzIC0+IGlkZW50aWZpZXJfdG9rZW47CiAgICAgICAgICAgICAgICAgICAgbWV0aG9k
X25hbWUgLT4gc3ltYm9sID0gdmFyaWFibGVfc3ltYm9sOwoKICAgICAgICAgICAgICAgICAgICBB
c3RNZXRob2RJbnZvY2F0aW9uICpwICAgICAgID0gY29tcGlsYXRpb25fdW5pdCAtPiBhc3RfcG9v
bCAtPiBHZW5NZXRob2RJbnZvY2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgcCAtPiBtZXRo
b2QgICAgICAgICAgICAgICAgICA9IG1ldGhvZF9uYW1lOwogICAgICAgICAgICAgICAgICAgIHAg
LT4gbGVmdF9wYXJlbnRoZXNpc190b2tlbiAgPSBmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90
b2tlbjsKICAgICAgICAgICAgICAgICAgICBwIC0+IHJpZ2h0X3BhcmVudGhlc2lzX3Rva2VuID0g
ZmllbGRfYWNjZXNzIC0+IGlkZW50aWZpZXJfdG9rZW47CiAgICAgICAgICAgICAgICAgICAgcCAt
PiBzeW1ib2wgICAgICAgICAgICAgICAgICA9IGVudmlyb25tZW50X3R5cGUgLT4gR2V0UmVhZEFj
Y2Vzc01ldGhvZCh2YXJpYWJsZV9zeW1ib2wpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoISB2
YXJpYWJsZV9zeW1ib2wgLT4gQUNDX1NUQVRJQygpKQogICAgICAgICAgICAgICAgICAgICAgICBw
IC0+IEFkZEFyZ3VtZW50KGZpZWxkX2FjY2VzcyAtPiBiYXNlKTsKCiAgICAgICAgICAgICAgICAg
ICAgZmllbGRfYWNjZXNzIC0+IHJlc29sdXRpb25fb3B0ID0gcDsKICAgICAgICAgICAgICAgICAg
ICBmaWVsZF9hY2Nlc3MgLT4gc3ltYm9sID0gcCAtPiBzeW1ib2w7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICBmaWVsZF9hY2Nlc3MgLT4gc3ltYm9sID0gdmFyaWFibGVfc3ltYm9sOwogICAgICAgICAg
ICAgICAgTWVtYmVyQWNjZXNzQ2hlY2soZmllbGRfYWNjZXNzLCB0eXBlLCB2YXJpYWJsZV9zeW1i
b2wpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAg
ICAgICAgIFR5cGVTeW1ib2wgKmlubmVyX3R5cGUgPSBGaW5kTmVzdGVkVHlwZSh0eXBlLCBmaWVs
ZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbik7CiAgICAgICAgICAgIGlmIChpbm5lcl90eXBl
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoYmFzZV9pc190eXBlKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBzeW1ib2wgPSBp
bm5lcl90eXBlOwogICAgICAgICAgICAgICAgICAgIFR5cGVBY2Nlc3NDaGVjayhmaWVsZF9hY2Nl
c3MsIGlubmVyX3R5cGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFu
dGljRXJyb3I6OlRZUEVfTk9UX0ZJRUxELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpZWxkX2FjY2VzcyAtPiBpZGVudGlmaWVyX3Rva2VuLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBpZGVudGlmaWVyX3Rva2VuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxleF9zdHJlYW0gLT4gTmFtZVN0cmluZyhmaWVs
ZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbikpOwogICAgICAgICAgICAgICAgICAgIGZpZWxk
X2FjY2VzcyAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICBSZXBvcnRBY2Nlc3NlZEZpZWxkTm90Rm91bmQoZmllbGRfYWNjZXNzLCB0eXBlKTsKICAgICAg
ICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9CgogCiAKIAogCnZvaWQgU2Vt
YW50aWM6OlByb2Nlc3NBbWJpZ3VvdXNOYW1lKEFzdCAqbmFtZSkKewogICAgVHlwZVN5bWJvbCAq
dGhpc190eXBlID0gVGhpc1R5cGUoKTsKCiAgICBBc3RTaW1wbGVOYW1lICpzaW1wbGVfbmFtZTsK
CiAgICAgCiAgICAgCiAgICAgCiAgICBpZiAoKHNpbXBsZV9uYW1lID0gbmFtZSAtPiBTaW1wbGVO
YW1lQ2FzdCgpKSkKICAgIHsKICAgICAgICBUeXBlU3ltYm9sICp0eXBlOwogICAgICAgICAKICAg
ICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAK
ICAgICAgICAgCiAgICAgICAgIAogICAgICAgIFNlbWFudGljRW52aXJvbm1lbnQgKndoZXJlX2Zv
dW5kOwogICAgICAgIFZhcmlhYmxlU3ltYm9sICp2YXJpYWJsZV9zeW1ib2wgPSBGaW5kVmFyaWFi
bGVJbkVudmlyb25tZW50KHdoZXJlX2ZvdW5kLCBzdGF0ZV9zdGFjay5Ub3AoKSwgc2ltcGxlX25h
bWUgLT4gaWRlbnRpZmllcl90b2tlbik7CiAgICAgICAgaWYgKHZhcmlhYmxlX3N5bWJvbCkKICAg
ICAgICB7CiAgICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggdmFyaWFibGVfc3ltYm9s
IC0+IElzVHlwZWQoKSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgidmFyaWFibGVfc3ltYm9sIC0+
IElzVHlwZWQoKSIgLCAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiwgMjI0NiwgX19QUkVUVFlf
RlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgc2ltcGxlX25hbWUgLT4gdmFsdWUgPSB2
YXJpYWJsZV9zeW1ib2wgLT4gaW5pdGlhbF92YWx1ZTsKICAgICAgICAgICAgc2ltcGxlX25hbWUg
LT4gc3ltYm9sID0gdmFyaWFibGVfc3ltYm9sOwoKICAgICAgICAgICAgQ2hlY2tTaW1wbGVOYW1l
KHNpbXBsZV9uYW1lLCB3aGVyZV9mb3VuZCk7CgogICAgICAgICAgICAgCiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgaWYg
KHdoZXJlX2ZvdW5kICE9IHN0YXRlX3N0YWNrLlRvcCgpKQogICAgICAgICAgICAgICAgQ3JlYXRl
QWNjZXNzVG9TY29wZWRWYXJpYWJsZShzaW1wbGVfbmFtZSwgd2hlcmVfZm91bmQgLT4gVHlwZSgp
KTsKICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAg
ICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAog
ICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAg
IAogICAgICAgIGVsc2UgaWYgKCh0eXBlID0gRmluZFR5cGUoc2ltcGxlX25hbWUgLT4gaWRlbnRp
Zmllcl90b2tlbikpKQogICAgICAgICAgICAgc2ltcGxlX25hbWUgLT4gc3ltYm9sID0gdHlwZTsK
ICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgZWxzZQogICAg
ICAgIHsKICAgICAgICAgICAgTmFtZVN5bWJvbCAqbmFtZV9zeW1ib2wgPSBsZXhfc3RyZWFtIC0+
IE5hbWVTeW1ib2woc2ltcGxlX25hbWUgLT4gaWRlbnRpZmllcl90b2tlbik7CiAgICAgICAgICAg
IFBhY2thZ2VTeW1ib2wgKnBhY2thZ2UgPSBjb250cm9sLmV4dGVybmFsX3RhYmxlLkZpbmRQYWNr
YWdlU3ltYm9sKG5hbWVfc3ltYm9sKTsKICAgICAgICAgICAgaWYgKHBhY2thZ2UpCiAgICAgICAg
ICAgICAgICBzaW1wbGVfbmFtZSAtPiBzeW1ib2wgPSBwYWNrYWdlOwogICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBhY2thZ2UgPSBjb250cm9sLmV4dGVybmFs
X3RhYmxlLkluc2VydFBhY2thZ2VTeW1ib2wobmFtZV9zeW1ib2wsIF9fbnVsbCApOwogICAgICAg
ICAgICAgICAgY29udHJvbC5GaW5kUGF0aHNUb0RpcmVjdG9yeShwYWNrYWdlKTsKICAgICAgICAg
ICAgICAgIHNpbXBsZV9uYW1lIC0+IHN5bWJvbCA9IHBhY2thZ2U7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICB9CiAgICAgCiAgICAgCiAgICAgCiAgICBlbHNlCiAgICB7CiAgICAgICAgQXN0
RmllbGRBY2Nlc3MgKmZpZWxkX2FjY2VzcyA9IChBc3RGaWVsZEFjY2VzcyAqKSBuYW1lOwoKICAg
ICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIG5hbWUgLT4gRmllbGRBY2Nlc3NDYXN0KCkgKSA/
IDAgOgkoX19hc3NlcnRfZmFpbCAoIm5hbWUgLT4gRmllbGRBY2Nlc3NDYXN0KCkiICwgIi4uLy4u
L2ppa2VzL3NyYy9leHByLmNwcCIsIDIzMDgsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7
CgogICAgICAgIFR5cGVTeW1ib2wgKnR5cGUgPSBfX251bGwgOwoKICAgICAgICBpZiAoZmllbGRf
YWNjZXNzIC0+IElzQ2xhc3NBY2Nlc3MoKSkKICAgICAgICB7CiAgICAgICAgICAgIEFkZERlcGVu
ZGVuY2UodGhpc190eXBlLCBjb250cm9sLk5vQ2xhc3NEZWZGb3VuZEVycm9yKCksIGZpZWxkX2Fj
Y2VzcyAtPiBpZGVudGlmaWVyX3Rva2VuKTsKICAgICAgICAgICAgQWRkRGVwZW5kZW5jZSh0aGlz
X3R5cGUsIGNvbnRyb2wuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbigpLCBmaWVsZF9hY2Nlc3MgLT4g
aWRlbnRpZmllcl90b2tlbik7CgogICAgICAgICAgICBBc3RUeXBlRXhwcmVzc2lvbiAqYmFzZSA9
IChBc3RUeXBlRXhwcmVzc2lvbiAqKSBmaWVsZF9hY2Nlc3MgLT4gYmFzZTsKCiAgICAgICAgICAg
IEFzdEFycmF5VHlwZSAqYXJyYXlfdHlwZSA9IGJhc2UgLT4gdHlwZSAtPiBBcnJheVR5cGVDYXN0
KCk7CiAgICAgICAgICAgIGlmIChhcnJheV90eXBlKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICBBc3RQcmltaXRpdmVUeXBlICpwcmltaXRpdmVfdHlwZSA9IGFycmF5X3R5cGUgLT4gdHlw
ZSAtPiBQcmltaXRpdmVUeXBlQ2FzdCgpOwogICAgICAgICAgICAgICAgVHlwZVN5bWJvbCAqdW5p
dCA9IChwcmltaXRpdmVfdHlwZSA/IEZpbmRQcmltaXRpdmVUeXBlKHByaW1pdGl2ZV90eXBlKSA6
IE11c3RGaW5kVHlwZShhcnJheV90eXBlIC0+IHR5cGUpKTsKICAgICAgICAgICAgICAgIHR5cGUg
PSB1bml0IC0+IEdldEFycmF5VHlwZSgoU2VtYW50aWMgKikgdGhpcywgYXJyYXlfdHlwZSAtPiBO
dW1CcmFja2V0cygpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIEFzdFByaW1pdGl2ZVR5cGUgKnByaW1pdGl2ZV90eXBlID0gYmFz
ZSAtPiB0eXBlIC0+IFByaW1pdGl2ZVR5cGVDYXN0KCk7CiAgICAgICAgICAgICAgICB0eXBlID0g
KHByaW1pdGl2ZV90eXBlID8gRmluZFByaW1pdGl2ZVR5cGUocHJpbWl0aXZlX3R5cGUpIDogTXVz
dEZpbmRUeXBlKGJhc2UgLT4gdHlwZSkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBUeXBl
U3ltYm9sICpvdXRlcm1vc3RfdHlwZSA9IHRoaXNfdHlwZSAtPiBvdXRlcm1vc3RfdHlwZTsKCiAg
ICAgICAgICAgIGlmICh0eXBlIC0+IFByaW1pdGl2ZSgpKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICBpZiAodHlwZSA9PSBjb250cm9sLmludF90eXBlKQogICAgICAgICAgICAgICAgICAg
ICB0eXBlID0gY29udHJvbC5JbnRlZ2VyKCk7CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBl
ID09IGNvbnRyb2wuZG91YmxlX3R5cGUpCiAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBjb250
cm9sLkRvdWJsZSgpOwogICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBjb250cm9sLmNo
YXJfdHlwZSkKICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGNvbnRyb2wuQ2hhcmFjdGVyKCk7
CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IGNvbnRyb2wubG9uZ190eXBlKQogICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gY29udHJvbC5Mb25nKCk7CiAgICAgICAgICAgICAgICBl
bHNlIGlmICh0eXBlID09IGNvbnRyb2wuZmxvYXRfdHlwZSkKICAgICAgICAgICAgICAgICAgICAg
dHlwZSA9IGNvbnRyb2wuRmxvYXQoKTsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0g
Y29udHJvbC5ieXRlX3R5cGUpCiAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBjb250cm9sLkJ5
dGUoKTsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gY29udHJvbC5zaG9ydF90eXBl
KQogICAgICAgICAgICAgICAgICAgICB0eXBlID0gY29udHJvbC5TaG9ydCgpOwogICAgICAgICAg
ICAgICAgZWxzZSBpZiAodHlwZSA9PSBjb250cm9sLmJvb2xlYW5fdHlwZSkKICAgICAgICAgICAg
ICAgICAgICAgdHlwZSA9IGNvbnRyb2wuQm9vbGVhbigpOwogICAgICAgICAgICAgICAgZWxzZSAg
CiAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBjb250cm9sLlZvaWQoKTsKICAgICAgICAgICAg
ICAgIGJhc2UgLT4gc3ltYm9sID0gdHlwZTsKCiAgICAgICAgICAgICAgICBWYXJpYWJsZVN5bWJv
bCAqdmFyaWFibGVfc3ltYm9sID0gdHlwZSAtPiBGaW5kVmFyaWFibGVTeW1ib2woY29udHJvbC50
eXBlX25hbWVfc3ltYm9sKTsKCiAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgo
IHZhcmlhYmxlX3N5bWJvbCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgidmFyaWFibGVfc3ltYm9s
IiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCAyMzU4LCBfX1BSRVRUWV9GVU5DVElPTl9f
ICksIDApKSkgOwoKICAgICAgICAgICAgICAgIGlmIChjb250cm9sLm9wdGlvbi5kZXByZWNhdGlv
biAmJgogICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlX3N5bWJvbCAtPiBJc0RlcHJlY2F0ZWQo
KSAmJgogICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlX3N5bWJvbCAtPiBvd25lciAtPiBUeXBl
Q2FzdCgpIC0+IG91dGVybW9zdF90eXBlICE9IFRoaXNUeXBlKCkgLT4gb3V0ZXJtb3N0X3R5cGUp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2Vt
YW50aWNFcnJvcjo6REVQUkVDQVRFRF9GSUVMRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZV9zeW1ib2wgLT4gTmFtZSgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlX3N5bWJvbCAtPiBv
d25lciAtPiBUeXBlQ2FzdCgpIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZV9zeW1ib2wgLT4g
b3duZXIgLT4gVHlwZUNhc3QoKSAtPiBFeHRlcm5hbE5hbWUoKSk7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgaWYgKCEgdmFyaWFibGVfc3ltYm9sIC0+IElzVHlwZWQoKSkKICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZV9zeW1ib2wgLT4gUHJvY2Vzc1ZhcmlhYmxlU2lnbmF0
dXJlKChTZW1hbnRpYyAqKSB0aGlzLCBmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbik7
CgogICAgICAgICAgICAgICAgZmllbGRfYWNjZXNzIC0+IHN5bWJvbCA9IHZhcmlhYmxlX3N5bWJv
bDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIFR5cGVBY2Nlc3NDaGVjayhiYXNlLCBhcnJheV90eXBlID8gdHlwZSAtPiBiYXNlX3R5
cGUgOiB0eXBlKTsKICAgICAgICAgICAgICAgIGJhc2UgLT4gc3ltYm9sID0gdHlwZTsKCiAgICAg
ICAgICAgICAgICBpZiAob3V0ZXJtb3N0X3R5cGUgLT4gQUNDX0lOVEVSRkFDRSgpKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGVTeW1ib2wgKmNsYXNzX2xpdGVyYWxf
dHlwZSA9IG91dGVybW9zdF90eXBlIC0+IEZpbmRPckluc2VydENsYXNzTGl0ZXJhbENsYXNzKGZp
ZWxkX2FjY2VzcyAtPiBpZGVudGlmaWVyX3Rva2VuKTsKICAgICAgICAgICAgICAgICAgICBBZGRE
ZXBlbmRlbmNlKHRoaXNfdHlwZSwgY2xhc3NfbGl0ZXJhbF90eXBlLCBmaWVsZF9hY2Nlc3MgLT4g
aWRlbnRpZmllcl90b2tlbik7CgogICAgICAgICAgICAgICAgICAgIEFzdFNpbXBsZU5hbWUgKnNp
bXBsZV9uYW1lID0gY29tcGlsYXRpb25fdW5pdCAtPiBhc3RfcG9vbCAtPiBHZW5TaW1wbGVOYW1l
KGZpZWxkX2FjY2VzcyAtPiBpZGVudGlmaWVyX3Rva2VuKTsKICAgICAgICAgICAgICAgICAgICBz
aW1wbGVfbmFtZSAtPiBzeW1ib2wgPSBjbGFzc19saXRlcmFsX3R5cGU7CgogICAgICAgICAgICAg
ICAgICAgIEFzdEZpZWxkQWNjZXNzICptZXRob2RfYWNjZXNzID0gY29tcGlsYXRpb25fdW5pdCAt
PiBhc3RfcG9vbCAtPiBHZW5GaWVsZEFjY2VzcygpOwogICAgICAgICAgICAgICAgICAgIG1ldGhv
ZF9hY2Nlc3MgLT4gYmFzZSA9IHNpbXBsZV9uYW1lOwogICAgICAgICAgICAgICAgICAgIG1ldGhv
ZF9hY2Nlc3MgLT4gZG90X3Rva2VuID0gZmllbGRfYWNjZXNzIC0+IGlkZW50aWZpZXJfdG9rZW47
CiAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2FjY2VzcyAtPiBpZGVudGlmaWVyX3Rva2VuID0g
ZmllbGRfYWNjZXNzIC0+IGlkZW50aWZpZXJfdG9rZW47CgogICAgICAgICAgICAgICAgICAgIEFz
dFN0cmluZ0xpdGVyYWwgKnN0cmluZ19saXRlcmFsID0gY29tcGlsYXRpb25fdW5pdCAtPiBhc3Rf
cG9vbCAtPiBHZW5TdHJpbmdMaXRlcmFsKGZpZWxkX2FjY2VzcyAtPiBpZGVudGlmaWVyX3Rva2Vu
KTsKICAgICAgICAgICAgICAgICAgICBzdHJpbmdfbGl0ZXJhbCAtPiB2YWx1ZSA9IHR5cGUgLT4g
RmluZE9ySW5zZXJ0Q2xhc3NMaXRlcmFsTmFtZShjb250cm9sKTsKICAgICAgICAgICAgICAgICAg
ICBzdHJpbmdfbGl0ZXJhbCAtPiBzeW1ib2wgPSBjb250cm9sLlN0cmluZygpOwoKICAgICAgICAg
ICAgICAgICAgICBBc3RNZXRob2RJbnZvY2F0aW9uICptZXRob2RfY2FsbCAgICAgICA9IGNvbXBp
bGF0aW9uX3VuaXQgLT4gYXN0X3Bvb2wgLT4gR2VuTWV0aG9kSW52b2NhdGlvbigpOwogICAgICAg
ICAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IG1ldGhvZCAgICAgICAgICAgICAgICAgID0gbWV0
aG9kX2FjY2VzczsKICAgICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBsZWZ0X3BhcmVu
dGhlc2lzX3Rva2VuICA9IGZpZWxkX2FjY2VzcyAtPiBpZGVudGlmaWVyX3Rva2VuOwogICAgICAg
ICAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IEFkZEFyZ3VtZW50KHN0cmluZ19saXRlcmFsKTsK
ICAgICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiByaWdodF9wYXJlbnRoZXNpc190b2tl
biA9IGZpZWxkX2FjY2VzcyAtPiBpZGVudGlmaWVyX3Rva2VuOwogICAgICAgICAgICAgICAgICAg
IG1ldGhvZF9jYWxsIC0+IHN5bWJvbCAgICAgICAgICAgICAgICAgID0gY2xhc3NfbGl0ZXJhbF90
eXBlIC0+IENsYXNzTGl0ZXJhbE1ldGhvZCgpOwoKICAgICAgICAgICAgICAgICAgICBmaWVsZF9h
Y2Nlc3MgLT4gcmVzb2x1dGlvbl9vcHQgPSBtZXRob2RfY2FsbDsKICAgICAgICAgICAgICAgICAg
ICBmaWVsZF9hY2Nlc3MgLT4gc3ltYm9sID0gKG1ldGhvZF9jYWxsIC0+IHN5bWJvbCA/IG1ldGhv
ZF9jYWxsIC0+IHN5bWJvbCA6IGNvbnRyb2wubm9fdHlwZSk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
QWRkRGVwZW5kZW5jZSh0aGlzX3R5cGUsIGNvbnRyb2wuQ2xhc3MoKSwgZmllbGRfYWNjZXNzIC0+
IGlkZW50aWZpZXJfdG9rZW4pOwoKICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZVN5bWJvbCAq
dmFyaWFibGVfc3ltYm9sID0gb3V0ZXJtb3N0X3R5cGUgLT4gRmluZE9ySW5zZXJ0Q2xhc3NMaXRl
cmFsKHR5cGUpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzX3R5cGUgPT0gb3V0ZXJtb3N0
X3R5cGUpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBBc3RT
aW1wbGVOYW1lICpzaW1wbGVfbmFtZSA9IGNvbXBpbGF0aW9uX3VuaXQgLT4gYXN0X3Bvb2wgLT4g
R2VuU2ltcGxlTmFtZShmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbik7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHNpbXBsZV9uYW1lIC0+IHN5bWJvbCA9IHZhcmlhYmxlX3N5bWJvbDsK
CiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBzeW1ib2wgPSB2YXJpYWJs
ZV9zeW1ib2w7CiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiByZXNvbHV0
aW9uX29wdCA9IHNpbXBsZV9uYW1lOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICBBc3RTaW1wbGVOYW1lICpzaW1wbGVfbmFtZSA9IGNvbXBpbGF0aW9uX3VuaXQgLT4gYXN0X3Bv
b2wgLT4gR2VuU2ltcGxlTmFtZShmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbik7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZV9uYW1lIC0+IHN5bWJvbCAgICAgID0gb3V0ZXJt
b3N0X3R5cGU7CgogICAgICAgICAgICAgICAgICAgICAgICBBc3RGaWVsZEFjY2VzcyAqbWV0aG9k
X2FjY2VzcyAgICAgPSBjb21waWxhdGlvbl91bml0IC0+IGFzdF9wb29sIC0+IEdlbkZpZWxkQWNj
ZXNzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9hY2Nlc3MgLT4gYmFzZSAgICAg
ICAgICAgICA9IHNpbXBsZV9uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfYWNj
ZXNzIC0+IGRvdF90b2tlbiAgICAgICAgPSBmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tl
bjsKICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2FjY2VzcyAtPiBpZGVudGlmaWVyX3Rv
a2VuID0gZmllbGRfYWNjZXNzIC0+IGlkZW50aWZpZXJfdG9rZW47CiAgICAgICAgICAgICAgICAg
ICAgICAgIG1ldGhvZF9hY2Nlc3MgLT4gc3ltYm9sICAgICAgICAgICA9IHZhcmlhYmxlX3N5bWJv
bDsgIAoKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRp
Y19jYXN0PHZvaWQ+ICAoKCB2YXJpYWJsZV9zeW1ib2wgLT4gQUNDX1NUQVRJQygpICkgPyAwIDoJ
KF9fYXNzZXJ0X2ZhaWwgKCJ2YXJpYWJsZV9zeW1ib2wgLT4gQUNDX1NUQVRJQygpIiAsICIuLi8u
Li9qaWtlcy9zcmMvZXhwci5jcHAiLCAyNDM2LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkg
OwoKICAgICAgICAgICAgICAgICAgICAgICAgQXN0TWV0aG9kSW52b2NhdGlvbiAqbWV0aG9kX2Nh
bGwgICAgICAgPSBjb21waWxhdGlvbl91bml0IC0+IGFzdF9wb29sIC0+IEdlbk1ldGhvZEludm9j
YXRpb24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2NhbGwgLT4gbWV0aG9kICAg
ICAgICAgICAgICAgICAgPSBtZXRob2RfYWNjZXNzOwogICAgICAgICAgICAgICAgICAgICAgICBt
ZXRob2RfY2FsbCAtPiBsZWZ0X3BhcmVudGhlc2lzX3Rva2VuICA9IGZpZWxkX2FjY2VzcyAtPiBp
ZGVudGlmaWVyX3Rva2VuOwogICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBy
aWdodF9wYXJlbnRoZXNpc190b2tlbiA9IGZpZWxkX2FjY2VzcyAtPiBpZGVudGlmaWVyX3Rva2Vu
OwogICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBzeW1ib2wgICAgICAgICAg
ICAgICAgICA9IG91dGVybW9zdF90eXBlIC0+IEdldFdyaXRlQWNjZXNzTWV0aG9kKHZhcmlhYmxl
X3N5bWJvbCk7CgogICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gcmVzb2x1
dGlvbl9vcHQgPSBtZXRob2RfY2FsbDsKICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfYWNj
ZXNzIC0+IHN5bWJvbCA9IG91dGVybW9zdF90eXBlIC0+IEdldFJlYWRBY2Nlc3NNZXRob2QodmFy
aWFibGVfc3ltYm9sKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAg
QXN0RXhwcmVzc2lvbiogYmFzZSA9IGZpZWxkX2FjY2VzcyAtPiBiYXNlOwogICAgICAgICAgICBB
c3RGaWVsZEFjY2VzcyAqc3ViX2ZpZWxkX2FjY2VzcyA9IGJhc2UgLT4gRmllbGRBY2Nlc3NDYXN0
KCk7CiAgICAgICAgICAgIHNpbXBsZV9uYW1lID0gYmFzZSAtPiBTaW1wbGVOYW1lQ2FzdCgpOwoK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgaWYg
KHNpbXBsZV9uYW1lIHx8IHN1Yl9maWVsZF9hY2Nlc3MpCiAgICAgICAgICAgICAgICBQcm9jZXNz
QW1iaWd1b3VzTmFtZShiYXNlKTsKICAgICAgICAgICAgZWxzZSAgCiAgICAgICAgICAgICAgICBQ
cm9jZXNzRXhwcmVzc2lvbk9yU3RyaW5nQ29uc3RhbnQoYmFzZSk7CgogICAgICAgICAgICBpZiAo
YmFzZSAtPiBzeW1ib2wgPT0gY29udHJvbC5ub190eXBlKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBQYWNrYWdlU3ltYm9s
ICpwYWNrYWdlOwogICAgICAgICAgICBTeW1ib2wgKnN5bWJvbCA9IGJhc2UgLT4gc3ltYm9sOwoK
ICAgICAgICAgICAgaWYgKGZpZWxkX2FjY2VzcyAtPiBJc1RoaXNBY2Nlc3MoKSB8fCBmaWVsZF9h
Y2Nlc3MgLT4gSXNTdXBlckFjY2VzcygpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBU
eXBlU3ltYm9sICplbmNsb3NpbmdfdHlwZSA9IHN5bWJvbCAtPiBUeXBlQ2FzdCgpOwogICAgICAg
ICAgICAgICAgaWYgKGVuY2xvc2luZ190eXBlID09IGNvbnRyb2wubm9fdHlwZSkKICAgICAgICAg
ICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlm
ICghIGVuY2xvc2luZ190eXBlKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6Tk9UX0FfVFlQRSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSAtPiBMZWZ0VG9rZW4oKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSAtPiBSaWdodFRva2VuKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gc3ltYm9sID0gY29udHJv
bC5ub190eXBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChlbmNsb3NpbmdfdHlwZSAtPiBBQ0NfSU5URVJGQUNFKCkpCiAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9y
OjpOT1RfQV9DTEFTUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFz
ZSAtPiBMZWZ0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmFzZSAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVuY2xvc2luZ190eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jbG9zaW5nX3R5cGUg
LT4gRXh0ZXJuYWxOYW1lKCkpOwogICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3Mg
LT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoISAodGhpc190eXBlIC0+IElzTmVzdGVkSW4oZW5jbG9zaW5nX3R5cGUpICYm
IHRoaXNfdHlwZSAtPiBDYW5BY2Nlc3MoZW5jbG9zaW5nX3R5cGUpKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNfdHlwZSA9PSBl
bmNsb3NpbmdfdHlwZSAmJiBmaWVsZF9hY2Nlc3MgLT4gSXNUaGlzQWNjZXNzKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVw
b3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6TUlTUExBQ0VEX1RISVNfRVhQUkVTU0lPTiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3Mg
LT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmllbGRfYWNjZXNzIC0+IFJpZ2h0VG9rZW4oKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0U2Vt
RXJyb3IoU2VtYW50aWNFcnJvcjo6SUxMRUdBTF9USElTX0ZJRUxEX0FDQ0VTUywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gTGVm
dFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmllbGRfYWNjZXNzIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbmNsb3NpbmdfdHlwZSAtPiBDb250YWluaW5nUGFja2FnZSgp
IC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5jbG9zaW5nX3R5cGUgLT4gRXh0ZXJuYWxOYW1lKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc190eXBlIC0+IENvbnRhaW5pbmdQ
YWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzX3R5cGUgLT4gRXh0ZXJuYWxOYW1lKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2Fj
Y2VzcyAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaWVsZF9hY2Nlc3MgLT4gcmVzb2x1dGlvbl9vcHQgPSBDcmVhdGVBY2Nlc3NUb1R5cGUo
ZmllbGRfYWNjZXNzLCBlbmNsb3NpbmdfdHlwZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWVsZF9hY2Nlc3MgLT4gc3ltYm9sID0gZmllbGRfYWNjZXNzIC0+IHJlc29sdXRpb25fb3B0
IC0+IHN5bWJvbDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICgo
cGFja2FnZSA9IHN5bWJvbCAtPiBQYWNrYWdlQ2FzdCgpKSkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgTmFtZVN5bWJvbCAqbmFt
ZV9zeW1ib2wgPSBsZXhfc3RyZWFtIC0+IE5hbWVTeW1ib2woZmllbGRfYWNjZXNzIC0+IGlkZW50
aWZpZXJfdG9rZW4pOwogICAgICAgICAgICAgICAgdHlwZSA9IHBhY2thZ2UgLT4gRmluZFR5cGVT
eW1ib2wobmFtZV9zeW1ib2wpOwoKICAgICAgICAgICAgICAgIGlmICh0eXBlKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlIC0+IFNvdXJjZVBlbmRpbmcoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5Qcm9jZXNzSGVhZGVycyh0eXBlIC0+IGZp
bGVfc3ltYm9sKTsKICAgICAgICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gc3ltYm9sID0g
dHlwZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICBGaWxlU3ltYm9sICpmaWxlX3N5bWJvbCA9IENvbnRy
b2w6OkdldEZpbGUoY29udHJvbCwgcGFja2FnZSwgbmFtZV9zeW1ib2wpOwogICAgICAgICAgICAg
ICAgICAgIGlmIChmaWxlX3N5bWJvbCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGUgPSBSZWFkVHlwZShmaWxlX3N5bWJvbCwgcGFja2FnZSwgbmFtZV9z
eW1ib2wsIGZpZWxkX2FjY2VzcyAtPiBpZGVudGlmaWVyX3Rva2VuKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgZmllbGRfYWNjZXNzIC0+IHN5bWJvbCA9IHR5cGU7CiAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdl
U3ltYm9sICpzdWJwYWNrYWdlID0gcGFja2FnZSAtPiBGaW5kUGFja2FnZVN5bWJvbChuYW1lX3N5
bWJvbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIHN1YnBhY2thZ2UpICAKICAgICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicGFja2Fn
ZSA9IHBhY2thZ2UgLT4gSW5zZXJ0UGFja2FnZVN5bWJvbChuYW1lX3N5bWJvbCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250cm9sLkZpbmRQYXRoc1RvRGlyZWN0b3J5KHN1YnBhY2th
Z2UpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGZp
ZWxkX2FjY2VzcyAtPiBzeW1ib2wgPSBzdWJwYWNrYWdlOwogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzdWJf
ZmllbGRfYWNjZXNzICYmIHN1Yl9maWVsZF9hY2Nlc3MgLT4gSXNTdXBlckFjY2VzcygpKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoc3ViX2ZpZWxkX2FjY2VzcyAtPiBUeXBlKCkg
PT0gY29udHJvbC5ub190eXBlKQogICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBz
eW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICAgICAgICAgICAgICBlbHNlIGlmIChzdWJfZmll
bGRfYWNjZXNzIC0+IFR5cGUoKSA9PSBjb250cm9sLk9iamVjdCgpKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6Ok9CSkVD
VF9IQVNfTk9fU1VQRVJfVFlQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dWJfZmllbGRfYWNjZXNzIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN1Yl9maWVsZF9hY2Nlc3MgLT4gUmlnaHRUb2tlbigpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN1Yl9maWVsZF9hY2Nlc3MgLT4gVHlwZSgpIC0+IENvbnRh
aW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdWJfZmllbGRfYWNjZXNzIC0+IFR5cGUoKSAtPiBFeHRlcm5hbE5hbWUoKSk7
CiAgICAgICAgICAgICAgICAgICAgZmllbGRfYWNjZXNzIC0+IHN5bWJvbCA9IGNvbnRyb2wubm9f
dHlwZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICB0eXBlID0gc3ViX2ZpZWxkX2FjY2VzcyAtPiBUeXBl
KCkgLT4gc3VwZXI7CiAgICAgICAgICAgICAgICAgICAgRmluZFZhcmlhYmxlTWVtYmVyKHR5cGUs
IHN1Yl9maWVsZF9hY2Nlc3MgLT4gVHlwZSgpLCBmaWVsZF9hY2Nlc3MpOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgZWxzZSBpZiAoKHR5cGUgPSBzeW1ib2wgLT4g
VHlwZUNhc3QoKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEZpbmRWYXJpYWJsZU1l
bWJlcih0eXBlLCBiYXNlIC0+IFR5cGUoKSwgZmllbGRfYWNjZXNzKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgLT4g
VmFyaWFibGVDYXN0KCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIChzdGF0aWNfY2Fz
dDx2b2lkPiAgKCggc3ltYm9sIC0+IFZhcmlhYmxlQ2FzdCgpIC0+IElzVHlwZWQoKSApID8gMCA6
CShfX2Fzc2VydF9mYWlsICgic3ltYm9sIC0+IFZhcmlhYmxlQ2FzdCgpIC0+IElzVHlwZWQoKSIg
LCAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiwgMjYwNSwgX19QUkVUVFlfRlVOQ1RJT05fXyAp
LCAwKSkpIDsKCiAgICAgICAgICAgICAgICB0eXBlID0gc3ltYm9sIC0+IFZhcmlhYmxlQ2FzdCgp
IC0+IFR5cGUoKTsKCiAgICAgICAgICAgICAgICBGaW5kVmFyaWFibGVNZW1iZXIodHlwZSwgdHlw
ZSwgZmllbGRfYWNjZXNzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzeW1i
b2wgLT4gTWV0aG9kQ2FzdCgpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAoc3RhdGlj
X2Nhc3Q8dm9pZD4gICgoIHN5bWJvbCAtPiBNZXRob2RDYXN0KCkgLT4gSXNUeXBlZCgpICkgPyAw
IDoJKF9fYXNzZXJ0X2ZhaWwgKCJzeW1ib2wgLT4gTWV0aG9kQ2FzdCgpIC0+IElzVHlwZWQoKSIg
LCAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiwgMjYxMywgX19QUkVUVFlfRlVOQ1RJT05fXyAp
LCAwKSkpIDsKCiAgICAgICAgICAgICAgICB0eXBlID0gc3ltYm9sIC0+IE1ldGhvZENhc3QoKSAt
PiBUeXBlKCk7CgogICAgICAgICAgICAgICAgRmluZFZhcmlhYmxlTWVtYmVyKHR5cGUsIHR5cGUs
IGZpZWxkX2FjY2Vzcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSAgCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OlVOS05P
V05fUVVBTElGSUVEX05BTUVfQkFTRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJh
c2UgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlIC0+
IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbCAtPiBO
YW1lKCkpOwogICAgICAgICAgICAgICAgZmllbGRfYWNjZXNzIC0+IHN5bWJvbCA9IGNvbnRyb2wu
bm9fdHlwZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHR5cGUpCiAgICAg
ICAgewogICAgICAgICAgICBUeXBlU3ltYm9sICpwYXJlbnRfdHlwZSA9ICh0eXBlIC0+IElzQXJy
YXkoKSA/IHR5cGUgLT4gYmFzZV90eXBlIDogdHlwZSk7CiAgICAgICAgICAgIGlmICghIHBhcmVu
dF90eXBlIC0+IFByaW1pdGl2ZSgpKQogICAgICAgICAgICAgICAgQWRkRGVwZW5kZW5jZSh0aGlz
X3R5cGUsIHBhcmVudF90eXBlLCBmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbiwgZmll
bGRfYWNjZXNzIC0+IElzQ29uc3RhbnQoKSk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybjsK
fQoKCnZvaWQgU2VtYW50aWM6OlByb2Nlc3NGaWVsZEFjY2VzcyhBc3QgKmV4cHIpCnsKICAgIEFz
dEZpZWxkQWNjZXNzICpmaWVsZF9hY2Nlc3MgPSAoQXN0RmllbGRBY2Nlc3MgKikgZXhwcjsKCiAg
ICBQcm9jZXNzQW1iaWd1b3VzTmFtZShmaWVsZF9hY2Nlc3MpOwoKICAgIFR5cGVTeW1ib2wgKnR5
cGU7CgogICAgaWYgKGZpZWxkX2FjY2VzcyAtPiBzeW1ib2wgIT0gY29udHJvbC5ub190eXBlKQog
ICAgewogICAgICAgIFBhY2thZ2VTeW1ib2wgKnBhY2thZ2UgPSBmaWVsZF9hY2Nlc3MgLT4gc3lt
Ym9sIC0+IFBhY2thZ2VDYXN0KCk7CiAgICAgICAgaWYgKHBhY2thZ2UpCiAgICAgICAgewogICAg
ICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpVTktOT1dOX0FNQklHVU9VU19O
QU1FLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gTGVmdFRva2Vu
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBSaWdodFRva2Vu
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgLT4gUGFja2FnZU5hbWUoKSk7
CiAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAg
ICAgICAgfQogICAgICAgIGVsc2UgaWYgKCh0eXBlID0gZmllbGRfYWNjZXNzIC0+IHN5bWJvbCAt
PiBUeXBlQ2FzdCgpKSAmJiAoISBmaWVsZF9hY2Nlc3MgLT4gSXNUaGlzQWNjZXNzKCkpKQogICAg
ICAgIHsKICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6VFlQRV9OT1Rf
RklFTEQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBMZWZ0VG9r
ZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfYWNjZXNzIC0+IFJpZ2h0VG9r
ZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAtPiBOYW1lKCkpOwogICAgICAg
ICAgICBmaWVsZF9hY2Nlc3MgLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAgICAgIH0K
ICAgICAgICBlbHNlICAKICAgICAgICB7CiAgICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAg
KCggKCEgZmllbGRfYWNjZXNzIC0+IHN5bWJvbCAtPiBWYXJpYWJsZUNhc3QoKSkgfHwgZmllbGRf
YWNjZXNzIC0+IHN5bWJvbCAtPiBWYXJpYWJsZUNhc3QoKSAtPiBJc1R5cGVkKCkgKSA/IDAgOgko
X19hc3NlcnRfZmFpbCAoIighIGZpZWxkX2FjY2VzcyAtPiBzeW1ib2wgLT4gVmFyaWFibGVDYXN0
KCkpIHx8IGZpZWxkX2FjY2VzcyAtPiBzeW1ib2wgLT4gVmFyaWFibGVDYXN0KCkgLT4gSXNUeXBl
ZCgpIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCAyNjcwLCBfX1BSRVRUWV9GVU5DVElP
Tl9fICksIDApKSkgOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0KCgp2b2lkIFNlbWFu
dGljOjpQcm9jZXNzQ2hhcmFjdGVyTGl0ZXJhbChBc3QgKmV4cHIpCnsKICAgIEFzdENoYXJhY3Rl
ckxpdGVyYWwgKmNoYXJfbGl0ZXJhbCA9IChBc3RDaGFyYWN0ZXJMaXRlcmFsICopIGV4cHI7Cgog
ICAgTGl0ZXJhbFN5bWJvbCAqbGl0ZXJhbCA9IGxleF9zdHJlYW0gLT4gTGl0ZXJhbFN5bWJvbChj
aGFyX2xpdGVyYWwgLT4gY2hhcmFjdGVyX2xpdGVyYWxfdG9rZW4pOwoKICAgIGlmICghIGxpdGVy
YWwgLT4gdmFsdWUpCiAgICAgICAgY29udHJvbC5pbnRfcG9vbC5GaW5kT3JJbnNlcnRDaGFyKGxp
dGVyYWwpOwogICAgaWYgKGxpdGVyYWwgLT4gdmFsdWUgPT0gY29udHJvbC5CYWRWYWx1ZSgpKQog
ICAgewogICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OklOVkFMSURfQ0hBUkFD
VEVSX1ZBTFVFLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXJfbGl0ZXJhbCAtPiBMZWZ0VG9r
ZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyX2xpdGVyYWwgLT4gUmlnaHRUb2tlbigp
KTsKICAgICAgICBjaGFyX2xpdGVyYWwgLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAg
fQogICAgZWxzZQogICAgewogICAgICAgIGNoYXJfbGl0ZXJhbCAtPiB2YWx1ZSA9IGxpdGVyYWwg
LT4gdmFsdWU7CiAgICAgICAgY2hhcl9saXRlcmFsIC0+IHN5bWJvbCA9IGNvbnRyb2wuY2hhcl90
eXBlOwogICAgfQp9CgoKdm9pZCBTZW1hbnRpYzo6UHJvY2Vzc0ludGVnZXJMaXRlcmFsKEFzdCAq
ZXhwcikKewogICAgQXN0SW50ZWdlckxpdGVyYWwgKmludF9saXRlcmFsID0gKEFzdEludGVnZXJM
aXRlcmFsICopIGV4cHI7CgogICAgTGl0ZXJhbFN5bWJvbCAqbGl0ZXJhbCA9IGxleF9zdHJlYW0g
LT4gTGl0ZXJhbFN5bWJvbChpbnRfbGl0ZXJhbCAtPiBpbnRlZ2VyX2xpdGVyYWxfdG9rZW4pOwoK
ICAgIGlmICghIGxpdGVyYWwgLT4gdmFsdWUpCiAgICAgICAgY29udHJvbC5pbnRfcG9vbC5GaW5k
T3JJbnNlcnRJbnQobGl0ZXJhbCk7CiAgICBpZiAobGl0ZXJhbCAtPiB2YWx1ZSA9PSBjb250cm9s
LkJhZFZhbHVlKCkpCiAgICB7CiAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6
SU5WQUxJRF9JTlRfVkFMVUUsCiAgICAgICAgICAgICAgICAgICAgICAgaW50X2xpdGVyYWwgLT4g
TGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgaW50X2xpdGVyYWwgLT4gUmlnaHRU
b2tlbigpKTsKICAgICAgICBpbnRfbGl0ZXJhbCAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7
CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgaW50X2xpdGVyYWwgLT4gdmFsdWUgPSBsaXRl
cmFsIC0+IHZhbHVlOwogICAgICAgIGludF9saXRlcmFsIC0+IHN5bWJvbCA9IGNvbnRyb2wuaW50
X3R5cGU7CiAgICB9Cn0KCgp2b2lkIFNlbWFudGljOjpQcm9jZXNzTG9uZ0xpdGVyYWwoQXN0ICpl
eHByKQp7CiAgICBBc3RMb25nTGl0ZXJhbCAqbG9uZ19saXRlcmFsID0gKEFzdExvbmdMaXRlcmFs
ICopIGV4cHI7CgogICAgTGl0ZXJhbFN5bWJvbCAqbGl0ZXJhbCA9IGxleF9zdHJlYW0gLT4gTGl0
ZXJhbFN5bWJvbChsb25nX2xpdGVyYWwgLT4gbG9uZ19saXRlcmFsX3Rva2VuKTsKCiAgICBpZiAo
ISBsaXRlcmFsIC0+IHZhbHVlKQogICAgICAgIGNvbnRyb2wubG9uZ19wb29sLkZpbmRPckluc2Vy
dExvbmcobGl0ZXJhbCk7CiAgICBpZiAobGl0ZXJhbCAtPiB2YWx1ZSA9PSBjb250cm9sLkJhZFZh
bHVlKCkpCiAgICB7CiAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6SU5WQUxJ
RF9MT05HX1ZBTFVFLAogICAgICAgICAgICAgICAgICAgICAgIGxvbmdfbGl0ZXJhbCAtPiBMZWZ0
VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICBsb25nX2xpdGVyYWwgLT4gUmlnaHRUb2tl
bigpKTsKICAgICAgICBsb25nX2xpdGVyYWwgLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwog
ICAgfQogICAgZWxzZQogICAgewogICAgICAgIGxvbmdfbGl0ZXJhbCAtPiB2YWx1ZSA9IGxpdGVy
YWwgLT4gdmFsdWU7CiAgICAgICAgbG9uZ19saXRlcmFsIC0+IHN5bWJvbCA9IGNvbnRyb2wubG9u
Z190eXBlOwogICAgfQp9CgoKdm9pZCBTZW1hbnRpYzo6UHJvY2Vzc0Zsb2F0aW5nUG9pbnRMaXRl
cmFsKEFzdCAqZXhwcikKewogICAgQXN0RmxvYXRpbmdQb2ludExpdGVyYWwgKmZsb2F0X2xpdGVy
YWwgPSAoQXN0RmxvYXRpbmdQb2ludExpdGVyYWwgKikgZXhwcjsKCiAgICBMaXRlcmFsU3ltYm9s
ICpsaXRlcmFsID0gbGV4X3N0cmVhbSAtPiBMaXRlcmFsU3ltYm9sKGZsb2F0X2xpdGVyYWwgLT4g
ZmxvYXRpbmdfcG9pbnRfbGl0ZXJhbF90b2tlbik7CgogICAgaWYgKCEgbGl0ZXJhbCAtPiB2YWx1
ZSkKICAgICAgICBjb250cm9sLmZsb2F0X3Bvb2wuRmluZE9ySW5zZXJ0RmxvYXQobGl0ZXJhbCk7
CiAgICBpZiAobGl0ZXJhbCAtPiB2YWx1ZSA9PSBjb250cm9sLkJhZFZhbHVlKCkpCiAgICB7CiAg
ICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6SU5WQUxJRF9GTE9BVF9WQUxVRSwK
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdF9saXRlcmFsIC0+IExlZnRUb2tlbigpLAogICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0X2xpdGVyYWwgLT4gUmlnaHRUb2tlbigpKTsKICAgICAg
ICBmbG9hdF9saXRlcmFsIC0+IHN5bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsKICAgIH0KICAgIGVs
c2UKICAgIHsKICAgICAgICBmbG9hdF9saXRlcmFsIC0+IHZhbHVlID0gbGl0ZXJhbCAtPiB2YWx1
ZTsKICAgICAgICBmbG9hdF9saXRlcmFsIC0+IHN5bWJvbCA9IGNvbnRyb2wuZmxvYXRfdHlwZTsK
ICAgIH0KfQoKCnZvaWQgU2VtYW50aWM6OlByb2Nlc3NEb3VibGVMaXRlcmFsKEFzdCAqZXhwcikK
ewogICAgQXN0RG91YmxlTGl0ZXJhbCAqZG91YmxlX2xpdGVyYWwgPSAoQXN0RG91YmxlTGl0ZXJh
bCAqKSBleHByOwoKICAgIExpdGVyYWxTeW1ib2wgKmxpdGVyYWwgPSBsZXhfc3RyZWFtIC0+IExp
dGVyYWxTeW1ib2woZG91YmxlX2xpdGVyYWwgLT4gZG91YmxlX2xpdGVyYWxfdG9rZW4pOwoKICAg
IGlmICghIGxpdGVyYWwgLT4gdmFsdWUpCiAgICAgICAgY29udHJvbC5kb3VibGVfcG9vbC5GaW5k
T3JJbnNlcnREb3VibGUobGl0ZXJhbCk7CiAgICBpZiAobGl0ZXJhbCAtPiB2YWx1ZSA9PSBjb250
cm9sLkJhZFZhbHVlKCkpCiAgICB7CiAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJv
cjo6SU5WQUxJRF9ET1VCTEVfVkFMVUUsCiAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlX2xp
dGVyYWwgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlX2xpdGVy
YWwgLT4gUmlnaHRUb2tlbigpKTsKICAgICAgICBkb3VibGVfbGl0ZXJhbCAtPiBzeW1ib2wgPSBj
b250cm9sLm5vX3R5cGU7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgZG91YmxlX2xpdGVy
YWwgLT4gdmFsdWUgPSBsaXRlcmFsIC0+IHZhbHVlOwogICAgICAgIGRvdWJsZV9saXRlcmFsIC0+
IHN5bWJvbCA9IGNvbnRyb2wuZG91YmxlX3R5cGU7CiAgICB9Cn0KCgp2b2lkIFNlbWFudGljOjpQ
cm9jZXNzVHJ1ZUxpdGVyYWwoQXN0ICpleHByKQp7CiAgICBBc3RFeHByZXNzaW9uICp0cnVlX2xp
dGVyYWwgPSAoQXN0VHJ1ZUxpdGVyYWwgKikgZXhwcjsKCiAgICB0cnVlX2xpdGVyYWwgLT4gdmFs
dWUgPSBjb250cm9sLmludF9wb29sLkZpbmRPckluc2VydCgoaW50KSAxKTsKICAgIHRydWVfbGl0
ZXJhbCAtPiBzeW1ib2wgPSBjb250cm9sLmJvb2xlYW5fdHlwZTsKfQoKCnZvaWQgU2VtYW50aWM6
OlByb2Nlc3NGYWxzZUxpdGVyYWwoQXN0ICpleHByKQp7CiAgICBBc3RFeHByZXNzaW9uICpmYWxz
ZV9saXRlcmFsID0gKEFzdEZhbHNlTGl0ZXJhbCAqKSBleHByOwoKICAgIGZhbHNlX2xpdGVyYWwg
LT4gdmFsdWUgPSBjb250cm9sLmludF9wb29sLkZpbmRPckluc2VydCgoaW50KSAwKTsKICAgIGZh
bHNlX2xpdGVyYWwgLT4gc3ltYm9sID0gY29udHJvbC5ib29sZWFuX3R5cGU7Cn0KCgp2b2lkIFNl
bWFudGljOjpQcm9jZXNzU3RyaW5nTGl0ZXJhbChBc3QgKmV4cHIpCnsKICAgIEFzdFN0cmluZ0xp
dGVyYWwgKnN0cmluZ19saXRlcmFsID0gKEFzdFN0cmluZ0xpdGVyYWwgKikgZXhwcjsKCiAgICBM
aXRlcmFsU3ltYm9sICpsaXRlcmFsID0gbGV4X3N0cmVhbSAtPiBMaXRlcmFsU3ltYm9sKHN0cmlu
Z19saXRlcmFsIC0+IHN0cmluZ19saXRlcmFsX3Rva2VuKTsKCiAgICBpZiAoISBsaXRlcmFsIC0+
IHZhbHVlKQogICAgICAgIGNvbnRyb2wuVXRmOF9wb29sLkZpbmRPckluc2VydFN0cmluZyhsaXRl
cmFsKTsKICAgIGlmIChsaXRlcmFsIC0+IHZhbHVlID09IGNvbnRyb2wuQmFkVmFsdWUoKSkKICAg
IHsKICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpJTlZBTElEX1NUUklOR19W
QUxVRSwKICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdfbGl0ZXJhbCAtPiBMZWZ0VG9rZW4o
KSwKICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdfbGl0ZXJhbCAtPiBSaWdodFRva2VuKCkp
OwogICAgICAgIHN0cmluZ19saXRlcmFsIC0+IHN5bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsKICAg
IH0KICAgIGVsc2UKICAgIHsKICAgICAgICBzdHJpbmdfbGl0ZXJhbCAtPiB2YWx1ZSA9IGxpdGVy
YWwgLT4gdmFsdWU7CiAgICAgICAgc3RyaW5nX2xpdGVyYWwgLT4gc3ltYm9sID0gY29udHJvbC5T
dHJpbmcoKTsKICAgIH0KfQoKCnZvaWQgU2VtYW50aWM6OlByb2Nlc3NBcnJheUFjY2VzcyhBc3Qg
KmV4cHIpCnsKICAgIEFzdEFycmF5QWNjZXNzICphcnJheV9hY2Nlc3MgPSAoQXN0QXJyYXlBY2Nl
c3MgKikgZXhwcjsKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBTeW1ib2xTZXQg
KmV4Y2VwdGlvbl9zZXQgPSBUcnlFeGNlcHRpb25UYWJsZVN0YWNrKCkuVG9wKCk7CiAgICBpZiAo
ZXhjZXB0aW9uX3NldCkKICAgIHsKICAgICAgICBleGNlcHRpb25fc2V0IC0+IEFkZEVsZW1lbnQo
Y29udHJvbC5SdW50aW1lRXhjZXB0aW9uKCkpOwogICAgfQoKICAgIFByb2Nlc3NFeHByZXNzaW9u
KGFycmF5X2FjY2VzcyAtPiBiYXNlKTsKICAgIFByb2Nlc3NFeHByZXNzaW9uKGFycmF5X2FjY2Vz
cyAtPiBleHByZXNzaW9uKTsKICAgIGFycmF5X2FjY2VzcyAtPiBleHByZXNzaW9uID0gUHJvbW90
ZVVuYXJ5TnVtZXJpY0V4cHJlc3Npb24oYXJyYXlfYWNjZXNzIC0+IGV4cHJlc3Npb24pOwogICAg
aWYgKGFycmF5X2FjY2VzcyAtPiBleHByZXNzaW9uIC0+IFR5cGUoKSAhPSBjb250cm9sLmludF90
eXBlICYmIGFycmF5X2FjY2VzcyAtPiBleHByZXNzaW9uIC0+IHN5bWJvbCAhPSBjb250cm9sLm5v
X3R5cGUpCiAgICB7CiAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6VFlQRV9O
T1RfSU5URUdFUiwKICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9hY2Nlc3MgLT4gZXhwcmVz
c2lvbiAtPiBMZWZ0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9hY2Nlc3Mg
LT4gZXhwcmVzc2lvbiAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgYXJy
YXlfYWNjZXNzIC0+IGV4cHJlc3Npb24gLT4gVHlwZSgpIC0+IE5hbWUoKSk7CiAgICB9CgogICAg
VHlwZVN5bWJvbCAqYXJyYXlfdHlwZSA9IGFycmF5X2FjY2VzcyAtPiBiYXNlIC0+IFR5cGUoKTsK
ICAgIGlmIChhcnJheV90eXBlIC0+IElzQXJyYXkoKSkKICAgICAgICBhcnJheV9hY2Nlc3MgLT4g
c3ltYm9sID0gYXJyYXlfdHlwZSAtPiBBcnJheVN1YnR5cGUoKTsKICAgIGVsc2UKICAgIHsKICAg
ICAgICBpZiAoYXJyYXlfdHlwZSAhPSBjb250cm9sLm5vX3R5cGUpCiAgICAgICAgICAgIFJlcG9y
dFNlbUVycm9yKFNlbWFudGljRXJyb3I6OlRZUEVfTk9UX0FSUkFZLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcnJheV9hY2Nlc3MgLT4gYmFzZSAtPiBMZWZ0VG9rZW4oKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJyYXlfYWNjZXNzIC0+IGJhc2UgLT4gUmlnaHRUb2tlbigpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9hY2Nlc3MgLT4gYmFzZSAtPiBUeXBlKCkg
LT4gTmFtZSgpKTsKICAgICAgICBhcnJheV9hY2Nlc3MgLT4gc3ltYm9sID0gY29udHJvbC5ub190
eXBlOwogICAgfQoKICAgIHJldHVybjsKfQoKCk1ldGhvZFN5bWJvbCAqU2VtYW50aWM6OkZpbmRN
ZXRob2RNZW1iZXIoVHlwZVN5bWJvbCAqdHlwZSwgVHlwZVN5bWJvbCAqZW52aXJvbm1lbnRfdHlw
ZSwgQXN0TWV0aG9kSW52b2NhdGlvbiAqbWV0aG9kX2NhbGwpCnsKICAgIE1ldGhvZFN5bWJvbCAq
bWV0aG9kID0gX19udWxsIDsKICAgIEFzdEZpZWxkQWNjZXNzICpmaWVsZF9hY2Nlc3MgPSBtZXRo
b2RfY2FsbCAtPiBtZXRob2QgLT4gRmllbGRBY2Nlc3NDYXN0KCk7CgogICAgaWYgKHR5cGUgLT4g
QmFkKCkpCiAgICB7CiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAg
ICAgICAKICAgICAgICAgCiAgICAgICAgaWYgKE51bUVycm9ycygpID09IDApCiAgICAgICAgICAg
IFJlcG9ydE1ldGhvZE5vdEZvdW5kKG1ldGhvZF9jYWxsLCBsZXhfc3RyZWFtIC0+IE5hbWVTdHJp
bmcoZmllbGRfYWNjZXNzIC0+IGlkZW50aWZpZXJfdG9rZW4pKTsKICAgICAgICBtZXRob2RfY2Fs
bCAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICB9CiAgICBlbHNlIGlmICh0eXBlID09
IGNvbnRyb2wubnVsbF90eXBlIHx8IHR5cGUgLT4gUHJpbWl0aXZlKCkpCiAgICB7CiAgICAgICAg
UmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6VFlQRV9OT1RfUkVGRVJFTkNFLAogICAgICAg
ICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBiYXNlIC0+IExlZnRUb2tlbigpLAogICAg
ICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBiYXNlIC0+IFJpZ2h0VG9rZW4oKSwK
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlIC0+IE5hbWUoKSk7CiAgICAgICAgbWV0aG9kX2Nh
bGwgLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAgfQogICAgZWxzZQogICAgewogICAg
ICAgIFR5cGVTeW1ib2wgKnRoaXNfdHlwZSA9IFRoaXNUeXBlKCk7CiAgICAgICAgVHlwZUFjY2Vz
c0NoZWNrKGZpZWxkX2FjY2VzcyAtPiBiYXNlLCB0eXBlKTsKCiAgICAgICAgbWV0aG9kID0gRmlu
ZE1ldGhvZEluVHlwZSh0eXBlLCBtZXRob2RfY2FsbCk7CgogICAgICAgIGlmIChtZXRob2QpCiAg
ICAgICAgewogICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIG1ldGhvZCAtPiBJc1R5
cGVkKCkgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoIm1ldGhvZCAtPiBJc1R5cGVkKCkiICwgIi4u
Ly4uL2ppa2VzL3NyYy9leHByLmNwcCIsIDI5MTEsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkp
KSA7CgogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAg
ICBpZiAodGhpc190eXBlICE9IG1ldGhvZCAtPiBjb250YWluaW5nX3R5cGUgJiYKICAgICAgICAg
ICAgICAgIHRoaXNfdHlwZSAtPiBvdXRlcm1vc3RfdHlwZSA9PSBlbnZpcm9ubWVudF90eXBlIC0+
IG91dGVybW9zdF90eXBlICYmCiAgICAgICAgICAgICAgICAobWV0aG9kIC0+IEFDQ19QUklWQVRF
KCkgfHwKICAgICAgICAgICAgICAgICAobWV0aG9kIC0+IEFDQ19QUk9URUNURUQoKSAmJgogICAg
ICAgICAgICAgICAgICBtZXRob2QgLT4gY29udGFpbmluZ190eXBlIC0+IENvbnRhaW5pbmdQYWNr
YWdlKCkgIT0gZW52aXJvbm1lbnRfdHlwZSAtPiBDb250YWluaW5nUGFja2FnZSgpKSkpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggKCEgbWV0aG9k
IC0+IEFDQ19QUklWQVRFKCkpIHx8IG1ldGhvZCAtPiBjb250YWluaW5nX3R5cGUgPT0gZW52aXJv
bm1lbnRfdHlwZSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiKCEgbWV0aG9kIC0+IEFDQ19QUklW
QVRFKCkpIHx8IG1ldGhvZCAtPiBjb250YWluaW5nX3R5cGUgPT0gZW52aXJvbm1lbnRfdHlwZSIg
LCAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiwgMjkyMiwgX19QUkVUVFlfRlVOQ1RJT05fXyAp
LCAwKSkpIDsKCiAgICAgICAgICAgICAgICBpZiAobWV0aG9kIC0+IEFDQ19TVEFUSUMoKSkKICAg
ICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBzeW1ib2wgPSBlbnZpcm9ubWVudF90eXBl
IC0+IEdldFJlYWRBY2Nlc3NNZXRob2QobWV0aG9kKTsKICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBBc3RNZXRob2RJbnZvY2F0aW9uICpv
bGRfbWV0aG9kX2NhbGwgPSBtZXRob2RfY2FsbDsKCiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgQXN0TWV0aG9kSW52b2NhdGlvbiAqbWV0aG9kX2NhbGwgICAgICAgPSBjb21waWxhdGlvbl91
bml0IC0+IGFzdF9wb29sIC0+IEdlbk1ldGhvZEludm9jYXRpb24oKTsKICAgICAgICAgICAgICAg
ICAgICBtZXRob2RfY2FsbCAtPiBtZXRob2QgICAgICAgICAgICAgICAgICA9IG9sZF9tZXRob2Rf
Y2FsbCAtPiBtZXRob2Q7CiAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2NhbGwgLT4gbGVmdF9w
YXJlbnRoZXNpc190b2tlbiAgPSBvbGRfbWV0aG9kX2NhbGwgLT4gbGVmdF9wYXJlbnRoZXNpc190
b2tlbjsKICAgICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiByaWdodF9wYXJlbnRoZXNp
c190b2tlbiA9IG9sZF9tZXRob2RfY2FsbCAtPiByaWdodF9wYXJlbnRoZXNpc190b2tlbjsKICAg
ICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBzeW1ib2wgICAgICAgICAgICAgICAgICA9
IGVudmlyb25tZW50X3R5cGUgLT4gR2V0UmVhZEFjY2Vzc01ldGhvZChtZXRob2QpOwogICAgICAg
ICAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IEFkZEFyZ3VtZW50KGZpZWxkX2FjY2VzcyAtPiBi
YXNlKTsKICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9sZF9tZXRob2Rf
Y2FsbCAtPiBOdW1Bcmd1bWVudHMoKTsgaSsrKQogICAgICAgICAgICAgICAgICAgICAgICBtZXRo
b2RfY2FsbCAtPiBBZGRBcmd1bWVudChvbGRfbWV0aG9kX2NhbGwgLT4gQXJndW1lbnQoaSkpOwoK
ICAgICAgICAgICAgICAgICAgICBvbGRfbWV0aG9kX2NhbGwgLT4gc3ltYm9sID0gbWV0aG9kOwog
ICAgICAgICAgICAgICAgICAgIG9sZF9tZXRob2RfY2FsbCAtPiByZXNvbHV0aW9uX29wdCA9IG1l
dGhvZF9jYWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbWV0aG9kX2NhbGwgLT4gc3ltYm9sID0g
bWV0aG9kOwogICAgICAgICAgICAgICAgTWVtYmVyQWNjZXNzQ2hlY2soZmllbGRfYWNjZXNzLCB0
eXBlLCBtZXRob2QpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgbWV0aG9k
X2NhbGwgLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAgfQoKICAgIHJldHVybiBtZXRo
b2Q7Cn0KCgp2b2lkIFNlbWFudGljOjpQcm9jZXNzTWV0aG9kTmFtZShBc3RNZXRob2RJbnZvY2F0
aW9uICptZXRob2RfY2FsbCkKewogICAgVHlwZVN5bWJvbCAqdGhpc190eXBlID0gVGhpc1R5cGUo
KTsKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAg
CiAgICAgCiAgICBTeW1ib2xTZXQgKmV4Y2VwdGlvbl9zZXQgPSBUcnlFeGNlcHRpb25UYWJsZVN0
YWNrKCkuVG9wKCk7CiAgICBpZiAoZXhjZXB0aW9uX3NldCkKICAgIHsKICAgICAgICBleGNlcHRp
b25fc2V0IC0+IEFkZEVsZW1lbnQoY29udHJvbC5FcnJvcigpKTsKICAgIH0KCiAgICBBc3RTaW1w
bGVOYW1lICpzaW1wbGVfbmFtZTsKICAgIGlmICgoc2ltcGxlX25hbWUgPSBtZXRob2RfY2FsbCAt
PiBtZXRob2QgLT4gU2ltcGxlTmFtZUNhc3QoKSkpCiAgICB7CiAgICAgICAgU2VtYW50aWNFbnZp
cm9ubWVudCAqd2hlcmVfZm91bmQ7CiAgICAgICAgTWV0aG9kU3ltYm9sICptZXRob2QgPSBGaW5k
TWV0aG9kSW5FbnZpcm9ubWVudCh3aGVyZV9mb3VuZCwgc3RhdGVfc3RhY2suVG9wKCksIG1ldGhv
ZF9jYWxsKTsKCiAgICAgICAgaWYgKCEgbWV0aG9kKQogICAgICAgICAgICBtZXRob2RfY2FsbCAt
PiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAg
ICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBtZXRob2QgLT4gSXNUeXBlZCgpICkgPyAwIDoJ
KF9fYXNzZXJ0X2ZhaWwgKCJtZXRob2QgLT4gSXNUeXBlZCgpIiAsICIuLi8uLi9qaWtlcy9zcmMv
ZXhwci5jcHAiLCAyOTg5LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgICAgICAg
ICAgaWYgKCEgbWV0aG9kIC0+IEFDQ19TVEFUSUMoKSkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgaWYgKFN0YXRpY1JlZ2lvbigpKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6Ok1FVEhPRF9OT1Rf
Q0xBU1NfTUVUSE9ELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZV9u
YW1lIC0+IGlkZW50aWZpZXJfdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWV0aG9kX2NhbGwgLT4gcmlnaHRfcGFyZW50aGVzaXNfdG9rZW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGV4X3N0cmVhbSAtPiBOYW1lU3RyaW5nKHNpbXBsZV9uYW1l
IC0+IGlkZW50aWZpZXJfdG9rZW4pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IGVsc2UgaWYgKEV4cGxpY2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKCkpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNfdHlwZSAtPiBJc1N1YmNsYXNzKG1ldGhv
ZCAtPiBjb250YWluaW5nX3R5cGUpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6
OklOU1RBTkNFX01FVEhPRF9JTl9FWFBMSUNJVF9DT05TVFJVQ1RPUl9JTlZPQ0FUSU9OLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBMZWZ0VG9r
ZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2NhbGwg
LT4gUmlnaHRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
ZXRob2QgLT4gSGVhZGVyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1ldGhvZCAtPiBjb250YWluaW5nX3R5cGUgLT4gTmFtZSgpKTsKICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG1ldGhvZF9j
YWxsIC0+IHN5bWJvbCA9IG1ldGhvZDsKCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHdoZXJlX2ZvdW5kICE9IHN0
YXRlX3N0YWNrLlRvcCgpKQogICAgICAgICAgICAgICAgQ3JlYXRlQWNjZXNzVG9TY29wZWRNZXRo
b2QobWV0aG9kX2NhbGwsIHdoZXJlX2ZvdW5kIC0+IFR5cGUoKSk7CiAgICAgICAgfQogICAgfQog
ICAgZWxzZQogICAgewogICAgICAgIEFzdEZpZWxkQWNjZXNzICpmaWVsZF9hY2Nlc3MgPSBtZXRo
b2RfY2FsbCAtPiBtZXRob2QgLT4gRmllbGRBY2Nlc3NDYXN0KCk7CiAgICAgICAgQXN0RXhwcmVz
c2lvbiogYmFzZSA9IGZpZWxkX2FjY2VzcyAtPiBiYXNlOwogICAgICAgIEFzdEZpZWxkQWNjZXNz
ICpzdWJfZmllbGRfYWNjZXNzID0gYmFzZSAtPiBGaWVsZEFjY2Vzc0Nhc3QoKTsKCiAgICAgICAg
aWYgKGJhc2UgLT4gU2ltcGxlTmFtZUNhc3QoKSB8fCBzdWJfZmllbGRfYWNjZXNzKQogICAgICAg
ICAgICBQcm9jZXNzQW1iaWd1b3VzTmFtZShiYXNlKTsKICAgICAgICBlbHNlICAKICAgICAgICAg
ICAgUHJvY2Vzc0V4cHJlc3Npb25PclN0cmluZ0NvbnN0YW50KGJhc2UpOwoKICAgICAgICBpZiAo
YmFzZSAtPiBzeW1ib2wgPT0gY29udHJvbC5ub190eXBlKQogICAgICAgIHsKICAgICAgICAgICAg
bWV0aG9kX2NhbGwgLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAgICAgICAgICByZXR1
cm47CiAgICAgICAgfQoKICAgICAgICBUeXBlU3ltYm9sICp0eXBlID0gX19udWxsIDsKICAgICAg
ICBTeW1ib2wgKnN5bWJvbCA9IGJhc2UgLT4gc3ltYm9sOwoKICAgICAgICAgCiAgICAgICAgIAog
ICAgICAgICAKICAgICAgICBpZiAoc3ViX2ZpZWxkX2FjY2VzcyAmJiBzdWJfZmllbGRfYWNjZXNz
IC0+IElzU3VwZXJBY2Nlc3MoKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChzdWJfZmllbGRf
YWNjZXNzIC0+IFR5cGUoKSA9PSBjb250cm9sLm5vX3R5cGUpCiAgICAgICAgICAgICAgICBtZXRo
b2RfY2FsbCAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICAgICAgICAgIGVsc2UgaWYg
KHN1Yl9maWVsZF9hY2Nlc3MgLT4gVHlwZSgpID09IGNvbnRyb2wuT2JqZWN0KCkpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6Ok9CSkVD
VF9IQVNfTk9fU1VQRVJfVFlQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9m
aWVsZF9hY2Nlc3MgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdWJfZmllbGRfYWNjZXNzIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN1Yl9maWVsZF9hY2Nlc3MgLT4gVHlwZSgpIC0+IENvbnRhaW5pbmdQYWNrYWdl
KCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9m
aWVsZF9hY2Nlc3MgLT4gVHlwZSgpIC0+IEV4dGVybmFsTmFtZSgpKTsKICAgICAgICAgICAgICAg
IG1ldGhvZF9jYWxsIC0+IHN5bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsKICAgICAgICAgICAgfQog
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE1ldGhvZFN5bWJv
bCAqbWV0aG9kID0gRmluZE1ldGhvZE1lbWJlcihzdWJfZmllbGRfYWNjZXNzIC0+IFR5cGUoKSAt
PiBzdXBlciwgc3ViX2ZpZWxkX2FjY2VzcyAtPiBUeXBlKCksIG1ldGhvZF9jYWxsKTsKICAgICAg
ICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBiYXNlID0gQ29udmVydFRvVHlwZShzdWJfZmllbGRf
YWNjZXNzLCBzdWJfZmllbGRfYWNjZXNzIC0+IFR5cGUoKSAtPiBzdXBlcik7CgogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKG1ldGhvZCAmJiBtZXRo
b2QgLT4gQUNDX0FCU1RSQUNUKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6QUJTVFJBQ1RfTUVUSE9EX0lOVk9DQVRJ
T04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfYWNjZXNzIC0+IExl
ZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2Vz
cyAtPiBpZGVudGlmaWVyX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxleF9zdHJlYW0gLT4gTmFtZVN0cmluZyhmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tl
bikpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVs
c2UgaWYgKCh0eXBlID0gc3ltYm9sIC0+IFR5cGVDYXN0KCkpKQogICAgICAgIHsKICAgICAgICAg
ICAgaWYgKHR5cGUgLT4gQmFkKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmIChOdW1FcnJv
cnMoKSA9PSAwKQogICAgICAgICAgICAgICAgICAgIFJlcG9ydE1ldGhvZE5vdEZvdW5kKG1ldGhv
ZF9jYWxsLCBsZXhfc3RyZWFtIC0+IE5hbWVTdHJpbmcoZmllbGRfYWNjZXNzIC0+IGlkZW50aWZp
ZXJfdG9rZW4pKTsKICAgICAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IHN5bWJvbCA9IGNvbnRy
b2wubm9fdHlwZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IGNv
bnRyb2wubnVsbF90eXBlIHx8IHR5cGUgLT4gUHJpbWl0aXZlKCkpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OlRZUEVfTk9UX1JFRkVS
RU5DRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgLT4gTGVmdFRva2VuKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlIC0+IFJpZ2h0VG9rZW4oKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgLT4gTmFtZSgpKTsKICAgICAgICAgICAg
ICAgIG1ldGhvZF9jYWxsIC0+IHN5bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsKICAgICAgICAgICAg
fQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFR5cGVBY2Nl
c3NDaGVjayhiYXNlLCB0eXBlKTsKCiAgICAgICAgICAgICAgICBNZXRob2RTeW1ib2wgKm1ldGhv
ZCA9IEZpbmRNZXRob2RJblR5cGUodHlwZSwgbWV0aG9kX2NhbGwpOwoKICAgICAgICAgICAgICAg
IGlmIChtZXRob2QpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKHN0YXRp
Y19jYXN0PHZvaWQ+ICAoKCBtZXRob2QgLT4gSXNUeXBlZCgpICkgPyAwIDoJKF9fYXNzZXJ0X2Zh
aWwgKCJtZXRob2QgLT4gSXNUeXBlZCgpIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCAz
MTIzLCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgICAgICAgICAgICAgICAgICBp
ZiAoYmFzZSAtPiBJc05hbWUoKSAmJiAoISBtZXRob2QgLT4gQUNDX1NUQVRJQygpKSkKICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNl
bWFudGljRXJyb3I6Ok1FVEhPRF9OT1RfQ0xBU1NfTUVUSE9ELAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gTGVmdFRva2VuKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBpZGVudGlmaWVy
X3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXhfc3RyZWFt
IC0+IE5hbWVTdHJpbmcoZmllbGRfYWNjZXNzIC0+IGlkZW50aWZpZXJfdG9rZW4pKTsKICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChiYXNlIC0+IElzU3VwZXJF
eHByZXNzaW9uKCkgJiYgbWV0aG9kIC0+IEFDQ19BQlNUUkFDVCgpKQogICAgICAgICAgICAgICAg
ICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpBQlNUUkFDVF9NRVRIT0RfSU5W
T0NBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfYWNj
ZXNzIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGV4X3N0cmVhbSAtPiBOYW1lU3RyaW5nKGZpZWxkX2FjY2VzcyAt
PiBpZGVudGlmaWVyX3Rva2VuKSk7CgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGlmICgg
dGhpc190eXBlICE9IG1ldGhvZCAtPiBjb250YWluaW5nX3R5cGUgJiYKICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXNfdHlwZSAtPiBvdXRlcm1vc3RfdHlwZSA9PSB0eXBlIC0+IG91dGVybW9z
dF90eXBlICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAobWV0aG9kIC0+IEFDQ19QUklWQVRF
KCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAobWV0aG9kIC0+IEFDQ19QUk9URUNURUQo
KSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdl
KCkgIT0gbWV0aG9kIC0+IGNvbnRhaW5pbmdfdHlwZSAtPiBDb250YWluaW5nUGFja2FnZSgpKSkp
CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nh
c3Q8dm9pZD4gICgoICghIG1ldGhvZCAtPiBBQ0NfUFJJVkFURSgpKSB8fCB0eXBlID09IG1ldGhv
ZCAtPiBjb250YWluaW5nX3R5cGUgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoIighIG1ldGhvZCAt
PiBBQ0NfUFJJVkFURSgpKSB8fCB0eXBlID09IG1ldGhvZCAtPiBjb250YWluaW5nX3R5cGUiICwg
Ii4uLy4uL2ppa2VzL3NyYy9leHByLmNwcCIsIDMxNTIsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwg
MCkpKSA7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kIC0+IEFDQ19TVEFUSUMo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IHN5bWJvbCA9IHR5
cGUgLT4gR2V0UmVhZEFjY2Vzc01ldGhvZChtZXRob2QpOwogICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFzdE1ldGhvZEludm9jYXRpb24gKm9sZF9tZXRob2RfY2FsbCA9IG1ldGhvZF9jYWxsOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFzdE1ldGhvZEludm9jYXRpb24gKm1ldGhvZF9jYWxsICAgICAgID0gY29tcGlsYXRpb25f
dW5pdCAtPiBhc3RfcG9vbCAtPiBHZW5NZXRob2RJbnZvY2F0aW9uKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBtZXRob2QgICAgICAgICAgICAgICAgICA9IG9s
ZF9tZXRob2RfY2FsbCAtPiBtZXRob2Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRo
b2RfY2FsbCAtPiBsZWZ0X3BhcmVudGhlc2lzX3Rva2VuICA9IG9sZF9tZXRob2RfY2FsbCAtPiBs
ZWZ0X3BhcmVudGhlc2lzX3Rva2VuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9k
X2NhbGwgLT4gcmlnaHRfcGFyZW50aGVzaXNfdG9rZW4gPSBvbGRfbWV0aG9kX2NhbGwgLT4gcmln
aHRfcGFyZW50aGVzaXNfdG9rZW47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Rf
Y2FsbCAtPiBzeW1ib2wgICAgICAgICAgICAgICAgICA9IHR5cGUgLT4gR2V0UmVhZEFjY2Vzc01l
dGhvZChtZXRob2QpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX2NhbGwgLT4g
QWRkQXJndW1lbnQoZmllbGRfYWNjZXNzIC0+IGJhc2UpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvbGRfbWV0aG9kX2NhbGwgLT4gTnVtQXJndW1lbnRz
KCk7IGkrKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBB
ZGRBcmd1bWVudChvbGRfbWV0aG9kX2NhbGwgLT4gQXJndW1lbnQoaSkpOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9sZF9tZXRob2RfY2FsbCAtPiBzeW1ib2wgPSBtZXRob2Q7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvbGRfbWV0aG9kX2NhbGwgLT4gcmVzb2x1dGlvbl9vcHQg
PSBtZXRob2RfY2FsbDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBzeW1ib2wgPSBtZXRob2Q7CiAgICAg
ICAgICAgICAgICAgICAgICAgIE1lbWJlckFjY2Vzc0NoZWNrKGZpZWxkX2FjY2VzcywgdHlwZSwg
bWV0aG9kKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICBlbHNlIG1ldGhvZF9jYWxsIC0+IHN5bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAg
ICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICBlbHNlIGlmIChzeW1ib2wgLT4gVmFyaWFi
bGVDYXN0KCkpCiAgICAgICAgewogICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIHN5
bWJvbCAtPiBWYXJpYWJsZUNhc3QoKSAtPiBJc1R5cGVkKCkgKSA/IDAgOgkoX19hc3NlcnRfZmFp
bCAoInN5bWJvbCAtPiBWYXJpYWJsZUNhc3QoKSAtPiBJc1R5cGVkKCkiICwgIi4uLy4uL2ppa2Vz
L3NyYy9leHByLmNwcCIsIDMxOTMsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogICAg
ICAgICAgICB0eXBlID0gc3ltYm9sIC0+IFZhcmlhYmxlQ2FzdCgpIC0+IFR5cGUoKTsKCiAgICAg
ICAgICAgICh2b2lkKSBGaW5kTWV0aG9kTWVtYmVyKHR5cGUsIHR5cGUsIG1ldGhvZF9jYWxsKTsK
ICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoc3ltYm9sIC0+IE1ldGhvZENhc3QoKSkKICAgICAg
ICB7CiAgICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggc3ltYm9sIC0+IE1ldGhvZENh
c3QoKSAtPiBJc1R5cGVkKCkgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInN5bWJvbCAtPiBNZXRo
b2RDYXN0KCkgLT4gSXNUeXBlZCgpIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCAzMjAx
LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgICAgICAgICAgdHlwZSA9IHN5bWJv
bCAtPiBNZXRob2RDYXN0KCkgLT4gVHlwZSgpOwoKICAgICAgICAgICAgKHZvaWQpIEZpbmRNZXRo
b2RNZW1iZXIodHlwZSwgdHlwZSwgbWV0aG9kX2NhbGwpOwogICAgICAgIH0KICAgICAgICBlbHNl
ICAKICAgICAgICB7CiAgICAgICAgICAgIFBhY2thZ2VTeW1ib2wgKnBhY2thZ2UgPSBzeW1ib2wg
LT4gUGFja2FnZUNhc3QoKTsKICAgICAgICAgICAgTmFtZVN5bWJvbCAqbmFtZV9zeW1ib2wgPSBs
ZXhfc3RyZWFtIC0+IE5hbWVTeW1ib2woZmllbGRfYWNjZXNzIC0+IGlkZW50aWZpZXJfdG9rZW4p
OwoKICAgICAgICAgICAgaWYgKHBhY2thZ2UgJiYgKHBhY2thZ2UgLT4gRmluZFR5cGVTeW1ib2wo
bmFtZV9zeW1ib2wpIHx8IENvbnRyb2w6OkdldEZpbGUoY29udHJvbCwgcGFja2FnZSwgbmFtZV9z
eW1ib2wpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2Vt
YW50aWNFcnJvcjo6VFlQRV9OT1RfTUVUSE9ELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmllbGRfYWNjZXNzIC0+IGlkZW50aWZpZXJfdG9rZW4sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gaWRlbnRpZmllcl90b2tlbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWVfc3ltYm9sIC0+IE5hbWUoKSk7CiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBSZXBvcnRTZW1F
cnJvcihTZW1hbnRpY0Vycm9yOjpVTktOT1dOX1FVQUxJRklFRF9OQU1FX0JBU0UsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9hY2Nlc3MgLT4gYmFzZSAtPiBMZWZ0VG9rZW4o
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2FjY2VzcyAtPiBiYXNlIC0+
IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbCAtPiBO
YW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IHN5bWJvbCA9
IGNvbnRyb2wubm9fdHlwZTsKICAgICAgICB9CgogICAgICAgIGlmICh0eXBlKQogICAgICAgIHsK
ICAgICAgICAgICAgVHlwZVN5bWJvbCAqcGFyZW50X3R5cGUgPSAodHlwZSAtPiBJc0FycmF5KCkg
PyB0eXBlIC0+IGJhc2VfdHlwZSA6IHR5cGUpOwogICAgICAgICAgICBpZiAoISBwYXJlbnRfdHlw
ZSAtPiBQcmltaXRpdmUoKSkKICAgICAgICAgICAgICAgIEFkZERlcGVuZGVuY2UodGhpc190eXBl
LCBwYXJlbnRfdHlwZSwgZmllbGRfYWNjZXNzIC0+IGlkZW50aWZpZXJfdG9rZW4pOwogICAgICAg
IH0KICAgIH0KCiAgICBpZiAobWV0aG9kX2NhbGwgLT4gc3ltYm9sICE9IGNvbnRyb2wubm9fdHlw
ZSkKICAgIHsKICAgICAgICBNZXRob2RTeW1ib2wgKm1ldGhvZCA9IChNZXRob2RTeW1ib2wgKikg
bWV0aG9kX2NhbGwgLT4gc3ltYm9sOwoKICAgICAgICBpZiAoZXhjZXB0aW9uX3NldCkKICAgICAg
ICB7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSBtZXRob2QgLT4gTnVtVGhyb3dzKCkgLSAxOyBp
ID49IDA7IGktLSkKICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9zZXQgLT4gQWRkRWxlbWVudCht
ZXRob2QgLT4gVGhyb3dzKGkpKTsKCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoISBtZXRo
b2QgLT4gQUNDX1NUQVRJQygpKQogICAgICAgICAgICAgICAgZXhjZXB0aW9uX3NldCAtPiBBZGRF
bGVtZW50KGNvbnRyb2wuUnVudGltZUV4Y2VwdGlvbigpKTsKCiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAKICAgICAgICB9CgogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAK
ICAgICAgICBpZiAoISAodGhpc190eXBlIC0+IEFub255bW91cygpICYmIFRoaXNNZXRob2QoKSAm
JiBUaGlzTWV0aG9kKCkgLT4gSWRlbnRpdHkoKSA9PSBjb250cm9sLmJsb2NrX2luaXRfbmFtZV9z
eW1ib2wpKQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChpbnQgayA9IG1ldGhvZCAtPiBOdW1U
aHJvd3MoKSAtIDE7IGsgPj0gMDsgay0tKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBU
eXBlU3ltYm9sICpleGNlcHRpb24gPSBtZXRob2QgLT4gVGhyb3dzKGspOwogICAgICAgICAgICAg
ICAgaWYgKCEgQ2F0Y2hhYmxlRXhjZXB0aW9uKGV4Y2VwdGlvbikpCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6VU5DQVRD
SEFCTEVfTUVUSE9EX1RIUk9XTl9DSEVDS0VEX0VYQ0VQVElPTiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBMZWZ0VG9rZW4oKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RfY2FsbCAtPiBSaWdodFRva2VuKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kIC0+IEhlYWRlcigpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbiAtPiBDb250YWluaW5nUGFja2Fn
ZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXhjZXB0aW9uIC0+IEV4dGVybmFsTmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgfQogICAgICAgIH0KCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgbWV0
aG9kX2NhbGwgPSAobWV0aG9kX2NhbGwgLT4gcmVzb2x1dGlvbl9vcHQgPyAoQXN0TWV0aG9kSW52
b2NhdGlvbiAqKSBtZXRob2RfY2FsbCAtPiByZXNvbHV0aW9uX29wdCA6IG1ldGhvZF9jYWxsKTsK
ICAgICAgICBtZXRob2QgPSAoTWV0aG9kU3ltYm9sICopIG1ldGhvZF9jYWxsIC0+IHN5bWJvbDsK
CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBtZXRob2RfY2FsbCAtPiBOdW1Bcmd1bWVu
dHMoKSA9PSBtZXRob2QgLT4gTnVtRm9ybWFsUGFyYW1ldGVycygpICkgPyAwIDoJKF9fYXNzZXJ0
X2ZhaWwgKCJtZXRob2RfY2FsbCAtPiBOdW1Bcmd1bWVudHMoKSA9PSBtZXRob2QgLT4gTnVtRm9y
bWFsUGFyYW1ldGVycygpIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCAzMjkzLCBfX1BS
RVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1l
dGhvZF9jYWxsIC0+IE51bUFyZ3VtZW50cygpOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBB
c3RFeHByZXNzaW9uICpleHByID0gbWV0aG9kX2NhbGwgLT4gQXJndW1lbnQoaSk7CiAgICAgICAg
ICAgIGlmIChleHByIC0+IFR5cGUoKSAhPSBtZXRob2QgLT4gRm9ybWFsUGFyYW1ldGVyKGkpIC0+
IFR5cGUoKSkKICAgICAgICAgICAgICAgIG1ldGhvZF9jYWxsIC0+IEFyZ3VtZW50KGkpID0gQ29u
dmVydFRvVHlwZShleHByLCBtZXRob2QgLT4gRm9ybWFsUGFyYW1ldGVyKGkpIC0+IFR5cGUoKSk7
CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybjsKfQoKCnZvaWQgU2VtYW50aWM6OlByb2Nlc3NN
ZXRob2RJbnZvY2F0aW9uKEFzdCAqZXhwcikKewogICAgQXN0TWV0aG9kSW52b2NhdGlvbiAqbWV0
aG9kX2NhbGwgPSAoQXN0TWV0aG9kSW52b2NhdGlvbiAqKSBleHByOwoKICAgIGJvb2wgbm9fYmFk
X2FyZ3VtZW50ID0gdHJ1ZTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1ldGhvZF9jYWxsIC0+
IE51bUFyZ3VtZW50cygpOyBpKyspCiAgICB7CiAgICAgICAgQXN0RXhwcmVzc2lvbiAqZXhwciA9
IG1ldGhvZF9jYWxsIC0+IEFyZ3VtZW50KGkpOwogICAgICAgIFByb2Nlc3NFeHByZXNzaW9uT3JT
dHJpbmdDb25zdGFudChleHByKTsKICAgICAgICBub19iYWRfYXJndW1lbnQgPSBub19iYWRfYXJn
dW1lbnQgJiYgKGV4cHIgLT4gc3ltYm9sICE9IGNvbnRyb2wubm9fdHlwZSk7CiAgICB9CgogICAg
aWYgKG5vX2JhZF9hcmd1bWVudCkKICAgICAgICAgUHJvY2Vzc01ldGhvZE5hbWUobWV0aG9kX2Nh
bGwpOwogICAgZWxzZSBtZXRob2RfY2FsbCAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7Cgog
ICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBtZXRob2RfY2FsbCAtPiBzeW1ib2wgPT0gY29udHJv
bC5ub190eXBlIHx8ICgoTWV0aG9kU3ltYm9sICopIG1ldGhvZF9jYWxsIC0+IHN5bWJvbCkgLT4g
SXNUeXBlZCgpICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJtZXRob2RfY2FsbCAtPiBzeW1ib2wg
PT0gY29udHJvbC5ub190eXBlIHx8ICgoTWV0aG9kU3ltYm9sICopIG1ldGhvZF9jYWxsIC0+IHN5
bWJvbCkgLT4gSXNUeXBlZCgpIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCAzMzI0LCBf
X1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgIHJldHVybjsKfQoKCnZvaWQgU2VtYW50
aWM6OlByb2Nlc3NOdWxsTGl0ZXJhbChBc3QgKmV4cHIpCnsKICAgICAKICAgICAKICAgICAKICAg
IEFzdE51bGxMaXRlcmFsICpudWxsX2xpdGVyYWwgPSAoQXN0TnVsbExpdGVyYWwgKikgZXhwcjsK
ICAgIG51bGxfbGl0ZXJhbCAtPiBzeW1ib2wgPSBjb250cm9sLm51bGxfdHlwZTsKCiAgICByZXR1
cm47Cn0KCgp2b2lkIFNlbWFudGljOjpQcm9jZXNzVGhpc0V4cHJlc3Npb24oQXN0ICpleHByKQp7
CiAgICBBc3RUaGlzRXhwcmVzc2lvbiAqdGhpc19leHByZXNzaW9uID0gKEFzdFRoaXNFeHByZXNz
aW9uICopIGV4cHI7CgogICAgaWYgKFN0YXRpY1JlZ2lvbigpKQogICAgewogICAgICAgIFJlcG9y
dFNlbUVycm9yKFNlbWFudGljRXJyb3I6Ok1JU1BMQUNFRF9USElTX0VYUFJFU1NJT04sCiAgICAg
ICAgICAgICAgICAgICAgICAgdGhpc19leHByZXNzaW9uIC0+IExlZnRUb2tlbigpLAogICAgICAg
ICAgICAgICAgICAgICAgIHRoaXNfZXhwcmVzc2lvbiAtPiBSaWdodFRva2VuKCkpOwogICAgICAg
IHRoaXNfZXhwcmVzc2lvbiAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICB9CiAgICBl
bHNlIGlmIChFeHBsaWNpdENvbnN0cnVjdG9ySW52b2NhdGlvbigpKQogICAgewogICAgICAgIFJl
cG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OlRISVNfSU5fRVhQTElDSVRfQ09OU1RSVUNUT1Jf
SU5WT0NBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICB0aGlzX2V4cHJlc3Npb24gLT4gTGVm
dFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgdGhpc19leHByZXNzaW9uIC0+IFJpZ2h0
VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICBsZXhfc3RyZWFtIC0+IE5hbWVTdHJpbmco
dGhpc19leHByZXNzaW9uIC0+IHRoaXNfdG9rZW4pKTsKICAgICAgICB0aGlzX2V4cHJlc3Npb24g
LT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAgfQogICAgZWxzZSB0aGlzX2V4cHJlc3Np
b24gLT4gc3ltYm9sID0gVGhpc1R5cGUoKTsKCiAgICByZXR1cm47Cn0KCgp2b2lkIFNlbWFudGlj
OjpQcm9jZXNzU3VwZXJFeHByZXNzaW9uKEFzdCAqZXhwcikKewogICAgQXN0U3VwZXJFeHByZXNz
aW9uICpzdXBlcl9leHByZXNzaW9uID0gKEFzdFN1cGVyRXhwcmVzc2lvbiAqKSBleHByOwoKICAg
IGlmIChTdGF0aWNSZWdpb24oKSB8fCBUaGlzVHlwZSgpID09IGNvbnRyb2wuT2JqZWN0KCkpCiAg
ICB7CiAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6Ok1JU1BMQUNFRF9TVVBF
Ul9FWFBSRVNTSU9OLAogICAgICAgICAgICAgICAgICAgICAgICBzdXBlcl9leHByZXNzaW9uIC0+
IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICBzdXBlcl9leHByZXNzaW9uIC0+
IFJpZ2h0VG9rZW4oKSk7CiAgICAgICAgIHN1cGVyX2V4cHJlc3Npb24gLT4gc3ltYm9sID0gY29u
dHJvbC5ub190eXBlOwogICAgfQogICAgZWxzZSBpZiAoRXhwbGljaXRDb25zdHJ1Y3Rvckludm9j
YXRpb24oKSkKICAgIHsKICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpTVVBF
Ul9JTl9FWFBMSUNJVF9DT05TVFJVQ1RPUl9JTlZPQ0FUSU9OLAogICAgICAgICAgICAgICAgICAg
ICAgIHN1cGVyX2V4cHJlc3Npb24gLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgc3VwZXJfZXhwcmVzc2lvbiAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgbGV4X3N0cmVhbSAtPiBOYW1lU3RyaW5nKHN1cGVyX2V4cHJlc3Npb24gLT4gc3VwZXJfdG9r
ZW4pKTsKICAgICAgICAgc3VwZXJfZXhwcmVzc2lvbiAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5
cGU7CiAgICB9CiAgICBlbHNlIHN1cGVyX2V4cHJlc3Npb24gLT4gc3ltYm9sID0gVGhpc1R5cGUo
KSAtPiBzdXBlcjsKfQoKCnZvaWQgU2VtYW50aWM6OlByb2Nlc3NQYXJlbnRoZXNpemVkRXhwcmVz
c2lvbihBc3QgKmV4cHIpCnsKICAgIEFzdFBhcmVudGhlc2l6ZWRFeHByZXNzaW9uICpwYXJlbnRo
ZXNpemVkID0gKEFzdFBhcmVudGhlc2l6ZWRFeHByZXNzaW9uICopIGV4cHI7CgogICAgIAogICAg
IAogICAgIAogICAgIAogICAgUHJvY2Vzc0V4cHJlc3Npb24ocGFyZW50aGVzaXplZCAtPiBleHBy
ZXNzaW9uKTsKICAgIHBhcmVudGhlc2l6ZWQgLT4gdmFsdWUgPSBwYXJlbnRoZXNpemVkIC0+IGV4
cHJlc3Npb24gLT4gdmFsdWU7CiAgICBwYXJlbnRoZXNpemVkIC0+IHN5bWJvbCA9IHBhcmVudGhl
c2l6ZWQgLT4gZXhwcmVzc2lvbiAtPiBzeW1ib2w7Cn0KCgp2b2lkIFNlbWFudGljOjpVcGRhdGVH
ZW5lcmF0ZWRMb2NhbENvbnN0cnVjdG9yKE1ldGhvZFN5bWJvbCAqY29uc3RydWN0b3IpCnsKICAg
IFR5cGVTeW1ib2wgKmxvY2FsX3R5cGUgPSBjb25zdHJ1Y3RvciAtPiBjb250YWluaW5nX3R5cGU7
CiAgICBNZXRob2RTeW1ib2wgKmxvY2FsX2NvbnN0cnVjdG9yID0gY29uc3RydWN0b3IgLT4gTG9j
YWxDb25zdHJ1Y3RvcigpOwoKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggbG9jYWxfY29uc3Ry
dWN0b3IgLT4gSXNHZW5lcmF0ZWRMb2NhbENvbnN0cnVjdG9yKCkgKSA/IDAgOgkoX19hc3NlcnRf
ZmFpbCAoImxvY2FsX2NvbnN0cnVjdG9yIC0+IElzR2VuZXJhdGVkTG9jYWxDb25zdHJ1Y3Rvcigp
IiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCAzNDA5LCBfX1BSRVRUWV9GVU5DVElPTl9f
ICksIDApKSkgOwoKICAgIEJsb2NrU3ltYm9sICpibG9ja19zeW1ib2wgPSBsb2NhbF9jb25zdHJ1
Y3RvciAtPiBibG9ja19zeW1ib2w7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb25zdHJ1Y3Rv
ciAtPiBOdW1Gb3JtYWxQYXJhbWV0ZXJzKCk7IGkrKykKICAgIHsKICAgICAgICBWYXJpYWJsZVN5
bWJvbCAqcGFyYW0gPSBjb25zdHJ1Y3RvciAtPiBGb3JtYWxQYXJhbWV0ZXIoaSksCiAgICAgICAg
ICAgICAgICAgICAgICAgKnN5bWJvbCA9IGJsb2NrX3N5bWJvbCAtPiBGaW5kVmFyaWFibGVTeW1i
b2wocGFyYW0gLT4gSWRlbnRpdHkoKSk7CgogICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCgg
c3ltYm9sICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJzeW1ib2wiICwgIi4uLy4uL2ppa2VzL3Ny
Yy9leHByLmNwcCIsIDM0MTgsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogICAgICAg
IHN5bWJvbCAtPiBTZXRFeHRlcm5hbElkZW50aXR5KHBhcmFtIC0+IEV4dGVybmFsSWRlbnRpdHko
KSk7ICAKICAgICAgICBzeW1ib2wgLT4gU2V0TG9jYWxWYXJpYWJsZUluZGV4KGJsb2NrX3N5bWJv
bCAtPiBtYXhfdmFyaWFibGVfaW5kZXgrKyk7CiAgICAgICAgaWYgKGNvbnRyb2wuSXNEb3VibGVX
b3JkVHlwZShzeW1ib2wgLT4gVHlwZSgpKSkKICAgICAgICAgICAgYmxvY2tfc3ltYm9sIC0+IG1h
eF92YXJpYWJsZV9pbmRleCsrOwogICAgICAgIGxvY2FsX2NvbnN0cnVjdG9yIC0+IEFkZEZvcm1h
bFBhcmFtZXRlcihzeW1ib2wpOwogICAgfQoKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAK
ICAgICAKICAgIFZhcmlhYmxlU3ltYm9sICpzdXBlcl90aGlzMF92YXJpYWJsZSA9IGJsb2NrX3N5
bWJvbCAtPiBGaW5kVmFyaWFibGVTeW1ib2woY29udHJvbC5NYWtlUGFyYW1ldGVyKDApKTsKICAg
IGlmIChzdXBlcl90aGlzMF92YXJpYWJsZSkKICAgIHsKICAgICAgICBzdXBlcl90aGlzMF92YXJp
YWJsZSAtPiBTZXRMb2NhbFZhcmlhYmxlSW5kZXgoYmxvY2tfc3ltYm9sIC0+IG1heF92YXJpYWJs
ZV9pbmRleCsrKTsKICAgICAgICBsb2NhbF9jb25zdHJ1Y3RvciAtPiBBZGRGb3JtYWxQYXJhbWV0
ZXIoc3VwZXJfdGhpczBfdmFyaWFibGUpOwogICAgfQogICAgbG9jYWxfY29uc3RydWN0b3IgLT4g
U2V0U2lnbmF0dXJlKGNvbnRyb2wpOwoKICAgICAKICAgICAKICAgICAKICAgIEFzdENvbnN0cnVj
dG9yRGVjbGFyYXRpb24gKmNvbnN0cnVjdG9yX2RlY2xhcmF0aW9uID0gKEFzdENvbnN0cnVjdG9y
RGVjbGFyYXRpb24gKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RydWN0b3IgLT4gbWV0aG9kX29yX2NvbnN0cnVjdG9yX2RlY2xh
cmF0aW9uOwoKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggY29uc3RydWN0b3JfZGVjbGFyYXRp
b24gLT4gQ29uc3RydWN0b3JEZWNsYXJhdGlvbkNhc3QoKSApID8gMCA6CShfX2Fzc2VydF9mYWls
ICgiY29uc3RydWN0b3JfZGVjbGFyYXRpb24gLT4gQ29uc3RydWN0b3JEZWNsYXJhdGlvbkNhc3Qo
KSIgLCAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiwgMzQ0NywgX19QUkVUVFlfRlVOQ1RJT05f
XyApLCAwKSkpIDsKCiAgICBBc3RDb25zdHJ1Y3RvckJsb2NrICpjb25zdHJ1Y3Rvcl9ibG9jayA9
IGNvbnN0cnVjdG9yX2RlY2xhcmF0aW9uIC0+IGNvbnN0cnVjdG9yX2JvZHk7CgogICAgaWYgKCEg
KGNvbnN0cnVjdG9yX2Jsb2NrIC0+IGV4cGxpY2l0X2NvbnN0cnVjdG9yX2ludm9jYXRpb25fb3B0
ICYmCiAgICAgICAgICAgY29uc3RydWN0b3JfYmxvY2sgLT4gZXhwbGljaXRfY29uc3RydWN0b3Jf
aW52b2NhdGlvbl9vcHQgLT4gVGhpc0NhbGxDYXN0KCkpKQogICAgewogICAgICAgIGNvbnN0cnVj
dG9yX2Jsb2NrIC0+IEFsbG9jYXRlTG9jYWxJbml0U3RhdGVtZW50cyhsb2NhbF90eXBlIC0+IE51
bUNvbnN0cnVjdG9yUGFyYW1ldGVycygpKTsKCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAg
CiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgZm9yIChpbnQgaSA9IChsb2Nh
bF90eXBlIC0+IEFDQ19TVEFUSUMoKSA/IDAgOiAxKTsgaSA8IGxvY2FsX3R5cGUgLT4gTnVtQ29u
c3RydWN0b3JQYXJhbWV0ZXJzKCk7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIFZhcmlhYmxl
U3ltYm9sICpwYXJhbSA9IGxvY2FsX3R5cGUgLT4gQ29uc3RydWN0b3JQYXJhbWV0ZXIoaSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICpzeW1ib2wgPSBibG9ja19zeW1ib2wgLT4gRmluZFZh
cmlhYmxlU3ltYm9sKHBhcmFtIC0+IElkZW50aXR5KCkpOwoKICAgICAgICAgICAgKHN0YXRpY19j
YXN0PHZvaWQ+ICAoKCBzeW1ib2wgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInN5bWJvbCIgLCAi
Li4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiwgMzQ2NywgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAw
KSkpIDsKCiAgICAgICAgICAgIEFzdFNpbXBsZU5hbWUgKmxocyA9IGNvbXBpbGF0aW9uX3VuaXQg
LT4gYXN0X3Bvb2wgLT4gR2VuU2ltcGxlTmFtZShjb25zdHJ1Y3Rvcl9ibG9jayAtPiBsZWZ0X2Jy
YWNlX3Rva2VuKTsKICAgICAgICAgICAgbGhzIC0+IHN5bWJvbCA9IHBhcmFtOwoKICAgICAgICAg
ICAgQXN0U2ltcGxlTmFtZSAqcmhzID0gY29tcGlsYXRpb25fdW5pdCAtPiBhc3RfcG9vbCAtPiBH
ZW5TaW1wbGVOYW1lKGNvbnN0cnVjdG9yX2Jsb2NrIC0+IGxlZnRfYnJhY2VfdG9rZW4pOwogICAg
ICAgICAgICByaHMgLT4gc3ltYm9sID0gc3ltYm9sOwoKICAgICAgICAgICAgQXN0QXNzaWdubWVu
dEV4cHJlc3Npb24gKmFzc2lnbiA9IGNvbXBpbGF0aW9uX3VuaXQgLT4gYXN0X3Bvb2wKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LT4gR2VuQXNzaWdubWVudEV4cHJlc3Npb24oQXN0QXNzaWdubWVudEV4cHJlc3Npb246OlNJTVBM
RV9FUVVBTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3JfYmxv
Y2sgLT4gbGVmdF9icmFjZV90b2tlbik7CiAgICAgICAgICAgIGFzc2lnbiAtPiBsZWZ0X2hhbmRf
c2lkZSA9IGxoczsKICAgICAgICAgICAgYXNzaWduIC0+IGV4cHJlc3Npb24gICAgID0gcmhzOwog
ICAgICAgICAgICBhc3NpZ24gLT4gc3ltYm9sICAgICAgICAgPSBsaHMgLT4gVHlwZSgpOwoKICAg
ICAgICAgICAgQXN0RXhwcmVzc2lvblN0YXRlbWVudCAqc3RtdCA9IGNvbXBpbGF0aW9uX3VuaXQg
LT4gYXN0X3Bvb2wgLT4gR2VuRXhwcmVzc2lvblN0YXRlbWVudCgpOwogICAgICAgICAgICBzdG10
IC0+IGV4cHJlc3Npb24gICAgICAgICAgID0gYXNzaWduOwogICAgICAgICAgICBzdG10IC0+IHNl
bWljb2xvbl90b2tlbl9vcHQgID0gY29uc3RydWN0b3JfYmxvY2sgLT4gbGVmdF9icmFjZV90b2tl
bjsKCiAgICAgICAgICAgIHN0bXQgLT4gaXNfcmVhY2hhYmxlID0gdHJ1ZTsKICAgICAgICAgICAg
c3RtdCAtPiBjYW5fY29tcGxldGVfbm9ybWFsbHkgPSB0cnVlOwoKICAgICAgICAgICAgY29uc3Ry
dWN0b3JfYmxvY2sgLT4gQWRkTG9jYWxJbml0U3RhdGVtZW50KHN0bXQpOwogICAgICAgIH0KICAg
IH0KCiAgICAgCiAgICAgCiAgICAgCiAgICBBc3RTaW1wbGVOYW1lICpzaW1wbGVfbmFtZSA9IGNv
bXBpbGF0aW9uX3VuaXQgLT4gYXN0X3Bvb2wgLT4gR2VuU2ltcGxlTmFtZShjb25zdHJ1Y3Rvcl9i
bG9jayAtPiBsZWZ0X2JyYWNlX3Rva2VuKTsKICAgIHNpbXBsZV9uYW1lIC0+IHN5bWJvbCA9IGNv
bnN0cnVjdG9yOwoKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggISBjb25zdHJ1Y3RvciAtPiBJ
c0dlbmVyYXRlZExvY2FsQ29uc3RydWN0b3IoKSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiISBj
b25zdHJ1Y3RvciAtPiBJc0dlbmVyYXRlZExvY2FsQ29uc3RydWN0b3IoKSIgLCAiLi4vLi4vamlr
ZXMvc3JjL2V4cHIuY3BwIiwgMzQ5OSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAg
ICBBc3RNZXRob2RJbnZvY2F0aW9uICptZXRob2RfY2FsbCAgICAgICA9IGNvbXBpbGF0aW9uX3Vu
aXQgLT4gYXN0X3Bvb2wgLT4gR2VuTWV0aG9kSW52b2NhdGlvbigpOwogICAgbWV0aG9kX2NhbGwg
LT4gbWV0aG9kICAgICAgICAgICAgICAgICAgPSBzaW1wbGVfbmFtZTsKICAgIG1ldGhvZF9jYWxs
IC0+IGxlZnRfcGFyZW50aGVzaXNfdG9rZW4gID0gY29uc3RydWN0b3JfYmxvY2sgLT4gbGVmdF9i
cmFjZV90b2tlbjsKICAgIG1ldGhvZF9jYWxsIC0+IHJpZ2h0X3BhcmVudGhlc2lzX3Rva2VuID0g
Y29uc3RydWN0b3JfYmxvY2sgLT4gbGVmdF9icmFjZV90b2tlbjsKICAgIG1ldGhvZF9jYWxsIC0+
IHN5bWJvbCAgICAgICAgICAgICAgICAgID0gc2ltcGxlX25hbWUgLT4gc3ltYm9sOwoKICAgIG1l
dGhvZF9jYWxsIC0+IEFsbG9jYXRlQXJndW1lbnRzKGNvbnN0cnVjdG9yIC0+IE51bUZvcm1hbFBh
cmFtZXRlcnMoKSArIDEpOwogICAgaWYgKCEgbG9jYWxfdHlwZSAtPiBBQ0NfU1RBVElDKCkpCiAg
ICB7CiAgICAgICAgQXN0U2ltcGxlTmFtZSAqc2ltcGxlX25hbWUgPSBjb21waWxhdGlvbl91bml0
IC0+IGFzdF9wb29sIC0+IEdlblNpbXBsZU5hbWUoY29uc3RydWN0b3JfYmxvY2sgLT4gbGVmdF9i
cmFjZV90b2tlbik7CiAgICAgICAgc2ltcGxlX25hbWUgLT4gc3ltYm9sID0gYmxvY2tfc3ltYm9s
IC0+IEZpbmRWYXJpYWJsZVN5bWJvbChjb250cm9sLnRoaXMwX25hbWVfc3ltYm9sKTsKCiAgICAg
ICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBzaW1wbGVfbmFtZSAtPiBzeW1ib2wgKSA/IDAgOgko
X19hc3NlcnRfZmFpbCAoInNpbXBsZV9uYW1lIC0+IHN5bWJvbCIgLCAiLi4vLi4vamlrZXMvc3Jj
L2V4cHIuY3BwIiwgMzUxMywgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICAgICAg
bWV0aG9kX2NhbGwgLT4gQWRkQXJndW1lbnQoc2ltcGxlX25hbWUpOwogICAgfQoKICAgIGZvciAo
aW50IGsgPSAwOyBrIDwgY29uc3RydWN0b3IgLT4gTnVtRm9ybWFsUGFyYW1ldGVycygpOyBrKysp
CiAgICB7CiAgICAgICAgVmFyaWFibGVTeW1ib2wgKnBhcmFtID0gY29uc3RydWN0b3IgLT4gRm9y
bWFsUGFyYW1ldGVyKGspLAogICAgICAgICAgICAgICAgICAgICAgICpzeW1ib2wgPSBibG9ja19z
eW1ib2wgLT4gRmluZFZhcmlhYmxlU3ltYm9sKHBhcmFtIC0+IElkZW50aXR5KCkpOwogICAgICAg
IEFzdFNpbXBsZU5hbWUgKnNpbXBsZV9uYW1lID0gY29tcGlsYXRpb25fdW5pdCAtPiBhc3RfcG9v
bCAtPiBHZW5TaW1wbGVOYW1lKGNvbnN0cnVjdG9yX2Jsb2NrIC0+IGxlZnRfYnJhY2VfdG9rZW4p
OwogICAgICAgIHNpbXBsZV9uYW1lIC0+IHN5bWJvbCA9IHN5bWJvbDsKICAgICAgICBtZXRob2Rf
Y2FsbCAtPiBBZGRBcmd1bWVudChzaW1wbGVfbmFtZSk7CiAgICB9CgogICAgQXN0RXhwcmVzc2lv
blN0YXRlbWVudCAqc3RtdCAgPSBjb21waWxhdGlvbl91bml0IC0+IGFzdF9wb29sIC0+IEdlbkV4
cHJlc3Npb25TdGF0ZW1lbnQoKTsKICAgIHN0bXQgLT4gZXhwcmVzc2lvbiAgICAgICAgICAgID0g
bWV0aG9kX2NhbGw7CiAgICBzdG10IC0+IHNlbWljb2xvbl90b2tlbl9vcHQgICA9IGNvbnN0cnVj
dG9yX2Jsb2NrIC0+IGxlZnRfYnJhY2VfdG9rZW47CgogICAgc3RtdCAtPiBpc19yZWFjaGFibGUg
ICAgICAgICAgPSB0cnVlOwogICAgc3RtdCAtPiBjYW5fY29tcGxldGVfbm9ybWFsbHkgPSB0cnVl
OwoKICAgIGNvbnN0cnVjdG9yX2Jsb2NrIC0+IG9yaWdpbmFsX2NvbnN0cnVjdG9yX2ludm9jYXRp
b24gPSBzdG10OwoKICAgIHJldHVybjsKfQoKCnZvaWQgU2VtYW50aWM6OlVwZGF0ZUxvY2FsQ29u
c3RydWN0b3JzKFR5cGVTeW1ib2wgKmlubmVyX3R5cGUpCnsKICAgIGlmICghIFRoaXNUeXBlKCkg
LT4gSXNMb2NhbCgpKSAgCiAgICB7CiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAg
ICAgIAogICAgICAgIFR1cGxlPFR5cGVTeW1ib2wgKj4gbG9jYWxfY2xhc3Nlcyg4KTsKCiAgICAg
ICAgVHlwZVN5bWJvbCAqb3V0ZXJtb3N0X3R5cGUgPSBpbm5lcl90eXBlIC0+IG91dGVybW9zdF90
eXBlOwogICAgICAgIGlmIChvdXRlcm1vc3RfdHlwZSAtPiBsb2NhbCkgIAogICAgICAgIHsKICAg
ICAgICAgICAgZm9yIChUeXBlU3ltYm9sICpsb2NhbF90eXBlID0gKFR5cGVTeW1ib2wgKikgb3V0
ZXJtb3N0X3R5cGUgLT4gbG9jYWwgLT4gRmlyc3RFbGVtZW50KCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9jYWxfdHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nh
bF90eXBlID0gKFR5cGVTeW1ib2wgKikgb3V0ZXJtb3N0X3R5cGUgLT4gbG9jYWwgLT4gTmV4dEVs
ZW1lbnQoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGxvY2FsX3R5cGUgLT4g
Q2FuQWNjZXNzKGlubmVyX3R5cGUpKQogICAgICAgICAgICAgICAgICAgIGxvY2FsX2NsYXNzZXMu
TmV4dCgpID0gbG9jYWxfdHlwZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCBvdXRlcm1vc3RfdHlwZSAtPiBudW1fYW5vbnltb3VzX3R5cGVzKCk7
IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChvdXRlcm1vc3RfdHlwZSAtPiBBbm9ueW1v
dXNUeXBlKGopIC0+IENhbkFjY2Vzcyhpbm5lcl90eXBlKSkKICAgICAgICAgICAgICAgIGxvY2Fs
X2NsYXNzZXMuTmV4dCgpID0gb3V0ZXJtb3N0X3R5cGUgLT4gQW5vbnltb3VzVHlwZShqKTsKICAg
ICAgICB9CgogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAg
CiAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBsb2NhbF9jbGFzc2VzLkxlbmd0aCgpOyBrKysp
CiAgICAgICAgewogICAgICAgICAgICBUeXBlU3ltYm9sICp0YXJnZXRfbG9jYWxfdHlwZSA9IGxv
Y2FsX2NsYXNzZXNba107CgogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhcmdldF9s
b2NhbF90eXBlIC0+IE51bUxvY2FsQ29uc3RydWN0b3JDYWxsRW52aXJvbm1lbnRzKCk7IGkrKykK
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU2VtYW50aWNFbnZpcm9ubWVudCAqZW52ID0g
dGFyZ2V0X2xvY2FsX3R5cGUgLT4gTG9jYWxDb25zdHJ1Y3RvckNhbGxFbnZpcm9ubWVudChpKTsK
ICAgICAgICAgICAgICAgIFR5cGVTeW1ib2wgKnNvdXJjZV9sb2NhbF90eXBlID0gZW52IC0+IFR5
cGUoKTsKICAgICAgICAgICAgICAgIGlmICghIHNvdXJjZV9sb2NhbF90eXBlIC0+IENhbkFjY2Vz
cyh0YXJnZXRfbG9jYWxfdHlwZSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaiA9ICh0YXJnZXRfbG9jYWxfdHlwZSAtPiBBQ0NfU1RBVElDKCkgPyAwIDog
MSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqIDwgdGFyZ2V0X2xvY2FsX3R5cGUgLT4gTnVt
Q29uc3RydWN0b3JQYXJhbWV0ZXJzKCk7IGorKykKICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlU3ltYm9sICpsb2NhbCA9IHRhcmdldF9sb2NhbF90
eXBlIC0+IENvbnN0cnVjdG9yUGFyYW1ldGVyKGopIC0+IGFjY2Vzc2VkX2xvY2FsOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnYgLT4gc3ltYm9sX3RhYmxl
LkZpbmRWYXJpYWJsZVN5bWJvbChsb2NhbCAtPiBJZGVudGl0eSgpKSAhPSBsb2NhbCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSBzb3VyY2VfbG9jYWxfdHlwZSAtPiBGaW5kT3JJ
bnNlcnRMb2NhbFNoYWRvdyhsb2NhbCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAgCiAgICAgICAgIAogICAg
ICAgICAKICAgICAgICBmb3IgKGludCBsID0gMDsgbCA8IGxvY2FsX2NsYXNzZXMuTGVuZ3RoKCk7
IGwrKykKICAgICAgICB7CiAgICAgICAgICAgIFR5cGVTeW1ib2wgKmxvY2FsX3R5cGUgPSBsb2Nh
bF9jbGFzc2VzW2xdOwoKICAgICAgICAgICAgQXN0Q2xhc3NEZWNsYXJhdGlvbiAqY2xhc3NfZGVj
bGFyYXRpb24gPSBsb2NhbF90eXBlIC0+IGRlY2xhcmF0aW9uIC0+IENsYXNzRGVjbGFyYXRpb25D
YXN0KCk7CiAgICAgICAgICAgIEFzdENsYXNzSW5zdGFuY2VDcmVhdGlvbkV4cHJlc3Npb24gKmNs
YXNzX2NyZWF0aW9uID0gbG9jYWxfdHlwZSAtPiBkZWNsYXJhdGlvbiAtPiBDbGFzc0luc3RhbmNl
Q3JlYXRpb25FeHByZXNzaW9uQ2FzdCgpOwoKICAgICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+
ICAoKCBjbGFzc19kZWNsYXJhdGlvbiB8fCBjbGFzc19jcmVhdGlvbiApID8gMCA6CShfX2Fzc2Vy
dF9mYWlsICgiY2xhc3NfZGVjbGFyYXRpb24gfHwgY2xhc3NfY3JlYXRpb24iICwgIi4uLy4uL2pp
a2VzL3NyYy9leHByLmNwcCIsIDM2MTAsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7Cgog
ICAgICAgICAgICBBc3RDbGFzc0JvZHkgKmNsYXNzX2JvZHkgPSAoY2xhc3NfZGVjbGFyYXRpb24g
PyBjbGFzc19kZWNsYXJhdGlvbiAtPiBjbGFzc19ib2R5IDogY2xhc3NfY3JlYXRpb24gLT4gY2xh
c3NfYm9keV9vcHQpOwoKICAgICAgICAgICAgaWYgKGNsYXNzX2JvZHkgLT4gZGVmYXVsdF9jb25z
dHJ1Y3RvcikKICAgICAgICAgICAgICAgICBVcGRhdGVHZW5lcmF0ZWRMb2NhbENvbnN0cnVjdG9y
KGNsYXNzX2JvZHkgLT4gZGVmYXVsdF9jb25zdHJ1Y3RvciAtPiBjb25zdHJ1Y3Rvcl9zeW1ib2wp
OwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY2xhc3NfYm9keSAtPiBOdW1Db25zdHJ1Y3RvcnMoKTsgaSsrKQogICAgICAg
ICAgICAgICAgICAgIFVwZGF0ZUdlbmVyYXRlZExvY2FsQ29uc3RydWN0b3IoY2xhc3NfYm9keSAt
PiBDb25zdHJ1Y3RvcihpKSAtPiBjb25zdHJ1Y3Rvcl9zeW1ib2wpOwoKICAgICAgICAgICAgICAg
IGZvciAoaW50IGsgPSAwOyBrIDwgbG9jYWxfdHlwZSAtPiBOdW1Qcml2YXRlQWNjZXNzQ29uc3Ry
dWN0b3JzKCk7IGsrKykKICAgICAgICAgICAgICAgICAgICBVcGRhdGVHZW5lcmF0ZWRMb2NhbENv
bnN0cnVjdG9yKGxvY2FsX3R5cGUgLT4gUHJpdmF0ZUFjY2Vzc0NvbnN0cnVjdG9yKGspKTsKICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgbG9jYWxfdHlwZSAtPiBNYXJrTG9jYWxDbGFzc1Byb2Nl
c3NpbmdDb21wbGV0ZWQoKTsKICAgICAgICB9CgogICAgICAgICAKICAgICAgICAgCiAgICAgICAg
IAogICAgICAgIGZvciAoaW50IG0gPSAwOyBtIDwgbG9jYWxfY2xhc3Nlcy5MZW5ndGgoKTsgbSsr
KQogICAgICAgIHsKICAgICAgICAgICAgVHlwZVN5bWJvbCAqdGFyZ2V0X2xvY2FsX3R5cGUgPSBs
b2NhbF9jbGFzc2VzW21dOwoKICAgICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCB0YXJn
ZXRfbG9jYWxfdHlwZSAtPiBMb2NhbENsYXNzUHJvY2Vzc2luZ0NvbXBsZXRlZCgpICkgPyAwIDoJ
KF9fYXNzZXJ0X2ZhaWwgKCJ0YXJnZXRfbG9jYWxfdHlwZSAtPiBMb2NhbENsYXNzUHJvY2Vzc2lu
Z0NvbXBsZXRlZCgpIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCAzNjM1LCBfX1BSRVRU
WV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0
YXJnZXRfbG9jYWxfdHlwZSAtPiBOdW1Mb2NhbENvbnN0cnVjdG9yQ2FsbEVudmlyb25tZW50cygp
OyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEFzdCAqY2FsbCA9IHRhcmdldF9s
b2NhbF90eXBlIC0+IExvY2FsQ29uc3RydWN0b3JDYWxsRW52aXJvbm1lbnQoaSkgLT4gYXN0X2Nv
bnN0cnVjdDsKICAgICAgICAgICAgICAgIFNlbWFudGljRW52aXJvbm1lbnQgKmVudiA9IHRhcmdl
dF9sb2NhbF90eXBlIC0+IExvY2FsQ29uc3RydWN0b3JDYWxsRW52aXJvbm1lbnQoaSk7CiAgICAg
ICAgICAgICAgICBUeXBlU3ltYm9sICpzb3VyY2VfbG9jYWxfdHlwZSA9IGVudiAtPiBUeXBlKCk7
CgogICAgICAgICAgICAgICAgQXN0Q2xhc3NJbnN0YW5jZUNyZWF0aW9uRXhwcmVzc2lvbiAqY2xh
c3NfY3JlYXRpb247CiAgICAgICAgICAgICAgICBBc3RTdXBlckNhbGwgKnN1cGVyX2NhbGw7CiAg
ICAgICAgICAgICAgICBBc3RUaGlzQ2FsbCAqdGhpc19jYWxsOwoKICAgICAgICAgICAgICAgIGlm
ICgoY2xhc3NfY3JlYXRpb24gPSBjYWxsIC0+IENsYXNzSW5zdGFuY2VDcmVhdGlvbkV4cHJlc3Np
b25DYXN0KCkpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChjbGFz
c19jcmVhdGlvbiAtPiBzeW1ib2wgIT0gY29udHJvbC5ub190eXBlKQogICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZV9sb2NhbF90eXBlIC0+IENh
bkFjY2Vzcyh0YXJnZXRfbG9jYWxfdHlwZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAodGFyZ2V0X2xvY2FsX3R5cGUg
LT4gQUNDX1NUQVRJQygpID8gMCA6IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqIDwgdGFyZ2V0X2xvY2FsX3R5cGUgLT4gTnVtQ29uc3RydWN0b3JQYXJhbWV0ZXJzKCk7IGor
KykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBc3RTaW1wbGVOYW1lICpzaW1wbGVfbmFtZSA9IGNvbXBpbGF0aW9uX3VuaXQgLT4g
YXN0X3Bvb2wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gR2VuU2ltcGxlTmFtZShjbGFzc19jcmVh
dGlvbiAtPiBuZXdfdG9rZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlh
YmxlU3ltYm9sICp2YXJpYWJsZV9zeW1ib2wgPSB0YXJnZXRfbG9jYWxfdHlwZSAtPiBDb25zdHJ1
Y3RvclBhcmFtZXRlcihqKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVf
bmFtZSAtPiBzeW1ib2wgPSB2YXJpYWJsZV9zeW1ib2w7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNvdXJjZV9sb2NhbF90eXBlICE9IHRhcmdldF9sb2NhbF90eXBlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2ltcGxlX25hbWUgLT4gc3ltYm9sID0gdmFyaWFibGVfc3ltYm9sIC0+IGFjY2Vz
c2VkX2xvY2FsOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfc3Rh
Y2suUHVzaChzb3VyY2VfbG9jYWxfdHlwZSAtPiBzZW1hbnRpY19lbnZpcm9ubWVudCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUFjY2Vzc1RvU2NvcGVkVmFyaWFi
bGUoc2ltcGxlX25hbWUsIHRhcmdldF9sb2NhbF90eXBlKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGVfc3RhY2suUG9wKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX2NyZWF0aW9u
IC0+IEFkZExvY2FsQXJndW1lbnQoc2ltcGxlX25hbWUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaiA9ICh0YXJnZXRfbG9jYWxfdHlwZSAtPiBBQ0NfU1RBVElDKCkgPyAwIDog
MSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPCB0YXJnZXRfbG9jYWxfdHlw
ZSAtPiBOdW1Db25zdHJ1Y3RvclBhcmFtZXRlcnMoKTsgaisrKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlU3ltYm9s
ICpsb2NhbCA9IHRhcmdldF9sb2NhbF90eXBlIC0+IENvbnN0cnVjdG9yUGFyYW1ldGVyKGopIC0+
IGFjY2Vzc2VkX2xvY2FsOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3RTaW1w
bGVOYW1lICpzaW1wbGVfbmFtZSA9IGNvbXBpbGF0aW9uX3VuaXQgLT4gYXN0X3Bvb2wKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLT4gR2VuU2ltcGxlTmFtZShjbGFzc19jcmVhdGlvbiAtPiBuZXdfdG9r
ZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlX25hbWUgLT4gc3ltYm9s
ID0gKGVudiAtPiBzeW1ib2xfdGFibGUuRmluZFZhcmlhYmxlU3ltYm9sKGxvY2FsIC0+IElkZW50
aXR5KCkpID09IGxvY2FsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPyBsb2NhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc291cmNlX2xvY2FsX3R5cGUgLT4g
RmluZE9ySW5zZXJ0TG9jYWxTaGFkb3cobG9jYWwpKTsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBzaW1wbGVfbmFtZSAtPiBzeW1ib2wgLT4g
VmFyaWFibGVDYXN0KCkgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInNpbXBsZV9uYW1lIC0+IHN5
bWJvbCAtPiBWYXJpYWJsZUNhc3QoKSIgLCAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiwgMzY4
OSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3NfY3JlYXRpb24gLT4gQWRkTG9jYWxBcmd1bWVudChzaW1wbGVfbmFtZSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICAgICAgICAgIE1ldGhvZFN5bWJvbCAqY29uc3RydWN0b3IgPSAoTWV0
aG9kU3ltYm9sICopIGNsYXNzX2NyZWF0aW9uIC0+IGNsYXNzX3R5cGUgLT4gc3ltYm9sOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBjb25zdHJ1Y3RvciAp
ID8gMCA6CShfX2Fzc2VydF9mYWlsICgiY29uc3RydWN0b3IiICwgIi4uLy4uL2ppa2VzL3NyYy9l
eHByLmNwcCIsIDM2OTcsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgICAgICAgICAg
ICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggY29uc3RydWN0b3IgLT4gTWV0aG9k
Q2FzdCgpICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJjb25zdHJ1Y3RvciAtPiBNZXRob2RDYXN0
KCkiICwgIi4uLy4uL2ppa2VzL3NyYy9leHByLmNwcCIsIDM2OTgsIF9fUFJFVFRZX0ZVTkNUSU9O
X18gKSwgMCkpKSA7CiAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAg
KCggISBjb25zdHJ1Y3RvciAtPiBJc0dlbmVyYXRlZExvY2FsQ29uc3RydWN0b3IoKSApID8gMCA6
CShfX2Fzc2VydF9mYWlsICgiISBjb25zdHJ1Y3RvciAtPiBJc0dlbmVyYXRlZExvY2FsQ29uc3Ry
dWN0b3IoKSIgLCAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiwgMzY5OSwgX19QUkVUVFlfRlVO
Q1RJT05fXyApLCAwKSkpIDsKICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHZv
aWQ+ICAoKCBjb25zdHJ1Y3RvciAtPiBMb2NhbENvbnN0cnVjdG9yKCkgKSA/IDAgOgkoX19hc3Nl
cnRfZmFpbCAoImNvbnN0cnVjdG9yIC0+IExvY2FsQ29uc3RydWN0b3IoKSIgLCAiLi4vLi4vamlr
ZXMvc3JjL2V4cHIuY3BwIiwgMzcwMCwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX2NyZWF0aW9uIC0+IGNsYXNzX3R5cGUgLT4gc3lt
Ym9sID0gY29uc3RydWN0b3IgLT4gTG9jYWxDb25zdHJ1Y3RvcigpOwogICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKChzdXBlcl9j
YWxsID0gY2FsbCAtPiBTdXBlckNhbGxDYXN0KCkpKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgIGlmIChzdXBlcl9jYWxsIC0+IHN5bWJvbCAtPiBNZXRob2RDYXN0KCkpCiAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0g
KHRhcmdldF9sb2NhbF90eXBlIC0+IEFDQ19TVEFUSUMoKSA/IDAgOiAxKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqIDwgdGFyZ2V0X2xvY2FsX3R5cGUgLT4gTnVtQ29uc3RydWN0b3JQ
YXJhbWV0ZXJzKCk7IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmFyaWFibGVTeW1ib2wgKmxvY2FsID0gdGFyZ2V0X2xvY2FsX3R5cGUg
LT4gQ29uc3RydWN0b3JQYXJhbWV0ZXIoaikgLT4gYWNjZXNzZWRfbG9jYWwsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbG9jYWxfc2hhZG93ID0gc291cmNlX2xv
Y2FsX3R5cGUgLT4gRmluZE9ySW5zZXJ0TG9jYWxTaGFkb3cobG9jYWwpOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFzdFNpbXBsZU5hbWUgKnNpbXBsZV9uYW1lID0gY29tcGlsYXRpb25f
dW5pdCAtPiBhc3RfcG9vbCAtPiBHZW5TaW1wbGVOYW1lKHN1cGVyX2NhbGwgLT4gc3VwZXJfdG9r
ZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlX25hbWUgLT4gc3ltYm9sID0g
ZW52IC0+IHN5bWJvbF90YWJsZS5GaW5kVmFyaWFibGVTeW1ib2wobG9jYWxfc2hhZG93IC0+IElk
ZW50aXR5KCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lk
PiAgKCggc2ltcGxlX25hbWUgLT4gc3ltYm9sIC0+IFZhcmlhYmxlQ2FzdCgpICkgPyAwIDoJKF9f
YXNzZXJ0X2ZhaWwgKCJzaW1wbGVfbmFtZSAtPiBzeW1ib2wgLT4gVmFyaWFibGVDYXN0KCkiICwg
Ii4uLy4uL2ppa2VzL3NyYy9leHByLmNwcCIsIDM3MTgsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwg
MCkpKSA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJfY2FsbCAtPiBBZGRMb2Nh
bEFyZ3VtZW50KHNpbXBsZV9uYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgICAgICAgTWV0aG9kU3ltYm9sICpjb25zdHJ1Y3RvciA9IChNZXRob2RTeW1i
b2wgKikgc3VwZXJfY2FsbCAtPiBzeW1ib2w7CgogICAgICAgICAgICAgICAgICAgICAgICAoc3Rh
dGljX2Nhc3Q8dm9pZD4gICgoIGNvbnN0cnVjdG9yIC0+IE1ldGhvZENhc3QoKSAmJiAoISBjb25z
dHJ1Y3RvciAtPiBJc0dlbmVyYXRlZExvY2FsQ29uc3RydWN0b3IoKSkgKSA/IDAgOgkoX19hc3Nl
cnRfZmFpbCAoImNvbnN0cnVjdG9yIC0+IE1ldGhvZENhc3QoKSAmJiAoISBjb25zdHJ1Y3RvciAt
PiBJc0dlbmVyYXRlZExvY2FsQ29uc3RydWN0b3IoKSkiICwgIi4uLy4uL2ppa2VzL3NyYy9leHBy
LmNwcCIsIDM3MjUsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgICAgICAgICAgICAg
ICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggY29uc3RydWN0b3IgLT4gTG9jYWxDb25z
dHJ1Y3RvcigpICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJjb25zdHJ1Y3RvciAtPiBMb2NhbENv
bnN0cnVjdG9yKCkiICwgIi4uLy4uL2ppa2VzL3NyYy9leHByLmNwcCIsIDM3MjYsIF9fUFJFVFRZ
X0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogICAgICAgICAgICAgICAgICAgICAgICBzdXBlcl9jYWxs
IC0+IHN5bWJvbCA9IGNvbnN0cnVjdG9yIC0+IExvY2FsQ29uc3RydWN0b3IoKTsKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdGhpc19jYWxsID0gKEFzdFRoaXNDYWxs
ICopIGNhbGw7CgogICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggdGhp
c19jYWxsIC0+IFRoaXNDYWxsQ2FzdCgpICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJ0aGlzX2Nh
bGwgLT4gVGhpc0NhbGxDYXN0KCkiICwgIi4uLy4uL2ppa2VzL3NyYy9leHByLmNwcCIsIDM3MzUs
IF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogICAgICAgICAgICAgICAgICAgIGlmICh0
aGlzX2NhbGwgLT4gc3ltYm9sIC0+IE1ldGhvZENhc3QoKSkKICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAodGFyZ2V0X2xvY2FsX3R5cGUg
LT4gQUNDX1NUQVRJQygpID8gMCA6IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGog
PCB0YXJnZXRfbG9jYWxfdHlwZSAtPiBOdW1Db25zdHJ1Y3RvclBhcmFtZXRlcnMoKTsgaisrKQog
ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJp
YWJsZVN5bWJvbCAqbG9jYWwgPSB0YXJnZXRfbG9jYWxfdHlwZSAtPiBDb25zdHJ1Y3RvclBhcmFt
ZXRlcihqKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3RTaW1wbGVOYW1lICpzaW1w
bGVfbmFtZSA9IGNvbXBpbGF0aW9uX3VuaXQgLT4gYXN0X3Bvb2wgLT4gR2VuU2ltcGxlTmFtZSh0
aGlzX2NhbGwgLT4gdGhpc190b2tlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW1w
bGVfbmFtZSAtPiBzeW1ib2wgPSBlbnYgLT4gc3ltYm9sX3RhYmxlLkZpbmRWYXJpYWJsZVN5bWJv
bChsb2NhbCAtPiBJZGVudGl0eSgpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3Rh
dGljX2Nhc3Q8dm9pZD4gICgoIHNpbXBsZV9uYW1lIC0+IHN5bWJvbCAtPiBWYXJpYWJsZUNhc3Qo
KSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgic2ltcGxlX25hbWUgLT4gc3ltYm9sIC0+IFZhcmlh
YmxlQ2FzdCgpIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCAzNzQ3LCBfX1BSRVRUWV9G
VU5DVElPTl9fICksIDApKSkgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfY2Fs
bCAtPiBBZGRMb2NhbEFyZ3VtZW50KHNpbXBsZV9uYW1lKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kU3ltYm9sICpjb25zdHJ1Y3RvciA9
IChNZXRob2RTeW1ib2wgKikgdGhpc19jYWxsIC0+IHN5bWJvbDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggY29uc3RydWN0b3IgLT4gTWV0aG9kQ2FzdCgp
ICYmICghIGNvbnN0cnVjdG9yIC0+IElzR2VuZXJhdGVkTG9jYWxDb25zdHJ1Y3RvcigpKSApID8g
MCA6CShfX2Fzc2VydF9mYWlsICgiY29uc3RydWN0b3IgLT4gTWV0aG9kQ2FzdCgpICYmICghIGNv
bnN0cnVjdG9yIC0+IElzR2VuZXJhdGVkTG9jYWxDb25zdHJ1Y3RvcigpKSIgLCAiLi4vLi4vamlr
ZXMvc3JjL2V4cHIuY3BwIiwgMzc1NCwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBjb25zdHJ1Y3RvciAt
PiBMb2NhbENvbnN0cnVjdG9yKCkgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImNvbnN0cnVjdG9y
IC0+IExvY2FsQ29uc3RydWN0b3IoKSIgLCAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiwgMzc1
NSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXNfY2FsbCAtPiBzeW1ib2wgPSBjb25zdHJ1Y3RvciAtPiBMb2NhbENvbnN0cnVjdG9yKCk7
CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgfQoKICAgIHJldHVybjsKfQoKCnZvaWQgU2VtYW50aWM6OkdldEFub255bW91
c0NvbnN0cnVjdG9yKEFzdENsYXNzSW5zdGFuY2VDcmVhdGlvbkV4cHJlc3Npb24gKmNsYXNzX2Ny
ZWF0aW9uLCBUeXBlU3ltYm9sICphbm9ueW1vdXNfdHlwZSkKewogICAgTGV4U3RyZWFtOjpUb2tl
bkluZGV4IGxlZnRfbG9jICA9IGNsYXNzX2NyZWF0aW9uIC0+IGNsYXNzX3R5cGUgLT4gTGVmdFRv
a2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRfbG9jID0gY2xhc3NfY3JlYXRp
b24gLT4gcmlnaHRfcGFyZW50aGVzaXNfdG9rZW47CgogICAgVHlwZVN5bWJvbCAqc3VwZXJfdHlw
ZSA9IGFub255bW91c190eXBlIC0+IHN1cGVyOwogICAgTWV0aG9kU3ltYm9sICpzdXBlcl9jb25z
dHJ1Y3RvciA9IEZpbmRDb25zdHJ1Y3RvcihzdXBlcl90eXBlLCBjbGFzc19jcmVhdGlvbiwgbGVm
dF9sb2MsIHJpZ2h0X2xvYyk7CiAgICBpZiAoISBzdXBlcl9jb25zdHJ1Y3RvcikKICAgIHsKICAg
ICAgICBjbGFzc19jcmVhdGlvbiAtPiBjbGFzc190eXBlIC0+IHN5bWJvbCA9IGNvbnRyb2wubm9f
dHlwZTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBz
dXBlcl9jb25zdHJ1Y3RvciAtPiBJc1R5cGVkKCkgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInN1
cGVyX2NvbnN0cnVjdG9yIC0+IElzVHlwZWQoKSIgLCAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3Bw
IiwgMzc4MSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICAgCiAgICAgCiAgICAg
CiAgICBCbG9ja1N5bWJvbCAqYmxvY2tfc3ltYm9sID0gbmV3IEJsb2NrU3ltYm9sKHN1cGVyX2Nv
bnN0cnVjdG9yIC0+IE51bUZvcm1hbFBhcmFtZXRlcnMoKSArIDMpOwogICAgYmxvY2tfc3ltYm9s
IC0+IG1heF92YXJpYWJsZV9pbmRleCA9IDE7ICAKCiAgICBNZXRob2RTeW1ib2wgKmNvbnN0cnVj
dG9yID0gYW5vbnltb3VzX3R5cGUgLT4gSW5zZXJ0Q29uc3RydWN0b3JTeW1ib2woY29udHJvbC5p
bml0X25hbWVfc3ltYm9sKTsKICAgIGNvbnN0cnVjdG9yIC0+IFNldFR5cGUoY29udHJvbC52b2lk
X3R5cGUpOwogICAgY29uc3RydWN0b3IgLT4gU2V0Q29udGFpbmluZ1R5cGUoYW5vbnltb3VzX3R5
cGUpOwogICAgY29uc3RydWN0b3IgLT4gU2V0QmxvY2tTeW1ib2woYmxvY2tfc3ltYm9sKTsKICAg
IGNvbnN0cnVjdG9yIC0+IFNldEFDQ19QVUJMSUMoKTsKCiAgICAgCiAgICAgCiAgICAgCiAgICAg
CiAgICBpbnQgbnVtX3Rocm93cyA9IHN1cGVyX2NvbnN0cnVjdG9yIC0+IE51bVRocm93cygpOwog
ICAgaWYgKG51bV90aHJvd3MgPiAwKQogICAgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtX3Rocm93czsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgVHlwZVN5bWJvbCAqZXhjZXB0
aW9uID0gc3VwZXJfY29uc3RydWN0b3IgLT4gVGhyb3dzKGkpOwogICAgICAgICAgICBSZXBvcnRT
ZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpDT05TVFJVQ1RPUl9ET0VTX05PVF9USFJPV19TVVBFUl9F
WENFUFRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfY3JlYXRpb24gLT4gbmV3
X3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX2NyZWF0aW9uIC0+IFJpZ2h0
VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdDb25zdGFudDo6VVNfRU1Q
VFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uIC0+IENvbnRhaW5pbmdQYWNr
YWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRp
b24gLT4gRXh0ZXJuYWxOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJfY29u
c3RydWN0b3IgLT4gY29udGFpbmluZ190eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFj
a2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBlcl9jb25zdHJ1Y3RvciAt
PiBjb250YWluaW5nX3R5cGUgLT4gRXh0ZXJuYWxOYW1lKCkpOwoKICAgICAgICAgICAgY29uc3Ry
dWN0b3IgLT4gQWRkVGhyb3dzKGV4Y2VwdGlvbik7CiAgICAgICAgfQogICAgfQoKICAgIFZhcmlh
YmxlU3ltYm9sICp0aGlzMF92YXJpYWJsZSA9IF9fbnVsbCA7CiAgICBpZiAoYW5vbnltb3VzX3R5
cGUgLT4gSXNJbm5lcigpKQogICAgewogICAgICAgIHRoaXMwX3ZhcmlhYmxlID0gYmxvY2tfc3lt
Ym9sIC0+IEluc2VydFZhcmlhYmxlU3ltYm9sKGNvbnRyb2wudGhpczBfbmFtZV9zeW1ib2wpOwog
ICAgICAgIHRoaXMwX3ZhcmlhYmxlIC0+IE1hcmtTeW50aGV0aWMoKTsKICAgICAgICB0aGlzMF92
YXJpYWJsZSAtPiBTZXRUeXBlKGFub255bW91c190eXBlIC0+IENvbnRhaW5pbmdUeXBlKCkpOwog
ICAgICAgIHRoaXMwX3ZhcmlhYmxlIC0+IFNldE93bmVyKGNvbnN0cnVjdG9yKTsKICAgICAgICB0
aGlzMF92YXJpYWJsZSAtPiBTZXRMb2NhbFZhcmlhYmxlSW5kZXgoYmxvY2tfc3ltYm9sIC0+IG1h
eF92YXJpYWJsZV9pbmRleCsrKTsKICAgIH0KCiAgICBmb3IgKGludCBqID0gMDsgaiA8IHN1cGVy
X2NvbnN0cnVjdG9yIC0+IE51bUZvcm1hbFBhcmFtZXRlcnMoKTsgaisrKQogICAgewogICAgICAg
IFZhcmlhYmxlU3ltYm9sICpwYXJhbSA9IHN1cGVyX2NvbnN0cnVjdG9yIC0+IEZvcm1hbFBhcmFt
ZXRlcihqKSwKICAgICAgICAgICAgICAgICAgICAgICAqc3ltYm9sID0gYmxvY2tfc3ltYm9sIC0+
IEluc2VydFZhcmlhYmxlU3ltYm9sKHBhcmFtIC0+IElkZW50aXR5KCkpOwogICAgICAgIHN5bWJv
bCAtPiBTZXRUeXBlKHBhcmFtIC0+IFR5cGUoKSk7CiAgICAgICAgc3ltYm9sIC0+IFNldE93bmVy
KGNvbnN0cnVjdG9yKTsKICAgICAgICBzeW1ib2wgLT4gU2V0TG9jYWxWYXJpYWJsZUluZGV4KGJs
b2NrX3N5bWJvbCAtPiBtYXhfdmFyaWFibGVfaW5kZXgrKyk7CiAgICAgICAgaWYgKGNvbnRyb2wu
SXNEb3VibGVXb3JkVHlwZShzeW1ib2wgLT4gVHlwZSgpKSkKICAgICAgICAgICAgYmxvY2tfc3lt
Ym9sIC0+IG1heF92YXJpYWJsZV9pbmRleCsrOwogICAgICAgIGNvbnN0cnVjdG9yIC0+IEFkZEZv
cm1hbFBhcmFtZXRlcihzeW1ib2wpOwogICAgfQoKICAgICAKICAgICAKICAgICAKICAgIEFzdFN1
cGVyQ2FsbCAqc3VwZXJfY2FsbCAgICAgICAgICAgICAgPSBjb21waWxhdGlvbl91bml0IC0+IGFz
dF9wb29sIC0+IEdlblN1cGVyQ2FsbCgpOwogICAgc3VwZXJfY2FsbCAtPiBiYXNlX29wdCAgICAg
ICAgICAgICAgICA9IGNsYXNzX2NyZWF0aW9uIC0+IGJhc2Vfb3B0OyAgCiAgICBzdXBlcl9jYWxs
IC0+IGRvdF90b2tlbl9vcHQgICAgICAgICAgID0gY2xhc3NfY3JlYXRpb24gLT4gbmV3X3Rva2Vu
OwogICAgc3VwZXJfY2FsbCAtPiBzdXBlcl90b2tlbiAgICAgICAgICAgICA9IGNsYXNzX2NyZWF0
aW9uIC0+IG5ld190b2tlbjsKICAgIHN1cGVyX2NhbGwgLT4gbGVmdF9wYXJlbnRoZXNpc190b2tl
biAgPSBjbGFzc19jcmVhdGlvbiAtPiBuZXdfdG9rZW47CiAgICBzdXBlcl9jYWxsIC0+IHJpZ2h0
X3BhcmVudGhlc2lzX3Rva2VuID0gY2xhc3NfY3JlYXRpb24gLT4gbmV3X3Rva2VuOwogICAgc3Vw
ZXJfY2FsbCAtPiBzZW1pY29sb25fdG9rZW4gICAgICAgICA9IGNsYXNzX2NyZWF0aW9uIC0+IG5l
d190b2tlbjsKCiAgICBzdXBlcl9jYWxsIC0+IGlzX3JlYWNoYWJsZSAgICAgICAgICAgID0gdHJ1
ZTsKICAgIHN1cGVyX2NhbGwgLT4gY2FuX2NvbXBsZXRlX25vcm1hbGx5ICAgPSB0cnVlOwogICAg
c3VwZXJfY2FsbCAtPiBzeW1ib2wgICAgICAgICAgICAgICAgICA9IHN1cGVyX2NvbnN0cnVjdG9y
OwoKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIGlmIChhbm9ueW1vdXNfdHlwZSAt
PiBBQ0NfU1RBVElDKCkpCiAgICAgICAgY2xhc3NfY3JlYXRpb24gLT4gYmFzZV9vcHQgPSBfX251
bGwgOwogICAgZWxzZQogICAgewogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAg
ICAKICAgICAgICBpZiAoRXhwbGljaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oKSAmJiBhbm9ueW1v
dXNfdHlwZSAtPiBDb250YWluaW5nVHlwZSgpID09IFRoaXNUeXBlKCkpCiAgICAgICAgewogICAg
ICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpJTk5FUl9DT05TVFJVQ1RPUl9J
Tl9FWFBMSUNJVF9DT05TVFJVQ1RPUl9JTlZPQ0FUSU9OLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzc19jcmVhdGlvbiAtPiBMZWZ0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3NfY3JlYXRpb24gLT4gUmlnaHRUb2tlbigpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbm9ueW1vdXNfdHlwZSAtPiBDb250YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VO
YW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFub255bW91c190eXBlIC0+IEV4dGVy
bmFsTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzVHlwZSgpIC0+IENvbnRh
aW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVGhpc1R5cGUoKSAtPiBFeHRlcm5hbE5hbWUoKSk7CiAgICAgICAgICAgIGNsYXNzX2NyZWF0
aW9uIC0+IGJhc2Vfb3B0ID0gX19udWxsIDsKICAgICAgICB9CiAgICAgICAgZWxzZSBjbGFzc19j
cmVhdGlvbiAtPiBiYXNlX29wdCA9IENyZWF0ZUFjY2Vzc1RvVHlwZShjbGFzc19jcmVhdGlvbiwg
YW5vbnltb3VzX3R5cGUgLT4gQ29udGFpbmluZ1R5cGUoKSk7CiAgICB9CgogICAgQXN0Q2xhc3NC
b2R5ICpjbGFzc19ib2R5ID0gY2xhc3NfY3JlYXRpb24gLT4gY2xhc3NfYm9keV9vcHQ7CgogICAg
QXN0UmV0dXJuU3RhdGVtZW50ICpyZXR1cm5fc3RhdGVtZW50ID0gY29tcGlsYXRpb25fdW5pdCAt
PiBhc3RfcG9vbCAtPiBHZW5SZXR1cm5TdGF0ZW1lbnQoKTsKICAgIHJldHVybl9zdGF0ZW1lbnQg
LT4gcmV0dXJuX3Rva2VuICAgICA9IGNsYXNzX2JvZHkgLT4gbGVmdF9icmFjZV90b2tlbjsKICAg
IHJldHVybl9zdGF0ZW1lbnQgLT4gZXhwcmVzc2lvbl9vcHQgICA9IF9fbnVsbCA7CiAgICByZXR1
cm5fc3RhdGVtZW50IC0+IHNlbWljb2xvbl90b2tlbiAgPSBjbGFzc19ib2R5IC0+IGxlZnRfYnJh
Y2VfdG9rZW47CiAgICByZXR1cm5fc3RhdGVtZW50IC0+IGlzX3JlYWNoYWJsZSAgICAgPSB0cnVl
OwoKICAgIEFzdEJsb2NrICpibG9jayAgICAgICAgICAgICAgICA9IGNvbXBpbGF0aW9uX3VuaXQg
LT4gYXN0X3Bvb2wgLT4gR2VuQmxvY2soKTsKICAgIGJsb2NrIC0+IGJsb2NrX3N5bWJvbCAgICAg
ICAgICA9IGNvbnN0cnVjdG9yIC0+IGJsb2NrX3N5bWJvbCAtPiBJbnNlcnRCbG9ja1N5bWJvbCgx
KTsgIAogICAgYmxvY2sgLT4gbGVmdF9icmFjZV90b2tlbiAgICAgID0gY2xhc3NfYm9keSAtPiBs
ZWZ0X2JyYWNlX3Rva2VuOwogICAgYmxvY2sgLT4gcmlnaHRfYnJhY2VfdG9rZW4gICAgID0gY2xh
c3NfYm9keSAtPiBsZWZ0X2JyYWNlX3Rva2VuOwoKICAgIGJsb2NrIC0+IGlzX3JlYWNoYWJsZSAg
ICAgICAgICA9IHRydWU7CiAgICBibG9jayAtPiBjYW5fY29tcGxldGVfbm9ybWFsbHkgPSBmYWxz
ZTsKICAgIGJsb2NrIC0+IEFsbG9jYXRlQmxvY2tTdGF0ZW1lbnRzKDEpOyAgCiAgICBibG9jayAt
PiBBZGRTdGF0ZW1lbnQocmV0dXJuX3N0YXRlbWVudCk7CgogICAgQXN0Q29uc3RydWN0b3JCbG9j
ayAqY29uc3RydWN0b3JfYmxvY2sgICAgICAgICAgICAgICAgICAgPSBjb21waWxhdGlvbl91bml0
IC0+IGFzdF9wb29sIC0+IEdlbkNvbnN0cnVjdG9yQmxvY2soKTsKICAgIGNvbnN0cnVjdG9yX2Js
b2NrIC0+IGxlZnRfYnJhY2VfdG9rZW4gICAgICAgICAgICAgICAgICAgID0gY2xhc3NfYm9keSAt
PiBsZWZ0X2JyYWNlX3Rva2VuOwogICAgY29uc3RydWN0b3JfYmxvY2sgLT4gZXhwbGljaXRfY29u
c3RydWN0b3JfaW52b2NhdGlvbl9vcHQgPSBzdXBlcl9jYWxsOwogICAgY29uc3RydWN0b3JfYmxv
Y2sgLT4gYmxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBibG9jazsKICAgIGNv
bnN0cnVjdG9yX2Jsb2NrIC0+IHJpZ2h0X2JyYWNlX3Rva2VuICAgICAgICAgICAgICAgICAgID0g
Y2xhc3NfYm9keSAtPiBsZWZ0X2JyYWNlX3Rva2VuOwoKICAgIEFzdE1ldGhvZERlY2xhcmF0b3Ig
Km1ldGhvZF9kZWNsYXJhdG9yICAgICAgID0gY29tcGlsYXRpb25fdW5pdCAtPiBhc3RfcG9vbCAt
PiBHZW5NZXRob2REZWNsYXJhdG9yKCk7CiAgICBtZXRob2RfZGVjbGFyYXRvciAtPiBpZGVudGlm
aWVyX3Rva2VuICAgICAgICA9IGxlZnRfbG9jOwogICAgbWV0aG9kX2RlY2xhcmF0b3IgLT4gbGVm
dF9wYXJlbnRoZXNpc190b2tlbiAgPSBjbGFzc19jcmVhdGlvbiAtPiBsZWZ0X3BhcmVudGhlc2lz
X3Rva2VuOwogICAgbWV0aG9kX2RlY2xhcmF0b3IgLT4gcmlnaHRfcGFyZW50aGVzaXNfdG9rZW4g
PSByaWdodF9sb2M7CgogICAgQXN0Q29uc3RydWN0b3JEZWNsYXJhdGlvbiAqY29uc3RydWN0b3Jf
ZGVjbGFyYXRpb24gID0gY29tcGlsYXRpb25fdW5pdCAtPiBhc3RfcG9vbCAtPiBHZW5Db25zdHJ1
Y3RvckRlY2xhcmF0aW9uKCk7CiAgICBjb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbiAtPiBjb25zdHJ1
Y3Rvcl9kZWNsYXJhdG9yICAgPSBtZXRob2RfZGVjbGFyYXRvcjsKICAgIGNvbnN0cnVjdG9yX2Rl
Y2xhcmF0aW9uIC0+IGNvbnN0cnVjdG9yX2JvZHkgICAgICAgICA9IGNvbnN0cnVjdG9yX2Jsb2Nr
OwoKICAgIGNvbnN0cnVjdG9yX2RlY2xhcmF0aW9uIC0+IGNvbnN0cnVjdG9yX3N5bWJvbCA9IGNv
bnN0cnVjdG9yOwogICAgY29uc3RydWN0b3IgLT4gbWV0aG9kX29yX2NvbnN0cnVjdG9yX2RlY2xh
cmF0aW9uID0gY29uc3RydWN0b3JfZGVjbGFyYXRpb247CgogICAgIAogICAgIAogICAgIAogICAg
IAogICAgIAogICAgIAogICAgIAogICAgIAogICAgVmFyaWFibGVTeW1ib2wgKnN1cGVyX3RoaXMw
X3ZhcmlhYmxlID0gX19udWxsIDsKCiAgICBpZiAoYW5vbnltb3VzX3R5cGUgLT4gSXNMb2NhbCgp
KQogICAgewogICAgICAgIEdlbmVyYXRlTG9jYWxDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvcik7Cgog
ICAgICAgIE1ldGhvZFN5bWJvbCAqZ2VuZXJhdGVkX2NvbnN0cnVjdG9yID0gY29uc3RydWN0b3Ig
LT4gTG9jYWxDb25zdHJ1Y3RvcigpOwoKICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoICEg
Y29uc3RydWN0b3IgLT4gSXNHZW5lcmF0ZWRMb2NhbENvbnN0cnVjdG9yKCkgKSA/IDAgOgkoX19h
c3NlcnRfZmFpbCAoIiEgY29uc3RydWN0b3IgLT4gSXNHZW5lcmF0ZWRMb2NhbENvbnN0cnVjdG9y
KCkiICwgIi4uLy4uL2ppa2VzL3NyYy9leHByLmNwcCIsIDM5MzQsIF9fUFJFVFRZX0ZVTkNUSU9O
X18gKSwgMCkpKSA7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBnZW5lcmF0ZWRfY29u
c3RydWN0b3IgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImdlbmVyYXRlZF9jb25zdHJ1Y3RvciIg
LCAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiwgMzkzNSwgX19QUkVUVFlfRlVOQ1RJT05fXyAp
LCAwKSkpIDsKCiAgICAgICAgYmxvY2tfc3ltYm9sID0gZ2VuZXJhdGVkX2NvbnN0cnVjdG9yIC0+
IGJsb2NrX3N5bWJvbDsgIAoKICAgICAgICBpZiAoc3VwZXJfY2FsbCAtPiBiYXNlX29wdCkKICAg
ICAgICB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICBzdXBlcl90aGlzMF92YXJpYWJsZSA9IGJs
b2NrX3N5bWJvbCAtPiBJbnNlcnRWYXJpYWJsZVN5bWJvbChjb250cm9sLk1ha2VQYXJhbWV0ZXIo
MCkpOwogICAgICAgICAgICBzdXBlcl90aGlzMF92YXJpYWJsZSAtPiBNYXJrU3ludGhldGljKCk7
CiAgICAgICAgICAgIHN1cGVyX3RoaXMwX3ZhcmlhYmxlIC0+IFNldFR5cGUoc3VwZXJfY2FsbCAt
PiBiYXNlX29wdCAtPiBUeXBlKCkpOwogICAgICAgICAgICBzdXBlcl90aGlzMF92YXJpYWJsZSAt
PiBTZXRPd25lcihnZW5lcmF0ZWRfY29uc3RydWN0b3IpOwogICAgICAgICAgICBzdXBlcl90aGlz
MF92YXJpYWJsZSAtPiBNYXJrQ29tcGxldGUoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdXBl
cl90eXBlIC0+IElzTG9jYWwoKSkgIAogICAgICAgIHsKICAgICAgICAgICAgaWYgKHN1cGVyX3R5
cGUgLT4gTG9jYWxDbGFzc1Byb2Nlc3NpbmdDb21wbGV0ZWQoKSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBzdXBlcl9jb25zdHJ1Y3RvciAtPiBM
b2NhbENvbnN0cnVjdG9yKCkgJiYgKCEgc3VwZXJfY29uc3RydWN0b3IgLT4gSXNHZW5lcmF0ZWRM
b2NhbENvbnN0cnVjdG9yKCkpICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJzdXBlcl9jb25zdHJ1
Y3RvciAtPiBMb2NhbENvbnN0cnVjdG9yKCkgJiYgKCEgc3VwZXJfY29uc3RydWN0b3IgLT4gSXNH
ZW5lcmF0ZWRMb2NhbENvbnN0cnVjdG9yKCkpIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAi
LCAzOTU3LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgICAgICAgICAgICAgIHN1
cGVyX2NhbGwgLT4gc3ltYm9sID0gc3VwZXJfY29uc3RydWN0b3IgLT4gTG9jYWxDb25zdHJ1Y3Rv
cigpOwoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAoc3VwZXJfdHlwZSAtPiBBQ0NfU1RBVElD
KCkgPyAwIDogMSk7IGkgPCBzdXBlcl90eXBlIC0+IE51bUNvbnN0cnVjdG9yUGFyYW1ldGVycygp
OyBpKyspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVTeW1i
b2wgKmxvY2FsID0gc3VwZXJfdHlwZSAtPiBDb25zdHJ1Y3RvclBhcmFtZXRlcihpKSAtPiBhY2Nl
c3NlZF9sb2NhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbG9jYWxfc2hh
ZG93ID0gYW5vbnltb3VzX3R5cGUgLT4gRmluZE9ySW5zZXJ0TG9jYWxTaGFkb3cobG9jYWwpOwoK
ICAgICAgICAgICAgICAgICAgICBBc3RTaW1wbGVOYW1lICpzaW1wbGVfbmFtZSA9IGNvbXBpbGF0
aW9uX3VuaXQgLT4gYXN0X3Bvb2wgLT4gR2VuU2ltcGxlTmFtZShzdXBlcl9jYWxsIC0+IHN1cGVy
X3Rva2VuKTsKICAgICAgICAgICAgICAgICAgICBzaW1wbGVfbmFtZSAtPiBzeW1ib2wgPSBibG9j
a19zeW1ib2wgLT4gRmluZFZhcmlhYmxlU3ltYm9sKGxvY2FsX3NoYWRvdyAtPiBJZGVudGl0eSgp
KTsKCiAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBzaW1wbGVfbmFt
ZSAtPiBzeW1ib2wgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInNpbXBsZV9uYW1lIC0+IHN5bWJv
bCIgLCAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiwgMzk3MiwgX19QUkVUVFlfRlVOQ1RJT05f
XyApLCAwKSkpIDsKCiAgICAgICAgICAgICAgICAgICAgc3VwZXJfY2FsbCAtPiBBZGRMb2NhbEFy
Z3VtZW50KHNpbXBsZV9uYW1lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgICAgICBlbHNlICAKICAgICAgICAgICAgICAgIHN1cGVyX3R5cGUgLT4gQWRkTG9jYWxDb25z
dHJ1Y3RvckNhbGxFbnZpcm9ubWVudChHZXRFbnZpcm9ubWVudChzdXBlcl9jYWxsKSk7CiAgICAg
ICAgfQogICAgfQogICAgZWxzZSBpZiAoc3VwZXJfY2FsbCAtPiBiYXNlX29wdCkKICAgIHsKICAg
ICAgICBzdXBlcl90aGlzMF92YXJpYWJsZSA9IGJsb2NrX3N5bWJvbCAtPiBJbnNlcnRWYXJpYWJs
ZVN5bWJvbChjb250cm9sLk1ha2VQYXJhbWV0ZXIoMCkpOwogICAgICAgIHN1cGVyX3RoaXMwX3Zh
cmlhYmxlIC0+IE1hcmtTeW50aGV0aWMoKTsKICAgICAgICBzdXBlcl90aGlzMF92YXJpYWJsZSAt
PiBTZXRUeXBlKHN1cGVyX2NhbGwgLT4gYmFzZV9vcHQgLT4gVHlwZSgpKTsKICAgICAgICBzdXBl
cl90aGlzMF92YXJpYWJsZSAtPiBTZXRPd25lcihjb25zdHJ1Y3Rvcik7CiAgICAgICAgc3VwZXJf
dGhpczBfdmFyaWFibGUgLT4gU2V0TG9jYWxWYXJpYWJsZUluZGV4KGJsb2NrX3N5bWJvbCAtPiBt
YXhfdmFyaWFibGVfaW5kZXgrKyk7CgogICAgICAgIGNvbnN0cnVjdG9yIC0+IEFkZEZvcm1hbFBh
cmFtZXRlcihzdXBlcl90aGlzMF92YXJpYWJsZSk7CiAgICB9CgogICAgIAogICAgIAogICAgIAog
ICAgaWYgKHN1cGVyX3RoaXMwX3ZhcmlhYmxlKQogICAgewogICAgICAgIGNsYXNzX2NyZWF0aW9u
IC0+IEFkZEFyZ3VtZW50KHN1cGVyX2NhbGwgLT4gYmFzZV9vcHQpOyAgCgogICAgICAgIEFzdFNp
bXBsZU5hbWUgKnNpbXBsZV9uYW1lID0gY29tcGlsYXRpb25fdW5pdCAtPiBhc3RfcG9vbCAtPiBH
ZW5TaW1wbGVOYW1lKGNsYXNzX2NyZWF0aW9uIC0+IG5ld190b2tlbik7CiAgICAgICAgc2ltcGxl
X25hbWUgLT4gc3ltYm9sID0gc3VwZXJfdGhpczBfdmFyaWFibGU7CiAgICAgICAgc3VwZXJfY2Fs
bCAtPiBiYXNlX29wdCA9IHNpbXBsZV9uYW1lOyAgCiAgICB9CgogICAgY29uc3RydWN0b3IgLT4g
U2V0U2lnbmF0dXJlKGNvbnRyb2wsIHRoaXMwX3ZhcmlhYmxlKTsgIAoKICAgICAKICAgICAKICAg
ICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIGZvciAoaW50IGsgPSAwOyBrIDwg
c3VwZXJfY29uc3RydWN0b3IgLT4gTnVtRm9ybWFsUGFyYW1ldGVycygpOyBrKyspCiAgICB7CiAg
ICAgICAgVmFyaWFibGVTeW1ib2wgKnBhcmFtID0gc3VwZXJfY29uc3RydWN0b3IgLT4gRm9ybWFs
UGFyYW1ldGVyKGspLAogICAgICAgICAgICAgICAgICAgICAgICpzeW1ib2wgPSBibG9ja19zeW1i
b2wgLT4gRmluZFZhcmlhYmxlU3ltYm9sKHBhcmFtIC0+IElkZW50aXR5KCkpOwoKICAgICAgICAo
c3RhdGljX2Nhc3Q8dm9pZD4gICgoIHN5bWJvbCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgic3lt
Ym9sIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCA0MDE5LCBfX1BSRVRUWV9GVU5DVElP
Tl9fICksIDApKSkgOwoKICAgICAgICBBc3RTaW1wbGVOYW1lICpzaW1wbGVfbmFtZSA9IGNvbXBp
bGF0aW9uX3VuaXQgLT4gYXN0X3Bvb2wgLT4gR2VuU2ltcGxlTmFtZShjbGFzc19jcmVhdGlvbiAt
PiBuZXdfdG9rZW4pOwogICAgICAgIHNpbXBsZV9uYW1lIC0+IHN5bWJvbCA9IHN5bWJvbDsKICAg
ICAgICBzdXBlcl9jYWxsIC0+IEFkZEFyZ3VtZW50KHNpbXBsZV9uYW1lKTsKICAgIH0KCiAgICBj
bGFzc19jcmVhdGlvbiAtPiBjbGFzc190eXBlIC0+IHN5bWJvbCA9IGNvbnN0cnVjdG9yOwoKICAg
IHJldHVybjsKfQoKClR5cGVTeW1ib2wgKlNlbWFudGljOjpHZXRBbm9ueW1vdXNUeXBlKEFzdENs
YXNzSW5zdGFuY2VDcmVhdGlvbkV4cHJlc3Npb24gKmNsYXNzX2NyZWF0aW9uLCBUeXBlU3ltYm9s
ICpzdXBlcl90eXBlKQp7CiAgICBUeXBlU3ltYm9sICp0aGlzX3R5cGUgPSBUaGlzVHlwZSgpOwoK
ICAgIGlmIChzdXBlcl90eXBlIC0+IEFDQ19GSU5BTCgpKQogICAgewogICAgICAgICBSZXBvcnRT
ZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpTVVBFUl9JU19GSU5BTCwKICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3NfY3JlYXRpb24gLT4gY2xhc3NfdHlwZSAtPiBMZWZ0VG9rZW4oKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3NfY3JlYXRpb24gLT4gY2xhc3NfdHlwZSAtPiBSaWdodFRv
a2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyX3R5cGUgLT4gQ29udGFpbmluZ1Bh
Y2thZ2UoKSAtPiBQYWNrYWdlTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICBzdXBlcl90
eXBlIC0+IEV4dGVybmFsTmFtZSgpKTsKICAgIH0KCiAgICBBc3RDbGFzc0JvZHkgKmNsYXNzX2Jv
ZHkgPSBjbGFzc19jcmVhdGlvbiAtPiBjbGFzc19ib2R5X29wdDsKICAgIFR5cGVTeW1ib2wgKm91
dGVybW9zdF90eXBlID0gdGhpc190eXBlIC0+IG91dGVybW9zdF90eXBlOwoKICAgICAKICAgICAK
ICAgICAKICAgIEludFRvV3N0cmluZyB2YWx1ZShvdXRlcm1vc3RfdHlwZSAtPiBudW1fYW5vbnlt
b3VzX3R5cGVzKCkgKyAxKTsKCiAgICBpbnQgbGVuZ3RoID0gdmFsdWUuTGVuZ3RoKCkgKyBvdXRl
cm1vc3RfdHlwZSAtPiBOYW1lTGVuZ3RoKCkgKyAxOyAgCiAgICB3Y2hhcl90ICphbm9ueW1vdXNf
bmFtZSA9IG5ldyB3Y2hhcl90W2xlbmd0aCArIDFdOwogICAgd2NzY3B5KGFub255bW91c19uYW1l
LCBvdXRlcm1vc3RfdHlwZSAtPiBOYW1lKCkpOwogICAgd2NzY2F0KGFub255bW91c19uYW1lLCBT
dHJpbmdDb25zdGFudDo6VVNfX0RTKTsKICAgIHdjc2NhdChhbm9ueW1vdXNfbmFtZSwgdmFsdWUu
U3RyaW5nKCkpOwoKICAgIE5hbWVTeW1ib2wgKm5hbWVfc3ltYm9sID0gY29udHJvbC5GaW5kT3JJ
bnNlcnROYW1lKGFub255bW91c19uYW1lLCBsZW5ndGgpOwoKICAgIChzdGF0aWNfY2FzdDx2b2lk
PiAgKCggKCEgVGhpc01ldGhvZCgpKSB8fCBMb2NhbFN5bWJvbFRhYmxlKCkuVG9wKCkgKSA/IDAg
OgkoX19hc3NlcnRfZmFpbCAoIighIFRoaXNNZXRob2QoKSkgfHwgTG9jYWxTeW1ib2xUYWJsZSgp
LlRvcCgpIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCA0MDYxLCBfX1BSRVRUWV9GVU5D
VElPTl9fICksIDApKSkgOwoKICAgIFR5cGVTeW1ib2wgKmlubmVyX3R5cGUgPSAoVGhpc01ldGhv
ZCgpID8gTG9jYWxTeW1ib2xUYWJsZSgpLlRvcCgpIC0+IEluc2VydEFub255bW91c1R5cGVTeW1i
b2wobmFtZV9zeW1ib2wpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6IHRoaXNfdHlwZSAtPiBJbnNlcnRBbm9ueW1vdXNUeXBlU3ltYm9sKG5hbWVfc3ltYm9sKSk7
CiAgICBpbm5lcl90eXBlIC0+IFNldEFDQ19QUklWQVRFKCk7CiAgICBpbm5lcl90eXBlIC0+IE1h
cmtBbm9ueW1vdXMoKTsKICAgIGlubmVyX3R5cGUgLT4gb3V0ZXJtb3N0X3R5cGUgPSBvdXRlcm1v
c3RfdHlwZTsKICAgIGlubmVyX3R5cGUgLT4gc3VwZXJ0eXBlc19jbG9zdXJlID0gbmV3IFN5bWJv
bFNldDsKICAgIGlubmVyX3R5cGUgLT4gc3VidHlwZXNfY2xvc3VyZSA9IG5ldyBTeW1ib2xTZXQ7
CiAgICBpbm5lcl90eXBlIC0+IHNlbWFudGljX2Vudmlyb25tZW50ID0gbmV3IFNlbWFudGljRW52
aXJvbm1lbnQoKFNlbWFudGljICopIHRoaXMsIGlubmVyX3R5cGUsIHN0YXRlX3N0YWNrLlRvcCgp
KTsKICAgIGlubmVyX3R5cGUgLT4gZGVjbGFyYXRpb24gPSBjbGFzc19jcmVhdGlvbjsKICAgIGlu
bmVyX3R5cGUgLT4gZmlsZV9zeW1ib2wgPSBzb3VyY2VfZmlsZV9zeW1ib2w7CiAgICBpbm5lcl90
eXBlIC0+IFNldE93bmVyKFRoaXNNZXRob2QoKSA/IChTeW1ib2wgKikgVGhpc01ldGhvZCgpIDog
KFN5bWJvbCAqKSB0aGlzX3R5cGUpOwogICAgIAogICAgIAogICAgIAogICAgaW5uZXJfdHlwZSAt
PiBTZXRTeW1ib2xUYWJsZShjbGFzc19ib2R5IC0+IE51bUNsYXNzQm9keURlY2xhcmF0aW9ucygp
ICsgMyk7CiAgICBpbm5lcl90eXBlIC0+IFNldExvY2F0aW9uKCk7CiAgICBpbm5lcl90eXBlIC0+
IFNldFNpZ25hdHVyZShjb250cm9sKTsKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAg
ICBpbm5lcl90eXBlIC0+IFNldEFDQ19GSU5BTCgpOwogICAgaWYgKFN0YXRpY1JlZ2lvbigpIHx8
IChFeHBsaWNpdENvbnN0cnVjdG9ySW52b2NhdGlvbigpICYmIGlubmVyX3R5cGUgLT4gQ29udGFp
bmluZ1R5cGUoKSA9PSBUaGlzVHlwZSgpKSkKICAgICAgICAgaW5uZXJfdHlwZSAtPiBTZXRBQ0Nf
U1RBVElDKCk7CiAgICBlbHNlIGlubmVyX3R5cGUgLT4gSW5zZXJ0VGhpcygwKTsKCiAgICBpZiAo
c3VwZXJfdHlwZSAtPiBBQ0NfSU5URVJGQUNFKCkpCiAgICB7CiAgICAgICAgIGlubmVyX3R5cGUg
LT4gQWRkSW50ZXJmYWNlKHN1cGVyX3R5cGUpOwogICAgICAgICBpbm5lcl90eXBlIC0+IHN1cGVy
ID0gY29udHJvbC5PYmplY3QoKTsKICAgIH0KICAgIGVsc2UgaW5uZXJfdHlwZSAtPiBzdXBlciA9
IHN1cGVyX3R5cGU7CgogICAgb3V0ZXJtb3N0X3R5cGUgLT4gQWRkQW5vbnltb3VzVHlwZShpbm5l
cl90eXBlKTsKICAgIGRlbGV0ZSBbXSBhbm9ueW1vdXNfbmFtZTsKCiAgICAgCiAgICAgCiAgICAg
CiAgICBHZXRBbm9ueW1vdXNDb25zdHJ1Y3RvcihjbGFzc19jcmVhdGlvbiwgaW5uZXJfdHlwZSk7
CgogICAgIAogICAgIAogICAgIAogICAgQ2hlY2tDbGFzc01lbWJlcnMoaW5uZXJfdHlwZSwgY2xh
c3NfYm9keSk7CiAgICBQcm9jZXNzTmVzdGVkVHlwZUhlYWRlcnMoaW5uZXJfdHlwZSwgY2xhc3Nf
Ym9keSk7CiAgICBpZiAoaW5uZXJfdHlwZSAtPiBvd25lciAtPiBNZXRob2RDYXN0KCkpCiAgICAg
ICAgIFByb2Nlc3NTdXBlclR5cGVzT2ZPdXRlclR5cGUoaW5uZXJfdHlwZSk7CiAgICBlbHNlIFBy
b2Nlc3NOZXN0ZWRTdXBlclR5cGVzKGlubmVyX3R5cGUpOwoKICAgICAKICAgICAKICAgICAKICAg
IGlmIChjbGFzc19ib2R5IC0+IFVucGFyc2VkQ2xhc3NCb2R5Q2FzdCgpKQogICAgewogICAgICAg
IGlmICghIGNvbnRyb2wucGFyc2VyIC0+IEluaXRpYWxpemVyUGFyc2UobGV4X3N0cmVhbSwgY2xh
c3NfYm9keSkpCiAgICAgICAgICAgICBjb21waWxhdGlvbl91bml0IC0+IGtpbmQgPSBBc3Q6OkJB
RF9DT01QSUxBVElPTjsgIAogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGlubmVy
X3R5cGUgLT4gTWFya0hlYWRlclByb2Nlc3NlZCgpOwogICAgICAgICAgICBQcm9jZXNzTWVtYmVy
cyhpbm5lcl90eXBlIC0+IHNlbWFudGljX2Vudmlyb25tZW50LCBjbGFzc19ib2R5KTsKICAgICAg
ICAgICAgQ29tcGxldGVTeW1ib2xUYWJsZShpbm5lcl90eXBlIC0+IHNlbWFudGljX2Vudmlyb25t
ZW50LCBjbGFzc19ib2R5IC0+IGxlZnRfYnJhY2VfdG9rZW4sIGNsYXNzX2JvZHkpOwogICAgICAg
IH0KCiAgICAgICAgaWYgKCEgY29udHJvbC5wYXJzZXIgLT4gQm9keVBhcnNlKGxleF9zdHJlYW0s
IGNsYXNzX2JvZHkpKQogICAgICAgICAgICAgY29tcGlsYXRpb25fdW5pdCAtPiBraW5kID0gQXN0
OjpCQURfQ09NUElMQVRJT047ICAKICAgICAgICBlbHNlIFByb2Nlc3NFeGVjdXRhYmxlQm9kaWVz
KGlubmVyX3R5cGUgLT4gc2VtYW50aWNfZW52aXJvbm1lbnQsIGNsYXNzX2JvZHkpOwogICAgfQog
ICAgZWxzZSAgCiAgICB7CiAgICAgICAgaW5uZXJfdHlwZSAtPiBNYXJrSGVhZGVyUHJvY2Vzc2Vk
KCk7CiAgICAgICAgUHJvY2Vzc01lbWJlcnMoaW5uZXJfdHlwZSAtPiBzZW1hbnRpY19lbnZpcm9u
bWVudCwgY2xhc3NfYm9keSk7CiAgICAgICAgQ29tcGxldGVTeW1ib2xUYWJsZShpbm5lcl90eXBl
IC0+IHNlbWFudGljX2Vudmlyb25tZW50LCBjbGFzc19ib2R5IC0+IGxlZnRfYnJhY2VfdG9rZW4s
IGNsYXNzX2JvZHkpOwogICAgICAgIFByb2Nlc3NFeGVjdXRhYmxlQm9kaWVzKGlubmVyX3R5cGUg
LT4gc2VtYW50aWNfZW52aXJvbm1lbnQsIGNsYXNzX2JvZHkpOwogICAgfQoKICAgICAKICAgICAK
ICAgICAKICAgICAKICAgIE1ldGhvZFN5bWJvbCAqY29uc3RydWN0b3IgPSBjbGFzc19jcmVhdGlv
biAtPiBjbGFzc190eXBlIC0+IHN5bWJvbCAtPiBNZXRob2RDYXN0KCk7CiAgICBpZiAoY29uc3Ry
dWN0b3IpCiAgICB7CiAgICAgICAgY2xhc3NfYm9keSAtPiBkZWZhdWx0X2NvbnN0cnVjdG9yID0g
KEFzdENvbnN0cnVjdG9yRGVjbGFyYXRpb24gKikgY29uc3RydWN0b3IgLT4gbWV0aG9kX29yX2Nv
bnN0cnVjdG9yX2RlY2xhcmF0aW9uOwoKICAgICAgICBpZiAoaW5uZXJfdHlwZSAtPiBJc0xvY2Fs
KCkpCiAgICAgICAgewogICAgICAgICAgICBpbm5lcl90eXBlIC0+IEFkZExvY2FsQ29uc3RydWN0
b3JDYWxsRW52aXJvbm1lbnQoR2V0RW52aXJvbm1lbnQoY2xhc3NfY3JlYXRpb24pKTsKICAgICAg
ICAgICAgVXBkYXRlTG9jYWxDb25zdHJ1Y3RvcnMoaW5uZXJfdHlwZSk7CiAgICAgICAgfQogICAg
fQoKICAgICAKICAgICAKICAgICAKICAgIGlubmVyX3R5cGUgLT4gUmVzZXRBQ0NfU1RBVElDKCk7
CgogICAgcmV0dXJuIGlubmVyX3R5cGU7Cn0KCgp2b2lkIFNlbWFudGljOjpQcm9jZXNzQ2xhc3NJ
bnN0YW5jZUNyZWF0aW9uRXhwcmVzc2lvbihBc3QgKmV4cHIpCnsKICAgIEFzdENsYXNzSW5zdGFu
Y2VDcmVhdGlvbkV4cHJlc3Npb24gKmNsYXNzX2NyZWF0aW9uID0gKEFzdENsYXNzSW5zdGFuY2VD
cmVhdGlvbkV4cHJlc3Npb24gKikgZXhwcjsKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAg
CiAgICBTeW1ib2xTZXQgKmV4Y2VwdGlvbl9zZXQgPSBUcnlFeGNlcHRpb25UYWJsZVN0YWNrKCku
VG9wKCk7CiAgICBpZiAoZXhjZXB0aW9uX3NldCkKICAgIHsKICAgICAgICBleGNlcHRpb25fc2V0
IC0+IEFkZEVsZW1lbnQoY29udHJvbC5FcnJvcigpKTsKICAgIH0KCiAgICBBc3QgKmFjdHVhbF90
eXBlID0gY2xhc3NfY3JlYXRpb24gLT4gY2xhc3NfdHlwZSAtPiB0eXBlOwogICAgVHlwZVN5bWJv
bCAqdHlwZTsKICAgIGlmIChjbGFzc19jcmVhdGlvbiAtPiBiYXNlX29wdCkKICAgIHsKICAgICAg
ICBQcm9jZXNzRXhwcmVzc2lvbihjbGFzc19jcmVhdGlvbiAtPiBiYXNlX29wdCk7CgogICAgICAg
IFR5cGVTeW1ib2wgKmVuY2xvc2luZ190eXBlID0gY2xhc3NfY3JlYXRpb24gLT4gYmFzZV9vcHQg
LT4gVHlwZSgpOwogICAgICAgIGlmIChlbmNsb3NpbmdfdHlwZSA9PSBjb250cm9sLm5vX3R5cGUp
CiAgICAgICAgewogICAgICAgICAgICBjbGFzc19jcmVhdGlvbiAtPiBzeW1ib2wgPSBjb250cm9s
Lm5vX3R5cGU7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAo
ZW5jbG9zaW5nX3R5cGUgPT0gY29udHJvbC5udWxsX3R5cGUgfHwgZW5jbG9zaW5nX3R5cGUgLT4g
UHJpbWl0aXZlKCkpCiAgICAgICAgewogICAgICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRp
Y0Vycm9yOjpUWVBFX05PVF9SRUZFUkVOQ0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzX2NyZWF0aW9uIC0+IGJhc2Vfb3B0IC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGFzc19jcmVhdGlvbiAtPiBiYXNlX29wdCAtPiBSaWdodFRva2VuKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuY2xvc2luZ190eXBlIC0+IEV4dGVybmFsTmFtZSgp
KTsKICAgICAgICAgICAgY2xhc3NfY3JlYXRpb24gLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBl
OwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAgCiAgICAgICAgIAogICAg
ICAgICAKICAgICAgICB0eXBlID0gTXVzdEZpbmROZXN0ZWRUeXBlKGVuY2xvc2luZ190eXBlLCBh
Y3R1YWxfdHlwZSk7CiAgICAgICAgaWYgKHR5cGUgLT4gQUNDX0lOVEVSRkFDRSgpKQogICAgICAg
IHsKICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6SU5URVJGQUNFX05P
VF9JTk5FUl9DTEFTUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsX3R5cGUgLT4g
TGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbF90eXBlIC0+IFJp
Z2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAtPiBDb250YWluaW5n
UGFja2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGUgLT4gRXh0ZXJuYWxOYW1lKCkpOwogICAgICAgICAgICBjbGFzc19jcmVhdGlvbiAtPiBzeW1i
b2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAg
ICAgaWYgKHR5cGUgLT4gQUNDX1NUQVRJQygpKQogICAgICAgIHsKICAgICAgICAgICAgUmVwb3J0
U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6U1RBVElDX05PVF9JTk5FUl9DTEFTUywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWN0dWFsX3R5cGUgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFjdHVhbF90eXBlIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZSAtPiBDb250YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VOYW1l
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgLT4gRXh0ZXJuYWxOYW1lKCkpOwog
ICAgICAgICAgICBjbGFzc19jcmVhdGlvbiAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAg
dHlwZSA9IE11c3RGaW5kVHlwZShhY3R1YWxfdHlwZSk7CiAgICAgICAgaWYgKHR5cGUgLT4gSXNJ
bm5lcigpKQogICAgICAgIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoRXhwbGljaXRDb25zdHJ1Y3Rvckludm9j
YXRpb24oKSAmJiB0eXBlIC0+IENvbnRhaW5pbmdUeXBlKCkgPT0gVGhpc1R5cGUoKSkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6SU5O
RVJfQ09OU1RSVUNUT1JfSU5fRVhQTElDSVRfQ09OU1RSVUNUT1JfSU5WT0NBVElPTiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX2NyZWF0aW9uIC0+IExlZnRUb2tlbigpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfY3JlYXRpb24gLT4gUmlnaHRUb2tl
bigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSAtPiBDb250YWluaW5nUGFj
a2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlIC0+IEV4dGVybmFsTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhp
c1R5cGUoKSAtPiBDb250YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUaGlzVHlwZSgpIC0+IEV4dGVybmFsTmFtZSgpKTsKICAg
ICAgICAgICAgICAgIGNsYXNzX2NyZWF0aW9uIC0+IHN5bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsK
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY2xhc3Nf
Y3JlYXRpb24gLT4gYmFzZV9vcHQgPSBDcmVhdGVBY2Nlc3NUb1R5cGUoY2xhc3NfY3JlYXRpb24s
IHR5cGUgLT4gQ29udGFpbmluZ1R5cGUoKSk7CiAgICAgICAgfQogICAgfQoKICAgIGJvb2wgbm9f
YmFkX2FyZ3VtZW50ID0gdHJ1ZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3NfY3JlYXRp
b24gLT4gTnVtQXJndW1lbnRzKCk7IGkrKykKICAgIHsKICAgICAgICBBc3RFeHByZXNzaW9uICpl
eHByID0gY2xhc3NfY3JlYXRpb24gLT4gQXJndW1lbnQoaSk7CiAgICAgICAgUHJvY2Vzc0V4cHJl
c3Npb25PclN0cmluZ0NvbnN0YW50KGV4cHIpOwogICAgICAgIG5vX2JhZF9hcmd1bWVudCA9IG5v
X2JhZF9hcmd1bWVudCAmJiAoZXhwciAtPiBzeW1ib2wgIT0gY29udHJvbC5ub190eXBlKTsKICAg
IH0KCiAgICBUeXBlU3ltYm9sICphbm9ueW1vdXNfdHlwZSA9IF9fbnVsbCA7CgogICAgaWYgKCEg
bm9fYmFkX2FyZ3VtZW50KQogICAgewogICAgICAgIGNsYXNzX2NyZWF0aW9uIC0+IGNsYXNzX3R5
cGUgLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAgICAgIGNsYXNzX2NyZWF0aW9uIC0+
IHN5bWJvbCA9IHR5cGU7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgTWV0aG9kU3ltYm9s
ICptZXRob2QgPSBGaW5kQ29uc3RydWN0b3IoKHR5cGUgLT4gQUNDX0lOVEVSRkFDRSgpID8gY29u
dHJvbC5PYmplY3QoKSA6IHR5cGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzX2NyZWF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFjdHVhbF90eXBlIC0+IExlZnRUb2tlbigpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX2NyZWF0aW9uIC0+IHJp
Z2h0X3BhcmVudGhlc2lzX3Rva2VuKTsKCiAgICAgICAgaWYgKCEgbWV0aG9kKQogICAgICAgIHsK
ICAgICAgICAgICAgY2xhc3NfY3JlYXRpb24gLT4gY2xhc3NfdHlwZSAtPiBzeW1ib2wgPSBjb250
cm9sLm5vX3R5cGU7CiAgICAgICAgICAgIGNsYXNzX2NyZWF0aW9uIC0+IHN5bWJvbCA9IHR5cGU7
CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIChzdGF0aWNfY2Fz
dDx2b2lkPiAgKCggbWV0aG9kIC0+IElzVHlwZWQoKSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgi
bWV0aG9kIC0+IElzVHlwZWQoKSIgLCAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiwgNDI4Mywg
X19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICAgICAgICAgIGlmIChjbGFzc19jcmVh
dGlvbiAtPiBiYXNlX29wdCAmJgogICAgICAgICAgICAgICAgKGNsYXNzX2NyZWF0aW9uIC0+IGJh
c2Vfb3B0IC0+IHN5bWJvbCAhPSBjb250cm9sLm5vX3R5cGUpICYmCiAgICAgICAgICAgICAgICAo
Y2xhc3NfY3JlYXRpb24gLT4gYmFzZV9vcHQgLT4gVHlwZSgpICE9IG1ldGhvZCAtPiBjb250YWlu
aW5nX3R5cGUgLT4gQ29udGFpbmluZ1R5cGUoKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggbWV0aG9kIC0+IGNvbnRhaW5pbmdfdHlwZSApID8g
MCA6CShfX2Fzc2VydF9mYWlsICgibWV0aG9kIC0+IGNvbnRhaW5pbmdfdHlwZSIgLCAiLi4vLi4v
amlrZXMvc3JjL2V4cHIuY3BwIiwgNDI4OSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsK
ICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggbWV0aG9kIC0+IGNvbnRhaW5p
bmdfdHlwZSAtPiBDb250YWluaW5nVHlwZSgpICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJtZXRo
b2QgLT4gY29udGFpbmluZ190eXBlIC0+IENvbnRhaW5pbmdUeXBlKCkiICwgIi4uLy4uL2ppa2Vz
L3NyYy9leHByLmNwcCIsIDQyOTAsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgICAg
ICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIGNsYXNzX2NyZWF0aW9uIC0+IGJhc2Vf
b3B0IC0+IFR5cGUoKSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiY2xhc3NfY3JlYXRpb24gLT4g
YmFzZV9vcHQgLT4gVHlwZSgpIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCA0MjkxLCBf
X1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwogICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0
PHZvaWQ+ICAoKCBDYW5NZXRob2RJbnZvY2F0aW9uQ29udmVydChtZXRob2QgLT4gY29udGFpbmlu
Z190eXBlIC0+IENvbnRhaW5pbmdUeXBlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2xhc3NfY3JlYXRpb24gLT4gYmFzZV9vcHQgLT4gVHlwZSgp
KSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiQ2FuTWV0aG9kSW52b2NhdGlvbkNvbnZlcnQobWV0
aG9kIC0+IGNvbnRhaW5pbmdfdHlwZSAtPiBDb250YWluaW5nVHlwZSgpLCBjbGFzc19jcmVhdGlv
biAtPiBiYXNlX29wdCAtPiBUeXBlKCkpIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5jcHAiLCA0
MjkzLCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAgICAgICAgICAgICAgIGNsYXNz
X2NyZWF0aW9uIC0+IGJhc2Vfb3B0ID0gQ29udmVydFRvVHlwZShjbGFzc19jcmVhdGlvbiAtPiBi
YXNlX29wdCwgbWV0aG9kIC0+IGNvbnRhaW5pbmdfdHlwZSAtPiBDb250YWluaW5nVHlwZSgpKTsK
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc19jcmVh
dGlvbiAtPiBOdW1Bcmd1bWVudHMoKTsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICBBc3RFeHByZXNzaW9uICpleHByID0gY2xhc3NfY3JlYXRpb24gLT4gQXJndW1lbnQoaSk7CiAg
ICAgICAgICAgICAgICBpZiAoZXhwciAtPiBUeXBlKCkgIT0gbWV0aG9kIC0+IEZvcm1hbFBhcmFt
ZXRlcihpKSAtPiBUeXBlKCkpCiAgICAgICAgICAgICAgICAgICAgY2xhc3NfY3JlYXRpb24gLT4g
QXJndW1lbnQoaSkgPSBDb252ZXJ0VG9UeXBlKGV4cHIsIG1ldGhvZCAtPiBGb3JtYWxQYXJhbWV0
ZXIoaSkgLT4gVHlwZSgpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGNsYXNzX2Ny
ZWF0aW9uIC0+IGNsYXNzX2JvZHlfb3B0KQogICAgICAgICAgICAgICAgYW5vbnltb3VzX3R5cGUg
PSBHZXRBbm9ueW1vdXNUeXBlKGNsYXNzX2NyZWF0aW9uLCB0eXBlKTsKICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAodHlwZSAtPiBBQ0NfSU5URVJGQUNF
KCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3Io
U2VtYW50aWNFcnJvcjo6Tk9UX0FfQ0xBU1MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWN0dWFsX3R5cGUgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWN0dWFsX3R5cGUgLT4gUmlnaHRUb2tlbigpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGUgLT4gQ29udGFpbmluZ1BhY2thZ2UoKSAtPiBQYWNrYWdl
TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgLT4gRXh0ZXJu
YWxOYW1lKCkpOwogICAgICAgICAgICAgICAgICAgIGNsYXNzX2NyZWF0aW9uIC0+IHN5bWJvbCA9
IGNvbnRyb2wubm9fdHlwZTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlIC0+IEFDQ19BQlNUUkFDVCgpKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFu
dGljRXJyb3I6OkFCU1RSQUNUX1RZUEVfQ1JFQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWN0dWFsX3R5cGUgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWN0dWFsX3R5cGUgLT4gUmlnaHRUb2tlbigpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgLT4gRXh0ZXJuYWxOYW1lKCkpOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNsYXNzX2NyZWF0aW9uIC0+IGNsYXNzX3R5cGUg
LT4gc3ltYm9sID0gbWV0aG9kOwoKICAgICAgICAgICAgICAgIGlmIChleGNlcHRpb25fc2V0KQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtZXRob2Qg
LT4gTnVtVGhyb3dzKCkgLSAxOyBpID49IDA7IGktLSkKICAgICAgICAgICAgICAgICAgICAgICAg
ZXhjZXB0aW9uX3NldCAtPiBBZGRFbGVtZW50KG1ldGhvZCAtPiBUaHJvd3MoaSkpOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghIChUaGlzVHlwZSgpIC0+IEFub255bW91
cygpICYmIFRoaXNNZXRob2QoKSAmJiBUaGlzTWV0aG9kKCkgLT4gSWRlbnRpdHkoKSA9PSBjb250
cm9sLmJsb2NrX2luaXRfbmFtZV9zeW1ib2wpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IGsgPSBtZXRob2QgLT4gTnVtVGhyb3dzKCkgLSAxOyBrID49IDA7
IGstLSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVT
eW1ib2wgKmV4Y2VwdGlvbiA9IG1ldGhvZCAtPiBUaHJvd3Moayk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghIENhdGNoYWJsZUV4Y2VwdGlvbihleGNlcHRpb24pKQogICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRTZW1FcnJvcihT
ZW1hbnRpY0Vycm9yOjpVTkNBVENIQUJMRV9DT05TVFJVQ1RPUl9USFJPV05fQ0hFQ0tFRF9FWENF
UFRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxf
dHlwZSAtPiBMZWZ0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFjdHVhbF90eXBlIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGUgLT4gRXh0ZXJuYWxOYW1lKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24gLT4gQ29udGFpbmluZ1Bh
Y2thZ2UoKSAtPiBQYWNrYWdlTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXhjZXB0aW9uIC0+IEV4dGVybmFsTmFtZSgpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgY2xhc3NfY3JlYXRpb24gLT4gc3ltYm9sID0gKGFub255bW91
c190eXBlID8gYW5vbnltb3VzX3R5cGUgOiB0eXBlKTsKCiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgaWYgKFRoaXNUeXBl
KCkgIT0gdHlwZSAmJgogICAgICAgICAgICAgICAgVGhpc1R5cGUoKSAtPiBvdXRlcm1vc3RfdHlw
ZSA9PSB0eXBlIC0+IG91dGVybW9zdF90eXBlICYmCiAgICAgICAgICAgICAgICBtZXRob2QgLT4g
QUNDX1BSSVZBVEUoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCEgbWV0aG9k
IC0+IExvY2FsQ29uc3RydWN0b3IoKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICBtZXRob2QgPSB0eXBlIC0+IEdldFJlYWRBY2Nlc3NNZXRob2QobWV0aG9kKTsKICAgICAg
ICAgICAgICAgICAgICBjbGFzc19jcmVhdGlvbiAtPiBjbGFzc190eXBlIC0+IHN5bWJvbCA9IG1l
dGhvZDsKCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NfY3JlYXRpb24gLT4gQWRk
TnVsbEFyZ3VtZW50KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgZWxzZSBDb25zdHJ1Y3RvckFjY2Vzc0NoZWNrKGNsYXNzX2NyZWF0aW9uLCBtZXRob2QpOwoK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICgoISBhbm9ueW1vdXNfdHlwZSkgJiYgdHlwZSAt
PiBJc0xvY2FsKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlIC0+IExv
Y2FsQ2xhc3NQcm9jZXNzaW5nQ29tcGxldGVkKCkgJiYgbWV0aG9kIC0+IExvY2FsQ29uc3RydWN0
b3IoKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8
dm9pZD4gICgoICEgbWV0aG9kIC0+IElzR2VuZXJhdGVkTG9jYWxDb25zdHJ1Y3RvcigpICkgPyAw
IDoJKF9fYXNzZXJ0X2ZhaWwgKCIhIG1ldGhvZCAtPiBJc0dlbmVyYXRlZExvY2FsQ29uc3RydWN0
b3IoKSIgLCAiLi4vLi4vamlrZXMvc3JjL2V4cHIuY3BwIiwgNDM4NSwgX19QUkVUVFlfRlVOQ1RJ
T05fXyApLCAwKSkpIDsKCiAgICAgICAgICAgICAgICAgICAgY2xhc3NfY3JlYXRpb24gLT4gY2xh
c3NfdHlwZSAtPiBzeW1ib2wgPSBtZXRob2QgLT4gTG9jYWxDb25zdHJ1Y3RvcigpOwoKICAgICAg
ICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIG1ldGhvZCAtPiBMb2NhbENvbnN0
cnVjdG9yKCkgLT4gc2lnbmF0dXJlICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJtZXRob2QgLT4g
TG9jYWxDb25zdHJ1Y3RvcigpIC0+IHNpZ25hdHVyZSIgLCAiLi4vLi4vamlrZXMvc3JjL2V4cHIu
Y3BwIiwgNDM4OSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaSA9ICh0eXBlIC0+IEFDQ19TVEFUSUMoKSA/IDAgOiAxKTsgaSA8IHR5
cGUgLT4gTnVtQ29uc3RydWN0b3JQYXJhbWV0ZXJzKCk7IGkrKykKICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlU3ltYm9sICpsb2NhbCA9IHR5cGUg
LT4gQ29uc3RydWN0b3JQYXJhbWV0ZXIoaSkgLT4gYWNjZXNzZWRfbG9jYWw7CgogICAgICAgICAg
ICAgICAgICAgICAgICBBc3RTaW1wbGVOYW1lICpzaW1wbGVfbmFtZSA9IGNvbXBpbGF0aW9uX3Vu
aXQgLT4gYXN0X3Bvb2wgLT4gR2VuU2ltcGxlTmFtZShjbGFzc19jcmVhdGlvbiAtPiBuZXdfdG9r
ZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgIHNpbXBsZV9uYW1lIC0+IHN5bWJvbCA9ICh0eXBlIC0+IG93bmVy
ID09IFRoaXNNZXRob2QoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPyBsb2NhbAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBUaGlzVHlwZSgpIC0+IEZp
bmRPckluc2VydExvY2FsU2hhZG93KGxvY2FsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzX2NyZWF0aW9uIC0+IEFkZExvY2FsQXJndW1lbnQoc2ltcGxlX25hbWUpOwogICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgIAogICAg
ICAgICAgICAgICAgICAgIHR5cGUgLT4gQWRkTG9jYWxDb25zdHJ1Y3RvckNhbGxFbnZpcm9ubWVu
dChHZXRFbnZpcm9ubWVudChjbGFzc19jcmVhdGlvbikpOwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgfQoKICAgIHJldHVybjsKfQoKCnZvaWQgU2VtYW50aWM6OlByb2Nlc3NBcnJheUNyZWF0
aW9uRXhwcmVzc2lvbihBc3QgKmV4cHIpCnsKICAgIEFzdEFycmF5Q3JlYXRpb25FeHByZXNzaW9u
ICphcnJheV9jcmVhdGlvbiA9IChBc3RBcnJheUNyZWF0aW9uRXhwcmVzc2lvbiAqKSBleHByOwoK
ICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIFN5bWJvbFNldCAqZXhjZXB0aW9uX3Nl
dCA9IFRyeUV4Y2VwdGlvblRhYmxlU3RhY2soKS5Ub3AoKTsKICAgIGlmIChleGNlcHRpb25fc2V0
KQogICAgewogICAgICAgIGV4Y2VwdGlvbl9zZXQgLT4gQWRkRWxlbWVudChjb250cm9sLlJ1bnRp
bWVFeGNlcHRpb24oKSk7CiAgICAgICAgZXhjZXB0aW9uX3NldCAtPiBBZGRFbGVtZW50KGNvbnRy
b2wuRXJyb3IoKSk7CiAgICB9CgogICAgQXN0QXJyYXlUeXBlICphcnJheV90eXBlOwoKICAgIFR5
cGVTeW1ib2wgKnR5cGU7CgogICAgaWYgKChhcnJheV90eXBlID0gYXJyYXlfY3JlYXRpb24gLT4g
YXJyYXlfdHlwZSAtPiBBcnJheVR5cGVDYXN0KCkpKQogICAgewogICAgICAgIEFzdFByaW1pdGl2
ZVR5cGUgKnByaW1pdGl2ZV90eXBlID0gYXJyYXlfdHlwZSAtPiB0eXBlIC0+IFByaW1pdGl2ZVR5
cGVDYXN0KCk7CiAgICAgICAgdHlwZSA9IChwcmltaXRpdmVfdHlwZSA/IEZpbmRQcmltaXRpdmVU
eXBlKHByaW1pdGl2ZV90eXBlKSA6IE11c3RGaW5kVHlwZShhcnJheV90eXBlIC0+IHR5cGUpKTsK
ICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBBc3RQcmltaXRpdmVUeXBlICpwcmltaXRpdmVf
dHlwZSA9IGFycmF5X2NyZWF0aW9uIC0+IGFycmF5X3R5cGUgLT4gUHJpbWl0aXZlVHlwZUNhc3Qo
KTsKICAgICAgICB0eXBlID0gKHByaW1pdGl2ZV90eXBlID8gRmluZFByaW1pdGl2ZVR5cGUocHJp
bWl0aXZlX3R5cGUpIDogTXVzdEZpbmRUeXBlKGFycmF5X2NyZWF0aW9uIC0+IGFycmF5X3R5cGUp
KTsKICAgIH0KCiAgICBpbnQgbnVtX2RpbWVuc2lvbnMgPSAoYXJyYXlfdHlwZSA/IGFycmF5X3R5
cGUgLT4gTnVtQnJhY2tldHMoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiBhcnJheV9jcmVhdGlvbiAtPiBOdW1EaW1FeHBycygpICsgYXJyYXlfY3JlYXRpb24gLT4gTnVt
QnJhY2tldHMoKSk7CgogICAgaWYgKG51bV9kaW1lbnNpb25zID4gMCkKICAgICAgICB0eXBlID0g
dHlwZSAtPiBHZXRBcnJheVR5cGUoKFNlbWFudGljICopIHRoaXMsIG51bV9kaW1lbnNpb25zKTsK
ICAgIGFycmF5X2NyZWF0aW9uIC0+IHN5bWJvbCA9IHR5cGU7CgogICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBhcnJheV9jcmVhdGlvbiAtPiBOdW1EaW1FeHBycygpOyBpKyspCiAgICB7CiAgICAgICAg
QXN0RGltRXhwciAqZGltX2V4cHIgPSBhcnJheV9jcmVhdGlvbiAtPiBEaW1FeHByKGkpOwogICAg
ICAgIFByb2Nlc3NFeHByZXNzaW9uKGRpbV9leHByIC0+IGV4cHJlc3Npb24pOwogICAgICAgIEFz
dEV4cHJlc3Npb24gKmV4cHIgPSBQcm9tb3RlVW5hcnlOdW1lcmljRXhwcmVzc2lvbihkaW1fZXhw
ciAtPiBleHByZXNzaW9uKTsKICAgICAgICBpZiAoZXhwciAtPiBUeXBlKCkgIT0gY29udHJvbC5p
bnRfdHlwZSAmJiBleHByIC0+IHN5bWJvbCAhPSBjb250cm9sLm5vX3R5cGUpCiAgICAgICAgewog
ICAgICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpUWVBFX05PVF9JTlRFR0VS
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1fZXhwciAtPiBleHByZXNzaW9uIC0+IExl
ZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1fZXhwciAtPiBleHByZXNz
aW9uIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltX2V4cHIg
LT4gZXhwcmVzc2lvbiAtPiBUeXBlKCkgLT4gTmFtZSgpKTsKICAgICAgICB9CiAgICAgICAgZGlt
X2V4cHIgLT4gZXhwcmVzc2lvbiA9IGV4cHI7CiAgICB9CgogICAgaWYgKGFycmF5X2NyZWF0aW9u
IC0+IGFycmF5X2luaXRpYWxpemVyX29wdCkKICAgICAgICBQcm9jZXNzQXJyYXlJbml0aWFsaXpl
cigoQXN0QXJyYXlJbml0aWFsaXplciAqKSBhcnJheV9jcmVhdGlvbiAtPiBhcnJheV9pbml0aWFs
aXplcl9vcHQsIHR5cGUpOwoKICAgIHJldHVybjsKfQoKCnZvaWQgU2VtYW50aWM6OlByb2Nlc3NQ
b3N0VW5hcnlFeHByZXNzaW9uKEFzdCAqZXhwcikKewogICAgQXN0UG9zdFVuYXJ5RXhwcmVzc2lv
biAqcG9zdGZpeF9leHByZXNzaW9uID0gKEFzdFBvc3RVbmFyeUV4cHJlc3Npb24gKikgZXhwcjsK
CiAgICBQcm9jZXNzRXhwcmVzc2lvbihwb3N0Zml4X2V4cHJlc3Npb24gLT4gZXhwcmVzc2lvbik7
CiAgICBwb3N0Zml4X2V4cHJlc3Npb24gLT4gc3ltYm9sID0gcG9zdGZpeF9leHByZXNzaW9uIC0+
IGV4cHJlc3Npb24gLT4gc3ltYm9sOwoKICAgIGlmIChwb3N0Zml4X2V4cHJlc3Npb24gLT4gc3lt
Ym9sICE9IGNvbnRyb2wubm9fdHlwZSkKICAgIHsKICAgICAgICBpZiAoISBwb3N0Zml4X2V4cHJl
c3Npb24gLT4gZXhwcmVzc2lvbiAtPiBJc0xlZnRIYW5kU2lkZSgpKQogICAgICAgIHsKICAgICAg
ICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6Tk9UX0FfTlVNRVJJQ19WQVJJQUJM
RSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGZpeF9leHByZXNzaW9uIC0+IGV4cHJl
c3Npb24gLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RmaXhf
ZXhwcmVzc2lvbiAtPiBleHByZXNzaW9uIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcG9zdGZpeF9leHByZXNzaW9uIC0+IGV4cHJlc3Npb24gLT4gVHlwZSgpIC0+
IE5hbWUoKSk7CiAgICAgICAgICAgIHBvc3RmaXhfZXhwcmVzc2lvbiAtPiBzeW1ib2wgPSBjb250
cm9sLm5vX3R5cGU7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCEgY29udHJvbC5Jc051bWVy
aWMocG9zdGZpeF9leHByZXNzaW9uIC0+IFR5cGUoKSkpCiAgICAgICAgewogICAgICAgICAgICBS
ZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpUWVBFX05PVF9OVU1FUklDLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBwb3N0Zml4X2V4cHJlc3Npb24gLT4gZXhwcmVzc2lvbiAtPiBMZWZ0
VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGZpeF9leHByZXNzaW9uIC0+
IGV4cHJlc3Npb24gLT4gUmlnaHRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBw
b3N0Zml4X2V4cHJlc3Npb24gLT4gVHlwZSgpIC0+IE5hbWUoKSk7CiAgICAgICAgICAgIHBvc3Rm
aXhfZXhwcmVzc2lvbiAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICAgICAgfQogICAg
ICAgIGVsc2UgaWYgKCEgcG9zdGZpeF9leHByZXNzaW9uIC0+IGV4cHJlc3Npb24gLT4gQXJyYXlB
Y2Nlc3NDYXN0KCkpICAKICAgICAgICB7CiAgICAgICAgICAgIE1ldGhvZFN5bWJvbCAqcmVhZF9t
ZXRob2QgPSBfX251bGwgOwogICAgICAgICAgICBBc3RTaW1wbGVOYW1lICpzaW1wbGVfbmFtZSA9
IHBvc3RmaXhfZXhwcmVzc2lvbiAtPiBleHByZXNzaW9uIC0+IFNpbXBsZU5hbWVDYXN0KCk7CiAg
ICAgICAgICAgIGlmIChzaW1wbGVfbmFtZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
aWYgKHNpbXBsZV9uYW1lIC0+IHJlc29sdXRpb25fb3B0KQogICAgICAgICAgICAgICAgICAgcmVh
ZF9tZXRob2QgPSBzaW1wbGVfbmFtZSAtPiByZXNvbHV0aW9uX29wdCAtPiBzeW1ib2wgLT4gTWV0
aG9kQ2FzdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgQXN0RmllbGRBY2Nlc3MgKmZpZWxkX2FjY2VzcyA9IChBc3RGaWVsZEFj
Y2VzcyAqKSBwb3N0Zml4X2V4cHJlc3Npb24gLT4gZXhwcmVzc2lvbjsKICAgICAgICAgICAgICAg
IGlmIChmaWVsZF9hY2Nlc3MgLT4gcmVzb2x1dGlvbl9vcHQpCiAgICAgICAgICAgICAgICAgICAg
cmVhZF9tZXRob2QgPSBmaWVsZF9hY2Nlc3MgLT4gcmVzb2x1dGlvbl9vcHQgLT4gc3ltYm9sIC0+
IE1ldGhvZENhc3QoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgVmFyaWFibGVTeW1ib2wg
KnZhcmlhYmxlX3N5bWJvbDsKICAgICAgICAgICAgaWYgKHJlYWRfbWV0aG9kKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICB2YXJpYWJsZV9zeW1ib2wgPSAoVmFyaWFibGVTeW1ib2wgKikg
cmVhZF9tZXRob2QgLT4gYWNjZXNzZWRfbWVtYmVyOwogICAgICAgICAgICAgICAgcG9zdGZpeF9l
eHByZXNzaW9uIC0+IHdyaXRlX21ldGhvZCA9IHJlYWRfbWV0aG9kIC0+IGNvbnRhaW5pbmdfdHlw
ZSAtPiBHZXRXcml0ZUFjY2Vzc01ldGhvZCh2YXJpYWJsZV9zeW1ib2wpOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIGVsc2UgdmFyaWFibGVfc3ltYm9sID0gcG9zdGZpeF9leHByZXNzaW9uIC0+
IGV4cHJlc3Npb24gLT4gc3ltYm9sIC0+IFZhcmlhYmxlQ2FzdCgpOwogICAgICAgIH0KICAgIH0K
CiAgICByZXR1cm47Cn0KCgp2b2lkIFNlbWFudGljOjpQcm9jZXNzUExVUyhBc3RQcmVVbmFyeUV4
cHJlc3Npb24gKmV4cHIpCnsKICAgIFByb2Nlc3NFeHByZXNzaW9uKGV4cHIgLT4gZXhwcmVzc2lv
bik7CiAgICBleHByIC0+IGV4cHJlc3Npb24gPSBQcm9tb3RlVW5hcnlOdW1lcmljRXhwcmVzc2lv
bihleHByIC0+IGV4cHJlc3Npb24pOwogICAgZXhwciAtPiB2YWx1ZSA9IGV4cHIgLT4gZXhwcmVz
c2lvbiAtPiB2YWx1ZTsKICAgIGV4cHIgLT4gc3ltYm9sID0gZXhwciAtPiBleHByZXNzaW9uIC0+
IHN5bWJvbDsKfQoKCnZvaWQgU2VtYW50aWM6OlByb2Nlc3NNSU5VUyhBc3RQcmVVbmFyeUV4cHJl
c3Npb24gKmV4cHIpCnsKICAgIEFzdEludGVnZXJMaXRlcmFsICppbnRfbGl0ZXJhbDsKICAgIEFz
dExvbmdMaXRlcmFsICpsb25nX2xpdGVyYWw7CgogICAgaWYgKChpbnRfbGl0ZXJhbCA9IGV4cHIg
LT4gZXhwcmVzc2lvbiAtPiBJbnRlZ2VyTGl0ZXJhbENhc3QoKSkpCiAgICB7CiAgICAgICAgTGl0
ZXJhbFN5bWJvbCAqbGl0ZXJhbCA9IGxleF9zdHJlYW0gLT4gTGl0ZXJhbFN5bWJvbChpbnRfbGl0
ZXJhbCAtPiBpbnRlZ2VyX2xpdGVyYWxfdG9rZW4pOwoKICAgICAgICBleHByIC0+IHZhbHVlID0g
Y29udHJvbC5pbnRfcG9vbC5GaW5kT3JJbnNlcnROZWdhdGl2ZUludChsaXRlcmFsKTsKICAgICAg
ICBpZiAoZXhwciAtPiB2YWx1ZSA9PSBjb250cm9sLkJhZFZhbHVlKCkpCiAgICAgICAgewogICAg
ICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpJTlZBTElEX0lOVF9WQUxVRSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBMZWZ0VG9rZW4oKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwciAtPiBSaWdodFRva2VuKCkpOwogICAgICAgICAgICBleHBy
IC0+IHN5bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsKICAgICAgICB9CiAgICAgICAgZWxzZSBleHBy
IC0+IHN5bWJvbCA9IGNvbnRyb2wuaW50X3R5cGU7CiAgICB9CiAgICBlbHNlIGlmICgobG9uZ19s
aXRlcmFsID0gZXhwciAtPiBleHByZXNzaW9uIC0+IExvbmdMaXRlcmFsQ2FzdCgpKSkKICAgIHsK
ICAgICAgICBMaXRlcmFsU3ltYm9sICpsaXRlcmFsID0gbGV4X3N0cmVhbSAtPiBMaXRlcmFsU3lt
Ym9sKGxvbmdfbGl0ZXJhbCAtPiBsb25nX2xpdGVyYWxfdG9rZW4pOwoKICAgICAgICBleHByIC0+
IHZhbHVlID0gY29udHJvbC5sb25nX3Bvb2wuRmluZE9ySW5zZXJ0TmVnYXRpdmVMb25nKGxpdGVy
YWwpOwogICAgICAgIGlmIChleHByIC0+IHZhbHVlID09IGNvbnRyb2wuQmFkVmFsdWUoKSkKICAg
ICAgICB7CiAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OklOVkFMSURf
TE9OR19WQUxVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBMZWZ0VG9rZW4o
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBSaWdodFRva2VuKCkpOwogICAg
ICAgICAgICBleHByIC0+IHN5bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsKICAgICAgICB9CiAgICAg
ICAgZWxzZSBleHByIC0+IHN5bWJvbCA9IGNvbnRyb2wubG9uZ190eXBlOwogICAgfQogICAgZWxz
ZQogICAgewogICAgICAgIFByb2Nlc3NFeHByZXNzaW9uKGV4cHIgLT4gZXhwcmVzc2lvbik7Cgog
ICAgICAgIGV4cHIgLT4gZXhwcmVzc2lvbiA9IFByb21vdGVVbmFyeU51bWVyaWNFeHByZXNzaW9u
KGV4cHIgLT4gZXhwcmVzc2lvbik7CiAgICAgICAgZXhwciAtPiBzeW1ib2wgPSBleHByIC0+IGV4
cHJlc3Npb24gLT4gc3ltYm9sOwogICAgICAgIGlmIChleHByIC0+IGV4cHJlc3Npb24gLT4gSXND
b25zdGFudCgpKQogICAgICAgIHsKICAgICAgICAgICAgVHlwZVN5bWJvbCAqdHlwZSA9IGV4cHIg
LT4gVHlwZSgpOwoKICAgICAgICAgICAgaWYgKCh0eXBlID09IGNvbnRyb2wuZG91YmxlX3R5cGUp
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBEb3VibGVMaXRlcmFsVmFsdWUgKmxpdGVy
YWwgPSAoRG91YmxlTGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gZXhwcmVzc2lvbiAtPiB2YWx1ZTsK
ICAgICAgICAgICAgICAgIGV4cHIgLT4gdmFsdWUgPSBjb250cm9sLmRvdWJsZV9wb29sLkZpbmRP
ckluc2VydCgtbGl0ZXJhbCAtPiB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxz
ZSBpZiAoKHR5cGUgPT0gY29udHJvbC5mbG9hdF90eXBlKSkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgRmxvYXRMaXRlcmFsVmFsdWUgKmxpdGVyYWwgPSAoRmxvYXRMaXRlcmFsVmFsdWUg
KikgZXhwciAtPiBleHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgZXhwciAtPiB2
YWx1ZSA9IGNvbnRyb2wuZmxvYXRfcG9vbC5GaW5kT3JJbnNlcnQoLWxpdGVyYWwgLT4gdmFsdWUp
OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKCh0eXBlID09IGNvbnRyb2wubG9u
Z190eXBlKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTG9uZ0xpdGVyYWxWYWx1ZSAq
bGl0ZXJhbCA9IChMb25nTGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gZXhwcmVzc2lvbiAtPiB2YWx1
ZTsKICAgICAgICAgICAgICAgIGV4cHIgLT4gdmFsdWUgPSBjb250cm9sLmxvbmdfcG9vbC5GaW5k
T3JJbnNlcnQoLWxpdGVyYWwgLT4gdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgSW50TGl0ZXJhbFZhbHVlICpsaXRlcmFs
ID0gKEludExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IGV4cHJlc3Npb24gLT4gdmFsdWU7CiAgICAg
ICAgICAgICAgICBleHByIC0+IHZhbHVlID0gY29udHJvbC5pbnRfcG9vbC5GaW5kT3JJbnNlcnQo
LWxpdGVyYWwgLT4gdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJl
dHVybjsKfQoKCnZvaWQgU2VtYW50aWM6OlByb2Nlc3NUV0lERExFKEFzdFByZVVuYXJ5RXhwcmVz
c2lvbiAqZXhwcikKewogICAgUHJvY2Vzc0V4cHJlc3Npb24oZXhwciAtPiBleHByZXNzaW9uKTsK
CiAgICBpZiAoZXhwciAtPiBleHByZXNzaW9uIC0+IHN5bWJvbCAhPSBjb250cm9sLm5vX3R5cGUg
JiYgKCEgY29udHJvbC5Jc0ludGVncmFsKGV4cHIgLT4gZXhwcmVzc2lvbiAtPiBUeXBlKCkpKSkK
ICAgIHsKICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpUWVBFX05PVF9JTlRF
R1JBTCwKICAgICAgICAgICAgICAgICAgICAgICBleHByIC0+IGV4cHJlc3Npb24gLT4gTGVmdFRv
a2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBleHByZXNzaW9uIC0+IFJpZ2h0
VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICBleHByIC0+IGV4cHJlc3Npb24gLT4gVHlw
ZSgpIC0+IE5hbWUoKSk7CiAgICAgICAgZXhwciAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7
CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgZXhwciAtPiBleHByZXNzaW9uID0gUHJvbW90
ZVVuYXJ5TnVtZXJpY0V4cHJlc3Npb24oZXhwciAtPiBleHByZXNzaW9uKTsKCiAgICAgICAgaWYg
KGV4cHIgLT4gZXhwcmVzc2lvbiAtPiBJc0NvbnN0YW50KCkpCiAgICAgICAgewogICAgICAgICAg
ICBpZiAoZXhwciAtPiBleHByZXNzaW9uIC0+IFR5cGUoKSA9PSBjb250cm9sLmxvbmdfdHlwZSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTG9uZ0xpdGVyYWxWYWx1ZSAqbGl0ZXJhbCA9
IChMb25nTGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAg
ICAgICAgICAgIGV4cHIgLT4gdmFsdWUgPSBjb250cm9sLmxvbmdfcG9vbC5GaW5kT3JJbnNlcnQo
fmxpdGVyYWwgLT4gdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgIAogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFsdWUgKmxpdGVyYWwgPSAoSW50
TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICAgICAg
ICAgIGV4cHIgLT4gdmFsdWUgPSBjb250cm9sLmludF9wb29sLkZpbmRPckluc2VydCh+bGl0ZXJh
bCAtPiB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZXhwciAtPiBzeW1i
b2wgPSBleHByIC0+IGV4cHJlc3Npb24gLT4gc3ltYm9sOwogICAgfQoKICAgIHJldHVybjsKfQoK
CnZvaWQgU2VtYW50aWM6OlByb2Nlc3NOT1QoQXN0UHJlVW5hcnlFeHByZXNzaW9uICpleHByKQp7
CiAgICBQcm9jZXNzRXhwcmVzc2lvbihleHByIC0+IGV4cHJlc3Npb24pOwoKICAgIGlmIChleHBy
IC0+IGV4cHJlc3Npb24gLT4gc3ltYm9sICE9IGNvbnRyb2wubm9fdHlwZSAmJiBleHByIC0+IGV4
cHJlc3Npb24gLT4gVHlwZSgpICE9IGNvbnRyb2wuYm9vbGVhbl90eXBlKQogICAgewogICAgICAg
IFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OlRZUEVfTk9UX0JPT0xFQU4sCiAgICAgICAg
ICAgICAgICAgICAgICAgZXhwciAtPiBleHByZXNzaW9uIC0+IExlZnRUb2tlbigpLAogICAgICAg
ICAgICAgICAgICAgICAgIGV4cHIgLT4gZXhwcmVzc2lvbiAtPiBSaWdodFRva2VuKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgZXhwciAtPiBleHByZXNzaW9uIC0+IFR5cGUoKSAtPiBOYW1lKCkp
OwogICAgICAgIGV4cHIgLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAgfQogICAgZWxz
ZQogICAgewogICAgICAgIGlmIChleHByIC0+IGV4cHJlc3Npb24gLT4gSXNDb25zdGFudCgpKQog
ICAgICAgIHsKICAgICAgICAgICAgSW50TGl0ZXJhbFZhbHVlICpsaXRlcmFsID0gKEludExpdGVy
YWxWYWx1ZSAqKSBleHByIC0+IGV4cHJlc3Npb24gLT4gdmFsdWU7CiAgICAgICAgICAgIGV4cHIg
LT4gdmFsdWUgPSBjb250cm9sLmludF9wb29sLkZpbmRPckluc2VydChsaXRlcmFsIC0+IHZhbHVl
ID8gMCA6IDEpOwogICAgICAgIH0KICAgICAgICBleHByIC0+IHN5bWJvbCA9IGNvbnRyb2wuYm9v
bGVhbl90eXBlOwogICAgfQoKICAgIHJldHVybjsKfQoKCnZvaWQgU2VtYW50aWM6OlByb2Nlc3NQ
TFVTUExVU09yTUlOVVNNSU5VUyhBc3RQcmVVbmFyeUV4cHJlc3Npb24gKmV4cHIpCnsKICAgIFBy
b2Nlc3NFeHByZXNzaW9uKGV4cHIgLT4gZXhwcmVzc2lvbik7CgogICAgaWYgKGV4cHIgLT4gZXhw
cmVzc2lvbiAtPiBzeW1ib2wgIT0gY29udHJvbC5ub190eXBlKQogICAgewogICAgICAgIGlmICgh
IGV4cHIgLT4gZXhwcmVzc2lvbiAtPiBJc0xlZnRIYW5kU2lkZSgpKQogICAgICAgIHsKICAgICAg
ICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6Tk9UX0FfTlVNRVJJQ19WQVJJQUJM
RSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBleHByZXNzaW9uIC0+IExlZnRU
b2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBleHByIC0+IGV4cHJlc3Npb24gLT4g
UmlnaHRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBleHByIC0+IGV4cHJlc3Np
b24gLT4gVHlwZSgpIC0+IE5hbWUoKSk7CiAgICAgICAgICAgIGV4cHIgLT4gc3ltYm9sID0gY29u
dHJvbC5ub190eXBlOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICghIGNvbnRyb2wuSXNOdW1l
cmljKGV4cHIgLT4gZXhwcmVzc2lvbiAtPiBUeXBlKCkpKQogICAgICAgIHsKICAgICAgICAgICAg
UmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6VFlQRV9OT1RfTlVNRVJJQywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwciAtPiBleHByZXNzaW9uIC0+IExlZnRUb2tlbigpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHByIC0+IGV4cHJlc3Npb24gLT4gUmlnaHRUb2tlbigp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBleHByIC0+IGV4cHJlc3Npb24gLT4gVHlwZSgp
IC0+IE5hbWUoKSk7CiAgICAgICAgICAgIGV4cHIgLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBl
OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICghIGV4cHIgLT4gZXhwcmVzc2lvbiAtPiBBcnJh
eUFjY2Vzc0Nhc3QoKSkgIAogICAgICAgIHsKICAgICAgICAgICAgTWV0aG9kU3ltYm9sICpyZWFk
X21ldGhvZCA9IF9fbnVsbCA7CiAgICAgICAgICAgIEFzdFNpbXBsZU5hbWUgKnNpbXBsZV9uYW1l
ID0gZXhwciAtPiBleHByZXNzaW9uIC0+IFNpbXBsZU5hbWVDYXN0KCk7CiAgICAgICAgICAgIGlm
IChzaW1wbGVfbmFtZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKHNpbXBsZV9u
YW1lIC0+IHJlc29sdXRpb25fb3B0KQogICAgICAgICAgICAgICAgICAgcmVhZF9tZXRob2QgPSBz
aW1wbGVfbmFtZSAtPiByZXNvbHV0aW9uX29wdCAtPiBzeW1ib2wgLT4gTWV0aG9kQ2FzdCgpOwog
ICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgQXN0RmllbGRBY2Nlc3MgKmZpZWxkX2FjY2VzcyA9IChBc3RGaWVsZEFjY2VzcyAqKSBleHBy
IC0+IGV4cHJlc3Npb247CiAgICAgICAgICAgICAgICBpZiAoZmllbGRfYWNjZXNzIC0+IHJlc29s
dXRpb25fb3B0KQogICAgICAgICAgICAgICAgICAgIHJlYWRfbWV0aG9kID0gZmllbGRfYWNjZXNz
IC0+IHJlc29sdXRpb25fb3B0IC0+IHN5bWJvbCAtPiBNZXRob2RDYXN0KCk7CiAgICAgICAgICAg
IH0KCiAgICAgICAgICAgIFZhcmlhYmxlU3ltYm9sICp2YXJpYWJsZV9zeW1ib2w7CiAgICAgICAg
ICAgIGlmIChyZWFkX21ldGhvZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyaWFi
bGVfc3ltYm9sID0gKFZhcmlhYmxlU3ltYm9sICopIHJlYWRfbWV0aG9kIC0+IGFjY2Vzc2VkX21l
bWJlcjsKICAgICAgICAgICAgICAgIGV4cHIgLT4gd3JpdGVfbWV0aG9kID0gcmVhZF9tZXRob2Qg
LT4gY29udGFpbmluZ190eXBlIC0+IEdldFdyaXRlQWNjZXNzTWV0aG9kKHZhcmlhYmxlX3N5bWJv
bCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB2YXJpYWJsZV9zeW1ib2wgPSBleHBy
IC0+IGV4cHJlc3Npb24gLT4gc3ltYm9sIC0+IFZhcmlhYmxlQ2FzdCgpOwogICAgICAgIH0KICAg
IH0KICAgIGV4cHIgLT4gc3ltYm9sID0gZXhwciAtPiBleHByZXNzaW9uIC0+IHN5bWJvbDsKCiAg
ICByZXR1cm47Cn0KCgp2b2lkIFNlbWFudGljOjpQcm9jZXNzUHJlVW5hcnlFeHByZXNzaW9uKEFz
dCAqZXhwcikKewogICAgQXN0UHJlVW5hcnlFeHByZXNzaW9uICpwcmVmaXhfZXhwcmVzc2lvbiA9
IChBc3RQcmVVbmFyeUV4cHJlc3Npb24gKikgZXhwcjsKICAgICh0aGlzIC0+KiBQcm9jZXNzUHJl
VW5hcnlFeHByW3ByZWZpeF9leHByZXNzaW9uIC0+IHByZV91bmFyeV90YWddKShwcmVmaXhfZXhw
cmVzc2lvbik7CgogICAgcmV0dXJuOwp9CgoKaW5saW5lIGJvb2wgU2VtYW50aWM6OkNhbldpZGVu
aW5nUHJpbWl0aXZlQ29udmVydChUeXBlU3ltYm9sICp0YXJnZXRfdHlwZSwgVHlwZVN5bWJvbCAq
c291cmNlX3R5cGUpCnsKICAgIGlmICh0YXJnZXRfdHlwZSA9PSBjb250cm9sLmRvdWJsZV90eXBl
KQogICAgICAgICByZXR1cm4gKHNvdXJjZV90eXBlID09IGNvbnRyb2wuZmxvYXRfdHlwZSB8fCBz
b3VyY2VfdHlwZSA9PSBjb250cm9sLmxvbmdfdHlwZSAgfHwgc291cmNlX3R5cGUgPT0gY29udHJv
bC5pbnRfdHlwZSB8fAogICAgICAgICAgICAgICAgIHNvdXJjZV90eXBlID09IGNvbnRyb2wuY2hh
cl90eXBlICB8fCBzb3VyY2VfdHlwZSA9PSBjb250cm9sLnNob3J0X3R5cGUgfHwgc291cmNlX3R5
cGUgPT0gY29udHJvbC5ieXRlX3R5cGUpOwogICAgZWxzZSBpZiAodGFyZ2V0X3R5cGUgPT0gY29u
dHJvbC5mbG9hdF90eXBlKQogICAgICAgICByZXR1cm4gKHNvdXJjZV90eXBlID09IGNvbnRyb2wu
bG9uZ190eXBlICB8fCBzb3VyY2VfdHlwZSA9PSBjb250cm9sLmludF90eXBlICAgfHwKICAgICAg
ICAgICAgICAgICBzb3VyY2VfdHlwZSA9PSBjb250cm9sLmNoYXJfdHlwZSAgfHwgc291cmNlX3R5
cGUgPT0gY29udHJvbC5zaG9ydF90eXBlIHx8IHNvdXJjZV90eXBlID09IGNvbnRyb2wuYnl0ZV90
eXBlKTsKICAgIGVsc2UgaWYgKHRhcmdldF90eXBlID09IGNvbnRyb2wubG9uZ190eXBlKQogICAg
ICAgICByZXR1cm4gKHNvdXJjZV90eXBlID09IGNvbnRyb2wuaW50X3R5cGUgICB8fCBzb3VyY2Vf
dHlwZSA9PSBjb250cm9sLmNoYXJfdHlwZSAgfHwKICAgICAgICAgICAgICAgICBzb3VyY2VfdHlw
ZSA9PSBjb250cm9sLnNob3J0X3R5cGUgfHwgc291cmNlX3R5cGUgPT0gY29udHJvbC5ieXRlX3R5
cGUpOwogICAgZWxzZSBpZiAodGFyZ2V0X3R5cGUgPT0gY29udHJvbC5pbnRfdHlwZSkKICAgICAg
ICAgcmV0dXJuIChzb3VyY2VfdHlwZSA9PSBjb250cm9sLmNoYXJfdHlwZSAgfHwgc291cmNlX3R5
cGUgPT0gY29udHJvbC5zaG9ydF90eXBlIHx8IHNvdXJjZV90eXBlID09IGNvbnRyb2wuYnl0ZV90
eXBlKTsKICAgIGVsc2UgaWYgKHRhcmdldF90eXBlID09IGNvbnRyb2wuc2hvcnRfdHlwZSkKICAg
ICAgICAgcmV0dXJuIHNvdXJjZV90eXBlID09IGNvbnRyb2wuYnl0ZV90eXBlOwoKICAgIHJldHVy
biBmYWxzZTsKfQoKCmlubGluZSBib29sIFNlbWFudGljOjpDYW5OYXJyb3dpbmdQcmltaXRpdmVD
b252ZXJ0KFR5cGVTeW1ib2wgKnRhcmdldF90eXBlLCBUeXBlU3ltYm9sICpzb3VyY2VfdHlwZSkK
ewogICAgaWYgKHRhcmdldF90eXBlID09IGNvbnRyb2wuYnl0ZV90eXBlKQogICAgICAgICByZXR1
cm4gKHNvdXJjZV90eXBlID09IGNvbnRyb2wuZG91YmxlX3R5cGUgfHwgc291cmNlX3R5cGUgPT0g
Y29udHJvbC5mbG9hdF90eXBlIHx8IHNvdXJjZV90eXBlID09IGNvbnRyb2wubG9uZ190eXBlIHx8
CiAgICAgICAgICAgICAgICAgc291cmNlX3R5cGUgPT0gY29udHJvbC5pbnRfdHlwZSAgICB8fCBz
b3VyY2VfdHlwZSA9PSBjb250cm9sLmNoYXJfdHlwZSAgfHwgc291cmNlX3R5cGUgPT0gY29udHJv
bC5zaG9ydF90eXBlKTsKICAgIGVsc2UgaWYgKHRhcmdldF90eXBlID09IGNvbnRyb2wuY2hhcl90
eXBlKQogICAgICAgICByZXR1cm4gKHNvdXJjZV90eXBlID09IGNvbnRyb2wuZG91YmxlX3R5cGUg
fHwgc291cmNlX3R5cGUgPT0gY29udHJvbC5mbG9hdF90eXBlIHx8IHNvdXJjZV90eXBlID09IGNv
bnRyb2wubG9uZ190eXBlIHx8CiAgICAgICAgICAgICAgICAgc291cmNlX3R5cGUgPT0gY29udHJv
bC5pbnRfdHlwZSAgICB8fCBzb3VyY2VfdHlwZSA9PSBjb250cm9sLnNob3J0X3R5cGUgfHwgc291
cmNlX3R5cGUgPT0gY29udHJvbC5ieXRlX3R5cGUpOwogICAgZWxzZSBpZiAodGFyZ2V0X3R5cGUg
PT0gY29udHJvbC5zaG9ydF90eXBlKQogICAgICAgICByZXR1cm4gKHNvdXJjZV90eXBlID09IGNv
bnRyb2wuZG91YmxlX3R5cGUgfHwgc291cmNlX3R5cGUgPT0gY29udHJvbC5mbG9hdF90eXBlIHx8
CiAgICAgICAgICAgICAgICAgc291cmNlX3R5cGUgPT0gY29udHJvbC5sb25nX3R5cGUgICB8fCBz
b3VyY2VfdHlwZSA9PSBjb250cm9sLmludF90eXBlICAgfHwgc291cmNlX3R5cGUgPT0gY29udHJv
bC5jaGFyX3R5cGUpOwogICAgZWxzZSBpZiAodGFyZ2V0X3R5cGUgPT0gY29udHJvbC5pbnRfdHlw
ZSkKICAgICAgICAgcmV0dXJuIChzb3VyY2VfdHlwZSA9PSBjb250cm9sLmRvdWJsZV90eXBlIHx8
IHNvdXJjZV90eXBlID09IGNvbnRyb2wuZmxvYXRfdHlwZSB8fCBzb3VyY2VfdHlwZSA9PSBjb250
cm9sLmxvbmdfdHlwZSk7CiAgICBlbHNlIGlmICh0YXJnZXRfdHlwZSA9PSBjb250cm9sLmxvbmdf
dHlwZSkKICAgICAgICAgcmV0dXJuIChzb3VyY2VfdHlwZSA9PSBjb250cm9sLmRvdWJsZV90eXBl
IHx8IHNvdXJjZV90eXBlID09IGNvbnRyb2wuZmxvYXRfdHlwZSk7CiAgICBlbHNlIGlmICh0YXJn
ZXRfdHlwZSA9PSBjb250cm9sLmZsb2F0X3R5cGUpCiAgICAgICAgIHJldHVybiBzb3VyY2VfdHlw
ZSA9PSBjb250cm9sLmRvdWJsZV90eXBlOwoKICAgIHJldHVybiBmYWxzZTsKfQoKCmJvb2wgU2Vt
YW50aWM6OkNhbk1ldGhvZEludm9jYXRpb25Db252ZXJ0KFR5cGVTeW1ib2wgKnRhcmdldF90eXBl
LCBUeXBlU3ltYm9sICpzb3VyY2VfdHlwZSkKewogICAgaWYgKHRhcmdldF90eXBlID09IGNvbnRy
b2wubm9fdHlwZSB8fCBzb3VyY2VfdHlwZSA9PSBjb250cm9sLm5vX3R5cGUpCiAgICAgICAgcmV0
dXJuIGZhbHNlOwoKICAgIGlmIChzb3VyY2VfdHlwZSAtPiBQcmltaXRpdmUoKSkKICAgIHsKICAg
ICAgICBpZiAoISB0YXJnZXRfdHlwZSAtPiBQcmltaXRpdmUoKSkKICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwoKICAgICAgICByZXR1cm4gKHRhcmdldF90eXBlID09IHNvdXJjZV90eXBlIHx8IENh
bldpZGVuaW5nUHJpbWl0aXZlQ29udmVydCh0YXJnZXRfdHlwZSwgc291cmNlX3R5cGUpKTsKICAg
IH0KICAgIGVsc2UKICAgIHsKICAgICAgICBpZiAodGFyZ2V0X3R5cGUgLT4gUHJpbWl0aXZlKCkp
CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgaWYgKHNvdXJjZV90eXBlIC0+IElz
QXJyYXkoKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmICh0YXJnZXRfdHlwZSAtPiBJc0FycmF5
KCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFR5cGVTeW1ib2wgKnNvdXJjZV9zdWJ0
eXBlID0gc291cmNlX3R5cGUgLT4gQXJyYXlTdWJ0eXBlKCk7CiAgICAgICAgICAgICAgICBUeXBl
U3ltYm9sICp0YXJnZXRfc3VidHlwZSA9IHRhcmdldF90eXBlIC0+IEFycmF5U3VidHlwZSgpOwog
ICAgICAgICAgICAgICAgcmV0dXJuIChzb3VyY2Vfc3VidHlwZSAtPiBQcmltaXRpdmUoKSAmJiB0
YXJnZXRfc3VidHlwZSAtPiBQcmltaXRpdmUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoc291cmNlX3N1YnR5cGUgPT0gdGFyZ2V0X3N1
YnR5cGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IENhbk1ldGhvZEludm9jYXRpb25Db252ZXJ0KHRhcmdldF9zdWJ0eXBlLCBzb3VyY2Vf
c3VidHlwZSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAodGFyZ2V0X3R5cGUg
PT0gY29udHJvbC5PYmplY3QoKSB8fAogICAgICAgICAgICAgICAgICAgIHRhcmdldF90eXBlID09
IGNvbnRyb2wuQ2xvbmVhYmxlKCkgfHwKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAodGFy
Z2V0X3R5cGUgPT0gY29udHJvbC5TZXJpYWxpemFibGUoKSAmJiBzb3VyY2VfdHlwZSAtPiBJbXBs
ZW1lbnRzKHRhcmdldF90eXBlKSkpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChzb3VyY2Vf
dHlwZSAtPiBBQ0NfSU5URVJGQUNFKCkpCiAgICAgICAgewogICAgICAgICAgICBpZiAodGFyZ2V0
X3R5cGUgLT4gQUNDX0lOVEVSRkFDRSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2Vf
dHlwZSAtPiBJc1N1YmludGVyZmFjZSh0YXJnZXRfdHlwZSk7CiAgICAgICAgICAgIGVsc2UgaWYg
KHRhcmdldF90eXBlICE9IGNvbnRyb2wuT2JqZWN0KCkpICAKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHNvdXJjZV90eXBlICE9IGNvbnRy
b2wubnVsbF90eXBlKSAgCiAgICAgICAgewogICAgICAgICAgICBpZiAodGFyZ2V0X3R5cGUgLT4g
SXNBcnJheSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgZWxz
ZSBpZiAodGFyZ2V0X3R5cGUgLT4gQUNDX0lOVEVSRkFDRSgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBzb3VyY2VfdHlwZSAtPiBJbXBsZW1lbnRzKHRhcmdldF90eXBlKTsKICAgICAgICAgICAg
ZWxzZSBpZiAoISBzb3VyY2VfdHlwZSAtPiBJc1N1YmNsYXNzKHRhcmdldF90eXBlKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiB0cnVl
Owp9CgoKYm9vbCBTZW1hbnRpYzo6Q2FuQXNzaWdubWVudENvbnZlcnRSZWZlcmVuY2UoVHlwZVN5
bWJvbCAqdGFyZ2V0X3R5cGUsIFR5cGVTeW1ib2wgKnNvdXJjZV90eXBlKQp7CiAgICByZXR1cm4g
KHRhcmdldF90eXBlID09IGNvbnRyb2wubm9fdHlwZSB8fAogICAgICAgICAgICBzb3VyY2VfdHlw
ZSA9PSBjb250cm9sLm5vX3R5cGUgfHwKICAgICAgICAgICAgQ2FuTWV0aG9kSW52b2NhdGlvbkNv
bnZlcnQodGFyZ2V0X3R5cGUsIHNvdXJjZV90eXBlKQogICAgICAgICAgICk7Cn0KCgpib29sIFNl
bWFudGljOjpDYW5Bc3NpZ25tZW50Q29udmVydChUeXBlU3ltYm9sICp0YXJnZXRfdHlwZSwgQXN0
RXhwcmVzc2lvbiAqZXhwcikKewogICAgcmV0dXJuICh0YXJnZXRfdHlwZSA9PSBjb250cm9sLm5v
X3R5cGUgfHwKICAgICAgICAgICAgZXhwciAtPiBzeW1ib2wgPT0gY29udHJvbC5ub190eXBlIHx8
CiAgICAgICAgICAgIENhbk1ldGhvZEludm9jYXRpb25Db252ZXJ0KHRhcmdldF90eXBlLCBleHBy
IC0+IFR5cGUoKSkgfHwKICAgICAgICAgICAgSXNJbnRWYWx1ZVJlcHJlc2VudGFibGVJblR5cGUo
ZXhwciwgdGFyZ2V0X3R5cGUpCiAgICAgICAgICAgKTsKfQoKCmJvb2wgU2VtYW50aWM6OkNhbkNh
c3RDb252ZXJ0KFR5cGVTeW1ib2wgKnRhcmdldF90eXBlLCBUeXBlU3ltYm9sICpzb3VyY2VfdHlw
ZSwgTGV4U3RyZWFtOjpUb2tlbkluZGV4IHRvaykKewogICAgaWYgKHNvdXJjZV90eXBlID09IHRh
cmdldF90eXBlIHx8IHNvdXJjZV90eXBlID09IGNvbnRyb2wubm9fdHlwZSB8fCB0YXJnZXRfdHlw
ZSA9PSBjb250cm9sLm5vX3R5cGUpCiAgICAgICAgcmV0dXJuIHRydWU7CgogICAgaWYgKHNvdXJj
ZV90eXBlIC0+IFByaW1pdGl2ZSgpKQogICAgewogICAgICAgIGlmICghIHRhcmdldF90eXBlIC0+
IFByaW1pdGl2ZSgpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAo
Q2FuV2lkZW5pbmdQcmltaXRpdmVDb252ZXJ0KHRhcmdldF90eXBlLCBzb3VyY2VfdHlwZSkgfHwg
Q2FuTmFycm93aW5nUHJpbWl0aXZlQ29udmVydCh0YXJnZXRfdHlwZSwgc291cmNlX3R5cGUpKTsK
ICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBpZiAodGFyZ2V0X3R5cGUgLT4gUHJpbWl0aXZl
KCkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgaWYgKHNvdXJjZV90eXBlIC0+
IElzQXJyYXkoKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmICh0YXJnZXRfdHlwZSAtPiBJc0Fy
cmF5KCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFR5cGVTeW1ib2wgKnNvdXJjZV9z
dWJ0eXBlID0gc291cmNlX3R5cGUgLT4gQXJyYXlTdWJ0eXBlKCk7CiAgICAgICAgICAgICAgICBU
eXBlU3ltYm9sICp0YXJnZXRfc3VidHlwZSA9IHRhcmdldF90eXBlIC0+IEFycmF5U3VidHlwZSgp
OwogICAgICAgICAgICAgICAgcmV0dXJuIChzb3VyY2Vfc3VidHlwZSAtPiBQcmltaXRpdmUoKSAm
JiB0YXJnZXRfc3VidHlwZSAtPiBQcmltaXRpdmUoKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoc291cmNlX3N1YnR5cGUgPT0gdGFyZ2V0
X3N1YnR5cGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IENhbkNhc3RDb252ZXJ0KHRhcmdldF9zdWJ0eXBlLCBzb3VyY2Vfc3VidHlwZSwg
dG9rKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICh0YXJnZXRfdHlwZSA9PSBj
b250cm9sLk9iamVjdCgpIHx8CiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3R5cGUgPT0gY29u
dHJvbC5DbG9uZWFibGUoKSB8fAogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICh0YXJnZXRf
dHlwZSA9PSBjb250cm9sLlNlcmlhbGl6YWJsZSgpICYmIHNvdXJjZV90eXBlIC0+IEltcGxlbWVu
dHModGFyZ2V0X3R5cGUpKSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHNvdXJjZV90eXBl
IC0+IEFDQ19JTlRFUkZBQ0UoKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmICh0YXJnZXRfdHlw
ZSAtPiBBQ0NfSU5URVJGQUNFKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmICgh
IHNvdXJjZV90eXBlIC0+IGV4cGFuZGVkX21ldGhvZF90YWJsZSkKICAgICAgICAgICAgICAgICAg
ICBDb21wdXRlTWV0aG9kc0Nsb3N1cmUoc291cmNlX3R5cGUsIHRvayk7CiAgICAgICAgICAgICAg
ICBpZiAoISB0YXJnZXRfdHlwZSAtPiBleHBhbmRlZF9tZXRob2RfdGFibGUpCiAgICAgICAgICAg
ICAgICAgICAgQ29tcHV0ZU1ldGhvZHNDbG9zdXJlKHRhcmdldF90eXBlLCB0b2spOwoKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIEV4cGFuZGVkTWV0aG9k
VGFibGUgKnNvdXJjZV9tZXRob2RfdGFibGUgPSBzb3VyY2VfdHlwZSAtPiBleHBhbmRlZF9tZXRo
b2RfdGFibGU7CiAgICAgICAgICAgICAgICBpbnQgaTsKICAgICAgICAgICAgICAgIGZvciAoaSA9
IDA7IGkgPCBzb3VyY2VfbWV0aG9kX3RhYmxlIC0+IHN5bWJvbF9wb29sLkxlbmd0aCgpOyBpKysp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTWV0aG9kU3ltYm9sICptZXRo
b2QxID0gc291cmNlX21ldGhvZF90YWJsZSAtPiBzeW1ib2xfcG9vbFtpXSAtPiBtZXRob2Rfc3lt
Ym9sOwogICAgICAgICAgICAgICAgICAgIE1ldGhvZFNoYWRvd1N5bWJvbCAqbWV0aG9kX3NoYWRv
dzIgPSB0YXJnZXRfdHlwZSAtPiBleHBhbmRlZF9tZXRob2RfdGFibGUKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g
RmluZE92ZXJsb2FkTWV0aG9kU2hhZG93KG1ldGhvZDEsIChTZW1hbnRpYyAqKSB0aGlzLCB0b2sp
OwogICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2Rfc2hhZG93MikKICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIG1ldGhvZDEgLT4gSXNUeXBlZCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kMSAtPiBQcm9jZXNzTWV0aG9kU2ln
bmF0dXJlKChTZW1hbnRpYyAqKSB0aGlzLCB0b2spOwoKICAgICAgICAgICAgICAgICAgICAgICAg
TWV0aG9kU3ltYm9sICptZXRob2QyID0gbWV0aG9kX3NoYWRvdzIgLT4gbWV0aG9kX3N5bWJvbDsK
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEgbWV0aG9kMiAtPiBJc1R5cGVkKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QyIC0+IFByb2Nlc3NNZXRob2RTaWduYXR1cmUo
KFNlbWFudGljICopIHRoaXMsIHRvayk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRo
b2QxIC0+IFR5cGUoKSAhPSBtZXRob2QyIC0+IFR5cGUoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICByZXR1cm4gKGkgPT0gc291cmNlX21ldGhvZF90YWJsZSAtPiBzeW1ib2xf
cG9vbC5MZW5ndGgoKSk7ICAKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICh0YXJn
ZXRfdHlwZSAtPiBBQ0NfRklOQUwoKSAmJiAoISB0YXJnZXRfdHlwZSAtPiBJbXBsZW1lbnRzKHNv
dXJjZV90eXBlKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAg
ICAgICBlbHNlIGlmIChzb3VyY2VfdHlwZSAhPSBjb250cm9sLm51bGxfdHlwZSkgIAogICAgICAg
IHsKICAgICAgICAgICAgaWYgKHRhcmdldF90eXBlIC0+IElzQXJyYXkoKSkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgaWYgKHNvdXJjZV90eXBlICE9IGNvbnRyb2wuT2JqZWN0KCkpCiAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAg
IGVsc2UgaWYgKHRhcmdldF90eXBlIC0+IEFDQ19JTlRFUkZBQ0UoKSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgaWYgKHNvdXJjZV90eXBlIC0+IEFDQ19GSU5BTCgpICYmICghIHNvdXJj
ZV90eXBlIC0+IEltcGxlbWVudHModGFyZ2V0X3R5cGUpKSkKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoKCEgc291cmNl
X3R5cGUgLT4gSXNTdWJjbGFzcyh0YXJnZXRfdHlwZSkpICYmICghIHRhcmdldF90eXBlIC0+IElz
U3ViY2xhc3Moc291cmNlX3R5cGUpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgfQogICAgfQoKICAgIHJldHVybiB0cnVlOwp9CgoKTGl0ZXJhbFZhbHVlICpTZW1hbnRp
Yzo6Q2FzdFByaW1pdGl2ZVZhbHVlKFR5cGVTeW1ib2wgKnRhcmdldF90eXBlLCBBc3RFeHByZXNz
aW9uICpleHByKQp7CiAgICBMaXRlcmFsVmFsdWUgKmxpdGVyYWxfdmFsdWUgPSBfX251bGwgOwog
ICAgVHlwZVN5bWJvbCAqc291cmNlX3R5cGUgPSBleHByIC0+IFR5cGUoKTsKCiAgICBpZiAodGFy
Z2V0X3R5cGUgPT0gc291cmNlX3R5cGUpCiAgICAgICAgbGl0ZXJhbF92YWx1ZSA9IGV4cHIgLT4g
dmFsdWU7CiAgICBlbHNlIGlmIChzb3VyY2VfdHlwZSAhPSBjb250cm9sLm5vX3R5cGUpCiAgICB7
CiAgICAgICAgY2hhciBvdXRwdXRfc3RyaW5nWzI1XTsKICAgICAgICBpbnQgbGVuOwoKICAgICAg
ICBpZiAodGFyZ2V0X3R5cGUgPT0gY29udHJvbC5TdHJpbmcoKSkKICAgICAgICB7CiAgICAgICAg
ICAgIGlmIChzb3VyY2VfdHlwZSA9PSBjb250cm9sLmRvdWJsZV90eXBlKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICBEb3VibGVMaXRlcmFsVmFsdWUgKmxpdGVyYWwgPSAoRG91YmxlTGl0
ZXJhbFZhbHVlICopIGV4cHIgLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBEb3VibGVUb1N0cmlu
ZyBpZWVlX2RvdWJsZShsaXRlcmFsIC0+IHZhbHVlKTsKICAgICAgICAgICAgICAgIGxpdGVyYWxf
dmFsdWUgPSBjb250cm9sLlV0ZjhfcG9vbC5GaW5kT3JJbnNlcnQoaWVlZV9kb3VibGUuU3RyaW5n
KCksIGllZWVfZG91YmxlLkxlbmd0aCgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNl
IGlmIChzb3VyY2VfdHlwZSA9PSBjb250cm9sLmZsb2F0X3R5cGUpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgIEZsb2F0TGl0ZXJhbFZhbHVlICpsaXRlcmFsID0gKEZsb2F0TGl0ZXJhbFZh
bHVlICopIGV4cHIgLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBGbG9hdFRvU3RyaW5nIGllZWVf
ZmxvYXQobGl0ZXJhbCAtPiB2YWx1ZSk7CiAgICAgICAgICAgICAgICBsaXRlcmFsX3ZhbHVlID0g
Y29udHJvbC5VdGY4X3Bvb2wuRmluZE9ySW5zZXJ0KGllZWVfZmxvYXQuU3RyaW5nKCksIGllZWVf
ZmxvYXQuTGVuZ3RoKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJj
ZV90eXBlID09IGNvbnRyb2wubG9uZ190eXBlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICBMb25nTGl0ZXJhbFZhbHVlICpsaXRlcmFsID0gKExvbmdMaXRlcmFsVmFsdWUgKikgZXhwciAt
PiB2YWx1ZTsKICAgICAgICAgICAgICAgIExvbmdUb0RlY1N0cmluZyBsb25nX2ludGVnZXIobGl0
ZXJhbCAtPiB2YWx1ZSk7CiAgICAgICAgICAgICAgICBsaXRlcmFsX3ZhbHVlID0gY29udHJvbC5V
dGY4X3Bvb2wuRmluZE9ySW5zZXJ0KGxvbmdfaW50ZWdlci5TdHJpbmcoKSwgbG9uZ19pbnRlZ2Vy
Lkxlbmd0aCgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzb3VyY2VfdHlw
ZSA9PSBjb250cm9sLmNoYXJfdHlwZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgSW50
TGl0ZXJhbFZhbHVlICpsaXRlcmFsID0gKEludExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHZhbHVl
OwogICAgICAgICAgICAgICAgbGl0ZXJhbF92YWx1ZSA9IGNvbnRyb2wuVXRmOF9wb29sLkZpbmRP
ckluc2VydChsaXRlcmFsIC0+IHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNl
IGlmIChzb3VyY2VfdHlwZSA9PSBjb250cm9sLmJvb2xlYW5fdHlwZSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgSW50TGl0ZXJhbFZhbHVlICpsaXRlcmFsID0gKEludExpdGVyYWxWYWx1
ZSAqKSBleHByIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgaWYgKGxpdGVyYWwgLT4gdmFsdWUg
PT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc3RyaW5n
WzBdID0gVV9mOwogICAgICAgICAgICAgICAgICAgIG91dHB1dF9zdHJpbmdbMV0gPSBVX2E7CiAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0X3N0cmluZ1syXSA9IFVfbDsKICAgICAgICAgICAgICAg
ICAgICBvdXRwdXRfc3RyaW5nWzNdID0gVV9zOwogICAgICAgICAgICAgICAgICAgIG91dHB1dF9z
dHJpbmdbNF0gPSBVX2U7CiAgICAgICAgICAgICAgICAgICAgbGVuID0gNTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICBvdXRwdXRfc3RyaW5nWzBdID0gVV90OwogICAgICAgICAgICAgICAgICAgIG91dHB1
dF9zdHJpbmdbMV0gPSBVX3I7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3N0cmluZ1syXSA9
IFVfdTsKICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc3RyaW5nWzNdID0gVV9lOwogICAgICAg
ICAgICAgICAgICAgIGxlbiA9IDQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBs
aXRlcmFsX3ZhbHVlID0gY29udHJvbC5VdGY4X3Bvb2wuRmluZE9ySW5zZXJ0KG91dHB1dF9zdHJp
bmcsIGxlbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoY29udHJvbC5Jc1Np
bXBsZUludGVnZXJWYWx1ZVR5cGUoc291cmNlX3R5cGUpKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICBJbnRMaXRlcmFsVmFsdWUgKmxpdGVyYWwgPSAoSW50TGl0ZXJhbFZhbHVlICopIGV4
cHIgLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBJbnRUb1N0cmluZyBpbnRlZ2VyKGxpdGVyYWwg
LT4gdmFsdWUpOwogICAgICAgICAgICAgICAgbGl0ZXJhbF92YWx1ZSA9IGNvbnRyb2wuVXRmOF9w
b29sLkZpbmRPckluc2VydChpbnRlZ2VyLlN0cmluZygpLCBpbnRlZ2VyLkxlbmd0aCgpKTsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmICh0YXJnZXRfdHlwZSA9PSBjb250
cm9sLmRvdWJsZV90eXBlKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHNvdXJjZV90eXBlID09
IGNvbnRyb2wuZmxvYXRfdHlwZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRmxvYXRM
aXRlcmFsVmFsdWUgKmxpdGVyYWwgPSAoRmxvYXRMaXRlcmFsVmFsdWUgKikgZXhwciAtPiB2YWx1
ZTsKICAgICAgICAgICAgICAgIGxpdGVyYWxfdmFsdWUgPSBjb250cm9sLmRvdWJsZV9wb29sLkZp
bmRPckluc2VydChsaXRlcmFsIC0+IHZhbHVlLkRvdWJsZVZhbHVlKCkpOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJjZV90eXBlID09IGNvbnRyb2wubG9uZ190eXBlKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBMb25nTGl0ZXJhbFZhbHVlICpsaXRlcmFsID0g
KExvbmdMaXRlcmFsVmFsdWUgKikgZXhwciAtPiB2YWx1ZTsKICAgICAgICAgICAgICAgIElFRUVk
b3VibGUgdmFsdWUobGl0ZXJhbCAtPiB2YWx1ZSk7CiAgICAgICAgICAgICAgICBsaXRlcmFsX3Zh
bHVlID0gY29udHJvbC5kb3VibGVfcG9vbC5GaW5kT3JJbnNlcnQodmFsdWUpOwogICAgICAgICAg
ICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgSW50TGl0
ZXJhbFZhbHVlICpsaXRlcmFsID0gKEludExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHZhbHVlOwog
ICAgICAgICAgICAgICAgSUVFRWRvdWJsZSB2YWx1ZShsaXRlcmFsIC0+IHZhbHVlKTsKICAgICAg
ICAgICAgICAgIGxpdGVyYWxfdmFsdWUgPSBjb250cm9sLmRvdWJsZV9wb29sLkZpbmRPckluc2Vy
dCh2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAodGFyZ2V0
X3R5cGUgPT0gY29udHJvbC5mbG9hdF90eXBlKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHNv
dXJjZV90eXBlID09IGNvbnRyb2wuZG91YmxlX3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIERvdWJsZUxpdGVyYWxWYWx1ZSAqbGl0ZXJhbCA9IChEb3VibGVMaXRlcmFsVmFsdWUg
KikgZXhwciAtPiB2YWx1ZTsKICAgICAgICAgICAgICAgIGxpdGVyYWxfdmFsdWUgPSBjb250cm9s
LmZsb2F0X3Bvb2wuRmluZE9ySW5zZXJ0KGxpdGVyYWwgLT4gdmFsdWUuRmxvYXRWYWx1ZSgpKTsK
ICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzb3VyY2VfdHlwZSA9PSBjb250cm9s
LmxvbmdfdHlwZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTG9uZ0xpdGVyYWxWYWx1
ZSAqbGl0ZXJhbCA9IChMb25nTGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gdmFsdWU7CiAgICAgICAg
ICAgICAgICBJRUVFZmxvYXQgdmFsdWUobGl0ZXJhbCAtPiB2YWx1ZSk7CiAgICAgICAgICAgICAg
ICBsaXRlcmFsX3ZhbHVlID0gY29udHJvbC5mbG9hdF9wb29sLkZpbmRPckluc2VydCh2YWx1ZSk7
CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICBJbnRMaXRlcmFsVmFsdWUgKmxpdGVyYWwgPSAoSW50TGl0ZXJhbFZhbHVlICopIGV4cHIg
LT4gdmFsdWU7CiAgICAgICAgICAgICAgICBJRUVFZmxvYXQgdmFsdWUobGl0ZXJhbCAtPiB2YWx1
ZSk7CiAgICAgICAgICAgICAgICBsaXRlcmFsX3ZhbHVlID0gY29udHJvbC5mbG9hdF9wb29sLkZp
bmRPckluc2VydCh2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBp
ZiAodGFyZ2V0X3R5cGUgPT0gY29udHJvbC5sb25nX3R5cGUpCiAgICAgICAgewogICAgICAgICAg
ICBpZiAoc291cmNlX3R5cGUgPT0gY29udHJvbC5kb3VibGVfdHlwZSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgRG91YmxlTGl0ZXJhbFZhbHVlICpsaXRlcmFsID0gKERvdWJsZUxpdGVy
YWxWYWx1ZSAqKSBleHByIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgbGl0ZXJhbF92YWx1ZSA9
IGNvbnRyb2wubG9uZ19wb29sLkZpbmRPckluc2VydChsaXRlcmFsIC0+IHZhbHVlLkxvbmdWYWx1
ZSgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzb3VyY2VfdHlwZSA9PSBj
b250cm9sLmZsb2F0X3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEZsb2F0TGl0
ZXJhbFZhbHVlICpsaXRlcmFsID0gKEZsb2F0TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gdmFsdWU7
CiAgICAgICAgICAgICAgICBsaXRlcmFsX3ZhbHVlID0gY29udHJvbC5sb25nX3Bvb2wuRmluZE9y
SW5zZXJ0KGxpdGVyYWwgLT4gdmFsdWUuTG9uZ1ZhbHVlKCkpOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgSW50TGl0ZXJhbFZhbHVl
ICpsaXRlcmFsID0gKEludExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHZhbHVlOwogICAgICAgICAg
ICAgICAgbGl0ZXJhbF92YWx1ZSA9IGNvbnRyb2wubG9uZ19wb29sLkZpbmRPckluc2VydCgoTG9u
Z0ludCkgbGl0ZXJhbCAtPiB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAg
ZWxzZSBpZiAodGFyZ2V0X3R5cGUgPT0gY29udHJvbC5pbnRfdHlwZSkKICAgICAgICB7CiAgICAg
ICAgICAgIGlmIChzb3VyY2VfdHlwZSA9PSBjb250cm9sLmRvdWJsZV90eXBlKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICBEb3VibGVMaXRlcmFsVmFsdWUgKmxpdGVyYWwgPSAoRG91Ymxl
TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBsaXRlcmFsX3Zh
bHVlID0gY29udHJvbC5pbnRfcG9vbC5GaW5kT3JJbnNlcnQoKGxpdGVyYWwgLT4gdmFsdWUpLklu
dFZhbHVlKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJjZV90eXBl
ID09IGNvbnRyb2wuZmxvYXRfdHlwZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRmxv
YXRMaXRlcmFsVmFsdWUgKmxpdGVyYWwgPSAoRmxvYXRMaXRlcmFsVmFsdWUgKikgZXhwciAtPiB2
YWx1ZTsKICAgICAgICAgICAgICAgIGxpdGVyYWxfdmFsdWUgPSBjb250cm9sLmludF9wb29sLkZp
bmRPckluc2VydChsaXRlcmFsIC0+IHZhbHVlLkludFZhbHVlKCkpOwogICAgICAgICAgICB9CiAg
ICAgICAgICAgIGVsc2UgaWYgKHNvdXJjZV90eXBlID09IGNvbnRyb2wubG9uZ190eXBlKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBMb25nTGl0ZXJhbFZhbHVlICpsaXRlcmFsID0gKExv
bmdMaXRlcmFsVmFsdWUgKikgZXhwciAtPiB2YWx1ZTsKICAgICAgICAgICAgICAgIGxpdGVyYWxf
dmFsdWUgPSBjb250cm9sLmludF9wb29sLkZpbmRPckluc2VydCgoaTQpIChsaXRlcmFsIC0+IHZh
bHVlKS5Mb3dXb3JkKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgbGl0ZXJhbF92
YWx1ZSA9IGV4cHIgLT4gdmFsdWU7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHRhcmdldF90
eXBlID09IGNvbnRyb2wuY2hhcl90eXBlKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHNvdXJj
ZV90eXBlID09IGNvbnRyb2wuZG91YmxlX3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIERvdWJsZUxpdGVyYWxWYWx1ZSAqbGl0ZXJhbCA9IChEb3VibGVMaXRlcmFsVmFsdWUgKikg
ZXhwciAtPiB2YWx1ZTsKICAgICAgICAgICAgICAgIGxpdGVyYWxfdmFsdWUgPSBjb250cm9sLmlu
dF9wb29sLkZpbmRPckluc2VydCgoaTQpICh1MikgKGxpdGVyYWwgLT4gdmFsdWUuSW50VmFsdWUo
KSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJjZV90eXBlID09IGNv
bnRyb2wuZmxvYXRfdHlwZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRmxvYXRMaXRl
cmFsVmFsdWUgKmxpdGVyYWwgPSAoRmxvYXRMaXRlcmFsVmFsdWUgKikgZXhwciAtPiB2YWx1ZTsK
ICAgICAgICAgICAgICAgIGxpdGVyYWxfdmFsdWUgPSBjb250cm9sLmludF9wb29sLkZpbmRPcklu
c2VydCgoaTQpICh1MikgKGxpdGVyYWwgLT4gdmFsdWUuSW50VmFsdWUoKSkpOwogICAgICAgICAg
ICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJjZV90eXBlID09IGNvbnRyb2wubG9uZ190eXBl
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBMb25nTGl0ZXJhbFZhbHVlICpsaXRlcmFs
ID0gKExvbmdMaXRlcmFsVmFsdWUgKikgZXhwciAtPiB2YWx1ZTsKICAgICAgICAgICAgICAgIGxp
dGVyYWxfdmFsdWUgPSBjb250cm9sLmludF9wb29sLkZpbmRPckluc2VydCgoaTQpICh1MikgKGxp
dGVyYWwgLT4gdmFsdWUpLkxvd1dvcmQoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFsdWUgKmxpdGVyYWwg
PSAoSW50TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBsaXRl
cmFsX3ZhbHVlID0gY29udHJvbC5pbnRfcG9vbC5GaW5kT3JJbnNlcnQoKGk0KSAodTIpIGxpdGVy
YWwgLT4gdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHRh
cmdldF90eXBlID09IGNvbnRyb2wuc2hvcnRfdHlwZSkKICAgICAgICB7CiAgICAgICAgICAgIGlm
IChzb3VyY2VfdHlwZSA9PSBjb250cm9sLmRvdWJsZV90eXBlKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICBEb3VibGVMaXRlcmFsVmFsdWUgKmxpdGVyYWwgPSAoRG91YmxlTGl0ZXJhbFZh
bHVlICopIGV4cHIgLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBsaXRlcmFsX3ZhbHVlID0gY29u
dHJvbC5pbnRfcG9vbC5GaW5kT3JJbnNlcnQoKGk0KSAoaTIpIChsaXRlcmFsIC0+IHZhbHVlLklu
dFZhbHVlKCkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzb3VyY2VfdHlw
ZSA9PSBjb250cm9sLmZsb2F0X3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEZs
b2F0TGl0ZXJhbFZhbHVlICpsaXRlcmFsID0gKEZsb2F0TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4g
dmFsdWU7CiAgICAgICAgICAgICAgICBsaXRlcmFsX3ZhbHVlID0gY29udHJvbC5pbnRfcG9vbC5G
aW5kT3JJbnNlcnQoKGk0KSAoaTIpIChsaXRlcmFsIC0+IHZhbHVlLkludFZhbHVlKCkpKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzb3VyY2VfdHlwZSA9PSBjb250cm9sLmxv
bmdfdHlwZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTG9uZ0xpdGVyYWxWYWx1ZSAq
bGl0ZXJhbCA9IChMb25nTGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gdmFsdWU7CiAgICAgICAgICAg
ICAgICBsaXRlcmFsX3ZhbHVlID0gY29udHJvbC5pbnRfcG9vbC5GaW5kT3JJbnNlcnQoKGk0KSAo
aTIpIChsaXRlcmFsIC0+IHZhbHVlKS5Mb3dXb3JkKCkpOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgSW50TGl0ZXJhbFZhbHVlICps
aXRlcmFsID0gKEludExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHZhbHVlOwogICAgICAgICAgICAg
ICAgbGl0ZXJhbF92YWx1ZSA9IGNvbnRyb2wuaW50X3Bvb2wuRmluZE9ySW5zZXJ0KChpNCkgKGky
KSBsaXRlcmFsIC0+IHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNl
IGlmICh0YXJnZXRfdHlwZSA9PSBjb250cm9sLmJ5dGVfdHlwZSkKICAgICAgICB7CiAgICAgICAg
ICAgIGlmIChzb3VyY2VfdHlwZSA9PSBjb250cm9sLmRvdWJsZV90eXBlKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICBEb3VibGVMaXRlcmFsVmFsdWUgKmxpdGVyYWwgPSAoRG91YmxlTGl0
ZXJhbFZhbHVlICopIGV4cHIgLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBsaXRlcmFsX3ZhbHVl
ID0gY29udHJvbC5pbnRfcG9vbC5GaW5kT3JJbnNlcnQoKGk0KSAoaTEpIChsaXRlcmFsIC0+IHZh
bHVlLkludFZhbHVlKCkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzb3Vy
Y2VfdHlwZSA9PSBjb250cm9sLmZsb2F0X3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIEZsb2F0TGl0ZXJhbFZhbHVlICpsaXRlcmFsID0gKEZsb2F0TGl0ZXJhbFZhbHVlICopIGV4
cHIgLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBsaXRlcmFsX3ZhbHVlID0gY29udHJvbC5pbnRf
cG9vbC5GaW5kT3JJbnNlcnQoKGk0KSAoaTEpIChsaXRlcmFsIC0+IHZhbHVlLkludFZhbHVlKCkp
KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzb3VyY2VfdHlwZSA9PSBjb250
cm9sLmxvbmdfdHlwZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTG9uZ0xpdGVyYWxW
YWx1ZSAqbGl0ZXJhbCA9IChMb25nTGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gdmFsdWU7CiAgICAg
ICAgICAgICAgICBsaXRlcmFsX3ZhbHVlID0gY29udHJvbC5pbnRfcG9vbC5GaW5kT3JJbnNlcnQo
KGludCkgKGkxKSAobGl0ZXJhbCAtPiB2YWx1ZSkuTG93V29yZCgpKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEludExpdGVyYWxW
YWx1ZSAqbGl0ZXJhbCA9IChJbnRMaXRlcmFsVmFsdWUgKikgZXhwciAtPiB2YWx1ZTsKICAgICAg
ICAgICAgICAgIGxpdGVyYWxfdmFsdWUgPSBjb250cm9sLmludF9wb29sLkZpbmRPckluc2VydCgo
aTQpIChpMSkgbGl0ZXJhbCAtPiB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9
CgogICAgcmV0dXJuIGxpdGVyYWxfdmFsdWU7Cn0KCgogCiAKIAppbmxpbmUgTGl0ZXJhbFZhbHVl
ICpTZW1hbnRpYzo6Q2FzdFZhbHVlKFR5cGVTeW1ib2wgKnRhcmdldF90eXBlLCBBc3RFeHByZXNz
aW9uICpleHByKQp7CiAgICByZXR1cm4gKExpdGVyYWxWYWx1ZSAqKSAoZXhwciAtPiBJc0NvbnN0
YW50KCkgJiYgKHRhcmdldF90eXBlIC0+IFByaW1pdGl2ZSgpIHx8IHRhcmdldF90eXBlID09IGNv
bnRyb2wuU3RyaW5nKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID8gQ2FzdFByaW1pdGl2ZVZhbHVlKHRhcmdldF90eXBlLCBleHByKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbnVsbCApOwp9
CgoKdm9pZCBTZW1hbnRpYzo6UHJvY2Vzc0Nhc3RFeHByZXNzaW9uKEFzdCAqZXhwcikKewogICAg
QXN0Q2FzdEV4cHJlc3Npb24gKmNhc3RfZXhwcmVzc2lvbiA9IChBc3RDYXN0RXhwcmVzc2lvbiAq
KSBleHByOwoKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIFN5bWJvbFNldCAqZXhj
ZXB0aW9uX3NldCA9IFRyeUV4Y2VwdGlvblRhYmxlU3RhY2soKS5Ub3AoKTsKICAgIGlmIChleGNl
cHRpb25fc2V0KQogICAgewogICAgICAgIGV4Y2VwdGlvbl9zZXQgLT4gQWRkRWxlbWVudChjb250
cm9sLlJ1bnRpbWVFeGNlcHRpb24oKSk7CiAgICB9CgogICAgIAogICAgIAogICAgIAogICAgIAog
ICAgUHJvY2Vzc0V4cHJlc3Npb24oY2FzdF9leHByZXNzaW9uIC0+IGV4cHJlc3Npb24pOwoKICAg
IFR5cGVTeW1ib2wgKnNvdXJjZV90eXBlID0gY2FzdF9leHByZXNzaW9uIC0+IGV4cHJlc3Npb24g
LT4gVHlwZSgpOwoKICAgICAKICAgICAKICAgICAKICAgICAKICAgIEFzdFByaW1pdGl2ZVR5cGUg
KnByaW1pdGl2ZV90eXBlID0gY2FzdF9leHByZXNzaW9uIC0+IHR5cGVfb3B0IC0+IFByaW1pdGl2
ZVR5cGVDYXN0KCk7CiAgICBUeXBlU3ltYm9sICp0YXJnZXRfdHlwZTsKICAgIGlmIChwcmltaXRp
dmVfdHlwZSkKICAgICAgICAgdGFyZ2V0X3R5cGUgPSBGaW5kUHJpbWl0aXZlVHlwZShwcmltaXRp
dmVfdHlwZSk7CiAgICBlbHNlIGlmIChjYXN0X2V4cHJlc3Npb24gLT4gdHlwZV9vcHQgLT4gSXNO
YW1lKCkpCiAgICAgICAgIHRhcmdldF90eXBlID0gTXVzdEZpbmRUeXBlKGNhc3RfZXhwcmVzc2lv
biAtPiB0eXBlX29wdCk7CiAgICBlbHNlCiAgICB7CiAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2Vt
YW50aWNFcnJvcjo6SU5WQUxJRF9DQVNUX1RZUEUsCiAgICAgICAgICAgICAgICAgICAgICAgY2Fz
dF9leHByZXNzaW9uIC0+IHR5cGVfb3B0IC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAg
ICAgICAgIGNhc3RfZXhwcmVzc2lvbiAtPiB0eXBlX29wdCAtPiBSaWdodFRva2VuKCkpOwogICAg
ICAgIGNhc3RfZXhwcmVzc2lvbiAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CgogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBpbnQgbnVtX2RpbWVuc2lvbnMgPSBjYXN0X2V4cHJlc3Npb24g
LT4gTnVtQnJhY2tldHMoKTsKICAgIHRhcmdldF90eXBlID0gKG51bV9kaW1lbnNpb25zID09IDAg
PyB0YXJnZXRfdHlwZSA6IHRhcmdldF90eXBlIC0+IEdldEFycmF5VHlwZSgoU2VtYW50aWMgKikg
dGhpcywgbnVtX2RpbWVuc2lvbnMpKTsKCiAgICBpZiAoQ2FuQXNzaWdubWVudENvbnZlcnQodGFy
Z2V0X3R5cGUsIGNhc3RfZXhwcmVzc2lvbiAtPiBleHByZXNzaW9uKSkKICAgIHsKICAgICAgICBj
YXN0X2V4cHJlc3Npb24gLT4gc3ltYm9sID0gdGFyZ2V0X3R5cGU7CiAgICAgICAgY2FzdF9leHBy
ZXNzaW9uIC0+IHZhbHVlID0gQ2FzdFZhbHVlKHRhcmdldF90eXBlLCBjYXN0X2V4cHJlc3Npb24g
LT4gZXhwcmVzc2lvbik7CiAgICB9CiAgICBlbHNlIGlmIChDYW5DYXN0Q29udmVydCh0YXJnZXRf
dHlwZSwgc291cmNlX3R5cGUsIGNhc3RfZXhwcmVzc2lvbiAtPiByaWdodF9wYXJlbnRoZXNpc190
b2tlbl9vcHQpKQogICAgewogICAgICAgIGNhc3RfZXhwcmVzc2lvbiAtPiBraW5kID0gQXN0OjpD
SEVDS19BTkRfQ0FTVDsKICAgICAgICBjYXN0X2V4cHJlc3Npb24gLT4gc3ltYm9sID0gdGFyZ2V0
X3R5cGU7CiAgICAgICAgY2FzdF9leHByZXNzaW9uIC0+IHZhbHVlID0gQ2FzdFZhbHVlKHRhcmdl
dF90eXBlLCBjYXN0X2V4cHJlc3Npb24gLT4gZXhwcmVzc2lvbik7CiAgICB9CiAgICBlbHNlCiAg
ICB7CiAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6SU5WQUxJRF9DQVNUX0NP
TlZFUlNJT04sCiAgICAgICAgICAgICAgICAgICAgICAgY2FzdF9leHByZXNzaW9uIC0+IGV4cHJl
c3Npb24gLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgY2FzdF9leHByZXNz
aW9uIC0+IGV4cHJlc3Npb24gLT4gUmlnaHRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAg
IHNvdXJjZV90eXBlIC0+IE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfdHlw
ZSAtPiBOYW1lKCkpOwogICAgICAgIGNhc3RfZXhwcmVzc2lvbiAtPiBzeW1ib2wgPSBjb250cm9s
Lm5vX3R5cGU7CiAgICB9CgogICAgcmV0dXJuOwp9CgoKQXN0RXhwcmVzc2lvbiAqU2VtYW50aWM6
OkNvbnZlcnRUb1R5cGUoQXN0RXhwcmVzc2lvbiAqZXhwciwgVHlwZVN5bWJvbCAqdHlwZSkKewog
ICAgaWYgKGV4cHIgLT4gVHlwZSgpID09IGNvbnRyb2wubnVsbF90eXBlKQogICAgICAgIHJldHVy
biBleHByOwoKICAgIExleFN0cmVhbTo6VG9rZW5JbmRleCBsb2MgPSBleHByIC0+IExlZnRUb2tl
bigpOwoKICAgIEFzdENhc3RFeHByZXNzaW9uICpyZXN1bHQgPSBjb21waWxhdGlvbl91bml0IC0+
IGFzdF9wb29sIC0+IEdlbkNhc3RFeHByZXNzaW9uKCk7CiAgICByZXN1bHQgLT4gbGVmdF9wYXJl
bnRoZXNpc190b2tlbl9vcHQgPSBsb2M7CiAgICByZXN1bHQgLT4gdHlwZV9vcHQgPSBfX251bGwg
OwogICAgcmVzdWx0IC0+IHJpZ2h0X3BhcmVudGhlc2lzX3Rva2VuX29wdCA9IGxvYzsKICAgIHJl
c3VsdCAtPiBleHByZXNzaW9uID0gZXhwcjsKCiAgICByZXN1bHQgLT4gc3ltYm9sID0gdHlwZTsK
ICAgIHJlc3VsdCAtPiB2YWx1ZSA9IENhc3RWYWx1ZSh0eXBlLCBleHByKTsKCiAgICByZXR1cm4g
cmVzdWx0Owp9CgoKQXN0RXhwcmVzc2lvbiAqU2VtYW50aWM6OlByb21vdGVVbmFyeU51bWVyaWNF
eHByZXNzaW9uKEFzdEV4cHJlc3Npb24gKnVuYXJ5X2V4cHJlc3Npb24pCnsKICAgIFR5cGVTeW1i
b2wgKnR5cGUgPSB1bmFyeV9leHByZXNzaW9uIC0+IFR5cGUoKTsKCiAgICBpZiAodHlwZSA9PSBj
b250cm9sLm5vX3R5cGUpCiAgICAgICAgcmV0dXJuIHVuYXJ5X2V4cHJlc3Npb247CgogICAgaWYg
KCEgY29udHJvbC5Jc051bWVyaWModHlwZSkpCiAgICB7CiAgICAgICBSZXBvcnRTZW1FcnJvcihT
ZW1hbnRpY0Vycm9yOjpUWVBFX05PVF9OVU1FUklDLAogICAgICAgICAgICAgICAgICAgICAgdW5h
cnlfZXhwcmVzc2lvbiAtPiBMZWZ0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgIHVuYXJ5
X2V4cHJlc3Npb24gLT4gUmlnaHRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgdHlwZSAt
PiBOYW1lKCkpOwogICAgICAgIHVuYXJ5X2V4cHJlc3Npb24gLT4gc3ltYm9sID0gY29udHJvbC5u
b190eXBlOwogICAgICAgIHJldHVybiB1bmFyeV9leHByZXNzaW9uOwogICAgfQoKICAgIHJldHVy
biAoKHR5cGUgPT0gY29udHJvbC5ieXRlX3R5cGUgfHwgdHlwZSA9PSBjb250cm9sLnNob3J0X3R5
cGUgfHwgdHlwZSA9PSBjb250cm9sLmNoYXJfdHlwZSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPyBDb252ZXJ0VG9UeXBlKHVuYXJ5X2V4cHJlc3Npb24s
IGNvbnRyb2wuaW50X3R5cGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogdW5hcnlfZXhwcmVzc2lvbik7Cn0KCgp2b2lkIFNlbWFudGljOjpCaW5hcnlO
dW1lcmljUHJvbW90aW9uKEFzdEJpbmFyeUV4cHJlc3Npb24gKmJpbmFyeV9leHByZXNzaW9uKQp7
CiAgICBBc3RFeHByZXNzaW9uICpsZWZ0X2V4cHIgPSBiaW5hcnlfZXhwcmVzc2lvbiAtPiBsZWZ0
X2V4cHJlc3Npb247CiAgICBBc3RFeHByZXNzaW9uICpyaWdodF9leHByID0gYmluYXJ5X2V4cHJl
c3Npb24gLT4gcmlnaHRfZXhwcmVzc2lvbjsKCiAgICBUeXBlU3ltYm9sICpsZWZ0X3R5cGUgID0g
bGVmdF9leHByIC0+IFR5cGUoKSwKICAgICAgICAgICAgICAgKnJpZ2h0X3R5cGUgPSByaWdodF9l
eHByIC0+IFR5cGUoKTsKCiAgICBpZiAobGVmdF90eXBlID09IGNvbnRyb2wubm9fdHlwZSB8fCBy
aWdodF90eXBlID09IGNvbnRyb2wubm9fdHlwZSkKICAgIHsKICAgICAgICBiaW5hcnlfZXhwcmVz
c2lvbiAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIGlmICghIGNvbnRyb2wuSXNOdW1lcmljKGxlZnRfdHlwZSkpCiAgICB7CiAgICAgICBSZXBv
cnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpUWVBFX05PVF9OVU1FUklDLAogICAgICAgICAgICAg
ICAgICAgICAgbGVmdF9leHByIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAg
bGVmdF9leHByIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgIGxlZnRfdHlw
ZSAtPiBOYW1lKCkpOwogICAgICAgIGJpbmFyeV9leHByZXNzaW9uIC0+IHN5bWJvbCA9IGNvbnRy
b2wubm9fdHlwZTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBlbHNlIGlmICghIGNvbnRyb2wu
SXNOdW1lcmljKHJpZ2h0X3R5cGUpKQogICAgewogICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50
aWNFcnJvcjo6VFlQRV9OT1RfTlVNRVJJQywKICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0X2V4
cHIgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICByaWdodF9leHByIC0+IFJp
Z2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0X3R5cGUgLT4gTmFtZSgpKTsK
ICAgICAgICBiaW5hcnlfZXhwcmVzc2lvbiAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAg
ICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChsZWZ0X3R5cGUgPT0gY29udHJvbC5kb3VibGVf
dHlwZSkKICAgIHsKICAgICAgICBpZiAocmlnaHRfdHlwZSAhPSBjb250cm9sLmRvdWJsZV90eXBl
KQogICAgICAgICAgICBiaW5hcnlfZXhwcmVzc2lvbiAtPiByaWdodF9leHByZXNzaW9uID0gQ29u
dmVydFRvVHlwZShiaW5hcnlfZXhwcmVzc2lvbiAtPiByaWdodF9leHByZXNzaW9uLCBjb250cm9s
LmRvdWJsZV90eXBlKTsKICAgICAgICBiaW5hcnlfZXhwcmVzc2lvbiAtPiBzeW1ib2wgPSBjb250
cm9sLmRvdWJsZV90eXBlOwogICAgfQogICAgZWxzZSBpZiAocmlnaHRfdHlwZSA9PSBjb250cm9s
LmRvdWJsZV90eXBlKQogICAgewogICAgICAgIGlmIChsZWZ0X3R5cGUgIT0gY29udHJvbC5kb3Vi
bGVfdHlwZSkKICAgICAgICAgICAgYmluYXJ5X2V4cHJlc3Npb24gLT4gbGVmdF9leHByZXNzaW9u
ID0gQ29udmVydFRvVHlwZShiaW5hcnlfZXhwcmVzc2lvbiAtPiBsZWZ0X2V4cHJlc3Npb24sIGNv
bnRyb2wuZG91YmxlX3R5cGUpOwogICAgICAgIGJpbmFyeV9leHByZXNzaW9uIC0+IHN5bWJvbCA9
IGNvbnRyb2wuZG91YmxlX3R5cGU7CiAgICB9CiAgICBlbHNlIGlmIChsZWZ0X3R5cGUgPT0gY29u
dHJvbC5mbG9hdF90eXBlKQogICAgewogICAgICAgIGlmIChyaWdodF90eXBlICE9IGNvbnRyb2wu
ZmxvYXRfdHlwZSkKICAgICAgICAgICAgYmluYXJ5X2V4cHJlc3Npb24gLT4gcmlnaHRfZXhwcmVz
c2lvbiA9IENvbnZlcnRUb1R5cGUoYmluYXJ5X2V4cHJlc3Npb24gLT4gcmlnaHRfZXhwcmVzc2lv
biwgY29udHJvbC5mbG9hdF90eXBlKTsKICAgICAgICBiaW5hcnlfZXhwcmVzc2lvbiAtPiBzeW1i
b2wgPSBjb250cm9sLmZsb2F0X3R5cGU7CiAgICB9CiAgICBlbHNlIGlmIChyaWdodF90eXBlID09
IGNvbnRyb2wuZmxvYXRfdHlwZSkKICAgIHsKICAgICAgICBpZiAobGVmdF90eXBlICE9IGNvbnRy
b2wuZmxvYXRfdHlwZSkKICAgICAgICAgICAgYmluYXJ5X2V4cHJlc3Npb24gLT4gbGVmdF9leHBy
ZXNzaW9uID0gQ29udmVydFRvVHlwZShiaW5hcnlfZXhwcmVzc2lvbiAtPiBsZWZ0X2V4cHJlc3Np
b24sIGNvbnRyb2wuZmxvYXRfdHlwZSk7CiAgICAgICAgYmluYXJ5X2V4cHJlc3Npb24gLT4gc3lt
Ym9sID0gY29udHJvbC5mbG9hdF90eXBlOwogICAgfQogICAgZWxzZSBpZiAobGVmdF90eXBlID09
IGNvbnRyb2wubG9uZ190eXBlKQogICAgewogICAgICAgIGlmIChyaWdodF90eXBlICE9IGNvbnRy
b2wubG9uZ190eXBlKQogICAgICAgICAgICBiaW5hcnlfZXhwcmVzc2lvbiAtPiByaWdodF9leHBy
ZXNzaW9uID0gQ29udmVydFRvVHlwZShiaW5hcnlfZXhwcmVzc2lvbiAtPiByaWdodF9leHByZXNz
aW9uLCBjb250cm9sLmxvbmdfdHlwZSk7CiAgICAgICAgYmluYXJ5X2V4cHJlc3Npb24gLT4gc3lt
Ym9sID0gY29udHJvbC5sb25nX3R5cGU7CiAgICB9CiAgICBlbHNlIGlmIChyaWdodF90eXBlID09
IGNvbnRyb2wubG9uZ190eXBlKQogICAgewogICAgICAgIGlmIChsZWZ0X3R5cGUgIT0gY29udHJv
bC5sb25nX3R5cGUpCiAgICAgICAgICAgIGJpbmFyeV9leHByZXNzaW9uIC0+IGxlZnRfZXhwcmVz
c2lvbiA9IENvbnZlcnRUb1R5cGUoYmluYXJ5X2V4cHJlc3Npb24gLT4gbGVmdF9leHByZXNzaW9u
LCBjb250cm9sLmxvbmdfdHlwZSk7CiAgICAgICAgYmluYXJ5X2V4cHJlc3Npb24gLT4gc3ltYm9s
ID0gY29udHJvbC5sb25nX3R5cGU7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgaWYgKGxl
ZnRfdHlwZSAhPSBjb250cm9sLmludF90eXBlKQogICAgICAgICAgICBiaW5hcnlfZXhwcmVzc2lv
biAtPiBsZWZ0X2V4cHJlc3Npb24gPSBDb252ZXJ0VG9UeXBlKGJpbmFyeV9leHByZXNzaW9uIC0+
IGxlZnRfZXhwcmVzc2lvbiwgY29udHJvbC5pbnRfdHlwZSk7CiAgICAgICAgaWYgKHJpZ2h0X3R5
cGUgIT0gY29udHJvbC5pbnRfdHlwZSkKICAgICAgICAgICAgYmluYXJ5X2V4cHJlc3Npb24gLT4g
cmlnaHRfZXhwcmVzc2lvbiA9IENvbnZlcnRUb1R5cGUoYmluYXJ5X2V4cHJlc3Npb24gLT4gcmln
aHRfZXhwcmVzc2lvbiwgY29udHJvbC5pbnRfdHlwZSk7CiAgICAgICAgYmluYXJ5X2V4cHJlc3Np
b24gLT4gc3ltYm9sID0gY29udHJvbC5pbnRfdHlwZTsKICAgIH0KCiAgICByZXR1cm47Cn0KCgp2
b2lkIFNlbWFudGljOjpCaW5hcnlOdW1lcmljUHJvbW90aW9uKEFzdEFzc2lnbm1lbnRFeHByZXNz
aW9uICphc3NpZ25tZW50X2V4cHJlc3Npb24pCnsKICAgIEFzdEV4cHJlc3Npb24gKmxlZnRfZXhw
ciA9IGFzc2lnbm1lbnRfZXhwcmVzc2lvbiAtPiBsZWZ0X2hhbmRfc2lkZTsKICAgIEFzdEV4cHJl
c3Npb24gKnJpZ2h0X2V4cHIgPSBhc3NpZ25tZW50X2V4cHJlc3Npb24gLT4gZXhwcmVzc2lvbjsK
CiAgICBUeXBlU3ltYm9sICpsZWZ0X3R5cGUgID0gbGVmdF9leHByIC0+IFR5cGUoKSwKICAgICAg
ICAgICAgICAgKnJpZ2h0X3R5cGUgPSByaWdodF9leHByIC0+IFR5cGUoKTsKCiAgICBpZiAobGVm
dF90eXBlID09IGNvbnRyb2wubm9fdHlwZSB8fCByaWdodF90eXBlID09IGNvbnRyb2wubm9fdHlw
ZSkKICAgICAgICByZXR1cm47CgogICAgaWYgKCEgY29udHJvbC5Jc051bWVyaWMobGVmdF90eXBl
KSkKICAgIHsKICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OlRZUEVfTk9UX05V
TUVSSUMsCiAgICAgICAgICAgICAgICAgICAgICBsZWZ0X2V4cHIgLT4gTGVmdFRva2VuKCksCiAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0X2V4cHIgLT4gUmlnaHRUb2tlbigpLAogICAgICAgICAg
ICAgICAgICAgICAgbGVmdF90eXBlIC0+IE5hbWUoKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQog
ICAgZWxzZSBpZiAoISBjb250cm9sLklzTnVtZXJpYyhyaWdodF90eXBlKSkKICAgIHsKICAgICAg
IFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OlRZUEVfTk9UX05VTUVSSUMsCiAgICAgICAg
ICAgICAgICAgICAgICByaWdodF9leHByIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAg
ICAgICAgcmlnaHRfZXhwciAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICBy
aWdodF90eXBlIC0+IE5hbWUoKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChsZWZ0
X3R5cGUgPT0gY29udHJvbC5kb3VibGVfdHlwZSkKICAgIHsKICAgICAgICBpZiAocmlnaHRfdHlw
ZSAhPSBjb250cm9sLmRvdWJsZV90eXBlKQogICAgICAgICAgICBhc3NpZ25tZW50X2V4cHJlc3Np
b24gLT4gZXhwcmVzc2lvbiA9IENvbnZlcnRUb1R5cGUoYXNzaWdubWVudF9leHByZXNzaW9uIC0+
IGV4cHJlc3Npb24sIGNvbnRyb2wuZG91YmxlX3R5cGUpOwogICAgfQogICAgZWxzZSBpZiAocmln
aHRfdHlwZSA9PSBjb250cm9sLmRvdWJsZV90eXBlKQogICAgewogICAgICAgIGlmIChsZWZ0X3R5
cGUgIT0gY29udHJvbC5kb3VibGVfdHlwZSkKICAgICAgICAgICAgYXNzaWdubWVudF9leHByZXNz
aW9uIC0+IGxlZnRfaGFuZF9zaWRlID0gQ29udmVydFRvVHlwZShhc3NpZ25tZW50X2V4cHJlc3Np
b24gLT4gbGVmdF9oYW5kX3NpZGUsIGNvbnRyb2wuZG91YmxlX3R5cGUpOwogICAgfQogICAgZWxz
ZSBpZiAobGVmdF90eXBlID09IGNvbnRyb2wuZmxvYXRfdHlwZSkKICAgIHsKICAgICAgICBpZiAo
cmlnaHRfdHlwZSAhPSBjb250cm9sLmZsb2F0X3R5cGUpCiAgICAgICAgICAgIGFzc2lnbm1lbnRf
ZXhwcmVzc2lvbiAtPiBleHByZXNzaW9uID0gQ29udmVydFRvVHlwZShhc3NpZ25tZW50X2V4cHJl
c3Npb24gLT4gZXhwcmVzc2lvbiwgY29udHJvbC5mbG9hdF90eXBlKTsKICAgIH0KICAgIGVsc2Ug
aWYgKHJpZ2h0X3R5cGUgPT0gY29udHJvbC5mbG9hdF90eXBlKQogICAgewogICAgICAgIGlmIChs
ZWZ0X3R5cGUgIT0gY29udHJvbC5mbG9hdF90eXBlKQogICAgICAgICAgICBhc3NpZ25tZW50X2V4
cHJlc3Npb24gLT4gbGVmdF9oYW5kX3NpZGUgPSBDb252ZXJ0VG9UeXBlKGFzc2lnbm1lbnRfZXhw
cmVzc2lvbiAtPiBsZWZ0X2hhbmRfc2lkZSwgY29udHJvbC5mbG9hdF90eXBlKTsKICAgIH0KICAg
IGVsc2UgaWYgKGxlZnRfdHlwZSA9PSBjb250cm9sLmxvbmdfdHlwZSkKICAgIHsKICAgICAgICBp
ZiAocmlnaHRfdHlwZSAhPSBjb250cm9sLmxvbmdfdHlwZSkKICAgICAgICAgICAgYXNzaWdubWVu
dF9leHByZXNzaW9uIC0+IGV4cHJlc3Npb24gPSBDb252ZXJ0VG9UeXBlKGFzc2lnbm1lbnRfZXhw
cmVzc2lvbiAtPiBleHByZXNzaW9uLCBjb250cm9sLmxvbmdfdHlwZSk7CiAgICB9CiAgICBlbHNl
IGlmIChyaWdodF90eXBlID09IGNvbnRyb2wubG9uZ190eXBlKQogICAgewogICAgICAgIGlmIChs
ZWZ0X3R5cGUgIT0gY29udHJvbC5sb25nX3R5cGUpCiAgICAgICAgICAgIGFzc2lnbm1lbnRfZXhw
cmVzc2lvbiAtPiBsZWZ0X2hhbmRfc2lkZSA9IENvbnZlcnRUb1R5cGUoYXNzaWdubWVudF9leHBy
ZXNzaW9uIC0+IGxlZnRfaGFuZF9zaWRlLCBjb250cm9sLmxvbmdfdHlwZSk7CiAgICB9CiAgICBl
bHNlCiAgICB7CiAgICAgICAgaWYgKGxlZnRfdHlwZSAhPSBjb250cm9sLmludF90eXBlKQogICAg
ICAgICAgICBhc3NpZ25tZW50X2V4cHJlc3Npb24gLT4gbGVmdF9oYW5kX3NpZGUgPSBDb252ZXJ0
VG9UeXBlKGFzc2lnbm1lbnRfZXhwcmVzc2lvbiAtPiBsZWZ0X2hhbmRfc2lkZSwgY29udHJvbC5p
bnRfdHlwZSk7CiAgICAgICAgaWYgKHJpZ2h0X3R5cGUgIT0gY29udHJvbC5pbnRfdHlwZSkKICAg
ICAgICAgICAgYXNzaWdubWVudF9leHByZXNzaW9uIC0+IGV4cHJlc3Npb24gPSBDb252ZXJ0VG9U
eXBlKGFzc2lnbm1lbnRfZXhwcmVzc2lvbiAtPiBleHByZXNzaW9uLCBjb250cm9sLmludF90eXBl
KTsKICAgIH0KCiAgICByZXR1cm47Cn0KCgp2b2lkIFNlbWFudGljOjpCaW5hcnlOdW1lcmljUHJv
bW90aW9uKEFzdENvbmRpdGlvbmFsRXhwcmVzc2lvbiAqY29uZGl0aW9uYWxfZXhwcmVzc2lvbikK
ewogICAgQXN0RXhwcmVzc2lvbiAqbGVmdF9leHByID0gY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAt
PiB0cnVlX2V4cHJlc3Npb247CiAgICBBc3RFeHByZXNzaW9uICpyaWdodF9leHByID0gY29uZGl0
aW9uYWxfZXhwcmVzc2lvbiAtPiBmYWxzZV9leHByZXNzaW9uOwoKICAgIFR5cGVTeW1ib2wgKmxl
ZnRfdHlwZSAgPSBsZWZ0X2V4cHIgLT4gVHlwZSgpLAogICAgICAgICAgICAgICAqcmlnaHRfdHlw
ZSA9IHJpZ2h0X2V4cHIgLT4gVHlwZSgpOwoKICAgIGlmIChsZWZ0X3R5cGUgPT0gY29udHJvbC5u
b190eXBlIHx8IHJpZ2h0X3R5cGUgPT0gY29udHJvbC5ub190eXBlKQogICAgewogICAgICAgIGNv
bmRpdGlvbmFsX2V4cHJlc3Npb24gLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBpZiAoISBjb250cm9sLklzTnVtZXJpYyhsZWZ0X3R5cGUpKQog
ICAgewogICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6VFlQRV9OT1RfTlVNRVJJ
QywKICAgICAgICAgICAgICAgICAgICAgIGxlZnRfZXhwciAtPiBMZWZ0VG9rZW4oKSwKICAgICAg
ICAgICAgICAgICAgICAgIGxlZnRfZXhwciAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0X3R5cGUgLT4gTmFtZSgpKTsKICAgICAgICBjb25kaXRpb25hbF9leHByZXNz
aW9uIC0+IHN5bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsKICAgICAgICByZXR1cm47CiAgICB9CiAg
ICBlbHNlIGlmICghIGNvbnRyb2wuSXNOdW1lcmljKHJpZ2h0X3R5cGUpKQogICAgewogICAgICAg
UmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6VFlQRV9OT1RfTlVNRVJJQywKICAgICAgICAg
ICAgICAgICAgICAgIHJpZ2h0X2V4cHIgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAg
ICAgICByaWdodF9leHByIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgIHJp
Z2h0X3R5cGUgLT4gTmFtZSgpKTsKICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHN5
bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGxl
ZnRfdHlwZSA9PSBjb250cm9sLmRvdWJsZV90eXBlKQogICAgewogICAgICAgIGlmIChyaWdodF90
eXBlICE9IGNvbnRyb2wuZG91YmxlX3R5cGUpCiAgICAgICAgICAgIGNvbmRpdGlvbmFsX2V4cHJl
c3Npb24gLT4gZmFsc2VfZXhwcmVzc2lvbiA9CiAgICAgICAgICAgICAgICAgICAgICAgIENvbnZl
cnRUb1R5cGUoY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBmYWxzZV9leHByZXNzaW9uLCBjb250
cm9sLmRvdWJsZV90eXBlKTsKICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHN5bWJv
bCA9IGNvbnRyb2wuZG91YmxlX3R5cGU7CiAgICB9CiAgICBlbHNlIGlmIChyaWdodF90eXBlID09
IGNvbnRyb2wuZG91YmxlX3R5cGUpCiAgICB7CiAgICAgICAgaWYgKGxlZnRfdHlwZSAhPSBjb250
cm9sLmRvdWJsZV90eXBlKQogICAgICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHRy
dWVfZXhwcmVzc2lvbiA9CiAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRUb1R5cGUoY29u
ZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiB0cnVlX2V4cHJlc3Npb24sIGNvbnRyb2wuZG91YmxlX3R5
cGUpOwogICAgICAgIGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gLT4gc3ltYm9sID0gY29udHJvbC5k
b3VibGVfdHlwZTsKICAgIH0KICAgIGVsc2UgaWYgKGxlZnRfdHlwZSA9PSBjb250cm9sLmZsb2F0
X3R5cGUpCiAgICB7CiAgICAgICAgaWYgKHJpZ2h0X3R5cGUgIT0gY29udHJvbC5mbG9hdF90eXBl
KQogICAgICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IGZhbHNlX2V4cHJlc3Npb24g
PQogICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0VG9UeXBlKGNvbmRpdGlvbmFsX2V4cHJl
c3Npb24gLT4gZmFsc2VfZXhwcmVzc2lvbiwgY29udHJvbC5mbG9hdF90eXBlKTsKICAgICAgICBj
b25kaXRpb25hbF9leHByZXNzaW9uIC0+IHN5bWJvbCA9IGNvbnRyb2wuZmxvYXRfdHlwZTsKICAg
IH0KICAgIGVsc2UgaWYgKHJpZ2h0X3R5cGUgPT0gY29udHJvbC5mbG9hdF90eXBlKQogICAgewog
ICAgICAgIGlmIChsZWZ0X3R5cGUgIT0gY29udHJvbC5mbG9hdF90eXBlKQogICAgICAgICAgICBj
b25kaXRpb25hbF9leHByZXNzaW9uIC0+IHRydWVfZXhwcmVzc2lvbiA9CiAgICAgICAgICAgICAg
ICAgICAgICAgIENvbnZlcnRUb1R5cGUoY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiB0cnVlX2V4
cHJlc3Npb24sIGNvbnRyb2wuZmxvYXRfdHlwZSk7CiAgICAgICAgY29uZGl0aW9uYWxfZXhwcmVz
c2lvbiAtPiBzeW1ib2wgPSBjb250cm9sLmZsb2F0X3R5cGU7CiAgICB9CiAgICBlbHNlIGlmIChs
ZWZ0X3R5cGUgPT0gY29udHJvbC5sb25nX3R5cGUpCiAgICB7CiAgICAgICAgaWYgKHJpZ2h0X3R5
cGUgIT0gY29udHJvbC5sb25nX3R5cGUpCiAgICAgICAgICAgIGNvbmRpdGlvbmFsX2V4cHJlc3Np
b24gLT4gZmFsc2VfZXhwcmVzc2lvbiA9CiAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRU
b1R5cGUoY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBmYWxzZV9leHByZXNzaW9uLCBjb250cm9s
LmxvbmdfdHlwZSk7CiAgICAgICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBzeW1ib2wgPSBj
b250cm9sLmxvbmdfdHlwZTsKICAgIH0KICAgIGVsc2UgaWYgKHJpZ2h0X3R5cGUgPT0gY29udHJv
bC5sb25nX3R5cGUpCiAgICB7CiAgICAgICAgaWYgKGxlZnRfdHlwZSAhPSBjb250cm9sLmxvbmdf
dHlwZSkKICAgICAgICAgICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiB0cnVlX2V4cHJlc3Np
b24gPSBDb252ZXJ0VG9UeXBlKGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gLT4gdHJ1ZV9leHByZXNz
aW9uLCBjb250cm9sLmxvbmdfdHlwZSk7CiAgICAgICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAt
PiBzeW1ib2wgPSBjb250cm9sLmxvbmdfdHlwZTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAg
ICBpZiAobGVmdF90eXBlICE9IGNvbnRyb2wuaW50X3R5cGUpCiAgICAgICAgICAgIGNvbmRpdGlv
bmFsX2V4cHJlc3Npb24gLT4gdHJ1ZV9leHByZXNzaW9uID0gQ29udmVydFRvVHlwZShjb25kaXRp
b25hbF9leHByZXNzaW9uIC0+IHRydWVfZXhwcmVzc2lvbiwgY29udHJvbC5pbnRfdHlwZSk7CiAg
ICAgICAgaWYgKHJpZ2h0X3R5cGUgIT0gY29udHJvbC5pbnRfdHlwZSkKICAgICAgICAgICAgY29u
ZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBmYWxzZV9leHByZXNzaW9uID0KICAgICAgICAgICAgICAg
ICAgICAgICAgQ29udmVydFRvVHlwZShjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IGZhbHNlX2V4
cHJlc3Npb24sIGNvbnRyb2wuaW50X3R5cGUpOwogICAgICAgIGNvbmRpdGlvbmFsX2V4cHJlc3Np
b24gLT4gc3ltYm9sID0gY29udHJvbC5pbnRfdHlwZTsKICAgIH0KCiAgICByZXR1cm47Cn0KCgp2
b2lkIFNlbWFudGljOjpQcm9jZXNzUExVUyhBc3RCaW5hcnlFeHByZXNzaW9uICpleHByKQp7CiAg
ICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBQcm9jZXNzRXhwcmVzc2lvbihleHByIC0+IGxlZnRf
ZXhwcmVzc2lvbik7CiAgICBQcm9jZXNzRXhwcmVzc2lvbihleHByIC0+IHJpZ2h0X2V4cHJlc3Np
b24pOwoKICAgIFR5cGVTeW1ib2wgKmxlZnRfdHlwZSAgPSBleHByIC0+IGxlZnRfZXhwcmVzc2lv
biAtPiBUeXBlKCksCiAgICAgICAgICAgICAgICpyaWdodF90eXBlID0gZXhwciAtPiByaWdodF9l
eHByZXNzaW9uIC0+IFR5cGUoKTsKCiAgICBpZiAobGVmdF90eXBlID09IGNvbnRyb2wubm9fdHlw
ZSB8fCByaWdodF90eXBlID09IGNvbnRyb2wubm9fdHlwZSkKICAgICAgICBleHByIC0+IHN5bWJv
bCA9IGNvbnRyb2wubm9fdHlwZTsKICAgIGVsc2UgaWYgKGxlZnRfdHlwZSA9PSBjb250cm9sLlN0
cmluZygpIHx8IHJpZ2h0X3R5cGUgPT0gY29udHJvbC5TdHJpbmcoKSkKICAgIHsKICAgICAgICAg
CiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgIFN5bWJvbFNl
dCAqZXhjZXB0aW9uX3NldCA9IFRyeUV4Y2VwdGlvblRhYmxlU3RhY2soKS5Ub3AoKTsKICAgICAg
ICBpZiAoZXhjZXB0aW9uX3NldCkKICAgICAgICB7CiAgICAgICAgICAgIGV4Y2VwdGlvbl9zZXQg
LT4gQWRkRWxlbWVudChjb250cm9sLkVycm9yKCkpOwogICAgICAgIH0KCiAgICAgICAgIAogICAg
ICAgICAKICAgICAgICAgCiAgICAgICAgaWYgKGxlZnRfdHlwZSAhPSBjb250cm9sLlN0cmluZygp
KQogICAgICAgIHsKICAgICAgICAgICAgQWRkU3RyaW5nQ29udmVyc2lvbkRlcGVuZGVuY2UobGVm
dF90eXBlLCBleHByIC0+IGJpbmFyeV9vcGVyYXRvcl90b2tlbik7CiAgICAgICAgICAgIGlmIChs
ZWZ0X3R5cGUgPT0gY29udHJvbC52b2lkX3R5cGUpCiAgICAgICAgICAgICAgICAgUmVwb3J0U2Vt
RXJyb3IoU2VtYW50aWNFcnJvcjo6Vk9JRF9UT19TVFJJTkcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gTGVmdFRva2VuKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gUmln
aHRUb2tlbigpKTsKICAgICAgICAgICAgZWxzZSBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiA9IENv
bnZlcnRUb1R5cGUoZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24sIGNvbnRyb2wuU3RyaW5nKCkpOwog
ICAgICAgIH0KCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgaWYgKHJpZ2h0
X3R5cGUgIT0gY29udHJvbC5TdHJpbmcoKSkKICAgICAgICB7CiAgICAgICAgICAgIEFkZFN0cmlu
Z0NvbnZlcnNpb25EZXBlbmRlbmNlKHJpZ2h0X3R5cGUsIGV4cHIgLT4gYmluYXJ5X29wZXJhdG9y
X3Rva2VuKTsKICAgICAgICAgICAgaWYgKHJpZ2h0X3R5cGUgPT0gY29udHJvbC52b2lkX3R5cGUp
CiAgICAgICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6Vk9JRF9UT19T
VFJJTkcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiByaWdodF9leHBy
ZXNzaW9uIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiAtPiBSaWdodFRva2VuKCkpOwogICAgICAgICAgICBlbHNl
IGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiA9IENvbnZlcnRUb1R5cGUoZXhwciAtPiByaWdodF9l
eHByZXNzaW9uLCBjb250cm9sLlN0cmluZygpKTsKICAgICAgICB9CgogICAgICAgIEFkZERlcGVu
ZGVuY2UoVGhpc1R5cGUoKSwgY29udHJvbC5TdHJpbmdCdWZmZXIoKSwgZXhwciAtPiBiaW5hcnlf
b3BlcmF0b3JfdG9rZW4pOwoKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAg
CiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAg
ICAgCiAgICAgICAgIAoKICAgICAgICBleHByIC0+IHN5bWJvbCA9IGNvbnRyb2wuU3RyaW5nKCk7
CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgQmluYXJ5TnVtZXJpY1Byb21vdGlvbihleHBy
KTsKCiAgICAgICAgaWYgKGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSAm
JiBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gSXNDb25zdGFudCgpKQogICAgICAgIHsKICAg
ICAgICAgICAgIGlmIChleHByIC0+IFR5cGUoKSA9PSBjb250cm9sLmRvdWJsZV90eXBlKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIERvdWJsZUxpdGVyYWxWYWx1ZSAqbGVmdCA9IChE
b3VibGVMaXRlcmFsVmFsdWUgKikgZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gdmFsdWU7CiAg
ICAgICAgICAgICAgICAgRG91YmxlTGl0ZXJhbFZhbHVlICpyaWdodCA9IChEb3VibGVMaXRlcmFs
VmFsdWUgKikgZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IHZhbHVlOwoKICAgICAgICAgICAg
ICAgICBleHByIC0+IHZhbHVlID0gY29udHJvbC5kb3VibGVfcG9vbC5GaW5kT3JJbnNlcnQobGVm
dCAtPiB2YWx1ZSArIHJpZ2h0IC0+IHZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGVsc2UgaWYgKGV4cHIgLT4gVHlwZSgpID09IGNvbnRyb2wuZmxvYXRfdHlwZSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBGbG9hdExpdGVyYWxWYWx1ZSAqbGVmdCA9IChGbG9hdExp
dGVyYWxWYWx1ZSAqKSBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICAg
ICAgICAgICBGbG9hdExpdGVyYWxWYWx1ZSAqcmlnaHQgPSAoRmxvYXRMaXRlcmFsVmFsdWUgKikg
ZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IHZhbHVlOwoKICAgICAgICAgICAgICAgICBleHBy
IC0+IHZhbHVlID0gY29udHJvbC5mbG9hdF9wb29sLkZpbmRPckluc2VydChsZWZ0IC0+IHZhbHVl
ICsgcmlnaHQgLT4gdmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAo
ZXhwciAtPiBUeXBlKCkgPT0gY29udHJvbC5sb25nX3R5cGUpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgTG9uZ0xpdGVyYWxWYWx1ZSAqbGVmdCA9IChMb25nTGl0ZXJhbFZhbHVlICop
IGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgIExvbmdM
aXRlcmFsVmFsdWUgKnJpZ2h0ID0gKExvbmdMaXRlcmFsVmFsdWUgKikgZXhwciAtPiByaWdodF9l
eHByZXNzaW9uIC0+IHZhbHVlOwoKICAgICAgICAgICAgICAgICBleHByIC0+IHZhbHVlID0gY29u
dHJvbC5sb25nX3Bvb2wuRmluZE9ySW5zZXJ0KGxlZnQgLT4gdmFsdWUgKyByaWdodCAtPiB2YWx1
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlICAKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFsdWUgKmxlZnQgPSAoSW50TGl0ZXJhbFZhbHVlICop
IGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgIEludExp
dGVyYWxWYWx1ZSAqcmlnaHQgPSAoSW50TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gcmlnaHRfZXhw
cmVzc2lvbiAtPiB2YWx1ZTsKCiAgICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNvbnRy
b2wuaW50X3Bvb2wuRmluZE9ySW5zZXJ0KGxlZnQgLT4gdmFsdWUgKyByaWdodCAtPiB2YWx1ZSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybjsKfQoKCnZvaWQgU2Vt
YW50aWM6OlByb2Nlc3NMRUZUX1NISUZUKEFzdEJpbmFyeUV4cHJlc3Npb24gKmV4cHIpCnsKICAg
IFByb2Nlc3NFeHByZXNzaW9uKGV4cHIgLT4gbGVmdF9leHByZXNzaW9uKTsKICAgIFByb2Nlc3NF
eHByZXNzaW9uKGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbik7CgogICAgVHlwZVN5bWJvbCAqbGVm
dF90eXBlICA9IGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IFR5cGUoKSwKICAgICAgICAgICAg
ICAgKnJpZ2h0X3R5cGUgPSBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gVHlwZSgpOwoKICAg
IGlmIChsZWZ0X3R5cGUgPT0gY29udHJvbC5ub190eXBlIHx8IHJpZ2h0X3R5cGUgPT0gY29udHJv
bC5ub190eXBlKQogICAgICAgIGV4cHIgLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAg
ZWxzZSBpZiAoISBjb250cm9sLklzSW50ZWdyYWwobGVmdF90eXBlKSkKICAgIHsKICAgICAgICBS
ZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpUWVBFX05PVF9JTlRFR1JBTCwKICAgICAgICAg
ICAgICAgICAgICAgICBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBMZWZ0VG9rZW4oKSwKICAg
ICAgICAgICAgICAgICAgICAgICBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBSaWdodFRva2Vu
KCksCiAgICAgICAgICAgICAgICAgICAgICAgbGVmdF90eXBlIC0+IE5hbWUoKSk7CiAgICAgICAg
ZXhwciAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICB9CiAgICBlbHNlIGlmICghIGNv
bnRyb2wuSXNJbnRlZ3JhbChyaWdodF90eXBlKSkKICAgIHsKICAgICAgICBSZXBvcnRTZW1FcnJv
cihTZW1hbnRpY0Vycm9yOjpUWVBFX05PVF9JTlRFR1JBTCwKICAgICAgICAgICAgICAgICAgICAg
ICBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAg
ICAgICAgICAgICAgICAgICByaWdodF90eXBlIC0+IE5hbWUoKSk7CiAgICAgICAgZXhwciAtPiBz
eW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgZXhw
ciAtPiBsZWZ0X2V4cHJlc3Npb24gID0gUHJvbW90ZVVuYXJ5TnVtZXJpY0V4cHJlc3Npb24oZXhw
ciAtPiBsZWZ0X2V4cHJlc3Npb24pOwogICAgICAgIGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiA9
IFByb21vdGVVbmFyeU51bWVyaWNFeHByZXNzaW9uKGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbik7
CiAgICAgICAgaWYgKGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiAtPiBUeXBlKCkgPT0gY29udHJv
bC5sb25nX3R5cGUpCiAgICAgICAgICAgIGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiA9IENvbnZl
cnRUb1R5cGUoZXhwciAtPiByaWdodF9leHByZXNzaW9uLCBjb250cm9sLmludF90eXBlKTsKICAg
ICAgICBleHByIC0+IHN5bWJvbCA9IGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHN5bWJvbDsK
CiAgICAgICAgaWYgKGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSAmJiBl
eHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gSXNDb25zdGFudCgpKQogICAgICAgIHsKICAgICAg
ICAgICAgaWYgKGV4cHIgLT4gVHlwZSgpID09IGNvbnRyb2wubG9uZ190eXBlKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICBMb25nTGl0ZXJhbFZhbHVlICpsZWZ0ID0gKExvbmdMaXRlcmFs
VmFsdWUgKikgZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gdmFsdWU7CiAgICAgICAgICAgICAg
ICBJbnRMaXRlcmFsVmFsdWUgKnJpZ2h0ID0gKEludExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHJp
Z2h0X2V4cHJlc3Npb24gLT4gdmFsdWU7CgogICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9
IGNvbnRyb2wubG9uZ19wb29sLkZpbmRPckluc2VydChsZWZ0IC0+IHZhbHVlIDw8IChyaWdodCAt
PiB2YWx1ZSAmIExPTkdfU0hJRlRfTUFTSykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVs
c2UgIAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFsdWUgKmxlZnQg
PSAoSW50TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHZhbHVlOwog
ICAgICAgICAgICAgICAgSW50TGl0ZXJhbFZhbHVlICpyaWdodCA9IChJbnRMaXRlcmFsVmFsdWUg
KikgZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IHZhbHVlOwoKICAgICAgICAgICAgICAgIGV4
cHIgLT4gdmFsdWUgPSBjb250cm9sLmludF9wb29sLkZpbmRPckluc2VydChsZWZ0IC0+IHZhbHVl
IDw8IChyaWdodCAtPiB2YWx1ZSAmIElOVF9TSElGVF9NQVNLKSk7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9CgoKdm9pZCBTZW1hbnRpYzo6UHJvY2Vzc1JJR0hU
X1NISUZUKEFzdEJpbmFyeUV4cHJlc3Npb24gKmV4cHIpCnsKICAgIFByb2Nlc3NFeHByZXNzaW9u
KGV4cHIgLT4gbGVmdF9leHByZXNzaW9uKTsKICAgIFByb2Nlc3NFeHByZXNzaW9uKGV4cHIgLT4g
cmlnaHRfZXhwcmVzc2lvbik7CgogICAgVHlwZVN5bWJvbCAqbGVmdF90eXBlICA9IGV4cHIgLT4g
bGVmdF9leHByZXNzaW9uIC0+IFR5cGUoKSwKICAgICAgICAgICAgICAgKnJpZ2h0X3R5cGUgPSBl
eHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gVHlwZSgpOwoKICAgIGlmIChsZWZ0X3R5cGUgPT0g
Y29udHJvbC5ub190eXBlIHx8IHJpZ2h0X3R5cGUgPT0gY29udHJvbC5ub190eXBlKQogICAgICAg
IGV4cHIgLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAgZWxzZSBpZiAoISBjb250cm9s
LklzSW50ZWdyYWwobGVmdF90eXBlKSkKICAgIHsKICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1h
bnRpY0Vycm9yOjpUWVBFX05PVF9JTlRFR1JBTCwKICAgICAgICAgICAgICAgICAgICAgICBleHBy
IC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBMZWZ0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAg
ICBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdF90eXBlIC0+IE5hbWUoKSk7CiAgICAgICAgZXhwciAtPiBzeW1ib2wgPSBj
b250cm9sLm5vX3R5cGU7CiAgICB9CiAgICBlbHNlIGlmICghIGNvbnRyb2wuSXNJbnRlZ3JhbChy
aWdodF90eXBlKSkKICAgIHsKICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpU
WVBFX05PVF9JTlRFR1JBTCwKICAgICAgICAgICAgICAgICAgICAgICBleHByIC0+IHJpZ2h0X2V4
cHJlc3Npb24gLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBy
aWdodF9leHByZXNzaW9uIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICBy
aWdodF90eXBlIC0+IE5hbWUoKSk7CiAgICAgICAgZXhwciAtPiBzeW1ib2wgPSBjb250cm9sLm5v
X3R5cGU7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgZXhwciAtPiBsZWZ0X2V4cHJlc3Np
b24gID0gUHJvbW90ZVVuYXJ5TnVtZXJpY0V4cHJlc3Npb24oZXhwciAtPiBsZWZ0X2V4cHJlc3Np
b24pOwogICAgICAgIGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiA9IFByb21vdGVVbmFyeU51bWVy
aWNFeHByZXNzaW9uKGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbik7CiAgICAgICAgaWYgKGV4cHIg
LT4gcmlnaHRfZXhwcmVzc2lvbiAtPiBUeXBlKCkgPT0gY29udHJvbC5sb25nX3R5cGUpCiAgICAg
ICAgICAgIGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiA9IENvbnZlcnRUb1R5cGUoZXhwciAtPiBy
aWdodF9leHByZXNzaW9uLCBjb250cm9sLmludF90eXBlKTsKICAgICAgICBleHByIC0+IHN5bWJv
bCA9IGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHN5bWJvbDsKCiAgICAgICAgaWYgKGV4cHIg
LT4gbGVmdF9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSAmJiBleHByIC0+IHJpZ2h0X2V4cHJl
c3Npb24gLT4gSXNDb25zdGFudCgpKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGV4cHIgLT4g
VHlwZSgpID09IGNvbnRyb2wubG9uZ190eXBlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICBMb25nTGl0ZXJhbFZhbHVlICpsZWZ0ID0gKExvbmdMaXRlcmFsVmFsdWUgKikgZXhwciAtPiBs
ZWZ0X2V4cHJlc3Npb24gLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFsdWUg
KnJpZ2h0ID0gKEludExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4g
dmFsdWU7CgogICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNvbnRyb2wubG9uZ19wb29s
LkZpbmRPckluc2VydChsZWZ0IC0+IHZhbHVlID4+IChyaWdodCAtPiB2YWx1ZSAmIExPTkdfU0hJ
RlRfTUFTSykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgIAogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFsdWUgKmxlZnQgPSAoSW50TGl0ZXJhbFZhbHVl
ICopIGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgSW50
TGl0ZXJhbFZhbHVlICpyaWdodCA9IChJbnRMaXRlcmFsVmFsdWUgKikgZXhwciAtPiByaWdodF9l
eHByZXNzaW9uIC0+IHZhbHVlOwoKICAgICAgICAgICAgICAgIGV4cHIgLT4gdmFsdWUgPSBjb250
cm9sLmludF9wb29sLkZpbmRPckluc2VydChsZWZ0IC0+IHZhbHVlID4+IChyaWdodCAtPiB2YWx1
ZSAmIElOVF9TSElGVF9NQVNLKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAg
cmV0dXJuOwp9CgoKdm9pZCBTZW1hbnRpYzo6UHJvY2Vzc1VOU0lHTkVEX1JJR0hUX1NISUZUKEFz
dEJpbmFyeUV4cHJlc3Npb24gKmV4cHIpCnsKICAgIFByb2Nlc3NFeHByZXNzaW9uKGV4cHIgLT4g
bGVmdF9leHByZXNzaW9uKTsKICAgIFByb2Nlc3NFeHByZXNzaW9uKGV4cHIgLT4gcmlnaHRfZXhw
cmVzc2lvbik7CgogICAgVHlwZVN5bWJvbCAqbGVmdF90eXBlICA9IGV4cHIgLT4gbGVmdF9leHBy
ZXNzaW9uIC0+IFR5cGUoKSwKICAgICAgICAgICAgICAgKnJpZ2h0X3R5cGUgPSBleHByIC0+IHJp
Z2h0X2V4cHJlc3Npb24gLT4gVHlwZSgpOwoKICAgIGlmIChsZWZ0X3R5cGUgPT0gY29udHJvbC5u
b190eXBlIHx8IHJpZ2h0X3R5cGUgPT0gY29udHJvbC5ub190eXBlKQogICAgICAgIGV4cHIgLT4g
c3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAgZWxzZSBpZiAoISBjb250cm9sLklzSW50ZWdy
YWwobGVmdF90eXBlKSkKICAgIHsKICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9y
OjpUWVBFX05PVF9JTlRFR1JBTCwKICAgICAgICAgICAgICAgICAgICAgICBleHByIC0+IGxlZnRf
ZXhwcmVzc2lvbiAtPiBMZWZ0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICBleHByIC0+
IGxlZnRfZXhwcmVzc2lvbiAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAg
bGVmdF90eXBlIC0+IE5hbWUoKSk7CiAgICAgICAgZXhwciAtPiBzeW1ib2wgPSBjb250cm9sLm5v
X3R5cGU7CiAgICB9CiAgICBlbHNlIGlmICghIGNvbnRyb2wuSXNJbnRlZ3JhbChyaWdodF90eXBl
KSkKICAgIHsKICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpUWVBFX05PVF9J
TlRFR1JBTCwKICAgICAgICAgICAgICAgICAgICAgICBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24g
LT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiByaWdodF9leHBy
ZXNzaW9uIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICByaWdodF90eXBl
IC0+IE5hbWUoKSk7CiAgICAgICAgZXhwciAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAg
ICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gID0gUHJv
bW90ZVVuYXJ5TnVtZXJpY0V4cHJlc3Npb24oZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24pOwogICAg
ICAgIGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiA9IFByb21vdGVVbmFyeU51bWVyaWNFeHByZXNz
aW9uKGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbik7CiAgICAgICAgaWYgKGV4cHIgLT4gcmlnaHRf
ZXhwcmVzc2lvbiAtPiBUeXBlKCkgPT0gY29udHJvbC5sb25nX3R5cGUpCiAgICAgICAgICAgIGV4
cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiA9IENvbnZlcnRUb1R5cGUoZXhwciAtPiByaWdodF9leHBy
ZXNzaW9uLCBjb250cm9sLmludF90eXBlKTsKICAgICAgICBleHByIC0+IHN5bWJvbCA9IGV4cHIg
LT4gbGVmdF9leHByZXNzaW9uIC0+IHN5bWJvbDsKCiAgICAgICAgaWYgKGV4cHIgLT4gbGVmdF9l
eHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSAmJiBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4g
SXNDb25zdGFudCgpKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGV4cHIgLT4gVHlwZSgpID09
IGNvbnRyb2wubG9uZ190eXBlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBMb25nTGl0
ZXJhbFZhbHVlICpsZWZ0ID0gKExvbmdMaXRlcmFsVmFsdWUgKikgZXhwciAtPiBsZWZ0X2V4cHJl
c3Npb24gLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFsdWUgKnJpZ2h0ID0g
KEludExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gdmFsdWU7Cgog
ICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNvbnRyb2wubG9uZ19wb29sLkZpbmRPcklu
c2VydCgoTG9uZ0ludCkKICAgICAgICAgICAgICAgICAgICAoKFVMb25nSW50KSBsZWZ0IC0+IHZh
bHVlID4+IChyaWdodCAtPiB2YWx1ZSAmIExPTkdfU0hJRlRfTUFTSykpKTsKICAgICAgICAgICAg
fQogICAgICAgICAgICBlbHNlICAKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgSW50TGl0
ZXJhbFZhbHVlICpsZWZ0ID0gKEludExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IGxlZnRfZXhwcmVz
c2lvbiAtPiB2YWx1ZTsKICAgICAgICAgICAgICAgIEludExpdGVyYWxWYWx1ZSAqcmlnaHQgPSAo
SW50TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKCiAg
ICAgICAgICAgICAgICBleHByIC0+IHZhbHVlID0gY29udHJvbC5pbnRfcG9vbC5GaW5kT3JJbnNl
cnQoKGk0KQogICAgICAgICAgICAgICAgICAgICgodTQpIGxlZnQgLT4gdmFsdWUgPj4gKHJpZ2h0
IC0+IHZhbHVlICYgSU5UX1NISUZUX01BU0spKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICB9CgogICAgcmV0dXJuOwp9CgoKdm9pZCBTZW1hbnRpYzo6UHJvY2Vzc0xFU1MoQXN0QmluYXJ5
RXhwcmVzc2lvbiAqZXhwcikKewogICAgUHJvY2Vzc0V4cHJlc3Npb24oZXhwciAtPiBsZWZ0X2V4
cHJlc3Npb24pOwogICAgUHJvY2Vzc0V4cHJlc3Npb24oZXhwciAtPiByaWdodF9leHByZXNzaW9u
KTsKCiAgICBUeXBlU3ltYm9sICpsZWZ0X3R5cGUgID0gZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24g
LT4gVHlwZSgpLAogICAgICAgICAgICAgICAqcmlnaHRfdHlwZSA9IGV4cHIgLT4gcmlnaHRfZXhw
cmVzc2lvbiAtPiBUeXBlKCk7CgogICAgaWYgKGxlZnRfdHlwZSAhPSBjb250cm9sLm5vX3R5cGUg
JiYgcmlnaHRfdHlwZSAhPSBjb250cm9sLm5vX3R5cGUpCiAgICB7CiAgICAgICAgQmluYXJ5TnVt
ZXJpY1Byb21vdGlvbihleHByKTsKCiAgICAgICAgaWYgKGV4cHIgLT4gbGVmdF9leHByZXNzaW9u
IC0+IElzQ29uc3RhbnQoKSAmJiBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gSXNDb25zdGFu
dCgpKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGV4cHIgLT4gVHlwZSgpID09IGNvbnRyb2wu
ZG91YmxlX3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIERvdWJsZUxpdGVyYWxW
YWx1ZSAqbGVmdCA9IChEb3VibGVMaXRlcmFsVmFsdWUgKikgZXhwciAtPiBsZWZ0X2V4cHJlc3Np
b24gLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBEb3VibGVMaXRlcmFsVmFsdWUgKnJpZ2h0ID0g
KERvdWJsZUxpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gdmFsdWU7
CgogICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNvbnRyb2wuaW50X3Bvb2wuRmluZE9y
SW5zZXJ0KGxlZnQgLT4gdmFsdWUgPCByaWdodCAtPiB2YWx1ZSA/IDEgOiAwKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgICBlbHNlIGlmIChleHByIC0+IFR5cGUoKSA9PSBjb250cm9sLmZsb2F0
X3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEZsb2F0TGl0ZXJhbFZhbHVlICps
ZWZ0ID0gKEZsb2F0TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHZh
bHVlOwogICAgICAgICAgICAgICAgRmxvYXRMaXRlcmFsVmFsdWUgKnJpZ2h0ID0gKEZsb2F0TGl0
ZXJhbFZhbHVlICopIGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKCiAgICAgICAg
ICAgICAgICBleHByIC0+IHZhbHVlID0gY29udHJvbC5pbnRfcG9vbC5GaW5kT3JJbnNlcnQobGVm
dCAtPiB2YWx1ZSA8IHJpZ2h0IC0+IHZhbHVlID8gMSA6IDApOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIGVsc2UgaWYgKGV4cHIgLT4gVHlwZSgpID09IGNvbnRyb2wubG9uZ190eXBlKQogICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIExvbmdMaXRlcmFsVmFsdWUgKmxlZnQgPSAoTG9uZ0xp
dGVyYWxWYWx1ZSAqKSBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICAg
ICAgICAgIExvbmdMaXRlcmFsVmFsdWUgKnJpZ2h0ID0gKExvbmdMaXRlcmFsVmFsdWUgKikgZXhw
ciAtPiByaWdodF9leHByZXNzaW9uIC0+IHZhbHVlOwoKICAgICAgICAgICAgICAgIGV4cHIgLT4g
dmFsdWUgPSBjb250cm9sLmludF9wb29sLkZpbmRPckluc2VydChsZWZ0IC0+IHZhbHVlIDwgcmln
aHQgLT4gdmFsdWUgPyAxIDogMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSAgCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEludExpdGVyYWxWYWx1ZSAqbGVmdCA9IChJbnRM
aXRlcmFsVmFsdWUgKikgZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gdmFsdWU7CiAgICAgICAg
ICAgICAgICBJbnRMaXRlcmFsVmFsdWUgKnJpZ2h0ID0gKEludExpdGVyYWxWYWx1ZSAqKSBleHBy
IC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gdmFsdWU7CgogICAgICAgICAgICAgICAgZXhwciAtPiB2
YWx1ZSA9IGNvbnRyb2wuaW50X3Bvb2wuRmluZE9ySW5zZXJ0KGxlZnQgLT4gdmFsdWUgPCByaWdo
dCAtPiB2YWx1ZSA/IDEgOiAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBl
eHByIC0+IHN5bWJvbCA9IGNvbnRyb2wuYm9vbGVhbl90eXBlOwoKICAgIHJldHVybjsKfQoKCnZv
aWQgU2VtYW50aWM6OlByb2Nlc3NHUkVBVEVSKEFzdEJpbmFyeUV4cHJlc3Npb24gKmV4cHIpCnsK
ICAgIFByb2Nlc3NFeHByZXNzaW9uKGV4cHIgLT4gbGVmdF9leHByZXNzaW9uKTsKICAgIFByb2Nl
c3NFeHByZXNzaW9uKGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbik7CgogICAgVHlwZVN5bWJvbCAq
bGVmdF90eXBlICA9IGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IFR5cGUoKSwKICAgICAgICAg
ICAgICAgKnJpZ2h0X3R5cGUgPSBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gVHlwZSgpOwoK
ICAgIGlmIChsZWZ0X3R5cGUgIT0gY29udHJvbC5ub190eXBlICYmIHJpZ2h0X3R5cGUgIT0gY29u
dHJvbC5ub190eXBlKQogICAgewogICAgICAgIEJpbmFyeU51bWVyaWNQcm9tb3Rpb24oZXhwcik7
CgogICAgICAgIGlmIChleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBJc0NvbnN0YW50KCkgJiYg
ZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSkKICAgICAgICB7CiAgICAg
ICAgICAgIGlmIChleHByIC0+IFR5cGUoKSA9PSBjb250cm9sLmRvdWJsZV90eXBlKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICBEb3VibGVMaXRlcmFsVmFsdWUgKmxlZnQgPSAoRG91Ymxl
TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAg
ICAgICAgICAgRG91YmxlTGl0ZXJhbFZhbHVlICpyaWdodCA9IChEb3VibGVMaXRlcmFsVmFsdWUg
KikgZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IHZhbHVlOwoKICAgICAgICAgICAgICAgIGV4
cHIgLT4gdmFsdWUgPSBjb250cm9sLmludF9wb29sLkZpbmRPckluc2VydChsZWZ0IC0+IHZhbHVl
ID4gcmlnaHQgLT4gdmFsdWUgPyAxIDogMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxz
ZSBpZiAoZXhwciAtPiBUeXBlKCkgPT0gY29udHJvbC5mbG9hdF90eXBlKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICBGbG9hdExpdGVyYWxWYWx1ZSAqbGVmdCA9IChGbG9hdExpdGVyYWxW
YWx1ZSAqKSBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICAgICAgICAg
IEZsb2F0TGl0ZXJhbFZhbHVlICpyaWdodCA9IChGbG9hdExpdGVyYWxWYWx1ZSAqKSBleHByIC0+
IHJpZ2h0X2V4cHJlc3Npb24gLT4gdmFsdWU7CgogICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1
ZSA9IGNvbnRyb2wuaW50X3Bvb2wuRmluZE9ySW5zZXJ0KGxlZnQgLT4gdmFsdWUgPiByaWdodCAt
PiB2YWx1ZSA/IDEgOiAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChleHBy
IC0+IFR5cGUoKSA9PSBjb250cm9sLmxvbmdfdHlwZSkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgTG9uZ0xpdGVyYWxWYWx1ZSAqbGVmdCA9IChMb25nTGl0ZXJhbFZhbHVlICopIGV4cHIg
LT4gbGVmdF9leHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgTG9uZ0xpdGVyYWxW
YWx1ZSAqcmlnaHQgPSAoTG9uZ0xpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHJpZ2h0X2V4cHJlc3Np
b24gLT4gdmFsdWU7CgogICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNvbnRyb2wuaW50
X3Bvb2wuRmluZE9ySW5zZXJ0KGxlZnQgLT4gdmFsdWUgPiByaWdodCAtPiB2YWx1ZSA/IDEgOiAw
KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlICAKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgSW50TGl0ZXJhbFZhbHVlICpsZWZ0ID0gKEludExpdGVyYWxWYWx1ZSAqKSBleHBy
IC0+IGxlZnRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICAgICAgICAgIEludExpdGVyYWxW
YWx1ZSAqcmlnaHQgPSAoSW50TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lv
biAtPiB2YWx1ZTsKCiAgICAgICAgICAgICAgICBleHByIC0+IHZhbHVlID0gY29udHJvbC5pbnRf
cG9vbC5GaW5kT3JJbnNlcnQobGVmdCAtPiB2YWx1ZSA+IHJpZ2h0IC0+IHZhbHVlID8gMSA6IDAp
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGV4cHIgLT4gc3ltYm9sID0gY29u
dHJvbC5ib29sZWFuX3R5cGU7CgogICAgcmV0dXJuOwp9CgoKdm9pZCBTZW1hbnRpYzo6UHJvY2Vz
c0xFU1NfRVFVQUwoQXN0QmluYXJ5RXhwcmVzc2lvbiAqZXhwcikKewogICAgUHJvY2Vzc0V4cHJl
c3Npb24oZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24pOwogICAgUHJvY2Vzc0V4cHJlc3Npb24oZXhw
ciAtPiByaWdodF9leHByZXNzaW9uKTsKCiAgICBUeXBlU3ltYm9sICpsZWZ0X3R5cGUgID0gZXhw
ciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gVHlwZSgpLAogICAgICAgICAgICAgICAqcmlnaHRfdHlw
ZSA9IGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiAtPiBUeXBlKCk7CgogICAgaWYgKGxlZnRfdHlw
ZSAhPSBjb250cm9sLm5vX3R5cGUgJiYgcmlnaHRfdHlwZSAhPSBjb250cm9sLm5vX3R5cGUpCiAg
ICB7CiAgICAgICAgQmluYXJ5TnVtZXJpY1Byb21vdGlvbihleHByKTsKCiAgICAgICAgaWYgKGV4
cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSAmJiBleHByIC0+IHJpZ2h0X2V4
cHJlc3Npb24gLT4gSXNDb25zdGFudCgpKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGV4cHIg
LT4gVHlwZSgpID09IGNvbnRyb2wuZG91YmxlX3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIERvdWJsZUxpdGVyYWxWYWx1ZSAqbGVmdCA9IChEb3VibGVMaXRlcmFsVmFsdWUgKikg
ZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBEb3VibGVM
aXRlcmFsVmFsdWUgKnJpZ2h0ID0gKERvdWJsZUxpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHJpZ2h0
X2V4cHJlc3Npb24gLT4gdmFsdWU7CgogICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNv
bnRyb2wuaW50X3Bvb2wuRmluZE9ySW5zZXJ0KGxlZnQgLT4gdmFsdWUgPD0gcmlnaHQgLT4gdmFs
dWUgPyAxIDogMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoZXhwciAtPiBU
eXBlKCkgPT0gY29udHJvbC5mbG9hdF90eXBlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICBGbG9hdExpdGVyYWxWYWx1ZSAqbGVmdCA9IChGbG9hdExpdGVyYWxWYWx1ZSAqKSBleHByIC0+
IGxlZnRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICAgICAgICAgIEZsb2F0TGl0ZXJhbFZh
bHVlICpyaWdodCA9IChGbG9hdExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHJpZ2h0X2V4cHJlc3Np
b24gLT4gdmFsdWU7CgogICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNvbnRyb2wuaW50
X3Bvb2wuRmluZE9ySW5zZXJ0KGxlZnQgLT4gdmFsdWUgPD0gcmlnaHQgLT4gdmFsdWUgPyAxIDog
MCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoZXhwciAtPiBUeXBlKCkgPT0g
Y29udHJvbC5sb25nX3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIExvbmdMaXRl
cmFsVmFsdWUgKmxlZnQgPSAoTG9uZ0xpdGVyYWxWYWx1ZSAqKSBleHByIC0+IGxlZnRfZXhwcmVz
c2lvbiAtPiB2YWx1ZTsKICAgICAgICAgICAgICAgIExvbmdMaXRlcmFsVmFsdWUgKnJpZ2h0ID0g
KExvbmdMaXRlcmFsVmFsdWUgKikgZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IHZhbHVlOwoK
ICAgICAgICAgICAgICAgIGV4cHIgLT4gdmFsdWUgPSBjb250cm9sLmludF9wb29sLkZpbmRPcklu
c2VydChsZWZ0IC0+IHZhbHVlIDw9IHJpZ2h0IC0+IHZhbHVlID8gMSA6IDApOwogICAgICAgICAg
ICB9CiAgICAgICAgICAgIGVsc2UgIAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBJbnRM
aXRlcmFsVmFsdWUgKmxlZnQgPSAoSW50TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gbGVmdF9leHBy
ZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgSW50TGl0ZXJhbFZhbHVlICpyaWdodCA9
IChJbnRMaXRlcmFsVmFsdWUgKikgZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IHZhbHVlOwoK
ICAgICAgICAgICAgICAgIGV4cHIgLT4gdmFsdWUgPSBjb250cm9sLmludF9wb29sLkZpbmRPcklu
c2VydChsZWZ0IC0+IHZhbHVlIDw9IHJpZ2h0IC0+IHZhbHVlID8gMSA6IDApOwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgfQoKICAgIGV4cHIgLT4gc3ltYm9sID0gY29udHJvbC5ib29sZWFu
X3R5cGU7CgogICAgcmV0dXJuOwp9CgoKdm9pZCBTZW1hbnRpYzo6UHJvY2Vzc0dSRUFURVJfRVFV
QUwoQXN0QmluYXJ5RXhwcmVzc2lvbiAqZXhwcikKewogICAgUHJvY2Vzc0V4cHJlc3Npb24oZXhw
ciAtPiBsZWZ0X2V4cHJlc3Npb24pOwogICAgUHJvY2Vzc0V4cHJlc3Npb24oZXhwciAtPiByaWdo
dF9leHByZXNzaW9uKTsKCiAgICBUeXBlU3ltYm9sICpsZWZ0X3R5cGUgID0gZXhwciAtPiBsZWZ0
X2V4cHJlc3Npb24gLT4gVHlwZSgpLAogICAgICAgICAgICAgICAqcmlnaHRfdHlwZSA9IGV4cHIg
LT4gcmlnaHRfZXhwcmVzc2lvbiAtPiBUeXBlKCk7CgogICAgaWYgKGxlZnRfdHlwZSAhPSBjb250
cm9sLm5vX3R5cGUgJiYgcmlnaHRfdHlwZSAhPSBjb250cm9sLm5vX3R5cGUpCiAgICB7CiAgICAg
ICAgQmluYXJ5TnVtZXJpY1Byb21vdGlvbihleHByKTsKCiAgICAgICAgaWYgKGV4cHIgLT4gbGVm
dF9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSAmJiBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24g
LT4gSXNDb25zdGFudCgpKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGV4cHIgLT4gVHlwZSgp
ID09IGNvbnRyb2wuZG91YmxlX3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIERv
dWJsZUxpdGVyYWxWYWx1ZSAqbGVmdCA9IChEb3VibGVMaXRlcmFsVmFsdWUgKikgZXhwciAtPiBs
ZWZ0X2V4cHJlc3Npb24gLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBEb3VibGVMaXRlcmFsVmFs
dWUgKnJpZ2h0ID0gKERvdWJsZUxpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHJpZ2h0X2V4cHJlc3Np
b24gLT4gdmFsdWU7CgogICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNvbnRyb2wuaW50
X3Bvb2wuRmluZE9ySW5zZXJ0KGxlZnQgLT4gdmFsdWUgPj0gcmlnaHQgLT4gdmFsdWUgPyAxIDog
MCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoZXhwciAtPiBUeXBlKCkgPT0g
Y29udHJvbC5mbG9hdF90eXBlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBGbG9hdExp
dGVyYWxWYWx1ZSAqbGVmdCA9IChGbG9hdExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IGxlZnRfZXhw
cmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICAgICAgICAgIEZsb2F0TGl0ZXJhbFZhbHVlICpyaWdo
dCA9IChGbG9hdExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gdmFs
dWU7CgogICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNvbnRyb2wuaW50X3Bvb2wuRmlu
ZE9ySW5zZXJ0KGxlZnQgLT4gdmFsdWUgPj0gcmlnaHQgLT4gdmFsdWUgPyAxIDogMCk7CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoZXhwciAtPiBUeXBlKCkgPT0gY29udHJvbC5s
b25nX3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIExvbmdMaXRlcmFsVmFsdWUg
KmxlZnQgPSAoTG9uZ0xpdGVyYWxWYWx1ZSAqKSBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiB2
YWx1ZTsKICAgICAgICAgICAgICAgIExvbmdMaXRlcmFsVmFsdWUgKnJpZ2h0ID0gKExvbmdMaXRl
cmFsVmFsdWUgKikgZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IHZhbHVlOwoKICAgICAgICAg
ICAgICAgIGV4cHIgLT4gdmFsdWUgPSBjb250cm9sLmludF9wb29sLkZpbmRPckluc2VydChsZWZ0
IC0+IHZhbHVlID49IHJpZ2h0IC0+IHZhbHVlID8gMSA6IDApOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIGVsc2UgIAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFs
dWUgKmxlZnQgPSAoSW50TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+
IHZhbHVlOwogICAgICAgICAgICAgICAgSW50TGl0ZXJhbFZhbHVlICpyaWdodCA9IChJbnRMaXRl
cmFsVmFsdWUgKikgZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IHZhbHVlOwoKICAgICAgICAg
ICAgICAgIGV4cHIgLT4gdmFsdWUgPSBjb250cm9sLmludF9wb29sLkZpbmRPckluc2VydChsZWZ0
IC0+IHZhbHVlID49IHJpZ2h0IC0+IHZhbHVlID8gMSA6IDApOwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgfQoKICAgIGV4cHIgLT4gc3ltYm9sID0gY29udHJvbC5ib29sZWFuX3R5cGU7Cgog
ICAgcmV0dXJuOwp9CgoKdm9pZCBTZW1hbnRpYzo6UHJvY2Vzc0FORChBc3RCaW5hcnlFeHByZXNz
aW9uICpleHByKQp7CiAgICBQcm9jZXNzRXhwcmVzc2lvbihleHByIC0+IGxlZnRfZXhwcmVzc2lv
bik7CiAgICBQcm9jZXNzRXhwcmVzc2lvbihleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24pOwoKICAg
IFR5cGVTeW1ib2wgKmxlZnRfdHlwZSAgPSBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBUeXBl
KCksCiAgICAgICAgICAgICAgICpyaWdodF90eXBlID0gZXhwciAtPiByaWdodF9leHByZXNzaW9u
IC0+IFR5cGUoKTsKCiAgICBpZiAobGVmdF90eXBlID09IGNvbnRyb2wubm9fdHlwZSB8fCByaWdo
dF90eXBlID09IGNvbnRyb2wubm9fdHlwZSkKICAgICAgICBleHByIC0+IHN5bWJvbCA9IGNvbnRy
b2wubm9fdHlwZTsKICAgIGVsc2UKICAgIHsKICAgICAgICBpZiAobGVmdF90eXBlID09IGNvbnRy
b2wuYm9vbGVhbl90eXBlICYmIHJpZ2h0X3R5cGUgPT0gY29udHJvbC5ib29sZWFuX3R5cGUpCiAg
ICAgICAgewogICAgICAgICAgICAgZXhwciAtPiBzeW1ib2wgPSBjb250cm9sLmJvb2xlYW5fdHlw
ZTsKICAgICAgICAgICAgIGlmIChleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBJc0NvbnN0YW50
KCkgJiYgZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFsdWUgKmxlZnQgPSAoSW50TGl0ZXJh
bFZhbHVlICopIGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICAg
ICAgIEludExpdGVyYWxWYWx1ZSAqcmlnaHQgPSAoSW50TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4g
cmlnaHRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICAgICAgICAgICBleHByIC0+IHZhbHVl
ID0gY29udHJvbC5pbnRfcG9vbC5GaW5kT3JJbnNlcnQobGVmdCAtPiB2YWx1ZSAmIHJpZ2h0IC0+
IHZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK
ICAgICAgICAgICAgQmluYXJ5TnVtZXJpY1Byb21vdGlvbihleHByKTsKCiAgICAgICAgICAgIFR5
cGVTeW1ib2wgKmV4cHJfdHlwZSA9IGV4cHIgLT4gVHlwZSgpOwoKICAgICAgICAgICAgaWYgKGV4
cHJfdHlwZSAhPSBjb250cm9sLm5vX3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IGlmICghIGNvbnRyb2wuSXNJbnRlZ3JhbChleHByX3R5cGUpKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OlRZUEVfTk9U
X0lOVEVHUkFMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgLT4gTGVm
dFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBSaWdo
dFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eXBlIC0+
IE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBzeW1ib2wgPSBjb250cm9sLm5v
X3R5cGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChleHByIC0+
IGxlZnRfZXhwcmVzc2lvbiAtPiBJc0NvbnN0YW50KCkgJiYgZXhwciAtPiByaWdodF9leHByZXNz
aW9uIC0+IElzQ29uc3RhbnQoKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICBpZiAoZXhwcl90eXBlID09IGNvbnRyb2wubG9uZ190eXBlKQogICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgTG9uZ0xpdGVyYWxWYWx1ZSAqbGVmdCA9IChMb25n
TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAg
ICAgICAgICAgICAgICAgICBMb25nTGl0ZXJhbFZhbHVlICpyaWdodCA9IChMb25nTGl0ZXJhbFZh
bHVlICopIGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIGV4cHIgLT4gdmFsdWUgPSBjb250cm9sLmxvbmdfcG9vbC5GaW5kT3JJbnNlcnQo
bGVmdCAtPiB2YWx1ZSAmIHJpZ2h0IC0+IHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgZWxzZSAgCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFsdWUgKmxlZnQgPSAoSW50TGl0ZXJhbFZhbHVlICop
IGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAg
ICBJbnRMaXRlcmFsVmFsdWUgKnJpZ2h0ID0gKEludExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHJp
Z2h0X2V4cHJlc3Npb24gLT4gdmFsdWU7CgogICAgICAgICAgICAgICAgICAgICAgICBleHByIC0+
IHZhbHVlID0gY29udHJvbC5pbnRfcG9vbC5GaW5kT3JJbnNlcnQobGVmdCAtPiB2YWx1ZSAmIHJp
Z2h0IC0+IHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9CgoKdm9pZCBTZW1hbnRp
Yzo6UHJvY2Vzc1hPUihBc3RCaW5hcnlFeHByZXNzaW9uICpleHByKQp7CiAgICBQcm9jZXNzRXhw
cmVzc2lvbihleHByIC0+IGxlZnRfZXhwcmVzc2lvbik7CiAgICBQcm9jZXNzRXhwcmVzc2lvbihl
eHByIC0+IHJpZ2h0X2V4cHJlc3Npb24pOwoKICAgIFR5cGVTeW1ib2wgKmxlZnRfdHlwZSAgPSBl
eHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBUeXBlKCksCiAgICAgICAgICAgICAgICpyaWdodF90
eXBlID0gZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IFR5cGUoKTsKCiAgICBpZiAobGVmdF90
eXBlID09IGNvbnRyb2wubm9fdHlwZSB8fCByaWdodF90eXBlID09IGNvbnRyb2wubm9fdHlwZSkK
ICAgICAgICBleHByIC0+IHN5bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsKICAgIGVsc2UKICAgIHsK
ICAgICAgICBpZiAobGVmdF90eXBlID09IGNvbnRyb2wuYm9vbGVhbl90eXBlICYmIHJpZ2h0X3R5
cGUgPT0gY29udHJvbC5ib29sZWFuX3R5cGUpCiAgICAgICAgewogICAgICAgICAgICAgZXhwciAt
PiBzeW1ib2wgPSBjb250cm9sLmJvb2xlYW5fdHlwZTsKICAgICAgICAgICAgIGlmIChleHByIC0+
IGxlZnRfZXhwcmVzc2lvbiAtPiBJc0NvbnN0YW50KCkgJiYgZXhwciAtPiByaWdodF9leHByZXNz
aW9uIC0+IElzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBJbnRM
aXRlcmFsVmFsdWUgKmxlZnQgPSAoSW50TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gbGVmdF9leHBy
ZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgIEludExpdGVyYWxWYWx1ZSAqcmlnaHQg
PSAoSW50TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsK
ICAgICAgICAgICAgICAgICBleHByIC0+IHZhbHVlID0gY29udHJvbC5pbnRfcG9vbC5GaW5kT3JJ
bnNlcnQobGVmdCAtPiB2YWx1ZSBeIHJpZ2h0IC0+IHZhbHVlKTsKICAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgQmluYXJ5TnVtZXJpY1By
b21vdGlvbihleHByKTsKCiAgICAgICAgICAgIFR5cGVTeW1ib2wgKmV4cHJfdHlwZSA9IGV4cHIg
LT4gVHlwZSgpOwoKICAgICAgICAgICAgaWYgKGV4cHJfdHlwZSAhPSBjb250cm9sLm5vX3R5cGUp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmICghIGNvbnRyb2wuSXNJbnRlZ3JhbChl
eHByX3R5cGUpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFJlcG9ydFNl
bUVycm9yKFNlbWFudGljRXJyb3I6OlRZUEVfTk9UX0lOVEVHUkFMLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cHIgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwciAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwcl90eXBlIC0+IE5hbWUoKSk7CiAgICAgICAgICAgICAgICAg
ICAgZXhwciAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICBlbHNlIGlmIChleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBJc0NvbnN0
YW50KCkgJiYgZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSkKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZXhwcl90eXBlID09IGNvbnRyb2wu
bG9uZ190eXBlKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
TG9uZ0xpdGVyYWxWYWx1ZSAqbGVmdCA9IChMb25nTGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gbGVm
dF9leHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBMb25nTGl0ZXJh
bFZhbHVlICpyaWdodCA9IChMb25nTGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gcmlnaHRfZXhwcmVz
c2lvbiAtPiB2YWx1ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgLT4gdmFsdWUgPSBj
b250cm9sLmxvbmdfcG9vbC5GaW5kT3JJbnNlcnQobGVmdCAtPiB2YWx1ZSBeIHJpZ2h0IC0+IHZh
bHVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSAgCiAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFs
dWUgKmxlZnQgPSAoSW50TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+
IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFsdWUgKnJpZ2h0ID0g
KEludExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gdmFsdWU7Cgog
ICAgICAgICAgICAgICAgICAgICAgICBleHByIC0+IHZhbHVlID0gY29udHJvbC5pbnRfcG9vbC5G
aW5kT3JJbnNlcnQobGVmdCAtPiB2YWx1ZSBeIHJpZ2h0IC0+IHZhbHVlKTsKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9
CgogICAgcmV0dXJuOwp9CgoKdm9pZCBTZW1hbnRpYzo6UHJvY2Vzc0lPUihBc3RCaW5hcnlFeHBy
ZXNzaW9uICpleHByKQp7CiAgICBQcm9jZXNzRXhwcmVzc2lvbihleHByIC0+IGxlZnRfZXhwcmVz
c2lvbik7CiAgICBQcm9jZXNzRXhwcmVzc2lvbihleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24pOwoK
ICAgIFR5cGVTeW1ib2wgKmxlZnRfdHlwZSAgPSBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBU
eXBlKCksCiAgICAgICAgICAgICAgICpyaWdodF90eXBlID0gZXhwciAtPiByaWdodF9leHByZXNz
aW9uIC0+IFR5cGUoKTsKCiAgICBpZiAobGVmdF90eXBlID09IGNvbnRyb2wubm9fdHlwZSB8fCBy
aWdodF90eXBlID09IGNvbnRyb2wubm9fdHlwZSkKICAgICAgICBleHByIC0+IHN5bWJvbCA9IGNv
bnRyb2wubm9fdHlwZTsKICAgIGVsc2UKICAgIHsKICAgICAgICBpZiAobGVmdF90eXBlID09IGNv
bnRyb2wuYm9vbGVhbl90eXBlICYmIHJpZ2h0X3R5cGUgPT0gY29udHJvbC5ib29sZWFuX3R5cGUp
CiAgICAgICAgewogICAgICAgICAgICAgZXhwciAtPiBzeW1ib2wgPSBjb250cm9sLmJvb2xlYW5f
dHlwZTsKICAgICAgICAgICAgIGlmIChleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBJc0NvbnN0
YW50KCkgJiYgZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFsdWUgKmxlZnQgPSAoSW50TGl0
ZXJhbFZhbHVlICopIGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAg
ICAgICAgIEludExpdGVyYWxWYWx1ZSAqcmlnaHQgPSAoSW50TGl0ZXJhbFZhbHVlICopIGV4cHIg
LT4gcmlnaHRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICAgICAgICAgICBleHByIC0+IHZh
bHVlID0gY29udHJvbC5pbnRfcG9vbC5GaW5kT3JJbnNlcnQobGVmdCAtPiB2YWx1ZSB8IHJpZ2h0
IC0+IHZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAg
IHsKICAgICAgICAgICAgQmluYXJ5TnVtZXJpY1Byb21vdGlvbihleHByKTsKCiAgICAgICAgICAg
IFR5cGVTeW1ib2wgKmV4cHJfdHlwZSA9IGV4cHIgLT4gVHlwZSgpOwoKICAgICAgICAgICAgaWYg
KGV4cHJfdHlwZSAhPSBjb250cm9sLm5vX3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIGlmICghIGNvbnRyb2wuSXNJbnRlZ3JhbChleHByX3R5cGUpKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OlRZUEVf
Tk9UX0lOVEVHUkFMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgLT4g
TGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBS
aWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eXBl
IC0+IE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBzeW1ib2wgPSBjb250cm9s
Lm5vX3R5cGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChleHBy
IC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBJc0NvbnN0YW50KCkgJiYgZXhwciAtPiByaWdodF9leHBy
ZXNzaW9uIC0+IElzQ29uc3RhbnQoKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICBpZiAoZXhwcl90eXBlID09IGNvbnRyb2wubG9uZ190eXBlKQogICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgTG9uZ0xpdGVyYWxWYWx1ZSAqbGVmdCA9IChM
b25nTGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHZhbHVlOwogICAg
ICAgICAgICAgICAgICAgICAgICBMb25nTGl0ZXJhbFZhbHVlICpyaWdodCA9IChMb25nTGl0ZXJh
bFZhbHVlICopIGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIGV4cHIgLT4gdmFsdWUgPSBjb250cm9sLmxvbmdfcG9vbC5GaW5kT3JJbnNl
cnQobGVmdCAtPiB2YWx1ZSB8IHJpZ2h0IC0+IHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgZWxzZSAgCiAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFsdWUgKmxlZnQgPSAoSW50TGl0ZXJhbFZhbHVl
ICopIGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgICAg
ICAgICBJbnRMaXRlcmFsVmFsdWUgKnJpZ2h0ID0gKEludExpdGVyYWxWYWx1ZSAqKSBleHByIC0+
IHJpZ2h0X2V4cHJlc3Npb24gLT4gdmFsdWU7CgogICAgICAgICAgICAgICAgICAgICAgICBleHBy
IC0+IHZhbHVlID0gY29udHJvbC5pbnRfcG9vbC5GaW5kT3JJbnNlcnQobGVmdCAtPiB2YWx1ZSB8
IHJpZ2h0IC0+IHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9CgoKdm9pZCBTZW1h
bnRpYzo6UHJvY2Vzc0FORF9BTkQoQXN0QmluYXJ5RXhwcmVzc2lvbiAqZXhwcikKewogICAgUHJv
Y2Vzc0V4cHJlc3Npb24oZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24pOwogICAgUHJvY2Vzc0V4cHJl
c3Npb24oZXhwciAtPiByaWdodF9leHByZXNzaW9uKTsKCiAgICBUeXBlU3ltYm9sICpsZWZ0X3R5
cGUgID0gZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gVHlwZSgpLAogICAgICAgICAgICAgICAq
cmlnaHRfdHlwZSA9IGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiAtPiBUeXBlKCk7CgogICAgaWYg
KGxlZnRfdHlwZSAhPSBjb250cm9sLm5vX3R5cGUgJiYgcmlnaHRfdHlwZSAhPSBjb250cm9sLm5v
X3R5cGUpCiAgICB7CiAgICAgICAgaWYgKGxlZnRfdHlwZSAhPSBjb250cm9sLmJvb2xlYW5fdHlw
ZSkKICAgICAgICB7CiAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OlRZ
UEVfTk9UX0JPT0xFQU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgLT4gbGVmdF9l
eHByZXNzaW9uIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBleHBy
IC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxlZnRfdHlwZSAtPiBOYW1lKCkpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChy
aWdodF90eXBlICE9IGNvbnRyb2wuYm9vbGVhbl90eXBlKQogICAgICAgIHsKICAgICAgICAgICAg
UmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6VFlQRV9OT1RfQk9PTEVBTiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IExlZnRUb2tlbigp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4g
UmlnaHRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodF90eXBlIC0+IE5h
bWUoKSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGV4cHIgLT4gbGVmdF9leHByZXNzaW9u
IC0+IElzQ29uc3RhbnQoKSAmJiBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gSXNDb25zdGFu
dCgpKQogICAgICAgIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAK
ICAgICAgICAgICAgSW50TGl0ZXJhbFZhbHVlICpsZWZ0ID0gKEludExpdGVyYWxWYWx1ZSAqKSBl
eHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICAgICAgSW50TGl0ZXJhbFZh
bHVlICpyaWdodCA9IChJbnRMaXRlcmFsVmFsdWUgKikgZXhwciAtPiByaWdodF9leHByZXNzaW9u
IC0+IHZhbHVlOwogICAgICAgICAgICBleHByIC0+IHZhbHVlID0gY29udHJvbC5pbnRfcG9vbC5G
aW5kT3JJbnNlcnQobGVmdCAtPiB2YWx1ZSAmJiByaWdodCAtPiB2YWx1ZSA/IDEgOiAwKTsKICAg
ICAgICB9CiAgICB9CgogICAgZXhwciAtPiBzeW1ib2wgPSBjb250cm9sLmJvb2xlYW5fdHlwZTsK
CiAgICByZXR1cm47Cn0KCgp2b2lkIFNlbWFudGljOjpQcm9jZXNzT1JfT1IoQXN0QmluYXJ5RXhw
cmVzc2lvbiAqZXhwcikKewogICAgUHJvY2Vzc0V4cHJlc3Npb24oZXhwciAtPiBsZWZ0X2V4cHJl
c3Npb24pOwogICAgUHJvY2Vzc0V4cHJlc3Npb24oZXhwciAtPiByaWdodF9leHByZXNzaW9uKTsK
CiAgICBUeXBlU3ltYm9sICpsZWZ0X3R5cGUgID0gZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4g
VHlwZSgpLAogICAgICAgICAgICAgICAqcmlnaHRfdHlwZSA9IGV4cHIgLT4gcmlnaHRfZXhwcmVz
c2lvbiAtPiBUeXBlKCk7CgogICAgaWYgKGxlZnRfdHlwZSAhPSBjb250cm9sLm5vX3R5cGUgJiYg
cmlnaHRfdHlwZSAhPSBjb250cm9sLm5vX3R5cGUpCiAgICB7CiAgICAgICAgaWYgKGxlZnRfdHlw
ZSAhPSBjb250cm9sLmJvb2xlYW5fdHlwZSkKICAgICAgICB7CiAgICAgICAgICAgIFJlcG9ydFNl
bUVycm9yKFNlbWFudGljRXJyb3I6OlRZUEVfTk9UX0JPT0xFQU4sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IExlZnRUb2tlbigpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBSaWdodFRva2Vu
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRfdHlwZSAtPiBOYW1lKCkpOwogICAg
ICAgIH0KICAgICAgICBlbHNlIGlmIChyaWdodF90eXBlICE9IGNvbnRyb2wuYm9vbGVhbl90eXBl
KQogICAgICAgIHsKICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6VFlQ
RV9OT1RfQk9PTEVBTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiByaWdodF9l
eHByZXNzaW9uIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBleHBy
IC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gUmlnaHRUb2tlbigpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICByaWdodF90eXBlIC0+IE5hbWUoKSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYg
KGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSAmJiBleHByIC0+IHJpZ2h0
X2V4cHJlc3Npb24gLT4gSXNDb25zdGFudCgpKQogICAgICAgIHsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgSW50TGl0ZXJhbFZhbHVlICpsZWZ0
ID0gKEludExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsK
ICAgICAgICAgICAgSW50TGl0ZXJhbFZhbHVlICpyaWdodCA9IChJbnRMaXRlcmFsVmFsdWUgKikg
ZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICBleHByIC0+IHZh
bHVlID0gY29udHJvbC5pbnRfcG9vbC5GaW5kT3JJbnNlcnQobGVmdCAtPiB2YWx1ZSB8fCByaWdo
dCAtPiB2YWx1ZSA/IDEgOiAwKTsKICAgICAgICB9CiAgICB9CgogICAgZXhwciAtPiBzeW1ib2wg
PSBjb250cm9sLmJvb2xlYW5fdHlwZTsKCiAgICByZXR1cm47Cn0KCgp2b2lkIFNlbWFudGljOjpQ
cm9jZXNzRVFVQUxfRVFVQUwoQXN0QmluYXJ5RXhwcmVzc2lvbiAqZXhwcikKewogICAgUHJvY2Vz
c0V4cHJlc3Npb25PclN0cmluZ0NvbnN0YW50KGV4cHIgLT4gbGVmdF9leHByZXNzaW9uKTsKICAg
IFByb2Nlc3NFeHByZXNzaW9uT3JTdHJpbmdDb25zdGFudChleHByIC0+IHJpZ2h0X2V4cHJlc3Np
b24pOwoKICAgIFR5cGVTeW1ib2wgKmxlZnRfdHlwZSAgPSBleHByIC0+IGxlZnRfZXhwcmVzc2lv
biAtPiBUeXBlKCksCiAgICAgICAgICAgICAgICpyaWdodF90eXBlID0gZXhwciAtPiByaWdodF9l
eHByZXNzaW9uIC0+IFR5cGUoKTsKCiAgICBpZiAobGVmdF90eXBlICE9IGNvbnRyb2wubm9fdHlw
ZSAmJiByaWdodF90eXBlICE9IGNvbnRyb2wubm9fdHlwZSkKICAgIHsKICAgICAgICBpZiAobGVm
dF90eXBlICE9IHJpZ2h0X3R5cGUpCiAgICAgICAgewogICAgICAgICAgICBpZiAobGVmdF90eXBl
IC0+IFByaW1pdGl2ZSgpICYmIHJpZ2h0X3R5cGUgLT4gUHJpbWl0aXZlKCkpCiAgICAgICAgICAg
ICAgICAgQmluYXJ5TnVtZXJpY1Byb21vdGlvbihleHByKTsKICAgICAgICAgICAgZWxzZSBpZiAo
Q2FuQ2FzdENvbnZlcnQobGVmdF90eXBlLCByaWdodF90eXBlLCBleHByIC0+IGJpbmFyeV9vcGVy
YXRvcl90b2tlbikpCiAgICAgICAgICAgICAgICAgZXhwciAtPiByaWdodF9leHByZXNzaW9uID0g
Q29udmVydFRvVHlwZShleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24sIGxlZnRfdHlwZSk7CiAgICAg
ICAgICAgIGVsc2UgaWYgKENhbkNhc3RDb252ZXJ0KHJpZ2h0X3R5cGUsIGxlZnRfdHlwZSwgZXhw
ciAtPiBiaW5hcnlfb3BlcmF0b3JfdG9rZW4pKQogICAgICAgICAgICAgICAgIGV4cHIgLT4gbGVm
dF9leHByZXNzaW9uID0gQ29udmVydFRvVHlwZShleHByIC0+IGxlZnRfZXhwcmVzc2lvbiwgcmln
aHRfdHlwZSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
UmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6SU5DT01QQVRJQkxFX1RZUEVfRk9SX0JJTkFS
WV9FWFBSRVNTSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBMZWZ0
VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgLT4gUmlnaHRUb2tl
bigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBsZWZ0X2V4cHJlc3Np
b24gLT4gVHlwZSgpIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IFR5
cGUoKSAtPiBFeHRlcm5hbE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiAtPiBUeXBlKCkgLT4gQ29udGFpbmluZ1BhY2thZ2UoKSAt
PiBQYWNrYWdlTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBy
aWdodF9leHByZXNzaW9uIC0+IFR5cGUoKSAtPiBFeHRlcm5hbE5hbWUoKSk7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGxlZnRf
dHlwZSA9PSBjb250cm9sLnZvaWRfdHlwZSkKICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9y
KFNlbWFudGljRXJyb3I6OlZPSURfVFlQRV9JTl9FUVVBTElUWV9FWFBSRVNTSU9OLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBMZWZ0VG9rZW4oKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cHIgLT4gUmlnaHRUb2tlbigpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gVHlwZSgpIC0+IE5hbWUo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lv
biAtPiBUeXBlKCkgLT4gTmFtZSgpKTsKICAgICAgICAgICAgZXhwciAtPiBzeW1ib2wgPSBsZWZ0
X3R5cGU7CiAgICAgICAgfQoKICAgICAgICBpZiAoZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4g
SXNDb25zdGFudCgpICYmIGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiAtPiBJc0NvbnN0YW50KCkp
CiAgICAgICAgewogICAgICAgICAgICBMaXRlcmFsVmFsdWUgKmxlZnQgPSBleHByIC0+IGxlZnRf
ZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICAgICAgTGl0ZXJhbFZhbHVlICpyaWdodCA9IGV4
cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKCiAgICAgICAgICAgIGlmIChleHByIC0+
IFR5cGUoKSA9PSBjb250cm9sLmRvdWJsZV90eXBlKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICBEb3VibGVMaXRlcmFsVmFsdWUgKmxlZnQgPSAoRG91YmxlTGl0ZXJhbFZhbHVlICopIGV4
cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgRG91YmxlTGl0
ZXJhbFZhbHVlICpyaWdodCA9IChEb3VibGVMaXRlcmFsVmFsdWUgKikgZXhwciAtPiByaWdodF9l
eHByZXNzaW9uIC0+IHZhbHVlOwoKICAgICAgICAgICAgICAgIGV4cHIgLT4gdmFsdWUgPSBjb250
cm9sLmludF9wb29sLkZpbmRPckluc2VydChsZWZ0IC0+IHZhbHVlID09IHJpZ2h0IC0+IHZhbHVl
ID8gMSA6IDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGV4cHIgLT4gVHlw
ZSgpID09IGNvbnRyb2wuZmxvYXRfdHlwZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
RmxvYXRMaXRlcmFsVmFsdWUgKmxlZnQgPSAoRmxvYXRMaXRlcmFsVmFsdWUgKikgZXhwciAtPiBs
ZWZ0X2V4cHJlc3Npb24gLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBGbG9hdExpdGVyYWxWYWx1
ZSAqcmlnaHQgPSAoRmxvYXRMaXRlcmFsVmFsdWUgKikgZXhwciAtPiByaWdodF9leHByZXNzaW9u
IC0+IHZhbHVlOwoKICAgICAgICAgICAgICAgIGV4cHIgLT4gdmFsdWUgPSBjb250cm9sLmludF9w
b29sLkZpbmRPckluc2VydChsZWZ0IC0+IHZhbHVlID09IHJpZ2h0IC0+IHZhbHVlID8gMSA6IDAp
OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgZXhwciAtPiB2YWx1ZSA9IGNvbnRyb2wu
aW50X3Bvb2wuRmluZE9ySW5zZXJ0KGxlZnQgPT0gcmlnaHQgPyAxIDogMCk7CiAgICAgICAgfQog
ICAgfQoKICAgIGV4cHIgLT4gc3ltYm9sID0gY29udHJvbC5ib29sZWFuX3R5cGU7CgogICAgcmV0
dXJuOwp9CgoKdm9pZCBTZW1hbnRpYzo6UHJvY2Vzc05PVF9FUVVBTChBc3RCaW5hcnlFeHByZXNz
aW9uICpleHByKQp7CiAgICBQcm9jZXNzRXhwcmVzc2lvbk9yU3RyaW5nQ29uc3RhbnQoZXhwciAt
PiBsZWZ0X2V4cHJlc3Npb24pOwogICAgUHJvY2Vzc0V4cHJlc3Npb25PclN0cmluZ0NvbnN0YW50
KGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbik7CgogICAgVHlwZVN5bWJvbCAqbGVmdF90eXBlICA9
IGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IFR5cGUoKSwKICAgICAgICAgICAgICAgKnJpZ2h0
X3R5cGUgPSBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gVHlwZSgpOwoKICAgIGlmIChsZWZ0
X3R5cGUgIT0gY29udHJvbC5ub190eXBlICYmIHJpZ2h0X3R5cGUgIT0gY29udHJvbC5ub190eXBl
KQogICAgewogICAgICAgIGlmIChsZWZ0X3R5cGUgIT0gcmlnaHRfdHlwZSkKICAgICAgICB7CiAg
ICAgICAgICAgIGlmIChsZWZ0X3R5cGUgLT4gUHJpbWl0aXZlKCkgJiYgcmlnaHRfdHlwZSAtPiBQ
cmltaXRpdmUoKSkKICAgICAgICAgICAgICAgICBCaW5hcnlOdW1lcmljUHJvbW90aW9uKGV4cHIp
OwogICAgICAgICAgICBlbHNlIGlmIChDYW5DYXN0Q29udmVydChsZWZ0X3R5cGUsIHJpZ2h0X3R5
cGUsIGV4cHIgLT4gYmluYXJ5X29wZXJhdG9yX3Rva2VuKSkKICAgICAgICAgICAgICAgICBleHBy
IC0+IHJpZ2h0X2V4cHJlc3Npb24gPSBDb252ZXJ0VG9UeXBlKGV4cHIgLT4gcmlnaHRfZXhwcmVz
c2lvbiwgbGVmdF90eXBlKTsKICAgICAgICAgICAgZWxzZSBpZiAoQ2FuQ2FzdENvbnZlcnQocmln
aHRfdHlwZSwgbGVmdF90eXBlLCBleHByIC0+IGJpbmFyeV9vcGVyYXRvcl90b2tlbikpCiAgICAg
ICAgICAgICAgICAgZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gPSBDb252ZXJ0VG9UeXBlKGV4cHIg
LT4gbGVmdF9leHByZXNzaW9uLCByaWdodF90eXBlKTsKICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpJTkNP
TVBBVElCTEVfVFlQRV9GT1JfQklOQVJZX0VYUFJFU1NJT04sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleHByIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhwciAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBUeXBlKCkgLT4gQ29udGFpbmluZ1BhY2thZ2Uo
KSAtPiBQYWNrYWdlTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciAt
PiBsZWZ0X2V4cHJlc3Npb24gLT4gVHlwZSgpIC0+IEV4dGVybmFsTmFtZSgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IFR5cGUoKSAt
PiBDb250YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gVHlwZSgpIC0+IEV4dGVy
bmFsTmFtZSgpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAg
ewogICAgICAgICAgICBpZiAobGVmdF90eXBlID09IGNvbnRyb2wudm9pZF90eXBlKQogICAgICAg
ICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6Vk9JRF9UWVBFX0lOX0VRVUFM
SVRZX0VYUFJFU1NJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByIC0+IExl
ZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBSaWdodFRv
a2VuKCkpOwogICAgICAgICAgICBleHByIC0+IHN5bWJvbCA9IGxlZnRfdHlwZTsKICAgICAgICB9
CgogICAgICAgIGlmIChleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBJc0NvbnN0YW50KCkgJiYg
ZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSkKICAgICAgICB7CiAgICAg
ICAgICAgIExpdGVyYWxWYWx1ZSAqbGVmdCA9IGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHZh
bHVlOwogICAgICAgICAgICBMaXRlcmFsVmFsdWUgKnJpZ2h0ID0gZXhwciAtPiByaWdodF9leHBy
ZXNzaW9uIC0+IHZhbHVlOwoKICAgICAgICAgICAgaWYgKGV4cHIgLT4gVHlwZSgpID09IGNvbnRy
b2wuZG91YmxlX3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIERvdWJsZUxpdGVy
YWxWYWx1ZSAqbGVmdCA9IChEb3VibGVMaXRlcmFsVmFsdWUgKikgZXhwciAtPiBsZWZ0X2V4cHJl
c3Npb24gLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBEb3VibGVMaXRlcmFsVmFsdWUgKnJpZ2h0
ID0gKERvdWJsZUxpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gdmFs
dWU7CgogICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNvbnRyb2wuaW50X3Bvb2wuRmlu
ZE9ySW5zZXJ0KGxlZnQgLT4gdmFsdWUgIT0gcmlnaHQgLT4gdmFsdWUgPyAxIDogMCk7CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoZXhwciAtPiBUeXBlKCkgPT0gY29udHJvbC5m
bG9hdF90eXBlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBGbG9hdExpdGVyYWxWYWx1
ZSAqbGVmdCA9IChGbG9hdExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAt
PiB2YWx1ZTsKICAgICAgICAgICAgICAgIEZsb2F0TGl0ZXJhbFZhbHVlICpyaWdodCA9IChGbG9h
dExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gdmFsdWU7CgogICAg
ICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNvbnRyb2wuaW50X3Bvb2wuRmluZE9ySW5zZXJ0
KGxlZnQgLT4gdmFsdWUgIT0gcmlnaHQgLT4gdmFsdWUgPyAxIDogMCk7CiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgZWxzZSBleHByIC0+IHZhbHVlID0gY29udHJvbC5pbnRfcG9vbC5GaW5kT3JJ
bnNlcnQobGVmdCAhPSByaWdodCA/IDEgOiAwKTsKICAgICAgICB9CiAgICB9CgogICAgZXhwciAt
PiBzeW1ib2wgPSBjb250cm9sLmJvb2xlYW5fdHlwZTsKCiAgICByZXR1cm47Cn0KCgp2b2lkIFNl
bWFudGljOjpQcm9jZXNzU1RBUihBc3RCaW5hcnlFeHByZXNzaW9uICpleHByKQp7CiAgICBQcm9j
ZXNzRXhwcmVzc2lvbihleHByIC0+IGxlZnRfZXhwcmVzc2lvbik7CiAgICBQcm9jZXNzRXhwcmVz
c2lvbihleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24pOwoKICAgIFR5cGVTeW1ib2wgKmxlZnRfdHlw
ZSAgPSBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiBUeXBlKCksCiAgICAgICAgICAgICAgICpy
aWdodF90eXBlID0gZXhwciAtPiByaWdodF9leHByZXNzaW9uIC0+IFR5cGUoKTsKCiAgICBpZiAo
bGVmdF90eXBlID09IGNvbnRyb2wubm9fdHlwZSB8fCByaWdodF90eXBlID09IGNvbnRyb2wubm9f
dHlwZSkKICAgICAgICBleHByIC0+IHN5bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsKICAgIGVsc2UK
ICAgIHsKICAgICAgICBCaW5hcnlOdW1lcmljUHJvbW90aW9uKGV4cHIpOwoKICAgICAgICBpZiAo
ZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gSXNDb25zdGFudCgpICYmIGV4cHIgLT4gcmlnaHRf
ZXhwcmVzc2lvbiAtPiBJc0NvbnN0YW50KCkpCiAgICAgICAgewogICAgICAgICAgICBpZiAoZXhw
ciAtPiBUeXBlKCkgPT0gY29udHJvbC5kb3VibGVfdHlwZSkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgRG91YmxlTGl0ZXJhbFZhbHVlICpsZWZ0ID0gKERvdWJsZUxpdGVyYWxWYWx1ZSAq
KSBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICAgICAgICAgIERvdWJs
ZUxpdGVyYWxWYWx1ZSAqcmlnaHQgPSAoRG91YmxlTGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gcmln
aHRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKCiAgICAgICAgICAgICAgICBleHByIC0+IHZhbHVlID0g
Y29udHJvbC5kb3VibGVfcG9vbC5GaW5kT3JJbnNlcnQobGVmdCAtPiB2YWx1ZSAqIHJpZ2h0IC0+
IHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChleHByIC0+IFR5cGUo
KSA9PSBjb250cm9sLmZsb2F0X3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEZs
b2F0TGl0ZXJhbFZhbHVlICpsZWZ0ID0gKEZsb2F0TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gbGVm
dF9leHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgRmxvYXRMaXRlcmFsVmFsdWUg
KnJpZ2h0ID0gKEZsb2F0TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiAt
PiB2YWx1ZTsKCiAgICAgICAgICAgICAgICBleHByIC0+IHZhbHVlID0gY29udHJvbC5mbG9hdF9w
b29sLkZpbmRPckluc2VydChsZWZ0IC0+IHZhbHVlICogcmlnaHQgLT4gdmFsdWUpOwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGV4cHIgLT4gVHlwZSgpID09IGNvbnRyb2wubG9u
Z190eXBlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBMb25nTGl0ZXJhbFZhbHVlICps
ZWZ0ID0gKExvbmdMaXRlcmFsVmFsdWUgKikgZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gdmFs
dWU7CiAgICAgICAgICAgICAgICBMb25nTGl0ZXJhbFZhbHVlICpyaWdodCA9IChMb25nTGl0ZXJh
bFZhbHVlICopIGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKCiAgICAgICAgICAg
ICAgICBleHByIC0+IHZhbHVlID0gY29udHJvbC5sb25nX3Bvb2wuRmluZE9ySW5zZXJ0KGxlZnQg
LT4gdmFsdWUgKiByaWdodCAtPiB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxz
ZSBpZiAoZXhwciAtPiBUeXBlKCkgPT0gY29udHJvbC5pbnRfdHlwZSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgSW50TGl0ZXJhbFZhbHVlICpsZWZ0ID0gKEludExpdGVyYWxWYWx1ZSAq
KSBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICAgICAgICAgIEludExp
dGVyYWxWYWx1ZSAqcmlnaHQgPSAoSW50TGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gcmlnaHRfZXhw
cmVzc2lvbiAtPiB2YWx1ZTsKCiAgICAgICAgICAgICAgICBleHByIC0+IHZhbHVlID0gY29udHJv
bC5pbnRfcG9vbC5GaW5kT3JJbnNlcnQobGVmdCAtPiB2YWx1ZSAqIHJpZ2h0IC0+IHZhbHVlKTsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0KCgp2b2lkIFNlbWFu
dGljOjpQcm9jZXNzTUlOVVMoQXN0QmluYXJ5RXhwcmVzc2lvbiAqZXhwcikKewogICAgUHJvY2Vz
c0V4cHJlc3Npb24oZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24pOwogICAgUHJvY2Vzc0V4cHJlc3Np
b24oZXhwciAtPiByaWdodF9leHByZXNzaW9uKTsKCiAgICBUeXBlU3ltYm9sICpsZWZ0X3R5cGUg
ID0gZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gVHlwZSgpLAogICAgICAgICAgICAgICAqcmln
aHRfdHlwZSA9IGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiAtPiBUeXBlKCk7CgogICAgaWYgKGxl
ZnRfdHlwZSA9PSBjb250cm9sLm5vX3R5cGUgfHwgcmlnaHRfdHlwZSA9PSBjb250cm9sLm5vX3R5
cGUpCiAgICAgICAgZXhwciAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICBlbHNlCiAg
ICB7CiAgICAgICAgQmluYXJ5TnVtZXJpY1Byb21vdGlvbihleHByKTsKCiAgICAgICAgaWYgKGV4
cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSAmJiBleHByIC0+IHJpZ2h0X2V4
cHJlc3Npb24gLT4gSXNDb25zdGFudCgpKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGV4cHIg
LT4gVHlwZSgpID09IGNvbnRyb2wuZG91YmxlX3R5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIERvdWJsZUxpdGVyYWxWYWx1ZSAqbGVmdCA9IChEb3VibGVMaXRlcmFsVmFsdWUgKikg
ZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBEb3VibGVM
aXRlcmFsVmFsdWUgKnJpZ2h0ID0gKERvdWJsZUxpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHJpZ2h0
X2V4cHJlc3Npb24gLT4gdmFsdWU7CgogICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNv
bnRyb2wuZG91YmxlX3Bvb2wuRmluZE9ySW5zZXJ0KGxlZnQgLT4gdmFsdWUgLSByaWdodCAtPiB2
YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoZXhwciAtPiBUeXBlKCkg
PT0gY29udHJvbC5mbG9hdF90eXBlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBGbG9h
dExpdGVyYWxWYWx1ZSAqbGVmdCA9IChGbG9hdExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IGxlZnRf
ZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICAgICAgICAgIEZsb2F0TGl0ZXJhbFZhbHVlICpy
aWdodCA9IChGbG9hdExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4g
dmFsdWU7CgogICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNvbnRyb2wuZmxvYXRfcG9v
bC5GaW5kT3JJbnNlcnQobGVmdCAtPiB2YWx1ZSAtIHJpZ2h0IC0+IHZhbHVlKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgICBlbHNlIGlmIChleHByIC0+IFR5cGUoKSA9PSBjb250cm9sLmxvbmdf
dHlwZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTG9uZ0xpdGVyYWxWYWx1ZSAqbGVm
dCA9IChMb25nTGl0ZXJhbFZhbHVlICopIGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IHZhbHVl
OwogICAgICAgICAgICAgICAgTG9uZ0xpdGVyYWxWYWx1ZSAqcmlnaHQgPSAoTG9uZ0xpdGVyYWxW
YWx1ZSAqKSBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gdmFsdWU7CgogICAgICAgICAgICAg
ICAgZXhwciAtPiB2YWx1ZSA9IGNvbnRyb2wubG9uZ19wb29sLkZpbmRPckluc2VydChsZWZ0IC0+
IHZhbHVlIC0gcmlnaHQgLT4gdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2Ug
aWYgKGV4cHIgLT4gVHlwZSgpID09IGNvbnRyb2wuaW50X3R5cGUpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgIEludExpdGVyYWxWYWx1ZSAqbGVmdCA9IChJbnRMaXRlcmFsVmFsdWUgKikg
ZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gdmFsdWU7CiAgICAgICAgICAgICAgICBJbnRMaXRl
cmFsVmFsdWUgKnJpZ2h0ID0gKEludExpdGVyYWxWYWx1ZSAqKSBleHByIC0+IHJpZ2h0X2V4cHJl
c3Npb24gLT4gdmFsdWU7CgogICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNvbnRyb2wu
aW50X3Bvb2wuRmluZE9ySW5zZXJ0KGxlZnQgLT4gdmFsdWUgLSByaWdodCAtPiB2YWx1ZSk7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9CgoKdm9pZCBTZW1hbnRp
Yzo6UHJvY2Vzc1NMQVNIKEFzdEJpbmFyeUV4cHJlc3Npb24gKmV4cHIpCnsKICAgIFByb2Nlc3NF
eHByZXNzaW9uKGV4cHIgLT4gbGVmdF9leHByZXNzaW9uKTsKICAgIFByb2Nlc3NFeHByZXNzaW9u
KGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbik7CgogICAgVHlwZVN5bWJvbCAqbGVmdF90eXBlICA9
IGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+IFR5cGUoKSwKICAgICAgICAgICAgICAgKnJpZ2h0
X3R5cGUgPSBleHByIC0+IHJpZ2h0X2V4cHJlc3Npb24gLT4gVHlwZSgpOwoKICAgIGlmIChsZWZ0
X3R5cGUgPT0gY29udHJvbC5ub190eXBlIHx8IHJpZ2h0X3R5cGUgPT0gY29udHJvbC5ub190eXBl
KQogICAgICAgIGV4cHIgLT4gc3ltYm9sID0gY29udHJvbC5ub190eXBlOwogICAgZWxzZQogICAg
ewogICAgICAgIEJpbmFyeU51bWVyaWNQcm9tb3Rpb24oZXhwcik7CgogICAgICAgICAKICAgICAg
ICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgU3ltYm9sU2V0ICpleGNl
cHRpb25fc2V0ID0gVHJ5RXhjZXB0aW9uVGFibGVTdGFjaygpLlRvcCgpOwogICAgICAgIGlmIChl
eGNlcHRpb25fc2V0KQogICAgICAgIHsKICAgICAgICAgICAgZXhjZXB0aW9uX3NldCAtPiBBZGRF
bGVtZW50KGNvbnRyb2wuUnVudGltZUV4Y2VwdGlvbigpKTsKICAgICAgICB9CgogICAgICAgIEFz
dEV4cHJlc3Npb24gKmxlZnRfZXhwcmVzc2lvbiA9IGV4cHIgLT4gbGVmdF9leHByZXNzaW9uLAog
ICAgICAgICAgICAgICAgICAgICAgKnJpZ2h0X2V4cHJlc3Npb24gPSBleHByIC0+IHJpZ2h0X2V4
cHJlc3Npb247CiAgICAgICAgaWYgKHJpZ2h0X2V4cHJlc3Npb24gLT4gSXNDb25zdGFudCgpKQog
ICAgICAgIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICgoZXhwciAtPiBUeXBlKCkgPT0g
Y29udHJvbC5pbnRfdHlwZSAmJiAoKEludExpdGVyYWxWYWx1ZSAqKSByaWdodF9leHByZXNzaW9u
IC0+IHZhbHVlKSAtPiB2YWx1ZSA9PSAwKSB8fAogICAgICAgICAgICAgICAgKGV4cHIgLT4gVHlw
ZSgpID09IGNvbnRyb2wubG9uZ190eXBlICYmICgoTG9uZ0xpdGVyYWxWYWx1ZSAqKSByaWdodF9l
eHByZXNzaW9uIC0+IHZhbHVlKSAtPiB2YWx1ZSA9PSAwKSkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgUmVwb3J0U2VtRXJyb3IobGVmdF9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSA/
IFNlbWFudGljRXJyb3I6OlpFUk9fRElWSURFX0VSUk9SCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU2VtYW50aWNFcnJvcjo6
WkVST19ESVZJREVfQ0FVVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIg
LT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByIC0+IFJp
Z2h0VG9rZW4oKSk7CiAgICAgICAgICAgICAgICBleHByIC0+IHN5bWJvbCA9IGNvbnRyb2wubm9f
dHlwZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChsZWZ0X2V4cHJlc3Npb24g
LT4gSXNDb25zdGFudCgpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoZXhwciAt
PiBUeXBlKCkgPT0gY29udHJvbC5kb3VibGVfdHlwZSkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICBEb3VibGVMaXRlcmFsVmFsdWUgKmxlZnQgPSAoRG91YmxlTGl0ZXJhbFZh
bHVlICopIGxlZnRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBEb3Vi
bGVMaXRlcmFsVmFsdWUgKnJpZ2h0ID0gKERvdWJsZUxpdGVyYWxWYWx1ZSAqKSByaWdodF9leHBy
ZXNzaW9uIC0+IHZhbHVlOwoKICAgICAgICAgICAgICAgICAgICBleHByIC0+IHZhbHVlID0gY29u
dHJvbC5kb3VibGVfcG9vbC5GaW5kT3JJbnNlcnQobGVmdCAtPiB2YWx1ZSAvIHJpZ2h0IC0+IHZh
bHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV4cHIgLT4g
VHlwZSgpID09IGNvbnRyb2wuZmxvYXRfdHlwZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICBGbG9hdExpdGVyYWxWYWx1ZSAqbGVmdCA9IChGbG9hdExpdGVyYWxWYWx1ZSAq
KSBsZWZ0X2V4cHJlc3Npb24gLT4gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgRmxvYXRMaXRl
cmFsVmFsdWUgKnJpZ2h0ID0gKEZsb2F0TGl0ZXJhbFZhbHVlICopIHJpZ2h0X2V4cHJlc3Npb24g
LT4gdmFsdWU7CgogICAgICAgICAgICAgICAgICAgIGV4cHIgLT4gdmFsdWUgPSBjb250cm9sLmZs
b2F0X3Bvb2wuRmluZE9ySW5zZXJ0KGxlZnQgLT4gdmFsdWUgLyByaWdodCAtPiB2YWx1ZSk7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChleHByIC0+IFR5cGUoKSA9
PSBjb250cm9sLmxvbmdfdHlwZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICBMb25nTGl0ZXJhbFZhbHVlICpsZWZ0ID0gKExvbmdMaXRlcmFsVmFsdWUgKikgbGVmdF9leHBy
ZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIExvbmdMaXRlcmFsVmFsdWUgKnJp
Z2h0ID0gKExvbmdMaXRlcmFsVmFsdWUgKikgcmlnaHRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKCiAg
ICAgICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNvbnRyb2wubG9uZ19wb29sLkZpbmRP
ckluc2VydChsZWZ0IC0+IHZhbHVlIC8gcmlnaHQgLT4gdmFsdWUpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgZWxzZSBpZiAoZXhwciAtPiBUeXBlKCkgPT0gY29udHJvbC5pbnRf
dHlwZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFs
dWUgKmxlZnQgPSAoSW50TGl0ZXJhbFZhbHVlICopIGxlZnRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsK
ICAgICAgICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFsdWUgKnJpZ2h0ID0gKEludExpdGVyYWxW
YWx1ZSAqKSByaWdodF9leHByZXNzaW9uIC0+IHZhbHVlOwoKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNv
bnRyb2wuaW50X3Bvb2wuRmluZE9ySW5zZXJ0KHJpZ2h0IC0+IHZhbHVlID09IC0xID8gLShsZWZ0
IC0+IHZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxlZnQgLT4gdmFsdWUg
LyByaWdodCAtPiB2YWx1ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICB9CgogICAgcmV0dXJuOwp9CgoKdm9pZCBTZW1hbnRpYzo6UHJvY2Vzc01PRChBc3RC
aW5hcnlFeHByZXNzaW9uICpleHByKQp7CiAgICBQcm9jZXNzRXhwcmVzc2lvbihleHByIC0+IGxl
ZnRfZXhwcmVzc2lvbik7CiAgICBQcm9jZXNzRXhwcmVzc2lvbihleHByIC0+IHJpZ2h0X2V4cHJl
c3Npb24pOwoKICAgIFR5cGVTeW1ib2wgKmxlZnRfdHlwZSAgPSBleHByIC0+IGxlZnRfZXhwcmVz
c2lvbiAtPiBUeXBlKCksCiAgICAgICAgICAgICAgICpyaWdodF90eXBlID0gZXhwciAtPiByaWdo
dF9leHByZXNzaW9uIC0+IFR5cGUoKTsKCiAgICBpZiAobGVmdF90eXBlID09IGNvbnRyb2wubm9f
dHlwZSB8fCByaWdodF90eXBlID09IGNvbnRyb2wubm9fdHlwZSkKICAgICAgICBleHByIC0+IHN5
bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsKICAgIGVsc2UKICAgIHsKICAgICAgICBCaW5hcnlOdW1l
cmljUHJvbW90aW9uKGV4cHIpOwoKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAg
ICAgCiAgICAgICAgIAogICAgICAgIFN5bWJvbFNldCAqZXhjZXB0aW9uX3NldCA9IFRyeUV4Y2Vw
dGlvblRhYmxlU3RhY2soKS5Ub3AoKTsKICAgICAgICBpZiAoZXhjZXB0aW9uX3NldCkKICAgICAg
ICB7CiAgICAgICAgICAgIGV4Y2VwdGlvbl9zZXQgLT4gQWRkRWxlbWVudChjb250cm9sLlJ1bnRp
bWVFeGNlcHRpb24oKSk7CiAgICAgICAgfQoKICAgICAgICBBc3RFeHByZXNzaW9uICpsZWZ0X2V4
cHJlc3Npb24gPSBleHByIC0+IGxlZnRfZXhwcmVzc2lvbiwKICAgICAgICAgICAgICAgICAgICAg
ICpyaWdodF9leHByZXNzaW9uID0gZXhwciAtPiByaWdodF9leHByZXNzaW9uOwogICAgICAgIGlm
IChyaWdodF9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSkKICAgICAgICB7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAg
IAogICAgICAgICAgICBpZiAoKGV4cHIgLT4gVHlwZSgpID09IGNvbnRyb2wuaW50X3R5cGUgJiYg
KChJbnRMaXRlcmFsVmFsdWUgKikgcmlnaHRfZXhwcmVzc2lvbiAtPiB2YWx1ZSkgLT4gdmFsdWUg
PT0gMCkgfHwKICAgICAgICAgICAgICAgIChleHByIC0+IFR5cGUoKSA9PSBjb250cm9sLmxvbmdf
dHlwZSAmJiAoKExvbmdMaXRlcmFsVmFsdWUgKikgcmlnaHRfZXhwcmVzc2lvbiAtPiB2YWx1ZSkg
LT4gdmFsdWUgPT0gMCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVy
cm9yKGxlZnRfZXhwcmVzc2lvbiAtPiBJc0NvbnN0YW50KCkgPyBTZW1hbnRpY0Vycm9yOjpaRVJP
X0RJVklERV9FUlJPUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IFNlbWFudGljRXJyb3I6OlpFUk9fRElWSURFX0NBVVRJT04s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByIC0+IExlZnRUb2tlbigpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBSaWdodFRva2VuKCkpOwogICAgICAg
ICAgICAgICAgZXhwciAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgZWxzZSBpZiAobGVmdF9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGV4cHIgLT4gVHlwZSgpID09IGNvbnRyb2wu
ZG91YmxlX3R5cGUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgRG91Ymxl
TGl0ZXJhbFZhbHVlICpsZWZ0ID0gKERvdWJsZUxpdGVyYWxWYWx1ZSAqKSBsZWZ0X2V4cHJlc3Np
b24gLT4gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgRG91YmxlTGl0ZXJhbFZhbHVlICpyaWdo
dCA9IChEb3VibGVMaXRlcmFsVmFsdWUgKikgcmlnaHRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBleHByIC0+IHZhbHVlID0gY29u
dHJvbC5kb3VibGVfcG9vbC5GaW5kT3JJbnNlcnQobGVmdCAtPiB2YWx1ZSAlIHJpZ2h0IC0+IHZh
bHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV4cHIgLT4g
VHlwZSgpID09IGNvbnRyb2wuZmxvYXRfdHlwZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICBGbG9hdExpdGVyYWxWYWx1ZSAqbGVmdCA9IChGbG9hdExpdGVyYWxWYWx1ZSAq
KSBsZWZ0X2V4cHJlc3Npb24gLT4gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgRmxvYXRMaXRl
cmFsVmFsdWUgKnJpZ2h0ID0gKEZsb2F0TGl0ZXJhbFZhbHVlICopIHJpZ2h0X2V4cHJlc3Npb24g
LT4gdmFsdWU7CgogICAgICAgICAgICAgICAgICAgIGV4cHIgLT4gdmFsdWUgPSBjb250cm9sLmZs
b2F0X3Bvb2wuRmluZE9ySW5zZXJ0KGxlZnQgLT4gdmFsdWUgJSByaWdodCAtPiB2YWx1ZSk7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChleHByIC0+IFR5cGUoKSA9
PSBjb250cm9sLmxvbmdfdHlwZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICBMb25nTGl0ZXJhbFZhbHVlICpsZWZ0ID0gKExvbmdMaXRlcmFsVmFsdWUgKikgbGVmdF9leHBy
ZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIExvbmdMaXRlcmFsVmFsdWUgKnJp
Z2h0ID0gKExvbmdMaXRlcmFsVmFsdWUgKikgcmlnaHRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKCiAg
ICAgICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNvbnRyb2wubG9uZ19wb29sLkZpbmRP
ckluc2VydChsZWZ0IC0+IHZhbHVlICUgcmlnaHQgLT4gdmFsdWUpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgZWxzZSBpZiAoZXhwciAtPiBUeXBlKCkgPT0gY29udHJvbC5pbnRf
dHlwZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFs
dWUgKmxlZnQgPSAoSW50TGl0ZXJhbFZhbHVlICopIGxlZnRfZXhwcmVzc2lvbiAtPiB2YWx1ZTsK
ICAgICAgICAgICAgICAgICAgICBJbnRMaXRlcmFsVmFsdWUgKnJpZ2h0ID0gKEludExpdGVyYWxW
YWx1ZSAqKSByaWdodF9leHByZXNzaW9uIC0+IHZhbHVlOwoKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgZXhwciAtPiB2YWx1ZSA9IGNv
bnRyb2wuaW50X3Bvb2wuRmluZE9ySW5zZXJ0KChsZWZ0IC0+IHZhbHVlICA9PSAoc2lnbmVkKSAw
eDgwMDAwMDAwICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByaWdodCAtPiB2YWx1ZSA9PSAoc2lnbmVkKSAweGZmZmZm
ZmZmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogbGVmdCAtPiB2YWx1ZSAlIHJpZ2h0IC0+IHZhbHVlKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0KCgp2b2lkIFNlbWFu
dGljOjpQcm9jZXNzSU5TVEFOQ0VPRihBc3RCaW5hcnlFeHByZXNzaW9uICpleHByKQp7CiAgICBQ
cm9jZXNzRXhwcmVzc2lvbk9yU3RyaW5nQ29uc3RhbnQoZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24p
OwogICAgUHJvY2Vzc0V4cHJlc3Npb24oZXhwciAtPiByaWdodF9leHByZXNzaW9uKTsKCiAgICBU
eXBlU3ltYm9sICpsZWZ0X3R5cGUgID0gZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gVHlwZSgp
LAogICAgICAgICAgICAgICAqcmlnaHRfdHlwZSA9IGV4cHIgLT4gcmlnaHRfZXhwcmVzc2lvbiAt
PiBUeXBlKCk7CgogICAgaWYgKGxlZnRfdHlwZSAtPiBQcmltaXRpdmUoKSkKICAgIHsKICAgICAg
ICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpUWVBFX05PVF9SRUZFUkVOQ0UsCiAgICAg
ICAgICAgICAgICAgICAgICAgZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gTGVmdFRva2VuKCks
CiAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBsZWZ0X2V4cHJlc3Npb24gLT4gUmlnaHRU
b2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgIGV4cHIgLT4gbGVmdF9leHByZXNzaW9uIC0+
IFR5cGUoKSAtPiBOYW1lKCkpOwogICAgfQogICAgZWxzZSBpZiAoISBDYW5DYXN0Q29udmVydChy
aWdodF90eXBlLCBsZWZ0X3R5cGUsIGV4cHIgLT4gYmluYXJ5X29wZXJhdG9yX3Rva2VuKSkgIAog
ICAgewogICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OklOVkFMSURfSU5TVEFO
Q0VPRl9DT05WRVJTSU9OLAogICAgICAgICAgICAgICAgICAgICAgIGV4cHIgLT4gTGVmdFRva2Vu
KCksCiAgICAgICAgICAgICAgICAgICAgICAgZXhwciAtPiBSaWdodFRva2VuKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgbGVmdF90eXBlIC0+IENvbnRhaW5pbmdQYWNrYWdlKCkgLT4gUGFja2Fn
ZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICBsZWZ0X3R5cGUgLT4gRXh0ZXJuYWxOYW1l
KCksCiAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRfdHlwZSAtPiBDb250YWluaW5nUGFja2Fn
ZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRfdHlwZSAt
PiBFeHRlcm5hbE5hbWUoKSk7CiAgICB9CgogICAgZXhwciAtPiBzeW1ib2wgPSBjb250cm9sLmJv
b2xlYW5fdHlwZTsKCiAgICByZXR1cm47Cn0KCgp2b2lkIFNlbWFudGljOjpQcm9jZXNzQmluYXJ5
RXhwcmVzc2lvbihBc3QgKmV4cHIpCnsKICAgIEFzdEJpbmFyeUV4cHJlc3Npb24gKmJpbmFyeV9l
eHByZXNzaW9uID0gKEFzdEJpbmFyeUV4cHJlc3Npb24gKikgZXhwcjsKICAgICh0aGlzIC0+KiBQ
cm9jZXNzQmluYXJ5RXhwcltiaW5hcnlfZXhwcmVzc2lvbiAtPiBiaW5hcnlfdGFnXSkoYmluYXJ5
X2V4cHJlc3Npb24pOwoKICAgIHJldHVybjsKfQoKCnZvaWQgU2VtYW50aWM6OlByb2Nlc3NUeXBl
RXhwcmVzc2lvbihBc3QgKmV4cHIpCnsKICAgIEFzdFR5cGVFeHByZXNzaW9uICp0eXBlX2V4cHJl
c3Npb24gPSAoQXN0VHlwZUV4cHJlc3Npb24gKikgZXhwcjsKCiAgICBBc3RBcnJheVR5cGUgKmFy
cmF5X3R5cGUgPSB0eXBlX2V4cHJlc3Npb24gLT4gdHlwZSAtPiBBcnJheVR5cGVDYXN0KCk7CiAg
ICBBc3QgKmFjdHVhbF90eXBlID0gKGFycmF5X3R5cGUgPyBhcnJheV90eXBlIC0+IHR5cGUgOiB0
eXBlX2V4cHJlc3Npb24gLT4gdHlwZSk7CgogICAgQXN0UHJpbWl0aXZlVHlwZSAqcHJpbWl0aXZl
X3R5cGUgPSBhY3R1YWxfdHlwZSAtPiBQcmltaXRpdmVUeXBlQ2FzdCgpOwogICAgVHlwZVN5bWJv
bCAqdHlwZSA9IChwcmltaXRpdmVfdHlwZSA/IEZpbmRQcmltaXRpdmVUeXBlKHByaW1pdGl2ZV90
eXBlKSA6IE11c3RGaW5kVHlwZShhY3R1YWxfdHlwZSkpOwoKICAgIGlmIChhcnJheV90eXBlKQog
ICAgICAgIHR5cGUgPSB0eXBlIC0+IEdldEFycmF5VHlwZSgoU2VtYW50aWMgKikgdGhpcywgYXJy
YXlfdHlwZSAtPiBOdW1CcmFja2V0cygpKTsKCiAgICB0eXBlX2V4cHJlc3Npb24gLT4gc3ltYm9s
ID0gdHlwZTsKCiAgICByZXR1cm47Cn0KCgp2b2lkIFNlbWFudGljOjpQcm9jZXNzQ29uZGl0aW9u
YWxFeHByZXNzaW9uKEFzdCAqZXhwcikKewogICAgQXN0Q29uZGl0aW9uYWxFeHByZXNzaW9uICpj
b25kaXRpb25hbF9leHByZXNzaW9uID0gKEFzdENvbmRpdGlvbmFsRXhwcmVzc2lvbiAqKSBleHBy
OwoKICAgIFByb2Nlc3NFeHByZXNzaW9uKGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gLT4gdGVzdF9l
eHByZXNzaW9uKTsKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgIFByb2Nlc3NFeHBy
ZXNzaW9uT3JTdHJpbmdDb25zdGFudChjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHRydWVfZXhw
cmVzc2lvbik7CiAgICBQcm9jZXNzRXhwcmVzc2lvbk9yU3RyaW5nQ29uc3RhbnQoY29uZGl0aW9u
YWxfZXhwcmVzc2lvbiAtPiBmYWxzZV9leHByZXNzaW9uKTsKCiAgICBUeXBlU3ltYm9sICp0ZXN0
X3R5cGUgID0gY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiB0ZXN0X2V4cHJlc3Npb24gLT4gVHlw
ZSgpOwogICAgVHlwZVN5bWJvbCAqdHJ1ZV90eXBlICA9IGNvbmRpdGlvbmFsX2V4cHJlc3Npb24g
LT4gdHJ1ZV9leHByZXNzaW9uIC0+IFR5cGUoKTsKICAgIFR5cGVTeW1ib2wgKmZhbHNlX3R5cGUg
PSBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IGZhbHNlX2V4cHJlc3Npb24gLT4gVHlwZSgpOwoK
ICAgIGlmICh0ZXN0X3R5cGUgPT0gY29udHJvbC5ub190eXBlIHx8IHRydWVfdHlwZSA9PSBjb250
cm9sLm5vX3R5cGUgfHwgZmFsc2VfdHlwZSA9PSBjb250cm9sLm5vX3R5cGUpCiAgICAgICAgY29u
ZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBzeW1ib2wgPSBjb250cm9sLm5vX3R5cGU7CiAgICBlbHNl
IGlmICh0ZXN0X3R5cGUgIT0gY29udHJvbC5ib29sZWFuX3R5cGUpCiAgICB7CiAgICAgICAgUmVw
b3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6VFlQRV9OT1RfQk9PTEVBTiwKICAgICAgICAgICAg
ICAgICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHRlc3RfZXhwcmVzc2lvbiAtPiBM
ZWZ0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9u
IC0+IHRlc3RfZXhwcmVzc2lvbiAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiB0ZXN0X2V4cHJlc3Npb24gLT4gVHlwZSgpIC0+
IE5hbWUoKSk7CiAgICAgICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBzeW1ib2wgPSBjb250
cm9sLm5vX3R5cGU7CiAgICB9CiAgICBlbHNlIGlmICh0cnVlX3R5cGUgPT0gY29udHJvbC52b2lk
X3R5cGUpCiAgICB7CiAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6VFlQRV9J
U19WT0lELAogICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gLT4g
dHJ1ZV9leHByZXNzaW9uIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgIGNv
bmRpdGlvbmFsX2V4cHJlc3Npb24gLT4gdHJ1ZV9leHByZXNzaW9uIC0+IFJpZ2h0VG9rZW4oKSwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHRydWVfZXhw
cmVzc2lvbiAtPiBUeXBlKCkgLT4gTmFtZSgpKTsKICAgICAgICBjb25kaXRpb25hbF9leHByZXNz
aW9uIC0+IHN5bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsKICAgIH0KICAgIGVsc2UgaWYgKGZhbHNl
X3R5cGUgPT0gY29udHJvbC52b2lkX3R5cGUpCiAgICB7CiAgICAgICAgUmVwb3J0U2VtRXJyb3Io
U2VtYW50aWNFcnJvcjo6VFlQRV9JU19WT0lELAogICAgICAgICAgICAgICAgICAgICAgIGNvbmRp
dGlvbmFsX2V4cHJlc3Npb24gLT4gZmFsc2VfZXhwcmVzc2lvbiAtPiBMZWZ0VG9rZW4oKSwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IGZhbHNlX2V4cHJl
c3Npb24gLT4gUmlnaHRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFs
X2V4cHJlc3Npb24gLT4gZmFsc2VfZXhwcmVzc2lvbiAtPiBUeXBlKCkgLT4gTmFtZSgpKTsKICAg
ICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHN5bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsK
ICAgIH0KICAgIGVsc2UgaWYgKHRydWVfdHlwZSAtPiBQcmltaXRpdmUoKSkKICAgIHsKICAgICAg
ICBpZiAoISBmYWxzZV90eXBlIC0+IFByaW1pdGl2ZSgpIHx8CiAgICAgICAgICAgICh0cnVlX3R5
cGUgIT0gZmFsc2VfdHlwZSAmJiAodHJ1ZV90eXBlID09IGNvbnRyb2wuYm9vbGVhbl90eXBlIHx8
IGZhbHNlX3R5cGUgPT0gY29udHJvbC5ib29sZWFuX3R5cGUpKSkKICAgICAgICB7CiAgICAgICAg
ICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6OklOQ09NUEFUSUJMRV9UWVBFX0ZPUl9D
T05ESVRJT05BTF9FWFBSRVNTSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRp
b25hbF9leHByZXNzaW9uIC0+IGZhbHNlX2V4cHJlc3Npb24gLT4gTGVmdFRva2VuKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gLT4gZmFsc2VfZXhw
cmVzc2lvbiAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRp
dGlvbmFsX2V4cHJlc3Npb24gLT4gZmFsc2VfZXhwcmVzc2lvbiAtPiBUeXBlKCkgLT4gQ29udGFp
bmluZ1BhY2thZ2UoKSAtPiBQYWNrYWdlTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IGZhbHNlX2V4cHJlc3Npb24gLT4gVHlwZSgpIC0+
IEV4dGVybmFsTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbF9l
eHByZXNzaW9uIC0+IHRydWVfZXhwcmVzc2lvbiAtPiBUeXBlKCkgLT4gQ29udGFpbmluZ1BhY2th
Z2UoKSAtPiBQYWNrYWdlTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRp
b25hbF9leHByZXNzaW9uIC0+IHRydWVfZXhwcmVzc2lvbiAtPiBUeXBlKCkgLT4gRXh0ZXJuYWxO
YW1lKCkpOwogICAgICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHN5bWJvbCA9IGNv
bnRyb2wubm9fdHlwZTsKICAgICAgICB9CiAgICAgICAgZWxzZSAgCiAgICAgICAgewogICAgICAg
ICAgICBpZiAodHJ1ZV90eXBlID09IGZhbHNlX3R5cGUpCiAgICAgICAgICAgICAgICBjb25kaXRp
b25hbF9leHByZXNzaW9uIC0+IHN5bWJvbCA9IHRydWVfdHlwZTsKICAgICAgICAgICAgZWxzZSAg
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmICh0cnVlX3R5cGUgPT0gY29udHJvbC5i
eXRlX3R5cGUgJiYgZmFsc2VfdHlwZSA9PSBjb250cm9sLnNob3J0X3R5cGUpCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiB0cnVl
X2V4cHJlc3Npb24gPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRUb1R5
cGUoY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiB0cnVlX2V4cHJlc3Npb24sIGNvbnRyb2wuc2hv
cnRfdHlwZSk7CiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBz
eW1ib2wgPSBjb250cm9sLnNob3J0X3R5cGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICBlbHNlIGlmICh0cnVlX3R5cGUgPT0gY29udHJvbC5zaG9ydF90eXBlICYmIGZhbHNlX3R5
cGUgPT0gY29udHJvbC5ieXRlX3R5cGUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBmYWxzZV9leHByZXNzaW9uID0KICAgICAg
ICAgICAgICAgICAgICAgICAgQ29udmVydFRvVHlwZShjb25kaXRpb25hbF9leHByZXNzaW9uIC0+
IGZhbHNlX2V4cHJlc3Npb24sIGNvbnRyb2wuc2hvcnRfdHlwZSk7CiAgICAgICAgICAgICAgICAg
ICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBzeW1ib2wgPSBjb250cm9sLnNob3J0X3R5cGU7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChJc0ludFZhbHVlUmVw
cmVzZW50YWJsZUluVHlwZShjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IGZhbHNlX2V4cHJlc3Np
b24sIHRydWVfdHlwZSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY29u
ZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBmYWxzZV9leHByZXNzaW9uID0KICAgICAgICAgICAgICAg
ICAgICAgICAgQ29udmVydFRvVHlwZShjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IGZhbHNlX2V4
cHJlc3Npb24sIHRydWVfdHlwZSk7CiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWxfZXhw
cmVzc2lvbiAtPiBzeW1ib2wgPSB0cnVlX3R5cGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICBlbHNlIGlmIChJc0ludFZhbHVlUmVwcmVzZW50YWJsZUluVHlwZShjb25kaXRpb25h
bF9leHByZXNzaW9uIC0+IHRydWVfZXhwcmVzc2lvbiwgZmFsc2VfdHlwZSkpCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiB0cnVl
X2V4cHJlc3Npb24gPQogICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydFRvVHlwZShjb25k
aXRpb25hbF9leHByZXNzaW9uIC0+IHRydWVfZXhwcmVzc2lvbiwgZmFsc2VfdHlwZSk7CiAgICAg
ICAgICAgICAgICAgICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBzeW1ib2wgPSBmYWxzZV90
eXBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBCaW5hcnlOdW1lcmlj
UHJvbW90aW9uKGNvbmRpdGlvbmFsX2V4cHJlc3Npb24pOwogICAgICAgICAgICB9CgogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAg
ICAgIGlmIChjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHRlc3RfZXhwcmVzc2lvbiAtPiBJc0Nv
bnN0YW50KCkgJiYKICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gLT4gdHJ1
ZV9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSAmJgogICAgICAgICAgICAgICAgY29uZGl0aW9u
YWxfZXhwcmVzc2lvbiAtPiBmYWxzZV9leHByZXNzaW9uIC0+IElzQ29uc3RhbnQoKSkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgSW50TGl0ZXJhbFZhbHVlICp0ZXN0ID0gKEludExpdGVy
YWxWYWx1ZSAqKSBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHRlc3RfZXhwcmVzc2lvbiAtPiB2
YWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAodGVzdCAtPiB2YWx1ZSkKICAgICAgICAgICAgICAg
ICAgICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiB2YWx1ZSA9IGNvbmRpdGlvbmFsX2V4cHJl
c3Npb24gLT4gdHJ1ZV9leHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHZhbHVlID0gY29u
ZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBmYWxzZV9leHByZXNzaW9uIC0+IHZhbHVlOwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGlmICh0cnVlX3R5
cGUgPT0gZmFsc2VfdHlwZSkKICAgICAgICAgICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBz
eW1ib2wgPSB0cnVlX3R5cGU7CiAgICAgICAgZWxzZSBpZiAoZmFsc2VfdHlwZSAtPiBQcmltaXRp
dmUoKSkKICAgICAgICB7CiAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFudGljRXJyb3I6
OklOQ09NUEFUSUJMRV9UWVBFX0ZPUl9DT05ESVRJT05BTF9FWFBSRVNTSU9OLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IGZhbHNlX2V4cHJlc3Np
b24gLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFs
X2V4cHJlc3Npb24gLT4gZmFsc2VfZXhwcmVzc2lvbiAtPiBSaWdodFRva2VuKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gLT4gZmFsc2VfZXhwcmVz
c2lvbiAtPiBUeXBlKCkgLT4gQ29udGFpbmluZ1BhY2thZ2UoKSAtPiBQYWNrYWdlTmFtZSgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IGZhbHNl
X2V4cHJlc3Npb24gLT4gVHlwZSgpIC0+IEV4dGVybmFsTmFtZSgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHRydWVfZXhwcmVzc2lvbiAtPiBU
eXBlKCkgLT4gQ29udGFpbmluZ1BhY2thZ2UoKSAtPiBQYWNrYWdlTmFtZSgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHRydWVfZXhwcmVzc2lv
biAtPiBUeXBlKCkgLT4gRXh0ZXJuYWxOYW1lKCkpOwogICAgICAgICAgICBjb25kaXRpb25hbF9l
eHByZXNzaW9uIC0+IHN5bWJvbCA9IGNvbnRyb2wubm9fdHlwZTsKICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICh0cnVlX3R5cGUgPT0gY29udHJvbC5udWxsX3R5
cGUpCiAgICAgICAgICAgIGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gLT4gc3ltYm9sID0gZmFsc2Vf
dHlwZTsKICAgICAgICBlbHNlIGlmIChmYWxzZV90eXBlID09IGNvbnRyb2wubnVsbF90eXBlKQog
ICAgICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHN5bWJvbCA9IHRydWVfdHlwZTsK
ICAgICAgICBlbHNlIGlmIChDYW5Bc3NpZ25tZW50Q29udmVydChmYWxzZV90eXBlLCBjb25kaXRp
b25hbF9leHByZXNzaW9uIC0+IHRydWVfZXhwcmVzc2lvbikpCiAgICAgICAgewogICAgICAgICAg
ICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHRydWVfZXhwcmVzc2lvbiA9IENvbnZlcnRUb1R5
cGUoY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiB0cnVlX2V4cHJlc3Npb24sIGZhbHNlX3R5cGUp
OwogICAgICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHN5bWJvbCA9IGZhbHNlX3R5
cGU7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKENhbkFzc2lnbm1lbnRDb252ZXJ0KHRydWVf
dHlwZSwgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBmYWxzZV9leHByZXNzaW9uKSkKICAgICAg
ICB7CiAgICAgICAgICAgIGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gLT4gZmFsc2VfZXhwcmVzc2lv
biA9IENvbnZlcnRUb1R5cGUoY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBmYWxzZV9leHByZXNz
aW9uLCB0cnVlX3R5cGUpOwogICAgICAgICAgICBjb25kaXRpb25hbF9leHByZXNzaW9uIC0+IHN5
bWJvbCA9IHRydWVfdHlwZTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAg
ICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6SU5DT01QQVRJQkxFX1RZUEVfRk9S
X0NPTkRJVElPTkFMX0VYUFJFU1NJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRp
dGlvbmFsX2V4cHJlc3Npb24gLT4gZmFsc2VfZXhwcmVzc2lvbiAtPiBMZWZ0VG9rZW4oKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBmYWxzZV9l
eHByZXNzaW9uIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
ZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiBmYWxzZV9leHByZXNzaW9uIC0+IFR5cGUoKSAtPiBDb250
YWluaW5nUGFja2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gLT4gZmFsc2VfZXhwcmVzc2lvbiAtPiBUeXBlKCkg
LT4gRXh0ZXJuYWxOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFs
X2V4cHJlc3Npb24gLT4gdHJ1ZV9leHByZXNzaW9uIC0+IFR5cGUoKSAtPiBDb250YWluaW5nUGFj
a2FnZSgpIC0+IFBhY2thZ2VOYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRp
dGlvbmFsX2V4cHJlc3Npb24gLT4gdHJ1ZV9leHByZXNzaW9uIC0+IFR5cGUoKSAtPiBFeHRlcm5h
bE5hbWUoKSk7CiAgICAgICAgICAgIGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gLT4gc3ltYm9sID0g
Y29udHJvbC5ub190eXBlOwogICAgICAgIH0KCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAg
CiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgIGlmIChjb25k
aXRpb25hbF9leHByZXNzaW9uIC0+IHRlc3RfZXhwcmVzc2lvbiAtPiBJc0NvbnN0YW50KCkgJiYK
ICAgICAgICAgICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiB0cnVlX2V4cHJlc3Npb24gLT4g
SXNDb25zdGFudCgpICYmCiAgICAgICAgICAgIGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gLT4gZmFs
c2VfZXhwcmVzc2lvbiAtPiBJc0NvbnN0YW50KCkpCiAgICAgICAgewogICAgICAgICAgICAoc3Rh
dGljX2Nhc3Q8dm9pZD4gICgoIGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gLT4gc3ltYm9sID09IGNv
bnRyb2wuU3RyaW5nKCkgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImNvbmRpdGlvbmFsX2V4cHJl
c3Npb24gLT4gc3ltYm9sID09IGNvbnRyb2wuU3RyaW5nKCkiICwgIi4uLy4uL2ppa2VzL3NyYy9l
eHByLmNwcCIsIDY5MjQsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgICAgICAgICAg
ICAKCiAgICAgICAgICAgIEludExpdGVyYWxWYWx1ZSAqdGVzdCA9IChJbnRMaXRlcmFsVmFsdWUg
KikgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiB0ZXN0X2V4cHJlc3Npb24gLT4gdmFsdWU7CiAg
ICAgICAgICAgIAogICAgICAgICAgICBpZiAodGVzdCAtPiB2YWx1ZSkKICAgICAgICAgICAgICAg
IGNvbmRpdGlvbmFsX2V4cHJlc3Npb24gLT4gdmFsdWUgPSBjb25kaXRpb25hbF9leHByZXNzaW9u
IC0+IHRydWVfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgY29uZGl0aW9uYWxfZXhwcmVzc2lvbiAtPiB2YWx1ZSA9IGNvbmRpdGlvbmFsX2V4cHJl
c3Npb24gLT4gZmFsc2VfZXhwcmVzc2lvbiAtPiB2YWx1ZTsKICAgICAgICB9CiAgICB9CgogICAg
cmV0dXJuOwp9CgoKdm9pZCBTZW1hbnRpYzo6UHJvY2Vzc0Fzc2lnbm1lbnRFeHByZXNzaW9uKEFz
dCAqZXhwcikKewogICAgQXN0QXNzaWdubWVudEV4cHJlc3Npb24gKmFzc2lnbm1lbnRfZXhwcmVz
c2lvbiA9IChBc3RBc3NpZ25tZW50RXhwcmVzc2lvbiAqKSBleHByOwoKICAgIEFzdEV4cHJlc3Np
b24gKmxlZnRfaGFuZF9zaWRlID0gYXNzaWdubWVudF9leHByZXNzaW9uIC0+IGxlZnRfaGFuZF9z
aWRlOwoKICAgIFByb2Nlc3NFeHByZXNzaW9uKGxlZnRfaGFuZF9zaWRlKTsKICAgIFByb2Nlc3NF
eHByZXNzaW9uT3JTdHJpbmdDb25zdGFudChhc3NpZ25tZW50X2V4cHJlc3Npb24gLT4gZXhwcmVz
c2lvbik7CiAgICBUeXBlU3ltYm9sICpsZWZ0X3R5cGUgPSBsZWZ0X2hhbmRfc2lkZSAtPiBUeXBl
KCksCiAgICAgICAgICAgICAgICpyaWdodF90eXBlID0gYXNzaWdubWVudF9leHByZXNzaW9uIC0+
IGV4cHJlc3Npb24gLT4gVHlwZSgpOwoKICAgIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiAtPiBzeW1i
b2wgPSBsZWZ0X3R5cGU7CgogICAgaWYgKGxlZnRfdHlwZSA9PSBjb250cm9sLm5vX3R5cGUgfHwg
cmlnaHRfdHlwZSA9PSBjb250cm9sLm5vX3R5cGUpCiAgICAgICAgcmV0dXJuOwoKICAgIGlmICgh
IGxlZnRfaGFuZF9zaWRlIC0+IEFycmF5QWNjZXNzQ2FzdCgpKSAgCiAgICB7CiAgICAgICAgTWV0
aG9kU3ltYm9sICpyZWFkX21ldGhvZCA9IF9fbnVsbCA7CiAgICAgICAgQXN0U2ltcGxlTmFtZSAq
c2ltcGxlX25hbWUgPSBsZWZ0X2hhbmRfc2lkZSAtPiBTaW1wbGVOYW1lQ2FzdCgpOwogICAgICAg
IGlmIChzaW1wbGVfbmFtZSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChzaW1wbGVfbmFtZSAt
PiByZXNvbHV0aW9uX29wdCkKICAgICAgICAgICAgICAgcmVhZF9tZXRob2QgPSBzaW1wbGVfbmFt
ZSAtPiByZXNvbHV0aW9uX29wdCAtPiBzeW1ib2wgLT4gTWV0aG9kQ2FzdCgpOwogICAgICAgIH0K
ICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBBc3RGaWVsZEFjY2VzcyAqZmllbGRf
YWNjZXNzID0gKEFzdEZpZWxkQWNjZXNzICopIGxlZnRfaGFuZF9zaWRlOwogICAgICAgICAgICBp
ZiAoZmllbGRfYWNjZXNzIC0+IHJlc29sdXRpb25fb3B0KQogICAgICAgICAgICAgICAgcmVhZF9t
ZXRob2QgPSBmaWVsZF9hY2Nlc3MgLT4gcmVzb2x1dGlvbl9vcHQgLT4gc3ltYm9sIC0+IE1ldGhv
ZENhc3QoKTsKICAgICAgICB9CgogICAgICAgIGlmIChyZWFkX21ldGhvZCkKICAgICAgICB7CiAg
ICAgICAgICAgIFZhcmlhYmxlU3ltYm9sICpzeW1ib2wgPSAoVmFyaWFibGVTeW1ib2wgKikgcmVh
ZF9tZXRob2QgLT4gYWNjZXNzZWRfbWVtYmVyOwogICAgICAgICAgICBhc3NpZ25tZW50X2V4cHJl
c3Npb24gLT4gd3JpdGVfbWV0aG9kID0gcmVhZF9tZXRob2QgLT4gY29udGFpbmluZ190eXBlIC0+
IEdldFdyaXRlQWNjZXNzTWV0aG9kKHN5bWJvbCk7CiAgICAgICAgfQogICAgfQogICAgZWxzZSAg
CiAgICB7CiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAK
ICAgICAgICBTeW1ib2xTZXQgKmV4Y2VwdGlvbl9zZXQgPSBUcnlFeGNlcHRpb25UYWJsZVN0YWNr
KCkuVG9wKCk7CiAgICAgICAgaWYgKGV4Y2VwdGlvbl9zZXQgJiYgKCEgbGVmdF90eXBlIC0+IFBy
aW1pdGl2ZSgpKSkKICAgICAgICB7CiAgICAgICAgICAgIGV4Y2VwdGlvbl9zZXQgLT4gQWRkRWxl
bWVudChjb250cm9sLlJ1bnRpbWVFeGNlcHRpb24oKSk7CiAgICAgICAgfQogICAgfQoKICAgIGlm
IChhc3NpZ25tZW50X2V4cHJlc3Npb24gLT4gYXNzaWdubWVudF90YWcgPT0gQXN0QXNzaWdubWVu
dEV4cHJlc3Npb246OlNJTVBMRV9FUVVBTCkKICAgIHsKICAgICAgICBpZiAobGVmdF90eXBlICE9
IHJpZ2h0X3R5cGUpCiAgICAgICAgewogICAgICAgICAgICBpZiAoQ2FuQXNzaWdubWVudENvbnZl
cnQobGVmdF90eXBlLCBhc3NpZ25tZW50X2V4cHJlc3Npb24gLT4gZXhwcmVzc2lvbikpCiAgICAg
ICAgICAgICAgICBhc3NpZ25tZW50X2V4cHJlc3Npb24gLT4gZXhwcmVzc2lvbiA9IENvbnZlcnRU
b1R5cGUoYXNzaWdubWVudF9leHByZXNzaW9uIC0+IGV4cHJlc3Npb24sIGxlZnRfdHlwZSk7CiAg
ICAgICAgICAgIGVsc2UgaWYgKGFzc2lnbm1lbnRfZXhwcmVzc2lvbiAtPiBleHByZXNzaW9uIC0+
IElzQ29uc3RhbnQoKSAmJgogICAgICAgICAgICAgICAgICAgICBjb250cm9sLklzU2ltcGxlSW50
ZWdlclZhbHVlVHlwZShsZWZ0X3R5cGUpICYmCiAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wu
SXNTaW1wbGVJbnRlZ2VyVmFsdWVUeXBlKGFzc2lnbm1lbnRfZXhwcmVzc2lvbiAtPiBleHByZXNz
aW9uIC0+IFR5cGUoKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChsZWZ0X3R5
cGUgPT0gY29udHJvbC5ieXRlX3R5cGUpCiAgICAgICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVy
cm9yKFNlbWFudGljRXJyb3I6OklOVkFMSURfQllURV9WQUxVRSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXNzaWdubWVudF9leHByZXNzaW9uIC0+IGV4cHJlc3Npb24gLT4g
TGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1l
bnRfZXhwcmVzc2lvbiAtPiBleHByZXNzaW9uIC0+IFJpZ2h0VG9rZW4oKSk7CiAgICAgICAgICAg
ICAgICBlbHNlIGlmIChsZWZ0X3R5cGUgPT0gY29udHJvbC5zaG9ydF90eXBlKQogICAgICAgICAg
ICAgICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpJTlZBTElEX1NIT1JUX1ZB
TFVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50X2V4cHJl
c3Npb24gLT4gZXhwcmVzc2lvbiAtPiBMZWZ0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXNzaWdubWVudF9leHByZXNzaW9uIC0+IGV4cHJlc3Npb24gLT4gUmln
aHRUb2tlbigpKTsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxlZnRfdHlwZSA9PSBjb250cm9s
LmludF90eXBlKQogICAgICAgICAgICAgICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vy
cm9yOjpJTlZBTElEX0lOVF9WQUxVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXNzaWdubWVudF9leHByZXNzaW9uIC0+IGV4cHJlc3Npb24gLT4gTGVmdFRva2VuKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiAt
PiBleHByZXNzaW9uIC0+IFJpZ2h0VG9rZW4oKSk7CiAgICAgICAgICAgICAgICBlbHNlICAKICAg
ICAgICAgICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6SU5WQUxJRF9D
SEFSQUNURVJfVkFMVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2ln
bm1lbnRfZXhwcmVzc2lvbiAtPiBleHByZXNzaW9uIC0+IExlZnRUb2tlbigpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50X2V4cHJlc3Npb24gLT4gZXhwcmVz
c2lvbiAtPiBSaWdodFRva2VuKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6
SU5DT01QQVRJQkxFX1RZUEVfRk9SX0FTU0lHTk1FTlQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhc3NpZ25tZW50X2V4cHJlc3Npb24gLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50X2V4cHJlc3Npb24gLT4gUmlnaHRUb2tlbigp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdF90eXBlIC0+IENvbnRhaW5pbmdQ
YWNrYWdlKCkgLT4gUGFja2FnZU5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnRfdHlwZSAtPiBFeHRlcm5hbE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJpZ2h0X3R5cGUgLT4gQ29udGFpbmluZ1BhY2thZ2UoKSAtPiBQYWNrYWdlTmFtZSgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRfdHlwZSAtPiBFeHRlcm5hbE5hbWUo
KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAg
CiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBpZiAo
bGVmdF90eXBlID09IGNvbnRyb2wuU3RyaW5nKCkgJiYgYXNzaWdubWVudF9leHByZXNzaW9uIC0+
IGFzc2lnbm1lbnRfdGFnID09IEFzdEFzc2lnbm1lbnRFeHByZXNzaW9uOjpQTFVTX0VRVUFMKQog
ICAgewogICAgICAgIGlmIChyaWdodF90eXBlICE9IGNvbnRyb2wuU3RyaW5nKCkpCiAgICAgICAg
ewogICAgICAgICAgICBpZiAocmlnaHRfdHlwZSA9PSBjb250cm9sLnZvaWRfdHlwZSkKICAgICAg
ICAgICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpWT0lEX1RPX1NUUklORywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50X2V4cHJlc3Npb24gLT4g
ZXhwcmVzc2lvbiAtPiBMZWZ0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhc3NpZ25tZW50X2V4cHJlc3Npb24gLT4gZXhwcmVzc2lvbiAtPiBSaWdodFRva2VuKCkpOwog
ICAgICAgICAgICBlbHNlIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiAtPiBleHByZXNzaW9uID0gQ29u
dmVydFRvVHlwZShhc3NpZ25tZW50X2V4cHJlc3Npb24gLT4gZXhwcmVzc2lvbiwgY29udHJvbC5T
dHJpbmcoKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCEgbGVm
dF90eXBlIC0+IFByaW1pdGl2ZSgpKQogICAgewogICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFu
dGljRXJyb3I6OlRZUEVfTk9UX1BSSU1JVElWRSwKICAgICAgICAgICAgICAgICAgICAgICBsZWZ0
X2hhbmRfc2lkZSAtPiBMZWZ0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICBsZWZ0X2hh
bmRfc2lkZSAtPiBSaWdodFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAgICAgbGVmdF90eXBl
IC0+IE5hbWUoKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghIHJpZ2h0X3R5cGUg
LT4gUHJpbWl0aXZlKCkpCiAgICB7CiAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJv
cjo6VFlQRV9OT1RfUFJJTUlUSVZFLAogICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRf
ZXhwcmVzc2lvbiAtPiBleHByZXNzaW9uIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAg
ICAgICAgIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiAtPiBleHByZXNzaW9uIC0+IFJpZ2h0VG9rZW4o
KSwKICAgICAgICAgICAgICAgICAgICAgICByaWdodF90eXBlIC0+IE5hbWUoKSk7CiAgICAgICAg
cmV0dXJuOwogICAgfQoKICAgIHN3aXRjaChhc3NpZ25tZW50X2V4cHJlc3Npb24gLT4gYXNzaWdu
bWVudF90YWcpCiAgICB7CiAgICAgICAgY2FzZSBBc3RBc3NpZ25tZW50RXhwcmVzc2lvbjo6UExV
U19FUVVBTDoKICAgICAgICBjYXNlIEFzdEFzc2lnbm1lbnRFeHByZXNzaW9uOjpTVEFSX0VRVUFM
OgogICAgICAgIGNhc2UgQXN0QXNzaWdubWVudEV4cHJlc3Npb246Ok1JTlVTX0VRVUFMOgogICAg
ICAgICAgICBCaW5hcnlOdW1lcmljUHJvbW90aW9uKGFzc2lnbm1lbnRfZXhwcmVzc2lvbik7CiAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQXN0QXNzaWdubWVudEV4cHJlc3Npb246OlNM
QVNIX0VRVUFMOgogICAgICAgIGNhc2UgQXN0QXNzaWdubWVudEV4cHJlc3Npb246Ok1PRF9FUVVB
TDoKICAgICAgICAgICAgQmluYXJ5TnVtZXJpY1Byb21vdGlvbihhc3NpZ25tZW50X2V4cHJlc3Np
b24pOwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBBc3RFeHByZXNzaW9uICpyaWdodF9l
eHByZXNzaW9uID0gYXNzaWdubWVudF9leHByZXNzaW9uIC0+IGV4cHJlc3Npb247CiAgICAgICAg
ICAgICAgICBpZiAocmlnaHRfZXhwcmVzc2lvbiAtPiBJc0NvbnN0YW50KCkpCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
IGlmIChjb250cm9sLklzSW50ZWdyYWwobGVmdF90eXBlKSAmJgogICAgICAgICAgICAgICAgICAg
ICAgICAocmlnaHRfZXhwcmVzc2lvbiAtPiBUeXBlKCkgPT0gY29udHJvbC5pbnRfdHlwZSAmJgog
ICAgICAgICAgICAgICAgICAgICAgICAgRFlOQU1JQ19DQVNUPEludExpdGVyYWxWYWx1ZSAqLCBM
aXRlcmFsVmFsdWUgKj4KICAgICAgICAgICAgICAgICAgICAgICAgIChyaWdodF9leHByZXNzaW9u
IC0+IHZhbHVlKSAtPiB2YWx1ZSA9PSAwKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAocmln
aHRfZXhwcmVzc2lvbiAtPiBUeXBlKCkgPT0gY29udHJvbC5sb25nX3R5cGUgJiYKICAgICAgICAg
ICAgICAgICAgICAgICAgIERZTkFNSUNfQ0FTVDxMb25nTGl0ZXJhbFZhbHVlICosIExpdGVyYWxW
YWx1ZSAqPgogICAgICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0X2V4cHJlc3Npb24gLT4gdmFs
dWUpIC0+IHZhbHVlID09IDApKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6WkVST19ESVZJREVfQ0FVVElP
TiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudF9leHBy
ZXNzaW9uIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhc3NpZ25tZW50X2V4cHJlc3Npb24gLT4gUmlnaHRUb2tlbigpKTsKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgY2FzZSBBc3RBc3NpZ25tZW50RXhwcmVzc2lvbjo6TEVGVF9TSElGVF9FUVVB
TDoKICAgICAgICBjYXNlIEFzdEFzc2lnbm1lbnRFeHByZXNzaW9uOjpSSUdIVF9TSElGVF9FUVVB
TDoKICAgICAgICBjYXNlIEFzdEFzc2lnbm1lbnRFeHByZXNzaW9uOjpVTlNJR05FRF9SSUdIVF9T
SElGVF9FUVVBTDoKICAgICAgICAgICAgIGlmICghIGNvbnRyb2wuSXNJbnRlZ3JhbChsZWZ0X3R5
cGUpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFJlcG9ydFNlbUVycm9yKFNlbWFu
dGljRXJyb3I6OlRZUEVfTk9UX0lOVEVHUkFMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZnRfaGFuZF9zaWRlIC0+IExlZnRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxlZnRfaGFuZF9zaWRlIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsZWZ0X3R5cGUgLT4gTmFtZSgpKTsKICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICBpZiAoISBjb250cm9sLklzSW50ZWdyYWwocmlnaHRfdHlwZSkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJvcjo6VFlQ
RV9OT1RfSU5URUdSQUwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVu
dF9leHByZXNzaW9uIC0+IGV4cHJlc3Npb24gLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXNzaWdubWVudF9leHByZXNzaW9uIC0+IGV4cHJlc3Npb24gLT4g
UmlnaHRUb2tlbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0X3R5cGUg
LT4gTmFtZSgpKTsKICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICBhc3NpZ25tZW50X2V4cHJl
c3Npb24gLT4gbGVmdF9oYW5kX3NpZGUgPSBQcm9tb3RlVW5hcnlOdW1lcmljRXhwcmVzc2lvbihs
ZWZ0X2hhbmRfc2lkZSk7CiAgICAgICAgICAgICBhc3NpZ25tZW50X2V4cHJlc3Npb24gLT4gZXhw
cmVzc2lvbiA9IFByb21vdGVVbmFyeU51bWVyaWNFeHByZXNzaW9uKGFzc2lnbm1lbnRfZXhwcmVz
c2lvbiAtPiBleHByZXNzaW9uKTsKICAgICAgICAgICAgIGlmIChhc3NpZ25tZW50X2V4cHJlc3Np
b24gLT4gZXhwcmVzc2lvbiAtPiBUeXBlKCkgPT0gY29udHJvbC5sb25nX3R5cGUpCiAgICAgICAg
ICAgICAgICAgYXNzaWdubWVudF9leHByZXNzaW9uIC0+IGV4cHJlc3Npb24gPSBDb252ZXJ0VG9U
eXBlKGFzc2lnbm1lbnRfZXhwcmVzc2lvbiAtPiBleHByZXNzaW9uLCBjb250cm9sLmludF90eXBl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQXN0QXNzaWdubWVudEV4cHJlc3Np
b246OkFORF9FUVVBTDoKICAgICAgICBjYXNlIEFzdEFzc2lnbm1lbnRFeHByZXNzaW9uOjpYT1Jf
RVFVQUw6CiAgICAgICAgY2FzZSBBc3RBc3NpZ25tZW50RXhwcmVzc2lvbjo6SU9SX0VRVUFMOgog
ICAgICAgICAgICAgaWYgKGxlZnRfdHlwZSA9PSBjb250cm9sLmJvb2xlYW5fdHlwZSkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAocmlnaHRfdHlwZSAhPSBjb250cm9sLmJvb2xl
YW5fdHlwZSkKICAgICAgICAgICAgICAgICAgICAgUmVwb3J0U2VtRXJyb3IoU2VtYW50aWNFcnJv
cjo6VFlQRV9OT1RfQk9PTEVBTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXNzaWdubWVudF9leHByZXNzaW9uIC0+IGV4cHJlc3Npb24gLT4gTGVmdFRva2VuKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiAtPiBl
eHByZXNzaW9uIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmlnaHRfdHlwZSAtPiBOYW1lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmICghIGNvbnRyb2wuSXNJbnRl
Z3JhbChsZWZ0X3R5cGUpKQogICAgICAgICAgICAgICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1h
bnRpY0Vycm9yOjpUWVBFX05PVF9JTlRFR1JBTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdF9oYW5kX3NpZGUgLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxlZnRfaGFuZF9zaWRlIC0+IFJpZ2h0VG9rZW4oKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdF90eXBlIC0+IE5hbWUoKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKCEgY29udHJvbC5Jc0ludGVncmFsKHJpZ2h0X3R5cGUpKQogICAgICAg
ICAgICAgICAgICAgICBSZXBvcnRTZW1FcnJvcihTZW1hbnRpY0Vycm9yOjpUWVBFX05PVF9JTlRF
R1JBTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudF9leHBy
ZXNzaW9uIC0+IGV4cHJlc3Npb24gLT4gTGVmdFRva2VuKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiAtPiBleHByZXNzaW9uIC0+IFJp
Z2h0VG9rZW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRfdHlw
ZSAtPiBOYW1lKCkpOwogICAgICAgICAgICAgICAgIEJpbmFyeU51bWVyaWNQcm9tb3Rpb24oYXNz
aWdubWVudF9leHByZXNzaW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggZmFsc2Ug
KSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImZhbHNlIiAsICIuLi8uLi9qaWtlcy9zcmMvZXhwci5j
cHAiLCA3MTU5LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwogICAgICAgICAgICBicmVh
azsKICAgIH0KCiAgICByZXR1cm47Cn0KCgoKCgo=


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2001-09-11 23:16 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-09-11 23:16 c++/4305: optimizer ICE on seemingly unrelated code changes jikes

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).